From 4a37da35939b3c1bfc5b79b6ed92042af1371ebe Mon Sep 17 00:00:00 2001 From: amammad Date: Sun, 25 Jun 2023 20:04:50 +1000 Subject: [PATCH 001/334] V1 --- .../CWE/CWE-409-DecompressionBomb/Bombs.ql | 69 +++++++++ .../DecompressionBomb.qhelp | 35 +++++ .../CWE-409-DecompressionBomb/example_bad.cpp | 30 ++++ .../example_good.cpp | 38 +++++ .../DecompressionBomb.ql | 121 +++++++++++++++ .../DecompressionBombs.qhelp | 26 ++++ .../RemoteFlowSource.qll | 62 ++++++++ .../DecompressionBombs.cs | 140 ++++++++++++++++++ .../DecompressionBombs.qlref | 1 + 9 files changed, 522 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp create mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql create mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp create mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll create mode 100644 csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs create mode 100644 csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql new file mode 100644 index 00000000000..2e595bb11b8 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql @@ -0,0 +1,69 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision medium + * @id cpp/user-controlled-file-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * The `gzopen` function, which can perform command substitution. + */ +private class GzopenFunction extends Function { + GzopenFunction() { hasGlobalName("gzopen") } +} + +/** + * The `gzread` function, which can perform command substitution. + */ +private class GzreadFunction extends Function { + GzreadFunction() { hasGlobalName("gzread") } +} + +module ZlibTaintConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | + fc.getArgument(0) = source.asExpr() + ) + } + + predicate isSink(DataFlow::Node sink) { + exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | + fc.getArgument(0) = sink.asExpr() and + not sanitizer(fc) + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } +} + +predicate sanitizer(FunctionCall fc) { + exists(Expr e | fc.getTarget() instanceof GzreadFunction | + // a RelationalOperation which isn't compared with a Literal that using for end of read + TaintTracking::localExprTaint(fc, e.(RelationalOperation).getAChild*()) and + not e.getAChild*().(Literal).getValue() = ["0", "1", "-1"] + ) +} + +module ZlibTaint = TaintTracking::Global; + +import ZlibTaint::PathGraph + +from ZlibTaint::PathNode source, ZlibTaint::PathNode sink +where ZlibTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp new file mode 100644 index 00000000000..44256d36ea9 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp @@ -0,0 +1,35 @@ + + + +

Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

+

Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

+ +
+ + +

When you want to decompress a user-provided compressed file you must be careful about the decompression ratio or read these files within a loop byte by byte to be able to manage the decompressed size in each cycle of the loop.

+ +
+ + +

+Reading uncompressed Gzip file within a loop and check for a threshold size in each cycle. +

+ + +

+An Unsafe Approach can be this example which we don't check for uncompressed size. +

+ + +
+ + +
  • +A great research to gain more impact by this kind of attacks +
  • + +
    +
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp new file mode 100644 index 00000000000..843b200231a --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp @@ -0,0 +1,30 @@ +#include +#include +#include "zlib.h" +int UnsafeRead() { + std::cout << "enter compressed file name!\n" << std::endl; + char fileName[100]; + std::cin >> fileName; + gzFile inFileZ = gzopen(fileName, "rb"); + if (inFileZ == nullptr) { + printf("Error: Failed to gzopen %s\n", fileName); + exit(0); + } + unsigned char unzipBuffer[8192]; + unsigned int unzippedBytes; + std::vector unzippedData; + while (true) { + unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); + if (unzippedBytes > 0) { + unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); + } else { + break; + } + } + + for ( auto &&i: unzippedData) + std::cout << i; + gzclose(inFileZ); + + return 0; +} \ No newline at end of file diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp new file mode 100644 index 00000000000..3d26569bdb4 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp @@ -0,0 +1,38 @@ +#include +#include +#include "zlib.h" +int SafeRead() { + std::cout << "enter compressed file name!\n" << std::endl; + char fileName[100]; + std::cin >> fileName; + gzFile inFileZ = gzopen(fileName, "rb"); + if (inFileZ == nullptr) { + printf("Error: Failed to gzopen %s\n", fileName); + exit(0); + } + unsigned char unzipBuffer[8192]; + unsigned int unzippedBytes; + uint totalRead = 0; + std::vector unzippedData; + while (true) { + unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); + totalRead += unzippedBytes; + if (unzippedBytes > 0) { + unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); + if (totalRead > 1024 * 1024 * 4) { + std::cout << "Bombs!" << totalRead; + exit(1); + } else { + std::cout << "not Bomb yet!!" << totalRead << std::endl; + } + } else { + break; + } + } + + for (auto &&i: unzippedData) + std::cout << i; + gzclose(inFileZ); + + return 0; +} \ No newline at end of file diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql new file mode 100644 index 00000000000..72f81731800 --- /dev/null +++ b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql @@ -0,0 +1,121 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision medium + * @id cs/user-controlled-file-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import csharp +import semmle.code.csharp.security.dataflow.flowsources.Remote + +/** + * A data flow source for unsafe Decompression extraction. + */ +abstract class DecompressionSource extends DataFlow::Node { } + +class ZipOpenReadSource extends DecompressionSource { + ZipOpenReadSource() { + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFile", ["OpenRead", "Open"]) and + this.asExpr() = mc.getArgument(0) and + not mc.getArgument(0).getType().isConst() + ) + } +} + +/** A path argument to a call to the `ZipArchive` constructor call. */ +class ZipArchiveArgSource extends DecompressionSource { + ZipArchiveArgSource() { + exists(ObjectCreation oc | + oc.getTarget().getDeclaringType().hasQualifiedName("System.IO.Compression", "ZipArchive") + | + this.asExpr() = oc.getArgument(0) + ) + } +} + +/** + * A data flow sink for unsafe zip extraction. + */ +abstract class DecompressionSink extends DataFlow::Node { } + +/** A Caller of the `ExtractToFile` method. */ +class ExtractToFileCallSink extends DecompressionSink { + ExtractToFileCallSink() { + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFileExtensions", "ExtractToFile") and + this.asExpr() = mc.getArgumentForName("source") + ) + } +} + +/** A Qualifier of the `Open()` method. */ +class OpenCallSink extends DecompressionSink { + OpenCallSink() { + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipArchiveEntry", "Open") and + this.asExpr() = mc.getQualifier() + ) + } +} + +/** A Call to the `GZipStreamSink` first arugument of Constructor Call . */ +class GZipStreamSink extends DecompressionSink, DecompressionSource { + GZipStreamSink() { + exists(Constructor mc | + mc.getDeclaringType().hasQualifiedName("System.IO.Compression", "GZipStream") and + this.asExpr() = mc.getACall().getArgument(0) + ) + } +} + +/** + * A taint tracking configuration for Decompression Bomb. + */ +private module DecompressionBombConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof DecompressionSource + or + source instanceof RemoteFlowSource + } + + predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionSink } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // var node2 = new ZipArchive(node1, ZipArchiveMode.Read); + exists(ObjectCreation oc | + oc.getTarget().getDeclaringType().hasQualifiedName("System.IO.Compression", "ZipArchive") and + node2.asExpr() = oc and + node1.asExpr() = oc.getArgumentForName("stream") + ) + or + // var node2 = node1.ExtractToFile("./output.txt", true) + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFileExtensions", "ExtractToFile") and + node2.asExpr() = mc and + node1.asExpr() = mc.getArgumentForName("source") + ) + or + // var node2 = node1.OpenReadStream() + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("Microsoft.AspNetCore.Http", "IFormFile", "OpenReadStream") and + node2.asExpr() = mc and + node1.asExpr() = mc.getQualifier() + ) + } +} + +module DecompressionBomb = TaintTracking::Global; + +import DecompressionBomb::PathGraph + +from DecompressionBomb::PathNode source, DecompressionBomb::PathNode sink +where DecompressionBomb::flowPath(source, sink) +select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp new file mode 100644 index 00000000000..c3c874cddf7 --- /dev/null +++ b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp @@ -0,0 +1,26 @@ + + + +

    Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

    +

    Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

    + +
    + + +

    When you want to decompress a user-provided compressed file you must be careful about the decompression ratio or read these files within a loop byte by byte to be able to manage the decompressed size in each cycle of the loop.

    + +
    + + +

    A good Blog Post about decompression bombs and recommended method is already written by Gérald Barré in this blog post

    + + + +
  • +A great research to gain more impact by this kind of attack +
  • + +
    +
    diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll new file mode 100644 index 00000000000..f849ab3f4a1 --- /dev/null +++ b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll @@ -0,0 +1,62 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.Remote + +/** A data flow source of remote user input by Form File (ASP.NET unvalidated request data). */ +class FormFile extends AspNetRemoteFlowSource { + FormFile() { + exists(MethodCall mc | + mc.getTarget() + .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], + "IFormFile", ["OpenReadStream", "ContentType", "ContentDisposition", "Name", "FileName"]) and + this.asExpr() = mc + ) + or + exists(MethodCall mc | + mc.getTarget() + .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], + "IFormFile", "CopyTo") and + this.asParameter() = mc.getTarget().getParameter(0) + ) + or + exists(Property fa | + fa.getDeclaringType() + .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], + "IFormFile") and + fa.hasName(["ContentType", "ContentDisposition", "Name", "FileName"]) and + this.asExpr() = fa.getAnAccess() + ) + } + + override string getSourceType() { + result = "ASP.NET unvalidated request data from multipart request" + } +} + +/** A data flow source of remote user input by Form (ASP.NET unvalidated request data). */ +class FormCollection extends AspNetRemoteFlowSource { + FormCollection() { + exists(Property fa | + fa.getDeclaringType().hasQualifiedName("Microsoft.AspNetCore.Http", "IFormCollection") and + fa.hasName("Keys") and + this.asExpr() = fa.getAnAccess() + ) + } + + override string getSourceType() { + result = "ASP.NET unvalidated request data from multipart request Form Keys" + } +} + +/** A data flow source of remote user input by Headers (ASP.NET unvalidated request data). */ +class HeaderDictionary extends AspNetRemoteFlowSource { + HeaderDictionary() { + exists(Property fa | + fa.getDeclaringType().hasQualifiedName("Microsoft.AspNetCore.Http", "IHeaderDictionary") and + this.asExpr() = fa.getAnAccess() + ) + } + + override string getSourceType() { + result = "ASP.NET unvalidated request data from Headers of request" + } +} diff --git a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs new file mode 100644 index 00000000000..b73eac9bade --- /dev/null +++ b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs @@ -0,0 +1,140 @@ +using System.IO.Compression; +using Microsoft.AspNetCore.Mvc; + +// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 + +namespace MultipartFormWebAPITest.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class ZipFile1Controller : ControllerBase + { + // POST api/ + [HttpPost] + public string Post(List files) + { + if (!Request.ContentType!.StartsWith("multipart/form-data")) + return "400"; + if (files.Count == 0) + return "400"; + foreach (var formFile in files) + { + using var readStream = formFile.OpenReadStream(); + if (readStream.Length == 0) return "400"; + ZipHelpers.Bomb3(readStream); + ZipHelpers.Bomb2(formFile.FileName); + ZipHelpers.Bomb1(formFile.FileName); + } + var tmp = Request.Form["aa"]; + var tmp2 = Request.Form.Keys; + // when we don't have only one file as body + ZipHelpers.Bomb3(Request.Body); + ZipHelpers.Bomb2(Request.Query["param1"].ToString()); + var headers = Request.Headers; + ZipHelpers.Bomb1(headers.ETag); + return "200"; + } + } +} + +internal static class ZipHelpers +{ + public static void Bomb3(Stream compressedFileStream) + { + // using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open); + // using FileStream outputFileStream = File.Create(DecompressedFileName); + using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress); + using var ms = new MemoryStream(); + decompressor.CopyTo(ms); + } + + public static void Bomb2(string filename) + { + using var zipToOpen = new FileStream(filename, FileMode.Open); + using var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read); + foreach (var entry in archive.Entries) entry.ExtractToFile("./output.txt", true); // Sensitive + } + + public static void Bomb1(string filename) + { + const long maxLength = 10 * 1024 * 1024; // 10MB + // var filename = "/home/am/0_WorkDir/Payloads/Bombs/bombs-bones-codes-BH-2016/archives/evil-headers/10GB.zip"; + using var zipFile = ZipFile.OpenRead(filename); + // Quickly check the value from the zip header + var declaredSize = zipFile.Entries.Sum(entry => entry.Length); + if (declaredSize > maxLength) + throw new Exception("Archive is too big"); + foreach (var entry in zipFile.Entries) + { + using var entryStream = entry.Open(); + // Use MaxLengthStream to ensure we don't read more than the declared length + using var maxLengthStream = new MaxLengthStream(entryStream, entry.Length); + // Be sure to use the maxLengthSteam variable to read the content of the entry, not entryStream + using var ms = new MemoryStream(); + maxLengthStream.CopyTo(ms); + } + } +} + +internal sealed class MaxLengthStream : Stream +{ + private readonly Stream _stream; + private long _length; + + public MaxLengthStream(Stream stream, long maxLength) + { + _stream = stream ?? throw new ArgumentNullException(nameof(stream)); + MaxLength = maxLength; + } + + private long MaxLength { get; } + + public override bool CanRead => _stream.CanRead; + public override bool CanSeek => false; + public override bool CanWrite => false; + public override long Length => _stream.Length; + + public override long Position + { + get => _stream.Position; + set => throw new NotSupportedException(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + var result = _stream.Read(buffer, offset, count); + _length += result; + if (_length > MaxLength) + throw new Exception("Stream is larger than the maximum allowed size"); + + return result; + } + + // TODO ReadAsync + + public override void Flush() + { + throw new NotSupportedException(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + + protected override void Dispose(bool disposing) + { + _stream.Dispose(); + base.Dispose(disposing); + } +} \ No newline at end of file diff --git a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref new file mode 100644 index 00000000000..19b7ebbb843 --- /dev/null +++ b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref @@ -0,0 +1 @@ +experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql \ No newline at end of file From 430375e2f01859e481de54860b3eadd11c614e00 Mon Sep 17 00:00:00 2001 From: amammad Date: Sun, 25 Jun 2023 20:28:45 +1000 Subject: [PATCH 002/334] fix a commit mistake --- .../DecompressionBomb.ql | 121 --------------- .../DecompressionBombs.qhelp | 26 ---- .../RemoteFlowSource.qll | 62 -------- .../DecompressionBombs.cs | 140 ------------------ .../DecompressionBombs.qlref | 1 - 5 files changed, 350 deletions(-) delete mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql delete mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp delete mode 100644 csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll delete mode 100644 csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs delete mode 100644 csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql deleted file mode 100644 index 72f81731800..00000000000 --- a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision medium - * @id cs/user-controlled-file-decompression - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import csharp -import semmle.code.csharp.security.dataflow.flowsources.Remote - -/** - * A data flow source for unsafe Decompression extraction. - */ -abstract class DecompressionSource extends DataFlow::Node { } - -class ZipOpenReadSource extends DecompressionSource { - ZipOpenReadSource() { - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFile", ["OpenRead", "Open"]) and - this.asExpr() = mc.getArgument(0) and - not mc.getArgument(0).getType().isConst() - ) - } -} - -/** A path argument to a call to the `ZipArchive` constructor call. */ -class ZipArchiveArgSource extends DecompressionSource { - ZipArchiveArgSource() { - exists(ObjectCreation oc | - oc.getTarget().getDeclaringType().hasQualifiedName("System.IO.Compression", "ZipArchive") - | - this.asExpr() = oc.getArgument(0) - ) - } -} - -/** - * A data flow sink for unsafe zip extraction. - */ -abstract class DecompressionSink extends DataFlow::Node { } - -/** A Caller of the `ExtractToFile` method. */ -class ExtractToFileCallSink extends DecompressionSink { - ExtractToFileCallSink() { - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFileExtensions", "ExtractToFile") and - this.asExpr() = mc.getArgumentForName("source") - ) - } -} - -/** A Qualifier of the `Open()` method. */ -class OpenCallSink extends DecompressionSink { - OpenCallSink() { - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipArchiveEntry", "Open") and - this.asExpr() = mc.getQualifier() - ) - } -} - -/** A Call to the `GZipStreamSink` first arugument of Constructor Call . */ -class GZipStreamSink extends DecompressionSink, DecompressionSource { - GZipStreamSink() { - exists(Constructor mc | - mc.getDeclaringType().hasQualifiedName("System.IO.Compression", "GZipStream") and - this.asExpr() = mc.getACall().getArgument(0) - ) - } -} - -/** - * A taint tracking configuration for Decompression Bomb. - */ -private module DecompressionBombConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof DecompressionSource - or - source instanceof RemoteFlowSource - } - - predicate isSink(DataFlow::Node sink) { sink instanceof DecompressionSink } - - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - // var node2 = new ZipArchive(node1, ZipArchiveMode.Read); - exists(ObjectCreation oc | - oc.getTarget().getDeclaringType().hasQualifiedName("System.IO.Compression", "ZipArchive") and - node2.asExpr() = oc and - node1.asExpr() = oc.getArgumentForName("stream") - ) - or - // var node2 = node1.ExtractToFile("./output.txt", true) - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("System.IO.Compression", "ZipFileExtensions", "ExtractToFile") and - node2.asExpr() = mc and - node1.asExpr() = mc.getArgumentForName("source") - ) - or - // var node2 = node1.OpenReadStream() - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("Microsoft.AspNetCore.Http", "IFormFile", "OpenReadStream") and - node2.asExpr() = mc and - node1.asExpr() = mc.getQualifier() - ) - } -} - -module DecompressionBomb = TaintTracking::Global; - -import DecompressionBomb::PathGraph - -from DecompressionBomb::PathNode source, DecompressionBomb::PathNode sink -where DecompressionBomb::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp deleted file mode 100644 index c3c874cddf7..00000000000 --- a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qhelp +++ /dev/null @@ -1,26 +0,0 @@ - - - -

    Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

    -

    Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

    - -
    - - -

    When you want to decompress a user-provided compressed file you must be careful about the decompression ratio or read these files within a loop byte by byte to be able to manage the decompressed size in each cycle of the loop.

    - -
    - - -

    A good Blog Post about decompression bombs and recommended method is already written by Gérald Barré in this blog post

    - - - -
  • -A great research to gain more impact by this kind of attack -
  • - -
    -
    diff --git a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll b/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll deleted file mode 100644 index f849ab3f4a1..00000000000 --- a/csharp/ql/src/experimental/CWE-502-DecompressionBombs/RemoteFlowSource.qll +++ /dev/null @@ -1,62 +0,0 @@ -import csharp -import semmle.code.csharp.security.dataflow.flowsources.Remote - -/** A data flow source of remote user input by Form File (ASP.NET unvalidated request data). */ -class FormFile extends AspNetRemoteFlowSource { - FormFile() { - exists(MethodCall mc | - mc.getTarget() - .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], - "IFormFile", ["OpenReadStream", "ContentType", "ContentDisposition", "Name", "FileName"]) and - this.asExpr() = mc - ) - or - exists(MethodCall mc | - mc.getTarget() - .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], - "IFormFile", "CopyTo") and - this.asParameter() = mc.getTarget().getParameter(0) - ) - or - exists(Property fa | - fa.getDeclaringType() - .hasQualifiedName(["Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Http.Features"], - "IFormFile") and - fa.hasName(["ContentType", "ContentDisposition", "Name", "FileName"]) and - this.asExpr() = fa.getAnAccess() - ) - } - - override string getSourceType() { - result = "ASP.NET unvalidated request data from multipart request" - } -} - -/** A data flow source of remote user input by Form (ASP.NET unvalidated request data). */ -class FormCollection extends AspNetRemoteFlowSource { - FormCollection() { - exists(Property fa | - fa.getDeclaringType().hasQualifiedName("Microsoft.AspNetCore.Http", "IFormCollection") and - fa.hasName("Keys") and - this.asExpr() = fa.getAnAccess() - ) - } - - override string getSourceType() { - result = "ASP.NET unvalidated request data from multipart request Form Keys" - } -} - -/** A data flow source of remote user input by Headers (ASP.NET unvalidated request data). */ -class HeaderDictionary extends AspNetRemoteFlowSource { - HeaderDictionary() { - exists(Property fa | - fa.getDeclaringType().hasQualifiedName("Microsoft.AspNetCore.Http", "IHeaderDictionary") and - this.asExpr() = fa.getAnAccess() - ) - } - - override string getSourceType() { - result = "ASP.NET unvalidated request data from Headers of request" - } -} diff --git a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs deleted file mode 100644 index b73eac9bade..00000000000 --- a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System.IO.Compression; -using Microsoft.AspNetCore.Mvc; - -// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace MultipartFormWebAPITest.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class ZipFile1Controller : ControllerBase - { - // POST api/ - [HttpPost] - public string Post(List files) - { - if (!Request.ContentType!.StartsWith("multipart/form-data")) - return "400"; - if (files.Count == 0) - return "400"; - foreach (var formFile in files) - { - using var readStream = formFile.OpenReadStream(); - if (readStream.Length == 0) return "400"; - ZipHelpers.Bomb3(readStream); - ZipHelpers.Bomb2(formFile.FileName); - ZipHelpers.Bomb1(formFile.FileName); - } - var tmp = Request.Form["aa"]; - var tmp2 = Request.Form.Keys; - // when we don't have only one file as body - ZipHelpers.Bomb3(Request.Body); - ZipHelpers.Bomb2(Request.Query["param1"].ToString()); - var headers = Request.Headers; - ZipHelpers.Bomb1(headers.ETag); - return "200"; - } - } -} - -internal static class ZipHelpers -{ - public static void Bomb3(Stream compressedFileStream) - { - // using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open); - // using FileStream outputFileStream = File.Create(DecompressedFileName); - using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress); - using var ms = new MemoryStream(); - decompressor.CopyTo(ms); - } - - public static void Bomb2(string filename) - { - using var zipToOpen = new FileStream(filename, FileMode.Open); - using var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read); - foreach (var entry in archive.Entries) entry.ExtractToFile("./output.txt", true); // Sensitive - } - - public static void Bomb1(string filename) - { - const long maxLength = 10 * 1024 * 1024; // 10MB - // var filename = "/home/am/0_WorkDir/Payloads/Bombs/bombs-bones-codes-BH-2016/archives/evil-headers/10GB.zip"; - using var zipFile = ZipFile.OpenRead(filename); - // Quickly check the value from the zip header - var declaredSize = zipFile.Entries.Sum(entry => entry.Length); - if (declaredSize > maxLength) - throw new Exception("Archive is too big"); - foreach (var entry in zipFile.Entries) - { - using var entryStream = entry.Open(); - // Use MaxLengthStream to ensure we don't read more than the declared length - using var maxLengthStream = new MaxLengthStream(entryStream, entry.Length); - // Be sure to use the maxLengthSteam variable to read the content of the entry, not entryStream - using var ms = new MemoryStream(); - maxLengthStream.CopyTo(ms); - } - } -} - -internal sealed class MaxLengthStream : Stream -{ - private readonly Stream _stream; - private long _length; - - public MaxLengthStream(Stream stream, long maxLength) - { - _stream = stream ?? throw new ArgumentNullException(nameof(stream)); - MaxLength = maxLength; - } - - private long MaxLength { get; } - - public override bool CanRead => _stream.CanRead; - public override bool CanSeek => false; - public override bool CanWrite => false; - public override long Length => _stream.Length; - - public override long Position - { - get => _stream.Position; - set => throw new NotSupportedException(); - } - - public override int Read(byte[] buffer, int offset, int count) - { - var result = _stream.Read(buffer, offset, count); - _length += result; - if (_length > MaxLength) - throw new Exception("Stream is larger than the maximum allowed size"); - - return result; - } - - // TODO ReadAsync - - public override void Flush() - { - throw new NotSupportedException(); - } - - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException(); - } - - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - public override void Write(byte[] buffer, int offset, int count) - { - throw new NotSupportedException(); - } - - protected override void Dispose(bool disposing) - { - _stream.Dispose(); - base.Dispose(disposing); - } -} \ No newline at end of file diff --git a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref b/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref deleted file mode 100644 index 19b7ebbb843..00000000000 --- a/csharp/ql/test/experimental/CWE-502-DecompressionBombs/DecompressionBombs.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-502-DecompressionBombs/DecompressionBomb.ql \ No newline at end of file From ae98510f77671bb55e1a56f3a28b7acba4fb8205 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 00:21:55 +1000 Subject: [PATCH 003/334] add more source and sinks and sanitizers --- .../CWE/CWE-409-DecompressionBomb/Bombs.ql | 69 --------- .../DecompressionBombsGzopen.ql | 139 ++++++++++++++++++ .../DecompressionBombsInflator.ql | 56 +++++++ .../DecompressionBombsUncompress.ql | 56 +++++++ 4 files changed, 251 insertions(+), 69 deletions(-) delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql deleted file mode 100644 index 2e595bb11b8..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bombs.ql +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision medium - * @id cpp/user-controlled-file-decompression - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * The `gzopen` function, which can perform command substitution. - */ -private class GzopenFunction extends Function { - GzopenFunction() { hasGlobalName("gzopen") } -} - -/** - * The `gzread` function, which can perform command substitution. - */ -private class GzreadFunction extends Function { - GzreadFunction() { hasGlobalName("gzread") } -} - -module ZlibTaintConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | - fc.getArgument(0) = source.asExpr() - ) - } - - predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | - fc.getArgument(0) = sink.asExpr() and - not sanitizer(fc) - ) - } - - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - } -} - -predicate sanitizer(FunctionCall fc) { - exists(Expr e | fc.getTarget() instanceof GzreadFunction | - // a RelationalOperation which isn't compared with a Literal that using for end of read - TaintTracking::localExprTaint(fc, e.(RelationalOperation).getAChild*()) and - not e.getAChild*().(Literal).getValue() = ["0", "1", "-1"] - ) -} - -module ZlibTaint = TaintTracking::Global; - -import ZlibTaint::PathGraph - -from ZlibTaint::PathNode source, ZlibTaint::PathNode sink -where ZlibTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql new file mode 100644 index 00000000000..644841af23e --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql @@ -0,0 +1,139 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression1 + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A gzFile Variable as a Flow source + */ +private class GzFileVar extends VariableAccess { + GzFileVar() { this.getType().hasName("gzFile") } +} + +/** + * The `gzopen` function as a Flow source + */ +private class GzopenFunction extends Function { + GzopenFunction() { hasGlobalName("gzopen") } +} + +/** + * The `gzdopen` function as a Flow source + */ +private class GzdopenFunction extends Function { + GzdopenFunction() { hasGlobalName("gzdopen") } +} + +/** + * The `gzfread` function is used in Flow sink + */ +private class GzfreadFunction extends Function { + GzfreadFunction() { hasGlobalName("gzfread") } +} + +/** + * The `gzread` function is used in Flow sink + */ +private class GzreadFunction extends Function { + GzreadFunction() { hasGlobalName("gzread") } +} + +module ZlibTaintConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // gzopen(const char *path, const char *mode); + exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | + fc.getArgument(0) = source.asExpr() and + // arg 0 can be a path string whichwe must do following check + not fc.getArgument(0).isConstant() + ) + or + //gzdopen(int fd, const char *mode); + // IDK whether it is good to use all file decriptors function returns as source or not + // because we can do more sanitization from fd function sources + exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | + fc.getArgument(0) = source.asExpr() + ) + or + source.asExpr() instanceof GzFileVar + } + + predicate isSink(DataFlow::Node sink) { + // gzread(gzFile file, voidp buf, unsigned len)); + exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | + fc.getArgument(0) = sink.asExpr() and + not sanitizer(fc) + // TODO: and not sanitizer2(fc.getArgument(2)) + ) + or + // gzfread((voidp buf, z_size_t size, z_size_t nitems, gzFile file)); + exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | + sink.asExpr() = fc.getArgument(3) + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // gzopen(const char *path, const char *mode); + // gzdopen(int fd, const char *mode); + exists(FunctionCall fc | + fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction + | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + or + // gzread(gzFile file, voidp buf, unsigned len); + exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) + ) + or + // gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file); + exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | + node1.asExpr() = fc.getArgument(3) and + node2.asExpr() = fc.getArgument(0) + ) + } +} + +predicate sanitizer(FunctionCall fc) { + exists(Expr e | + // a RelationalOperation which isn't compared with a Literal that using for end of read + TaintTracking::localExprTaint(fc, e.(RelationalOperation).getAChild*()) and + not e.getAChild*().(Literal).getValue() = ["0", "1", "-1"] + ) +} + +// TODO: +// predicate sanitizer2(Expr arg) { +// exists(Expr e | +// // a RelationalOperation which isn't compared with a Literal that using for end of read +// TaintTracking::localExprTaint(arg, e.(RelationalOperation).getAChild*()) +// ) +// } +// predicate test(FunctionCall fc, Expr sink) { +// exists( | fc.getTarget() instanceof GzreadFunction | +// // a RelationalOperation which isn't compared with a Literal that using for end of read +// TaintTracking::localExprTaint(fc.getArgument(2).(VariableAccess), sink) +// ) and +// sink.getFile().getLocation().toString().matches("%main.cpp%") +// } +module ZlibTaint = TaintTracking::Global; + +import ZlibTaint::PathGraph + +from ZlibTaint::PathNode source, ZlibTaint::PathNode sink +where ZlibTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql new file mode 100644 index 00000000000..541c23c58ec --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql @@ -0,0 +1,56 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression2 + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A z_stream Variable as a Flow source + */ +private class ZStreamVar extends VariableAccess { + ZStreamVar() { this.getType().hasName("z_stream") } +} + +/** + * The `inflate`/`inflateSync` function is used in Flow sink + */ +private class DeflateFunction extends Function { + DeflateFunction() { hasGlobalName(["inflate", "inflateSync"]) } +} + +module ZlibTaintConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source.asExpr() instanceof ZStreamVar } + + predicate isSink(DataFlow::Node sink) { + exists(FunctionCall fc | fc.getTarget() instanceof DeflateFunction | + fc.getArgument(0) = sink.asExpr() + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() instanceof DeflateFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } +} + +module ZlibTaint = TaintTracking::Global; + +import ZlibTaint::PathGraph + +from ZlibTaint::PathNode source, ZlibTaint::PathNode sink +where ZlibTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql new file mode 100644 index 00000000000..09327616fd9 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql @@ -0,0 +1,56 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression3 + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A Bytef Variable as a Flow source + */ +private class BytefVar extends VariableAccess { + BytefVar() { this.getType().hasName("Bytef") } +} + +/** + * The `uncompress`/`uncompress2` function is used in Flow sink + */ +private class UncompressFunction extends Function { + UncompressFunction() { hasGlobalName(["uncompress", "uncompress2"]) } +} + +module ZlibTaintConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source.asExpr() instanceof BytefVar } + + predicate isSink(DataFlow::Node sink) { + exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | + fc.getArgument(0) = sink.asExpr() + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } +} + +module ZlibTaint = TaintTracking::Global; + +import ZlibTaint::PathGraph + +from ZlibTaint::PathNode source, ZlibTaint::PathNode sink +where ZlibTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), + "potentially untrusted source" From 3ddc9a8b31612ad0fb264928ab20f73411cc81a7 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 05:26:30 +1000 Subject: [PATCH 004/334] fix warnings, more sinks,sources,comments --- .../DecompressionBombsGzopen.ql | 55 +++++++++++-------- .../DecompressionBombsInflator.ql | 16 ++++-- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql index 644841af23e..6c0804404cd 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql @@ -16,7 +16,7 @@ import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources /** - * A gzFile Variable as a Flow source + * A `gzFile` Variable as a Flow source */ private class GzFileVar extends VariableAccess { GzFileVar() { this.getType().hasName("gzFile") } @@ -24,42 +24,57 @@ private class GzFileVar extends VariableAccess { /** * The `gzopen` function as a Flow source + * + * `gzopen(const char *path, const char *mode)` */ private class GzopenFunction extends Function { - GzopenFunction() { hasGlobalName("gzopen") } + GzopenFunction() { this.hasGlobalName("gzopen") } } /** * The `gzdopen` function as a Flow source + * + * `gzdopen(int fd, const char *mode)` */ private class GzdopenFunction extends Function { - GzdopenFunction() { hasGlobalName("gzdopen") } + GzdopenFunction() { this.hasGlobalName("gzdopen") } } /** * The `gzfread` function is used in Flow sink + * + * `gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file)` */ private class GzfreadFunction extends Function { - GzfreadFunction() { hasGlobalName("gzfread") } + GzfreadFunction() { this.hasGlobalName("gzfread") } +} + +/** + * The `gzgets` function is used in Flow sink. + * + * `gzgets(gzFile file, char *buf, int len)` + */ +private class GzgetsFunction extends Function { + GzgetsFunction() { this.hasGlobalName("gzgets") } } /** * The `gzread` function is used in Flow sink + * + * `gzread(gzFile file, voidp buf, unsigned len)` */ private class GzreadFunction extends Function { - GzreadFunction() { hasGlobalName("gzread") } + GzreadFunction() { this.hasGlobalName("gzread") } } module ZlibTaintConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - // gzopen(const char *path, const char *mode); exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | fc.getArgument(0) = source.asExpr() and // arg 0 can be a path string whichwe must do following check not fc.getArgument(0).isConstant() ) or - //gzdopen(int fd, const char *mode); // IDK whether it is good to use all file decriptors function returns as source or not // because we can do more sanitization from fd function sources exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | @@ -70,22 +85,22 @@ module ZlibTaintConfig implements DataFlow::ConfigSig { } predicate isSink(DataFlow::Node sink) { - // gzread(gzFile file, voidp buf, unsigned len)); exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | fc.getArgument(0) = sink.asExpr() and not sanitizer(fc) // TODO: and not sanitizer2(fc.getArgument(2)) ) or - // gzfread((voidp buf, z_size_t size, z_size_t nitems, gzFile file)); exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | sink.asExpr() = fc.getArgument(3) ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzgetsFunction | + sink.asExpr() = fc.getArgument(0) + ) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - // gzopen(const char *path, const char *mode); - // gzdopen(int fd, const char *mode); exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction | @@ -93,17 +108,20 @@ module ZlibTaintConfig implements DataFlow::ConfigSig { node2.asExpr() = fc ) or - // gzread(gzFile file, voidp buf, unsigned len); exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | node1.asExpr() = fc.getArgument(0) and node2.asExpr() = fc.getArgument(1) ) or - // gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file); exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | node1.asExpr() = fc.getArgument(3) and node2.asExpr() = fc.getArgument(0) ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzgetsFunction | + node1.asExpr() = fc.getArgument(0) and + node1.asExpr() = fc.getArgument(1) + ) } } @@ -116,19 +134,12 @@ predicate sanitizer(FunctionCall fc) { } // TODO: -// predicate sanitizer2(Expr arg) { +// predicate sanitizer2(FunctionCall fc) { // exists(Expr e | // // a RelationalOperation which isn't compared with a Literal that using for end of read -// TaintTracking::localExprTaint(arg, e.(RelationalOperation).getAChild*()) +// TaintTracking::localExprTaint(fc.getArgument(2), e) // ) // } -// predicate test(FunctionCall fc, Expr sink) { -// exists( | fc.getTarget() instanceof GzreadFunction | -// // a RelationalOperation which isn't compared with a Literal that using for end of read -// TaintTracking::localExprTaint(fc.getArgument(2).(VariableAccess), sink) -// ) and -// sink.getFile().getLocation().toString().matches("%main.cpp%") -// } module ZlibTaint = TaintTracking::Global; import ZlibTaint::PathGraph diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql index 541c23c58ec..fdd11e1fc16 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql @@ -16,30 +16,34 @@ import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources /** - * A z_stream Variable as a Flow source + * A `z_stream` Variable as a Flow source */ private class ZStreamVar extends VariableAccess { ZStreamVar() { this.getType().hasName("z_stream") } } /** - * The `inflate`/`inflateSync` function is used in Flow sink + * The `inflate`/`inflateSync` functions are used in Flow sink + * + * `inflate(z_streamp strm, int flush)` + * + * `inflateSync(z_streamp strm)` */ -private class DeflateFunction extends Function { - DeflateFunction() { hasGlobalName(["inflate", "inflateSync"]) } +private class InflateFunction extends Function { + InflateFunction() { this.hasGlobalName(["inflate", "inflateSync"]) } } module ZlibTaintConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr() instanceof ZStreamVar } predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof DeflateFunction | + exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | fc.getArgument(0) = sink.asExpr() ) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() instanceof DeflateFunction | + exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | node1.asExpr() = fc.getArgument(0) and node2.asExpr() = fc ) From f715a3437b1793dfca1941111aae1af5b420544b Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 26 Jun 2023 05:29:16 +1000 Subject: [PATCH 005/334] better examples --- .../CWE-409-DecompressionBomb/example_bad.cpp | 112 ++++++++++++++++-- .../example_good.cpp | 45 ++++++- 2 files changed, 143 insertions(+), 14 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp index 843b200231a..94e3e969a51 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp @@ -1,7 +1,64 @@ -#include -#include -#include "zlib.h" -int UnsafeRead() { + +int UnsafeInflate(int argc, char *argv[]) { + // original string len = 36 + char a[50] = "Hello Hello Hello Hello Hello Hello!"; + // placeholder for the compressed (deflated) version of "a" + char b[50]; + // placeholder for the Uncompressed (inflated) version of "b" + char c[50]; + printf("Uncompressed size is: %lu\n", strlen(a)); + printf("Uncompressed string is: %s\n", a); + printf("\n----------\n\n"); + + // STEP 1. + // zlib struct + z_stream defstream; + defstream.zalloc = Z_NULL; + defstream.zfree = Z_NULL; + defstream.opaque = Z_NULL; + // setup "a" as the input and "b" as the compressed output + defstream.avail_in = (uInt) strlen(a) + 1; // size of input, string + terminator + defstream.next_in = (Bytef *) a; // input char array + defstream.avail_out = (uInt) sizeof(b); // size of output + defstream.next_out = (Bytef *) b; // output char array + + // the actual compression work. + deflateInit(&defstream, Z_BEST_COMPRESSION); + deflate(&defstream, Z_FINISH); + deflateEnd(&defstream); + + // This is one way of getting the size of the output + printf("Compressed size is: %lu\n", strlen(b)); + printf("Compressed string is: %s\n", b); + printf("\n----------\n\n"); + // STEP 2. + // inflate b into c + // zlib struct + z_stream infstream; + infstream.zalloc = Z_NULL; + infstream.zfree = Z_NULL; + infstream.opaque = Z_NULL; + // setup "b" as the input and "c" as the compressed output + // TOTHINK: Here we can add additional step from Right operand to z_stream variable access + infstream.avail_in = (uInt) ((char *) defstream.next_out - b); // size of input + infstream.next_in = (Bytef *) b; // input char array + infstream.avail_out = (uInt) sizeof(c); // size of output + infstream.next_out = (Bytef *) c; // output char array + + // uLong total_out; /* total number of bytes output so far */ + // the actual DE-compression work. + inflateInit(&infstream); + std::cout << infstream.total_out << std::endl; + inflate(&infstream, Z_NO_FLUSH); + std::cout << infstream.total_out << std::endl; + inflateEnd(&infstream); + + printf("Uncompressed size is: %lu\n", strlen(c)); + printf("Uncompressed string is: %s\n", c); + return 0; +} + +int UnsafeGzread() { std::cout << "enter compressed file name!\n" << std::endl; char fileName[100]; std::cin >> fileName; @@ -21,10 +78,47 @@ int UnsafeRead() { break; } } - - for ( auto &&i: unzippedData) - std::cout << i; + for (auto &&i: unzippedData) + std::cout << i; gzclose(inFileZ); - return 0; -} \ No newline at end of file +} + +int UnsafeGzfread() { + std::cout << "enter compressed file name!\n" << std::endl; + char fileName[100]; + std::cin >> fileName; + gzFile inFileZ = gzopen(fileName, "rb"); + if (inFileZ == nullptr) { + printf("Error: Failed to gzopen %s\n", fileName); + exit(0); + } + while (true) { + char buffer[1000]; + if (!gzfread(buffer, 999, 1, inFileZ)) { + break; + } + } + gzclose(inFileZ); + return 0; +} + +int UnsafeGzgets() { + std::cout << "enter compressed file name!\n" << std::endl; + char fileName[100]; + std::cin >> fileName; + gzFile inFileZ = gzopen(fileName, "rb"); + if (inFileZ == nullptr) { + printf("Error: Failed to gzopen %s\n", fileName); + exit(0); + } + char *buffer = new char[4000000000]; + char *result = gzgets(inFileZ, buffer, 1000000000); + while (true) { + result = gzgets(inFileZ, buffer, 1000000000); + if (result == nullptr) { + break; + } + } + return 0; +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp index 3d26569bdb4..e3a2d4b2e50 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp @@ -1,7 +1,5 @@ -#include -#include -#include "zlib.h" -int SafeRead() { + +int SafeGzread() { std::cout << "enter compressed file name!\n" << std::endl; char fileName[100]; std::cin >> fileName; @@ -35,4 +33,41 @@ int SafeRead() { gzclose(inFileZ); return 0; -} \ No newline at end of file +} + +int SafeGzread2() { + std::cout << "enter compressed file name!\n" << std::endl; + char fileName[100]; + std::cin >> fileName; + gzFile inFileZ = gzopen(fileName, "rb"); + if (inFileZ == nullptr) { + printf("Error: Failed to gzopen %s\n", fileName); + exit(0); + } + const int BUFFER_SIZE = 8192; + unsigned char unzipBuffer[BUFFER_SIZE]; + unsigned int unzippedBytes; + uint totalRead = 0; + std::vector unzippedData; + while (true) { + unzippedBytes = gzread(inFileZ, unzipBuffer, BUFFER_SIZE); + totalRead += BUFFER_SIZE; + if (unzippedBytes > 0) { + unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); + if (totalRead > 1024 * 1024 * 4) { + std::cout << "Bombs!" << totalRead; + exit(1); + } else { + std::cout << "not Bomb yet!!" << totalRead << std::endl; + } + } else { + break; + } + } + + for (auto &&i: unzippedData) + std::cout << i; + gzclose(inFileZ); + + return 0; +} From 042133a9912072040f8a67ad870d69d881a8a2e2 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 3 Jul 2023 09:12:37 +1000 Subject: [PATCH 006/334] add queries for more popular libs --- .../DecompressionBomb.qhelp | 6 +- .../DecompressionBombsBrotli.ql | 107 +++++++++++++ .../DecompressionBombsBzip2.ql | 126 ++++++++++++++++ .../DecompressionBombsMiniZip.ql | 102 +++++++++++++ .../DecompressionBombsXZ.ql | 100 +++++++++++++ .../DecompressionBombsZSTD.ql | 140 ++++++++++++++++++ ...pen.ql => DecompressionBombsZlibGzopen.ql} | 2 +- ...r.ql => DecompressionBombsZlibInflator.ql} | 9 +- ...ql => DecompressionBombsZlibUncompress.ql} | 9 +- .../CWE-409-DecompressionBomb/example_bad.cpp | 5 + .../example_good.cpp | 5 + 11 files changed, 593 insertions(+), 18 deletions(-) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql rename cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/{DecompressionBombsGzopen.ql => DecompressionBombsZlibGzopen.ql} (98%) rename cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/{DecompressionBombsInflator.ql => DecompressionBombsZlibInflator.ql} (84%) rename cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/{DecompressionBombsUncompress.ql => DecompressionBombsZlibUncompress.ql} (83%) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp index 44256d36ea9..cdadabbf207 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp @@ -5,7 +5,6 @@

    Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

    Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

    -
    @@ -25,8 +24,13 @@ An Unsafe Approach can be this example which we don't check for uncompressed siz + +
  • +Zlib Documentation +
  • +
  • A great research to gain more impact by this kind of attacks
  • diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql new file mode 100644 index 00000000000..b09858d6471 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql @@ -0,0 +1,107 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-brotli + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +// https://github.com/google/brotli +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +/** + * A Pointer Variable is used in Flow source + */ +private class PointerVar extends VariableAccess { + PointerVar() { this.getType() instanceof PointerType } +} + +/** + * A Pointer Variable is used in Flow source + */ +private class Uint8Var extends VariableAccess { + Uint8Var() { this.getType() instanceof UInt8_t } +} + +/** + * A ZSTD_inBuffer Variable is used in Flow source + */ +private class ZSTDinBufferVar extends VariableAccess { + ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } +} + +/** + * The `ZSTD_decompress_usingDDict` function is used in Flow sink + * Ref: https://www.brotli.org/decode.html#af68 + */ +private class BrotliDecoderDecompressFunction extends Function { + BrotliDecoderDecompressFunction() { this.hasGlobalName(["BrotliDecoderDecompress"]) } +} + +/** + * The `BrotliDecoderDecompressStream` function is used in Flow sink + * Ref: https://www.brotli.org/decode.html#a234 + */ +private class BrotliDecoderDecompressStreamFunction extends Function { + BrotliDecoderDecompressStreamFunction() { this.hasGlobalName(["BrotliDecoderDecompressStream"]) } +} + +module BrotliTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | + fc = source.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fopenCall(fc) | + fc = source.asExpr() and + state = "" + ) + or + source.asExpr() instanceof PointerVar and + state = "" + or + source.asExpr() instanceof Uint8Var and + state = "" + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | + fc.getArgument(1) = sink.asExpr() and + state = "" + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + none() + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module BrotliTaint = TaintTracking::GlobalWithState; + +import BrotliTaint::PathGraph + +from BrotliTaint::PathNode source, BrotliTaint::PathNode sink +where BrotliTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql new file mode 100644 index 00000000000..e9b7d60715d --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql @@ -0,0 +1,126 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-bzip2 + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +/** + * A `bz_stream` Variable as a Flow source + */ +private class BzStreamVar extends VariableAccess { + BzStreamVar() { this.getType().hasName("bz_stream") } +} + +/** + * A `BZFILE` Variable as a Flow source + */ +private class BZFILEVar extends VariableAccess { + BZFILEVar() { this.getType().hasName("BZFILE") } +} + +/** + * The `BZ2_bzopen`,`BZ2_bzdopen` functions as a Flow source + */ +private class BZ2BzopenFunction extends Function { + BZ2BzopenFunction() { this.hasGlobalName(["BZ2_bzopen", "BZ2_bzdopen"]) } +} + +/** + * The `BZ2_bzDecompress` function as a Flow source + */ +private class BZ2BzDecompressFunction extends Function { + BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } +} + +/** + * The `BZ2_bzReadOpen` function + */ +private class BZ2BzReadOpenFunction extends Function { + BZ2BzReadOpenFunction() { this.hasGlobalName(["BZ2_bzReadOpen"]) } +} + +/** + * The `BZ2_bzRead` function is used in Flow sink + */ +private class BZ2BzReadFunction extends Function { + BZ2BzReadFunction() { this.hasGlobalName("BZ2_bzRead") } +} + +/** + * The `BZ2_bzRead` function is used in Flow sink + */ +private class BZ2BzBuffToBuffDecompressFunction extends Function { + BZ2BzBuffToBuffDecompressFunction() { this.hasGlobalName("BZ2_bzBuffToBuffDecompress") } +} + +/** + * https://www.sourceware.org/bzip2/manual/manual.html + */ +module Bzip2TaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + source.asExpr() instanceof BzStreamVar and + state = "" + or + source.asExpr() instanceof BZFILEVar and + state = "" + or + // will flow into BZ2BzReadOpenFunction + exists(FunctionCall fc | fopenCall(fc) | + fc = source.asExpr() and + state = "" + ) + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | + fc.getArgument(0) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | + fc.getArgument(1) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | + fc.getArgument(2) = sink.asExpr() and + state = "" + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadOpenFunction | + node1.asExpr() = fc.getArgument(1) and + node2.asExpr() = fc and + state1 = "" and + state2 = "" + ) + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module Bzip2Taint = TaintTracking::GlobalWithState; + +import Bzip2Taint::PathGraph + +from Bzip2Taint::PathNode source, Bzip2Taint::PathNode sink +where Bzip2Taint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql new file mode 100644 index 00000000000..b8cd89fc542 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql @@ -0,0 +1,102 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-minizip + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A `unzFile` Variable as a Flow source + */ +private class UnzFileVar extends VariableAccess { + UnzFileVar() { this.getType().hasName("unzFile") } +} + +/** + * The `UnzOpen` function as a Flow source + */ +private class UnzOpenFunction extends Function { + UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } +} + +/** + * The `mz_stream_open` function is used in Flow source + */ +private class MzStreamOpenFunction extends Function { + MzStreamOpenFunction() { this.hasGlobalName("mz_stream_open") } +} + +/** + * The `unzReadCurrentFile` function is used in Flow sink + */ +private class UnzReadCurrentFileFunction extends Function { + UnzReadCurrentFileFunction() { this.hasGlobalName(["unzReadCurrentFile"]) } +} + +module MiniZipTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | + fc.getArgument(0) = source.asExpr() and + state = "unzFile" + ) + or + source.asExpr() instanceof UnzFileVar and + state = "unzFile" + or + // TO Check + exists(FunctionCall fc | fc.getTarget() instanceof MzStreamOpenFunction | + fc.getArgument(0).getEnclosingVariable() = source.asVariable() and + state = "MzStream" + ) + or + // TO Check + exists(FunctionCall fc | fc.getTarget() instanceof MzStreamOpenFunction | + fc.getArgument(0).getEnclosingVariable() = source.asVariable() and + state = "MzStream" + ) + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | + fc.getArgument(0) = sink.asExpr() and + state = "unzFile" + // and not sanitizer(fc) + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc and + state1 = "" and + state2 = "unzFile" + ) + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + + +module MiniZipTaint = TaintTracking::GlobalWithState; + +import MiniZipTaint::PathGraph + +from MiniZipTaint::PathNode source, MiniZipTaint::PathNode sink +where MiniZipTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql new file mode 100644 index 00000000000..dadbf7a5a8a --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql @@ -0,0 +1,100 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-xz + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A Pointer Variable as a Flow source + */ +private class Uint8Var extends VariableAccess { + Uint8Var() { this.getType() instanceof UInt8_t } +} + +/** + * A `lzma_stream` Variable as a Flow source + */ +private class LzmaStreamVar extends VariableAccess { + LzmaStreamVar() { this.getType().hasName("lzma_stream") } +} + +/** + * The `lzma_*_decoder` function is used as a required condition for decompression + */ +private class LzmaDecoderFunction extends Function { + LzmaDecoderFunction() { + this.hasGlobalName(["lzma_stream_decoder", "lzma_auto_decoder", "lzma_alone_decoder"]) + } +} + +/** + * The `lzma_code` function is used in Flow sink + */ +private class LzmaCodeFunction extends Function { + LzmaCodeFunction() { this.hasGlobalName(["lzma_code"]) } +} + +/** + * The `lzma_stream_buffer_decode` function is used in Flow sink + */ +private class LzmaStreamBufferDecodeFunction extends Function { + LzmaStreamBufferDecodeFunction() { this.hasGlobalName(["lzma_stream_buffer_decode"]) } +} + +/** + * https://github.com/tukaani-project/xz + */ +module XzTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + source.asExpr() instanceof LzmaStreamVar and + state = "" + or + source.asExpr() instanceof Uint8Var and + state = "" + // and not exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamDecoderFunction) + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | + fc.getArgument(1) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | + fc.getArgument(0) = sink.asExpr() and + state = "" + ) and + exists(FunctionCall fc2 | fc2.getTarget() instanceof LzmaDecoderFunction) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + none() + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module XzTaint = TaintTracking::GlobalWithState; + +import XzTaint::PathGraph + +from XzTaint::PathNode source, XzTaint::PathNode sink +where XzTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql new file mode 100644 index 00000000000..9e984bb89e2 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql @@ -0,0 +1,140 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-zstd + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +// https://github.com/facebook/zstd/blob/dev/examples/streaming_decompression.c +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +// /** +// * A Pointer Variable as a Flow source +// */ +// private class PointerVar extends VariableAccess { +// PointerVar() { this.getType() instanceof PointerType } +// } +/** + * A ZSTD_inBuffer Variable as a Flow source + */ +private class ZSTDinBufferVar extends VariableAccess { + ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } +} + +/** + * A ZSTD_inBuffer_s Variable as a Flow source + */ +private class ZSTDinBufferSVar extends VariableAccess { + ZSTDinBufferSVar() { this.getType().hasName("ZSTD_inBuffer_s") } +} + +/** + * The `ZSTD_decompress` function is used in Flow sink + */ +private class ZSTDDecompressFunction extends Function { + ZSTDDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } +} + +/** + * The `ZSTD_decompressDCtx` function is used in Flow sink + */ +private class ZSTDDecompressDCtxFunction extends Function { + ZSTDDecompressDCtxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } +} + +/** + * The `ZSTD_decompressStream` function is used in Flow sink + */ +private class ZSTDDecompressStreamFunction extends Function { + ZSTDDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } +} + +/** + * The `ZSTD_decompress_usingDDict` function is used in Flow sink + */ +private class ZSTDDecompressUsingDictFunction extends Function { + ZSTDDecompressUsingDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +} + +/** + * The `ZSTD_decompress_usingDDict` function is used in Flow sink + */ +private class ZSTDDecompressUsingDDictFunction extends Function { + ZSTDDecompressUsingDDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +} + +module ZstdTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | + fc = source.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fopenCall(fc) | + fc = source.asExpr() and + state = "" + ) + or + source.asExpr() instanceof ZSTDinBufferSVar and + state = "" + or + source.asExpr() instanceof ZSTDinBufferVar and + state = "" + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | + fc.getArgument(2) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | + fc.getArgument(3) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | + fc.getArgument(3) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | + fc.getArgument(3) = sink.asExpr() and + state = "" + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + none() + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module ZstdTaint = TaintTracking::GlobalWithState; + +import ZstdTaint::PathGraph + +from ZstdTaint::PathNode source, ZstdTaint::PathNode sink +where ZstdTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), + "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql similarity index 98% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql rename to cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql index 6c0804404cd..ce7324eded0 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsGzopen.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql @@ -5,7 +5,7 @@ * @problem.severity error * @security-severity 7.8 * @precision high - * @id cpp/user-controlled-file-decompression1 + * @id cpp/user-controlled-file-zlibgz * @tags security * experimental * external/cwe/cwe-409 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql similarity index 84% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql rename to cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql index fdd11e1fc16..e526b4d9273 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsInflator.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql @@ -5,7 +5,7 @@ * @problem.severity error * @security-severity 7.8 * @precision high - * @id cpp/user-controlled-file-decompression2 + * @id cpp/user-controlled-file-zlibinflator * @tags security * experimental * external/cwe/cwe-409 @@ -41,13 +41,6 @@ module ZlibTaintConfig implements DataFlow::ConfigSig { fc.getArgument(0) = sink.asExpr() ) } - - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - } } module ZlibTaint = TaintTracking::Global; diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql similarity index 83% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql rename to cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql index 09327616fd9..b385523f185 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsUncompress.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql @@ -5,7 +5,7 @@ * @problem.severity error * @security-severity 7.8 * @precision high - * @id cpp/user-controlled-file-decompression3 + * @id cpp/user-controlled-file-zlibuncompress * @tags security * experimental * external/cwe/cwe-409 @@ -37,13 +37,6 @@ module ZlibTaintConfig implements DataFlow::ConfigSig { fc.getArgument(0) = sink.asExpr() ) } - - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - } } module ZlibTaint = TaintTracking::Global; diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp index 94e3e969a51..af513817386 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp @@ -1,3 +1,8 @@ +#include +#include +#include "zlib.h" +#include +#include int UnsafeInflate(int argc, char *argv[]) { // original string len = 36 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp index e3a2d4b2e50..7ad34658367 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp @@ -1,3 +1,8 @@ +#include +#include +#include "zlib.h" +#include +#include int SafeGzread() { std::cout << "enter compressed file name!\n" << std::endl; From d4d505d7af7195a3163bcf962b652ef0148f68f2 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 3 Jul 2023 20:39:08 +1000 Subject: [PATCH 007/334] complete the minizip query --- .../DecompressionBombsMiniZip.ql | 84 +++++++++++++++---- 1 file changed, 67 insertions(+), 17 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql index b8cd89fc542..67999bff3d6 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql @@ -15,6 +15,43 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +/** + * The `mz_zip_reader_create` function as a Flow source + * create a `mz_zip_reader` instance + */ +private class Mz_zip_reader_create extends Function { + Mz_zip_reader_create() { this.hasGlobalName("mz_zip_reader_create") } +} + +/** + * The `mz_zip_create` function as a Flow source + * create a `mz_zip` instance + */ +private class Mz_zip_create extends Function { + Mz_zip_create() { this.hasGlobalName("mz_zip_create") } +} + +/** + * The `mz_zip_entry` function is used in Flow source + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) + */ +private class Mz_zip_entry extends Function { + Mz_zip_entry() { this.hasGlobalName("mz_zip_entry_read") } +} + +/** + * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in Flow source + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) + */ +private class Mz_zip_reader_entry extends Function { + Mz_zip_reader_entry() { + this.hasGlobalName([ + "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", + "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" + ]) + } +} + /** * A `unzFile` Variable as a Flow source */ @@ -29,13 +66,6 @@ private class UnzOpenFunction extends Function { UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } } -/** - * The `mz_stream_open` function is used in Flow source - */ -private class MzStreamOpenFunction extends Function { - MzStreamOpenFunction() { this.hasGlobalName("mz_stream_open") } -} - /** * The `unzReadCurrentFile` function is used in Flow sink */ @@ -55,16 +85,14 @@ module MiniZipTaintConfig implements DataFlow::StateConfigSig { source.asExpr() instanceof UnzFileVar and state = "unzFile" or - // TO Check - exists(FunctionCall fc | fc.getTarget() instanceof MzStreamOpenFunction | - fc.getArgument(0).getEnclosingVariable() = source.asVariable() and - state = "MzStream" + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_create | + fc = source.asExpr() and + state = "mz_zip_reader" ) or - // TO Check - exists(FunctionCall fc | fc.getTarget() instanceof MzStreamOpenFunction | - fc.getArgument(0).getEnclosingVariable() = source.asVariable() and - state = "MzStream" + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_create | + fc = source.asExpr() and + state = "mz_zip" ) } @@ -72,7 +100,16 @@ module MiniZipTaintConfig implements DataFlow::StateConfigSig { exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | fc.getArgument(0) = sink.asExpr() and state = "unzFile" - // and not sanitizer(fc) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | + fc.getArgument(1) = sink.asExpr() and + state = "mz_zip_reader" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | + fc.getArgument(1) = sink.asExpr() and + state = "mz_zip" ) } @@ -86,12 +123,25 @@ module MiniZipTaintConfig implements DataFlow::StateConfigSig { state1 = "" and state2 = "unzFile" ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) and + state1 = "" and + state2 = "mz_zip_reader" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) and + state1 = "" and + state2 = "mz_zip" + ) } predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } } - module MiniZipTaint = TaintTracking::GlobalWithState; import MiniZipTaint::PathGraph From 56bc32ff916f4ea0e87748fac3712bccb1058371 Mon Sep 17 00:00:00 2001 From: amammad Date: Tue, 4 Jul 2023 01:17:22 +1000 Subject: [PATCH 008/334] add libarchive --- .../DecompressionBombsLibArchive.ql | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql new file mode 100644 index 00000000000..57a9a4f72c9 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql @@ -0,0 +1,75 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-libarchive + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * The `archive_read_new` function as a Flow source + * create a `archive` instance + */ +private class Archive_read_new extends Function { + Archive_read_new() { this.hasGlobalName("archive_read_new") } +} + +/** + * The `archive_read_data*` functions are used in Flow Sink + * [Examples](https://github.com/libarchive/libarchive/wiki/Examples) + */ +private class Archive_read_data_block extends Function { + Archive_read_data_block() { + this.hasGlobalName(["archive_read_data_block", "archive_read_data", "archive_read_data_into_fd"]) + } +} + +module LibArchiveTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_new | + fc.getArgument(0) = source.asExpr() and + state = "unzFile" + ) + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | + fc.getArgument(1) = sink.asExpr() and + state = "unzFile" + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) and + state1 = "" and + state2 = "mz_zip_reader" + ) + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module LibArchiveTaint = TaintTracking::GlobalWithState; + +import LibArchiveTaint::PathGraph + +from LibArchiveTaint::PathNode source, LibArchiveTaint::PathNode sink +where LibArchiveTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" From 16be908cb38f35036e82ae13f112524e7b7d6d9b Mon Sep 17 00:00:00 2001 From: amammad Date: Tue, 4 Jul 2023 06:56:30 +1000 Subject: [PATCH 009/334] add Miniz --- .../DecompressionBombsLibMiniz.ql | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql new file mode 100644 index 00000000000..b7e5ea913f3 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql @@ -0,0 +1,187 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/user-controlled-file-decompression-miniz + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A unsigned char Variable is used in Flow source + */ +private class Uint8Var extends VariableAccess { + Uint8Var() { this.getType().stripType().resolveTypedefs() instanceof UnsignedCharType } +} + +/** + * The `mz_streamp`, `z_stream` Variables are used in Flow source + */ +private class MzStreampVar extends VariableAccess { + MzStreampVar() { this.getType().hasName(["mz_streamp", "z_stream"]) } +} + +/** + * A Char Variable is used in Flow source + */ +private class CharVar extends VariableAccess { + CharVar() { this.getType().stripType() instanceof CharType } +} + +/** + * A `mz_zip_archive` Variable is used in Flow source + */ +private class MzZipArchiveVar extends VariableAccess { + MzZipArchiveVar() { this.getType().hasName("mz_zip_archive") } +} + +/** + * The `mz_uncompress` functions are used in Flow Sink + */ +private class MzUncompress extends Function { + MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } +} + +/** + * The `mz_inflate` functions are used in Flow Sink + */ +private class MzInflate extends Function { + MzInflate() { this.hasGlobalName(["mz_inflate", "inflate"]) } +} + +/** + * The `mz_inflateInit` functions are used in Flow Sink + */ +private class MzInflateInit extends Function { + MzInflateInit() { this.hasGlobalName(["inflateInit", "mz_inflateInit"]) } +} + +/** + * The `mz_zip_reader_extract_*` functions are used in Flow Sink + */ +private class MzZipReaderExtract extends Function { + MzZipReaderExtract() { + this.hasGlobalName([ + "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", + "mz_zip_reader_extract_to_callback" + ]) + } +} + +/** + * The `mz_zip_reader_locate_file_*` functions are used in Flow Sink + */ +private class MzZipReaderLocateFile extends Function { + MzZipReaderLocateFile() { + this.hasGlobalName(["mz_zip_reader_locate_file", "mz_zip_reader_locate_file_v2"]) + } +} + +/** + * The `tinfl_decompress_mem_*` functions are used in Flow Sink + */ +private class TinflDecompressMem extends Function { + TinflDecompressMem() { + this.hasGlobalName([ + "tinfl_decompress_mem_to_callback", "tinfl_decompress_mem_to_mem", + "tinfl_decompress_mem_to_heap" + ]) + } +} + +/** + * The `tinfl_decompress_*` functions are used in Flow Sink + */ +private class TinflDecompress extends Function { + TinflDecompress() { this.hasGlobalName(["tinfl_decompress"]) } +} + +module MinizTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + source.asExpr() instanceof Uint8Var and + state = "" + or + source.asExpr() instanceof CharVar and + state = "" + or + source.asExpr() instanceof MzZipArchiveVar and + state = "" + or + source.asExpr() instanceof MzStreampVar and + state = "" + or + // source of inflate(&arg0) is OK + // but the sink which is a call to MzInflate Function first arg can not be determined + // if I debug the query we'll reach to the first arg, it is weird I think. + source.asDefiningArgument() = + any(Call call | call.getTarget() instanceof MzInflateInit).getArgument(0) and + state = "inflate" + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | + fc.getArgument(2) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | + fc.getArgument(1) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | + fc.getArgument(0) = sink.asExpr() and + state = "inflate" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | + fc.getArgument(1) = sink.asExpr() and + state = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | + fc.getArgument(0) = sink.asExpr() and + state = "" + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | + node1.asExpr() = fc.getArgument(2) and + node2.asExpr() = fc.getArgument(0) and + state1 = "" and + state2 = "" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderLocateFile | + node1.asExpr() = fc.getArgument(1) and + node2.asExpr() = fc.getArgument(3) and + state1 = "" and + state2 = "" + ) + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module MinizTaint = TaintTracking::GlobalWithState; + +import MinizTaint::PathGraph + +from MinizTaint::PathNode source, MinizTaint::PathNode sink +where MinizTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), + "potentially untrusted source" From 065c52761510535c976c53f3b1bf5d67006a4cfa Mon Sep 17 00:00:00 2001 From: amammad Date: Tue, 4 Jul 2023 07:19:33 +1000 Subject: [PATCH 010/334] update Miniz --- .../DecompressionBombsLibMiniz.ql | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql index b7e5ea913f3..9f694b07cdd 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql @@ -15,11 +15,17 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +/** + * A Pointer Variable is used in Flow source + */ +private class PointerVar extends VariableAccess { + PointerVar() { this.getType() instanceof PointerType } +} /** * A unsigned char Variable is used in Flow source */ private class Uint8Var extends VariableAccess { - Uint8Var() { this.getType().stripType().resolveTypedefs() instanceof UnsignedCharType } + Uint8Var() { this.getType().stripType().resolveTypedefs*() instanceof UnsignedCharType } } /** @@ -33,7 +39,7 @@ private class MzStreampVar extends VariableAccess { * A Char Variable is used in Flow source */ private class CharVar extends VariableAccess { - CharVar() { this.getType().stripType() instanceof CharType } + CharVar() { this.getType().stripType().resolveTypedefs*() instanceof CharType } } /** @@ -71,7 +77,10 @@ private class MzZipReaderExtract extends Function { MzZipReaderExtract() { this.hasGlobalName([ "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", - "mz_zip_reader_extract_to_callback" + "mz_zip_reader_extract_to_callback", "mz_zip_reader_extract_file_to_callback", + "mz_zip_reader_extract_to_mem", "mz_zip_reader_extract_file_to_mem", + "mz_zip_reader_extract_iter_read", "mz_zip_reader_extract_to_file", + "mz_zip_reader_extract_file_to_file" ]) } } @@ -111,6 +120,9 @@ module MinizTaintConfig implements DataFlow::StateConfigSig { source.asExpr() instanceof Uint8Var and state = "" or + source.asExpr() instanceof PointerVar and + state = "" + or source.asExpr() instanceof CharVar and state = "" or From e0798b29da1e2c87d77e1e19169a9c5d01eebdb3 Mon Sep 17 00:00:00 2001 From: amammad Date: Tue, 4 Jul 2023 18:28:00 +1000 Subject: [PATCH 011/334] stash: change sinks to zip handles and sources to the zip handle initializers --- .../DecompressionBombsLibMiniz.ql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql index 9f694b07cdd..e0310704af2 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql @@ -21,6 +21,7 @@ import semmle.code.cpp.security.FlowSources private class PointerVar extends VariableAccess { PointerVar() { this.getType() instanceof PointerType } } + /** * A unsigned char Variable is used in Flow source */ @@ -56,6 +57,18 @@ private class MzUncompress extends Function { MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } } +/** + * A `zip handle` is used in Flow source + */ +private class MzZip extends Function { + MzZip() { + this.hasGlobalName([ + "mz_zip_reader_open", "mz_zip_reader_open_file", "mz_zip_reader_open_file_in_memory", + "mz_zip_reader_open_buffer", "mz_zip_reader_entry_open" + ]) + } +} + /** * The `mz_inflate` functions are used in Flow Sink */ @@ -138,6 +151,9 @@ module MinizTaintConfig implements DataFlow::StateConfigSig { source.asDefiningArgument() = any(Call call | call.getTarget() instanceof MzInflateInit).getArgument(0) and state = "inflate" + or + source.asDefiningArgument() = any(Call call | call.getTarget() instanceof MzZip).getArgument(0) and + state = "" } predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { From 664890ab33751904e03da29bdc7770ea65726a27 Mon Sep 17 00:00:00 2001 From: amammad Date: Tue, 29 Aug 2023 22:19:37 +1000 Subject: [PATCH 012/334] V1 --- .../CWE/CWE-347/Auth0NoVerifier.qhelp | 34 +++++ .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 127 ++++++++++++++++++ .../Security/CWE/CWE-347/Example.java | 59 ++++++++ 3 files changed, 220 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp create mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql create mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/Example.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp new file mode 100644 index 00000000000..4fc17e68530 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp @@ -0,0 +1,34 @@ + + + +

    + A JSON Web Token (JWT) is used for authenticating and managing users in an application. +

    +

    + Only Decoding JWTs without checking if they have a valid signature or not can lead to security vulnerabilities. +

    + +
    + + +

    + Don't use methods that only decode JWT, Instead use methods that verify the signature of JWT. +

    + +
    + + +

    + The following code you can see an Example from a popular Library. +

    + + + +
    + +
  • + The incorrect use of JWT in ShenyuAdminBootstrap allows an attacker to bypass authentication. +
  • +
    + +
    \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql new file mode 100644 index 00000000000..47145b21f89 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -0,0 +1,127 @@ +/** + * @name Missing JWT signature check + * @description Failing to check the Json Web Token (JWT) signature may allow an attacker to forge their own tokens. + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id java/missing-jwt-signature-check + * @tags security + * external/cwe/cwe-347 + */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.FlowSources + +module JwtAuth0 { + class PayloadType extends RefType { + PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } + } + + class JWTType extends RefType { + JWTType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } + } + + class JWTVerifierType extends RefType { + JWTVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } + } + + class GetPayload extends MethodAccess { + GetPayload() { + this.getCallee().getDeclaringType() instanceof PayloadType and + this.getCallee().hasName(["getClaim", "getIssuedAt"]) + } + } + + class Decode extends MethodAccess { + Decode() { + this.getCallee().getDeclaringType() instanceof JWTType and + this.getCallee().hasName("decode") + } + } + + class Verify extends MethodAccess { + Verify() { + this.getCallee().getDeclaringType() instanceof JWTVerifierType and + this.getCallee().hasName("verify") + } + } +} + +module JwtDecodeConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, FlowState state) { + ( + exists(Variable v | + source.asExpr() = v.getInitializer() and + v.getType().hasName("String") + ) + or + source instanceof RemoteFlowSource + ) and + not FlowToJwtVerify::flow(source, _) and + state = "Auth0" and + not state = "Auth0Verify" + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + sink.asExpr() = any(JwtAuth0::GetPayload a) and + state = "Auth0" and + not state = "Auth0Verify" + } + + predicate isAdditionalFlowStep( + DataFlow::Node nodeFrom, FlowState stateFrom, DataFlow::Node nodeTo, FlowState stateTo + ) { + // Decode Should be one of the middle nodes + exists(JwtAuth0::Decode a | + nodeFrom.asExpr() = a.getArgument(0) and + nodeTo.asExpr() = a and + stateTo = "Auth0" and + stateFrom = "Auth0" + ) + or + exists(JwtAuth0::Verify a | + nodeFrom.asExpr() = a.getArgument(0) and + nodeTo.asExpr() = a and + stateTo = "Auth0Verify" and + stateFrom = "Auth0Verify" + ) + or + exists(JwtAuth0::GetPayload a | + nodeFrom.asExpr() = a.getQualifier() and + nodeTo.asExpr() = a and + stateTo = "Auth0" and + stateFrom = "Auth0" + ) + } + + predicate isBarrier(DataFlow::Node sanitizer, FlowState state) { none() } +} + +module FlowToJwtVerifyConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // source instanceof DataFlow::Node + exists(Variable v | + source.asExpr() = v.getInitializer() and + v.getType().hasName("String") + ) + } + + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::Verify a).getArgument(0) } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { none() } +} + +module JwtDecode = TaintTracking::GlobalWithState; + +module FlowToJwtVerify = TaintTracking::Global; + +import JwtDecode::PathGraph + +from JwtDecode::PathNode source, JwtDecode::PathNode sink +where JwtDecode::flowPath(source, sink) +select sink.getNode(), source, sink, "This parses a $@, but the signature is not verified.", + source.getNode(), "JWT" diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Example.java b/java/ql/src/experimental/Security/CWE/CWE-347/Example.java new file mode 100644 index 00000000000..11eec276ca3 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Example.java @@ -0,0 +1,59 @@ +package com.example.JwtTest; + +import java.io.*; +import java.security.NoSuchAlgorithmException; +import java.util.Optional; +import javax.crypto.KeyGenerator; +import javax.servlet.http.*; +import javax.servlet.annotation.*; +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTCreationException; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; + +@WebServlet(name = "Jwt", value = "/Auth") +public class auth0 extends HttpServlet { + + public void doPost(HttpServletRequest request, HttpServletResponse response) {} + + final String JWT_KEY = "KEY"; + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + + // OK + String JwtToken1 = request.getParameter("JWT1"); + decodeToken(JwtToken1); + try { + verifyToken(JwtToken1, getSecureRandomKey()); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + + // only decode, no verification + String JwtToken2 = request.getParameter("JWT2"); + decodeToken(JwtToken2); + + + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.println("heyyy"); + } + + public static boolean verifyToken(final String token, final String key) { + try { + JWTVerifier verifier = JWT.require(Algorithm.HMAC256(key)).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + System.out.printf("jwt decode fail, token: %s", e); + } + return false; + } + + public static String decodeToken(final String token) { + DecodedJWT jwt = JWT.decode(token); + return Optional.of(jwt).map(item -> item.getClaim("userName").asString()).orElse(""); + } +} From 97eb7b7b7257b6f8bfacfd34d6e53f4513c7a72a Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 22 Nov 2023 09:27:55 +0100 Subject: [PATCH 013/334] update example to include more logical vulnerable pattern, add documentations for ql classes --- .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 9 +++ .../Security/CWE/CWE-347/Example.java | 65 ++++++++++++------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index 47145b21f89..630b2b4f30c 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -27,6 +27,9 @@ module JwtAuth0 { JWTVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } } + /** + * A Method that returns a Decoded Claim of JWT + */ class GetPayload extends MethodAccess { GetPayload() { this.getCallee().getDeclaringType() instanceof PayloadType and @@ -34,6 +37,9 @@ module JwtAuth0 { } } + /** + * A Method that Decode JWT without signature verification + */ class Decode extends MethodAccess { Decode() { this.getCallee().getDeclaringType() instanceof JWTType and @@ -41,6 +47,9 @@ module JwtAuth0 { } } + /** + * A Method that Decode JWT with signature verification + */ class Verify extends MethodAccess { Verify() { this.getCallee().getDeclaringType() instanceof JWTVerifierType and diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Example.java b/java/ql/src/experimental/Security/CWE/CWE-347/Example.java index 11eec276ca3..2777d4f2cb8 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Example.java +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Example.java @@ -2,6 +2,7 @@ package com.example.JwtTest; import java.io.*; import java.security.NoSuchAlgorithmException; +import java.util.Objects; import java.util.Optional; import javax.crypto.KeyGenerator; import javax.servlet.http.*; @@ -13,32 +14,50 @@ import com.auth0.jwt.exceptions.JWTCreationException; import com.auth0.jwt.exceptions.JWTVerificationException; import com.auth0.jwt.interfaces.DecodedJWT; -@WebServlet(name = "Jwt", value = "/Auth") +@WebServlet(name = "JwtTest1", value = "/Auth") public class auth0 extends HttpServlet { - public void doPost(HttpServletRequest request, HttpServletResponse response) {} - - final String JWT_KEY = "KEY"; - - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - - // OK - String JwtToken1 = request.getParameter("JWT1"); - decodeToken(JwtToken1); - try { - verifyToken(JwtToken1, getSecureRandomKey()); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - - // only decode, no verification - String JwtToken2 = request.getParameter("JWT2"); - decodeToken(JwtToken2); - - + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); - out.println("heyyy"); + + // OK: first decode without signature verification + // and then verify with signature verification + String JwtToken1 = request.getParameter("JWT1"); + String userName = decodeToken(JwtToken1); + verifyToken(JwtToken1, "A Securely generated Key"); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + // NOT OK: only decode, no verification + String JwtToken2 = request.getParameter("JWT2"); + String userName = decodeToken(JwtToken2); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + // OK: no clue of the use of unsafe decoded JWT return value + JwtToken2 = request.getParameter("JWT2"); + JWT.decode(JwtToken2); + + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); } public static boolean verifyToken(final String token, final String key) { @@ -52,8 +71,10 @@ public class auth0 extends HttpServlet { return false; } + public static String decodeToken(final String token) { DecodedJWT jwt = JWT.decode(token); return Optional.of(jwt).map(item -> item.getClaim("userName").asString()).orElse(""); } + } From 0d0dc5158c5b513b102c11f4d1d674d20f83191e Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:03:03 +0100 Subject: [PATCH 014/334] stash --- .../security/CWE-347/Auth0NoVerifier.qlref | 1 + .../query-tests/security/CWE-347/Test.java | 92 +++ .../query-tests/security/CWE-347/options | 1 + .../query-tests/security/CWE-347/pom.xml | 43 ++ .../com/auth0/jwt/HeaderParams.java | 29 + .../auth0-jwt-4.4.0/com/auth0/jwt/JWT.java | 74 ++ .../com/auth0/jwt/JWTCreator.java | 631 ++++++++++++++++++ .../com/auth0/jwt/JWTDecoder.java | 156 +++++ .../com/auth0/jwt/JWTVerifier.java | 493 ++++++++++++++ .../com/auth0/jwt/RegisteredClaims.java | 55 ++ .../com/auth0/jwt/TokenUtils.java | 47 ++ .../com/auth0/jwt/algorithms/Algorithm.java | 404 +++++++++++ .../auth0/jwt/algorithms/CryptoHelper.java | 208 ++++++ .../auth0/jwt/algorithms/ECDSAAlgorithm.java | 306 +++++++++ .../auth0/jwt/algorithms/HMACAlgorithm.java | 81 +++ .../auth0/jwt/algorithms/NoneAlgorithm.java | 36 + .../auth0/jwt/algorithms/RSAAlgorithm.java | 112 ++++ .../AlgorithmMismatchException.java | 10 + .../exceptions/IncorrectClaimException.java | 44 ++ .../jwt/exceptions/InvalidClaimException.java | 10 + .../jwt/exceptions/JWTCreationException.java | 10 + .../jwt/exceptions/JWTDecodeException.java | 14 + .../exceptions/JWTVerificationException.java | 14 + .../jwt/exceptions/MissingClaimException.java | 23 + .../SignatureGenerationException.java | 12 + .../SignatureVerificationException.java | 16 + .../jwt/exceptions/TokenExpiredException.java | 22 + .../com/auth0/jwt/impl/BasicHeader.java | 71 ++ .../com/auth0/jwt/impl/ClaimsHolder.java | 19 + .../com/auth0/jwt/impl/ClaimsSerializer.java | 86 +++ .../auth0/jwt/impl/ExpectedCheckHolder.java | 25 + .../auth0/jwt/impl/HeaderClaimsHolder.java | 12 + .../auth0/jwt/impl/HeaderDeserializer.java | 50 ++ .../com/auth0/jwt/impl/HeaderSerializer.java | 10 + .../com/auth0/jwt/impl/JWTParser.java | 92 +++ .../com/auth0/jwt/impl/JsonNodeClaim.java | 182 +++++ .../auth0/jwt/impl/PayloadClaimsHolder.java | 12 + .../auth0/jwt/impl/PayloadDeserializer.java | 91 +++ .../com/auth0/jwt/impl/PayloadImpl.java | 129 ++++ .../com/auth0/jwt/impl/PayloadSerializer.java | 66 ++ .../com/auth0/jwt/impl/package-info.java | 7 + .../com/auth0/jwt/interfaces/Claim.java | 131 ++++ .../com/auth0/jwt/interfaces/DecodedJWT.java | 37 + .../jwt/interfaces/ECDSAKeyProvider.java | 10 + .../com/auth0/jwt/interfaces/Header.java | 44 ++ .../auth0/jwt/interfaces/JWTPartsParser.java | 28 + .../com/auth0/jwt/interfaces/JWTVerifier.java | 40 ++ .../com/auth0/jwt/interfaces/KeyProvider.java | 38 ++ .../com/auth0/jwt/interfaces/Payload.java | 104 +++ .../auth0/jwt/interfaces/RSAKeyProvider.java | 10 + .../auth0/jwt/interfaces/Verification.java | 267 ++++++++ .../javax-4.0.1/crypto/KeyGenerator.java | 26 + .../javax-4.0.1/crypto/KeyGeneratorSpi.java | 16 + .../stubs/javax-4.0.1/crypto/SecretKey.java | 11 + .../security/auth/Destroyable.java | 10 + .../javax-4.0.1/servlet/AsyncContext.java | 31 + .../stubs/javax-4.0.1/servlet/AsyncEvent.java | 20 + .../javax-4.0.1/servlet/AsyncListener.java | 14 + .../javax-4.0.1/servlet/DispatcherType.java | 10 + .../stubs/javax-4.0.1/servlet/Filter.java | 15 + .../javax-4.0.1/servlet/FilterChain.java | 11 + .../javax-4.0.1/servlet/FilterConfig.java | 14 + .../servlet/FilterRegistration.java | 19 + .../javax-4.0.1/servlet/GenericServlet.java | 28 + .../servlet/HttpConstraintElement.java | 16 + .../servlet/HttpMethodConstraintElement.java | 13 + .../servlet/MultipartConfigElement.java | 17 + .../javax-4.0.1/servlet/ReadListener.java | 12 + .../javax-4.0.1/servlet/Registration.java | 20 + .../servlet/RequestDispatcher.java | 30 + .../stubs/javax-4.0.1/servlet/Servlet.java | 16 + .../javax-4.0.1/servlet/ServletConfig.java | 14 + .../javax-4.0.1/servlet/ServletContext.java | 83 +++ .../servlet/ServletInputStream.java | 15 + .../servlet/ServletOutputStream.java | 28 + .../servlet/ServletRegistration.java | 23 + .../javax-4.0.1/servlet/ServletRequest.java | 55 ++ .../javax-4.0.1/servlet/ServletResponse.java | 27 + .../servlet/ServletSecurityElement.java | 19 + .../servlet/SessionCookieConfig.java | 22 + .../servlet/SessionTrackingMode.java | 10 + .../javax-4.0.1/servlet/WriteListener.java | 11 + .../servlet/annotation/HttpConstraint.java | 18 + .../annotation/HttpMethodConstraint.java | 19 + .../servlet/annotation/MultipartConfig.java | 19 + .../servlet/annotation/ServletSecurity.java | 33 + .../servlet/annotation/WebInitParam.java | 20 + .../servlet/annotation/WebServlet.java | 28 + .../descriptor/JspConfigDescriptor.java | 13 + .../JspPropertyGroupDescriptor.java | 21 + .../servlet/descriptor/TaglibDescriptor.java | 10 + .../javax-4.0.1/servlet/http/Cookie.java | 29 + .../javax-4.0.1/servlet/http/HttpServlet.java | 24 + .../servlet/http/HttpServletMapping.java | 13 + .../servlet/http/HttpServletRequest.java | 60 ++ .../servlet/http/HttpServletResponse.java | 77 +++ .../javax-4.0.1/servlet/http/HttpSession.java | 28 + .../servlet/http/HttpSessionContext.java | 12 + .../servlet/http/HttpUpgradeHandler.java | 11 + .../servlet/http/MappingMatch.java | 10 + .../stubs/javax-4.0.1/servlet/http/Part.java | 20 + .../javax-4.0.1/servlet/http/PushBuilder.java | 23 + .../servlet/http/WebConnection.java | 12 + 103 files changed, 5661 insertions(+) create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Test.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/options create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/pom.xml create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java create mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java create mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java create mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java create mode 100644 java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Filter.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Registration.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java create mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref new file mode 100644 index 00000000000..49e8b6542d6 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Test.java b/java/ql/test/experimental/query-tests/security/CWE-347/Test.java new file mode 100644 index 00000000000..48ff7898e49 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Test.java @@ -0,0 +1,92 @@ +package com.example.JwtTest; + +import java.io.*; +import java.security.NoSuchAlgorithmException; +import java.util.Objects; +import java.util.Optional; +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTCreationException; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class Test extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + try { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + // OK: first decode without signature verification + // and then verify with signature verification + String JwtToken1 = request.getParameter("JWT1"); + String userName = decodeToken(JwtToken1); + verifyToken(JwtToken1, "A Securely generated Key"); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); + } catch (Exception e) { + // TODO: handle exception + } + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + // NOT OK: only decode, no verification + String JwtToken2 = request.getParameter("JWT2"); + String userName = decodeToken(JwtToken2); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + // OK: no clue of the use of unsafe decoded JWT return value + JwtToken2 = request.getParameter("JWT2"); + JWT.decode(JwtToken2); + + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); + } + + public static boolean verifyToken(final String token, final String key) { + try { + JWTVerifier verifier = JWT.require(Algorithm.HMAC256(key)).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + System.out.printf("jwt decode fail, token: %s", e); + } + return false; + } + + + public static String decodeToken(final String token) { + DecodedJWT jwt = JWT.decode(token); + return Optional.of(jwt).map(item -> item.getClaim("userName").asString()).orElse(""); + } + + + private static String getSecureRandomKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // for example + return keyGen.generateKey().toString(); + } + static final String JWT_KEY = "KEY"; +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/options b/java/ql/test/experimental/query-tests/security/CWE-347/options new file mode 100644 index 00000000000..b7e23cf09f6 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/auth0-jwt-4.4.0/:${testdir}/../../../../stubs/javax-servlet-2.5/ \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml b/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml new file mode 100644 index 00000000000..870a294c80e --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + com.example + JwtTest + 1.0-SNAPSHOT + JwtTest + war + + + UTF-8 + 11 + 11 + 5.9.2 + + + + + com.auth0 + java-jwt + 4.4.0 + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + + + + \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java new file mode 100644 index 00000000000..1107f313a30 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java @@ -0,0 +1,29 @@ +package com.auth0.jwt; + +/** + * Contains constants representing the JWT header parameter names. + */ +public final class HeaderParams { + + private HeaderParams() {} + + /** + * The algorithm used to sign a JWT. + */ + public static final String ALGORITHM = "alg"; + + /** + * The content type of the JWT. + */ + public static final String CONTENT_TYPE = "cty"; + + /** + * The media type of the JWT. + */ + public static final String TYPE = "typ"; + + /** + * The key ID of a JWT used to specify the key for signature validation. + */ + public static final String KEY_ID = "kid"; +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java new file mode 100644 index 00000000000..696abe4001c --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java @@ -0,0 +1,74 @@ +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.impl.JWTParser; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.Verification; + +/** + * Exposes all the JWT functionalities. + */ +@SuppressWarnings("WeakerAccess") +public class JWT { + + private final JWTParser parser; + + /** + * Constructs a new instance of the JWT library. Use this if you need to decode many JWT + * tokens on the fly and do not wish to instantiate a new parser for each invocation. + */ + public JWT() { + parser = new JWTParser(); + } + + /** + * Decode a given Json Web Token. + *

    + * Note that this method doesn't verify the token's signature! + * Use it only if you trust the token or if you have already verified it. + * + * @param token with jwt format as string. + * @return a decoded JWT. + * @throws JWTDecodeException if any part of the token contained an invalid jwt + * or JSON format of each of the jwt parts. + */ + public DecodedJWT decodeJwt(String token) throws JWTDecodeException { + return new JWTDecoder(parser, token); + } + + /** + * Decode a given Json Web Token. + *

    + * Note that this method doesn't verify the token's signature! + * Use it only if you trust the token or if you have already verified it. + * + * @param token with jwt format as string. + * @return a decoded JWT. + * @throws JWTDecodeException if any part of the token contained an invalid jwt + * or JSON format of each of the jwt parts. + */ + public static DecodedJWT decode(String token) throws JWTDecodeException { + return new JWTDecoder(token); + } + + /** + * Returns a {@link Verification} builder with the algorithm to be used to validate token signature. + * + * @param algorithm that will be used to verify the token's signature. + * @return {@link Verification} builder + * @throws IllegalArgumentException if the provided algorithm is null. + */ + public static Verification require(Algorithm algorithm) { + return JWTVerifier.init(algorithm); + } + + /** + * Returns a Json Web Token builder used to create and sign tokens. + * + * @return a token builder. + */ + public static JWTCreator.Builder create() { + return JWTCreator.init(); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java new file mode 100644 index 00000000000..0b0d21e4288 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java @@ -0,0 +1,631 @@ +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTCreationException; +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.impl.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.*; +import java.util.Map.Entry; + +/** + * The JWTCreator class holds the sign method to generate a complete JWT (with Signature) + * from a given Header and Payload content. + *

    + * This class is thread-safe. + */ +@SuppressWarnings("WeakerAccess") +public final class JWTCreator { + + private final Algorithm algorithm; + private final String headerJson; + private final String payloadJson; + + private static final ObjectMapper mapper; + private static final SimpleModule module; + + static { + module = new SimpleModule(); + module.addSerializer(PayloadClaimsHolder.class, new PayloadSerializer()); + module.addSerializer(HeaderClaimsHolder.class, new HeaderSerializer()); + + mapper = JsonMapper.builder() + .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) + .build() + .registerModule(module); + } + + private JWTCreator(Algorithm algorithm, Map headerClaims, Map payloadClaims) + throws JWTCreationException { + this.algorithm = algorithm; + try { + headerJson = mapper.writeValueAsString(new HeaderClaimsHolder(headerClaims)); + payloadJson = mapper.writeValueAsString(new PayloadClaimsHolder(payloadClaims)); + } catch (JsonProcessingException e) { + throw new JWTCreationException("Some of the Claims couldn't be converted to a valid JSON format.", e); + } + } + + + /** + * Initialize a JWTCreator instance. + * + * @return a JWTCreator.Builder instance to configure. + */ + static JWTCreator.Builder init() { + return new Builder(); + } + + /** + * The Builder class holds the Claims that defines the JWT to be created. + */ + public static class Builder { + private final Map payloadClaims; + private final Map headerClaims; + + Builder() { + this.payloadClaims = new LinkedHashMap<>(); + this.headerClaims = new LinkedHashMap<>(); + } + + /** + * Add specific Claims to set as the Header. + * If provided map is null then nothing is changed + * + * @param headerClaims the values to use as Claims in the token's Header. + * @return this same Builder instance. + */ + public Builder withHeader(Map headerClaims) { + if (headerClaims == null) { + return this; + } + + for (Map.Entry entry : headerClaims.entrySet()) { + if (entry.getValue() == null) { + this.headerClaims.remove(entry.getKey()); + } else { + this.headerClaims.put(entry.getKey(), entry.getValue()); + } + } + + return this; + } + + /** + * Add specific Claims to set as the Header. + * If provided json is null then nothing is changed + * + * @param headerClaimsJson the values to use as Claims in the token's Header. + * @return this same Builder instance. + * @throws IllegalArgumentException if json value has invalid structure + */ + public Builder withHeader(String headerClaimsJson) throws IllegalArgumentException { + if (headerClaimsJson == null) { + return this; + } + + try { + Map headerClaims = mapper.readValue(headerClaimsJson, LinkedHashMap.class); + return withHeader(headerClaims); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException("Invalid header JSON", e); + } + } + + /** + * Add a specific Key Id ("kid") claim to the Header. + * If the {@link Algorithm} used to sign this token was instantiated with a KeyProvider, + * the 'kid' value will be taken from that provider and this one will be ignored. + * + * @param keyId the Key Id value. + * @return this same Builder instance. + */ + public Builder withKeyId(String keyId) { + this.headerClaims.put(HeaderParams.KEY_ID, keyId); + return this; + } + + /** + * Add a specific Issuer ("iss") claim to the Payload. + * + * @param issuer the Issuer value. + * @return this same Builder instance. + */ + public Builder withIssuer(String issuer) { + addClaim(RegisteredClaims.ISSUER, issuer); + return this; + } + + /** + * Add a specific Subject ("sub") claim to the Payload. + * + * @param subject the Subject value. + * @return this same Builder instance. + */ + public Builder withSubject(String subject) { + addClaim(RegisteredClaims.SUBJECT, subject); + return this; + } + + /** + * Add a specific Audience ("aud") claim to the Payload. + * + * @param audience the Audience value. + * @return this same Builder instance. + */ + public Builder withAudience(String... audience) { + addClaim(RegisteredClaims.AUDIENCE, audience); + return this; + } + + /** + * Add a specific Expires At ("exp") claim to the payload. The claim will be written as seconds since the epoch. + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param expiresAt the Expires At value. + * @return this same Builder instance. + */ + public Builder withExpiresAt(Date expiresAt) { + addClaim(RegisteredClaims.EXPIRES_AT, expiresAt); + return this; + } + + /** + * Add a specific Expires At ("exp") claim to the payload. The claim will be written as seconds since the epoch; + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param expiresAt the Expires At value. + * @return this same Builder instance. + */ + public Builder withExpiresAt(Instant expiresAt) { + addClaim(RegisteredClaims.EXPIRES_AT, expiresAt); + return this; + } + + /** + * Add a specific Not Before ("nbf") claim to the Payload. The claim will be written as seconds since the epoch; + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param notBefore the Not Before value. + * @return this same Builder instance. + */ + public Builder withNotBefore(Date notBefore) { + addClaim(RegisteredClaims.NOT_BEFORE, notBefore); + return this; + } + + /** + * Add a specific Not Before ("nbf") claim to the Payload. The claim will be written as seconds since the epoch; + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param notBefore the Not Before value. + * @return this same Builder instance. + */ + public Builder withNotBefore(Instant notBefore) { + addClaim(RegisteredClaims.NOT_BEFORE, notBefore); + return this; + } + + /** + * Add a specific Issued At ("iat") claim to the Payload. The claim will be written as seconds since the epoch; + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param issuedAt the Issued At value. + * @return this same Builder instance. + */ + public Builder withIssuedAt(Date issuedAt) { + addClaim(RegisteredClaims.ISSUED_AT, issuedAt); + return this; + } + + /** + * Add a specific Issued At ("iat") claim to the Payload. The claim will be written as seconds since the epoch; + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param issuedAt the Issued At value. + * @return this same Builder instance. + */ + public Builder withIssuedAt(Instant issuedAt) { + addClaim(RegisteredClaims.ISSUED_AT, issuedAt); + return this; + } + + /** + * Add a specific JWT Id ("jti") claim to the Payload. + * + * @param jwtId the Token Id value. + * @return this same Builder instance. + */ + public Builder withJWTId(String jwtId) { + addClaim(RegisteredClaims.JWT_ID, jwtId); + return this; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Boolean value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Integer value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Long value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Double value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, String value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. The claim will be written as seconds since the epoch. + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Date value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Claim value. The claim will be written as seconds since the epoch. + * Milliseconds will be truncated by rounding down to the nearest second. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Instant value) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, value); + return this; + } + + /** + * Add a custom Map Claim with the given items. + *

    + * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. + * {@linkplain List}s can contain null elements. + * + * @param name the Claim's name. + * @param map the Claim's key-values. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null, or if the map contents does not validate. + */ + public Builder withClaim(String name, Map map) throws IllegalArgumentException { + assertNonNull(name); + // validate map contents + if (map != null && !validateClaim(map)) { + throw new IllegalArgumentException("Expected map containing Map, List, Boolean, Integer, " + + "Long, Double, String and Date"); + } + addClaim(name, map); + return this; + } + + /** + * Add a custom List Claim with the given items. + *

    + * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. + * {@linkplain List}s can contain null elements. + * + * @param name the Claim's name. + * @param list the Claim's list of values. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null, or if the list contents does not validate. + */ + public Builder withClaim(String name, List list) throws IllegalArgumentException { + assertNonNull(name); + // validate list contents + if (list != null && !validateClaim(list)) { + throw new IllegalArgumentException("Expected list containing Map, List, Boolean, Integer, " + + "Long, Double, String and Date"); + } + addClaim(name, list); + return this; + } + + /** + * Add a custom claim with null value. + * + * @param name the Claim's name. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null + */ + public Builder withNullClaim(String name) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, null); + return this; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withArrayClaim(String name, String[] items) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, items); + return this; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withArrayClaim(String name, Integer[] items) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, items); + return this; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null + */ + public Builder withArrayClaim(String name, Long[] items) throws IllegalArgumentException { + assertNonNull(name); + addClaim(name, items); + return this; + } + + /** + * Add specific Claims to set as the Payload. If the provided map is null then + * nothing is changed. + *

    + * Accepted types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. + * {@linkplain Map}s and {@linkplain List}s can contain null elements. + *

    + * + *

    + * If any of the claims are invalid, none will be added. + *

    + * + * @param payloadClaims the values to use as Claims in the token's payload. + * @return this same Builder instance. + * @throws IllegalArgumentException if any of the claim keys or null, + * or if the values are not of a supported type. + */ + public Builder withPayload(Map payloadClaims) throws IllegalArgumentException { + if (payloadClaims == null) { + return this; + } + + if (!validatePayload(payloadClaims)) { + throw new IllegalArgumentException("Claim values must only be of types Map, List, Boolean, Integer, " + + "Long, Double, String, Date, Instant, and Null"); + } + + // add claims only after validating all claims so as not to corrupt the claims map of this builder + for (Map.Entry entry : payloadClaims.entrySet()) { + addClaim(entry.getKey(), entry.getValue()); + } + + return this; + } + + /** + * Add specific Claims to set as the Payload. If the provided json is null then + * nothing is changed. + * + *

    + * If any of the claims are invalid, none will be added. + *

    + * + * @param payloadClaimsJson the values to use as Claims in the token's payload. + * @return this same Builder instance. + * @throws IllegalArgumentException if any of the claim keys or null, + * or if the values are not of a supported type, + * or if json value has invalid structure. + */ + public Builder withPayload(String payloadClaimsJson) throws IllegalArgumentException { + if (payloadClaimsJson == null) { + return this; + } + + try { + Map payloadClaims = mapper.readValue(payloadClaimsJson, LinkedHashMap.class); + return withPayload(payloadClaims); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException("Invalid payload JSON", e); + } + } + + private boolean validatePayload(Map payload) { + for (Map.Entry entry : payload.entrySet()) { + String key = entry.getKey(); + assertNonNull(key); + + Object value = entry.getValue(); + if (value instanceof List && !validateClaim((List) value)) { + return false; + } else if (value instanceof Map && !validateClaim((Map) value)) { + return false; + } else if (!isSupportedType(value)) { + return false; + } + } + return true; + } + + private static boolean validateClaim(Map map) { + // do not accept null values in maps + for (Entry entry : map.entrySet()) { + Object value = entry.getValue(); + if (!isSupportedType(value)) { + return false; + } + + if (!(entry.getKey() instanceof String)) { + return false; + } + } + return true; + } + + private static boolean validateClaim(List list) { + // accept null values in list + for (Object object : list) { + if (!isSupportedType(object)) { + return false; + } + } + return true; + } + + private static boolean isSupportedType(Object value) { + if (value instanceof List) { + return validateClaim((List) value); + } else if (value instanceof Map) { + return validateClaim((Map) value); + } else { + return isBasicType(value); + } + } + + private static boolean isBasicType(Object value) { + if (value == null) { + return true; + } else { + Class c = value.getClass(); + + if (c.isArray()) { + return c == Integer[].class || c == Long[].class || c == String[].class; + } + return c == String.class || c == Integer.class || c == Long.class || c == Double.class + || c == Date.class || c == Instant.class || c == Boolean.class; + } + } + + /** + * Creates a new JWT and signs is with the given algorithm. + * + * @param algorithm used to sign the JWT + * @return a new JWT token + * @throws IllegalArgumentException if the provided algorithm is null. + * @throws JWTCreationException if the claims could not be converted to a valid JSON + * or there was a problem with the signing key. + */ + public String sign(Algorithm algorithm) throws IllegalArgumentException, JWTCreationException { + if (algorithm == null) { + throw new IllegalArgumentException("The Algorithm cannot be null."); + } + headerClaims.put(HeaderParams.ALGORITHM, algorithm.getName()); + if (!headerClaims.containsKey(HeaderParams.TYPE)) { + headerClaims.put(HeaderParams.TYPE, "JWT"); + } + String signingKeyId = algorithm.getSigningKeyId(); + if (signingKeyId != null) { + withKeyId(signingKeyId); + } + return new JWTCreator(algorithm, headerClaims, payloadClaims).sign(); + } + + private void assertNonNull(String name) { + if (name == null) { + throw new IllegalArgumentException("The Custom Claim's name can't be null."); + } + } + + private void addClaim(String name, Object value) { + payloadClaims.put(name, value); + } + } + + private String sign() throws SignatureGenerationException { + String header = Base64.getUrlEncoder().withoutPadding() + .encodeToString(headerJson.getBytes(StandardCharsets.UTF_8)); + String payload = Base64.getUrlEncoder().withoutPadding() + .encodeToString(payloadJson.getBytes(StandardCharsets.UTF_8)); + + byte[] signatureBytes = algorithm.sign(header.getBytes(StandardCharsets.UTF_8), + payload.getBytes(StandardCharsets.UTF_8)); + String signature = Base64.getUrlEncoder().withoutPadding().encodeToString((signatureBytes)); + + return String.format("%s.%s.%s", header, payload, signature); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java new file mode 100644 index 00000000000..cc283095f25 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java @@ -0,0 +1,156 @@ +package com.auth0.jwt; + +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.impl.JWTParser; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.Header; +import com.auth0.jwt.interfaces.Payload; + +import java.io.Serializable; +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.Base64; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * The JWTDecoder class holds the decode method to parse a given JWT token into it's JWT representation. + *

    + * This class is thread-safe. + */ +@SuppressWarnings("WeakerAccess") +final class JWTDecoder implements DecodedJWT, Serializable { + + private static final long serialVersionUID = 1873362438023312895L; + + private final String[] parts; + private final Header header; + private final Payload payload; + + JWTDecoder(String jwt) throws JWTDecodeException { + this(new JWTParser(), jwt); + } + + JWTDecoder(JWTParser converter, String jwt) throws JWTDecodeException { + parts = TokenUtils.splitToken(jwt); + String headerJson; + String payloadJson; + try { + headerJson = new String(Base64.getUrlDecoder().decode(parts[0]), StandardCharsets.UTF_8); + payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); + } catch (NullPointerException e) { + throw new JWTDecodeException("The UTF-8 Charset isn't initialized.", e); + } catch (IllegalArgumentException e) { + throw new JWTDecodeException("The input is not a valid base 64 encoded string.", e); + } + header = converter.parseHeader(headerJson); + payload = converter.parsePayload(payloadJson); + } + + @Override + public String getAlgorithm() { + return header.getAlgorithm(); + } + + @Override + public String getType() { + return header.getType(); + } + + @Override + public String getContentType() { + return header.getContentType(); + } + + @Override + public String getKeyId() { + return header.getKeyId(); + } + + @Override + public Claim getHeaderClaim(String name) { + return header.getHeaderClaim(name); + } + + @Override + public String getIssuer() { + return payload.getIssuer(); + } + + @Override + public String getSubject() { + return payload.getSubject(); + } + + @Override + public List getAudience() { + return payload.getAudience(); + } + + @Override + public Date getExpiresAt() { + return payload.getExpiresAt(); + } + + @Override + public Instant getExpiresAtAsInstant() { + return payload.getExpiresAtAsInstant(); + } + + @Override + public Date getNotBefore() { + return payload.getNotBefore(); + } + + @Override + public Instant getNotBeforeAsInstant() { + return payload.getNotBeforeAsInstant(); + } + + @Override + public Date getIssuedAt() { + return payload.getIssuedAt(); + } + + @Override + public Instant getIssuedAtAsInstant() { + return payload.getIssuedAtAsInstant(); + } + + @Override + public String getId() { + return payload.getId(); + } + + @Override + public Claim getClaim(String name) { + return payload.getClaim(name); + } + + @Override + public Map getClaims() { + return payload.getClaims(); + } + + @Override + public String getHeader() { + return parts[0]; + } + + @Override + public String getPayload() { + return parts[1]; + } + + @Override + public String getSignature() { + return parts[2]; + } + + @Override + public String getToken() { + return String.format("%s.%s.%s", parts[0], parts[1], parts[2]); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java new file mode 100644 index 00000000000..6cec2026cab --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java @@ -0,0 +1,493 @@ +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.*; +import com.auth0.jwt.impl.JWTParser; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.impl.ExpectedCheckHolder; +import com.auth0.jwt.interfaces.Verification; + +import java.time.Clock; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.function.BiPredicate; + +/** + * The JWTVerifier class holds the verify method to assert that a given Token has not only a proper JWT format, + * but also its signature matches. + *

    + * This class is thread-safe. + * + * @see com.auth0.jwt.interfaces.JWTVerifier + */ +public final class JWTVerifier implements com.auth0.jwt.interfaces.JWTVerifier { + private final Algorithm algorithm; + final List expectedChecks; + private final JWTParser parser; + + JWTVerifier(Algorithm algorithm, List expectedChecks) { + this.algorithm = algorithm; + this.expectedChecks = Collections.unmodifiableList(expectedChecks); + this.parser = new JWTParser(); + } + + /** + * Initialize a {@link Verification} instance using the given Algorithm. + * + * @param algorithm the Algorithm to use on the JWT verification. + * @return a {@link Verification} instance to configure. + * @throws IllegalArgumentException if the provided algorithm is null. + */ + static Verification init(Algorithm algorithm) throws IllegalArgumentException { + return new BaseVerification(algorithm); + } + + /** + * {@link Verification} implementation that accepts all the expected Claim values for verification, and + * builds a {@link com.auth0.jwt.interfaces.JWTVerifier} used to verify a JWT's signature and expected claims. + * + * Note that this class is not thread-safe. Calling {@link #build()} returns an instance of + * {@link com.auth0.jwt.interfaces.JWTVerifier} which can be reused. + */ + public static class BaseVerification implements Verification { + private final Algorithm algorithm; + private final List expectedChecks; + private long defaultLeeway; + private final Map customLeeways; + private boolean ignoreIssuedAt; + private Clock clock; + + BaseVerification(Algorithm algorithm) throws IllegalArgumentException { + if (algorithm == null) { + throw new IllegalArgumentException("The Algorithm cannot be null."); + } + + this.algorithm = algorithm; + this.expectedChecks = new ArrayList<>(); + this.customLeeways = new HashMap<>(); + this.defaultLeeway = 0; + } + + @Override + public Verification withIssuer(String... issuer) { + List value = isNullOrEmpty(issuer) ? null : Arrays.asList(issuer); + addCheck(RegisteredClaims.ISSUER, ((claim, decodedJWT) -> { + if (verifyNull(claim, value)) { + return true; + } + if (value == null || !value.contains(claim.asString())) { + throw new IncorrectClaimException( + "The Claim 'iss' value doesn't match the required issuer.", RegisteredClaims.ISSUER, claim); + } + return true; + })); + return this; + } + + @Override + public Verification withSubject(String subject) { + addCheck(RegisteredClaims.SUBJECT, (claim, decodedJWT) -> + verifyNull(claim, subject) || subject.equals(claim.asString())); + return this; + } + + @Override + public Verification withAudience(String... audience) { + List value = isNullOrEmpty(audience) ? null : Arrays.asList(audience); + addCheck(RegisteredClaims.AUDIENCE, ((claim, decodedJWT) -> { + if (verifyNull(claim, value)) { + return true; + } + if (!assertValidAudienceClaim(decodedJWT.getAudience(), value, true)) { + throw new IncorrectClaimException("The Claim 'aud' value doesn't contain the required audience.", + RegisteredClaims.AUDIENCE, claim); + } + return true; + })); + return this; + } + + @Override + public Verification withAnyOfAudience(String... audience) { + List value = isNullOrEmpty(audience) ? null : Arrays.asList(audience); + addCheck(RegisteredClaims.AUDIENCE, ((claim, decodedJWT) -> { + if (verifyNull(claim, value)) { + return true; + } + if (!assertValidAudienceClaim(decodedJWT.getAudience(), value, false)) { + throw new IncorrectClaimException("The Claim 'aud' value doesn't contain the required audience.", + RegisteredClaims.AUDIENCE, claim); + } + return true; + })); + return this; + } + + @Override + public Verification acceptLeeway(long leeway) throws IllegalArgumentException { + assertPositive(leeway); + this.defaultLeeway = leeway; + return this; + } + + @Override + public Verification acceptExpiresAt(long leeway) throws IllegalArgumentException { + assertPositive(leeway); + customLeeways.put(RegisteredClaims.EXPIRES_AT, leeway); + return this; + } + + @Override + public Verification acceptNotBefore(long leeway) throws IllegalArgumentException { + assertPositive(leeway); + customLeeways.put(RegisteredClaims.NOT_BEFORE, leeway); + return this; + } + + @Override + public Verification acceptIssuedAt(long leeway) throws IllegalArgumentException { + assertPositive(leeway); + customLeeways.put(RegisteredClaims.ISSUED_AT, leeway); + return this; + } + + @Override + public Verification ignoreIssuedAt() { + this.ignoreIssuedAt = true; + return this; + } + + @Override + public Verification withJWTId(String jwtId) { + addCheck(RegisteredClaims.JWT_ID, ((claim, decodedJWT) -> + verifyNull(claim, jwtId) || jwtId.equals(claim.asString()))); + return this; + } + + @Override + public Verification withClaimPresence(String name) throws IllegalArgumentException { + assertNonNull(name); + //since addCheck already checks presence, we just return true + withClaim(name, ((claim, decodedJWT) -> true)); + return this; + } + + @Override + public Verification withNullClaim(String name) throws IllegalArgumentException { + assertNonNull(name); + withClaim(name, ((claim, decodedJWT) -> claim.isNull())); + return this; + } + + @Override + public Verification withClaim(String name, Boolean value) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) + || value.equals(claim.asBoolean()))); + return this; + } + + @Override + public Verification withClaim(String name, Integer value) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) + || value.equals(claim.asInt()))); + return this; + } + + @Override + public Verification withClaim(String name, Long value) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) + || value.equals(claim.asLong()))); + return this; + } + + @Override + public Verification withClaim(String name, Double value) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) + || value.equals(claim.asDouble()))); + return this; + } + + @Override + public Verification withClaim(String name, String value) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) + || value.equals(claim.asString()))); + return this; + } + + @Override + public Verification withClaim(String name, Date value) throws IllegalArgumentException { + return withClaim(name, value != null ? value.toInstant() : null); + } + + @Override + public Verification withClaim(String name, Instant value) throws IllegalArgumentException { + assertNonNull(name); + // Since date-time claims are serialized as epoch seconds, + // we need to compare them with only seconds-granularity + addCheck(name, + ((claim, decodedJWT) -> verifyNull(claim, value) + || value.truncatedTo(ChronoUnit.SECONDS).equals(claim.asInstant()))); + return this; + } + + @Override + public Verification withClaim(String name, BiPredicate predicate) + throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, predicate) + || predicate.test(claim, decodedJWT))); + return this; + } + + @Override + public Verification withArrayClaim(String name, String... items) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) + || assertValidCollectionClaim(claim, items))); + return this; + } + + @Override + public Verification withArrayClaim(String name, Integer... items) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) + || assertValidCollectionClaim(claim, items))); + return this; + } + + @Override + public Verification withArrayClaim(String name, Long... items) throws IllegalArgumentException { + assertNonNull(name); + addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) + || assertValidCollectionClaim(claim, items))); + return this; + } + + @Override + public JWTVerifier build() { + return this.build(Clock.systemUTC()); + } + + /** + * Creates a new and reusable instance of the JWTVerifier with the configuration already provided. + * ONLY FOR TEST PURPOSES. + * + * @param clock the instance that will handle the current time. + * @return a new JWTVerifier instance with a custom {@link java.time.Clock} + */ + public JWTVerifier build(Clock clock) { + this.clock = clock; + addMandatoryClaimChecks(); + return new JWTVerifier(algorithm, expectedChecks); + } + + /** + * Fetches the Leeway set for claim or returns the {@link BaseVerification#defaultLeeway}. + * + * @param name Claim for which leeway is fetched + * @return Leeway value set for the claim + */ + public long getLeewayFor(String name) { + return customLeeways.getOrDefault(name, defaultLeeway); + } + + private void addMandatoryClaimChecks() { + long expiresAtLeeway = getLeewayFor(RegisteredClaims.EXPIRES_AT); + long notBeforeLeeway = getLeewayFor(RegisteredClaims.NOT_BEFORE); + long issuedAtLeeway = getLeewayFor(RegisteredClaims.ISSUED_AT); + + expectedChecks.add(constructExpectedCheck(RegisteredClaims.EXPIRES_AT, (claim, decodedJWT) -> + assertValidInstantClaim(RegisteredClaims.EXPIRES_AT, claim, expiresAtLeeway, true))); + expectedChecks.add(constructExpectedCheck(RegisteredClaims.NOT_BEFORE, (claim, decodedJWT) -> + assertValidInstantClaim(RegisteredClaims.NOT_BEFORE, claim, notBeforeLeeway, false))); + if (!ignoreIssuedAt) { + expectedChecks.add(constructExpectedCheck(RegisteredClaims.ISSUED_AT, (claim, decodedJWT) -> + assertValidInstantClaim(RegisteredClaims.ISSUED_AT, claim, issuedAtLeeway, false))); + } + } + + private boolean assertValidCollectionClaim(Claim claim, Object[] expectedClaimValue) { + List claimArr; + Object[] claimAsObject = claim.as(Object[].class); + + // Jackson uses 'natural' mapping which uses Integer if value fits in 32 bits. + if (expectedClaimValue instanceof Long[]) { + // convert Integers to Longs for comparison with equals + claimArr = new ArrayList<>(claimAsObject.length); + for (Object cao : claimAsObject) { + if (cao instanceof Integer) { + claimArr.add(((Integer) cao).longValue()); + } else { + claimArr.add(cao); + } + } + } else { + claimArr = Arrays.asList(claim.as(Object[].class)); + } + List valueArr = Arrays.asList(expectedClaimValue); + return claimArr.containsAll(valueArr); + } + + private boolean assertValidInstantClaim(String claimName, Claim claim, long leeway, boolean shouldBeFuture) { + Instant claimVal = claim.asInstant(); + Instant now = clock.instant().truncatedTo(ChronoUnit.SECONDS); + boolean isValid; + if (shouldBeFuture) { + isValid = assertInstantIsFuture(claimVal, leeway, now); + if (!isValid) { + throw new TokenExpiredException(String.format("The Token has expired on %s.", claimVal), claimVal); + } + } else { + isValid = assertInstantIsLessThanOrEqualToNow(claimVal, leeway, now); + if (!isValid) { + throw new IncorrectClaimException( + String.format("The Token can't be used before %s.", claimVal), claimName, claim); + } + } + return true; + } + + private boolean assertInstantIsFuture(Instant claimVal, long leeway, Instant now) { + return claimVal == null || now.minus(Duration.ofSeconds(leeway)).isBefore(claimVal); + } + + private boolean assertInstantIsLessThanOrEqualToNow(Instant claimVal, long leeway, Instant now) { + return !(claimVal != null && now.plus(Duration.ofSeconds(leeway)).isBefore(claimVal)); + } + + private boolean assertValidAudienceClaim( + List audience, + List values, + boolean shouldContainAll + ) { + return !(audience == null || (shouldContainAll && !audience.containsAll(values)) + || (!shouldContainAll && Collections.disjoint(audience, values))); + } + + private void assertPositive(long leeway) { + if (leeway < 0) { + throw new IllegalArgumentException("Leeway value can't be negative."); + } + } + + private void assertNonNull(String name) { + if (name == null) { + throw new IllegalArgumentException("The Custom Claim's name can't be null."); + } + } + + private void addCheck(String name, BiPredicate predicate) { + expectedChecks.add(constructExpectedCheck(name, (claim, decodedJWT) -> { + if (claim.isMissing()) { + throw new MissingClaimException(name); + } + return predicate.test(claim, decodedJWT); + })); + } + + private ExpectedCheckHolder constructExpectedCheck(String claimName, BiPredicate check) { + return new ExpectedCheckHolder() { + @Override + public String getClaimName() { + return claimName; + } + + @Override + public boolean verify(Claim claim, DecodedJWT decodedJWT) { + return check.test(claim, decodedJWT); + } + }; + } + + private boolean verifyNull(Claim claim, Object value) { + return value == null && claim.isNull(); + } + + private boolean isNullOrEmpty(String[] args) { + if (args == null || args.length == 0) { + return true; + } + boolean isAllNull = true; + for (String arg : args) { + if (arg != null) { + isAllNull = false; + break; + } + } + return isAllNull; + } + } + + + /** + * Perform the verification against the given Token, using any previous configured options. + * + * @param token to verify. + * @return a verified and decoded JWT. + * @throws AlgorithmMismatchException if the algorithm stated in the token's header is not equal to + * the one defined in the {@link JWTVerifier}. + * @throws SignatureVerificationException if the signature is invalid. + * @throws TokenExpiredException if the token has expired. + * @throws MissingClaimException if a claim to be verified is missing. + * @throws IncorrectClaimException if a claim contained a different value than the expected one. + */ + @Override + public DecodedJWT verify(String token) throws JWTVerificationException { + DecodedJWT jwt = new JWTDecoder(parser, token); + return verify(jwt); + } + + /** + * Perform the verification against the given decoded JWT, using any previous configured options. + * + * @param jwt to verify. + * @return a verified and decoded JWT. + * @throws AlgorithmMismatchException if the algorithm stated in the token's header is not equal to + * the one defined in the {@link JWTVerifier}. + * @throws SignatureVerificationException if the signature is invalid. + * @throws TokenExpiredException if the token has expired. + * @throws MissingClaimException if a claim to be verified is missing. + * @throws IncorrectClaimException if a claim contained a different value than the expected one. + */ + @Override + public DecodedJWT verify(DecodedJWT jwt) throws JWTVerificationException { + verifyAlgorithm(jwt, algorithm); + algorithm.verify(jwt); + verifyClaims(jwt, expectedChecks); + return jwt; + } + + private void verifyAlgorithm(DecodedJWT jwt, Algorithm expectedAlgorithm) throws AlgorithmMismatchException { + if (!expectedAlgorithm.getName().equals(jwt.getAlgorithm())) { + throw new AlgorithmMismatchException( + "The provided Algorithm doesn't match the one defined in the JWT's Header."); + } + } + + private void verifyClaims(DecodedJWT jwt, List expectedChecks) + throws TokenExpiredException, InvalidClaimException { + for (ExpectedCheckHolder expectedCheck : expectedChecks) { + boolean isValid; + String claimName = expectedCheck.getClaimName(); + Claim claim = jwt.getClaim(claimName); + + isValid = expectedCheck.verify(claim, jwt); + + if (!isValid) { + throw new IncorrectClaimException( + String.format("The Claim '%s' value doesn't match the required one.", claimName), + claimName, + claim + ); + } + } + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java new file mode 100644 index 00000000000..c55097169a2 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java @@ -0,0 +1,55 @@ +package com.auth0.jwt; + +/** + * Contains constants representing the name of the Registered Claim Names as defined in Section 4.1 of + * RFC 7529 + */ +public final class RegisteredClaims { + + private RegisteredClaims() { + } + + /** + * The "iss" (issuer) claim identifies the principal that issued the JWT. + * Refer RFC 7529 Section 4.1.1 + */ + public static final String ISSUER = "iss"; + + /** + * The "sub" (subject) claim identifies the principal that is the subject of the JWT. + * Refer RFC 7529 Section 4.1.2 + */ + public static final String SUBJECT = "sub"; + + /** + * The "aud" (audience) claim identifies the recipients that the JWT is intended for. + * Refer RFC 7529 Section 4.1.3 + */ + public static final String AUDIENCE = "aud"; + + /** + * The "exp" (expiration time) claim identifies the expiration time on or after which the JWT MUST NOT be + * accepted for processing. + * Refer RFC 7529 Section 4.1.4 + */ + public static final String EXPIRES_AT = "exp"; + + /** + * The "nbf" (not before) claim identifies the time before which the JWT MUST NOT be accepted for processing. + * Refer RFC 7529 Section 4.1.5 + */ + public static final String NOT_BEFORE = "nbf"; + + /** + * The "iat" (issued at) claim identifies the time at which the JWT was issued. + * Refer RFC 7529 Section 4.1.6 + */ + public static final String ISSUED_AT = "iat"; + + /** + * The "jti" (JWT ID) claim provides a unique identifier for the JWT. + * Refer RFC 7529 Section 4.1.7 + */ + public static final String JWT_ID = "jti"; + +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java new file mode 100644 index 00000000000..e62b9832c8e --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java @@ -0,0 +1,47 @@ +package com.auth0.jwt; + +import com.auth0.jwt.exceptions.JWTDecodeException; + +abstract class TokenUtils { + + /** + * Splits the given token on the "." chars into a String array with 3 parts. + * + * @param token the string to split. + * @return the array representing the 3 parts of the token. + * @throws JWTDecodeException if the Token doesn't have 3 parts. + */ + static String[] splitToken(String token) throws JWTDecodeException { + if (token == null) { + throw new JWTDecodeException("The token is null."); + } + + char delimiter = '.'; + + int firstPeriodIndex = token.indexOf(delimiter); + if (firstPeriodIndex == -1) { + throw wrongNumberOfParts(0); + } + + int secondPeriodIndex = token.indexOf(delimiter, firstPeriodIndex + 1); + if (secondPeriodIndex == -1) { + throw wrongNumberOfParts(2); + } + + // too many ? + if (token.indexOf(delimiter, secondPeriodIndex + 1) != -1) { + throw wrongNumberOfParts("> 3"); + } + + String[] parts = new String[3]; + parts[0] = token.substring(0, firstPeriodIndex); + parts[1] = token.substring(firstPeriodIndex + 1, secondPeriodIndex); + parts[2] = token.substring(secondPeriodIndex + 1); + + return parts; + } + + private static JWTDecodeException wrongNumberOfParts(Object partCount) { + return new JWTDecodeException(String.format("The token was expected to have 3 parts, but got %s.", partCount)); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java new file mode 100644 index 00000000000..27d799094d0 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java @@ -0,0 +1,404 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.ECDSAKeyProvider; +import com.auth0.jwt.interfaces.RSAKeyProvider; + +import java.security.interfaces.*; + +/** + * The Algorithm class represents an algorithm to be used in the Signing or Verification process of a Token. + *

    + * This class and its subclasses are thread-safe. + */ +@SuppressWarnings("WeakerAccess") +public abstract class Algorithm { + + private final String name; + private final String description; + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm RSA256(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return new RSAAlgorithm("RS256", "SHA256withRSA", keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA256(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return RSA256(RSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm RSA256(RSAKey key) throws IllegalArgumentException { + RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; + RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; + return RSA256(publicKey, privateKey); + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm RSA384(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return new RSAAlgorithm("RS384", "SHA384withRSA", keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA384(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return RSA384(RSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm RSA384(RSAKey key) throws IllegalArgumentException { + RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; + RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; + return RSA384(publicKey, privateKey); + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm RSA512(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return new RSAAlgorithm("RS512", "SHA512withRSA", keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA512(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return RSA512(RSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm RSA512(RSAKey key) throws IllegalArgumentException { + RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; + RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; + return RSA512(publicKey, privateKey); + } + + /** + * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 256 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC256 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC256(String secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS256", "HmacSHA256", secret); + } + + /** + * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 256 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC256 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC256(byte[] secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS256", "HmacSHA256", secret); + } + + /** + * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 384 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC384 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC384(String secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS384", "HmacSHA384", secret); + } + + /** + * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 384 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC384 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC384(byte[] secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS384", "HmacSHA384", secret); + } + + /** + * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 512 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC512 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC512(String secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS512", "HmacSHA512", secret); + } + + /** + * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". + * + * @param secret the secret bytes to use in the verify or signing instance. + * Ensure the length of the secret is at least 512 bit long + * See HMAC Key Length and Security in README + * @return a valid HMAC512 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC512(byte[] secret) throws IllegalArgumentException { + return new HMACAlgorithm("HS512", "HmacSHA512", secret); + } + + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA256(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return new ECDSAAlgorithm("ES256", "SHA256withECDSA", 32, keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA256(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return ECDSA256(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA256(ECKey key) throws IllegalArgumentException { + ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; + ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; + return ECDSA256(publicKey, privateKey); + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA384(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return new ECDSAAlgorithm("ES384", "SHA384withECDSA", 48, keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA384(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return ECDSA384(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA384(ECKey key) throws IllegalArgumentException { + ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; + ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; + return ECDSA384(publicKey, privateKey); + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA512(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return new ECDSAAlgorithm("ES512", "SHA512withECDSA", 66, keyProvider); + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA512(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return ECDSA512(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA512(ECKey key) throws IllegalArgumentException { + ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; + ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; + return ECDSA512(publicKey, privateKey); + } + + + public static Algorithm none() { + return new NoneAlgorithm(); + } + + protected Algorithm(String name, String description) { + this.name = name; + this.description = description; + } + + /** + * Getter for the Id of the Private Key used to sign the tokens. + * This is usually specified as the `kid` claim in the Header. + * + * @return the Key Id that identifies the Signing Key or null if it's not specified. + */ + public String getSigningKeyId() { + return null; + } + + /** + * Getter for the name of this Algorithm, as defined in the JWT Standard. i.e. "HS256" + * + * @return the algorithm name. + */ + public String getName() { + return name; + } + + /** + * Getter for the description of this Algorithm, + * required when instantiating a Mac or Signature object. i.e. "HmacSHA256" + * + * @return the algorithm description. + */ + String getDescription() { + return description; + } + + @Override + public String toString() { + return description; + } + + /** + * Verify the given token using this Algorithm instance. + * + * @param jwt the already decoded JWT that it's going to be verified. + * @throws SignatureVerificationException if the Token's Signature is invalid, + * meaning that it doesn't match the signatureBytes, + * or if the Key is invalid. + */ + public abstract void verify(DecodedJWT jwt) throws SignatureVerificationException; + + /** + * Sign the given content using this Algorithm instance. + * + * @param headerBytes an array of bytes representing the base64 encoded header content + * to be verified against the signature. + * @param payloadBytes an array of bytes representing the base64 encoded payload content + * to be verified against the signature. + * @return the signature in a base64 encoded array of bytes + * @throws SignatureGenerationException if the Key is invalid. + */ + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + // default implementation; keep around until sign(byte[]) method is removed + byte[] contentBytes = new byte[headerBytes.length + 1 + payloadBytes.length]; + + System.arraycopy(headerBytes, 0, contentBytes, 0, headerBytes.length); + contentBytes[headerBytes.length] = (byte) '.'; + System.arraycopy(payloadBytes, 0, contentBytes, headerBytes.length + 1, payloadBytes.length); + + return sign(contentBytes); + } + + /** + * Sign the given content using this Algorithm instance. + * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} + * + * @param contentBytes an array of bytes representing the base64 encoded content + * to be verified against the signature. + * @return the signature in a base64 encoded array of bytes + * @throws SignatureGenerationException if the Key is invalid. + */ + + public abstract byte[] sign(byte[] contentBytes) throws SignatureGenerationException; + +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java new file mode 100644 index 00000000000..7b8c5c2ac57 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java @@ -0,0 +1,208 @@ +package com.auth0.jwt.algorithms; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.*; + +/** + * Class used to perform the signature hash calculations. + *

    + * This class is thread-safe. + */ +class CryptoHelper { + + private static final byte JWT_PART_SEPARATOR = (byte) 46; + + /** + * Verify signature for JWT header and payload. + * + * @param algorithm algorithm name. + * @param secretBytes algorithm secret. + * @param header JWT header. + * @param payload JWT payload. + * @param signatureBytes JWT signature. + * @return true if signature is valid. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + + boolean verifySignatureFor( + String algorithm, + byte[] secretBytes, + String header, + String payload, + byte[] signatureBytes + ) throws NoSuchAlgorithmException, InvalidKeyException { + return verifySignatureFor(algorithm, secretBytes, + header.getBytes(StandardCharsets.UTF_8), payload.getBytes(StandardCharsets.UTF_8), signatureBytes); + } + + /** + * Verify signature for JWT header and payload. + * + * @param algorithm algorithm name. + * @param secretBytes algorithm secret. + * @param headerBytes JWT header. + * @param payloadBytes JWT payload. + * @param signatureBytes JWT signature. + * @return true if signature is valid. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + + boolean verifySignatureFor( + String algorithm, + byte[] secretBytes, + byte[] headerBytes, + byte[] payloadBytes, + byte[] signatureBytes + ) throws NoSuchAlgorithmException, InvalidKeyException { + return MessageDigest.isEqual(createSignatureFor(algorithm, secretBytes, headerBytes, payloadBytes), + signatureBytes); + } + + /** + * Verify signature for JWT header and payload. + * + * @param algorithm algorithm name. + * @param publicKey algorithm public key. + * @param header JWT header. + * @param payload JWT payload. + * @param signatureBytes JWT signature. + * @return true if signature is valid. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + boolean verifySignatureFor( + String algorithm, + PublicKey publicKey, + String header, + String payload, + byte[] signatureBytes + ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { + return verifySignatureFor(algorithm, publicKey, header.getBytes(StandardCharsets.UTF_8), + payload.getBytes(StandardCharsets.UTF_8), signatureBytes); + } + + /** + * Verify signature for JWT header and payload using a public key. + * + * @param algorithm algorithm name. + * @param publicKey the public key to use for verification. + * @param headerBytes JWT header. + * @param payloadBytes JWT payload. + * @param signatureBytes JWT signature. + * @return true if signature is valid. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + boolean verifySignatureFor( + String algorithm, + PublicKey publicKey, + byte[] headerBytes, + byte[] payloadBytes, + byte[] signatureBytes + ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { + final Signature s = Signature.getInstance(algorithm); + s.initVerify(publicKey); + s.update(headerBytes); + s.update(JWT_PART_SEPARATOR); + s.update(payloadBytes); + return s.verify(signatureBytes); + } + + /** + * Create signature for JWT header and payload using a private key. + * + * @param algorithm algorithm name. + * @param privateKey the private key to use for signing. + * @param headerBytes JWT header. + * @param payloadBytes JWT payload. + * @return the signature bytes. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + * @throws SignatureException if this signature object is not initialized properly + * or if this signature algorithm is unable to process the input data provided. + */ + byte[] createSignatureFor( + String algorithm, + PrivateKey privateKey, + byte[] headerBytes, + byte[] payloadBytes + ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { + final Signature s = Signature.getInstance(algorithm); + s.initSign(privateKey); + s.update(headerBytes); + s.update(JWT_PART_SEPARATOR); + s.update(payloadBytes); + return s.sign(); + } + + /** + * Create signature for JWT header and payload. + * + * @param algorithm algorithm name. + * @param secretBytes algorithm secret. + * @param headerBytes JWT header. + * @param payloadBytes JWT payload. + * @return the signature bytes. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + byte[] createSignatureFor( + String algorithm, + byte[] secretBytes, + byte[] headerBytes, + byte[] payloadBytes + ) throws NoSuchAlgorithmException, InvalidKeyException { + final Mac mac = Mac.getInstance(algorithm); + mac.init(new SecretKeySpec(secretBytes, algorithm)); + mac.update(headerBytes); + mac.update(JWT_PART_SEPARATOR); + return mac.doFinal(payloadBytes); + } + + /** + * Create signature. + * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} + * + * @param algorithm algorithm name. + * @param secretBytes algorithm secret. + * @param contentBytes the content to be signed. + * @return the signature bytes. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + */ + byte[] createSignatureFor(String algorithm, byte[] secretBytes, byte[] contentBytes) + throws NoSuchAlgorithmException, InvalidKeyException { + final Mac mac = Mac.getInstance(algorithm); + mac.init(new SecretKeySpec(secretBytes, algorithm)); + return mac.doFinal(contentBytes); + } + + /** + * Create signature using a private key. + * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} + * + * @param algorithm algorithm name. + * @param privateKey the private key to use for signing. + * @param contentBytes the content to be signed. + * @return the signature bytes. + * @throws NoSuchAlgorithmException if the algorithm is not supported. + * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. + * @throws SignatureException if this signature object is not initialized properly + * or if this signature algorithm is unable to process the input data provided. + */ + + byte[] createSignatureFor( + String algorithm, + PrivateKey privateKey, + byte[] contentBytes + ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { + final Signature s = Signature.getInstance(algorithm); + s.initSign(privateKey); + s.update(contentBytes); + return s.sign(); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java new file mode 100644 index 00000000000..b3046097409 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java @@ -0,0 +1,306 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.ECDSAKeyProvider; + +import java.math.BigInteger; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; +import java.util.Base64; + +/** + * Subclass representing an Elliptic Curve signing algorithm + *

    + * This class is thread-safe. + */ +class ECDSAAlgorithm extends Algorithm { + + private final ECDSAKeyProvider keyProvider; + private final CryptoHelper crypto; + private final int ecNumberSize; + + //Visible for testing + ECDSAAlgorithm(CryptoHelper crypto, String id, String algorithm, int ecNumberSize, ECDSAKeyProvider keyProvider) + throws IllegalArgumentException { + super(id, algorithm); + if (keyProvider == null) { + throw new IllegalArgumentException("The Key Provider cannot be null."); + } + this.keyProvider = keyProvider; + this.crypto = crypto; + this.ecNumberSize = ecNumberSize; + } + + ECDSAAlgorithm(String id, String algorithm, int ecNumberSize, ECDSAKeyProvider keyProvider) + throws IllegalArgumentException { + this(new CryptoHelper(), id, algorithm, ecNumberSize, keyProvider); + } + + @Override + public void verify(DecodedJWT jwt) throws SignatureVerificationException { + try { + byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); + ECPublicKey publicKey = keyProvider.getPublicKeyById(jwt.getKeyId()); + if (publicKey == null) { + throw new IllegalStateException("The given Public Key is null."); + } + validateSignatureStructure(signatureBytes, publicKey); + boolean valid = crypto.verifySignatureFor( + getDescription(), publicKey, jwt.getHeader(), jwt.getPayload(), JOSEToDER(signatureBytes)); + + if (!valid) { + throw new SignatureVerificationException(this); + } + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException + | IllegalStateException | IllegalArgumentException e) { + throw new SignatureVerificationException(this, e); + } + } + + @Override + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + try { + ECPrivateKey privateKey = keyProvider.getPrivateKey(); + if (privateKey == null) { + throw new IllegalStateException("The given Private Key is null."); + } + byte[] signature = crypto.createSignatureFor(getDescription(), privateKey, headerBytes, payloadBytes); + return DERToJOSE(signature); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { + throw new SignatureGenerationException(this, e); + } + } + + @Override + public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { + try { + ECPrivateKey privateKey = keyProvider.getPrivateKey(); + if (privateKey == null) { + throw new IllegalStateException("The given Private Key is null."); + } + byte[] signature = crypto.createSignatureFor(getDescription(), privateKey, contentBytes); + return DERToJOSE(signature); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { + throw new SignatureGenerationException(this, e); + } + } + + @Override + public String getSigningKeyId() { + return keyProvider.getPrivateKeyId(); + } + + //Visible for testing + byte[] DERToJOSE(byte[] derSignature) throws SignatureException { + // DER Structure: http://crypto.stackexchange.com/a/1797 + boolean derEncoded = derSignature[0] == 0x30 && derSignature.length != ecNumberSize * 2; + if (!derEncoded) { + throw new SignatureException("Invalid DER signature format."); + } + + final byte[] joseSignature = new byte[ecNumberSize * 2]; + + //Skip 0x30 + int offset = 1; + if (derSignature[1] == (byte) 0x81) { + //Skip sign + offset++; + } + + //Convert to unsigned. Should match DER length - offset + int encodedLength = derSignature[offset++] & 0xff; + if (encodedLength != derSignature.length - offset) { + throw new SignatureException("Invalid DER signature format."); + } + + //Skip 0x02 + offset++; + + //Obtain R number length (Includes padding) and skip it + int rlength = derSignature[offset++]; + if (rlength > ecNumberSize + 1) { + throw new SignatureException("Invalid DER signature format."); + } + int rpadding = ecNumberSize - rlength; + //Retrieve R number + System.arraycopy(derSignature, offset + Math.max(-rpadding, 0), + joseSignature, Math.max(rpadding, 0), rlength + Math.min(rpadding, 0)); + + //Skip R number and 0x02 + offset += rlength + 1; + + //Obtain S number length. (Includes padding) + int slength = derSignature[offset++]; + if (slength > ecNumberSize + 1) { + throw new SignatureException("Invalid DER signature format."); + } + int spadding = ecNumberSize - slength; + //Retrieve R number + System.arraycopy(derSignature, offset + Math.max(-spadding, 0), joseSignature, + ecNumberSize + Math.max(spadding, 0), slength + Math.min(spadding, 0)); + + return joseSignature; + } + + /** + * Added check for extra protection against CVE-2022-21449. + * This method ensures the signature's structure is as expected. + * + * @param joseSignature is the signature from the JWT + * @param publicKey public key used to verify the JWT + * @throws SignatureException if the signature's structure is not as per expectation + */ + // Visible for testing + void validateSignatureStructure(byte[] joseSignature, ECPublicKey publicKey) throws SignatureException { + // check signature length, moved this check from JOSEToDER method + if (joseSignature.length != ecNumberSize * 2) { + throw new SignatureException("Invalid JOSE signature format."); + } + + if (isAllZeros(joseSignature)) { + throw new SignatureException("Invalid signature format."); + } + + // get R + byte[] rBytes = new byte[ecNumberSize]; + System.arraycopy(joseSignature, 0, rBytes, 0, ecNumberSize); + if (isAllZeros(rBytes)) { + throw new SignatureException("Invalid signature format."); + } + + // get S + byte[] sBytes = new byte[ecNumberSize]; + System.arraycopy(joseSignature, ecNumberSize, sBytes, 0, ecNumberSize); + if (isAllZeros(sBytes)) { + throw new SignatureException("Invalid signature format."); + } + + //moved this check from JOSEToDER method + int rPadding = countPadding(joseSignature, 0, ecNumberSize); + int sPadding = countPadding(joseSignature, ecNumberSize, joseSignature.length); + int rLength = ecNumberSize - rPadding; + int sLength = ecNumberSize - sPadding; + + int length = 2 + rLength + 2 + sLength; + if (length > 255) { + throw new SignatureException("Invalid JOSE signature format."); + } + + BigInteger order = publicKey.getParams().getOrder(); + BigInteger r = new BigInteger(1, rBytes); + BigInteger s = new BigInteger(1, sBytes); + + // R and S must be less than N + if (order.compareTo(r) < 1) { + throw new SignatureException("Invalid signature format."); + } + + if (order.compareTo(s) < 1) { + throw new SignatureException("Invalid signature format."); + } + } + + //Visible for testing + byte[] JOSEToDER(byte[] joseSignature) throws SignatureException { + // Retrieve R and S number's length and padding. + int rPadding = countPadding(joseSignature, 0, ecNumberSize); + int sPadding = countPadding(joseSignature, ecNumberSize, joseSignature.length); + int rLength = ecNumberSize - rPadding; + int sLength = ecNumberSize - sPadding; + + int length = 2 + rLength + 2 + sLength; + + final byte[] derSignature; + int offset; + if (length > 0x7f) { + derSignature = new byte[3 + length]; + derSignature[1] = (byte) 0x81; + offset = 2; + } else { + derSignature = new byte[2 + length]; + offset = 1; + } + + // DER Structure: http://crypto.stackexchange.com/a/1797 + // Header with signature length info + derSignature[0] = (byte) 0x30; + derSignature[offset++] = (byte) (length & 0xff); + + // Header with "min R" number length + derSignature[offset++] = (byte) 0x02; + derSignature[offset++] = (byte) rLength; + + // R number + if (rPadding < 0) { + //Sign + derSignature[offset++] = (byte) 0x00; + System.arraycopy(joseSignature, 0, derSignature, offset, ecNumberSize); + offset += ecNumberSize; + } else { + int copyLength = Math.min(ecNumberSize, rLength); + System.arraycopy(joseSignature, rPadding, derSignature, offset, copyLength); + offset += copyLength; + } + + // Header with "min S" number length + derSignature[offset++] = (byte) 0x02; + derSignature[offset++] = (byte) sLength; + + // S number + if (sPadding < 0) { + //Sign + derSignature[offset++] = (byte) 0x00; + System.arraycopy(joseSignature, ecNumberSize, derSignature, offset, ecNumberSize); + } else { + System.arraycopy(joseSignature, ecNumberSize + sPadding, derSignature, offset, + Math.min(ecNumberSize, sLength)); + } + + return derSignature; + } + + private boolean isAllZeros(byte[] bytes) { + for (byte b : bytes) { + if (b != 0) { + return false; + } + } + return true; + } + + private int countPadding(byte[] bytes, int fromIndex, int toIndex) { + int padding = 0; + while (fromIndex + padding < toIndex && bytes[fromIndex + padding] == 0) { + padding++; + } + return (bytes[fromIndex + padding] & 0xff) > 0x7f ? padding - 1 : padding; + } + + //Visible for testing + static ECDSAKeyProvider providerForKeys(final ECPublicKey publicKey, final ECPrivateKey privateKey) { + if (publicKey == null && privateKey == null) { + throw new IllegalArgumentException("Both provided Keys cannot be null."); + } + return new ECDSAKeyProvider() { + @Override + public ECPublicKey getPublicKeyById(String keyId) { + return publicKey; + } + + @Override + public ECPrivateKey getPrivateKey() { + return privateKey; + } + + @Override + public String getPrivateKeyId() { + return null; + } + }; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java new file mode 100644 index 00000000000..0306e7c420d --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java @@ -0,0 +1,81 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; + +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.Base64; + +/** + * Subclass representing an Hash-based MAC signing algorithm + *

    + * This class is thread-safe. + */ +class HMACAlgorithm extends Algorithm { + + private final CryptoHelper crypto; + private final byte[] secret; + + //Visible for testing + HMACAlgorithm(CryptoHelper crypto, String id, String algorithm, byte[] secretBytes) + throws IllegalArgumentException { + super(id, algorithm); + if (secretBytes == null) { + throw new IllegalArgumentException("The Secret cannot be null"); + } + this.secret = Arrays.copyOf(secretBytes, secretBytes.length); + this.crypto = crypto; + } + + HMACAlgorithm(String id, String algorithm, byte[] secretBytes) throws IllegalArgumentException { + this(new CryptoHelper(), id, algorithm, secretBytes); + } + + HMACAlgorithm(String id, String algorithm, String secret) throws IllegalArgumentException { + this(new CryptoHelper(), id, algorithm, getSecretBytes(secret)); + } + + //Visible for testing + static byte[] getSecretBytes(String secret) throws IllegalArgumentException { + if (secret == null) { + throw new IllegalArgumentException("The Secret cannot be null"); + } + return secret.getBytes(StandardCharsets.UTF_8); + } + + @Override + public void verify(DecodedJWT jwt) throws SignatureVerificationException { + try { + byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); + boolean valid = crypto.verifySignatureFor( + getDescription(), secret, jwt.getHeader(), jwt.getPayload(), signatureBytes); + if (!valid) { + throw new SignatureVerificationException(this); + } + } catch (IllegalStateException | InvalidKeyException | NoSuchAlgorithmException | IllegalArgumentException e) { + throw new SignatureVerificationException(this, e); + } + } + + @Override + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + try { + return crypto.createSignatureFor(getDescription(), secret, headerBytes, payloadBytes); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + throw new SignatureGenerationException(this, e); + } + } + + @Override + public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { + try { + return crypto.createSignatureFor(getDescription(), secret, contentBytes); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + throw new SignatureGenerationException(this, e); + } + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java new file mode 100644 index 00000000000..5c6c0fc5ef0 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java @@ -0,0 +1,36 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import java.util.Base64; + +class NoneAlgorithm extends Algorithm { + + NoneAlgorithm() { + super("none", "none"); + } + + @Override + public void verify(DecodedJWT jwt) throws SignatureVerificationException { + try { + byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); + + if (signatureBytes.length > 0) { + throw new SignatureVerificationException(this); + } + } catch (IllegalArgumentException e) { + throw new SignatureVerificationException(this, e); + } + } + + @Override + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + return new byte[0]; + } + + @Override + public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { + return new byte[0]; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java new file mode 100644 index 00000000000..ca892e60ad4 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java @@ -0,0 +1,112 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.RSAKeyProvider; + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.util.Base64; + +/** + * Subclass representing an RSA signing algorithm + *

    + * This class is thread-safe. + */ +class RSAAlgorithm extends Algorithm { + + private final RSAKeyProvider keyProvider; + private final CryptoHelper crypto; + + //Visible for testing + RSAAlgorithm(CryptoHelper crypto, String id, String algorithm, RSAKeyProvider keyProvider) + throws IllegalArgumentException { + super(id, algorithm); + if (keyProvider == null) { + throw new IllegalArgumentException("The Key Provider cannot be null."); + } + this.keyProvider = keyProvider; + this.crypto = crypto; + } + + RSAAlgorithm(String id, String algorithm, RSAKeyProvider keyProvider) throws IllegalArgumentException { + this(new CryptoHelper(), id, algorithm, keyProvider); + } + + @Override + public void verify(DecodedJWT jwt) throws SignatureVerificationException { + try { + byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); + RSAPublicKey publicKey = keyProvider.getPublicKeyById(jwt.getKeyId()); + if (publicKey == null) { + throw new IllegalStateException("The given Public Key is null."); + } + boolean valid = crypto.verifySignatureFor( + getDescription(), publicKey, jwt.getHeader(), jwt.getPayload(), signatureBytes); + if (!valid) { + throw new SignatureVerificationException(this); + } + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException + | IllegalArgumentException | IllegalStateException e) { + throw new SignatureVerificationException(this, e); + } + } + + @Override + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + try { + RSAPrivateKey privateKey = keyProvider.getPrivateKey(); + if (privateKey == null) { + throw new IllegalStateException("The given Private Key is null."); + } + return crypto.createSignatureFor(getDescription(), privateKey, headerBytes, payloadBytes); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { + throw new SignatureGenerationException(this, e); + } + } + + @Override + public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { + try { + RSAPrivateKey privateKey = keyProvider.getPrivateKey(); + if (privateKey == null) { + throw new IllegalStateException("The given Private Key is null."); + } + return crypto.createSignatureFor(getDescription(), privateKey, contentBytes); + } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { + throw new SignatureGenerationException(this, e); + } + } + + @Override + public String getSigningKeyId() { + return keyProvider.getPrivateKeyId(); + } + + //Visible for testing + static RSAKeyProvider providerForKeys(final RSAPublicKey publicKey, final RSAPrivateKey privateKey) { + if (publicKey == null && privateKey == null) { + throw new IllegalArgumentException("Both provided Keys cannot be null."); + } + return new RSAKeyProvider() { + @Override + public RSAPublicKey getPublicKeyById(String keyId) { + return publicKey; + } + + @Override + public RSAPrivateKey getPrivateKey() { + return privateKey; + } + + @Override + public String getPrivateKeyId() { + return null; + } + }; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java new file mode 100644 index 00000000000..d6b71205837 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.exceptions; + +/** + * The exception that will be thrown if the exception doesn't match the one mentioned in the JWT Header. + */ +public class AlgorithmMismatchException extends JWTVerificationException { + public AlgorithmMismatchException(String message) { + super(message); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java new file mode 100644 index 00000000000..712e937bd61 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java @@ -0,0 +1,44 @@ +package com.auth0.jwt.exceptions; + +import com.auth0.jwt.interfaces.Claim; + +/** + * This exception is thrown when the expected value is not found while verifying the Claims. + */ +public class IncorrectClaimException extends InvalidClaimException { + private final String claimName; + + private final Claim claimValue; + + /** + * Used internally to construct the IncorrectClaimException which is thrown when there is verification + * failure for a Claim that exists. + * + * @param message The error message + * @param claimName The Claim name for which verification failed + * @param claim The Claim value for which verification failed + */ + public IncorrectClaimException(String message, String claimName, Claim claim) { + super(message); + this.claimName = claimName; + this.claimValue = claim; + } + + /** + * This method can be used to fetch the name for which the Claim verification failed. + * + * @return The claim name for which the verification failed. + */ + public String getClaimName() { + return claimName; + } + + /** + * This method can be used to fetch the value for which the Claim verification failed. + * + * @return The value for which the verification failed + */ + public Claim getClaimValue() { + return claimValue; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java new file mode 100644 index 00000000000..c5b8eb64a58 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.exceptions; + +/** + * The exception that will be thrown while verifying Claims of a JWT. + */ +public class InvalidClaimException extends JWTVerificationException { + public InvalidClaimException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java new file mode 100644 index 00000000000..c7e162ea982 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.exceptions; + +/** + * The exception that is thrown when a JWT cannot be created. + */ +public class JWTCreationException extends RuntimeException { + public JWTCreationException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java new file mode 100644 index 00000000000..448714e9b1e --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java @@ -0,0 +1,14 @@ +package com.auth0.jwt.exceptions; + +/** + * The exception that is thrown when any part of the token contained an invalid JWT or JSON format. + */ +public class JWTDecodeException extends JWTVerificationException { + public JWTDecodeException(String message) { + this(message, null); + } + + public JWTDecodeException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java new file mode 100644 index 00000000000..dd36dcd331c --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java @@ -0,0 +1,14 @@ +package com.auth0.jwt.exceptions; + +/** + * Parent to all the exception thrown while verifying a JWT. + */ +public class JWTVerificationException extends RuntimeException { + public JWTVerificationException(String message) { + this(message, null); + } + + public JWTVerificationException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java new file mode 100644 index 00000000000..3bcc21216ea --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java @@ -0,0 +1,23 @@ +package com.auth0.jwt.exceptions; + +/** + * This exception is thrown when the claim to be verified is missing. + */ +public class MissingClaimException extends InvalidClaimException { + + private final String claimName; + + public MissingClaimException(String claimName) { + super(String.format("The Claim '%s' is not present in the JWT.", claimName)); + this.claimName = claimName; + } + + /** + * This method can be used to fetch the name for which the Claim is missing during the verification. + * + * @return The name of the Claim that doesn't exist. + */ + public String getClaimName() { + return claimName; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java new file mode 100644 index 00000000000..4b7668a0922 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java @@ -0,0 +1,12 @@ +package com.auth0.jwt.exceptions; + +import com.auth0.jwt.algorithms.Algorithm; + +/** + * The exception that is thrown when signature is not able to be generated. + */ +public class SignatureGenerationException extends JWTCreationException { + public SignatureGenerationException(Algorithm algorithm, Throwable cause) { + super("The Token's Signature couldn't be generated when signing using the Algorithm: " + algorithm, cause); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java new file mode 100644 index 00000000000..fa7c3cabfce --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java @@ -0,0 +1,16 @@ +package com.auth0.jwt.exceptions; + +import com.auth0.jwt.algorithms.Algorithm; + +/** + * The exception that is thrown if the Signature verification fails. + */ +public class SignatureVerificationException extends JWTVerificationException { + public SignatureVerificationException(Algorithm algorithm) { + this(algorithm, null); + } + + public SignatureVerificationException(Algorithm algorithm, Throwable cause) { + super("The Token's Signature resulted invalid when verified using the Algorithm: " + algorithm, cause); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java new file mode 100644 index 00000000000..42ab090d4c0 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java @@ -0,0 +1,22 @@ +package com.auth0.jwt.exceptions; + +import java.time.Instant; + +/** + * The exception that is thrown if the token is expired. + */ +public class TokenExpiredException extends JWTVerificationException { + + private static final long serialVersionUID = -7076928975713577708L; + + private final Instant expiredOn; + + public TokenExpiredException(String message, Instant expiredOn) { + super(message); + this.expiredOn = expiredOn; + } + + public Instant getExpiredOn() { + return expiredOn; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java new file mode 100644 index 00000000000..5a881ab523d --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java @@ -0,0 +1,71 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.Header; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.Serializable; +import java.util.Collections; +import java.util.Map; + +import static com.auth0.jwt.impl.JsonNodeClaim.extractClaim; + +/** + * The BasicHeader class implements the Header interface. + */ +class BasicHeader implements Header, Serializable { + private static final long serialVersionUID = -4659137688548605095L; + + private final String algorithm; + private final String type; + private final String contentType; + private final String keyId; + private final Map tree; + private final ObjectCodec objectCodec; + + BasicHeader( + String algorithm, + String type, + String contentType, + String keyId, + Map tree, + ObjectCodec objectCodec + ) { + this.algorithm = algorithm; + this.type = type; + this.contentType = contentType; + this.keyId = keyId; + this.tree = tree == null ? Collections.emptyMap() : Collections.unmodifiableMap(tree); + this.objectCodec = objectCodec; + } + + Map getTree() { + return tree; + } + + @Override + public String getAlgorithm() { + return algorithm; + } + + @Override + public String getType() { + return type; + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public String getKeyId() { + return keyId; + } + + @Override + public Claim getHeaderClaim(String name) { + return extractClaim(name, tree, objectCodec); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java new file mode 100644 index 00000000000..30f6ab18665 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java @@ -0,0 +1,19 @@ +package com.auth0.jwt.impl; + +import java.util.HashMap; +import java.util.Map; + +/** + * The ClaimsHolder class is just a wrapper for the Map of Claims used for building a JWT. + */ +public abstract class ClaimsHolder { + private Map claims; + + protected ClaimsHolder(Map claims) { + this.claims = claims == null ? new HashMap<>() : claims; + } + + Map getClaims() { + return claims; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java new file mode 100644 index 00000000000..b1f8e6d3a21 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java @@ -0,0 +1,86 @@ +package com.auth0.jwt.impl; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Custom serializer used to write the resulting JWT. + * + * @param the type this serializer operates on. + */ +public class ClaimsSerializer extends StdSerializer { + + public ClaimsSerializer(Class t) { + super(t); + } + + @Override + public void serialize(T holder, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeStartObject(); + for (Map.Entry entry : holder.getClaims().entrySet()) { + writeClaim(entry, gen); + } + gen.writeEndObject(); + } + + /** + * Writes the given entry to the JSON representation. Custom claim serialization handling can override this method + * to provide use-case specific serialization. Implementors who override this method must write + * the field name and the field value. + * + * @param entry The entry that corresponds to the JSON field to write + * @param gen The {@code JsonGenerator} to use + * @throws IOException if there is either an underlying I/O problem or encoding issue at format layer + */ + protected void writeClaim(Map.Entry entry, JsonGenerator gen) throws IOException { + gen.writeFieldName(entry.getKey()); + handleSerialization(entry.getValue(), gen); + } + + private static void handleSerialization(Object value, JsonGenerator gen) throws IOException { + if (value instanceof Date) { + gen.writeNumber(dateToSeconds((Date) value)); + } else if (value instanceof Instant) { // EXPIRES_AT, ISSUED_AT, NOT_BEFORE, custom Instant claims + gen.writeNumber(instantToSeconds((Instant) value)); + } else if (value instanceof Map) { + serializeMap((Map) value, gen); + } else if (value instanceof List) { + serializeList((List) value, gen); + } else { + gen.writeObject(value); + } + } + + private static void serializeMap(Map map, JsonGenerator gen) throws IOException { + gen.writeStartObject(); + for (Map.Entry entry : map.entrySet()) { + gen.writeFieldName((String) entry.getKey()); + Object value = entry.getValue(); + handleSerialization(value, gen); + } + gen.writeEndObject(); + } + + private static void serializeList(List list, JsonGenerator gen) throws IOException { + gen.writeStartArray(); + for (Object entry : list) { + handleSerialization(entry, gen); + } + gen.writeEndArray(); + } + + private static long instantToSeconds(Instant instant) { + return instant.getEpochSecond(); + } + + private static long dateToSeconds(Date date) { + return date.getTime() / 1000; + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java new file mode 100644 index 00000000000..6737031c32b --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java @@ -0,0 +1,25 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; + +/** + * This holds the checks that are run to verify a JWT. + */ +public interface ExpectedCheckHolder { + /** + * The claim name that will be checked. + * + * @return the claim name + */ + String getClaimName(); + + /** + * The verification that will be run. + * + * @param claim the claim for which verification is done + * @param decodedJWT the JWT on which verification is done + * @return whether the verification passed or not + */ + boolean verify(Claim claim, DecodedJWT decodedJWT); +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java new file mode 100644 index 00000000000..9b480116d0c --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java @@ -0,0 +1,12 @@ +package com.auth0.jwt.impl; + +import java.util.Map; + +/** + * Holds the header claims when serializing a JWT. + */ +public final class HeaderClaimsHolder extends ClaimsHolder { + public HeaderClaimsHolder(Map claims) { + super(claims); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java new file mode 100644 index 00000000000..ad6e4ce00d2 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java @@ -0,0 +1,50 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.HeaderParams; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.Header; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +import java.io.IOException; +import java.util.Map; + +/** + * Jackson deserializer implementation for converting from JWT Header parts. + *

    + * This class is thread-safe. + * + * @see JWTParser + */ +class HeaderDeserializer extends StdDeserializer

    { + + HeaderDeserializer() { + super(Header.class); + } + + @Override + public Header deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + Map tree = p.getCodec().readValue(p, new TypeReference>() { + }); + if (tree == null) { + throw new JWTDecodeException("Parsing the Header's JSON resulted on a Null map"); + } + + String algorithm = getString(tree, HeaderParams.ALGORITHM); + String type = getString(tree, HeaderParams.TYPE); + String contentType = getString(tree, HeaderParams.CONTENT_TYPE); + String keyId = getString(tree, HeaderParams.KEY_ID); + return new BasicHeader(algorithm, type, contentType, keyId, tree, p.getCodec()); + } + + String getString(Map tree, String claimName) { + JsonNode node = tree.get(claimName); + if (node == null || node.isNull()) { + return null; + } + return node.asText(null); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java new file mode 100644 index 00000000000..5c7cf0fc977 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.impl; + +/** + * Responsible for serializing a JWT's header representation to JSON. + */ +public class HeaderSerializer extends ClaimsSerializer { + public HeaderSerializer() { + super(HeaderClaimsHolder.class); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java new file mode 100644 index 00000000000..022520f5537 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java @@ -0,0 +1,92 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.Header; +import com.auth0.jwt.interfaces.JWTPartsParser; +import com.auth0.jwt.interfaces.Payload; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import java.io.IOException; + +/** + * This class helps in decoding the Header and Payload of the JWT using + * {@link HeaderSerializer} and {@link PayloadSerializer}. + */ +public class JWTParser implements JWTPartsParser { + private static final ObjectMapper DEFAULT_OBJECT_MAPPER = createDefaultObjectMapper(); + private static final ObjectReader DEFAULT_PAYLOAD_READER = DEFAULT_OBJECT_MAPPER.readerFor(Payload.class); + private static final ObjectReader DEFAULT_HEADER_READER = DEFAULT_OBJECT_MAPPER.readerFor(Header.class); + + private final ObjectReader payloadReader; + private final ObjectReader headerReader; + + public JWTParser() { + this.payloadReader = DEFAULT_PAYLOAD_READER; + this.headerReader = DEFAULT_HEADER_READER; + } + + JWTParser(ObjectMapper mapper) { + addDeserializers(mapper); + + this.payloadReader = mapper.readerFor(Payload.class); + this.headerReader = mapper.readerFor(Header.class); + } + + @Override + public Payload parsePayload(String json) throws JWTDecodeException { + if (json == null) { + throw decodeException(); + } + + try { + return payloadReader.readValue(json); + } catch (IOException e) { + throw decodeException(json); + } + } + + @Override + public Header parseHeader(String json) throws JWTDecodeException { + if (json == null) { + throw decodeException(); + } + + try { + return headerReader.readValue(json); + } catch (IOException e) { + throw decodeException(json); + } + } + + static void addDeserializers(ObjectMapper mapper) { + SimpleModule module = new SimpleModule(); + module.addDeserializer(Payload.class, new PayloadDeserializer()); + module.addDeserializer(Header.class, new HeaderDeserializer()); + mapper.registerModule(module); + } + + static ObjectMapper getDefaultObjectMapper() { + return DEFAULT_OBJECT_MAPPER; + } + + private static ObjectMapper createDefaultObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + + addDeserializers(mapper); + + return mapper; + } + + private static JWTDecodeException decodeException() { + return decodeException(null); + } + + private static JWTDecodeException decodeException(String json) { + return new JWTDecodeException(String.format("The string '%s' doesn't have a valid JSON format.", json)); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java new file mode 100644 index 00000000000..0a7e22f3574 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java @@ -0,0 +1,182 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.Claim; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; +import java.lang.reflect.Array; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * The JsonNodeClaim retrieves a claim value from a JsonNode object. + */ +class JsonNodeClaim implements Claim { + + private final ObjectCodec codec; + private final JsonNode data; + + private JsonNodeClaim(JsonNode node, ObjectCodec codec) { + this.data = node; + this.codec = codec; + } + + @Override + public Boolean asBoolean() { + return isMissing() || isNull() || !data.isBoolean() ? null : data.asBoolean(); + } + + @Override + public Integer asInt() { + return isMissing() || isNull() || !data.isNumber() ? null : data.asInt(); + } + + @Override + public Long asLong() { + return isMissing() || isNull() || !data.isNumber() ? null : data.asLong(); + } + + @Override + public Double asDouble() { + return isMissing() || isNull() || !data.isNumber() ? null : data.asDouble(); + } + + @Override + public String asString() { + return isMissing() || isNull() || !data.isTextual() ? null : data.asText(); + } + + @Override + public Date asDate() { + if (isMissing() || isNull() || !data.canConvertToLong()) { + return null; + } + long seconds = data.asLong(); + return new Date(seconds * 1000); + } + + @Override + public Instant asInstant() { + if (isMissing() || isNull() || !data.canConvertToLong()) { + return null; + } + long seconds = data.asLong(); + return Instant.ofEpochSecond(seconds); + } + + @Override + @SuppressWarnings("unchecked") + public T[] asArray(Class clazz) throws JWTDecodeException { + if (isMissing() || isNull() || !data.isArray()) { + return null; + } + + T[] arr = (T[]) Array.newInstance(clazz, data.size()); + for (int i = 0; i < data.size(); i++) { + try { + arr[i] = codec.treeToValue(data.get(i), clazz); + } catch (JsonProcessingException e) { + throw new JWTDecodeException("Couldn't map the Claim's array contents to " + clazz.getSimpleName(), e); + } + } + return arr; + } + + @Override + public List asList(Class clazz) throws JWTDecodeException { + if (isMissing() || isNull() || !data.isArray()) { + return null; + } + + List list = new ArrayList<>(); + for (int i = 0; i < data.size(); i++) { + try { + list.add(codec.treeToValue(data.get(i), clazz)); + } catch (JsonProcessingException e) { + throw new JWTDecodeException("Couldn't map the Claim's array contents to " + clazz.getSimpleName(), e); + } + } + return list; + } + + @Override + public Map asMap() throws JWTDecodeException { + if (isMissing() || isNull() || !data.isObject()) { + return null; + } + + TypeReference> mapType = new TypeReference>() { + }; + + try (JsonParser parser = codec.treeAsTokens(data)) { + return parser.readValueAs(mapType); + } catch (IOException e) { + throw new JWTDecodeException("Couldn't map the Claim value to Map", e); + } + } + + @Override + public T as(Class clazz) throws JWTDecodeException { + try { + if (isMissing() || isNull()) { + return null; + } + return codec.treeToValue(data, clazz); + } catch (JsonProcessingException e) { + throw new JWTDecodeException("Couldn't map the Claim value to " + clazz.getSimpleName(), e); + } + } + + @Override + public boolean isNull() { + return !isMissing() && data.isNull(); + } + + @Override + public boolean isMissing() { + return data == null || data.isMissingNode(); + } + + @Override + public String toString() { + if (isMissing()) { + return "Missing claim"; + } else if (isNull()) { + return "Null claim"; + } + return data.toString(); + } + + /** + * Helper method to extract a Claim from the given JsonNode tree. + * + * @param claimName the Claim to search for. + * @param tree the JsonNode tree to search the Claim in. + * @param objectCodec the object codec in use for deserialization + * @return a valid non-null Claim. + */ + static Claim extractClaim(String claimName, Map tree, ObjectCodec objectCodec) { + JsonNode node = tree.get(claimName); + return claimFromNode(node, objectCodec); + } + + /** + * Helper method to create a Claim representation from the given JsonNode. + * + * @param node the JsonNode to convert into a Claim. + * @param objectCodec the object codec in use for deserialization + * @return a valid Claim instance. If the node is null or missing, a NullClaim will be returned. + */ + static Claim claimFromNode(JsonNode node, ObjectCodec objectCodec) { + return new JsonNodeClaim(node, objectCodec); + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java new file mode 100644 index 00000000000..7055a2ce73e --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java @@ -0,0 +1,12 @@ +package com.auth0.jwt.impl; + +import java.util.Map; + +/** + * Holds the payload claims when serializing a JWT. + */ +public final class PayloadClaimsHolder extends ClaimsHolder { + public PayloadClaimsHolder(Map claims) { + super(claims); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java new file mode 100644 index 00000000000..65fba3ac4fe --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java @@ -0,0 +1,91 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.RegisteredClaims; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.Payload; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +import java.io.IOException; +import java.time.Instant; +import java.util.*; + +/** + * Jackson deserializer implementation for converting from JWT Payload parts. + *

    + * This class is thread-safe. + * + * @see JWTParser + */ +class PayloadDeserializer extends StdDeserializer { + + PayloadDeserializer() { + super(Payload.class); + } + + @Override + public Payload deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + Map tree = p.getCodec().readValue(p, new TypeReference>() { + }); + if (tree == null) { + throw new JWTDecodeException("Parsing the Payload's JSON resulted on a Null map"); + } + + String issuer = getString(tree, RegisteredClaims.ISSUER); + String subject = getString(tree, RegisteredClaims.SUBJECT); + List audience = getStringOrArray(p.getCodec(), tree, RegisteredClaims.AUDIENCE); + Instant expiresAt = getInstantFromSeconds(tree, RegisteredClaims.EXPIRES_AT); + Instant notBefore = getInstantFromSeconds(tree, RegisteredClaims.NOT_BEFORE); + Instant issuedAt = getInstantFromSeconds(tree, RegisteredClaims.ISSUED_AT); + String jwtId = getString(tree, RegisteredClaims.JWT_ID); + + return new PayloadImpl(issuer, subject, audience, expiresAt, notBefore, issuedAt, jwtId, tree, p.getCodec()); + } + + List getStringOrArray(ObjectCodec codec, Map tree, String claimName) + throws JWTDecodeException { + JsonNode node = tree.get(claimName); + if (node == null || node.isNull() || !(node.isArray() || node.isTextual())) { + return null; + } + if (node.isTextual() && !node.asText().isEmpty()) { + return Collections.singletonList(node.asText()); + } + + List list = new ArrayList<>(node.size()); + for (int i = 0; i < node.size(); i++) { + try { + list.add(codec.treeToValue(node.get(i), String.class)); + } catch (JsonProcessingException e) { + throw new JWTDecodeException("Couldn't map the Claim's array contents to String", e); + } + } + return list; + } + + Instant getInstantFromSeconds(Map tree, String claimName) { + JsonNode node = tree.get(claimName); + if (node == null || node.isNull()) { + return null; + } + if (!node.canConvertToLong()) { + throw new JWTDecodeException( + String.format("The claim '%s' contained a non-numeric date value.", claimName)); + } + return Instant.ofEpochSecond(node.asLong()); + } + + String getString(Map tree, String claimName) { + JsonNode node = tree.get(claimName); + if (node == null || node.isNull()) { + return null; + } + return node.asText(null); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java new file mode 100644 index 00000000000..bfd9b0eaa85 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java @@ -0,0 +1,129 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.Payload; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.Serializable; +import java.time.Instant; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.auth0.jwt.impl.JsonNodeClaim.extractClaim; + +/** + * Decoder of string JSON Web Tokens into their POJO representations. + *

    + * This class is thread-safe. + * + * @see Payload + */ +class PayloadImpl implements Payload, Serializable { + + private static final long serialVersionUID = 1659021498824562311L; + + private final String issuer; + private final String subject; + private final List audience; + private final Instant expiresAt; + private final Instant notBefore; + private final Instant issuedAt; + private final String jwtId; + private final Map tree; + private final ObjectCodec objectCodec; + + PayloadImpl( + String issuer, + String subject, + List audience, + Instant expiresAt, + Instant notBefore, + Instant issuedAt, + String jwtId, + Map tree, + ObjectCodec objectCodec + ) { + this.issuer = issuer; + this.subject = subject; + this.audience = audience != null ? Collections.unmodifiableList(audience) : null; + this.expiresAt = expiresAt; + this.notBefore = notBefore; + this.issuedAt = issuedAt; + this.jwtId = jwtId; + this.tree = tree != null ? Collections.unmodifiableMap(tree) : Collections.emptyMap(); + this.objectCodec = objectCodec; + } + + Map getTree() { + return tree; + } + + @Override + public String getIssuer() { + return issuer; + } + + @Override + public String getSubject() { + return subject; + } + + @Override + public List getAudience() { + return audience; + } + + @Override + public Date getExpiresAt() { + return (expiresAt != null) ? Date.from(expiresAt) : null; + } + + + @Override + public Instant getExpiresAtAsInstant() { + return expiresAt; + } + + @Override + public Date getIssuedAt() { + return (issuedAt != null) ? Date.from(issuedAt) : null; + } + + @Override + public Instant getIssuedAtAsInstant() { + return issuedAt; + } + + @Override + public Date getNotBefore() { + return (notBefore != null) ? Date.from(notBefore) : null; + } + + @Override + public Instant getNotBeforeAsInstant() { + return notBefore; + } + + @Override + public String getId() { + return jwtId; + } + + @Override + public Claim getClaim(String name) { + return extractClaim(name, tree, objectCodec); + } + + @Override + public Map getClaims() { + Map claims = new HashMap<>(tree.size() * 2); + for (String name : tree.keySet()) { + claims.put(name, extractClaim(name, tree, objectCodec)); + } + return Collections.unmodifiableMap(claims); + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java new file mode 100644 index 00000000000..24fe37b7972 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java @@ -0,0 +1,66 @@ +package com.auth0.jwt.impl; + +import com.auth0.jwt.RegisteredClaims; +import com.fasterxml.jackson.core.JsonGenerator; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Jackson serializer implementation for converting into JWT Payload parts. + *

    + * This class is thread-safe. + * + * @see com.auth0.jwt.JWTCreator + */ +public class PayloadSerializer extends ClaimsSerializer { + public PayloadSerializer() { + super(PayloadClaimsHolder.class); + } + + @Override + protected void writeClaim(Map.Entry entry, JsonGenerator gen) throws IOException { + if (RegisteredClaims.AUDIENCE.equals(entry.getKey())) { + writeAudience(gen, entry); + } else { + super.writeClaim(entry, gen); + } + } + + /** + * Audience may be a list of strings or a single string. This is needed to properly handle the aud claim when + * added with the {@linkplain com.auth0.jwt.JWTCreator.Builder#withPayload(Map)} method. + */ + private void writeAudience(JsonGenerator gen, Map.Entry e) throws IOException { + if (e.getValue() instanceof String) { + gen.writeFieldName(e.getKey()); + gen.writeString((String) e.getValue()); + } else { + List audArray = new ArrayList<>(); + if (e.getValue() instanceof String[]) { + audArray = Arrays.asList((String[]) e.getValue()); + } else if (e.getValue() instanceof List) { + List audList = (List) e.getValue(); + for (Object aud : audList) { + if (aud instanceof String) { + audArray.add((String) aud); + } + } + } + if (audArray.size() == 1) { + gen.writeFieldName(e.getKey()); + gen.writeString(audArray.get(0)); + } else if (audArray.size() > 1) { + gen.writeFieldName(e.getKey()); + gen.writeStartArray(); + for (String aud : audArray) { + gen.writeString(aud); + } + gen.writeEndArray(); + } + } + } +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java new file mode 100644 index 00000000000..334ccb8a2d1 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java @@ -0,0 +1,7 @@ +/** + * Contains parts of the internal implementation of this library. + * + *

    Do not use any of the classes in this package. They might be removed + * or changed at any point without prior warning. + */ +package com.auth0.jwt.impl; diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java new file mode 100644 index 00000000000..ca5244d660a --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java @@ -0,0 +1,131 @@ +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.exceptions.JWTDecodeException; + +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * The Claim class holds the value in a generic way so that it can be recovered in many representations. + */ +public interface Claim { + + /** + * Whether this Claim has a null value or not. + * If the claim is not present, it will return false hence checking {@link Claim#isMissing} is advised as well + * + * @return whether this Claim has a null value or not. + */ + boolean isNull(); + + /** + * Can be used to verify whether the Claim is found or not. + * This will be true even if the Claim has {@code null} value associated to it. + * + * @return whether this Claim is present or not + */ + boolean isMissing(); + + /** + * Get this Claim as a Boolean. + * If the value isn't of type Boolean or it can't be converted to a Boolean, {@code null} will be returned. + * + * @return the value as a Boolean or null. + */ + Boolean asBoolean(); + + /** + * Get this Claim as an Integer. + * If the value isn't of type Integer or it can't be converted to an Integer, {@code null} will be returned. + * + * @return the value as an Integer or null. + */ + Integer asInt(); + + /** + * Get this Claim as an Long. + * If the value isn't of type Long or it can't be converted to a Long, {@code null} will be returned. + * + * @return the value as an Long or null. + */ + Long asLong(); + + /** + * Get this Claim as a Double. + * If the value isn't of type Double or it can't be converted to a Double, {@code null} will be returned. + * + * @return the value as a Double or null. + */ + Double asDouble(); + + /** + * Get this Claim as a String. + * If the value isn't of type String, {@code null} will be returned. For a String representation of non-textual + * claim types, clients can call {@code toString()}. + * + * @return the value as a String or null if the underlying value is not a string. + */ + String asString(); + + /** + * Get this Claim as a Date. + * If the value can't be converted to a Date, {@code null} will be returned. + * + * @return the value as a Date or null. + */ + Date asDate(); + + /** + * Get this Claim as an Instant. + * If the value can't be converted to an Instant, {@code null} will be returned. + * + * @return the value as a Date or null. + */ + default Instant asInstant() { + Date date = asDate(); + return date != null ? date.toInstant() : null; + } + + /** + * Get this Claim as an Array of type T. + * If the value isn't an Array, {@code null} will be returned. + * + * @param type + * @param clazz the type class + * @return the value as an Array or null. + * @throws JWTDecodeException if the values inside the Array can't be converted to a class T. + */ + T[] asArray(Class clazz) throws JWTDecodeException; + + /** + * Get this Claim as a List of type T. + * If the value isn't an Array, {@code null} will be returned. + * + * @param type + * @param clazz the type class + * @return the value as a List or null. + * @throws JWTDecodeException if the values inside the List can't be converted to a class T. + */ + List asList(Class clazz) throws JWTDecodeException; + + /** + * Get this Claim as a generic Map of values. + * + * @return the value as instance of Map. + * @throws JWTDecodeException if the value can't be converted to a Map. + */ + Map asMap() throws JWTDecodeException; + + /** + * Get this Claim as a custom type T. + * This method will return null if {@link Claim#isMissing()} or {@link Claim#isNull()} is true + * + * @param type + * @param clazz the type class + * @return the value as instance of T. + * @throws JWTDecodeException if the value can't be converted to a class T. + */ + T as(Class clazz) throws JWTDecodeException; +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java new file mode 100644 index 00000000000..04307b28e5f --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java @@ -0,0 +1,37 @@ +package com.auth0.jwt.interfaces; + +/** + * Class that represents a Json Web Token that was decoded from it's string representation. + */ +public interface DecodedJWT extends Payload, Header { + /** + * Getter for the String Token used to create this JWT instance. + * + * @return the String Token. + */ + String getToken(); + + /** + * Getter for the Header contained in the JWT as a Base64 encoded String. + * This represents the first part of the token. + * + * @return the Header of the JWT. + */ + String getHeader(); + + /** + * Getter for the Payload contained in the JWT as a Base64 encoded String. + * This represents the second part of the token. + * + * @return the Payload of the JWT. + */ + String getPayload(); + + /** + * Getter for the Signature contained in the JWT as a Base64 encoded String. + * This represents the third part of the token. + * + * @return the Signature of the JWT. + */ + String getSignature(); +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java new file mode 100644 index 00000000000..55df451dad9 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.interfaces; + +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; + +/** + * Elliptic Curve (EC) Public/Private Key provider. + */ +public interface ECDSAKeyProvider extends KeyProvider { +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java new file mode 100644 index 00000000000..52b3ba56321 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java @@ -0,0 +1,44 @@ +package com.auth0.jwt.interfaces; + +/** + * The Header class represents the 1st part of the JWT, where the Header value is held. + */ +public interface Header { + + /** + * Getter for the Algorithm "alg" claim defined in the JWT's Header. If the claim is missing it will return null. + * + * @return the Algorithm defined or null. + */ + String getAlgorithm(); + + /** + * Getter for the Type "typ" claim defined in the JWT's Header. If the claim is missing it will return null. + * + * @return the Type defined or null. + */ + String getType(); + + /** + * Getter for the Content Type "cty" claim defined in the JWT's Header. If the claim is missing it will return null. + * + * @return the Content Type defined or null. + */ + String getContentType(); + + /** + * Get the value of the "kid" claim, or null if it's not available. + * + * @return the Key ID value or null. + */ + String getKeyId(); + + /** + * Get a Private Claim given it's name. If the Claim wasn't specified in the Header, a 'null claim' will be + * returned. All the methods of that claim will return {@code null}. + * + * @param name the name of the Claim to retrieve. + * @return a non-null Claim. + */ + Claim getHeaderClaim(String name); +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java new file mode 100644 index 00000000000..33cd0d709b9 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java @@ -0,0 +1,28 @@ +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.exceptions.JWTDecodeException; + +/** + * The JWTPartsParser class defines which parts of the JWT should be converted + * to its specific Object representation instance. + */ +public interface JWTPartsParser { + + /** + * Parses the given JSON into a {@link Payload} instance. + * + * @param json the content of the Payload in a JSON representation. + * @return the Payload. + * @throws JWTDecodeException if the json doesn't have a proper JSON format. + */ + Payload parsePayload(String json) throws JWTDecodeException; + + /** + * Parses the given JSON into a {@link Header} instance. + * + * @param json the content of the Header in a JSON representation. + * @return the Header. + * @throws JWTDecodeException if the json doesn't have a proper JSON format. + */ + Header parseHeader(String json) throws JWTDecodeException; +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java new file mode 100644 index 00000000000..2756ddd8814 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java @@ -0,0 +1,40 @@ +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.exceptions.JWTVerificationException; + + +/** + * Used to verify the JWT for its signature and claims. Implementations must be thread-safe. Instances are created + * using {@link Verification}. + * + *

    + * try {
    + *      JWTVerifier verifier = JWTVerifier.init(Algorithm.RSA256(publicKey, privateKey)
    + *          .withIssuer("auth0")
    + *          .build();
    + *      DecodedJWT jwt = verifier.verify("token");
    + * } catch (JWTVerificationException e) {
    + *      // invalid signature or claims
    + * }
    + * 
    + */ +public interface JWTVerifier { + + /** + * Performs the verification against the given Token. + * + * @param token to verify. + * @return a verified and decoded JWT. + * @throws JWTVerificationException if any of the verification steps fail + */ + DecodedJWT verify(String token) throws JWTVerificationException; + + /** + * Performs the verification against the given {@link DecodedJWT}. + * + * @param jwt to verify. + * @return a verified and decoded JWT. + * @throws JWTVerificationException if any of the verification steps fail + */ + DecodedJWT verify(DecodedJWT jwt) throws JWTVerificationException; +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java new file mode 100644 index 00000000000..30a144a6b96 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java @@ -0,0 +1,38 @@ +package com.auth0.jwt.interfaces; + +import java.security.PrivateKey; +import java.security.PublicKey; + +/** + * Generic Public/Private Key provider. + * While implementing, ensure the Private Key and Private Key ID doesn't change in between signing a token. + * + * @param the class that represents the Public Key + * @param the class that represents the Private Key + */ +interface KeyProvider { + + /** + * Getter for the Public Key instance with the given Id. Used to verify the signature on the JWT verification stage. + * + * @param keyId the Key Id specified in the Token's Header or null if none is available. + * Provides a hint on which Public Key to use to verify the token's signature. + * @return the Public Key instance + */ + U getPublicKeyById(String keyId); + + /** + * Getter for the Private Key instance. Used to sign the content on the JWT signing stage. + * + * @return the Private Key instance + */ + R getPrivateKey(); + + /** + * Getter for the Id of the Private Key used to sign the tokens. + * This represents the `kid` claim and will be placed in the Header. + * + * @return the Key Id that identifies the Private Key or null if it's not specified. + */ + String getPrivateKeyId(); +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java new file mode 100644 index 00000000000..feb58c64ad6 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java @@ -0,0 +1,104 @@ +package com.auth0.jwt.interfaces; + +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * The Payload class represents the 2nd part of the JWT, where the Payload value is held. + */ +public interface Payload { + + /** + * Get the value of the "iss" claim, or null if it's not available. + * + * @return the Issuer value or null. + */ + String getIssuer(); + + /** + * Get the value of the "sub" claim, or null if it's not available. + * + * @return the Subject value or null. + */ + String getSubject(); + + /** + * Get the value of the "aud" claim, or null if it's not available. + * + * @return the Audience value or null. + */ + List getAudience(); + + /** + * Get the value of the "exp" claim, or null if it's not available. + * + * @return the Expiration Time value or null. + */ + Date getExpiresAt(); + + /** + * Get the value of the "exp" claim as an {@linkplain Instant}, or null if it's not available. + * + * @return the Expiration Time value or null. + */ + default Instant getExpiresAtAsInstant() { + return getExpiresAt() != null ? getExpiresAt().toInstant() : null; + } + + /** + * Get the value of the "nbf" claim, or null if it's not available. + * + * @return the Not Before value or null. + */ + Date getNotBefore(); + + /** + * Get the value of the "nbf" claim as an {@linkplain Instant}, or null if it's not available. + * + * @return the Not Before value or null. + */ + default Instant getNotBeforeAsInstant() { + return getNotBefore() != null ? getNotBefore().toInstant() : null; + } + + /** + * Get the value of the "iat" claim, or null if it's not available. + * + * @return the Issued At value or null. + */ + Date getIssuedAt(); + + /** + * Get the value of the "iat" claim as an {@linkplain Instant}, or null if it's not available. + * + * @return the Issued At value or null. + */ + default Instant getIssuedAtAsInstant() { + return getIssuedAt() != null ? getIssuedAt().toInstant() : null; + } + + /** + * Get the value of the "jti" claim, or null if it's not available. + * + * @return the JWT ID value or null. + */ + String getId(); + + /** + * Get a Claim given its name. If the Claim wasn't specified in the Payload, a 'null claim' + * will be returned. All the methods of that claim will return {@code null}. + * + * @param name the name of the Claim to retrieve. + * @return a non-null Claim. + */ + Claim getClaim(String name); + + /** + * Get the Claims defined in the Token. + * + * @return a non-null Map containing the Claims defined in the Token. + */ + Map getClaims(); +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java new file mode 100644 index 00000000000..55376f4d266 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.interfaces; + +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + +/** + * RSA Public/Private Key provider. + */ +public interface RSAKeyProvider extends KeyProvider { +} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java new file mode 100644 index 00000000000..b4adcf5c6fd --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java @@ -0,0 +1,267 @@ +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.JWTVerifier; + +import java.time.Instant; +import java.util.Date; +import java.util.function.BiPredicate; + +/** + * Constructs and holds the checks required for a JWT to be considered valid. Note that implementations are + * not thread-safe. Once built by calling {@link #build()}, the resulting + * {@link com.auth0.jwt.interfaces.JWTVerifier} is thread-safe. + */ +public interface Verification { + + /** + * Verifies whether the JWT contains an Issuer ("iss") claim that equals to the value provided. + * This check is case-sensitive. + * + * @param issuer the required Issuer value. + * @return this same Verification instance. + */ + default Verification withIssuer(String issuer) { + return withIssuer(new String[]{issuer}); + } + + /** + * Verifies whether the JWT contains an Issuer ("iss") claim that contains all the values provided. + * This check is case-sensitive. An empty array is considered as a {@code null}. + * + * @param issuer the required Issuer value. If multiple values are given, the claim must at least match one of them + * @return this same Verification instance. + */ + Verification withIssuer(String... issuer); + + /** + * Verifies whether the JWT contains a Subject ("sub") claim that equals to the value provided. + * This check is case-sensitive. + * + * @param subject the required Subject value + * @return this same Verification instance. + */ + Verification withSubject(String subject); + + /** + * Verifies whether the JWT contains an Audience ("aud") claim that contains all the values provided. + * This check is case-sensitive. An empty array is considered as a {@code null}. + * + * @param audience the required Audience value + * @return this same Verification instance. + */ + Verification withAudience(String... audience); + + /** + * Verifies whether the JWT contains an Audience ("aud") claim contain at least one of the specified audiences. + * This check is case-sensitive. An empty array is considered as a {@code null}. + * + * @param audience the required Audience value for which the "aud" claim must contain at least one value. + * @return this same Verification instance. + */ + Verification withAnyOfAudience(String... audience); + + /** + * Define the default window in seconds in which the Not Before, Issued At and Expires At Claims + * will still be valid. Setting a specific leeway value on a given Claim will override this value for that Claim. + * + * @param leeway the window in seconds in which the Not Before, Issued At and Expires At Claims will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptLeeway(long leeway) throws IllegalArgumentException; + + /** + * Set a specific leeway window in seconds in which the Expires At ("exp") Claim will still be valid. + * Expiration Date is always verified when the value is present. + * This method overrides the value set with acceptLeeway + * + * @param leeway the window in seconds in which the Expires At Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptExpiresAt(long leeway) throws IllegalArgumentException; + + /** + * Set a specific leeway window in seconds in which the Not Before ("nbf") Claim will still be valid. + * Not Before Date is always verified when the value is present. + * This method overrides the value set with acceptLeeway + * + * @param leeway the window in seconds in which the Not Before Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptNotBefore(long leeway) throws IllegalArgumentException; + + /** + * Set a specific leeway window in seconds in which the Issued At ("iat") Claim will still be valid. + * This method overrides the value set with {@link #acceptLeeway(long)}. + * By default, the Issued At claim is always verified when the value is present, + * unless disabled with {@link #ignoreIssuedAt()}. + * If Issued At verification has been disabled, no verification of the Issued At claim will be performed, + * and this method has no effect. + * + * @param leeway the window in seconds in which the Issued At Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptIssuedAt(long leeway) throws IllegalArgumentException; + + /** + * Verifies whether the JWT contains a JWT ID ("jti") claim that equals to the value provided. + * This check is case-sensitive. + * + * @param jwtId the required ID value + * @return this same Verification instance. + */ + Verification withJWTId(String jwtId); + + /** + * Verifies whether the claim is present in the JWT, with any value including {@code null}. + * + * @param name the Claim's name. + * @return this same Verification instance + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaimPresence(String name) throws IllegalArgumentException; + + /** + * Verifies whether the claim is present with a {@code null} value. + * + * @param name the Claim's name. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withNullClaim(String name) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Boolean value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, Boolean value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Integer value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, Integer value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Long value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, Long value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Integer value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, Double value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given String value. + * This check is case-sensitive. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, String value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Date value. + * Note that date-time claims are serialized as seconds since the epoch; + * when verifying date-time claim value, any time units more granular than seconds will not be considered. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, Date value) throws IllegalArgumentException; + + /** + * Verifies whether the claim is equal to the given Instant value. + * Note that date-time claims are serialized as seconds since the epoch; + * when verifying a date-time claim value, any time units more granular than seconds will not be considered. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + default Verification withClaim(String name, Instant value) throws IllegalArgumentException { + return withClaim(name, value != null ? Date.from(value) : null); + } + + /** + * Executes the predicate provided and the validates the JWT if the predicate returns true. + * + * @param name the Claim's name + * @param predicate the predicate check to be done. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withClaim(String name, BiPredicate predicate) throws IllegalArgumentException; + + /** + * Verifies whether the claim contain at least the given String items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withArrayClaim(String name, String... items) throws IllegalArgumentException; + + /** + * Verifies whether the claim contain at least the given Integer items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + Verification withArrayClaim(String name, Integer... items) throws IllegalArgumentException; + + /** + * Verifies whether the claim contain at least the given Long items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is {@code null}. + */ + + Verification withArrayClaim(String name, Long ... items) throws IllegalArgumentException; + + /** + * Skip the Issued At ("iat") claim verification. By default, the verification is performed. + * + * @return this same Verification instance. + */ + Verification ignoreIssuedAt(); + + /** + * Creates a new and reusable instance of the JWTVerifier with the configuration already provided. + * + * @return a new {@link com.auth0.jwt.interfaces.JWTVerifier} instance. + */ + JWTVerifier build(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java new file mode 100644 index 00000000000..d133ee2f49b --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java @@ -0,0 +1,26 @@ +// Generated automatically from javax.crypto.KeyGenerator for testing purposes + +package javax.crypto; + +import java.security.Provider; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.KeyGeneratorSpi; +import javax.crypto.SecretKey; + +public class KeyGenerator +{ + protected KeyGenerator() {} + protected KeyGenerator(KeyGeneratorSpi p0, Provider p1, String p2){} + public final Provider getProvider(){ return null; } + public final SecretKey generateKey(){ return null; } + public final String getAlgorithm(){ return null; } + public final void init(AlgorithmParameterSpec p0){} + public final void init(AlgorithmParameterSpec p0, SecureRandom p1){} + public final void init(SecureRandom p0){} + public final void init(int p0){} + public final void init(int p0, SecureRandom p1){} + public static KeyGenerator getInstance(String p0){ return null; } + public static KeyGenerator getInstance(String p0, Provider p1){ return null; } + public static KeyGenerator getInstance(String p0, String p1){ return null; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java new file mode 100644 index 00000000000..aba2623123a --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.crypto.KeyGeneratorSpi for testing purposes + +package javax.crypto; + +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.SecretKey; + +abstract public class KeyGeneratorSpi +{ + protected abstract SecretKey engineGenerateKey(); + protected abstract void engineInit(AlgorithmParameterSpec p0, SecureRandom p1); + protected abstract void engineInit(SecureRandom p0); + protected abstract void engineInit(int p0, SecureRandom p1); + public KeyGeneratorSpi(){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java b/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java new file mode 100644 index 00000000000..88c9e4539ba --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.crypto.SecretKey for testing purposes + +package javax.crypto; + +import java.security.Key; +import javax.security.auth.Destroyable; + +public interface SecretKey extends Destroyable, Key +{ + static long serialVersionUID = 0; +} diff --git a/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java b/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java new file mode 100644 index 00000000000..979ca409ba6 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.security.auth.Destroyable for testing purposes + +package javax.security.auth; + + +public interface Destroyable +{ + default boolean isDestroyed(){ return false; } + default void destroy(){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java new file mode 100644 index 00000000000..70a39f55ac9 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java @@ -0,0 +1,31 @@ +// Generated automatically from javax.servlet.AsyncContext for testing purposes + +package javax.servlet; + +import javax.servlet.AsyncListener; +import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface AsyncContext +{ + T createListener(java.lang.Class p0); + ServletRequest getRequest(); + ServletResponse getResponse(); + boolean hasOriginalRequestAndResponse(); + long getTimeout(); + static String ASYNC_CONTEXT_PATH = null; + static String ASYNC_MAPPING = null; + static String ASYNC_PATH_INFO = null; + static String ASYNC_QUERY_STRING = null; + static String ASYNC_REQUEST_URI = null; + static String ASYNC_SERVLET_PATH = null; + void addListener(AsyncListener p0); + void addListener(AsyncListener p0, ServletRequest p1, ServletResponse p2); + void complete(); + void dispatch(); + void dispatch(ServletContext p0, String p1); + void dispatch(String p0); + void setTimeout(long p0); + void start(Runnable p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java new file mode 100644 index 00000000000..d7cb9c2b175 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.AsyncEvent for testing purposes + +package javax.servlet; + +import javax.servlet.AsyncContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public class AsyncEvent +{ + protected AsyncEvent() {} + public AsyncContext getAsyncContext(){ return null; } + public AsyncEvent(AsyncContext p0){} + public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2){} + public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2, Throwable p3){} + public AsyncEvent(AsyncContext p0, Throwable p1){} + public ServletRequest getSuppliedRequest(){ return null; } + public ServletResponse getSuppliedResponse(){ return null; } + public Throwable getThrowable(){ return null; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java new file mode 100644 index 00000000000..2723482f668 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.AsyncListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; +import javax.servlet.AsyncEvent; + +public interface AsyncListener extends EventListener +{ + void onComplete(AsyncEvent p0); + void onError(AsyncEvent p0); + void onStartAsync(AsyncEvent p0); + void onTimeout(AsyncEvent p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java b/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java new file mode 100644 index 00000000000..2b7b44f328d --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.DispatcherType for testing purposes + +package javax.servlet; + + +public enum DispatcherType +{ + ASYNC, ERROR, FORWARD, INCLUDE, REQUEST; + private DispatcherType() {} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java b/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java new file mode 100644 index 00000000000..64b9f9d73a8 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java @@ -0,0 +1,15 @@ +// Generated automatically from javax.servlet.Filter for testing purposes + +package javax.servlet; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface Filter +{ + default void destroy(){} + default void init(FilterConfig p0){} + void doFilter(ServletRequest p0, ServletResponse p1, FilterChain p2); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java new file mode 100644 index 00000000000..f64ab722684 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.FilterChain for testing purposes + +package javax.servlet; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface FilterChain +{ + void doFilter(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java new file mode 100644 index 00000000000..0e140c6680c --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.FilterConfig for testing purposes + +package javax.servlet; + +import java.util.Enumeration; +import javax.servlet.ServletContext; + +public interface FilterConfig +{ + Enumeration getInitParameterNames(); + ServletContext getServletContext(); + String getFilterName(); + String getInitParameter(String p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java new file mode 100644 index 00000000000..6ad0739ceb6 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.FilterRegistration for testing purposes + +package javax.servlet; + +import java.util.Collection; +import java.util.EnumSet; +import javax.servlet.DispatcherType; +import javax.servlet.Registration; + +public interface FilterRegistration extends Registration +{ + Collection getServletNameMappings(); + Collection getUrlPatternMappings(); + static public interface Dynamic extends FilterRegistration, Registration.Dynamic + { + } + void addMappingForServletNames(EnumSet p0, boolean p1, String... p2); + void addMappingForUrlPatterns(EnumSet p0, boolean p1, String... p2); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java new file mode 100644 index 00000000000..5f7bdcda487 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.GenericServlet for testing purposes + +package javax.servlet; + +import java.io.Serializable; +import java.util.Enumeration; +import javax.servlet.Servlet; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +abstract public class GenericServlet implements Serializable, Servlet, ServletConfig +{ + public Enumeration getInitParameterNames(){ return null; } + public GenericServlet(){} + public ServletConfig getServletConfig(){ return null; } + public ServletContext getServletContext(){ return null; } + public String getInitParameter(String p0){ return null; } + public String getServletInfo(){ return null; } + public String getServletName(){ return null; } + public abstract void service(ServletRequest p0, ServletResponse p1); + public void destroy(){} + public void init(){} + public void init(ServletConfig p0){} + public void log(String p0){} + public void log(String p0, Throwable p1){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java new file mode 100644 index 00000000000..6598aa47cc5 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.servlet.HttpConstraintElement for testing purposes + +package javax.servlet; + +import javax.servlet.annotation.ServletSecurity; + +public class HttpConstraintElement +{ + public HttpConstraintElement(){} + public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0){} + public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0, ServletSecurity.TransportGuarantee p1, String... p2){} + public HttpConstraintElement(ServletSecurity.TransportGuarantee p0, String... p1){} + public ServletSecurity.EmptyRoleSemantic getEmptyRoleSemantic(){ return null; } + public ServletSecurity.TransportGuarantee getTransportGuarantee(){ return null; } + public String[] getRolesAllowed(){ return null; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java new file mode 100644 index 00000000000..ddb52527004 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.HttpMethodConstraintElement for testing purposes + +package javax.servlet; + +import javax.servlet.HttpConstraintElement; + +public class HttpMethodConstraintElement extends HttpConstraintElement +{ + protected HttpMethodConstraintElement() {} + public HttpMethodConstraintElement(String p0){} + public HttpMethodConstraintElement(String p0, HttpConstraintElement p1){} + public String getMethodName(){ return null; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java new file mode 100644 index 00000000000..8470d9a5317 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java @@ -0,0 +1,17 @@ +// Generated automatically from javax.servlet.MultipartConfigElement for testing purposes + +package javax.servlet; + +import javax.servlet.annotation.MultipartConfig; + +public class MultipartConfigElement +{ + protected MultipartConfigElement() {} + public MultipartConfigElement(MultipartConfig p0){} + public MultipartConfigElement(String p0){} + public MultipartConfigElement(String p0, long p1, long p2, int p3){} + public String getLocation(){ return null; } + public int getFileSizeThreshold(){ return 0; } + public long getMaxFileSize(){ return 0; } + public long getMaxRequestSize(){ return 0; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java new file mode 100644 index 00000000000..367594ef7da --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.ReadListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; + +public interface ReadListener extends EventListener +{ + void onAllDataRead(); + void onDataAvailable(); + void onError(Throwable p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java b/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java new file mode 100644 index 00000000000..5d4095813ef --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.Registration for testing purposes + +package javax.servlet; + +import java.util.Map; +import java.util.Set; + +public interface Registration +{ + Map getInitParameters(); + Set setInitParameters(Map p0); + String getClassName(); + String getInitParameter(String p0); + String getName(); + boolean setInitParameter(String p0, String p1); + static public interface Dynamic extends Registration + { + void setAsyncSupported(boolean p0); + } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java b/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java new file mode 100644 index 00000000000..ad017e4f501 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java @@ -0,0 +1,30 @@ +// Generated automatically from javax.servlet.RequestDispatcher for testing purposes + +package javax.servlet; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface RequestDispatcher +{ + static String ERROR_EXCEPTION = null; + static String ERROR_EXCEPTION_TYPE = null; + static String ERROR_MESSAGE = null; + static String ERROR_REQUEST_URI = null; + static String ERROR_SERVLET_NAME = null; + static String ERROR_STATUS_CODE = null; + static String FORWARD_CONTEXT_PATH = null; + static String FORWARD_MAPPING = null; + static String FORWARD_PATH_INFO = null; + static String FORWARD_QUERY_STRING = null; + static String FORWARD_REQUEST_URI = null; + static String FORWARD_SERVLET_PATH = null; + static String INCLUDE_CONTEXT_PATH = null; + static String INCLUDE_MAPPING = null; + static String INCLUDE_PATH_INFO = null; + static String INCLUDE_QUERY_STRING = null; + static String INCLUDE_REQUEST_URI = null; + static String INCLUDE_SERVLET_PATH = null; + void forward(ServletRequest p0, ServletResponse p1); + void include(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java new file mode 100644 index 00000000000..231c011a6f8 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.servlet.Servlet for testing purposes + +package javax.servlet; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface Servlet +{ + ServletConfig getServletConfig(); + String getServletInfo(); + void destroy(); + void init(ServletConfig p0); + void service(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java new file mode 100644 index 00000000000..c483c16ac4e --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.ServletConfig for testing purposes + +package javax.servlet; + +import java.util.Enumeration; +import javax.servlet.ServletContext; + +public interface ServletConfig +{ + Enumeration getInitParameterNames(); + ServletContext getServletContext(); + String getInitParameter(String p0); + String getServletName(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java new file mode 100644 index 00000000000..812393f61e9 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java @@ -0,0 +1,83 @@ +// Generated automatically from javax.servlet.ServletContext for testing purposes + +package javax.servlet; + +import java.io.InputStream; +import java.net.URL; +import java.util.Enumeration; +import java.util.EventListener; +import java.util.Map; +import java.util.Set; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; +import javax.servlet.RequestDispatcher; +import javax.servlet.Servlet; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; + +public interface ServletContext +{ + T createListener(java.lang.Class p0); + void addListener(T p0); + T createFilter(java.lang.Class p0); + T createServlet(java.lang.Class p0); + ClassLoader getClassLoader(); + Enumeration getServlets(); + Enumeration getAttributeNames(); + Enumeration getInitParameterNames(); + Enumeration getServletNames(); + FilterRegistration getFilterRegistration(String p0); + FilterRegistration.Dynamic addFilter(String p0, Class p1); + FilterRegistration.Dynamic addFilter(String p0, Filter p1); + FilterRegistration.Dynamic addFilter(String p0, String p1); + InputStream getResourceAsStream(String p0); + JspConfigDescriptor getJspConfigDescriptor(); + Map getFilterRegistrations(); + Map getServletRegistrations(); + Object getAttribute(String p0); + RequestDispatcher getNamedDispatcher(String p0); + RequestDispatcher getRequestDispatcher(String p0); + Servlet getServlet(String p0); + ServletContext getContext(String p0); + ServletRegistration getServletRegistration(String p0); + ServletRegistration.Dynamic addJspFile(String p0, String p1); + ServletRegistration.Dynamic addServlet(String p0, Class p1); + ServletRegistration.Dynamic addServlet(String p0, Servlet p1); + ServletRegistration.Dynamic addServlet(String p0, String p1); + SessionCookieConfig getSessionCookieConfig(); + Set getDefaultSessionTrackingModes(); + Set getEffectiveSessionTrackingModes(); + Set getResourcePaths(String p0); + String getContextPath(); + String getInitParameter(String p0); + String getMimeType(String p0); + String getRealPath(String p0); + String getRequestCharacterEncoding(); + String getResponseCharacterEncoding(); + String getServerInfo(); + String getServletContextName(); + String getVirtualServerName(); + URL getResource(String p0); + boolean setInitParameter(String p0, String p1); + int getEffectiveMajorVersion(); + int getEffectiveMinorVersion(); + int getMajorVersion(); + int getMinorVersion(); + int getSessionTimeout(); + static String ORDERED_LIBS = null; + static String TEMPDIR = null; + void addListener(Class p0); + void addListener(String p0); + void declareRoles(String... p0); + void log(Exception p0, String p1); + void log(String p0); + void log(String p0, Throwable p1); + void removeAttribute(String p0); + void setAttribute(String p0, Object p1); + void setRequestCharacterEncoding(String p0); + void setResponseCharacterEncoding(String p0); + void setSessionTimeout(int p0); + void setSessionTrackingModes(Set p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java new file mode 100644 index 00000000000..31034066970 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java @@ -0,0 +1,15 @@ +// Generated automatically from javax.servlet.ServletInputStream for testing purposes + +package javax.servlet; + +import java.io.InputStream; +import javax.servlet.ReadListener; + +abstract public class ServletInputStream extends InputStream +{ + protected ServletInputStream(){} + public abstract boolean isFinished(); + public abstract boolean isReady(); + public abstract void setReadListener(ReadListener p0); + public int readLine(byte[] p0, int p1, int p2){ return 0; } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java new file mode 100644 index 00000000000..52a2162c9eb --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.ServletOutputStream for testing purposes + +package javax.servlet; + +import java.io.OutputStream; +import javax.servlet.WriteListener; + +abstract public class ServletOutputStream extends OutputStream +{ + protected ServletOutputStream(){} + public abstract boolean isReady(); + public abstract void setWriteListener(WriteListener p0); + public void print(String p0){} + public void print(boolean p0){} + public void print(char p0){} + public void print(double p0){} + public void print(float p0){} + public void print(int p0){} + public void print(long p0){} + public void println(){} + public void println(String p0){} + public void println(boolean p0){} + public void println(char p0){} + public void println(double p0){} + public void println(float p0){} + public void println(int p0){} + public void println(long p0){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java new file mode 100644 index 00000000000..a1cc66f2d19 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java @@ -0,0 +1,23 @@ +// Generated automatically from javax.servlet.ServletRegistration for testing purposes + +package javax.servlet; + +import java.util.Collection; +import java.util.Set; +import javax.servlet.MultipartConfigElement; +import javax.servlet.Registration; +import javax.servlet.ServletSecurityElement; + +public interface ServletRegistration extends Registration +{ + Collection getMappings(); + Set addMapping(String... p0); + String getRunAsRole(); + static public interface Dynamic extends Registration.Dynamic, ServletRegistration + { + Set setServletSecurity(ServletSecurityElement p0); + void setLoadOnStartup(int p0); + void setMultipartConfig(MultipartConfigElement p0); + void setRunAsRole(String p0); + } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java new file mode 100644 index 00000000000..fc0db462cc0 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java @@ -0,0 +1,55 @@ +// Generated automatically from javax.servlet.ServletRequest for testing purposes + +package javax.servlet; + +import java.io.BufferedReader; +import java.util.Enumeration; +import java.util.Locale; +import java.util.Map; +import javax.servlet.AsyncContext; +import javax.servlet.DispatcherType; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; + +public interface ServletRequest +{ + AsyncContext getAsyncContext(); + AsyncContext startAsync(); + AsyncContext startAsync(ServletRequest p0, ServletResponse p1); + BufferedReader getReader(); + DispatcherType getDispatcherType(); + Enumeration getLocales(); + Enumeration getAttributeNames(); + Enumeration getParameterNames(); + Locale getLocale(); + Map getParameterMap(); + Object getAttribute(String p0); + RequestDispatcher getRequestDispatcher(String p0); + ServletContext getServletContext(); + ServletInputStream getInputStream(); + String getCharacterEncoding(); + String getContentType(); + String getLocalAddr(); + String getLocalName(); + String getParameter(String p0); + String getProtocol(); + String getRealPath(String p0); + String getRemoteAddr(); + String getRemoteHost(); + String getScheme(); + String getServerName(); + String[] getParameterValues(String p0); + boolean isAsyncStarted(); + boolean isAsyncSupported(); + boolean isSecure(); + int getContentLength(); + int getLocalPort(); + int getRemotePort(); + int getServerPort(); + long getContentLengthLong(); + void removeAttribute(String p0); + void setAttribute(String p0, Object p1); + void setCharacterEncoding(String p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java new file mode 100644 index 00000000000..db6610bc15d --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java @@ -0,0 +1,27 @@ +// Generated automatically from javax.servlet.ServletResponse for testing purposes + +package javax.servlet; + +import java.io.PrintWriter; +import java.util.Locale; +import javax.servlet.ServletOutputStream; + +public interface ServletResponse +{ + Locale getLocale(); + PrintWriter getWriter(); + ServletOutputStream getOutputStream(); + String getCharacterEncoding(); + String getContentType(); + boolean isCommitted(); + int getBufferSize(); + void flushBuffer(); + void reset(); + void resetBuffer(); + void setBufferSize(int p0); + void setCharacterEncoding(String p0); + void setContentLength(int p0); + void setContentLengthLong(long p0); + void setContentType(String p0); + void setLocale(Locale p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java new file mode 100644 index 00000000000..def47937391 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.ServletSecurityElement for testing purposes + +package javax.servlet; + +import java.util.Collection; +import javax.servlet.HttpConstraintElement; +import javax.servlet.HttpMethodConstraintElement; +import javax.servlet.annotation.ServletSecurity; + +public class ServletSecurityElement extends HttpConstraintElement +{ + public Collection getHttpMethodConstraints(){ return null; } + public Collection getMethodNames(){ return null; } + public ServletSecurityElement(){} + public ServletSecurityElement(Collection p0){} + public ServletSecurityElement(HttpConstraintElement p0){} + public ServletSecurityElement(HttpConstraintElement p0, Collection p1){} + public ServletSecurityElement(ServletSecurity p0){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java new file mode 100644 index 00000000000..4cae9a11f30 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java @@ -0,0 +1,22 @@ +// Generated automatically from javax.servlet.SessionCookieConfig for testing purposes + +package javax.servlet; + + +public interface SessionCookieConfig +{ + String getComment(); + String getDomain(); + String getName(); + String getPath(); + boolean isHttpOnly(); + boolean isSecure(); + int getMaxAge(); + void setComment(String p0); + void setDomain(String p0); + void setHttpOnly(boolean p0); + void setMaxAge(int p0); + void setName(String p0); + void setPath(String p0); + void setSecure(boolean p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java b/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java new file mode 100644 index 00000000000..684ac40c56f --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.SessionTrackingMode for testing purposes + +package javax.servlet; + + +public enum SessionTrackingMode +{ + COOKIE, SSL, URL; + private SessionTrackingMode() {} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java new file mode 100644 index 00000000000..24fe504271c --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.WriteListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; + +public interface WriteListener extends EventListener +{ + void onError(Throwable p0); + void onWritePossible(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java new file mode 100644 index 00000000000..f47efc62744 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java @@ -0,0 +1,18 @@ +// Generated automatically from javax.servlet.annotation.HttpConstraint for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import javax.servlet.annotation.ServletSecurity; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +public @interface HttpConstraint +{ + ServletSecurity.EmptyRoleSemantic value(); + ServletSecurity.TransportGuarantee transportGuarantee(); + String[] rolesAllowed(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java new file mode 100644 index 00000000000..288f4651018 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.annotation.HttpMethodConstraint for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import javax.servlet.annotation.ServletSecurity; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +public @interface HttpMethodConstraint +{ + ServletSecurity.EmptyRoleSemantic emptyRoleSemantic(); + ServletSecurity.TransportGuarantee transportGuarantee(); + String value(); + String[] rolesAllowed(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java new file mode 100644 index 00000000000..baccad3e199 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.annotation.MultipartConfig for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface MultipartConfig +{ + String location(); + int fileSizeThreshold(); + long maxFileSize(); + long maxRequestSize(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java new file mode 100644 index 00000000000..021b6c64c2a --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java @@ -0,0 +1,33 @@ +// Generated automatically from javax.servlet.annotation.ServletSecurity for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.servlet.annotation.HttpConstraint; +import javax.servlet.annotation.HttpMethodConstraint; + +@Documented +@Inherited +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface ServletSecurity +{ + HttpConstraint value(); + HttpMethodConstraint[] httpMethodConstraints(); + static public enum EmptyRoleSemantic + { + DENY, PERMIT; + private EmptyRoleSemantic() {} + } + static public enum TransportGuarantee + { + CONFIDENTIAL, NONE; + private TransportGuarantee() {} + } +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java new file mode 100644 index 00000000000..513c7d7053b --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.annotation.WebInitParam for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface WebInitParam +{ + String description(); + String name(); + String value(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java new file mode 100644 index 00000000000..83b5d2e476a --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.annotation.WebServlet for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.servlet.annotation.WebInitParam; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface WebServlet +{ + String description(); + String displayName(); + String largeIcon(); + String name(); + String smallIcon(); + String[] urlPatterns(); + String[] value(); + WebInitParam[] initParams(); + boolean asyncSupported(); + int loadOnStartup(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java new file mode 100644 index 00000000000..8d93a4318d7 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.descriptor.JspConfigDescriptor for testing purposes + +package javax.servlet.descriptor; + +import java.util.Collection; +import javax.servlet.descriptor.JspPropertyGroupDescriptor; +import javax.servlet.descriptor.TaglibDescriptor; + +public interface JspConfigDescriptor +{ + Collection getJspPropertyGroups(); + Collection getTaglibs(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java new file mode 100644 index 00000000000..dd852fa1088 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java @@ -0,0 +1,21 @@ +// Generated automatically from javax.servlet.descriptor.JspPropertyGroupDescriptor for testing purposes + +package javax.servlet.descriptor; + +import java.util.Collection; + +public interface JspPropertyGroupDescriptor +{ + Collection getIncludeCodas(); + Collection getIncludePreludes(); + Collection getUrlPatterns(); + String getBuffer(); + String getDefaultContentType(); + String getDeferredSyntaxAllowedAsLiteral(); + String getElIgnored(); + String getErrorOnUndeclaredNamespace(); + String getIsXml(); + String getPageEncoding(); + String getScriptingInvalid(); + String getTrimDirectiveWhitespaces(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java new file mode 100644 index 00000000000..c3dd5c10473 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.descriptor.TaglibDescriptor for testing purposes + +package javax.servlet.descriptor; + + +public interface TaglibDescriptor +{ + String getTaglibLocation(); + String getTaglibURI(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java new file mode 100644 index 00000000000..b5a180029be --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java @@ -0,0 +1,29 @@ +// Generated automatically from javax.servlet.http.Cookie for testing purposes + +package javax.servlet.http; + +import java.io.Serializable; + +public class Cookie implements Cloneable, Serializable +{ + protected Cookie() {} + public Cookie(String p0, String p1){} + public Object clone(){ return null; } + public String getComment(){ return null; } + public String getDomain(){ return null; } + public String getName(){ return null; } + public String getPath(){ return null; } + public String getValue(){ return null; } + public boolean getSecure(){ return false; } + public boolean isHttpOnly(){ return false; } + public int getMaxAge(){ return 0; } + public int getVersion(){ return 0; } + public void setComment(String p0){} + public void setDomain(String p0){} + public void setHttpOnly(boolean p0){} + public void setMaxAge(int p0){} + public void setPath(String p0){} + public void setSecure(boolean p0){} + public void setValue(String p0){} + public void setVersion(int p0){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java new file mode 100644 index 00000000000..1247f956d78 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java @@ -0,0 +1,24 @@ +// Generated automatically from javax.servlet.http.HttpServlet for testing purposes + +package javax.servlet.http; + +import javax.servlet.GenericServlet; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +abstract public class HttpServlet extends GenericServlet +{ + protected long getLastModified(HttpServletRequest p0){ return 0; } + protected void doDelete(HttpServletRequest p0, HttpServletResponse p1){} + protected void doGet(HttpServletRequest p0, HttpServletResponse p1){} + protected void doHead(HttpServletRequest p0, HttpServletResponse p1){} + protected void doOptions(HttpServletRequest p0, HttpServletResponse p1){} + protected void doPost(HttpServletRequest p0, HttpServletResponse p1){} + protected void doPut(HttpServletRequest p0, HttpServletResponse p1){} + protected void doTrace(HttpServletRequest p0, HttpServletResponse p1){} + protected void service(HttpServletRequest p0, HttpServletResponse p1){} + public HttpServlet(){} + public void service(ServletRequest p0, ServletResponse p1){} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java new file mode 100644 index 00000000000..1b597f27773 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.http.HttpServletMapping for testing purposes + +package javax.servlet.http; + +import javax.servlet.http.MappingMatch; + +public interface HttpServletMapping +{ + MappingMatch getMappingMatch(); + String getMatchValue(); + String getPattern(); + String getServletName(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java new file mode 100644 index 00000000000..8612c34fb69 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java @@ -0,0 +1,60 @@ +// Generated automatically from javax.servlet.http.HttpServletRequest for testing purposes + +package javax.servlet.http; + +import java.security.Principal; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Map; +import javax.servlet.ServletRequest; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletMapping; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpUpgradeHandler; +import javax.servlet.http.Part; +import javax.servlet.http.PushBuilder; + +public interface HttpServletRequest extends ServletRequest +{ + T upgrade(java.lang.Class p0); + Collection getParts(); + Cookie[] getCookies(); + Enumeration getHeaderNames(); + Enumeration getHeaders(String p0); + HttpSession getSession(); + HttpSession getSession(boolean p0); + Part getPart(String p0); + Principal getUserPrincipal(); + String changeSessionId(); + String getAuthType(); + String getContextPath(); + String getHeader(String p0); + String getMethod(); + String getPathInfo(); + String getPathTranslated(); + String getQueryString(); + String getRemoteUser(); + String getRequestURI(); + String getRequestedSessionId(); + String getServletPath(); + StringBuffer getRequestURL(); + boolean authenticate(HttpServletResponse p0); + boolean isRequestedSessionIdFromCookie(); + boolean isRequestedSessionIdFromURL(); + boolean isRequestedSessionIdFromUrl(); + boolean isRequestedSessionIdValid(); + boolean isUserInRole(String p0); + default HttpServletMapping getHttpServletMapping(){ return null; } + default Map getTrailerFields(){ return null; } + default PushBuilder newPushBuilder(){ return null; } + default boolean isTrailerFieldsReady(){ return false; } + int getIntHeader(String p0); + long getDateHeader(String p0); + static String BASIC_AUTH = null; + static String CLIENT_CERT_AUTH = null; + static String DIGEST_AUTH = null; + static String FORM_AUTH = null; + void login(String p0, String p1); + void logout(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java new file mode 100644 index 00000000000..da902dbf30c --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java @@ -0,0 +1,77 @@ +// Generated automatically from javax.servlet.http.HttpServletResponse for testing purposes + +package javax.servlet.http; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Supplier; +import javax.servlet.ServletResponse; +import javax.servlet.http.Cookie; + +public interface HttpServletResponse extends ServletResponse +{ + Collection getHeaderNames(); + Collection getHeaders(String p0); + String encodeRedirectURL(String p0); + String encodeRedirectUrl(String p0); + String encodeURL(String p0); + String encodeUrl(String p0); + String getHeader(String p0); + boolean containsHeader(String p0); + default Supplier> getTrailerFields(){ return null; } + default void setTrailerFields(Supplier> p0){} + int getStatus(); + static int SC_ACCEPTED = 0; + static int SC_BAD_GATEWAY = 0; + static int SC_BAD_REQUEST = 0; + static int SC_CONFLICT = 0; + static int SC_CONTINUE = 0; + static int SC_CREATED = 0; + static int SC_EXPECTATION_FAILED = 0; + static int SC_FORBIDDEN = 0; + static int SC_FOUND = 0; + static int SC_GATEWAY_TIMEOUT = 0; + static int SC_GONE = 0; + static int SC_HTTP_VERSION_NOT_SUPPORTED = 0; + static int SC_INTERNAL_SERVER_ERROR = 0; + static int SC_LENGTH_REQUIRED = 0; + static int SC_METHOD_NOT_ALLOWED = 0; + static int SC_MOVED_PERMANENTLY = 0; + static int SC_MOVED_TEMPORARILY = 0; + static int SC_MULTIPLE_CHOICES = 0; + static int SC_NON_AUTHORITATIVE_INFORMATION = 0; + static int SC_NOT_ACCEPTABLE = 0; + static int SC_NOT_FOUND = 0; + static int SC_NOT_IMPLEMENTED = 0; + static int SC_NOT_MODIFIED = 0; + static int SC_NO_CONTENT = 0; + static int SC_OK = 0; + static int SC_PARTIAL_CONTENT = 0; + static int SC_PAYMENT_REQUIRED = 0; + static int SC_PRECONDITION_FAILED = 0; + static int SC_PROXY_AUTHENTICATION_REQUIRED = 0; + static int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 0; + static int SC_REQUEST_ENTITY_TOO_LARGE = 0; + static int SC_REQUEST_TIMEOUT = 0; + static int SC_REQUEST_URI_TOO_LONG = 0; + static int SC_RESET_CONTENT = 0; + static int SC_SEE_OTHER = 0; + static int SC_SERVICE_UNAVAILABLE = 0; + static int SC_SWITCHING_PROTOCOLS = 0; + static int SC_TEMPORARY_REDIRECT = 0; + static int SC_UNAUTHORIZED = 0; + static int SC_UNSUPPORTED_MEDIA_TYPE = 0; + static int SC_USE_PROXY = 0; + void addCookie(Cookie p0); + void addDateHeader(String p0, long p1); + void addHeader(String p0, String p1); + void addIntHeader(String p0, int p1); + void sendError(int p0); + void sendError(int p0, String p1); + void sendRedirect(String p0); + void setDateHeader(String p0, long p1); + void setHeader(String p0, String p1); + void setIntHeader(String p0, int p1); + void setStatus(int p0); + void setStatus(int p0, String p1); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java new file mode 100644 index 00000000000..f8f455b1423 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.http.HttpSession for testing purposes + +package javax.servlet.http; + +import java.util.Enumeration; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpSessionContext; + +public interface HttpSession +{ + Enumeration getAttributeNames(); + HttpSessionContext getSessionContext(); + Object getAttribute(String p0); + Object getValue(String p0); + ServletContext getServletContext(); + String getId(); + String[] getValueNames(); + boolean isNew(); + int getMaxInactiveInterval(); + long getCreationTime(); + long getLastAccessedTime(); + void invalidate(); + void putValue(String p0, Object p1); + void removeAttribute(String p0); + void removeValue(String p0); + void setAttribute(String p0, Object p1); + void setMaxInactiveInterval(int p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java new file mode 100644 index 00000000000..97a77b48358 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.http.HttpSessionContext for testing purposes + +package javax.servlet.http; + +import java.util.Enumeration; +import javax.servlet.http.HttpSession; + +public interface HttpSessionContext +{ + Enumeration getIds(); + HttpSession getSession(String p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java new file mode 100644 index 00000000000..987d49dbde2 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.http.HttpUpgradeHandler for testing purposes + +package javax.servlet.http; + +import javax.servlet.http.WebConnection; + +public interface HttpUpgradeHandler +{ + void destroy(); + void init(WebConnection p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java new file mode 100644 index 00000000000..0432fd2ef7d --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.http.MappingMatch for testing purposes + +package javax.servlet.http; + + +public enum MappingMatch +{ + CONTEXT_ROOT, DEFAULT, EXACT, EXTENSION, PATH; + private MappingMatch() {} +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java new file mode 100644 index 00000000000..a4e599748a5 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.http.Part for testing purposes + +package javax.servlet.http; + +import java.io.InputStream; +import java.util.Collection; + +public interface Part +{ + Collection getHeaderNames(); + Collection getHeaders(String p0); + InputStream getInputStream(); + String getContentType(); + String getHeader(String p0); + String getName(); + String getSubmittedFileName(); + long getSize(); + void delete(); + void write(String p0); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java new file mode 100644 index 00000000000..195e2426a83 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java @@ -0,0 +1,23 @@ +// Generated automatically from javax.servlet.http.PushBuilder for testing purposes + +package javax.servlet.http; + +import java.util.Set; + +public interface PushBuilder +{ + PushBuilder addHeader(String p0, String p1); + PushBuilder method(String p0); + PushBuilder path(String p0); + PushBuilder queryString(String p0); + PushBuilder removeHeader(String p0); + PushBuilder sessionId(String p0); + PushBuilder setHeader(String p0, String p1); + Set getHeaderNames(); + String getHeader(String p0); + String getMethod(); + String getPath(); + String getQueryString(); + String getSessionId(); + void push(); +} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java new file mode 100644 index 00000000000..5001c046400 --- /dev/null +++ b/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.http.WebConnection for testing purposes + +package javax.servlet.http; + +import javax.servlet.ServletInputStream; +import javax.servlet.ServletOutputStream; + +public interface WebConnection extends AutoCloseable +{ + ServletInputStream getInputStream(); + ServletOutputStream getOutputStream(); +} From e37ceac3b137e7a453a8be032692fbca061505c6 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 7 Jun 2024 05:26:51 +0200 Subject: [PATCH 015/334] merge all query files into one query file --- .../CWE/CWE-409-DecompressionBomb/Brotli.qll | 38 ++ .../CWE/CWE-409-DecompressionBomb/Bzip2.qll | 50 +++ .../DecompressionBombs.ql | 330 ++++++++++++++++++ .../DecompressionBombsBrotli.ql | 107 ------ .../DecompressionBombsBzip2.ql | 126 ------- .../DecompressionBombsLibArchive.ql | 75 ---- .../DecompressionBombsLibMiniz.ql | 215 ------------ .../DecompressionBombsMiniZip.ql | 152 -------- .../DecompressionBombsXZ.ql | 100 ------ .../DecompressionBombsZSTD.ql | 140 -------- .../DecompressionBombsZlibGzopen.ql | 150 -------- .../DecompressionBombsZlibInflator.ql | 53 --- .../DecompressionBombsZlibUncompress.ql | 49 --- .../CWE-409-DecompressionBomb/LibArchive.qll | 25 ++ .../CWE-409-DecompressionBomb/LibMiniz.qll | 102 ++++++ .../CWE/CWE-409-DecompressionBomb/MiniZip.qll | 65 ++++ .../CWE/CWE-409-DecompressionBomb/XZ.qll | 37 ++ .../CWE/CWE-409-DecompressionBomb/ZSTD.qll | 57 +++ .../CWE-409-DecompressionBomb/ZlibGzopen.qll | 75 ++++ .../ZlibInflator.qll | 25 ++ .../ZlibUncompress.qll | 21 ++ 21 files changed, 825 insertions(+), 1167 deletions(-) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll new file mode 100644 index 00000000000..46314826a62 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll @@ -0,0 +1,38 @@ +/** + * https://github.com/google/brotli + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +/** + * A Pointer Variable is used in Flow source + */ +class PointerVar extends VariableAccess { + PointerVar() { this.getType() instanceof PointerType } +} + +/** + * A Pointer Variable is used in Flow source + */ +class Uint8Var extends VariableAccess { + Uint8Var() { this.getType() instanceof UInt8_t } +} + +/** + * The `BrotliDecoderDecompress` function is used in Flow sink + * Ref: https://www.brotli.org/decode.html#af68 + */ +class BrotliDecoderDecompressFunction extends Function { + BrotliDecoderDecompressFunction() { this.hasGlobalName(["BrotliDecoderDecompress"]) } +} + +/** + * The `BrotliDecoderDecompressStream` function is used in Flow sink + * Ref: https://www.brotli.org/decode.html#a234 + */ +class BrotliDecoderDecompressStreamFunction extends Function { + BrotliDecoderDecompressStreamFunction() { this.hasGlobalName(["BrotliDecoderDecompressStream"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll new file mode 100644 index 00000000000..662424b022a --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll @@ -0,0 +1,50 @@ +/** + * https://www.sourceware.org/bzip2/manual/manual.html + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +/** + * A `bz_stream` Variable as a Flow source + */ +class BzStreamVar extends VariableAccess { + BzStreamVar() { this.getType().hasName("bz_stream") } +} + +/** + * A `BZFILE` Variable as a Flow source + */ +class BzFileVar extends VariableAccess { + BzFileVar() { this.getType().hasName("BZFILE") } +} + +/** + * The `BZ2_bzDecompress` function as a Flow source + */ +class BZ2BzDecompressFunction extends Function { + BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } +} + +/** + * The `BZ2_bzReadOpen` function + */ +class BZ2BzReadOpenFunction extends Function { + BZ2BzReadOpenFunction() { this.hasGlobalName(["BZ2_bzReadOpen"]) } +} + +/** + * The `BZ2_bzRead` function is used in Flow sink + */ +class BZ2BzReadFunction extends Function { + BZ2BzReadFunction() { this.hasGlobalName("BZ2_bzRead") } +} + +/** + * The `BZ2_bzBuffToBuffDecompress` function is used in Flow sink + */ +class BZ2BzBuffToBuffDecompressFunction extends Function { + BZ2BzBuffToBuffDecompressFunction() { this.hasGlobalName("BZ2_bzBuffToBuffDecompress") } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql new file mode 100644 index 00000000000..8506dccaea7 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql @@ -0,0 +1,330 @@ +/** + * @name User-controlled file decompression + * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/data-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File +import Bzip2 +import Brotli +import LibArchive +import LibMiniz +import ZSTD +import MiniZip +import XZ +import ZlibGzopen +import ZlibUncompress +import ZlibInflator +import Brotli + +module DecompressionTaintConfig implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; + + predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + ( + exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | fc = source.asExpr()) + or + exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) + or + source.asExpr() instanceof PointerVar + or + source.asExpr() instanceof Uint8Var + ) and + state = "brotli" + or + ( + source.asExpr() instanceof BzStreamVar + or + source.asExpr() instanceof BzFileVar + or + exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) + ) and + state = "bzip2" + or + exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_new | + fc.getArgument(0) = source.asExpr() + ) and + state = "libarchive" + or + ( + source.asExpr() instanceof UnsignedCharVar + or + source.asExpr() instanceof PointerVar + or + source.asExpr() instanceof CharVar + or + source.asExpr() instanceof MzZipArchiveVar + or + source.asExpr() instanceof MzStreampVar + or + source.asDefiningArgument() = + any(Call call | call.getTarget() instanceof MzInflateInit).getArgument(0) + or + source.asDefiningArgument() = + any(Call call | call.getTarget() instanceof MzZip).getArgument(0) + ) and + state = "libminiz" + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | fc = source.asExpr()) + or + exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) + or + source.asExpr() instanceof ZSTDinBufferSVar + or + source.asExpr() instanceof ZSTDinBufferVar + ) and + state = "zstd" + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | + fc.getArgument(0) = source.asExpr() + ) + or + source.asExpr() instanceof UnzFileVar + ) and + state = "unzFile" + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_create | + fc = source.asExpr() and + state = "mz_zip_reader" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_create | + fc = source.asExpr() and + state = "mz_zip" + ) + or + ( + source.asExpr() instanceof LzmaStreamVar + or + source.asExpr() instanceof Uint8Var + ) and + state = "xz" + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | + fc.getArgument(0) = source.asExpr() and + // arg 0 can be a path string whichwe must do following check + not fc.getArgument(0).isConstant() + ) + or + // IDK whether it is good to use all file decriptors function returns as source or not + // because we can do more sanitization from fd function sources + exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | + fc.getArgument(0) = source.asExpr() + ) + or + source.asExpr() instanceof GzFileVar + ) and + state = "zlibgzopen" + or + source.asExpr() instanceof ZStreamVar and state = "zlifinflator" + or + source.asExpr() instanceof BytefVar and state = "zlibuncompress" + } + + predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + ( + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | + fc.getArgument(1) = sink.asExpr() + ) + ) and + state = "brotli" + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | + fc.getArgument(2) = sink.asExpr() + ) + ) and + state = "bzip2" + or + exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | + fc.getArgument(0) = sink.asExpr() and + state = "libarchive" + ) + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | + fc.getArgument(0) = sink.asExpr() + ) + ) and + state = "libminiz" + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | + fc.getArgument(2) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | + fc.getArgument(3) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | + fc.getArgument(3) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | + fc.getArgument(3) = sink.asExpr() + ) + ) and + state = "zstd" + or + exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | + fc.getArgument(0) = sink.asExpr() and + state = "unzFile" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | + fc.getArgument(1) = sink.asExpr() and + state = "mz_zip_reader" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | + fc.getArgument(1) = sink.asExpr() and + state = "mz_zip" + ) + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | + fc.getArgument(0) = sink.asExpr() + ) + ) and + state = "xz" and + exists(FunctionCall fc2 | fc2.getTarget() instanceof LzmaDecoderFunction) + or + ( + exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | + sink.asExpr() = fc.getArgument(3) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | + sink.asExpr() = fc.getArgument(0) + ) + ) and + state = "zlibgzopen" + or + exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | + fc.getArgument(0) = sink.asExpr() + ) and + state = "zlifinflator" + or + exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | + fc.getArgument(0) = sink.asExpr() + ) and + state = "zlibuncompress" + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, + DataFlow::FlowState state2 + ) { + exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc and + state1 = "" and + state2 = "unzFile" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) and + state1 = "" and + state2 = "mz_zip_reader" + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) and + state1 = "" and + state2 = "mz_zip" + ) + or + ( + exists(FunctionCall fc | + fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction + | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | + node1.asExpr() = fc.getArgument(3) and + node2.asExpr() = fc.getArgument(0) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | + node1.asExpr() = fc.getArgument(0) and + node1.asExpr() = fc.getArgument(1) + ) + ) and + state1 = "" and + state2 = "gzopen" + } + + predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } +} + +module DecompressionTaint = TaintTracking::GlobalWithState; + +import DecompressionTaint::PathGraph + +from DecompressionTaint::PathNode source, DecompressionTaint::PathNode sink +where DecompressionTaint::flowPath(source, sink) +select sink.getNode(), source, sink, "This Decompression output $@.", source.getNode(), + "is not limited" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql deleted file mode 100644 index b09858d6471..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBrotli.ql +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-brotli - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -// https://github.com/google/brotli -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File - -/** - * A Pointer Variable is used in Flow source - */ -private class PointerVar extends VariableAccess { - PointerVar() { this.getType() instanceof PointerType } -} - -/** - * A Pointer Variable is used in Flow source - */ -private class Uint8Var extends VariableAccess { - Uint8Var() { this.getType() instanceof UInt8_t } -} - -/** - * A ZSTD_inBuffer Variable is used in Flow source - */ -private class ZSTDinBufferVar extends VariableAccess { - ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } -} - -/** - * The `ZSTD_decompress_usingDDict` function is used in Flow sink - * Ref: https://www.brotli.org/decode.html#af68 - */ -private class BrotliDecoderDecompressFunction extends Function { - BrotliDecoderDecompressFunction() { this.hasGlobalName(["BrotliDecoderDecompress"]) } -} - -/** - * The `BrotliDecoderDecompressStream` function is used in Flow sink - * Ref: https://www.brotli.org/decode.html#a234 - */ -private class BrotliDecoderDecompressStreamFunction extends Function { - BrotliDecoderDecompressStreamFunction() { this.hasGlobalName(["BrotliDecoderDecompressStream"]) } -} - -module BrotliTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | - fc = source.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fopenCall(fc) | - fc = source.asExpr() and - state = "" - ) - or - source.asExpr() instanceof PointerVar and - state = "" - or - source.asExpr() instanceof Uint8Var and - state = "" - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | - fc.getArgument(1) = sink.asExpr() and - state = "" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - none() - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module BrotliTaint = TaintTracking::GlobalWithState; - -import BrotliTaint::PathGraph - -from BrotliTaint::PathNode source, BrotliTaint::PathNode sink -where BrotliTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql deleted file mode 100644 index e9b7d60715d..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsBzip2.ql +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-bzip2 - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File - -/** - * A `bz_stream` Variable as a Flow source - */ -private class BzStreamVar extends VariableAccess { - BzStreamVar() { this.getType().hasName("bz_stream") } -} - -/** - * A `BZFILE` Variable as a Flow source - */ -private class BZFILEVar extends VariableAccess { - BZFILEVar() { this.getType().hasName("BZFILE") } -} - -/** - * The `BZ2_bzopen`,`BZ2_bzdopen` functions as a Flow source - */ -private class BZ2BzopenFunction extends Function { - BZ2BzopenFunction() { this.hasGlobalName(["BZ2_bzopen", "BZ2_bzdopen"]) } -} - -/** - * The `BZ2_bzDecompress` function as a Flow source - */ -private class BZ2BzDecompressFunction extends Function { - BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } -} - -/** - * The `BZ2_bzReadOpen` function - */ -private class BZ2BzReadOpenFunction extends Function { - BZ2BzReadOpenFunction() { this.hasGlobalName(["BZ2_bzReadOpen"]) } -} - -/** - * The `BZ2_bzRead` function is used in Flow sink - */ -private class BZ2BzReadFunction extends Function { - BZ2BzReadFunction() { this.hasGlobalName("BZ2_bzRead") } -} - -/** - * The `BZ2_bzRead` function is used in Flow sink - */ -private class BZ2BzBuffToBuffDecompressFunction extends Function { - BZ2BzBuffToBuffDecompressFunction() { this.hasGlobalName("BZ2_bzBuffToBuffDecompress") } -} - -/** - * https://www.sourceware.org/bzip2/manual/manual.html - */ -module Bzip2TaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - source.asExpr() instanceof BzStreamVar and - state = "" - or - source.asExpr() instanceof BZFILEVar and - state = "" - or - // will flow into BZ2BzReadOpenFunction - exists(FunctionCall fc | fopenCall(fc) | - fc = source.asExpr() and - state = "" - ) - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | - fc.getArgument(0) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | - fc.getArgument(1) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | - fc.getArgument(2) = sink.asExpr() and - state = "" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadOpenFunction | - node1.asExpr() = fc.getArgument(1) and - node2.asExpr() = fc and - state1 = "" and - state2 = "" - ) - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module Bzip2Taint = TaintTracking::GlobalWithState; - -import Bzip2Taint::PathGraph - -from Bzip2Taint::PathNode source, Bzip2Taint::PathNode sink -where Bzip2Taint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql deleted file mode 100644 index 57a9a4f72c9..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibArchive.ql +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-libarchive - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * The `archive_read_new` function as a Flow source - * create a `archive` instance - */ -private class Archive_read_new extends Function { - Archive_read_new() { this.hasGlobalName("archive_read_new") } -} - -/** - * The `archive_read_data*` functions are used in Flow Sink - * [Examples](https://github.com/libarchive/libarchive/wiki/Examples) - */ -private class Archive_read_data_block extends Function { - Archive_read_data_block() { - this.hasGlobalName(["archive_read_data_block", "archive_read_data", "archive_read_data_into_fd"]) - } -} - -module LibArchiveTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_new | - fc.getArgument(0) = source.asExpr() and - state = "unzFile" - ) - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | - fc.getArgument(1) = sink.asExpr() and - state = "unzFile" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) and - state1 = "" and - state2 = "mz_zip_reader" - ) - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module LibArchiveTaint = TaintTracking::GlobalWithState; - -import LibArchiveTaint::PathGraph - -from LibArchiveTaint::PathNode source, LibArchiveTaint::PathNode sink -where LibArchiveTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql deleted file mode 100644 index e0310704af2..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsLibMiniz.ql +++ /dev/null @@ -1,215 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-miniz - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * A Pointer Variable is used in Flow source - */ -private class PointerVar extends VariableAccess { - PointerVar() { this.getType() instanceof PointerType } -} - -/** - * A unsigned char Variable is used in Flow source - */ -private class Uint8Var extends VariableAccess { - Uint8Var() { this.getType().stripType().resolveTypedefs*() instanceof UnsignedCharType } -} - -/** - * The `mz_streamp`, `z_stream` Variables are used in Flow source - */ -private class MzStreampVar extends VariableAccess { - MzStreampVar() { this.getType().hasName(["mz_streamp", "z_stream"]) } -} - -/** - * A Char Variable is used in Flow source - */ -private class CharVar extends VariableAccess { - CharVar() { this.getType().stripType().resolveTypedefs*() instanceof CharType } -} - -/** - * A `mz_zip_archive` Variable is used in Flow source - */ -private class MzZipArchiveVar extends VariableAccess { - MzZipArchiveVar() { this.getType().hasName("mz_zip_archive") } -} - -/** - * The `mz_uncompress` functions are used in Flow Sink - */ -private class MzUncompress extends Function { - MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } -} - -/** - * A `zip handle` is used in Flow source - */ -private class MzZip extends Function { - MzZip() { - this.hasGlobalName([ - "mz_zip_reader_open", "mz_zip_reader_open_file", "mz_zip_reader_open_file_in_memory", - "mz_zip_reader_open_buffer", "mz_zip_reader_entry_open" - ]) - } -} - -/** - * The `mz_inflate` functions are used in Flow Sink - */ -private class MzInflate extends Function { - MzInflate() { this.hasGlobalName(["mz_inflate", "inflate"]) } -} - -/** - * The `mz_inflateInit` functions are used in Flow Sink - */ -private class MzInflateInit extends Function { - MzInflateInit() { this.hasGlobalName(["inflateInit", "mz_inflateInit"]) } -} - -/** - * The `mz_zip_reader_extract_*` functions are used in Flow Sink - */ -private class MzZipReaderExtract extends Function { - MzZipReaderExtract() { - this.hasGlobalName([ - "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", - "mz_zip_reader_extract_to_callback", "mz_zip_reader_extract_file_to_callback", - "mz_zip_reader_extract_to_mem", "mz_zip_reader_extract_file_to_mem", - "mz_zip_reader_extract_iter_read", "mz_zip_reader_extract_to_file", - "mz_zip_reader_extract_file_to_file" - ]) - } -} - -/** - * The `mz_zip_reader_locate_file_*` functions are used in Flow Sink - */ -private class MzZipReaderLocateFile extends Function { - MzZipReaderLocateFile() { - this.hasGlobalName(["mz_zip_reader_locate_file", "mz_zip_reader_locate_file_v2"]) - } -} - -/** - * The `tinfl_decompress_mem_*` functions are used in Flow Sink - */ -private class TinflDecompressMem extends Function { - TinflDecompressMem() { - this.hasGlobalName([ - "tinfl_decompress_mem_to_callback", "tinfl_decompress_mem_to_mem", - "tinfl_decompress_mem_to_heap" - ]) - } -} - -/** - * The `tinfl_decompress_*` functions are used in Flow Sink - */ -private class TinflDecompress extends Function { - TinflDecompress() { this.hasGlobalName(["tinfl_decompress"]) } -} - -module MinizTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - source.asExpr() instanceof Uint8Var and - state = "" - or - source.asExpr() instanceof PointerVar and - state = "" - or - source.asExpr() instanceof CharVar and - state = "" - or - source.asExpr() instanceof MzZipArchiveVar and - state = "" - or - source.asExpr() instanceof MzStreampVar and - state = "" - or - // source of inflate(&arg0) is OK - // but the sink which is a call to MzInflate Function first arg can not be determined - // if I debug the query we'll reach to the first arg, it is weird I think. - source.asDefiningArgument() = - any(Call call | call.getTarget() instanceof MzInflateInit).getArgument(0) and - state = "inflate" - or - source.asDefiningArgument() = any(Call call | call.getTarget() instanceof MzZip).getArgument(0) and - state = "" - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | - fc.getArgument(2) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | - fc.getArgument(1) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | - fc.getArgument(0) = sink.asExpr() and - state = "inflate" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | - fc.getArgument(1) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | - fc.getArgument(0) = sink.asExpr() and - state = "" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | - node1.asExpr() = fc.getArgument(2) and - node2.asExpr() = fc.getArgument(0) and - state1 = "" and - state2 = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderLocateFile | - node1.asExpr() = fc.getArgument(1) and - node2.asExpr() = fc.getArgument(3) and - state1 = "" and - state2 = "" - ) - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module MinizTaint = TaintTracking::GlobalWithState; - -import MinizTaint::PathGraph - -from MinizTaint::PathNode source, MinizTaint::PathNode sink -where MinizTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql deleted file mode 100644 index 67999bff3d6..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsMiniZip.ql +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-minizip - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * The `mz_zip_reader_create` function as a Flow source - * create a `mz_zip_reader` instance - */ -private class Mz_zip_reader_create extends Function { - Mz_zip_reader_create() { this.hasGlobalName("mz_zip_reader_create") } -} - -/** - * The `mz_zip_create` function as a Flow source - * create a `mz_zip` instance - */ -private class Mz_zip_create extends Function { - Mz_zip_create() { this.hasGlobalName("mz_zip_create") } -} - -/** - * The `mz_zip_entry` function is used in Flow source - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) - */ -private class Mz_zip_entry extends Function { - Mz_zip_entry() { this.hasGlobalName("mz_zip_entry_read") } -} - -/** - * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in Flow source - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) - */ -private class Mz_zip_reader_entry extends Function { - Mz_zip_reader_entry() { - this.hasGlobalName([ - "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", - "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" - ]) - } -} - -/** - * A `unzFile` Variable as a Flow source - */ -private class UnzFileVar extends VariableAccess { - UnzFileVar() { this.getType().hasName("unzFile") } -} - -/** - * The `UnzOpen` function as a Flow source - */ -private class UnzOpenFunction extends Function { - UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } -} - -/** - * The `unzReadCurrentFile` function is used in Flow sink - */ -private class UnzReadCurrentFileFunction extends Function { - UnzReadCurrentFileFunction() { this.hasGlobalName(["unzReadCurrentFile"]) } -} - -module MiniZipTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | - fc.getArgument(0) = source.asExpr() and - state = "unzFile" - ) - or - source.asExpr() instanceof UnzFileVar and - state = "unzFile" - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_create | - fc = source.asExpr() and - state = "mz_zip_reader" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_create | - fc = source.asExpr() and - state = "mz_zip" - ) - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | - fc.getArgument(0) = sink.asExpr() and - state = "unzFile" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | - fc.getArgument(1) = sink.asExpr() and - state = "mz_zip_reader" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | - fc.getArgument(1) = sink.asExpr() and - state = "mz_zip" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc and - state1 = "" and - state2 = "unzFile" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) and - state1 = "" and - state2 = "mz_zip_reader" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) and - state1 = "" and - state2 = "mz_zip" - ) - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module MiniZipTaint = TaintTracking::GlobalWithState; - -import MiniZipTaint::PathGraph - -from MiniZipTaint::PathNode source, MiniZipTaint::PathNode sink -where MiniZipTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql deleted file mode 100644 index dadbf7a5a8a..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsXZ.ql +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-xz - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * A Pointer Variable as a Flow source - */ -private class Uint8Var extends VariableAccess { - Uint8Var() { this.getType() instanceof UInt8_t } -} - -/** - * A `lzma_stream` Variable as a Flow source - */ -private class LzmaStreamVar extends VariableAccess { - LzmaStreamVar() { this.getType().hasName("lzma_stream") } -} - -/** - * The `lzma_*_decoder` function is used as a required condition for decompression - */ -private class LzmaDecoderFunction extends Function { - LzmaDecoderFunction() { - this.hasGlobalName(["lzma_stream_decoder", "lzma_auto_decoder", "lzma_alone_decoder"]) - } -} - -/** - * The `lzma_code` function is used in Flow sink - */ -private class LzmaCodeFunction extends Function { - LzmaCodeFunction() { this.hasGlobalName(["lzma_code"]) } -} - -/** - * The `lzma_stream_buffer_decode` function is used in Flow sink - */ -private class LzmaStreamBufferDecodeFunction extends Function { - LzmaStreamBufferDecodeFunction() { this.hasGlobalName(["lzma_stream_buffer_decode"]) } -} - -/** - * https://github.com/tukaani-project/xz - */ -module XzTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - source.asExpr() instanceof LzmaStreamVar and - state = "" - or - source.asExpr() instanceof Uint8Var and - state = "" - // and not exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamDecoderFunction) - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | - fc.getArgument(1) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | - fc.getArgument(0) = sink.asExpr() and - state = "" - ) and - exists(FunctionCall fc2 | fc2.getTarget() instanceof LzmaDecoderFunction) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - none() - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module XzTaint = TaintTracking::GlobalWithState; - -import XzTaint::PathGraph - -from XzTaint::PathNode source, XzTaint::PathNode sink -where XzTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql deleted file mode 100644 index 9e984bb89e2..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZSTD.ql +++ /dev/null @@ -1,140 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-decompression-zstd - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -// https://github.com/facebook/zstd/blob/dev/examples/streaming_decompression.c -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File - -// /** -// * A Pointer Variable as a Flow source -// */ -// private class PointerVar extends VariableAccess { -// PointerVar() { this.getType() instanceof PointerType } -// } -/** - * A ZSTD_inBuffer Variable as a Flow source - */ -private class ZSTDinBufferVar extends VariableAccess { - ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } -} - -/** - * A ZSTD_inBuffer_s Variable as a Flow source - */ -private class ZSTDinBufferSVar extends VariableAccess { - ZSTDinBufferSVar() { this.getType().hasName("ZSTD_inBuffer_s") } -} - -/** - * The `ZSTD_decompress` function is used in Flow sink - */ -private class ZSTDDecompressFunction extends Function { - ZSTDDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } -} - -/** - * The `ZSTD_decompressDCtx` function is used in Flow sink - */ -private class ZSTDDecompressDCtxFunction extends Function { - ZSTDDecompressDCtxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } -} - -/** - * The `ZSTD_decompressStream` function is used in Flow sink - */ -private class ZSTDDecompressStreamFunction extends Function { - ZSTDDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } -} - -/** - * The `ZSTD_decompress_usingDDict` function is used in Flow sink - */ -private class ZSTDDecompressUsingDictFunction extends Function { - ZSTDDecompressUsingDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } -} - -/** - * The `ZSTD_decompress_usingDDict` function is used in Flow sink - */ -private class ZSTDDecompressUsingDDictFunction extends Function { - ZSTDDecompressUsingDDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } -} - -module ZstdTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | - fc = source.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fopenCall(fc) | - fc = source.asExpr() and - state = "" - ) - or - source.asExpr() instanceof ZSTDinBufferSVar and - state = "" - or - source.asExpr() instanceof ZSTDinBufferVar and - state = "" - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | - fc.getArgument(2) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | - fc.getArgument(3) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | - fc.getArgument(3) = sink.asExpr() and - state = "" - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | - fc.getArgument(3) = sink.asExpr() and - state = "" - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - none() - } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } -} - -module ZstdTaint = TaintTracking::GlobalWithState; - -import ZstdTaint::PathGraph - -from ZstdTaint::PathNode source, ZstdTaint::PathNode sink -where ZstdTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql deleted file mode 100644 index ce7324eded0..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibGzopen.ql +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-zlibgz - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * A `gzFile` Variable as a Flow source - */ -private class GzFileVar extends VariableAccess { - GzFileVar() { this.getType().hasName("gzFile") } -} - -/** - * The `gzopen` function as a Flow source - * - * `gzopen(const char *path, const char *mode)` - */ -private class GzopenFunction extends Function { - GzopenFunction() { this.hasGlobalName("gzopen") } -} - -/** - * The `gzdopen` function as a Flow source - * - * `gzdopen(int fd, const char *mode)` - */ -private class GzdopenFunction extends Function { - GzdopenFunction() { this.hasGlobalName("gzdopen") } -} - -/** - * The `gzfread` function is used in Flow sink - * - * `gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file)` - */ -private class GzfreadFunction extends Function { - GzfreadFunction() { this.hasGlobalName("gzfread") } -} - -/** - * The `gzgets` function is used in Flow sink. - * - * `gzgets(gzFile file, char *buf, int len)` - */ -private class GzgetsFunction extends Function { - GzgetsFunction() { this.hasGlobalName("gzgets") } -} - -/** - * The `gzread` function is used in Flow sink - * - * `gzread(gzFile file, voidp buf, unsigned len)` - */ -private class GzreadFunction extends Function { - GzreadFunction() { this.hasGlobalName("gzread") } -} - -module ZlibTaintConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | - fc.getArgument(0) = source.asExpr() and - // arg 0 can be a path string whichwe must do following check - not fc.getArgument(0).isConstant() - ) - or - // IDK whether it is good to use all file decriptors function returns as source or not - // because we can do more sanitization from fd function sources - exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | - fc.getArgument(0) = source.asExpr() - ) - or - source.asExpr() instanceof GzFileVar - } - - predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | - fc.getArgument(0) = sink.asExpr() and - not sanitizer(fc) - // TODO: and not sanitizer2(fc.getArgument(2)) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | - sink.asExpr() = fc.getArgument(3) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzgetsFunction | - sink.asExpr() = fc.getArgument(0) - ) - } - - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | - fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction - | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzreadFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzfreadFunction | - node1.asExpr() = fc.getArgument(3) and - node2.asExpr() = fc.getArgument(0) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzgetsFunction | - node1.asExpr() = fc.getArgument(0) and - node1.asExpr() = fc.getArgument(1) - ) - } -} - -predicate sanitizer(FunctionCall fc) { - exists(Expr e | - // a RelationalOperation which isn't compared with a Literal that using for end of read - TaintTracking::localExprTaint(fc, e.(RelationalOperation).getAChild*()) and - not e.getAChild*().(Literal).getValue() = ["0", "1", "-1"] - ) -} - -// TODO: -// predicate sanitizer2(FunctionCall fc) { -// exists(Expr e | -// // a RelationalOperation which isn't compared with a Literal that using for end of read -// TaintTracking::localExprTaint(fc.getArgument(2), e) -// ) -// } -module ZlibTaint = TaintTracking::Global; - -import ZlibTaint::PathGraph - -from ZlibTaint::PathNode source, ZlibTaint::PathNode sink -where ZlibTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompressiondepends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql deleted file mode 100644 index e526b4d9273..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibInflator.ql +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-zlibinflator - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * A `z_stream` Variable as a Flow source - */ -private class ZStreamVar extends VariableAccess { - ZStreamVar() { this.getType().hasName("z_stream") } -} - -/** - * The `inflate`/`inflateSync` functions are used in Flow sink - * - * `inflate(z_streamp strm, int flush)` - * - * `inflateSync(z_streamp strm)` - */ -private class InflateFunction extends Function { - InflateFunction() { this.hasGlobalName(["inflate", "inflateSync"]) } -} - -module ZlibTaintConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr() instanceof ZStreamVar } - - predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | - fc.getArgument(0) = sink.asExpr() - ) - } -} - -module ZlibTaint = TaintTracking::Global; - -import ZlibTaint::PathGraph - -from ZlibTaint::PathNode source, ZlibTaint::PathNode sink -where ZlibTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql deleted file mode 100644 index b385523f185..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombsZlibUncompress.ql +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision high - * @id cpp/user-controlled-file-zlibuncompress - * @tags security - * experimental - * external/cwe/cwe-409 - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources - -/** - * A Bytef Variable as a Flow source - */ -private class BytefVar extends VariableAccess { - BytefVar() { this.getType().hasName("Bytef") } -} - -/** - * The `uncompress`/`uncompress2` function is used in Flow sink - */ -private class UncompressFunction extends Function { - UncompressFunction() { hasGlobalName(["uncompress", "uncompress2"]) } -} - -module ZlibTaintConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr() instanceof BytefVar } - - predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | - fc.getArgument(0) = sink.asExpr() - ) - } -} - -module ZlibTaint = TaintTracking::Global; - -import ZlibTaint::PathGraph - -from ZlibTaint::PathNode source, ZlibTaint::PathNode sink -where ZlibTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompression depends on a $@.", source.getNode(), - "potentially untrusted source" diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll new file mode 100644 index 00000000000..4d96e83c195 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll @@ -0,0 +1,25 @@ +/** + * https://github.com/libarchive/libarchive/wiki + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * The `archive_read_new` function as a Flow source + * create a `archive` instance + */ +class Archive_read_new extends Function { + Archive_read_new() { this.hasGlobalName("archive_read_new") } +} + +/** + * The `archive_read_data*` functions are used in Flow Sink + * [Examples](https://github.com/libarchive/libarchive/wiki/Examples) + */ +class Archive_read_data_block extends Function { + Archive_read_data_block() { + this.hasGlobalName(["archive_read_data_block", "archive_read_data", "archive_read_data_into_fd"]) + } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll new file mode 100644 index 00000000000..64eba1e7b28 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll @@ -0,0 +1,102 @@ +/** + * https://github.com/richgel999/miniz + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A unsigned char Variable is used in Flow source + */ +class UnsignedCharVar extends VariableAccess { + UnsignedCharVar() { this.getType().stripType().resolveTypedefs*() instanceof UnsignedCharType } +} + +/** + * The `mz_streamp`, `z_stream` Variables are used in Flow source + */ +class MzStreampVar extends VariableAccess { + MzStreampVar() { this.getType().hasName(["mz_streamp", "z_stream"]) } +} + +/** + * A Char Variable is used in Flow source + */ +class CharVar extends VariableAccess { + CharVar() { this.getType().stripType().resolveTypedefs*() instanceof CharType } +} + +/** + * A `mz_zip_archive` Variable is used in Flow source + */ +class MzZipArchiveVar extends VariableAccess { + MzZipArchiveVar() { this.getType().hasName("mz_zip_archive") } +} + +/** + * The `mz_uncompress` functions are used in Flow Sink + */ +class MzUncompress extends Function { + MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } +} + +/** + * A `zip handle` is used in Flow source + */ +class MzZip extends Function { + MzZip() { + this.hasGlobalName([ + "mz_zip_reader_open", "mz_zip_reader_open_file", "mz_zip_reader_open_file_in_memory", + "mz_zip_reader_open_buffer", "mz_zip_reader_entry_open" + ]) + } +} + +/** + * The `mz_inflate` functions are used in Flow Sink + */ +class MzInflate extends Function { + MzInflate() { this.hasGlobalName(["mz_inflate", "inflate"]) } +} + +/** + * The `mz_inflateInit` functions are used in Flow Sink + */ +class MzInflateInit extends Function { + MzInflateInit() { this.hasGlobalName(["inflateInit", "mz_inflateInit"]) } +} + +/** + * The `mz_zip_reader_extract_*` functions are used in Flow Sink + */ +class MzZipReaderExtract extends Function { + MzZipReaderExtract() { + this.hasGlobalName([ + "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", + "mz_zip_reader_extract_to_callback", "mz_zip_reader_extract_file_to_callback", + "mz_zip_reader_extract_to_mem", "mz_zip_reader_extract_file_to_mem", + "mz_zip_reader_extract_iter_read", "mz_zip_reader_extract_to_file", + "mz_zip_reader_extract_file_to_file" + ]) + } +} + +/** + * The `tinfl_decompress_mem_*` functions are used in Flow Sink + */ +class TinflDecompressMem extends Function { + TinflDecompressMem() { + this.hasGlobalName([ + "tinfl_decompress_mem_to_callback", "tinfl_decompress_mem_to_mem", + "tinfl_decompress_mem_to_heap" + ]) + } +} + +/** + * The `tinfl_decompress_*` functions are used in Flow Sink + */ +class TinflDecompress extends Function { + TinflDecompress() { this.hasGlobalName(["tinfl_decompress"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll new file mode 100644 index 00000000000..7d2280166e0 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll @@ -0,0 +1,65 @@ +/** + * https://github.com/zlib-ng/minizip-ng + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * The `mz_zip_reader_create` function as a Flow source + * create a `mz_zip_reader` instance + */ +class Mz_zip_reader_create extends Function { + Mz_zip_reader_create() { this.hasGlobalName("mz_zip_reader_create") } +} + +/** + * The `mz_zip_create` function as a Flow source + * create a `mz_zip` instance + */ +class Mz_zip_create extends Function { + Mz_zip_create() { this.hasGlobalName("mz_zip_create") } +} + +/** + * The `mz_zip_entry` function is used in Flow source + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) + */ +class Mz_zip_entry extends Function { + Mz_zip_entry() { this.hasGlobalName("mz_zip_entry_read") } +} + +/** + * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in Flow source + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) + */ +class Mz_zip_reader_entry extends Function { + Mz_zip_reader_entry() { + this.hasGlobalName([ + "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", + "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" + ]) + } +} + +/** + * A `unzFile` Variable as a Flow source + */ +class UnzFileVar extends VariableAccess { + UnzFileVar() { this.getType().hasName("unzFile") } +} + +/** + * The `UnzOpen` function as a Flow source + */ +class UnzOpenFunction extends Function { + UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } +} + +/** + * The `unzReadCurrentFile` function is used in Flow sink + */ +class UnzReadCurrentFileFunction extends Function { + UnzReadCurrentFileFunction() { this.hasGlobalName(["unzReadCurrentFile"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll new file mode 100644 index 00000000000..84b6a311f86 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll @@ -0,0 +1,37 @@ +/** + * https://github.com/tukaani-project/xz + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A `lzma_stream` Variable as a Flow source + */ +class LzmaStreamVar extends VariableAccess { + LzmaStreamVar() { this.getType().hasName("lzma_stream") } +} + +/** + * The `lzma_*_decoder` function is used as a required condition for decompression + */ +class LzmaDecoderFunction extends Function { + LzmaDecoderFunction() { + this.hasGlobalName(["lzma_stream_decoder", "lzma_auto_decoder", "lzma_alone_decoder"]) + } +} + +/** + * The `lzma_code` function is used in Flow sink + */ +class LzmaCodeFunction extends Function { + LzmaCodeFunction() { this.hasGlobalName(["lzma_code"]) } +} + +/** + * The `lzma_stream_buffer_decode` function is used in Flow sink + */ +class LzmaStreamBufferDecodeFunction extends Function { + LzmaStreamBufferDecodeFunction() { this.hasGlobalName(["lzma_stream_buffer_decode"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll new file mode 100644 index 00000000000..902903efb78 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll @@ -0,0 +1,57 @@ +/** + * https://github.com/facebook/zstd/blob/dev/examples/streaming_decompression.c + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.commons.File + +/** + * A ZSTD_inBuffer Variable as a Flow source + */ +class ZSTDinBufferVar extends VariableAccess { + ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } +} + +/** + * A ZSTD_inBuffer_s Variable as a Flow source + */ +class ZSTDinBufferSVar extends VariableAccess { + ZSTDinBufferSVar() { this.getType().hasName("ZSTD_inBuffer_s") } +} + +/** + * The `ZSTD_decompress` function is used in Flow sink + */ +class ZSTDDecompressFunction extends Function { + ZSTDDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } +} + +/** + * The `ZSTD_decompressDCtx` function is used in Flow sink + */ +class ZSTDDecompressDCtxFunction extends Function { + ZSTDDecompressDCtxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } +} + +/** + * The `ZSTD_decompressStream` function is used in Flow sink + */ +class ZSTDDecompressStreamFunction extends Function { + ZSTDDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } +} + +/** + * The `ZSTD_decompress_usingDDict` function is used in Flow sink + */ +class ZSTDDecompressUsingDictFunction extends Function { + ZSTDDecompressUsingDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +} + +/** + * The `ZSTD_decompress_usingDDict` function is used in Flow sink + */ +class ZSTDDecompressUsingDDictFunction extends Function { + ZSTDDecompressUsingDDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll new file mode 100644 index 00000000000..306130ac8f2 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll @@ -0,0 +1,75 @@ +/** + * https://www.zlib.net/ + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A `gzFile` Variable as a Flow source + */ +class GzFileVar extends VariableAccess { + GzFileVar() { this.getType().hasName("gzFile") } +} + +/** + * The `gzopen` function as a Flow source + * + * `gzopen(const char *path, const char *mode)` + */ +class GzopenFunction extends Function { + GzopenFunction() { this.hasGlobalName("gzopen") } +} + +/** + * The `gzdopen` function as a Flow source + * + * `gzdopen(int fd, const char *mode)` + */ +class GzdopenFunction extends Function { + GzdopenFunction() { this.hasGlobalName("gzdopen") } +} + +/** + * The `gzfread` function is used in Flow sink + * + * `gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file)` + */ +class GzFreadFunction extends Function { + GzFreadFunction() { this.hasGlobalName("gzfread") } +} + +/** + * The `gzgets` function is used in Flow sink. + * + * `gzgets(gzFile file, char *buf, int len)` + */ +class GzGetsFunction extends Function { + GzGetsFunction() { this.hasGlobalName("gzgets") } +} + +/** + * The `gzread` function is used in Flow sink + * + * `gzread(gzFile file, voidp buf, unsigned len)` + */ +class GzReadFunction extends Function { + GzReadFunction() { this.hasGlobalName("gzread") } +} + +predicate isSource(DataFlow::Node source) { + exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | + fc.getArgument(0) = source.asExpr() and + // arg 0 can be a path string whichwe must do following check + not fc.getArgument(0).isConstant() + ) + or + // IDK whether it is good to use all file decriptors function returns as source or not + // because we can do more sanitization from fd function sources + exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | + fc.getArgument(0) = source.asExpr() + ) + or + source.asExpr() instanceof GzFileVar +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll new file mode 100644 index 00000000000..b67caecfcbd --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll @@ -0,0 +1,25 @@ +/** + * https://www.zlib.net/ + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A `z_stream` Variable as a Flow source + */ +class ZStreamVar extends VariableAccess { + ZStreamVar() { this.getType().hasName("z_stream") } +} + +/** + * The `inflate`/`inflateSync` functions are used in Flow sink + * + * `inflate(z_streamp strm, int flush)` + * + * `inflateSync(z_streamp strm)` + */ +class InflateFunction extends Function { + InflateFunction() { this.hasGlobalName(["inflate", "inflateSync"]) } +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll new file mode 100644 index 00000000000..3518719bc87 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll @@ -0,0 +1,21 @@ +/** + * https://www.zlib.net/ + */ + +import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.security.FlowSources + +/** + * A Bytef Variable as a Flow source + */ +class BytefVar extends VariableAccess { + BytefVar() { this.getType().hasName("Bytef") } +} + +/** + * The `uncompress`/`uncompress2` function is used in Flow sink + */ +class UncompressFunction extends Function { + UncompressFunction() { hasGlobalName(["uncompress", "uncompress2"]) } +} From a5363286f1a184914aaa43cdee9f937ec6def845 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 7 Jun 2024 05:37:58 +0200 Subject: [PATCH 016/334] add implicit this --- .../Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll index 3518719bc87..1f33b065409 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll @@ -17,5 +17,5 @@ class BytefVar extends VariableAccess { * The `uncompress`/`uncompress2` function is used in Flow sink */ class UncompressFunction extends Function { - UncompressFunction() { hasGlobalName(["uncompress", "uncompress2"]) } + UncompressFunction() { this.hasGlobalName(["uncompress", "uncompress2"]) } } From 273848c8796f02c4b583c99144b6bc4ca9d7af31 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 7 Jun 2024 05:40:17 +0200 Subject: [PATCH 017/334] remove old comments --- .../CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql index 8506dccaea7..d75eae39056 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql @@ -115,12 +115,10 @@ module DecompressionTaintConfig implements DataFlow::StateConfigSig { ( exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | fc.getArgument(0) = source.asExpr() and - // arg 0 can be a path string whichwe must do following check + // arg 0 can be a path string which we must do following check not fc.getArgument(0).isConstant() ) or - // IDK whether it is good to use all file decriptors function returns as source or not - // because we can do more sanitization from fd function sources exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | fc.getArgument(0) = source.asExpr() ) From 11a416ea7c80493d44cbd6e02c218cb2f0164ead Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Thu, 13 Jun 2024 03:30:07 +0200 Subject: [PATCH 018/334] add FlowSources as a common source for all sinks, so we don't need States anymore --- .../DecompressionBombs.ql | 350 ++++++------------ .../CWE/CWE-409-DecompressionBomb/XZ.qll | 8 - 2 files changed, 104 insertions(+), 254 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql index d75eae39056..03eab33a6ce 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql @@ -27,298 +27,156 @@ import ZlibUncompress import ZlibInflator import Brotli -module DecompressionTaintConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; +module DecompressionTaintConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof FlowSource } - predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - ( - exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | fc = source.asExpr()) - or - exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) - or - source.asExpr() instanceof PointerVar - or - source.asExpr() instanceof Uint8Var - ) and - state = "brotli" - or - ( - source.asExpr() instanceof BzStreamVar - or - source.asExpr() instanceof BzFileVar - or - exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) - ) and - state = "bzip2" - or - exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_new | - fc.getArgument(0) = source.asExpr() - ) and - state = "libarchive" - or - ( - source.asExpr() instanceof UnsignedCharVar - or - source.asExpr() instanceof PointerVar - or - source.asExpr() instanceof CharVar - or - source.asExpr() instanceof MzZipArchiveVar - or - source.asExpr() instanceof MzStreampVar - or - source.asDefiningArgument() = - any(Call call | call.getTarget() instanceof MzInflateInit).getArgument(0) - or - source.asDefiningArgument() = - any(Call call | call.getTarget() instanceof MzZip).getArgument(0) - ) and - state = "libminiz" - or - ( - exists(FunctionCall fc | fc.getTarget() instanceof AllocationFunction | fc = source.asExpr()) - or - exists(FunctionCall fc | fopenCall(fc) | fc = source.asExpr()) - or - source.asExpr() instanceof ZSTDinBufferSVar - or - source.asExpr() instanceof ZSTDinBufferVar - ) and - state = "zstd" - or - ( - exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | - fc.getArgument(0) = source.asExpr() - ) - or - source.asExpr() instanceof UnzFileVar - ) and - state = "unzFile" - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_create | - fc = source.asExpr() and - state = "mz_zip_reader" + predicate isSink(DataFlow::Node sink) { + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() ) or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_create | - fc = source.asExpr() and - state = "mz_zip" + exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | + fc.getArgument(1) = sink.asExpr() ) or - ( - source.asExpr() instanceof LzmaStreamVar - or - source.asExpr() instanceof Uint8Var - ) and - state = "xz" + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | + fc.getArgument(0) = sink.asExpr() + ) or - ( - exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | - fc.getArgument(0) = source.asExpr() and - // arg 0 can be a path string which we must do following check - not fc.getArgument(0).isConstant() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | - fc.getArgument(0) = source.asExpr() - ) - or - source.asExpr() instanceof GzFileVar - ) and - state = "zlibgzopen" + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | + fc.getArgument(1) = sink.asExpr() + ) or - source.asExpr() instanceof ZStreamVar and state = "zlifinflator" - or - source.asExpr() instanceof BytefVar and state = "zlibuncompress" - } - - predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - ( - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | - fc.getArgument(1) = sink.asExpr() - ) - ) and - state = "brotli" - or - ( - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | - fc.getArgument(2) = sink.asExpr() - ) - ) and - state = "bzip2" + exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | + fc.getArgument(2) = sink.asExpr() + ) or exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | - fc.getArgument(0) = sink.asExpr() and - state = "libarchive" + fc.getArgument(0) = sink.asExpr() ) or - ( - exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | - fc.getArgument(0) = sink.asExpr() - ) - ) and - state = "libminiz" + exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | + fc.getArgument(0) = sink.asExpr() + ) or - ( - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | - fc.getArgument(3) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | - fc.getArgument(3) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | - fc.getArgument(3) = sink.asExpr() - ) - ) and - state = "zstd" + exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | + fc.getArgument(1) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | + fc.getArgument(2) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | + fc.getArgument(3) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | + fc.getArgument(2) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | + fc.getArgument(3) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | + fc.getArgument(3) = sink.asExpr() + ) or exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | - fc.getArgument(0) = sink.asExpr() and - state = "unzFile" + fc.getArgument(0) = sink.asExpr() ) or exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | - fc.getArgument(1) = sink.asExpr() and - state = "mz_zip_reader" + fc.getArgument(1) = sink.asExpr() ) or exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | - fc.getArgument(1) = sink.asExpr() and - state = "mz_zip" + fc.getArgument(1) = sink.asExpr() ) or - ( - exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | - fc.getArgument(0) = sink.asExpr() - ) - ) and - state = "xz" and - exists(FunctionCall fc2 | fc2.getTarget() instanceof LzmaDecoderFunction) + exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | + fc.getArgument(1) = sink.asExpr() + ) or - ( - exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | - sink.asExpr() = fc.getArgument(3) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | - sink.asExpr() = fc.getArgument(0) - ) - ) and - state = "zlibgzopen" + exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | + fc.getArgument(0) = sink.asExpr() + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | + sink.asExpr() = fc.getArgument(3) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | + sink.asExpr() = fc.getArgument(0) + ) or exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | fc.getArgument(0) = sink.asExpr() - ) and - state = "zlifinflator" + ) or exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | fc.getArgument(0) = sink.asExpr() - ) and - state = "zlibuncompress" + ) } - predicate isAdditionalFlowStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc and - state1 = "" and - state2 = "unzFile" + node2.asExpr() = fc ) or exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) and - state1 = "" and - state2 = "mz_zip_reader" + node2.asExpr() = fc.getArgument(1) ) or exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) and - state1 = "" and - state2 = "mz_zip" + node2.asExpr() = fc.getArgument(1) ) or - ( - exists(FunctionCall fc | - fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction - | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | - node1.asExpr() = fc.getArgument(3) and - node2.asExpr() = fc.getArgument(0) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | - node1.asExpr() = fc.getArgument(0) and - node1.asExpr() = fc.getArgument(1) - ) - ) and - state1 = "" and - state2 = "gzopen" + exists(FunctionCall fc | + fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction + | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | + node1.asExpr() = fc.getArgument(3) and + node2.asExpr() = fc.getArgument(0) + ) + or + exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | + node1.asExpr() = fc.getArgument(0) and + node1.asExpr() = fc.getArgument(1) + ) } - - predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) { none() } } -module DecompressionTaint = TaintTracking::GlobalWithState; +module DecompressionTaint = TaintTracking::Global; import DecompressionTaint::PathGraph diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll index 84b6a311f86..621558e07fd 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll @@ -13,14 +13,6 @@ class LzmaStreamVar extends VariableAccess { LzmaStreamVar() { this.getType().hasName("lzma_stream") } } -/** - * The `lzma_*_decoder` function is used as a required condition for decompression - */ -class LzmaDecoderFunction extends Function { - LzmaDecoderFunction() { - this.hasGlobalName(["lzma_stream_decoder", "lzma_auto_decoder", "lzma_alone_decoder"]) - } -} /** * The `lzma_code` function is used in Flow sink From 13f697c0569c2266ec10f0d47979ee0a80c82a0c Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:31:40 +0200 Subject: [PATCH 019/334] relocate the query --- .../Security/CWE/CWE-409}/Brotli.qll | 0 .../Security/CWE/CWE-409}/Bzip2.qll | 0 .../Security/CWE/CWE-409}/DecompressionBomb.qhelp | 0 .../Security/CWE/CWE-409}/DecompressionBombs.ql | 0 .../Security/CWE/CWE-409}/LibArchive.qll | 0 .../Security/CWE/CWE-409}/LibMiniz.qll | 0 .../Security/CWE/CWE-409}/MiniZip.qll | 0 .../Security/CWE/CWE-409}/XZ.qll | 0 .../Security/CWE/CWE-409}/ZSTD.qll | 0 .../Security/CWE/CWE-409}/ZlibGzopen.qll | 0 .../Security/CWE/CWE-409}/ZlibInflator.qll | 0 .../Security/CWE/CWE-409}/ZlibUncompress.qll | 0 .../Security/CWE/CWE-409}/example_bad.cpp | 0 .../Security/CWE/CWE-409}/example_good.cpp | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/Brotli.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/Bzip2.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/DecompressionBomb.qhelp (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/DecompressionBombs.ql (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/LibArchive.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/LibMiniz.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/MiniZip.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/XZ.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/ZSTD.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/ZlibGzopen.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/ZlibInflator.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/ZlibUncompress.qll (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/example_bad.cpp (100%) rename cpp/ql/src/experimental/{Security/CWE/CWE-409-DecompressionBomb => query-tests/Security/CWE/CWE-409}/example_good.cpp (100%) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Brotli.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/Bzip2.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qhelp similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBomb.qhelp rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qhelp diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/DecompressionBombs.ql rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibArchive.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/LibMiniz.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/MiniZip.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/XZ.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZSTD.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibGzopen.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibInflator.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/ZlibUncompress.qll rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_bad.cpp similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_bad.cpp rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_bad.cpp diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_good.cpp similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409-DecompressionBomb/example_good.cpp rename to cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_good.cpp From 656dc4e2760a36c3eab87475d5e450f4fa606096 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:09:27 +0200 Subject: [PATCH 020/334] use abstract class for decompression sinks --- .../Security/CWE/CWE-409/Brotli.qll | 29 ++-- .../Security/CWE/CWE-409/Bzip2.qll | 35 ++--- .../CWE/CWE-409/DecompressionBomb.qll | 8 ++ .../CWE/CWE-409/DecompressionBombs.ql | 129 +----------------- .../Security/CWE/CWE-409/LibArchive.qll | 15 +- .../Security/CWE/CWE-409/LibMiniz.qll | 70 ++++------ .../Security/CWE/CWE-409/MiniZip.qll | 45 ++---- .../query-tests/Security/CWE/CWE-409/XZ.qll | 21 ++- .../query-tests/Security/CWE/CWE-409/ZSTD.qll | 45 +++--- .../Security/CWE/CWE-409/ZlibGzopen.qll | 84 +++++------- .../Security/CWE/CWE-409/ZlibInflator.qll | 14 +- .../Security/CWE/CWE-409/ZlibUncompress.qll | 14 +- 12 files changed, 148 insertions(+), 361 deletions(-) create mode 100644 cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll index 46314826a62..5c19e53df07 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll @@ -6,33 +6,22 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File +import DecompressionBomb /** - * A Pointer Variable is used in Flow source + * The `BrotliDecoderDecompress` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#af68 */ -class PointerVar extends VariableAccess { - PointerVar() { this.getType() instanceof PointerType } -} - -/** - * A Pointer Variable is used in Flow source - */ -class Uint8Var extends VariableAccess { - Uint8Var() { this.getType() instanceof UInt8_t } -} - -/** - * The `BrotliDecoderDecompress` function is used in Flow sink - * Ref: https://www.brotli.org/decode.html#af68 - */ -class BrotliDecoderDecompressFunction extends Function { +class BrotliDecoderDecompressFunction extends DecompressionFunction { BrotliDecoderDecompressFunction() { this.hasGlobalName(["BrotliDecoderDecompress"]) } + + override int getArchiveParameterIndex() { result = 1 } } /** - * The `BrotliDecoderDecompressStream` function is used in Flow sink - * Ref: https://www.brotli.org/decode.html#a234 + * The `BrotliDecoderDecompressStream` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#a234 */ -class BrotliDecoderDecompressStreamFunction extends Function { +class BrotliDecoderDecompressStreamFunction extends DecompressionFunction { BrotliDecoderDecompressStreamFunction() { this.hasGlobalName(["BrotliDecoderDecompressStream"]) } + + override int getArchiveParameterIndex() { result = 2 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll index 662424b022a..7f69aa494c6 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll @@ -6,45 +6,40 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File - -/** - * A `bz_stream` Variable as a Flow source - */ -class BzStreamVar extends VariableAccess { - BzStreamVar() { this.getType().hasName("bz_stream") } -} - -/** - * A `BZFILE` Variable as a Flow source - */ -class BzFileVar extends VariableAccess { - BzFileVar() { this.getType().hasName("BZFILE") } -} +import DecompressionBomb /** * The `BZ2_bzDecompress` function as a Flow source */ -class BZ2BzDecompressFunction extends Function { +class BZ2BzDecompressFunction extends DecompressionFunction { BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } + + override int getArchiveParameterIndex() { result = 0 } } /** * The `BZ2_bzReadOpen` function */ -class BZ2BzReadOpenFunction extends Function { +class BZ2BzReadOpenFunction extends DecompressionFunction { BZ2BzReadOpenFunction() { this.hasGlobalName(["BZ2_bzReadOpen"]) } + + override int getArchiveParameterIndex() { result = 0 } } /** - * The `BZ2_bzRead` function is used in Flow sink + * The `BZ2_bzRead` function is used in flow sink. */ -class BZ2BzReadFunction extends Function { +class BZ2BzReadFunction extends DecompressionFunction { BZ2BzReadFunction() { this.hasGlobalName("BZ2_bzRead") } + + override int getArchiveParameterIndex() { result = 1 } } /** - * The `BZ2_bzBuffToBuffDecompress` function is used in Flow sink + * The `BZ2_bzBuffToBuffDecompress` function is used in flow sink. */ -class BZ2BzBuffToBuffDecompressFunction extends Function { +class BZ2BzBuffToBuffDecompressFunction extends DecompressionFunction { BZ2BzBuffToBuffDecompressFunction() { this.hasGlobalName("BZ2_bzBuffToBuffDecompress") } + + override int getArchiveParameterIndex() { result = 2 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll new file mode 100644 index 00000000000..2cca1453d2f --- /dev/null +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -0,0 +1,8 @@ +import cpp + +/** + * The Decompression Sink instances, extend this class to defind new decompression sinks. + */ +abstract class DecompressionFunction extends Function { + abstract int getArchiveParameterIndex(); +} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 03eab33a6ce..b7eda35f2c7 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -15,124 +15,16 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File -import Bzip2 -import Brotli -import LibArchive -import LibMiniz -import ZSTD import MiniZip -import XZ import ZlibGzopen -import ZlibUncompress -import ZlibInflator -import Brotli +import DecompressionBomb module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof FlowSource } predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BrotliDecoderDecompressFunction | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzDecompressFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzReadFunction | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof BZ2BzBuffToBuffDecompressFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Archive_read_data_block | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzUncompress | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzZipReaderExtract | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof MzInflate | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompress | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof TinflDecompressMem | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressDCtxFunction | - fc.getArgument(3) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressStreamFunction | - fc.getArgument(2) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDictFunction | - fc.getArgument(3) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof ZSTDDecompressUsingDDictFunction | - fc.getArgument(3) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof UnzReadCurrentFileFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof LzmaStreamBufferDecodeFunction | - fc.getArgument(1) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof LzmaCodeFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | - sink.asExpr() = fc.getArgument(3) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | - sink.asExpr() = fc.getArgument(0) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof InflateFunction | - fc.getArgument(0) = sink.asExpr() - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof UncompressFunction | - fc.getArgument(0) = sink.asExpr() + exists(FunctionCall fc, DecompressionFunction f | fc.getTarget() = f | + fc.getArgument(f.getArchiveParameterIndex()) = sink.asExpr() ) } @@ -158,21 +50,6 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { node1.asExpr() = fc.getArgument(0) and node2.asExpr() = fc ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzReadFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzFreadFunction | - node1.asExpr() = fc.getArgument(3) and - node2.asExpr() = fc.getArgument(0) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof GzGetsFunction | - node1.asExpr() = fc.getArgument(0) and - node1.asExpr() = fc.getArgument(1) - ) } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll index 4d96e83c195..e5124006504 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll @@ -5,21 +5,16 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * The `archive_read_new` function as a Flow source - * create a `archive` instance - */ -class Archive_read_new extends Function { - Archive_read_new() { this.hasGlobalName("archive_read_new") } -} - -/** - * The `archive_read_data*` functions are used in Flow Sink + * The `archive_read_data*` functions are used in flow sink. * [Examples](https://github.com/libarchive/libarchive/wiki/Examples) */ -class Archive_read_data_block extends Function { +class Archive_read_data_block extends DecompressionFunction { Archive_read_data_block() { this.hasGlobalName(["archive_read_data_block", "archive_read_data", "archive_read_data_into_fd"]) } + + override int getArchiveParameterIndex() { result = 0 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll index 64eba1e7b28..0025ecca97d 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll @@ -5,72 +5,44 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * A unsigned char Variable is used in Flow source + * The `mz_uncompress` functions are used in flow sink. */ -class UnsignedCharVar extends VariableAccess { - UnsignedCharVar() { this.getType().stripType().resolveTypedefs*() instanceof UnsignedCharType } -} - -/** - * The `mz_streamp`, `z_stream` Variables are used in Flow source - */ -class MzStreampVar extends VariableAccess { - MzStreampVar() { this.getType().hasName(["mz_streamp", "z_stream"]) } -} - -/** - * A Char Variable is used in Flow source - */ -class CharVar extends VariableAccess { - CharVar() { this.getType().stripType().resolveTypedefs*() instanceof CharType } -} - -/** - * A `mz_zip_archive` Variable is used in Flow source - */ -class MzZipArchiveVar extends VariableAccess { - MzZipArchiveVar() { this.getType().hasName("mz_zip_archive") } -} - -/** - * The `mz_uncompress` functions are used in Flow Sink - */ -class MzUncompress extends Function { +class MzUncompress extends DecompressionFunction { MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } + + override int getArchiveParameterIndex() { result = 0 } } /** * A `zip handle` is used in Flow source */ -class MzZip extends Function { +class MzZip extends DecompressionFunction { MzZip() { this.hasGlobalName([ "mz_zip_reader_open", "mz_zip_reader_open_file", "mz_zip_reader_open_file_in_memory", "mz_zip_reader_open_buffer", "mz_zip_reader_entry_open" ]) } + + override int getArchiveParameterIndex() { result = 1 } } /** - * The `mz_inflate` functions are used in Flow Sink + * The `mz_inflate` functions are used in flow sink. */ -class MzInflate extends Function { +class MzInflate extends DecompressionFunction { MzInflate() { this.hasGlobalName(["mz_inflate", "inflate"]) } + + override int getArchiveParameterIndex() { result = 0 } } /** - * The `mz_inflateInit` functions are used in Flow Sink + * The `mz_zip_reader_extract_*` functions are used in flow sink. */ -class MzInflateInit extends Function { - MzInflateInit() { this.hasGlobalName(["inflateInit", "mz_inflateInit"]) } -} - -/** - * The `mz_zip_reader_extract_*` functions are used in Flow Sink - */ -class MzZipReaderExtract extends Function { +class MzZipReaderExtract extends DecompressionFunction { MzZipReaderExtract() { this.hasGlobalName([ "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", @@ -80,23 +52,29 @@ class MzZipReaderExtract extends Function { "mz_zip_reader_extract_file_to_file" ]) } + + override int getArchiveParameterIndex() { result = 1 } } /** - * The `tinfl_decompress_mem_*` functions are used in Flow Sink + * The `tinfl_decompress_mem_*` functions are used in flow sink. */ -class TinflDecompressMem extends Function { +class TinflDecompressMem extends DecompressionFunction { TinflDecompressMem() { this.hasGlobalName([ "tinfl_decompress_mem_to_callback", "tinfl_decompress_mem_to_mem", "tinfl_decompress_mem_to_heap" ]) } + + override int getArchiveParameterIndex() { result = 0 } } /** - * The `tinfl_decompress_*` functions are used in Flow Sink + * The `tinfl_decompress_*` functions are used in flow sink. */ -class TinflDecompress extends Function { +class TinflDecompress extends DecompressionFunction { TinflDecompress() { this.hasGlobalName(["tinfl_decompress"]) } + + override int getArchiveParameterIndex() { result = 1 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll index 7d2280166e0..4bfa9a13b2c 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll @@ -5,61 +5,36 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * The `mz_zip_reader_create` function as a Flow source - * create a `mz_zip_reader` instance - */ -class Mz_zip_reader_create extends Function { - Mz_zip_reader_create() { this.hasGlobalName("mz_zip_reader_create") } -} - -/** - * The `mz_zip_create` function as a Flow source - * create a `mz_zip` instance - */ -class Mz_zip_create extends Function { - Mz_zip_create() { this.hasGlobalName("mz_zip_create") } -} - -/** - * The `mz_zip_entry` function is used in Flow source + * The `mz_zip_entry` function is used in flow source. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) */ -class Mz_zip_entry extends Function { +class Mz_zip_entry extends DecompressionFunction { Mz_zip_entry() { this.hasGlobalName("mz_zip_entry_read") } + + override int getArchiveParameterIndex() { result = 1 } } /** - * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in Flow source + * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow source. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) */ -class Mz_zip_reader_entry extends Function { +class Mz_zip_reader_entry extends DecompressionFunction { Mz_zip_reader_entry() { this.hasGlobalName([ "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" ]) } + + override int getArchiveParameterIndex() { result = 1 } } /** - * A `unzFile` Variable as a Flow source - */ -class UnzFileVar extends VariableAccess { - UnzFileVar() { this.getType().hasName("unzFile") } -} - -/** - * The `UnzOpen` function as a Flow source + * The `UnzOpen` function as a flow source. */ class UnzOpenFunction extends Function { UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } } - -/** - * The `unzReadCurrentFile` function is used in Flow sink - */ -class UnzReadCurrentFileFunction extends Function { - UnzReadCurrentFileFunction() { this.hasGlobalName(["unzReadCurrentFile"]) } -} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll index 621558e07fd..a0b17388b93 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll @@ -5,25 +5,22 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * A `lzma_stream` Variable as a Flow source + * The `lzma_code` function is used in flow sink. */ -class LzmaStreamVar extends VariableAccess { - LzmaStreamVar() { this.getType().hasName("lzma_stream") } -} - - -/** - * The `lzma_code` function is used in Flow sink - */ -class LzmaCodeFunction extends Function { +class LzmaCodeFunction extends DecompressionFunction { LzmaCodeFunction() { this.hasGlobalName(["lzma_code"]) } + + override int getArchiveParameterIndex() { result = 0 } } /** - * The `lzma_stream_buffer_decode` function is used in Flow sink + * The `lzma_stream_buffer_decode` function is used in flow sink. */ -class LzmaStreamBufferDecodeFunction extends Function { +class LzmaStreamBufferDecodeFunction extends DecompressionFunction { LzmaStreamBufferDecodeFunction() { this.hasGlobalName(["lzma_stream_buffer_decode"]) } + + override int getArchiveParameterIndex() { result = 1 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll index 902903efb78..c34170df625 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll @@ -6,52 +6,49 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File +import DecompressionBomb /** - * A ZSTD_inBuffer Variable as a Flow source + * The `ZSTD_decompress` function is used in flow sink. */ -class ZSTDinBufferVar extends VariableAccess { - ZSTDinBufferVar() { this.getType().hasName("ZSTD_inBuffer") } -} - -/** - * A ZSTD_inBuffer_s Variable as a Flow source - */ -class ZSTDinBufferSVar extends VariableAccess { - ZSTDinBufferSVar() { this.getType().hasName("ZSTD_inBuffer_s") } -} - -/** - * The `ZSTD_decompress` function is used in Flow sink - */ -class ZSTDDecompressFunction extends Function { +class ZSTDDecompressFunction extends DecompressionFunction { ZSTDDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } + + override int getArchiveParameterIndex() { result = 2 } } /** - * The `ZSTD_decompressDCtx` function is used in Flow sink + * The `ZSTD_decompressDCtx` function is used in flow sink. */ -class ZSTDDecompressDCtxFunction extends Function { +class ZSTDDecompressDCtxFunction extends DecompressionFunction { ZSTDDecompressDCtxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } + + override int getArchiveParameterIndex() { result = 3 } } /** - * The `ZSTD_decompressStream` function is used in Flow sink + * The `ZSTD_decompressStream` function is used in flow sink. */ -class ZSTDDecompressStreamFunction extends Function { +class ZSTDDecompressStreamFunction extends DecompressionFunction { ZSTDDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } + + override int getArchiveParameterIndex() { result = 2 } } /** - * The `ZSTD_decompress_usingDDict` function is used in Flow sink + * The `ZSTD_decompress_usingDDict` function is used in flow sink. */ -class ZSTDDecompressUsingDictFunction extends Function { +class ZSTDDecompressUsingDictFunction extends DecompressionFunction { ZSTDDecompressUsingDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } + + override int getArchiveParameterIndex() { result = 3 } } /** - * The `ZSTD_decompress_usingDDict` function is used in Flow sink + * The `ZSTD_decompress_usingDDict` function is used in flow sink. */ -class ZSTDDecompressUsingDDictFunction extends Function { +class ZSTDDecompressUsingDDictFunction extends DecompressionFunction { ZSTDDecompressUsingDDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } + + override int getArchiveParameterIndex() { result = 3 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll index 306130ac8f2..df2381220fd 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll @@ -5,25 +5,43 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * A `gzFile` Variable as a Flow source - */ -class GzFileVar extends VariableAccess { - GzFileVar() { this.getType().hasName("gzFile") } -} - -/** - * The `gzopen` function as a Flow source + * The `gzfread` function is used in flow sink. * - * `gzopen(const char *path, const char *mode)` + * `gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file)` */ -class GzopenFunction extends Function { - GzopenFunction() { this.hasGlobalName("gzopen") } +class GzFreadFunction extends DecompressionFunction { + GzFreadFunction() { this.hasGlobalName("gzfread") } + + override int getArchiveParameterIndex() { result = 3 } } /** - * The `gzdopen` function as a Flow source + * The `gzgets` function is used in flow sink. + * + * `gzgets(gzFile file, char *buf, int len)` + */ +class GzGetsFunction extends DecompressionFunction { + GzGetsFunction() { this.hasGlobalName("gzgets") } + + override int getArchiveParameterIndex() { result = 0 } +} + +/** + * The `gzread` function is used in flow sink. + * + * `gzread(gzFile file, voidp buf, unsigned len)` + */ +class GzReadFunction extends DecompressionFunction { + GzReadFunction() { this.hasGlobalName("gzread") } + + override int getArchiveParameterIndex() { result = 1 } +} + +/** + * The `gzdopen` function. * * `gzdopen(int fd, const char *mode)` */ @@ -32,44 +50,10 @@ class GzdopenFunction extends Function { } /** - * The `gzfread` function is used in Flow sink + * The `gzopen` function. * - * `gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file)` + * `gzopen(const char *path, const char *mode)` */ -class GzFreadFunction extends Function { - GzFreadFunction() { this.hasGlobalName("gzfread") } -} - -/** - * The `gzgets` function is used in Flow sink. - * - * `gzgets(gzFile file, char *buf, int len)` - */ -class GzGetsFunction extends Function { - GzGetsFunction() { this.hasGlobalName("gzgets") } -} - -/** - * The `gzread` function is used in Flow sink - * - * `gzread(gzFile file, voidp buf, unsigned len)` - */ -class GzReadFunction extends Function { - GzReadFunction() { this.hasGlobalName("gzread") } -} - -predicate isSource(DataFlow::Node source) { - exists(FunctionCall fc | fc.getTarget() instanceof GzopenFunction | - fc.getArgument(0) = source.asExpr() and - // arg 0 can be a path string whichwe must do following check - not fc.getArgument(0).isConstant() - ) - or - // IDK whether it is good to use all file decriptors function returns as source or not - // because we can do more sanitization from fd function sources - exists(FunctionCall fc | fc.getTarget() instanceof GzdopenFunction | - fc.getArgument(0) = source.asExpr() - ) - or - source.asExpr() instanceof GzFileVar +class GzopenFunction extends Function { + GzopenFunction() { this.hasGlobalName("gzopen") } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll index b67caecfcbd..1897b8e09d3 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll @@ -5,21 +5,17 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * A `z_stream` Variable as a Flow source - */ -class ZStreamVar extends VariableAccess { - ZStreamVar() { this.getType().hasName("z_stream") } -} - -/** - * The `inflate`/`inflateSync` functions are used in Flow sink + * The `inflate` and `inflateSync` functions are used in flow sink. * * `inflate(z_streamp strm, int flush)` * * `inflateSync(z_streamp strm)` */ -class InflateFunction extends Function { +class InflateFunction extends DecompressionFunction { InflateFunction() { this.hasGlobalName(["inflate", "inflateSync"]) } + + override int getArchiveParameterIndex() { result = 0 } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll index 1f33b065409..f69c71ec01c 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll @@ -5,17 +5,13 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources +import DecompressionBomb /** - * A Bytef Variable as a Flow source + * The `uncompress`/`uncompress2` function is used in flow sink. */ -class BytefVar extends VariableAccess { - BytefVar() { this.getType().hasName("Bytef") } -} - -/** - * The `uncompress`/`uncompress2` function is used in Flow sink - */ -class UncompressFunction extends Function { +class UncompressFunction extends DecompressionFunction { UncompressFunction() { this.hasGlobalName(["uncompress", "uncompress2"]) } + + override int getArchiveParameterIndex() { result = 0 } } From 361ad6be6a663c04c4d6c6b5777129fc194c5be2 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:45:31 +0200 Subject: [PATCH 021/334] use abstract class for decompression flow steps --- .../CWE/CWE-409/DecompressionBomb.qll | 10 ++++- .../CWE/CWE-409/DecompressionBombs.ql | 22 +--------- .../Security/CWE/CWE-409/MiniZip.qll | 41 ++++++++++++++++++- .../Security/CWE/CWE-409/ZlibGzopen.qll | 22 ++++++++-- 4 files changed, 67 insertions(+), 28 deletions(-) diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll index 2cca1453d2f..ecc32a9ba0d 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -1,8 +1,16 @@ import cpp +import semmle.code.cpp.ir.dataflow.TaintTracking /** - * The Decompression Sink instances, extend this class to defind new decompression sinks. + * The Decompression Sink instances, extend this class to define new decompression sinks. */ abstract class DecompressionFunction extends Function { abstract int getArchiveParameterIndex(); } + +/** + * The Decompression Flow Steps, extend this class to define new decompression sinks. + */ +abstract class DecompressionFlowStep extends Function { + abstract predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2); +} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index b7eda35f2c7..6f68390fdd2 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -29,27 +29,7 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() instanceof UnzOpenFunction | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_reader_entry | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - or - exists(FunctionCall fc | fc.getTarget() instanceof Mz_zip_entry | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - or - exists(FunctionCall fc | - fc.getTarget() instanceof GzopenFunction or fc.getTarget() instanceof GzdopenFunction - | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc - ) + any(DecompressionFlowStep f).isAdditionalFlowStep(node1, node2) } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll index 4bfa9a13b2c..a76abff8f6a 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll @@ -8,7 +8,7 @@ import semmle.code.cpp.security.FlowSources import DecompressionBomb /** - * The `mz_zip_entry` function is used in flow source. + * The `mz_zip_entry` function is used in flow sink. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) */ class Mz_zip_entry extends DecompressionFunction { @@ -17,6 +17,21 @@ class Mz_zip_entry extends DecompressionFunction { override int getArchiveParameterIndex() { result = 1 } } +/** + * The `mz_zip_entry` function is used in flow steps. + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) + */ +class Mz_zip_entry_flow_steps extends DecompressionFlowStep { + Mz_zip_entry_flow_steps() { this.hasGlobalName("mz_zip_entry_read") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) + ) + } +} + /** * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow source. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) @@ -32,9 +47,31 @@ class Mz_zip_reader_entry extends DecompressionFunction { override int getArchiveParameterIndex() { result = 1 } } +/** + * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow steps. + * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) + */ +class Mz_zip_reader_entry_flow_steps extends DecompressionFlowStep { + Mz_zip_reader_entry_flow_steps() { this instanceof Mz_zip_reader_entry } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc.getArgument(1) + ) + } +} + /** * The `UnzOpen` function as a flow source. */ -class UnzOpenFunction extends Function { +class UnzOpenFunction extends DecompressionFlowStep { UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll index df2381220fd..5c4f367b1b4 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll @@ -41,19 +41,33 @@ class GzReadFunction extends DecompressionFunction { } /** - * The `gzdopen` function. + * The `gzdopen` function is used in flow steps. * * `gzdopen(int fd, const char *mode)` */ -class GzdopenFunction extends Function { +class GzdopenFunction extends DecompressionFlowStep { GzdopenFunction() { this.hasGlobalName("gzdopen") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } } /** - * The `gzopen` function. + * The `gzopen` function is used in flow steps. * * `gzopen(const char *path, const char *mode)` */ -class GzopenFunction extends Function { +class GzopenFunction extends DecompressionFlowStep { GzopenFunction() { this.hasGlobalName("gzopen") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } } From 71e1d63953f8aa1bfaa27d175fc1736e710e1719 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:00:50 +0200 Subject: [PATCH 022/334] finilize tests --- .../security/CWE-347/Auth0NoVerifier.expected | 24 ++++ .../security/CWE-347/JwtNoVerifier.java | 121 ++++++++++++++++++ .../query-tests/security/CWE-347/Test.java | 92 ------------- .../query-tests/security/CWE-347/options | 2 +- .../query-tests/security/CWE-347/pom.xml | 43 ------- .../com/auth0/jwt/JWT.java | 17 +++ .../com/auth0/jwt/JWTCreator.java | 46 +++++++ .../com/auth0/jwt/JWTVerifier.java | 12 ++ .../com/auth0/jwt/algorithms/Algorithm.java | 50 ++++++++ .../jwt/exceptions/JWTCreationException.java | 15 +++ .../exceptions/JWTVerificationException.java | 11 ++ .../com/auth0/jwt/interfaces/Claim.java | 25 ++++ .../com/auth0/jwt/interfaces/DecodedJWT.java | 14 ++ .../jwt/interfaces/ECDSAKeyProvider.java | 13 ++ .../com/auth0/jwt/interfaces/Header.java | 14 ++ .../com/auth0/jwt/interfaces/JWTVerifier.java | 11 ++ .../com/auth0/jwt/interfaces/KeyProvider.java | 13 ++ .../com/auth0/jwt/interfaces/Payload.java | 25 ++++ .../auth0/jwt/interfaces/RSAKeyProvider.java | 13 ++ .../auth0/jwt/interfaces/Verification.java | 38 ++++++ .../com/github/luben/zstd/BufferPool.java | 11 ++ .../javax/crypto/KeyGenerator.java | 26 ++++ .../javax/crypto/KeyGeneratorSpi.java | 16 +++ .../javax/crypto/SecretKey.java | 11 ++ .../javax/security/auth/Destroyable.java | 10 ++ .../javax/servlet/AsyncContext.java | 31 +++++ .../javax/servlet/AsyncEvent.java | 20 +++ .../javax/servlet/AsyncListener.java | 14 ++ .../javax/servlet/DispatcherType.java | 10 ++ .../javax/servlet/Filter.java | 15 +++ .../javax/servlet/FilterChain.java | 11 ++ .../javax/servlet/FilterConfig.java | 14 ++ .../javax/servlet/FilterRegistration.java | 19 +++ .../javax/servlet/GenericServlet.java | 28 ++++ .../javax/servlet/HttpConstraintElement.java | 16 +++ .../servlet/HttpMethodConstraintElement.java | 13 ++ .../javax/servlet/MultipartConfigElement.java | 17 +++ .../javax/servlet/ReadListener.java | 12 ++ .../javax/servlet/Registration.java | 20 +++ .../javax/servlet/RequestDispatcher.java | 30 +++++ .../javax/servlet/Servlet.java | 16 +++ .../javax/servlet/ServletConfig.java | 14 ++ .../javax/servlet/ServletContext.java | 83 ++++++++++++ .../javax/servlet/ServletInputStream.java | 15 +++ .../javax/servlet/ServletOutputStream.java | 28 ++++ .../javax/servlet/ServletRegistration.java | 23 ++++ .../javax/servlet/ServletRequest.java | 55 ++++++++ .../javax/servlet/ServletResponse.java | 27 ++++ .../javax/servlet/ServletSecurityElement.java | 19 +++ .../javax/servlet/SessionCookieConfig.java | 22 ++++ .../javax/servlet/SessionTrackingMode.java | 10 ++ .../javax/servlet/WriteListener.java | 11 ++ .../servlet/annotation/HttpConstraint.java | 18 +++ .../annotation/HttpMethodConstraint.java | 19 +++ .../servlet/annotation/MultipartConfig.java | 19 +++ .../servlet/annotation/ServletSecurity.java | 33 +++++ .../servlet/annotation/WebInitParam.java | 20 +++ .../javax/servlet/annotation/WebServlet.java | 28 ++++ .../descriptor/JspConfigDescriptor.java | 13 ++ .../JspPropertyGroupDescriptor.java | 21 +++ .../servlet/descriptor/TaglibDescriptor.java | 10 ++ .../javax/servlet/http/Cookie.java | 29 +++++ .../javax/servlet/http/HttpServlet.java | 46 +++++++ .../servlet/http/HttpServletMapping.java | 13 ++ .../servlet/http/HttpServletRequest.java | 60 +++++++++ .../servlet/http/HttpServletResponse.java | 77 +++++++++++ .../javax/servlet/http/HttpSession.java | 28 ++++ .../servlet/http/HttpSessionContext.java | 12 ++ .../servlet/http/HttpUpgradeHandler.java | 11 ++ .../javax/servlet/http/MappingMatch.java | 10 ++ .../javax/servlet/http/Part.java | 20 +++ .../javax/servlet/http/PushBuilder.java | 23 ++++ .../javax/servlet/http/WebConnection.java | 12 ++ 73 files changed, 1652 insertions(+), 136 deletions(-) create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Test.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/pom.xml create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWT.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTCreator.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java create mode 100644 java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/github/luben/zstd/BufferPool.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java create mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected new file mode 100644 index 00000000000..7836dda7a11 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected @@ -0,0 +1,24 @@ +edges +| JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | +| JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | JwtNoVerifier.java:73:38:73:55 | token : String | +| JwtNoVerifier.java:73:38:73:55 | token : String | JwtNoVerifier.java:74:37:74:41 | token : String | +| JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | +| JwtNoVerifier.java:74:37:74:41 | token : String | JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | +| JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | +| JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | +| JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | +| JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | JwtNoVerifier.java:75:45:75:69 | getClaim(...) | +nodes +| JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | +| JwtNoVerifier.java:73:38:73:55 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | +| JwtNoVerifier.java:74:37:74:41 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | +| JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | +| JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:75:45:75:69 | getClaim(...) | semmle.label | getClaim(...) | +subpaths +#select +| JwtNoVerifier.java:75:45:75:69 | getClaim(...) | JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | JwtNoVerifier.java:75:45:75:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:43:28:43:55 | getParameter(...) | JWT | diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java new file mode 100644 index 00000000000..876c9c5b1c8 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java @@ -0,0 +1,121 @@ +import java.io.*; +import java.security.NoSuchAlgorithmException; +import java.util.Objects; +import java.util.Optional; +import javax.crypto.KeyGenerator; +import javax.servlet.http.*; +import javax.servlet.annotation.*; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; + +@WebServlet(description = "", displayName = "", largeIcon = "", name = "JwtTest1", smallIcon = "", urlPatterns = {}, value = "/Auth", initParams = {}, asyncSupported = false, loadOnStartup = 0) +public class JwtNoVerifier extends HttpServlet { + + public void doPost(HttpServletRequest request, HttpServletResponse response) { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + // OK: first decode without signature verification + // and then verify with signature verification + String JwtToken1 = request.getParameter("JWT1"); + String userName = decodeToken(JwtToken1); + verifyToken(JwtToken1, "A Securely generated Key"); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + // NOT OK: only decode, no verification + String JwtToken2 = request.getParameter("JWT2"); + String userName = decodeToken(JwtToken2); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + // OK: no clue of the use of unsafe decoded JWT return value + JwtToken2 = request.getParameter("JWT2"); + JWT.decode(JwtToken2); + + + out.println(""); + out.println("

    " + "heyyy Nobody" + "

    "); + out.println(""); + } + + public static boolean verifyToken(final String token, final String key) { + try { + JWTVerifier verifier = JWT.require(Algorithm.HMAC256(key)).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + System.out.printf("jwt decode fail, token: %s", e); + } + return false; + } + + + public static String decodeToken(final String token) { + DecodedJWT jwt = JWT.decode(token); + return Optional.of(jwt).map(item -> item.getClaim("userName").asString()).orElse(""); + } + + + private static String getSecureRandomKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // for example + return keyGen.generateKey().toString(); + } + + static final String JWT_KEY = "KEY"; + + public static void NoNeedForTest(HttpServletRequest request) { + // constant key + String JwtToken3 = request.getParameter("JWT3"); + verifyToken(JwtToken3, JWT_KEY); + + // none algorithm + String JwtToken4 = request.getParameter("JWT4"); + try { + verifyTokenNoneAlg(JwtToken4, getSecureRandomKey()); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + + } + + public static String generateToken(final String userName, final String key) { + try { + return JWT.create().withClaim("userName", userName).sign(Algorithm.HMAC256(key)); + } catch (IllegalArgumentException e) { + System.out.printf("JWTToken generate fail %s", e); + } + return ""; + } + + public static boolean verifyTokenNoneAlg(final String token, final String key) { + try { + JWTVerifier verifier = JWT.require(Algorithm.none()).build(); + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + System.out.printf("jwt decode fail, token: %s", e); + } + return false; + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Test.java b/java/ql/test/experimental/query-tests/security/CWE-347/Test.java deleted file mode 100644 index 48ff7898e49..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Test.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.example.JwtTest; - -import java.io.*; -import java.security.NoSuchAlgorithmException; -import java.util.Objects; -import java.util.Optional; -import com.auth0.jwt.JWT; -import com.auth0.jwt.JWTVerifier; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.JWTCreationException; -import com.auth0.jwt.exceptions.JWTVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class Test extends HttpServlet { - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - try { - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - // OK: first decode without signature verification - // and then verify with signature verification - String JwtToken1 = request.getParameter("JWT1"); - String userName = decodeToken(JwtToken1); - verifyToken(JwtToken1, "A Securely generated Key"); - if (Objects.equals(userName, "Admin")) { - out.println(""); - out.println("

    " + "heyyy Admin" + "

    "); - out.println(""); - } - - out.println(""); - out.println("

    " + "heyyy Nobody" + "

    "); - out.println(""); - } catch (Exception e) { - // TODO: handle exception - } - } - - public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - // NOT OK: only decode, no verification - String JwtToken2 = request.getParameter("JWT2"); - String userName = decodeToken(JwtToken2); - if (Objects.equals(userName, "Admin")) { - out.println(""); - out.println("

    " + "heyyy Admin" + "

    "); - out.println(""); - } - - // OK: no clue of the use of unsafe decoded JWT return value - JwtToken2 = request.getParameter("JWT2"); - JWT.decode(JwtToken2); - - - out.println(""); - out.println("

    " + "heyyy Nobody" + "

    "); - out.println(""); - } - - public static boolean verifyToken(final String token, final String key) { - try { - JWTVerifier verifier = JWT.require(Algorithm.HMAC256(key)).build(); - verifier.verify(token); - return true; - } catch (JWTVerificationException e) { - System.out.printf("jwt decode fail, token: %s", e); - } - return false; - } - - - public static String decodeToken(final String token) { - DecodedJWT jwt = JWT.decode(token); - return Optional.of(jwt).map(item -> item.getClaim("userName").asString()).orElse(""); - } - - - private static String getSecureRandomKey() throws NoSuchAlgorithmException { - KeyGenerator keyGen = KeyGenerator.getInstance("AES"); - keyGen.init(256); // for example - return keyGen.generateKey().toString(); - } - static final String JWT_KEY = "KEY"; -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/options b/java/ql/test/experimental/query-tests/security/CWE-347/options index b7e23cf09f6..f18d5929e9e 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/options +++ b/java/ql/test/experimental/query-tests/security/CWE-347/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/auth0-jwt-4.4.0/:${testdir}/../../../../stubs/javax-servlet-2.5/ \ No newline at end of file +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/auth0-java-jwt-4.4.0:${testdir}/../../../stubs/javax.servlet-api-4.0.1 \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml b/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml deleted file mode 100644 index 870a294c80e..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-347/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - com.example - JwtTest - 1.0-SNAPSHOT - JwtTest - war - - - UTF-8 - 11 - 11 - 5.9.2 - - - - - com.auth0 - java-jwt - 4.4.0 - - - javax.servlet - javax.servlet-api - 4.0.1 - provided - - - - - - - org.apache.maven.plugins - maven-war-plugin - 3.3.2 - - - - \ No newline at end of file diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWT.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWT.java new file mode 100644 index 00000000000..f7fe489e30d --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWT.java @@ -0,0 +1,17 @@ +// Generated automatically from com.auth0.jwt.JWT for testing purposes + +package com.auth0.jwt; + +import com.auth0.jwt.JWTCreator; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.Verification; + +public class JWT +{ + public DecodedJWT decodeJwt(String p0){ return null; } + public JWT(){} + public static DecodedJWT decode(String p0){ return null; } + public static JWTCreator.Builder create(){ return null; } + public static Verification require(Algorithm p0){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTCreator.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTCreator.java new file mode 100644 index 00000000000..05455b8ed99 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTCreator.java @@ -0,0 +1,46 @@ +// Generated automatically from com.auth0.jwt.JWTCreator for testing purposes + +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class JWTCreator +{ + protected JWTCreator() {} + static public class Builder + { + public JWTCreator.Builder withArrayClaim(String p0, Integer[] p1){ return null; } + public JWTCreator.Builder withArrayClaim(String p0, Long[] p1){ return null; } + public JWTCreator.Builder withArrayClaim(String p0, String[] p1){ return null; } + public JWTCreator.Builder withAudience(String... p0){ return null; } + public JWTCreator.Builder withClaim(String p0, Boolean p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Date p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Double p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Instant p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Integer p1){ return null; } + public JWTCreator.Builder withClaim(String p0, List p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Long p1){ return null; } + public JWTCreator.Builder withClaim(String p0, Map p1){ return null; } + public JWTCreator.Builder withClaim(String p0, String p1){ return null; } + public JWTCreator.Builder withExpiresAt(Date p0){ return null; } + public JWTCreator.Builder withExpiresAt(Instant p0){ return null; } + public JWTCreator.Builder withHeader(Map p0){ return null; } + public JWTCreator.Builder withHeader(String p0){ return null; } + public JWTCreator.Builder withIssuedAt(Date p0){ return null; } + public JWTCreator.Builder withIssuedAt(Instant p0){ return null; } + public JWTCreator.Builder withIssuer(String p0){ return null; } + public JWTCreator.Builder withJWTId(String p0){ return null; } + public JWTCreator.Builder withKeyId(String p0){ return null; } + public JWTCreator.Builder withNotBefore(Date p0){ return null; } + public JWTCreator.Builder withNotBefore(Instant p0){ return null; } + public JWTCreator.Builder withNullClaim(String p0){ return null; } + public JWTCreator.Builder withPayload(Map p0){ return null; } + public JWTCreator.Builder withPayload(String p0){ return null; } + public JWTCreator.Builder withSubject(String p0){ return null; } + public String sign(Algorithm p0){ return null; } + } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java new file mode 100644 index 00000000000..3a44b2480cb --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java @@ -0,0 +1,12 @@ +// Generated automatically from com.auth0.jwt.JWTVerifier for testing purposes + +package com.auth0.jwt; + +import com.auth0.jwt.interfaces.DecodedJWT; + +public class JWTVerifier implements com.auth0.jwt.interfaces.JWTVerifier +{ + protected JWTVerifier() {} + public DecodedJWT verify(DecodedJWT p0){ return null; } + public DecodedJWT verify(String p0){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java new file mode 100644 index 00000000000..6d6d06a22f0 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java @@ -0,0 +1,50 @@ +// Generated automatically from com.auth0.jwt.algorithms.Algorithm for testing purposes + +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.ECDSAKeyProvider; +import com.auth0.jwt.interfaces.RSAKeyProvider; +import java.security.interfaces.ECKey; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; +import java.security.interfaces.RSAKey; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + +abstract public class Algorithm +{ + protected Algorithm() {} + protected Algorithm(String p0, String p1){} + public String getName(){ return null; } + public String getSigningKeyId(){ return null; } + public String toString(){ return null; } + public abstract byte[] sign(byte[] p0); + public abstract void verify(DecodedJWT p0); + public byte[] sign(byte[] p0, byte[] p1){ return null; } + public static Algorithm ECDSA256(ECDSAKeyProvider p0){ return null; } + public static Algorithm ECDSA256(ECKey p0){ return null; } + public static Algorithm ECDSA256(ECPublicKey p0, ECPrivateKey p1){ return null; } + public static Algorithm ECDSA384(ECDSAKeyProvider p0){ return null; } + public static Algorithm ECDSA384(ECKey p0){ return null; } + public static Algorithm ECDSA384(ECPublicKey p0, ECPrivateKey p1){ return null; } + public static Algorithm ECDSA512(ECDSAKeyProvider p0){ return null; } + public static Algorithm ECDSA512(ECKey p0){ return null; } + public static Algorithm ECDSA512(ECPublicKey p0, ECPrivateKey p1){ return null; } + public static Algorithm HMAC256(String p0){ return null; } + public static Algorithm HMAC256(byte[] p0){ return null; } + public static Algorithm HMAC384(String p0){ return null; } + public static Algorithm HMAC384(byte[] p0){ return null; } + public static Algorithm HMAC512(String p0){ return null; } + public static Algorithm HMAC512(byte[] p0){ return null; } + public static Algorithm RSA256(RSAKey p0){ return null; } + public static Algorithm RSA256(RSAKeyProvider p0){ return null; } + public static Algorithm RSA256(RSAPublicKey p0, RSAPrivateKey p1){ return null; } + public static Algorithm RSA384(RSAKey p0){ return null; } + public static Algorithm RSA384(RSAKeyProvider p0){ return null; } + public static Algorithm RSA384(RSAPublicKey p0, RSAPrivateKey p1){ return null; } + public static Algorithm RSA512(RSAKey p0){ return null; } + public static Algorithm RSA512(RSAKeyProvider p0){ return null; } + public static Algorithm RSA512(RSAPublicKey p0, RSAPrivateKey p1){ return null; } + public static Algorithm none(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java new file mode 100644 index 00000000000..19ca564160a --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java @@ -0,0 +1,15 @@ +// Generated automatically from com.auth0.jwt.exceptions.JWTVerificationException for testing purposes + +package com.auth0.jwt.exceptions; + + +public class JWTCreationException extends RuntimeException { + protected JWTCreationException() { + } + + public JWTCreationException(String p0) { + } + + public JWTCreationException(String p0, Throwable p1) { + } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java new file mode 100644 index 00000000000..bf322f82d0d --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java @@ -0,0 +1,11 @@ +// Generated automatically from com.auth0.jwt.exceptions.JWTVerificationException for testing purposes + +package com.auth0.jwt.exceptions; + + +public class JWTVerificationException extends RuntimeException +{ + protected JWTVerificationException() {} + public JWTVerificationException(String p0){} + public JWTVerificationException(String p0, Throwable p1){} +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java new file mode 100644 index 00000000000..05c127cbd57 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java @@ -0,0 +1,25 @@ +// Generated automatically from com.auth0.jwt.interfaces.Claim for testing purposes + +package com.auth0.jwt.interfaces; + +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface Claim +{ + T as(java.lang.Class p0); + T[] asArray(java.lang.Class p0); + java.util.List asList(java.lang.Class p0); + Boolean asBoolean(); + Date asDate(); + Double asDouble(); + Integer asInt(); + Long asLong(); + Map asMap(); + String asString(); + boolean isMissing(); + boolean isNull(); + default Instant asInstant(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java new file mode 100644 index 00000000000..c7d202eb793 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java @@ -0,0 +1,14 @@ +// Generated automatically from com.auth0.jwt.interfaces.DecodedJWT for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.Header; +import com.auth0.jwt.interfaces.Payload; + +public interface DecodedJWT extends Header, Payload +{ + String getHeader(); + String getPayload(); + String getSignature(); + String getToken(); +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java new file mode 100644 index 00000000000..535ab2dde39 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java @@ -0,0 +1,13 @@ +// Generated automatically from com.auth0.jwt.interfaces.ECDSAKeyProvider for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.KeyProvider; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; + +public interface ECDSAKeyProvider extends KeyProvider +{ +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java new file mode 100644 index 00000000000..85e3ff9ef4b --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java @@ -0,0 +1,14 @@ +// Generated automatically from com.auth0.jwt.interfaces.Header for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.Claim; + +public interface Header +{ + Claim getHeaderClaim(String p0); + String getAlgorithm(); + String getContentType(); + String getKeyId(); + String getType(); +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java new file mode 100644 index 00000000000..12fafc93221 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java @@ -0,0 +1,11 @@ +// Generated automatically from com.auth0.jwt.interfaces.JWTVerifier for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.DecodedJWT; + +public interface JWTVerifier +{ + DecodedJWT verify(DecodedJWT p0); + DecodedJWT verify(String p0); +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java new file mode 100644 index 00000000000..e3c5e8f2c35 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java @@ -0,0 +1,13 @@ +// Generated automatically from com.auth0.jwt.interfaces.KeyProvider for testing purposes + +package com.auth0.jwt.interfaces; + +import java.security.PrivateKey; +import java.security.PublicKey; + +interface KeyProvider +{ + R getPrivateKey(); + String getPrivateKeyId(); + U getPublicKeyById(String p0); +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java new file mode 100644 index 00000000000..98efdf915f6 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java @@ -0,0 +1,25 @@ +// Generated automatically from com.auth0.jwt.interfaces.Payload for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.Claim; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface Payload +{ + Claim getClaim(String p0); + Date getExpiresAt(); + Date getIssuedAt(); + Date getNotBefore(); + List getAudience(); + Map getClaims(); + String getId(); + String getIssuer(); + String getSubject(); + default Instant getExpiresAtAsInstant(){ return null; } + default Instant getIssuedAtAsInstant(){ return null; } + default Instant getNotBeforeAsInstant(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java new file mode 100644 index 00000000000..d9b12ff1679 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java @@ -0,0 +1,13 @@ +// Generated automatically from com.auth0.jwt.interfaces.RSAKeyProvider for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.KeyProvider; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + +public interface RSAKeyProvider extends KeyProvider +{ +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java new file mode 100644 index 00000000000..ea020ce9a57 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java @@ -0,0 +1,38 @@ +// Generated automatically from com.auth0.jwt.interfaces.Verification for testing purposes + +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import java.time.Instant; +import java.util.Date; +import java.util.function.BiPredicate; + +public interface Verification +{ + Verification acceptExpiresAt(long p0); + Verification acceptIssuedAt(long p0); + Verification acceptLeeway(long p0); + Verification acceptNotBefore(long p0); + Verification ignoreIssuedAt(); + Verification withAnyOfAudience(String... p0); + Verification withArrayClaim(String p0, Integer... p1); + Verification withArrayClaim(String p0, Long... p1); + Verification withArrayClaim(String p0, String... p1); + Verification withAudience(String... p0); + Verification withClaim(String p0, BiPredicate p1); + Verification withClaim(String p0, Boolean p1); + Verification withClaim(String p0, Date p1); + Verification withClaim(String p0, Double p1); + Verification withClaim(String p0, Integer p1); + Verification withClaim(String p0, Long p1); + Verification withClaim(String p0, String p1); + Verification withClaimPresence(String p0); + Verification withIssuer(String... p0); + Verification withJWTId(String p0); + Verification withNullClaim(String p0); + Verification withSubject(String p0); + com.auth0.jwt.JWTVerifier build(); + default Verification withClaim(String p0, Instant p1){ return null; } + default Verification withIssuer(String p0){ return null; } +} diff --git a/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/github/luben/zstd/BufferPool.java b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/github/luben/zstd/BufferPool.java new file mode 100644 index 00000000000..6b5c2b81dc0 --- /dev/null +++ b/java/ql/test/experimental/stubs/auth0-java-jwt-4.4.0/com/github/luben/zstd/BufferPool.java @@ -0,0 +1,11 @@ +// Generated automatically from com.github.luben.zstd.BufferPool for testing purposes + +package com.github.luben.zstd; + +import java.nio.ByteBuffer; + +public interface BufferPool +{ + ByteBuffer get(int p0); + void release(ByteBuffer p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java new file mode 100644 index 00000000000..d133ee2f49b --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java @@ -0,0 +1,26 @@ +// Generated automatically from javax.crypto.KeyGenerator for testing purposes + +package javax.crypto; + +import java.security.Provider; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.KeyGeneratorSpi; +import javax.crypto.SecretKey; + +public class KeyGenerator +{ + protected KeyGenerator() {} + protected KeyGenerator(KeyGeneratorSpi p0, Provider p1, String p2){} + public final Provider getProvider(){ return null; } + public final SecretKey generateKey(){ return null; } + public final String getAlgorithm(){ return null; } + public final void init(AlgorithmParameterSpec p0){} + public final void init(AlgorithmParameterSpec p0, SecureRandom p1){} + public final void init(SecureRandom p0){} + public final void init(int p0){} + public final void init(int p0, SecureRandom p1){} + public static KeyGenerator getInstance(String p0){ return null; } + public static KeyGenerator getInstance(String p0, Provider p1){ return null; } + public static KeyGenerator getInstance(String p0, String p1){ return null; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java new file mode 100644 index 00000000000..aba2623123a --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.crypto.KeyGeneratorSpi for testing purposes + +package javax.crypto; + +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.SecretKey; + +abstract public class KeyGeneratorSpi +{ + protected abstract SecretKey engineGenerateKey(); + protected abstract void engineInit(AlgorithmParameterSpec p0, SecureRandom p1); + protected abstract void engineInit(SecureRandom p0); + protected abstract void engineInit(int p0, SecureRandom p1); + public KeyGeneratorSpi(){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java new file mode 100644 index 00000000000..88c9e4539ba --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.crypto.SecretKey for testing purposes + +package javax.crypto; + +import java.security.Key; +import javax.security.auth.Destroyable; + +public interface SecretKey extends Destroyable, Key +{ + static long serialVersionUID = 0; +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java new file mode 100644 index 00000000000..979ca409ba6 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.security.auth.Destroyable for testing purposes + +package javax.security.auth; + + +public interface Destroyable +{ + default boolean isDestroyed(){ return false; } + default void destroy(){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java new file mode 100644 index 00000000000..70a39f55ac9 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java @@ -0,0 +1,31 @@ +// Generated automatically from javax.servlet.AsyncContext for testing purposes + +package javax.servlet; + +import javax.servlet.AsyncListener; +import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface AsyncContext +{ + T createListener(java.lang.Class p0); + ServletRequest getRequest(); + ServletResponse getResponse(); + boolean hasOriginalRequestAndResponse(); + long getTimeout(); + static String ASYNC_CONTEXT_PATH = null; + static String ASYNC_MAPPING = null; + static String ASYNC_PATH_INFO = null; + static String ASYNC_QUERY_STRING = null; + static String ASYNC_REQUEST_URI = null; + static String ASYNC_SERVLET_PATH = null; + void addListener(AsyncListener p0); + void addListener(AsyncListener p0, ServletRequest p1, ServletResponse p2); + void complete(); + void dispatch(); + void dispatch(ServletContext p0, String p1); + void dispatch(String p0); + void setTimeout(long p0); + void start(Runnable p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java new file mode 100644 index 00000000000..d7cb9c2b175 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.AsyncEvent for testing purposes + +package javax.servlet; + +import javax.servlet.AsyncContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public class AsyncEvent +{ + protected AsyncEvent() {} + public AsyncContext getAsyncContext(){ return null; } + public AsyncEvent(AsyncContext p0){} + public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2){} + public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2, Throwable p3){} + public AsyncEvent(AsyncContext p0, Throwable p1){} + public ServletRequest getSuppliedRequest(){ return null; } + public ServletResponse getSuppliedResponse(){ return null; } + public Throwable getThrowable(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java new file mode 100644 index 00000000000..2723482f668 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.AsyncListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; +import javax.servlet.AsyncEvent; + +public interface AsyncListener extends EventListener +{ + void onComplete(AsyncEvent p0); + void onError(AsyncEvent p0); + void onStartAsync(AsyncEvent p0); + void onTimeout(AsyncEvent p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java new file mode 100644 index 00000000000..2b7b44f328d --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.DispatcherType for testing purposes + +package javax.servlet; + + +public enum DispatcherType +{ + ASYNC, ERROR, FORWARD, INCLUDE, REQUEST; + private DispatcherType() {} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java new file mode 100644 index 00000000000..64b9f9d73a8 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java @@ -0,0 +1,15 @@ +// Generated automatically from javax.servlet.Filter for testing purposes + +package javax.servlet; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface Filter +{ + default void destroy(){} + default void init(FilterConfig p0){} + void doFilter(ServletRequest p0, ServletResponse p1, FilterChain p2); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java new file mode 100644 index 00000000000..f64ab722684 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.FilterChain for testing purposes + +package javax.servlet; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface FilterChain +{ + void doFilter(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java new file mode 100644 index 00000000000..0e140c6680c --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.FilterConfig for testing purposes + +package javax.servlet; + +import java.util.Enumeration; +import javax.servlet.ServletContext; + +public interface FilterConfig +{ + Enumeration getInitParameterNames(); + ServletContext getServletContext(); + String getFilterName(); + String getInitParameter(String p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java new file mode 100644 index 00000000000..6ad0739ceb6 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.FilterRegistration for testing purposes + +package javax.servlet; + +import java.util.Collection; +import java.util.EnumSet; +import javax.servlet.DispatcherType; +import javax.servlet.Registration; + +public interface FilterRegistration extends Registration +{ + Collection getServletNameMappings(); + Collection getUrlPatternMappings(); + static public interface Dynamic extends FilterRegistration, Registration.Dynamic + { + } + void addMappingForServletNames(EnumSet p0, boolean p1, String... p2); + void addMappingForUrlPatterns(EnumSet p0, boolean p1, String... p2); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java new file mode 100644 index 00000000000..5f7bdcda487 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.GenericServlet for testing purposes + +package javax.servlet; + +import java.io.Serializable; +import java.util.Enumeration; +import javax.servlet.Servlet; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +abstract public class GenericServlet implements Serializable, Servlet, ServletConfig +{ + public Enumeration getInitParameterNames(){ return null; } + public GenericServlet(){} + public ServletConfig getServletConfig(){ return null; } + public ServletContext getServletContext(){ return null; } + public String getInitParameter(String p0){ return null; } + public String getServletInfo(){ return null; } + public String getServletName(){ return null; } + public abstract void service(ServletRequest p0, ServletResponse p1); + public void destroy(){} + public void init(){} + public void init(ServletConfig p0){} + public void log(String p0){} + public void log(String p0, Throwable p1){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java new file mode 100644 index 00000000000..6598aa47cc5 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.servlet.HttpConstraintElement for testing purposes + +package javax.servlet; + +import javax.servlet.annotation.ServletSecurity; + +public class HttpConstraintElement +{ + public HttpConstraintElement(){} + public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0){} + public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0, ServletSecurity.TransportGuarantee p1, String... p2){} + public HttpConstraintElement(ServletSecurity.TransportGuarantee p0, String... p1){} + public ServletSecurity.EmptyRoleSemantic getEmptyRoleSemantic(){ return null; } + public ServletSecurity.TransportGuarantee getTransportGuarantee(){ return null; } + public String[] getRolesAllowed(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java new file mode 100644 index 00000000000..ddb52527004 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.HttpMethodConstraintElement for testing purposes + +package javax.servlet; + +import javax.servlet.HttpConstraintElement; + +public class HttpMethodConstraintElement extends HttpConstraintElement +{ + protected HttpMethodConstraintElement() {} + public HttpMethodConstraintElement(String p0){} + public HttpMethodConstraintElement(String p0, HttpConstraintElement p1){} + public String getMethodName(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java new file mode 100644 index 00000000000..8470d9a5317 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java @@ -0,0 +1,17 @@ +// Generated automatically from javax.servlet.MultipartConfigElement for testing purposes + +package javax.servlet; + +import javax.servlet.annotation.MultipartConfig; + +public class MultipartConfigElement +{ + protected MultipartConfigElement() {} + public MultipartConfigElement(MultipartConfig p0){} + public MultipartConfigElement(String p0){} + public MultipartConfigElement(String p0, long p1, long p2, int p3){} + public String getLocation(){ return null; } + public int getFileSizeThreshold(){ return 0; } + public long getMaxFileSize(){ return 0; } + public long getMaxRequestSize(){ return 0; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java new file mode 100644 index 00000000000..367594ef7da --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.ReadListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; + +public interface ReadListener extends EventListener +{ + void onAllDataRead(); + void onDataAvailable(); + void onError(Throwable p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java new file mode 100644 index 00000000000..5d4095813ef --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.Registration for testing purposes + +package javax.servlet; + +import java.util.Map; +import java.util.Set; + +public interface Registration +{ + Map getInitParameters(); + Set setInitParameters(Map p0); + String getClassName(); + String getInitParameter(String p0); + String getName(); + boolean setInitParameter(String p0, String p1); + static public interface Dynamic extends Registration + { + void setAsyncSupported(boolean p0); + } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java new file mode 100644 index 00000000000..ad017e4f501 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java @@ -0,0 +1,30 @@ +// Generated automatically from javax.servlet.RequestDispatcher for testing purposes + +package javax.servlet; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface RequestDispatcher +{ + static String ERROR_EXCEPTION = null; + static String ERROR_EXCEPTION_TYPE = null; + static String ERROR_MESSAGE = null; + static String ERROR_REQUEST_URI = null; + static String ERROR_SERVLET_NAME = null; + static String ERROR_STATUS_CODE = null; + static String FORWARD_CONTEXT_PATH = null; + static String FORWARD_MAPPING = null; + static String FORWARD_PATH_INFO = null; + static String FORWARD_QUERY_STRING = null; + static String FORWARD_REQUEST_URI = null; + static String FORWARD_SERVLET_PATH = null; + static String INCLUDE_CONTEXT_PATH = null; + static String INCLUDE_MAPPING = null; + static String INCLUDE_PATH_INFO = null; + static String INCLUDE_QUERY_STRING = null; + static String INCLUDE_REQUEST_URI = null; + static String INCLUDE_SERVLET_PATH = null; + void forward(ServletRequest p0, ServletResponse p1); + void include(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java new file mode 100644 index 00000000000..231c011a6f8 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java @@ -0,0 +1,16 @@ +// Generated automatically from javax.servlet.Servlet for testing purposes + +package javax.servlet; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +public interface Servlet +{ + ServletConfig getServletConfig(); + String getServletInfo(); + void destroy(); + void init(ServletConfig p0); + void service(ServletRequest p0, ServletResponse p1); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java new file mode 100644 index 00000000000..c483c16ac4e --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java @@ -0,0 +1,14 @@ +// Generated automatically from javax.servlet.ServletConfig for testing purposes + +package javax.servlet; + +import java.util.Enumeration; +import javax.servlet.ServletContext; + +public interface ServletConfig +{ + Enumeration getInitParameterNames(); + ServletContext getServletContext(); + String getInitParameter(String p0); + String getServletName(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java new file mode 100644 index 00000000000..812393f61e9 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java @@ -0,0 +1,83 @@ +// Generated automatically from javax.servlet.ServletContext for testing purposes + +package javax.servlet; + +import java.io.InputStream; +import java.net.URL; +import java.util.Enumeration; +import java.util.EventListener; +import java.util.Map; +import java.util.Set; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; +import javax.servlet.RequestDispatcher; +import javax.servlet.Servlet; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; + +public interface ServletContext +{ + T createListener(java.lang.Class p0); + void addListener(T p0); + T createFilter(java.lang.Class p0); + T createServlet(java.lang.Class p0); + ClassLoader getClassLoader(); + Enumeration getServlets(); + Enumeration getAttributeNames(); + Enumeration getInitParameterNames(); + Enumeration getServletNames(); + FilterRegistration getFilterRegistration(String p0); + FilterRegistration.Dynamic addFilter(String p0, Class p1); + FilterRegistration.Dynamic addFilter(String p0, Filter p1); + FilterRegistration.Dynamic addFilter(String p0, String p1); + InputStream getResourceAsStream(String p0); + JspConfigDescriptor getJspConfigDescriptor(); + Map getFilterRegistrations(); + Map getServletRegistrations(); + Object getAttribute(String p0); + RequestDispatcher getNamedDispatcher(String p0); + RequestDispatcher getRequestDispatcher(String p0); + Servlet getServlet(String p0); + ServletContext getContext(String p0); + ServletRegistration getServletRegistration(String p0); + ServletRegistration.Dynamic addJspFile(String p0, String p1); + ServletRegistration.Dynamic addServlet(String p0, Class p1); + ServletRegistration.Dynamic addServlet(String p0, Servlet p1); + ServletRegistration.Dynamic addServlet(String p0, String p1); + SessionCookieConfig getSessionCookieConfig(); + Set getDefaultSessionTrackingModes(); + Set getEffectiveSessionTrackingModes(); + Set getResourcePaths(String p0); + String getContextPath(); + String getInitParameter(String p0); + String getMimeType(String p0); + String getRealPath(String p0); + String getRequestCharacterEncoding(); + String getResponseCharacterEncoding(); + String getServerInfo(); + String getServletContextName(); + String getVirtualServerName(); + URL getResource(String p0); + boolean setInitParameter(String p0, String p1); + int getEffectiveMajorVersion(); + int getEffectiveMinorVersion(); + int getMajorVersion(); + int getMinorVersion(); + int getSessionTimeout(); + static String ORDERED_LIBS = null; + static String TEMPDIR = null; + void addListener(Class p0); + void addListener(String p0); + void declareRoles(String... p0); + void log(Exception p0, String p1); + void log(String p0); + void log(String p0, Throwable p1); + void removeAttribute(String p0); + void setAttribute(String p0, Object p1); + void setRequestCharacterEncoding(String p0); + void setResponseCharacterEncoding(String p0); + void setSessionTimeout(int p0); + void setSessionTrackingModes(Set p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java new file mode 100644 index 00000000000..31034066970 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java @@ -0,0 +1,15 @@ +// Generated automatically from javax.servlet.ServletInputStream for testing purposes + +package javax.servlet; + +import java.io.InputStream; +import javax.servlet.ReadListener; + +abstract public class ServletInputStream extends InputStream +{ + protected ServletInputStream(){} + public abstract boolean isFinished(); + public abstract boolean isReady(); + public abstract void setReadListener(ReadListener p0); + public int readLine(byte[] p0, int p1, int p2){ return 0; } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java new file mode 100644 index 00000000000..52a2162c9eb --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.ServletOutputStream for testing purposes + +package javax.servlet; + +import java.io.OutputStream; +import javax.servlet.WriteListener; + +abstract public class ServletOutputStream extends OutputStream +{ + protected ServletOutputStream(){} + public abstract boolean isReady(); + public abstract void setWriteListener(WriteListener p0); + public void print(String p0){} + public void print(boolean p0){} + public void print(char p0){} + public void print(double p0){} + public void print(float p0){} + public void print(int p0){} + public void print(long p0){} + public void println(){} + public void println(String p0){} + public void println(boolean p0){} + public void println(char p0){} + public void println(double p0){} + public void println(float p0){} + public void println(int p0){} + public void println(long p0){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java new file mode 100644 index 00000000000..a1cc66f2d19 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java @@ -0,0 +1,23 @@ +// Generated automatically from javax.servlet.ServletRegistration for testing purposes + +package javax.servlet; + +import java.util.Collection; +import java.util.Set; +import javax.servlet.MultipartConfigElement; +import javax.servlet.Registration; +import javax.servlet.ServletSecurityElement; + +public interface ServletRegistration extends Registration +{ + Collection getMappings(); + Set addMapping(String... p0); + String getRunAsRole(); + static public interface Dynamic extends Registration.Dynamic, ServletRegistration + { + Set setServletSecurity(ServletSecurityElement p0); + void setLoadOnStartup(int p0); + void setMultipartConfig(MultipartConfigElement p0); + void setRunAsRole(String p0); + } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java new file mode 100644 index 00000000000..fc0db462cc0 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java @@ -0,0 +1,55 @@ +// Generated automatically from javax.servlet.ServletRequest for testing purposes + +package javax.servlet; + +import java.io.BufferedReader; +import java.util.Enumeration; +import java.util.Locale; +import java.util.Map; +import javax.servlet.AsyncContext; +import javax.servlet.DispatcherType; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; + +public interface ServletRequest +{ + AsyncContext getAsyncContext(); + AsyncContext startAsync(); + AsyncContext startAsync(ServletRequest p0, ServletResponse p1); + BufferedReader getReader(); + DispatcherType getDispatcherType(); + Enumeration getLocales(); + Enumeration getAttributeNames(); + Enumeration getParameterNames(); + Locale getLocale(); + Map getParameterMap(); + Object getAttribute(String p0); + RequestDispatcher getRequestDispatcher(String p0); + ServletContext getServletContext(); + ServletInputStream getInputStream(); + String getCharacterEncoding(); + String getContentType(); + String getLocalAddr(); + String getLocalName(); + String getParameter(String p0); + String getProtocol(); + String getRealPath(String p0); + String getRemoteAddr(); + String getRemoteHost(); + String getScheme(); + String getServerName(); + String[] getParameterValues(String p0); + boolean isAsyncStarted(); + boolean isAsyncSupported(); + boolean isSecure(); + int getContentLength(); + int getLocalPort(); + int getRemotePort(); + int getServerPort(); + long getContentLengthLong(); + void removeAttribute(String p0); + void setAttribute(String p0, Object p1); + void setCharacterEncoding(String p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java new file mode 100644 index 00000000000..db6610bc15d --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java @@ -0,0 +1,27 @@ +// Generated automatically from javax.servlet.ServletResponse for testing purposes + +package javax.servlet; + +import java.io.PrintWriter; +import java.util.Locale; +import javax.servlet.ServletOutputStream; + +public interface ServletResponse +{ + Locale getLocale(); + PrintWriter getWriter(); + ServletOutputStream getOutputStream(); + String getCharacterEncoding(); + String getContentType(); + boolean isCommitted(); + int getBufferSize(); + void flushBuffer(); + void reset(); + void resetBuffer(); + void setBufferSize(int p0); + void setCharacterEncoding(String p0); + void setContentLength(int p0); + void setContentLengthLong(long p0); + void setContentType(String p0); + void setLocale(Locale p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java new file mode 100644 index 00000000000..def47937391 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.ServletSecurityElement for testing purposes + +package javax.servlet; + +import java.util.Collection; +import javax.servlet.HttpConstraintElement; +import javax.servlet.HttpMethodConstraintElement; +import javax.servlet.annotation.ServletSecurity; + +public class ServletSecurityElement extends HttpConstraintElement +{ + public Collection getHttpMethodConstraints(){ return null; } + public Collection getMethodNames(){ return null; } + public ServletSecurityElement(){} + public ServletSecurityElement(Collection p0){} + public ServletSecurityElement(HttpConstraintElement p0){} + public ServletSecurityElement(HttpConstraintElement p0, Collection p1){} + public ServletSecurityElement(ServletSecurity p0){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java new file mode 100644 index 00000000000..4cae9a11f30 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java @@ -0,0 +1,22 @@ +// Generated automatically from javax.servlet.SessionCookieConfig for testing purposes + +package javax.servlet; + + +public interface SessionCookieConfig +{ + String getComment(); + String getDomain(); + String getName(); + String getPath(); + boolean isHttpOnly(); + boolean isSecure(); + int getMaxAge(); + void setComment(String p0); + void setDomain(String p0); + void setHttpOnly(boolean p0); + void setMaxAge(int p0); + void setName(String p0); + void setPath(String p0); + void setSecure(boolean p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java new file mode 100644 index 00000000000..684ac40c56f --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.SessionTrackingMode for testing purposes + +package javax.servlet; + + +public enum SessionTrackingMode +{ + COOKIE, SSL, URL; + private SessionTrackingMode() {} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java new file mode 100644 index 00000000000..24fe504271c --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.WriteListener for testing purposes + +package javax.servlet; + +import java.util.EventListener; + +public interface WriteListener extends EventListener +{ + void onError(Throwable p0); + void onWritePossible(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java new file mode 100644 index 00000000000..f47efc62744 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java @@ -0,0 +1,18 @@ +// Generated automatically from javax.servlet.annotation.HttpConstraint for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import javax.servlet.annotation.ServletSecurity; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +public @interface HttpConstraint +{ + ServletSecurity.EmptyRoleSemantic value(); + ServletSecurity.TransportGuarantee transportGuarantee(); + String[] rolesAllowed(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java new file mode 100644 index 00000000000..288f4651018 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.annotation.HttpMethodConstraint for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import javax.servlet.annotation.ServletSecurity; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +public @interface HttpMethodConstraint +{ + ServletSecurity.EmptyRoleSemantic emptyRoleSemantic(); + ServletSecurity.TransportGuarantee transportGuarantee(); + String value(); + String[] rolesAllowed(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java new file mode 100644 index 00000000000..baccad3e199 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java @@ -0,0 +1,19 @@ +// Generated automatically from javax.servlet.annotation.MultipartConfig for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface MultipartConfig +{ + String location(); + int fileSizeThreshold(); + long maxFileSize(); + long maxRequestSize(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java new file mode 100644 index 00000000000..021b6c64c2a --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java @@ -0,0 +1,33 @@ +// Generated automatically from javax.servlet.annotation.ServletSecurity for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.servlet.annotation.HttpConstraint; +import javax.servlet.annotation.HttpMethodConstraint; + +@Documented +@Inherited +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface ServletSecurity +{ + HttpConstraint value(); + HttpMethodConstraint[] httpMethodConstraints(); + static public enum EmptyRoleSemantic + { + DENY, PERMIT; + private EmptyRoleSemantic() {} + } + static public enum TransportGuarantee + { + CONFIDENTIAL, NONE; + private TransportGuarantee() {} + } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java new file mode 100644 index 00000000000..513c7d7053b --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.annotation.WebInitParam for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface WebInitParam +{ + String description(); + String name(); + String value(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java new file mode 100644 index 00000000000..83b5d2e476a --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.annotation.WebServlet for testing purposes + +package javax.servlet.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.servlet.annotation.WebInitParam; + +@Documented +@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) +@Target(value={java.lang.annotation.ElementType.TYPE}) +public @interface WebServlet +{ + String description(); + String displayName(); + String largeIcon(); + String name(); + String smallIcon(); + String[] urlPatterns(); + String[] value(); + WebInitParam[] initParams(); + boolean asyncSupported(); + int loadOnStartup(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java new file mode 100644 index 00000000000..8d93a4318d7 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.descriptor.JspConfigDescriptor for testing purposes + +package javax.servlet.descriptor; + +import java.util.Collection; +import javax.servlet.descriptor.JspPropertyGroupDescriptor; +import javax.servlet.descriptor.TaglibDescriptor; + +public interface JspConfigDescriptor +{ + Collection getJspPropertyGroups(); + Collection getTaglibs(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java new file mode 100644 index 00000000000..dd852fa1088 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java @@ -0,0 +1,21 @@ +// Generated automatically from javax.servlet.descriptor.JspPropertyGroupDescriptor for testing purposes + +package javax.servlet.descriptor; + +import java.util.Collection; + +public interface JspPropertyGroupDescriptor +{ + Collection getIncludeCodas(); + Collection getIncludePreludes(); + Collection getUrlPatterns(); + String getBuffer(); + String getDefaultContentType(); + String getDeferredSyntaxAllowedAsLiteral(); + String getElIgnored(); + String getErrorOnUndeclaredNamespace(); + String getIsXml(); + String getPageEncoding(); + String getScriptingInvalid(); + String getTrimDirectiveWhitespaces(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java new file mode 100644 index 00000000000..c3dd5c10473 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.descriptor.TaglibDescriptor for testing purposes + +package javax.servlet.descriptor; + + +public interface TaglibDescriptor +{ + String getTaglibLocation(); + String getTaglibURI(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java new file mode 100644 index 00000000000..b5a180029be --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java @@ -0,0 +1,29 @@ +// Generated automatically from javax.servlet.http.Cookie for testing purposes + +package javax.servlet.http; + +import java.io.Serializable; + +public class Cookie implements Cloneable, Serializable +{ + protected Cookie() {} + public Cookie(String p0, String p1){} + public Object clone(){ return null; } + public String getComment(){ return null; } + public String getDomain(){ return null; } + public String getName(){ return null; } + public String getPath(){ return null; } + public String getValue(){ return null; } + public boolean getSecure(){ return false; } + public boolean isHttpOnly(){ return false; } + public int getMaxAge(){ return 0; } + public int getVersion(){ return 0; } + public void setComment(String p0){} + public void setDomain(String p0){} + public void setHttpOnly(boolean p0){} + public void setMaxAge(int p0){} + public void setPath(String p0){} + public void setSecure(boolean p0){} + public void setValue(String p0){} + public void setVersion(int p0){} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java new file mode 100644 index 00000000000..87d0adcaf34 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java @@ -0,0 +1,46 @@ +// Generated automatically from javax.servlet.http.HttpServlet for testing purposes + +package javax.servlet.http; + +import javax.servlet.GenericServlet; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +abstract public class HttpServlet extends GenericServlet { + protected long getLastModified(HttpServletRequest p0) { + return 0; + } + + protected void doDelete(HttpServletRequest p0, HttpServletResponse p1) { + } + + protected void doGet(HttpServletRequest p0, HttpServletResponse p1) throws IOException { + } + + protected void doHead(HttpServletRequest p0, HttpServletResponse p1) { + } + + protected void doOptions(HttpServletRequest p0, HttpServletResponse p1) { + } + + protected void doPost(HttpServletRequest p0, HttpServletResponse p1) throws IOException { + } + + protected void doPut(HttpServletRequest p0, HttpServletResponse p1) { + } + + protected void doTrace(HttpServletRequest p0, HttpServletResponse p1) { + } + + protected void service(HttpServletRequest p0, HttpServletResponse p1) { + } + + public HttpServlet() { + } + + public void service(ServletRequest p0, ServletResponse p1) { + } +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java new file mode 100644 index 00000000000..1b597f27773 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java @@ -0,0 +1,13 @@ +// Generated automatically from javax.servlet.http.HttpServletMapping for testing purposes + +package javax.servlet.http; + +import javax.servlet.http.MappingMatch; + +public interface HttpServletMapping +{ + MappingMatch getMappingMatch(); + String getMatchValue(); + String getPattern(); + String getServletName(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java new file mode 100644 index 00000000000..8612c34fb69 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java @@ -0,0 +1,60 @@ +// Generated automatically from javax.servlet.http.HttpServletRequest for testing purposes + +package javax.servlet.http; + +import java.security.Principal; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Map; +import javax.servlet.ServletRequest; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletMapping; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpUpgradeHandler; +import javax.servlet.http.Part; +import javax.servlet.http.PushBuilder; + +public interface HttpServletRequest extends ServletRequest +{ + T upgrade(java.lang.Class p0); + Collection getParts(); + Cookie[] getCookies(); + Enumeration getHeaderNames(); + Enumeration getHeaders(String p0); + HttpSession getSession(); + HttpSession getSession(boolean p0); + Part getPart(String p0); + Principal getUserPrincipal(); + String changeSessionId(); + String getAuthType(); + String getContextPath(); + String getHeader(String p0); + String getMethod(); + String getPathInfo(); + String getPathTranslated(); + String getQueryString(); + String getRemoteUser(); + String getRequestURI(); + String getRequestedSessionId(); + String getServletPath(); + StringBuffer getRequestURL(); + boolean authenticate(HttpServletResponse p0); + boolean isRequestedSessionIdFromCookie(); + boolean isRequestedSessionIdFromURL(); + boolean isRequestedSessionIdFromUrl(); + boolean isRequestedSessionIdValid(); + boolean isUserInRole(String p0); + default HttpServletMapping getHttpServletMapping(){ return null; } + default Map getTrailerFields(){ return null; } + default PushBuilder newPushBuilder(){ return null; } + default boolean isTrailerFieldsReady(){ return false; } + int getIntHeader(String p0); + long getDateHeader(String p0); + static String BASIC_AUTH = null; + static String CLIENT_CERT_AUTH = null; + static String DIGEST_AUTH = null; + static String FORM_AUTH = null; + void login(String p0, String p1); + void logout(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java new file mode 100644 index 00000000000..da902dbf30c --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java @@ -0,0 +1,77 @@ +// Generated automatically from javax.servlet.http.HttpServletResponse for testing purposes + +package javax.servlet.http; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Supplier; +import javax.servlet.ServletResponse; +import javax.servlet.http.Cookie; + +public interface HttpServletResponse extends ServletResponse +{ + Collection getHeaderNames(); + Collection getHeaders(String p0); + String encodeRedirectURL(String p0); + String encodeRedirectUrl(String p0); + String encodeURL(String p0); + String encodeUrl(String p0); + String getHeader(String p0); + boolean containsHeader(String p0); + default Supplier> getTrailerFields(){ return null; } + default void setTrailerFields(Supplier> p0){} + int getStatus(); + static int SC_ACCEPTED = 0; + static int SC_BAD_GATEWAY = 0; + static int SC_BAD_REQUEST = 0; + static int SC_CONFLICT = 0; + static int SC_CONTINUE = 0; + static int SC_CREATED = 0; + static int SC_EXPECTATION_FAILED = 0; + static int SC_FORBIDDEN = 0; + static int SC_FOUND = 0; + static int SC_GATEWAY_TIMEOUT = 0; + static int SC_GONE = 0; + static int SC_HTTP_VERSION_NOT_SUPPORTED = 0; + static int SC_INTERNAL_SERVER_ERROR = 0; + static int SC_LENGTH_REQUIRED = 0; + static int SC_METHOD_NOT_ALLOWED = 0; + static int SC_MOVED_PERMANENTLY = 0; + static int SC_MOVED_TEMPORARILY = 0; + static int SC_MULTIPLE_CHOICES = 0; + static int SC_NON_AUTHORITATIVE_INFORMATION = 0; + static int SC_NOT_ACCEPTABLE = 0; + static int SC_NOT_FOUND = 0; + static int SC_NOT_IMPLEMENTED = 0; + static int SC_NOT_MODIFIED = 0; + static int SC_NO_CONTENT = 0; + static int SC_OK = 0; + static int SC_PARTIAL_CONTENT = 0; + static int SC_PAYMENT_REQUIRED = 0; + static int SC_PRECONDITION_FAILED = 0; + static int SC_PROXY_AUTHENTICATION_REQUIRED = 0; + static int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 0; + static int SC_REQUEST_ENTITY_TOO_LARGE = 0; + static int SC_REQUEST_TIMEOUT = 0; + static int SC_REQUEST_URI_TOO_LONG = 0; + static int SC_RESET_CONTENT = 0; + static int SC_SEE_OTHER = 0; + static int SC_SERVICE_UNAVAILABLE = 0; + static int SC_SWITCHING_PROTOCOLS = 0; + static int SC_TEMPORARY_REDIRECT = 0; + static int SC_UNAUTHORIZED = 0; + static int SC_UNSUPPORTED_MEDIA_TYPE = 0; + static int SC_USE_PROXY = 0; + void addCookie(Cookie p0); + void addDateHeader(String p0, long p1); + void addHeader(String p0, String p1); + void addIntHeader(String p0, int p1); + void sendError(int p0); + void sendError(int p0, String p1); + void sendRedirect(String p0); + void setDateHeader(String p0, long p1); + void setHeader(String p0, String p1); + void setIntHeader(String p0, int p1); + void setStatus(int p0); + void setStatus(int p0, String p1); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java new file mode 100644 index 00000000000..f8f455b1423 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java @@ -0,0 +1,28 @@ +// Generated automatically from javax.servlet.http.HttpSession for testing purposes + +package javax.servlet.http; + +import java.util.Enumeration; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpSessionContext; + +public interface HttpSession +{ + Enumeration getAttributeNames(); + HttpSessionContext getSessionContext(); + Object getAttribute(String p0); + Object getValue(String p0); + ServletContext getServletContext(); + String getId(); + String[] getValueNames(); + boolean isNew(); + int getMaxInactiveInterval(); + long getCreationTime(); + long getLastAccessedTime(); + void invalidate(); + void putValue(String p0, Object p1); + void removeAttribute(String p0); + void removeValue(String p0); + void setAttribute(String p0, Object p1); + void setMaxInactiveInterval(int p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java new file mode 100644 index 00000000000..97a77b48358 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.http.HttpSessionContext for testing purposes + +package javax.servlet.http; + +import java.util.Enumeration; +import javax.servlet.http.HttpSession; + +public interface HttpSessionContext +{ + Enumeration getIds(); + HttpSession getSession(String p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java new file mode 100644 index 00000000000..987d49dbde2 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java @@ -0,0 +1,11 @@ +// Generated automatically from javax.servlet.http.HttpUpgradeHandler for testing purposes + +package javax.servlet.http; + +import javax.servlet.http.WebConnection; + +public interface HttpUpgradeHandler +{ + void destroy(); + void init(WebConnection p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java new file mode 100644 index 00000000000..0432fd2ef7d --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java @@ -0,0 +1,10 @@ +// Generated automatically from javax.servlet.http.MappingMatch for testing purposes + +package javax.servlet.http; + + +public enum MappingMatch +{ + CONTEXT_ROOT, DEFAULT, EXACT, EXTENSION, PATH; + private MappingMatch() {} +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java new file mode 100644 index 00000000000..a4e599748a5 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java @@ -0,0 +1,20 @@ +// Generated automatically from javax.servlet.http.Part for testing purposes + +package javax.servlet.http; + +import java.io.InputStream; +import java.util.Collection; + +public interface Part +{ + Collection getHeaderNames(); + Collection getHeaders(String p0); + InputStream getInputStream(); + String getContentType(); + String getHeader(String p0); + String getName(); + String getSubmittedFileName(); + long getSize(); + void delete(); + void write(String p0); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java new file mode 100644 index 00000000000..195e2426a83 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java @@ -0,0 +1,23 @@ +// Generated automatically from javax.servlet.http.PushBuilder for testing purposes + +package javax.servlet.http; + +import java.util.Set; + +public interface PushBuilder +{ + PushBuilder addHeader(String p0, String p1); + PushBuilder method(String p0); + PushBuilder path(String p0); + PushBuilder queryString(String p0); + PushBuilder removeHeader(String p0); + PushBuilder sessionId(String p0); + PushBuilder setHeader(String p0, String p1); + Set getHeaderNames(); + String getHeader(String p0); + String getMethod(); + String getPath(); + String getQueryString(); + String getSessionId(); + void push(); +} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java new file mode 100644 index 00000000000..5001c046400 --- /dev/null +++ b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java @@ -0,0 +1,12 @@ +// Generated automatically from javax.servlet.http.WebConnection for testing purposes + +package javax.servlet.http; + +import javax.servlet.ServletInputStream; +import javax.servlet.ServletOutputStream; + +public interface WebConnection extends AutoCloseable +{ + ServletInputStream getInputStream(); + ServletOutputStream getOutputStream(); +} From bf506f8a9eb9c37c78cc768d8c159956299a64f6 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:06:02 +0200 Subject: [PATCH 023/334] remove redundent stubs --- .../com/auth0/jwt/HeaderParams.java | 29 - .../auth0-jwt-4.4.0/com/auth0/jwt/JWT.java | 74 -- .../com/auth0/jwt/JWTCreator.java | 631 ------------------ .../com/auth0/jwt/JWTDecoder.java | 156 ----- .../com/auth0/jwt/JWTVerifier.java | 493 -------------- .../com/auth0/jwt/RegisteredClaims.java | 55 -- .../com/auth0/jwt/TokenUtils.java | 47 -- .../com/auth0/jwt/algorithms/Algorithm.java | 404 ----------- .../auth0/jwt/algorithms/CryptoHelper.java | 208 ------ .../auth0/jwt/algorithms/ECDSAAlgorithm.java | 306 --------- .../auth0/jwt/algorithms/HMACAlgorithm.java | 81 --- .../auth0/jwt/algorithms/NoneAlgorithm.java | 36 - .../auth0/jwt/algorithms/RSAAlgorithm.java | 112 ---- .../AlgorithmMismatchException.java | 10 - .../exceptions/IncorrectClaimException.java | 44 -- .../jwt/exceptions/InvalidClaimException.java | 10 - .../jwt/exceptions/JWTCreationException.java | 10 - .../jwt/exceptions/JWTDecodeException.java | 14 - .../exceptions/JWTVerificationException.java | 14 - .../jwt/exceptions/MissingClaimException.java | 23 - .../SignatureGenerationException.java | 12 - .../SignatureVerificationException.java | 16 - .../jwt/exceptions/TokenExpiredException.java | 22 - .../com/auth0/jwt/impl/BasicHeader.java | 71 -- .../com/auth0/jwt/impl/ClaimsHolder.java | 19 - .../com/auth0/jwt/impl/ClaimsSerializer.java | 86 --- .../auth0/jwt/impl/ExpectedCheckHolder.java | 25 - .../auth0/jwt/impl/HeaderClaimsHolder.java | 12 - .../auth0/jwt/impl/HeaderDeserializer.java | 50 -- .../com/auth0/jwt/impl/HeaderSerializer.java | 10 - .../com/auth0/jwt/impl/JWTParser.java | 92 --- .../com/auth0/jwt/impl/JsonNodeClaim.java | 182 ----- .../auth0/jwt/impl/PayloadClaimsHolder.java | 12 - .../auth0/jwt/impl/PayloadDeserializer.java | 91 --- .../com/auth0/jwt/impl/PayloadImpl.java | 129 ---- .../com/auth0/jwt/impl/PayloadSerializer.java | 66 -- .../com/auth0/jwt/impl/package-info.java | 7 - .../com/auth0/jwt/interfaces/Claim.java | 131 ---- .../com/auth0/jwt/interfaces/DecodedJWT.java | 37 - .../jwt/interfaces/ECDSAKeyProvider.java | 10 - .../com/auth0/jwt/interfaces/Header.java | 44 -- .../auth0/jwt/interfaces/JWTPartsParser.java | 28 - .../com/auth0/jwt/interfaces/JWTVerifier.java | 40 -- .../com/auth0/jwt/interfaces/KeyProvider.java | 38 -- .../com/auth0/jwt/interfaces/Payload.java | 104 --- .../auth0/jwt/interfaces/RSAKeyProvider.java | 10 - .../auth0/jwt/interfaces/Verification.java | 267 -------- .../javax-4.0.1/crypto/KeyGenerator.java | 26 - .../javax-4.0.1/crypto/KeyGeneratorSpi.java | 16 - .../stubs/javax-4.0.1/crypto/SecretKey.java | 11 - .../security/auth/Destroyable.java | 10 - .../javax-4.0.1/servlet/AsyncContext.java | 31 - .../stubs/javax-4.0.1/servlet/AsyncEvent.java | 20 - .../javax-4.0.1/servlet/AsyncListener.java | 14 - .../javax-4.0.1/servlet/DispatcherType.java | 10 - .../stubs/javax-4.0.1/servlet/Filter.java | 15 - .../javax-4.0.1/servlet/FilterChain.java | 11 - .../javax-4.0.1/servlet/FilterConfig.java | 14 - .../servlet/FilterRegistration.java | 19 - .../javax-4.0.1/servlet/GenericServlet.java | 28 - .../servlet/HttpConstraintElement.java | 16 - .../servlet/HttpMethodConstraintElement.java | 13 - .../servlet/MultipartConfigElement.java | 17 - .../javax-4.0.1/servlet/ReadListener.java | 12 - .../javax-4.0.1/servlet/Registration.java | 20 - .../servlet/RequestDispatcher.java | 30 - .../stubs/javax-4.0.1/servlet/Servlet.java | 16 - .../javax-4.0.1/servlet/ServletConfig.java | 14 - .../javax-4.0.1/servlet/ServletContext.java | 83 --- .../servlet/ServletInputStream.java | 15 - .../servlet/ServletOutputStream.java | 28 - .../servlet/ServletRegistration.java | 23 - .../javax-4.0.1/servlet/ServletRequest.java | 55 -- .../javax-4.0.1/servlet/ServletResponse.java | 27 - .../servlet/ServletSecurityElement.java | 19 - .../servlet/SessionCookieConfig.java | 22 - .../servlet/SessionTrackingMode.java | 10 - .../javax-4.0.1/servlet/WriteListener.java | 11 - .../servlet/annotation/HttpConstraint.java | 18 - .../annotation/HttpMethodConstraint.java | 19 - .../servlet/annotation/MultipartConfig.java | 19 - .../servlet/annotation/ServletSecurity.java | 33 - .../servlet/annotation/WebInitParam.java | 20 - .../servlet/annotation/WebServlet.java | 28 - .../descriptor/JspConfigDescriptor.java | 13 - .../JspPropertyGroupDescriptor.java | 21 - .../servlet/descriptor/TaglibDescriptor.java | 10 - .../javax-4.0.1/servlet/http/Cookie.java | 29 - .../javax-4.0.1/servlet/http/HttpServlet.java | 24 - .../servlet/http/HttpServletMapping.java | 13 - .../servlet/http/HttpServletRequest.java | 60 -- .../servlet/http/HttpServletResponse.java | 77 --- .../javax-4.0.1/servlet/http/HttpSession.java | 28 - .../servlet/http/HttpSessionContext.java | 12 - .../servlet/http/HttpUpgradeHandler.java | 11 - .../servlet/http/MappingMatch.java | 10 - .../stubs/javax-4.0.1/servlet/http/Part.java | 20 - .../javax-4.0.1/servlet/http/PushBuilder.java | 23 - .../servlet/http/WebConnection.java | 12 - 99 files changed, 5524 deletions(-) delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java delete mode 100644 java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Filter.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Registration.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java delete mode 100644 java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java deleted file mode 100644 index 1107f313a30..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/HeaderParams.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.auth0.jwt; - -/** - * Contains constants representing the JWT header parameter names. - */ -public final class HeaderParams { - - private HeaderParams() {} - - /** - * The algorithm used to sign a JWT. - */ - public static final String ALGORITHM = "alg"; - - /** - * The content type of the JWT. - */ - public static final String CONTENT_TYPE = "cty"; - - /** - * The media type of the JWT. - */ - public static final String TYPE = "typ"; - - /** - * The key ID of a JWT used to specify the key for signature validation. - */ - public static final String KEY_ID = "kid"; -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java deleted file mode 100644 index 696abe4001c..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWT.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.auth0.jwt; - -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.impl.JWTParser; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.interfaces.Verification; - -/** - * Exposes all the JWT functionalities. - */ -@SuppressWarnings("WeakerAccess") -public class JWT { - - private final JWTParser parser; - - /** - * Constructs a new instance of the JWT library. Use this if you need to decode many JWT - * tokens on the fly and do not wish to instantiate a new parser for each invocation. - */ - public JWT() { - parser = new JWTParser(); - } - - /** - * Decode a given Json Web Token. - *

    - * Note that this method doesn't verify the token's signature! - * Use it only if you trust the token or if you have already verified it. - * - * @param token with jwt format as string. - * @return a decoded JWT. - * @throws JWTDecodeException if any part of the token contained an invalid jwt - * or JSON format of each of the jwt parts. - */ - public DecodedJWT decodeJwt(String token) throws JWTDecodeException { - return new JWTDecoder(parser, token); - } - - /** - * Decode a given Json Web Token. - *

    - * Note that this method doesn't verify the token's signature! - * Use it only if you trust the token or if you have already verified it. - * - * @param token with jwt format as string. - * @return a decoded JWT. - * @throws JWTDecodeException if any part of the token contained an invalid jwt - * or JSON format of each of the jwt parts. - */ - public static DecodedJWT decode(String token) throws JWTDecodeException { - return new JWTDecoder(token); - } - - /** - * Returns a {@link Verification} builder with the algorithm to be used to validate token signature. - * - * @param algorithm that will be used to verify the token's signature. - * @return {@link Verification} builder - * @throws IllegalArgumentException if the provided algorithm is null. - */ - public static Verification require(Algorithm algorithm) { - return JWTVerifier.init(algorithm); - } - - /** - * Returns a Json Web Token builder used to create and sign tokens. - * - * @return a token builder. - */ - public static JWTCreator.Builder create() { - return JWTCreator.init(); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java deleted file mode 100644 index 0b0d21e4288..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTCreator.java +++ /dev/null @@ -1,631 +0,0 @@ -package com.auth0.jwt; - -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.JWTCreationException; -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.impl.*; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.MapperFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; - -import java.nio.charset.StandardCharsets; -import java.time.Instant; -import java.util.*; -import java.util.Map.Entry; - -/** - * The JWTCreator class holds the sign method to generate a complete JWT (with Signature) - * from a given Header and Payload content. - *

    - * This class is thread-safe. - */ -@SuppressWarnings("WeakerAccess") -public final class JWTCreator { - - private final Algorithm algorithm; - private final String headerJson; - private final String payloadJson; - - private static final ObjectMapper mapper; - private static final SimpleModule module; - - static { - module = new SimpleModule(); - module.addSerializer(PayloadClaimsHolder.class, new PayloadSerializer()); - module.addSerializer(HeaderClaimsHolder.class, new HeaderSerializer()); - - mapper = JsonMapper.builder() - .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) - .build() - .registerModule(module); - } - - private JWTCreator(Algorithm algorithm, Map headerClaims, Map payloadClaims) - throws JWTCreationException { - this.algorithm = algorithm; - try { - headerJson = mapper.writeValueAsString(new HeaderClaimsHolder(headerClaims)); - payloadJson = mapper.writeValueAsString(new PayloadClaimsHolder(payloadClaims)); - } catch (JsonProcessingException e) { - throw new JWTCreationException("Some of the Claims couldn't be converted to a valid JSON format.", e); - } - } - - - /** - * Initialize a JWTCreator instance. - * - * @return a JWTCreator.Builder instance to configure. - */ - static JWTCreator.Builder init() { - return new Builder(); - } - - /** - * The Builder class holds the Claims that defines the JWT to be created. - */ - public static class Builder { - private final Map payloadClaims; - private final Map headerClaims; - - Builder() { - this.payloadClaims = new LinkedHashMap<>(); - this.headerClaims = new LinkedHashMap<>(); - } - - /** - * Add specific Claims to set as the Header. - * If provided map is null then nothing is changed - * - * @param headerClaims the values to use as Claims in the token's Header. - * @return this same Builder instance. - */ - public Builder withHeader(Map headerClaims) { - if (headerClaims == null) { - return this; - } - - for (Map.Entry entry : headerClaims.entrySet()) { - if (entry.getValue() == null) { - this.headerClaims.remove(entry.getKey()); - } else { - this.headerClaims.put(entry.getKey(), entry.getValue()); - } - } - - return this; - } - - /** - * Add specific Claims to set as the Header. - * If provided json is null then nothing is changed - * - * @param headerClaimsJson the values to use as Claims in the token's Header. - * @return this same Builder instance. - * @throws IllegalArgumentException if json value has invalid structure - */ - public Builder withHeader(String headerClaimsJson) throws IllegalArgumentException { - if (headerClaimsJson == null) { - return this; - } - - try { - Map headerClaims = mapper.readValue(headerClaimsJson, LinkedHashMap.class); - return withHeader(headerClaims); - } catch (JsonProcessingException e) { - throw new IllegalArgumentException("Invalid header JSON", e); - } - } - - /** - * Add a specific Key Id ("kid") claim to the Header. - * If the {@link Algorithm} used to sign this token was instantiated with a KeyProvider, - * the 'kid' value will be taken from that provider and this one will be ignored. - * - * @param keyId the Key Id value. - * @return this same Builder instance. - */ - public Builder withKeyId(String keyId) { - this.headerClaims.put(HeaderParams.KEY_ID, keyId); - return this; - } - - /** - * Add a specific Issuer ("iss") claim to the Payload. - * - * @param issuer the Issuer value. - * @return this same Builder instance. - */ - public Builder withIssuer(String issuer) { - addClaim(RegisteredClaims.ISSUER, issuer); - return this; - } - - /** - * Add a specific Subject ("sub") claim to the Payload. - * - * @param subject the Subject value. - * @return this same Builder instance. - */ - public Builder withSubject(String subject) { - addClaim(RegisteredClaims.SUBJECT, subject); - return this; - } - - /** - * Add a specific Audience ("aud") claim to the Payload. - * - * @param audience the Audience value. - * @return this same Builder instance. - */ - public Builder withAudience(String... audience) { - addClaim(RegisteredClaims.AUDIENCE, audience); - return this; - } - - /** - * Add a specific Expires At ("exp") claim to the payload. The claim will be written as seconds since the epoch. - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param expiresAt the Expires At value. - * @return this same Builder instance. - */ - public Builder withExpiresAt(Date expiresAt) { - addClaim(RegisteredClaims.EXPIRES_AT, expiresAt); - return this; - } - - /** - * Add a specific Expires At ("exp") claim to the payload. The claim will be written as seconds since the epoch; - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param expiresAt the Expires At value. - * @return this same Builder instance. - */ - public Builder withExpiresAt(Instant expiresAt) { - addClaim(RegisteredClaims.EXPIRES_AT, expiresAt); - return this; - } - - /** - * Add a specific Not Before ("nbf") claim to the Payload. The claim will be written as seconds since the epoch; - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param notBefore the Not Before value. - * @return this same Builder instance. - */ - public Builder withNotBefore(Date notBefore) { - addClaim(RegisteredClaims.NOT_BEFORE, notBefore); - return this; - } - - /** - * Add a specific Not Before ("nbf") claim to the Payload. The claim will be written as seconds since the epoch; - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param notBefore the Not Before value. - * @return this same Builder instance. - */ - public Builder withNotBefore(Instant notBefore) { - addClaim(RegisteredClaims.NOT_BEFORE, notBefore); - return this; - } - - /** - * Add a specific Issued At ("iat") claim to the Payload. The claim will be written as seconds since the epoch; - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param issuedAt the Issued At value. - * @return this same Builder instance. - */ - public Builder withIssuedAt(Date issuedAt) { - addClaim(RegisteredClaims.ISSUED_AT, issuedAt); - return this; - } - - /** - * Add a specific Issued At ("iat") claim to the Payload. The claim will be written as seconds since the epoch; - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param issuedAt the Issued At value. - * @return this same Builder instance. - */ - public Builder withIssuedAt(Instant issuedAt) { - addClaim(RegisteredClaims.ISSUED_AT, issuedAt); - return this; - } - - /** - * Add a specific JWT Id ("jti") claim to the Payload. - * - * @param jwtId the Token Id value. - * @return this same Builder instance. - */ - public Builder withJWTId(String jwtId) { - addClaim(RegisteredClaims.JWT_ID, jwtId); - return this; - } - - /** - * Add a custom Claim value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Boolean value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Integer value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Long value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Double value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, String value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. The claim will be written as seconds since the epoch. - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Date value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Claim value. The claim will be written as seconds since the epoch. - * Milliseconds will be truncated by rounding down to the nearest second. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withClaim(String name, Instant value) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, value); - return this; - } - - /** - * Add a custom Map Claim with the given items. - *

    - * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types - * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, - * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. - * {@linkplain List}s can contain null elements. - * - * @param name the Claim's name. - * @param map the Claim's key-values. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null, or if the map contents does not validate. - */ - public Builder withClaim(String name, Map map) throws IllegalArgumentException { - assertNonNull(name); - // validate map contents - if (map != null && !validateClaim(map)) { - throw new IllegalArgumentException("Expected map containing Map, List, Boolean, Integer, " - + "Long, Double, String and Date"); - } - addClaim(name, map); - return this; - } - - /** - * Add a custom List Claim with the given items. - *

    - * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types - * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, - * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. - * {@linkplain List}s can contain null elements. - * - * @param name the Claim's name. - * @param list the Claim's list of values. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null, or if the list contents does not validate. - */ - public Builder withClaim(String name, List list) throws IllegalArgumentException { - assertNonNull(name); - // validate list contents - if (list != null && !validateClaim(list)) { - throw new IllegalArgumentException("Expected list containing Map, List, Boolean, Integer, " - + "Long, Double, String and Date"); - } - addClaim(name, list); - return this; - } - - /** - * Add a custom claim with null value. - * - * @param name the Claim's name. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null - */ - public Builder withNullClaim(String name) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, null); - return this; - } - - /** - * Add a custom Array Claim with the given items. - * - * @param name the Claim's name. - * @param items the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withArrayClaim(String name, String[] items) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, items); - return this; - } - - /** - * Add a custom Array Claim with the given items. - * - * @param name the Claim's name. - * @param items the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null. - */ - public Builder withArrayClaim(String name, Integer[] items) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, items); - return this; - } - - /** - * Add a custom Array Claim with the given items. - * - * @param name the Claim's name. - * @param items the Claim's value. - * @return this same Builder instance. - * @throws IllegalArgumentException if the name is null - */ - public Builder withArrayClaim(String name, Long[] items) throws IllegalArgumentException { - assertNonNull(name); - addClaim(name, items); - return this; - } - - /** - * Add specific Claims to set as the Payload. If the provided map is null then - * nothing is changed. - *

    - * Accepted types are {@linkplain Map} and {@linkplain List} with basic types - * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, - * {@linkplain String} and {@linkplain Date}. - * {@linkplain Map}s and {@linkplain List}s can contain null elements. - *

    - * - *

    - * If any of the claims are invalid, none will be added. - *

    - * - * @param payloadClaims the values to use as Claims in the token's payload. - * @return this same Builder instance. - * @throws IllegalArgumentException if any of the claim keys or null, - * or if the values are not of a supported type. - */ - public Builder withPayload(Map payloadClaims) throws IllegalArgumentException { - if (payloadClaims == null) { - return this; - } - - if (!validatePayload(payloadClaims)) { - throw new IllegalArgumentException("Claim values must only be of types Map, List, Boolean, Integer, " - + "Long, Double, String, Date, Instant, and Null"); - } - - // add claims only after validating all claims so as not to corrupt the claims map of this builder - for (Map.Entry entry : payloadClaims.entrySet()) { - addClaim(entry.getKey(), entry.getValue()); - } - - return this; - } - - /** - * Add specific Claims to set as the Payload. If the provided json is null then - * nothing is changed. - * - *

    - * If any of the claims are invalid, none will be added. - *

    - * - * @param payloadClaimsJson the values to use as Claims in the token's payload. - * @return this same Builder instance. - * @throws IllegalArgumentException if any of the claim keys or null, - * or if the values are not of a supported type, - * or if json value has invalid structure. - */ - public Builder withPayload(String payloadClaimsJson) throws IllegalArgumentException { - if (payloadClaimsJson == null) { - return this; - } - - try { - Map payloadClaims = mapper.readValue(payloadClaimsJson, LinkedHashMap.class); - return withPayload(payloadClaims); - } catch (JsonProcessingException e) { - throw new IllegalArgumentException("Invalid payload JSON", e); - } - } - - private boolean validatePayload(Map payload) { - for (Map.Entry entry : payload.entrySet()) { - String key = entry.getKey(); - assertNonNull(key); - - Object value = entry.getValue(); - if (value instanceof List && !validateClaim((List) value)) { - return false; - } else if (value instanceof Map && !validateClaim((Map) value)) { - return false; - } else if (!isSupportedType(value)) { - return false; - } - } - return true; - } - - private static boolean validateClaim(Map map) { - // do not accept null values in maps - for (Entry entry : map.entrySet()) { - Object value = entry.getValue(); - if (!isSupportedType(value)) { - return false; - } - - if (!(entry.getKey() instanceof String)) { - return false; - } - } - return true; - } - - private static boolean validateClaim(List list) { - // accept null values in list - for (Object object : list) { - if (!isSupportedType(object)) { - return false; - } - } - return true; - } - - private static boolean isSupportedType(Object value) { - if (value instanceof List) { - return validateClaim((List) value); - } else if (value instanceof Map) { - return validateClaim((Map) value); - } else { - return isBasicType(value); - } - } - - private static boolean isBasicType(Object value) { - if (value == null) { - return true; - } else { - Class c = value.getClass(); - - if (c.isArray()) { - return c == Integer[].class || c == Long[].class || c == String[].class; - } - return c == String.class || c == Integer.class || c == Long.class || c == Double.class - || c == Date.class || c == Instant.class || c == Boolean.class; - } - } - - /** - * Creates a new JWT and signs is with the given algorithm. - * - * @param algorithm used to sign the JWT - * @return a new JWT token - * @throws IllegalArgumentException if the provided algorithm is null. - * @throws JWTCreationException if the claims could not be converted to a valid JSON - * or there was a problem with the signing key. - */ - public String sign(Algorithm algorithm) throws IllegalArgumentException, JWTCreationException { - if (algorithm == null) { - throw new IllegalArgumentException("The Algorithm cannot be null."); - } - headerClaims.put(HeaderParams.ALGORITHM, algorithm.getName()); - if (!headerClaims.containsKey(HeaderParams.TYPE)) { - headerClaims.put(HeaderParams.TYPE, "JWT"); - } - String signingKeyId = algorithm.getSigningKeyId(); - if (signingKeyId != null) { - withKeyId(signingKeyId); - } - return new JWTCreator(algorithm, headerClaims, payloadClaims).sign(); - } - - private void assertNonNull(String name) { - if (name == null) { - throw new IllegalArgumentException("The Custom Claim's name can't be null."); - } - } - - private void addClaim(String name, Object value) { - payloadClaims.put(name, value); - } - } - - private String sign() throws SignatureGenerationException { - String header = Base64.getUrlEncoder().withoutPadding() - .encodeToString(headerJson.getBytes(StandardCharsets.UTF_8)); - String payload = Base64.getUrlEncoder().withoutPadding() - .encodeToString(payloadJson.getBytes(StandardCharsets.UTF_8)); - - byte[] signatureBytes = algorithm.sign(header.getBytes(StandardCharsets.UTF_8), - payload.getBytes(StandardCharsets.UTF_8)); - String signature = Base64.getUrlEncoder().withoutPadding().encodeToString((signatureBytes)); - - return String.format("%s.%s.%s", header, payload, signature); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java deleted file mode 100644 index cc283095f25..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTDecoder.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.auth0.jwt; - -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.impl.JWTParser; -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.interfaces.Header; -import com.auth0.jwt.interfaces.Payload; - -import java.io.Serializable; -import java.nio.charset.StandardCharsets; -import java.time.Instant; -import java.util.Base64; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * The JWTDecoder class holds the decode method to parse a given JWT token into it's JWT representation. - *

    - * This class is thread-safe. - */ -@SuppressWarnings("WeakerAccess") -final class JWTDecoder implements DecodedJWT, Serializable { - - private static final long serialVersionUID = 1873362438023312895L; - - private final String[] parts; - private final Header header; - private final Payload payload; - - JWTDecoder(String jwt) throws JWTDecodeException { - this(new JWTParser(), jwt); - } - - JWTDecoder(JWTParser converter, String jwt) throws JWTDecodeException { - parts = TokenUtils.splitToken(jwt); - String headerJson; - String payloadJson; - try { - headerJson = new String(Base64.getUrlDecoder().decode(parts[0]), StandardCharsets.UTF_8); - payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); - } catch (NullPointerException e) { - throw new JWTDecodeException("The UTF-8 Charset isn't initialized.", e); - } catch (IllegalArgumentException e) { - throw new JWTDecodeException("The input is not a valid base 64 encoded string.", e); - } - header = converter.parseHeader(headerJson); - payload = converter.parsePayload(payloadJson); - } - - @Override - public String getAlgorithm() { - return header.getAlgorithm(); - } - - @Override - public String getType() { - return header.getType(); - } - - @Override - public String getContentType() { - return header.getContentType(); - } - - @Override - public String getKeyId() { - return header.getKeyId(); - } - - @Override - public Claim getHeaderClaim(String name) { - return header.getHeaderClaim(name); - } - - @Override - public String getIssuer() { - return payload.getIssuer(); - } - - @Override - public String getSubject() { - return payload.getSubject(); - } - - @Override - public List getAudience() { - return payload.getAudience(); - } - - @Override - public Date getExpiresAt() { - return payload.getExpiresAt(); - } - - @Override - public Instant getExpiresAtAsInstant() { - return payload.getExpiresAtAsInstant(); - } - - @Override - public Date getNotBefore() { - return payload.getNotBefore(); - } - - @Override - public Instant getNotBeforeAsInstant() { - return payload.getNotBeforeAsInstant(); - } - - @Override - public Date getIssuedAt() { - return payload.getIssuedAt(); - } - - @Override - public Instant getIssuedAtAsInstant() { - return payload.getIssuedAtAsInstant(); - } - - @Override - public String getId() { - return payload.getId(); - } - - @Override - public Claim getClaim(String name) { - return payload.getClaim(name); - } - - @Override - public Map getClaims() { - return payload.getClaims(); - } - - @Override - public String getHeader() { - return parts[0]; - } - - @Override - public String getPayload() { - return parts[1]; - } - - @Override - public String getSignature() { - return parts[2]; - } - - @Override - public String getToken() { - return String.format("%s.%s.%s", parts[0], parts[1], parts[2]); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java deleted file mode 100644 index 6cec2026cab..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/JWTVerifier.java +++ /dev/null @@ -1,493 +0,0 @@ -package com.auth0.jwt; - -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.*; -import com.auth0.jwt.impl.JWTParser; -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.impl.ExpectedCheckHolder; -import com.auth0.jwt.interfaces.Verification; - -import java.time.Clock; -import java.time.Duration; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.function.BiPredicate; - -/** - * The JWTVerifier class holds the verify method to assert that a given Token has not only a proper JWT format, - * but also its signature matches. - *

    - * This class is thread-safe. - * - * @see com.auth0.jwt.interfaces.JWTVerifier - */ -public final class JWTVerifier implements com.auth0.jwt.interfaces.JWTVerifier { - private final Algorithm algorithm; - final List expectedChecks; - private final JWTParser parser; - - JWTVerifier(Algorithm algorithm, List expectedChecks) { - this.algorithm = algorithm; - this.expectedChecks = Collections.unmodifiableList(expectedChecks); - this.parser = new JWTParser(); - } - - /** - * Initialize a {@link Verification} instance using the given Algorithm. - * - * @param algorithm the Algorithm to use on the JWT verification. - * @return a {@link Verification} instance to configure. - * @throws IllegalArgumentException if the provided algorithm is null. - */ - static Verification init(Algorithm algorithm) throws IllegalArgumentException { - return new BaseVerification(algorithm); - } - - /** - * {@link Verification} implementation that accepts all the expected Claim values for verification, and - * builds a {@link com.auth0.jwt.interfaces.JWTVerifier} used to verify a JWT's signature and expected claims. - * - * Note that this class is not thread-safe. Calling {@link #build()} returns an instance of - * {@link com.auth0.jwt.interfaces.JWTVerifier} which can be reused. - */ - public static class BaseVerification implements Verification { - private final Algorithm algorithm; - private final List expectedChecks; - private long defaultLeeway; - private final Map customLeeways; - private boolean ignoreIssuedAt; - private Clock clock; - - BaseVerification(Algorithm algorithm) throws IllegalArgumentException { - if (algorithm == null) { - throw new IllegalArgumentException("The Algorithm cannot be null."); - } - - this.algorithm = algorithm; - this.expectedChecks = new ArrayList<>(); - this.customLeeways = new HashMap<>(); - this.defaultLeeway = 0; - } - - @Override - public Verification withIssuer(String... issuer) { - List value = isNullOrEmpty(issuer) ? null : Arrays.asList(issuer); - addCheck(RegisteredClaims.ISSUER, ((claim, decodedJWT) -> { - if (verifyNull(claim, value)) { - return true; - } - if (value == null || !value.contains(claim.asString())) { - throw new IncorrectClaimException( - "The Claim 'iss' value doesn't match the required issuer.", RegisteredClaims.ISSUER, claim); - } - return true; - })); - return this; - } - - @Override - public Verification withSubject(String subject) { - addCheck(RegisteredClaims.SUBJECT, (claim, decodedJWT) -> - verifyNull(claim, subject) || subject.equals(claim.asString())); - return this; - } - - @Override - public Verification withAudience(String... audience) { - List value = isNullOrEmpty(audience) ? null : Arrays.asList(audience); - addCheck(RegisteredClaims.AUDIENCE, ((claim, decodedJWT) -> { - if (verifyNull(claim, value)) { - return true; - } - if (!assertValidAudienceClaim(decodedJWT.getAudience(), value, true)) { - throw new IncorrectClaimException("The Claim 'aud' value doesn't contain the required audience.", - RegisteredClaims.AUDIENCE, claim); - } - return true; - })); - return this; - } - - @Override - public Verification withAnyOfAudience(String... audience) { - List value = isNullOrEmpty(audience) ? null : Arrays.asList(audience); - addCheck(RegisteredClaims.AUDIENCE, ((claim, decodedJWT) -> { - if (verifyNull(claim, value)) { - return true; - } - if (!assertValidAudienceClaim(decodedJWT.getAudience(), value, false)) { - throw new IncorrectClaimException("The Claim 'aud' value doesn't contain the required audience.", - RegisteredClaims.AUDIENCE, claim); - } - return true; - })); - return this; - } - - @Override - public Verification acceptLeeway(long leeway) throws IllegalArgumentException { - assertPositive(leeway); - this.defaultLeeway = leeway; - return this; - } - - @Override - public Verification acceptExpiresAt(long leeway) throws IllegalArgumentException { - assertPositive(leeway); - customLeeways.put(RegisteredClaims.EXPIRES_AT, leeway); - return this; - } - - @Override - public Verification acceptNotBefore(long leeway) throws IllegalArgumentException { - assertPositive(leeway); - customLeeways.put(RegisteredClaims.NOT_BEFORE, leeway); - return this; - } - - @Override - public Verification acceptIssuedAt(long leeway) throws IllegalArgumentException { - assertPositive(leeway); - customLeeways.put(RegisteredClaims.ISSUED_AT, leeway); - return this; - } - - @Override - public Verification ignoreIssuedAt() { - this.ignoreIssuedAt = true; - return this; - } - - @Override - public Verification withJWTId(String jwtId) { - addCheck(RegisteredClaims.JWT_ID, ((claim, decodedJWT) -> - verifyNull(claim, jwtId) || jwtId.equals(claim.asString()))); - return this; - } - - @Override - public Verification withClaimPresence(String name) throws IllegalArgumentException { - assertNonNull(name); - //since addCheck already checks presence, we just return true - withClaim(name, ((claim, decodedJWT) -> true)); - return this; - } - - @Override - public Verification withNullClaim(String name) throws IllegalArgumentException { - assertNonNull(name); - withClaim(name, ((claim, decodedJWT) -> claim.isNull())); - return this; - } - - @Override - public Verification withClaim(String name, Boolean value) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) - || value.equals(claim.asBoolean()))); - return this; - } - - @Override - public Verification withClaim(String name, Integer value) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) - || value.equals(claim.asInt()))); - return this; - } - - @Override - public Verification withClaim(String name, Long value) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) - || value.equals(claim.asLong()))); - return this; - } - - @Override - public Verification withClaim(String name, Double value) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) - || value.equals(claim.asDouble()))); - return this; - } - - @Override - public Verification withClaim(String name, String value) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, value) - || value.equals(claim.asString()))); - return this; - } - - @Override - public Verification withClaim(String name, Date value) throws IllegalArgumentException { - return withClaim(name, value != null ? value.toInstant() : null); - } - - @Override - public Verification withClaim(String name, Instant value) throws IllegalArgumentException { - assertNonNull(name); - // Since date-time claims are serialized as epoch seconds, - // we need to compare them with only seconds-granularity - addCheck(name, - ((claim, decodedJWT) -> verifyNull(claim, value) - || value.truncatedTo(ChronoUnit.SECONDS).equals(claim.asInstant()))); - return this; - } - - @Override - public Verification withClaim(String name, BiPredicate predicate) - throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, predicate) - || predicate.test(claim, decodedJWT))); - return this; - } - - @Override - public Verification withArrayClaim(String name, String... items) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) - || assertValidCollectionClaim(claim, items))); - return this; - } - - @Override - public Verification withArrayClaim(String name, Integer... items) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) - || assertValidCollectionClaim(claim, items))); - return this; - } - - @Override - public Verification withArrayClaim(String name, Long... items) throws IllegalArgumentException { - assertNonNull(name); - addCheck(name, ((claim, decodedJWT) -> verifyNull(claim, items) - || assertValidCollectionClaim(claim, items))); - return this; - } - - @Override - public JWTVerifier build() { - return this.build(Clock.systemUTC()); - } - - /** - * Creates a new and reusable instance of the JWTVerifier with the configuration already provided. - * ONLY FOR TEST PURPOSES. - * - * @param clock the instance that will handle the current time. - * @return a new JWTVerifier instance with a custom {@link java.time.Clock} - */ - public JWTVerifier build(Clock clock) { - this.clock = clock; - addMandatoryClaimChecks(); - return new JWTVerifier(algorithm, expectedChecks); - } - - /** - * Fetches the Leeway set for claim or returns the {@link BaseVerification#defaultLeeway}. - * - * @param name Claim for which leeway is fetched - * @return Leeway value set for the claim - */ - public long getLeewayFor(String name) { - return customLeeways.getOrDefault(name, defaultLeeway); - } - - private void addMandatoryClaimChecks() { - long expiresAtLeeway = getLeewayFor(RegisteredClaims.EXPIRES_AT); - long notBeforeLeeway = getLeewayFor(RegisteredClaims.NOT_BEFORE); - long issuedAtLeeway = getLeewayFor(RegisteredClaims.ISSUED_AT); - - expectedChecks.add(constructExpectedCheck(RegisteredClaims.EXPIRES_AT, (claim, decodedJWT) -> - assertValidInstantClaim(RegisteredClaims.EXPIRES_AT, claim, expiresAtLeeway, true))); - expectedChecks.add(constructExpectedCheck(RegisteredClaims.NOT_BEFORE, (claim, decodedJWT) -> - assertValidInstantClaim(RegisteredClaims.NOT_BEFORE, claim, notBeforeLeeway, false))); - if (!ignoreIssuedAt) { - expectedChecks.add(constructExpectedCheck(RegisteredClaims.ISSUED_AT, (claim, decodedJWT) -> - assertValidInstantClaim(RegisteredClaims.ISSUED_AT, claim, issuedAtLeeway, false))); - } - } - - private boolean assertValidCollectionClaim(Claim claim, Object[] expectedClaimValue) { - List claimArr; - Object[] claimAsObject = claim.as(Object[].class); - - // Jackson uses 'natural' mapping which uses Integer if value fits in 32 bits. - if (expectedClaimValue instanceof Long[]) { - // convert Integers to Longs for comparison with equals - claimArr = new ArrayList<>(claimAsObject.length); - for (Object cao : claimAsObject) { - if (cao instanceof Integer) { - claimArr.add(((Integer) cao).longValue()); - } else { - claimArr.add(cao); - } - } - } else { - claimArr = Arrays.asList(claim.as(Object[].class)); - } - List valueArr = Arrays.asList(expectedClaimValue); - return claimArr.containsAll(valueArr); - } - - private boolean assertValidInstantClaim(String claimName, Claim claim, long leeway, boolean shouldBeFuture) { - Instant claimVal = claim.asInstant(); - Instant now = clock.instant().truncatedTo(ChronoUnit.SECONDS); - boolean isValid; - if (shouldBeFuture) { - isValid = assertInstantIsFuture(claimVal, leeway, now); - if (!isValid) { - throw new TokenExpiredException(String.format("The Token has expired on %s.", claimVal), claimVal); - } - } else { - isValid = assertInstantIsLessThanOrEqualToNow(claimVal, leeway, now); - if (!isValid) { - throw new IncorrectClaimException( - String.format("The Token can't be used before %s.", claimVal), claimName, claim); - } - } - return true; - } - - private boolean assertInstantIsFuture(Instant claimVal, long leeway, Instant now) { - return claimVal == null || now.minus(Duration.ofSeconds(leeway)).isBefore(claimVal); - } - - private boolean assertInstantIsLessThanOrEqualToNow(Instant claimVal, long leeway, Instant now) { - return !(claimVal != null && now.plus(Duration.ofSeconds(leeway)).isBefore(claimVal)); - } - - private boolean assertValidAudienceClaim( - List audience, - List values, - boolean shouldContainAll - ) { - return !(audience == null || (shouldContainAll && !audience.containsAll(values)) - || (!shouldContainAll && Collections.disjoint(audience, values))); - } - - private void assertPositive(long leeway) { - if (leeway < 0) { - throw new IllegalArgumentException("Leeway value can't be negative."); - } - } - - private void assertNonNull(String name) { - if (name == null) { - throw new IllegalArgumentException("The Custom Claim's name can't be null."); - } - } - - private void addCheck(String name, BiPredicate predicate) { - expectedChecks.add(constructExpectedCheck(name, (claim, decodedJWT) -> { - if (claim.isMissing()) { - throw new MissingClaimException(name); - } - return predicate.test(claim, decodedJWT); - })); - } - - private ExpectedCheckHolder constructExpectedCheck(String claimName, BiPredicate check) { - return new ExpectedCheckHolder() { - @Override - public String getClaimName() { - return claimName; - } - - @Override - public boolean verify(Claim claim, DecodedJWT decodedJWT) { - return check.test(claim, decodedJWT); - } - }; - } - - private boolean verifyNull(Claim claim, Object value) { - return value == null && claim.isNull(); - } - - private boolean isNullOrEmpty(String[] args) { - if (args == null || args.length == 0) { - return true; - } - boolean isAllNull = true; - for (String arg : args) { - if (arg != null) { - isAllNull = false; - break; - } - } - return isAllNull; - } - } - - - /** - * Perform the verification against the given Token, using any previous configured options. - * - * @param token to verify. - * @return a verified and decoded JWT. - * @throws AlgorithmMismatchException if the algorithm stated in the token's header is not equal to - * the one defined in the {@link JWTVerifier}. - * @throws SignatureVerificationException if the signature is invalid. - * @throws TokenExpiredException if the token has expired. - * @throws MissingClaimException if a claim to be verified is missing. - * @throws IncorrectClaimException if a claim contained a different value than the expected one. - */ - @Override - public DecodedJWT verify(String token) throws JWTVerificationException { - DecodedJWT jwt = new JWTDecoder(parser, token); - return verify(jwt); - } - - /** - * Perform the verification against the given decoded JWT, using any previous configured options. - * - * @param jwt to verify. - * @return a verified and decoded JWT. - * @throws AlgorithmMismatchException if the algorithm stated in the token's header is not equal to - * the one defined in the {@link JWTVerifier}. - * @throws SignatureVerificationException if the signature is invalid. - * @throws TokenExpiredException if the token has expired. - * @throws MissingClaimException if a claim to be verified is missing. - * @throws IncorrectClaimException if a claim contained a different value than the expected one. - */ - @Override - public DecodedJWT verify(DecodedJWT jwt) throws JWTVerificationException { - verifyAlgorithm(jwt, algorithm); - algorithm.verify(jwt); - verifyClaims(jwt, expectedChecks); - return jwt; - } - - private void verifyAlgorithm(DecodedJWT jwt, Algorithm expectedAlgorithm) throws AlgorithmMismatchException { - if (!expectedAlgorithm.getName().equals(jwt.getAlgorithm())) { - throw new AlgorithmMismatchException( - "The provided Algorithm doesn't match the one defined in the JWT's Header."); - } - } - - private void verifyClaims(DecodedJWT jwt, List expectedChecks) - throws TokenExpiredException, InvalidClaimException { - for (ExpectedCheckHolder expectedCheck : expectedChecks) { - boolean isValid; - String claimName = expectedCheck.getClaimName(); - Claim claim = jwt.getClaim(claimName); - - isValid = expectedCheck.verify(claim, jwt); - - if (!isValid) { - throw new IncorrectClaimException( - String.format("The Claim '%s' value doesn't match the required one.", claimName), - claimName, - claim - ); - } - } - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java deleted file mode 100644 index c55097169a2..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/RegisteredClaims.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.auth0.jwt; - -/** - * Contains constants representing the name of the Registered Claim Names as defined in Section 4.1 of - * RFC 7529 - */ -public final class RegisteredClaims { - - private RegisteredClaims() { - } - - /** - * The "iss" (issuer) claim identifies the principal that issued the JWT. - * Refer RFC 7529 Section 4.1.1 - */ - public static final String ISSUER = "iss"; - - /** - * The "sub" (subject) claim identifies the principal that is the subject of the JWT. - * Refer RFC 7529 Section 4.1.2 - */ - public static final String SUBJECT = "sub"; - - /** - * The "aud" (audience) claim identifies the recipients that the JWT is intended for. - * Refer RFC 7529 Section 4.1.3 - */ - public static final String AUDIENCE = "aud"; - - /** - * The "exp" (expiration time) claim identifies the expiration time on or after which the JWT MUST NOT be - * accepted for processing. - * Refer RFC 7529 Section 4.1.4 - */ - public static final String EXPIRES_AT = "exp"; - - /** - * The "nbf" (not before) claim identifies the time before which the JWT MUST NOT be accepted for processing. - * Refer RFC 7529 Section 4.1.5 - */ - public static final String NOT_BEFORE = "nbf"; - - /** - * The "iat" (issued at) claim identifies the time at which the JWT was issued. - * Refer RFC 7529 Section 4.1.6 - */ - public static final String ISSUED_AT = "iat"; - - /** - * The "jti" (JWT ID) claim provides a unique identifier for the JWT. - * Refer RFC 7529 Section 4.1.7 - */ - public static final String JWT_ID = "jti"; - -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java deleted file mode 100644 index e62b9832c8e..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/TokenUtils.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.auth0.jwt; - -import com.auth0.jwt.exceptions.JWTDecodeException; - -abstract class TokenUtils { - - /** - * Splits the given token on the "." chars into a String array with 3 parts. - * - * @param token the string to split. - * @return the array representing the 3 parts of the token. - * @throws JWTDecodeException if the Token doesn't have 3 parts. - */ - static String[] splitToken(String token) throws JWTDecodeException { - if (token == null) { - throw new JWTDecodeException("The token is null."); - } - - char delimiter = '.'; - - int firstPeriodIndex = token.indexOf(delimiter); - if (firstPeriodIndex == -1) { - throw wrongNumberOfParts(0); - } - - int secondPeriodIndex = token.indexOf(delimiter, firstPeriodIndex + 1); - if (secondPeriodIndex == -1) { - throw wrongNumberOfParts(2); - } - - // too many ? - if (token.indexOf(delimiter, secondPeriodIndex + 1) != -1) { - throw wrongNumberOfParts("> 3"); - } - - String[] parts = new String[3]; - parts[0] = token.substring(0, firstPeriodIndex); - parts[1] = token.substring(firstPeriodIndex + 1, secondPeriodIndex); - parts[2] = token.substring(secondPeriodIndex + 1); - - return parts; - } - - private static JWTDecodeException wrongNumberOfParts(Object partCount) { - return new JWTDecodeException(String.format("The token was expected to have 3 parts, but got %s.", partCount)); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java deleted file mode 100644 index 27d799094d0..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/Algorithm.java +++ /dev/null @@ -1,404 +0,0 @@ -package com.auth0.jwt.algorithms; - -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.exceptions.SignatureVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.interfaces.ECDSAKeyProvider; -import com.auth0.jwt.interfaces.RSAKeyProvider; - -import java.security.interfaces.*; - -/** - * The Algorithm class represents an algorithm to be used in the Signing or Verification process of a Token. - *

    - * This class and its subclasses are thread-safe. - */ -@SuppressWarnings("WeakerAccess") -public abstract class Algorithm { - - private final String name; - private final String description; - - /** - * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid RSA256 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm RSA256(RSAKeyProvider keyProvider) throws IllegalArgumentException { - return new RSAAlgorithm("RS256", "SHA256withRSA", keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid RSA256 Algorithm. - * @throws IllegalArgumentException if both provided Keys are null. - */ - public static Algorithm RSA256(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { - return RSA256(RSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". - * - * @param key the key to use in the verify or signing instance. - * @return a valid RSA256 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm RSA256(RSAKey key) throws IllegalArgumentException { - RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; - RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; - return RSA256(publicKey, privateKey); - } - - /** - * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid RSA384 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm RSA384(RSAKeyProvider keyProvider) throws IllegalArgumentException { - return new RSAAlgorithm("RS384", "SHA384withRSA", keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid RSA384 Algorithm. - * @throws IllegalArgumentException if both provided Keys are null. - */ - public static Algorithm RSA384(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { - return RSA384(RSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". - * - * @param key the key to use in the verify or signing instance. - * @return a valid RSA384 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm RSA384(RSAKey key) throws IllegalArgumentException { - RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; - RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; - return RSA384(publicKey, privateKey); - } - - /** - * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid RSA512 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm RSA512(RSAKeyProvider keyProvider) throws IllegalArgumentException { - return new RSAAlgorithm("RS512", "SHA512withRSA", keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid RSA512 Algorithm. - * @throws IllegalArgumentException if both provided Keys are null. - */ - public static Algorithm RSA512(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { - return RSA512(RSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". - * - * @param key the key to use in the verify or signing instance. - * @return a valid RSA512 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm RSA512(RSAKey key) throws IllegalArgumentException { - RSAPublicKey publicKey = key instanceof RSAPublicKey ? (RSAPublicKey) key : null; - RSAPrivateKey privateKey = key instanceof RSAPrivateKey ? (RSAPrivateKey) key : null; - return RSA512(publicKey, privateKey); - } - - /** - * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 256 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC256 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC256(String secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS256", "HmacSHA256", secret); - } - - /** - * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 256 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC256 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC256(byte[] secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS256", "HmacSHA256", secret); - } - - /** - * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 384 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC384 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC384(String secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS384", "HmacSHA384", secret); - } - - /** - * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 384 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC384 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC384(byte[] secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS384", "HmacSHA384", secret); - } - - /** - * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 512 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC512 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC512(String secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS512", "HmacSHA512", secret); - } - - /** - * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". - * - * @param secret the secret bytes to use in the verify or signing instance. - * Ensure the length of the secret is at least 512 bit long - * See HMAC Key Length and Security in README - * @return a valid HMAC512 Algorithm. - * @throws IllegalArgumentException if the provided Secret is null. - */ - public static Algorithm HMAC512(byte[] secret) throws IllegalArgumentException { - return new HMACAlgorithm("HS512", "HmacSHA512", secret); - } - - - /** - * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid ECDSA256 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm ECDSA256(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { - return new ECDSAAlgorithm("ES256", "SHA256withECDSA", 32, keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid ECDSA256 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA256(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { - return ECDSA256(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". - * - * @param key the key to use in the verify or signing instance. - * @return a valid ECDSA256 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA256(ECKey key) throws IllegalArgumentException { - ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; - ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; - return ECDSA256(publicKey, privateKey); - } - - /** - * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid ECDSA384 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm ECDSA384(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { - return new ECDSAAlgorithm("ES384", "SHA384withECDSA", 48, keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid ECDSA384 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA384(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { - return ECDSA384(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". - * - * @param key the key to use in the verify or signing instance. - * @return a valid ECDSA384 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA384(ECKey key) throws IllegalArgumentException { - ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; - ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; - return ECDSA384(publicKey, privateKey); - } - - /** - * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". - * - * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. - * @return a valid ECDSA512 Algorithm. - * @throws IllegalArgumentException if the Key Provider is null. - */ - public static Algorithm ECDSA512(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { - return new ECDSAAlgorithm("ES512", "SHA512withECDSA", 66, keyProvider); - } - - /** - * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". - * - * @param publicKey the key to use in the verify instance. - * @param privateKey the key to use in the signing instance. - * @return a valid ECDSA512 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA512(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { - return ECDSA512(ECDSAAlgorithm.providerForKeys(publicKey, privateKey)); - } - - /** - * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". - * - * @param key the key to use in the verify or signing instance. - * @return a valid ECDSA512 Algorithm. - * @throws IllegalArgumentException if the provided Key is null. - */ - public static Algorithm ECDSA512(ECKey key) throws IllegalArgumentException { - ECPublicKey publicKey = key instanceof ECPublicKey ? (ECPublicKey) key : null; - ECPrivateKey privateKey = key instanceof ECPrivateKey ? (ECPrivateKey) key : null; - return ECDSA512(publicKey, privateKey); - } - - - public static Algorithm none() { - return new NoneAlgorithm(); - } - - protected Algorithm(String name, String description) { - this.name = name; - this.description = description; - } - - /** - * Getter for the Id of the Private Key used to sign the tokens. - * This is usually specified as the `kid` claim in the Header. - * - * @return the Key Id that identifies the Signing Key or null if it's not specified. - */ - public String getSigningKeyId() { - return null; - } - - /** - * Getter for the name of this Algorithm, as defined in the JWT Standard. i.e. "HS256" - * - * @return the algorithm name. - */ - public String getName() { - return name; - } - - /** - * Getter for the description of this Algorithm, - * required when instantiating a Mac or Signature object. i.e. "HmacSHA256" - * - * @return the algorithm description. - */ - String getDescription() { - return description; - } - - @Override - public String toString() { - return description; - } - - /** - * Verify the given token using this Algorithm instance. - * - * @param jwt the already decoded JWT that it's going to be verified. - * @throws SignatureVerificationException if the Token's Signature is invalid, - * meaning that it doesn't match the signatureBytes, - * or if the Key is invalid. - */ - public abstract void verify(DecodedJWT jwt) throws SignatureVerificationException; - - /** - * Sign the given content using this Algorithm instance. - * - * @param headerBytes an array of bytes representing the base64 encoded header content - * to be verified against the signature. - * @param payloadBytes an array of bytes representing the base64 encoded payload content - * to be verified against the signature. - * @return the signature in a base64 encoded array of bytes - * @throws SignatureGenerationException if the Key is invalid. - */ - public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { - // default implementation; keep around until sign(byte[]) method is removed - byte[] contentBytes = new byte[headerBytes.length + 1 + payloadBytes.length]; - - System.arraycopy(headerBytes, 0, contentBytes, 0, headerBytes.length); - contentBytes[headerBytes.length] = (byte) '.'; - System.arraycopy(payloadBytes, 0, contentBytes, headerBytes.length + 1, payloadBytes.length); - - return sign(contentBytes); - } - - /** - * Sign the given content using this Algorithm instance. - * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} - * - * @param contentBytes an array of bytes representing the base64 encoded content - * to be verified against the signature. - * @return the signature in a base64 encoded array of bytes - * @throws SignatureGenerationException if the Key is invalid. - */ - - public abstract byte[] sign(byte[] contentBytes) throws SignatureGenerationException; - -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java deleted file mode 100644 index 7b8c5c2ac57..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/CryptoHelper.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.auth0.jwt.algorithms; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import java.nio.charset.StandardCharsets; -import java.security.*; - -/** - * Class used to perform the signature hash calculations. - *

    - * This class is thread-safe. - */ -class CryptoHelper { - - private static final byte JWT_PART_SEPARATOR = (byte) 46; - - /** - * Verify signature for JWT header and payload. - * - * @param algorithm algorithm name. - * @param secretBytes algorithm secret. - * @param header JWT header. - * @param payload JWT payload. - * @param signatureBytes JWT signature. - * @return true if signature is valid. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - - boolean verifySignatureFor( - String algorithm, - byte[] secretBytes, - String header, - String payload, - byte[] signatureBytes - ) throws NoSuchAlgorithmException, InvalidKeyException { - return verifySignatureFor(algorithm, secretBytes, - header.getBytes(StandardCharsets.UTF_8), payload.getBytes(StandardCharsets.UTF_8), signatureBytes); - } - - /** - * Verify signature for JWT header and payload. - * - * @param algorithm algorithm name. - * @param secretBytes algorithm secret. - * @param headerBytes JWT header. - * @param payloadBytes JWT payload. - * @param signatureBytes JWT signature. - * @return true if signature is valid. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - - boolean verifySignatureFor( - String algorithm, - byte[] secretBytes, - byte[] headerBytes, - byte[] payloadBytes, - byte[] signatureBytes - ) throws NoSuchAlgorithmException, InvalidKeyException { - return MessageDigest.isEqual(createSignatureFor(algorithm, secretBytes, headerBytes, payloadBytes), - signatureBytes); - } - - /** - * Verify signature for JWT header and payload. - * - * @param algorithm algorithm name. - * @param publicKey algorithm public key. - * @param header JWT header. - * @param payload JWT payload. - * @param signatureBytes JWT signature. - * @return true if signature is valid. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - boolean verifySignatureFor( - String algorithm, - PublicKey publicKey, - String header, - String payload, - byte[] signatureBytes - ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { - return verifySignatureFor(algorithm, publicKey, header.getBytes(StandardCharsets.UTF_8), - payload.getBytes(StandardCharsets.UTF_8), signatureBytes); - } - - /** - * Verify signature for JWT header and payload using a public key. - * - * @param algorithm algorithm name. - * @param publicKey the public key to use for verification. - * @param headerBytes JWT header. - * @param payloadBytes JWT payload. - * @param signatureBytes JWT signature. - * @return true if signature is valid. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - boolean verifySignatureFor( - String algorithm, - PublicKey publicKey, - byte[] headerBytes, - byte[] payloadBytes, - byte[] signatureBytes - ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { - final Signature s = Signature.getInstance(algorithm); - s.initVerify(publicKey); - s.update(headerBytes); - s.update(JWT_PART_SEPARATOR); - s.update(payloadBytes); - return s.verify(signatureBytes); - } - - /** - * Create signature for JWT header and payload using a private key. - * - * @param algorithm algorithm name. - * @param privateKey the private key to use for signing. - * @param headerBytes JWT header. - * @param payloadBytes JWT payload. - * @return the signature bytes. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - * @throws SignatureException if this signature object is not initialized properly - * or if this signature algorithm is unable to process the input data provided. - */ - byte[] createSignatureFor( - String algorithm, - PrivateKey privateKey, - byte[] headerBytes, - byte[] payloadBytes - ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { - final Signature s = Signature.getInstance(algorithm); - s.initSign(privateKey); - s.update(headerBytes); - s.update(JWT_PART_SEPARATOR); - s.update(payloadBytes); - return s.sign(); - } - - /** - * Create signature for JWT header and payload. - * - * @param algorithm algorithm name. - * @param secretBytes algorithm secret. - * @param headerBytes JWT header. - * @param payloadBytes JWT payload. - * @return the signature bytes. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - byte[] createSignatureFor( - String algorithm, - byte[] secretBytes, - byte[] headerBytes, - byte[] payloadBytes - ) throws NoSuchAlgorithmException, InvalidKeyException { - final Mac mac = Mac.getInstance(algorithm); - mac.init(new SecretKeySpec(secretBytes, algorithm)); - mac.update(headerBytes); - mac.update(JWT_PART_SEPARATOR); - return mac.doFinal(payloadBytes); - } - - /** - * Create signature. - * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} - * - * @param algorithm algorithm name. - * @param secretBytes algorithm secret. - * @param contentBytes the content to be signed. - * @return the signature bytes. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - */ - byte[] createSignatureFor(String algorithm, byte[] secretBytes, byte[] contentBytes) - throws NoSuchAlgorithmException, InvalidKeyException { - final Mac mac = Mac.getInstance(algorithm); - mac.init(new SecretKeySpec(secretBytes, algorithm)); - return mac.doFinal(contentBytes); - } - - /** - * Create signature using a private key. - * To get the correct JWT Signature, ensure the content is in the format {HEADER}.{PAYLOAD} - * - * @param algorithm algorithm name. - * @param privateKey the private key to use for signing. - * @param contentBytes the content to be signed. - * @return the signature bytes. - * @throws NoSuchAlgorithmException if the algorithm is not supported. - * @throws InvalidKeyException if the given key is inappropriate for initializing the specified algorithm. - * @throws SignatureException if this signature object is not initialized properly - * or if this signature algorithm is unable to process the input data provided. - */ - - byte[] createSignatureFor( - String algorithm, - PrivateKey privateKey, - byte[] contentBytes - ) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { - final Signature s = Signature.getInstance(algorithm); - s.initSign(privateKey); - s.update(contentBytes); - return s.sign(); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java deleted file mode 100644 index b3046097409..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/ECDSAAlgorithm.java +++ /dev/null @@ -1,306 +0,0 @@ -package com.auth0.jwt.algorithms; - -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.exceptions.SignatureVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.interfaces.ECDSAKeyProvider; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.SignatureException; -import java.security.interfaces.ECPrivateKey; -import java.security.interfaces.ECPublicKey; -import java.util.Base64; - -/** - * Subclass representing an Elliptic Curve signing algorithm - *

    - * This class is thread-safe. - */ -class ECDSAAlgorithm extends Algorithm { - - private final ECDSAKeyProvider keyProvider; - private final CryptoHelper crypto; - private final int ecNumberSize; - - //Visible for testing - ECDSAAlgorithm(CryptoHelper crypto, String id, String algorithm, int ecNumberSize, ECDSAKeyProvider keyProvider) - throws IllegalArgumentException { - super(id, algorithm); - if (keyProvider == null) { - throw new IllegalArgumentException("The Key Provider cannot be null."); - } - this.keyProvider = keyProvider; - this.crypto = crypto; - this.ecNumberSize = ecNumberSize; - } - - ECDSAAlgorithm(String id, String algorithm, int ecNumberSize, ECDSAKeyProvider keyProvider) - throws IllegalArgumentException { - this(new CryptoHelper(), id, algorithm, ecNumberSize, keyProvider); - } - - @Override - public void verify(DecodedJWT jwt) throws SignatureVerificationException { - try { - byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); - ECPublicKey publicKey = keyProvider.getPublicKeyById(jwt.getKeyId()); - if (publicKey == null) { - throw new IllegalStateException("The given Public Key is null."); - } - validateSignatureStructure(signatureBytes, publicKey); - boolean valid = crypto.verifySignatureFor( - getDescription(), publicKey, jwt.getHeader(), jwt.getPayload(), JOSEToDER(signatureBytes)); - - if (!valid) { - throw new SignatureVerificationException(this); - } - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException - | IllegalStateException | IllegalArgumentException e) { - throw new SignatureVerificationException(this, e); - } - } - - @Override - public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { - try { - ECPrivateKey privateKey = keyProvider.getPrivateKey(); - if (privateKey == null) { - throw new IllegalStateException("The given Private Key is null."); - } - byte[] signature = crypto.createSignatureFor(getDescription(), privateKey, headerBytes, payloadBytes); - return DERToJOSE(signature); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { - throw new SignatureGenerationException(this, e); - } - } - - @Override - public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { - try { - ECPrivateKey privateKey = keyProvider.getPrivateKey(); - if (privateKey == null) { - throw new IllegalStateException("The given Private Key is null."); - } - byte[] signature = crypto.createSignatureFor(getDescription(), privateKey, contentBytes); - return DERToJOSE(signature); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { - throw new SignatureGenerationException(this, e); - } - } - - @Override - public String getSigningKeyId() { - return keyProvider.getPrivateKeyId(); - } - - //Visible for testing - byte[] DERToJOSE(byte[] derSignature) throws SignatureException { - // DER Structure: http://crypto.stackexchange.com/a/1797 - boolean derEncoded = derSignature[0] == 0x30 && derSignature.length != ecNumberSize * 2; - if (!derEncoded) { - throw new SignatureException("Invalid DER signature format."); - } - - final byte[] joseSignature = new byte[ecNumberSize * 2]; - - //Skip 0x30 - int offset = 1; - if (derSignature[1] == (byte) 0x81) { - //Skip sign - offset++; - } - - //Convert to unsigned. Should match DER length - offset - int encodedLength = derSignature[offset++] & 0xff; - if (encodedLength != derSignature.length - offset) { - throw new SignatureException("Invalid DER signature format."); - } - - //Skip 0x02 - offset++; - - //Obtain R number length (Includes padding) and skip it - int rlength = derSignature[offset++]; - if (rlength > ecNumberSize + 1) { - throw new SignatureException("Invalid DER signature format."); - } - int rpadding = ecNumberSize - rlength; - //Retrieve R number - System.arraycopy(derSignature, offset + Math.max(-rpadding, 0), - joseSignature, Math.max(rpadding, 0), rlength + Math.min(rpadding, 0)); - - //Skip R number and 0x02 - offset += rlength + 1; - - //Obtain S number length. (Includes padding) - int slength = derSignature[offset++]; - if (slength > ecNumberSize + 1) { - throw new SignatureException("Invalid DER signature format."); - } - int spadding = ecNumberSize - slength; - //Retrieve R number - System.arraycopy(derSignature, offset + Math.max(-spadding, 0), joseSignature, - ecNumberSize + Math.max(spadding, 0), slength + Math.min(spadding, 0)); - - return joseSignature; - } - - /** - * Added check for extra protection against CVE-2022-21449. - * This method ensures the signature's structure is as expected. - * - * @param joseSignature is the signature from the JWT - * @param publicKey public key used to verify the JWT - * @throws SignatureException if the signature's structure is not as per expectation - */ - // Visible for testing - void validateSignatureStructure(byte[] joseSignature, ECPublicKey publicKey) throws SignatureException { - // check signature length, moved this check from JOSEToDER method - if (joseSignature.length != ecNumberSize * 2) { - throw new SignatureException("Invalid JOSE signature format."); - } - - if (isAllZeros(joseSignature)) { - throw new SignatureException("Invalid signature format."); - } - - // get R - byte[] rBytes = new byte[ecNumberSize]; - System.arraycopy(joseSignature, 0, rBytes, 0, ecNumberSize); - if (isAllZeros(rBytes)) { - throw new SignatureException("Invalid signature format."); - } - - // get S - byte[] sBytes = new byte[ecNumberSize]; - System.arraycopy(joseSignature, ecNumberSize, sBytes, 0, ecNumberSize); - if (isAllZeros(sBytes)) { - throw new SignatureException("Invalid signature format."); - } - - //moved this check from JOSEToDER method - int rPadding = countPadding(joseSignature, 0, ecNumberSize); - int sPadding = countPadding(joseSignature, ecNumberSize, joseSignature.length); - int rLength = ecNumberSize - rPadding; - int sLength = ecNumberSize - sPadding; - - int length = 2 + rLength + 2 + sLength; - if (length > 255) { - throw new SignatureException("Invalid JOSE signature format."); - } - - BigInteger order = publicKey.getParams().getOrder(); - BigInteger r = new BigInteger(1, rBytes); - BigInteger s = new BigInteger(1, sBytes); - - // R and S must be less than N - if (order.compareTo(r) < 1) { - throw new SignatureException("Invalid signature format."); - } - - if (order.compareTo(s) < 1) { - throw new SignatureException("Invalid signature format."); - } - } - - //Visible for testing - byte[] JOSEToDER(byte[] joseSignature) throws SignatureException { - // Retrieve R and S number's length and padding. - int rPadding = countPadding(joseSignature, 0, ecNumberSize); - int sPadding = countPadding(joseSignature, ecNumberSize, joseSignature.length); - int rLength = ecNumberSize - rPadding; - int sLength = ecNumberSize - sPadding; - - int length = 2 + rLength + 2 + sLength; - - final byte[] derSignature; - int offset; - if (length > 0x7f) { - derSignature = new byte[3 + length]; - derSignature[1] = (byte) 0x81; - offset = 2; - } else { - derSignature = new byte[2 + length]; - offset = 1; - } - - // DER Structure: http://crypto.stackexchange.com/a/1797 - // Header with signature length info - derSignature[0] = (byte) 0x30; - derSignature[offset++] = (byte) (length & 0xff); - - // Header with "min R" number length - derSignature[offset++] = (byte) 0x02; - derSignature[offset++] = (byte) rLength; - - // R number - if (rPadding < 0) { - //Sign - derSignature[offset++] = (byte) 0x00; - System.arraycopy(joseSignature, 0, derSignature, offset, ecNumberSize); - offset += ecNumberSize; - } else { - int copyLength = Math.min(ecNumberSize, rLength); - System.arraycopy(joseSignature, rPadding, derSignature, offset, copyLength); - offset += copyLength; - } - - // Header with "min S" number length - derSignature[offset++] = (byte) 0x02; - derSignature[offset++] = (byte) sLength; - - // S number - if (sPadding < 0) { - //Sign - derSignature[offset++] = (byte) 0x00; - System.arraycopy(joseSignature, ecNumberSize, derSignature, offset, ecNumberSize); - } else { - System.arraycopy(joseSignature, ecNumberSize + sPadding, derSignature, offset, - Math.min(ecNumberSize, sLength)); - } - - return derSignature; - } - - private boolean isAllZeros(byte[] bytes) { - for (byte b : bytes) { - if (b != 0) { - return false; - } - } - return true; - } - - private int countPadding(byte[] bytes, int fromIndex, int toIndex) { - int padding = 0; - while (fromIndex + padding < toIndex && bytes[fromIndex + padding] == 0) { - padding++; - } - return (bytes[fromIndex + padding] & 0xff) > 0x7f ? padding - 1 : padding; - } - - //Visible for testing - static ECDSAKeyProvider providerForKeys(final ECPublicKey publicKey, final ECPrivateKey privateKey) { - if (publicKey == null && privateKey == null) { - throw new IllegalArgumentException("Both provided Keys cannot be null."); - } - return new ECDSAKeyProvider() { - @Override - public ECPublicKey getPublicKeyById(String keyId) { - return publicKey; - } - - @Override - public ECPrivateKey getPrivateKey() { - return privateKey; - } - - @Override - public String getPrivateKeyId() { - return null; - } - }; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java deleted file mode 100644 index 0306e7c420d..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/HMACAlgorithm.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.auth0.jwt.algorithms; - -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.exceptions.SignatureVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; - -import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.Base64; - -/** - * Subclass representing an Hash-based MAC signing algorithm - *

    - * This class is thread-safe. - */ -class HMACAlgorithm extends Algorithm { - - private final CryptoHelper crypto; - private final byte[] secret; - - //Visible for testing - HMACAlgorithm(CryptoHelper crypto, String id, String algorithm, byte[] secretBytes) - throws IllegalArgumentException { - super(id, algorithm); - if (secretBytes == null) { - throw new IllegalArgumentException("The Secret cannot be null"); - } - this.secret = Arrays.copyOf(secretBytes, secretBytes.length); - this.crypto = crypto; - } - - HMACAlgorithm(String id, String algorithm, byte[] secretBytes) throws IllegalArgumentException { - this(new CryptoHelper(), id, algorithm, secretBytes); - } - - HMACAlgorithm(String id, String algorithm, String secret) throws IllegalArgumentException { - this(new CryptoHelper(), id, algorithm, getSecretBytes(secret)); - } - - //Visible for testing - static byte[] getSecretBytes(String secret) throws IllegalArgumentException { - if (secret == null) { - throw new IllegalArgumentException("The Secret cannot be null"); - } - return secret.getBytes(StandardCharsets.UTF_8); - } - - @Override - public void verify(DecodedJWT jwt) throws SignatureVerificationException { - try { - byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); - boolean valid = crypto.verifySignatureFor( - getDescription(), secret, jwt.getHeader(), jwt.getPayload(), signatureBytes); - if (!valid) { - throw new SignatureVerificationException(this); - } - } catch (IllegalStateException | InvalidKeyException | NoSuchAlgorithmException | IllegalArgumentException e) { - throw new SignatureVerificationException(this, e); - } - } - - @Override - public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { - try { - return crypto.createSignatureFor(getDescription(), secret, headerBytes, payloadBytes); - } catch (NoSuchAlgorithmException | InvalidKeyException e) { - throw new SignatureGenerationException(this, e); - } - } - - @Override - public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { - try { - return crypto.createSignatureFor(getDescription(), secret, contentBytes); - } catch (NoSuchAlgorithmException | InvalidKeyException e) { - throw new SignatureGenerationException(this, e); - } - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java deleted file mode 100644 index 5c6c0fc5ef0..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/NoneAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.auth0.jwt.algorithms; - -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.exceptions.SignatureVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; -import java.util.Base64; - -class NoneAlgorithm extends Algorithm { - - NoneAlgorithm() { - super("none", "none"); - } - - @Override - public void verify(DecodedJWT jwt) throws SignatureVerificationException { - try { - byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); - - if (signatureBytes.length > 0) { - throw new SignatureVerificationException(this); - } - } catch (IllegalArgumentException e) { - throw new SignatureVerificationException(this, e); - } - } - - @Override - public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { - return new byte[0]; - } - - @Override - public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { - return new byte[0]; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java deleted file mode 100644 index ca892e60ad4..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/algorithms/RSAAlgorithm.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.auth0.jwt.algorithms; - -import com.auth0.jwt.exceptions.SignatureGenerationException; -import com.auth0.jwt.exceptions.SignatureVerificationException; -import com.auth0.jwt.interfaces.DecodedJWT; -import com.auth0.jwt.interfaces.RSAKeyProvider; - -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.SignatureException; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; -import java.util.Base64; - -/** - * Subclass representing an RSA signing algorithm - *

    - * This class is thread-safe. - */ -class RSAAlgorithm extends Algorithm { - - private final RSAKeyProvider keyProvider; - private final CryptoHelper crypto; - - //Visible for testing - RSAAlgorithm(CryptoHelper crypto, String id, String algorithm, RSAKeyProvider keyProvider) - throws IllegalArgumentException { - super(id, algorithm); - if (keyProvider == null) { - throw new IllegalArgumentException("The Key Provider cannot be null."); - } - this.keyProvider = keyProvider; - this.crypto = crypto; - } - - RSAAlgorithm(String id, String algorithm, RSAKeyProvider keyProvider) throws IllegalArgumentException { - this(new CryptoHelper(), id, algorithm, keyProvider); - } - - @Override - public void verify(DecodedJWT jwt) throws SignatureVerificationException { - try { - byte[] signatureBytes = Base64.getUrlDecoder().decode(jwt.getSignature()); - RSAPublicKey publicKey = keyProvider.getPublicKeyById(jwt.getKeyId()); - if (publicKey == null) { - throw new IllegalStateException("The given Public Key is null."); - } - boolean valid = crypto.verifySignatureFor( - getDescription(), publicKey, jwt.getHeader(), jwt.getPayload(), signatureBytes); - if (!valid) { - throw new SignatureVerificationException(this); - } - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException - | IllegalArgumentException | IllegalStateException e) { - throw new SignatureVerificationException(this, e); - } - } - - @Override - public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { - try { - RSAPrivateKey privateKey = keyProvider.getPrivateKey(); - if (privateKey == null) { - throw new IllegalStateException("The given Private Key is null."); - } - return crypto.createSignatureFor(getDescription(), privateKey, headerBytes, payloadBytes); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { - throw new SignatureGenerationException(this, e); - } - } - - @Override - public byte[] sign(byte[] contentBytes) throws SignatureGenerationException { - try { - RSAPrivateKey privateKey = keyProvider.getPrivateKey(); - if (privateKey == null) { - throw new IllegalStateException("The given Private Key is null."); - } - return crypto.createSignatureFor(getDescription(), privateKey, contentBytes); - } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException | IllegalStateException e) { - throw new SignatureGenerationException(this, e); - } - } - - @Override - public String getSigningKeyId() { - return keyProvider.getPrivateKeyId(); - } - - //Visible for testing - static RSAKeyProvider providerForKeys(final RSAPublicKey publicKey, final RSAPrivateKey privateKey) { - if (publicKey == null && privateKey == null) { - throw new IllegalArgumentException("Both provided Keys cannot be null."); - } - return new RSAKeyProvider() { - @Override - public RSAPublicKey getPublicKeyById(String keyId) { - return publicKey; - } - - @Override - public RSAPrivateKey getPrivateKey() { - return privateKey; - } - - @Override - public String getPrivateKeyId() { - return null; - } - }; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java deleted file mode 100644 index d6b71205837..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/AlgorithmMismatchException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * The exception that will be thrown if the exception doesn't match the one mentioned in the JWT Header. - */ -public class AlgorithmMismatchException extends JWTVerificationException { - public AlgorithmMismatchException(String message) { - super(message); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java deleted file mode 100644 index 712e937bd61..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/IncorrectClaimException.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.auth0.jwt.exceptions; - -import com.auth0.jwt.interfaces.Claim; - -/** - * This exception is thrown when the expected value is not found while verifying the Claims. - */ -public class IncorrectClaimException extends InvalidClaimException { - private final String claimName; - - private final Claim claimValue; - - /** - * Used internally to construct the IncorrectClaimException which is thrown when there is verification - * failure for a Claim that exists. - * - * @param message The error message - * @param claimName The Claim name for which verification failed - * @param claim The Claim value for which verification failed - */ - public IncorrectClaimException(String message, String claimName, Claim claim) { - super(message); - this.claimName = claimName; - this.claimValue = claim; - } - - /** - * This method can be used to fetch the name for which the Claim verification failed. - * - * @return The claim name for which the verification failed. - */ - public String getClaimName() { - return claimName; - } - - /** - * This method can be used to fetch the value for which the Claim verification failed. - * - * @return The value for which the verification failed - */ - public Claim getClaimValue() { - return claimValue; - } -} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java deleted file mode 100644 index c5b8eb64a58..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/InvalidClaimException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * The exception that will be thrown while verifying Claims of a JWT. - */ -public class InvalidClaimException extends JWTVerificationException { - public InvalidClaimException(String message) { - super(message); - } -} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java deleted file mode 100644 index c7e162ea982..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTCreationException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * The exception that is thrown when a JWT cannot be created. - */ -public class JWTCreationException extends RuntimeException { - public JWTCreationException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java deleted file mode 100644 index 448714e9b1e..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTDecodeException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * The exception that is thrown when any part of the token contained an invalid JWT or JSON format. - */ -public class JWTDecodeException extends JWTVerificationException { - public JWTDecodeException(String message) { - this(message, null); - } - - public JWTDecodeException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java deleted file mode 100644 index dd36dcd331c..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/JWTVerificationException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * Parent to all the exception thrown while verifying a JWT. - */ -public class JWTVerificationException extends RuntimeException { - public JWTVerificationException(String message) { - this(message, null); - } - - public JWTVerificationException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java deleted file mode 100644 index 3bcc21216ea..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/MissingClaimException.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.auth0.jwt.exceptions; - -/** - * This exception is thrown when the claim to be verified is missing. - */ -public class MissingClaimException extends InvalidClaimException { - - private final String claimName; - - public MissingClaimException(String claimName) { - super(String.format("The Claim '%s' is not present in the JWT.", claimName)); - this.claimName = claimName; - } - - /** - * This method can be used to fetch the name for which the Claim is missing during the verification. - * - * @return The name of the Claim that doesn't exist. - */ - public String getClaimName() { - return claimName; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java deleted file mode 100644 index 4b7668a0922..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureGenerationException.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.auth0.jwt.exceptions; - -import com.auth0.jwt.algorithms.Algorithm; - -/** - * The exception that is thrown when signature is not able to be generated. - */ -public class SignatureGenerationException extends JWTCreationException { - public SignatureGenerationException(Algorithm algorithm, Throwable cause) { - super("The Token's Signature couldn't be generated when signing using the Algorithm: " + algorithm, cause); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java deleted file mode 100644 index fa7c3cabfce..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/SignatureVerificationException.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.auth0.jwt.exceptions; - -import com.auth0.jwt.algorithms.Algorithm; - -/** - * The exception that is thrown if the Signature verification fails. - */ -public class SignatureVerificationException extends JWTVerificationException { - public SignatureVerificationException(Algorithm algorithm) { - this(algorithm, null); - } - - public SignatureVerificationException(Algorithm algorithm, Throwable cause) { - super("The Token's Signature resulted invalid when verified using the Algorithm: " + algorithm, cause); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java deleted file mode 100644 index 42ab090d4c0..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/exceptions/TokenExpiredException.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.auth0.jwt.exceptions; - -import java.time.Instant; - -/** - * The exception that is thrown if the token is expired. - */ -public class TokenExpiredException extends JWTVerificationException { - - private static final long serialVersionUID = -7076928975713577708L; - - private final Instant expiredOn; - - public TokenExpiredException(String message, Instant expiredOn) { - super(message); - this.expiredOn = expiredOn; - } - - public Instant getExpiredOn() { - return expiredOn; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java deleted file mode 100644 index 5a881ab523d..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/BasicHeader.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.Header; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.Serializable; -import java.util.Collections; -import java.util.Map; - -import static com.auth0.jwt.impl.JsonNodeClaim.extractClaim; - -/** - * The BasicHeader class implements the Header interface. - */ -class BasicHeader implements Header, Serializable { - private static final long serialVersionUID = -4659137688548605095L; - - private final String algorithm; - private final String type; - private final String contentType; - private final String keyId; - private final Map tree; - private final ObjectCodec objectCodec; - - BasicHeader( - String algorithm, - String type, - String contentType, - String keyId, - Map tree, - ObjectCodec objectCodec - ) { - this.algorithm = algorithm; - this.type = type; - this.contentType = contentType; - this.keyId = keyId; - this.tree = tree == null ? Collections.emptyMap() : Collections.unmodifiableMap(tree); - this.objectCodec = objectCodec; - } - - Map getTree() { - return tree; - } - - @Override - public String getAlgorithm() { - return algorithm; - } - - @Override - public String getType() { - return type; - } - - @Override - public String getContentType() { - return contentType; - } - - @Override - public String getKeyId() { - return keyId; - } - - @Override - public Claim getHeaderClaim(String name) { - return extractClaim(name, tree, objectCodec); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java deleted file mode 100644 index 30f6ab18665..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsHolder.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.auth0.jwt.impl; - -import java.util.HashMap; -import java.util.Map; - -/** - * The ClaimsHolder class is just a wrapper for the Map of Claims used for building a JWT. - */ -public abstract class ClaimsHolder { - private Map claims; - - protected ClaimsHolder(Map claims) { - this.claims = claims == null ? new HashMap<>() : claims; - } - - Map getClaims() { - return claims; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java deleted file mode 100644 index b1f8e6d3a21..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ClaimsSerializer.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.auth0.jwt.impl; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -import java.io.IOException; -import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * Custom serializer used to write the resulting JWT. - * - * @param the type this serializer operates on. - */ -public class ClaimsSerializer extends StdSerializer { - - public ClaimsSerializer(Class t) { - super(t); - } - - @Override - public void serialize(T holder, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeStartObject(); - for (Map.Entry entry : holder.getClaims().entrySet()) { - writeClaim(entry, gen); - } - gen.writeEndObject(); - } - - /** - * Writes the given entry to the JSON representation. Custom claim serialization handling can override this method - * to provide use-case specific serialization. Implementors who override this method must write - * the field name and the field value. - * - * @param entry The entry that corresponds to the JSON field to write - * @param gen The {@code JsonGenerator} to use - * @throws IOException if there is either an underlying I/O problem or encoding issue at format layer - */ - protected void writeClaim(Map.Entry entry, JsonGenerator gen) throws IOException { - gen.writeFieldName(entry.getKey()); - handleSerialization(entry.getValue(), gen); - } - - private static void handleSerialization(Object value, JsonGenerator gen) throws IOException { - if (value instanceof Date) { - gen.writeNumber(dateToSeconds((Date) value)); - } else if (value instanceof Instant) { // EXPIRES_AT, ISSUED_AT, NOT_BEFORE, custom Instant claims - gen.writeNumber(instantToSeconds((Instant) value)); - } else if (value instanceof Map) { - serializeMap((Map) value, gen); - } else if (value instanceof List) { - serializeList((List) value, gen); - } else { - gen.writeObject(value); - } - } - - private static void serializeMap(Map map, JsonGenerator gen) throws IOException { - gen.writeStartObject(); - for (Map.Entry entry : map.entrySet()) { - gen.writeFieldName((String) entry.getKey()); - Object value = entry.getValue(); - handleSerialization(value, gen); - } - gen.writeEndObject(); - } - - private static void serializeList(List list, JsonGenerator gen) throws IOException { - gen.writeStartArray(); - for (Object entry : list) { - handleSerialization(entry, gen); - } - gen.writeEndArray(); - } - - private static long instantToSeconds(Instant instant) { - return instant.getEpochSecond(); - } - - private static long dateToSeconds(Date date) { - return date.getTime() / 1000; - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java deleted file mode 100644 index 6737031c32b..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/ExpectedCheckHolder.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.DecodedJWT; - -/** - * This holds the checks that are run to verify a JWT. - */ -public interface ExpectedCheckHolder { - /** - * The claim name that will be checked. - * - * @return the claim name - */ - String getClaimName(); - - /** - * The verification that will be run. - * - * @param claim the claim for which verification is done - * @param decodedJWT the JWT on which verification is done - * @return whether the verification passed or not - */ - boolean verify(Claim claim, DecodedJWT decodedJWT); -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java deleted file mode 100644 index 9b480116d0c..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderClaimsHolder.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.auth0.jwt.impl; - -import java.util.Map; - -/** - * Holds the header claims when serializing a JWT. - */ -public final class HeaderClaimsHolder extends ClaimsHolder { - public HeaderClaimsHolder(Map claims) { - super(claims); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java deleted file mode 100644 index ad6e4ce00d2..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderDeserializer.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.HeaderParams; -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.interfaces.Header; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import java.io.IOException; -import java.util.Map; - -/** - * Jackson deserializer implementation for converting from JWT Header parts. - *

    - * This class is thread-safe. - * - * @see JWTParser - */ -class HeaderDeserializer extends StdDeserializer

    { - - HeaderDeserializer() { - super(Header.class); - } - - @Override - public Header deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - Map tree = p.getCodec().readValue(p, new TypeReference>() { - }); - if (tree == null) { - throw new JWTDecodeException("Parsing the Header's JSON resulted on a Null map"); - } - - String algorithm = getString(tree, HeaderParams.ALGORITHM); - String type = getString(tree, HeaderParams.TYPE); - String contentType = getString(tree, HeaderParams.CONTENT_TYPE); - String keyId = getString(tree, HeaderParams.KEY_ID); - return new BasicHeader(algorithm, type, contentType, keyId, tree, p.getCodec()); - } - - String getString(Map tree, String claimName) { - JsonNode node = tree.get(claimName); - if (node == null || node.isNull()) { - return null; - } - return node.asText(null); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java deleted file mode 100644 index 5c7cf0fc977..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/HeaderSerializer.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.impl; - -/** - * Responsible for serializing a JWT's header representation to JSON. - */ -public class HeaderSerializer extends ClaimsSerializer { - public HeaderSerializer() { - super(HeaderClaimsHolder.class); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java deleted file mode 100644 index 022520f5537..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JWTParser.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.interfaces.Header; -import com.auth0.jwt.interfaces.JWTPartsParser; -import com.auth0.jwt.interfaces.Payload; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectReader; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.module.SimpleModule; -import java.io.IOException; - -/** - * This class helps in decoding the Header and Payload of the JWT using - * {@link HeaderSerializer} and {@link PayloadSerializer}. - */ -public class JWTParser implements JWTPartsParser { - private static final ObjectMapper DEFAULT_OBJECT_MAPPER = createDefaultObjectMapper(); - private static final ObjectReader DEFAULT_PAYLOAD_READER = DEFAULT_OBJECT_MAPPER.readerFor(Payload.class); - private static final ObjectReader DEFAULT_HEADER_READER = DEFAULT_OBJECT_MAPPER.readerFor(Header.class); - - private final ObjectReader payloadReader; - private final ObjectReader headerReader; - - public JWTParser() { - this.payloadReader = DEFAULT_PAYLOAD_READER; - this.headerReader = DEFAULT_HEADER_READER; - } - - JWTParser(ObjectMapper mapper) { - addDeserializers(mapper); - - this.payloadReader = mapper.readerFor(Payload.class); - this.headerReader = mapper.readerFor(Header.class); - } - - @Override - public Payload parsePayload(String json) throws JWTDecodeException { - if (json == null) { - throw decodeException(); - } - - try { - return payloadReader.readValue(json); - } catch (IOException e) { - throw decodeException(json); - } - } - - @Override - public Header parseHeader(String json) throws JWTDecodeException { - if (json == null) { - throw decodeException(); - } - - try { - return headerReader.readValue(json); - } catch (IOException e) { - throw decodeException(json); - } - } - - static void addDeserializers(ObjectMapper mapper) { - SimpleModule module = new SimpleModule(); - module.addDeserializer(Payload.class, new PayloadDeserializer()); - module.addDeserializer(Header.class, new HeaderDeserializer()); - mapper.registerModule(module); - } - - static ObjectMapper getDefaultObjectMapper() { - return DEFAULT_OBJECT_MAPPER; - } - - private static ObjectMapper createDefaultObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); - mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - - addDeserializers(mapper); - - return mapper; - } - - private static JWTDecodeException decodeException() { - return decodeException(null); - } - - private static JWTDecodeException decodeException(String json) { - return new JWTDecodeException(String.format("The string '%s' doesn't have a valid JSON format.", json)); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java deleted file mode 100644 index 0a7e22f3574..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/JsonNodeClaim.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.interfaces.Claim; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.IOException; -import java.lang.reflect.Array; -import java.time.Instant; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * The JsonNodeClaim retrieves a claim value from a JsonNode object. - */ -class JsonNodeClaim implements Claim { - - private final ObjectCodec codec; - private final JsonNode data; - - private JsonNodeClaim(JsonNode node, ObjectCodec codec) { - this.data = node; - this.codec = codec; - } - - @Override - public Boolean asBoolean() { - return isMissing() || isNull() || !data.isBoolean() ? null : data.asBoolean(); - } - - @Override - public Integer asInt() { - return isMissing() || isNull() || !data.isNumber() ? null : data.asInt(); - } - - @Override - public Long asLong() { - return isMissing() || isNull() || !data.isNumber() ? null : data.asLong(); - } - - @Override - public Double asDouble() { - return isMissing() || isNull() || !data.isNumber() ? null : data.asDouble(); - } - - @Override - public String asString() { - return isMissing() || isNull() || !data.isTextual() ? null : data.asText(); - } - - @Override - public Date asDate() { - if (isMissing() || isNull() || !data.canConvertToLong()) { - return null; - } - long seconds = data.asLong(); - return new Date(seconds * 1000); - } - - @Override - public Instant asInstant() { - if (isMissing() || isNull() || !data.canConvertToLong()) { - return null; - } - long seconds = data.asLong(); - return Instant.ofEpochSecond(seconds); - } - - @Override - @SuppressWarnings("unchecked") - public T[] asArray(Class clazz) throws JWTDecodeException { - if (isMissing() || isNull() || !data.isArray()) { - return null; - } - - T[] arr = (T[]) Array.newInstance(clazz, data.size()); - for (int i = 0; i < data.size(); i++) { - try { - arr[i] = codec.treeToValue(data.get(i), clazz); - } catch (JsonProcessingException e) { - throw new JWTDecodeException("Couldn't map the Claim's array contents to " + clazz.getSimpleName(), e); - } - } - return arr; - } - - @Override - public List asList(Class clazz) throws JWTDecodeException { - if (isMissing() || isNull() || !data.isArray()) { - return null; - } - - List list = new ArrayList<>(); - for (int i = 0; i < data.size(); i++) { - try { - list.add(codec.treeToValue(data.get(i), clazz)); - } catch (JsonProcessingException e) { - throw new JWTDecodeException("Couldn't map the Claim's array contents to " + clazz.getSimpleName(), e); - } - } - return list; - } - - @Override - public Map asMap() throws JWTDecodeException { - if (isMissing() || isNull() || !data.isObject()) { - return null; - } - - TypeReference> mapType = new TypeReference>() { - }; - - try (JsonParser parser = codec.treeAsTokens(data)) { - return parser.readValueAs(mapType); - } catch (IOException e) { - throw new JWTDecodeException("Couldn't map the Claim value to Map", e); - } - } - - @Override - public T as(Class clazz) throws JWTDecodeException { - try { - if (isMissing() || isNull()) { - return null; - } - return codec.treeToValue(data, clazz); - } catch (JsonProcessingException e) { - throw new JWTDecodeException("Couldn't map the Claim value to " + clazz.getSimpleName(), e); - } - } - - @Override - public boolean isNull() { - return !isMissing() && data.isNull(); - } - - @Override - public boolean isMissing() { - return data == null || data.isMissingNode(); - } - - @Override - public String toString() { - if (isMissing()) { - return "Missing claim"; - } else if (isNull()) { - return "Null claim"; - } - return data.toString(); - } - - /** - * Helper method to extract a Claim from the given JsonNode tree. - * - * @param claimName the Claim to search for. - * @param tree the JsonNode tree to search the Claim in. - * @param objectCodec the object codec in use for deserialization - * @return a valid non-null Claim. - */ - static Claim extractClaim(String claimName, Map tree, ObjectCodec objectCodec) { - JsonNode node = tree.get(claimName); - return claimFromNode(node, objectCodec); - } - - /** - * Helper method to create a Claim representation from the given JsonNode. - * - * @param node the JsonNode to convert into a Claim. - * @param objectCodec the object codec in use for deserialization - * @return a valid Claim instance. If the node is null or missing, a NullClaim will be returned. - */ - static Claim claimFromNode(JsonNode node, ObjectCodec objectCodec) { - return new JsonNodeClaim(node, objectCodec); - } - -} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java deleted file mode 100644 index 7055a2ce73e..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadClaimsHolder.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.auth0.jwt.impl; - -import java.util.Map; - -/** - * Holds the payload claims when serializing a JWT. - */ -public final class PayloadClaimsHolder extends ClaimsHolder { - public PayloadClaimsHolder(Map claims) { - super(claims); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java deleted file mode 100644 index 65fba3ac4fe..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadDeserializer.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.RegisteredClaims; -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.interfaces.Payload; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectReader; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import java.io.IOException; -import java.time.Instant; -import java.util.*; - -/** - * Jackson deserializer implementation for converting from JWT Payload parts. - *

    - * This class is thread-safe. - * - * @see JWTParser - */ -class PayloadDeserializer extends StdDeserializer { - - PayloadDeserializer() { - super(Payload.class); - } - - @Override - public Payload deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - Map tree = p.getCodec().readValue(p, new TypeReference>() { - }); - if (tree == null) { - throw new JWTDecodeException("Parsing the Payload's JSON resulted on a Null map"); - } - - String issuer = getString(tree, RegisteredClaims.ISSUER); - String subject = getString(tree, RegisteredClaims.SUBJECT); - List audience = getStringOrArray(p.getCodec(), tree, RegisteredClaims.AUDIENCE); - Instant expiresAt = getInstantFromSeconds(tree, RegisteredClaims.EXPIRES_AT); - Instant notBefore = getInstantFromSeconds(tree, RegisteredClaims.NOT_BEFORE); - Instant issuedAt = getInstantFromSeconds(tree, RegisteredClaims.ISSUED_AT); - String jwtId = getString(tree, RegisteredClaims.JWT_ID); - - return new PayloadImpl(issuer, subject, audience, expiresAt, notBefore, issuedAt, jwtId, tree, p.getCodec()); - } - - List getStringOrArray(ObjectCodec codec, Map tree, String claimName) - throws JWTDecodeException { - JsonNode node = tree.get(claimName); - if (node == null || node.isNull() || !(node.isArray() || node.isTextual())) { - return null; - } - if (node.isTextual() && !node.asText().isEmpty()) { - return Collections.singletonList(node.asText()); - } - - List list = new ArrayList<>(node.size()); - for (int i = 0; i < node.size(); i++) { - try { - list.add(codec.treeToValue(node.get(i), String.class)); - } catch (JsonProcessingException e) { - throw new JWTDecodeException("Couldn't map the Claim's array contents to String", e); - } - } - return list; - } - - Instant getInstantFromSeconds(Map tree, String claimName) { - JsonNode node = tree.get(claimName); - if (node == null || node.isNull()) { - return null; - } - if (!node.canConvertToLong()) { - throw new JWTDecodeException( - String.format("The claim '%s' contained a non-numeric date value.", claimName)); - } - return Instant.ofEpochSecond(node.asLong()); - } - - String getString(Map tree, String claimName) { - JsonNode node = tree.get(claimName); - if (node == null || node.isNull()) { - return null; - } - return node.asText(null); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java deleted file mode 100644 index bfd9b0eaa85..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.interfaces.Claim; -import com.auth0.jwt.interfaces.Payload; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.Serializable; -import java.time.Instant; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static com.auth0.jwt.impl.JsonNodeClaim.extractClaim; - -/** - * Decoder of string JSON Web Tokens into their POJO representations. - *

    - * This class is thread-safe. - * - * @see Payload - */ -class PayloadImpl implements Payload, Serializable { - - private static final long serialVersionUID = 1659021498824562311L; - - private final String issuer; - private final String subject; - private final List audience; - private final Instant expiresAt; - private final Instant notBefore; - private final Instant issuedAt; - private final String jwtId; - private final Map tree; - private final ObjectCodec objectCodec; - - PayloadImpl( - String issuer, - String subject, - List audience, - Instant expiresAt, - Instant notBefore, - Instant issuedAt, - String jwtId, - Map tree, - ObjectCodec objectCodec - ) { - this.issuer = issuer; - this.subject = subject; - this.audience = audience != null ? Collections.unmodifiableList(audience) : null; - this.expiresAt = expiresAt; - this.notBefore = notBefore; - this.issuedAt = issuedAt; - this.jwtId = jwtId; - this.tree = tree != null ? Collections.unmodifiableMap(tree) : Collections.emptyMap(); - this.objectCodec = objectCodec; - } - - Map getTree() { - return tree; - } - - @Override - public String getIssuer() { - return issuer; - } - - @Override - public String getSubject() { - return subject; - } - - @Override - public List getAudience() { - return audience; - } - - @Override - public Date getExpiresAt() { - return (expiresAt != null) ? Date.from(expiresAt) : null; - } - - - @Override - public Instant getExpiresAtAsInstant() { - return expiresAt; - } - - @Override - public Date getIssuedAt() { - return (issuedAt != null) ? Date.from(issuedAt) : null; - } - - @Override - public Instant getIssuedAtAsInstant() { - return issuedAt; - } - - @Override - public Date getNotBefore() { - return (notBefore != null) ? Date.from(notBefore) : null; - } - - @Override - public Instant getNotBeforeAsInstant() { - return notBefore; - } - - @Override - public String getId() { - return jwtId; - } - - @Override - public Claim getClaim(String name) { - return extractClaim(name, tree, objectCodec); - } - - @Override - public Map getClaims() { - Map claims = new HashMap<>(tree.size() * 2); - for (String name : tree.keySet()) { - claims.put(name, extractClaim(name, tree, objectCodec)); - } - return Collections.unmodifiableMap(claims); - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java deleted file mode 100644 index 24fe37b7972..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/PayloadSerializer.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.auth0.jwt.impl; - -import com.auth0.jwt.RegisteredClaims; -import com.fasterxml.jackson.core.JsonGenerator; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * Jackson serializer implementation for converting into JWT Payload parts. - *

    - * This class is thread-safe. - * - * @see com.auth0.jwt.JWTCreator - */ -public class PayloadSerializer extends ClaimsSerializer { - public PayloadSerializer() { - super(PayloadClaimsHolder.class); - } - - @Override - protected void writeClaim(Map.Entry entry, JsonGenerator gen) throws IOException { - if (RegisteredClaims.AUDIENCE.equals(entry.getKey())) { - writeAudience(gen, entry); - } else { - super.writeClaim(entry, gen); - } - } - - /** - * Audience may be a list of strings or a single string. This is needed to properly handle the aud claim when - * added with the {@linkplain com.auth0.jwt.JWTCreator.Builder#withPayload(Map)} method. - */ - private void writeAudience(JsonGenerator gen, Map.Entry e) throws IOException { - if (e.getValue() instanceof String) { - gen.writeFieldName(e.getKey()); - gen.writeString((String) e.getValue()); - } else { - List audArray = new ArrayList<>(); - if (e.getValue() instanceof String[]) { - audArray = Arrays.asList((String[]) e.getValue()); - } else if (e.getValue() instanceof List) { - List audList = (List) e.getValue(); - for (Object aud : audList) { - if (aud instanceof String) { - audArray.add((String) aud); - } - } - } - if (audArray.size() == 1) { - gen.writeFieldName(e.getKey()); - gen.writeString(audArray.get(0)); - } else if (audArray.size() > 1) { - gen.writeFieldName(e.getKey()); - gen.writeStartArray(); - for (String aud : audArray) { - gen.writeString(aud); - } - gen.writeEndArray(); - } - } - } -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java deleted file mode 100644 index 334ccb8a2d1..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/impl/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Contains parts of the internal implementation of this library. - * - *

    Do not use any of the classes in this package. They might be removed - * or changed at any point without prior warning. - */ -package com.auth0.jwt.impl; diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java deleted file mode 100644 index ca5244d660a..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Claim.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.auth0.jwt.interfaces; - -import com.auth0.jwt.exceptions.JWTDecodeException; - -import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * The Claim class holds the value in a generic way so that it can be recovered in many representations. - */ -public interface Claim { - - /** - * Whether this Claim has a null value or not. - * If the claim is not present, it will return false hence checking {@link Claim#isMissing} is advised as well - * - * @return whether this Claim has a null value or not. - */ - boolean isNull(); - - /** - * Can be used to verify whether the Claim is found or not. - * This will be true even if the Claim has {@code null} value associated to it. - * - * @return whether this Claim is present or not - */ - boolean isMissing(); - - /** - * Get this Claim as a Boolean. - * If the value isn't of type Boolean or it can't be converted to a Boolean, {@code null} will be returned. - * - * @return the value as a Boolean or null. - */ - Boolean asBoolean(); - - /** - * Get this Claim as an Integer. - * If the value isn't of type Integer or it can't be converted to an Integer, {@code null} will be returned. - * - * @return the value as an Integer or null. - */ - Integer asInt(); - - /** - * Get this Claim as an Long. - * If the value isn't of type Long or it can't be converted to a Long, {@code null} will be returned. - * - * @return the value as an Long or null. - */ - Long asLong(); - - /** - * Get this Claim as a Double. - * If the value isn't of type Double or it can't be converted to a Double, {@code null} will be returned. - * - * @return the value as a Double or null. - */ - Double asDouble(); - - /** - * Get this Claim as a String. - * If the value isn't of type String, {@code null} will be returned. For a String representation of non-textual - * claim types, clients can call {@code toString()}. - * - * @return the value as a String or null if the underlying value is not a string. - */ - String asString(); - - /** - * Get this Claim as a Date. - * If the value can't be converted to a Date, {@code null} will be returned. - * - * @return the value as a Date or null. - */ - Date asDate(); - - /** - * Get this Claim as an Instant. - * If the value can't be converted to an Instant, {@code null} will be returned. - * - * @return the value as a Date or null. - */ - default Instant asInstant() { - Date date = asDate(); - return date != null ? date.toInstant() : null; - } - - /** - * Get this Claim as an Array of type T. - * If the value isn't an Array, {@code null} will be returned. - * - * @param type - * @param clazz the type class - * @return the value as an Array or null. - * @throws JWTDecodeException if the values inside the Array can't be converted to a class T. - */ - T[] asArray(Class clazz) throws JWTDecodeException; - - /** - * Get this Claim as a List of type T. - * If the value isn't an Array, {@code null} will be returned. - * - * @param type - * @param clazz the type class - * @return the value as a List or null. - * @throws JWTDecodeException if the values inside the List can't be converted to a class T. - */ - List asList(Class clazz) throws JWTDecodeException; - - /** - * Get this Claim as a generic Map of values. - * - * @return the value as instance of Map. - * @throws JWTDecodeException if the value can't be converted to a Map. - */ - Map asMap() throws JWTDecodeException; - - /** - * Get this Claim as a custom type T. - * This method will return null if {@link Claim#isMissing()} or {@link Claim#isNull()} is true - * - * @param type - * @param clazz the type class - * @return the value as instance of T. - * @throws JWTDecodeException if the value can't be converted to a class T. - */ - T as(Class clazz) throws JWTDecodeException; -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java deleted file mode 100644 index 04307b28e5f..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/DecodedJWT.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.auth0.jwt.interfaces; - -/** - * Class that represents a Json Web Token that was decoded from it's string representation. - */ -public interface DecodedJWT extends Payload, Header { - /** - * Getter for the String Token used to create this JWT instance. - * - * @return the String Token. - */ - String getToken(); - - /** - * Getter for the Header contained in the JWT as a Base64 encoded String. - * This represents the first part of the token. - * - * @return the Header of the JWT. - */ - String getHeader(); - - /** - * Getter for the Payload contained in the JWT as a Base64 encoded String. - * This represents the second part of the token. - * - * @return the Payload of the JWT. - */ - String getPayload(); - - /** - * Getter for the Signature contained in the JWT as a Base64 encoded String. - * This represents the third part of the token. - * - * @return the Signature of the JWT. - */ - String getSignature(); -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java deleted file mode 100644 index 55df451dad9..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/ECDSAKeyProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.interfaces; - -import java.security.interfaces.ECPrivateKey; -import java.security.interfaces.ECPublicKey; - -/** - * Elliptic Curve (EC) Public/Private Key provider. - */ -public interface ECDSAKeyProvider extends KeyProvider { -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java deleted file mode 100644 index 52b3ba56321..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Header.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.auth0.jwt.interfaces; - -/** - * The Header class represents the 1st part of the JWT, where the Header value is held. - */ -public interface Header { - - /** - * Getter for the Algorithm "alg" claim defined in the JWT's Header. If the claim is missing it will return null. - * - * @return the Algorithm defined or null. - */ - String getAlgorithm(); - - /** - * Getter for the Type "typ" claim defined in the JWT's Header. If the claim is missing it will return null. - * - * @return the Type defined or null. - */ - String getType(); - - /** - * Getter for the Content Type "cty" claim defined in the JWT's Header. If the claim is missing it will return null. - * - * @return the Content Type defined or null. - */ - String getContentType(); - - /** - * Get the value of the "kid" claim, or null if it's not available. - * - * @return the Key ID value or null. - */ - String getKeyId(); - - /** - * Get a Private Claim given it's name. If the Claim wasn't specified in the Header, a 'null claim' will be - * returned. All the methods of that claim will return {@code null}. - * - * @param name the name of the Claim to retrieve. - * @return a non-null Claim. - */ - Claim getHeaderClaim(String name); -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java deleted file mode 100644 index 33cd0d709b9..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTPartsParser.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.auth0.jwt.interfaces; - -import com.auth0.jwt.exceptions.JWTDecodeException; - -/** - * The JWTPartsParser class defines which parts of the JWT should be converted - * to its specific Object representation instance. - */ -public interface JWTPartsParser { - - /** - * Parses the given JSON into a {@link Payload} instance. - * - * @param json the content of the Payload in a JSON representation. - * @return the Payload. - * @throws JWTDecodeException if the json doesn't have a proper JSON format. - */ - Payload parsePayload(String json) throws JWTDecodeException; - - /** - * Parses the given JSON into a {@link Header} instance. - * - * @param json the content of the Header in a JSON representation. - * @return the Header. - * @throws JWTDecodeException if the json doesn't have a proper JSON format. - */ - Header parseHeader(String json) throws JWTDecodeException; -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java deleted file mode 100644 index 2756ddd8814..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/JWTVerifier.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.auth0.jwt.interfaces; - -import com.auth0.jwt.exceptions.JWTVerificationException; - - -/** - * Used to verify the JWT for its signature and claims. Implementations must be thread-safe. Instances are created - * using {@link Verification}. - * - *

    - * try {
    - *      JWTVerifier verifier = JWTVerifier.init(Algorithm.RSA256(publicKey, privateKey)
    - *          .withIssuer("auth0")
    - *          .build();
    - *      DecodedJWT jwt = verifier.verify("token");
    - * } catch (JWTVerificationException e) {
    - *      // invalid signature or claims
    - * }
    - * 
    - */ -public interface JWTVerifier { - - /** - * Performs the verification against the given Token. - * - * @param token to verify. - * @return a verified and decoded JWT. - * @throws JWTVerificationException if any of the verification steps fail - */ - DecodedJWT verify(String token) throws JWTVerificationException; - - /** - * Performs the verification against the given {@link DecodedJWT}. - * - * @param jwt to verify. - * @return a verified and decoded JWT. - * @throws JWTVerificationException if any of the verification steps fail - */ - DecodedJWT verify(DecodedJWT jwt) throws JWTVerificationException; -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java deleted file mode 100644 index 30a144a6b96..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/KeyProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.auth0.jwt.interfaces; - -import java.security.PrivateKey; -import java.security.PublicKey; - -/** - * Generic Public/Private Key provider. - * While implementing, ensure the Private Key and Private Key ID doesn't change in between signing a token. - * - * @param the class that represents the Public Key - * @param the class that represents the Private Key - */ -interface KeyProvider { - - /** - * Getter for the Public Key instance with the given Id. Used to verify the signature on the JWT verification stage. - * - * @param keyId the Key Id specified in the Token's Header or null if none is available. - * Provides a hint on which Public Key to use to verify the token's signature. - * @return the Public Key instance - */ - U getPublicKeyById(String keyId); - - /** - * Getter for the Private Key instance. Used to sign the content on the JWT signing stage. - * - * @return the Private Key instance - */ - R getPrivateKey(); - - /** - * Getter for the Id of the Private Key used to sign the tokens. - * This represents the `kid` claim and will be placed in the Header. - * - * @return the Key Id that identifies the Private Key or null if it's not specified. - */ - String getPrivateKeyId(); -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java deleted file mode 100644 index feb58c64ad6..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Payload.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.auth0.jwt.interfaces; - -import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * The Payload class represents the 2nd part of the JWT, where the Payload value is held. - */ -public interface Payload { - - /** - * Get the value of the "iss" claim, or null if it's not available. - * - * @return the Issuer value or null. - */ - String getIssuer(); - - /** - * Get the value of the "sub" claim, or null if it's not available. - * - * @return the Subject value or null. - */ - String getSubject(); - - /** - * Get the value of the "aud" claim, or null if it's not available. - * - * @return the Audience value or null. - */ - List getAudience(); - - /** - * Get the value of the "exp" claim, or null if it's not available. - * - * @return the Expiration Time value or null. - */ - Date getExpiresAt(); - - /** - * Get the value of the "exp" claim as an {@linkplain Instant}, or null if it's not available. - * - * @return the Expiration Time value or null. - */ - default Instant getExpiresAtAsInstant() { - return getExpiresAt() != null ? getExpiresAt().toInstant() : null; - } - - /** - * Get the value of the "nbf" claim, or null if it's not available. - * - * @return the Not Before value or null. - */ - Date getNotBefore(); - - /** - * Get the value of the "nbf" claim as an {@linkplain Instant}, or null if it's not available. - * - * @return the Not Before value or null. - */ - default Instant getNotBeforeAsInstant() { - return getNotBefore() != null ? getNotBefore().toInstant() : null; - } - - /** - * Get the value of the "iat" claim, or null if it's not available. - * - * @return the Issued At value or null. - */ - Date getIssuedAt(); - - /** - * Get the value of the "iat" claim as an {@linkplain Instant}, or null if it's not available. - * - * @return the Issued At value or null. - */ - default Instant getIssuedAtAsInstant() { - return getIssuedAt() != null ? getIssuedAt().toInstant() : null; - } - - /** - * Get the value of the "jti" claim, or null if it's not available. - * - * @return the JWT ID value or null. - */ - String getId(); - - /** - * Get a Claim given its name. If the Claim wasn't specified in the Payload, a 'null claim' - * will be returned. All the methods of that claim will return {@code null}. - * - * @param name the name of the Claim to retrieve. - * @return a non-null Claim. - */ - Claim getClaim(String name); - - /** - * Get the Claims defined in the Token. - * - * @return a non-null Map containing the Claims defined in the Token. - */ - Map getClaims(); -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java deleted file mode 100644 index 55376f4d266..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/RSAKeyProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.auth0.jwt.interfaces; - -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; - -/** - * RSA Public/Private Key provider. - */ -public interface RSAKeyProvider extends KeyProvider { -} diff --git a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java b/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java deleted file mode 100644 index b4adcf5c6fd..00000000000 --- a/java/ql/test/stubs/auth0-jwt-4.4.0/com/auth0/jwt/interfaces/Verification.java +++ /dev/null @@ -1,267 +0,0 @@ -package com.auth0.jwt.interfaces; - -import com.auth0.jwt.JWTVerifier; - -import java.time.Instant; -import java.util.Date; -import java.util.function.BiPredicate; - -/** - * Constructs and holds the checks required for a JWT to be considered valid. Note that implementations are - * not thread-safe. Once built by calling {@link #build()}, the resulting - * {@link com.auth0.jwt.interfaces.JWTVerifier} is thread-safe. - */ -public interface Verification { - - /** - * Verifies whether the JWT contains an Issuer ("iss") claim that equals to the value provided. - * This check is case-sensitive. - * - * @param issuer the required Issuer value. - * @return this same Verification instance. - */ - default Verification withIssuer(String issuer) { - return withIssuer(new String[]{issuer}); - } - - /** - * Verifies whether the JWT contains an Issuer ("iss") claim that contains all the values provided. - * This check is case-sensitive. An empty array is considered as a {@code null}. - * - * @param issuer the required Issuer value. If multiple values are given, the claim must at least match one of them - * @return this same Verification instance. - */ - Verification withIssuer(String... issuer); - - /** - * Verifies whether the JWT contains a Subject ("sub") claim that equals to the value provided. - * This check is case-sensitive. - * - * @param subject the required Subject value - * @return this same Verification instance. - */ - Verification withSubject(String subject); - - /** - * Verifies whether the JWT contains an Audience ("aud") claim that contains all the values provided. - * This check is case-sensitive. An empty array is considered as a {@code null}. - * - * @param audience the required Audience value - * @return this same Verification instance. - */ - Verification withAudience(String... audience); - - /** - * Verifies whether the JWT contains an Audience ("aud") claim contain at least one of the specified audiences. - * This check is case-sensitive. An empty array is considered as a {@code null}. - * - * @param audience the required Audience value for which the "aud" claim must contain at least one value. - * @return this same Verification instance. - */ - Verification withAnyOfAudience(String... audience); - - /** - * Define the default window in seconds in which the Not Before, Issued At and Expires At Claims - * will still be valid. Setting a specific leeway value on a given Claim will override this value for that Claim. - * - * @param leeway the window in seconds in which the Not Before, Issued At and Expires At Claims will still be valid. - * @return this same Verification instance. - * @throws IllegalArgumentException if leeway is negative. - */ - Verification acceptLeeway(long leeway) throws IllegalArgumentException; - - /** - * Set a specific leeway window in seconds in which the Expires At ("exp") Claim will still be valid. - * Expiration Date is always verified when the value is present. - * This method overrides the value set with acceptLeeway - * - * @param leeway the window in seconds in which the Expires At Claim will still be valid. - * @return this same Verification instance. - * @throws IllegalArgumentException if leeway is negative. - */ - Verification acceptExpiresAt(long leeway) throws IllegalArgumentException; - - /** - * Set a specific leeway window in seconds in which the Not Before ("nbf") Claim will still be valid. - * Not Before Date is always verified when the value is present. - * This method overrides the value set with acceptLeeway - * - * @param leeway the window in seconds in which the Not Before Claim will still be valid. - * @return this same Verification instance. - * @throws IllegalArgumentException if leeway is negative. - */ - Verification acceptNotBefore(long leeway) throws IllegalArgumentException; - - /** - * Set a specific leeway window in seconds in which the Issued At ("iat") Claim will still be valid. - * This method overrides the value set with {@link #acceptLeeway(long)}. - * By default, the Issued At claim is always verified when the value is present, - * unless disabled with {@link #ignoreIssuedAt()}. - * If Issued At verification has been disabled, no verification of the Issued At claim will be performed, - * and this method has no effect. - * - * @param leeway the window in seconds in which the Issued At Claim will still be valid. - * @return this same Verification instance. - * @throws IllegalArgumentException if leeway is negative. - */ - Verification acceptIssuedAt(long leeway) throws IllegalArgumentException; - - /** - * Verifies whether the JWT contains a JWT ID ("jti") claim that equals to the value provided. - * This check is case-sensitive. - * - * @param jwtId the required ID value - * @return this same Verification instance. - */ - Verification withJWTId(String jwtId); - - /** - * Verifies whether the claim is present in the JWT, with any value including {@code null}. - * - * @param name the Claim's name. - * @return this same Verification instance - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaimPresence(String name) throws IllegalArgumentException; - - /** - * Verifies whether the claim is present with a {@code null} value. - * - * @param name the Claim's name. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withNullClaim(String name) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Boolean value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, Boolean value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Integer value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, Integer value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Long value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, Long value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Integer value. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, Double value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given String value. - * This check is case-sensitive. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, String value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Date value. - * Note that date-time claims are serialized as seconds since the epoch; - * when verifying date-time claim value, any time units more granular than seconds will not be considered. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, Date value) throws IllegalArgumentException; - - /** - * Verifies whether the claim is equal to the given Instant value. - * Note that date-time claims are serialized as seconds since the epoch; - * when verifying a date-time claim value, any time units more granular than seconds will not be considered. - * - * @param name the Claim's name. - * @param value the Claim's value. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - default Verification withClaim(String name, Instant value) throws IllegalArgumentException { - return withClaim(name, value != null ? Date.from(value) : null); - } - - /** - * Executes the predicate provided and the validates the JWT if the predicate returns true. - * - * @param name the Claim's name - * @param predicate the predicate check to be done. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withClaim(String name, BiPredicate predicate) throws IllegalArgumentException; - - /** - * Verifies whether the claim contain at least the given String items. - * - * @param name the Claim's name. - * @param items the items the Claim must contain. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withArrayClaim(String name, String... items) throws IllegalArgumentException; - - /** - * Verifies whether the claim contain at least the given Integer items. - * - * @param name the Claim's name. - * @param items the items the Claim must contain. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - Verification withArrayClaim(String name, Integer... items) throws IllegalArgumentException; - - /** - * Verifies whether the claim contain at least the given Long items. - * - * @param name the Claim's name. - * @param items the items the Claim must contain. - * @return this same Verification instance. - * @throws IllegalArgumentException if the name is {@code null}. - */ - - Verification withArrayClaim(String name, Long ... items) throws IllegalArgumentException; - - /** - * Skip the Issued At ("iat") claim verification. By default, the verification is performed. - * - * @return this same Verification instance. - */ - Verification ignoreIssuedAt(); - - /** - * Creates a new and reusable instance of the JWTVerifier with the configuration already provided. - * - * @return a new {@link com.auth0.jwt.interfaces.JWTVerifier} instance. - */ - JWTVerifier build(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java deleted file mode 100644 index d133ee2f49b..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGenerator.java +++ /dev/null @@ -1,26 +0,0 @@ -// Generated automatically from javax.crypto.KeyGenerator for testing purposes - -package javax.crypto; - -import java.security.Provider; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; -import javax.crypto.KeyGeneratorSpi; -import javax.crypto.SecretKey; - -public class KeyGenerator -{ - protected KeyGenerator() {} - protected KeyGenerator(KeyGeneratorSpi p0, Provider p1, String p2){} - public final Provider getProvider(){ return null; } - public final SecretKey generateKey(){ return null; } - public final String getAlgorithm(){ return null; } - public final void init(AlgorithmParameterSpec p0){} - public final void init(AlgorithmParameterSpec p0, SecureRandom p1){} - public final void init(SecureRandom p0){} - public final void init(int p0){} - public final void init(int p0, SecureRandom p1){} - public static KeyGenerator getInstance(String p0){ return null; } - public static KeyGenerator getInstance(String p0, Provider p1){ return null; } - public static KeyGenerator getInstance(String p0, String p1){ return null; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java b/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java deleted file mode 100644 index aba2623123a..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/crypto/KeyGeneratorSpi.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.crypto.KeyGeneratorSpi for testing purposes - -package javax.crypto; - -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; -import javax.crypto.SecretKey; - -abstract public class KeyGeneratorSpi -{ - protected abstract SecretKey engineGenerateKey(); - protected abstract void engineInit(AlgorithmParameterSpec p0, SecureRandom p1); - protected abstract void engineInit(SecureRandom p0); - protected abstract void engineInit(int p0, SecureRandom p1); - public KeyGeneratorSpi(){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java b/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java deleted file mode 100644 index 88c9e4539ba..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/crypto/SecretKey.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.crypto.SecretKey for testing purposes - -package javax.crypto; - -import java.security.Key; -import javax.security.auth.Destroyable; - -public interface SecretKey extends Destroyable, Key -{ - static long serialVersionUID = 0; -} diff --git a/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java b/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java deleted file mode 100644 index 979ca409ba6..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/security/auth/Destroyable.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.security.auth.Destroyable for testing purposes - -package javax.security.auth; - - -public interface Destroyable -{ - default boolean isDestroyed(){ return false; } - default void destroy(){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java deleted file mode 100644 index 70a39f55ac9..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncContext.java +++ /dev/null @@ -1,31 +0,0 @@ -// Generated automatically from javax.servlet.AsyncContext for testing purposes - -package javax.servlet; - -import javax.servlet.AsyncListener; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface AsyncContext -{ - T createListener(java.lang.Class p0); - ServletRequest getRequest(); - ServletResponse getResponse(); - boolean hasOriginalRequestAndResponse(); - long getTimeout(); - static String ASYNC_CONTEXT_PATH = null; - static String ASYNC_MAPPING = null; - static String ASYNC_PATH_INFO = null; - static String ASYNC_QUERY_STRING = null; - static String ASYNC_REQUEST_URI = null; - static String ASYNC_SERVLET_PATH = null; - void addListener(AsyncListener p0); - void addListener(AsyncListener p0, ServletRequest p1, ServletResponse p2); - void complete(); - void dispatch(); - void dispatch(ServletContext p0, String p1); - void dispatch(String p0); - void setTimeout(long p0); - void start(Runnable p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java deleted file mode 100644 index d7cb9c2b175..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.AsyncEvent for testing purposes - -package javax.servlet; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public class AsyncEvent -{ - protected AsyncEvent() {} - public AsyncContext getAsyncContext(){ return null; } - public AsyncEvent(AsyncContext p0){} - public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2){} - public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2, Throwable p3){} - public AsyncEvent(AsyncContext p0, Throwable p1){} - public ServletRequest getSuppliedRequest(){ return null; } - public ServletResponse getSuppliedResponse(){ return null; } - public Throwable getThrowable(){ return null; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java deleted file mode 100644 index 2723482f668..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/AsyncListener.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.AsyncListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; -import javax.servlet.AsyncEvent; - -public interface AsyncListener extends EventListener -{ - void onComplete(AsyncEvent p0); - void onError(AsyncEvent p0); - void onStartAsync(AsyncEvent p0); - void onTimeout(AsyncEvent p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java b/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java deleted file mode 100644 index 2b7b44f328d..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/DispatcherType.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.DispatcherType for testing purposes - -package javax.servlet; - - -public enum DispatcherType -{ - ASYNC, ERROR, FORWARD, INCLUDE, REQUEST; - private DispatcherType() {} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java b/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java deleted file mode 100644 index 64b9f9d73a8..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/Filter.java +++ /dev/null @@ -1,15 +0,0 @@ -// Generated automatically from javax.servlet.Filter for testing purposes - -package javax.servlet; - -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface Filter -{ - default void destroy(){} - default void init(FilterConfig p0){} - void doFilter(ServletRequest p0, ServletResponse p1, FilterChain p2); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java deleted file mode 100644 index f64ab722684..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/FilterChain.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.FilterChain for testing purposes - -package javax.servlet; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface FilterChain -{ - void doFilter(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java deleted file mode 100644 index 0e140c6680c..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/FilterConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.FilterConfig for testing purposes - -package javax.servlet; - -import java.util.Enumeration; -import javax.servlet.ServletContext; - -public interface FilterConfig -{ - Enumeration getInitParameterNames(); - ServletContext getServletContext(); - String getFilterName(); - String getInitParameter(String p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java b/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java deleted file mode 100644 index 6ad0739ceb6..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/FilterRegistration.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.FilterRegistration for testing purposes - -package javax.servlet; - -import java.util.Collection; -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import javax.servlet.Registration; - -public interface FilterRegistration extends Registration -{ - Collection getServletNameMappings(); - Collection getUrlPatternMappings(); - static public interface Dynamic extends FilterRegistration, Registration.Dynamic - { - } - void addMappingForServletNames(EnumSet p0, boolean p1, String... p2); - void addMappingForUrlPatterns(EnumSet p0, boolean p1, String... p2); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java deleted file mode 100644 index 5f7bdcda487..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/GenericServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.GenericServlet for testing purposes - -package javax.servlet; - -import java.io.Serializable; -import java.util.Enumeration; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -abstract public class GenericServlet implements Serializable, Servlet, ServletConfig -{ - public Enumeration getInitParameterNames(){ return null; } - public GenericServlet(){} - public ServletConfig getServletConfig(){ return null; } - public ServletContext getServletContext(){ return null; } - public String getInitParameter(String p0){ return null; } - public String getServletInfo(){ return null; } - public String getServletName(){ return null; } - public abstract void service(ServletRequest p0, ServletResponse p1); - public void destroy(){} - public void init(){} - public void init(ServletConfig p0){} - public void log(String p0){} - public void log(String p0, Throwable p1){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java deleted file mode 100644 index 6598aa47cc5..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/HttpConstraintElement.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.servlet.HttpConstraintElement for testing purposes - -package javax.servlet; - -import javax.servlet.annotation.ServletSecurity; - -public class HttpConstraintElement -{ - public HttpConstraintElement(){} - public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0){} - public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0, ServletSecurity.TransportGuarantee p1, String... p2){} - public HttpConstraintElement(ServletSecurity.TransportGuarantee p0, String... p1){} - public ServletSecurity.EmptyRoleSemantic getEmptyRoleSemantic(){ return null; } - public ServletSecurity.TransportGuarantee getTransportGuarantee(){ return null; } - public String[] getRolesAllowed(){ return null; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java deleted file mode 100644 index ddb52527004..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/HttpMethodConstraintElement.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.HttpMethodConstraintElement for testing purposes - -package javax.servlet; - -import javax.servlet.HttpConstraintElement; - -public class HttpMethodConstraintElement extends HttpConstraintElement -{ - protected HttpMethodConstraintElement() {} - public HttpMethodConstraintElement(String p0){} - public HttpMethodConstraintElement(String p0, HttpConstraintElement p1){} - public String getMethodName(){ return null; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java deleted file mode 100644 index 8470d9a5317..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/MultipartConfigElement.java +++ /dev/null @@ -1,17 +0,0 @@ -// Generated automatically from javax.servlet.MultipartConfigElement for testing purposes - -package javax.servlet; - -import javax.servlet.annotation.MultipartConfig; - -public class MultipartConfigElement -{ - protected MultipartConfigElement() {} - public MultipartConfigElement(MultipartConfig p0){} - public MultipartConfigElement(String p0){} - public MultipartConfigElement(String p0, long p1, long p2, int p3){} - public String getLocation(){ return null; } - public int getFileSizeThreshold(){ return 0; } - public long getMaxFileSize(){ return 0; } - public long getMaxRequestSize(){ return 0; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java deleted file mode 100644 index 367594ef7da..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ReadListener.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.ReadListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; - -public interface ReadListener extends EventListener -{ - void onAllDataRead(); - void onDataAvailable(); - void onError(Throwable p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java b/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java deleted file mode 100644 index 5d4095813ef..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/Registration.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.Registration for testing purposes - -package javax.servlet; - -import java.util.Map; -import java.util.Set; - -public interface Registration -{ - Map getInitParameters(); - Set setInitParameters(Map p0); - String getClassName(); - String getInitParameter(String p0); - String getName(); - boolean setInitParameter(String p0, String p1); - static public interface Dynamic extends Registration - { - void setAsyncSupported(boolean p0); - } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java b/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java deleted file mode 100644 index ad017e4f501..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/RequestDispatcher.java +++ /dev/null @@ -1,30 +0,0 @@ -// Generated automatically from javax.servlet.RequestDispatcher for testing purposes - -package javax.servlet; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface RequestDispatcher -{ - static String ERROR_EXCEPTION = null; - static String ERROR_EXCEPTION_TYPE = null; - static String ERROR_MESSAGE = null; - static String ERROR_REQUEST_URI = null; - static String ERROR_SERVLET_NAME = null; - static String ERROR_STATUS_CODE = null; - static String FORWARD_CONTEXT_PATH = null; - static String FORWARD_MAPPING = null; - static String FORWARD_PATH_INFO = null; - static String FORWARD_QUERY_STRING = null; - static String FORWARD_REQUEST_URI = null; - static String FORWARD_SERVLET_PATH = null; - static String INCLUDE_CONTEXT_PATH = null; - static String INCLUDE_MAPPING = null; - static String INCLUDE_PATH_INFO = null; - static String INCLUDE_QUERY_STRING = null; - static String INCLUDE_REQUEST_URI = null; - static String INCLUDE_SERVLET_PATH = null; - void forward(ServletRequest p0, ServletResponse p1); - void include(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java deleted file mode 100644 index 231c011a6f8..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/Servlet.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.servlet.Servlet for testing purposes - -package javax.servlet; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface Servlet -{ - ServletConfig getServletConfig(); - String getServletInfo(); - void destroy(); - void init(ServletConfig p0); - void service(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java deleted file mode 100644 index c483c16ac4e..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.ServletConfig for testing purposes - -package javax.servlet; - -import java.util.Enumeration; -import javax.servlet.ServletContext; - -public interface ServletConfig -{ - Enumeration getInitParameterNames(); - ServletContext getServletContext(); - String getInitParameter(String p0); - String getServletName(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java deleted file mode 100644 index 812393f61e9..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletContext.java +++ /dev/null @@ -1,83 +0,0 @@ -// Generated automatically from javax.servlet.ServletContext for testing purposes - -package javax.servlet; - -import java.io.InputStream; -import java.net.URL; -import java.util.Enumeration; -import java.util.EventListener; -import java.util.Map; -import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletRegistration; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; -import javax.servlet.descriptor.JspConfigDescriptor; - -public interface ServletContext -{ - T createListener(java.lang.Class p0); - void addListener(T p0); - T createFilter(java.lang.Class p0); - T createServlet(java.lang.Class p0); - ClassLoader getClassLoader(); - Enumeration getServlets(); - Enumeration getAttributeNames(); - Enumeration getInitParameterNames(); - Enumeration getServletNames(); - FilterRegistration getFilterRegistration(String p0); - FilterRegistration.Dynamic addFilter(String p0, Class p1); - FilterRegistration.Dynamic addFilter(String p0, Filter p1); - FilterRegistration.Dynamic addFilter(String p0, String p1); - InputStream getResourceAsStream(String p0); - JspConfigDescriptor getJspConfigDescriptor(); - Map getFilterRegistrations(); - Map getServletRegistrations(); - Object getAttribute(String p0); - RequestDispatcher getNamedDispatcher(String p0); - RequestDispatcher getRequestDispatcher(String p0); - Servlet getServlet(String p0); - ServletContext getContext(String p0); - ServletRegistration getServletRegistration(String p0); - ServletRegistration.Dynamic addJspFile(String p0, String p1); - ServletRegistration.Dynamic addServlet(String p0, Class p1); - ServletRegistration.Dynamic addServlet(String p0, Servlet p1); - ServletRegistration.Dynamic addServlet(String p0, String p1); - SessionCookieConfig getSessionCookieConfig(); - Set getDefaultSessionTrackingModes(); - Set getEffectiveSessionTrackingModes(); - Set getResourcePaths(String p0); - String getContextPath(); - String getInitParameter(String p0); - String getMimeType(String p0); - String getRealPath(String p0); - String getRequestCharacterEncoding(); - String getResponseCharacterEncoding(); - String getServerInfo(); - String getServletContextName(); - String getVirtualServerName(); - URL getResource(String p0); - boolean setInitParameter(String p0, String p1); - int getEffectiveMajorVersion(); - int getEffectiveMinorVersion(); - int getMajorVersion(); - int getMinorVersion(); - int getSessionTimeout(); - static String ORDERED_LIBS = null; - static String TEMPDIR = null; - void addListener(Class p0); - void addListener(String p0); - void declareRoles(String... p0); - void log(Exception p0, String p1); - void log(String p0); - void log(String p0, Throwable p1); - void removeAttribute(String p0); - void setAttribute(String p0, Object p1); - void setRequestCharacterEncoding(String p0); - void setResponseCharacterEncoding(String p0); - void setSessionTimeout(int p0); - void setSessionTrackingModes(Set p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java deleted file mode 100644 index 31034066970..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletInputStream.java +++ /dev/null @@ -1,15 +0,0 @@ -// Generated automatically from javax.servlet.ServletInputStream for testing purposes - -package javax.servlet; - -import java.io.InputStream; -import javax.servlet.ReadListener; - -abstract public class ServletInputStream extends InputStream -{ - protected ServletInputStream(){} - public abstract boolean isFinished(); - public abstract boolean isReady(); - public abstract void setReadListener(ReadListener p0); - public int readLine(byte[] p0, int p1, int p2){ return 0; } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java deleted file mode 100644 index 52a2162c9eb..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletOutputStream.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.ServletOutputStream for testing purposes - -package javax.servlet; - -import java.io.OutputStream; -import javax.servlet.WriteListener; - -abstract public class ServletOutputStream extends OutputStream -{ - protected ServletOutputStream(){} - public abstract boolean isReady(); - public abstract void setWriteListener(WriteListener p0); - public void print(String p0){} - public void print(boolean p0){} - public void print(char p0){} - public void print(double p0){} - public void print(float p0){} - public void print(int p0){} - public void print(long p0){} - public void println(){} - public void println(String p0){} - public void println(boolean p0){} - public void println(char p0){} - public void println(double p0){} - public void println(float p0){} - public void println(int p0){} - public void println(long p0){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java deleted file mode 100644 index a1cc66f2d19..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRegistration.java +++ /dev/null @@ -1,23 +0,0 @@ -// Generated automatically from javax.servlet.ServletRegistration for testing purposes - -package javax.servlet; - -import java.util.Collection; -import java.util.Set; -import javax.servlet.MultipartConfigElement; -import javax.servlet.Registration; -import javax.servlet.ServletSecurityElement; - -public interface ServletRegistration extends Registration -{ - Collection getMappings(); - Set addMapping(String... p0); - String getRunAsRole(); - static public interface Dynamic extends Registration.Dynamic, ServletRegistration - { - Set setServletSecurity(ServletSecurityElement p0); - void setLoadOnStartup(int p0); - void setMultipartConfig(MultipartConfigElement p0); - void setRunAsRole(String p0); - } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java deleted file mode 100644 index fc0db462cc0..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletRequest.java +++ /dev/null @@ -1,55 +0,0 @@ -// Generated automatically from javax.servlet.ServletRequest for testing purposes - -package javax.servlet; - -import java.io.BufferedReader; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Map; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletResponse; - -public interface ServletRequest -{ - AsyncContext getAsyncContext(); - AsyncContext startAsync(); - AsyncContext startAsync(ServletRequest p0, ServletResponse p1); - BufferedReader getReader(); - DispatcherType getDispatcherType(); - Enumeration getLocales(); - Enumeration getAttributeNames(); - Enumeration getParameterNames(); - Locale getLocale(); - Map getParameterMap(); - Object getAttribute(String p0); - RequestDispatcher getRequestDispatcher(String p0); - ServletContext getServletContext(); - ServletInputStream getInputStream(); - String getCharacterEncoding(); - String getContentType(); - String getLocalAddr(); - String getLocalName(); - String getParameter(String p0); - String getProtocol(); - String getRealPath(String p0); - String getRemoteAddr(); - String getRemoteHost(); - String getScheme(); - String getServerName(); - String[] getParameterValues(String p0); - boolean isAsyncStarted(); - boolean isAsyncSupported(); - boolean isSecure(); - int getContentLength(); - int getLocalPort(); - int getRemotePort(); - int getServerPort(); - long getContentLengthLong(); - void removeAttribute(String p0); - void setAttribute(String p0, Object p1); - void setCharacterEncoding(String p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java deleted file mode 100644 index db6610bc15d..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -// Generated automatically from javax.servlet.ServletResponse for testing purposes - -package javax.servlet; - -import java.io.PrintWriter; -import java.util.Locale; -import javax.servlet.ServletOutputStream; - -public interface ServletResponse -{ - Locale getLocale(); - PrintWriter getWriter(); - ServletOutputStream getOutputStream(); - String getCharacterEncoding(); - String getContentType(); - boolean isCommitted(); - int getBufferSize(); - void flushBuffer(); - void reset(); - void resetBuffer(); - void setBufferSize(int p0); - void setCharacterEncoding(String p0); - void setContentLength(int p0); - void setContentLengthLong(long p0); - void setContentType(String p0); - void setLocale(Locale p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java b/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java deleted file mode 100644 index def47937391..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/ServletSecurityElement.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.ServletSecurityElement for testing purposes - -package javax.servlet; - -import java.util.Collection; -import javax.servlet.HttpConstraintElement; -import javax.servlet.HttpMethodConstraintElement; -import javax.servlet.annotation.ServletSecurity; - -public class ServletSecurityElement extends HttpConstraintElement -{ - public Collection getHttpMethodConstraints(){ return null; } - public Collection getMethodNames(){ return null; } - public ServletSecurityElement(){} - public ServletSecurityElement(Collection p0){} - public ServletSecurityElement(HttpConstraintElement p0){} - public ServletSecurityElement(HttpConstraintElement p0, Collection p1){} - public ServletSecurityElement(ServletSecurity p0){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java deleted file mode 100644 index 4cae9a11f30..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/SessionCookieConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -// Generated automatically from javax.servlet.SessionCookieConfig for testing purposes - -package javax.servlet; - - -public interface SessionCookieConfig -{ - String getComment(); - String getDomain(); - String getName(); - String getPath(); - boolean isHttpOnly(); - boolean isSecure(); - int getMaxAge(); - void setComment(String p0); - void setDomain(String p0); - void setHttpOnly(boolean p0); - void setMaxAge(int p0); - void setName(String p0); - void setPath(String p0); - void setSecure(boolean p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java b/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java deleted file mode 100644 index 684ac40c56f..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/SessionTrackingMode.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.SessionTrackingMode for testing purposes - -package javax.servlet; - - -public enum SessionTrackingMode -{ - COOKIE, SSL, URL; - private SessionTrackingMode() {} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java b/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java deleted file mode 100644 index 24fe504271c..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/WriteListener.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.WriteListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; - -public interface WriteListener extends EventListener -{ - void onError(Throwable p0); - void onWritePossible(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java deleted file mode 100644 index f47efc62744..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpConstraint.java +++ /dev/null @@ -1,18 +0,0 @@ -// Generated automatically from javax.servlet.annotation.HttpConstraint for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import javax.servlet.annotation.ServletSecurity; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -public @interface HttpConstraint -{ - ServletSecurity.EmptyRoleSemantic value(); - ServletSecurity.TransportGuarantee transportGuarantee(); - String[] rolesAllowed(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java deleted file mode 100644 index 288f4651018..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/HttpMethodConstraint.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.annotation.HttpMethodConstraint for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import javax.servlet.annotation.ServletSecurity; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -public @interface HttpMethodConstraint -{ - ServletSecurity.EmptyRoleSemantic emptyRoleSemantic(); - ServletSecurity.TransportGuarantee transportGuarantee(); - String value(); - String[] rolesAllowed(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java deleted file mode 100644 index baccad3e199..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/MultipartConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.annotation.MultipartConfig for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface MultipartConfig -{ - String location(); - int fileSizeThreshold(); - long maxFileSize(); - long maxRequestSize(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java deleted file mode 100644 index 021b6c64c2a..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/ServletSecurity.java +++ /dev/null @@ -1,33 +0,0 @@ -// Generated automatically from javax.servlet.annotation.ServletSecurity for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.servlet.annotation.HttpConstraint; -import javax.servlet.annotation.HttpMethodConstraint; - -@Documented -@Inherited -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface ServletSecurity -{ - HttpConstraint value(); - HttpMethodConstraint[] httpMethodConstraints(); - static public enum EmptyRoleSemantic - { - DENY, PERMIT; - private EmptyRoleSemantic() {} - } - static public enum TransportGuarantee - { - CONFIDENTIAL, NONE; - private TransportGuarantee() {} - } -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java deleted file mode 100644 index 513c7d7053b..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebInitParam.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.annotation.WebInitParam for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface WebInitParam -{ - String description(); - String name(); - String value(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java deleted file mode 100644 index 83b5d2e476a..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/annotation/WebServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.annotation.WebServlet for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.servlet.annotation.WebInitParam; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface WebServlet -{ - String description(); - String displayName(); - String largeIcon(); - String name(); - String smallIcon(); - String[] urlPatterns(); - String[] value(); - WebInitParam[] initParams(); - boolean asyncSupported(); - int loadOnStartup(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java deleted file mode 100644 index 8d93a4318d7..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspConfigDescriptor.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.JspConfigDescriptor for testing purposes - -package javax.servlet.descriptor; - -import java.util.Collection; -import javax.servlet.descriptor.JspPropertyGroupDescriptor; -import javax.servlet.descriptor.TaglibDescriptor; - -public interface JspConfigDescriptor -{ - Collection getJspPropertyGroups(); - Collection getTaglibs(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java deleted file mode 100644 index dd852fa1088..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/JspPropertyGroupDescriptor.java +++ /dev/null @@ -1,21 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.JspPropertyGroupDescriptor for testing purposes - -package javax.servlet.descriptor; - -import java.util.Collection; - -public interface JspPropertyGroupDescriptor -{ - Collection getIncludeCodas(); - Collection getIncludePreludes(); - Collection getUrlPatterns(); - String getBuffer(); - String getDefaultContentType(); - String getDeferredSyntaxAllowedAsLiteral(); - String getElIgnored(); - String getErrorOnUndeclaredNamespace(); - String getIsXml(); - String getPageEncoding(); - String getScriptingInvalid(); - String getTrimDirectiveWhitespaces(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java b/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java deleted file mode 100644 index c3dd5c10473..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/descriptor/TaglibDescriptor.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.TaglibDescriptor for testing purposes - -package javax.servlet.descriptor; - - -public interface TaglibDescriptor -{ - String getTaglibLocation(); - String getTaglibURI(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java deleted file mode 100644 index b5a180029be..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/Cookie.java +++ /dev/null @@ -1,29 +0,0 @@ -// Generated automatically from javax.servlet.http.Cookie for testing purposes - -package javax.servlet.http; - -import java.io.Serializable; - -public class Cookie implements Cloneable, Serializable -{ - protected Cookie() {} - public Cookie(String p0, String p1){} - public Object clone(){ return null; } - public String getComment(){ return null; } - public String getDomain(){ return null; } - public String getName(){ return null; } - public String getPath(){ return null; } - public String getValue(){ return null; } - public boolean getSecure(){ return false; } - public boolean isHttpOnly(){ return false; } - public int getMaxAge(){ return 0; } - public int getVersion(){ return 0; } - public void setComment(String p0){} - public void setDomain(String p0){} - public void setHttpOnly(boolean p0){} - public void setMaxAge(int p0){} - public void setPath(String p0){} - public void setSecure(boolean p0){} - public void setValue(String p0){} - public void setVersion(int p0){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java deleted file mode 100644 index 1247f956d78..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServlet.java +++ /dev/null @@ -1,24 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServlet for testing purposes - -package javax.servlet.http; - -import javax.servlet.GenericServlet; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -abstract public class HttpServlet extends GenericServlet -{ - protected long getLastModified(HttpServletRequest p0){ return 0; } - protected void doDelete(HttpServletRequest p0, HttpServletResponse p1){} - protected void doGet(HttpServletRequest p0, HttpServletResponse p1){} - protected void doHead(HttpServletRequest p0, HttpServletResponse p1){} - protected void doOptions(HttpServletRequest p0, HttpServletResponse p1){} - protected void doPost(HttpServletRequest p0, HttpServletResponse p1){} - protected void doPut(HttpServletRequest p0, HttpServletResponse p1){} - protected void doTrace(HttpServletRequest p0, HttpServletResponse p1){} - protected void service(HttpServletRequest p0, HttpServletResponse p1){} - public HttpServlet(){} - public void service(ServletRequest p0, ServletResponse p1){} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java deleted file mode 100644 index 1b597f27773..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletMapping.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletMapping for testing purposes - -package javax.servlet.http; - -import javax.servlet.http.MappingMatch; - -public interface HttpServletMapping -{ - MappingMatch getMappingMatch(); - String getMatchValue(); - String getPattern(); - String getServletName(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java deleted file mode 100644 index 8612c34fb69..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletRequest.java +++ /dev/null @@ -1,60 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletRequest for testing purposes - -package javax.servlet.http; - -import java.security.Principal; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Map; -import javax.servlet.ServletRequest; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; -import javax.servlet.http.PushBuilder; - -public interface HttpServletRequest extends ServletRequest -{ - T upgrade(java.lang.Class p0); - Collection getParts(); - Cookie[] getCookies(); - Enumeration getHeaderNames(); - Enumeration getHeaders(String p0); - HttpSession getSession(); - HttpSession getSession(boolean p0); - Part getPart(String p0); - Principal getUserPrincipal(); - String changeSessionId(); - String getAuthType(); - String getContextPath(); - String getHeader(String p0); - String getMethod(); - String getPathInfo(); - String getPathTranslated(); - String getQueryString(); - String getRemoteUser(); - String getRequestURI(); - String getRequestedSessionId(); - String getServletPath(); - StringBuffer getRequestURL(); - boolean authenticate(HttpServletResponse p0); - boolean isRequestedSessionIdFromCookie(); - boolean isRequestedSessionIdFromURL(); - boolean isRequestedSessionIdFromUrl(); - boolean isRequestedSessionIdValid(); - boolean isUserInRole(String p0); - default HttpServletMapping getHttpServletMapping(){ return null; } - default Map getTrailerFields(){ return null; } - default PushBuilder newPushBuilder(){ return null; } - default boolean isTrailerFieldsReady(){ return false; } - int getIntHeader(String p0); - long getDateHeader(String p0); - static String BASIC_AUTH = null; - static String CLIENT_CERT_AUTH = null; - static String DIGEST_AUTH = null; - static String FORM_AUTH = null; - void login(String p0, String p1); - void logout(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java deleted file mode 100644 index da902dbf30c..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpServletResponse.java +++ /dev/null @@ -1,77 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletResponse for testing purposes - -package javax.servlet.http; - -import java.util.Collection; -import java.util.Map; -import java.util.function.Supplier; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; - -public interface HttpServletResponse extends ServletResponse -{ - Collection getHeaderNames(); - Collection getHeaders(String p0); - String encodeRedirectURL(String p0); - String encodeRedirectUrl(String p0); - String encodeURL(String p0); - String encodeUrl(String p0); - String getHeader(String p0); - boolean containsHeader(String p0); - default Supplier> getTrailerFields(){ return null; } - default void setTrailerFields(Supplier> p0){} - int getStatus(); - static int SC_ACCEPTED = 0; - static int SC_BAD_GATEWAY = 0; - static int SC_BAD_REQUEST = 0; - static int SC_CONFLICT = 0; - static int SC_CONTINUE = 0; - static int SC_CREATED = 0; - static int SC_EXPECTATION_FAILED = 0; - static int SC_FORBIDDEN = 0; - static int SC_FOUND = 0; - static int SC_GATEWAY_TIMEOUT = 0; - static int SC_GONE = 0; - static int SC_HTTP_VERSION_NOT_SUPPORTED = 0; - static int SC_INTERNAL_SERVER_ERROR = 0; - static int SC_LENGTH_REQUIRED = 0; - static int SC_METHOD_NOT_ALLOWED = 0; - static int SC_MOVED_PERMANENTLY = 0; - static int SC_MOVED_TEMPORARILY = 0; - static int SC_MULTIPLE_CHOICES = 0; - static int SC_NON_AUTHORITATIVE_INFORMATION = 0; - static int SC_NOT_ACCEPTABLE = 0; - static int SC_NOT_FOUND = 0; - static int SC_NOT_IMPLEMENTED = 0; - static int SC_NOT_MODIFIED = 0; - static int SC_NO_CONTENT = 0; - static int SC_OK = 0; - static int SC_PARTIAL_CONTENT = 0; - static int SC_PAYMENT_REQUIRED = 0; - static int SC_PRECONDITION_FAILED = 0; - static int SC_PROXY_AUTHENTICATION_REQUIRED = 0; - static int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 0; - static int SC_REQUEST_ENTITY_TOO_LARGE = 0; - static int SC_REQUEST_TIMEOUT = 0; - static int SC_REQUEST_URI_TOO_LONG = 0; - static int SC_RESET_CONTENT = 0; - static int SC_SEE_OTHER = 0; - static int SC_SERVICE_UNAVAILABLE = 0; - static int SC_SWITCHING_PROTOCOLS = 0; - static int SC_TEMPORARY_REDIRECT = 0; - static int SC_UNAUTHORIZED = 0; - static int SC_UNSUPPORTED_MEDIA_TYPE = 0; - static int SC_USE_PROXY = 0; - void addCookie(Cookie p0); - void addDateHeader(String p0, long p1); - void addHeader(String p0, String p1); - void addIntHeader(String p0, int p1); - void sendError(int p0); - void sendError(int p0, String p1); - void sendRedirect(String p0); - void setDateHeader(String p0, long p1); - void setHeader(String p0, String p1); - void setIntHeader(String p0, int p1); - void setStatus(int p0); - void setStatus(int p0, String p1); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java deleted file mode 100644 index f8f455b1423..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSession.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpSession for testing purposes - -package javax.servlet.http; - -import java.util.Enumeration; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSessionContext; - -public interface HttpSession -{ - Enumeration getAttributeNames(); - HttpSessionContext getSessionContext(); - Object getAttribute(String p0); - Object getValue(String p0); - ServletContext getServletContext(); - String getId(); - String[] getValueNames(); - boolean isNew(); - int getMaxInactiveInterval(); - long getCreationTime(); - long getLastAccessedTime(); - void invalidate(); - void putValue(String p0, Object p1); - void removeAttribute(String p0); - void removeValue(String p0); - void setAttribute(String p0, Object p1); - void setMaxInactiveInterval(int p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java deleted file mode 100644 index 97a77b48358..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpSessionContext.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpSessionContext for testing purposes - -package javax.servlet.http; - -import java.util.Enumeration; -import javax.servlet.http.HttpSession; - -public interface HttpSessionContext -{ - Enumeration getIds(); - HttpSession getSession(String p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java deleted file mode 100644 index 987d49dbde2..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/HttpUpgradeHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpUpgradeHandler for testing purposes - -package javax.servlet.http; - -import javax.servlet.http.WebConnection; - -public interface HttpUpgradeHandler -{ - void destroy(); - void init(WebConnection p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java deleted file mode 100644 index 0432fd2ef7d..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/MappingMatch.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.http.MappingMatch for testing purposes - -package javax.servlet.http; - - -public enum MappingMatch -{ - CONTEXT_ROOT, DEFAULT, EXACT, EXTENSION, PATH; - private MappingMatch() {} -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java deleted file mode 100644 index a4e599748a5..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/Part.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.http.Part for testing purposes - -package javax.servlet.http; - -import java.io.InputStream; -import java.util.Collection; - -public interface Part -{ - Collection getHeaderNames(); - Collection getHeaders(String p0); - InputStream getInputStream(); - String getContentType(); - String getHeader(String p0); - String getName(); - String getSubmittedFileName(); - long getSize(); - void delete(); - void write(String p0); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java deleted file mode 100644 index 195e2426a83..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/PushBuilder.java +++ /dev/null @@ -1,23 +0,0 @@ -// Generated automatically from javax.servlet.http.PushBuilder for testing purposes - -package javax.servlet.http; - -import java.util.Set; - -public interface PushBuilder -{ - PushBuilder addHeader(String p0, String p1); - PushBuilder method(String p0); - PushBuilder path(String p0); - PushBuilder queryString(String p0); - PushBuilder removeHeader(String p0); - PushBuilder sessionId(String p0); - PushBuilder setHeader(String p0, String p1); - Set getHeaderNames(); - String getHeader(String p0); - String getMethod(); - String getPath(); - String getQueryString(); - String getSessionId(); - void push(); -} diff --git a/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java b/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java deleted file mode 100644 index 5001c046400..00000000000 --- a/java/ql/test/stubs/javax-4.0.1/servlet/http/WebConnection.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.http.WebConnection for testing purposes - -package javax.servlet.http; - -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; - -public interface WebConnection extends AutoCloseable -{ - ServletInputStream getInputStream(); - ServletOutputStream getOutputStream(); -} From 87b6495c917efe78751cc80cf9bb7a353c4a82bf Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:10:56 +0200 Subject: [PATCH 024/334] add zlib tests with stubs :) --- .../CWE/CWE-409/DecompressionBombs.qlref | 1 + .../Security/CWE/CWE-409/zlibTest.cpp | 182 ++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref new file mode 100644 index 00000000000..b3f71c4891a --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref @@ -0,0 +1 @@ +experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql \ No newline at end of file diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp new file mode 100644 index 00000000000..c55e18475fe --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp @@ -0,0 +1,182 @@ + +#define Z_NULL 0 +# define FAR +typedef unsigned char Byte; +typedef Byte FAR Bytef; +typedef unsigned int uInt; +#define Z_BEST_COMPRESSION 9 +#define Z_FINISH 4 +#define Z_NO_FLUSH 0 + + +typedef struct { + int *zalloc; + int *zfree; + Bytef *next_in; + Bytef *next_out; + int *opaque; + uInt avail_out; + uInt avail_in; +} z_stream; + + +void deflateInit(z_stream *defstream, int i); + +void deflate(z_stream *defstream, int i); + +void deflateEnd(z_stream *defstream); + +void inflateInit(z_stream *infstream); + +void inflate(z_stream *infstream, int i); + +void inflateEnd(z_stream *infstream); + +namespace std { + template + struct char_traits; + + template > + class basic_ostream { + public: + typedef charT char_type; + }; + + template + basic_ostream &operator<<(basic_ostream &, const charT *); + + typedef basic_ostream ostream; + + extern ostream cout; +} + +int UnsafeInflate(int argc, char *argv[]) { + // original string len = 36 + char a[50] = "Hello Hello Hello Hello Hello Hello!"; + // placeholder for the compressed (deflated) version of "a" + char b[50]; + // placeholder for the Uncompressed (inflated) version of "b" + char c[50]; + + + // STEP 1. + // zlib struct + z_stream defstream; + defstream.zalloc = Z_NULL; + defstream.zfree = Z_NULL; + defstream.opaque = Z_NULL; + // setup "a" as the input and "b" as the compressed output + defstream.avail_in = (uInt) 50 + 1; // size of input, string + terminator + defstream.next_in = (Bytef *) a; // input char array + defstream.avail_out = (uInt) sizeof(b); // size of output + defstream.next_out = (Bytef *) b; // output char array + + // the actual compression work. + deflateInit(&defstream, Z_BEST_COMPRESSION); + deflate(&defstream, Z_FINISH); + deflateEnd(&defstream); + + // This is one way of getting the size of the output + // STEP 2. + // inflate b into c + // zlib struct + z_stream infstream; + infstream.zalloc = Z_NULL; + infstream.zfree = Z_NULL; + infstream.opaque = Z_NULL; + // setup "b" as the input and "c" as the compressed output + // TOTHINK: Here we can add additional step from Right operand to z_stream variable access + infstream.avail_in = (uInt) ((char *) defstream.next_out - b); // size of input + infstream.next_in = (Bytef *) b; // input char array + infstream.avail_out = (uInt) sizeof(c); // size of output + infstream.next_out = (Bytef *) c; // output char array + + // uLong total_out; /* total number of bytes output so far */ + // the actual DE-compression work. + inflateInit(&infstream); + inflate(&infstream, Z_NO_FLUSH); + inflateEnd(&infstream); + + + return 0; +} + + +typedef struct { +} gzFile; + +gzFile gzopen(char *str, const char *rb); + + +void exit(int i); + +unsigned int gzread(gzFile gz_file, unsigned char *str, int i); + +void gzclose(gzFile gz_file); + +std::ostream operator<<(const std::ostream &lhs, unsigned char rhs); + + +int send(int, const void *, int, int); + + +int UnsafeGzread(char **argv) { + char *fileName; + send(0, fileName, 0, 0); + gzFile inFileZ = gzopen(fileName, "rb"); + if (&inFileZ == nullptr) { + exit(0); + } + unsigned char unzipBuffer[8192]; + unsigned int unzippedBytes; + while (true) { + unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); + if (unzippedBytes > 0) { + std::cout << unzippedBytes; + } else { + break; + } + } + gzclose(inFileZ); + return 0; +} + +bool gzfread(char *str, int i, int i1, gzFile gz_file); + +int UnsafeGzfread(char **argv) { + char *fileName; + send(0, fileName, 0, 0); + gzFile inFileZ = gzopen(fileName, "rb"); + if (&inFileZ == nullptr) { + exit(0); + } + while (true) { + char buffer[1000]; + if (!gzfread(buffer, 999, 1, inFileZ)) { + break; + } + } + gzclose(inFileZ); + return 0; +} + +char *gzgets(gzFile gz_file, char *buffer, int i); + +int UnsafeGzgets(char **argv) { + char *fileName; + send(0, fileName, 0, 0); + gzFile inFileZ = gzopen(fileName, "rb"); + if (&inFileZ == nullptr) { + exit(0); + } + char *buffer = new char[4000000000]; + char *result; + result = gzgets(inFileZ, buffer, 1000000000); + while (true) { + result = gzgets(inFileZ, buffer, 1000000000); + if (result == nullptr) { + break; + } + } + return 0; +} From a10b5021b4b70cbc8e86817539568cd757b4132b Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Mon, 15 Jul 2024 10:13:57 +0200 Subject: [PATCH 025/334] fix tests, it is not fixed 100% --- .../CWE/CWE-409/DecompressionBomb.qll | 10 +++++++ .../CWE/CWE-409/DecompressionBombs.ql | 2 -- .../Security/CWE/CWE-409/zlibTest.cpp | 27 ++++++++----------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll index ecc32a9ba0d..c17616d020d 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -1,5 +1,15 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking +import MiniZip +import ZlibGzopen +import ZlibInflator +import ZlibUncompress +import LibArchive +import LibMiniz +import XZ +import ZSTD +import Bzip2 +import Brotli /** * The Decompression Sink instances, extend this class to define new decompression sinks. diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 6f68390fdd2..896c15f7a80 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -15,8 +15,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File -import MiniZip -import ZlibGzopen import DecompressionBomb module DecompressionTaintConfig implements DataFlow::ConfigSig { diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp index c55e18475fe..b829cfaa61d 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp @@ -50,15 +50,12 @@ namespace std { extern ostream cout; } -int UnsafeInflate(int argc, char *argv[]) { - // original string len = 36 - char a[50] = "Hello Hello Hello Hello Hello Hello!"; +int UnsafeInflate(char *a) { // placeholder for the compressed (deflated) version of "a" char b[50]; // placeholder for the Uncompressed (inflated) version of "b" char c[50]; - // STEP 1. // zlib struct z_stream defstream; @@ -117,12 +114,7 @@ void gzclose(gzFile gz_file); std::ostream operator<<(const std::ostream &lhs, unsigned char rhs); -int send(int, const void *, int, int); - - -int UnsafeGzread(char **argv) { - char *fileName; - send(0, fileName, 0, 0); +int UnsafeGzread(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); if (&inFileZ == nullptr) { exit(0); @@ -143,9 +135,7 @@ int UnsafeGzread(char **argv) { bool gzfread(char *str, int i, int i1, gzFile gz_file); -int UnsafeGzfread(char **argv) { - char *fileName; - send(0, fileName, 0, 0); +int UnsafeGzfread(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); if (&inFileZ == nullptr) { exit(0); @@ -162,9 +152,7 @@ int UnsafeGzfread(char **argv) { char *gzgets(gzFile gz_file, char *buffer, int i); -int UnsafeGzgets(char **argv) { - char *fileName; - send(0, fileName, 0, 0); +int UnsafeGzgets(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); if (&inFileZ == nullptr) { exit(0); @@ -180,3 +168,10 @@ int UnsafeGzgets(char **argv) { } return 0; } + +int main(int argc, char **argv) { + UnsafeGzfread(argv[2]); + UnsafeGzgets(argv[2]); + UnsafeInflate(argv[2]); + UnsafeGzread(argv[2]); +} From 142d7ae005dd9e82f47e89cd0402408ccef7f678 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 19 Jul 2024 11:01:55 +0100 Subject: [PATCH 026/334] Make test compatible with Servlet 2.5; use old Servlet stubs --- .../security/CWE-347/JwtNoVerifier.java | 5 +- .../query-tests/security/CWE-347/options | 2 +- .../javax/crypto/KeyGenerator.java | 26 ------ .../javax/crypto/KeyGeneratorSpi.java | 16 ---- .../javax/crypto/SecretKey.java | 11 --- .../javax/security/auth/Destroyable.java | 10 --- .../javax/servlet/AsyncContext.java | 31 ------- .../javax/servlet/AsyncEvent.java | 20 ----- .../javax/servlet/AsyncListener.java | 14 ---- .../javax/servlet/DispatcherType.java | 10 --- .../javax/servlet/Filter.java | 15 ---- .../javax/servlet/FilterChain.java | 11 --- .../javax/servlet/FilterConfig.java | 14 ---- .../javax/servlet/FilterRegistration.java | 19 ----- .../javax/servlet/GenericServlet.java | 28 ------- .../javax/servlet/HttpConstraintElement.java | 16 ---- .../servlet/HttpMethodConstraintElement.java | 13 --- .../javax/servlet/MultipartConfigElement.java | 17 ---- .../javax/servlet/ReadListener.java | 12 --- .../javax/servlet/Registration.java | 20 ----- .../javax/servlet/RequestDispatcher.java | 30 ------- .../javax/servlet/Servlet.java | 16 ---- .../javax/servlet/ServletConfig.java | 14 ---- .../javax/servlet/ServletContext.java | 83 ------------------- .../javax/servlet/ServletInputStream.java | 15 ---- .../javax/servlet/ServletOutputStream.java | 28 ------- .../javax/servlet/ServletRegistration.java | 23 ----- .../javax/servlet/ServletRequest.java | 55 ------------ .../javax/servlet/ServletResponse.java | 27 ------ .../javax/servlet/ServletSecurityElement.java | 19 ----- .../javax/servlet/SessionCookieConfig.java | 22 ----- .../javax/servlet/SessionTrackingMode.java | 10 --- .../javax/servlet/WriteListener.java | 11 --- .../servlet/annotation/HttpConstraint.java | 18 ---- .../annotation/HttpMethodConstraint.java | 19 ----- .../servlet/annotation/MultipartConfig.java | 19 ----- .../servlet/annotation/ServletSecurity.java | 33 -------- .../servlet/annotation/WebInitParam.java | 20 ----- .../javax/servlet/annotation/WebServlet.java | 28 ------- .../descriptor/JspConfigDescriptor.java | 13 --- .../JspPropertyGroupDescriptor.java | 21 ----- .../servlet/descriptor/TaglibDescriptor.java | 10 --- .../javax/servlet/http/Cookie.java | 29 ------- .../javax/servlet/http/HttpServlet.java | 46 ---------- .../servlet/http/HttpServletMapping.java | 13 --- .../servlet/http/HttpServletRequest.java | 60 -------------- .../servlet/http/HttpServletResponse.java | 77 ----------------- .../javax/servlet/http/HttpSession.java | 28 ------- .../servlet/http/HttpSessionContext.java | 12 --- .../servlet/http/HttpUpgradeHandler.java | 11 --- .../javax/servlet/http/MappingMatch.java | 10 --- .../javax/servlet/http/Part.java | 20 ----- .../javax/servlet/http/PushBuilder.java | 23 ----- .../javax/servlet/http/WebConnection.java | 12 --- 54 files changed, 3 insertions(+), 1182 deletions(-) delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java delete mode 100644 java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java index 876c9c5b1c8..572be9e4c0c 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java +++ b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java @@ -12,10 +12,9 @@ import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTVerificationException; import com.auth0.jwt.interfaces.DecodedJWT; -@WebServlet(description = "", displayName = "", largeIcon = "", name = "JwtTest1", smallIcon = "", urlPatterns = {}, value = "/Auth", initParams = {}, asyncSupported = false, loadOnStartup = 0) public class JwtNoVerifier extends HttpServlet { - public void doPost(HttpServletRequest request, HttpServletResponse response) { + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); @@ -35,7 +34,7 @@ public class JwtNoVerifier extends HttpServlet { out.println(""); } - public void doGet(HttpServletRequest request, HttpServletResponse response) { + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/options b/java/ql/test/experimental/query-tests/security/CWE-347/options index f18d5929e9e..c83d38c3d09 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/options +++ b/java/ql/test/experimental/query-tests/security/CWE-347/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/auth0-java-jwt-4.4.0:${testdir}/../../../stubs/javax.servlet-api-4.0.1 \ No newline at end of file +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/auth0-java-jwt-4.4.0:${testdir}/../../../../stubs/javax-servlet-2.5 diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java deleted file mode 100644 index d133ee2f49b..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGenerator.java +++ /dev/null @@ -1,26 +0,0 @@ -// Generated automatically from javax.crypto.KeyGenerator for testing purposes - -package javax.crypto; - -import java.security.Provider; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; -import javax.crypto.KeyGeneratorSpi; -import javax.crypto.SecretKey; - -public class KeyGenerator -{ - protected KeyGenerator() {} - protected KeyGenerator(KeyGeneratorSpi p0, Provider p1, String p2){} - public final Provider getProvider(){ return null; } - public final SecretKey generateKey(){ return null; } - public final String getAlgorithm(){ return null; } - public final void init(AlgorithmParameterSpec p0){} - public final void init(AlgorithmParameterSpec p0, SecureRandom p1){} - public final void init(SecureRandom p0){} - public final void init(int p0){} - public final void init(int p0, SecureRandom p1){} - public static KeyGenerator getInstance(String p0){ return null; } - public static KeyGenerator getInstance(String p0, Provider p1){ return null; } - public static KeyGenerator getInstance(String p0, String p1){ return null; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java deleted file mode 100644 index aba2623123a..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/KeyGeneratorSpi.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.crypto.KeyGeneratorSpi for testing purposes - -package javax.crypto; - -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; -import javax.crypto.SecretKey; - -abstract public class KeyGeneratorSpi -{ - protected abstract SecretKey engineGenerateKey(); - protected abstract void engineInit(AlgorithmParameterSpec p0, SecureRandom p1); - protected abstract void engineInit(SecureRandom p0); - protected abstract void engineInit(int p0, SecureRandom p1); - public KeyGeneratorSpi(){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java deleted file mode 100644 index 88c9e4539ba..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/crypto/SecretKey.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.crypto.SecretKey for testing purposes - -package javax.crypto; - -import java.security.Key; -import javax.security.auth.Destroyable; - -public interface SecretKey extends Destroyable, Key -{ - static long serialVersionUID = 0; -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java deleted file mode 100644 index 979ca409ba6..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/security/auth/Destroyable.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.security.auth.Destroyable for testing purposes - -package javax.security.auth; - - -public interface Destroyable -{ - default boolean isDestroyed(){ return false; } - default void destroy(){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java deleted file mode 100644 index 70a39f55ac9..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncContext.java +++ /dev/null @@ -1,31 +0,0 @@ -// Generated automatically from javax.servlet.AsyncContext for testing purposes - -package javax.servlet; - -import javax.servlet.AsyncListener; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface AsyncContext -{ - T createListener(java.lang.Class p0); - ServletRequest getRequest(); - ServletResponse getResponse(); - boolean hasOriginalRequestAndResponse(); - long getTimeout(); - static String ASYNC_CONTEXT_PATH = null; - static String ASYNC_MAPPING = null; - static String ASYNC_PATH_INFO = null; - static String ASYNC_QUERY_STRING = null; - static String ASYNC_REQUEST_URI = null; - static String ASYNC_SERVLET_PATH = null; - void addListener(AsyncListener p0); - void addListener(AsyncListener p0, ServletRequest p1, ServletResponse p2); - void complete(); - void dispatch(); - void dispatch(ServletContext p0, String p1); - void dispatch(String p0); - void setTimeout(long p0); - void start(Runnable p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java deleted file mode 100644 index d7cb9c2b175..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.AsyncEvent for testing purposes - -package javax.servlet; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public class AsyncEvent -{ - protected AsyncEvent() {} - public AsyncContext getAsyncContext(){ return null; } - public AsyncEvent(AsyncContext p0){} - public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2){} - public AsyncEvent(AsyncContext p0, ServletRequest p1, ServletResponse p2, Throwable p3){} - public AsyncEvent(AsyncContext p0, Throwable p1){} - public ServletRequest getSuppliedRequest(){ return null; } - public ServletResponse getSuppliedResponse(){ return null; } - public Throwable getThrowable(){ return null; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java deleted file mode 100644 index 2723482f668..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/AsyncListener.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.AsyncListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; -import javax.servlet.AsyncEvent; - -public interface AsyncListener extends EventListener -{ - void onComplete(AsyncEvent p0); - void onError(AsyncEvent p0); - void onStartAsync(AsyncEvent p0); - void onTimeout(AsyncEvent p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java deleted file mode 100644 index 2b7b44f328d..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/DispatcherType.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.DispatcherType for testing purposes - -package javax.servlet; - - -public enum DispatcherType -{ - ASYNC, ERROR, FORWARD, INCLUDE, REQUEST; - private DispatcherType() {} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java deleted file mode 100644 index 64b9f9d73a8..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Filter.java +++ /dev/null @@ -1,15 +0,0 @@ -// Generated automatically from javax.servlet.Filter for testing purposes - -package javax.servlet; - -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface Filter -{ - default void destroy(){} - default void init(FilterConfig p0){} - void doFilter(ServletRequest p0, ServletResponse p1, FilterChain p2); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java deleted file mode 100644 index f64ab722684..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterChain.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.FilterChain for testing purposes - -package javax.servlet; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface FilterChain -{ - void doFilter(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java deleted file mode 100644 index 0e140c6680c..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.FilterConfig for testing purposes - -package javax.servlet; - -import java.util.Enumeration; -import javax.servlet.ServletContext; - -public interface FilterConfig -{ - Enumeration getInitParameterNames(); - ServletContext getServletContext(); - String getFilterName(); - String getInitParameter(String p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java deleted file mode 100644 index 6ad0739ceb6..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/FilterRegistration.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.FilterRegistration for testing purposes - -package javax.servlet; - -import java.util.Collection; -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import javax.servlet.Registration; - -public interface FilterRegistration extends Registration -{ - Collection getServletNameMappings(); - Collection getUrlPatternMappings(); - static public interface Dynamic extends FilterRegistration, Registration.Dynamic - { - } - void addMappingForServletNames(EnumSet p0, boolean p1, String... p2); - void addMappingForUrlPatterns(EnumSet p0, boolean p1, String... p2); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java deleted file mode 100644 index 5f7bdcda487..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/GenericServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.GenericServlet for testing purposes - -package javax.servlet; - -import java.io.Serializable; -import java.util.Enumeration; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -abstract public class GenericServlet implements Serializable, Servlet, ServletConfig -{ - public Enumeration getInitParameterNames(){ return null; } - public GenericServlet(){} - public ServletConfig getServletConfig(){ return null; } - public ServletContext getServletContext(){ return null; } - public String getInitParameter(String p0){ return null; } - public String getServletInfo(){ return null; } - public String getServletName(){ return null; } - public abstract void service(ServletRequest p0, ServletResponse p1); - public void destroy(){} - public void init(){} - public void init(ServletConfig p0){} - public void log(String p0){} - public void log(String p0, Throwable p1){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java deleted file mode 100644 index 6598aa47cc5..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpConstraintElement.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.servlet.HttpConstraintElement for testing purposes - -package javax.servlet; - -import javax.servlet.annotation.ServletSecurity; - -public class HttpConstraintElement -{ - public HttpConstraintElement(){} - public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0){} - public HttpConstraintElement(ServletSecurity.EmptyRoleSemantic p0, ServletSecurity.TransportGuarantee p1, String... p2){} - public HttpConstraintElement(ServletSecurity.TransportGuarantee p0, String... p1){} - public ServletSecurity.EmptyRoleSemantic getEmptyRoleSemantic(){ return null; } - public ServletSecurity.TransportGuarantee getTransportGuarantee(){ return null; } - public String[] getRolesAllowed(){ return null; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java deleted file mode 100644 index ddb52527004..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/HttpMethodConstraintElement.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.HttpMethodConstraintElement for testing purposes - -package javax.servlet; - -import javax.servlet.HttpConstraintElement; - -public class HttpMethodConstraintElement extends HttpConstraintElement -{ - protected HttpMethodConstraintElement() {} - public HttpMethodConstraintElement(String p0){} - public HttpMethodConstraintElement(String p0, HttpConstraintElement p1){} - public String getMethodName(){ return null; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java deleted file mode 100644 index 8470d9a5317..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/MultipartConfigElement.java +++ /dev/null @@ -1,17 +0,0 @@ -// Generated automatically from javax.servlet.MultipartConfigElement for testing purposes - -package javax.servlet; - -import javax.servlet.annotation.MultipartConfig; - -public class MultipartConfigElement -{ - protected MultipartConfigElement() {} - public MultipartConfigElement(MultipartConfig p0){} - public MultipartConfigElement(String p0){} - public MultipartConfigElement(String p0, long p1, long p2, int p3){} - public String getLocation(){ return null; } - public int getFileSizeThreshold(){ return 0; } - public long getMaxFileSize(){ return 0; } - public long getMaxRequestSize(){ return 0; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java deleted file mode 100644 index 367594ef7da..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ReadListener.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.ReadListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; - -public interface ReadListener extends EventListener -{ - void onAllDataRead(); - void onDataAvailable(); - void onError(Throwable p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java deleted file mode 100644 index 5d4095813ef..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Registration.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.Registration for testing purposes - -package javax.servlet; - -import java.util.Map; -import java.util.Set; - -public interface Registration -{ - Map getInitParameters(); - Set setInitParameters(Map p0); - String getClassName(); - String getInitParameter(String p0); - String getName(); - boolean setInitParameter(String p0, String p1); - static public interface Dynamic extends Registration - { - void setAsyncSupported(boolean p0); - } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java deleted file mode 100644 index ad017e4f501..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/RequestDispatcher.java +++ /dev/null @@ -1,30 +0,0 @@ -// Generated automatically from javax.servlet.RequestDispatcher for testing purposes - -package javax.servlet; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface RequestDispatcher -{ - static String ERROR_EXCEPTION = null; - static String ERROR_EXCEPTION_TYPE = null; - static String ERROR_MESSAGE = null; - static String ERROR_REQUEST_URI = null; - static String ERROR_SERVLET_NAME = null; - static String ERROR_STATUS_CODE = null; - static String FORWARD_CONTEXT_PATH = null; - static String FORWARD_MAPPING = null; - static String FORWARD_PATH_INFO = null; - static String FORWARD_QUERY_STRING = null; - static String FORWARD_REQUEST_URI = null; - static String FORWARD_SERVLET_PATH = null; - static String INCLUDE_CONTEXT_PATH = null; - static String INCLUDE_MAPPING = null; - static String INCLUDE_PATH_INFO = null; - static String INCLUDE_QUERY_STRING = null; - static String INCLUDE_REQUEST_URI = null; - static String INCLUDE_SERVLET_PATH = null; - void forward(ServletRequest p0, ServletResponse p1); - void include(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java deleted file mode 100644 index 231c011a6f8..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/Servlet.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from javax.servlet.Servlet for testing purposes - -package javax.servlet; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -public interface Servlet -{ - ServletConfig getServletConfig(); - String getServletInfo(); - void destroy(); - void init(ServletConfig p0); - void service(ServletRequest p0, ServletResponse p1); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java deleted file mode 100644 index c483c16ac4e..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from javax.servlet.ServletConfig for testing purposes - -package javax.servlet; - -import java.util.Enumeration; -import javax.servlet.ServletContext; - -public interface ServletConfig -{ - Enumeration getInitParameterNames(); - ServletContext getServletContext(); - String getInitParameter(String p0); - String getServletName(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java deleted file mode 100644 index 812393f61e9..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletContext.java +++ /dev/null @@ -1,83 +0,0 @@ -// Generated automatically from javax.servlet.ServletContext for testing purposes - -package javax.servlet; - -import java.io.InputStream; -import java.net.URL; -import java.util.Enumeration; -import java.util.EventListener; -import java.util.Map; -import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletRegistration; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; -import javax.servlet.descriptor.JspConfigDescriptor; - -public interface ServletContext -{ - T createListener(java.lang.Class p0); - void addListener(T p0); - T createFilter(java.lang.Class p0); - T createServlet(java.lang.Class p0); - ClassLoader getClassLoader(); - Enumeration getServlets(); - Enumeration getAttributeNames(); - Enumeration getInitParameterNames(); - Enumeration getServletNames(); - FilterRegistration getFilterRegistration(String p0); - FilterRegistration.Dynamic addFilter(String p0, Class p1); - FilterRegistration.Dynamic addFilter(String p0, Filter p1); - FilterRegistration.Dynamic addFilter(String p0, String p1); - InputStream getResourceAsStream(String p0); - JspConfigDescriptor getJspConfigDescriptor(); - Map getFilterRegistrations(); - Map getServletRegistrations(); - Object getAttribute(String p0); - RequestDispatcher getNamedDispatcher(String p0); - RequestDispatcher getRequestDispatcher(String p0); - Servlet getServlet(String p0); - ServletContext getContext(String p0); - ServletRegistration getServletRegistration(String p0); - ServletRegistration.Dynamic addJspFile(String p0, String p1); - ServletRegistration.Dynamic addServlet(String p0, Class p1); - ServletRegistration.Dynamic addServlet(String p0, Servlet p1); - ServletRegistration.Dynamic addServlet(String p0, String p1); - SessionCookieConfig getSessionCookieConfig(); - Set getDefaultSessionTrackingModes(); - Set getEffectiveSessionTrackingModes(); - Set getResourcePaths(String p0); - String getContextPath(); - String getInitParameter(String p0); - String getMimeType(String p0); - String getRealPath(String p0); - String getRequestCharacterEncoding(); - String getResponseCharacterEncoding(); - String getServerInfo(); - String getServletContextName(); - String getVirtualServerName(); - URL getResource(String p0); - boolean setInitParameter(String p0, String p1); - int getEffectiveMajorVersion(); - int getEffectiveMinorVersion(); - int getMajorVersion(); - int getMinorVersion(); - int getSessionTimeout(); - static String ORDERED_LIBS = null; - static String TEMPDIR = null; - void addListener(Class p0); - void addListener(String p0); - void declareRoles(String... p0); - void log(Exception p0, String p1); - void log(String p0); - void log(String p0, Throwable p1); - void removeAttribute(String p0); - void setAttribute(String p0, Object p1); - void setRequestCharacterEncoding(String p0); - void setResponseCharacterEncoding(String p0); - void setSessionTimeout(int p0); - void setSessionTrackingModes(Set p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java deleted file mode 100644 index 31034066970..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletInputStream.java +++ /dev/null @@ -1,15 +0,0 @@ -// Generated automatically from javax.servlet.ServletInputStream for testing purposes - -package javax.servlet; - -import java.io.InputStream; -import javax.servlet.ReadListener; - -abstract public class ServletInputStream extends InputStream -{ - protected ServletInputStream(){} - public abstract boolean isFinished(); - public abstract boolean isReady(); - public abstract void setReadListener(ReadListener p0); - public int readLine(byte[] p0, int p1, int p2){ return 0; } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java deleted file mode 100644 index 52a2162c9eb..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletOutputStream.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.ServletOutputStream for testing purposes - -package javax.servlet; - -import java.io.OutputStream; -import javax.servlet.WriteListener; - -abstract public class ServletOutputStream extends OutputStream -{ - protected ServletOutputStream(){} - public abstract boolean isReady(); - public abstract void setWriteListener(WriteListener p0); - public void print(String p0){} - public void print(boolean p0){} - public void print(char p0){} - public void print(double p0){} - public void print(float p0){} - public void print(int p0){} - public void print(long p0){} - public void println(){} - public void println(String p0){} - public void println(boolean p0){} - public void println(char p0){} - public void println(double p0){} - public void println(float p0){} - public void println(int p0){} - public void println(long p0){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java deleted file mode 100644 index a1cc66f2d19..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRegistration.java +++ /dev/null @@ -1,23 +0,0 @@ -// Generated automatically from javax.servlet.ServletRegistration for testing purposes - -package javax.servlet; - -import java.util.Collection; -import java.util.Set; -import javax.servlet.MultipartConfigElement; -import javax.servlet.Registration; -import javax.servlet.ServletSecurityElement; - -public interface ServletRegistration extends Registration -{ - Collection getMappings(); - Set addMapping(String... p0); - String getRunAsRole(); - static public interface Dynamic extends Registration.Dynamic, ServletRegistration - { - Set setServletSecurity(ServletSecurityElement p0); - void setLoadOnStartup(int p0); - void setMultipartConfig(MultipartConfigElement p0); - void setRunAsRole(String p0); - } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java deleted file mode 100644 index fc0db462cc0..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletRequest.java +++ /dev/null @@ -1,55 +0,0 @@ -// Generated automatically from javax.servlet.ServletRequest for testing purposes - -package javax.servlet; - -import java.io.BufferedReader; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Map; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletResponse; - -public interface ServletRequest -{ - AsyncContext getAsyncContext(); - AsyncContext startAsync(); - AsyncContext startAsync(ServletRequest p0, ServletResponse p1); - BufferedReader getReader(); - DispatcherType getDispatcherType(); - Enumeration getLocales(); - Enumeration getAttributeNames(); - Enumeration getParameterNames(); - Locale getLocale(); - Map getParameterMap(); - Object getAttribute(String p0); - RequestDispatcher getRequestDispatcher(String p0); - ServletContext getServletContext(); - ServletInputStream getInputStream(); - String getCharacterEncoding(); - String getContentType(); - String getLocalAddr(); - String getLocalName(); - String getParameter(String p0); - String getProtocol(); - String getRealPath(String p0); - String getRemoteAddr(); - String getRemoteHost(); - String getScheme(); - String getServerName(); - String[] getParameterValues(String p0); - boolean isAsyncStarted(); - boolean isAsyncSupported(); - boolean isSecure(); - int getContentLength(); - int getLocalPort(); - int getRemotePort(); - int getServerPort(); - long getContentLengthLong(); - void removeAttribute(String p0); - void setAttribute(String p0, Object p1); - void setCharacterEncoding(String p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java deleted file mode 100644 index db6610bc15d..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -// Generated automatically from javax.servlet.ServletResponse for testing purposes - -package javax.servlet; - -import java.io.PrintWriter; -import java.util.Locale; -import javax.servlet.ServletOutputStream; - -public interface ServletResponse -{ - Locale getLocale(); - PrintWriter getWriter(); - ServletOutputStream getOutputStream(); - String getCharacterEncoding(); - String getContentType(); - boolean isCommitted(); - int getBufferSize(); - void flushBuffer(); - void reset(); - void resetBuffer(); - void setBufferSize(int p0); - void setCharacterEncoding(String p0); - void setContentLength(int p0); - void setContentLengthLong(long p0); - void setContentType(String p0); - void setLocale(Locale p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java deleted file mode 100644 index def47937391..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/ServletSecurityElement.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.ServletSecurityElement for testing purposes - -package javax.servlet; - -import java.util.Collection; -import javax.servlet.HttpConstraintElement; -import javax.servlet.HttpMethodConstraintElement; -import javax.servlet.annotation.ServletSecurity; - -public class ServletSecurityElement extends HttpConstraintElement -{ - public Collection getHttpMethodConstraints(){ return null; } - public Collection getMethodNames(){ return null; } - public ServletSecurityElement(){} - public ServletSecurityElement(Collection p0){} - public ServletSecurityElement(HttpConstraintElement p0){} - public ServletSecurityElement(HttpConstraintElement p0, Collection p1){} - public ServletSecurityElement(ServletSecurity p0){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java deleted file mode 100644 index 4cae9a11f30..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionCookieConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -// Generated automatically from javax.servlet.SessionCookieConfig for testing purposes - -package javax.servlet; - - -public interface SessionCookieConfig -{ - String getComment(); - String getDomain(); - String getName(); - String getPath(); - boolean isHttpOnly(); - boolean isSecure(); - int getMaxAge(); - void setComment(String p0); - void setDomain(String p0); - void setHttpOnly(boolean p0); - void setMaxAge(int p0); - void setName(String p0); - void setPath(String p0); - void setSecure(boolean p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java deleted file mode 100644 index 684ac40c56f..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/SessionTrackingMode.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.SessionTrackingMode for testing purposes - -package javax.servlet; - - -public enum SessionTrackingMode -{ - COOKIE, SSL, URL; - private SessionTrackingMode() {} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java deleted file mode 100644 index 24fe504271c..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/WriteListener.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.WriteListener for testing purposes - -package javax.servlet; - -import java.util.EventListener; - -public interface WriteListener extends EventListener -{ - void onError(Throwable p0); - void onWritePossible(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java deleted file mode 100644 index f47efc62744..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpConstraint.java +++ /dev/null @@ -1,18 +0,0 @@ -// Generated automatically from javax.servlet.annotation.HttpConstraint for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import javax.servlet.annotation.ServletSecurity; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -public @interface HttpConstraint -{ - ServletSecurity.EmptyRoleSemantic value(); - ServletSecurity.TransportGuarantee transportGuarantee(); - String[] rolesAllowed(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java deleted file mode 100644 index 288f4651018..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/HttpMethodConstraint.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.annotation.HttpMethodConstraint for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import javax.servlet.annotation.ServletSecurity; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -public @interface HttpMethodConstraint -{ - ServletSecurity.EmptyRoleSemantic emptyRoleSemantic(); - ServletSecurity.TransportGuarantee transportGuarantee(); - String value(); - String[] rolesAllowed(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java deleted file mode 100644 index baccad3e199..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/MultipartConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from javax.servlet.annotation.MultipartConfig for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface MultipartConfig -{ - String location(); - int fileSizeThreshold(); - long maxFileSize(); - long maxRequestSize(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java deleted file mode 100644 index 021b6c64c2a..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/ServletSecurity.java +++ /dev/null @@ -1,33 +0,0 @@ -// Generated automatically from javax.servlet.annotation.ServletSecurity for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.servlet.annotation.HttpConstraint; -import javax.servlet.annotation.HttpMethodConstraint; - -@Documented -@Inherited -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface ServletSecurity -{ - HttpConstraint value(); - HttpMethodConstraint[] httpMethodConstraints(); - static public enum EmptyRoleSemantic - { - DENY, PERMIT; - private EmptyRoleSemantic() {} - } - static public enum TransportGuarantee - { - CONFIDENTIAL, NONE; - private TransportGuarantee() {} - } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java deleted file mode 100644 index 513c7d7053b..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebInitParam.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.annotation.WebInitParam for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface WebInitParam -{ - String description(); - String name(); - String value(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java deleted file mode 100644 index 83b5d2e476a..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/annotation/WebServlet.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.annotation.WebServlet for testing purposes - -package javax.servlet.annotation; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.servlet.annotation.WebInitParam; - -@Documented -@Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) -@Target(value={java.lang.annotation.ElementType.TYPE}) -public @interface WebServlet -{ - String description(); - String displayName(); - String largeIcon(); - String name(); - String smallIcon(); - String[] urlPatterns(); - String[] value(); - WebInitParam[] initParams(); - boolean asyncSupported(); - int loadOnStartup(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java deleted file mode 100644 index 8d93a4318d7..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspConfigDescriptor.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.JspConfigDescriptor for testing purposes - -package javax.servlet.descriptor; - -import java.util.Collection; -import javax.servlet.descriptor.JspPropertyGroupDescriptor; -import javax.servlet.descriptor.TaglibDescriptor; - -public interface JspConfigDescriptor -{ - Collection getJspPropertyGroups(); - Collection getTaglibs(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java deleted file mode 100644 index dd852fa1088..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/JspPropertyGroupDescriptor.java +++ /dev/null @@ -1,21 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.JspPropertyGroupDescriptor for testing purposes - -package javax.servlet.descriptor; - -import java.util.Collection; - -public interface JspPropertyGroupDescriptor -{ - Collection getIncludeCodas(); - Collection getIncludePreludes(); - Collection getUrlPatterns(); - String getBuffer(); - String getDefaultContentType(); - String getDeferredSyntaxAllowedAsLiteral(); - String getElIgnored(); - String getErrorOnUndeclaredNamespace(); - String getIsXml(); - String getPageEncoding(); - String getScriptingInvalid(); - String getTrimDirectiveWhitespaces(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java deleted file mode 100644 index c3dd5c10473..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/descriptor/TaglibDescriptor.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.descriptor.TaglibDescriptor for testing purposes - -package javax.servlet.descriptor; - - -public interface TaglibDescriptor -{ - String getTaglibLocation(); - String getTaglibURI(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java deleted file mode 100644 index b5a180029be..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Cookie.java +++ /dev/null @@ -1,29 +0,0 @@ -// Generated automatically from javax.servlet.http.Cookie for testing purposes - -package javax.servlet.http; - -import java.io.Serializable; - -public class Cookie implements Cloneable, Serializable -{ - protected Cookie() {} - public Cookie(String p0, String p1){} - public Object clone(){ return null; } - public String getComment(){ return null; } - public String getDomain(){ return null; } - public String getName(){ return null; } - public String getPath(){ return null; } - public String getValue(){ return null; } - public boolean getSecure(){ return false; } - public boolean isHttpOnly(){ return false; } - public int getMaxAge(){ return 0; } - public int getVersion(){ return 0; } - public void setComment(String p0){} - public void setDomain(String p0){} - public void setHttpOnly(boolean p0){} - public void setMaxAge(int p0){} - public void setPath(String p0){} - public void setSecure(boolean p0){} - public void setValue(String p0){} - public void setVersion(int p0){} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java deleted file mode 100644 index 87d0adcaf34..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServlet.java +++ /dev/null @@ -1,46 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServlet for testing purposes - -package javax.servlet.http; - -import javax.servlet.GenericServlet; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -abstract public class HttpServlet extends GenericServlet { - protected long getLastModified(HttpServletRequest p0) { - return 0; - } - - protected void doDelete(HttpServletRequest p0, HttpServletResponse p1) { - } - - protected void doGet(HttpServletRequest p0, HttpServletResponse p1) throws IOException { - } - - protected void doHead(HttpServletRequest p0, HttpServletResponse p1) { - } - - protected void doOptions(HttpServletRequest p0, HttpServletResponse p1) { - } - - protected void doPost(HttpServletRequest p0, HttpServletResponse p1) throws IOException { - } - - protected void doPut(HttpServletRequest p0, HttpServletResponse p1) { - } - - protected void doTrace(HttpServletRequest p0, HttpServletResponse p1) { - } - - protected void service(HttpServletRequest p0, HttpServletResponse p1) { - } - - public HttpServlet() { - } - - public void service(ServletRequest p0, ServletResponse p1) { - } -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java deleted file mode 100644 index 1b597f27773..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletMapping.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletMapping for testing purposes - -package javax.servlet.http; - -import javax.servlet.http.MappingMatch; - -public interface HttpServletMapping -{ - MappingMatch getMappingMatch(); - String getMatchValue(); - String getPattern(); - String getServletName(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java deleted file mode 100644 index 8612c34fb69..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletRequest.java +++ /dev/null @@ -1,60 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletRequest for testing purposes - -package javax.servlet.http; - -import java.security.Principal; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Map; -import javax.servlet.ServletRequest; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletMapping; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; -import javax.servlet.http.PushBuilder; - -public interface HttpServletRequest extends ServletRequest -{ - T upgrade(java.lang.Class p0); - Collection getParts(); - Cookie[] getCookies(); - Enumeration getHeaderNames(); - Enumeration getHeaders(String p0); - HttpSession getSession(); - HttpSession getSession(boolean p0); - Part getPart(String p0); - Principal getUserPrincipal(); - String changeSessionId(); - String getAuthType(); - String getContextPath(); - String getHeader(String p0); - String getMethod(); - String getPathInfo(); - String getPathTranslated(); - String getQueryString(); - String getRemoteUser(); - String getRequestURI(); - String getRequestedSessionId(); - String getServletPath(); - StringBuffer getRequestURL(); - boolean authenticate(HttpServletResponse p0); - boolean isRequestedSessionIdFromCookie(); - boolean isRequestedSessionIdFromURL(); - boolean isRequestedSessionIdFromUrl(); - boolean isRequestedSessionIdValid(); - boolean isUserInRole(String p0); - default HttpServletMapping getHttpServletMapping(){ return null; } - default Map getTrailerFields(){ return null; } - default PushBuilder newPushBuilder(){ return null; } - default boolean isTrailerFieldsReady(){ return false; } - int getIntHeader(String p0); - long getDateHeader(String p0); - static String BASIC_AUTH = null; - static String CLIENT_CERT_AUTH = null; - static String DIGEST_AUTH = null; - static String FORM_AUTH = null; - void login(String p0, String p1); - void logout(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java deleted file mode 100644 index da902dbf30c..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpServletResponse.java +++ /dev/null @@ -1,77 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpServletResponse for testing purposes - -package javax.servlet.http; - -import java.util.Collection; -import java.util.Map; -import java.util.function.Supplier; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; - -public interface HttpServletResponse extends ServletResponse -{ - Collection getHeaderNames(); - Collection getHeaders(String p0); - String encodeRedirectURL(String p0); - String encodeRedirectUrl(String p0); - String encodeURL(String p0); - String encodeUrl(String p0); - String getHeader(String p0); - boolean containsHeader(String p0); - default Supplier> getTrailerFields(){ return null; } - default void setTrailerFields(Supplier> p0){} - int getStatus(); - static int SC_ACCEPTED = 0; - static int SC_BAD_GATEWAY = 0; - static int SC_BAD_REQUEST = 0; - static int SC_CONFLICT = 0; - static int SC_CONTINUE = 0; - static int SC_CREATED = 0; - static int SC_EXPECTATION_FAILED = 0; - static int SC_FORBIDDEN = 0; - static int SC_FOUND = 0; - static int SC_GATEWAY_TIMEOUT = 0; - static int SC_GONE = 0; - static int SC_HTTP_VERSION_NOT_SUPPORTED = 0; - static int SC_INTERNAL_SERVER_ERROR = 0; - static int SC_LENGTH_REQUIRED = 0; - static int SC_METHOD_NOT_ALLOWED = 0; - static int SC_MOVED_PERMANENTLY = 0; - static int SC_MOVED_TEMPORARILY = 0; - static int SC_MULTIPLE_CHOICES = 0; - static int SC_NON_AUTHORITATIVE_INFORMATION = 0; - static int SC_NOT_ACCEPTABLE = 0; - static int SC_NOT_FOUND = 0; - static int SC_NOT_IMPLEMENTED = 0; - static int SC_NOT_MODIFIED = 0; - static int SC_NO_CONTENT = 0; - static int SC_OK = 0; - static int SC_PARTIAL_CONTENT = 0; - static int SC_PAYMENT_REQUIRED = 0; - static int SC_PRECONDITION_FAILED = 0; - static int SC_PROXY_AUTHENTICATION_REQUIRED = 0; - static int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 0; - static int SC_REQUEST_ENTITY_TOO_LARGE = 0; - static int SC_REQUEST_TIMEOUT = 0; - static int SC_REQUEST_URI_TOO_LONG = 0; - static int SC_RESET_CONTENT = 0; - static int SC_SEE_OTHER = 0; - static int SC_SERVICE_UNAVAILABLE = 0; - static int SC_SWITCHING_PROTOCOLS = 0; - static int SC_TEMPORARY_REDIRECT = 0; - static int SC_UNAUTHORIZED = 0; - static int SC_UNSUPPORTED_MEDIA_TYPE = 0; - static int SC_USE_PROXY = 0; - void addCookie(Cookie p0); - void addDateHeader(String p0, long p1); - void addHeader(String p0, String p1); - void addIntHeader(String p0, int p1); - void sendError(int p0); - void sendError(int p0, String p1); - void sendRedirect(String p0); - void setDateHeader(String p0, long p1); - void setHeader(String p0, String p1); - void setIntHeader(String p0, int p1); - void setStatus(int p0); - void setStatus(int p0, String p1); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java deleted file mode 100644 index f8f455b1423..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSession.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpSession for testing purposes - -package javax.servlet.http; - -import java.util.Enumeration; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSessionContext; - -public interface HttpSession -{ - Enumeration getAttributeNames(); - HttpSessionContext getSessionContext(); - Object getAttribute(String p0); - Object getValue(String p0); - ServletContext getServletContext(); - String getId(); - String[] getValueNames(); - boolean isNew(); - int getMaxInactiveInterval(); - long getCreationTime(); - long getLastAccessedTime(); - void invalidate(); - void putValue(String p0, Object p1); - void removeAttribute(String p0); - void removeValue(String p0); - void setAttribute(String p0, Object p1); - void setMaxInactiveInterval(int p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java deleted file mode 100644 index 97a77b48358..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpSessionContext.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpSessionContext for testing purposes - -package javax.servlet.http; - -import java.util.Enumeration; -import javax.servlet.http.HttpSession; - -public interface HttpSessionContext -{ - Enumeration getIds(); - HttpSession getSession(String p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java deleted file mode 100644 index 987d49dbde2..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/HttpUpgradeHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from javax.servlet.http.HttpUpgradeHandler for testing purposes - -package javax.servlet.http; - -import javax.servlet.http.WebConnection; - -public interface HttpUpgradeHandler -{ - void destroy(); - void init(WebConnection p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java deleted file mode 100644 index 0432fd2ef7d..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/MappingMatch.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from javax.servlet.http.MappingMatch for testing purposes - -package javax.servlet.http; - - -public enum MappingMatch -{ - CONTEXT_ROOT, DEFAULT, EXACT, EXTENSION, PATH; - private MappingMatch() {} -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java deleted file mode 100644 index a4e599748a5..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/Part.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from javax.servlet.http.Part for testing purposes - -package javax.servlet.http; - -import java.io.InputStream; -import java.util.Collection; - -public interface Part -{ - Collection getHeaderNames(); - Collection getHeaders(String p0); - InputStream getInputStream(); - String getContentType(); - String getHeader(String p0); - String getName(); - String getSubmittedFileName(); - long getSize(); - void delete(); - void write(String p0); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java deleted file mode 100644 index 195e2426a83..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/PushBuilder.java +++ /dev/null @@ -1,23 +0,0 @@ -// Generated automatically from javax.servlet.http.PushBuilder for testing purposes - -package javax.servlet.http; - -import java.util.Set; - -public interface PushBuilder -{ - PushBuilder addHeader(String p0, String p1); - PushBuilder method(String p0); - PushBuilder path(String p0); - PushBuilder queryString(String p0); - PushBuilder removeHeader(String p0); - PushBuilder sessionId(String p0); - PushBuilder setHeader(String p0, String p1); - Set getHeaderNames(); - String getHeader(String p0); - String getMethod(); - String getPath(); - String getQueryString(); - String getSessionId(); - void push(); -} diff --git a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java b/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java deleted file mode 100644 index 5001c046400..00000000000 --- a/java/ql/test/experimental/stubs/javax.servlet-api-4.0.1/javax/servlet/http/WebConnection.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from javax.servlet.http.WebConnection for testing purposes - -package javax.servlet.http; - -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; - -public interface WebConnection extends AutoCloseable -{ - ServletInputStream getInputStream(); - ServletOutputStream getOutputStream(); -} From e3559d8f9377104e44f3a22755ad0f48207d802f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 19 Jul 2024 11:02:42 +0100 Subject: [PATCH 027/334] Adjust test expectations --- .../security/CWE-347/Auth0NoVerifier.expected | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected index 7836dda7a11..dfbed7063bb 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected @@ -1,24 +1,28 @@ +WARNING: type 'FlowState' has been deprecated and may be removed in future (Auth0NoVerifier.ql:62,21-40) +WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:33,28-40) +WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:43,24-36) +WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:53,24-36) edges -| JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | -| JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | JwtNoVerifier.java:73:38:73:55 | token : String | -| JwtNoVerifier.java:73:38:73:55 | token : String | JwtNoVerifier.java:74:37:74:41 | token : String | -| JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | -| JwtNoVerifier.java:74:37:74:41 | token : String | JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | -| JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | -| JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | -| JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | -| JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | JwtNoVerifier.java:75:45:75:69 | getClaim(...) | +| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | provenance | Src:MaD:44684 | +| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | JwtNoVerifier.java:72:38:72:55 | token : String | provenance | | +| JwtNoVerifier.java:72:38:72:55 | token : String | JwtNoVerifier.java:73:37:73:41 | token : String | provenance | | +| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | provenance | | +| JwtNoVerifier.java:73:37:73:41 | token : String | JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | provenance | Config | +| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | provenance | MaD:43977 | +| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43979 | +| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | provenance | | +| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | provenance | Config | nodes -| JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JwtNoVerifier.java:44:39:44:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | -| JwtNoVerifier.java:73:38:73:55 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:74:26:74:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | -| JwtNoVerifier.java:74:37:74:41 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:75:16:75:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | -| JwtNoVerifier.java:75:28:75:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | -| JwtNoVerifier.java:75:37:75:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:75:45:75:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:75:45:75:69 | getClaim(...) | semmle.label | getClaim(...) | +| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | +| JwtNoVerifier.java:72:38:72:55 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | +| JwtNoVerifier.java:73:37:73:41 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | +| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | +| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | semmle.label | getClaim(...) | subpaths #select -| JwtNoVerifier.java:75:45:75:69 | getClaim(...) | JwtNoVerifier.java:43:28:43:55 | getParameter(...) : String | JwtNoVerifier.java:75:45:75:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:43:28:43:55 | getParameter(...) | JWT | +| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:42:28:42:55 | getParameter(...) | JWT | From 14cf47b906db543a6e87a80d46f76bb5d82767f0 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sun, 28 Jul 2024 10:28:28 +0200 Subject: [PATCH 028/334] comply with PascalCase/camelCase, remove redundant import --- .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index 630b2b4f30c..f8d3c52ff96 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -11,7 +11,6 @@ */ import java -import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.FlowSources module JwtAuth0 { @@ -19,12 +18,12 @@ module JwtAuth0 { PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } } - class JWTType extends RefType { - JWTType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } + class JwtType extends RefType { + JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } } - class JWTVerifierType extends RefType { - JWTVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } + class JwtVerifierType extends RefType { + JwtVerifierType () { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } } /** @@ -42,7 +41,7 @@ module JwtAuth0 { */ class Decode extends MethodAccess { Decode() { - this.getCallee().getDeclaringType() instanceof JWTType and + this.getCallee().getDeclaringType() instanceof JwtType and this.getCallee().hasName("decode") } } @@ -52,7 +51,7 @@ module JwtAuth0 { */ class Verify extends MethodAccess { Verify() { - this.getCallee().getDeclaringType() instanceof JWTVerifierType and + this.getCallee().getDeclaringType() instanceof JwtVerifierType and this.getCallee().hasName("verify") } } From 85b02b1399cadced8e0cc1221194ab4b95b879bd Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sun, 28 Jul 2024 10:42:44 +0200 Subject: [PATCH 029/334] use MethodCall instead of MethodAccess, change query id --- .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index f8d3c52ff96..1c3bb604aff 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -5,7 +5,7 @@ * @problem.severity error * @security-severity 7.8 * @precision high - * @id java/missing-jwt-signature-check + * @id java/missing-jwt-signature-check-auth0 * @tags security * external/cwe/cwe-347 */ @@ -22,14 +22,14 @@ module JwtAuth0 { JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } } - class JwtVerifierType extends RefType { - JwtVerifierType () { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } + class JwtVerifierType extends RefType { + JwtVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } } /** * A Method that returns a Decoded Claim of JWT */ - class GetPayload extends MethodAccess { + class GetPayload extends MethodCall { GetPayload() { this.getCallee().getDeclaringType() instanceof PayloadType and this.getCallee().hasName(["getClaim", "getIssuedAt"]) @@ -39,7 +39,7 @@ module JwtAuth0 { /** * A Method that Decode JWT without signature verification */ - class Decode extends MethodAccess { + class Decode extends MethodCall { Decode() { this.getCallee().getDeclaringType() instanceof JwtType and this.getCallee().hasName("decode") @@ -49,9 +49,9 @@ module JwtAuth0 { /** * A Method that Decode JWT with signature verification */ - class Verify extends MethodAccess { + class Verify extends MethodCall { Verify() { - this.getCallee().getDeclaringType() instanceof JwtVerifierType and + this.getCallee().getDeclaringType() instanceof JwtVerifierType and this.getCallee().hasName("verify") } } From b5e7716579940c7c26fcb46224b6292f09abc5cc Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sun, 28 Jul 2024 11:26:18 +0200 Subject: [PATCH 030/334] remove flow states, remove string as sources --- .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 55 ++++--------------- 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index 1c3bb604aff..a95860cdc4f 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -57,73 +57,40 @@ module JwtAuth0 { } } -module JwtDecodeConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; - - predicate isSource(DataFlow::Node source, FlowState state) { - ( - exists(Variable v | - source.asExpr() = v.getInitializer() and - v.getType().hasName("String") - ) - or - source instanceof RemoteFlowSource - ) and - not FlowToJwtVerify::flow(source, _) and - state = "Auth0" and - not state = "Auth0Verify" +module JwtDecodeConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource and + not FlowToJwtVerify::flow(source, _) } - predicate isSink(DataFlow::Node sink, FlowState state) { - sink.asExpr() = any(JwtAuth0::GetPayload a) and - state = "Auth0" and - not state = "Auth0Verify" - } + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::GetPayload a) } - predicate isAdditionalFlowStep( - DataFlow::Node nodeFrom, FlowState stateFrom, DataFlow::Node nodeTo, FlowState stateTo - ) { + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { // Decode Should be one of the middle nodes exists(JwtAuth0::Decode a | nodeFrom.asExpr() = a.getArgument(0) and - nodeTo.asExpr() = a and - stateTo = "Auth0" and - stateFrom = "Auth0" + nodeTo.asExpr() = a ) or exists(JwtAuth0::Verify a | nodeFrom.asExpr() = a.getArgument(0) and - nodeTo.asExpr() = a and - stateTo = "Auth0Verify" and - stateFrom = "Auth0Verify" + nodeTo.asExpr() = a ) or exists(JwtAuth0::GetPayload a | nodeFrom.asExpr() = a.getQualifier() and - nodeTo.asExpr() = a and - stateTo = "Auth0" and - stateFrom = "Auth0" + nodeTo.asExpr() = a ) } - - predicate isBarrier(DataFlow::Node sanitizer, FlowState state) { none() } } module FlowToJwtVerifyConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - // source instanceof DataFlow::Node - exists(Variable v | - source.asExpr() = v.getInitializer() and - v.getType().hasName("String") - ) - } + predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::Verify a).getArgument(0) } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { none() } } -module JwtDecode = TaintTracking::GlobalWithState; +module JwtDecode = TaintTracking::Global; module FlowToJwtVerify = TaintTracking::Global; From 6538a06f294ddc3e5608f4b53ae784502f9f25e2 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Sun, 28 Jul 2024 11:30:59 +0200 Subject: [PATCH 031/334] update tests --- .../query-tests/security/CWE-347/Auth0NoVerifier.expected | 4 ---- 1 file changed, 4 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected index dfbed7063bb..5dbdfd6acfa 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected @@ -1,7 +1,3 @@ -WARNING: type 'FlowState' has been deprecated and may be removed in future (Auth0NoVerifier.ql:62,21-40) -WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:33,28-40) -WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:43,24-36) -WARNING: type 'MethodAccess' has been deprecated and may be removed in future (Auth0NoVerifier.ql:53,24-36) edges | JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | provenance | Src:MaD:44684 | | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | JwtNoVerifier.java:72:38:72:55 | token : String | provenance | | From a781522ca0db723eb6f3a10a360e3b12e8c0a85e Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 30 Jul 2024 12:19:16 +0100 Subject: [PATCH 032/334] Copyedit documentation --- .../Security/CWE/CWE-347/Auth0NoVerifier.qhelp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp index 4fc17e68530..9b87a4e5810 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp @@ -2,24 +2,21 @@

    - A JSON Web Token (JWT) is used for authenticating and managing users in an application. -

    -

    - Only Decoding JWTs without checking if they have a valid signature or not can lead to security vulnerabilities. + A JSON Web Token (JWT) is used for authenticating and managing users in an application. It must be verified in order to ensure the JWT is genuine.

    - Don't use methods that only decode JWT, Instead use methods that verify the signature of JWT. + Don't use information from a JWT without verifying that JWT.

    - The following code you can see an Example from a popular Library. + The following example illustrates secure and insecure use of the Auth0 `java-jwt` library.

    @@ -31,4 +28,4 @@ -
    \ No newline at end of file + From 8f52b2cd95718eac4fcf65d00a5a98eac0d98330 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 30 Jul 2024 12:23:38 +0100 Subject: [PATCH 033/334] Fix link --- .../src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp index 9b87a4e5810..b2258c457fe 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.qhelp @@ -24,7 +24,7 @@
  • - The incorrect use of JWT in ShenyuAdminBootstrap allows an attacker to bypass authentication. + The incorrect use of JWT in ShenyuAdminBootstrap allows an attacker to bypass authentication.
  • From f97b1039cd3a1f19d18ef1a775dbd66eef08bb19 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:49:34 +0200 Subject: [PATCH 034/334] update test files, add one more additional flow step for inflate function, fix gzopen additional flow step thanks to @jketema --- .../CWE/CWE-409/DecompressionBombs.ql | 5 +-- .../Security/CWE/CWE-409/ZlibGzopen.qll | 4 +-- .../Security/CWE/CWE-409/ZlibInflator.qll | 19 +++++++++-- .../Security/CWE/CWE-409/zlibTest.cpp | 32 +++---------------- 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 896c15f7a80..05f39c47e13 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -22,12 +22,13 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(FunctionCall fc, DecompressionFunction f | fc.getTarget() = f | - fc.getArgument(f.getArchiveParameterIndex()) = sink.asExpr() + fc.getArgument(f.getArchiveParameterIndex()) = sink.asExpr() ) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - any(DecompressionFlowStep f).isAdditionalFlowStep(node1, node2) + any(DecompressionFlowStep f).isAdditionalFlowStep(node1, node2) or + nextInAdditionalFlowStep(node1, node2) } } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll index 5c4f367b1b4..edb8ef7ff68 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll @@ -37,7 +37,7 @@ class GzGetsFunction extends DecompressionFunction { class GzReadFunction extends DecompressionFunction { GzReadFunction() { this.hasGlobalName("gzread") } - override int getArchiveParameterIndex() { result = 1 } + override int getArchiveParameterIndex() { result = 0 } } /** @@ -66,7 +66,7 @@ class GzopenFunction extends DecompressionFlowStep { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(FunctionCall fc | fc.getTarget() = this | - node1.asExpr() = fc.getArgument(0) and + node1.asIndirectExpr() = fc.getArgument(0) and node2.asExpr() = fc ) } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll index 1897b8e09d3..464dce3ac45 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll @@ -10,12 +10,27 @@ import DecompressionBomb /** * The `inflate` and `inflateSync` functions are used in flow sink. * - * `inflate(z_streamp strm, int flush)` + * `inflate(z_stream strm, int flush)` * - * `inflateSync(z_streamp strm)` + * `inflateSync(z_stream strm)` */ class InflateFunction extends DecompressionFunction { InflateFunction() { this.hasGlobalName(["inflate", "inflateSync"]) } override int getArchiveParameterIndex() { result = 0 } } + +/** + * The `next_in` member of a `z_stream` variable is used in flow steps. + */ +predicate nextInAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(Variable nextInVar, VariableAccess zStreamAccess | + nextInVar.getDeclaringType().hasName("z_stream") and + nextInVar.hasName("next_in") and + zStreamAccess.getType().hasName("z_stream") + | + nextInVar.getAnAccess().getQualifier().(VariableAccess).getTarget() = zStreamAccess.getTarget() and + node1.asIndirectExpr() = nextInVar.getAnAssignedValue() and + node2.asExpr() = zStreamAccess + ) +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp index b829cfaa61d..07805f6c83f 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp @@ -51,40 +51,17 @@ namespace std { } int UnsafeInflate(char *a) { - // placeholder for the compressed (deflated) version of "a" - char b[50]; - // placeholder for the Uncompressed (inflated) version of "b" - char c[50]; + // placeholder for the Uncompressed (inflated) version of "a" + char c[1024000]; - // STEP 1. - // zlib struct - z_stream defstream; - defstream.zalloc = Z_NULL; - defstream.zfree = Z_NULL; - defstream.opaque = Z_NULL; - // setup "a" as the input and "b" as the compressed output - defstream.avail_in = (uInt) 50 + 1; // size of input, string + terminator - defstream.next_in = (Bytef *) a; // input char array - defstream.avail_out = (uInt) sizeof(b); // size of output - defstream.next_out = (Bytef *) b; // output char array - - // the actual compression work. - deflateInit(&defstream, Z_BEST_COMPRESSION); - deflate(&defstream, Z_FINISH); - deflateEnd(&defstream); - - // This is one way of getting the size of the output - // STEP 2. - // inflate b into c - // zlib struct z_stream infstream; infstream.zalloc = Z_NULL; infstream.zfree = Z_NULL; infstream.opaque = Z_NULL; // setup "b" as the input and "c" as the compressed output // TOTHINK: Here we can add additional step from Right operand to z_stream variable access - infstream.avail_in = (uInt) ((char *) defstream.next_out - b); // size of input - infstream.next_in = (Bytef *) b; // input char array + infstream.avail_in = (uInt) (1000); // size of input + infstream.next_in = (Bytef *) a; // input char array infstream.avail_out = (uInt) sizeof(c); // size of output infstream.next_out = (Bytef *) c; // output char array @@ -159,7 +136,6 @@ int UnsafeGzgets(char *fileName) { } char *buffer = new char[4000000000]; char *result; - result = gzgets(inFileZ, buffer, 1000000000); while (true) { result = gzgets(inFileZ, buffer, 1000000000); if (result == nullptr) { From 701e3d7e53291e18445a2b63610686ebf3766218 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Wed, 31 Jul 2024 10:58:04 +0200 Subject: [PATCH 035/334] add same query but with local source support to comply with the CVE-2021-37580 --- .../CWE/CWE-347/Auth0NoVerifierLocalSource.ql | 111 ++++++++++++++++++ .../Auth0NoVerifierLocalSource.expected | 24 ++++ .../CWE-347/Auth0NoVerifierLocalSource.qlref | 1 + 3 files changed, 136 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected create mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql new file mode 100644 index 00000000000..a008b3ebeb6 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql @@ -0,0 +1,111 @@ +/** + * @name Missing JWT signature check + * @description Failing to check the Json Web Token (JWT) signature may allow an attacker to forge their own tokens. + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision medium + * @id java/missing-jwt-signature-check-auth0-local-source + * @tags security + * external/cwe/cwe-347 + */ + +import java +import semmle.code.java.dataflow.FlowSources + +module JwtAuth0 { + class PayloadType extends RefType { + PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } + } + + class JwtType extends RefType { + JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } + } + + class JwtVerifierType extends RefType { + JwtVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } + } + + /** + * A Method that returns a Decoded Claim of JWT + */ + class GetPayload extends MethodCall { + GetPayload() { + this.getCallee().getDeclaringType() instanceof PayloadType and + this.getCallee().hasName(["getClaim", "getIssuedAt"]) + } + } + + /** + * A Method that Decode JWT without signature verification + */ + class Decode extends MethodCall { + Decode() { + this.getCallee().getDeclaringType() instanceof JwtType and + this.getCallee().hasName("decode") + } + } + + /** + * A Method that Decode JWT with signature verification + */ + class Verify extends MethodCall { + Verify() { + this.getCallee().getDeclaringType() instanceof JwtVerifierType and + this.getCallee().hasName("verify") + } + } +} + +module JwtDecodeConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + + exists(Variable v | + source.asExpr() = v.getInitializer() and + v.getType().hasName("String") + ) and + not FlowToJwtVerify::flow(source, _) + } + + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::GetPayload a) } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + // Decode Should be one of the middle nodes + exists(JwtAuth0::Decode a | + nodeFrom.asExpr() = a.getArgument(0) and + nodeTo.asExpr() = a + ) + or + exists(JwtAuth0::Verify a | + nodeFrom.asExpr() = a.getArgument(0) and + nodeTo.asExpr() = a + ) + or + exists(JwtAuth0::GetPayload a | + nodeFrom.asExpr() = a.getQualifier() and + nodeTo.asExpr() = a + ) + } +} + +module FlowToJwtVerifyConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + exists(Variable v | + source.asExpr() = v.getInitializer() and + v.getType().hasName("String") + ) + } + + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::Verify a).getArgument(0) } +} + +module JwtDecode = TaintTracking::Global; + +module FlowToJwtVerify = TaintTracking::Global; + +import JwtDecode::PathGraph + +from JwtDecode::PathNode source, JwtDecode::PathNode sink +where JwtDecode::flowPath(source, sink) +select sink.getNode(), source, sink, "This parses a $@, but the signature is not verified.", + source.getNode(), "JWT" diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected new file mode 100644 index 00000000000..5dbdfd6acfa --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected @@ -0,0 +1,24 @@ +edges +| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | provenance | Src:MaD:44684 | +| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | JwtNoVerifier.java:72:38:72:55 | token : String | provenance | | +| JwtNoVerifier.java:72:38:72:55 | token : String | JwtNoVerifier.java:73:37:73:41 | token : String | provenance | | +| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | provenance | | +| JwtNoVerifier.java:73:37:73:41 | token : String | JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | provenance | Config | +| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | provenance | MaD:43977 | +| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43979 | +| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | provenance | | +| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | provenance | Config | +nodes +| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | +| JwtNoVerifier.java:72:38:72:55 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | +| JwtNoVerifier.java:73:37:73:41 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | +| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | +| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | semmle.label | getClaim(...) | +subpaths +#select +| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:42:28:42:55 | getParameter(...) | JWT | diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref new file mode 100644 index 00000000000..03cb5e77989 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql \ No newline at end of file From c6814fcf479f7248401a0be4c472ebc9e7284d16 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Wed, 31 Jul 2024 11:04:03 +0200 Subject: [PATCH 036/334] merge duplicate module into a module file --- .../Security/CWE/CWE-347/Auth0NoVerifier.ql | 45 +---------------- .../CWE/CWE-347/Auth0NoVerifierLocalSource.ql | 49 ++----------------- .../Security/CWE/CWE-347/JwtAuth0.qll | 43 ++++++++++++++++ 3 files changed, 47 insertions(+), 90 deletions(-) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/JwtAuth0.qll diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql index a95860cdc4f..f5a93b4c6c0 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql @@ -12,50 +12,7 @@ import java import semmle.code.java.dataflow.FlowSources - -module JwtAuth0 { - class PayloadType extends RefType { - PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } - } - - class JwtType extends RefType { - JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } - } - - class JwtVerifierType extends RefType { - JwtVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } - } - - /** - * A Method that returns a Decoded Claim of JWT - */ - class GetPayload extends MethodCall { - GetPayload() { - this.getCallee().getDeclaringType() instanceof PayloadType and - this.getCallee().hasName(["getClaim", "getIssuedAt"]) - } - } - - /** - * A Method that Decode JWT without signature verification - */ - class Decode extends MethodCall { - Decode() { - this.getCallee().getDeclaringType() instanceof JwtType and - this.getCallee().hasName("decode") - } - } - - /** - * A Method that Decode JWT with signature verification - */ - class Verify extends MethodCall { - Verify() { - this.getCallee().getDeclaringType() instanceof JwtVerifierType and - this.getCallee().hasName("verify") - } - } -} +import JwtAuth0 as JwtAuth0 module JwtDecodeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql index a008b3ebeb6..2032f3dc42a 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql @@ -12,54 +12,11 @@ import java import semmle.code.java.dataflow.FlowSources +import JwtAuth0 as JwtAuth0 -module JwtAuth0 { - class PayloadType extends RefType { - PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } - } - - class JwtType extends RefType { - JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } - } - - class JwtVerifierType extends RefType { - JwtVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } - } - - /** - * A Method that returns a Decoded Claim of JWT - */ - class GetPayload extends MethodCall { - GetPayload() { - this.getCallee().getDeclaringType() instanceof PayloadType and - this.getCallee().hasName(["getClaim", "getIssuedAt"]) - } - } - - /** - * A Method that Decode JWT without signature verification - */ - class Decode extends MethodCall { - Decode() { - this.getCallee().getDeclaringType() instanceof JwtType and - this.getCallee().hasName("decode") - } - } - - /** - * A Method that Decode JWT with signature verification - */ - class Verify extends MethodCall { - Verify() { - this.getCallee().getDeclaringType() instanceof JwtVerifierType and - this.getCallee().hasName("verify") - } - } -} module JwtDecodeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - exists(Variable v | source.asExpr() = v.getInitializer() and v.getType().hasName("String") @@ -89,11 +46,11 @@ module JwtDecodeConfig implements DataFlow::ConfigSig { } module FlowToJwtVerifyConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { + predicate isSource(DataFlow::Node source) { exists(Variable v | source.asExpr() = v.getInitializer() and v.getType().hasName("String") - ) + ) } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::Verify a).getArgument(0) } diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/JwtAuth0.qll b/java/ql/src/experimental/Security/CWE/CWE-347/JwtAuth0.qll new file mode 100644 index 00000000000..323ccbadbf2 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-347/JwtAuth0.qll @@ -0,0 +1,43 @@ +import java + +class PayloadType extends RefType { + PayloadType() { this.hasQualifiedName("com.auth0.jwt.interfaces", "Payload") } +} + +class JwtType extends RefType { + JwtType() { this.hasQualifiedName("com.auth0.jwt", "JWT") } +} + +class JwtVerifierType extends RefType { + JwtVerifierType() { this.hasQualifiedName("com.auth0.jwt", "JWTVerifier") } +} + +/** + * A Method that returns a Decoded Claim of JWT + */ +class GetPayload extends MethodCall { + GetPayload() { + this.getCallee().getDeclaringType() instanceof PayloadType and + this.getCallee().hasName(["getClaim", "getIssuedAt"]) + } +} + +/** + * A Method that Decode JWT without signature verification + */ +class Decode extends MethodCall { + Decode() { + this.getCallee().getDeclaringType() instanceof JwtType and + this.getCallee().hasName("decode") + } +} + +/** + * A Method that Decode JWT with signature verification + */ +class Verify extends MethodCall { + Verify() { + this.getCallee().getDeclaringType() instanceof JwtVerifierType and + this.getCallee().hasName("verify") + } +} From d560c1ea0f432c62ba6ebe906288575a69d285e8 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Wed, 31 Jul 2024 11:08:06 +0200 Subject: [PATCH 037/334] fix formatting --- .../Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql index 2032f3dc42a..7a9f37a5250 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql @@ -14,7 +14,6 @@ import java import semmle.code.java.dataflow.FlowSources import JwtAuth0 as JwtAuth0 - module JwtDecodeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { exists(Variable v | From be0a60a7f65f7de42062a617b1566768bb9ed398 Mon Sep 17 00:00:00 2001 From: Mauro Baluda Date: Tue, 13 Aug 2024 14:45:03 +0200 Subject: [PATCH 038/334] Add support for importing NPM modules in XSJS sources --- javascript/ql/lib/semmle/javascript/NodeJS.qll | 9 +++++++++ .../Security/CWE-326/InsufficientKeySize.expected | 1 + javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs diff --git a/javascript/ql/lib/semmle/javascript/NodeJS.qll b/javascript/ql/lib/semmle/javascript/NodeJS.qll index 221cee084b6..823ddae93c4 100644 --- a/javascript/ql/lib/semmle/javascript/NodeJS.qll +++ b/javascript/ql/lib/semmle/javascript/NodeJS.qll @@ -295,6 +295,15 @@ private predicate isRequire(DataFlow::Node nd) { isCreateRequire(call.getCallee().flow()) and nd = call.flow() ) + or + // `$.require('underscore');`. + // NPM as supported in [XSJS files](https://www.npmjs.com/package/@sap/async-xsjs#npm-packages-support). + exists(MethodCallExpr require | + nd.getFile().getExtension() = ["xsjs", "xsjslib"] and + require.getCalleeName() = "require" and + require.getReceiver().(GlobalVarAccess).getName() = "$" and + nd = require.getCallee().flow() + ) } /** diff --git a/javascript/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected b/javascript/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected index 95bb8d45832..323e5b24875 100644 --- a/javascript/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected +++ b/javascript/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected @@ -9,3 +9,4 @@ | tst.js:35:13:35:43 | crypto. ... an(512) | Creation of an asymmetric key uses 512 bits, which is below 2048 and considered breakable. | | tst.js:39:13:39:33 | new Nod ... : 512}) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. | | tst.js:43:1:43:31 | key.gen ... 65537) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. | +| tst.xsjs:3:14:3:71 | crypto. ... 1024 }) | Creation of an asymmetric RSA key uses 1024 bits, which is below 2048 and considered breakable. | diff --git a/javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs b/javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs new file mode 100644 index 00000000000..d5e5051af66 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs @@ -0,0 +1,5 @@ +const crypto = $.require("crypto"); + +const bad1 = crypto.generateKeyPairSync("rsa", { modulusLength: 1024 }); // NOT OK + +const good1 = crypto.generateKeyPairSync("rsa", { modulusLength: 4096 }); // OK From f6ec56a977ede420d4be1bc041ad72b8abf4fc31 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Aug 2024 09:16:36 +0200 Subject: [PATCH 039/334] C#: Implement `ContentSet` --- .../dataflow/internal/DataFlowPrivate.qll | 186 ++++++++++-------- .../dataflow/internal/DataFlowPublic.qll | 72 ++++++- .../dataflow/internal/FlowSummaryImpl.qll | 49 +++-- .../internal/TaintTrackingPrivate.qll | 12 +- .../csharp/frameworks/EntityFramework.qll | 42 ++-- .../modelgenerator/internal/CaptureModels.qll | 18 +- .../internal/CaptureModelsSpecific.qll | 25 ++- .../dataflow/external-models/steps.ql | 4 +- 8 files changed, 267 insertions(+), 141 deletions(-) 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 f1c51f222d5..fd31d2a3a38 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -908,19 +908,20 @@ private class Argument extends Expr { * * `postUpdate` indicates whether the store targets a post-update node. */ -private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, boolean postUpdate) { +private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, boolean postUpdate) { exists(FieldOrProperty f | - c = f.getContent() and + c = f.getContentSet() and ( f.isFieldLike() and f instanceof InstanceFieldOrProperty or exists( FlowSummaryImpl::Private::SummarizedCallableImpl sc, - FlowSummaryImpl::Private::SummaryComponentStack input + FlowSummaryImpl::Private::SummaryComponentStack input, ContentSet readSet | sc.propagatesFlow(input, _, _, _) and - input.contains(FlowSummaryImpl::Private::SummaryComponent::content(f.getContent())) + input.contains(FlowSummaryImpl::Private::SummaryComponent::content(readSet)) and + c.getAStoreContent() = readSet.getAReadContent() ) ) | @@ -970,28 +971,13 @@ private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, bool ) } -/** Holds if property `p1` overrides or implements source declaration property `p2`. */ -private predicate overridesOrImplementsSourceDecl(Property p1, Property p2) { - p1.getOverridee*().getUnboundDeclaration() = p2 - or - p1.getAnUltimateImplementee().getUnboundDeclaration() = p2 -} - /** * Holds if `e2` is an expression that reads field or property `c` from - * expression `e1`. This takes overriding into account for properties written - * from library code. + * expression `e1`. */ -private predicate fieldOrPropertyRead(Expr e1, Content c, FieldOrPropertyRead e2) { +private predicate fieldOrPropertyRead(Expr e1, ContentSet c, FieldOrPropertyRead e2) { e1 = e2.getQualifier() and - exists(FieldOrProperty ret | c = ret.getContent() | - ret = e2.getTarget() - or - exists(Property target | - target.getGetter() = e2.(PropertyCall).getARuntimeTarget() and - overridesOrImplementsSourceDecl(target, ret) - ) - ) + c = e2.getTarget().(FieldOrProperty).getContentSet() } /** @@ -1208,6 +1194,11 @@ private module Cached { } or TCapturedVariableContent(VariableCapture::CapturedVariable v) + cached + newtype TContentSet = + TSingletonContent(Content c) { not c instanceof PropertyContent } or + TPropertyContentSet(Property p) { p.isUnboundDeclaration() } + cached newtype TContentApprox = TFieldApproxContent(string firstChar) { firstChar = approximateFieldContent(_) } or @@ -2076,10 +2067,10 @@ class FieldOrProperty extends Assignable, Modifiable { } /** Gets the content that matches this field or property. */ - Content getContent() { - result.(FieldContent).getField() = this.getUnboundDeclaration() + ContentSet getContentSet() { + result.isField(this.getUnboundDeclaration()) or - result.(PropertyContent).getProperty() = this.getUnboundDeclaration() + result.isProperty(this.getUnboundDeclaration()) } } @@ -2209,8 +2200,8 @@ private class StoreStepConfiguration extends ControlFlowReachabilityConfiguratio } pragma[nomagic] -private PropertyContent getResultContent() { - result.getProperty() = any(SystemThreadingTasksTaskTClass c_).getResultProperty() +private ContentSet getResultContent() { + result.isProperty(any(SystemThreadingTasksTaskTClass c_).getResultProperty()) } private predicate primaryConstructorParameterStore( @@ -2224,17 +2215,16 @@ private predicate primaryConstructorParameterStore( ) } -/** - * Holds if data can flow from `node1` to `node2` via an assignment to - * content `c`. - */ -predicate storeStep(Node node1, ContentSet c, Node node2) { +pragma[nomagic] +private predicate recordParameter(RecordType t, Parameter p, string name) { + p.getName() = name and p.getCallable().getDeclaringType() = t +} + +private predicate storeContentStep(Node node1, Content c, Node node2) { exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate | hasNodePath(x, node1, node) and if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2 | - fieldOrPropertyStore(_, c, node1.asExpr(), node.getExpr(), postUpdate) - or arrayStore(_, node1.asExpr(), node.getExpr(), postUpdate) and c instanceof ElementContent ) or @@ -2255,26 +2245,59 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { c instanceof ElementContent ) or + primaryConstructorParameterStore(node1, c, node2) + or + exists(Parameter p, DataFlowCallable callable | + node1 = TExplicitParameterNode(p, callable) and + node2 = TPrimaryConstructorThisAccessNode(p, true, callable) and + not recordParameter(_, p, _) and + c.(PrimaryConstructorParameterContent).getParameter() = p + ) + or + VariableCapture::storeStep(node1, c, node2) +} + +pragma[nomagic] +private predicate recordProperty(RecordType t, ContentSet c, string name) { + exists(Property p | + c.isProperty(p) and + p.getName() = name and + p.getDeclaringType() = t + ) +} + +/** + * Holds if data can flow from `node1` to `node2` via an assignment to + * content `c`. + */ +predicate storeStep(Node node1, ContentSet c, Node node2) { + exists(Content cont | + storeContentStep(node1, cont, node2) and + c.isSingleton(cont) + ) + or + exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate | + hasNodePath(x, node1, node) and + if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2 + | + fieldOrPropertyStore(_, c, node1.asExpr(), node.getExpr(), postUpdate) + ) + or exists(Expr e | e = node1.asExpr() and node2.(AsyncReturnNode).getExpr() = e and c = getResultContent() ) or - primaryConstructorParameterStore(node1, c, node2) - or - exists(Parameter p, DataFlowCallable callable | + exists(Parameter p, DataFlowCallable callable, RecordType t, string name | node1 = TExplicitParameterNode(p, callable) and node2 = TPrimaryConstructorThisAccessNode(p, true, callable) and - if p.getCallable().getDeclaringType() instanceof RecordType - then c.(PropertyContent).getProperty().getName() = p.getName() - else c.(PrimaryConstructorParameterContent).getParameter() = p + recordParameter(t, p, name) and + recordProperty(t, c, name) ) or FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, node2.(FlowSummaryNode).getSummaryNode()) - or - VariableCapture::storeStep(node1, c, node2) } private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration { @@ -2342,14 +2365,8 @@ private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration } } -/** - * Holds if data can flow from `node1` to `node2` via a read of content `c`. - */ -predicate readStep(Node node1, ContentSet c, Node node2) { +private predicate readContentStep(Node node1, Content c, Node node2) { exists(ReadStepConfiguration x | - hasNodePath(x, node1, node2) and - fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr()) - or hasNodePath(x, node1, node2) and arrayRead(node1.asExpr(), node2.asExpr()) and c instanceof ElementContent @@ -2361,10 +2378,6 @@ predicate readStep(Node node1, ContentSet c, Node node2) { c instanceof ElementContent ) or - hasNodePath(x, node1, node2) and - node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and - c = getResultContent() - or node1 = any(InstanceParameterAccessPreNode n | n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and @@ -2402,31 +2415,30 @@ predicate readStep(Node node1, ContentSet c, Node node2) { ) ) or - FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, - node2.(FlowSummaryNode).getSummaryNode()) - or VariableCapture::readStep(node1, c, node2) } /** - * Holds if values stored inside content `c` are cleared at node `n`. For example, - * any value stored inside `f` is cleared at the pre-update node associated with `x` - * in `x.f = newValue`. + * Holds if data can flow from `node1` to `node2` via a read of content `c`. */ -predicate clearsContent(Node n, ContentSet c) { - fieldOrPropertyStore(_, c, _, n.asExpr(), true) - or - fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false) - or - FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) - or - exists(WithExpr we, ObjectInitializer oi, FieldOrProperty f | - oi = we.getInitializer() and - n.asExpr() = oi and - f = oi.getAMemberInitializer().getInitializedMember() and - c = f.getContent() +predicate readStep(Node node1, ContentSet c, Node node2) { + exists(Content cont | + readContentStep(node1, cont, node2) and + c.isSingleton(cont) ) or + exists(ReadStepConfiguration x | hasNodePath(x, node1, node2) | + fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr()) + or + node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and + c = getResultContent() + ) + or + FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) +} + +private predicate clearsCont(Node n, Content c) { exists(Argument a, Struct s, Field f | a = n.(PostUpdateNode).getPreUpdateNode().asExpr() and a.getType() = s and @@ -2440,6 +2452,31 @@ predicate clearsContent(Node n, ContentSet c) { VariableCapture::clearsContent(n, c) } +/** + * Holds if values stored inside content `c` are cleared at node `n`. For example, + * any value stored inside `f` is cleared at the pre-update node associated with `x` + * in `x.f = newValue`. + */ +predicate clearsContent(Node n, ContentSet c) { + exists(Content cont | + clearsCont(n, cont) and + c.isSingleton(cont) + ) + or + fieldOrPropertyStore(_, c, _, n.asExpr(), true) + or + fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false) + or + FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) + or + exists(WithExpr we, ObjectInitializer oi, FieldOrProperty f | + oi = we.getInitializer() and + n.asExpr() = oi and + f = oi.getAMemberInitializer().getInitializedMember() and + c = f.getContentSet() + ) +} + /** * Holds if the value that is being tracked is expected to be stored inside content `c` * at node `n`. @@ -2447,7 +2484,7 @@ predicate clearsContent(Node n, ContentSet c) { predicate expectsContent(Node n, ContentSet c) { FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) or - n.asExpr() instanceof SpreadElementExpr and c instanceof ElementContent + n.asExpr() instanceof SpreadElementExpr and c.isElement() } class NodeRegion instanceof ControlFlow::BasicBlock { @@ -3048,8 +3085,3 @@ abstract class SyntheticField extends string { /** Gets the type of this synthetic field. */ Type getType() { result instanceof ObjectType } } - -/** - * Holds if the the content `c` is a container. - */ -predicate containerContent(DataFlow::Content c) { c instanceof DataFlow::ElementContent } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 4d1dc25f6e9..84e486c7a55 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -267,22 +267,84 @@ class CapturedVariableContent extends Content, TCapturedVariableContent { override Location getLocation() { result = v.getLocation() } } +/** Holds if property `p1` overrides or implements source declaration property `p2`. */ +private predicate overridesOrImplementsSourceDecl(Property p1, Property p2) { + p1.getOverridee*().getUnboundDeclaration() = p2 + or + p1.getAnUltimateImplementee().getUnboundDeclaration() = p2 +} + /** * An entity that represents a set of `Content`s. * * The set may be interpreted differently depending on whether it is * stored into (`getAStoreContent`) or read from (`getAReadContent`). */ -class ContentSet instanceof Content { +class ContentSet extends TContentSet { + /** Holds if this content set is the singleton `{c}`. */ + predicate isSingleton(Content c) { this = TSingletonContent(c) } + + /** + * Holds if this content set represents the property `p`. + * + * + * For `getAReadContent`, this set represents all properties that may + * (reflexively and transitively) override/implement `p` (or vice versa). + */ + predicate isProperty(Property p) { this = TPropertyContentSet(p) } + + /** Holds if this content set represent the field `f`. */ + predicate isField(Field f) { this.isSingleton(TFieldContent(f)) } + + /** Holds if this content set represents an element in a collection. */ + predicate isElement() { this.isSingleton(TElementContent()) } + /** Gets a content that may be stored into when storing into this set. */ - Content getAStoreContent() { result = this } + Content getAStoreContent() { + this.isSingleton(result) + or + this.isProperty(result.(PropertyContent).getProperty()) + } /** Gets a content that may be read from when reading from this set. */ - Content getAReadContent() { result = this } + Content getAReadContent() { + this.isSingleton(result) + or + exists(Property p1, Property p2 | + this.isProperty(p1) and + p2 = result.(PropertyContent).getProperty() + | + p1 = p2 + or + overridesOrImplementsSourceDecl(p2, p1) + or + overridesOrImplementsSourceDecl(p1, p2) + ) + } /** Gets a textual representation of this content set. */ - string toString() { result = super.toString() } + string toString() { + exists(Content c | + this.isSingleton(c) and + result = c.toString() + ) + or + exists(Property p | + this.isProperty(p) and + result = "property " + p.getName() + ) + } /** Gets the location of this content set. */ - Location getLocation() { result = super.getLocation() } + Location getLocation() { + exists(Content c | + this.isSingleton(c) and + result = c.getLocation() + ) + or + exists(Property p | + this.isProperty(p) and + result = p.getLocation() + ) + } } 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 d70f66f2cbe..d777566a336 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -46,7 +46,7 @@ module Input implements InputSig result = "delegate-self" } - string encodeContent(ContentSet c, string arg) { + private string encodeCont(Content c, string arg) { c = TElementContent() and result = "Element" and arg = "" or exists(Field f, string qualifier, string name | @@ -56,27 +56,34 @@ module Input implements InputSig result = "Field" ) or - 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 | c = TSyntheticFieldContent(f) and result = "SyntheticField" and arg = f ) } + string encodeContent(ContentSet c, string arg) { + exists(Content cont | + c.isSingleton(cont) and + result = encodeCont(cont, arg) + ) + or + exists(Property p, string qualifier, string name | + c.isProperty(p) and + p.hasFullyQualifiedName(qualifier, name) and + arg = getQualifiedName(qualifier, name) and + result = "Property" + ) + } + string encodeWithoutContent(ContentSet c, string arg) { result = "WithoutElement" and - c = TElementContent() and + c.isElement() and arg = "" } string encodeWithContent(ContentSet c, string arg) { result = "WithElement" and - c = TElementContent() and + c.isElement() and arg = "" } @@ -103,12 +110,10 @@ private module TypesInput implements Impl::Private::TypesInputSig { result.asGvnType() = Gvn::getGlobalValueNumber(any(ObjectType t)) } - DataFlowType getContentType(ContentSet c) { + private DataFlowType getContType(Content c) { exists(Type t | result.asGvnType() = Gvn::getGlobalValueNumber(t) | t = c.(FieldContent).getField().getType() or - t = c.(PropertyContent).getProperty().getType() - or t = c.(SyntheticFieldContent).getField().getType() or c instanceof ElementContent and @@ -116,6 +121,17 @@ private module TypesInput implements Impl::Private::TypesInputSig { ) } + DataFlowType getContentType(ContentSet c) { + exists(Content cont | + c.isSingleton(cont) and + result = getContType(cont) + ) + or + exists(Property p | + c.isProperty(p) and result.asGvnType() = Gvn::getGlobalValueNumber(p.getType()) + ) + } + DataFlowType getParameterType(Impl::Public::SummarizedCallable c, ParameterPosition pos) { exists(Type t | result.asGvnType() = Gvn::getGlobalValueNumber(t) | exists(int i | @@ -311,17 +327,16 @@ module Private { } /** Gets a summary component that represents an element in a collection. */ - SummaryComponent element() { result = content(any(DataFlow::ElementContent c)) } + SummaryComponent element() { result = content(any(ContentSet cs | cs.isElement())) } /** Gets a summary component for property `p`. */ SummaryComponent property(Property p) { - result = - content(any(DataFlow::PropertyContent c | c.getProperty() = p.getUnboundDeclaration())) + result = content(any(DataFlow::ContentSet c | c.isProperty(p.getUnboundDeclaration()))) } /** Gets a summary component for field `f`. */ SummaryComponent field(Field f) { - result = content(any(DataFlow::FieldContent c | c.getField() = f.getUnboundDeclaration())) + result = content(any(DataFlow::ContentSet c | c.isField(f.getUnboundDeclaration()))) } /** Gets a summary component that represents the return value of a call. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index 11c47c1d37e..25de2681862 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -122,22 +122,22 @@ private module Cached { FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(nodeFrom, nodeTo, _) or // Taint collection by adding a tainted element - exists(DataFlow::ElementContent c | + exists(DataFlow::ContentSet c | c.isElement() | storeStep(nodeFrom, c, nodeTo) or FlowSummaryImpl::Private::Steps::summarySetterStep(nodeFrom, c, nodeTo, _) ) or - exists(DataFlow::Content c | + exists(DataFlow::ContentSet c | readStep(nodeFrom, c, nodeTo) or FlowSummaryImpl::Private::Steps::summaryGetterStep(nodeFrom, c, nodeTo, _) | // Taint members - c = any(TaintedMember m).(FieldOrProperty).getContent() + c = any(TaintedMember m).(FieldOrProperty).getContentSet() or // Read from a tainted collection - c = TElementContent() + c.isElement() ) ) } @@ -152,12 +152,12 @@ private module Cached { localTaintStepCommon(nodeFrom, nodeTo) or // Taint members - readStep(nodeFrom, any(TaintedMember m).(FieldOrProperty).getContent(), nodeTo) + readStep(nodeFrom, any(TaintedMember m).(FieldOrProperty).getContentSet(), nodeTo) or // Although flow through collections is modeled precisely using stores/reads, we still // allow flow out of a _tainted_ collection. This is needed in order to support taint- // tracking configurations where the source is a collection - readStep(nodeFrom, TElementContent(), nodeTo) + readStep(nodeFrom, any(DataFlow::ContentSet c | c.isElement()), nodeTo) or nodeTo = nodeFrom.(DataFlow::NonLocalJumpNode).getAJumpSuccessor(false) ) and diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll index deeccdbf020..9bf516bc876 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll @@ -282,12 +282,12 @@ module EntityFramework { * If `t2` is a column type, `c2` will be included in the model (see * https://docs.microsoft.com/en-us/ef/core/modeling/entity-types?tabs=data-annotations). */ - private predicate step(Content c1, Type t1, Content c2, Type t2, int dist) { + private predicate step(ContentSet c1, Type t1, ContentSet c2, Type t2, int dist) { exists(Property p1 | p1 = this.getADbSetProperty(t2) and - c1.(PropertyContent).getProperty() = p1 and + c1.isProperty(p1) and t1 = p1.getType() and - c2 instanceof ElementContent and + c2.isElement() and dist = 0 ) or @@ -299,17 +299,17 @@ module EntityFramework { exists(Property p2 | p2.getDeclaringType().(Class) = t1 and not isColumnType(t1) and - c2.(PropertyContent).getProperty() = p2 and + c2.isProperty(p2) and t2 = p2.getType() and not isNotMapped(p2) ) or exists(ConstructedInterface ci | - c1 instanceof PropertyContent and + c1.isProperty(_) and t1.(ValueOrRefType).getABaseType*() = ci and not t1 instanceof StringType and ci.getUnboundDeclaration() instanceof SystemCollectionsGenericIEnumerableTInterface and - c2 instanceof ElementContent and + c2.isElement() and t2 = ci.getTypeArgument(0) ) ) @@ -340,16 +340,16 @@ module EntityFramework { * ``` */ Property getAColumnProperty(int dist) { - exists(PropertyContent c, Type t | + exists(ContentSet c, Type t | this.step(_, _, c, t, dist) and - c.getProperty() = result and + c.isProperty(result) and isColumnType(t) ) } - private predicate stepRev(Content c1, Type t1, Content c2, Type t2, int dist) { + private predicate stepRev(ContentSet c1, Type t1, ContentSet c2, Type t2, int dist) { this.step(c1, t1, c2, t2, dist) and - c2.(PropertyContent).getProperty() = this.getAColumnProperty(dist) + c2.isProperty(this.getAColumnProperty(dist)) or this.stepRev(c2, t2, _, _, dist + 1) and this.step(c1, t1, c2, t2, dist) @@ -364,13 +364,13 @@ module EntityFramework { /** Holds if component stack `head :: tail` is required for the input specification. */ predicate requiresComponentStackIn( - Content head, Type headType, SummaryComponentStack tail, int dist + ContentSet head, Type headType, SummaryComponentStack tail, int dist ) { tail = SummaryComponentStack::qualifier() and this.stepRev(head, headType, _, _, 0) and dist = -1 or - exists(Content tailHead, Type tailType, SummaryComponentStack tailTail | + exists(ContentSet tailHead, Type tailType, SummaryComponentStack tailTail | this.requiresComponentStackIn(tailHead, tailType, tailTail, dist - 1) and tail = SummaryComponentStack::push(SummaryComponent::content(tailHead), tailTail) and this.stepRev(tailHead, tailType, head, headType, dist) @@ -379,18 +379,18 @@ module EntityFramework { /** Holds if component stack `head :: tail` is required for the output specification. */ predicate requiresComponentStackOut( - Content head, Type headType, SummaryComponentStack tail, int dist, + ContentSet head, Type headType, SummaryComponentStack tail, int dist, DbContextClassSetProperty dbSetProp ) { - exists(PropertyContent c1 | + exists(ContentSet c1 | dbSetProp = this.getADbSetProperty(headType) and this.stepRev(c1, _, head, headType, 0) and - c1.getProperty() = dbSetProp and + c1.isProperty(dbSetProp) and tail = SummaryComponentStack::return() and dist = 0 ) or - exists(Content tailHead, SummaryComponentStack tailTail, Type tailType | + exists(ContentSet tailHead, SummaryComponentStack tailTail, Type tailType | this.requiresComponentStackOut(tailHead, tailType, tailTail, dist - 1, dbSetProp) and tail = SummaryComponentStack::push(SummaryComponent::content(tailHead), tailTail) and this.stepRev(tailHead, tailType, head, headType, dist) @@ -402,9 +402,9 @@ module EntityFramework { */ pragma[noinline] predicate input(SummaryComponentStack input, Property mapped) { - exists(PropertyContent head, SummaryComponentStack tail | + exists(ContentSet head, SummaryComponentStack tail | this.requiresComponentStackIn(head, _, tail, _) and - head.getProperty() = mapped and + head.isProperty(mapped) and mapped = this.getAColumnProperty(_) and input = SummaryComponentStack::push(SummaryComponent::content(head), tail) ) @@ -418,9 +418,9 @@ module EntityFramework { private predicate output( SummaryComponentStack output, Property mapped, DbContextClassSetProperty dbSet ) { - exists(PropertyContent head, SummaryComponentStack tail | + exists(ContentSet head, SummaryComponentStack tail | this.requiresComponentStackOut(head, _, tail, _, dbSet) and - head.getProperty() = mapped and + head.isProperty(mapped) and mapped = this.getAColumnProperty(_) and output = SummaryComponentStack::push(SummaryComponent::content(head), tail) ) @@ -505,7 +505,7 @@ module EntityFramework { private class DbContextSaveChangesRequiredSummaryComponentStack extends RequiredSummaryComponentStack { override predicate required(SummaryComponent head, SummaryComponentStack tail) { - exists(Content c | head = SummaryComponent::content(c) | + exists(ContentSet c | head = SummaryComponent::content(c) | any(DbContextClass cls).requiresComponentStackIn(c, _, tail, _) or any(DbContextClass cls).requiresComponentStackOut(c, _, tail, _, _) diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b8bc01f0800..b5eff2664d2 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -50,7 +50,7 @@ module Printing = ModelPrinting; /** * Holds if `c` is a relevant content kind, where the underlying type is relevant. */ -private predicate isRelevantTypeInContent(DataFlow::Content c) { +private predicate isRelevantTypeInContent(DataFlow::ContentSet c) { isRelevantType(getUnderlyingContentType(c)) } @@ -58,24 +58,22 @@ private predicate isRelevantTypeInContent(DataFlow::Content c) { * Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`. */ private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(DataFlow::Content f | + exists(DataFlow::ContentSet f | DataFlowPrivate::readStep(node1, f, node2) and // Partially restrict the content types used for intermediate steps. (not exists(getUnderlyingContentType(f)) or isRelevantTypeInContent(f)) ) or - exists(DataFlow::Content f | DataFlowPrivate::storeStep(node1, f, node2) | - DataFlowPrivate::containerContent(f) - ) + exists(DataFlow::ContentSet f | DataFlowPrivate::storeStep(node1, f, node2) | containerContent(f)) } /** * Holds if content `c` is either a field, a synthetic field or language specific * content of a relevant type or a container like content. */ -private predicate isRelevantContent(DataFlow::Content c) { +private predicate isRelevantContent(DataFlow::ContentSet c) { isRelevantTypeInContent(c) or - DataFlowPrivate::containerContent(c) + containerContent(c) } /** @@ -170,8 +168,8 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { predicate isAdditionalFlowStep( DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 ) { - exists(DataFlow::Content c | - DataFlowImplCommon::store(node1, c, node2, _, _) and + exists(DataFlow::ContentSet c | + DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and isRelevantContent(c) and ( state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 @@ -180,7 +178,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { ) ) or - exists(DataFlow::Content c | + exists(DataFlow::ContentSet c | DataFlowPrivate::readStep(node1, c, node2) and isRelevantContent(c) and state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index c442261d780..89d721b300d 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -210,10 +210,24 @@ predicate isRelevantType(CS::Type t) { /** * Gets the underlying type of the content `c`. */ -CS::Type getUnderlyingContentType(DataFlow::Content c) { +private CS::Type getUnderlyingContType(DataFlow::Content c) { result = c.(DataFlow::FieldContent).getField().getType() or - result = c.(DataFlow::SyntheticFieldContent).getField().getType() or - result = c.(DataFlow::PropertyContent).getProperty().getType() + result = c.(DataFlow::SyntheticFieldContent).getField().getType() +} + +/** + * Gets the underlying type of the content `c`. + */ +CS::Type getUnderlyingContentType(DataFlow::ContentSet c) { + exists(DataFlow::Content cont | + c.isSingleton(cont) and + result = getUnderlyingContType(cont) + ) + or + exists(CS::Property p | + c.isProperty(p) and + result = p.getType() + ) } /** @@ -325,3 +339,8 @@ predicate isRelevantSinkKind(string kind) { any() } */ bindingset[kind] predicate isRelevantSourceKind(string kind) { any() } + +/** + * Holds if the the content `c` is a container. + */ +predicate containerContent(DataFlow::ContentSet c) { c.isElement() } diff --git a/csharp/ql/test/library-tests/dataflow/external-models/steps.ql b/csharp/ql/test/library-tests/dataflow/external-models/steps.ql index 05d96df8f32..aaeda41c163 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/steps.ql +++ b/csharp/ql/test/library-tests/dataflow/external-models/steps.ql @@ -16,10 +16,10 @@ query predicate summaryThroughStep( preservesValue = false } -query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) { +query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, ContentSet c) { FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out, _) } -query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) { +query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, ContentSet c) { FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out, _) } From d638b5c7d4efbabc7ca4101de05cc98fc3c21219 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 13 Aug 2024 13:26:48 +0200 Subject: [PATCH 040/334] Sync shared file --- .../modelgenerator/internal/CaptureModels.qll | 18 ++++++++---------- .../internal/CaptureModelsSpecific.qll | 2 ++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b8bc01f0800..b5eff2664d2 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -50,7 +50,7 @@ module Printing = ModelPrinting; /** * Holds if `c` is a relevant content kind, where the underlying type is relevant. */ -private predicate isRelevantTypeInContent(DataFlow::Content c) { +private predicate isRelevantTypeInContent(DataFlow::ContentSet c) { isRelevantType(getUnderlyingContentType(c)) } @@ -58,24 +58,22 @@ private predicate isRelevantTypeInContent(DataFlow::Content c) { * Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`. */ private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(DataFlow::Content f | + exists(DataFlow::ContentSet f | DataFlowPrivate::readStep(node1, f, node2) and // Partially restrict the content types used for intermediate steps. (not exists(getUnderlyingContentType(f)) or isRelevantTypeInContent(f)) ) or - exists(DataFlow::Content f | DataFlowPrivate::storeStep(node1, f, node2) | - DataFlowPrivate::containerContent(f) - ) + exists(DataFlow::ContentSet f | DataFlowPrivate::storeStep(node1, f, node2) | containerContent(f)) } /** * Holds if content `c` is either a field, a synthetic field or language specific * content of a relevant type or a container like content. */ -private predicate isRelevantContent(DataFlow::Content c) { +private predicate isRelevantContent(DataFlow::ContentSet c) { isRelevantTypeInContent(c) or - DataFlowPrivate::containerContent(c) + containerContent(c) } /** @@ -170,8 +168,8 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { predicate isAdditionalFlowStep( DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 ) { - exists(DataFlow::Content c | - DataFlowImplCommon::store(node1, c, node2, _, _) and + exists(DataFlow::ContentSet c | + DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and isRelevantContent(c) and ( state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 @@ -180,7 +178,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { ) ) or - exists(DataFlow::Content c | + exists(DataFlow::ContentSet c | DataFlowPrivate::readStep(node1, c, node2) and isRelevantContent(c) and state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index eb37aa93dbe..b881deb6e6a 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -303,3 +303,5 @@ predicate isRelevantSinkKind(string kind) { */ bindingset[kind] predicate isRelevantSourceKind(string kind) { any() } + +predicate containerContent = DataFlowPrivate::containerContent/1; From e84dda4fa66a3b0388dd3f92b271ca3be955d470 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Thu, 15 Aug 2024 16:08:48 -0400 Subject: [PATCH 041/334] Update JS helmet model structure --- .../helmet/Helmet.Required.Setting.model.yml | 2 +- .../javascript/frameworks/helmet/Helmet.qll | 27 +++++++++++++++++++ .../ql/src/Security/CWE-693/CUSTOMIZING.md | 2 +- .../ql/src/Security/CWE-693/InsecureHelmet.ql | 24 +---------------- 4 files changed, 30 insertions(+), 25 deletions(-) create mode 100644 javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll diff --git a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml index ab01ec5206d..a8c14532152 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml +++ b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml @@ -1,6 +1,6 @@ extensions: - addsTo: - pack: codeql/javascript-queries + pack: codeql/javascript-all extensible: requiredHelmetSecuritySetting data: - ["frameguard"] diff --git a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll new file mode 100644 index 00000000000..9e241ee59c7 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll @@ -0,0 +1,27 @@ +/** + * Provides classes for working with Helmet + */ + +import javascript + +class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite { + ExpressLibraries::HelmetRouteHandler helmet; + + HelmetProperty() { + this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite() + } + + ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet } + + predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) } + + string getName() { result = DataFlow::PropWrite.super.getPropertyName() } + + predicate isImportantSecuritySetting() { + // read from data extensions to allow enforcing custom settings + // defaults are located in javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml + requiredHelmetSecuritySetting(this.getName()) + } +} + +extensible predicate requiredHelmetSecuritySetting(string name); diff --git a/javascript/ql/src/Security/CWE-693/CUSTOMIZING.md b/javascript/ql/src/Security/CWE-693/CUSTOMIZING.md index 34ae2851a85..7eeb9e9b19a 100644 --- a/javascript/ql/src/Security/CWE-693/CUSTOMIZING.md +++ b/javascript/ql/src/Security/CWE-693/CUSTOMIZING.md @@ -24,7 +24,7 @@ A suitable [model pack](https://docs.github.com/en/code-security/codeql-cli/usin name: my-org/javascript-helmet-insecure-config-model-pack version: 1.0.0 extensionTargets: - codeql/java-all: '*' + codeql/javascript-all: '*' dataExtensions: - models/**/*.yml ``` diff --git a/javascript/ql/src/Security/CWE-693/InsecureHelmet.ql b/javascript/ql/src/Security/CWE-693/InsecureHelmet.ql index 8f837669ffc..66652e9e58a 100644 --- a/javascript/ql/src/Security/CWE-693/InsecureHelmet.ql +++ b/javascript/ql/src/Security/CWE-693/InsecureHelmet.ql @@ -12,30 +12,8 @@ */ import javascript -import DataFlow import semmle.javascript.frameworks.ExpressModules - -class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite { - ExpressLibraries::HelmetRouteHandler helmet; - - HelmetProperty() { - this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite() - } - - ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet } - - predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) } - - string getName() { result = DataFlow::PropWrite.super.getPropertyName() } - - predicate isImportantSecuritySetting() { - // read from data extensions to allow enforcing custom settings - // defaults are located in javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml - requiredHelmetSecuritySetting(this.getName()) - } -} - -extensible predicate requiredHelmetSecuritySetting(string name); +import semmle.javascript.frameworks.helmet.Helmet from HelmetProperty helmetProperty, ExpressLibraries::HelmetRouteHandler helmet where From 81787a159e00136292bf9e1d0d63ddd737d77261 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Thu, 15 Aug 2024 16:32:37 -0400 Subject: [PATCH 042/334] Add QL docs to helmet model --- .../javascript/frameworks/helmet/Helmet.qll | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll index 9e241ee59c7..765b5a36fc4 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll @@ -4,6 +4,9 @@ import javascript +/** + * A write to a property of a route handler from the "helmet" module. + */ class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite { ExpressLibraries::HelmetRouteHandler helmet; @@ -11,17 +14,28 @@ class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite { this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite() } + /** + * Gets the route handler associated to this property. + */ ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet } + /** + * Gets the boolean value of this property, if it may evaluate to a `Boolean`. + */ predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) } + /** + * Gets the name of the `HelmetProperty`. + */ string getName() { result = DataFlow::PropWrite.super.getPropertyName() } - predicate isImportantSecuritySetting() { - // read from data extensions to allow enforcing custom settings - // defaults are located in javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml - requiredHelmetSecuritySetting(this.getName()) - } + /** + * read from data extensions to allow enforcing custom settings + */ + predicate isImportantSecuritySetting() { requiredHelmetSecuritySetting(this.getName()) } } +/** + * defaults are located in `javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml` + */ extensible predicate requiredHelmetSecuritySetting(string name); From 7dcdad066f474637ca14351c5b5817bc98aa8f24 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 16 Aug 2024 09:44:53 +0200 Subject: [PATCH 043/334] Update javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll --- .../ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll index 765b5a36fc4..375e87e9646 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.qll @@ -2,7 +2,7 @@ * Provides classes for working with Helmet */ -import javascript +private import javascript /** * A write to a property of a route handler from the "helmet" module. From 0126fbcb8f2cb9d7f38f8adce31716981f7a8422 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 Aug 2024 10:56:46 +0100 Subject: [PATCH 044/334] Swift: Clear the language for Swift code snippets that are rendering incorrectly. --- .../queries/Security/CWE-020/IncompleteHostnameRegex.qhelp | 4 ++-- swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp | 2 +- swift/ql/src/queries/Security/CWE-1333/ReDoS.qhelp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp index ef374fc9752..347a0ee0e29 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp @@ -46,7 +46,7 @@

    - +

    @@ -63,7 +63,7 @@

    - + diff --git a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp index b406faf8e17..c312fb1a6f5 100644 --- a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp +++ b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp @@ -28,7 +28,7 @@ likely to handle corner cases correctly than a custom implementation. The following example attempts to filters out all <script> tags.

    - +

    The above sanitizer does not filter out all <script> tags. diff --git a/swift/ql/src/queries/Security/CWE-1333/ReDoS.qhelp b/swift/ql/src/queries/Security/CWE-1333/ReDoS.qhelp index ddbb2835bc2..e641d9b4e61 100644 --- a/swift/ql/src/queries/Security/CWE-1333/ReDoS.qhelp +++ b/swift/ql/src/queries/Security/CWE-1333/ReDoS.qhelp @@ -3,7 +3,7 @@

    Consider the following regular expression:

    - + /^_(__|.)+_$/

    Its sub-expression "(__|.)+" can match the string @@ -19,7 +19,7 @@ the ambiguity between the two branches of the alternative inside the repetition:

    - + /^_(__|[^_])+_$/ From 0acb29d3dd025942396a4a4fa4e6deb53e1e06ee Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 16 Aug 2024 11:15:13 +0100 Subject: [PATCH 045/334] Update frameworks.csv --- go/documentation/library-coverage/frameworks.csv | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/go/documentation/library-coverage/frameworks.csv b/go/documentation/library-coverage/frameworks.csv index 4d1d3ebfb63..7cb5e467634 100644 --- a/go/documentation/library-coverage/frameworks.csv +++ b/go/documentation/library-coverage/frameworks.csv @@ -1,21 +1,28 @@ Framework name,URL,Package prefixes Standard library,https://pkg.go.dev/std, archive/* bufio bytes cmp compress/* container/* context crypto crypto/* database/* debug/* embed encoding encoding/* errors expvar flag fmt go/* hash hash/* html html/* image image/* index/* io io/* log log/* maps math math/* mime mime/* net net/* os os/* path path/* plugin reflect reflect/* regexp regexp/* slices sort strconv strings sync sync/* syscall syscall/* testing testing/* text/* time time/* unicode unicode/* unsafe appleboy/gin-jwt,https://github.com/appleboy/gin-jwt,github.com/appleboy/gin-jwt* +Afero,https://github.com/spf13/afero,github.com/spf13/afero* beego,https://beego.me/,github.com/astaxie/beego* github.com/beego/beego* +CleverGo,https://github.com/clevergo/clevergo,clevergo.tech/clevergo* github.com/clevergo/clevergo* Couchbase official client(gocb),https://github.com/couchbase/gocb,github.com/couchbase/gocb* gopkg.in/couchbase/gocb* chi,https://go-chi.io/,github.com/go-chi/chi* Couchbase unofficial client,http://www.github.com/couchbase/go-couchbase,github.com/couchbaselabs/gocb* cristalhq/jwt,https://github.com/cristalhq/jwt,github.com/cristalhq/jwt* Echo,https://echo.labstack.com/,github.com/labstack/echo* fasthttp,https://github.com/valyala/fasthttp,github.com/valyala/fasthttp* +Fiber,https://github.com/gofiber/fiber,github.com/gofiber/fiber* Fosite,https://github.com/ory/fosite,github.com/ory/fosite* gf-jwt,https://github.com/gogf/gf-jwt,github.com/gogf/gf-jwt* Gin,https://github.com/gin-gonic/gin,github.com/gin-gonic/gin* +Glog,https://github.com/golang/glog,github.com/golang/glog* gopkg.in/glog* k8s.io/klog* Go JOSE,https://github.com/go-jose/go-jose,github.com/go-jose/go-jose* github.com/square/go-jose* gopkg.in/square/go-jose* gopkg.in/go-jose/go-jose* Go kit,https://gokit.io/,github.com/go-kit/kit* go-pg,https://pg.uptrace.dev/,github.com/go-pg/pg* go-restful,https://github.com/emicklei/go-restful,github.com/emicklei/go-restful* +go-sh,https://github.com/codeskyblue/go-sh,github.com/codeskyblue/go-sh* +Go-spew,https://github.com/davecgh/go-spew,github.com/davecgh/go-spew/spew* Gokogiri,https://github.com/moovweb/gokogiri,github.com/jbowtie/gokogiri* github.com/moovweb/gokogiri* +golang.org/x/crypto/ssh,https://pkg.go.dev/golang.org/x/crypto/ssh,golang.org/x/crypto/ssh* golang.org/x/net,https://pkg.go.dev/golang.org/x/net,golang.org/x/net* goproxy,https://github.com/elazarl/goproxy,github.com/elazarl/goproxy* gorilla/mux,https://github.com/gorilla/mux,github.com/gorilla/mux* @@ -32,6 +39,7 @@ kataras/jwt,https://github.com/kataras/jwt,github.com/kataras/jwt* Kubernetes,https://kubernetes.io/,k8s.io/api* k8s.io/apimachinery* lestrrat-go/jwx,https://github.com/lestrrat-go/jwx,github.com/lestrrat-go/jwx* github.com/lestrrat/go-jwx* lestrrat-go/libxml2,https://github.com/lestrrat-go/libxml2,github.com/lestrrat-go/libxml2* +Logrus,https://github.com/sirupsen/logrus,github.com/Sirupsen/logrus* github.com/sirupsen/logrus* Macaron,https://gopkg.in/macaron.v1,gopkg.in/macaron* nhooyr.io/websocket,https://nhooyr.io/websocket,nhooyr.io/websocket* protobuf,https://pkg.go.dev/google.golang.org/protobuf,github.com/golang/protobuf* google.golang.org/protobuf* From 2d19d6f61ecc12f8a888f5a5cdd76888e0c01763 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:40:57 +0100 Subject: [PATCH 046/334] Swift: Fix two of the qhelps by slightly modifying the sample code instead. --- .../queries/Security/CWE-020/IncompleteHostnameRegex.qhelp | 4 ++-- .../queries/Security/CWE-020/IncompleteHostnameRegexBad.swift | 4 ++-- .../Security/CWE-020/IncompleteHostnameRegexGood.swift | 4 ++-- swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp | 2 +- swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp index 347a0ee0e29..ef374fc9752 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp @@ -46,7 +46,7 @@

    - +

    @@ -63,7 +63,7 @@

    - + diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift index 3e28022ab98..6f553b2fbee 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift @@ -1,11 +1,11 @@ -func handleUrl(_ urlString: String) { +func handleUrl(_ urlString: String) throws { // get the 'url=' parameter from the URL let components = URLComponents(string: urlString) let redirectParam = components?.queryItems?.first(where: { $0.name == "url" }) // check we trust the host - let regex = #/^(www|beta).example.com//# // BAD + let regex = try Regex("^(www|beta).example.com/") // BAD if let match = redirectParam?.value?.firstMatch(of: regex) { // ... trust the URL ... } diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift index fad4135a263..1413a7ffa73 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift @@ -1,11 +1,11 @@ -func handleUrl(_ urlString: String) { +func handleUrl(_ urlString: String) throws { // get the 'url=' parameter from the URL let components = URLComponents(string: urlString) let redirectParam = components?.queryItems?.first(where: { $0.name == "url" }) // check we trust the host - let regex = #/^(www|beta)\.example\.com//# // GOOD + let regex = try Regex("^(www|beta)\\.example\\.com/") // GOOD if let match = redirectParam?.value?.firstMatch(of: regex) { // ... trust the URL ... } diff --git a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp index c312fb1a6f5..b406faf8e17 100644 --- a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp +++ b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp @@ -28,7 +28,7 @@ likely to handle corner cases correctly than a custom implementation. The following example attempts to filters out all <script> tags.

    - +

    The above sanitizer does not filter out all <script> tags. diff --git a/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift b/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift index d399bf5a166..f2a8273d31a 100644 --- a/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift +++ b/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift @@ -1,4 +1,4 @@ -let script_tag_regex = /]*>.*<\/script>/ +let script_tag_regex = try Regex("]*>.*") var old_html = "" while (html != old_html) { From 0088ece3ea7772811f7c2c75a2a75e16abb49d66 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:24:03 +0100 Subject: [PATCH 047/334] Revert "Swift: Fix two of the qhelps by slightly modifying the sample code instead." This reverts commit 2d19d6f61ecc12f8a888f5a5cdd76888e0c01763. --- .../queries/Security/CWE-020/IncompleteHostnameRegex.qhelp | 4 ++-- .../queries/Security/CWE-020/IncompleteHostnameRegexBad.swift | 4 ++-- .../Security/CWE-020/IncompleteHostnameRegexGood.swift | 4 ++-- swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp | 2 +- swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp index ef374fc9752..347a0ee0e29 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegex.qhelp @@ -46,7 +46,7 @@

    - +

    @@ -63,7 +63,7 @@

    - + diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift index 6f553b2fbee..3e28022ab98 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexBad.swift @@ -1,11 +1,11 @@ -func handleUrl(_ urlString: String) throws { +func handleUrl(_ urlString: String) { // get the 'url=' parameter from the URL let components = URLComponents(string: urlString) let redirectParam = components?.queryItems?.first(where: { $0.name == "url" }) // check we trust the host - let regex = try Regex("^(www|beta).example.com/") // BAD + let regex = #/^(www|beta).example.com//# // BAD if let match = redirectParam?.value?.firstMatch(of: regex) { // ... trust the URL ... } diff --git a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift index 1413a7ffa73..fad4135a263 100644 --- a/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift +++ b/swift/ql/src/queries/Security/CWE-020/IncompleteHostnameRegexGood.swift @@ -1,11 +1,11 @@ -func handleUrl(_ urlString: String) throws { +func handleUrl(_ urlString: String) { // get the 'url=' parameter from the URL let components = URLComponents(string: urlString) let redirectParam = components?.queryItems?.first(where: { $0.name == "url" }) // check we trust the host - let regex = try Regex("^(www|beta)\\.example\\.com/") // GOOD + let regex = #/^(www|beta)\.example\.com//# // GOOD if let match = redirectParam?.value?.firstMatch(of: regex) { // ... trust the URL ... } diff --git a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp index b406faf8e17..c312fb1a6f5 100644 --- a/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp +++ b/swift/ql/src/queries/Security/CWE-116/BadTagFilter.qhelp @@ -28,7 +28,7 @@ likely to handle corner cases correctly than a custom implementation. The following example attempts to filters out all <script> tags.

    - +

    The above sanitizer does not filter out all <script> tags. diff --git a/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift b/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift index f2a8273d31a..d399bf5a166 100644 --- a/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift +++ b/swift/ql/src/queries/Security/CWE-116/BadTagFilterBad.swift @@ -1,4 +1,4 @@ -let script_tag_regex = try Regex("]*>.*") +let script_tag_regex = /]*>.*<\/script>/ var old_html = "" while (html != old_html) { From d88b310b0eb55f3d5eed48496605db9d0063052e Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:41:19 +0200 Subject: [PATCH 048/334] add getCredentials method of AuthenticationToken as a remote source --- .../lib/ext/experimental/org.apache.shiro.authc.model.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 java/ql/lib/ext/experimental/org.apache.shiro.authc.model.yml diff --git a/java/ql/lib/ext/experimental/org.apache.shiro.authc.model.yml b/java/ql/lib/ext/experimental/org.apache.shiro.authc.model.yml new file mode 100644 index 00000000000..6602a9caf7c --- /dev/null +++ b/java/ql/lib/ext/experimental/org.apache.shiro.authc.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["org.apache.shiro.authc","AuthenticationToken",true,"getCredentials","()","","ReturnValue","remote","manual"] \ No newline at end of file From f4764378c99be12acb21ab5980ab5b90068925b4 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 16 Aug 2024 16:15:46 +0200 Subject: [PATCH 049/334] update tests to contain the new source, delete query with local sources --- .../CWE/CWE-347/Auth0NoVerifierLocalSource.ql | 67 ------------------- .../security/CWE-347/Auth0NoVerifier.expected | 47 +++++++------ .../Auth0NoVerifierLocalSource.expected | 24 ------- .../CWE-347/Auth0NoVerifierLocalSource.qlref | 1 - .../security/CWE-347/JwtNoVerifier.java | 23 ++++++- .../query-tests/security/CWE-347/options | 2 +- .../shiro/authc/AuthenticationToken.java | 11 +++ .../org/apache/shiro/authc/BearerToken.java | 16 +++++ .../shiro/authc/HostAuthenticationToken.java | 10 +++ 9 files changed, 85 insertions(+), 116 deletions(-) delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref create mode 100644 java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/AuthenticationToken.java create mode 100644 java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/BearerToken.java create mode 100644 java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/HostAuthenticationToken.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql b/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql deleted file mode 100644 index 7a9f37a5250..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @name Missing JWT signature check - * @description Failing to check the Json Web Token (JWT) signature may allow an attacker to forge their own tokens. - * @kind path-problem - * @problem.severity error - * @security-severity 7.8 - * @precision medium - * @id java/missing-jwt-signature-check-auth0-local-source - * @tags security - * external/cwe/cwe-347 - */ - -import java -import semmle.code.java.dataflow.FlowSources -import JwtAuth0 as JwtAuth0 - -module JwtDecodeConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(Variable v | - source.asExpr() = v.getInitializer() and - v.getType().hasName("String") - ) and - not FlowToJwtVerify::flow(source, _) - } - - predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::GetPayload a) } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - // Decode Should be one of the middle nodes - exists(JwtAuth0::Decode a | - nodeFrom.asExpr() = a.getArgument(0) and - nodeTo.asExpr() = a - ) - or - exists(JwtAuth0::Verify a | - nodeFrom.asExpr() = a.getArgument(0) and - nodeTo.asExpr() = a - ) - or - exists(JwtAuth0::GetPayload a | - nodeFrom.asExpr() = a.getQualifier() and - nodeTo.asExpr() = a - ) - } -} - -module FlowToJwtVerifyConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(Variable v | - source.asExpr() = v.getInitializer() and - v.getType().hasName("String") - ) - } - - predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(JwtAuth0::Verify a).getArgument(0) } -} - -module JwtDecode = TaintTracking::Global; - -module FlowToJwtVerify = TaintTracking::Global; - -import JwtDecode::PathGraph - -from JwtDecode::PathNode source, JwtDecode::PathNode sink -where JwtDecode::flowPath(source, sink) -select sink.getNode(), source, sink, "This parses a $@, but the signature is not verified.", - source.getNode(), "JWT" diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected index 5dbdfd6acfa..5e21f635d61 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected @@ -1,24 +1,31 @@ edges -| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | provenance | Src:MaD:44684 | -| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | JwtNoVerifier.java:72:38:72:55 | token : String | provenance | | -| JwtNoVerifier.java:72:38:72:55 | token : String | JwtNoVerifier.java:73:37:73:41 | token : String | provenance | | -| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | provenance | | -| JwtNoVerifier.java:73:37:73:41 | token : String | JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | provenance | Config | -| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | provenance | MaD:43977 | -| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43979 | -| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | provenance | | -| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | provenance | Config | +| JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | provenance | Src:MaD:44685 | +| JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | JwtNoVerifier.java:89:38:89:55 | token : String | provenance | | +| JwtNoVerifier.java:58:28:58:62 | (...)... : String | JwtNoVerifier.java:59:32:59:40 | JwtToken3 : String | provenance | | +| JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:58:28:58:62 | (...)... : String | provenance | Src:MaD:2352 | +| JwtNoVerifier.java:59:32:59:40 | JwtToken3 : String | JwtNoVerifier.java:89:38:89:55 | token : String | provenance | | +| JwtNoVerifier.java:89:38:89:55 | token : String | JwtNoVerifier.java:90:37:90:41 | token : String | provenance | | +| JwtNoVerifier.java:90:26:90:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | provenance | | +| JwtNoVerifier.java:90:37:90:41 | token : String | JwtNoVerifier.java:90:26:90:42 | decode(...) : DecodedJWT | provenance | Config | +| JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | provenance | MaD:43978 | +| JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43980 | +| JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | provenance | | +| JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | provenance | Config | nodes -| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | -| JwtNoVerifier.java:72:38:72:55 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | -| JwtNoVerifier.java:73:37:73:41 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | -| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | -| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | semmle.label | getClaim(...) | +| JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | semmle.label | JwtToken1 : String | +| JwtNoVerifier.java:58:28:58:62 | (...)... : String | semmle.label | (...)... : String | +| JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | semmle.label | getCredentials(...) : Object | +| JwtNoVerifier.java:59:32:59:40 | JwtToken3 : String | semmle.label | JwtToken3 : String | +| JwtNoVerifier.java:89:38:89:55 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:90:26:90:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | +| JwtNoVerifier.java:90:37:90:41 | token : String | semmle.label | token : String | +| JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | +| JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | +| JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | +| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | semmle.label | getClaim(...) | subpaths #select -| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:42:28:42:55 | getParameter(...) | JWT | +| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:44:28:44:55 | getParameter(...) | JWT | +| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) | JWT | diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected deleted file mode 100644 index 5dbdfd6acfa..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.expected +++ /dev/null @@ -1,24 +0,0 @@ -edges -| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | provenance | Src:MaD:44684 | -| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | JwtNoVerifier.java:72:38:72:55 | token : String | provenance | | -| JwtNoVerifier.java:72:38:72:55 | token : String | JwtNoVerifier.java:73:37:73:41 | token : String | provenance | | -| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | provenance | | -| JwtNoVerifier.java:73:37:73:41 | token : String | JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | provenance | Config | -| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | provenance | MaD:43977 | -| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43979 | -| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | provenance | | -| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | provenance | Config | -nodes -| JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JwtNoVerifier.java:43:39:43:47 | JwtToken2 : String | semmle.label | JwtToken2 : String | -| JwtNoVerifier.java:72:38:72:55 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:73:26:73:42 | decode(...) : DecodedJWT | semmle.label | decode(...) : DecodedJWT | -| JwtNoVerifier.java:73:37:73:41 | token : String | semmle.label | token : String | -| JwtNoVerifier.java:74:16:74:31 | of(...) : Optional [] : DecodedJWT | semmle.label | of(...) : Optional [] : DecodedJWT | -| JwtNoVerifier.java:74:28:74:30 | jwt : DecodedJWT | semmle.label | jwt : DecodedJWT | -| JwtNoVerifier.java:74:37:74:40 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:74:45:74:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | -| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | semmle.label | getClaim(...) | -subpaths -#select -| JwtNoVerifier.java:74:45:74:69 | getClaim(...) | JwtNoVerifier.java:42:28:42:55 | getParameter(...) : String | JwtNoVerifier.java:74:45:74:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:42:28:42:55 | getParameter(...) | JWT | diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref deleted file mode 100644 index 03cb5e77989..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifierLocalSource.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-347/Auth0NoVerifierLocalSource.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java index 572be9e4c0c..15a31bcc476 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java +++ b/java/ql/test/experimental/query-tests/security/CWE-347/JwtNoVerifier.java @@ -11,6 +11,8 @@ import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTVerificationException; import com.auth0.jwt.interfaces.DecodedJWT; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.BearerToken; public class JwtNoVerifier extends HttpServlet { @@ -39,8 +41,22 @@ public class JwtNoVerifier extends HttpServlet { PrintWriter out = response.getWriter(); // NOT OK: only decode, no verification + String JwtToken1 = request.getParameter("JWT2"); + String userName = decodeToken(JwtToken1); + if (Objects.equals(userName, "Admin")) { + out.println(""); + out.println("

    " + "heyyy Admin" + "

    "); + out.println(""); + } + + AuthenticationToken authToken = new BearerToken("admin", "admin"); + // OK: no clue of the use of unsafe decoded JWT return value String JwtToken2 = request.getParameter("JWT2"); - String userName = decodeToken(JwtToken2); + JWT.decode(JwtToken2); + + // NOT OK: only decode, no verification + String JwtToken3 = (String) authToken.getCredentials(); + userName = decodeToken(JwtToken3); if (Objects.equals(userName, "Admin")) { out.println(""); out.println("

    " + "heyyy Admin" + "

    "); @@ -48,9 +64,10 @@ public class JwtNoVerifier extends HttpServlet { } // OK: no clue of the use of unsafe decoded JWT return value - JwtToken2 = request.getParameter("JWT2"); - JWT.decode(JwtToken2); + String JwtToken4 = (String) authToken.getCredentials(); + JWT.decode(JwtToken4); + out.println(""); out.println("

    " + "heyyy Nobody" + "

    "); diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/options b/java/ql/test/experimental/query-tests/security/CWE-347/options index c83d38c3d09..6a99adc587e 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/options +++ b/java/ql/test/experimental/query-tests/security/CWE-347/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/auth0-java-jwt-4.4.0:${testdir}/../../../../stubs/javax-servlet-2.5 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/auth0-java-jwt-4.4.0:${testdir}/../../../../stubs/javax-servlet-2.5:${testdir}/../../../stubs/org-apache-shiro-authc-2.0.1 diff --git a/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/AuthenticationToken.java b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/AuthenticationToken.java new file mode 100644 index 00000000000..1775519da36 --- /dev/null +++ b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/AuthenticationToken.java @@ -0,0 +1,11 @@ +// Generated automatically from org.apache.shiro.authc.AuthenticationToken for testing purposes + +package org.apache.shiro.authc; + +import java.io.Serializable; + +public interface AuthenticationToken extends Serializable +{ + Object getCredentials(); + Object getPrincipal(); +} diff --git a/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/BearerToken.java b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/BearerToken.java new file mode 100644 index 00000000000..6dc1bf9d9f9 --- /dev/null +++ b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/BearerToken.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.shiro.authc.BearerToken for testing purposes + +package org.apache.shiro.authc; + +import org.apache.shiro.authc.HostAuthenticationToken; + +public class BearerToken implements HostAuthenticationToken +{ + protected BearerToken() {} + public BearerToken(String p0){} + public BearerToken(String p0, String p1){} + public Object getCredentials(){ return null; } + public Object getPrincipal(){ return null; } + public String getHost(){ return null; } + public String getToken(){ return null; } +} diff --git a/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/HostAuthenticationToken.java b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/HostAuthenticationToken.java new file mode 100644 index 00000000000..f199cd78211 --- /dev/null +++ b/java/ql/test/experimental/stubs/org-apache-shiro-authc-2.0.1/org/apache/shiro/authc/HostAuthenticationToken.java @@ -0,0 +1,10 @@ +// Generated automatically from org.apache.shiro.authc.HostAuthenticationToken for testing purposes + +package org.apache.shiro.authc; + +import org.apache.shiro.authc.AuthenticationToken; + +public interface HostAuthenticationToken extends AuthenticationToken +{ + String getHost(); +} From 8b6c293b5cf19cd189a5ce333c6f07ade37001d3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 19 Aug 2024 12:19:51 +0200 Subject: [PATCH 050/334] C#: Add retry logic to file (nuget.exe, dotnet-install.sh) downloads --- .../BuildScripts.cs | 3 +- .../BuildScripts.cs | 3 +- .../Semmle.Autobuild.Shared/MsBuildRule.cs | 3 +- .../DotNet.cs | 3 +- .../NugetExeWrapper.cs | 2 +- csharp/extractor/Semmle.Util/BuildActions.cs | 8 ++-- csharp/extractor/Semmle.Util/BuildScript.cs | 5 ++- csharp/extractor/Semmle.Util/FileUtils.cs | 43 ++++++++++++++++--- 8 files changed, 53 insertions(+), 17 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index 612ca2320ce..d277331b12e 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -7,6 +7,7 @@ using System.Xml; using Microsoft.Build.Construction; using Semmle.Util; using Semmle.Autobuild.Shared; +using Semmle.Util.Logging; namespace Semmle.Autobuild.CSharp.Tests { @@ -203,7 +204,7 @@ namespace Semmle.Autobuild.CSharp.Tests throw new ArgumentException($"Missing CreateDirectory, {path}"); } - public void DownloadFile(string address, string fileName) + public void DownloadFile(string address, string fileName, ILogger logger) { if (!DownloadFiles.Contains((address, fileName))) throw new ArgumentException($"Missing DownloadFile, {address}, {fileName}"); diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs index 605bb58755a..c74692bed75 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs @@ -7,6 +7,7 @@ using System.Linq; using Microsoft.Build.Construction; using System.Xml; using System.IO; +using Semmle.Util.Logging; namespace Semmle.Autobuild.Cpp.Tests { @@ -189,7 +190,7 @@ namespace Semmle.Autobuild.Cpp.Tests throw new ArgumentException($"Missing CreateDirectory, {path}"); } - public void DownloadFile(string address, string fileName) + public void DownloadFile(string address, string fileName, ILogger logger) { if (!DownloadFiles.Contains((address, fileName))) throw new ArgumentException($"Missing DownloadFile, {address}, {fileName}"); diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs index 7827fe5c2e1..953f0884a44 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs @@ -157,7 +157,8 @@ namespace Semmle.Autobuild.Shared BuildScript.DownloadFile( FileUtils.NugetExeUrl, path, - e => builder.Logger.LogWarning($"Failed to download 'nuget.exe': {e.Message}")) + e => builder.Logger.LogWarning($"Failed to download 'nuget.exe': {e.Message}"), + builder.Logger) & BuildScript.Create(_ => { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 0e47f1d1911..d0646ea921c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -248,7 +248,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var downloadDotNetInstallSh = BuildScript.DownloadFile( "https://dot.net/v1/dotnet-install.sh", dotnetInstallPath, - e => logger.LogWarning($"Failed to download 'dotnet-install.sh': {e.Message}")); + e => logger.LogWarning($"Failed to download 'dotnet-install.sh': {e.Message}"), + logger); var chmod = new CommandBuilder(actions). RunCommand("chmod"). diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs index 0371aed16e2..0676042eb42 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs @@ -145,7 +145,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching Directory.CreateDirectory(directory); logger.LogInfo("Attempting to download nuget.exe"); - FileUtils.DownloadFile(FileUtils.NugetExeUrl, nuget); + FileUtils.DownloadFile(FileUtils.NugetExeUrl, nuget, logger); logger.LogInfo($"Downloaded nuget.exe to {nuget}"); return nuget; } diff --git a/csharp/extractor/Semmle.Util/BuildActions.cs b/csharp/extractor/Semmle.Util/BuildActions.cs index e3a4e7ecafe..507af96d13c 100644 --- a/csharp/extractor/Semmle.Util/BuildActions.cs +++ b/csharp/extractor/Semmle.Util/BuildActions.cs @@ -6,7 +6,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Xml; -using Semmle.Util; +using Semmle.Util.Logging; namespace Semmle.Util { @@ -165,7 +165,7 @@ namespace Semmle.Util /// /// Downloads the resource with the specified URI to a local file. /// - void DownloadFile(string address, string fileName); + void DownloadFile(string address, string fileName, ILogger logger); /// /// Creates an for the given . @@ -280,8 +280,8 @@ namespace Semmle.Util public string EnvironmentExpandEnvironmentVariables(string s) => Environment.ExpandEnvironmentVariables(s); - public void DownloadFile(string address, string fileName) => - FileUtils.DownloadFile(address, fileName); + public void DownloadFile(string address, string fileName, ILogger logger) => + FileUtils.DownloadFile(address, fileName, logger); public IDiagnosticsWriter CreateDiagnosticsWriter(string filename) => new DiagnosticsStream(filename); diff --git a/csharp/extractor/Semmle.Util/BuildScript.cs b/csharp/extractor/Semmle.Util/BuildScript.cs index 9dd3ef9c8e9..27172add2b1 100644 --- a/csharp/extractor/Semmle.Util/BuildScript.cs +++ b/csharp/extractor/Semmle.Util/BuildScript.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using Semmle.Util.Logging; namespace Semmle.Util { @@ -275,14 +276,14 @@ namespace Semmle.Util /// /// Creates a build script that downloads the specified file. /// - public static BuildScript DownloadFile(string address, string fileName, Action exceptionCallback) => + public static BuildScript DownloadFile(string address, string fileName, Action exceptionCallback, ILogger logger) => Create(actions => { if (actions.GetDirectoryName(fileName) is string dir && !string.IsNullOrWhiteSpace(dir)) actions.CreateDirectory(dir); try { - actions.DownloadFile(address, fileName); + actions.DownloadFile(address, fileName, logger); return 0; } catch (Exception e) diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index ff7eb879731..70aca8fc68c 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Net.Http; using System.Security.Cryptography; using System.Text; +using System.Threading; using System.Threading.Tasks; using Semmle.Util.Logging; @@ -99,19 +100,49 @@ namespace Semmle.Util return hex.ToString(); } - private static async Task DownloadFileAsync(string address, string filename) + private static async Task DownloadFileAsync(string address, string filename, HttpClient httpClient, CancellationToken token) { - using var httpClient = new HttpClient(); - using var contentStream = await httpClient.GetStreamAsync(address); + using var contentStream = await httpClient.GetStreamAsync(address, token); using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true); - await contentStream.CopyToAsync(stream); + await contentStream.CopyToAsync(stream, CancellationToken.None); + } + + private static void DownloadFileWithRetry(string address, string fileName, int tryCount, int timeoutMilliSeconds, ILogger logger) + { + logger.LogDebug($"Downloading {address} to {fileName}."); + using HttpClient client = new(); + + for (var i = 0; i < tryCount; i++) + { + logger.LogDebug($"Attempt {i + 1} of {tryCount}. Timeout: {timeoutMilliSeconds} ms."); + using var cts = new CancellationTokenSource(); + cts.CancelAfter(timeoutMilliSeconds); + try + { + DownloadFileAsync(address, fileName, client, cts.Token).GetAwaiter().GetResult(); + logger.LogDebug($"Downloaded {address} to {fileName}."); + return; + } + catch (Exception exc) + { + logger.LogDebug($"Failed to download {address} to {fileName}. Exception: {exc.Message}"); + timeoutMilliSeconds *= 2; + + if (i == tryCount - 1) + { + logger.LogDebug($"Failed to download {address} to {fileName} after {tryCount} attempts."); + // Rethrowing the last exception + throw; + } + } + } } /// /// Downloads the file at to . /// - public static void DownloadFile(string address, string fileName) => - DownloadFileAsync(address, fileName).GetAwaiter().GetResult(); + public static void DownloadFile(string address, string fileName, ILogger logger) => + DownloadFileWithRetry(address, fileName, tryCount: 3, timeoutMilliSeconds: 10000, logger); public static string ConvertPathToSafeRelativePath(string path) { From 9d7314febbf71af88d4e2e55cc7e9bd48017fdf9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 19 Aug 2024 15:56:56 +0200 Subject: [PATCH 051/334] C#: Change random temp folder names to hash values --- .../NugetPackageRestorer.cs | 8 +------- .../DotnetSourceGeneratorWrapper.cs | 2 +- csharp/extractor/Semmle.Util/FileUtils.cs | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs index 3c8a977cf5f..ffe588f49e7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs @@ -777,13 +777,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// The full path of the temp directory. private static string ComputeTempDirectoryPath(string srcDir, string subfolderName) { - var bytes = Encoding.Unicode.GetBytes(srcDir); - var sha = SHA1.HashData(bytes); - var sb = new StringBuilder(); - foreach (var b in sha.Take(8)) - sb.AppendFormat("{0:x2}", b); - - return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), sb.ToString(), subfolderName); + return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), FileUtils.ComputeHash(srcDir), subfolderName); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs index 308874d344e..1110f768a74 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs @@ -37,7 +37,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { try { - var name = Guid.NewGuid().ToString("N").ToUpper(); + var name = FileUtils.ComputeHash($"{csprojFile}{Environment.NewLine}{this.GetType().Name}"); using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger); var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt"); var dllPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.dll"); diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index ff7eb879731..d5930251fae 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -91,11 +91,24 @@ namespace Semmle.Util public static string ComputeFileHash(string filePath) { using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); - using var shaAlg = SHA256.Create(); - var sha = shaAlg.ComputeHash(fileStream); + var sha = SHA256.HashData(fileStream); + return GetHashString(sha); + } + + public static string ComputeHash(string input) + { + var bytes = Encoding.Unicode.GetBytes(input); + var sha = MD5.HashData(bytes); // MD5 to keep it shorter than SHA256 + return GetHashString(sha).ToUpper(); + } + + private static string GetHashString(byte[] sha) + { var hex = new StringBuilder(sha.Length * 2); foreach (var b in sha) + { hex.AppendFormat("{0:x2}", b); + } return hex.ToString(); } From 383e27c2bdc61a05836e8de6567a5ba4ba7efb5d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sat, 8 Jun 2024 15:33:50 -0400 Subject: [PATCH 052/334] Add file sources --- go/ql/lib/ext/os.model.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index 11a28a0d1fc..db8662f2ec6 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -40,3 +40,12 @@ extensions: - ["os", "", False, "ExpandEnv", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["os", "", False, "NewFile", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["os", "File", True, "Fd", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["os", "File", True, "Read", "", "", "Argument[receiver]", "Argument[0].Element", "taint", "manual"] + - ["os", "File", True, "ReadAt", "", "", "Argument[receiver]", "Argument[0].Element", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["os", "", False, "Open", "", "", "ReturnValue", "file", "manual"] + - ["os", "", False, "OpenFile", "", "", "ReturnValue", "file", "manual"] + - ["os", "", False, "ReadFile", "", "", "ReturnValue", "file", "manual"] \ No newline at end of file From 3f640a99d3878cdbc97e1fdcbd257ee2526ab763 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 12:36:54 -0400 Subject: [PATCH 053/334] Tests for `file` models --- .../flowsources/local/file/test.expected | 3 ++ .../flowsources/local/file/test.ext.yml | 6 ++++ .../dataflow/flowsources/local/file/test.go | 29 +++++++++++++++++++ .../dataflow/flowsources/local/file/test.ql | 5 ++++ 4 files changed, 43 insertions(+) create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ext.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected new file mode 100644 index 00000000000..cad00099a62 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected @@ -0,0 +1,3 @@ +| test.go:6:2:6:33 | ... := ...[0] | +| test.go:15:2:15:51 | ... := ...[0] | +| test.go:24:2:24:37 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ext.yml new file mode 100644 index 00000000000..5e21e41103f --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ext.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["file", true, 0] \ No newline at end of file diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go new file mode 100644 index 00000000000..786365f2974 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go @@ -0,0 +1,29 @@ +package test + +import "os" + +func open() { + file, err := os.Open("file.txt") + if err != nil { + return + } + defer file.Close() + file.Read([]byte{1, 2, 3}) +} + +func openFile() { + file, err := os.OpenFile("file.txt", os.O_RDWR, 0) + if err != nil { + return + } + defer file.Close() + file.Read([]byte{1, 2, 3}) +} + +func readFile() { + data, err := os.ReadFile("file.txt") + if err != nil { + return + } + _ = data +} \ No newline at end of file diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql new file mode 100644 index 00000000000..fff26479399 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql @@ -0,0 +1,5 @@ +import go + +from DataFlow::Node source +where source instanceof ThreatModelFlowSource +select source From eb8c785c6bd0d38d2b67a76b2043629d275f9f42 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 17:18:33 -0400 Subject: [PATCH 054/334] Fix formatting --- .../semmle/go/dataflow/flowsources/local/file/test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go index 786365f2974..7d297185a69 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go @@ -26,4 +26,4 @@ func readFile() { return } _ = data -} \ No newline at end of file +} From 0f7ad98a239266584e34c64fe51fe95af311b151 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 17:20:43 -0400 Subject: [PATCH 055/334] Change note --- go/ql/lib/change-notes/2024-08-12-add-file-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-08-12-add-file-models.md diff --git a/go/ql/lib/change-notes/2024-08-12-add-file-models.md b/go/ql/lib/change-notes/2024-08-12-add-file-models.md new file mode 100644 index 00000000000..5068a5494dd --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-12-add-file-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Local source models have been added for the file APIs in the "os" package in the Go standard library. From f89174a6f3633c14212fed7bdd8e17d7cac2b6d3 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 20:16:23 -0400 Subject: [PATCH 056/334] CI changes (provenance) --- .../UnhandledCloseWritableHandle.expected | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index e5ad074d25d..69fd752e1e2 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -2,18 +2,18 @@ edges | tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | | tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | | tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | Src:MaD:1398 | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | Src:MaD:1398 | | tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | | tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | Src:MaD:1398 | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | Src:MaD:1398 | | tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | | tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | -| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | | -| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | | -| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | | -| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | | +| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | Src:MaD:1398 | +| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | Src:MaD:1398 | +| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | Src:MaD:1398 | +| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | Src:MaD:1398 | nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | | tests.go:9:8:9:8 | f | semmle.label | f | From fc38476e42ff53645451fcd8e216b716df9bb8c4 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Mon, 19 Aug 2024 12:20:53 -0400 Subject: [PATCH 057/334] Fix models Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/ext/os.model.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index db8662f2ec6..31034541b6d 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -40,12 +40,12 @@ extensions: - ["os", "", False, "ExpandEnv", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["os", "", False, "NewFile", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["os", "File", True, "Fd", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["os", "File", True, "Read", "", "", "Argument[receiver]", "Argument[0].Element", "taint", "manual"] - - ["os", "File", True, "ReadAt", "", "", "Argument[receiver]", "Argument[0].Element", "taint", "manual"] + - ["os", "File", True, "Read", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] + - ["os", "File", True, "ReadAt", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - addsTo: pack: codeql/go-all extensible: sourceModel data: - - ["os", "", False, "Open", "", "", "ReturnValue", "file", "manual"] - - ["os", "", False, "OpenFile", "", "", "ReturnValue", "file", "manual"] - - ["os", "", False, "ReadFile", "", "", "ReturnValue", "file", "manual"] \ No newline at end of file + - ["os", "", False, "Open", "", "", "ReturnValue[0]", "file", "manual"] + - ["os", "", False, "OpenFile", "", "", "ReturnValue[0]", "file", "manual"] + - ["os", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] \ No newline at end of file From 704cd8aee30eaa0586a8cfb53d5340cc155ed47e Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 12:28:55 -0400 Subject: [PATCH 058/334] Update change note --- go/ql/lib/change-notes/2024-08-12-add-file-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/change-notes/2024-08-12-add-file-models.md b/go/ql/lib/change-notes/2024-08-12-add-file-models.md index 5068a5494dd..e50f7138090 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-file-models.md +++ b/go/ql/lib/change-notes/2024-08-12-add-file-models.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Local source models have been added for the file APIs in the "os" package in the Go standard library. +* Local source models have been added for the file APIs in the "os" package in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). From 5e8185ac4fcdd554b304002eb331cd4744ea8150 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 12:44:30 -0400 Subject: [PATCH 059/334] Port test to inline expectations test --- .../flowsources/local/file/test.expected | 6 +++--- .../dataflow/flowsources/local/file/test.go | 6 +++--- .../dataflow/flowsources/local/file/test.ql | 20 ++++++++++++++++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected index cad00099a62..db33d6d2504 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.expected @@ -1,3 +1,3 @@ -| test.go:6:2:6:33 | ... := ...[0] | -| test.go:15:2:15:51 | ... := ...[0] | -| test.go:24:2:24:37 | ... := ...[0] | +testFailures +invalidModelRow +failures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go index 7d297185a69..92d2adbe813 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go @@ -3,7 +3,7 @@ package test import "os" func open() { - file, err := os.Open("file.txt") + file, err := os.Open("file.txt") // $ source if err != nil { return } @@ -12,7 +12,7 @@ func open() { } func openFile() { - file, err := os.OpenFile("file.txt", os.O_RDWR, 0) + file, err := os.OpenFile("file.txt", os.O_RDWR, 0) // $source if err != nil { return } @@ -21,7 +21,7 @@ func openFile() { } func readFile() { - data, err := os.ReadFile("file.txt") + data, err := os.ReadFile("file.txt") // $source if err != nil { return } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql index fff26479399..db6bbb1a2d1 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.ql @@ -1,5 +1,19 @@ import go +import ModelValidation +import TestUtilities.InlineExpectationsTest -from DataFlow::Node source -where source instanceof ThreatModelFlowSource -select source +module SourceTest implements TestSig { + string getARelevantTag() { result = "source" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(ThreatModelFlowSource s | + s.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = s.toString() and + value = "" and + tag = "source" + ) + } +} + +import MakeTest From a308bdb75d6a2de40ffa9b0248230990d8d7070a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 12:59:34 -0400 Subject: [PATCH 060/334] Modify UnhandledCloseWritableHandle to use post processing --- .../UnhandledCloseWritableHandle.qlref | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.qlref b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.qlref index 69ed86999a5..579e4344e89 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.qlref +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.qlref @@ -1 +1,2 @@ -InconsistentCode/UnhandledCloseWritableHandle.ql +query: InconsistentCode/UnhandledCloseWritableHandle.ql +postprocess: TestUtilities/PrettyPrintModels.ql From 2629e09b67d9f3dc1dcb32a089faf128b7b5f6d5 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 17:22:46 -0400 Subject: [PATCH 061/334] Add `io/ioutil` and `io/fs` models --- go/ql/lib/ext/io.fs.model.yml | 8 ++++++++ go/ql/lib/ext/io.ioutil.model.yml | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/go/ql/lib/ext/io.fs.model.yml b/go/ql/lib/ext/io.fs.model.yml index e4ced4b775b..98f0d50a906 100644 --- a/go/ql/lib/ext/io.fs.model.yml +++ b/go/ql/lib/ext/io.fs.model.yml @@ -10,8 +10,16 @@ extensions: - ["io/fs", "", False, "Sub", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "DirEntry", True, "Info", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "DirEntry", True, "Name", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["io/fs", "File", True, "Read", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - ["io/fs", "FS", True, "Open", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "GlobFS", True, "Glob", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "ReadDirFS", True, "ReadDir", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "ReadFileFS", True, "ReadFile", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["io/fs", "SubFS", True, "Sub", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["io/fs", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] + - ["io/fs", "ReadFileFS", True, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] + - ["io/fs", "FS", True, "Open", "", "", "ReturnValue[0]", "file", "manual"] \ No newline at end of file diff --git a/go/ql/lib/ext/io.ioutil.model.yml b/go/ql/lib/ext/io.ioutil.model.yml index f5fd2ea0fb4..dda811c97bf 100644 --- a/go/ql/lib/ext/io.ioutil.model.yml +++ b/go/ql/lib/ext/io.ioutil.model.yml @@ -14,3 +14,8 @@ extensions: data: - ["io/ioutil", "", False, "NopCloser", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["io/ioutil", "", False, "ReadAll", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["io/ioutil", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] \ No newline at end of file From 442026cc9d61587fc89d1d040cc86aa1ad6ebbd8 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 17:23:32 -0400 Subject: [PATCH 062/334] Fix test results --- .../DefaultSanitizer.expected | 4 +++ .../go/frameworks/Echo/ReflectedXss.expected | 7 ++-- .../UnhandledCloseWritableHandle.expected | 36 ++++++++++--------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index 7370d0f9a34..14abf5e8542 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -1,13 +1,17 @@ models | 1 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | | 2 | Source: net/http; Request; true; Body; ; ; ; remote; manual | +| 3 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | edges | Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | | Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:2 MaD:1 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:2 MaD:3 | | Builtin.go:12:2:12:2 | definition of b | Builtin.go:17:9:17:17 | type conversion | provenance | | | Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:2 MaD:1 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:2 MaD:3 | | Builtin.go:21:2:21:2 | definition of b | Builtin.go:24:10:24:18 | type conversion | provenance | | | Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:2 MaD:1 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:2 MaD:3 | nodes | Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index 70df2a52659..a4b8f3ed700 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -31,12 +31,14 @@ edges | test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:16 | | test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | | test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:15 | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:17 | | test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | Src:MaD:12 | | test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:12 | | test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | | test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:16 | | test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | | test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:15 | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:17 | | test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:13 | | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | Src:MaD:14 | | test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:3 | @@ -49,7 +51,7 @@ edges | test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | Src:MaD:4 | | test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | Src:MaD:4 | | test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | provenance | | -| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:17 | +| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:18 | | test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | Src:MaD:4 | models | 1 | Summary: github.com/labstack/echo; Context; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | @@ -68,7 +70,8 @@ models | 14 | Source: github.com/labstack/echo; Context; true; Cookies; ; ; ReturnValue[0]; remote; manual | | 15 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | | 16 | Summary: mime/multipart; FileHeader; true; Open; ; ; Argument[receiver]; ReturnValue[0]; taint; manual | -| 17 | Summary: strings; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | +| 17 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 18 | Summary: strings; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | nodes | test.go:15:11:15:32 | call to Param | semmle.label | call to Param | | test.go:16:16:16:20 | param | semmle.label | param | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index 69fd752e1e2..dc54af70dbb 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -1,19 +1,30 @@ +#select +| tests.go:9:8:9:8 | f | tests.go:31:5:31:78 | ... := ...[0] | tests.go:9:8:9:8 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:31:15:31:78 | call to OpenFile | call to OpenFile | +| tests.go:9:8:9:8 | f | tests.go:45:5:45:76 | ... := ...[0] | tests.go:9:8:9:8 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:45:15:45:76 | call to OpenFile | call to OpenFile | +| tests.go:14:3:14:3 | f | tests.go:31:5:31:78 | ... := ...[0] | tests.go:14:3:14:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:31:15:31:78 | call to OpenFile | call to OpenFile | +| tests.go:14:3:14:3 | f | tests.go:45:5:45:76 | ... := ...[0] | tests.go:14:3:14:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:45:15:45:76 | call to OpenFile | call to OpenFile | +| tests.go:56:3:56:3 | f | tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:54:15:54:78 | call to OpenFile | call to OpenFile | +| tests.go:68:3:68:3 | f | tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:66:15:66:76 | call to OpenFile | call to OpenFile | +| tests.go:110:9:110:9 | f | tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:108:15:108:78 | call to OpenFile | call to OpenFile | +| tests.go:129:3:129:3 | f | tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:125:15:125:78 | call to OpenFile | call to OpenFile | edges | tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | | tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | | tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | Src:MaD:1398 | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | Src:MaD:1398 | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | Src:MaD:1 | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | Src:MaD:1 | | tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | | tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | Src:MaD:1398 | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | Src:MaD:1398 | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | Src:MaD:1 | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | Src:MaD:1 | | tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | | tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | -| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | Src:MaD:1398 | -| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | Src:MaD:1398 | -| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | Src:MaD:1398 | -| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | Src:MaD:1398 | +| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | Src:MaD:1 | +| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | Src:MaD:1 | +| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | Src:MaD:1 | +| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | Src:MaD:1 | +models +| 1 | Source: os; ; false; OpenFile; ; ; ReturnValue[0]; file; manual | nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | | tests.go:9:8:9:8 | f | semmle.label | f | @@ -35,12 +46,3 @@ nodes | tests.go:125:5:125:78 | ... := ...[0] | semmle.label | ... := ...[0] | | tests.go:129:3:129:3 | f | semmle.label | f | subpaths -#select -| tests.go:9:8:9:8 | f | tests.go:31:5:31:78 | ... := ...[0] | tests.go:9:8:9:8 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:31:15:31:78 | call to OpenFile | call to OpenFile | -| tests.go:9:8:9:8 | f | tests.go:45:5:45:76 | ... := ...[0] | tests.go:9:8:9:8 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:45:15:45:76 | call to OpenFile | call to OpenFile | -| tests.go:14:3:14:3 | f | tests.go:31:5:31:78 | ... := ...[0] | tests.go:14:3:14:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:31:15:31:78 | call to OpenFile | call to OpenFile | -| tests.go:14:3:14:3 | f | tests.go:45:5:45:76 | ... := ...[0] | tests.go:14:3:14:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:45:15:45:76 | call to OpenFile | call to OpenFile | -| tests.go:56:3:56:3 | f | tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:54:15:54:78 | call to OpenFile | call to OpenFile | -| tests.go:68:3:68:3 | f | tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:66:15:66:76 | call to OpenFile | call to OpenFile | -| tests.go:110:9:110:9 | f | tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:108:15:108:78 | call to OpenFile | call to OpenFile | -| tests.go:129:3:129:3 | f | tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | File handle may be writable as a result of data flow from a $@ and closing it may result in data loss upon failure, which is not handled explicitly. | tests.go:125:15:125:78 | call to OpenFile | call to OpenFile | From e3ffbbe3b7d645cf48b2a19c613f50a8c16b0aeb Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 19:02:07 -0400 Subject: [PATCH 063/334] Fix extensible name in io/fs models --- go/ql/lib/ext/io.fs.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/ext/io.fs.model.yml b/go/ql/lib/ext/io.fs.model.yml index 98f0d50a906..ac709c939b6 100644 --- a/go/ql/lib/ext/io.fs.model.yml +++ b/go/ql/lib/ext/io.fs.model.yml @@ -18,7 +18,7 @@ extensions: - ["io/fs", "SubFS", True, "Sub", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - addsTo: pack: codeql/go-all - extensible: summaryModel + extensible: sourceModel data: - ["io/fs", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] - ["io/fs", "ReadFileFS", True, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] From bb1cf4f51f9bbc5f9808f2e086e84789c7e44f92 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 20:14:23 -0400 Subject: [PATCH 064/334] Fix tests --- .../DefaultSanitizer.expected | 22 +++++++++++-------- .../go/frameworks/Echo/ReflectedXss.expected | 21 ++++++++++-------- .../CWE-190/AllocationSizeOverflow.qlref | 3 ++- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index 14abf5e8542..2bc14e8d62e 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -1,17 +1,21 @@ models -| 1 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | -| 2 | Source: net/http; Request; true; Body; ; ; ; remote; manual | -| 3 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 1 | Summary: io/fs; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 2 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 3 | Source: net/http; Request; true; Body; ; ; ; remote; manual | +| 4 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | edges | Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:2 MaD:1 | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:2 MaD:3 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:3 MaD:1 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:3 MaD:2 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:3 MaD:4 | | Builtin.go:12:2:12:2 | definition of b | Builtin.go:17:9:17:17 | type conversion | provenance | | -| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:2 MaD:1 | -| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:2 MaD:3 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:3 MaD:1 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:3 MaD:2 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:3 MaD:4 | | Builtin.go:21:2:21:2 | definition of b | Builtin.go:24:10:24:18 | type conversion | provenance | | -| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:2 MaD:1 | -| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:2 MaD:3 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:3 MaD:1 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:3 MaD:2 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:3 MaD:4 | nodes | Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index a4b8f3ed700..ea320848ca5 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -28,17 +28,19 @@ edges | test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | Src:MaD:10 | | test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | Src:MaD:11 | | test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | -| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:16 | +| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:17 | | test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | | test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:15 | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:17 | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:16 | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:18 | | test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | Src:MaD:12 | | test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:12 | | test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | -| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:16 | +| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:17 | | test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | | test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:15 | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:17 | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:16 | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:18 | | test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:13 | | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | Src:MaD:14 | | test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:3 | @@ -51,7 +53,7 @@ edges | test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | Src:MaD:4 | | test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | Src:MaD:4 | | test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | provenance | | -| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:18 | +| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:19 | | test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | Src:MaD:4 | models | 1 | Summary: github.com/labstack/echo; Context; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | @@ -68,10 +70,11 @@ models | 12 | Source: github.com/labstack/echo; Context; true; MultipartForm; ; ; ReturnValue[0]; remote; manual | | 13 | Source: github.com/labstack/echo; Context; true; Cookie; ; ; ReturnValue[0]; remote; manual | | 14 | Source: github.com/labstack/echo; Context; true; Cookies; ; ; ReturnValue[0]; remote; manual | -| 15 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | -| 16 | Summary: mime/multipart; FileHeader; true; Open; ; ; Argument[receiver]; ReturnValue[0]; taint; manual | -| 17 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | -| 18 | Summary: strings; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | +| 15 | Summary: io/fs; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 16 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 17 | Summary: mime/multipart; FileHeader; true; Open; ; ; Argument[receiver]; ReturnValue[0]; taint; manual | +| 18 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | +| 19 | Summary: strings; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | nodes | test.go:15:11:15:32 | call to Param | semmle.label | call to Param | | test.go:16:16:16:20 | param | semmle.label | param | diff --git a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.qlref b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.qlref index 3f69c90d756..35320510b62 100644 --- a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.qlref +++ b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.qlref @@ -1 +1,2 @@ -Security/CWE-190/AllocationSizeOverflow.ql +query: Security/CWE-190/AllocationSizeOverflow.ql +postprocess: TestUtilities/PrettyPrintModels.ql From 0361b5c342a5cd35811b23c788214646eacdb1b5 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 22:31:29 -0400 Subject: [PATCH 065/334] Fix AllocationSizeOverflow expectations --- .../CWE-190/AllocationSizeOverflow.expected | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected index b7a2499b9da..3a9de1ebe60 100644 --- a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected +++ b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected @@ -1,7 +1,18 @@ +#select +| AllocationSizeOverflow.go:10:10:10:22 | call to len | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:10:10:22 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | AllocationSizeOverflow.go:11:25:11:28 | size | allocation | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | potentially large value | +| tst2.go:10:22:10:30 | call to len | tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:22:10:30 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst2.go:10:22:10:32 | ...+... | allocation | tst2.go:9:2:9:37 | ... := ...[0] | potentially large value | +| tst2.go:15:22:15:30 | call to len | tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:22:15:30 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst2.go:15:22:15:32 | ...+... | allocation | tst2.go:14:2:14:29 | ... := ...[0] | potentially large value | +| tst3.go:7:22:7:34 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:22:7:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:7:22:7:36 | ...+... | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | +| tst3.go:24:16:24:28 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:16:24:28 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:27:24:27:32 | newlength | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | +| tst3.go:32:16:32:28 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:16:32:28 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:36:23:36:31 | newlength | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | +| tst.go:15:22:15:34 | call to len | tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:22:15:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:15:22:15:36 | ...+... | allocation | tst.go:14:2:14:30 | ... = ...[0] | potentially large value | +| tst.go:21:22:21:34 | call to len | tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:22:21:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:21:22:21:36 | ...+... | allocation | tst.go:20:2:20:31 | ... = ...[0] | potentially large value | +| tst.go:27:26:27:38 | call to len | tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:26:27:38 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:27:26:27:40 | ...+... | allocation | tst.go:26:2:26:31 | ... = ...[0] | potentially large value | +| tst.go:35:22:35:34 | call to len | tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:22:35:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:35:22:35:36 | ...+... | allocation | tst.go:34:2:34:30 | ... = ...[0] | potentially large value | edges | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:14:10:21 | jsonData | provenance | | | AllocationSizeOverflow.go:10:14:10:21 | jsonData | AllocationSizeOverflow.go:10:10:10:22 | call to len | provenance | Config | -| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | provenance | | +| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | provenance | Src:MaD:1 | | tst2.go:10:26:10:29 | data | tst2.go:10:22:10:30 | call to len | provenance | Config | | tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | provenance | | | tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | provenance | Config | @@ -19,6 +30,8 @@ edges | tst.go:27:30:27:37 | jsonData | tst.go:27:26:27:38 | call to len | provenance | Config | | tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:26:35:33 | jsonData | provenance | | | tst.go:35:26:35:33 | jsonData | tst.go:35:22:35:34 | call to len | provenance | Config | +models +| 1 | Source: io/ioutil; ; false; ReadFile; ; ; ReturnValue[0]; file; manual | nodes | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | semmle.label | ... := ...[0] | | AllocationSizeOverflow.go:10:10:10:22 | call to len | semmle.label | call to len | @@ -49,14 +62,3 @@ nodes | tst.go:35:22:35:34 | call to len | semmle.label | call to len | | tst.go:35:26:35:33 | jsonData | semmle.label | jsonData | subpaths -#select -| AllocationSizeOverflow.go:10:10:10:22 | call to len | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:10:10:22 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | AllocationSizeOverflow.go:11:25:11:28 | size | allocation | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | potentially large value | -| tst2.go:10:22:10:30 | call to len | tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:22:10:30 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst2.go:10:22:10:32 | ...+... | allocation | tst2.go:9:2:9:37 | ... := ...[0] | potentially large value | -| tst2.go:15:22:15:30 | call to len | tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:22:15:30 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst2.go:15:22:15:32 | ...+... | allocation | tst2.go:14:2:14:29 | ... := ...[0] | potentially large value | -| tst3.go:7:22:7:34 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:22:7:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:7:22:7:36 | ...+... | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | -| tst3.go:24:16:24:28 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:16:24:28 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:27:24:27:32 | newlength | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | -| tst3.go:32:16:32:28 | call to len | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:16:32:28 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst3.go:36:23:36:31 | newlength | allocation | tst3.go:6:2:6:31 | ... := ...[0] | potentially large value | -| tst.go:15:22:15:34 | call to len | tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:22:15:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:15:22:15:36 | ...+... | allocation | tst.go:14:2:14:30 | ... = ...[0] | potentially large value | -| tst.go:21:22:21:34 | call to len | tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:22:21:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:21:22:21:36 | ...+... | allocation | tst.go:20:2:20:31 | ... = ...[0] | potentially large value | -| tst.go:27:26:27:38 | call to len | tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:26:27:38 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:27:26:27:40 | ...+... | allocation | tst.go:26:2:26:31 | ... = ...[0] | potentially large value | -| tst.go:35:22:35:34 | call to len | tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:22:35:34 | call to len | This operation, which is used in an $@, involves a $@ and might overflow. | tst.go:35:22:35:36 | ...+... | allocation | tst.go:34:2:34:30 | ... = ...[0] | potentially large value | From 79bd81fa122e6a0ff2b0cae897c25eefcd863958 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 11:23:41 +0200 Subject: [PATCH 066/334] C#: Adjust buildless package restore folders and tests --- .../NugetPackageRestorer.cs | 13 +- .../Assemblies.expected | 470 +++++++++--------- .../Assemblies.ql | 16 +- .../standalone_winforms/Assemblies.expected | 94 ++-- .../standalone_winforms/Assemblies.ql | 10 +- .../Assemblies.expected | 332 ++++++------- .../standalone_dependencies/Assemblies.ql | 16 +- .../Assemblies.expected | 400 +++++++-------- .../Assemblies.ql | 7 +- .../Assemblies.expected | 332 ++++++------- .../Assemblies.ql | 16 +- .../Assemblies.expected | 326 ++++++------ .../Assemblies.ql | 16 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 15 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 14 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 14 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 10 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 10 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 10 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 14 +- .../Assemblies.expected | 2 +- .../Assemblies.ql | 17 +- .../Assemblies.expected | 420 ++++++++-------- .../standalone_dependencies/Assemblies.ql | 16 +- 31 files changed, 1233 insertions(+), 1371 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs index ffe588f49e7..9ce61b633ba 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs @@ -44,9 +44,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching this.logger = logger; this.compilationInfoContainer = compilationInfoContainer; - PackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath(fileProvider.SourceDir.FullName, "packages"), "package", logger); - legacyPackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath(fileProvider.SourceDir.FullName, "legacypackages"), "legacy package", logger); - missingPackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath(fileProvider.SourceDir.FullName, "missingpackages"), "missing package", logger); + PackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath("packages"), "package", logger); + legacyPackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath("legacypackages"), "legacy package", logger); + missingPackageDirectory = new TemporaryDirectory(ComputeTempDirectoryPath("missingpackages"), "missing package", logger); } public string? TryRestore(string package) @@ -338,7 +338,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); - using var tempDir = new TemporaryDirectory(ComputeTempDirectoryPath(fileProvider.SourceDir.FullName, "nugetconfig"), "generated nuget config", logger); + using var tempDir = new TemporaryDirectory(ComputeTempDirectoryPath("nugetconfig"), "generated nuget config", logger); var nugetConfig = fallbackNugetFeeds is null ? GetNugetConfig() : CreateFallbackNugetConfig(fallbackNugetFeeds, tempDir.DirInfo.FullName); @@ -775,6 +775,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// with this source tree. Use a SHA1 of the directory name. /// /// The full path of the temp directory. + private static string ComputeTempDirectoryPath(string subfolderName) + { + return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), subfolderName); + } + private static string ComputeTempDirectoryPath(string srcDir, string subfolderName) { return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), FileUtils.ComputeHash(srcDir), subfolderName); diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected index e845d165068..df67da6a52c 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected @@ -1,235 +1,235 @@ -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Accessibility.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/CustomMarshalers.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/Microsoft.Win32.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.AppContext.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Concurrent.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.NonGeneric.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Specialized.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Annotations.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.EventBasedAsync.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.TypeConverter.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Console.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Data.Common.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Contracts.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Debug.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.FileVersionInfo.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Process.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.StackTrace.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Tools.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TraceSource.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Drawing.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Dynamic.Runtime.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Calendars.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Extensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Compression.ZipFile.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.DriveInfo.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Watcher.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.IsolatedStorage.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.MemoryMappedFiles.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Pipes.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.UnmanagedMemoryStream.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Expressions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Parallel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Queryable.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Http.Rtc.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NameResolution.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NetworkInformation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Ping.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Requests.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Security.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Sockets.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebHeaderCollection.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.Client.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ObjectModel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.ILGeneration.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.Lightweight.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Extensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Reader.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.ResourceManager.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Writer.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.CompilerServices.VisualC.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Extensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Handles.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Numerics.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Formatters.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Json.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Xml.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Claims.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Algorithms.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Csp.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Encoding.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.X509Certificates.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Principal.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.SecureString.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Duplex.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Http.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.NetTcp.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Primitives.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Security.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.Extensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.RegularExpressions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Overlapped.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.Parallel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Thread.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.ThreadPool.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Timer.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ValueTuple.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.ReaderWriter.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XDocument.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.XDocument.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlDocument.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlSerializer.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/netstandard.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ISymWrapper.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Activities.Build.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Engine.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Framework.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.CSharp.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.JScript.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationBuildTasks.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationCore.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero2.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.AeroLite.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Classic.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Luna.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Royale.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ReachFramework.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Core.Presentation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.DurableInstancing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Presentation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.Contract.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.Install.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Core.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.DataSetExtensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Linq.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.OracleClient.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Client.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.SqlXml.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Deployment.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Device.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Diagnostics.Tracing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.Protocols.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Dynamic.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.EnterpriseServices.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.FileSystem.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Log.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Selectors.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Services.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.Instrumentation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Messaging.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.WebRequest.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Numerics.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Printing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Reflection.Context.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Caching.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.DurableInstancing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Remoting.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Security.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activities.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Channels.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Discovery.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Routing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Web.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceProcess.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Speech.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Transactions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Abstractions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.ApplicationServices.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Mobile.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.RegularExpressions.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Routing.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Services.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.Design.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Input.Manipulations.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Presentation.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Activities.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.ComponentModel.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Runtime.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.WorkflowServices.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xaml.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Linq.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Serialization.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClient.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClientsideProviders.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationProvider.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationTypes.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsBase.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsFormsIntegration.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/XamlBuildTask.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/mscorlib.dll | -| [...]/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/sysglobl.dll | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/CustomMarshalers.dll:0:0:0:0 | CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.dll:0:0:0:0 | System.Collections, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Console.dll:0:0:0:0 | System.Console, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.dll:0:0:0:0 | System.IO, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.dll:0:0:0:0 | System.Linq, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Http.Rtc.dll:0:0:0:0 | System.Net.Http.Rtc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.WindowsRuntime.dll:0:0:0:0 | System.Runtime.InteropServices.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Duplex.dll:0:0:0:0 | System.ServiceModel.Duplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Http.dll:0:0:0:0 | System.ServiceModel.Http, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.NetTcp.dll:0:0:0:0 | System.ServiceModel.NetTcp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Primitives.dll:0:0:0:0 | System.ServiceModel.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Security.dll:0:0:0:0 | System.ServiceModel.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=4.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.dll:0:0:0:0 | System.Threading, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/netstandard.dll:0:0:0:0 | netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ISymWrapper.dll:0:0:0:0 | ISymWrapper, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Activities.Build.dll:0:0:0:0 | Microsoft.Activities.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.dll:0:0:0:0 | Microsoft.Build.Conversion.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Engine.dll:0:0:0:0 | Microsoft.Build.Engine, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Framework.dll:0:0:0:0 | Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.dll:0:0:0:0 | Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.dll:0:0:0:0 | Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.dll:0:0:0:0 | Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.JScript.dll:0:0:0:0 | Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.dll:0:0:0:0 | Microsoft.VisualBasic.Compatibility.Data, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.dll:0:0:0:0 | Microsoft.VisualBasic.Compatibility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.dll:0:0:0:0 | Microsoft.VisualC.STLCLR, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.dll:0:0:0:0 | Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationBuildTasks.dll:0:0:0:0 | PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Core.Presentation.dll:0:0:0:0 | System.Activities.Core.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.DurableInstancing.dll:0:0:0:0 | System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Presentation.dll:0:0:0:0 | System.Activities.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.dll:0:0:0:0 | System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.Contract.dll:0:0:0:0 | System.AddIn.Contract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.dll:0:0:0:0 | System.AddIn, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.dll:0:0:0:0 | System.ComponentModel.Composition.Registration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.dll:0:0:0:0 | System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.Install.dll:0:0:0:0 | System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.Design.dll:0:0:0:0 | System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.dll:0:0:0:0 | System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Linq.dll:0:0:0:0 | System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.OracleClient.dll:0:0:0:0 | System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Client.dll:0:0:0:0 | System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Design.dll:0:0:0:0 | System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.dll:0:0:0:0 | System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.SqlXml.dll:0:0:0:0 | System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Deployment.dll:0:0:0:0 | System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Design.dll:0:0:0:0 | System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Device.dll:0:0:0:0 | System.Device, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.dll:0:0:0:0 | System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.Protocols.dll:0:0:0:0 | System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Dynamic.dll:0:0:0:0 | System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.EnterpriseServices.dll:0:0:0:0 | System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Log.dll:0:0:0:0 | System.IO.Log, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Selectors.dll:0:0:0:0 | System.IdentityModel.Selectors, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Services.dll:0:0:0:0 | System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.dll:0:0:0:0 | System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.Instrumentation.dll:0:0:0:0 | System.Management.Instrumentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.dll:0:0:0:0 | System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Messaging.dll:0:0:0:0 | System.Messaging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.WebRequest.dll:0:0:0:0 | System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Printing.dll:0:0:0:0 | System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Reflection.Context.dll:0:0:0:0 | System.Reflection.Context, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Caching.dll:0:0:0:0 | System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.DurableInstancing.dll:0:0:0:0 | System.Runtime.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Remoting.dll:0:0:0:0 | System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.dll:0:0:0:0 | System.Runtime.Serialization.Formatters.Soap, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activation.dll:0:0:0:0 | System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activities.dll:0:0:0:0 | System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Channels.dll:0:0:0:0 | System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Discovery.dll:0:0:0:0 | System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Routing.dll:0:0:0:0 | System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.dll:0:0:0:0 | System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Speech.dll:0:0:0:0 | System.Speech, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Abstractions.dll:0:0:0:0 | System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.ApplicationServices.dll:0:0:0:0 | System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.Design.dll:0:0:0:0 | System.Web.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.dll:0:0:0:0 | System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.Design.dll:0:0:0:0 | System.Web.DynamicData.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.dll:0:0:0:0 | System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.Design.dll:0:0:0:0 | System.Web.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.dll:0:0:0:0 | System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.Design.dll:0:0:0:0 | System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.dll:0:0:0:0 | System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Mobile.dll:0:0:0:0 | System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.RegularExpressions.dll:0:0:0:0 | System.Web.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Routing.dll:0:0:0:0 | System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Services.dll:0:0:0:0 | System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.Design.dll:0:0:0:0 | System.Windows.Forms.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.dll:0:0:0:0 | System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Activities.dll:0:0:0:0 | System.Workflow.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.ComponentModel.dll:0:0:0:0 | System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Runtime.dll:0:0:0:0 | System.Workflow.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.WorkflowServices.dll:0:0:0:0 | System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClientsideProviders.dll:0:0:0:0 | UIAutomationClientsideProviders, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/XamlBuildTask.dll:0:0:0:0 | XamlBuildTask, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/sysglobl.dll:0:0:0:0 | sysglobl, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql index b78ceee2d8f..931e64d87ba 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql @@ -1,17 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected index 058ec9e2f35..8b1e8810a07 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected @@ -1,47 +1,47 @@ -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Accessibility.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Forms.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.SystemEvents.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationCore.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero2.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.AeroLite.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Classic.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Luna.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Royale.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationUI.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/ReachFramework.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.CodeDom.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Configuration.ConfigurationManager.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.EventLog.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.PerformanceCounter.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.DirectoryServices.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Common.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.IO.Packaging.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Printing.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Resources.Extensions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Pkcs.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.ProtectedData.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Xml.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Permissions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Threading.AccessControl.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Controls.Ribbon.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Extensions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.Editors.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Primitives.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Input.Manipulations.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Presentation.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Xaml.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClient.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClientSideProviders.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationProvider.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationTypes.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsFormsIntegration.dll | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Design.dll:0:0:0:0 | System.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql index d47b596f0af..2ab708267f2 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql @@ -1,11 +1,5 @@ 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("microsoft.windowsdesktop.app.ref") - 1, s.length()) - ) -} - from Assembly a -select getPath(a) +where exists(a.getFile().getAbsolutePath().indexOf("microsoft.windowsdesktop.app.ref")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected index 2d54c0155a4..d1602665e16 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected @@ -1,166 +1,166 @@ -| [...]/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll | -| [...]/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll | -| [...]/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll | +| test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | +| test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll:0:0:0:0 | System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll:0:0:0:0 | System.IO, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql index b78ceee2d8f..931e64d87ba 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql @@ -1,17 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected index c2742cebc57..18cbc068ace 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected @@ -1,200 +1,200 @@ -| [...]/Basic.CompilerLog.Util.dll | -| [...]/Humanizer.dll | -| [...]/MessagePack.Annotations.dll | -| [...]/MessagePack.dll | -| [...]/Microsoft.Build.Framework.dll | -| [...]/Microsoft.Build.Utilities.Core.dll | -| [...]/Microsoft.Build.dll | -| [...]/Microsoft.CSharp.dll | -| [...]/Microsoft.CodeAnalysis.CSharp.Workspaces.dll | -| [...]/Microsoft.CodeAnalysis.CSharp.dll | -| [...]/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll | -| [...]/Microsoft.CodeAnalysis.VisualBasic.dll | -| [...]/Microsoft.CodeAnalysis.Workspaces.dll | -| [...]/Microsoft.CodeAnalysis.dll | -| [...]/Microsoft.Extensions.ObjectPool.dll | -| [...]/Microsoft.NET.StringTools.dll | -| [...]/Microsoft.VisualBasic.Core.dll | -| [...]/Microsoft.VisualBasic.dll | -| [...]/Microsoft.Win32.Primitives.dll | -| [...]/Microsoft.Win32.Registry.dll | -| [...]/Microsoft.Win32.SystemEvents.dll | -| [...]/Mono.Posix.NETStandard.dll | -| [...]/Newtonsoft.Json.dll | -| [...]/StructuredLogger.dll | -| [...]/System.AppContext.dll | -| [...]/System.Buffers.dll | -| [...]/System.Collections.Concurrent.dll | -| [...]/System.Collections.Immutable.dll | -| [...]/System.Collections.NonGeneric.dll | -| [...]/System.Collections.Specialized.dll | -| [...]/System.Collections.dll | -| [...]/System.ComponentModel.Annotations.dll | -| [...]/System.ComponentModel.DataAnnotations.dll | -| [...]/System.ComponentModel.EventBasedAsync.dll | -| [...]/System.ComponentModel.Primitives.dll | -| [...]/System.ComponentModel.TypeConverter.dll | -| [...]/System.ComponentModel.dll | -| [...]/System.Composition.AttributedModel.dll | -| [...]/System.Composition.Convention.dll | -| [...]/System.Composition.Hosting.dll | -| [...]/System.Composition.Runtime.dll | -| [...]/System.Composition.TypedParts.dll | -| [...]/System.Configuration.ConfigurationManager.dll | -| [...]/System.Configuration.dll | -| [...]/System.Console.dll | -| [...]/System.Core.dll | -| [...]/System.Data.Common.dll | -| [...]/System.Data.DataSetExtensions.dll | -| [...]/System.Data.dll | -| [...]/System.Diagnostics.Contracts.dll | -| [...]/System.Diagnostics.Debug.dll | -| [...]/System.Diagnostics.DiagnosticSource.dll | -| [...]/System.Diagnostics.EventLog.dll | -| [...]/System.Diagnostics.FileVersionInfo.dll | -| [...]/System.Diagnostics.Process.dll | -| [...]/System.Diagnostics.StackTrace.dll | -| [...]/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/System.Diagnostics.Tools.dll | -| [...]/System.Diagnostics.TraceSource.dll | -| [...]/System.Diagnostics.Tracing.dll | -| [...]/System.Drawing.Common.dll | -| [...]/System.Drawing.Primitives.dll | -| [...]/System.Drawing.dll | -| [...]/System.Dynamic.Runtime.dll | -| [...]/System.Formats.Asn1.dll | -| [...]/System.Formats.Tar.dll | -| [...]/System.Globalization.Calendars.dll | -| [...]/System.Globalization.Extensions.dll | -| [...]/System.Globalization.dll | -| [...]/System.IO.Compression.Brotli.dll | -| [...]/System.IO.Compression.FileSystem.dll | -| [...]/System.IO.Compression.ZipFile.dll | -| [...]/System.IO.Compression.dll | -| [...]/System.IO.FileSystem.AccessControl.dll | -| [...]/System.IO.FileSystem.DriveInfo.dll | -| [...]/System.IO.FileSystem.Primitives.dll | -| [...]/System.IO.FileSystem.Watcher.dll | -| [...]/System.IO.FileSystem.dll | -| [...]/System.IO.IsolatedStorage.dll | -| [...]/System.IO.MemoryMappedFiles.dll | -| [...]/System.IO.Pipelines.dll | -| [...]/System.IO.Pipes.AccessControl.dll | -| [...]/System.IO.Pipes.dll | -| [...]/System.IO.UnmanagedMemoryStream.dll | -| [...]/System.IO.dll | -| [...]/System.Linq.Expressions.dll | -| [...]/System.Linq.Parallel.dll | -| [...]/System.Linq.Queryable.dll | -| [...]/System.Linq.dll | -| [...]/System.Memory.dll | -| [...]/System.Net.Http.Json.dll | -| [...]/System.Net.Http.dll | -| [...]/System.Net.HttpListener.dll | -| [...]/System.Net.Mail.dll | -| [...]/System.Net.NameResolution.dll | -| [...]/System.Net.NetworkInformation.dll | -| [...]/System.Net.Ping.dll | -| [...]/System.Net.Primitives.dll | -| [...]/System.Net.Quic.dll | -| [...]/System.Net.Requests.dll | -| [...]/System.Net.Security.dll | -| [...]/System.Net.ServicePoint.dll | -| [...]/System.Net.Sockets.dll | -| [...]/System.Net.WebClient.dll | -| [...]/System.Net.WebHeaderCollection.dll | -| [...]/System.Net.WebProxy.dll | -| [...]/System.Net.WebSockets.Client.dll | -| [...]/System.Net.WebSockets.dll | -| [...]/System.Net.dll | -| [...]/System.Numerics.Vectors.dll | -| [...]/System.Numerics.dll | -| [...]/System.ObjectModel.dll | -| [...]/System.Private.CoreLib.dll | -| [...]/System.Private.DataContractSerialization.dll | -| [...]/System.Private.Uri.dll | -| [...]/System.Private.Xml.Linq.dll | -| [...]/System.Private.Xml.dll | -| [...]/System.Reflection.DispatchProxy.dll | -| [...]/System.Reflection.Emit.ILGeneration.dll | -| [...]/System.Reflection.Emit.Lightweight.dll | -| [...]/System.Reflection.Emit.dll | -| [...]/System.Reflection.Extensions.dll | -| [...]/System.Reflection.Metadata.dll | -| [...]/System.Reflection.MetadataLoadContext.dll | -| [...]/System.Reflection.Primitives.dll | -| [...]/System.Reflection.TypeExtensions.dll | -| [...]/System.Reflection.dll | -| [...]/System.Resources.Reader.dll | -| [...]/System.Resources.ResourceManager.dll | -| [...]/System.Resources.Writer.dll | -| [...]/System.Runtime.CompilerServices.Unsafe.dll | -| [...]/System.Runtime.CompilerServices.VisualC.dll | -| [...]/System.Runtime.Extensions.dll | -| [...]/System.Runtime.Handles.dll | -| [...]/System.Runtime.InteropServices.JavaScript.dll | -| [...]/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/System.Runtime.InteropServices.dll | -| [...]/System.Runtime.Intrinsics.dll | -| [...]/System.Runtime.Loader.dll | -| [...]/System.Runtime.Numerics.dll | -| [...]/System.Runtime.Serialization.Formatters.dll | -| [...]/System.Runtime.Serialization.Json.dll | -| [...]/System.Runtime.Serialization.Primitives.dll | -| [...]/System.Runtime.Serialization.Xml.dll | -| [...]/System.Runtime.Serialization.dll | -| [...]/System.Runtime.dll | -| [...]/System.Security.AccessControl.dll | -| [...]/System.Security.Claims.dll | -| [...]/System.Security.Cryptography.Algorithms.dll | -| [...]/System.Security.Cryptography.Cng.dll | -| [...]/System.Security.Cryptography.Csp.dll | -| [...]/System.Security.Cryptography.Encoding.dll | -| [...]/System.Security.Cryptography.OpenSsl.dll | -| [...]/System.Security.Cryptography.Primitives.dll | -| [...]/System.Security.Cryptography.ProtectedData.dll | -| [...]/System.Security.Cryptography.X509Certificates.dll | -| [...]/System.Security.Cryptography.dll | -| [...]/System.Security.Permissions.dll | -| [...]/System.Security.Principal.Windows.dll | -| [...]/System.Security.Principal.dll | -| [...]/System.Security.SecureString.dll | -| [...]/System.Security.dll | -| [...]/System.ServiceModel.Web.dll | -| [...]/System.ServiceProcess.dll | -| [...]/System.Text.Encoding.CodePages.dll | -| [...]/System.Text.Encoding.Extensions.dll | -| [...]/System.Text.Encoding.dll | -| [...]/System.Text.Encodings.Web.dll | -| [...]/System.Text.Json.dll | -| [...]/System.Text.RegularExpressions.dll | -| [...]/System.Threading.Channels.dll | -| [...]/System.Threading.Overlapped.dll | -| [...]/System.Threading.Tasks.Dataflow.dll | -| [...]/System.Threading.Tasks.Extensions.dll | -| [...]/System.Threading.Tasks.Parallel.dll | -| [...]/System.Threading.Tasks.dll | -| [...]/System.Threading.Thread.dll | -| [...]/System.Threading.ThreadPool.dll | -| [...]/System.Threading.Timer.dll | -| [...]/System.Threading.dll | -| [...]/System.Transactions.Local.dll | -| [...]/System.Transactions.dll | -| [...]/System.ValueTuple.dll | -| [...]/System.Web.HttpUtility.dll | -| [...]/System.Web.dll | -| [...]/System.Windows.Extensions.dll | -| [...]/System.Windows.dll | -| [...]/System.Xml.Linq.dll | -| [...]/System.Xml.ReaderWriter.dll | -| [...]/System.Xml.Serialization.dll | -| [...]/System.Xml.XDocument.dll | -| [...]/System.Xml.XPath.XDocument.dll | -| [...]/System.Xml.XPath.dll | -| [...]/System.Xml.XmlDocument.dll | -| [...]/System.Xml.XmlSerializer.dll | -| [...]/System.Xml.dll | -| [...]/System.dll | -| [...]/WindowsBase.dll | -| [...]/mscorlib.dll | -| [...]/netstandard.dll | +| [...]/csharp/tools/[...]/Basic.CompilerLog.Util.dll | +| [...]/csharp/tools/[...]/Humanizer.dll | +| [...]/csharp/tools/[...]/MessagePack.Annotations.dll | +| [...]/csharp/tools/[...]/MessagePack.dll | +| [...]/csharp/tools/[...]/Microsoft.Build.Framework.dll | +| [...]/csharp/tools/[...]/Microsoft.Build.Utilities.Core.dll | +| [...]/csharp/tools/[...]/Microsoft.Build.dll | +| [...]/csharp/tools/[...]/Microsoft.CSharp.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.CSharp.Workspaces.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.CSharp.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.VisualBasic.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.Workspaces.dll | +| [...]/csharp/tools/[...]/Microsoft.CodeAnalysis.dll | +| [...]/csharp/tools/[...]/Microsoft.Extensions.ObjectPool.dll | +| [...]/csharp/tools/[...]/Microsoft.NET.StringTools.dll | +| [...]/csharp/tools/[...]/Microsoft.VisualBasic.Core.dll | +| [...]/csharp/tools/[...]/Microsoft.VisualBasic.dll | +| [...]/csharp/tools/[...]/Microsoft.Win32.Primitives.dll | +| [...]/csharp/tools/[...]/Microsoft.Win32.Registry.dll | +| [...]/csharp/tools/[...]/Microsoft.Win32.SystemEvents.dll | +| [...]/csharp/tools/[...]/Mono.Posix.NETStandard.dll | +| [...]/csharp/tools/[...]/Newtonsoft.Json.dll | +| [...]/csharp/tools/[...]/StructuredLogger.dll | +| [...]/csharp/tools/[...]/System.AppContext.dll | +| [...]/csharp/tools/[...]/System.Buffers.dll | +| [...]/csharp/tools/[...]/System.Collections.Concurrent.dll | +| [...]/csharp/tools/[...]/System.Collections.Immutable.dll | +| [...]/csharp/tools/[...]/System.Collections.NonGeneric.dll | +| [...]/csharp/tools/[...]/System.Collections.Specialized.dll | +| [...]/csharp/tools/[...]/System.Collections.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.Annotations.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.DataAnnotations.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.EventBasedAsync.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.Primitives.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.TypeConverter.dll | +| [...]/csharp/tools/[...]/System.ComponentModel.dll | +| [...]/csharp/tools/[...]/System.Composition.AttributedModel.dll | +| [...]/csharp/tools/[...]/System.Composition.Convention.dll | +| [...]/csharp/tools/[...]/System.Composition.Hosting.dll | +| [...]/csharp/tools/[...]/System.Composition.Runtime.dll | +| [...]/csharp/tools/[...]/System.Composition.TypedParts.dll | +| [...]/csharp/tools/[...]/System.Configuration.ConfigurationManager.dll | +| [...]/csharp/tools/[...]/System.Configuration.dll | +| [...]/csharp/tools/[...]/System.Console.dll | +| [...]/csharp/tools/[...]/System.Core.dll | +| [...]/csharp/tools/[...]/System.Data.Common.dll | +| [...]/csharp/tools/[...]/System.Data.DataSetExtensions.dll | +| [...]/csharp/tools/[...]/System.Data.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.Contracts.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.Debug.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.DiagnosticSource.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.EventLog.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.FileVersionInfo.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.Process.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.StackTrace.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.TextWriterTraceListener.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.Tools.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.TraceSource.dll | +| [...]/csharp/tools/[...]/System.Diagnostics.Tracing.dll | +| [...]/csharp/tools/[...]/System.Drawing.Common.dll | +| [...]/csharp/tools/[...]/System.Drawing.Primitives.dll | +| [...]/csharp/tools/[...]/System.Drawing.dll | +| [...]/csharp/tools/[...]/System.Dynamic.Runtime.dll | +| [...]/csharp/tools/[...]/System.Formats.Asn1.dll | +| [...]/csharp/tools/[...]/System.Formats.Tar.dll | +| [...]/csharp/tools/[...]/System.Globalization.Calendars.dll | +| [...]/csharp/tools/[...]/System.Globalization.Extensions.dll | +| [...]/csharp/tools/[...]/System.Globalization.dll | +| [...]/csharp/tools/[...]/System.IO.Compression.Brotli.dll | +| [...]/csharp/tools/[...]/System.IO.Compression.FileSystem.dll | +| [...]/csharp/tools/[...]/System.IO.Compression.ZipFile.dll | +| [...]/csharp/tools/[...]/System.IO.Compression.dll | +| [...]/csharp/tools/[...]/System.IO.FileSystem.AccessControl.dll | +| [...]/csharp/tools/[...]/System.IO.FileSystem.DriveInfo.dll | +| [...]/csharp/tools/[...]/System.IO.FileSystem.Primitives.dll | +| [...]/csharp/tools/[...]/System.IO.FileSystem.Watcher.dll | +| [...]/csharp/tools/[...]/System.IO.FileSystem.dll | +| [...]/csharp/tools/[...]/System.IO.IsolatedStorage.dll | +| [...]/csharp/tools/[...]/System.IO.MemoryMappedFiles.dll | +| [...]/csharp/tools/[...]/System.IO.Pipelines.dll | +| [...]/csharp/tools/[...]/System.IO.Pipes.AccessControl.dll | +| [...]/csharp/tools/[...]/System.IO.Pipes.dll | +| [...]/csharp/tools/[...]/System.IO.UnmanagedMemoryStream.dll | +| [...]/csharp/tools/[...]/System.IO.dll | +| [...]/csharp/tools/[...]/System.Linq.Expressions.dll | +| [...]/csharp/tools/[...]/System.Linq.Parallel.dll | +| [...]/csharp/tools/[...]/System.Linq.Queryable.dll | +| [...]/csharp/tools/[...]/System.Linq.dll | +| [...]/csharp/tools/[...]/System.Memory.dll | +| [...]/csharp/tools/[...]/System.Net.Http.Json.dll | +| [...]/csharp/tools/[...]/System.Net.Http.dll | +| [...]/csharp/tools/[...]/System.Net.HttpListener.dll | +| [...]/csharp/tools/[...]/System.Net.Mail.dll | +| [...]/csharp/tools/[...]/System.Net.NameResolution.dll | +| [...]/csharp/tools/[...]/System.Net.NetworkInformation.dll | +| [...]/csharp/tools/[...]/System.Net.Ping.dll | +| [...]/csharp/tools/[...]/System.Net.Primitives.dll | +| [...]/csharp/tools/[...]/System.Net.Quic.dll | +| [...]/csharp/tools/[...]/System.Net.Requests.dll | +| [...]/csharp/tools/[...]/System.Net.Security.dll | +| [...]/csharp/tools/[...]/System.Net.ServicePoint.dll | +| [...]/csharp/tools/[...]/System.Net.Sockets.dll | +| [...]/csharp/tools/[...]/System.Net.WebClient.dll | +| [...]/csharp/tools/[...]/System.Net.WebHeaderCollection.dll | +| [...]/csharp/tools/[...]/System.Net.WebProxy.dll | +| [...]/csharp/tools/[...]/System.Net.WebSockets.Client.dll | +| [...]/csharp/tools/[...]/System.Net.WebSockets.dll | +| [...]/csharp/tools/[...]/System.Net.dll | +| [...]/csharp/tools/[...]/System.Numerics.Vectors.dll | +| [...]/csharp/tools/[...]/System.Numerics.dll | +| [...]/csharp/tools/[...]/System.ObjectModel.dll | +| [...]/csharp/tools/[...]/System.Private.CoreLib.dll | +| [...]/csharp/tools/[...]/System.Private.DataContractSerialization.dll | +| [...]/csharp/tools/[...]/System.Private.Uri.dll | +| [...]/csharp/tools/[...]/System.Private.Xml.Linq.dll | +| [...]/csharp/tools/[...]/System.Private.Xml.dll | +| [...]/csharp/tools/[...]/System.Reflection.DispatchProxy.dll | +| [...]/csharp/tools/[...]/System.Reflection.Emit.ILGeneration.dll | +| [...]/csharp/tools/[...]/System.Reflection.Emit.Lightweight.dll | +| [...]/csharp/tools/[...]/System.Reflection.Emit.dll | +| [...]/csharp/tools/[...]/System.Reflection.Extensions.dll | +| [...]/csharp/tools/[...]/System.Reflection.Metadata.dll | +| [...]/csharp/tools/[...]/System.Reflection.MetadataLoadContext.dll | +| [...]/csharp/tools/[...]/System.Reflection.Primitives.dll | +| [...]/csharp/tools/[...]/System.Reflection.TypeExtensions.dll | +| [...]/csharp/tools/[...]/System.Reflection.dll | +| [...]/csharp/tools/[...]/System.Resources.Reader.dll | +| [...]/csharp/tools/[...]/System.Resources.ResourceManager.dll | +| [...]/csharp/tools/[...]/System.Resources.Writer.dll | +| [...]/csharp/tools/[...]/System.Runtime.CompilerServices.Unsafe.dll | +| [...]/csharp/tools/[...]/System.Runtime.CompilerServices.VisualC.dll | +| [...]/csharp/tools/[...]/System.Runtime.Extensions.dll | +| [...]/csharp/tools/[...]/System.Runtime.Handles.dll | +| [...]/csharp/tools/[...]/System.Runtime.InteropServices.JavaScript.dll | +| [...]/csharp/tools/[...]/System.Runtime.InteropServices.RuntimeInformation.dll | +| [...]/csharp/tools/[...]/System.Runtime.InteropServices.dll | +| [...]/csharp/tools/[...]/System.Runtime.Intrinsics.dll | +| [...]/csharp/tools/[...]/System.Runtime.Loader.dll | +| [...]/csharp/tools/[...]/System.Runtime.Numerics.dll | +| [...]/csharp/tools/[...]/System.Runtime.Serialization.Formatters.dll | +| [...]/csharp/tools/[...]/System.Runtime.Serialization.Json.dll | +| [...]/csharp/tools/[...]/System.Runtime.Serialization.Primitives.dll | +| [...]/csharp/tools/[...]/System.Runtime.Serialization.Xml.dll | +| [...]/csharp/tools/[...]/System.Runtime.Serialization.dll | +| [...]/csharp/tools/[...]/System.Runtime.dll | +| [...]/csharp/tools/[...]/System.Security.AccessControl.dll | +| [...]/csharp/tools/[...]/System.Security.Claims.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.Algorithms.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.Cng.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.Csp.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.Encoding.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.OpenSsl.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.Primitives.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.ProtectedData.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.X509Certificates.dll | +| [...]/csharp/tools/[...]/System.Security.Cryptography.dll | +| [...]/csharp/tools/[...]/System.Security.Permissions.dll | +| [...]/csharp/tools/[...]/System.Security.Principal.Windows.dll | +| [...]/csharp/tools/[...]/System.Security.Principal.dll | +| [...]/csharp/tools/[...]/System.Security.SecureString.dll | +| [...]/csharp/tools/[...]/System.Security.dll | +| [...]/csharp/tools/[...]/System.ServiceModel.Web.dll | +| [...]/csharp/tools/[...]/System.ServiceProcess.dll | +| [...]/csharp/tools/[...]/System.Text.Encoding.CodePages.dll | +| [...]/csharp/tools/[...]/System.Text.Encoding.Extensions.dll | +| [...]/csharp/tools/[...]/System.Text.Encoding.dll | +| [...]/csharp/tools/[...]/System.Text.Encodings.Web.dll | +| [...]/csharp/tools/[...]/System.Text.Json.dll | +| [...]/csharp/tools/[...]/System.Text.RegularExpressions.dll | +| [...]/csharp/tools/[...]/System.Threading.Channels.dll | +| [...]/csharp/tools/[...]/System.Threading.Overlapped.dll | +| [...]/csharp/tools/[...]/System.Threading.Tasks.Dataflow.dll | +| [...]/csharp/tools/[...]/System.Threading.Tasks.Extensions.dll | +| [...]/csharp/tools/[...]/System.Threading.Tasks.Parallel.dll | +| [...]/csharp/tools/[...]/System.Threading.Tasks.dll | +| [...]/csharp/tools/[...]/System.Threading.Thread.dll | +| [...]/csharp/tools/[...]/System.Threading.ThreadPool.dll | +| [...]/csharp/tools/[...]/System.Threading.Timer.dll | +| [...]/csharp/tools/[...]/System.Threading.dll | +| [...]/csharp/tools/[...]/System.Transactions.Local.dll | +| [...]/csharp/tools/[...]/System.Transactions.dll | +| [...]/csharp/tools/[...]/System.ValueTuple.dll | +| [...]/csharp/tools/[...]/System.Web.HttpUtility.dll | +| [...]/csharp/tools/[...]/System.Web.dll | +| [...]/csharp/tools/[...]/System.Windows.Extensions.dll | +| [...]/csharp/tools/[...]/System.Windows.dll | +| [...]/csharp/tools/[...]/System.Xml.Linq.dll | +| [...]/csharp/tools/[...]/System.Xml.ReaderWriter.dll | +| [...]/csharp/tools/[...]/System.Xml.Serialization.dll | +| [...]/csharp/tools/[...]/System.Xml.XDocument.dll | +| [...]/csharp/tools/[...]/System.Xml.XPath.XDocument.dll | +| [...]/csharp/tools/[...]/System.Xml.XPath.dll | +| [...]/csharp/tools/[...]/System.Xml.XmlDocument.dll | +| [...]/csharp/tools/[...]/System.Xml.XmlSerializer.dll | +| [...]/csharp/tools/[...]/System.Xml.dll | +| [...]/csharp/tools/[...]/System.dll | +| [...]/csharp/tools/[...]/WindowsBase.dll | +| [...]/csharp/tools/[...]/mscorlib.dll | +| [...]/csharp/tools/[...]/netstandard.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql index 3bb648c579a..b5634fb7b96 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql @@ -3,13 +3,8 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or exists(string sub | sub = "csharp/tools/" + ["osx64", "linux64"] | - result = "[...]" + s.substring(s.indexOf(sub) + sub.length(), s.length()) + result = "[...]/csharp/tools/[...]" + s.substring(s.indexOf(sub) + sub.length(), s.length()) ) or result = s and diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected index 2d54c0155a4..d1602665e16 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected @@ -1,166 +1,166 @@ -| [...]/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll | -| [...]/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll | -| [...]/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll | +| test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | +| test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll:0:0:0:0 | System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll:0:0:0:0 | System.IO, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql index b78ceee2d8f..931e64d87ba 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql @@ -1,17 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected index c48fe98ac96..74544f88e71 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected @@ -1,163 +1,163 @@ -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll:0:0:0:0 | System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll:0:0:0:0 | System.IO, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql index b78ceee2d8f..931e64d87ba 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql @@ -1,17 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected index ec1192ed029..0934f8063db 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected @@ -1 +1 @@ -| [...]/packages/newtonsoft.json/6.0.4/lib/net45/Newtonsoft.Json.dll | +| test-db/working/packages/newtonsoft.json/6.0.4/lib/net45/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql index e542b688455..931e64d87ba 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql @@ -1,16 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16, s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected index bf3b256b71f..81c60c5c30a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected @@ -1 +1 @@ -| [...]/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | +| test-db/working/legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql index 24308907aa3..d3e30baf5fb 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql @@ -1,15 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/legacypackages".length(), s.length()) - // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners. - ) -} - from Assembly a -select getPath(a) +where exists(a.getFile().getAbsolutePath().indexOf("/legacypackages/")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected index bf3b256b71f..81c60c5c30a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected @@ -1 +1 @@ -| [...]/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | +| test-db/working/legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql index 24308907aa3..d3e30baf5fb 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql @@ -1,15 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/legacypackages".length(), s.length()) - // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners. - ) -} - from Assembly a -select getPath(a) +where exists(a.getFile().getAbsolutePath().indexOf("/legacypackages/")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected index 2a530060edb..4b2df5c2e32 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected @@ -1 +1 @@ -| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll | +| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql index 79cf92de791..0eb33b7ae37 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql @@ -1,11 +1,5 @@ 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) +where exists(a.getFile().getAbsolutePath().indexOf("newtonsoft.json")) +select a 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 index 2a530060edb..4b2df5c2e32 100644 --- 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 @@ -1 +1 @@ -| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll | +| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | 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 index 79cf92de791..0eb33b7ae37 100644 --- 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 @@ -1,11 +1,5 @@ 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) +where exists(a.getFile().getAbsolutePath().indexOf("newtonsoft.json")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected index 2a530060edb..4b2df5c2e32 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected @@ -1 +1 @@ -| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll | +| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql index 79cf92de791..0eb33b7ae37 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql @@ -1,11 +1,5 @@ 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) +where exists(a.getFile().getAbsolutePath().indexOf("newtonsoft.json")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected index bf3b256b71f..81c60c5c30a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected @@ -1 +1 @@ -| [...]/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | +| test-db/working/legacypackages/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql index 24308907aa3..d3e30baf5fb 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql @@ -1,15 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/legacypackages".length(), s.length()) - // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners. - ) -} - from Assembly a -select getPath(a) +where exists(a.getFile().getAbsolutePath().indexOf("/legacypackages/")) +select a diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected index 987ec7c8d44..10fa6873383 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected @@ -1 +1 @@ -| [...]/newtonsoft.json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll | +| test-db/working/packages/newtonsoft.json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql index cf7f8ef50fe..0eb33b7ae37 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql @@ -1,18 +1,5 @@ import csharp -private string getPath(Assembly a) { - not a.getCompilation().getOutputAssembly() = a and - exists(string s | s = a.getFile().getAbsolutePath() | - exists(result.indexOf("Newtonsoft.Json")) and - result = - "[...]" + - s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where exists(a.getFile().getAbsolutePath().indexOf("newtonsoft.json")) +select a diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected index bddfcec4690..d4d36b1d0e6 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected @@ -1,210 +1,210 @@ -| [...]/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll | -| [...]/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll | -| [...]/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Accessibility.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Forms.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.SystemEvents.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationCore.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero2.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.AeroLite.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Classic.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Luna.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Royale.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationUI.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/ReachFramework.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.CodeDom.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Configuration.ConfigurationManager.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.EventLog.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.PerformanceCounter.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.DirectoryServices.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Common.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.IO.Packaging.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Printing.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Resources.Extensions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Pkcs.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.ProtectedData.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Xml.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Permissions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Threading.AccessControl.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Controls.Ribbon.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Extensions.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.Editors.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Primitives.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Input.Manipulations.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Presentation.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Xaml.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClient.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClientSideProviders.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationProvider.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationTypes.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | -| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsFormsIntegration.dll | -| [...]/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll | +| test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | +| test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Console.dll:0:0:0:0 | System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.IO.dll:0:0:0:0 | System.IO, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/8.0.1/ref/net8.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Design.dll:0:0:0:0 | System.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql index b78ceee2d8f..931e64d87ba 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql @@ -1,17 +1,5 @@ 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("test-db/working/") + "test-db/working/".length() + 16 + - "/packages".length(), s.length()) - or - result = s and - not exists(s.indexOf("test-db/working/")) - ) -} - from Assembly a -select getPath(a) +where not a.getCompilation().getOutputAssembly() = a +select a From 0037ad406d406b185e6e9c083a3551bb2eeeb769 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 12:13:49 +0200 Subject: [PATCH 067/334] C#: Adjust buildless source generator folders --- .../DotnetSourceGeneratorBase.cs | 2 +- .../DotnetSourceGeneratorWrapper.cs | 5 +++-- .../cshtml_standalone/Files.expected | 2 +- .../all-platforms/cshtml_standalone/Files.ql | 10 +++++++--- .../cshtml_standalone_disabled/Files.expected | 4 ++-- .../cshtml_standalone_disabled/Files.ql | 17 +---------------- .../cshtml_standalone_net6/Files.expected | 2 +- .../cshtml_standalone_net6/Files.ql | 10 +++++++--- .../standalone_resx/Files.expected | 6 +++--- .../all-platforms/standalone_resx/Files.ql | 19 +------------------ 10 files changed, 27 insertions(+), 50 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorBase.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorBase.cs index 461590348df..c17981803dd 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorBase.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorBase.cs @@ -83,7 +83,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var targetDir = GetTemporaryWorkingDirectory(FileType.ToLowerInvariant()); return groupedFiles - .SelectMany(group => sourceGenerator.RunSourceGenerator(group.Value, group.Key, references, targetDir)); + .SelectMany(group => sourceGenerator.RunSourceGenerator(group.Value, group.Key, references, targetDir, fileProvider.SourceDir.FullName)); } catch (Exception ex) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs index 1110f768a74..fe402637347 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs @@ -33,11 +33,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching protected abstract void GenerateAnalyzerConfig(IEnumerable additionalFiles, string csprojFile, string analyzerConfigPath); - public IEnumerable RunSourceGenerator(IEnumerable additionalFiles, string csprojFile, IEnumerable references, string targetDir) + public IEnumerable RunSourceGenerator(IEnumerable additionalFiles, string csprojFile, IEnumerable references, string targetDir, string sourceDir) { try { - var name = FileUtils.ComputeHash($"{csprojFile}{Environment.NewLine}{this.GetType().Name}"); + var relativePathToCsProj = Path.GetRelativePath(sourceDir, csprojFile); + var name = FileUtils.ComputeHash($"{relativePathToCsProj}{Environment.NewLine}{this.GetType().Name}"); using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger); var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt"); var dllPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.dll"); diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected index 5d52ff6223d..f64a66be22f 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected @@ -1,4 +1,4 @@ | Program.cs | | Views/Home/Index.cshtml | -| _ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_test_test_Views_Home_Index_cshtml.g.cs | | test-db/working/implicitUsings/GlobalUsings.g.cs | +| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_test_test_Views_Home_Index_cshtml.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.ql b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.ql index 70a62a55481..2ab3af8e13e 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.ql +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.ql @@ -4,11 +4,15 @@ private string getPath(File f) { result = f.getRelativePath() and not exists(result.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_")) or - exists(int index | - index = + exists(int index1, int index2, string pattern | + pattern = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and + index1 = f.getRelativePath().indexOf(pattern) and + index2 = f.getRelativePath() .indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and - result = f.getRelativePath().substring(index, f.getRelativePath().length()) + result = + f.getRelativePath().substring(0, index1 + pattern.length()) + "/[...]" + + f.getRelativePath().substring(index2, f.getRelativePath().length()) ) } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.expected index f6d6d6ed8c8..50089b3c59c 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.expected @@ -1,2 +1,2 @@ -| Program.cs | -| test-db/working/implicitUsings/GlobalUsings.g.cs | +| Program.cs:0:0:0:0 | Program.cs | +| test-db/working/implicitUsings/GlobalUsings.g.cs:0:0:0:0 | test-db/working/implicitUsings/GlobalUsings.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.ql b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.ql index 2d983b86b7c..3933d037ed5 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.ql +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/Files.ql @@ -1,20 +1,5 @@ import csharp -private string getPath(File f) { - result = f.getRelativePath() and - not exists( - result - .indexOf("_semmle_code_target_codeql_csharp_integration_tests_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") - ) - or - exists(int index | - index = - f.getRelativePath() - .indexOf("_semmle_code_target_codeql_csharp_integration_tests_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and - result = f.getRelativePath().substring(index, f.getRelativePath().length()) - ) -} - from File f where f.fromSource() or f.getExtension() = "cshtml" -select getPath(f) +select f diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected index 3a66f337cff..4b1c2d02005 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected @@ -1,4 +1,4 @@ | Program.cs | | Views/Home/Index.cshtml | -| _ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_net6_test_test_Views_Home_Index_cshtml.g.cs | | test-db/working/implicitUsings/GlobalUsings.g.cs | +| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_net6_test_test_Views_Home_Index_cshtml.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql index 70a62a55481..2ab3af8e13e 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql @@ -4,11 +4,15 @@ private string getPath(File f) { result = f.getRelativePath() and not exists(result.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_")) or - exists(int index | - index = + exists(int index1, int index2, string pattern | + pattern = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and + index1 = f.getRelativePath().indexOf(pattern) and + index2 = f.getRelativePath() .indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and - result = f.getRelativePath().substring(index, f.getRelativePath().length()) + result = + f.getRelativePath().substring(0, index1 + pattern.length()) + "/[...]" + + f.getRelativePath().substring(index2, f.getRelativePath().length()) ) } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.expected b/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.expected index b2e8dfbb203..46a25f52fa6 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.expected @@ -1,3 +1,3 @@ -| Program.cs | -| test-db/working/implicitUsings/GlobalUsings.g.cs | -| test-db/working/resx/[...]/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp.CSharpResxGenerator/test.Designer.cs | +| Program.cs:0:0:0:0 | Program.cs | +| test-db/working/implicitUsings/GlobalUsings.g.cs:0:0:0:0 | test-db/working/implicitUsings/GlobalUsings.g.cs | +| test-db/working/resx/F4FAF6D9E0C1522913E76D38E8CF4F3F/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp.CSharpResxGenerator/test.Designer.cs:0:0:0:0 | test-db/working/resx/F4FAF6D9E0C1522913E76D38E8CF4F3F/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp.CSharpResxGenerator/test.Designer.cs | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.ql b/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.ql index f2eabef15f8..bea5557a25f 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/Files.ql @@ -1,22 +1,5 @@ import csharp -private string getPath(File f) { - result = f.getRelativePath() and - not exists( - result - .indexOf("Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp.CSharpResxGenerator") - ) - or - exists(int index | - index = - f.getRelativePath() - .indexOf("Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp/Microsoft.CodeAnalysis.ResxSourceGenerator.CSharp.CSharpResxGenerator") and - result = - f.getRelativePath().substring(0, index - 32 - 2) + "/[...]/" + - f.getRelativePath().substring(index, f.getRelativePath().length()) - ) -} - from File f where f.fromSource() -select getPath(f) +select f From a0dc20caeff80315cf854aa40bc0badde4e56f69 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 14:03:34 +0200 Subject: [PATCH 068/334] Fix hashed value on Windows --- .../DotnetSourceGeneratorWrapper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs index fe402637347..2feafb8323b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs @@ -38,7 +38,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching try { var relativePathToCsProj = Path.GetRelativePath(sourceDir, csprojFile); - var name = FileUtils.ComputeHash($"{relativePathToCsProj}{Environment.NewLine}{this.GetType().Name}"); + var name = FileUtils.ComputeHash($"{relativePathToCsProj}\n{this.GetType().Name}"); using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger); var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt"); var dllPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.dll"); From 07a5c203092ddecced3fa688c58e3fa401a5b01c Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 14:35:31 +0200 Subject: [PATCH 069/334] Fix/add doc comments --- .../NugetPackageRestorer.cs | 7 ++++--- csharp/extractor/Semmle.Util/FileUtils.cs | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs index 9ce61b633ba..3895db3e4d4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs @@ -771,15 +771,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } /// - /// Computes a unique temp directory for the packages associated - /// with this source tree. Use a SHA1 of the directory name. + /// Returns the full path to a temporary directory with the given subfolder name. /// - /// The full path of the temp directory. private static string ComputeTempDirectoryPath(string subfolderName) { return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), subfolderName); } + /// + /// Computes a unique temporary directory path based on the source directory and the subfolder name. + /// private static string ComputeTempDirectoryPath(string srcDir, string subfolderName) { return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out _), FileUtils.ComputeHash(srcDir), subfolderName); diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index d5930251fae..0b63082ce6d 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -86,7 +86,7 @@ namespace Semmle.Util } /// - /// Computes the hash of . + /// Computes the hash of the file at . /// public static string ComputeFileHash(string filePath) { @@ -95,6 +95,9 @@ namespace Semmle.Util return GetHashString(sha); } + /// + /// Computes the hash of . + /// public static string ComputeHash(string input) { var bytes = Encoding.Unicode.GetBytes(input); From 30f8d6e4ff50dd903eb6f483e479b9260ca833d1 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 20 Aug 2024 14:04:23 +0100 Subject: [PATCH 070/334] Allow MaD models for XSS sinks using "html-injection" or "js-injection" --- go/ql/lib/semmle/go/security/Xss.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/ql/lib/semmle/go/security/Xss.qll b/go/ql/lib/semmle/go/security/Xss.qll index 3c76ffbeea2..f11dc12bf76 100644 --- a/go/ql/lib/semmle/go/security/Xss.qll +++ b/go/ql/lib/semmle/go/security/Xss.qll @@ -49,6 +49,10 @@ module SharedXss { override Locatable getAssociatedLoc() { result = this.getRead().getEnclosingTextNode() } } + private class DefaultSink extends Sink { + DefaultSink() { sinkNode(this, ["html-injection", "js-injection"]) } + } + /** * Holds if `body` may send a response with a content type other than HTML. */ From 6d4f3bd0147bbc678539fb4af9712d46aa907077 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 14 Aug 2024 13:41:57 +0200 Subject: [PATCH 071/334] Ruby: Rework splat argument/parameter matching --- .../dataflow/internal/DataFlowDispatch.qll | 60 +- .../dataflow/internal/DataFlowPrivate.qll | 98 +- .../ruby/dataflow/internal/DataFlowPublic.qll | 13 +- .../flow-summaries/semantics.expected | 48 +- .../dataflow/params/TypeTracker.expected | 2221 ++++++----------- .../dataflow/params/params-flow.expected | 5 - .../type-tracker/TypeTracker.expected | 77 +- .../action_controller/params-flow.expected | 18 +- 8 files changed, 957 insertions(+), 1583 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index f4b93490020..8af047e8326 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -563,7 +563,7 @@ private module Cached { THashSplatArgumentPosition() or TSynthHashSplatArgumentPosition() or TSplatArgumentPosition(int pos) { exists(Call c | c.getArgument(pos) instanceof SplatExpr) } or - TSynthSplatArgumentPosition() or + TSynthSplatArgumentPosition(Boolean hasActualSplat) or TAnyArgumentPosition() or TAnyKeywordArgumentPosition() @@ -590,11 +590,11 @@ private module Cached { THashSplatParameterPosition() or TSynthHashSplatParameterPosition() or TSplatParameterPosition(int pos) { - pos = 0 + pos = 0 // needed for flow summaries or exists(Parameter p | p.getPosition() = pos and p instanceof SplatParameter) } or - TSynthSplatParameterPosition() or + TSynthSplatParameterPosition(Boolean hasActualSplat) or TAnyParameterPosition() or TAnyKeywordParameterPosition() } @@ -1383,8 +1383,15 @@ class ParameterPosition extends TParameterPosition { /** Holds if this position represents a splat parameter at position `n`. */ predicate isSplat(int n) { this = TSplatParameterPosition(n) } - /** Holds if this position represents a synthetic splat parameter. */ - predicate isSynthSplat() { this = TSynthSplatParameterPosition() } + /** + * Holds if this position represents a synthetic splat parameter. + * + * `hasActualSplat` indicates whether the method that the parameter belongs + * to also has an actual splat parameter. + */ + predicate isSynthSplat(boolean hasActualSplat) { + this = TSynthSplatParameterPosition(hasActualSplat) + } /** * Holds if this position represents any parameter, except `self` parameters. This @@ -1419,7 +1426,11 @@ class ParameterPosition extends TParameterPosition { or exists(int pos | this.isSplat(pos) and result = "* (position " + pos + ")") or - this.isSynthSplat() and result = "synthetic *" + exists(boolean hasActualSplat, string suffix | + this.isSynthSplat(hasActualSplat) and + result = "synthetic *" + suffix and + if hasActualSplat = true then suffix = " (with actual)" else suffix = "" + ) } } @@ -1458,8 +1469,15 @@ class ArgumentPosition extends TArgumentPosition { /** Holds if this position represents a splat argument at position `n`. */ predicate isSplat(int n) { this = TSplatArgumentPosition(n) } - /** Holds if this position represents a synthetic splat argument. */ - predicate isSynthSplat() { this = TSynthSplatArgumentPosition() } + /** + * Holds if this position represents a synthetic splat argument. + * + * `hasActualSplat` indicates whether the call that the argument belongs + * to also has an actual splat argument. + */ + predicate isSynthSplat(boolean hasActualSplat) { + this = TSynthSplatArgumentPosition(hasActualSplat) + } /** Gets a textual representation of this position. */ string toString() { @@ -1483,7 +1501,11 @@ class ArgumentPosition extends TArgumentPosition { or exists(int pos | this.isSplat(pos) and result = "* (position " + pos + ")") or - this.isSynthSplat() and result = "synthetic *" + exists(boolean hasActualSplat, string suffix | + this.isSynthSplat(hasActualSplat) and + result = "synthetic *" + suffix and + if hasActualSplat = true then suffix = " (with actual)" else suffix = "" + ) } } @@ -1519,16 +1541,26 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { (ppos.isHashSplat() or ppos.isSynthHashSplat()) and (apos.isHashSplat() or apos.isSynthHashSplat()) or - exists(int pos | + exists(int pos, boolean hasActualSplatParam, boolean hasActualSplatArg | ( - ppos.isSplat(pos) + ppos.isSplat(pos) and + hasActualSplatParam = true // allow matching with synthetic splat argument or - ppos.isSynthSplat() and pos = 0 + ppos.isSynthSplat(hasActualSplatParam) and + pos = 0 and + // prevent synthetic splat parameters from matching synthetic splat arguments + // when direct positional matching is possible + ( + hasActualSplatParam = true + or + hasActualSplatArg = true + ) ) and ( - apos.isSplat(pos) + apos.isSplat(pos) and + hasActualSplatArg = true // allow matching with synthetic splat parameter or - apos.isSynthSplat() and pos = 0 + apos.isSynthSplat(hasActualSplatArg) and pos = 0 ) ) or diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index ec58536abe1..5ec24c19901 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -661,7 +661,7 @@ private module Cached { name = [input, output].regexpFind("(?<=(^|\\.)Field\\[)[^\\]]+(?=\\])", _, _).trim() ) } or - TSplatContent(int i, Boolean shifted) { i in [0 .. 10] } or + deprecated TSplatContent(int i, Boolean shifted) { i in [0 .. 10] } or THashSplatContent(ConstantValue::ConstantSymbolValue cv) or TCapturedVariableContent(VariableCapture::CapturedVariable v) or // Only used by type-tracking @@ -686,7 +686,6 @@ private module Cached { TUnknownElementContentApprox() or TKnownIntegerElementContentApprox() or TKnownElementContentApprox(string approx) { approx = approxKnownElementIndex(_) } or - TSplatContentApprox(Boolean shifted) or THashSplatContentApprox(string approx) { approx = approxKnownElementIndex(_) } or TNonElementContentApprox(Content c) { not c instanceof Content::ElementContent } or TCapturedVariableContentApprox(VariableCapture::CapturedVariable v) @@ -701,14 +700,10 @@ private module Cached { TSynthHashSplatArgumentType(string methodName) { methodName = any(SynthHashSplatArgumentNode n).getMethodName() } or - TSynthSplatArgumentType(string methodName) { - methodName = any(SynthSplatArgumentNode n).getMethodName() - } or TUnknownDataFlowType() } -class TElementContent = - TKnownElementContent or TUnknownElementContent or TSplatContent or THashSplatContent; +class TElementContent = TKnownElementContent or TUnknownElementContent or THashSplatContent; import Cached @@ -1188,18 +1183,6 @@ private module ParameterNodes { * by adding read steps out of the synthesized parameter node to the relevant * positional parameters. * - * In order to avoid redundancy (and improve performance) in cases like - * - * ```rb - * foo(a, b, c) - * ``` - * - * where direct positional matching is possible, we use a special `SplatContent` - * (instead of reusing `KnownElementContent`) when we construct a synthesized - * splat argument (`SynthSplatArgumentNode`) at the call site, and then only - * add read steps out of this node for actual splat arguments (which will use - * `KnownElementContent` or `TSplatContent(_, true)`). - * * We don't yet correctly handle cases where a positional argument follows the * splat argument, e.g. in * @@ -1220,9 +1203,6 @@ private module ParameterNodes { isParameterNode(p, callable, any(ParameterPosition pos | pos.isPositional(n))) and not exists(int i | splatParameterAt(callable.asCfgScope(), i) and i < n) | - // Important: do not include `TSplatContent(_, false)` here, as normal parameter matching is possible - c = getSplatContent(n, true) - or c = getArrayContent(n) or c.isSingleton(TUnknownElementContent()) @@ -1232,7 +1212,13 @@ private module ParameterNodes { final override Parameter getParameter() { none() } final override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - c = callable and pos.isSynthSplat() + c = callable and + exists(boolean hasActualSplat | + pos.isSynthSplat(hasActualSplat) and + if exists(TSynthSplatParameterShiftNode(c, _, _)) + then hasActualSplat = true + else hasActualSplat = false + ) } final override CfgScope getCfgScope() { result = callable.asCfgScope() } @@ -1271,11 +1257,7 @@ private module ParameterNodes { */ predicate readFrom(SynthSplatParameterNode synthSplat, ContentSet cs) { synthSplat.isParameterOf(callable, _) and - ( - cs = getSplatContent(pos + splatPos, _) - or - cs = getArrayContent(pos + splatPos) - ) + cs = getArrayContent(pos + splatPos) } /** @@ -1506,31 +1488,11 @@ module ArgumentNodes { * `call`, into a synthetic splat argument. */ predicate synthSplatStore(CfgNodes::ExprNodes::CallCfgNode call, Argument arg, ContentSet c) { - exists(int n | - exists(ArgumentPosition pos | - arg.isArgumentOf(call, pos) and - pos.isPositional(n) and - not exists(int i | splatArgumentAt(call, i) and i < n) - ) - | - if call instanceof CfgNodes::ExprNodes::ArrayLiteralCfgNode - then - /* - * Needed for cases like - * - * ```rb - * arr = [taint, safe] - * - * def foo(a, b) - * sink(a) - * end - * - * foo(*arr) - * ``` - */ - - c = getArrayContent(n) - else c = getSplatContent(n, false) + exists(int n, ArgumentPosition pos | + arg.isArgumentOf(call, pos) and + pos.isPositional(n) and + not exists(int i | splatArgumentAt(call, i) and i < n) and + c = getArrayContent(n) ) } @@ -1552,7 +1514,12 @@ module ArgumentNodes { override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, ArgumentPosition pos) { call = call_ and - pos.isSynthSplat() + exists(boolean hasActualSplat | + pos.isSynthSplat(hasActualSplat) and + if any(SynthSplatArgumentShiftNode shift).storeInto(this, _) + then hasActualSplat = true + else hasActualSplat = false + ) } override string toStringImpl() { result = "synthetic splat argument" } @@ -1583,8 +1550,6 @@ module ArgumentNodes { predicate readFrom(Node splatArg, ContentSet cs) { splatArg.asExpr().(Argument).isArgumentOf(c, any(ArgumentPosition p | p.isSplat(splatPos))) and ( - cs = getSplatContent(n - splatPos, _) - or cs = getArrayContent(n - splatPos) or n = -1 and @@ -1599,7 +1564,7 @@ module ArgumentNodes { predicate storeInto(SynthSplatArgumentNode synthSplat, ContentSet cs) { synthSplat = TSynthSplatArgumentNode(c) and ( - cs = getSplatContent(n, true) + cs = getArrayContent(n) or n = -1 and cs.isSingleton(TUnknownElementContent()) @@ -1813,10 +1778,6 @@ private ContentSet getArrayContent(int n) { ) } -private ContentSet getSplatContent(int n, boolean adjusted) { - result.isSingleton(TSplatContent(n, adjusted)) -} - /** * Subset of `storeStep` that should be shared with type-tracking. */ @@ -1979,11 +1940,9 @@ DataFlowType getNodeType(Node n) { or result = TSynthHashSplatArgumentType(n.(SynthHashSplatArgumentNode).getMethodName()) or - result = TSynthSplatArgumentType(n.(SynthSplatArgumentNode).getMethodName()) - or not n instanceof LambdaSelfReferenceNode and not mustHaveLambdaType(n, _) and - not n instanceof SynthHashSplatOrSplatArgumentNode and + not n instanceof SynthHashSplatArgumentNode and result = TUnknownDataFlowType() } @@ -2209,12 +2168,6 @@ class ContentApprox extends TContentApprox { result = "approximated element " + approx ) or - exists(boolean shifted, string s | - this = TSplatContentApprox(shifted) and - (if shifted = true then s = " (shifted)" else s = "") and - result = "approximated splat position" + s - ) - or exists(string s | this = THashSplatContentApprox(s) and result = "approximated hash-splat position " + s @@ -2259,11 +2212,6 @@ ContentApprox getContentApprox(Content c) { result = TKnownElementContentApprox(approxKnownElementIndex(c.(Content::KnownElementContent).getIndex())) or - exists(boolean shifted | - c = TSplatContent(_, shifted) and - result = TSplatContentApprox(shifted) - ) - or result = THashSplatContentApprox(approxKnownElementIndex(c.(Content::HashSplatContent).getKey())) or result = TNonElementContentApprox(c) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index 33ac82448a9..825c440c9a9 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -586,7 +586,7 @@ module Content { * * we have an implicit splat argument containing `[1, 2, 3]`. */ - class SplatContent extends ElementContent, TSplatContent { + deprecated class SplatContent extends Content, TSplatContent { private int i; private boolean shifted; @@ -797,7 +797,6 @@ class ContentSet extends TContentSet { private Content getAnElementReadContent() { exists(Content::KnownElementContent c | this.isKnownOrUnknownElement(c) | result = c or - result = TSplatContent(c.getIndex().getInt(), _) or result = THashSplatContent(c.getIndex()) or result = TUnknownElementContent() ) @@ -805,12 +804,7 @@ class ContentSet extends TContentSet { exists(int lower, boolean includeUnknown | this = TElementLowerBoundContent(lower, includeUnknown) | - exists(int i | - result.(Content::KnownElementContent).getIndex().isInt(i) or - result = TSplatContent(i, _) - | - i >= lower - ) + exists(int i | result.(Content::KnownElementContent).getIndex().isInt(i) | i >= lower) or includeUnknown = true and result = TUnknownElementContent() @@ -821,9 +815,6 @@ class ContentSet extends TContentSet { | type = result.(Content::KnownElementContent).getIndex().getValueType() or - type = "int" and - result instanceof Content::SplatContent - or type = result.(Content::HashSplatContent).getKey().getValueType() or includeUnknown = true and diff --git a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected index 84dc5fa3728..9f3e900d25d 100644 --- a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected +++ b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected @@ -78,14 +78,14 @@ edges | semantics.rb:60:5:60:5 | a | semantics.rb:66:14:66:15 | &... | provenance | | | semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | provenance | | | semantics.rb:60:9:60:18 | call to source | semantics.rb:60:5:60:5 | a | provenance | | -| semantics.rb:61:10:61:15 | call to s10 [splat position 0] | semantics.rb:61:10:61:15 | call to s10 | provenance | | +| semantics.rb:61:10:61:15 | call to s10 [element 0] | semantics.rb:61:10:61:15 | call to s10 | provenance | | | semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | provenance | | | semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 | provenance | | -| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 [splat position 0] | provenance | | -| semantics.rb:62:10:62:18 | call to s10 [splat position 1] | semantics.rb:62:10:62:18 | call to s10 | provenance | | +| semantics.rb:61:14:61:14 | a | semantics.rb:61:10:61:15 | call to s10 [element 0] | provenance | | +| semantics.rb:62:10:62:18 | call to s10 [element 1] | semantics.rb:62:10:62:18 | call to s10 | provenance | | | semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | provenance | | | semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 | provenance | | -| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 [splat position 1] | provenance | | +| semantics.rb:62:17:62:17 | a | semantics.rb:62:10:62:18 | call to s10 [element 1] | provenance | | | semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | provenance | | | semantics.rb:63:19:63:19 | a | semantics.rb:63:10:63:20 | call to s10 | provenance | | | semantics.rb:64:27:64:27 | a | semantics.rb:64:10:64:28 | call to s10 | provenance | | @@ -192,18 +192,18 @@ edges | semantics.rb:126:5:126:5 | b | semantics.rb:129:17:129:17 | b | provenance | | | semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | provenance | | | semantics.rb:126:9:126:18 | call to source | semantics.rb:126:5:126:5 | b | provenance | | -| semantics.rb:127:10:127:18 | call to s17 [splat position 0] | semantics.rb:127:10:127:18 | call to s17 | provenance | | -| semantics.rb:127:10:127:18 | call to s17 [splat position 1] | semantics.rb:127:10:127:18 | call to s17 | provenance | | -| semantics.rb:127:14:127:14 | a | semantics.rb:127:10:127:18 | call to s17 [splat position 0] | provenance | | -| semantics.rb:127:17:127:17 | b | semantics.rb:127:10:127:18 | call to s17 [splat position 1] | provenance | | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | -| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | provenance | | -| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [splat position 0] | provenance | | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | -| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | provenance | | -| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [splat position 1] | provenance | | +| semantics.rb:127:10:127:18 | call to s17 [element 0] | semantics.rb:127:10:127:18 | call to s17 | provenance | | +| semantics.rb:127:10:127:18 | call to s17 [element 1] | semantics.rb:127:10:127:18 | call to s17 | provenance | | +| semantics.rb:127:14:127:14 | a | semantics.rb:127:10:127:18 | call to s17 [element 0] | provenance | | +| semantics.rb:127:17:127:17 | b | semantics.rb:127:10:127:18 | call to s17 [element 1] | provenance | | +| semantics.rb:128:10:128:18 | call to s17 [element 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | +| semantics.rb:128:10:128:18 | call to s17 [element 0] | semantics.rb:128:10:128:21 | ...[...] | provenance | | +| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [element 0] | provenance | | +| semantics.rb:128:14:128:14 | a | semantics.rb:128:10:128:18 | call to s17 [element 0] | provenance | | +| semantics.rb:129:10:129:18 | call to s17 [element 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | +| semantics.rb:129:10:129:18 | call to s17 [element 1] | semantics.rb:129:10:129:21 | ...[...] | provenance | | +| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [element 1] | provenance | | +| semantics.rb:129:17:129:17 | b | semantics.rb:129:10:129:18 | call to s17 [element 1] | provenance | | | semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | provenance | | | semantics.rb:133:5:133:5 | a | semantics.rb:135:12:135:12 | a | provenance | | | semantics.rb:133:5:133:5 | a | semantics.rb:137:14:137:14 | a | provenance | | @@ -1191,12 +1191,12 @@ nodes | semantics.rb:60:9:60:18 | call to source | semmle.label | call to source | | semantics.rb:61:10:61:15 | call to s10 | semmle.label | call to s10 | | semantics.rb:61:10:61:15 | call to s10 | semmle.label | call to s10 | -| semantics.rb:61:10:61:15 | call to s10 [splat position 0] | semmle.label | call to s10 [splat position 0] | +| semantics.rb:61:10:61:15 | call to s10 [element 0] | semmle.label | call to s10 [element 0] | | semantics.rb:61:14:61:14 | a | semmle.label | a | | semantics.rb:61:14:61:14 | a | semmle.label | a | | semantics.rb:62:10:62:18 | call to s10 | semmle.label | call to s10 | | semantics.rb:62:10:62:18 | call to s10 | semmle.label | call to s10 | -| semantics.rb:62:10:62:18 | call to s10 [splat position 1] | semmle.label | call to s10 [splat position 1] | +| semantics.rb:62:10:62:18 | call to s10 [element 1] | semmle.label | call to s10 [element 1] | | semantics.rb:62:17:62:17 | a | semmle.label | a | | semantics.rb:62:17:62:17 | a | semmle.label | a | | semantics.rb:63:10:63:20 | call to s10 | semmle.label | call to s10 | @@ -1322,18 +1322,18 @@ nodes | semantics.rb:126:9:126:18 | call to source | semmle.label | call to source | | semantics.rb:126:9:126:18 | call to source | semmle.label | call to source | | semantics.rb:127:10:127:18 | call to s17 | semmle.label | call to s17 | -| semantics.rb:127:10:127:18 | call to s17 [splat position 0] | semmle.label | call to s17 [splat position 0] | -| semantics.rb:127:10:127:18 | call to s17 [splat position 1] | semmle.label | call to s17 [splat position 1] | +| semantics.rb:127:10:127:18 | call to s17 [element 0] | semmle.label | call to s17 [element 0] | +| semantics.rb:127:10:127:18 | call to s17 [element 1] | semmle.label | call to s17 [element 1] | | semantics.rb:127:14:127:14 | a | semmle.label | a | | semantics.rb:127:17:127:17 | b | semmle.label | b | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semmle.label | call to s17 [splat position 0] | -| semantics.rb:128:10:128:18 | call to s17 [splat position 0] | semmle.label | call to s17 [splat position 0] | +| semantics.rb:128:10:128:18 | call to s17 [element 0] | semmle.label | call to s17 [element 0] | +| semantics.rb:128:10:128:18 | call to s17 [element 0] | semmle.label | call to s17 [element 0] | | semantics.rb:128:10:128:21 | ...[...] | semmle.label | ...[...] | | semantics.rb:128:10:128:21 | ...[...] | semmle.label | ...[...] | | semantics.rb:128:14:128:14 | a | semmle.label | a | | semantics.rb:128:14:128:14 | a | semmle.label | a | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semmle.label | call to s17 [splat position 1] | -| semantics.rb:129:10:129:18 | call to s17 [splat position 1] | semmle.label | call to s17 [splat position 1] | +| semantics.rb:129:10:129:18 | call to s17 [element 1] | semmle.label | call to s17 [element 1] | +| semantics.rb:129:10:129:18 | call to s17 [element 1] | semmle.label | call to s17 [element 1] | | semantics.rb:129:10:129:21 | ...[...] | semmle.label | ...[...] | | semantics.rb:129:10:129:21 | ...[...] | semmle.label | ...[...] | | semantics.rb:129:17:129:17 | b | semmle.label | b | diff --git a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected index 09e1598caf5..90b41808613 100644 --- a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected @@ -56,12 +56,43 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:200:9:200:9 | x | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:108:40:108:41 | *b | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:133:14:133:18 | *args | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:200:1:205:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 or unknown | params_flow.rb:64:16:64:17 | *x | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | @@ -74,11 +105,26 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:133:14:133:18 | *args | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:167:21:167:28 | *posargs | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 2 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 2 | params_flow.rb:133:14:133:18 | *args | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 3 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 4 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 5 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | @@ -99,69 +145,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:167:21:167:28 | *posargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content splat position 5 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:14:12:14:19 | call to taint | @@ -249,30 +232,41 @@ track | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content attribute [] | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element | params_flow.rb:118:12:118:13 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:44:23:44:27 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:47:12:47:16 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:58:20:58:24 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:61:9:61:13 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:94:32:94:36 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:128:34:128:60 | call to [] | @@ -287,24 +281,36 @@ track | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 | params_flow.rb:207:5:207:13 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 0 or unknown | params_flow.rb:67:12:67:16 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:47:12:47:16 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:61:9:61:13 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:94:32:94:36 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:128:46:128:59 | call to [] | @@ -318,27 +324,44 @@ track | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:173:17:173:24 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:187:20:187:24 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:94:32:94:36 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:94:32:94:36 | * ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 3 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 5 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:38:8:38:13 | ** ... | @@ -371,53 +394,13 @@ track | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:44:1:44:28 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:58:1:58:25 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content splat position 5 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:5:1:7:3 | &block | type tracker without call steps | params_flow.rb:5:1:7:3 | &block | | params_flow.rb:5:1:7:3 | self in sink | type tracker without call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:5:1:7:3 | sink | type tracker without call steps | params_flow.rb:5:1:7:3 | sink | | params_flow.rb:5:1:7:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:5:10:5:10 | x | type tracker without call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:5:10:5:10 | x | type tracker without call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:5:10:5:10 | x | type tracker without call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:5:10:5:10 | x | type tracker without call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:6:5:6:10 | call to puts | type tracker without call steps | params_flow.rb:6:5:6:10 | call to puts | | params_flow.rb:6:5:6:10 | call to puts | type tracker without call steps | params_flow.rb:10:5:10:11 | call to sink | | params_flow.rb:6:5:6:10 | call to puts | type tracker without call steps | params_flow.rb:11:5:11:11 | call to sink | @@ -511,100 +494,79 @@ track | params_flow.rb:9:1:12:3 | self in positional | type tracker without call steps | params_flow.rb:9:1:12:3 | self in positional | | params_flow.rb:9:1:12:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:9:16:9:17 | p1 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:9:16:9:17 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:9:16:9:17 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:9:16:9:17 | p1 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:9:16:9:17 | p1 | type tracker without call steps | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:9:16:9:17 | p1 | type tracker without call steps | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:9:16:9:17 | p1 | type tracker without call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:9:16:9:17 | p1 | type tracker without call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:9:20:9:21 | p2 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:9:20:9:21 | p2 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:9:20:9:21 | p2 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:9:20:9:21 | p2 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:9:20:9:21 | p2 | type tracker without call steps | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:9:20:9:21 | p2 | type tracker without call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:9:20:9:21 | p2 | type tracker without call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:9:20:9:21 | p2 | type tracker without call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:10:5:10:11 | call to sink | type tracker without call steps | params_flow.rb:10:5:10:11 | call to sink | -| params_flow.rb:10:5:10:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:10:5:10:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:11:5:11:11 | call to sink | type tracker without call steps | params_flow.rb:11:5:11:11 | call to sink | | params_flow.rb:11:5:11:11 | call to sink | type tracker without call steps | params_flow.rb:14:1:14:30 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | type tracker without call steps | params_flow.rb:44:1:44:28 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | type tracker without call steps | params_flow.rb:47:1:47:17 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | type tracker without call steps | params_flow.rb:118:1:118:14 | call to positional | -| params_flow.rb:11:5:11:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:11:5:11:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:14:1:14:30 | call to positional | type tracker without call steps | params_flow.rb:14:1:14:30 | call to positional | -| params_flow.rb:14:1:14:30 | synthetic splat argument | type tracker with call steps | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:14:1:14:30 | synthetic splat argument | type tracker without call steps | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:14:12:14:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:14:12:14:19 | call to taint | type tracker without call steps | params_flow.rb:14:12:14:19 | call to taint | -| params_flow.rb:14:12:14:19 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | -| params_flow.rb:14:12:14:19 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:14:12:14:19 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:14:12:14:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:14:12:14:19 | synthetic splat argument | | params_flow.rb:14:18:14:18 | 1 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:14:18:14:18 | 1 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:14:18:14:18 | 1 | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content splat position 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:14:18:14:18 | 1 | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:14:18:14:18 | 1 | type tracker without call steps | params_flow.rb:14:12:14:19 | call to taint | | params_flow.rb:14:18:14:18 | 1 | type tracker without call steps | params_flow.rb:14:18:14:18 | 1 | -| params_flow.rb:14:18:14:18 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | -| params_flow.rb:14:18:14:18 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:14:12:14:19 | synthetic splat argument | +| params_flow.rb:14:18:14:18 | 1 | type tracker without call steps with content element 0 | params_flow.rb:14:1:14:30 | synthetic splat argument | +| params_flow.rb:14:18:14:18 | 1 | type tracker without call steps with content element 0 | params_flow.rb:14:12:14:19 | synthetic splat argument | | params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:14:22:14:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:14:22:14:29 | call to taint | type tracker without call steps | params_flow.rb:14:22:14:29 | call to taint | -| params_flow.rb:14:22:14:29 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | -| params_flow.rb:14:22:14:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:14:22:14:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:14:22:14:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:14:22:14:29 | synthetic splat argument | | params_flow.rb:14:28:14:28 | 2 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:14:28:14:28 | 2 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:14:28:14:28 | 2 | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content splat position 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:14:28:14:28 | 2 | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:14:28:14:28 | 2 | type tracker without call steps | params_flow.rb:14:22:14:29 | call to taint | | params_flow.rb:14:28:14:28 | 2 | type tracker without call steps | params_flow.rb:14:28:14:28 | 2 | -| params_flow.rb:14:28:14:28 | 2 | type tracker without call steps with content splat position 0 | params_flow.rb:14:22:14:29 | synthetic splat argument | -| params_flow.rb:14:28:14:28 | 2 | type tracker without call steps with content splat position 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | +| params_flow.rb:14:28:14:28 | 2 | type tracker without call steps with content element 0 | params_flow.rb:14:22:14:29 | synthetic splat argument | +| params_flow.rb:14:28:14:28 | 2 | type tracker without call steps with content element 1 | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:16:1:19:3 | &block | type tracker without call steps | params_flow.rb:16:1:19:3 | &block | | params_flow.rb:16:1:19:3 | keyword | type tracker without call steps | params_flow.rb:16:1:19:3 | keyword | | params_flow.rb:16:1:19:3 | self in keyword | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:16:1:19:3 | self in keyword | type tracker without call steps | params_flow.rb:16:1:19:3 | self in keyword | | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | type tracker without call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:16:13:16:14 | p1 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:16:13:16:14 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:16:13:16:14 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:16:13:16:14 | p1 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:16:13:16:14 | p1 | type tracker without call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:16:13:16:14 | p1 | type tracker without call steps | params_flow.rb:16:13:16:14 | p1 | -| params_flow.rb:16:13:16:14 | p1 | type tracker without call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | +| params_flow.rb:16:13:16:14 | p1 | type tracker without call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:16:18:16:19 | p2 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:16:18:16:19 | p2 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:16:18:16:19 | p2 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:16:18:16:19 | p2 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:16:18:16:19 | p2 | type tracker without call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:16:18:16:19 | p2 | type tracker without call steps | params_flow.rb:16:18:16:19 | p2 | -| params_flow.rb:16:18:16:19 | p2 | type tracker without call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | +| params_flow.rb:16:18:16:19 | p2 | type tracker without call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:17:5:17:11 | call to sink | type tracker without call steps | params_flow.rb:17:5:17:11 | call to sink | -| params_flow.rb:17:5:17:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:17:5:17:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:18:5:18:11 | call to sink | | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:21:1:21:35 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:22:1:22:35 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:23:1:23:41 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:41:1:41:30 | call to keyword | -| params_flow.rb:18:5:18:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:18:5:18:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:1:21:35 | call to keyword | type tracker without call steps | params_flow.rb:21:1:21:35 | call to keyword | | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | @@ -613,50 +575,42 @@ track | params_flow.rb:21:9:21:20 | Pair | type tracker without call steps | params_flow.rb:21:9:21:20 | Pair | | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:21:13:21:20 | call to taint | type tracker without call steps | params_flow.rb:21:13:21:20 | call to taint | | params_flow.rb:21:13:21:20 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:21:13:21:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:21:13:21:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:21:13:21:20 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps | params_flow.rb:21:13:21:20 | call to taint | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps | params_flow.rb:21:19:21:19 | 3 | +| params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content element 0 | params_flow.rb:21:13:21:20 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content splat position 0 | params_flow.rb:21:13:21:20 | synthetic splat argument | | params_flow.rb:21:23:21:24 | :p2 | type tracker without call steps | params_flow.rb:21:23:21:24 | :p2 | | params_flow.rb:21:23:21:34 | Pair | type tracker without call steps | params_flow.rb:21:23:21:34 | Pair | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:27:21:34 | call to taint | type tracker without call steps | params_flow.rb:21:27:21:34 | call to taint | | params_flow.rb:21:27:21:34 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:21:27:21:34 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:21:27:21:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:21:27:21:34 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps | params_flow.rb:21:27:21:34 | call to taint | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps | params_flow.rb:21:33:21:33 | 4 | +| params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content element 0 | params_flow.rb:21:27:21:34 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content splat position 0 | params_flow.rb:21:27:21:34 | synthetic splat argument | | params_flow.rb:22:1:22:35 | call to keyword | type tracker without call steps | params_flow.rb:22:1:22:35 | call to keyword | | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | @@ -664,50 +618,42 @@ track | params_flow.rb:22:9:22:20 | Pair | type tracker without call steps | params_flow.rb:22:9:22:20 | Pair | | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:22:13:22:20 | call to taint | type tracker without call steps | params_flow.rb:22:13:22:20 | call to taint | | params_flow.rb:22:13:22:20 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:22:13:22:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:22:13:22:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:22:13:22:20 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps | params_flow.rb:22:13:22:20 | call to taint | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps | params_flow.rb:22:19:22:19 | 5 | +| params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content element 0 | params_flow.rb:22:13:22:20 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content splat position 0 | params_flow.rb:22:13:22:20 | synthetic splat argument | | params_flow.rb:22:23:22:24 | :p1 | type tracker without call steps | params_flow.rb:22:23:22:24 | :p1 | | params_flow.rb:22:23:22:34 | Pair | type tracker without call steps | params_flow.rb:22:23:22:34 | Pair | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:22:27:22:34 | call to taint | type tracker without call steps | params_flow.rb:22:27:22:34 | call to taint | | params_flow.rb:22:27:22:34 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:22:27:22:34 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:22:27:22:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:22:27:22:34 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps | params_flow.rb:22:27:22:34 | call to taint | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps | params_flow.rb:22:33:22:33 | 6 | +| params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content element 0 | params_flow.rb:22:27:22:34 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content splat position 0 | params_flow.rb:22:27:22:34 | synthetic splat argument | | params_flow.rb:23:1:23:41 | call to keyword | type tracker without call steps | params_flow.rb:23:1:23:41 | call to keyword | | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | @@ -715,113 +661,95 @@ track | params_flow.rb:23:9:23:23 | Pair | type tracker without call steps | params_flow.rb:23:9:23:23 | Pair | | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:23:16:23:23 | call to taint | type tracker without call steps | params_flow.rb:23:16:23:23 | call to taint | | params_flow.rb:23:16:23:23 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:23:16:23:23 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:23:16:23:23 | synthetic splat argument | type tracker without call steps | params_flow.rb:23:16:23:23 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps | params_flow.rb:23:16:23:23 | call to taint | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps | params_flow.rb:23:22:23:22 | 7 | +| params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content element 0 | params_flow.rb:23:16:23:23 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content splat position 0 | params_flow.rb:23:16:23:23 | synthetic splat argument | | params_flow.rb:23:26:23:28 | :p1 | type tracker without call steps | params_flow.rb:23:26:23:28 | :p1 | | params_flow.rb:23:26:23:40 | Pair | type tracker without call steps | params_flow.rb:23:26:23:40 | Pair | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:23:33:23:40 | call to taint | type tracker without call steps | params_flow.rb:23:33:23:40 | call to taint | | params_flow.rb:23:33:23:40 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:23:33:23:40 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:23:33:23:40 | synthetic splat argument | type tracker without call steps | params_flow.rb:23:33:23:40 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps | params_flow.rb:23:33:23:40 | call to taint | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps | params_flow.rb:23:39:23:39 | 8 | +| params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content element 0 | params_flow.rb:23:33:23:40 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content splat position 0 | params_flow.rb:23:33:23:40 | synthetic splat argument | | params_flow.rb:25:1:31:3 | &block | type tracker without call steps | params_flow.rb:25:1:31:3 | &block | | params_flow.rb:25:1:31:3 | kwargs | type tracker without call steps | params_flow.rb:25:1:31:3 | kwargs | | params_flow.rb:25:1:31:3 | self in kwargs | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:25:1:31:3 | self in kwargs | type tracker without call steps | params_flow.rb:25:1:31:3 | self in kwargs | | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | type tracker without call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:25:12:25:13 | p1 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:25:12:25:13 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:25:12:25:13 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:25:12:25:13 | p1 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:25:12:25:13 | p1 | type tracker without call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:25:12:25:13 | p1 | type tracker without call steps | params_flow.rb:25:12:25:13 | p1 | -| params_flow.rb:25:12:25:13 | p1 | type tracker without call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:25:12:25:13 | p1 | type tracker without call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:25:17:25:24 | **kwargs | type tracker without call steps | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:25:19:25:24 | kwargs | type tracker without call steps | params_flow.rb:25:19:25:24 | kwargs | | params_flow.rb:26:5:26:11 | call to sink | type tracker without call steps | params_flow.rb:26:5:26:11 | call to sink | -| params_flow.rb:26:5:26:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:26:5:26:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:27:5:27:22 | call to sink | type tracker without call steps | params_flow.rb:27:5:27:22 | call to sink | -| params_flow.rb:27:5:27:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:27:5:27:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:27:11:27:21 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:27:11:27:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:27:11:27:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:27:11:27:21 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:27:11:27:21 | ...[...] | type tracker without call steps | params_flow.rb:27:11:27:21 | ...[...] | -| params_flow.rb:27:11:27:21 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | +| params_flow.rb:27:11:27:21 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:27:11:27:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:27:11:27:21 | synthetic splat argument | | params_flow.rb:27:18:27:20 | :p1 | type tracker without call steps | params_flow.rb:27:18:27:20 | :p1 | -| params_flow.rb:27:18:27:20 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:27:11:27:21 | synthetic splat argument | +| params_flow.rb:27:18:27:20 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:27:11:27:21 | synthetic splat argument | | params_flow.rb:28:5:28:22 | call to sink | type tracker without call steps | params_flow.rb:28:5:28:22 | call to sink | -| params_flow.rb:28:5:28:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:28:5:28:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:28:11:28:21 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:28:11:28:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:28:11:28:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:28:11:28:21 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:28:11:28:21 | ...[...] | type tracker without call steps | params_flow.rb:28:11:28:21 | ...[...] | -| params_flow.rb:28:11:28:21 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | +| params_flow.rb:28:11:28:21 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:28:11:28:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:28:11:28:21 | synthetic splat argument | | params_flow.rb:28:18:28:20 | :p2 | type tracker without call steps | params_flow.rb:28:18:28:20 | :p2 | -| params_flow.rb:28:18:28:20 | :p2 | type tracker without call steps with content splat position 0 | params_flow.rb:28:11:28:21 | synthetic splat argument | +| params_flow.rb:28:18:28:20 | :p2 | type tracker without call steps with content element 0 | params_flow.rb:28:11:28:21 | synthetic splat argument | | params_flow.rb:29:5:29:22 | call to sink | type tracker without call steps | params_flow.rb:29:5:29:22 | call to sink | -| params_flow.rb:29:5:29:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:29:5:29:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:29:11:29:21 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:29:11:29:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:29:11:29:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:29:11:29:21 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:29:11:29:21 | ...[...] | type tracker without call steps | params_flow.rb:29:11:29:21 | ...[...] | -| params_flow.rb:29:11:29:21 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | +| params_flow.rb:29:11:29:21 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:29:11:29:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:29:11:29:21 | synthetic splat argument | | params_flow.rb:29:18:29:20 | :p3 | type tracker without call steps | params_flow.rb:29:18:29:20 | :p3 | -| params_flow.rb:29:18:29:20 | :p3 | type tracker without call steps with content splat position 0 | params_flow.rb:29:11:29:21 | synthetic splat argument | +| params_flow.rb:29:18:29:20 | :p3 | type tracker without call steps with content element 0 | params_flow.rb:29:11:29:21 | synthetic splat argument | | params_flow.rb:30:5:30:22 | call to sink | type tracker without call steps | params_flow.rb:30:5:30:22 | call to sink | | params_flow.rb:30:5:30:22 | call to sink | type tracker without call steps | params_flow.rb:33:1:33:58 | call to kwargs | | params_flow.rb:30:5:30:22 | call to sink | type tracker without call steps | params_flow.rb:35:1:35:29 | call to kwargs | | params_flow.rb:30:5:30:22 | call to sink | type tracker without call steps | params_flow.rb:38:1:38:14 | call to kwargs | -| params_flow.rb:30:5:30:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:30:5:30:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:30:11:30:21 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:30:11:30:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:30:11:30:21 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:30:11:30:21 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:30:11:30:21 | ...[...] | type tracker without call steps | params_flow.rb:30:11:30:21 | ...[...] | -| params_flow.rb:30:11:30:21 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | +| params_flow.rb:30:11:30:21 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:30:11:30:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:30:11:30:21 | synthetic splat argument | | params_flow.rb:30:18:30:20 | :p4 | type tracker without call steps | params_flow.rb:30:18:30:20 | :p4 | -| params_flow.rb:30:18:30:20 | :p4 | type tracker without call steps with content splat position 0 | params_flow.rb:30:11:30:21 | synthetic splat argument | +| params_flow.rb:30:18:30:20 | :p4 | type tracker without call steps with content element 0 | params_flow.rb:30:11:30:21 | synthetic splat argument | | params_flow.rb:33:1:33:58 | call to kwargs | type tracker without call steps | params_flow.rb:33:1:33:58 | call to kwargs | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | @@ -831,92 +759,79 @@ track | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:33:12:33:19 | call to taint | type tracker without call steps | params_flow.rb:33:12:33:19 | call to taint | | params_flow.rb:33:12:33:19 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:12:33:19 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:12:33:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:12:33:19 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps | params_flow.rb:33:12:33:19 | call to taint | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps | params_flow.rb:33:18:33:18 | 9 | +| params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content element 0 | params_flow.rb:33:12:33:19 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content splat position 0 | params_flow.rb:33:12:33:19 | synthetic splat argument | | params_flow.rb:33:22:33:23 | :p2 | type tracker without call steps | params_flow.rb:33:22:33:23 | :p2 | | params_flow.rb:33:22:33:34 | Pair | type tracker without call steps | params_flow.rb:33:22:33:34 | Pair | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | +| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:33:26:33:34 | call to taint | type tracker without call steps | params_flow.rb:33:26:33:34 | call to taint | | params_flow.rb:33:26:33:34 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:26:33:34 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:26:33:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:26:33:34 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | +| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps | params_flow.rb:33:26:33:34 | call to taint | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps | params_flow.rb:33:32:33:33 | 10 | +| params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content element 0 | params_flow.rb:33:26:33:34 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content splat position 0 | params_flow.rb:33:26:33:34 | synthetic splat argument | | params_flow.rb:33:37:33:38 | :p3 | type tracker without call steps | params_flow.rb:33:37:33:38 | :p3 | | params_flow.rb:33:37:33:49 | Pair | type tracker without call steps | params_flow.rb:33:37:33:49 | Pair | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | +| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:33:41:33:49 | call to taint | type tracker without call steps | params_flow.rb:33:41:33:49 | call to taint | | params_flow.rb:33:41:33:49 | call to taint | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:41:33:49 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:41:33:49 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:41:33:49 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | +| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps | params_flow.rb:33:41:33:49 | call to taint | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps | params_flow.rb:33:47:33:48 | 11 | +| params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content element 0 | params_flow.rb:33:41:33:49 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content splat position 0 | params_flow.rb:33:41:33:49 | synthetic splat argument | | params_flow.rb:33:52:33:53 | :p4 | type tracker without call steps | params_flow.rb:33:52:33:53 | :p4 | | params_flow.rb:33:52:33:57 | Pair | type tracker without call steps | params_flow.rb:33:52:33:57 | Pair | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps | params_flow.rb:30:11:30:21 | ...[...] | +| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content element 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content hash-splat position :p4 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content hash-splat position :p4 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:33:56:33:57 | "" | type tracker without call steps | params_flow.rb:33:56:33:57 | "" | | params_flow.rb:33:56:33:57 | "" | type tracker without call steps with content hash-splat position :p4 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:34:1:34:4 | args | type tracker without call steps | params_flow.rb:34:1:34:4 | args | @@ -928,41 +843,36 @@ track | params_flow.rb:34:10:34:22 | Pair | type tracker without call steps | params_flow.rb:34:10:34:22 | Pair | | params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | +| params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content element :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content element :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:34:14:34:22 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:34:14:34:22 | call to taint | type tracker without call steps | params_flow.rb:34:14:34:22 | call to taint | | params_flow.rb:34:14:34:22 | call to taint | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | call to [] | | params_flow.rb:34:14:34:22 | call to taint | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | synthetic hash-splat argument | | params_flow.rb:34:14:34:22 | call to taint | type tracker without call steps with content element :p3 | params_flow.rb:35:23:35:28 | ** ... | -| params_flow.rb:34:14:34:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:34:14:34:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:34:14:34:22 | synthetic splat argument | | params_flow.rb:34:20:34:21 | 12 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:34:20:34:21 | 12 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:34:20:34:21 | 12 | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | +| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content element :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content element :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:34:20:34:21 | 12 | type tracker with call steps with content splat position 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:34:20:34:21 | 12 | type tracker without call steps | params_flow.rb:34:14:34:22 | call to taint | | params_flow.rb:34:20:34:21 | 12 | type tracker without call steps | params_flow.rb:34:20:34:21 | 12 | +| params_flow.rb:34:20:34:21 | 12 | type tracker without call steps with content element 0 | params_flow.rb:34:14:34:22 | synthetic splat argument | | params_flow.rb:34:20:34:21 | 12 | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | call to [] | | params_flow.rb:34:20:34:21 | 12 | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | synthetic hash-splat argument | | params_flow.rb:34:20:34:21 | 12 | type tracker without call steps with content element :p3 | params_flow.rb:35:23:35:28 | ** ... | -| params_flow.rb:34:20:34:21 | 12 | type tracker without call steps with content splat position 0 | params_flow.rb:34:14:34:22 | synthetic splat argument | | params_flow.rb:34:25:34:26 | :p4 | type tracker without call steps | params_flow.rb:34:25:34:26 | :p4 | | params_flow.rb:34:25:34:30 | Pair | type tracker without call steps | params_flow.rb:34:25:34:30 | Pair | | params_flow.rb:34:29:34:30 | "" | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:34:29:34:30 | "" | type tracker with call steps | params_flow.rb:30:11:30:21 | ...[...] | +| params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content element 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content element :p4 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content element :p4 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:34:29:34:30 | "" | type tracker with call steps with content splat position 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:34:29:34:30 | "" | type tracker without call steps | params_flow.rb:34:29:34:30 | "" | | params_flow.rb:34:29:34:30 | "" | type tracker without call steps with content element :p4 | params_flow.rb:34:8:34:32 | call to [] | | params_flow.rb:34:29:34:30 | "" | type tracker without call steps with content element :p4 | params_flow.rb:34:8:34:32 | synthetic hash-splat argument | @@ -976,31 +886,27 @@ track | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:35:12:35:20 | call to taint | type tracker without call steps | params_flow.rb:35:12:35:20 | call to taint | | params_flow.rb:35:12:35:20 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | -| params_flow.rb:35:12:35:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:35:12:35:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:35:12:35:20 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps | params_flow.rb:35:12:35:20 | call to taint | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps | params_flow.rb:35:18:35:19 | 13 | +| params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content element 0 | params_flow.rb:35:12:35:20 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | -| params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content splat position 0 | params_flow.rb:35:12:35:20 | synthetic splat argument | | params_flow.rb:35:23:35:28 | ** ... | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:23:35:28 | ** ... | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:23:35:28 | ** ... | type tracker without call steps | params_flow.rb:35:23:35:28 | ** ... | @@ -1014,65 +920,57 @@ track | params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content element :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:37:16:37:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:37:16:37:24 | call to taint | type tracker without call steps | params_flow.rb:37:16:37:24 | call to taint | | params_flow.rb:37:16:37:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:37:16:37:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:37:16:37:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:38:8:38:13 | ** ... | -| params_flow.rb:37:16:37:24 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:37:16:37:24 | synthetic splat argument | type tracker without call steps | params_flow.rb:37:16:37:24 | synthetic splat argument | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps | params_flow.rb:25:12:25:13 | p1 | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps | params_flow.rb:27:11:27:21 | ...[...] | +| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | +| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content element :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content splat position 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | -| params_flow.rb:37:22:37:23 | 14 | type tracker with call steps with content splat position 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:37:22:37:23 | 14 | type tracker without call steps | params_flow.rb:37:16:37:24 | call to taint | | params_flow.rb:37:22:37:23 | 14 | type tracker without call steps | params_flow.rb:37:22:37:23 | 14 | +| params_flow.rb:37:22:37:23 | 14 | type tracker without call steps with content element 0 | params_flow.rb:37:16:37:24 | synthetic splat argument | | params_flow.rb:37:22:37:23 | 14 | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:37:22:37:23 | 14 | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:37:22:37:23 | 14 | type tracker without call steps with content element :p1 | params_flow.rb:38:8:38:13 | ** ... | -| params_flow.rb:37:22:37:23 | 14 | type tracker without call steps with content splat position 0 | params_flow.rb:37:16:37:24 | synthetic splat argument | | params_flow.rb:37:27:37:29 | :p2 | type tracker without call steps | params_flow.rb:37:27:37:29 | :p2 | | params_flow.rb:37:27:37:42 | Pair | type tracker without call steps | params_flow.rb:37:27:37:42 | Pair | | params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | +| params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:37:34:37:42 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:37:34:37:42 | call to taint | type tracker without call steps | params_flow.rb:37:34:37:42 | call to taint | | params_flow.rb:37:34:37:42 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:37:34:37:42 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:37:34:37:42 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:38:8:38:13 | ** ... | -| params_flow.rb:37:34:37:42 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:37:34:37:42 | synthetic splat argument | type tracker without call steps | params_flow.rb:37:34:37:42 | synthetic splat argument | | params_flow.rb:37:40:37:41 | 15 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:37:40:37:41 | 15 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:37:40:37:41 | 15 | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | +| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content element :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content element :p2 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:37:40:37:41 | 15 | type tracker with call steps with content splat position 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:37:40:37:41 | 15 | type tracker without call steps | params_flow.rb:37:34:37:42 | call to taint | | params_flow.rb:37:40:37:41 | 15 | type tracker without call steps | params_flow.rb:37:40:37:41 | 15 | +| params_flow.rb:37:40:37:41 | 15 | type tracker without call steps with content element 0 | params_flow.rb:37:34:37:42 | synthetic splat argument | | params_flow.rb:37:40:37:41 | 15 | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:37:40:37:41 | 15 | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:37:40:37:41 | 15 | type tracker without call steps with content element :p2 | params_flow.rb:38:8:38:13 | ** ... | -| params_flow.rb:37:40:37:41 | 15 | type tracker without call steps with content splat position 0 | params_flow.rb:37:34:37:42 | synthetic splat argument | | params_flow.rb:38:1:38:14 | call to kwargs | type tracker without call steps | params_flow.rb:38:1:38:14 | call to kwargs | | params_flow.rb:38:8:38:13 | ** ... | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:38:8:38:13 | ** ... | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | @@ -1086,30 +984,26 @@ track | params_flow.rb:40:9:40:24 | Pair | type tracker without call steps | params_flow.rb:40:9:40:24 | Pair | | params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content element :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:40:16:40:24 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:40:16:40:24 | call to taint | type tracker without call steps | params_flow.rb:40:16:40:24 | call to taint | | params_flow.rb:40:16:40:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | call to [] | | params_flow.rb:40:16:40:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | synthetic hash-splat argument | | params_flow.rb:40:16:40:24 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:41:24:41:29 | ** ... | -| params_flow.rb:40:16:40:24 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:40:16:40:24 | synthetic splat argument | type tracker without call steps | params_flow.rb:40:16:40:24 | synthetic splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:40:22:40:23 | 16 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:40:22:40:23 | 16 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | +| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content element :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:40:22:40:23 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps | params_flow.rb:40:16:40:24 | call to taint | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps | params_flow.rb:40:22:40:23 | 16 | +| params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element 0 | params_flow.rb:40:16:40:24 | synthetic splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | call to [] | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | synthetic hash-splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element :p1 | params_flow.rb:41:24:41:29 | ** ... | -| params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content splat position 0 | params_flow.rb:40:16:40:24 | synthetic splat argument | | params_flow.rb:41:1:41:30 | call to keyword | type tracker without call steps | params_flow.rb:41:1:41:30 | call to keyword | | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | @@ -1117,174 +1011,150 @@ track | params_flow.rb:41:9:41:21 | Pair | type tracker without call steps | params_flow.rb:41:9:41:21 | Pair | | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:41:13:41:21 | call to taint | type tracker without call steps | params_flow.rb:41:13:41:21 | call to taint | | params_flow.rb:41:13:41:21 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | -| params_flow.rb:41:13:41:21 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:41:13:41:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:41:13:41:21 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | +| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps | params_flow.rb:41:13:41:21 | call to taint | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps | params_flow.rb:41:19:41:20 | 17 | +| params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content element 0 | params_flow.rb:41:13:41:21 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | -| params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content splat position 0 | params_flow.rb:41:13:41:21 | synthetic splat argument | | params_flow.rb:41:24:41:29 | ** ... | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:24:41:29 | ** ... | type tracker without call steps | params_flow.rb:41:24:41:29 | ** ... | | params_flow.rb:43:1:43:4 | args | type tracker without call steps | params_flow.rb:43:1:43:4 | args | | params_flow.rb:43:8:43:18 | Array | type tracker without call steps | params_flow.rb:43:8:43:18 | Array | | params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:43:8:43:18 | call to [] | type tracker without call steps | params_flow.rb:43:8:43:18 | call to [] | | params_flow.rb:43:8:43:18 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:44:23:44:27 | * ... | -| params_flow.rb:43:8:43:18 | call to [] | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:44:1:44:28 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:43:8:43:18 | call to [] | | params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:43:8:43:18 | synthetic splat argument | | params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:44:23:44:27 | * ... | -| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:44:1:44:28 | synthetic splat argument | +| params_flow.rb:43:8:43:18 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:43:9:43:17 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps | params_flow.rb:43:9:43:17 | call to taint | | params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | call to [] | | params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | synthetic splat argument | | params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:44:23:44:27 | * ... | -| params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:44:1:44:28 | synthetic splat argument | -| params_flow.rb:43:9:43:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:43:9:43:17 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:43:9:43:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:43:9:43:17 | synthetic splat argument | | params_flow.rb:43:15:43:16 | 17 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:43:15:43:16 | 17 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:43:15:43:16 | 17 | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | -| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | -| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:43:15:43:16 | 17 | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:43:15:43:16 | 17 | type tracker without call steps | params_flow.rb:43:9:43:17 | call to taint | | params_flow.rb:43:15:43:16 | 17 | type tracker without call steps | params_flow.rb:43:15:43:16 | 17 | | params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | call to [] | | params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content element 0 | params_flow.rb:43:8:43:18 | synthetic splat argument | +| params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content element 0 | params_flow.rb:43:9:43:17 | synthetic splat argument | | params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content element 0 | params_flow.rb:44:23:44:27 | * ... | -| params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content splat position 0 | params_flow.rb:43:9:43:17 | synthetic splat argument | -| params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:44:1:44:28 | synthetic splat argument | +| params_flow.rb:43:15:43:16 | 17 | type tracker without call steps with content element 1 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:44:1:44:28 | call to positional | type tracker without call steps | params_flow.rb:44:1:44:28 | call to positional | | params_flow.rb:44:1:44:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:44:1:44:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:44:12:44:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:44:12:44:20 | call to taint | type tracker without call steps | params_flow.rb:44:12:44:20 | call to taint | -| params_flow.rb:44:12:44:20 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | -| params_flow.rb:44:12:44:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:44:12:44:20 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | | params_flow.rb:44:12:44:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:44:12:44:20 | synthetic splat argument | | params_flow.rb:44:18:44:19 | 16 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:44:18:44:19 | 16 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:44:18:44:19 | 16 | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | -| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content element 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | +| params_flow.rb:44:18:44:19 | 16 | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:44:18:44:19 | 16 | type tracker without call steps | params_flow.rb:44:12:44:20 | call to taint | | params_flow.rb:44:18:44:19 | 16 | type tracker without call steps | params_flow.rb:44:18:44:19 | 16 | -| params_flow.rb:44:18:44:19 | 16 | type tracker without call steps with content splat position 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | -| params_flow.rb:44:18:44:19 | 16 | type tracker without call steps with content splat position 0 | params_flow.rb:44:12:44:20 | synthetic splat argument | +| params_flow.rb:44:18:44:19 | 16 | type tracker without call steps with content element 0 | params_flow.rb:44:1:44:28 | synthetic splat argument | +| params_flow.rb:44:18:44:19 | 16 | type tracker without call steps with content element 0 | params_flow.rb:44:12:44:20 | synthetic splat argument | | params_flow.rb:44:23:44:27 | * ... | type tracker without call steps | params_flow.rb:44:23:44:27 | * ... | | params_flow.rb:46:1:46:4 | args | type tracker without call steps | params_flow.rb:46:1:46:4 | args | | params_flow.rb:46:8:46:29 | Array | type tracker without call steps | params_flow.rb:46:8:46:29 | Array | | params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:8:46:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:8:46:29 | call to [] | type tracker without call steps | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:8:46:29 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:47:12:47:16 | * ... | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content element 0 or unknown | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:46:8:46:29 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:47:12:47:16 | * ... | | params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:46:9:46:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:9:46:17 | call to taint | type tracker without call steps | params_flow.rb:46:9:46:17 | call to taint | | params_flow.rb:46:9:46:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:9:46:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:46:9:46:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:47:12:47:16 | * ... | -| params_flow.rb:46:9:46:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:46:9:46:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:46:9:46:17 | synthetic splat argument | | params_flow.rb:46:15:46:16 | 18 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:46:15:46:16 | 18 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:15:46:16 | 18 | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content element 0 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:46:15:46:16 | 18 | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:46:15:46:16 | 18 | type tracker without call steps | params_flow.rb:46:9:46:17 | call to taint | | params_flow.rb:46:15:46:16 | 18 | type tracker without call steps | params_flow.rb:46:15:46:16 | 18 | | params_flow.rb:46:15:46:16 | 18 | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:15:46:16 | 18 | type tracker without call steps with content element 0 | params_flow.rb:46:8:46:29 | synthetic splat argument | +| params_flow.rb:46:15:46:16 | 18 | type tracker without call steps with content element 0 | params_flow.rb:46:9:46:17 | synthetic splat argument | | params_flow.rb:46:15:46:16 | 18 | type tracker without call steps with content element 0 | params_flow.rb:47:12:47:16 | * ... | -| params_flow.rb:46:15:46:16 | 18 | type tracker without call steps with content splat position 0 | params_flow.rb:46:9:46:17 | synthetic splat argument | | params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | +| params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:20:46:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:46:20:46:28 | call to taint | type tracker without call steps | params_flow.rb:46:20:46:28 | call to taint | | params_flow.rb:46:20:46:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:20:46:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:46:20:46:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:47:12:47:16 | * ... | -| params_flow.rb:46:20:46:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:46:20:46:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:46:20:46:28 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:46:26:46:27 | 19 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:46:26:46:27 | 19 | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | +| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content element 1 | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:46:26:46:27 | 19 | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | type tracker without call steps | params_flow.rb:46:20:46:28 | call to taint | | params_flow.rb:46:26:46:27 | 19 | type tracker without call steps | params_flow.rb:46:26:46:27 | 19 | +| params_flow.rb:46:26:46:27 | 19 | type tracker without call steps with content element 0 | params_flow.rb:46:20:46:28 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | call to [] | | params_flow.rb:46:26:46:27 | 19 | type tracker without call steps with content element 1 | params_flow.rb:46:8:46:29 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | type tracker without call steps with content element 1 | params_flow.rb:47:12:47:16 | * ... | -| params_flow.rb:46:26:46:27 | 19 | type tracker without call steps with content splat position 0 | params_flow.rb:46:20:46:28 | synthetic splat argument | | params_flow.rb:47:1:47:17 | call to positional | type tracker without call steps | params_flow.rb:47:1:47:17 | call to positional | | params_flow.rb:47:12:47:16 | * ... | type tracker with call steps | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:47:12:47:16 | * ... | type tracker without call steps | params_flow.rb:47:12:47:16 | * ... | @@ -1294,271 +1164,233 @@ track | params_flow.rb:49:1:53:3 | self in posargs | type tracker without call steps | params_flow.rb:49:1:53:3 | self in posargs | | params_flow.rb:49:1:53:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:49:13:49:14 | p1 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:49:13:49:14 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:49:13:49:14 | p1 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:49:13:49:14 | p1 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:49:13:49:14 | p1 | type tracker without call steps | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:49:13:49:14 | p1 | type tracker without call steps | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:49:13:49:14 | p1 | type tracker without call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:49:13:49:14 | p1 | type tracker without call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:49:17:49:24 | *posargs | type tracker without call steps | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:49:18:49:24 | posargs | type tracker without call steps | params_flow.rb:49:18:49:24 | posargs | | params_flow.rb:50:5:50:11 | call to sink | type tracker without call steps | params_flow.rb:50:5:50:11 | call to sink | -| params_flow.rb:50:5:50:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:50:5:50:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:51:5:51:21 | call to sink | type tracker without call steps | params_flow.rb:51:5:51:21 | call to sink | -| params_flow.rb:51:5:51:21 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:51:5:51:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:51:11:51:20 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:51:11:51:20 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:51:11:51:20 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:51:11:51:20 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:51:11:51:20 | ...[...] | type tracker without call steps | params_flow.rb:51:11:51:20 | ...[...] | -| params_flow.rb:51:11:51:20 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:51:11:51:20 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:51:11:51:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:51:11:51:20 | synthetic splat argument | | params_flow.rb:51:19:51:19 | 0 | type tracker without call steps | params_flow.rb:51:19:51:19 | 0 | -| params_flow.rb:51:19:51:19 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:51:11:51:20 | synthetic splat argument | +| params_flow.rb:51:19:51:19 | 0 | type tracker without call steps with content element 0 | params_flow.rb:51:11:51:20 | synthetic splat argument | | params_flow.rb:52:5:52:21 | call to sink | type tracker without call steps | params_flow.rb:52:5:52:21 | call to sink | | params_flow.rb:52:5:52:21 | call to sink | type tracker without call steps | params_flow.rb:55:1:55:29 | call to posargs | | params_flow.rb:52:5:52:21 | call to sink | type tracker without call steps | params_flow.rb:58:1:58:25 | call to posargs | | params_flow.rb:52:5:52:21 | call to sink | type tracker without call steps | params_flow.rb:61:1:61:14 | call to posargs | -| params_flow.rb:52:5:52:21 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:52:5:52:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:52:5:52:21 | synthetic splat argument | | params_flow.rb:52:11:52:20 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:52:11:52:20 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:52:11:52:20 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:52:11:52:20 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:52:11:52:20 | ...[...] | type tracker without call steps | params_flow.rb:52:11:52:20 | ...[...] | -| params_flow.rb:52:11:52:20 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:52:5:52:21 | synthetic splat argument | +| params_flow.rb:52:11:52:20 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:52:5:52:21 | synthetic splat argument | | params_flow.rb:52:11:52:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:52:11:52:20 | synthetic splat argument | | params_flow.rb:52:19:52:19 | 1 | type tracker without call steps | params_flow.rb:52:19:52:19 | 1 | -| params_flow.rb:52:19:52:19 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:52:11:52:20 | synthetic splat argument | +| params_flow.rb:52:19:52:19 | 1 | type tracker without call steps with content element 0 | params_flow.rb:52:11:52:20 | synthetic splat argument | | params_flow.rb:55:1:55:29 | call to posargs | type tracker without call steps | params_flow.rb:55:1:55:29 | call to posargs | | params_flow.rb:55:1:55:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:55:1:55:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:55:1:55:29 | synthetic splat argument | | params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:55:9:55:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:55:9:55:17 | call to taint | type tracker without call steps | params_flow.rb:55:9:55:17 | call to taint | -| params_flow.rb:55:9:55:17 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | -| params_flow.rb:55:9:55:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:55:9:55:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | | params_flow.rb:55:9:55:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:55:9:55:17 | synthetic splat argument | | params_flow.rb:55:15:55:16 | 20 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:55:15:55:16 | 20 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:55:15:55:16 | 20 | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content splat position 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:55:15:55:16 | 20 | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:55:15:55:16 | 20 | type tracker without call steps | params_flow.rb:55:9:55:17 | call to taint | | params_flow.rb:55:15:55:16 | 20 | type tracker without call steps | params_flow.rb:55:15:55:16 | 20 | -| params_flow.rb:55:15:55:16 | 20 | type tracker without call steps with content splat position 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | -| params_flow.rb:55:15:55:16 | 20 | type tracker without call steps with content splat position 0 | params_flow.rb:55:9:55:17 | synthetic splat argument | +| params_flow.rb:55:15:55:16 | 20 | type tracker without call steps with content element 0 | params_flow.rb:55:1:55:29 | synthetic splat argument | +| params_flow.rb:55:15:55:16 | 20 | type tracker without call steps with content element 0 | params_flow.rb:55:9:55:17 | synthetic splat argument | | params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:55:20:55:28 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:55:20:55:28 | call to taint | type tracker without call steps | params_flow.rb:55:20:55:28 | call to taint | -| params_flow.rb:55:20:55:28 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | -| params_flow.rb:55:20:55:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:55:20:55:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | | params_flow.rb:55:20:55:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:55:20:55:28 | synthetic splat argument | | params_flow.rb:55:26:55:27 | 21 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:55:26:55:27 | 21 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:55:26:55:27 | 21 | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content splat position 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:55:26:55:27 | 21 | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:55:26:55:27 | 21 | type tracker without call steps | params_flow.rb:55:20:55:28 | call to taint | | params_flow.rb:55:26:55:27 | 21 | type tracker without call steps | params_flow.rb:55:26:55:27 | 21 | -| params_flow.rb:55:26:55:27 | 21 | type tracker without call steps with content splat position 0 | params_flow.rb:55:20:55:28 | synthetic splat argument | -| params_flow.rb:55:26:55:27 | 21 | type tracker without call steps with content splat position 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | +| params_flow.rb:55:26:55:27 | 21 | type tracker without call steps with content element 0 | params_flow.rb:55:20:55:28 | synthetic splat argument | +| params_flow.rb:55:26:55:27 | 21 | type tracker without call steps with content element 1 | params_flow.rb:55:1:55:29 | synthetic splat argument | | params_flow.rb:57:1:57:4 | args | type tracker without call steps | params_flow.rb:57:1:57:4 | args | | params_flow.rb:57:8:57:18 | Array | type tracker without call steps | params_flow.rb:57:8:57:18 | Array | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | +| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:58:20:58:24 | * ... | -| params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:58:1:58:25 | synthetic splat argument | +| params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | +| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:57:8:57:18 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:58:20:58:24 | * ... | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:58:1:58:25 | synthetic splat argument | +| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps | params_flow.rb:57:9:57:17 | call to taint | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | synthetic splat argument | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:58:20:58:24 | * ... | -| params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:58:1:58:25 | synthetic splat argument | -| params_flow.rb:57:9:57:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:57:9:57:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:57:9:57:17 | synthetic splat argument | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | +| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps | params_flow.rb:57:9:57:17 | call to taint | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps | params_flow.rb:57:15:57:16 | 22 | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | synthetic splat argument | +| params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:57:9:57:17 | synthetic splat argument | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:58:20:58:24 | * ... | -| params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content splat position 0 | params_flow.rb:57:9:57:17 | synthetic splat argument | -| params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:58:1:58:25 | synthetic splat argument | +| params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:1:58:25 | call to posargs | type tracker without call steps | params_flow.rb:58:1:58:25 | call to posargs | | params_flow.rb:58:1:58:25 | synthetic splat argument | type tracker with call steps | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:58:1:58:25 | synthetic splat argument | type tracker without call steps | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:58:9:58:17 | call to taint | type tracker without call steps | params_flow.rb:58:9:58:17 | call to taint | -| params_flow.rb:58:9:58:17 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | -| params_flow.rb:58:9:58:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:58:9:58:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:9:58:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:58:9:58:17 | synthetic splat argument | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content splat position 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | +| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:58:15:58:16 | 23 | type tracker without call steps | params_flow.rb:58:9:58:17 | call to taint | | params_flow.rb:58:15:58:16 | 23 | type tracker without call steps | params_flow.rb:58:15:58:16 | 23 | -| params_flow.rb:58:15:58:16 | 23 | type tracker without call steps with content splat position 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | -| params_flow.rb:58:15:58:16 | 23 | type tracker without call steps with content splat position 0 | params_flow.rb:58:9:58:17 | synthetic splat argument | +| params_flow.rb:58:15:58:16 | 23 | type tracker without call steps with content element 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | +| params_flow.rb:58:15:58:16 | 23 | type tracker without call steps with content element 0 | params_flow.rb:58:9:58:17 | synthetic splat argument | | params_flow.rb:58:20:58:24 | * ... | type tracker with call steps | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:58:20:58:24 | * ... | type tracker without call steps | params_flow.rb:58:20:58:24 | * ... | | params_flow.rb:60:1:60:4 | args | type tracker without call steps | params_flow.rb:60:1:60:4 | args | | params_flow.rb:60:8:60:29 | Array | type tracker without call steps | params_flow.rb:60:8:60:29 | Array | | params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | +| params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:8:60:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:8:60:29 | call to [] | type tracker without call steps | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:8:60:29 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:61:9:61:13 | * ... | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | +| params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:60:8:60:29 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:61:9:61:13 | * ... | | params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | +| params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:60:9:60:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:9:60:17 | call to taint | type tracker without call steps | params_flow.rb:60:9:60:17 | call to taint | | params_flow.rb:60:9:60:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:9:60:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:60:9:60:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:61:9:61:13 | * ... | -| params_flow.rb:60:9:60:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:60:9:60:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:60:9:60:17 | synthetic splat argument | | params_flow.rb:60:15:60:16 | 24 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:60:15:60:16 | 24 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:15:60:16 | 24 | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | +| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content splat position 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | +| params_flow.rb:60:15:60:16 | 24 | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:60:15:60:16 | 24 | type tracker without call steps | params_flow.rb:60:9:60:17 | call to taint | | params_flow.rb:60:15:60:16 | 24 | type tracker without call steps | params_flow.rb:60:15:60:16 | 24 | | params_flow.rb:60:15:60:16 | 24 | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:15:60:16 | 24 | type tracker without call steps with content element 0 | params_flow.rb:60:8:60:29 | synthetic splat argument | +| params_flow.rb:60:15:60:16 | 24 | type tracker without call steps with content element 0 | params_flow.rb:60:9:60:17 | synthetic splat argument | | params_flow.rb:60:15:60:16 | 24 | type tracker without call steps with content element 0 | params_flow.rb:61:9:61:13 | * ... | -| params_flow.rb:60:15:60:16 | 24 | type tracker without call steps with content splat position 0 | params_flow.rb:60:9:60:17 | synthetic splat argument | | params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | +| params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:20:60:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:60:20:60:28 | call to taint | type tracker without call steps | params_flow.rb:60:20:60:28 | call to taint | | params_flow.rb:60:20:60:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:20:60:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:60:20:60:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:61:9:61:13 | * ... | -| params_flow.rb:60:20:60:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:60:20:60:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:60:20:60:28 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:60:26:60:27 | 25 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:60:26:60:27 | 25 | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | +| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | +| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | -| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:60:26:60:27 | 25 | type tracker with call steps with content splat position 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker without call steps | params_flow.rb:60:20:60:28 | call to taint | | params_flow.rb:60:26:60:27 | 25 | type tracker without call steps | params_flow.rb:60:26:60:27 | 25 | +| params_flow.rb:60:26:60:27 | 25 | type tracker without call steps with content element 0 | params_flow.rb:60:20:60:28 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | call to [] | | params_flow.rb:60:26:60:27 | 25 | type tracker without call steps with content element 1 | params_flow.rb:60:8:60:29 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | type tracker without call steps with content element 1 | params_flow.rb:61:9:61:13 | * ... | -| params_flow.rb:60:26:60:27 | 25 | type tracker without call steps with content splat position 0 | params_flow.rb:60:20:60:28 | synthetic splat argument | | params_flow.rb:61:1:61:14 | call to posargs | type tracker without call steps | params_flow.rb:61:1:61:14 | call to posargs | | params_flow.rb:61:9:61:13 | * ... | type tracker with call steps | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:61:9:61:13 | * ... | type tracker without call steps | params_flow.rb:61:9:61:13 | * ... | | params_flow.rb:63:1:63:4 | args | type tracker without call steps | params_flow.rb:63:1:63:4 | args | | params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps | params_flow.rb:65:10:65:13 | ...[...] | +| params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:64:16:64:17 | *x | -| params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:63:8:63:16 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:63:8:63:16 | call to taint | type tracker without call steps | params_flow.rb:63:8:63:16 | call to taint | | params_flow.rb:63:8:63:16 | call to taint | type tracker without call steps with content element 0 or unknown | params_flow.rb:67:12:67:16 | * ... | -| params_flow.rb:63:8:63:16 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:63:8:63:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:63:8:63:16 | synthetic splat argument | | params_flow.rb:63:14:63:15 | 26 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:63:14:63:15 | 26 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:63:14:63:15 | 26 | type tracker with call steps | params_flow.rb:65:10:65:13 | ...[...] | +| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content element 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content element 0 or unknown | params_flow.rb:64:16:64:17 | *x | -| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:63:14:63:15 | 26 | type tracker with call steps with content splat position 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:63:14:63:15 | 26 | type tracker without call steps | params_flow.rb:63:8:63:16 | call to taint | | params_flow.rb:63:14:63:15 | 26 | type tracker without call steps | params_flow.rb:63:14:63:15 | 26 | +| params_flow.rb:63:14:63:15 | 26 | type tracker without call steps with content element 0 | params_flow.rb:63:8:63:16 | synthetic splat argument | | params_flow.rb:63:14:63:15 | 26 | type tracker without call steps with content element 0 or unknown | params_flow.rb:67:12:67:16 | * ... | -| params_flow.rb:63:14:63:15 | 26 | type tracker without call steps with content splat position 0 | params_flow.rb:63:8:63:16 | synthetic splat argument | | params_flow.rb:64:1:66:3 | &block | type tracker without call steps | params_flow.rb:64:1:66:3 | &block | | params_flow.rb:64:1:66:3 | self in splatstuff | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:64:1:66:3 | self in splatstuff | type tracker without call steps | params_flow.rb:64:1:66:3 | self in splatstuff | @@ -1567,16 +1399,14 @@ track | params_flow.rb:64:17:64:17 | x | type tracker without call steps | params_flow.rb:64:17:64:17 | x | | params_flow.rb:65:5:65:13 | call to sink | type tracker without call steps | params_flow.rb:65:5:65:13 | call to sink | | params_flow.rb:65:5:65:13 | call to sink | type tracker without call steps | params_flow.rb:67:1:67:17 | call to splatstuff | -| params_flow.rb:65:5:65:13 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:65:5:65:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:65:10:65:13 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:65:10:65:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:65:10:65:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:65:10:65:13 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:65:10:65:13 | ...[...] | type tracker without call steps | params_flow.rb:65:10:65:13 | ...[...] | -| params_flow.rb:65:10:65:13 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | +| params_flow.rb:65:10:65:13 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:65:10:65:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:65:10:65:13 | synthetic splat argument | | params_flow.rb:65:12:65:12 | 0 | type tracker without call steps | params_flow.rb:65:12:65:12 | 0 | -| params_flow.rb:65:12:65:12 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:65:10:65:13 | synthetic splat argument | +| params_flow.rb:65:12:65:12 | 0 | type tracker without call steps with content element 0 | params_flow.rb:65:10:65:13 | synthetic splat argument | | params_flow.rb:67:1:67:17 | call to splatstuff | type tracker without call steps | params_flow.rb:67:1:67:17 | call to splatstuff | | params_flow.rb:67:12:67:16 | * ... | type tracker with call steps | params_flow.rb:64:16:64:17 | *x | | params_flow.rb:67:12:67:16 | * ... | type tracker without call steps | params_flow.rb:67:12:67:16 | * ... | @@ -1586,905 +1416,765 @@ track | params_flow.rb:69:1:76:3 | splatmid | type tracker without call steps | params_flow.rb:69:1:76:3 | splatmid | | params_flow.rb:69:1:76:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:69:14:69:14 | x | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:69:14:69:14 | x | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:69:14:69:14 | x | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:69:14:69:14 | x | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:69:14:69:14 | x | type tracker without call steps | params_flow.rb:69:14:69:14 | x | | params_flow.rb:69:14:69:14 | x | type tracker without call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:69:14:69:14 | x | type tracker without call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:69:14:69:14 | x | type tracker without call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:69:17:69:17 | y | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:69:17:69:17 | y | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:69:17:69:17 | y | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:69:17:69:17 | y | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:69:17:69:17 | y | type tracker without call steps | params_flow.rb:69:17:69:17 | y | | params_flow.rb:69:17:69:17 | y | type tracker without call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:69:17:69:17 | y | type tracker without call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:69:17:69:17 | y | type tracker without call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | | params_flow.rb:69:20:69:21 | *z | type tracker without call steps | params_flow.rb:69:20:69:21 | *z | | params_flow.rb:69:21:69:21 | z | type tracker without call steps | params_flow.rb:69:21:69:21 | z | | params_flow.rb:69:24:69:24 | w | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:69:24:69:24 | w | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:69:24:69:24 | w | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:69:24:69:24 | w | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:69:24:69:24 | w | type tracker without call steps | params_flow.rb:69:24:69:24 | w | | params_flow.rb:69:24:69:24 | w | type tracker without call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:69:24:69:24 | w | type tracker without call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:69:24:69:24 | w | type tracker without call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:69:27:69:27 | r | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:69:27:69:27 | r | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:69:27:69:27 | r | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:69:27:69:27 | r | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:69:27:69:27 | r | type tracker without call steps | params_flow.rb:69:27:69:27 | r | | params_flow.rb:69:27:69:27 | r | type tracker without call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:69:27:69:27 | r | type tracker without call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | +| params_flow.rb:69:27:69:27 | r | type tracker without call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:70:5:70:10 | call to sink | type tracker without call steps | params_flow.rb:70:5:70:10 | call to sink | -| params_flow.rb:70:5:70:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:70:5:70:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:71:5:71:10 | call to sink | type tracker without call steps | params_flow.rb:71:5:71:10 | call to sink | -| params_flow.rb:71:5:71:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:71:5:71:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:71:5:71:10 | synthetic splat argument | | params_flow.rb:72:5:72:13 | call to sink | type tracker without call steps | params_flow.rb:72:5:72:13 | call to sink | -| params_flow.rb:72:5:72:13 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:72:5:72:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:72:5:72:13 | synthetic splat argument | | params_flow.rb:72:10:72:13 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:72:10:72:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:72:10:72:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:72:10:72:13 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:72:10:72:13 | ...[...] | type tracker without call steps | params_flow.rb:72:10:72:13 | ...[...] | -| params_flow.rb:72:10:72:13 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:72:5:72:13 | synthetic splat argument | +| params_flow.rb:72:10:72:13 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:72:5:72:13 | synthetic splat argument | | params_flow.rb:72:10:72:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:72:10:72:13 | synthetic splat argument | | params_flow.rb:72:12:72:12 | 0 | type tracker without call steps | params_flow.rb:72:12:72:12 | 0 | -| params_flow.rb:72:12:72:12 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:72:10:72:13 | synthetic splat argument | +| params_flow.rb:72:12:72:12 | 0 | type tracker without call steps with content element 0 | params_flow.rb:72:10:72:13 | synthetic splat argument | | params_flow.rb:73:5:73:13 | call to sink | type tracker without call steps | params_flow.rb:73:5:73:13 | call to sink | -| params_flow.rb:73:5:73:13 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:73:5:73:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:73:5:73:13 | synthetic splat argument | | params_flow.rb:73:10:73:13 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:73:10:73:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:73:10:73:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:73:10:73:13 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:73:10:73:13 | ...[...] | type tracker without call steps | params_flow.rb:73:10:73:13 | ...[...] | -| params_flow.rb:73:10:73:13 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:73:5:73:13 | synthetic splat argument | +| params_flow.rb:73:10:73:13 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:73:5:73:13 | synthetic splat argument | | params_flow.rb:73:10:73:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:73:10:73:13 | synthetic splat argument | | params_flow.rb:73:12:73:12 | 1 | type tracker without call steps | params_flow.rb:73:12:73:12 | 1 | -| params_flow.rb:73:12:73:12 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:73:10:73:13 | synthetic splat argument | +| params_flow.rb:73:12:73:12 | 1 | type tracker without call steps with content element 0 | params_flow.rb:73:10:73:13 | synthetic splat argument | | params_flow.rb:74:5:74:10 | call to sink | type tracker without call steps | params_flow.rb:74:5:74:10 | call to sink | -| params_flow.rb:74:5:74:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:74:5:74:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:75:5:75:10 | call to sink | type tracker without call steps | params_flow.rb:75:5:75:10 | call to sink | | params_flow.rb:75:5:75:10 | call to sink | type tracker without call steps | params_flow.rb:78:1:78:63 | call to splatmid | | params_flow.rb:75:5:75:10 | call to sink | type tracker without call steps | params_flow.rb:81:1:81:37 | call to splatmid | | params_flow.rb:75:5:75:10 | call to sink | type tracker without call steps | params_flow.rb:96:1:96:88 | call to splatmid | -| params_flow.rb:75:5:75:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:75:5:75:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:78:1:78:63 | call to splatmid | type tracker without call steps | params_flow.rb:78:1:78:63 | call to splatmid | | params_flow.rb:78:1:78:63 | synthetic splat argument | type tracker with call steps | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:1:78:63 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:10:78:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:78:10:78:18 | call to taint | type tracker without call steps | params_flow.rb:78:10:78:18 | call to taint | -| params_flow.rb:78:10:78:18 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:10:78:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:78:10:78:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:10:78:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:10:78:18 | synthetic splat argument | | params_flow.rb:78:16:78:17 | 27 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:16:78:17 | 27 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:16:78:17 | 27 | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:16:78:17 | 27 | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:78:16:78:17 | 27 | type tracker without call steps | params_flow.rb:78:10:78:18 | call to taint | | params_flow.rb:78:16:78:17 | 27 | type tracker without call steps | params_flow.rb:78:16:78:17 | 27 | -| params_flow.rb:78:16:78:17 | 27 | type tracker without call steps with content splat position 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:16:78:17 | 27 | type tracker without call steps with content splat position 0 | params_flow.rb:78:10:78:18 | synthetic splat argument | +| params_flow.rb:78:16:78:17 | 27 | type tracker without call steps with content element 0 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:78:16:78:17 | 27 | type tracker without call steps with content element 0 | params_flow.rb:78:10:78:18 | synthetic splat argument | | params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:78:21:78:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:21:78:29 | call to taint | type tracker without call steps | params_flow.rb:78:21:78:29 | call to taint | -| params_flow.rb:78:21:78:29 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:21:78:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:78:21:78:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:21:78:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:21:78:29 | synthetic splat argument | | params_flow.rb:78:27:78:28 | 28 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:27:78:28 | 28 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:27:78:28 | 28 | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content splat position 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:78:27:78:28 | 28 | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:27:78:28 | 28 | type tracker without call steps | params_flow.rb:78:21:78:29 | call to taint | | params_flow.rb:78:27:78:28 | 28 | type tracker without call steps | params_flow.rb:78:27:78:28 | 28 | -| params_flow.rb:78:27:78:28 | 28 | type tracker without call steps with content splat position 0 | params_flow.rb:78:21:78:29 | synthetic splat argument | -| params_flow.rb:78:27:78:28 | 28 | type tracker without call steps with content splat position 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:32:78:40 | call to taint | type tracker with call steps with content splat position 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:27:78:28 | 28 | type tracker without call steps with content element 0 | params_flow.rb:78:21:78:29 | synthetic splat argument | +| params_flow.rb:78:27:78:28 | 28 | type tracker without call steps with content element 1 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:78:32:78:40 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:32:78:40 | call to taint | type tracker without call steps | params_flow.rb:78:32:78:40 | call to taint | -| params_flow.rb:78:32:78:40 | call to taint | type tracker without call steps with content splat position 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:32:78:40 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:78:32:78:40 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:32:78:40 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:32:78:40 | synthetic splat argument | | params_flow.rb:78:38:78:39 | 29 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:78:38:78:39 | 29 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:78:38:78:39 | 29 | type tracker with call steps with content splat position 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:38:78:39 | 29 | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:38:78:39 | 29 | type tracker without call steps | params_flow.rb:78:32:78:40 | call to taint | | params_flow.rb:78:38:78:39 | 29 | type tracker without call steps | params_flow.rb:78:38:78:39 | 29 | -| params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content splat position 0 | params_flow.rb:78:32:78:40 | synthetic splat argument | -| params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content splat position 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content element 0 | params_flow.rb:78:32:78:40 | synthetic splat argument | +| params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content element 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content splat position 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:43:78:51 | call to taint | type tracker without call steps | params_flow.rb:78:43:78:51 | call to taint | -| params_flow.rb:78:43:78:51 | call to taint | type tracker without call steps with content splat position 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:43:78:51 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:78:43:78:51 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:43:78:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:43:78:51 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content splat position 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps | params_flow.rb:78:43:78:51 | call to taint | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps | params_flow.rb:78:49:78:50 | 30 | -| params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content splat position 0 | params_flow.rb:78:43:78:51 | synthetic splat argument | -| params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content splat position 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content element 0 | params_flow.rb:78:43:78:51 | synthetic splat argument | +| params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content element 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content splat position 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | +| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:54:78:62 | call to taint | type tracker without call steps | params_flow.rb:78:54:78:62 | call to taint | -| params_flow.rb:78:54:78:62 | call to taint | type tracker without call steps with content splat position 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:54:78:62 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:78:54:78:62 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:54:78:62 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:54:78:62 | synthetic splat argument | | params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content splat position 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | +| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:60:78:61 | 31 | type tracker without call steps | params_flow.rb:78:54:78:62 | call to taint | | params_flow.rb:78:60:78:61 | 31 | type tracker without call steps | params_flow.rb:78:60:78:61 | 31 | -| params_flow.rb:78:60:78:61 | 31 | type tracker without call steps with content splat position 0 | params_flow.rb:78:54:78:62 | synthetic splat argument | -| params_flow.rb:78:60:78:61 | 31 | type tracker without call steps with content splat position 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | +| params_flow.rb:78:60:78:61 | 31 | type tracker without call steps with content element 0 | params_flow.rb:78:54:78:62 | synthetic splat argument | +| params_flow.rb:78:60:78:61 | 31 | type tracker without call steps with content element 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:80:1:80:4 | args | type tracker without call steps | params_flow.rb:80:1:80:4 | args | | params_flow.rb:80:8:80:51 | Array | type tracker without call steps | params_flow.rb:80:8:80:51 | Array | | params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:8:80:51 | call to [] | type tracker without call steps | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:8:80:51 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:8:80:51 | call to [] | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:8:80:51 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:80:9:80:17 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps | params_flow.rb:80:9:80:17 | call to taint | | params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:9:80:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:80:9:80:17 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:9:80:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:9:80:17 | synthetic splat argument | | params_flow.rb:80:15:80:16 | 33 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:80:15:80:16 | 33 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:80:15:80:16 | 33 | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:80:15:80:16 | 33 | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:15:80:16 | 33 | type tracker without call steps | params_flow.rb:80:9:80:17 | call to taint | | params_flow.rb:80:15:80:16 | 33 | type tracker without call steps | params_flow.rb:80:15:80:16 | 33 | | params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content element 0 | params_flow.rb:80:8:80:51 | synthetic splat argument | +| params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content element 0 | params_flow.rb:80:9:80:17 | synthetic splat argument | | params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content element 0 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content splat position 0 | params_flow.rb:80:9:80:17 | synthetic splat argument | -| params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:20:80:28 | call to taint | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:15:80:16 | 33 | type tracker without call steps with content element 1 | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:20:80:28 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps | params_flow.rb:80:20:80:28 | call to taint | | params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:20:80:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:80:20:80:28 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:20:80:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:20:80:28 | synthetic splat argument | | params_flow.rb:80:26:80:27 | 34 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:80:26:80:27 | 34 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:80:26:80:27 | 34 | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:26:80:27 | 34 | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:26:80:27 | 34 | type tracker without call steps | params_flow.rb:80:20:80:28 | call to taint | | params_flow.rb:80:26:80:27 | 34 | type tracker without call steps | params_flow.rb:80:26:80:27 | 34 | +| params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content element 0 | params_flow.rb:80:20:80:28 | synthetic splat argument | | params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content element 1 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content element 1 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content splat position 0 | params_flow.rb:80:20:80:28 | synthetic splat argument | -| params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:31:80:39 | call to taint | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:26:80:27 | 34 | type tracker without call steps with content element 2 | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:31:80:39 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps | params_flow.rb:80:31:80:39 | call to taint | | params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:31:80:39 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:80:31:80:39 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:31:80:39 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:31:80:39 | synthetic splat argument | | params_flow.rb:80:37:80:38 | 35 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:80:37:80:38 | 35 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:80:37:80:38 | 35 | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:37:80:38 | 35 | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:37:80:38 | 35 | type tracker without call steps | params_flow.rb:80:31:80:39 | call to taint | | params_flow.rb:80:37:80:38 | 35 | type tracker without call steps | params_flow.rb:80:37:80:38 | 35 | +| params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content element 0 | params_flow.rb:80:31:80:39 | synthetic splat argument | | params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content element 2 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content element 2 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content splat position 0 | params_flow.rb:80:31:80:39 | synthetic splat argument | -| params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:42:80:50 | call to taint | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:37:80:38 | 35 | type tracker without call steps with content element 3 | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:42:80:50 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps | params_flow.rb:80:42:80:50 | call to taint | | params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:80:42:80:50 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:80:42:80:50 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:80:42:80:50 | synthetic splat argument | type tracker without call steps | params_flow.rb:80:42:80:50 | synthetic splat argument | | params_flow.rb:80:48:80:49 | 36 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:80:48:80:49 | 36 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:80:48:80:49 | 36 | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:80:48:80:49 | 36 | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:80:48:80:49 | 36 | type tracker without call steps | params_flow.rb:80:42:80:50 | call to taint | | params_flow.rb:80:48:80:49 | 36 | type tracker without call steps | params_flow.rb:80:48:80:49 | 36 | +| params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content element 0 | params_flow.rb:80:42:80:50 | synthetic splat argument | | params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | call to [] | | params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content element 3 | params_flow.rb:80:8:80:51 | synthetic splat argument | | params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content element 3 | params_flow.rb:81:21:81:25 | * ... | -| params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content splat position 0 | params_flow.rb:80:42:80:50 | synthetic splat argument | -| params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:80:48:80:49 | 36 | type tracker without call steps with content element 4 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:81:1:81:37 | call to splatmid | type tracker without call steps | params_flow.rb:81:1:81:37 | call to splatmid | | params_flow.rb:81:1:81:37 | synthetic splat argument | type tracker with call steps | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:81:1:81:37 | synthetic splat argument | type tracker without call steps | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:81:10:81:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:81:10:81:18 | call to taint | type tracker without call steps | params_flow.rb:81:10:81:18 | call to taint | -| params_flow.rb:81:10:81:18 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:81:10:81:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:81:10:81:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | | params_flow.rb:81:10:81:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:81:10:81:18 | synthetic splat argument | | params_flow.rb:81:16:81:17 | 32 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:81:16:81:17 | 32 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:81:16:81:17 | 32 | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:81:16:81:17 | 32 | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:81:16:81:17 | 32 | type tracker without call steps | params_flow.rb:81:10:81:18 | call to taint | | params_flow.rb:81:16:81:17 | 32 | type tracker without call steps | params_flow.rb:81:16:81:17 | 32 | -| params_flow.rb:81:16:81:17 | 32 | type tracker without call steps with content splat position 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | -| params_flow.rb:81:16:81:17 | 32 | type tracker without call steps with content splat position 0 | params_flow.rb:81:10:81:18 | synthetic splat argument | +| params_flow.rb:81:16:81:17 | 32 | type tracker without call steps with content element 0 | params_flow.rb:81:1:81:37 | synthetic splat argument | +| params_flow.rb:81:16:81:17 | 32 | type tracker without call steps with content element 0 | params_flow.rb:81:10:81:18 | synthetic splat argument | | params_flow.rb:81:21:81:25 | * ... | type tracker without call steps | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:81:28:81:36 | call to taint | type tracker without call steps | params_flow.rb:81:28:81:36 | call to taint | -| params_flow.rb:81:28:81:36 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:81:28:81:36 | synthetic splat argument | type tracker without call steps | params_flow.rb:81:28:81:36 | synthetic splat argument | | params_flow.rb:81:34:81:35 | 37 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:81:34:81:35 | 37 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:81:34:81:35 | 37 | type tracker without call steps | params_flow.rb:81:28:81:36 | call to taint | | params_flow.rb:81:34:81:35 | 37 | type tracker without call steps | params_flow.rb:81:34:81:35 | 37 | -| params_flow.rb:81:34:81:35 | 37 | type tracker without call steps with content splat position 0 | params_flow.rb:81:28:81:36 | synthetic splat argument | +| params_flow.rb:81:34:81:35 | 37 | type tracker without call steps with content element 0 | params_flow.rb:81:28:81:36 | synthetic splat argument | | params_flow.rb:83:1:91:3 | &block | type tracker without call steps | params_flow.rb:83:1:91:3 | &block | | params_flow.rb:83:1:91:3 | pos_many | type tracker without call steps | params_flow.rb:83:1:91:3 | pos_many | | params_flow.rb:83:1:91:3 | self in pos_many | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:83:1:91:3 | self in pos_many | type tracker without call steps | params_flow.rb:83:1:91:3 | self in pos_many | | params_flow.rb:83:1:91:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:83:14:83:14 | t | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:14:83:14 | t | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:14:83:14 | t | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:14:83:14 | t | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:14:83:14 | t | type tracker without call steps | params_flow.rb:83:14:83:14 | t | | params_flow.rb:83:14:83:14 | t | type tracker without call steps | params_flow.rb:83:14:83:14 | t | -| params_flow.rb:83:14:83:14 | t | type tracker without call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:83:14:83:14 | t | type tracker without call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:83:17:83:17 | u | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:17:83:17 | u | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:17:83:17 | u | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:17:83:17 | u | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:17:83:17 | u | type tracker without call steps | params_flow.rb:83:17:83:17 | u | | params_flow.rb:83:17:83:17 | u | type tracker without call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:83:17:83:17 | u | type tracker without call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:83:17:83:17 | u | type tracker without call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:83:20:83:20 | v | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:20:83:20 | v | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:20:83:20 | v | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:20:83:20 | v | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:20:83:20 | v | type tracker without call steps | params_flow.rb:83:20:83:20 | v | | params_flow.rb:83:20:83:20 | v | type tracker without call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:83:20:83:20 | v | type tracker without call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:83:20:83:20 | v | type tracker without call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | | params_flow.rb:83:23:83:23 | w | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:23:83:23 | w | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:23:83:23 | w | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:23:83:23 | w | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:23:83:23 | w | type tracker without call steps | params_flow.rb:83:23:83:23 | w | | params_flow.rb:83:23:83:23 | w | type tracker without call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:83:23:83:23 | w | type tracker without call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:83:23:83:23 | w | type tracker without call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:83:26:83:26 | x | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:26:83:26 | x | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:26:83:26 | x | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:26:83:26 | x | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:26:83:26 | x | type tracker without call steps | params_flow.rb:83:26:83:26 | x | | params_flow.rb:83:26:83:26 | x | type tracker without call steps | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:83:26:83:26 | x | type tracker without call steps with content splat position 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | +| params_flow.rb:83:26:83:26 | x | type tracker without call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | | params_flow.rb:83:29:83:29 | y | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:29:83:29 | y | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:29:83:29 | y | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:29:83:29 | y | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:29:83:29 | y | type tracker without call steps | params_flow.rb:83:29:83:29 | y | | params_flow.rb:83:29:83:29 | y | type tracker without call steps | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:83:29:83:29 | y | type tracker without call steps with content splat position 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | +| params_flow.rb:83:29:83:29 | y | type tracker without call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:83:32:83:32 | z | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:83:32:83:32 | z | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:83:32:83:32 | z | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:83:32:83:32 | z | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:83:32:83:32 | z | type tracker without call steps | params_flow.rb:83:32:83:32 | z | | params_flow.rb:83:32:83:32 | z | type tracker without call steps | params_flow.rb:83:32:83:32 | z | -| params_flow.rb:83:32:83:32 | z | type tracker without call steps with content splat position 0 | params_flow.rb:90:5:90:10 | synthetic splat argument | +| params_flow.rb:83:32:83:32 | z | type tracker without call steps with content element 0 | params_flow.rb:90:5:90:10 | synthetic splat argument | | params_flow.rb:84:5:84:10 | call to sink | type tracker without call steps | params_flow.rb:84:5:84:10 | call to sink | -| params_flow.rb:84:5:84:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:84:5:84:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:85:5:85:10 | call to sink | type tracker without call steps | params_flow.rb:85:5:85:10 | call to sink | -| params_flow.rb:85:5:85:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:85:5:85:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:86:5:86:10 | call to sink | type tracker without call steps | params_flow.rb:86:5:86:10 | call to sink | -| params_flow.rb:86:5:86:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:86:5:86:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:86:5:86:10 | synthetic splat argument | | params_flow.rb:87:5:87:10 | call to sink | type tracker without call steps | params_flow.rb:87:5:87:10 | call to sink | -| params_flow.rb:87:5:87:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:87:5:87:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:88:5:88:10 | call to sink | type tracker without call steps | params_flow.rb:88:5:88:10 | call to sink | -| params_flow.rb:88:5:88:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:88:5:88:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:88:5:88:10 | synthetic splat argument | | params_flow.rb:89:5:89:10 | call to sink | type tracker without call steps | params_flow.rb:89:5:89:10 | call to sink | -| params_flow.rb:89:5:89:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:89:5:89:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:90:5:90:10 | call to sink | type tracker without call steps | params_flow.rb:90:5:90:10 | call to sink | | params_flow.rb:90:5:90:10 | call to sink | type tracker without call steps | params_flow.rb:94:1:94:48 | call to pos_many | | params_flow.rb:90:5:90:10 | call to sink | type tracker without call steps | params_flow.rb:131:1:131:46 | call to pos_many | -| params_flow.rb:90:5:90:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:90:5:90:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:90:5:90:10 | synthetic splat argument | | params_flow.rb:93:1:93:4 | args | type tracker without call steps | params_flow.rb:93:1:93:4 | args | | params_flow.rb:93:8:93:51 | Array | type tracker without call steps | params_flow.rb:93:8:93:51 | Array | | params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | -| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | call to [] | type tracker with call steps with content element 2 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:8:93:51 | call to [] | type tracker without call steps | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:8:93:51 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:8:93:51 | call to [] | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | call to [] | type tracker without call steps with content element 2 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | -| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker with call steps with content element 2 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:8:93:51 | synthetic splat argument | type tracker without call steps with content element 2 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | -| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:93:9:93:17 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps | params_flow.rb:93:9:93:17 | call to taint | | params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:93:9:93:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:93:9:93:17 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:9:93:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:9:93:17 | synthetic splat argument | | params_flow.rb:93:15:93:16 | 40 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:15:93:16 | 40 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:15:93:16 | 40 | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | -| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:93:15:93:16 | 40 | type tracker with call steps with content element 2 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:15:93:16 | 40 | type tracker without call steps | params_flow.rb:93:9:93:17 | call to taint | | params_flow.rb:93:15:93:16 | 40 | type tracker without call steps | params_flow.rb:93:15:93:16 | 40 | | params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content element 0 | params_flow.rb:93:8:93:51 | synthetic splat argument | +| params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content element 0 | params_flow.rb:93:9:93:17 | synthetic splat argument | | params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content element 0 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content splat position 0 | params_flow.rb:93:9:93:17 | synthetic splat argument | -| params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:15:93:16 | 40 | type tracker without call steps with content element 2 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | -| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:93:20:93:28 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps | params_flow.rb:93:20:93:28 | call to taint | | params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:93:20:93:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:93:20:93:28 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:20:93:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:20:93:28 | synthetic splat argument | | params_flow.rb:93:26:93:27 | 41 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:26:93:27 | 41 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:26:93:27 | 41 | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | -| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:93:26:93:27 | 41 | type tracker with call steps with content element 3 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:26:93:27 | 41 | type tracker without call steps | params_flow.rb:93:20:93:28 | call to taint | | params_flow.rb:93:26:93:27 | 41 | type tracker without call steps | params_flow.rb:93:26:93:27 | 41 | +| params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content element 0 | params_flow.rb:93:20:93:28 | synthetic splat argument | | params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content element 1 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content element 1 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content splat position 0 | params_flow.rb:93:20:93:28 | synthetic splat argument | -| params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:26:93:27 | 41 | type tracker without call steps with content element 3 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | -| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | +| params_flow.rb:93:31:93:39 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps | params_flow.rb:93:31:93:39 | call to taint | | params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:93:31:93:39 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:93:31:93:39 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:31:93:39 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:31:93:39 | synthetic splat argument | | params_flow.rb:93:37:93:38 | 42 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:37:93:38 | 42 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:37:93:38 | 42 | type tracker with call steps | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content splat position 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | -| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | +| params_flow.rb:93:37:93:38 | 42 | type tracker with call steps with content element 4 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:37:93:38 | 42 | type tracker without call steps | params_flow.rb:93:31:93:39 | call to taint | | params_flow.rb:93:37:93:38 | 42 | type tracker without call steps | params_flow.rb:93:37:93:38 | 42 | +| params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content element 0 | params_flow.rb:93:31:93:39 | synthetic splat argument | | params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content element 2 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content element 2 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content splat position 0 | params_flow.rb:93:31:93:39 | synthetic splat argument | -| params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:37:93:38 | 42 | type tracker without call steps with content element 4 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | -| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content splat position 5 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | +| params_flow.rb:93:42:93:50 | call to taint | type tracker with call steps with content element 5 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps | params_flow.rb:93:42:93:50 | call to taint | | params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps with content splat position 5 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:93:42:93:50 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:93:42:93:50 | call to taint | type tracker without call steps with content element 5 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:93:42:93:50 | synthetic splat argument | type tracker without call steps | params_flow.rb:93:42:93:50 | synthetic splat argument | | params_flow.rb:93:48:93:49 | 43 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:48:93:49 | 43 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:93:48:93:49 | 43 | type tracker with call steps | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content splat position 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | -| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content splat position 5 (shifted) | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | +| params_flow.rb:93:48:93:49 | 43 | type tracker with call steps with content element 5 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:93:48:93:49 | 43 | type tracker without call steps | params_flow.rb:93:42:93:50 | call to taint | | params_flow.rb:93:48:93:49 | 43 | type tracker without call steps | params_flow.rb:93:48:93:49 | 43 | +| params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content element 0 | params_flow.rb:93:42:93:50 | synthetic splat argument | | params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | call to [] | | params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content element 3 | params_flow.rb:93:8:93:51 | synthetic splat argument | | params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content element 3 | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content splat position 0 | params_flow.rb:93:42:93:50 | synthetic splat argument | -| params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content splat position 5 (shifted) | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:93:48:93:49 | 43 | type tracker without call steps with content element 5 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:1:94:48 | call to pos_many | type tracker without call steps | params_flow.rb:94:1:94:48 | call to pos_many | | params_flow.rb:94:1:94:48 | synthetic splat argument | type tracker with call steps | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:94:1:94:48 | synthetic splat argument | type tracker without call steps | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps | params_flow.rb:83:14:83:14 | t | -| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:94:10:94:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:94:10:94:18 | call to taint | type tracker without call steps | params_flow.rb:94:10:94:18 | call to taint | -| params_flow.rb:94:10:94:18 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:94:10:94:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:94:10:94:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:10:94:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:94:10:94:18 | synthetic splat argument | | params_flow.rb:94:16:94:17 | 38 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:16:94:17 | 38 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:16:94:17 | 38 | type tracker with call steps | params_flow.rb:83:14:83:14 | t | -| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content splat position 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:94:16:94:17 | 38 | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:94:16:94:17 | 38 | type tracker without call steps | params_flow.rb:94:10:94:18 | call to taint | | params_flow.rb:94:16:94:17 | 38 | type tracker without call steps | params_flow.rb:94:16:94:17 | 38 | -| params_flow.rb:94:16:94:17 | 38 | type tracker without call steps with content splat position 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:94:16:94:17 | 38 | type tracker without call steps with content splat position 0 | params_flow.rb:94:10:94:18 | synthetic splat argument | +| params_flow.rb:94:16:94:17 | 38 | type tracker without call steps with content element 0 | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:94:16:94:17 | 38 | type tracker without call steps with content element 0 | params_flow.rb:94:10:94:18 | synthetic splat argument | | params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | -| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:94:21:94:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:94:21:94:29 | call to taint | type tracker without call steps | params_flow.rb:94:21:94:29 | call to taint | -| params_flow.rb:94:21:94:29 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | -| params_flow.rb:94:21:94:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:94:21:94:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:21:94:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:94:21:94:29 | synthetic splat argument | | params_flow.rb:94:27:94:28 | 39 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:27:94:28 | 39 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:27:94:28 | 39 | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | -| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content splat position 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | +| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:94:27:94:28 | 39 | type tracker with call steps with content element 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:94:27:94:28 | 39 | type tracker without call steps | params_flow.rb:94:21:94:29 | call to taint | | params_flow.rb:94:27:94:28 | 39 | type tracker without call steps | params_flow.rb:94:27:94:28 | 39 | -| params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content splat position 0 | params_flow.rb:94:21:94:29 | synthetic splat argument | -| params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content splat position 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content element 0 | params_flow.rb:94:21:94:29 | synthetic splat argument | +| params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content element 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:32:94:36 | * ... | type tracker without call steps | params_flow.rb:94:32:94:36 | * ... | | params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:94:39:94:47 | call to taint | type tracker without call steps | params_flow.rb:94:39:94:47 | call to taint | -| params_flow.rb:94:39:94:47 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:94:39:94:47 | synthetic splat argument | type tracker without call steps | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps | params_flow.rb:94:45:94:46 | 44 | -| params_flow.rb:94:45:94:46 | 44 | type tracker without call steps with content splat position 0 | params_flow.rb:94:39:94:47 | synthetic splat argument | +| params_flow.rb:94:45:94:46 | 44 | type tracker without call steps with content element 0 | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:96:1:96:88 | call to splatmid | type tracker without call steps | params_flow.rb:96:1:96:88 | call to splatmid | | params_flow.rb:96:1:96:88 | synthetic splat argument | type tracker with call steps | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:1:96:88 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:96:10:96:18 | call to taint | type tracker without call steps | params_flow.rb:96:10:96:18 | call to taint | -| params_flow.rb:96:10:96:18 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:10:96:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:96:10:96:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:10:96:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:10:96:18 | synthetic splat argument | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps | params_flow.rb:69:14:69:14 | x | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content splat position 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content splat position 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | +| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:96:16:96:17 | 45 | type tracker without call steps | params_flow.rb:96:10:96:18 | call to taint | | params_flow.rb:96:16:96:17 | 45 | type tracker without call steps | params_flow.rb:96:16:96:17 | 45 | -| params_flow.rb:96:16:96:17 | 45 | type tracker without call steps with content splat position 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:16:96:17 | 45 | type tracker without call steps with content splat position 0 | params_flow.rb:96:10:96:18 | synthetic splat argument | +| params_flow.rb:96:16:96:17 | 45 | type tracker without call steps with content element 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:16:96:17 | 45 | type tracker without call steps with content element 0 | params_flow.rb:96:10:96:18 | synthetic splat argument | | params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:21:96:29 | call to taint | type tracker without call steps | params_flow.rb:96:21:96:29 | call to taint | -| params_flow.rb:96:21:96:29 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:21:96:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:96:21:96:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:21:96:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:21:96:29 | synthetic splat argument | | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content splat position 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content splat position 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | +| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps | params_flow.rb:96:21:96:29 | call to taint | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps | params_flow.rb:96:27:96:28 | 46 | -| params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content splat position 0 | params_flow.rb:96:21:96:29 | synthetic splat argument | -| params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content splat position 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content element 0 | params_flow.rb:96:21:96:29 | synthetic splat argument | +| params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content element 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:32:96:65 | * ... | type tracker without call steps | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:33:96:65 | Array | type tracker without call steps | params_flow.rb:96:33:96:65 | Array | -| params_flow.rb:96:33:96:65 | call to [] | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:33:96:65 | call to [] | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:96:32:96:65 | * ... | -| params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:96:32:96:65 | * ... | -| params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:34:96:42 | call to taint | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:34:96:42 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps | params_flow.rb:96:34:96:42 | call to taint | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:34:96:42 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:34:96:42 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:34:96:42 | synthetic splat argument | | params_flow.rb:96:40:96:41 | 47 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:40:96:41 | 47 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:40:96:41 | 47 | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:40:96:41 | 47 | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps | params_flow.rb:96:34:96:42 | call to taint | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps | params_flow.rb:96:40:96:41 | 47 | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content splat position 0 | params_flow.rb:96:34:96:42 | synthetic splat argument | -| params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:45:96:53 | call to taint | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:34:96:42 | synthetic splat argument | +| params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:45:96:53 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps | params_flow.rb:96:45:96:53 | call to taint | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:45:96:53 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:45:96:53 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:45:96:53 | synthetic splat argument | | params_flow.rb:96:51:96:52 | 48 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:51:96:52 | 48 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:51:96:52 | 48 | type tracker with call steps with content splat position 3 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:51:96:52 | 48 | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps | params_flow.rb:96:45:96:53 | call to taint | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps | params_flow.rb:96:51:96:52 | 48 | +| params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 0 | params_flow.rb:96:45:96:53 | synthetic splat argument | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 1 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content splat position 0 | params_flow.rb:96:45:96:53 | synthetic splat argument | -| params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content splat position 3 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:56:96:64 | call to taint | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 3 | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:56:96:64 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps | params_flow.rb:96:56:96:64 | call to taint | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:56:96:64 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:56:96:64 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:56:96:64 | synthetic splat argument | | params_flow.rb:96:62:96:63 | 49 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:62:96:63 | 49 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:62:96:63 | 49 | type tracker with call steps with content splat position 4 (shifted) | params_flow.rb:69:1:76:3 | synthetic splat parameter | +| params_flow.rb:96:62:96:63 | 49 | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps | params_flow.rb:96:56:96:64 | call to taint | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps | params_flow.rb:96:62:96:63 | 49 | +| params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 0 | params_flow.rb:96:56:96:64 | synthetic splat argument | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 2 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | synthetic splat argument | -| params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content splat position 0 | params_flow.rb:96:56:96:64 | synthetic splat argument | -| params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content splat position 4 (shifted) | params_flow.rb:96:1:96:88 | synthetic splat argument | +| params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:96:68:96:76 | call to taint | type tracker without call steps | params_flow.rb:96:68:96:76 | call to taint | -| params_flow.rb:96:68:96:76 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:68:96:76 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:68:96:76 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content splat position 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | +| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | type tracker without call steps | params_flow.rb:96:68:96:76 | call to taint | | params_flow.rb:96:74:96:75 | 50 | type tracker without call steps | params_flow.rb:96:74:96:75 | 50 | -| params_flow.rb:96:74:96:75 | 50 | type tracker without call steps with content splat position 0 | params_flow.rb:96:68:96:76 | synthetic splat argument | +| params_flow.rb:96:74:96:75 | 50 | type tracker without call steps with content element 0 | params_flow.rb:96:68:96:76 | synthetic splat argument | | params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | +| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:96:79:96:87 | call to taint | type tracker without call steps | params_flow.rb:96:79:96:87 | call to taint | -| params_flow.rb:96:79:96:87 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:79:96:87 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:79:96:87 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content splat position 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | +| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | type tracker without call steps | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:96:85:96:86 | 51 | type tracker without call steps | params_flow.rb:96:85:96:86 | 51 | -| params_flow.rb:96:85:96:86 | 51 | type tracker without call steps with content splat position 0 | params_flow.rb:96:79:96:87 | synthetic splat argument | +| params_flow.rb:96:85:96:86 | 51 | type tracker without call steps with content element 0 | params_flow.rb:96:79:96:87 | synthetic splat argument | | params_flow.rb:98:1:103:3 | &block | type tracker without call steps | params_flow.rb:98:1:103:3 | &block | | params_flow.rb:98:1:103:3 | self in splatmidsmall | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:98:1:103:3 | self in splatmidsmall | type tracker without call steps | params_flow.rb:98:1:103:3 | self in splatmidsmall | | params_flow.rb:98:1:103:3 | splatmidsmall | type tracker without call steps | params_flow.rb:98:1:103:3 | splatmidsmall | | params_flow.rb:98:1:103:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:98:19:98:19 | a | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:98:19:98:19 | a | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:98:19:98:19 | a | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:98:19:98:19 | a | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:98:19:98:19 | a | type tracker without call steps | params_flow.rb:98:19:98:19 | a | | params_flow.rb:98:19:98:19 | a | type tracker without call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:98:19:98:19 | a | type tracker without call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:98:19:98:19 | a | type tracker without call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:98:22:98:28 | *splats | type tracker without call steps | params_flow.rb:98:22:98:28 | *splats | | params_flow.rb:98:23:98:28 | splats | type tracker without call steps | params_flow.rb:98:23:98:28 | splats | | params_flow.rb:98:31:98:31 | b | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:98:31:98:31 | b | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:98:31:98:31 | b | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:98:31:98:31 | b | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:98:31:98:31 | b | type tracker without call steps | params_flow.rb:98:31:98:31 | b | | params_flow.rb:98:31:98:31 | b | type tracker without call steps | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:98:31:98:31 | b | type tracker without call steps with content splat position 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | +| params_flow.rb:98:31:98:31 | b | type tracker without call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:99:5:99:10 | call to sink | type tracker without call steps | params_flow.rb:99:5:99:10 | call to sink | -| params_flow.rb:99:5:99:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:99:5:99:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:100:5:100:18 | call to sink | type tracker without call steps | params_flow.rb:100:5:100:18 | call to sink | -| params_flow.rb:100:5:100:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:100:5:100:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:100:5:100:18 | synthetic splat argument | | params_flow.rb:100:10:100:18 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:100:10:100:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:100:10:100:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:100:10:100:18 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:100:10:100:18 | ...[...] | type tracker without call steps | params_flow.rb:100:10:100:18 | ...[...] | -| params_flow.rb:100:10:100:18 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:100:5:100:18 | synthetic splat argument | +| params_flow.rb:100:10:100:18 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:100:5:100:18 | synthetic splat argument | | params_flow.rb:100:10:100:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:100:10:100:18 | synthetic splat argument | | params_flow.rb:100:17:100:17 | 0 | type tracker without call steps | params_flow.rb:100:17:100:17 | 0 | -| params_flow.rb:100:17:100:17 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:100:10:100:18 | synthetic splat argument | +| params_flow.rb:100:17:100:17 | 0 | type tracker without call steps with content element 0 | params_flow.rb:100:10:100:18 | synthetic splat argument | | params_flow.rb:101:5:101:18 | call to sink | type tracker without call steps | params_flow.rb:101:5:101:18 | call to sink | -| params_flow.rb:101:5:101:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:101:5:101:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:101:5:101:18 | synthetic splat argument | | params_flow.rb:101:10:101:18 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:101:10:101:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:101:10:101:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:101:10:101:18 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:101:10:101:18 | ...[...] | type tracker without call steps | params_flow.rb:101:10:101:18 | ...[...] | -| params_flow.rb:101:10:101:18 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:101:5:101:18 | synthetic splat argument | +| params_flow.rb:101:10:101:18 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:101:5:101:18 | synthetic splat argument | | params_flow.rb:101:10:101:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:101:10:101:18 | synthetic splat argument | | params_flow.rb:101:17:101:17 | 1 | type tracker without call steps | params_flow.rb:101:17:101:17 | 1 | -| params_flow.rb:101:17:101:17 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:101:10:101:18 | synthetic splat argument | +| params_flow.rb:101:17:101:17 | 1 | type tracker without call steps with content element 0 | params_flow.rb:101:10:101:18 | synthetic splat argument | | params_flow.rb:102:5:102:10 | call to sink | type tracker without call steps | params_flow.rb:102:5:102:10 | call to sink | | params_flow.rb:102:5:102:10 | call to sink | type tracker without call steps | params_flow.rb:105:1:105:49 | call to splatmidsmall | | params_flow.rb:102:5:102:10 | call to sink | type tracker without call steps | params_flow.rb:106:1:106:46 | call to splatmidsmall | -| params_flow.rb:102:5:102:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:102:5:102:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:105:1:105:49 | call to splatmidsmall | type tracker without call steps | params_flow.rb:105:1:105:49 | call to splatmidsmall | | params_flow.rb:105:1:105:49 | synthetic splat argument | type tracker with call steps | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:1:105:49 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:105:15:105:23 | call to taint | type tracker without call steps | params_flow.rb:105:15:105:23 | call to taint | -| params_flow.rb:105:15:105:23 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:15:105:23 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:105:15:105:23 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:15:105:23 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:15:105:23 | synthetic splat argument | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content splat position 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:105:21:105:22 | 52 | type tracker without call steps | params_flow.rb:105:15:105:23 | call to taint | | params_flow.rb:105:21:105:22 | 52 | type tracker without call steps | params_flow.rb:105:21:105:22 | 52 | -| params_flow.rb:105:21:105:22 | 52 | type tracker without call steps with content splat position 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:21:105:22 | 52 | type tracker without call steps with content splat position 0 | params_flow.rb:105:15:105:23 | synthetic splat argument | +| params_flow.rb:105:21:105:22 | 52 | type tracker without call steps with content element 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:105:21:105:22 | 52 | type tracker without call steps with content element 0 | params_flow.rb:105:15:105:23 | synthetic splat argument | | params_flow.rb:105:26:105:48 | * ... | type tracker without call steps | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:27:105:48 | Array | type tracker without call steps | params_flow.rb:105:27:105:48 | Array | -| params_flow.rb:105:27:105:48 | call to [] | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:27:105:48 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:105:26:105:48 | * ... | -| params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:27:105:48 | synthetic splat argument | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:105:26:105:48 | * ... | -| params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:28:105:36 | call to taint | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:105:28:105:36 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | synthetic splat argument | -| params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:28:105:36 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:28:105:36 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:28:105:36 | synthetic splat argument | | params_flow.rb:105:34:105:35 | 53 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:105:34:105:35 | 53 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:105:34:105:35 | 53 | type tracker with call steps with content splat position 1 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:34:105:35 | 53 | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps | params_flow.rb:105:34:105:35 | 53 | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | synthetic splat argument | -| params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content splat position 0 | params_flow.rb:105:28:105:36 | synthetic splat argument | -| params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content splat position 1 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:39:105:47 | call to taint | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:28:105:36 | synthetic splat argument | +| params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:105:39:105:47 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps | params_flow.rb:105:39:105:47 | call to taint | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | synthetic splat argument | -| params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:39:105:47 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:39:105:47 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:39:105:47 | synthetic splat argument | | params_flow.rb:105:45:105:46 | 54 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:105:45:105:46 | 54 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:105:45:105:46 | 54 | type tracker with call steps with content splat position 2 (shifted) | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:105:45:105:46 | 54 | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps | params_flow.rb:105:39:105:47 | call to taint | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps | params_flow.rb:105:45:105:46 | 54 | +| params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 0 | params_flow.rb:105:39:105:47 | synthetic splat argument | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 1 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | synthetic splat argument | -| params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content splat position 0 | params_flow.rb:105:39:105:47 | synthetic splat argument | -| params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content splat position 2 (shifted) | params_flow.rb:105:1:105:49 | synthetic splat argument | +| params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 2 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:106:1:106:46 | call to splatmidsmall | type tracker without call steps | params_flow.rb:106:1:106:46 | call to splatmidsmall | | params_flow.rb:106:1:106:46 | synthetic splat argument | type tracker with call steps | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:1:106:46 | synthetic splat argument | type tracker without call steps | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:15:106:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:106:15:106:23 | call to taint | type tracker without call steps | params_flow.rb:106:15:106:23 | call to taint | -| params_flow.rb:106:15:106:23 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:106:15:106:23 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:106:15:106:23 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:15:106:23 | synthetic splat argument | type tracker without call steps | params_flow.rb:106:15:106:23 | synthetic splat argument | | params_flow.rb:106:21:106:22 | 55 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:21:106:22 | 55 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:106:21:106:22 | 55 | type tracker with call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content splat position 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | -| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content splat position 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | +| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:21:106:22 | 55 | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:106:21:106:22 | 55 | type tracker without call steps | params_flow.rb:106:15:106:23 | call to taint | | params_flow.rb:106:21:106:22 | 55 | type tracker without call steps | params_flow.rb:106:21:106:22 | 55 | -| params_flow.rb:106:21:106:22 | 55 | type tracker without call steps with content splat position 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:106:21:106:22 | 55 | type tracker without call steps with content splat position 0 | params_flow.rb:106:15:106:23 | synthetic splat argument | -| params_flow.rb:106:26:106:34 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:21:106:22 | 55 | type tracker without call steps with content element 0 | params_flow.rb:106:1:106:46 | synthetic splat argument | +| params_flow.rb:106:21:106:22 | 55 | type tracker without call steps with content element 0 | params_flow.rb:106:15:106:23 | synthetic splat argument | +| params_flow.rb:106:26:106:34 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:26:106:34 | call to taint | type tracker without call steps | params_flow.rb:106:26:106:34 | call to taint | -| params_flow.rb:106:26:106:34 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:106:26:106:34 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:106:26:106:34 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:26:106:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:106:26:106:34 | synthetic splat argument | | params_flow.rb:106:32:106:33 | 56 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:106:32:106:33 | 56 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:106:32:106:33 | 56 | type tracker with call steps with content splat position 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:32:106:33 | 56 | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:32:106:33 | 56 | type tracker without call steps | params_flow.rb:106:26:106:34 | call to taint | | params_flow.rb:106:32:106:33 | 56 | type tracker without call steps | params_flow.rb:106:32:106:33 | 56 | -| params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content splat position 0 | params_flow.rb:106:26:106:34 | synthetic splat argument | -| params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content splat position 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | +| params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content element 0 | params_flow.rb:106:26:106:34 | synthetic splat argument | +| params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content element 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content splat position 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | +| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:37:106:45 | call to taint | type tracker without call steps | params_flow.rb:106:37:106:45 | call to taint | -| params_flow.rb:106:37:106:45 | call to taint | type tracker without call steps with content splat position 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:106:37:106:45 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:106:37:106:45 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:37:106:45 | synthetic splat argument | type tracker without call steps | params_flow.rb:106:37:106:45 | synthetic splat argument | | params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content splat position 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content splat position 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | +| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | +| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:43:106:44 | 57 | type tracker without call steps | params_flow.rb:106:37:106:45 | call to taint | | params_flow.rb:106:43:106:44 | 57 | type tracker without call steps | params_flow.rb:106:43:106:44 | 57 | -| params_flow.rb:106:43:106:44 | 57 | type tracker without call steps with content splat position 0 | params_flow.rb:106:37:106:45 | synthetic splat argument | -| params_flow.rb:106:43:106:44 | 57 | type tracker without call steps with content splat position 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | +| params_flow.rb:106:43:106:44 | 57 | type tracker without call steps with content element 0 | params_flow.rb:106:37:106:45 | synthetic splat argument | +| params_flow.rb:106:43:106:44 | 57 | type tracker without call steps with content element 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:108:1:112:3 | &block | type tracker without call steps | params_flow.rb:108:1:112:3 | &block | | params_flow.rb:108:1:112:3 | self in splat_followed_by_keyword_param | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:108:1:112:3 | self in splat_followed_by_keyword_param | type tracker without call steps | params_flow.rb:108:1:112:3 | self in splat_followed_by_keyword_param | @@ -2492,36 +2182,30 @@ track | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | type tracker without call steps | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | | params_flow.rb:108:1:112:3 | synthetic splat parameter | type tracker without call steps | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:108:37:108:37 | a | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:108:37:108:37 | a | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:108:37:108:37 | a | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:108:37:108:37 | a | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:108:37:108:37 | a | type tracker without call steps | params_flow.rb:108:37:108:37 | a | | params_flow.rb:108:37:108:37 | a | type tracker without call steps | params_flow.rb:108:37:108:37 | a | -| params_flow.rb:108:37:108:37 | a | type tracker without call steps with content splat position 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | +| params_flow.rb:108:37:108:37 | a | type tracker without call steps with content element 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | | params_flow.rb:108:40:108:41 | *b | type tracker without call steps | params_flow.rb:108:40:108:41 | *b | | params_flow.rb:108:41:108:41 | b | type tracker without call steps | params_flow.rb:108:41:108:41 | b | | params_flow.rb:108:44:108:44 | c | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:108:44:108:44 | c | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:108:44:108:44 | c | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:108:44:108:44 | c | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:108:44:108:44 | c | type tracker without call steps | params_flow.rb:108:44:108:44 | c | | params_flow.rb:108:44:108:44 | c | type tracker without call steps | params_flow.rb:108:44:108:44 | c | -| params_flow.rb:108:44:108:44 | c | type tracker without call steps with content splat position 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | +| params_flow.rb:108:44:108:44 | c | type tracker without call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:109:5:109:10 | call to sink | type tracker without call steps | params_flow.rb:109:5:109:10 | call to sink | -| params_flow.rb:109:5:109:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:109:5:109:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:109:5:109:10 | synthetic splat argument | | params_flow.rb:110:5:110:13 | call to sink | type tracker without call steps | params_flow.rb:110:5:110:13 | call to sink | -| params_flow.rb:110:5:110:13 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:110:5:110:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:110:5:110:13 | synthetic splat argument | | params_flow.rb:110:10:110:13 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:110:10:110:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:110:10:110:13 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:110:10:110:13 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:110:10:110:13 | ...[...] | type tracker without call steps | params_flow.rb:110:10:110:13 | ...[...] | -| params_flow.rb:110:10:110:13 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | +| params_flow.rb:110:10:110:13 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | | params_flow.rb:110:10:110:13 | synthetic splat argument | type tracker without call steps | params_flow.rb:110:10:110:13 | synthetic splat argument | | params_flow.rb:110:12:110:12 | 0 | type tracker without call steps | params_flow.rb:110:12:110:12 | 0 | -| params_flow.rb:110:12:110:12 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:110:10:110:13 | synthetic splat argument | +| params_flow.rb:110:12:110:12 | 0 | type tracker without call steps with content element 0 | params_flow.rb:110:10:110:13 | synthetic splat argument | | params_flow.rb:111:5:111:10 | call to sink | type tracker without call steps | params_flow.rb:111:5:111:10 | call to sink | | params_flow.rb:111:5:111:10 | call to sink | type tracker without call steps | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | -| params_flow.rb:111:5:111:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:111:5:111:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | type tracker without call steps | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | @@ -2530,129 +2214,111 @@ track | params_flow.rb:114:1:114:67 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:1:114:67 | synthetic splat argument | | params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps | params_flow.rb:108:37:108:37 | a | -| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | -| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | +| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | +| params_flow.rb:114:33:114:41 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | | params_flow.rb:114:33:114:41 | call to taint | type tracker without call steps | params_flow.rb:114:33:114:41 | call to taint | -| params_flow.rb:114:33:114:41 | call to taint | type tracker without call steps with content splat position 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | -| params_flow.rb:114:33:114:41 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:114:33:114:41 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | | params_flow.rb:114:33:114:41 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:33:114:41 | synthetic splat argument | | params_flow.rb:114:39:114:40 | 58 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:39:114:40 | 58 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:39:114:40 | 58 | type tracker with call steps | params_flow.rb:108:37:108:37 | a | -| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content splat position 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | -| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content splat position 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | +| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content element 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | +| params_flow.rb:114:39:114:40 | 58 | type tracker with call steps with content element 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | | params_flow.rb:114:39:114:40 | 58 | type tracker without call steps | params_flow.rb:114:33:114:41 | call to taint | | params_flow.rb:114:39:114:40 | 58 | type tracker without call steps | params_flow.rb:114:39:114:40 | 58 | -| params_flow.rb:114:39:114:40 | 58 | type tracker without call steps with content splat position 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | -| params_flow.rb:114:39:114:40 | 58 | type tracker without call steps with content splat position 0 | params_flow.rb:114:33:114:41 | synthetic splat argument | +| params_flow.rb:114:39:114:40 | 58 | type tracker without call steps with content element 0 | params_flow.rb:114:1:114:67 | synthetic splat argument | +| params_flow.rb:114:39:114:40 | 58 | type tracker without call steps with content element 0 | params_flow.rb:114:33:114:41 | synthetic splat argument | | params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps | params_flow.rb:110:10:110:13 | ...[...] | +| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:108:40:108:41 | *b | -| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | -| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | +| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | +| params_flow.rb:114:44:114:52 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:114:44:114:52 | call to taint | type tracker without call steps | params_flow.rb:114:44:114:52 | call to taint | -| params_flow.rb:114:44:114:52 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | -| params_flow.rb:114:44:114:52 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:114:44:114:52 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | | params_flow.rb:114:44:114:52 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:44:114:52 | synthetic splat argument | | params_flow.rb:114:50:114:51 | 59 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:50:114:51 | 59 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:50:114:51 | 59 | type tracker with call steps | params_flow.rb:110:10:110:13 | ...[...] | +| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content element 0 | params_flow.rb:108:40:108:41 | *b | -| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content splat position 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | -| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content splat position 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | +| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content element 0 | params_flow.rb:110:5:110:13 | synthetic splat argument | +| params_flow.rb:114:50:114:51 | 59 | type tracker with call steps with content element 1 | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:114:50:114:51 | 59 | type tracker without call steps | params_flow.rb:114:44:114:52 | call to taint | | params_flow.rb:114:50:114:51 | 59 | type tracker without call steps | params_flow.rb:114:50:114:51 | 59 | -| params_flow.rb:114:50:114:51 | 59 | type tracker without call steps with content splat position 0 | params_flow.rb:114:44:114:52 | synthetic splat argument | -| params_flow.rb:114:50:114:51 | 59 | type tracker without call steps with content splat position 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | +| params_flow.rb:114:50:114:51 | 59 | type tracker without call steps with content element 0 | params_flow.rb:114:44:114:52 | synthetic splat argument | +| params_flow.rb:114:50:114:51 | 59 | type tracker without call steps with content element 1 | params_flow.rb:114:1:114:67 | synthetic splat argument | | params_flow.rb:114:55:114:55 | :c | type tracker without call steps | params_flow.rb:114:55:114:55 | :c | | params_flow.rb:114:55:114:66 | Pair | type tracker without call steps | params_flow.rb:114:55:114:66 | Pair | | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps | params_flow.rb:108:44:108:44 | c | +| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content hash-splat position :c | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | -| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:58:114:66 | call to taint | type tracker without call steps | params_flow.rb:114:58:114:66 | call to taint | | params_flow.rb:114:58:114:66 | call to taint | type tracker without call steps with content hash-splat position :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | -| params_flow.rb:114:58:114:66 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:114:58:114:66 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:58:114:66 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:108:44:108:44 | c | +| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content hash-splat position :c | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | -| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content splat position 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps | params_flow.rb:114:58:114:66 | call to taint | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps | params_flow.rb:114:64:114:65 | 60 | +| params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content element 0 | params_flow.rb:114:58:114:66 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content hash-splat position :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | -| params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content splat position 0 | params_flow.rb:114:58:114:66 | synthetic splat argument | | params_flow.rb:116:1:116:1 | x | type tracker without call steps | params_flow.rb:116:1:116:1 | x | | params_flow.rb:116:5:116:6 | Array | type tracker without call steps | params_flow.rb:116:5:116:6 | Array | | params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:116:5:116:6 | call to [] | type tracker without call steps | params_flow.rb:116:5:116:6 | call to [] | | params_flow.rb:116:5:116:6 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:118:12:118:13 | * ... | | params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | +| params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content element 0 or unknown | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:117:1:117:1 | [post] x | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:117:1:117:1 | [post] x | type tracker without call steps | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:117:1:117:1 | [post] x | type tracker without call steps with content element 0 or unknown | params_flow.rb:118:12:118:13 | * ... | | params_flow.rb:117:1:117:15 | call to []= | type tracker without call steps | params_flow.rb:117:1:117:15 | call to []= | | params_flow.rb:117:1:117:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:117:1:117:15 | synthetic splat argument | | params_flow.rb:117:3:117:14 | call to some_index | type tracker without call steps | params_flow.rb:117:3:117:14 | call to some_index | -| params_flow.rb:117:3:117:14 | call to some_index | type tracker without call steps with content splat position 0 | params_flow.rb:117:1:117:15 | synthetic splat argument | +| params_flow.rb:117:3:117:14 | call to some_index | type tracker without call steps with content element 0 | params_flow.rb:117:1:117:15 | synthetic splat argument | | params_flow.rb:117:19:117:27 | __synth__0 | type tracker without call steps | params_flow.rb:117:19:117:27 | __synth__0 | | params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content element | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | -| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:117:19:117:27 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps | params_flow.rb:117:19:117:27 | call to taint | | params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps with content attribute [] | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps with content element | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps with content element | params_flow.rb:118:12:118:13 | * ... | -| params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | -| params_flow.rb:117:19:117:27 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:117:19:117:27 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | | params_flow.rb:117:19:117:27 | synthetic splat argument | type tracker without call steps | params_flow.rb:117:19:117:27 | synthetic splat argument | | params_flow.rb:117:25:117:26 | 61 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:117:25:117:26 | 61 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:117:25:117:26 | 61 | type tracker with call steps | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:117:25:117:26 | 61 | type tracker with call steps | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content element | params_flow.rb:9:1:12:3 | synthetic splat parameter | -| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content splat position 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | -| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content splat position 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | +| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content element 0 | params_flow.rb:10:5:10:11 | synthetic splat argument | +| params_flow.rb:117:25:117:26 | 61 | type tracker with call steps with content element 0 | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:117:25:117:26 | 61 | type tracker without call steps | params_flow.rb:117:19:117:27 | call to taint | | params_flow.rb:117:25:117:26 | 61 | type tracker without call steps | params_flow.rb:117:25:117:26 | 61 | | params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content attribute [] | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content element | params_flow.rb:117:1:117:1 | [post] x | | params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content element | params_flow.rb:118:12:118:13 | * ... | -| params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content splat position 0 | params_flow.rb:117:19:117:27 | synthetic splat argument | -| params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content splat position 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | +| params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content element 0 | params_flow.rb:117:19:117:27 | synthetic splat argument | +| params_flow.rb:117:25:117:26 | 61 | type tracker without call steps with content element 1 | params_flow.rb:117:1:117:15 | synthetic splat argument | | params_flow.rb:118:1:118:14 | call to positional | type tracker without call steps | params_flow.rb:118:1:118:14 | call to positional | | params_flow.rb:118:12:118:13 | * ... | type tracker with call steps | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:118:12:118:13 | * ... | type tracker without call steps | params_flow.rb:118:12:118:13 | * ... | @@ -2661,101 +2327,85 @@ track | params_flow.rb:120:1:126:3 | self in destruct | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:120:1:126:3 | self in destruct | type tracker without call steps | params_flow.rb:120:1:126:3 | self in destruct | | params_flow.rb:120:15:120:15 | a | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:120:15:120:15 | a | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:120:15:120:15 | a | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:120:15:120:15 | a | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:120:15:120:15 | a | type tracker without call steps | params_flow.rb:120:15:120:15 | a | | params_flow.rb:120:15:120:15 | a | type tracker without call steps | params_flow.rb:120:15:120:15 | a | -| params_flow.rb:120:15:120:15 | a | type tracker without call steps with content splat position 0 | params_flow.rb:121:5:121:10 | synthetic splat argument | +| params_flow.rb:120:15:120:15 | a | type tracker without call steps with content element 0 | params_flow.rb:121:5:121:10 | synthetic splat argument | | params_flow.rb:120:17:120:17 | b | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:120:17:120:17 | b | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:120:17:120:17 | b | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:120:17:120:17 | b | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:120:17:120:17 | b | type tracker without call steps | params_flow.rb:120:17:120:17 | b | | params_flow.rb:120:17:120:17 | b | type tracker without call steps | params_flow.rb:120:17:120:17 | b | -| params_flow.rb:120:17:120:17 | b | type tracker without call steps with content splat position 0 | params_flow.rb:122:5:122:10 | synthetic splat argument | +| params_flow.rb:120:17:120:17 | b | type tracker without call steps with content element 0 | params_flow.rb:122:5:122:10 | synthetic splat argument | | params_flow.rb:120:22:120:22 | c | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:120:22:120:22 | c | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:120:22:120:22 | c | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:120:22:120:22 | c | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:120:22:120:22 | c | type tracker without call steps | params_flow.rb:120:22:120:22 | c | | params_flow.rb:120:22:120:22 | c | type tracker without call steps | params_flow.rb:120:22:120:22 | c | -| params_flow.rb:120:22:120:22 | c | type tracker without call steps with content splat position 0 | params_flow.rb:123:5:123:10 | synthetic splat argument | +| params_flow.rb:120:22:120:22 | c | type tracker without call steps with content element 0 | params_flow.rb:123:5:123:10 | synthetic splat argument | | params_flow.rb:120:25:120:25 | d | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:120:25:120:25 | d | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:120:25:120:25 | d | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:120:25:120:25 | d | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:120:25:120:25 | d | type tracker without call steps | params_flow.rb:120:25:120:25 | d | | params_flow.rb:120:25:120:25 | d | type tracker without call steps | params_flow.rb:120:25:120:25 | d | -| params_flow.rb:120:25:120:25 | d | type tracker without call steps with content splat position 0 | params_flow.rb:124:5:124:10 | synthetic splat argument | +| params_flow.rb:120:25:120:25 | d | type tracker without call steps with content element 0 | params_flow.rb:124:5:124:10 | synthetic splat argument | | params_flow.rb:120:27:120:27 | e | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:120:27:120:27 | e | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:120:27:120:27 | e | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:120:27:120:27 | e | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:120:27:120:27 | e | type tracker without call steps | params_flow.rb:120:27:120:27 | e | | params_flow.rb:120:27:120:27 | e | type tracker without call steps | params_flow.rb:120:27:120:27 | e | -| params_flow.rb:120:27:120:27 | e | type tracker without call steps with content splat position 0 | params_flow.rb:125:5:125:10 | synthetic splat argument | +| params_flow.rb:120:27:120:27 | e | type tracker without call steps with content element 0 | params_flow.rb:125:5:125:10 | synthetic splat argument | | params_flow.rb:121:5:121:10 | call to sink | type tracker without call steps | params_flow.rb:121:5:121:10 | call to sink | -| params_flow.rb:121:5:121:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:121:5:121:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:121:5:121:10 | synthetic splat argument | | params_flow.rb:122:5:122:10 | call to sink | type tracker without call steps | params_flow.rb:122:5:122:10 | call to sink | -| params_flow.rb:122:5:122:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:122:5:122:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:122:5:122:10 | synthetic splat argument | | params_flow.rb:123:5:123:10 | call to sink | type tracker without call steps | params_flow.rb:123:5:123:10 | call to sink | -| params_flow.rb:123:5:123:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:123:5:123:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:123:5:123:10 | synthetic splat argument | | params_flow.rb:124:5:124:10 | call to sink | type tracker without call steps | params_flow.rb:124:5:124:10 | call to sink | -| params_flow.rb:124:5:124:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:124:5:124:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:124:5:124:10 | synthetic splat argument | | params_flow.rb:125:5:125:10 | call to sink | type tracker without call steps | params_flow.rb:125:5:125:10 | call to sink | | params_flow.rb:125:5:125:10 | call to sink | type tracker without call steps | params_flow.rb:128:1:128:61 | call to destruct | -| params_flow.rb:125:5:125:10 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:125:5:125:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:125:5:125:10 | synthetic splat argument | | params_flow.rb:128:1:128:61 | call to destruct | type tracker without call steps | params_flow.rb:128:1:128:61 | call to destruct | | params_flow.rb:128:1:128:61 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:1:128:61 | synthetic splat argument | | params_flow.rb:128:10:128:31 | Array | type tracker without call steps | params_flow.rb:128:10:128:31 | Array | | params_flow.rb:128:10:128:31 | call to [] | type tracker without call steps | params_flow.rb:128:10:128:31 | call to [] | -| params_flow.rb:128:10:128:31 | call to [] | type tracker without call steps with content splat position 0 | params_flow.rb:128:1:128:61 | synthetic splat argument | +| params_flow.rb:128:10:128:31 | call to [] | type tracker without call steps with content element 0 | params_flow.rb:128:1:128:61 | synthetic splat argument | | params_flow.rb:128:10:128:31 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:10:128:31 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:10:128:31 | synthetic splat argument | -| params_flow.rb:128:10:128:31 | synthetic splat argument | type tracker without call steps with content splat position 0 | params_flow.rb:128:1:128:61 | synthetic splat argument | +| params_flow.rb:128:10:128:31 | synthetic splat argument | type tracker without call steps with content element 0 | params_flow.rb:128:1:128:61 | synthetic splat argument | | params_flow.rb:128:11:128:19 | call to taint | type tracker without call steps | params_flow.rb:128:11:128:19 | call to taint | | params_flow.rb:128:11:128:19 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:11:128:19 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | synthetic splat argument | -| params_flow.rb:128:11:128:19 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:11:128:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:11:128:19 | synthetic splat argument | | params_flow.rb:128:17:128:18 | 62 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:128:17:128:18 | 62 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:17:128:18 | 62 | type tracker without call steps | params_flow.rb:128:11:128:19 | call to taint | | params_flow.rb:128:17:128:18 | 62 | type tracker without call steps | params_flow.rb:128:17:128:18 | 62 | | params_flow.rb:128:17:128:18 | 62 | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:17:128:18 | 62 | type tracker without call steps with content element 0 | params_flow.rb:128:10:128:31 | synthetic splat argument | -| params_flow.rb:128:17:128:18 | 62 | type tracker without call steps with content splat position 0 | params_flow.rb:128:11:128:19 | synthetic splat argument | +| params_flow.rb:128:17:128:18 | 62 | type tracker without call steps with content element 0 | params_flow.rb:128:11:128:19 | synthetic splat argument | | params_flow.rb:128:22:128:30 | call to taint | type tracker without call steps | params_flow.rb:128:22:128:30 | call to taint | | params_flow.rb:128:22:128:30 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:22:128:30 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | synthetic splat argument | -| params_flow.rb:128:22:128:30 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:22:128:30 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:22:128:30 | synthetic splat argument | | params_flow.rb:128:28:128:29 | 63 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:128:28:128:29 | 63 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:28:128:29 | 63 | type tracker without call steps | params_flow.rb:128:22:128:30 | call to taint | | params_flow.rb:128:28:128:29 | 63 | type tracker without call steps | params_flow.rb:128:28:128:29 | 63 | +| params_flow.rb:128:28:128:29 | 63 | type tracker without call steps with content element 0 | params_flow.rb:128:22:128:30 | synthetic splat argument | | params_flow.rb:128:28:128:29 | 63 | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:28:128:29 | 63 | type tracker without call steps with content element 1 | params_flow.rb:128:10:128:31 | synthetic splat argument | -| params_flow.rb:128:28:128:29 | 63 | type tracker without call steps with content splat position 0 | params_flow.rb:128:22:128:30 | synthetic splat argument | | params_flow.rb:128:34:128:60 | Array | type tracker without call steps | params_flow.rb:128:34:128:60 | Array | | params_flow.rb:128:34:128:60 | call to [] | type tracker without call steps | params_flow.rb:128:34:128:60 | call to [] | -| params_flow.rb:128:34:128:60 | call to [] | type tracker without call steps with content splat position 1 | params_flow.rb:128:1:128:61 | synthetic splat argument | +| params_flow.rb:128:34:128:60 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:128:1:128:61 | synthetic splat argument | | params_flow.rb:128:34:128:60 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:34:128:60 | call to [] | | params_flow.rb:128:34:128:60 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:34:128:60 | synthetic splat argument | -| params_flow.rb:128:34:128:60 | synthetic splat argument | type tracker without call steps with content splat position 1 | params_flow.rb:128:1:128:61 | synthetic splat argument | +| params_flow.rb:128:34:128:60 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:128:1:128:61 | synthetic splat argument | | params_flow.rb:128:35:128:43 | call to taint | type tracker without call steps | params_flow.rb:128:35:128:43 | call to taint | | params_flow.rb:128:35:128:43 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:128:34:128:60 | call to [] | | params_flow.rb:128:35:128:43 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:128:34:128:60 | synthetic splat argument | -| params_flow.rb:128:35:128:43 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:35:128:43 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:35:128:43 | synthetic splat argument | | params_flow.rb:128:41:128:42 | 64 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:128:41:128:42 | 64 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:41:128:42 | 64 | type tracker without call steps | params_flow.rb:128:35:128:43 | call to taint | | params_flow.rb:128:41:128:42 | 64 | type tracker without call steps | params_flow.rb:128:41:128:42 | 64 | | params_flow.rb:128:41:128:42 | 64 | type tracker without call steps with content element 0 | params_flow.rb:128:34:128:60 | call to [] | | params_flow.rb:128:41:128:42 | 64 | type tracker without call steps with content element 0 | params_flow.rb:128:34:128:60 | synthetic splat argument | -| params_flow.rb:128:41:128:42 | 64 | type tracker without call steps with content splat position 0 | params_flow.rb:128:35:128:43 | synthetic splat argument | +| params_flow.rb:128:41:128:42 | 64 | type tracker without call steps with content element 0 | params_flow.rb:128:35:128:43 | synthetic splat argument | | params_flow.rb:128:46:128:59 | Array | type tracker without call steps | params_flow.rb:128:46:128:59 | Array | | params_flow.rb:128:46:128:59 | call to [] | type tracker without call steps | params_flow.rb:128:46:128:59 | call to [] | | params_flow.rb:128:46:128:59 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:128:34:128:60 | call to [] | @@ -2770,130 +2420,110 @@ track | params_flow.rb:128:50:128:58 | call to taint | type tracker without call steps | params_flow.rb:128:50:128:58 | call to taint | | params_flow.rb:128:50:128:58 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:128:46:128:59 | call to [] | | params_flow.rb:128:50:128:58 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:128:46:128:59 | synthetic splat argument | -| params_flow.rb:128:50:128:58 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:50:128:58 | synthetic splat argument | type tracker without call steps | params_flow.rb:128:50:128:58 | synthetic splat argument | | params_flow.rb:128:56:128:57 | 65 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:128:56:128:57 | 65 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:56:128:57 | 65 | type tracker without call steps | params_flow.rb:128:50:128:58 | call to taint | | params_flow.rb:128:56:128:57 | 65 | type tracker without call steps | params_flow.rb:128:56:128:57 | 65 | +| params_flow.rb:128:56:128:57 | 65 | type tracker without call steps with content element 0 | params_flow.rb:128:50:128:58 | synthetic splat argument | | params_flow.rb:128:56:128:57 | 65 | type tracker without call steps with content element 1 | params_flow.rb:128:46:128:59 | call to [] | | params_flow.rb:128:56:128:57 | 65 | type tracker without call steps with content element 1 | params_flow.rb:128:46:128:59 | synthetic splat argument | -| params_flow.rb:128:56:128:57 | 65 | type tracker without call steps with content splat position 0 | params_flow.rb:128:50:128:58 | synthetic splat argument | | params_flow.rb:130:1:130:4 | args | type tracker without call steps | params_flow.rb:130:1:130:4 | args | | params_flow.rb:130:8:130:29 | Array | type tracker without call steps | params_flow.rb:130:8:130:29 | Array | | params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps | params_flow.rb:83:14:83:14 | t | +| params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:8:130:29 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:8:130:29 | call to [] | type tracker without call steps | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:8:130:29 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:131:10:131:14 | * ... | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:83:14:83:14 | t | +| params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content element 0 or unknown | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:130:8:130:29 | synthetic splat argument | | params_flow.rb:130:8:130:29 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:131:10:131:14 | * ... | | params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps | params_flow.rb:83:14:83:14 | t | +| params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:130:9:130:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:9:130:17 | call to taint | type tracker without call steps | params_flow.rb:130:9:130:17 | call to taint | | params_flow.rb:130:9:130:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:9:130:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:130:8:130:29 | synthetic splat argument | | params_flow.rb:130:9:130:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:130:9:130:17 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:130:9:130:17 | synthetic splat argument | type tracker without call steps | params_flow.rb:130:9:130:17 | synthetic splat argument | | params_flow.rb:130:15:130:16 | 66 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:130:15:130:16 | 66 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:15:130:16 | 66 | type tracker with call steps | params_flow.rb:83:14:83:14 | t | +| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content splat position 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | +| params_flow.rb:130:15:130:16 | 66 | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:130:15:130:16 | 66 | type tracker without call steps | params_flow.rb:130:9:130:17 | call to taint | | params_flow.rb:130:15:130:16 | 66 | type tracker without call steps | params_flow.rb:130:15:130:16 | 66 | | params_flow.rb:130:15:130:16 | 66 | type tracker without call steps with content element 0 | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:15:130:16 | 66 | type tracker without call steps with content element 0 | params_flow.rb:130:8:130:29 | synthetic splat argument | +| params_flow.rb:130:15:130:16 | 66 | type tracker without call steps with content element 0 | params_flow.rb:130:9:130:17 | synthetic splat argument | | params_flow.rb:130:15:130:16 | 66 | type tracker without call steps with content element 0 | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:130:15:130:16 | 66 | type tracker without call steps with content splat position 0 | params_flow.rb:130:9:130:17 | synthetic splat argument | | params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps | params_flow.rb:83:17:83:17 | u | +| params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:20:130:28 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:130:20:130:28 | call to taint | type tracker without call steps | params_flow.rb:130:20:130:28 | call to taint | | params_flow.rb:130:20:130:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:20:130:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:130:8:130:29 | synthetic splat argument | | params_flow.rb:130:20:130:28 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:130:20:130:28 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:130:20:130:28 | synthetic splat argument | type tracker without call steps | params_flow.rb:130:20:130:28 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:130:26:130:27 | 67 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:130:26:130:27 | 67 | type tracker with call steps | params_flow.rb:83:17:83:17 | u | +| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content element 1 | params_flow.rb:83:1:91:3 | synthetic splat parameter | -| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:130:26:130:27 | 67 | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | type tracker without call steps | params_flow.rb:130:20:130:28 | call to taint | | params_flow.rb:130:26:130:27 | 67 | type tracker without call steps | params_flow.rb:130:26:130:27 | 67 | +| params_flow.rb:130:26:130:27 | 67 | type tracker without call steps with content element 0 | params_flow.rb:130:20:130:28 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | type tracker without call steps with content element 1 | params_flow.rb:130:8:130:29 | call to [] | | params_flow.rb:130:26:130:27 | 67 | type tracker without call steps with content element 1 | params_flow.rb:130:8:130:29 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | type tracker without call steps with content element 1 | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:130:26:130:27 | 67 | type tracker without call steps with content splat position 0 | params_flow.rb:130:20:130:28 | synthetic splat argument | | params_flow.rb:131:1:131:46 | call to pos_many | type tracker without call steps | params_flow.rb:131:1:131:46 | call to pos_many | | params_flow.rb:131:10:131:14 | * ... | type tracker with call steps | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:131:10:131:14 | * ... | type tracker without call steps | params_flow.rb:131:10:131:14 | * ... | | params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:131:17:131:25 | call to taint | type tracker without call steps | params_flow.rb:131:17:131:25 | call to taint | -| params_flow.rb:131:17:131:25 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:131:17:131:25 | synthetic splat argument | type tracker without call steps | params_flow.rb:131:17:131:25 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content splat position 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | +| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | type tracker without call steps | params_flow.rb:131:17:131:25 | call to taint | | params_flow.rb:131:23:131:24 | 68 | type tracker without call steps | params_flow.rb:131:23:131:24 | 68 | -| params_flow.rb:131:23:131:24 | 68 | type tracker without call steps with content splat position 0 | params_flow.rb:131:17:131:25 | synthetic splat argument | +| params_flow.rb:131:23:131:24 | 68 | type tracker without call steps with content element 0 | params_flow.rb:131:17:131:25 | synthetic splat argument | | params_flow.rb:131:28:131:30 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:28:131:30 | nil | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | +| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | | params_flow.rb:131:28:131:30 | nil | type tracker without call steps | params_flow.rb:131:28:131:30 | nil | | params_flow.rb:131:33:131:35 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:33:131:35 | nil | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | +| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:131:33:131:35 | nil | type tracker without call steps | params_flow.rb:131:33:131:35 | nil | | params_flow.rb:131:38:131:40 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:38:131:40 | nil | type tracker with call steps | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | +| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | | params_flow.rb:131:38:131:40 | nil | type tracker without call steps | params_flow.rb:131:38:131:40 | nil | | params_flow.rb:131:43:131:45 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:131:43:131:45 | nil | type tracker with call steps | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content splat position 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | +| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:131:43:131:45 | nil | type tracker without call steps | params_flow.rb:131:43:131:45 | nil | | params_flow.rb:133:1:135:3 | &block | type tracker without call steps | params_flow.rb:133:1:135:3 | &block | | params_flow.rb:133:1:135:3 | self in splatall | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | @@ -2903,16 +2533,14 @@ track | params_flow.rb:133:15:133:18 | args | type tracker without call steps | params_flow.rb:133:15:133:18 | args | | params_flow.rb:134:5:134:16 | call to sink | type tracker without call steps | params_flow.rb:134:5:134:16 | call to sink | | params_flow.rb:134:5:134:16 | call to sink | type tracker without call steps | params_flow.rb:137:1:137:44 | call to splatall | -| params_flow.rb:134:5:134:16 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:134:5:134:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:134:10:134:16 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:134:10:134:16 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:134:10:134:16 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:134:10:134:16 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:134:10:134:16 | ...[...] | type tracker without call steps | params_flow.rb:134:10:134:16 | ...[...] | -| params_flow.rb:134:10:134:16 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | +| params_flow.rb:134:10:134:16 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:134:10:134:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:134:10:134:16 | synthetic splat argument | | params_flow.rb:134:15:134:15 | 1 | type tracker without call steps | params_flow.rb:134:15:134:15 | 1 | -| params_flow.rb:134:15:134:15 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:134:10:134:16 | synthetic splat argument | +| params_flow.rb:134:15:134:15 | 1 | type tracker without call steps with content element 0 | params_flow.rb:134:10:134:16 | synthetic splat argument | | params_flow.rb:137:1:137:44 | call to splatall | type tracker without call steps | params_flow.rb:137:1:137:44 | call to splatall | | params_flow.rb:137:10:137:43 | * ... | type tracker with call steps | params_flow.rb:133:14:133:18 | *args | | params_flow.rb:137:10:137:43 | * ... | type tracker without call steps | params_flow.rb:137:10:137:43 | * ... | @@ -2929,59 +2557,51 @@ track | params_flow.rb:137:12:137:20 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:12:137:20 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:12:137:20 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:12:137:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:12:137:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:137:12:137:20 | synthetic splat argument | | params_flow.rb:137:18:137:19 | 69 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:18:137:19 | 69 | type tracker with call steps with content element 0 | params_flow.rb:133:14:133:18 | *args | -| params_flow.rb:137:18:137:19 | 69 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:18:137:19 | 69 | type tracker without call steps | params_flow.rb:137:12:137:20 | call to taint | | params_flow.rb:137:18:137:19 | 69 | type tracker without call steps | params_flow.rb:137:18:137:19 | 69 | | params_flow.rb:137:18:137:19 | 69 | type tracker without call steps with content element 0 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:18:137:19 | 69 | type tracker without call steps with content element 0 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:18:137:19 | 69 | type tracker without call steps with content element 0 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:18:137:19 | 69 | type tracker without call steps with content splat position 0 | params_flow.rb:137:12:137:20 | synthetic splat argument | +| params_flow.rb:137:18:137:19 | 69 | type tracker without call steps with content element 0 | params_flow.rb:137:12:137:20 | synthetic splat argument | | params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps | params_flow.rb:134:10:134:16 | ...[...] | +| params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:133:14:133:18 | *args | -| params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:137:23:137:31 | call to taint | type tracker with call steps with content splat position 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:137:23:137:31 | call to taint | type tracker without call steps | params_flow.rb:137:23:137:31 | call to taint | | params_flow.rb:137:23:137:31 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:23:137:31 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:23:137:31 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:23:137:31 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:23:137:31 | synthetic splat argument | type tracker without call steps | params_flow.rb:137:23:137:31 | synthetic splat argument | | params_flow.rb:137:29:137:30 | 70 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:29:137:30 | 70 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:137:29:137:30 | 70 | type tracker with call steps | params_flow.rb:134:10:134:16 | ...[...] | +| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content element 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content element 1 | params_flow.rb:133:14:133:18 | *args | -| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:137:29:137:30 | 70 | type tracker with call steps with content splat position 0 | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:137:29:137:30 | 70 | type tracker without call steps | params_flow.rb:137:23:137:31 | call to taint | | params_flow.rb:137:29:137:30 | 70 | type tracker without call steps | params_flow.rb:137:29:137:30 | 70 | +| params_flow.rb:137:29:137:30 | 70 | type tracker without call steps with content element 0 | params_flow.rb:137:23:137:31 | synthetic splat argument | | params_flow.rb:137:29:137:30 | 70 | type tracker without call steps with content element 1 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:29:137:30 | 70 | type tracker without call steps with content element 1 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:29:137:30 | 70 | type tracker without call steps with content element 1 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:29:137:30 | 70 | type tracker without call steps with content splat position 0 | params_flow.rb:137:23:137:31 | synthetic splat argument | | params_flow.rb:137:34:137:42 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:133:14:133:18 | *args | | params_flow.rb:137:34:137:42 | call to taint | type tracker without call steps | params_flow.rb:137:34:137:42 | call to taint | | params_flow.rb:137:34:137:42 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:34:137:42 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:34:137:42 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:34:137:42 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:34:137:42 | synthetic splat argument | type tracker without call steps | params_flow.rb:137:34:137:42 | synthetic splat argument | | params_flow.rb:137:40:137:41 | 71 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:40:137:41 | 71 | type tracker with call steps with content element 2 | params_flow.rb:133:14:133:18 | *args | -| params_flow.rb:137:40:137:41 | 71 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:40:137:41 | 71 | type tracker without call steps | params_flow.rb:137:34:137:42 | call to taint | | params_flow.rb:137:40:137:41 | 71 | type tracker without call steps | params_flow.rb:137:40:137:41 | 71 | +| params_flow.rb:137:40:137:41 | 71 | type tracker without call steps with content element 0 | params_flow.rb:137:34:137:42 | synthetic splat argument | | params_flow.rb:137:40:137:41 | 71 | type tracker without call steps with content element 2 | params_flow.rb:137:10:137:43 | * ... | | params_flow.rb:137:40:137:41 | 71 | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:40:137:41 | 71 | type tracker without call steps with content element 2 | params_flow.rb:137:11:137:43 | synthetic splat argument | -| params_flow.rb:137:40:137:41 | 71 | type tracker without call steps with content splat position 0 | params_flow.rb:137:34:137:42 | synthetic splat argument | | params_flow.rb:139:1:141:3 | &block | type tracker without call steps | params_flow.rb:139:1:141:3 | &block | | params_flow.rb:139:1:141:3 | hashSplatSideEffect | type tracker without call steps | params_flow.rb:139:1:141:3 | hashSplatSideEffect | | params_flow.rb:139:1:141:3 | self in hashSplatSideEffect | type tracker without call steps | params_flow.rb:139:1:141:3 | self in hashSplatSideEffect | @@ -2995,18 +2615,18 @@ track | params_flow.rb:140:5:140:38 | call to insert | type tracker without call steps | params_flow.rb:150:1:150:42 | call to hashSplatSideEffect | | params_flow.rb:140:5:140:38 | synthetic splat argument | type tracker without call steps | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:140:12:140:14 | :p1 | type tracker without call steps | params_flow.rb:140:12:140:14 | :p1 | -| params_flow.rb:140:12:140:14 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:140:5:140:15 | synthetic splat argument | +| params_flow.rb:140:12:140:14 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:140:5:140:15 | synthetic splat argument | | params_flow.rb:140:24:140:24 | 0 | type tracker without call steps | params_flow.rb:140:24:140:24 | 0 | -| params_flow.rb:140:24:140:24 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:140:5:140:38 | synthetic splat argument | +| params_flow.rb:140:24:140:24 | 0 | type tracker without call steps with content element 0 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | | params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:145:1:145:29 | call to hashSplatSideEffect | | params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:150:1:150:42 | call to hashSplatSideEffect | -| params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | +| params_flow.rb:140:27:140:37 | ...[...] | type tracker without call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:140:27:140:37 | synthetic splat argument | type tracker without call steps | params_flow.rb:140:27:140:37 | synthetic splat argument | | params_flow.rb:140:34:140:36 | :p2 | type tracker without call steps | params_flow.rb:140:34:140:36 | :p2 | -| params_flow.rb:140:34:140:36 | :p2 | type tracker without call steps with content splat position 0 | params_flow.rb:140:27:140:37 | synthetic splat argument | +| params_flow.rb:140:34:140:36 | :p2 | type tracker without call steps with content element 0 | params_flow.rb:140:27:140:37 | synthetic splat argument | | params_flow.rb:143:1:143:6 | kwargs | type tracker without call steps | params_flow.rb:143:1:143:6 | kwargs | | params_flow.rb:143:10:143:34 | Hash | type tracker without call steps | params_flow.rb:143:10:143:34 | Hash | | params_flow.rb:143:10:143:34 | call to [] | type tracker without call steps | params_flow.rb:143:10:143:34 | call to [] | @@ -3028,60 +2648,54 @@ track | params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | +| params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:139:25:139:32 | **kwargs | -| params_flow.rb:143:24:143:32 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:143:24:143:32 | call to taint | type tracker without call steps | params_flow.rb:143:24:143:32 | call to taint | | params_flow.rb:143:24:143:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | call to [] | | params_flow.rb:143:24:143:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | synthetic hash-splat argument | | params_flow.rb:143:24:143:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:145:21:145:28 | ** ... | -| params_flow.rb:143:24:143:32 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:143:24:143:32 | synthetic splat argument | type tracker without call steps | params_flow.rb:143:24:143:32 | synthetic splat argument | | params_flow.rb:143:30:143:31 | 72 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:143:30:143:31 | 72 | type tracker with call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | +| params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content element :p2 | params_flow.rb:139:25:139:32 | **kwargs | -| params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:143:30:143:31 | 72 | type tracker with call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:143:30:143:31 | 72 | type tracker without call steps | params_flow.rb:143:24:143:32 | call to taint | | params_flow.rb:143:30:143:31 | 72 | type tracker without call steps | params_flow.rb:143:30:143:31 | 72 | +| params_flow.rb:143:30:143:31 | 72 | type tracker without call steps with content element 0 | params_flow.rb:143:24:143:32 | synthetic splat argument | | params_flow.rb:143:30:143:31 | 72 | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | call to [] | | params_flow.rb:143:30:143:31 | 72 | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | synthetic hash-splat argument | | params_flow.rb:143:30:143:31 | 72 | type tracker without call steps with content element :p2 | params_flow.rb:145:21:145:28 | ** ... | -| params_flow.rb:143:30:143:31 | 72 | type tracker without call steps with content splat position 0 | params_flow.rb:143:24:143:32 | synthetic splat argument | | params_flow.rb:144:1:144:20 | call to sink | type tracker without call steps | params_flow.rb:144:1:144:20 | call to sink | -| params_flow.rb:144:1:144:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:144:1:144:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:144:1:144:20 | synthetic splat argument | | params_flow.rb:144:6:144:16 | ...[...] | type tracker without call steps | params_flow.rb:144:6:144:16 | ...[...] | | params_flow.rb:144:6:144:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:144:6:144:16 | synthetic splat argument | | params_flow.rb:144:6:144:19 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:144:6:144:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:144:6:144:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:144:6:144:19 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:144:6:144:19 | ...[...] | type tracker without call steps | params_flow.rb:144:6:144:19 | ...[...] | -| params_flow.rb:144:6:144:19 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:144:1:144:20 | synthetic splat argument | +| params_flow.rb:144:6:144:19 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:144:1:144:20 | synthetic splat argument | | params_flow.rb:144:6:144:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:144:6:144:19 | synthetic splat argument | | params_flow.rb:144:13:144:15 | :p1 | type tracker without call steps | params_flow.rb:144:13:144:15 | :p1 | -| params_flow.rb:144:13:144:15 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:144:6:144:16 | synthetic splat argument | +| params_flow.rb:144:13:144:15 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:144:6:144:16 | synthetic splat argument | | params_flow.rb:144:18:144:18 | 0 | type tracker without call steps | params_flow.rb:144:18:144:18 | 0 | -| params_flow.rb:144:18:144:18 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:144:6:144:19 | synthetic splat argument | +| params_flow.rb:144:18:144:18 | 0 | type tracker without call steps with content element 0 | params_flow.rb:144:6:144:19 | synthetic splat argument | | params_flow.rb:145:1:145:29 | call to hashSplatSideEffect | type tracker without call steps | params_flow.rb:145:1:145:29 | call to hashSplatSideEffect | | params_flow.rb:145:21:145:28 | ** ... | type tracker with call steps | params_flow.rb:139:25:139:32 | **kwargs | | params_flow.rb:145:21:145:28 | ** ... | type tracker without call steps | params_flow.rb:145:21:145:28 | ** ... | | params_flow.rb:146:1:146:20 | call to sink | type tracker without call steps | params_flow.rb:146:1:146:20 | call to sink | -| params_flow.rb:146:1:146:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:146:1:146:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:146:1:146:20 | synthetic splat argument | | params_flow.rb:146:6:146:16 | ...[...] | type tracker without call steps | params_flow.rb:146:6:146:16 | ...[...] | | params_flow.rb:146:6:146:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:146:6:146:16 | synthetic splat argument | | params_flow.rb:146:6:146:19 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:146:6:146:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:146:6:146:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:146:6:146:19 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:146:6:146:19 | ...[...] | type tracker without call steps | params_flow.rb:146:6:146:19 | ...[...] | -| params_flow.rb:146:6:146:19 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:146:1:146:20 | synthetic splat argument | +| params_flow.rb:146:6:146:19 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:146:1:146:20 | synthetic splat argument | | params_flow.rb:146:6:146:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:146:6:146:19 | synthetic splat argument | | params_flow.rb:146:13:146:15 | :p1 | type tracker without call steps | params_flow.rb:146:13:146:15 | :p1 | -| params_flow.rb:146:13:146:15 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:146:6:146:16 | synthetic splat argument | +| params_flow.rb:146:13:146:15 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:146:6:146:16 | synthetic splat argument | | params_flow.rb:146:18:146:18 | 0 | type tracker without call steps | params_flow.rb:146:18:146:18 | 0 | -| params_flow.rb:146:18:146:18 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:146:6:146:19 | synthetic splat argument | +| params_flow.rb:146:18:146:18 | 0 | type tracker without call steps with content element 0 | params_flow.rb:146:6:146:19 | synthetic splat argument | | params_flow.rb:148:1:148:2 | p1 | type tracker without call steps | params_flow.rb:148:1:148:2 | p1 | | params_flow.rb:148:6:148:7 | Array | type tracker without call steps | params_flow.rb:148:6:148:7 | Array | | params_flow.rb:148:6:148:7 | call to [] | type tracker with call steps | params_flow.rb:140:5:140:15 | ...[...] | @@ -3089,16 +2703,14 @@ track | params_flow.rb:148:6:148:7 | call to [] | type tracker without call steps | params_flow.rb:148:6:148:7 | call to [] | | params_flow.rb:148:6:148:7 | call to [] | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:149:1:149:11 | call to sink | type tracker without call steps | params_flow.rb:149:1:149:11 | call to sink | -| params_flow.rb:149:1:149:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:149:1:149:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:149:1:149:11 | synthetic splat argument | | params_flow.rb:149:6:149:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:149:6:149:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:149:6:149:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:149:6:149:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:149:6:149:10 | ...[...] | type tracker without call steps | params_flow.rb:149:6:149:10 | ...[...] | -| params_flow.rb:149:6:149:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:149:1:149:11 | synthetic splat argument | +| params_flow.rb:149:6:149:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:149:1:149:11 | synthetic splat argument | | params_flow.rb:149:6:149:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:149:6:149:10 | synthetic splat argument | | params_flow.rb:149:9:149:9 | 0 | type tracker without call steps | params_flow.rb:149:9:149:9 | 0 | -| params_flow.rb:149:9:149:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:149:6:149:10 | synthetic splat argument | +| params_flow.rb:149:9:149:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:149:6:149:10 | synthetic splat argument | | params_flow.rb:150:1:150:42 | call to hashSplatSideEffect | type tracker without call steps | params_flow.rb:150:1:150:42 | call to hashSplatSideEffect | | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:139:25:139:32 | **kwargs | | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | @@ -3109,34 +2721,30 @@ track | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | +| params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:139:25:139:32 | **kwargs | -| params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:150:33:150:41 | call to taint | type tracker without call steps | params_flow.rb:150:33:150:41 | call to taint | | params_flow.rb:150:33:150:41 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | -| params_flow.rb:150:33:150:41 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:150:33:150:41 | synthetic splat argument | type tracker without call steps | params_flow.rb:150:33:150:41 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | +| params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:139:25:139:32 | **kwargs | -| params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content splat position 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps | params_flow.rb:150:33:150:41 | call to taint | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps | params_flow.rb:150:39:150:40 | 73 | +| params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content element 0 | params_flow.rb:150:33:150:41 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | -| params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content splat position 0 | params_flow.rb:150:33:150:41 | synthetic splat argument | | params_flow.rb:151:1:151:11 | call to sink | type tracker without call steps | params_flow.rb:151:1:151:11 | call to sink | -| params_flow.rb:151:1:151:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:151:1:151:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:151:1:151:11 | synthetic splat argument | | params_flow.rb:151:6:151:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:151:6:151:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:151:6:151:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:151:6:151:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:151:6:151:10 | ...[...] | type tracker without call steps | params_flow.rb:151:6:151:10 | ...[...] | -| params_flow.rb:151:6:151:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:151:1:151:11 | synthetic splat argument | +| params_flow.rb:151:6:151:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:151:1:151:11 | synthetic splat argument | | params_flow.rb:151:6:151:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:151:6:151:10 | synthetic splat argument | | params_flow.rb:151:9:151:9 | 0 | type tracker without call steps | params_flow.rb:151:9:151:9 | 0 | -| params_flow.rb:151:9:151:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:151:6:151:10 | synthetic splat argument | +| params_flow.rb:151:9:151:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:151:6:151:10 | synthetic splat argument | | params_flow.rb:153:1:155:3 | &block | type tracker without call steps | params_flow.rb:153:1:155:3 | &block | | params_flow.rb:153:1:155:3 | keywordSideEffect | type tracker without call steps | params_flow.rb:153:1:155:3 | keywordSideEffect | | params_flow.rb:153:1:155:3 | self in keywordSideEffect | type tracker without call steps | params_flow.rb:153:1:155:3 | self in keywordSideEffect | @@ -3149,14 +2757,14 @@ track | params_flow.rb:153:28:153:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | | params_flow.rb:153:28:153:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:159:1:159:27 | call to keywordSideEffect | | params_flow.rb:153:28:153:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:164:1:164:40 | call to keywordSideEffect | -| params_flow.rb:153:28:153:29 | p2 | type tracker without call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | +| params_flow.rb:153:28:153:29 | p2 | type tracker without call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:154:5:154:6 | [post] p1 | type tracker without call steps | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:154:5:154:20 | call to insert | type tracker without call steps | params_flow.rb:154:5:154:20 | call to insert | | params_flow.rb:154:5:154:20 | call to insert | type tracker without call steps | params_flow.rb:159:1:159:27 | call to keywordSideEffect | | params_flow.rb:154:5:154:20 | call to insert | type tracker without call steps | params_flow.rb:164:1:164:40 | call to keywordSideEffect | | params_flow.rb:154:5:154:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:154:15:154:15 | 0 | type tracker without call steps | params_flow.rb:154:15:154:15 | 0 | -| params_flow.rb:154:15:154:15 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:154:5:154:20 | synthetic splat argument | +| params_flow.rb:154:15:154:15 | 0 | type tracker without call steps with content element 0 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:157:1:157:6 | kwargs | type tracker without call steps | params_flow.rb:157:1:157:6 | kwargs | | params_flow.rb:157:10:157:34 | Hash | type tracker without call steps | params_flow.rb:157:10:157:34 | Hash | | params_flow.rb:157:10:157:34 | call to [] | type tracker without call steps | params_flow.rb:157:10:157:34 | call to [] | @@ -3178,60 +2786,54 @@ track | params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | +| params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | -| params_flow.rb:157:24:157:32 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:157:24:157:32 | call to taint | type tracker without call steps | params_flow.rb:157:24:157:32 | call to taint | | params_flow.rb:157:24:157:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | call to [] | | params_flow.rb:157:24:157:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | synthetic hash-splat argument | | params_flow.rb:157:24:157:32 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:159:19:159:26 | ** ... | -| params_flow.rb:157:24:157:32 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:157:24:157:32 | synthetic splat argument | type tracker without call steps | params_flow.rb:157:24:157:32 | synthetic splat argument | | params_flow.rb:157:30:157:31 | 74 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:157:30:157:31 | 74 | type tracker with call steps | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | +| params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content element :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | -| params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:157:30:157:31 | 74 | type tracker with call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:157:30:157:31 | 74 | type tracker without call steps | params_flow.rb:157:24:157:32 | call to taint | | params_flow.rb:157:30:157:31 | 74 | type tracker without call steps | params_flow.rb:157:30:157:31 | 74 | +| params_flow.rb:157:30:157:31 | 74 | type tracker without call steps with content element 0 | params_flow.rb:157:24:157:32 | synthetic splat argument | | params_flow.rb:157:30:157:31 | 74 | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | call to [] | | params_flow.rb:157:30:157:31 | 74 | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | synthetic hash-splat argument | | params_flow.rb:157:30:157:31 | 74 | type tracker without call steps with content element :p2 | params_flow.rb:159:19:159:26 | ** ... | -| params_flow.rb:157:30:157:31 | 74 | type tracker without call steps with content splat position 0 | params_flow.rb:157:24:157:32 | synthetic splat argument | | params_flow.rb:158:1:158:20 | call to sink | type tracker without call steps | params_flow.rb:158:1:158:20 | call to sink | -| params_flow.rb:158:1:158:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:158:1:158:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:158:1:158:20 | synthetic splat argument | | params_flow.rb:158:6:158:16 | ...[...] | type tracker without call steps | params_flow.rb:158:6:158:16 | ...[...] | | params_flow.rb:158:6:158:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:158:6:158:16 | synthetic splat argument | | params_flow.rb:158:6:158:19 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:158:6:158:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:158:6:158:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:158:6:158:19 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:158:6:158:19 | ...[...] | type tracker without call steps | params_flow.rb:158:6:158:19 | ...[...] | -| params_flow.rb:158:6:158:19 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:158:1:158:20 | synthetic splat argument | +| params_flow.rb:158:6:158:19 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:158:1:158:20 | synthetic splat argument | | params_flow.rb:158:6:158:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:158:6:158:19 | synthetic splat argument | | params_flow.rb:158:13:158:15 | :p1 | type tracker without call steps | params_flow.rb:158:13:158:15 | :p1 | -| params_flow.rb:158:13:158:15 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:158:6:158:16 | synthetic splat argument | +| params_flow.rb:158:13:158:15 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:158:6:158:16 | synthetic splat argument | | params_flow.rb:158:18:158:18 | 0 | type tracker without call steps | params_flow.rb:158:18:158:18 | 0 | -| params_flow.rb:158:18:158:18 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:158:6:158:19 | synthetic splat argument | +| params_flow.rb:158:18:158:18 | 0 | type tracker without call steps with content element 0 | params_flow.rb:158:6:158:19 | synthetic splat argument | | params_flow.rb:159:1:159:27 | call to keywordSideEffect | type tracker without call steps | params_flow.rb:159:1:159:27 | call to keywordSideEffect | | params_flow.rb:159:19:159:26 | ** ... | type tracker with call steps | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:159:19:159:26 | ** ... | type tracker without call steps | params_flow.rb:159:19:159:26 | ** ... | | params_flow.rb:160:1:160:20 | call to sink | type tracker without call steps | params_flow.rb:160:1:160:20 | call to sink | -| params_flow.rb:160:1:160:20 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:160:1:160:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:160:1:160:20 | synthetic splat argument | | params_flow.rb:160:6:160:16 | ...[...] | type tracker without call steps | params_flow.rb:160:6:160:16 | ...[...] | | params_flow.rb:160:6:160:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:160:6:160:16 | synthetic splat argument | | params_flow.rb:160:6:160:19 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:160:6:160:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:160:6:160:19 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:160:6:160:19 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:160:6:160:19 | ...[...] | type tracker without call steps | params_flow.rb:160:6:160:19 | ...[...] | -| params_flow.rb:160:6:160:19 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:160:1:160:20 | synthetic splat argument | +| params_flow.rb:160:6:160:19 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:160:1:160:20 | synthetic splat argument | | params_flow.rb:160:6:160:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:160:6:160:19 | synthetic splat argument | | params_flow.rb:160:13:160:15 | :p1 | type tracker without call steps | params_flow.rb:160:13:160:15 | :p1 | -| params_flow.rb:160:13:160:15 | :p1 | type tracker without call steps with content splat position 0 | params_flow.rb:160:6:160:16 | synthetic splat argument | +| params_flow.rb:160:13:160:15 | :p1 | type tracker without call steps with content element 0 | params_flow.rb:160:6:160:16 | synthetic splat argument | | params_flow.rb:160:18:160:18 | 0 | type tracker without call steps | params_flow.rb:160:18:160:18 | 0 | -| params_flow.rb:160:18:160:18 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:160:6:160:19 | synthetic splat argument | +| params_flow.rb:160:18:160:18 | 0 | type tracker without call steps with content element 0 | params_flow.rb:160:6:160:19 | synthetic splat argument | | params_flow.rb:162:1:162:2 | p1 | type tracker without call steps | params_flow.rb:162:1:162:2 | p1 | | params_flow.rb:162:6:162:7 | Array | type tracker without call steps | params_flow.rb:162:6:162:7 | Array | | params_flow.rb:162:6:162:7 | call to [] | type tracker with call steps | params_flow.rb:153:23:153:24 | p1 | @@ -3239,16 +2841,14 @@ track | params_flow.rb:162:6:162:7 | call to [] | type tracker without call steps | params_flow.rb:162:6:162:7 | call to [] | | params_flow.rb:162:6:162:7 | call to [] | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:163:1:163:11 | call to sink | type tracker without call steps | params_flow.rb:163:1:163:11 | call to sink | -| params_flow.rb:163:1:163:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:163:1:163:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:163:1:163:11 | synthetic splat argument | | params_flow.rb:163:6:163:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:163:6:163:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:163:6:163:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:163:6:163:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:163:6:163:10 | ...[...] | type tracker without call steps | params_flow.rb:163:6:163:10 | ...[...] | -| params_flow.rb:163:6:163:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:163:1:163:11 | synthetic splat argument | +| params_flow.rb:163:6:163:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:163:1:163:11 | synthetic splat argument | | params_flow.rb:163:6:163:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:163:6:163:10 | synthetic splat argument | | params_flow.rb:163:9:163:9 | 0 | type tracker without call steps | params_flow.rb:163:9:163:9 | 0 | -| params_flow.rb:163:9:163:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:163:6:163:10 | synthetic splat argument | +| params_flow.rb:163:9:163:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:163:6:163:10 | synthetic splat argument | | params_flow.rb:164:1:164:40 | call to keywordSideEffect | type tracker without call steps | params_flow.rb:164:1:164:40 | call to keywordSideEffect | | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | @@ -3259,34 +2859,30 @@ track | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | +| params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | -| params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:164:31:164:39 | call to taint | type tracker without call steps | params_flow.rb:164:31:164:39 | call to taint | | params_flow.rb:164:31:164:39 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | -| params_flow.rb:164:31:164:39 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:164:31:164:39 | synthetic splat argument | type tracker without call steps | params_flow.rb:164:31:164:39 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | +| params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | -| params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content splat position 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps | params_flow.rb:164:31:164:39 | call to taint | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps | params_flow.rb:164:37:164:38 | 75 | +| params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content element 0 | params_flow.rb:164:31:164:39 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | -| params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content splat position 0 | params_flow.rb:164:31:164:39 | synthetic splat argument | | params_flow.rb:165:1:165:11 | call to sink | type tracker without call steps | params_flow.rb:165:1:165:11 | call to sink | -| params_flow.rb:165:1:165:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:165:1:165:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:165:1:165:11 | synthetic splat argument | | params_flow.rb:165:6:165:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:165:6:165:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:165:6:165:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:165:6:165:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:165:6:165:10 | ...[...] | type tracker without call steps | params_flow.rb:165:6:165:10 | ...[...] | -| params_flow.rb:165:6:165:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:165:1:165:11 | synthetic splat argument | +| params_flow.rb:165:6:165:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:165:1:165:11 | synthetic splat argument | | params_flow.rb:165:6:165:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:165:6:165:10 | synthetic splat argument | | params_flow.rb:165:9:165:9 | 0 | type tracker without call steps | params_flow.rb:165:9:165:9 | 0 | -| params_flow.rb:165:9:165:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:165:6:165:10 | synthetic splat argument | +| params_flow.rb:165:9:165:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:165:6:165:10 | synthetic splat argument | | params_flow.rb:167:1:169:3 | &block | type tracker without call steps | params_flow.rb:167:1:169:3 | &block | | params_flow.rb:167:1:169:3 | self in splatSideEffect | type tracker without call steps | params_flow.rb:167:1:169:3 | self in splatSideEffect | | params_flow.rb:167:1:169:3 | splatSideEffect | type tracker without call steps | params_flow.rb:167:1:169:3 | splatSideEffect | @@ -3300,18 +2896,18 @@ track | params_flow.rb:168:5:168:36 | call to insert | type tracker without call steps | params_flow.rb:178:1:178:30 | call to splatSideEffect | | params_flow.rb:168:5:168:36 | synthetic splat argument | type tracker without call steps | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:168:13:168:13 | 0 | type tracker without call steps | params_flow.rb:168:13:168:13 | 0 | -| params_flow.rb:168:13:168:13 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:168:5:168:14 | synthetic splat argument | +| params_flow.rb:168:13:168:13 | 0 | type tracker without call steps with content element 0 | params_flow.rb:168:5:168:14 | synthetic splat argument | | params_flow.rb:168:23:168:23 | 0 | type tracker without call steps | params_flow.rb:168:23:168:23 | 0 | -| params_flow.rb:168:23:168:23 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:168:23:168:23 | 0 | type tracker without call steps with content element 0 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:168:5:168:14 | [post] ...[...] | | params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:168:5:168:36 | call to insert | | params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:173:1:173:25 | call to splatSideEffect | | params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content element 0 or unknown | params_flow.rb:178:1:178:30 | call to splatSideEffect | -| params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:168:26:168:35 | ...[...] | type tracker without call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:168:26:168:35 | synthetic splat argument | type tracker without call steps | params_flow.rb:168:26:168:35 | synthetic splat argument | | params_flow.rb:168:34:168:34 | 1 | type tracker without call steps | params_flow.rb:168:34:168:34 | 1 | -| params_flow.rb:168:34:168:34 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:168:26:168:35 | synthetic splat argument | +| params_flow.rb:168:34:168:34 | 1 | type tracker without call steps with content element 0 | params_flow.rb:168:26:168:35 | synthetic splat argument | | params_flow.rb:171:1:171:7 | posargs | type tracker without call steps | params_flow.rb:171:1:171:7 | posargs | | params_flow.rb:171:11:171:27 | Array | type tracker without call steps | params_flow.rb:171:11:171:27 | Array | | params_flow.rb:171:11:171:27 | call to [] | type tracker with call steps | params_flow.rb:168:5:168:14 | ...[...] | @@ -3336,110 +2932,98 @@ track | params_flow.rb:171:17:171:25 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:14 | [post] ...[...] | | params_flow.rb:171:17:171:25 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:36 | call to insert | | params_flow.rb:171:17:171:25 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:167:21:167:28 | *posargs | -| params_flow.rb:171:17:171:25 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:171:17:171:25 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:171:17:171:25 | call to taint | type tracker without call steps | params_flow.rb:171:17:171:25 | call to taint | | params_flow.rb:171:17:171:25 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | call to [] | | params_flow.rb:171:17:171:25 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | synthetic splat argument | | params_flow.rb:171:17:171:25 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:173:17:173:24 | * ... | -| params_flow.rb:171:17:171:25 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:171:17:171:25 | synthetic splat argument | type tracker without call steps | params_flow.rb:171:17:171:25 | synthetic splat argument | | params_flow.rb:171:23:171:24 | 76 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:171:23:171:24 | 76 | type tracker with call steps | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:14 | [post] ...[...] | | params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:36 | call to insert | | params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content element 1 | params_flow.rb:167:21:167:28 | *posargs | -| params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:171:23:171:24 | 76 | type tracker with call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:171:23:171:24 | 76 | type tracker without call steps | params_flow.rb:171:17:171:25 | call to taint | | params_flow.rb:171:23:171:24 | 76 | type tracker without call steps | params_flow.rb:171:23:171:24 | 76 | +| params_flow.rb:171:23:171:24 | 76 | type tracker without call steps with content element 0 | params_flow.rb:171:17:171:25 | synthetic splat argument | | params_flow.rb:171:23:171:24 | 76 | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | call to [] | | params_flow.rb:171:23:171:24 | 76 | type tracker without call steps with content element 1 | params_flow.rb:171:11:171:27 | synthetic splat argument | | params_flow.rb:171:23:171:24 | 76 | type tracker without call steps with content element 1 | params_flow.rb:173:17:173:24 | * ... | -| params_flow.rb:171:23:171:24 | 76 | type tracker without call steps with content splat position 0 | params_flow.rb:171:17:171:25 | synthetic splat argument | | params_flow.rb:172:1:172:19 | call to sink | type tracker without call steps | params_flow.rb:172:1:172:19 | call to sink | -| params_flow.rb:172:1:172:19 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:172:1:172:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:172:1:172:19 | synthetic splat argument | | params_flow.rb:172:6:172:15 | ...[...] | type tracker without call steps | params_flow.rb:172:6:172:15 | ...[...] | | params_flow.rb:172:6:172:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:172:6:172:15 | synthetic splat argument | | params_flow.rb:172:6:172:18 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:172:6:172:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:172:6:172:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:172:6:172:18 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:172:6:172:18 | ...[...] | type tracker without call steps | params_flow.rb:172:6:172:18 | ...[...] | -| params_flow.rb:172:6:172:18 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:172:1:172:19 | synthetic splat argument | +| params_flow.rb:172:6:172:18 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:172:1:172:19 | synthetic splat argument | | params_flow.rb:172:6:172:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:172:6:172:18 | synthetic splat argument | | params_flow.rb:172:14:172:14 | 0 | type tracker without call steps | params_flow.rb:172:14:172:14 | 0 | -| params_flow.rb:172:14:172:14 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:172:6:172:15 | synthetic splat argument | +| params_flow.rb:172:14:172:14 | 0 | type tracker without call steps with content element 0 | params_flow.rb:172:6:172:15 | synthetic splat argument | | params_flow.rb:172:17:172:17 | 0 | type tracker without call steps | params_flow.rb:172:17:172:17 | 0 | -| params_flow.rb:172:17:172:17 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:172:6:172:18 | synthetic splat argument | +| params_flow.rb:172:17:172:17 | 0 | type tracker without call steps with content element 0 | params_flow.rb:172:6:172:18 | synthetic splat argument | | params_flow.rb:173:1:173:25 | call to splatSideEffect | type tracker without call steps | params_flow.rb:173:1:173:25 | call to splatSideEffect | | params_flow.rb:173:17:173:24 | * ... | type tracker with call steps | params_flow.rb:167:21:167:28 | *posargs | | params_flow.rb:173:17:173:24 | * ... | type tracker without call steps | params_flow.rb:173:17:173:24 | * ... | | params_flow.rb:174:1:174:19 | call to sink | type tracker without call steps | params_flow.rb:174:1:174:19 | call to sink | -| params_flow.rb:174:1:174:19 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:174:1:174:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:174:1:174:19 | synthetic splat argument | | params_flow.rb:174:6:174:15 | ...[...] | type tracker without call steps | params_flow.rb:174:6:174:15 | ...[...] | | params_flow.rb:174:6:174:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:174:6:174:15 | synthetic splat argument | | params_flow.rb:174:6:174:18 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:174:6:174:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:174:6:174:18 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:174:6:174:18 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:174:6:174:18 | ...[...] | type tracker without call steps | params_flow.rb:174:6:174:18 | ...[...] | -| params_flow.rb:174:6:174:18 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:174:1:174:19 | synthetic splat argument | +| params_flow.rb:174:6:174:18 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:174:1:174:19 | synthetic splat argument | | params_flow.rb:174:6:174:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:174:6:174:18 | synthetic splat argument | | params_flow.rb:174:14:174:14 | 0 | type tracker without call steps | params_flow.rb:174:14:174:14 | 0 | -| params_flow.rb:174:14:174:14 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:174:6:174:15 | synthetic splat argument | +| params_flow.rb:174:14:174:14 | 0 | type tracker without call steps with content element 0 | params_flow.rb:174:6:174:15 | synthetic splat argument | | params_flow.rb:174:17:174:17 | 0 | type tracker without call steps | params_flow.rb:174:17:174:17 | 0 | -| params_flow.rb:174:17:174:17 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:174:6:174:18 | synthetic splat argument | +| params_flow.rb:174:17:174:17 | 0 | type tracker without call steps with content element 0 | params_flow.rb:174:6:174:18 | synthetic splat argument | | params_flow.rb:176:1:176:2 | p1 | type tracker without call steps | params_flow.rb:176:1:176:2 | p1 | | params_flow.rb:176:6:176:7 | Array | type tracker without call steps | params_flow.rb:176:6:176:7 | Array | | params_flow.rb:176:6:176:7 | call to [] | type tracker with call steps | params_flow.rb:168:5:168:14 | ...[...] | -| params_flow.rb:176:6:176:7 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:167:21:167:28 | *posargs | +| params_flow.rb:176:6:176:7 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:167:21:167:28 | *posargs | | params_flow.rb:176:6:176:7 | call to [] | type tracker without call steps | params_flow.rb:176:6:176:7 | call to [] | -| params_flow.rb:176:6:176:7 | call to [] | type tracker without call steps with content splat position 0 | params_flow.rb:178:1:178:30 | synthetic splat argument | +| params_flow.rb:176:6:176:7 | call to [] | type tracker without call steps with content element 0 | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:177:1:177:11 | call to sink | type tracker without call steps | params_flow.rb:177:1:177:11 | call to sink | -| params_flow.rb:177:1:177:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:177:1:177:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:177:1:177:11 | synthetic splat argument | | params_flow.rb:177:6:177:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:177:6:177:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:177:6:177:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:177:6:177:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:177:6:177:10 | ...[...] | type tracker without call steps | params_flow.rb:177:6:177:10 | ...[...] | -| params_flow.rb:177:6:177:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:177:1:177:11 | synthetic splat argument | +| params_flow.rb:177:6:177:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:177:1:177:11 | synthetic splat argument | | params_flow.rb:177:6:177:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:177:6:177:10 | synthetic splat argument | | params_flow.rb:177:9:177:9 | 0 | type tracker without call steps | params_flow.rb:177:9:177:9 | 0 | -| params_flow.rb:177:9:177:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:177:6:177:10 | synthetic splat argument | +| params_flow.rb:177:9:177:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:177:6:177:10 | synthetic splat argument | | params_flow.rb:178:1:178:30 | call to splatSideEffect | type tracker without call steps | params_flow.rb:178:1:178:30 | call to splatSideEffect | | params_flow.rb:178:1:178:30 | synthetic splat argument | type tracker with call steps | params_flow.rb:167:21:167:28 | *posargs | | params_flow.rb:178:1:178:30 | synthetic splat argument | type tracker without call steps | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:14 | [post] ...[...] | | params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:36 | call to insert | -| params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:167:21:167:28 | *posargs | -| params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:167:21:167:28 | *posargs | +| params_flow.rb:178:21:178:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:178:21:178:29 | call to taint | type tracker without call steps | params_flow.rb:178:21:178:29 | call to taint | -| params_flow.rb:178:21:178:29 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | -| params_flow.rb:178:21:178:29 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:178:21:178:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:178:21:178:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:178:21:178:29 | synthetic splat argument | | params_flow.rb:178:27:178:28 | 77 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:178:27:178:28 | 77 | type tracker with call steps | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:14 | [post] ...[...] | | params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content element 0 or unknown | params_flow.rb:168:5:168:36 | call to insert | -| params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content splat position 1 | params_flow.rb:167:21:167:28 | *posargs | -| params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content splat position 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | +| params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content element 1 | params_flow.rb:167:21:167:28 | *posargs | +| params_flow.rb:178:27:178:28 | 77 | type tracker with call steps with content element 1 | params_flow.rb:168:5:168:36 | synthetic splat argument | | params_flow.rb:178:27:178:28 | 77 | type tracker without call steps | params_flow.rb:178:21:178:29 | call to taint | | params_flow.rb:178:27:178:28 | 77 | type tracker without call steps | params_flow.rb:178:27:178:28 | 77 | -| params_flow.rb:178:27:178:28 | 77 | type tracker without call steps with content splat position 0 | params_flow.rb:178:21:178:29 | synthetic splat argument | -| params_flow.rb:178:27:178:28 | 77 | type tracker without call steps with content splat position 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | +| params_flow.rb:178:27:178:28 | 77 | type tracker without call steps with content element 0 | params_flow.rb:178:21:178:29 | synthetic splat argument | +| params_flow.rb:178:27:178:28 | 77 | type tracker without call steps with content element 1 | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:179:1:179:11 | call to sink | type tracker without call steps | params_flow.rb:179:1:179:11 | call to sink | -| params_flow.rb:179:1:179:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:179:1:179:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:179:1:179:11 | synthetic splat argument | | params_flow.rb:179:6:179:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:179:6:179:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:179:6:179:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:179:6:179:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:179:6:179:10 | ...[...] | type tracker without call steps | params_flow.rb:179:6:179:10 | ...[...] | -| params_flow.rb:179:6:179:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:179:1:179:11 | synthetic splat argument | +| params_flow.rb:179:6:179:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:179:1:179:11 | synthetic splat argument | | params_flow.rb:179:6:179:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:179:6:179:10 | synthetic splat argument | | params_flow.rb:179:9:179:9 | 0 | type tracker without call steps | params_flow.rb:179:9:179:9 | 0 | -| params_flow.rb:179:9:179:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:179:6:179:10 | synthetic splat argument | +| params_flow.rb:179:9:179:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:179:6:179:10 | synthetic splat argument | | params_flow.rb:181:1:183:3 | &block | type tracker without call steps | params_flow.rb:181:1:183:3 | &block | | params_flow.rb:181:1:183:3 | positionSideEffect | type tracker without call steps | params_flow.rb:181:1:183:3 | positionSideEffect | | params_flow.rb:181:1:183:3 | self in positionSideEffect | type tracker without call steps | params_flow.rb:181:1:183:3 | self in positionSideEffect | @@ -3452,14 +3036,14 @@ track | params_flow.rb:181:28:181:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | | params_flow.rb:181:28:181:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:187:1:187:25 | call to positionSideEffect | | params_flow.rb:181:28:181:29 | p2 | type tracker without call steps with content element 0 or unknown | params_flow.rb:192:1:192:33 | call to positionSideEffect | -| params_flow.rb:181:28:181:29 | p2 | type tracker without call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:181:28:181:29 | p2 | type tracker without call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:182:5:182:6 | [post] p1 | type tracker without call steps | params_flow.rb:182:5:182:6 | [post] p1 | | params_flow.rb:182:5:182:20 | call to insert | type tracker without call steps | params_flow.rb:182:5:182:20 | call to insert | | params_flow.rb:182:5:182:20 | call to insert | type tracker without call steps | params_flow.rb:187:1:187:25 | call to positionSideEffect | | params_flow.rb:182:5:182:20 | call to insert | type tracker without call steps | params_flow.rb:192:1:192:33 | call to positionSideEffect | | params_flow.rb:182:5:182:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:182:15:182:15 | 0 | type tracker without call steps | params_flow.rb:182:15:182:15 | 0 | -| params_flow.rb:182:15:182:15 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:182:15:182:15 | 0 | type tracker without call steps with content element 0 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:185:1:185:4 | args | type tracker without call steps | params_flow.rb:185:1:185:4 | args | | params_flow.rb:185:8:185:24 | Array | type tracker without call steps | params_flow.rb:185:8:185:24 | Array | | params_flow.rb:185:8:185:24 | call to [] | type tracker with call steps | params_flow.rb:181:24:181:25 | p1 | @@ -3484,110 +3068,94 @@ track | params_flow.rb:185:14:185:22 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:6 | [post] p1 | | params_flow.rb:185:14:185:22 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | | params_flow.rb:185:14:185:22 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | -| params_flow.rb:185:14:185:22 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:185:14:185:22 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:185:14:185:22 | call to taint | type tracker without call steps | params_flow.rb:185:14:185:22 | call to taint | | params_flow.rb:185:14:185:22 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | call to [] | | params_flow.rb:185:14:185:22 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | synthetic splat argument | | params_flow.rb:185:14:185:22 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:187:20:187:24 | * ... | -| params_flow.rb:185:14:185:22 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:185:14:185:22 | synthetic splat argument | type tracker without call steps | params_flow.rb:185:14:185:22 | synthetic splat argument | | params_flow.rb:185:20:185:21 | 78 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:185:20:185:21 | 78 | type tracker with call steps | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:6 | [post] p1 | | params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | | params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content element 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | -| params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:185:20:185:21 | 78 | type tracker with call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:185:20:185:21 | 78 | type tracker without call steps | params_flow.rb:185:14:185:22 | call to taint | | params_flow.rb:185:20:185:21 | 78 | type tracker without call steps | params_flow.rb:185:20:185:21 | 78 | +| params_flow.rb:185:20:185:21 | 78 | type tracker without call steps with content element 0 | params_flow.rb:185:14:185:22 | synthetic splat argument | | params_flow.rb:185:20:185:21 | 78 | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | call to [] | | params_flow.rb:185:20:185:21 | 78 | type tracker without call steps with content element 1 | params_flow.rb:185:8:185:24 | synthetic splat argument | | params_flow.rb:185:20:185:21 | 78 | type tracker without call steps with content element 1 | params_flow.rb:187:20:187:24 | * ... | -| params_flow.rb:185:20:185:21 | 78 | type tracker without call steps with content splat position 0 | params_flow.rb:185:14:185:22 | synthetic splat argument | | params_flow.rb:186:1:186:16 | call to sink | type tracker without call steps | params_flow.rb:186:1:186:16 | call to sink | -| params_flow.rb:186:1:186:16 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:186:1:186:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:186:1:186:16 | synthetic splat argument | | params_flow.rb:186:6:186:12 | ...[...] | type tracker without call steps | params_flow.rb:186:6:186:12 | ...[...] | | params_flow.rb:186:6:186:12 | synthetic splat argument | type tracker without call steps | params_flow.rb:186:6:186:12 | synthetic splat argument | | params_flow.rb:186:6:186:15 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:186:6:186:15 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:186:6:186:15 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:186:6:186:15 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:186:6:186:15 | ...[...] | type tracker without call steps | params_flow.rb:186:6:186:15 | ...[...] | -| params_flow.rb:186:6:186:15 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:186:1:186:16 | synthetic splat argument | +| params_flow.rb:186:6:186:15 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:186:1:186:16 | synthetic splat argument | | params_flow.rb:186:6:186:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:186:6:186:15 | synthetic splat argument | | params_flow.rb:186:11:186:11 | 0 | type tracker without call steps | params_flow.rb:186:11:186:11 | 0 | -| params_flow.rb:186:11:186:11 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:186:6:186:12 | synthetic splat argument | +| params_flow.rb:186:11:186:11 | 0 | type tracker without call steps with content element 0 | params_flow.rb:186:6:186:12 | synthetic splat argument | | params_flow.rb:186:14:186:14 | 0 | type tracker without call steps | params_flow.rb:186:14:186:14 | 0 | -| params_flow.rb:186:14:186:14 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:186:6:186:15 | synthetic splat argument | +| params_flow.rb:186:14:186:14 | 0 | type tracker without call steps with content element 0 | params_flow.rb:186:6:186:15 | synthetic splat argument | | params_flow.rb:187:1:187:25 | call to positionSideEffect | type tracker without call steps | params_flow.rb:187:1:187:25 | call to positionSideEffect | | params_flow.rb:187:20:187:24 | * ... | type tracker with call steps | params_flow.rb:181:1:183:3 | synthetic splat parameter | | params_flow.rb:187:20:187:24 | * ... | type tracker without call steps | params_flow.rb:187:20:187:24 | * ... | | params_flow.rb:188:1:188:16 | call to sink | type tracker without call steps | params_flow.rb:188:1:188:16 | call to sink | -| params_flow.rb:188:1:188:16 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:188:1:188:16 | synthetic splat argument | type tracker without call steps | params_flow.rb:188:1:188:16 | synthetic splat argument | | params_flow.rb:188:6:188:12 | ...[...] | type tracker without call steps | params_flow.rb:188:6:188:12 | ...[...] | | params_flow.rb:188:6:188:12 | synthetic splat argument | type tracker without call steps | params_flow.rb:188:6:188:12 | synthetic splat argument | | params_flow.rb:188:6:188:15 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:188:6:188:15 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:188:6:188:15 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:188:6:188:15 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:188:6:188:15 | ...[...] | type tracker without call steps | params_flow.rb:188:6:188:15 | ...[...] | -| params_flow.rb:188:6:188:15 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:188:1:188:16 | synthetic splat argument | +| params_flow.rb:188:6:188:15 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:188:1:188:16 | synthetic splat argument | | params_flow.rb:188:6:188:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:188:6:188:15 | synthetic splat argument | | params_flow.rb:188:11:188:11 | 0 | type tracker without call steps | params_flow.rb:188:11:188:11 | 0 | -| params_flow.rb:188:11:188:11 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:188:6:188:12 | synthetic splat argument | +| params_flow.rb:188:11:188:11 | 0 | type tracker without call steps with content element 0 | params_flow.rb:188:6:188:12 | synthetic splat argument | | params_flow.rb:188:14:188:14 | 0 | type tracker without call steps | params_flow.rb:188:14:188:14 | 0 | -| params_flow.rb:188:14:188:14 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:188:6:188:15 | synthetic splat argument | +| params_flow.rb:188:14:188:14 | 0 | type tracker without call steps with content element 0 | params_flow.rb:188:6:188:15 | synthetic splat argument | | params_flow.rb:190:1:190:2 | p1 | type tracker without call steps | params_flow.rb:190:1:190:2 | p1 | | params_flow.rb:190:6:190:7 | Array | type tracker without call steps | params_flow.rb:190:6:190:7 | Array | | params_flow.rb:190:6:190:7 | call to [] | type tracker with call steps | params_flow.rb:181:24:181:25 | p1 | -| params_flow.rb:190:6:190:7 | call to [] | type tracker with call steps with content splat position 0 | params_flow.rb:181:1:183:3 | synthetic splat parameter | | params_flow.rb:190:6:190:7 | call to [] | type tracker without call steps | params_flow.rb:190:6:190:7 | call to [] | -| params_flow.rb:190:6:190:7 | call to [] | type tracker without call steps with content splat position 0 | params_flow.rb:192:1:192:33 | synthetic splat argument | +| params_flow.rb:190:6:190:7 | call to [] | type tracker without call steps with content element 0 | params_flow.rb:192:1:192:33 | synthetic splat argument | | params_flow.rb:191:1:191:11 | call to sink | type tracker without call steps | params_flow.rb:191:1:191:11 | call to sink | -| params_flow.rb:191:1:191:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:191:1:191:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:191:1:191:11 | synthetic splat argument | | params_flow.rb:191:6:191:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:191:6:191:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:191:6:191:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:191:6:191:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:191:6:191:10 | ...[...] | type tracker without call steps | params_flow.rb:191:6:191:10 | ...[...] | -| params_flow.rb:191:6:191:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:191:1:191:11 | synthetic splat argument | +| params_flow.rb:191:6:191:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:191:1:191:11 | synthetic splat argument | | params_flow.rb:191:6:191:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:191:6:191:10 | synthetic splat argument | | params_flow.rb:191:9:191:9 | 0 | type tracker without call steps | params_flow.rb:191:9:191:9 | 0 | -| params_flow.rb:191:9:191:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:191:6:191:10 | synthetic splat argument | +| params_flow.rb:191:9:191:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:191:6:191:10 | synthetic splat argument | | params_flow.rb:192:1:192:33 | call to positionSideEffect | type tracker without call steps | params_flow.rb:192:1:192:33 | call to positionSideEffect | -| params_flow.rb:192:1:192:33 | synthetic splat argument | type tracker with call steps | params_flow.rb:181:1:183:3 | synthetic splat parameter | | params_flow.rb:192:1:192:33 | synthetic splat argument | type tracker without call steps | params_flow.rb:192:1:192:33 | synthetic splat argument | | params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:6 | [post] p1 | | params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | -| params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | -| params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:192:24:192:32 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:192:24:192:32 | call to taint | type tracker without call steps | params_flow.rb:192:24:192:32 | call to taint | -| params_flow.rb:192:24:192:32 | call to taint | type tracker without call steps with content splat position 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | -| params_flow.rb:192:24:192:32 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | +| params_flow.rb:192:24:192:32 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | | params_flow.rb:192:24:192:32 | synthetic splat argument | type tracker without call steps | params_flow.rb:192:24:192:32 | synthetic splat argument | | params_flow.rb:192:30:192:31 | 79 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:192:30:192:31 | 79 | type tracker with call steps | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:6 | [post] p1 | | params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content element 0 or unknown | params_flow.rb:182:5:182:20 | call to insert | -| params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | -| params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content splat position 1 | params_flow.rb:181:1:183:3 | synthetic splat parameter | -| params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content splat position 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | +| params_flow.rb:192:30:192:31 | 79 | type tracker with call steps with content element 1 | params_flow.rb:182:5:182:20 | synthetic splat argument | | params_flow.rb:192:30:192:31 | 79 | type tracker without call steps | params_flow.rb:192:24:192:32 | call to taint | | params_flow.rb:192:30:192:31 | 79 | type tracker without call steps | params_flow.rb:192:30:192:31 | 79 | -| params_flow.rb:192:30:192:31 | 79 | type tracker without call steps with content splat position 0 | params_flow.rb:192:24:192:32 | synthetic splat argument | -| params_flow.rb:192:30:192:31 | 79 | type tracker without call steps with content splat position 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | +| params_flow.rb:192:30:192:31 | 79 | type tracker without call steps with content element 0 | params_flow.rb:192:24:192:32 | synthetic splat argument | +| params_flow.rb:192:30:192:31 | 79 | type tracker without call steps with content element 1 | params_flow.rb:192:1:192:33 | synthetic splat argument | | params_flow.rb:193:1:193:11 | call to sink | type tracker without call steps | params_flow.rb:193:1:193:11 | call to sink | -| params_flow.rb:193:1:193:11 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:193:1:193:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:193:1:193:11 | synthetic splat argument | | params_flow.rb:193:6:193:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:193:6:193:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:193:6:193:10 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:193:6:193:10 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:193:6:193:10 | ...[...] | type tracker without call steps | params_flow.rb:193:6:193:10 | ...[...] | -| params_flow.rb:193:6:193:10 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:193:1:193:11 | synthetic splat argument | +| params_flow.rb:193:6:193:10 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:193:1:193:11 | synthetic splat argument | | params_flow.rb:193:6:193:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:193:6:193:10 | synthetic splat argument | | params_flow.rb:193:9:193:9 | 0 | type tracker without call steps | params_flow.rb:193:9:193:9 | 0 | -| params_flow.rb:193:9:193:9 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:193:6:193:10 | synthetic splat argument | +| params_flow.rb:193:9:193:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:193:6:193:10 | synthetic splat argument | | params_flow.rb:195:1:195:8 | int_hash | type tracker without call steps | params_flow.rb:195:1:195:8 | int_hash | | params_flow.rb:195:12:198:1 | Hash | type tracker without call steps | params_flow.rb:195:12:198:1 | Hash | | params_flow.rb:195:12:198:1 | call to [] | type tracker with call steps | params_flow.rb:200:9:200:9 | x | @@ -3602,28 +3170,26 @@ track | params_flow.rb:195:12:198:1 | synthetic splat argument | type tracker without call steps | params_flow.rb:195:12:198:1 | synthetic splat argument | | params_flow.rb:196:5:196:5 | 0 | type tracker without call steps | params_flow.rb:196:5:196:5 | 0 | | params_flow.rb:196:5:196:18 | Pair | type tracker without call steps | params_flow.rb:196:5:196:18 | Pair | -| params_flow.rb:196:5:196:18 | Pair | type tracker without call steps with content splat position 0 | params_flow.rb:195:12:198:1 | synthetic splat argument | +| params_flow.rb:196:5:196:18 | Pair | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | synthetic splat argument | | params_flow.rb:196:10:196:18 | call to taint | type tracker with call steps | params_flow.rb:200:9:200:9 | x | | params_flow.rb:196:10:196:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:200:1:205:3 | synthetic splat parameter | | params_flow.rb:196:10:196:18 | call to taint | type tracker without call steps | params_flow.rb:196:10:196:18 | call to taint | | params_flow.rb:196:10:196:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | call to [] | | params_flow.rb:196:10:196:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | synthetic hash-splat argument | | params_flow.rb:196:10:196:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:207:5:207:13 | * ... | -| params_flow.rb:196:10:196:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:196:10:196:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:196:10:196:18 | synthetic splat argument | | params_flow.rb:196:16:196:17 | 80 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:196:16:196:17 | 80 | type tracker with call steps | params_flow.rb:200:9:200:9 | x | | params_flow.rb:196:16:196:17 | 80 | type tracker with call steps with content element 0 | params_flow.rb:200:1:205:3 | synthetic splat parameter | -| params_flow.rb:196:16:196:17 | 80 | type tracker with call steps with content splat position 0 | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:196:16:196:17 | 80 | type tracker without call steps | params_flow.rb:196:10:196:18 | call to taint | | params_flow.rb:196:16:196:17 | 80 | type tracker without call steps | params_flow.rb:196:16:196:17 | 80 | | params_flow.rb:196:16:196:17 | 80 | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | call to [] | | params_flow.rb:196:16:196:17 | 80 | type tracker without call steps with content element 0 | params_flow.rb:195:12:198:1 | synthetic hash-splat argument | +| params_flow.rb:196:16:196:17 | 80 | type tracker without call steps with content element 0 | params_flow.rb:196:10:196:18 | synthetic splat argument | | params_flow.rb:196:16:196:17 | 80 | type tracker without call steps with content element 0 | params_flow.rb:207:5:207:13 | * ... | -| params_flow.rb:196:16:196:17 | 80 | type tracker without call steps with content splat position 0 | params_flow.rb:196:10:196:18 | synthetic splat argument | | params_flow.rb:197:5:197:5 | 1 | type tracker without call steps | params_flow.rb:197:5:197:5 | 1 | | params_flow.rb:197:5:197:12 | Pair | type tracker without call steps | params_flow.rb:197:5:197:12 | Pair | -| params_flow.rb:197:5:197:12 | Pair | type tracker without call steps with content splat position 1 | params_flow.rb:195:12:198:1 | synthetic splat argument | +| params_flow.rb:197:5:197:12 | Pair | type tracker without call steps with content element 1 | params_flow.rb:195:12:198:1 | synthetic splat argument | | params_flow.rb:197:10:197:12 | "B" | type tracker with call steps | params_flow.rb:200:12:200:12 | y | | params_flow.rb:197:10:197:12 | "B" | type tracker with call steps with content element 1 | params_flow.rb:200:1:205:3 | synthetic splat parameter | | params_flow.rb:197:10:197:12 | "B" | type tracker without call steps | params_flow.rb:197:10:197:12 | "B" | @@ -3640,50 +3206,42 @@ track | params_flow.rb:200:12:200:12 | y | type tracker without call steps | params_flow.rb:200:12:200:12 | y | | params_flow.rb:200:12:200:12 | y | type tracker without call steps | params_flow.rb:200:12:200:12 | y | | params_flow.rb:201:5:201:15 | call to sink | type tracker without call steps | params_flow.rb:201:5:201:15 | call to sink | -| params_flow.rb:201:5:201:15 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:201:5:201:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:201:5:201:15 | synthetic splat argument | | params_flow.rb:201:11:201:14 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:201:11:201:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:201:11:201:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:201:11:201:14 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:201:11:201:14 | ...[...] | type tracker without call steps | params_flow.rb:201:11:201:14 | ...[...] | -| params_flow.rb:201:11:201:14 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:201:5:201:15 | synthetic splat argument | +| params_flow.rb:201:11:201:14 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:201:5:201:15 | synthetic splat argument | | params_flow.rb:201:11:201:14 | synthetic splat argument | type tracker without call steps | params_flow.rb:201:11:201:14 | synthetic splat argument | | params_flow.rb:201:13:201:13 | 0 | type tracker without call steps | params_flow.rb:201:13:201:13 | 0 | -| params_flow.rb:201:13:201:13 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:201:11:201:14 | synthetic splat argument | +| params_flow.rb:201:13:201:13 | 0 | type tracker without call steps with content element 0 | params_flow.rb:201:11:201:14 | synthetic splat argument | | params_flow.rb:202:5:202:15 | call to sink | type tracker without call steps | params_flow.rb:202:5:202:15 | call to sink | -| params_flow.rb:202:5:202:15 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:202:5:202:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:202:5:202:15 | synthetic splat argument | | params_flow.rb:202:11:202:14 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:202:11:202:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:202:11:202:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:202:11:202:14 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:202:11:202:14 | ...[...] | type tracker without call steps | params_flow.rb:202:11:202:14 | ...[...] | -| params_flow.rb:202:11:202:14 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:202:5:202:15 | synthetic splat argument | +| params_flow.rb:202:11:202:14 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:202:5:202:15 | synthetic splat argument | | params_flow.rb:202:11:202:14 | synthetic splat argument | type tracker without call steps | params_flow.rb:202:11:202:14 | synthetic splat argument | | params_flow.rb:202:13:202:13 | 1 | type tracker without call steps | params_flow.rb:202:13:202:13 | 1 | -| params_flow.rb:202:13:202:13 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:202:11:202:14 | synthetic splat argument | +| params_flow.rb:202:13:202:13 | 1 | type tracker without call steps with content element 0 | params_flow.rb:202:11:202:14 | synthetic splat argument | | params_flow.rb:203:5:203:15 | call to sink | type tracker without call steps | params_flow.rb:203:5:203:15 | call to sink | -| params_flow.rb:203:5:203:15 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:203:5:203:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:203:5:203:15 | synthetic splat argument | | params_flow.rb:203:11:203:14 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:203:11:203:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:203:11:203:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:203:11:203:14 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:203:11:203:14 | ...[...] | type tracker without call steps | params_flow.rb:203:11:203:14 | ...[...] | -| params_flow.rb:203:11:203:14 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:203:5:203:15 | synthetic splat argument | +| params_flow.rb:203:11:203:14 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:203:5:203:15 | synthetic splat argument | | params_flow.rb:203:11:203:14 | synthetic splat argument | type tracker without call steps | params_flow.rb:203:11:203:14 | synthetic splat argument | | params_flow.rb:203:13:203:13 | 0 | type tracker without call steps | params_flow.rb:203:13:203:13 | 0 | -| params_flow.rb:203:13:203:13 | 0 | type tracker without call steps with content splat position 0 | params_flow.rb:203:11:203:14 | synthetic splat argument | +| params_flow.rb:203:13:203:13 | 0 | type tracker without call steps with content element 0 | params_flow.rb:203:11:203:14 | synthetic splat argument | | params_flow.rb:204:5:204:15 | call to sink | type tracker without call steps | params_flow.rb:204:5:204:15 | call to sink | | params_flow.rb:204:5:204:15 | call to sink | type tracker without call steps | params_flow.rb:207:1:207:14 | call to foo | -| params_flow.rb:204:5:204:15 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:204:5:204:15 | synthetic splat argument | type tracker without call steps | params_flow.rb:204:5:204:15 | synthetic splat argument | | params_flow.rb:204:11:204:14 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:204:11:204:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:5:1:7:3 | synthetic splat parameter | -| params_flow.rb:204:11:204:14 | ...[...] | type tracker with call steps with content splat position 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | +| params_flow.rb:204:11:204:14 | ...[...] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:204:11:204:14 | ...[...] | type tracker without call steps | params_flow.rb:204:11:204:14 | ...[...] | -| params_flow.rb:204:11:204:14 | ...[...] | type tracker without call steps with content splat position 0 | params_flow.rb:204:5:204:15 | synthetic splat argument | +| params_flow.rb:204:11:204:14 | ...[...] | type tracker without call steps with content element 0 | params_flow.rb:204:5:204:15 | synthetic splat argument | | params_flow.rb:204:11:204:14 | synthetic splat argument | type tracker without call steps | params_flow.rb:204:11:204:14 | synthetic splat argument | | params_flow.rb:204:13:204:13 | 1 | type tracker without call steps | params_flow.rb:204:13:204:13 | 1 | -| params_flow.rb:204:13:204:13 | 1 | type tracker without call steps with content splat position 0 | params_flow.rb:204:11:204:14 | synthetic splat argument | +| params_flow.rb:204:13:204:13 | 1 | type tracker without call steps with content element 0 | params_flow.rb:204:11:204:14 | synthetic splat argument | | params_flow.rb:207:1:207:14 | call to foo | type tracker without call steps | params_flow.rb:207:1:207:14 | call to foo | | params_flow.rb:207:5:207:13 | * ... | type tracker with call steps | params_flow.rb:200:1:205:3 | synthetic splat parameter | | params_flow.rb:207:5:207:13 | * ... | type tracker without call steps | params_flow.rb:207:5:207:13 | * ... | @@ -4203,17 +3761,14 @@ trackEnd | params_flow.rb:9:20:9:21 | p2 | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:9:20:9:21 | p2 | params_flow.rb:11:10:11:11 | p2 | | params_flow.rb:10:5:10:11 | call to sink | params_flow.rb:10:5:10:11 | call to sink | -| params_flow.rb:10:5:10:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:10:5:10:11 | synthetic splat argument | params_flow.rb:10:5:10:11 | synthetic splat argument | | params_flow.rb:11:5:11:11 | call to sink | params_flow.rb:11:5:11:11 | call to sink | | params_flow.rb:11:5:11:11 | call to sink | params_flow.rb:14:1:14:30 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | params_flow.rb:44:1:44:28 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | params_flow.rb:47:1:47:17 | call to positional | | params_flow.rb:11:5:11:11 | call to sink | params_flow.rb:118:1:118:14 | call to positional | -| params_flow.rb:11:5:11:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:11:5:11:11 | synthetic splat argument | params_flow.rb:11:5:11:11 | synthetic splat argument | | params_flow.rb:14:1:14:30 | call to positional | params_flow.rb:14:1:14:30 | call to positional | -| params_flow.rb:14:1:14:30 | synthetic splat argument | params_flow.rb:9:1:12:3 | synthetic splat parameter | | params_flow.rb:14:1:14:30 | synthetic splat argument | params_flow.rb:14:1:14:30 | synthetic splat argument | | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:5:10:5:10 | x | | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:5:10:5:10 | x | @@ -4222,7 +3777,6 @@ trackEnd | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:10:10:10:11 | p1 | | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:14:12:14:19 | call to taint | -| params_flow.rb:14:12:14:19 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:14:12:14:19 | synthetic splat argument | params_flow.rb:14:12:14:19 | synthetic splat argument | | params_flow.rb:14:18:14:18 | 1 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:14:18:14:18 | 1 | params_flow.rb:1:11:1:11 | x | @@ -4242,7 +3796,6 @@ trackEnd | params_flow.rb:14:22:14:29 | call to taint | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:14:22:14:29 | call to taint | params_flow.rb:11:10:11:11 | p2 | | params_flow.rb:14:22:14:29 | call to taint | params_flow.rb:14:22:14:29 | call to taint | -| params_flow.rb:14:22:14:29 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:14:22:14:29 | synthetic splat argument | params_flow.rb:14:22:14:29 | synthetic splat argument | | params_flow.rb:14:28:14:28 | 2 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:14:28:14:28 | 2 | params_flow.rb:1:11:1:11 | x | @@ -4280,14 +3833,12 @@ trackEnd | params_flow.rb:16:18:16:19 | p2 | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:16:18:16:19 | p2 | params_flow.rb:18:10:18:11 | p2 | | params_flow.rb:17:5:17:11 | call to sink | params_flow.rb:17:5:17:11 | call to sink | -| params_flow.rb:17:5:17:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:17:5:17:11 | synthetic splat argument | params_flow.rb:17:5:17:11 | synthetic splat argument | | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:18:5:18:11 | call to sink | | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:21:1:21:35 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:22:1:22:35 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:23:1:23:41 | call to keyword | | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:41:1:41:30 | call to keyword | -| params_flow.rb:18:5:18:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:18:5:18:11 | synthetic splat argument | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:1:21:35 | call to keyword | params_flow.rb:21:1:21:35 | call to keyword | | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | @@ -4301,7 +3852,6 @@ trackEnd | params_flow.rb:21:13:21:20 | call to taint | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:21:13:21:20 | call to taint | params_flow.rb:17:10:17:11 | p1 | | params_flow.rb:21:13:21:20 | call to taint | params_flow.rb:21:13:21:20 | call to taint | -| params_flow.rb:21:13:21:20 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:21:13:21:20 | synthetic splat argument | params_flow.rb:21:13:21:20 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:19:21:19 | 3 | params_flow.rb:1:11:1:11 | x | @@ -4323,7 +3873,6 @@ trackEnd | params_flow.rb:21:27:21:34 | call to taint | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:21:27:21:34 | call to taint | params_flow.rb:18:10:18:11 | p2 | | params_flow.rb:21:27:21:34 | call to taint | params_flow.rb:21:27:21:34 | call to taint | -| params_flow.rb:21:27:21:34 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:21:27:21:34 | synthetic splat argument | params_flow.rb:21:27:21:34 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:33:21:33 | 4 | params_flow.rb:1:11:1:11 | x | @@ -4348,7 +3897,6 @@ trackEnd | params_flow.rb:22:13:22:20 | call to taint | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:22:13:22:20 | call to taint | params_flow.rb:18:10:18:11 | p2 | | params_flow.rb:22:13:22:20 | call to taint | params_flow.rb:22:13:22:20 | call to taint | -| params_flow.rb:22:13:22:20 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:22:13:22:20 | synthetic splat argument | params_flow.rb:22:13:22:20 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:19:22:19 | 5 | params_flow.rb:1:11:1:11 | x | @@ -4370,7 +3918,6 @@ trackEnd | params_flow.rb:22:27:22:34 | call to taint | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:22:27:22:34 | call to taint | params_flow.rb:17:10:17:11 | p1 | | params_flow.rb:22:27:22:34 | call to taint | params_flow.rb:22:27:22:34 | call to taint | -| params_flow.rb:22:27:22:34 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:22:27:22:34 | synthetic splat argument | params_flow.rb:22:27:22:34 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:33:22:33 | 6 | params_flow.rb:1:11:1:11 | x | @@ -4395,7 +3942,6 @@ trackEnd | params_flow.rb:23:16:23:23 | call to taint | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:23:16:23:23 | call to taint | params_flow.rb:18:10:18:11 | p2 | | params_flow.rb:23:16:23:23 | call to taint | params_flow.rb:23:16:23:23 | call to taint | -| params_flow.rb:23:16:23:23 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:23:16:23:23 | synthetic splat argument | params_flow.rb:23:16:23:23 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:22:23:22 | 7 | params_flow.rb:1:11:1:11 | x | @@ -4417,7 +3963,6 @@ trackEnd | params_flow.rb:23:33:23:40 | call to taint | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:23:33:23:40 | call to taint | params_flow.rb:17:10:17:11 | p1 | | params_flow.rb:23:33:23:40 | call to taint | params_flow.rb:23:33:23:40 | call to taint | -| params_flow.rb:23:33:23:40 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:23:33:23:40 | synthetic splat argument | params_flow.rb:23:33:23:40 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:39:23:39 | 8 | params_flow.rb:1:11:1:11 | x | @@ -4458,10 +4003,8 @@ trackEnd | params_flow.rb:25:17:25:24 | **kwargs | params_flow.rb:30:11:30:16 | kwargs | | params_flow.rb:25:19:25:24 | kwargs | params_flow.rb:25:19:25:24 | kwargs | | params_flow.rb:26:5:26:11 | call to sink | params_flow.rb:26:5:26:11 | call to sink | -| params_flow.rb:26:5:26:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:26:5:26:11 | synthetic splat argument | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:27:5:27:22 | call to sink | params_flow.rb:27:5:27:22 | call to sink | -| params_flow.rb:27:5:27:22 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:27:5:27:22 | synthetic splat argument | params_flow.rb:27:5:27:22 | synthetic splat argument | | params_flow.rb:27:11:27:21 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:27:11:27:21 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4471,7 +4014,6 @@ trackEnd | params_flow.rb:27:11:27:21 | synthetic splat argument | params_flow.rb:27:11:27:21 | synthetic splat argument | | params_flow.rb:27:18:27:20 | :p1 | params_flow.rb:27:18:27:20 | :p1 | | params_flow.rb:28:5:28:22 | call to sink | params_flow.rb:28:5:28:22 | call to sink | -| params_flow.rb:28:5:28:22 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:28:5:28:22 | synthetic splat argument | params_flow.rb:28:5:28:22 | synthetic splat argument | | params_flow.rb:28:11:28:21 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:28:11:28:21 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4481,7 +4023,6 @@ trackEnd | params_flow.rb:28:11:28:21 | synthetic splat argument | params_flow.rb:28:11:28:21 | synthetic splat argument | | params_flow.rb:28:18:28:20 | :p2 | params_flow.rb:28:18:28:20 | :p2 | | params_flow.rb:29:5:29:22 | call to sink | params_flow.rb:29:5:29:22 | call to sink | -| params_flow.rb:29:5:29:22 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:29:5:29:22 | synthetic splat argument | params_flow.rb:29:5:29:22 | synthetic splat argument | | params_flow.rb:29:11:29:21 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:29:11:29:21 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4494,7 +4035,6 @@ trackEnd | params_flow.rb:30:5:30:22 | call to sink | params_flow.rb:33:1:33:58 | call to kwargs | | params_flow.rb:30:5:30:22 | call to sink | params_flow.rb:35:1:35:29 | call to kwargs | | params_flow.rb:30:5:30:22 | call to sink | params_flow.rb:38:1:38:14 | call to kwargs | -| params_flow.rb:30:5:30:22 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:30:5:30:22 | synthetic splat argument | params_flow.rb:30:5:30:22 | synthetic splat argument | | params_flow.rb:30:11:30:21 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:30:11:30:21 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4523,7 +4063,6 @@ trackEnd | params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:27:10:27:22 | ( ... ) | | params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:27:11:27:21 | ...[...] | | params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:33:12:33:19 | call to taint | -| params_flow.rb:33:12:33:19 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:12:33:19 | synthetic splat argument | params_flow.rb:33:12:33:19 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:18:33:18 | 9 | params_flow.rb:1:11:1:11 | x | @@ -4546,7 +4085,6 @@ trackEnd | params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:28:10:28:22 | ( ... ) | | params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:28:11:28:21 | ...[...] | | params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:33:26:33:34 | call to taint | -| params_flow.rb:33:26:33:34 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:26:33:34 | synthetic splat argument | params_flow.rb:33:26:33:34 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:32:33:33 | 10 | params_flow.rb:1:11:1:11 | x | @@ -4566,7 +4104,6 @@ trackEnd | params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:29:10:29:22 | ( ... ) | | params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:29:11:29:21 | ...[...] | | params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:33:41:33:49 | call to taint | -| params_flow.rb:33:41:33:49 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:33:41:33:49 | synthetic splat argument | params_flow.rb:33:41:33:49 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:47:33:48 | 11 | params_flow.rb:1:11:1:11 | x | @@ -4605,7 +4142,6 @@ trackEnd | params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:29:10:29:22 | ( ... ) | | params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:29:11:29:21 | ...[...] | | params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:14:34:22 | call to taint | -| params_flow.rb:34:14:34:22 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:34:14:34:22 | synthetic splat argument | params_flow.rb:34:14:34:22 | synthetic splat argument | | params_flow.rb:34:20:34:21 | 12 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:34:20:34:21 | 12 | params_flow.rb:1:11:1:11 | x | @@ -4645,7 +4181,6 @@ trackEnd | params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:27:10:27:22 | ( ... ) | | params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:27:11:27:21 | ...[...] | | params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:35:12:35:20 | call to taint | -| params_flow.rb:35:12:35:20 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:35:12:35:20 | synthetic splat argument | params_flow.rb:35:12:35:20 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:35:18:35:19 | 13 | params_flow.rb:1:11:1:11 | x | @@ -4690,7 +4225,6 @@ trackEnd | params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:27:10:27:22 | ( ... ) | | params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:27:11:27:21 | ...[...] | | params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:37:16:37:24 | call to taint | -| params_flow.rb:37:16:37:24 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:37:16:37:24 | synthetic splat argument | params_flow.rb:37:16:37:24 | synthetic splat argument | | params_flow.rb:37:22:37:23 | 14 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:37:22:37:23 | 14 | params_flow.rb:1:11:1:11 | x | @@ -4713,7 +4247,6 @@ trackEnd | params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:28:10:28:22 | ( ... ) | | params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:28:11:28:21 | ...[...] | | params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:37:34:37:42 | call to taint | -| params_flow.rb:37:34:37:42 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:37:34:37:42 | synthetic splat argument | params_flow.rb:37:34:37:42 | synthetic splat argument | | params_flow.rb:37:40:37:41 | 15 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:37:40:37:41 | 15 | params_flow.rb:1:11:1:11 | x | @@ -4754,7 +4287,6 @@ trackEnd | params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:17:10:17:11 | p1 | | params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:40:16:40:24 | call to taint | -| params_flow.rb:40:16:40:24 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:40:16:40:24 | synthetic splat argument | params_flow.rb:40:16:40:24 | synthetic splat argument | | params_flow.rb:40:22:40:23 | 16 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:40:22:40:23 | 16 | params_flow.rb:1:11:1:11 | x | @@ -4779,7 +4311,6 @@ trackEnd | params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:18:10:18:11 | p2 | | params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:41:13:41:21 | call to taint | -| params_flow.rb:41:13:41:21 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:41:13:41:21 | synthetic splat argument | params_flow.rb:41:13:41:21 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:41:19:41:20 | 17 | params_flow.rb:1:11:1:11 | x | @@ -4824,7 +4355,6 @@ trackEnd | params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:11:10:11:11 | p2 | | params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:43:9:43:17 | call to taint | -| params_flow.rb:43:9:43:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:43:9:43:17 | synthetic splat argument | params_flow.rb:43:9:43:17 | synthetic splat argument | | params_flow.rb:43:15:43:16 | 17 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:43:15:43:16 | 17 | params_flow.rb:1:11:1:11 | x | @@ -4847,7 +4377,6 @@ trackEnd | params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:10:10:10:11 | p1 | | params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:44:12:44:20 | call to taint | -| params_flow.rb:44:12:44:20 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:44:12:44:20 | synthetic splat argument | params_flow.rb:44:12:44:20 | synthetic splat argument | | params_flow.rb:44:18:44:19 | 16 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:44:18:44:19 | 16 | params_flow.rb:1:11:1:11 | x | @@ -4891,7 +4420,6 @@ trackEnd | params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:9:16:9:17 | p1 | | params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:10:10:10:11 | p1 | | params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:46:9:46:17 | call to taint | -| params_flow.rb:46:9:46:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:46:9:46:17 | synthetic splat argument | params_flow.rb:46:9:46:17 | synthetic splat argument | | params_flow.rb:46:15:46:16 | 18 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:46:15:46:16 | 18 | params_flow.rb:1:11:1:11 | x | @@ -4911,7 +4439,6 @@ trackEnd | params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:9:20:9:21 | p2 | | params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:11:10:11:11 | p2 | | params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:46:20:46:28 | call to taint | -| params_flow.rb:46:20:46:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:46:20:46:28 | synthetic splat argument | params_flow.rb:46:20:46:28 | synthetic splat argument | | params_flow.rb:46:26:46:27 | 19 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:46:26:46:27 | 19 | params_flow.rb:1:11:1:11 | x | @@ -4951,10 +4478,8 @@ trackEnd | params_flow.rb:49:17:49:24 | *posargs | params_flow.rb:52:11:52:17 | posargs | | params_flow.rb:49:18:49:24 | posargs | params_flow.rb:49:18:49:24 | posargs | | params_flow.rb:50:5:50:11 | call to sink | params_flow.rb:50:5:50:11 | call to sink | -| params_flow.rb:50:5:50:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:50:5:50:11 | synthetic splat argument | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:51:5:51:21 | call to sink | params_flow.rb:51:5:51:21 | call to sink | -| params_flow.rb:51:5:51:21 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:51:5:51:21 | synthetic splat argument | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:51:11:51:20 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:51:11:51:20 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4967,7 +4492,6 @@ trackEnd | params_flow.rb:52:5:52:21 | call to sink | params_flow.rb:55:1:55:29 | call to posargs | | params_flow.rb:52:5:52:21 | call to sink | params_flow.rb:58:1:58:25 | call to posargs | | params_flow.rb:52:5:52:21 | call to sink | params_flow.rb:61:1:61:14 | call to posargs | -| params_flow.rb:52:5:52:21 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:52:5:52:21 | synthetic splat argument | params_flow.rb:52:5:52:21 | synthetic splat argument | | params_flow.rb:52:11:52:20 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:52:11:52:20 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -4986,7 +4510,6 @@ trackEnd | params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:50:10:50:11 | p1 | | params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:55:9:55:17 | call to taint | -| params_flow.rb:55:9:55:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:55:9:55:17 | synthetic splat argument | params_flow.rb:55:9:55:17 | synthetic splat argument | | params_flow.rb:55:15:55:16 | 20 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:55:15:55:16 | 20 | params_flow.rb:1:11:1:11 | x | @@ -5005,7 +4528,6 @@ trackEnd | params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:51:10:51:21 | ( ... ) | | params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:51:11:51:20 | ...[...] | | params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:55:20:55:28 | call to taint | -| params_flow.rb:55:20:55:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:55:20:55:28 | synthetic splat argument | params_flow.rb:55:20:55:28 | synthetic splat argument | | params_flow.rb:55:26:55:27 | 21 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:55:26:55:27 | 21 | params_flow.rb:1:11:1:11 | x | @@ -5044,7 +4566,6 @@ trackEnd | params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:51:10:51:21 | ( ... ) | | params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:51:11:51:20 | ...[...] | | params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:9:57:17 | call to taint | -| params_flow.rb:57:9:57:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:57:9:57:17 | synthetic splat argument | params_flow.rb:57:9:57:17 | synthetic splat argument | | params_flow.rb:57:15:57:16 | 22 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:57:15:57:16 | 22 | params_flow.rb:1:11:1:11 | x | @@ -5066,7 +4587,6 @@ trackEnd | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:50:10:50:11 | p1 | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:58:9:58:17 | call to taint | -| params_flow.rb:58:9:58:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:58:9:58:17 | synthetic splat argument | params_flow.rb:58:9:58:17 | synthetic splat argument | | params_flow.rb:58:15:58:16 | 23 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:58:15:58:16 | 23 | params_flow.rb:1:11:1:11 | x | @@ -5114,7 +4634,6 @@ trackEnd | params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:50:10:50:11 | p1 | | params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:60:9:60:17 | call to taint | -| params_flow.rb:60:9:60:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:60:9:60:17 | synthetic splat argument | params_flow.rb:60:9:60:17 | synthetic splat argument | | params_flow.rb:60:15:60:16 | 24 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:60:15:60:16 | 24 | params_flow.rb:1:11:1:11 | x | @@ -5133,7 +4652,6 @@ trackEnd | params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:51:10:51:21 | ( ... ) | | params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:51:11:51:20 | ...[...] | | params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:60:20:60:28 | call to taint | -| params_flow.rb:60:20:60:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:60:20:60:28 | synthetic splat argument | params_flow.rb:60:20:60:28 | synthetic splat argument | | params_flow.rb:60:26:60:27 | 25 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:60:26:60:27 | 25 | params_flow.rb:1:11:1:11 | x | @@ -5157,7 +4675,6 @@ trackEnd | params_flow.rb:63:8:63:16 | call to taint | params_flow.rb:63:8:63:16 | call to taint | | params_flow.rb:63:8:63:16 | call to taint | params_flow.rb:65:10:65:13 | ...[...] | | params_flow.rb:63:8:63:16 | call to taint | params_flow.rb:67:13:67:16 | args | -| params_flow.rb:63:8:63:16 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:63:8:63:16 | synthetic splat argument | params_flow.rb:63:8:63:16 | synthetic splat argument | | params_flow.rb:63:14:63:15 | 26 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:63:14:63:15 | 26 | params_flow.rb:1:11:1:11 | x | @@ -5185,7 +4702,6 @@ trackEnd | params_flow.rb:64:17:64:17 | x | params_flow.rb:64:17:64:17 | x | | params_flow.rb:65:5:65:13 | call to sink | params_flow.rb:65:5:65:13 | call to sink | | params_flow.rb:65:5:65:13 | call to sink | params_flow.rb:67:1:67:17 | call to splatstuff | -| params_flow.rb:65:5:65:13 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:65:5:65:13 | synthetic splat argument | params_flow.rb:65:5:65:13 | synthetic splat argument | | params_flow.rb:65:10:65:13 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:65:10:65:13 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -5246,13 +4762,10 @@ trackEnd | params_flow.rb:69:27:69:27 | r | params_flow.rb:69:27:69:27 | r | | params_flow.rb:69:27:69:27 | r | params_flow.rb:75:10:75:10 | r | | params_flow.rb:70:5:70:10 | call to sink | params_flow.rb:70:5:70:10 | call to sink | -| params_flow.rb:70:5:70:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:70:5:70:10 | synthetic splat argument | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:71:5:71:10 | call to sink | params_flow.rb:71:5:71:10 | call to sink | -| params_flow.rb:71:5:71:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:71:5:71:10 | synthetic splat argument | params_flow.rb:71:5:71:10 | synthetic splat argument | | params_flow.rb:72:5:72:13 | call to sink | params_flow.rb:72:5:72:13 | call to sink | -| params_flow.rb:72:5:72:13 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:72:5:72:13 | synthetic splat argument | params_flow.rb:72:5:72:13 | synthetic splat argument | | params_flow.rb:72:10:72:13 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:72:10:72:13 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -5261,7 +4774,6 @@ trackEnd | params_flow.rb:72:10:72:13 | synthetic splat argument | params_flow.rb:72:10:72:13 | synthetic splat argument | | params_flow.rb:72:12:72:12 | 0 | params_flow.rb:72:12:72:12 | 0 | | params_flow.rb:73:5:73:13 | call to sink | params_flow.rb:73:5:73:13 | call to sink | -| params_flow.rb:73:5:73:13 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:73:5:73:13 | synthetic splat argument | params_flow.rb:73:5:73:13 | synthetic splat argument | | params_flow.rb:73:10:73:13 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:73:10:73:13 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -5270,13 +4782,11 @@ trackEnd | params_flow.rb:73:10:73:13 | synthetic splat argument | params_flow.rb:73:10:73:13 | synthetic splat argument | | params_flow.rb:73:12:73:12 | 1 | params_flow.rb:73:12:73:12 | 1 | | params_flow.rb:74:5:74:10 | call to sink | params_flow.rb:74:5:74:10 | call to sink | -| params_flow.rb:74:5:74:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:74:5:74:10 | synthetic splat argument | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:75:5:75:10 | call to sink | params_flow.rb:75:5:75:10 | call to sink | | params_flow.rb:75:5:75:10 | call to sink | params_flow.rb:78:1:78:63 | call to splatmid | | params_flow.rb:75:5:75:10 | call to sink | params_flow.rb:81:1:81:37 | call to splatmid | | params_flow.rb:75:5:75:10 | call to sink | params_flow.rb:96:1:96:88 | call to splatmid | -| params_flow.rb:75:5:75:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:75:5:75:10 | synthetic splat argument | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:78:1:78:63 | call to splatmid | params_flow.rb:78:1:78:63 | call to splatmid | | params_flow.rb:78:1:78:63 | synthetic splat argument | params_flow.rb:69:1:76:3 | synthetic splat parameter | @@ -5288,7 +4798,6 @@ trackEnd | params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:69:14:69:14 | x | | params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:70:10:70:10 | x | | params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:78:10:78:18 | call to taint | -| params_flow.rb:78:10:78:18 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:78:10:78:18 | synthetic splat argument | params_flow.rb:78:10:78:18 | synthetic splat argument | | params_flow.rb:78:16:78:17 | 27 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:16:78:17 | 27 | params_flow.rb:1:11:1:11 | x | @@ -5308,7 +4817,6 @@ trackEnd | params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:69:17:69:17 | y | | params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:71:10:71:10 | y | | params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:78:21:78:29 | call to taint | -| params_flow.rb:78:21:78:29 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:78:21:78:29 | synthetic splat argument | params_flow.rb:78:21:78:29 | synthetic splat argument | | params_flow.rb:78:27:78:28 | 28 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:27:78:28 | 28 | params_flow.rb:1:11:1:11 | x | @@ -5322,7 +4830,6 @@ trackEnd | params_flow.rb:78:27:78:28 | 28 | params_flow.rb:78:21:78:29 | call to taint | | params_flow.rb:78:27:78:28 | 28 | params_flow.rb:78:27:78:28 | 28 | | params_flow.rb:78:32:78:40 | call to taint | params_flow.rb:78:32:78:40 | call to taint | -| params_flow.rb:78:32:78:40 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:78:32:78:40 | synthetic splat argument | params_flow.rb:78:32:78:40 | synthetic splat argument | | params_flow.rb:78:38:78:39 | 29 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:38:78:39 | 29 | params_flow.rb:1:11:1:11 | x | @@ -5336,7 +4843,6 @@ trackEnd | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:74:10:74:10 | w | | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:78:43:78:51 | call to taint | -| params_flow.rb:78:43:78:51 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:78:43:78:51 | synthetic splat argument | params_flow.rb:78:43:78:51 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:1:11:1:11 | x | @@ -5356,7 +4862,6 @@ trackEnd | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:75:10:75:10 | r | | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:78:54:78:62 | call to taint | -| params_flow.rb:78:54:78:62 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:78:54:78:62 | synthetic splat argument | params_flow.rb:78:54:78:62 | synthetic splat argument | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:1:11:1:11 | x | @@ -5399,7 +4904,6 @@ trackEnd | params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:69:17:69:17 | y | | params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:71:10:71:10 | y | | params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:9:80:17 | call to taint | -| params_flow.rb:80:9:80:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:80:9:80:17 | synthetic splat argument | params_flow.rb:80:9:80:17 | synthetic splat argument | | params_flow.rb:80:15:80:16 | 33 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:80:15:80:16 | 33 | params_flow.rb:1:11:1:11 | x | @@ -5413,7 +4917,6 @@ trackEnd | params_flow.rb:80:15:80:16 | 33 | params_flow.rb:80:9:80:17 | call to taint | | params_flow.rb:80:15:80:16 | 33 | params_flow.rb:80:15:80:16 | 33 | | params_flow.rb:80:20:80:28 | call to taint | params_flow.rb:80:20:80:28 | call to taint | -| params_flow.rb:80:20:80:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:80:20:80:28 | synthetic splat argument | params_flow.rb:80:20:80:28 | synthetic splat argument | | params_flow.rb:80:26:80:27 | 34 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:80:26:80:27 | 34 | params_flow.rb:1:11:1:11 | x | @@ -5421,7 +4924,6 @@ trackEnd | params_flow.rb:80:26:80:27 | 34 | params_flow.rb:80:20:80:28 | call to taint | | params_flow.rb:80:26:80:27 | 34 | params_flow.rb:80:26:80:27 | 34 | | params_flow.rb:80:31:80:39 | call to taint | params_flow.rb:80:31:80:39 | call to taint | -| params_flow.rb:80:31:80:39 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:80:31:80:39 | synthetic splat argument | params_flow.rb:80:31:80:39 | synthetic splat argument | | params_flow.rb:80:37:80:38 | 35 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:80:37:80:38 | 35 | params_flow.rb:1:11:1:11 | x | @@ -5429,7 +4931,6 @@ trackEnd | params_flow.rb:80:37:80:38 | 35 | params_flow.rb:80:31:80:39 | call to taint | | params_flow.rb:80:37:80:38 | 35 | params_flow.rb:80:37:80:38 | 35 | | params_flow.rb:80:42:80:50 | call to taint | params_flow.rb:80:42:80:50 | call to taint | -| params_flow.rb:80:42:80:50 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:80:42:80:50 | synthetic splat argument | params_flow.rb:80:42:80:50 | synthetic splat argument | | params_flow.rb:80:48:80:49 | 36 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:80:48:80:49 | 36 | params_flow.rb:1:11:1:11 | x | @@ -5446,7 +4947,6 @@ trackEnd | params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:69:14:69:14 | x | | params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:70:10:70:10 | x | | params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:81:10:81:18 | call to taint | -| params_flow.rb:81:10:81:18 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:81:10:81:18 | synthetic splat argument | params_flow.rb:81:10:81:18 | synthetic splat argument | | params_flow.rb:81:16:81:17 | 32 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:81:16:81:17 | 32 | params_flow.rb:1:11:1:11 | x | @@ -5461,7 +4961,6 @@ trackEnd | params_flow.rb:81:16:81:17 | 32 | params_flow.rb:81:16:81:17 | 32 | | params_flow.rb:81:21:81:25 | * ... | params_flow.rb:81:21:81:25 | * ... | | params_flow.rb:81:28:81:36 | call to taint | params_flow.rb:81:28:81:36 | call to taint | -| params_flow.rb:81:28:81:36 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:81:28:81:36 | synthetic splat argument | params_flow.rb:81:28:81:36 | synthetic splat argument | | params_flow.rb:81:34:81:35 | 37 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:81:34:81:35 | 37 | params_flow.rb:1:11:1:11 | x | @@ -5533,27 +5032,20 @@ trackEnd | params_flow.rb:83:32:83:32 | z | params_flow.rb:83:32:83:32 | z | | params_flow.rb:83:32:83:32 | z | params_flow.rb:90:10:90:10 | z | | params_flow.rb:84:5:84:10 | call to sink | params_flow.rb:84:5:84:10 | call to sink | -| params_flow.rb:84:5:84:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:84:5:84:10 | synthetic splat argument | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:85:5:85:10 | call to sink | params_flow.rb:85:5:85:10 | call to sink | -| params_flow.rb:85:5:85:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:85:5:85:10 | synthetic splat argument | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:86:5:86:10 | call to sink | params_flow.rb:86:5:86:10 | call to sink | -| params_flow.rb:86:5:86:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:86:5:86:10 | synthetic splat argument | params_flow.rb:86:5:86:10 | synthetic splat argument | | params_flow.rb:87:5:87:10 | call to sink | params_flow.rb:87:5:87:10 | call to sink | -| params_flow.rb:87:5:87:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:87:5:87:10 | synthetic splat argument | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:88:5:88:10 | call to sink | params_flow.rb:88:5:88:10 | call to sink | -| params_flow.rb:88:5:88:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:88:5:88:10 | synthetic splat argument | params_flow.rb:88:5:88:10 | synthetic splat argument | | params_flow.rb:89:5:89:10 | call to sink | params_flow.rb:89:5:89:10 | call to sink | -| params_flow.rb:89:5:89:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:89:5:89:10 | synthetic splat argument | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:90:5:90:10 | call to sink | params_flow.rb:90:5:90:10 | call to sink | | params_flow.rb:90:5:90:10 | call to sink | params_flow.rb:94:1:94:48 | call to pos_many | | params_flow.rb:90:5:90:10 | call to sink | params_flow.rb:131:1:131:46 | call to pos_many | -| params_flow.rb:90:5:90:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:90:5:90:10 | synthetic splat argument | params_flow.rb:90:5:90:10 | synthetic splat argument | | params_flow.rb:93:1:93:4 | args | params_flow.rb:93:1:93:4 | args | | params_flow.rb:93:8:93:51 | Array | params_flow.rb:93:8:93:51 | Array | @@ -5585,7 +5077,6 @@ trackEnd | params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:83:20:83:20 | v | | params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:86:10:86:10 | v | | params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:93:9:93:17 | call to taint | -| params_flow.rb:93:9:93:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:93:9:93:17 | synthetic splat argument | params_flow.rb:93:9:93:17 | synthetic splat argument | | params_flow.rb:93:15:93:16 | 40 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:15:93:16 | 40 | params_flow.rb:1:11:1:11 | x | @@ -5605,7 +5096,6 @@ trackEnd | params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:83:23:83:23 | w | | params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:87:10:87:10 | w | | params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:93:20:93:28 | call to taint | -| params_flow.rb:93:20:93:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:93:20:93:28 | synthetic splat argument | params_flow.rb:93:20:93:28 | synthetic splat argument | | params_flow.rb:93:26:93:27 | 41 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:26:93:27 | 41 | params_flow.rb:1:11:1:11 | x | @@ -5625,7 +5115,6 @@ trackEnd | params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:83:26:83:26 | x | | params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:88:10:88:10 | x | | params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:93:31:93:39 | call to taint | -| params_flow.rb:93:31:93:39 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:93:31:93:39 | synthetic splat argument | params_flow.rb:93:31:93:39 | synthetic splat argument | | params_flow.rb:93:37:93:38 | 42 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:37:93:38 | 42 | params_flow.rb:1:11:1:11 | x | @@ -5645,7 +5134,6 @@ trackEnd | params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:83:29:83:29 | y | | params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:89:10:89:10 | y | | params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:93:42:93:50 | call to taint | -| params_flow.rb:93:42:93:50 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:93:42:93:50 | synthetic splat argument | params_flow.rb:93:42:93:50 | synthetic splat argument | | params_flow.rb:93:48:93:49 | 43 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:93:48:93:49 | 43 | params_flow.rb:1:11:1:11 | x | @@ -5668,7 +5156,6 @@ trackEnd | params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:83:14:83:14 | t | | params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:84:10:84:10 | t | | params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:94:10:94:18 | call to taint | -| params_flow.rb:94:10:94:18 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:94:10:94:18 | synthetic splat argument | params_flow.rb:94:10:94:18 | synthetic splat argument | | params_flow.rb:94:16:94:17 | 38 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:16:94:17 | 38 | params_flow.rb:1:11:1:11 | x | @@ -5688,7 +5175,6 @@ trackEnd | params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:83:17:83:17 | u | | params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:85:10:85:10 | u | | params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:94:21:94:29 | call to taint | -| params_flow.rb:94:21:94:29 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:94:21:94:29 | synthetic splat argument | params_flow.rb:94:21:94:29 | synthetic splat argument | | params_flow.rb:94:27:94:28 | 39 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:27:94:28 | 39 | params_flow.rb:1:11:1:11 | x | @@ -5709,7 +5195,6 @@ trackEnd | params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | | params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:87:10:87:10 | w | | params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:94:39:94:47 | call to taint | -| params_flow.rb:94:39:94:47 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:94:39:94:47 | synthetic splat argument | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:1:11:1:11 | x | @@ -5732,7 +5217,6 @@ trackEnd | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:69:14:69:14 | x | | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:70:10:70:10 | x | | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:96:10:96:18 | call to taint | -| params_flow.rb:96:10:96:18 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:10:96:18 | synthetic splat argument | params_flow.rb:96:10:96:18 | synthetic splat argument | | params_flow.rb:96:16:96:17 | 45 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:16:96:17 | 45 | params_flow.rb:1:11:1:11 | x | @@ -5752,7 +5236,6 @@ trackEnd | params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:69:17:69:17 | y | | params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:71:10:71:10 | y | | params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:96:21:96:29 | call to taint | -| params_flow.rb:96:21:96:29 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:21:96:29 | synthetic splat argument | params_flow.rb:96:21:96:29 | synthetic splat argument | | params_flow.rb:96:27:96:28 | 46 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:27:96:28 | 46 | params_flow.rb:1:11:1:11 | x | @@ -5771,7 +5254,6 @@ trackEnd | params_flow.rb:96:33:96:65 | synthetic splat argument | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:33:96:65 | synthetic splat argument | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:34:96:42 | call to taint | params_flow.rb:96:34:96:42 | call to taint | -| params_flow.rb:96:34:96:42 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:34:96:42 | synthetic splat argument | params_flow.rb:96:34:96:42 | synthetic splat argument | | params_flow.rb:96:40:96:41 | 47 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:40:96:41 | 47 | params_flow.rb:1:11:1:11 | x | @@ -5779,7 +5261,6 @@ trackEnd | params_flow.rb:96:40:96:41 | 47 | params_flow.rb:96:34:96:42 | call to taint | | params_flow.rb:96:40:96:41 | 47 | params_flow.rb:96:40:96:41 | 47 | | params_flow.rb:96:45:96:53 | call to taint | params_flow.rb:96:45:96:53 | call to taint | -| params_flow.rb:96:45:96:53 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:45:96:53 | synthetic splat argument | params_flow.rb:96:45:96:53 | synthetic splat argument | | params_flow.rb:96:51:96:52 | 48 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:51:96:52 | 48 | params_flow.rb:1:11:1:11 | x | @@ -5787,7 +5268,6 @@ trackEnd | params_flow.rb:96:51:96:52 | 48 | params_flow.rb:96:45:96:53 | call to taint | | params_flow.rb:96:51:96:52 | 48 | params_flow.rb:96:51:96:52 | 48 | | params_flow.rb:96:56:96:64 | call to taint | params_flow.rb:96:56:96:64 | call to taint | -| params_flow.rb:96:56:96:64 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:56:96:64 | synthetic splat argument | params_flow.rb:96:56:96:64 | synthetic splat argument | | params_flow.rb:96:62:96:63 | 49 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:62:96:63 | 49 | params_flow.rb:1:11:1:11 | x | @@ -5801,7 +5281,6 @@ trackEnd | params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | | params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:74:10:74:10 | w | | params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:96:68:96:76 | call to taint | -| params_flow.rb:96:68:96:76 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:68:96:76 | synthetic splat argument | params_flow.rb:96:68:96:76 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:1:11:1:11 | x | @@ -5821,7 +5300,6 @@ trackEnd | params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | | params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:75:10:75:10 | r | | params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:96:79:96:87 | call to taint | -| params_flow.rb:96:79:96:87 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:96:79:96:87 | synthetic splat argument | params_flow.rb:96:79:96:87 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:1:11:1:11 | x | @@ -5866,10 +5344,8 @@ trackEnd | params_flow.rb:98:31:98:31 | b | params_flow.rb:98:31:98:31 | b | | params_flow.rb:98:31:98:31 | b | params_flow.rb:102:10:102:10 | b | | params_flow.rb:99:5:99:10 | call to sink | params_flow.rb:99:5:99:10 | call to sink | -| params_flow.rb:99:5:99:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:99:5:99:10 | synthetic splat argument | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:100:5:100:18 | call to sink | params_flow.rb:100:5:100:18 | call to sink | -| params_flow.rb:100:5:100:18 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:100:5:100:18 | synthetic splat argument | params_flow.rb:100:5:100:18 | synthetic splat argument | | params_flow.rb:100:10:100:18 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:100:10:100:18 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -5878,7 +5354,6 @@ trackEnd | params_flow.rb:100:10:100:18 | synthetic splat argument | params_flow.rb:100:10:100:18 | synthetic splat argument | | params_flow.rb:100:17:100:17 | 0 | params_flow.rb:100:17:100:17 | 0 | | params_flow.rb:101:5:101:18 | call to sink | params_flow.rb:101:5:101:18 | call to sink | -| params_flow.rb:101:5:101:18 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:101:5:101:18 | synthetic splat argument | params_flow.rb:101:5:101:18 | synthetic splat argument | | params_flow.rb:101:10:101:18 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:101:10:101:18 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -5889,7 +5364,6 @@ trackEnd | params_flow.rb:102:5:102:10 | call to sink | params_flow.rb:102:5:102:10 | call to sink | | params_flow.rb:102:5:102:10 | call to sink | params_flow.rb:105:1:105:49 | call to splatmidsmall | | params_flow.rb:102:5:102:10 | call to sink | params_flow.rb:106:1:106:46 | call to splatmidsmall | -| params_flow.rb:102:5:102:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:102:5:102:10 | synthetic splat argument | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:105:1:105:49 | call to splatmidsmall | params_flow.rb:105:1:105:49 | call to splatmidsmall | | params_flow.rb:105:1:105:49 | synthetic splat argument | params_flow.rb:98:1:103:3 | synthetic splat parameter | @@ -5901,7 +5375,6 @@ trackEnd | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:98:19:98:19 | a | | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:99:10:99:10 | a | | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:105:15:105:23 | call to taint | -| params_flow.rb:105:15:105:23 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:105:15:105:23 | synthetic splat argument | params_flow.rb:105:15:105:23 | synthetic splat argument | | params_flow.rb:105:21:105:22 | 52 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:105:21:105:22 | 52 | params_flow.rb:1:11:1:11 | x | @@ -5920,7 +5393,6 @@ trackEnd | params_flow.rb:105:27:105:48 | synthetic splat argument | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:27:105:48 | synthetic splat argument | params_flow.rb:105:27:105:48 | synthetic splat argument | | params_flow.rb:105:28:105:36 | call to taint | params_flow.rb:105:28:105:36 | call to taint | -| params_flow.rb:105:28:105:36 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:105:28:105:36 | synthetic splat argument | params_flow.rb:105:28:105:36 | synthetic splat argument | | params_flow.rb:105:34:105:35 | 53 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:105:34:105:35 | 53 | params_flow.rb:1:11:1:11 | x | @@ -5928,7 +5400,6 @@ trackEnd | params_flow.rb:105:34:105:35 | 53 | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:105:34:105:35 | 53 | params_flow.rb:105:34:105:35 | 53 | | params_flow.rb:105:39:105:47 | call to taint | params_flow.rb:105:39:105:47 | call to taint | -| params_flow.rb:105:39:105:47 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:105:39:105:47 | synthetic splat argument | params_flow.rb:105:39:105:47 | synthetic splat argument | | params_flow.rb:105:45:105:46 | 54 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:105:45:105:46 | 54 | params_flow.rb:1:11:1:11 | x | @@ -5945,7 +5416,6 @@ trackEnd | params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:98:19:98:19 | a | | params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:99:10:99:10 | a | | params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:106:15:106:23 | call to taint | -| params_flow.rb:106:15:106:23 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:106:15:106:23 | synthetic splat argument | params_flow.rb:106:15:106:23 | synthetic splat argument | | params_flow.rb:106:21:106:22 | 55 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:21:106:22 | 55 | params_flow.rb:1:11:1:11 | x | @@ -5959,7 +5429,6 @@ trackEnd | params_flow.rb:106:21:106:22 | 55 | params_flow.rb:106:15:106:23 | call to taint | | params_flow.rb:106:21:106:22 | 55 | params_flow.rb:106:21:106:22 | 55 | | params_flow.rb:106:26:106:34 | call to taint | params_flow.rb:106:26:106:34 | call to taint | -| params_flow.rb:106:26:106:34 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:106:26:106:34 | synthetic splat argument | params_flow.rb:106:26:106:34 | synthetic splat argument | | params_flow.rb:106:32:106:33 | 56 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:32:106:33 | 56 | params_flow.rb:1:11:1:11 | x | @@ -5973,7 +5442,6 @@ trackEnd | params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | | params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:102:10:102:10 | b | | params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:106:37:106:45 | call to taint | -| params_flow.rb:106:37:106:45 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:106:37:106:45 | synthetic splat argument | params_flow.rb:106:37:106:45 | synthetic splat argument | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:1:11:1:11 | x | @@ -6017,10 +5485,8 @@ trackEnd | params_flow.rb:108:44:108:44 | c | params_flow.rb:108:44:108:44 | c | | params_flow.rb:108:44:108:44 | c | params_flow.rb:111:10:111:10 | c | | params_flow.rb:109:5:109:10 | call to sink | params_flow.rb:109:5:109:10 | call to sink | -| params_flow.rb:109:5:109:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:109:5:109:10 | synthetic splat argument | params_flow.rb:109:5:109:10 | synthetic splat argument | | params_flow.rb:110:5:110:13 | call to sink | params_flow.rb:110:5:110:13 | call to sink | -| params_flow.rb:110:5:110:13 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:110:5:110:13 | synthetic splat argument | params_flow.rb:110:5:110:13 | synthetic splat argument | | params_flow.rb:110:10:110:13 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:110:10:110:13 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6030,7 +5496,6 @@ trackEnd | params_flow.rb:110:12:110:12 | 0 | params_flow.rb:110:12:110:12 | 0 | | params_flow.rb:111:5:111:10 | call to sink | params_flow.rb:111:5:111:10 | call to sink | | params_flow.rb:111:5:111:10 | call to sink | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | -| params_flow.rb:111:5:111:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:111:5:111:10 | synthetic splat argument | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | @@ -6044,7 +5509,6 @@ trackEnd | params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:108:37:108:37 | a | | params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:109:10:109:10 | a | | params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:114:33:114:41 | call to taint | -| params_flow.rb:114:33:114:41 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:114:33:114:41 | synthetic splat argument | params_flow.rb:114:33:114:41 | synthetic splat argument | | params_flow.rb:114:39:114:40 | 58 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:39:114:40 | 58 | params_flow.rb:1:11:1:11 | x | @@ -6062,7 +5526,6 @@ trackEnd | params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:6:10:6:10 | x | | params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:110:10:110:13 | ...[...] | | params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:114:44:114:52 | call to taint | -| params_flow.rb:114:44:114:52 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:114:44:114:52 | synthetic splat argument | params_flow.rb:114:44:114:52 | synthetic splat argument | | params_flow.rb:114:50:114:51 | 59 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:50:114:51 | 59 | params_flow.rb:1:11:1:11 | x | @@ -6082,7 +5545,6 @@ trackEnd | params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:108:44:108:44 | c | | params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:111:10:111:10 | c | | params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:114:58:114:66 | call to taint | -| params_flow.rb:114:58:114:66 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:114:58:114:66 | synthetic splat argument | params_flow.rb:114:58:114:66 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:64:114:65 | 60 | params_flow.rb:1:11:1:11 | x | @@ -6134,7 +5596,6 @@ trackEnd | params_flow.rb:117:19:117:27 | call to taint | params_flow.rb:117:19:117:27 | ... = ... | | params_flow.rb:117:19:117:27 | call to taint | params_flow.rb:117:19:117:27 | __synth__0 | | params_flow.rb:117:19:117:27 | call to taint | params_flow.rb:117:19:117:27 | call to taint | -| params_flow.rb:117:19:117:27 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:117:19:117:27 | synthetic splat argument | params_flow.rb:117:19:117:27 | synthetic splat argument | | params_flow.rb:117:25:117:26 | 61 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:117:25:117:26 | 61 | params_flow.rb:1:11:1:11 | x | @@ -6200,20 +5661,15 @@ trackEnd | params_flow.rb:120:27:120:27 | e | params_flow.rb:120:27:120:27 | e | | params_flow.rb:120:27:120:27 | e | params_flow.rb:125:10:125:10 | e | | params_flow.rb:121:5:121:10 | call to sink | params_flow.rb:121:5:121:10 | call to sink | -| params_flow.rb:121:5:121:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:121:5:121:10 | synthetic splat argument | params_flow.rb:121:5:121:10 | synthetic splat argument | | params_flow.rb:122:5:122:10 | call to sink | params_flow.rb:122:5:122:10 | call to sink | -| params_flow.rb:122:5:122:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:122:5:122:10 | synthetic splat argument | params_flow.rb:122:5:122:10 | synthetic splat argument | | params_flow.rb:123:5:123:10 | call to sink | params_flow.rb:123:5:123:10 | call to sink | -| params_flow.rb:123:5:123:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:123:5:123:10 | synthetic splat argument | params_flow.rb:123:5:123:10 | synthetic splat argument | | params_flow.rb:124:5:124:10 | call to sink | params_flow.rb:124:5:124:10 | call to sink | -| params_flow.rb:124:5:124:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:124:5:124:10 | synthetic splat argument | params_flow.rb:124:5:124:10 | synthetic splat argument | | params_flow.rb:125:5:125:10 | call to sink | params_flow.rb:125:5:125:10 | call to sink | | params_flow.rb:125:5:125:10 | call to sink | params_flow.rb:128:1:128:61 | call to destruct | -| params_flow.rb:125:5:125:10 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:125:5:125:10 | synthetic splat argument | params_flow.rb:125:5:125:10 | synthetic splat argument | | params_flow.rb:128:1:128:61 | call to destruct | params_flow.rb:128:1:128:61 | call to destruct | | params_flow.rb:128:1:128:61 | synthetic splat argument | params_flow.rb:128:1:128:61 | synthetic splat argument | @@ -6222,7 +5678,6 @@ trackEnd | params_flow.rb:128:10:128:31 | synthetic splat argument | params_flow.rb:128:10:128:31 | call to [] | | params_flow.rb:128:10:128:31 | synthetic splat argument | params_flow.rb:128:10:128:31 | synthetic splat argument | | params_flow.rb:128:11:128:19 | call to taint | params_flow.rb:128:11:128:19 | call to taint | -| params_flow.rb:128:11:128:19 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:11:128:19 | synthetic splat argument | params_flow.rb:128:11:128:19 | synthetic splat argument | | params_flow.rb:128:17:128:18 | 62 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:128:17:128:18 | 62 | params_flow.rb:1:11:1:11 | x | @@ -6230,7 +5685,6 @@ trackEnd | params_flow.rb:128:17:128:18 | 62 | params_flow.rb:128:11:128:19 | call to taint | | params_flow.rb:128:17:128:18 | 62 | params_flow.rb:128:17:128:18 | 62 | | params_flow.rb:128:22:128:30 | call to taint | params_flow.rb:128:22:128:30 | call to taint | -| params_flow.rb:128:22:128:30 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:22:128:30 | synthetic splat argument | params_flow.rb:128:22:128:30 | synthetic splat argument | | params_flow.rb:128:28:128:29 | 63 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:128:28:128:29 | 63 | params_flow.rb:1:11:1:11 | x | @@ -6242,7 +5696,6 @@ trackEnd | params_flow.rb:128:34:128:60 | synthetic splat argument | params_flow.rb:128:34:128:60 | call to [] | | params_flow.rb:128:34:128:60 | synthetic splat argument | params_flow.rb:128:34:128:60 | synthetic splat argument | | params_flow.rb:128:35:128:43 | call to taint | params_flow.rb:128:35:128:43 | call to taint | -| params_flow.rb:128:35:128:43 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:35:128:43 | synthetic splat argument | params_flow.rb:128:35:128:43 | synthetic splat argument | | params_flow.rb:128:41:128:42 | 64 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:128:41:128:42 | 64 | params_flow.rb:1:11:1:11 | x | @@ -6255,7 +5708,6 @@ trackEnd | params_flow.rb:128:46:128:59 | synthetic splat argument | params_flow.rb:128:46:128:59 | synthetic splat argument | | params_flow.rb:128:47:128:47 | 0 | params_flow.rb:128:47:128:47 | 0 | | params_flow.rb:128:50:128:58 | call to taint | params_flow.rb:128:50:128:58 | call to taint | -| params_flow.rb:128:50:128:58 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:128:50:128:58 | synthetic splat argument | params_flow.rb:128:50:128:58 | synthetic splat argument | | params_flow.rb:128:56:128:57 | 65 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:128:56:128:57 | 65 | params_flow.rb:1:11:1:11 | x | @@ -6292,7 +5744,6 @@ trackEnd | params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:83:14:83:14 | t | | params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:84:10:84:10 | t | | params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:130:9:130:17 | call to taint | -| params_flow.rb:130:9:130:17 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:130:9:130:17 | synthetic splat argument | params_flow.rb:130:9:130:17 | synthetic splat argument | | params_flow.rb:130:15:130:16 | 66 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:130:15:130:16 | 66 | params_flow.rb:1:11:1:11 | x | @@ -6312,7 +5763,6 @@ trackEnd | params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:83:17:83:17 | u | | params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:85:10:85:10 | u | | params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:130:20:130:28 | call to taint | -| params_flow.rb:130:20:130:28 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:130:20:130:28 | synthetic splat argument | params_flow.rb:130:20:130:28 | synthetic splat argument | | params_flow.rb:130:26:130:27 | 67 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:130:26:130:27 | 67 | params_flow.rb:1:11:1:11 | x | @@ -6335,7 +5785,6 @@ trackEnd | params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | | params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:85:10:85:10 | u | | params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:131:17:131:25 | call to taint | -| params_flow.rb:131:17:131:25 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:131:17:131:25 | synthetic splat argument | params_flow.rb:131:17:131:25 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:1:11:1:11 | x | @@ -6390,7 +5839,6 @@ trackEnd | params_flow.rb:133:15:133:18 | args | params_flow.rb:133:15:133:18 | args | | params_flow.rb:134:5:134:16 | call to sink | params_flow.rb:134:5:134:16 | call to sink | | params_flow.rb:134:5:134:16 | call to sink | params_flow.rb:137:1:137:44 | call to splatall | -| params_flow.rb:134:5:134:16 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:134:5:134:16 | synthetic splat argument | params_flow.rb:134:5:134:16 | synthetic splat argument | | params_flow.rb:134:10:134:16 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:134:10:134:16 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6408,7 +5856,6 @@ trackEnd | params_flow.rb:137:11:137:43 | synthetic splat argument | params_flow.rb:137:11:137:43 | call to [] | | params_flow.rb:137:11:137:43 | synthetic splat argument | params_flow.rb:137:11:137:43 | synthetic splat argument | | params_flow.rb:137:12:137:20 | call to taint | params_flow.rb:137:12:137:20 | call to taint | -| params_flow.rb:137:12:137:20 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:12:137:20 | synthetic splat argument | params_flow.rb:137:12:137:20 | synthetic splat argument | | params_flow.rb:137:18:137:19 | 69 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:18:137:19 | 69 | params_flow.rb:1:11:1:11 | x | @@ -6420,7 +5867,6 @@ trackEnd | params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:6:10:6:10 | x | | params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:134:10:134:16 | ...[...] | | params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:23:137:31 | call to taint | -| params_flow.rb:137:23:137:31 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:23:137:31 | synthetic splat argument | params_flow.rb:137:23:137:31 | synthetic splat argument | | params_flow.rb:137:29:137:30 | 70 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:29:137:30 | 70 | params_flow.rb:1:11:1:11 | x | @@ -6432,7 +5878,6 @@ trackEnd | params_flow.rb:137:29:137:30 | 70 | params_flow.rb:137:23:137:31 | call to taint | | params_flow.rb:137:29:137:30 | 70 | params_flow.rb:137:29:137:30 | 70 | | params_flow.rb:137:34:137:42 | call to taint | params_flow.rb:137:34:137:42 | call to taint | -| params_flow.rb:137:34:137:42 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:137:34:137:42 | synthetic splat argument | params_flow.rb:137:34:137:42 | synthetic splat argument | | params_flow.rb:137:40:137:41 | 71 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:137:40:137:41 | 71 | params_flow.rb:1:11:1:11 | x | @@ -6485,7 +5930,6 @@ trackEnd | params_flow.rb:143:20:143:32 | Pair | params_flow.rb:143:20:143:32 | Pair | | params_flow.rb:143:24:143:32 | call to taint | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:143:24:143:32 | call to taint | params_flow.rb:143:24:143:32 | call to taint | -| params_flow.rb:143:24:143:32 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:143:24:143:32 | synthetic splat argument | params_flow.rb:143:24:143:32 | synthetic splat argument | | params_flow.rb:143:30:143:31 | 72 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:143:30:143:31 | 72 | params_flow.rb:1:11:1:11 | x | @@ -6494,7 +5938,6 @@ trackEnd | params_flow.rb:143:30:143:31 | 72 | params_flow.rb:143:24:143:32 | call to taint | | params_flow.rb:143:30:143:31 | 72 | params_flow.rb:143:30:143:31 | 72 | | params_flow.rb:144:1:144:20 | call to sink | params_flow.rb:144:1:144:20 | call to sink | -| params_flow.rb:144:1:144:20 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:144:1:144:20 | synthetic splat argument | params_flow.rb:144:1:144:20 | synthetic splat argument | | params_flow.rb:144:6:144:16 | ...[...] | params_flow.rb:144:6:144:16 | ...[...] | | params_flow.rb:144:6:144:16 | synthetic splat argument | params_flow.rb:144:6:144:16 | synthetic splat argument | @@ -6512,7 +5955,6 @@ trackEnd | params_flow.rb:145:21:145:28 | ** ... | params_flow.rb:140:27:140:32 | kwargs | | params_flow.rb:145:21:145:28 | ** ... | params_flow.rb:145:21:145:28 | ** ... | | params_flow.rb:146:1:146:20 | call to sink | params_flow.rb:146:1:146:20 | call to sink | -| params_flow.rb:146:1:146:20 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:146:1:146:20 | synthetic splat argument | params_flow.rb:146:1:146:20 | synthetic splat argument | | params_flow.rb:146:6:146:16 | ...[...] | params_flow.rb:146:6:146:16 | ...[...] | | params_flow.rb:146:6:146:16 | synthetic splat argument | params_flow.rb:146:6:146:16 | synthetic splat argument | @@ -6533,7 +5975,6 @@ trackEnd | params_flow.rb:148:6:148:7 | call to [] | params_flow.rb:150:25:150:26 | p1 | | params_flow.rb:148:6:148:7 | call to [] | params_flow.rb:151:6:151:7 | p1 | | params_flow.rb:149:1:149:11 | call to sink | params_flow.rb:149:1:149:11 | call to sink | -| params_flow.rb:149:1:149:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:149:1:149:11 | synthetic splat argument | params_flow.rb:149:1:149:11 | synthetic splat argument | | params_flow.rb:149:6:149:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:149:6:149:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6553,7 +5994,6 @@ trackEnd | params_flow.rb:150:29:150:41 | Pair | params_flow.rb:150:29:150:41 | Pair | | params_flow.rb:150:33:150:41 | call to taint | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:150:33:150:41 | call to taint | params_flow.rb:150:33:150:41 | call to taint | -| params_flow.rb:150:33:150:41 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:150:33:150:41 | synthetic splat argument | params_flow.rb:150:33:150:41 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:150:39:150:40 | 73 | params_flow.rb:1:11:1:11 | x | @@ -6562,7 +6002,6 @@ trackEnd | params_flow.rb:150:39:150:40 | 73 | params_flow.rb:150:33:150:41 | call to taint | | params_flow.rb:150:39:150:40 | 73 | params_flow.rb:150:39:150:40 | 73 | | params_flow.rb:151:1:151:11 | call to sink | params_flow.rb:151:1:151:11 | call to sink | -| params_flow.rb:151:1:151:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:151:1:151:11 | synthetic splat argument | params_flow.rb:151:1:151:11 | synthetic splat argument | | params_flow.rb:151:6:151:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:151:6:151:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6618,7 +6057,6 @@ trackEnd | params_flow.rb:157:24:157:32 | call to taint | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:157:24:157:32 | call to taint | params_flow.rb:154:18:154:19 | p2 | | params_flow.rb:157:24:157:32 | call to taint | params_flow.rb:157:24:157:32 | call to taint | -| params_flow.rb:157:24:157:32 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:157:24:157:32 | synthetic splat argument | params_flow.rb:157:24:157:32 | synthetic splat argument | | params_flow.rb:157:30:157:31 | 74 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:157:30:157:31 | 74 | params_flow.rb:1:11:1:11 | x | @@ -6629,7 +6067,6 @@ trackEnd | params_flow.rb:157:30:157:31 | 74 | params_flow.rb:157:24:157:32 | call to taint | | params_flow.rb:157:30:157:31 | 74 | params_flow.rb:157:30:157:31 | 74 | | params_flow.rb:158:1:158:20 | call to sink | params_flow.rb:158:1:158:20 | call to sink | -| params_flow.rb:158:1:158:20 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:158:1:158:20 | synthetic splat argument | params_flow.rb:158:1:158:20 | synthetic splat argument | | params_flow.rb:158:6:158:16 | ...[...] | params_flow.rb:158:6:158:16 | ...[...] | | params_flow.rb:158:6:158:16 | synthetic splat argument | params_flow.rb:158:6:158:16 | synthetic splat argument | @@ -6644,7 +6081,6 @@ trackEnd | params_flow.rb:159:19:159:26 | ** ... | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:159:19:159:26 | ** ... | params_flow.rb:159:19:159:26 | ** ... | | params_flow.rb:160:1:160:20 | call to sink | params_flow.rb:160:1:160:20 | call to sink | -| params_flow.rb:160:1:160:20 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:160:1:160:20 | synthetic splat argument | params_flow.rb:160:1:160:20 | synthetic splat argument | | params_flow.rb:160:6:160:16 | ...[...] | params_flow.rb:160:6:160:16 | ...[...] | | params_flow.rb:160:6:160:16 | synthetic splat argument | params_flow.rb:160:6:160:16 | synthetic splat argument | @@ -6667,7 +6103,6 @@ trackEnd | params_flow.rb:162:6:162:7 | call to [] | params_flow.rb:164:23:164:24 | p1 | | params_flow.rb:162:6:162:7 | call to [] | params_flow.rb:165:6:165:7 | p1 | | params_flow.rb:163:1:163:11 | call to sink | params_flow.rb:163:1:163:11 | call to sink | -| params_flow.rb:163:1:163:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:163:1:163:11 | synthetic splat argument | params_flow.rb:163:1:163:11 | synthetic splat argument | | params_flow.rb:163:6:163:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:163:6:163:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6686,7 +6121,6 @@ trackEnd | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:154:18:154:19 | p2 | | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:164:31:164:39 | call to taint | -| params_flow.rb:164:31:164:39 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:164:31:164:39 | synthetic splat argument | params_flow.rb:164:31:164:39 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:164:37:164:38 | 75 | params_flow.rb:1:11:1:11 | x | @@ -6697,7 +6131,6 @@ trackEnd | params_flow.rb:164:37:164:38 | 75 | params_flow.rb:164:31:164:39 | call to taint | | params_flow.rb:164:37:164:38 | 75 | params_flow.rb:164:37:164:38 | 75 | | params_flow.rb:165:1:165:11 | call to sink | params_flow.rb:165:1:165:11 | call to sink | -| params_flow.rb:165:1:165:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:165:1:165:11 | synthetic splat argument | params_flow.rb:165:1:165:11 | synthetic splat argument | | params_flow.rb:165:6:165:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:165:6:165:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6749,7 +6182,6 @@ trackEnd | params_flow.rb:171:13:171:14 | call to [] | params_flow.rb:174:6:174:15 | ...[...] | | params_flow.rb:171:17:171:25 | call to taint | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:171:17:171:25 | call to taint | params_flow.rb:171:17:171:25 | call to taint | -| params_flow.rb:171:17:171:25 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:171:17:171:25 | synthetic splat argument | params_flow.rb:171:17:171:25 | synthetic splat argument | | params_flow.rb:171:23:171:24 | 76 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:171:23:171:24 | 76 | params_flow.rb:1:11:1:11 | x | @@ -6758,7 +6190,6 @@ trackEnd | params_flow.rb:171:23:171:24 | 76 | params_flow.rb:171:17:171:25 | call to taint | | params_flow.rb:171:23:171:24 | 76 | params_flow.rb:171:23:171:24 | 76 | | params_flow.rb:172:1:172:19 | call to sink | params_flow.rb:172:1:172:19 | call to sink | -| params_flow.rb:172:1:172:19 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:172:1:172:19 | synthetic splat argument | params_flow.rb:172:1:172:19 | synthetic splat argument | | params_flow.rb:172:6:172:15 | ...[...] | params_flow.rb:172:6:172:15 | ...[...] | | params_flow.rb:172:6:172:15 | synthetic splat argument | params_flow.rb:172:6:172:15 | synthetic splat argument | @@ -6776,7 +6207,6 @@ trackEnd | params_flow.rb:173:17:173:24 | * ... | params_flow.rb:168:26:168:32 | posargs | | params_flow.rb:173:17:173:24 | * ... | params_flow.rb:173:17:173:24 | * ... | | params_flow.rb:174:1:174:19 | call to sink | params_flow.rb:174:1:174:19 | call to sink | -| params_flow.rb:174:1:174:19 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:174:1:174:19 | synthetic splat argument | params_flow.rb:174:1:174:19 | synthetic splat argument | | params_flow.rb:174:6:174:15 | ...[...] | params_flow.rb:174:6:174:15 | ...[...] | | params_flow.rb:174:6:174:15 | synthetic splat argument | params_flow.rb:174:6:174:15 | synthetic splat argument | @@ -6797,7 +6227,6 @@ trackEnd | params_flow.rb:176:6:176:7 | call to [] | params_flow.rb:178:17:178:18 | p1 | | params_flow.rb:176:6:176:7 | call to [] | params_flow.rb:179:6:179:7 | p1 | | params_flow.rb:177:1:177:11 | call to sink | params_flow.rb:177:1:177:11 | call to sink | -| params_flow.rb:177:1:177:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:177:1:177:11 | synthetic splat argument | params_flow.rb:177:1:177:11 | synthetic splat argument | | params_flow.rb:177:6:177:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:177:6:177:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6813,7 +6242,6 @@ trackEnd | params_flow.rb:178:1:178:30 | synthetic splat argument | params_flow.rb:178:1:178:30 | synthetic splat argument | | params_flow.rb:178:21:178:29 | call to taint | params_flow.rb:168:26:168:35 | ...[...] | | params_flow.rb:178:21:178:29 | call to taint | params_flow.rb:178:21:178:29 | call to taint | -| params_flow.rb:178:21:178:29 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:178:21:178:29 | synthetic splat argument | params_flow.rb:178:21:178:29 | synthetic splat argument | | params_flow.rb:178:27:178:28 | 77 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:178:27:178:28 | 77 | params_flow.rb:1:11:1:11 | x | @@ -6822,7 +6250,6 @@ trackEnd | params_flow.rb:178:27:178:28 | 77 | params_flow.rb:178:21:178:29 | call to taint | | params_flow.rb:178:27:178:28 | 77 | params_flow.rb:178:27:178:28 | 77 | | params_flow.rb:179:1:179:11 | call to sink | params_flow.rb:179:1:179:11 | call to sink | -| params_flow.rb:179:1:179:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:179:1:179:11 | synthetic splat argument | params_flow.rb:179:1:179:11 | synthetic splat argument | | params_flow.rb:179:6:179:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:179:6:179:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6880,7 +6307,6 @@ trackEnd | params_flow.rb:185:14:185:22 | call to taint | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:185:14:185:22 | call to taint | params_flow.rb:182:18:182:19 | p2 | | params_flow.rb:185:14:185:22 | call to taint | params_flow.rb:185:14:185:22 | call to taint | -| params_flow.rb:185:14:185:22 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:185:14:185:22 | synthetic splat argument | params_flow.rb:185:14:185:22 | synthetic splat argument | | params_flow.rb:185:20:185:21 | 78 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:185:20:185:21 | 78 | params_flow.rb:1:11:1:11 | x | @@ -6891,7 +6317,6 @@ trackEnd | params_flow.rb:185:20:185:21 | 78 | params_flow.rb:185:14:185:22 | call to taint | | params_flow.rb:185:20:185:21 | 78 | params_flow.rb:185:20:185:21 | 78 | | params_flow.rb:186:1:186:16 | call to sink | params_flow.rb:186:1:186:16 | call to sink | -| params_flow.rb:186:1:186:16 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:186:1:186:16 | synthetic splat argument | params_flow.rb:186:1:186:16 | synthetic splat argument | | params_flow.rb:186:6:186:12 | ...[...] | params_flow.rb:186:6:186:12 | ...[...] | | params_flow.rb:186:6:186:12 | synthetic splat argument | params_flow.rb:186:6:186:12 | synthetic splat argument | @@ -6906,7 +6331,6 @@ trackEnd | params_flow.rb:187:20:187:24 | * ... | params_flow.rb:181:1:183:3 | synthetic splat parameter | | params_flow.rb:187:20:187:24 | * ... | params_flow.rb:187:20:187:24 | * ... | | params_flow.rb:188:1:188:16 | call to sink | params_flow.rb:188:1:188:16 | call to sink | -| params_flow.rb:188:1:188:16 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:188:1:188:16 | synthetic splat argument | params_flow.rb:188:1:188:16 | synthetic splat argument | | params_flow.rb:188:6:188:12 | ...[...] | params_flow.rb:188:6:188:12 | ...[...] | | params_flow.rb:188:6:188:12 | synthetic splat argument | params_flow.rb:188:6:188:12 | synthetic splat argument | @@ -6929,7 +6353,6 @@ trackEnd | params_flow.rb:190:6:190:7 | call to [] | params_flow.rb:192:20:192:21 | p1 | | params_flow.rb:190:6:190:7 | call to [] | params_flow.rb:193:6:193:7 | p1 | | params_flow.rb:191:1:191:11 | call to sink | params_flow.rb:191:1:191:11 | call to sink | -| params_flow.rb:191:1:191:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:191:1:191:11 | synthetic splat argument | params_flow.rb:191:1:191:11 | synthetic splat argument | | params_flow.rb:191:6:191:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:191:6:191:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6938,13 +6361,11 @@ trackEnd | params_flow.rb:191:6:191:10 | synthetic splat argument | params_flow.rb:191:6:191:10 | synthetic splat argument | | params_flow.rb:191:9:191:9 | 0 | params_flow.rb:191:9:191:9 | 0 | | params_flow.rb:192:1:192:33 | call to positionSideEffect | params_flow.rb:192:1:192:33 | call to positionSideEffect | -| params_flow.rb:192:1:192:33 | synthetic splat argument | params_flow.rb:181:1:183:3 | synthetic splat parameter | | params_flow.rb:192:1:192:33 | synthetic splat argument | params_flow.rb:192:1:192:33 | synthetic splat argument | | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:182:18:182:19 | p2 | | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:192:24:192:32 | call to taint | -| params_flow.rb:192:24:192:32 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:192:24:192:32 | synthetic splat argument | params_flow.rb:192:24:192:32 | synthetic splat argument | | params_flow.rb:192:30:192:31 | 79 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:192:30:192:31 | 79 | params_flow.rb:1:11:1:11 | x | @@ -6955,7 +6376,6 @@ trackEnd | params_flow.rb:192:30:192:31 | 79 | params_flow.rb:192:24:192:32 | call to taint | | params_flow.rb:192:30:192:31 | 79 | params_flow.rb:192:30:192:31 | 79 | | params_flow.rb:193:1:193:11 | call to sink | params_flow.rb:193:1:193:11 | call to sink | -| params_flow.rb:193:1:193:11 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:193:1:193:11 | synthetic splat argument | params_flow.rb:193:1:193:11 | synthetic splat argument | | params_flow.rb:193:6:193:10 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:193:6:193:10 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -6990,7 +6410,6 @@ trackEnd | params_flow.rb:196:10:196:18 | call to taint | params_flow.rb:200:9:200:9 | x | | params_flow.rb:196:10:196:18 | call to taint | params_flow.rb:201:11:201:11 | x | | params_flow.rb:196:10:196:18 | call to taint | params_flow.rb:202:11:202:11 | x | -| params_flow.rb:196:10:196:18 | synthetic splat argument | params_flow.rb:1:1:3:3 | synthetic splat parameter | | params_flow.rb:196:10:196:18 | synthetic splat argument | params_flow.rb:196:10:196:18 | synthetic splat argument | | params_flow.rb:196:16:196:17 | 80 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:196:16:196:17 | 80 | params_flow.rb:1:11:1:11 | x | @@ -7031,7 +6450,6 @@ trackEnd | params_flow.rb:200:12:200:12 | y | params_flow.rb:203:11:203:11 | y | | params_flow.rb:200:12:200:12 | y | params_flow.rb:204:11:204:11 | y | | params_flow.rb:201:5:201:15 | call to sink | params_flow.rb:201:5:201:15 | call to sink | -| params_flow.rb:201:5:201:15 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:201:5:201:15 | synthetic splat argument | params_flow.rb:201:5:201:15 | synthetic splat argument | | params_flow.rb:201:11:201:14 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:201:11:201:14 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -7041,7 +6459,6 @@ trackEnd | params_flow.rb:201:11:201:14 | synthetic splat argument | params_flow.rb:201:11:201:14 | synthetic splat argument | | params_flow.rb:201:13:201:13 | 0 | params_flow.rb:201:13:201:13 | 0 | | params_flow.rb:202:5:202:15 | call to sink | params_flow.rb:202:5:202:15 | call to sink | -| params_flow.rb:202:5:202:15 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:202:5:202:15 | synthetic splat argument | params_flow.rb:202:5:202:15 | synthetic splat argument | | params_flow.rb:202:11:202:14 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:202:11:202:14 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -7051,7 +6468,6 @@ trackEnd | params_flow.rb:202:11:202:14 | synthetic splat argument | params_flow.rb:202:11:202:14 | synthetic splat argument | | params_flow.rb:202:13:202:13 | 1 | params_flow.rb:202:13:202:13 | 1 | | params_flow.rb:203:5:203:15 | call to sink | params_flow.rb:203:5:203:15 | call to sink | -| params_flow.rb:203:5:203:15 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:203:5:203:15 | synthetic splat argument | params_flow.rb:203:5:203:15 | synthetic splat argument | | params_flow.rb:203:11:203:14 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:203:11:203:14 | ...[...] | params_flow.rb:5:10:5:10 | x | @@ -7062,7 +6478,6 @@ trackEnd | params_flow.rb:203:13:203:13 | 0 | params_flow.rb:203:13:203:13 | 0 | | params_flow.rb:204:5:204:15 | call to sink | params_flow.rb:204:5:204:15 | call to sink | | params_flow.rb:204:5:204:15 | call to sink | params_flow.rb:207:1:207:14 | call to foo | -| params_flow.rb:204:5:204:15 | synthetic splat argument | params_flow.rb:5:1:7:3 | synthetic splat parameter | | params_flow.rb:204:5:204:15 | synthetic splat argument | params_flow.rb:204:5:204:15 | synthetic splat argument | | params_flow.rb:204:11:204:14 | ...[...] | params_flow.rb:5:10:5:10 | x | | params_flow.rb:204:11:204:14 | ...[...] | params_flow.rb:5:10:5:10 | x | diff --git a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected index 74bbbd395b2..4b079e0ebbb 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -66,8 +66,6 @@ edges | params_flow.rb:47:13:47:16 | args [element 1] | params_flow.rb:47:12:47:16 | * ... [element 1] | provenance | | | params_flow.rb:49:13:49:14 | p1 | params_flow.rb:50:10:50:11 | p1 | provenance | | | params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | provenance | | -| params_flow.rb:49:17:49:24 | *posargs [element 0] | params_flow.rb:51:11:51:17 | posargs [element 0] | provenance | | -| params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | provenance | | | params_flow.rb:51:11:51:17 | posargs [element 0] | params_flow.rb:51:11:51:20 | ...[...] | provenance | | | params_flow.rb:51:11:51:20 | ...[...] | params_flow.rb:51:10:51:21 | ( ... ) | provenance | | | params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | @@ -77,7 +75,6 @@ edges | params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:8:57:18 | call to [] [element 0] | provenance | | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | | params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | -| params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | | params_flow.rb:58:21:58:24 | args [element 0] | params_flow.rb:58:20:58:24 | * ... [element 0] | provenance | | | params_flow.rb:60:1:60:4 | args [element 0] | params_flow.rb:61:10:61:13 | args [element 0] | provenance | | | params_flow.rb:60:1:60:4 | args [element 1] | params_flow.rb:61:10:61:13 | args [element 1] | provenance | | @@ -263,11 +260,9 @@ nodes | params_flow.rb:47:13:47:16 | args [element 1] | semmle.label | args [element 1] | | params_flow.rb:49:13:49:14 | p1 | semmle.label | p1 | | params_flow.rb:49:17:49:24 | *posargs [element 0] | semmle.label | *posargs [element 0] | -| params_flow.rb:49:17:49:24 | *posargs [element 0] | semmle.label | *posargs [element 0] | | params_flow.rb:50:10:50:11 | p1 | semmle.label | p1 | | params_flow.rb:51:10:51:21 | ( ... ) | semmle.label | ( ... ) | | params_flow.rb:51:11:51:17 | posargs [element 0] | semmle.label | posargs [element 0] | -| params_flow.rb:51:11:51:17 | posargs [element 0] | semmle.label | posargs [element 0] | | params_flow.rb:51:11:51:20 | ...[...] | semmle.label | ...[...] | | params_flow.rb:55:9:55:17 | call to taint | semmle.label | call to taint | | params_flow.rb:55:20:55:28 | call to taint | semmle.label | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected index d843d8e3c6d..f0199572d78 100644 --- a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected @@ -14,12 +14,12 @@ track | type_tracker.rb:2:16:2:18 | val | type tracker without call steps | type_tracker.rb:8:9:8:14 | @field | | type_tracker.rb:2:16:2:18 | val | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= | | type_tracker.rb:2:16:2:18 | val | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field | -| type_tracker.rb:2:16:2:18 | val | type tracker without call steps with content splat position 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | -| type_tracker.rb:2:16:2:18 | val | type tracker without call steps with content splat position 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | +| type_tracker.rb:2:16:2:18 | val | type tracker without call steps with content element 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | +| type_tracker.rb:2:16:2:18 | val | type tracker without call steps with content element 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | | type_tracker.rb:3:9:3:23 | call to puts | type tracker without call steps | type_tracker.rb:3:9:3:23 | call to puts | | type_tracker.rb:3:9:3:23 | synthetic splat argument | type tracker without call steps | type_tracker.rb:3:9:3:23 | synthetic splat argument | | type_tracker.rb:3:14:3:23 | call to field | type tracker without call steps | type_tracker.rb:3:14:3:23 | call to field | -| type_tracker.rb:3:14:3:23 | call to field | type tracker without call steps with content splat position 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | +| type_tracker.rb:3:14:3:23 | call to field | type tracker without call steps with content element 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | | type_tracker.rb:4:9:4:14 | @field | type tracker without call steps | type_tracker.rb:4:9:4:14 | @field | | type_tracker.rb:7:5:9:7 | &block | type tracker without call steps | type_tracker.rb:7:5:9:7 | &block | | type_tracker.rb:7:5:9:7 | field | type tracker without call steps | type_tracker.rb:7:5:9:7 | field | @@ -27,8 +27,8 @@ track | type_tracker.rb:8:9:8:14 | @field | type tracker without call steps | type_tracker.rb:3:14:3:23 | call to field | | type_tracker.rb:8:9:8:14 | @field | type tracker without call steps | type_tracker.rb:8:9:8:14 | @field | | type_tracker.rb:8:9:8:14 | @field | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field | -| type_tracker.rb:8:9:8:14 | @field | type tracker without call steps with content splat position 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | -| type_tracker.rb:8:9:8:14 | @field | type tracker without call steps with content splat position 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | +| type_tracker.rb:8:9:8:14 | @field | type tracker without call steps with content element 0 | type_tracker.rb:3:9:3:23 | synthetic splat argument | +| type_tracker.rb:8:9:8:14 | @field | type tracker without call steps with content element 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | | type_tracker.rb:12:1:16:3 | &block | type tracker without call steps | type_tracker.rb:12:1:16:3 | &block | | type_tracker.rb:12:1:16:3 | m | type tracker without call steps | type_tracker.rb:12:1:16:3 | m | | type_tracker.rb:12:1:16:3 | self in m | type tracker without call steps | type_tracker.rb:12:1:16:3 | self in m | @@ -40,61 +40,56 @@ track | type_tracker.rb:14:5:14:7 | [post] var | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field | | type_tracker.rb:14:5:14:7 | [post] var | type tracker without call steps | type_tracker.rb:14:5:14:7 | [post] var | | type_tracker.rb:14:5:14:13 | call to field= | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= | -| type_tracker.rb:14:5:14:13 | synthetic splat argument | type tracker with call steps | type_tracker.rb:2:5:5:7 | synthetic splat parameter | | type_tracker.rb:14:5:14:13 | synthetic splat argument | type tracker without call steps | type_tracker.rb:14:5:14:13 | synthetic splat argument | | type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps | type_tracker.rb:2:16:2:18 | val | | type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps | type_tracker.rb:8:9:8:14 | @field | | type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps with content attribute field | type_tracker.rb:7:5:9:7 | self in field | -| type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps with content splat position 0 | type_tracker.rb:2:5:5:7 | synthetic splat parameter | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:14:17:14:23 | "hello" | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content attribute field | type_tracker.rb:14:5:14:7 | [post] var | -| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content splat position 0 | type_tracker.rb:14:5:14:13 | synthetic splat argument | -| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content splat position 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | +| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content element 0 | type_tracker.rb:14:5:14:13 | synthetic splat argument | +| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content element 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | | type_tracker.rb:14:17:14:23 | __synth__0 | type tracker without call steps | type_tracker.rb:14:17:14:23 | __synth__0 | | type_tracker.rb:15:5:15:18 | call to puts | type tracker without call steps | type_tracker.rb:15:5:15:18 | call to puts | | type_tracker.rb:15:5:15:18 | synthetic splat argument | type tracker without call steps | type_tracker.rb:15:5:15:18 | synthetic splat argument | | type_tracker.rb:15:10:15:18 | call to field | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field | -| type_tracker.rb:15:10:15:18 | call to field | type tracker without call steps with content splat position 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | +| type_tracker.rb:15:10:15:18 | call to field | type tracker without call steps with content element 0 | type_tracker.rb:15:5:15:18 | synthetic splat argument | | type_tracker.rb:18:1:21:3 | &block | type tracker without call steps | type_tracker.rb:18:1:21:3 | &block | | type_tracker.rb:18:1:21:3 | positional | type tracker without call steps | type_tracker.rb:18:1:21:3 | positional | | type_tracker.rb:18:1:21:3 | self in positional | type tracker without call steps | type_tracker.rb:18:1:21:3 | self in positional | | type_tracker.rb:18:1:21:3 | synthetic splat parameter | type tracker without call steps | type_tracker.rb:18:1:21:3 | synthetic splat parameter | | type_tracker.rb:18:16:18:17 | p1 | type tracker without call steps | type_tracker.rb:18:16:18:17 | p1 | | type_tracker.rb:18:16:18:17 | p1 | type tracker without call steps | type_tracker.rb:18:16:18:17 | p1 | -| type_tracker.rb:18:16:18:17 | p1 | type tracker without call steps with content splat position 0 | type_tracker.rb:19:5:19:11 | synthetic splat argument | +| type_tracker.rb:18:16:18:17 | p1 | type tracker without call steps with content element 0 | type_tracker.rb:19:5:19:11 | synthetic splat argument | | type_tracker.rb:18:20:18:21 | p2 | type tracker without call steps | type_tracker.rb:18:20:18:21 | p2 | | type_tracker.rb:18:20:18:21 | p2 | type tracker without call steps | type_tracker.rb:18:20:18:21 | p2 | -| type_tracker.rb:18:20:18:21 | p2 | type tracker without call steps with content splat position 0 | type_tracker.rb:20:5:20:11 | synthetic splat argument | +| type_tracker.rb:18:20:18:21 | p2 | type tracker without call steps with content element 0 | type_tracker.rb:20:5:20:11 | synthetic splat argument | | type_tracker.rb:19:5:19:11 | call to puts | type tracker without call steps | type_tracker.rb:19:5:19:11 | call to puts | | type_tracker.rb:19:5:19:11 | synthetic splat argument | type tracker without call steps | type_tracker.rb:19:5:19:11 | synthetic splat argument | | type_tracker.rb:20:5:20:11 | call to puts | type tracker without call steps | type_tracker.rb:20:5:20:11 | call to puts | | type_tracker.rb:20:5:20:11 | call to puts | type tracker without call steps | type_tracker.rb:23:1:23:16 | call to positional | | type_tracker.rb:20:5:20:11 | synthetic splat argument | type tracker without call steps | type_tracker.rb:20:5:20:11 | synthetic splat argument | | type_tracker.rb:23:1:23:16 | call to positional | type tracker without call steps | type_tracker.rb:23:1:23:16 | call to positional | -| type_tracker.rb:23:1:23:16 | synthetic splat argument | type tracker with call steps | type_tracker.rb:18:1:21:3 | synthetic splat parameter | | type_tracker.rb:23:1:23:16 | synthetic splat argument | type tracker without call steps | type_tracker.rb:23:1:23:16 | synthetic splat argument | | type_tracker.rb:23:12:23:12 | 1 | type tracker with call steps | type_tracker.rb:18:16:18:17 | p1 | -| type_tracker.rb:23:12:23:12 | 1 | type tracker with call steps with content splat position 0 | type_tracker.rb:18:1:21:3 | synthetic splat parameter | -| type_tracker.rb:23:12:23:12 | 1 | type tracker with call steps with content splat position 0 | type_tracker.rb:19:5:19:11 | synthetic splat argument | +| type_tracker.rb:23:12:23:12 | 1 | type tracker with call steps with content element 0 | type_tracker.rb:19:5:19:11 | synthetic splat argument | | type_tracker.rb:23:12:23:12 | 1 | type tracker without call steps | type_tracker.rb:23:12:23:12 | 1 | -| type_tracker.rb:23:12:23:12 | 1 | type tracker without call steps with content splat position 0 | type_tracker.rb:23:1:23:16 | synthetic splat argument | +| type_tracker.rb:23:12:23:12 | 1 | type tracker without call steps with content element 0 | type_tracker.rb:23:1:23:16 | synthetic splat argument | | type_tracker.rb:23:15:23:15 | 2 | type tracker with call steps | type_tracker.rb:18:20:18:21 | p2 | -| type_tracker.rb:23:15:23:15 | 2 | type tracker with call steps with content splat position 0 | type_tracker.rb:20:5:20:11 | synthetic splat argument | -| type_tracker.rb:23:15:23:15 | 2 | type tracker with call steps with content splat position 1 | type_tracker.rb:18:1:21:3 | synthetic splat parameter | +| type_tracker.rb:23:15:23:15 | 2 | type tracker with call steps with content element 0 | type_tracker.rb:20:5:20:11 | synthetic splat argument | | type_tracker.rb:23:15:23:15 | 2 | type tracker without call steps | type_tracker.rb:23:15:23:15 | 2 | -| type_tracker.rb:23:15:23:15 | 2 | type tracker without call steps with content splat position 1 | type_tracker.rb:23:1:23:16 | synthetic splat argument | +| type_tracker.rb:23:15:23:15 | 2 | type tracker without call steps with content element 1 | type_tracker.rb:23:1:23:16 | synthetic splat argument | | type_tracker.rb:25:1:28:3 | &block | type tracker without call steps | type_tracker.rb:25:1:28:3 | &block | | type_tracker.rb:25:1:28:3 | keyword | type tracker without call steps | type_tracker.rb:25:1:28:3 | keyword | | type_tracker.rb:25:1:28:3 | self in keyword | type tracker without call steps | type_tracker.rb:25:1:28:3 | self in keyword | | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | type tracker without call steps | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:25:13:25:14 | p1 | type tracker without call steps | type_tracker.rb:25:13:25:14 | p1 | | type_tracker.rb:25:13:25:14 | p1 | type tracker without call steps | type_tracker.rb:25:13:25:14 | p1 | -| type_tracker.rb:25:13:25:14 | p1 | type tracker without call steps with content splat position 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | +| type_tracker.rb:25:13:25:14 | p1 | type tracker without call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:25:18:25:19 | p2 | type tracker without call steps | type_tracker.rb:25:18:25:19 | p2 | | type_tracker.rb:25:18:25:19 | p2 | type tracker without call steps | type_tracker.rb:25:18:25:19 | p2 | -| type_tracker.rb:25:18:25:19 | p2 | type tracker without call steps with content splat position 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | +| type_tracker.rb:25:18:25:19 | p2 | type tracker without call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:26:5:26:11 | call to puts | type tracker without call steps | type_tracker.rb:26:5:26:11 | call to puts | | type_tracker.rb:26:5:26:11 | synthetic splat argument | type tracker without call steps | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:27:5:27:11 | call to puts | type tracker without call steps | type_tracker.rb:27:5:27:11 | call to puts | @@ -108,15 +103,15 @@ track | type_tracker.rb:30:9:30:10 | :p1 | type tracker without call steps | type_tracker.rb:30:9:30:10 | :p1 | | type_tracker.rb:30:9:30:13 | Pair | type tracker without call steps | type_tracker.rb:30:9:30:13 | Pair | | type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | +| type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps with content splat position 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:30:13:30:13 | 3 | type tracker without call steps | type_tracker.rb:30:13:30:13 | 3 | | type_tracker.rb:30:13:30:13 | 3 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:30:16:30:17 | :p2 | type tracker without call steps | type_tracker.rb:30:16:30:17 | :p2 | | type_tracker.rb:30:16:30:20 | Pair | type tracker without call steps | type_tracker.rb:30:16:30:20 | Pair | | type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | +| type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps with content splat position 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:30:20:30:20 | 4 | type tracker without call steps | type_tracker.rb:30:20:30:20 | 4 | | type_tracker.rb:30:20:30:20 | 4 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:31:1:31:21 | call to keyword | type tracker without call steps | type_tracker.rb:31:1:31:21 | call to keyword | @@ -125,15 +120,15 @@ track | type_tracker.rb:31:9:31:10 | :p2 | type tracker without call steps | type_tracker.rb:31:9:31:10 | :p2 | | type_tracker.rb:31:9:31:13 | Pair | type tracker without call steps | type_tracker.rb:31:9:31:13 | Pair | | type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | +| type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps with content splat position 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:31:13:31:13 | 5 | type tracker without call steps | type_tracker.rb:31:13:31:13 | 5 | | type_tracker.rb:31:13:31:13 | 5 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:31:16:31:17 | :p1 | type tracker without call steps | type_tracker.rb:31:16:31:17 | :p1 | | type_tracker.rb:31:16:31:20 | Pair | type tracker without call steps | type_tracker.rb:31:16:31:20 | Pair | | type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | +| type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps with content splat position 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:31:20:31:20 | 6 | type tracker without call steps | type_tracker.rb:31:20:31:20 | 6 | | type_tracker.rb:31:20:31:20 | 6 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:32:1:32:27 | call to keyword | type tracker without call steps | type_tracker.rb:32:1:32:27 | call to keyword | @@ -142,15 +137,15 @@ track | type_tracker.rb:32:9:32:11 | :p2 | type tracker without call steps | type_tracker.rb:32:9:32:11 | :p2 | | type_tracker.rb:32:9:32:16 | Pair | type tracker without call steps | type_tracker.rb:32:9:32:16 | Pair | | type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | +| type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps with content splat position 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:32:16:32:16 | 7 | type tracker without call steps | type_tracker.rb:32:16:32:16 | 7 | | type_tracker.rb:32:16:32:16 | 7 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:32:19:32:21 | :p1 | type tracker without call steps | type_tracker.rb:32:19:32:21 | :p1 | | type_tracker.rb:32:19:32:26 | Pair | type tracker without call steps | type_tracker.rb:32:19:32:26 | Pair | | type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | +| type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | -| type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps with content splat position 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | | type_tracker.rb:32:26:32:26 | 8 | type tracker without call steps | type_tracker.rb:32:26:32:26 | 8 | | type_tracker.rb:32:26:32:26 | 8 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:34:1:53:3 | &block | type tracker without call steps | type_tracker.rb:34:1:53:3 | &block | @@ -169,18 +164,18 @@ track | type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 0 | type_tracker.rb:35:11:35:15 | synthetic splat argument | | type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 0 or unknown | type_tracker.rb:43:5:43:10 | [post] array2 | | type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 0 or unknown | type_tracker.rb:47:5:47:10 | [post] array3 | -| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content splat position 1 | type_tracker.rb:39:5:39:12 | synthetic splat argument | -| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content splat position 1 | type_tracker.rb:43:5:43:13 | synthetic splat argument | -| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content splat position 1 | type_tracker.rb:47:5:47:13 | synthetic splat argument | -| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content splat position 1 | type_tracker.rb:51:5:51:13 | synthetic splat argument | +| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 1 | type_tracker.rb:39:5:39:12 | synthetic splat argument | +| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 1 | type_tracker.rb:43:5:43:13 | synthetic splat argument | +| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 1 | type_tracker.rb:47:5:47:13 | synthetic splat argument | +| type_tracker.rb:34:18:34:20 | obj | type tracker without call steps with content element 1 | type_tracker.rb:51:5:51:13 | synthetic splat argument | | type_tracker.rb:34:23:34:23 | y | type tracker without call steps | type_tracker.rb:34:23:34:23 | y | | type_tracker.rb:34:23:34:23 | y | type tracker without call steps | type_tracker.rb:34:23:34:23 | y | -| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content splat position 0 | type_tracker.rb:39:5:39:12 | synthetic splat argument | -| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content splat position 0 | type_tracker.rb:44:5:44:13 | synthetic splat argument | -| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content splat position 0 | type_tracker.rb:51:5:51:13 | synthetic splat argument | +| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content element 0 | type_tracker.rb:39:5:39:12 | synthetic splat argument | +| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content element 0 | type_tracker.rb:44:5:44:13 | synthetic splat argument | +| type_tracker.rb:34:23:34:23 | y | type tracker without call steps with content element 0 | type_tracker.rb:51:5:51:13 | synthetic splat argument | | type_tracker.rb:34:26:34:26 | z | type tracker without call steps | type_tracker.rb:34:26:34:26 | z | | type_tracker.rb:34:26:34:26 | z | type tracker without call steps | type_tracker.rb:34:26:34:26 | z | -| type_tracker.rb:34:26:34:26 | z | type tracker without call steps with content splat position 0 | type_tracker.rb:52:5:52:13 | synthetic splat argument | +| type_tracker.rb:34:26:34:26 | z | type tracker without call steps with content element 0 | type_tracker.rb:52:5:52:13 | synthetic splat argument | | type_tracker.rb:35:5:35:7 | tmp | type tracker without call steps | type_tracker.rb:35:5:35:7 | tmp | | type_tracker.rb:35:11:35:15 | Array | type tracker without call steps | type_tracker.rb:35:11:35:15 | Array | | type_tracker.rb:35:11:35:15 | call to [] | type tracker without call steps | type_tracker.rb:35:11:35:15 | call to [] | @@ -189,7 +184,7 @@ track | type_tracker.rb:36:5:36:10 | ...[...] | type tracker without call steps | type_tracker.rb:36:5:36:10 | ...[...] | | type_tracker.rb:36:5:36:10 | synthetic splat argument | type tracker without call steps | type_tracker.rb:36:5:36:10 | synthetic splat argument | | type_tracker.rb:36:9:36:9 | 0 | type tracker without call steps | type_tracker.rb:36:9:36:9 | 0 | -| type_tracker.rb:36:9:36:9 | 0 | type tracker without call steps with content splat position 0 | type_tracker.rb:36:5:36:10 | synthetic splat argument | +| type_tracker.rb:36:9:36:9 | 0 | type tracker without call steps with content element 0 | type_tracker.rb:36:5:36:10 | synthetic splat argument | | type_tracker.rb:38:5:38:9 | array | type tracker without call steps | type_tracker.rb:38:5:38:9 | array | | type_tracker.rb:38:13:38:25 | Array | type tracker without call steps | type_tracker.rb:38:13:38:25 | Array | | type_tracker.rb:38:13:38:25 | call to [] | type tracker without call steps | type_tracker.rb:38:13:38:25 | call to [] | @@ -221,7 +216,7 @@ track | type_tracker.rb:40:5:40:12 | ...[...] | type tracker without call steps | type_tracker.rb:40:5:40:12 | ...[...] | | type_tracker.rb:40:5:40:12 | synthetic splat argument | type tracker without call steps | type_tracker.rb:40:5:40:12 | synthetic splat argument | | type_tracker.rb:40:11:40:11 | 0 | type tracker without call steps | type_tracker.rb:40:11:40:11 | 0 | -| type_tracker.rb:40:11:40:11 | 0 | type tracker without call steps with content splat position 0 | type_tracker.rb:40:5:40:12 | synthetic splat argument | +| type_tracker.rb:40:11:40:11 | 0 | type tracker without call steps with content element 0 | type_tracker.rb:40:5:40:12 | synthetic splat argument | | type_tracker.rb:42:5:42:10 | array2 | type tracker without call steps | type_tracker.rb:42:5:42:10 | array2 | | type_tracker.rb:42:14:42:26 | Array | type tracker without call steps | type_tracker.rb:42:14:42:26 | Array | | type_tracker.rb:42:14:42:26 | call to [] | type tracker without call steps | type_tracker.rb:42:14:42:26 | call to [] | @@ -263,7 +258,7 @@ track | type_tracker.rb:43:5:43:13 | call to []= | type tracker without call steps | type_tracker.rb:43:5:43:13 | call to []= | | type_tracker.rb:43:5:43:13 | synthetic splat argument | type tracker without call steps | type_tracker.rb:43:5:43:13 | synthetic splat argument | | type_tracker.rb:43:12:43:12 | 0 | type tracker without call steps | type_tracker.rb:43:12:43:12 | 0 | -| type_tracker.rb:43:12:43:12 | 0 | type tracker without call steps with content splat position 0 | type_tracker.rb:43:5:43:13 | synthetic splat argument | +| type_tracker.rb:43:12:43:12 | 0 | type tracker without call steps with content element 0 | type_tracker.rb:43:5:43:13 | synthetic splat argument | | type_tracker.rb:43:17:43:19 | __synth__0 | type tracker without call steps | type_tracker.rb:43:17:43:19 | __synth__0 | | type_tracker.rb:44:5:44:13 | ...[...] | type tracker without call steps | type_tracker.rb:44:5:44:13 | ...[...] | | type_tracker.rb:44:5:44:13 | synthetic splat argument | type tracker without call steps | type_tracker.rb:44:5:44:13 | synthetic splat argument | @@ -303,12 +298,12 @@ track | type_tracker.rb:47:5:47:13 | call to []= | type tracker without call steps | type_tracker.rb:47:5:47:13 | call to []= | | type_tracker.rb:47:5:47:13 | synthetic splat argument | type tracker without call steps | type_tracker.rb:47:5:47:13 | synthetic splat argument | | type_tracker.rb:47:12:47:12 | 0 | type tracker without call steps | type_tracker.rb:47:12:47:12 | 0 | -| type_tracker.rb:47:12:47:12 | 0 | type tracker without call steps with content splat position 0 | type_tracker.rb:47:5:47:13 | synthetic splat argument | +| type_tracker.rb:47:12:47:12 | 0 | type tracker without call steps with content element 0 | type_tracker.rb:47:5:47:13 | synthetic splat argument | | type_tracker.rb:47:17:47:19 | __synth__0 | type tracker without call steps | type_tracker.rb:47:17:47:19 | __synth__0 | | type_tracker.rb:48:5:48:13 | ...[...] | type tracker without call steps | type_tracker.rb:48:5:48:13 | ...[...] | | type_tracker.rb:48:5:48:13 | synthetic splat argument | type tracker without call steps | type_tracker.rb:48:5:48:13 | synthetic splat argument | | type_tracker.rb:48:12:48:12 | 1 | type tracker without call steps | type_tracker.rb:48:12:48:12 | 1 | -| type_tracker.rb:48:12:48:12 | 1 | type tracker without call steps with content splat position 0 | type_tracker.rb:48:5:48:13 | synthetic splat argument | +| type_tracker.rb:48:12:48:12 | 1 | type tracker without call steps with content element 0 | type_tracker.rb:48:5:48:13 | synthetic splat argument | | type_tracker.rb:50:5:50:10 | array4 | type tracker without call steps | type_tracker.rb:50:5:50:10 | array4 | | type_tracker.rb:50:14:50:26 | Array | type tracker without call steps | type_tracker.rb:50:14:50:26 | Array | | type_tracker.rb:50:14:50:26 | call to [] | type tracker without call steps | type_tracker.rb:50:14:50:26 | call to [] | @@ -419,7 +414,6 @@ trackEnd | type_tracker.rb:14:5:14:7 | [post] var | type_tracker.rb:14:5:14:7 | [post] var | | type_tracker.rb:14:5:14:7 | [post] var | type_tracker.rb:15:10:15:12 | var | | type_tracker.rb:14:5:14:13 | call to field= | type_tracker.rb:14:5:14:13 | call to field= | -| type_tracker.rb:14:5:14:13 | synthetic splat argument | type_tracker.rb:2:5:5:7 | synthetic splat parameter | | type_tracker.rb:14:5:14:13 | synthetic splat argument | type_tracker.rb:14:5:14:13 | synthetic splat argument | | type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:2:16:2:18 | val | | type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:2:16:2:18 | val | @@ -458,7 +452,6 @@ trackEnd | type_tracker.rb:20:5:20:11 | call to puts | type_tracker.rb:23:1:23:16 | call to positional | | type_tracker.rb:20:5:20:11 | synthetic splat argument | type_tracker.rb:20:5:20:11 | synthetic splat argument | | type_tracker.rb:23:1:23:16 | call to positional | type_tracker.rb:23:1:23:16 | call to positional | -| type_tracker.rb:23:1:23:16 | synthetic splat argument | type_tracker.rb:18:1:21:3 | synthetic splat parameter | | type_tracker.rb:23:1:23:16 | synthetic splat argument | type_tracker.rb:23:1:23:16 | synthetic splat argument | | type_tracker.rb:23:12:23:12 | 1 | type_tracker.rb:18:16:18:17 | p1 | | type_tracker.rb:23:12:23:12 | 1 | type_tracker.rb:18:16:18:17 | p1 | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected index 77c97b234d9..f443f766986 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected @@ -67,21 +67,21 @@ edges | params_flow.rb:107:10:107:33 | call to values_at [element 0] | params_flow.rb:107:10:107:33 | call to values_at | provenance | | | params_flow.rb:107:10:107:33 | call to values_at [element 1] | params_flow.rb:107:10:107:33 | call to values_at | provenance | | | params_flow.rb:111:10:111:15 | call to params | params_flow.rb:111:10:111:29 | call to merge | provenance | | -| params_flow.rb:112:10:112:29 | call to merge [splat position 0] | params_flow.rb:112:10:112:29 | call to merge | provenance | | +| params_flow.rb:112:10:112:29 | call to merge [element 0] | params_flow.rb:112:10:112:29 | call to merge | provenance | | | params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge | provenance | | -| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge [splat position 0] | provenance | | +| params_flow.rb:112:23:112:28 | call to params | params_flow.rb:112:10:112:29 | call to merge [element 0] | provenance | | | params_flow.rb:116:10:116:15 | call to params | params_flow.rb:116:10:116:37 | call to reverse_merge | provenance | | | params_flow.rb:117:31:117:36 | call to params | params_flow.rb:117:10:117:37 | call to reverse_merge | provenance | | | params_flow.rb:121:10:121:15 | call to params | params_flow.rb:121:10:121:43 | call to with_defaults | provenance | | | params_flow.rb:122:31:122:36 | call to params | params_flow.rb:122:10:122:37 | call to with_defaults | provenance | | | params_flow.rb:126:10:126:15 | call to params | params_flow.rb:126:10:126:30 | call to merge! | provenance | | -| params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | params_flow.rb:127:10:127:30 | call to merge! | provenance | | +| params_flow.rb:127:10:127:30 | call to merge! [element 0] | params_flow.rb:127:10:127:30 | call to merge! | provenance | | | params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! | provenance | | -| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | provenance | | +| params_flow.rb:127:24:127:29 | call to params | params_flow.rb:127:10:127:30 | call to merge! [element 0] | provenance | | | params_flow.rb:130:5:130:5 | [post] p | params_flow.rb:131:10:131:10 | p | provenance | | -| params_flow.rb:130:5:130:5 | [post] p [splat position 0] | params_flow.rb:131:10:131:10 | p | provenance | | +| params_flow.rb:130:5:130:5 | [post] p [element 0] | params_flow.rb:131:10:131:10 | p | provenance | | | params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p | provenance | | -| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p [splat position 0] | provenance | | +| params_flow.rb:130:14:130:19 | call to params | params_flow.rb:130:5:130:5 | [post] p [element 0] | provenance | | | params_flow.rb:135:10:135:15 | call to params | params_flow.rb:135:10:135:38 | call to reverse_merge! | provenance | | | params_flow.rb:136:32:136:37 | call to params | params_flow.rb:136:10:136:38 | call to reverse_merge! | provenance | | | params_flow.rb:139:5:139:5 | [post] p | params_flow.rb:140:10:140:10 | p | provenance | | @@ -213,7 +213,7 @@ nodes | params_flow.rb:111:10:111:15 | call to params | semmle.label | call to params | | params_flow.rb:111:10:111:29 | call to merge | semmle.label | call to merge | | params_flow.rb:112:10:112:29 | call to merge | semmle.label | call to merge | -| params_flow.rb:112:10:112:29 | call to merge [splat position 0] | semmle.label | call to merge [splat position 0] | +| params_flow.rb:112:10:112:29 | call to merge [element 0] | semmle.label | call to merge [element 0] | | params_flow.rb:112:23:112:28 | call to params | semmle.label | call to params | | params_flow.rb:116:10:116:15 | call to params | semmle.label | call to params | | params_flow.rb:116:10:116:37 | call to reverse_merge | semmle.label | call to reverse_merge | @@ -226,10 +226,10 @@ nodes | params_flow.rb:126:10:126:15 | call to params | semmle.label | call to params | | params_flow.rb:126:10:126:30 | call to merge! | semmle.label | call to merge! | | params_flow.rb:127:10:127:30 | call to merge! | semmle.label | call to merge! | -| params_flow.rb:127:10:127:30 | call to merge! [splat position 0] | semmle.label | call to merge! [splat position 0] | +| params_flow.rb:127:10:127:30 | call to merge! [element 0] | semmle.label | call to merge! [element 0] | | params_flow.rb:127:24:127:29 | call to params | semmle.label | call to params | | params_flow.rb:130:5:130:5 | [post] p | semmle.label | [post] p | -| params_flow.rb:130:5:130:5 | [post] p [splat position 0] | semmle.label | [post] p [splat position 0] | +| params_flow.rb:130:5:130:5 | [post] p [element 0] | semmle.label | [post] p [element 0] | | params_flow.rb:130:14:130:19 | call to params | semmle.label | call to params | | params_flow.rb:131:10:131:10 | p | semmle.label | p | | params_flow.rb:135:10:135:15 | call to params | semmle.label | call to params | From 20dc2428300c0f3c2bd35680438bc582b7e02aee Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 14 Aug 2024 14:01:13 +0200 Subject: [PATCH 072/334] Ruby: Rework hash splat argument/parameter matching --- .../dataflow/internal/DataFlowDispatch.qll | 7 +- .../dataflow/internal/DataFlowPrivate.qll | 53 +----- .../ruby/dataflow/internal/DataFlowPublic.qll | 5 +- .../VerifyApiGraphExpectations.expected | 2 +- .../flow-summaries/semantics.expected | 24 +-- .../dataflow/params/TypeTracker.expected | 169 ++++++------------ .../dataflow/params/params-flow.expected | 12 +- .../type-tracker/TypeTracker.expected | 24 +-- 8 files changed, 88 insertions(+), 208 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index 8af047e8326..97c0e24fa5b 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -1538,9 +1538,14 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { or exists(string name | ppos.isKeyword(name) and apos.isKeyword(name)) or - (ppos.isHashSplat() or ppos.isSynthHashSplat()) and + ppos.isHashSplat() and (apos.isHashSplat() or apos.isSynthHashSplat()) or + // no case for `apos.isSynthHashSplat() and ppos.isSynthHashSplat()`, since + // direct keyword matching is possible + ppos.isSynthHashSplat() and + apos.isHashSplat() + or exists(int pos, boolean hasActualSplatParam, boolean hasActualSplatArg | ( ppos.isSplat(pos) and diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 5ec24c19901..620a9fb5cab 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -662,7 +662,7 @@ private module Cached { ) } or deprecated TSplatContent(int i, Boolean shifted) { i in [0 .. 10] } or - THashSplatContent(ConstantValue::ConstantSymbolValue cv) or + deprecated THashSplatContent(ConstantValue::ConstantSymbolValue cv) or TCapturedVariableContent(VariableCapture::CapturedVariable v) or // Only used by type-tracking TAttributeName(string name) { name = any(SetterMethodCall c).getTargetName() } @@ -686,24 +686,16 @@ private module Cached { TUnknownElementContentApprox() or TKnownIntegerElementContentApprox() or TKnownElementContentApprox(string approx) { approx = approxKnownElementIndex(_) } or - THashSplatContentApprox(string approx) { approx = approxKnownElementIndex(_) } or TNonElementContentApprox(Content c) { not c instanceof Content::ElementContent } or TCapturedVariableContentApprox(VariableCapture::CapturedVariable v) cached newtype TDataFlowType = TLambdaDataFlowType(Callable c) { c = any(LambdaSelfReferenceNode n).getCallable() } or - // In order to reduce the set of cons-candidates, we annotate all implicit (hash) splat - // creations with the name of the method that they are passed into. This includes - // array/hash literals as well (where the name is simply `[]`), because of how they - // are modeled (see `Array.qll` and `Hash.qll`). - TSynthHashSplatArgumentType(string methodName) { - methodName = any(SynthHashSplatArgumentNode n).getMethodName() - } or TUnknownDataFlowType() } -class TElementContent = TKnownElementContent or TUnknownElementContent or THashSplatContent; +class TElementContent = TKnownElementContent or TUnknownElementContent; import Cached @@ -1118,18 +1110,6 @@ private module ParameterNodes { * * by adding read steps out of the synthesized parameter node to the relevant * keyword parameters. - * - * In order to avoid redundancy (and improve performance) in cases like - * - * ```rb - * foo(p1: taint(1), p2: taint(2)) - * ``` - * - * where direct keyword matching is possible, we use a special `HashSplatContent` - * (instead of reusing `KnownElementContent`) when we construct a synthesized hash - * splat argument (`SynthHashSplatArgumentNode`) at the call site, and then only - * add read steps out of this node for actual hash-splat arguments (which will use - * a normal `KnownElementContent`). */ class SynthHashSplatParameterNode extends ParameterNodeImpl, TSynthHashSplatParameterNode { private DataFlowCallable callable; @@ -1436,24 +1416,7 @@ module ArgumentNodes { not cv.isSymbol(_) ) | - if call instanceof CfgNodes::ExprNodes::HashLiteralCfgNode - then - /* - * Needed for cases like - * - * ```rb - * hash = { a: taint, b: safe } - * - * def foo(a:, b:) - * sink(a) - * end - * - * foo(**hash) - * ``` - */ - - c.isSingleton(Content::getElementContent(cv)) - else c.isSingleton(THashSplatContent(cv)) + c.isSingleton(Content::getElementContent(cv)) ) } @@ -1938,11 +1901,8 @@ DataFlowType getNodeType(Node n) { result = TLambdaDataFlowType(c) ) or - result = TSynthHashSplatArgumentType(n.(SynthHashSplatArgumentNode).getMethodName()) - or not n instanceof LambdaSelfReferenceNode and not mustHaveLambdaType(n, _) and - not n instanceof SynthHashSplatArgumentNode and result = TUnknownDataFlowType() } @@ -2168,11 +2128,6 @@ class ContentApprox extends TContentApprox { result = "approximated element " + approx ) or - exists(string s | - this = THashSplatContentApprox(s) and - result = "approximated hash-splat position " + s - ) - or exists(Content c | this = TNonElementContentApprox(c) and result = c.toString() @@ -2212,8 +2167,6 @@ ContentApprox getContentApprox(Content c) { result = TKnownElementContentApprox(approxKnownElementIndex(c.(Content::KnownElementContent).getIndex())) or - result = THashSplatContentApprox(approxKnownElementIndex(c.(Content::HashSplatContent).getKey())) - or result = TNonElementContentApprox(c) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index 825c440c9a9..ee3105c3be7 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -629,7 +629,7 @@ module Content { * * we have an implicit hash-splat argument containing `{:a => 1, :b => 2, :c => 3}`. */ - class HashSplatContent extends ElementContent, THashSplatContent { + deprecated class HashSplatContent extends Content, THashSplatContent { private ConstantValue::ConstantSymbolValue cv; HashSplatContent() { this = THashSplatContent(cv) } @@ -797,7 +797,6 @@ class ContentSet extends TContentSet { private Content getAnElementReadContent() { exists(Content::KnownElementContent c | this.isKnownOrUnknownElement(c) | result = c or - result = THashSplatContent(c.getIndex()) or result = TUnknownElementContent() ) or @@ -815,8 +814,6 @@ class ContentSet extends TContentSet { | type = result.(Content::KnownElementContent).getIndex().getValueType() or - type = result.(Content::HashSplatContent).getKey().getValueType() - or includeUnknown = true and result = TUnknownElementContent() ) diff --git a/ruby/ql/test/library-tests/dataflow/api-graphs/VerifyApiGraphExpectations.expected b/ruby/ql/test/library-tests/dataflow/api-graphs/VerifyApiGraphExpectations.expected index 48de9172b36..8ec8033d086 100644 --- a/ruby/ql/test/library-tests/dataflow/api-graphs/VerifyApiGraphExpectations.expected +++ b/ruby/ql/test/library-tests/dataflow/api-graphs/VerifyApiGraphExpectations.expected @@ -1,2 +1,2 @@ -failures testFailures +failures diff --git a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected index 9f3e900d25d..63f33ab5b55 100644 --- a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected +++ b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected @@ -144,14 +144,14 @@ edges | semantics.rb:108:5:108:5 | b | semantics.rb:110:27:110:27 | b | provenance | | | semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | provenance | | | semantics.rb:108:9:108:18 | call to source | semantics.rb:108:5:108:5 | b | provenance | | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | -| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | provenance | | -| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | provenance | | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | -| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | provenance | | -| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | provenance | | +| semantics.rb:109:10:109:28 | call to s15 [element :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | +| semantics.rb:109:10:109:28 | call to s15 [element :foo] | semantics.rb:109:10:109:34 | ...[...] | provenance | | +| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [element :foo] | provenance | | +| semantics.rb:109:19:109:19 | a | semantics.rb:109:10:109:28 | call to s15 [element :foo] | provenance | | +| semantics.rb:110:10:110:28 | call to s15 [element :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | +| semantics.rb:110:10:110:28 | call to s15 [element :bar] | semantics.rb:110:10:110:34 | ...[...] | provenance | | +| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [element :bar] | provenance | | +| semantics.rb:110:27:110:27 | b | semantics.rb:110:10:110:28 | call to s15 [element :bar] | provenance | | | semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | provenance | | | semantics.rb:114:5:114:5 | a | semantics.rb:116:14:116:14 | a | provenance | | | semantics.rb:114:5:114:5 | a | semantics.rb:119:17:119:17 | a | provenance | | @@ -1269,14 +1269,14 @@ nodes | semantics.rb:108:5:108:5 | b | semmle.label | b | | semantics.rb:108:9:108:18 | call to source | semmle.label | call to source | | semantics.rb:108:9:108:18 | call to source | semmle.label | call to source | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semmle.label | call to s15 [hash-splat position :foo] | -| semantics.rb:109:10:109:28 | call to s15 [hash-splat position :foo] | semmle.label | call to s15 [hash-splat position :foo] | +| semantics.rb:109:10:109:28 | call to s15 [element :foo] | semmle.label | call to s15 [element :foo] | +| semantics.rb:109:10:109:28 | call to s15 [element :foo] | semmle.label | call to s15 [element :foo] | | semantics.rb:109:10:109:34 | ...[...] | semmle.label | ...[...] | | semantics.rb:109:10:109:34 | ...[...] | semmle.label | ...[...] | | semantics.rb:109:19:109:19 | a | semmle.label | a | | semantics.rb:109:19:109:19 | a | semmle.label | a | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semmle.label | call to s15 [hash-splat position :bar] | -| semantics.rb:110:10:110:28 | call to s15 [hash-splat position :bar] | semmle.label | call to s15 [hash-splat position :bar] | +| semantics.rb:110:10:110:28 | call to s15 [element :bar] | semmle.label | call to s15 [element :bar] | +| semantics.rb:110:10:110:28 | call to s15 [element :bar] | semmle.label | call to s15 [element :bar] | | semantics.rb:110:10:110:34 | ...[...] | semmle.label | ...[...] | | semantics.rb:110:10:110:34 | ...[...] | semmle.label | ...[...] | | semantics.rb:110:27:110:27 | b | semmle.label | b | diff --git a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected index 90b41808613..25e4a33a46b 100644 --- a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected @@ -134,17 +134,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element :p3 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :c | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:17:25:24 | **kwargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:139:25:139:32 | **kwargs | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:1:11:1:11 | x | type tracker without call steps | params_flow.rb:14:12:14:19 | call to taint | @@ -362,38 +351,38 @@ track | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element 5 | params_flow.rb:94:1:94:48 | synthetic splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:38:8:38:13 | ** ... | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p1 | params_flow.rb:41:24:41:29 | ** ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:37:8:37:44 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:38:8:38:13 | ** ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:143:10:143:34 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:145:21:145:28 | ** ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:157:10:157:34 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:159:19:159:26 | ** ... | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | +| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | call to [] | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p3 | params_flow.rb:34:8:34:32 | synthetic hash-splat argument | | params_flow.rb:1:11:1:11 | x | type tracker without call steps with content element :p3 | params_flow.rb:35:23:35:28 | ** ... | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:5:1:7:3 | &block | type tracker without call steps | params_flow.rb:5:1:7:3 | &block | | params_flow.rb:5:1:7:3 | self in sink | type tracker without call steps | params_flow.rb:5:1:7:3 | self in sink | | params_flow.rb:5:1:7:3 | sink | type tracker without call steps | params_flow.rb:5:1:7:3 | sink | @@ -569,7 +558,6 @@ track | params_flow.rb:18:5:18:11 | call to sink | type tracker without call steps | params_flow.rb:41:1:41:30 | call to keyword | | params_flow.rb:18:5:18:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:1:21:35 | call to keyword | type tracker without call steps | params_flow.rb:21:1:21:35 | call to keyword | -| params_flow.rb:21:1:21:35 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:21:9:21:10 | :p1 | type tracker without call steps | params_flow.rb:21:9:21:10 | :p1 | | params_flow.rb:21:9:21:20 | Pair | type tracker without call steps | params_flow.rb:21:9:21:20 | Pair | @@ -577,42 +565,37 @@ track | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:21:13:21:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:13:21:20 | call to taint | type tracker without call steps | params_flow.rb:21:13:21:20 | call to taint | -| params_flow.rb:21:13:21:20 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:21:13:21:20 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:21:13:21:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:21:13:21:20 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:21:19:21:19 | 3 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps | params_flow.rb:21:13:21:20 | call to taint | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps | params_flow.rb:21:19:21:19 | 3 | | params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content element 0 | params_flow.rb:21:13:21:20 | synthetic splat argument | -| params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:21:19:21:19 | 3 | type tracker without call steps with content element :p1 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:21:23:21:24 | :p2 | type tracker without call steps | params_flow.rb:21:23:21:24 | :p2 | | params_flow.rb:21:23:21:34 | Pair | type tracker without call steps | params_flow.rb:21:23:21:34 | Pair | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:21:27:21:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:27:21:34 | call to taint | type tracker without call steps | params_flow.rb:21:27:21:34 | call to taint | -| params_flow.rb:21:27:21:34 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:21:27:21:34 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:21:27:21:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:21:27:21:34 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:21:33:21:33 | 4 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps | params_flow.rb:21:27:21:34 | call to taint | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps | params_flow.rb:21:33:21:33 | 4 | | params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content element 0 | params_flow.rb:21:27:21:34 | synthetic splat argument | -| params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | +| params_flow.rb:21:33:21:33 | 4 | type tracker without call steps with content element :p2 | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:22:1:22:35 | call to keyword | type tracker without call steps | params_flow.rb:22:1:22:35 | call to keyword | -| params_flow.rb:22:1:22:35 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:22:9:22:10 | :p2 | type tracker without call steps | params_flow.rb:22:9:22:10 | :p2 | | params_flow.rb:22:9:22:20 | Pair | type tracker without call steps | params_flow.rb:22:9:22:20 | Pair | @@ -620,42 +603,37 @@ track | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:22:13:22:20 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:13:22:20 | call to taint | type tracker without call steps | params_flow.rb:22:13:22:20 | call to taint | -| params_flow.rb:22:13:22:20 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:22:13:22:20 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:22:13:22:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:22:13:22:20 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:22:19:22:19 | 5 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps | params_flow.rb:22:13:22:20 | call to taint | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps | params_flow.rb:22:19:22:19 | 5 | | params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content element 0 | params_flow.rb:22:13:22:20 | synthetic splat argument | -| params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:22:19:22:19 | 5 | type tracker without call steps with content element :p2 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:22:23:22:24 | :p1 | type tracker without call steps | params_flow.rb:22:23:22:24 | :p1 | | params_flow.rb:22:23:22:34 | Pair | type tracker without call steps | params_flow.rb:22:23:22:34 | Pair | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:22:27:22:34 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:27:22:34 | call to taint | type tracker without call steps | params_flow.rb:22:27:22:34 | call to taint | -| params_flow.rb:22:27:22:34 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:22:27:22:34 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:22:27:22:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:22:27:22:34 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:22:33:22:33 | 6 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps | params_flow.rb:22:27:22:34 | call to taint | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps | params_flow.rb:22:33:22:33 | 6 | | params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content element 0 | params_flow.rb:22:27:22:34 | synthetic splat argument | -| params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | +| params_flow.rb:22:33:22:33 | 6 | type tracker without call steps with content element :p1 | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:23:1:23:41 | call to keyword | type tracker without call steps | params_flow.rb:23:1:23:41 | call to keyword | -| params_flow.rb:23:1:23:41 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:23:9:23:11 | :p2 | type tracker without call steps | params_flow.rb:23:9:23:11 | :p2 | | params_flow.rb:23:9:23:23 | Pair | type tracker without call steps | params_flow.rb:23:9:23:23 | Pair | @@ -663,40 +641,36 @@ track | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:23:16:23:23 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:16:23:23 | call to taint | type tracker without call steps | params_flow.rb:23:16:23:23 | call to taint | -| params_flow.rb:23:16:23:23 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:23:16:23:23 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:23:16:23:23 | synthetic splat argument | type tracker without call steps | params_flow.rb:23:16:23:23 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:23:22:23:22 | 7 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps | params_flow.rb:23:16:23:23 | call to taint | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps | params_flow.rb:23:22:23:22 | 7 | | params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content element 0 | params_flow.rb:23:16:23:23 | synthetic splat argument | -| params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:23:22:23:22 | 7 | type tracker without call steps with content element :p2 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:23:26:23:28 | :p1 | type tracker without call steps | params_flow.rb:23:26:23:28 | :p1 | | params_flow.rb:23:26:23:40 | Pair | type tracker without call steps | params_flow.rb:23:26:23:40 | Pair | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:23:33:23:40 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:33:23:40 | call to taint | type tracker without call steps | params_flow.rb:23:33:23:40 | call to taint | -| params_flow.rb:23:33:23:40 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:23:33:23:40 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:23:33:23:40 | synthetic splat argument | type tracker without call steps | params_flow.rb:23:33:23:40 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps | params_flow.rb:16:13:16:14 | p1 | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content element 0 | params_flow.rb:17:5:17:11 | synthetic splat argument | -| params_flow.rb:23:39:23:39 | 8 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps | params_flow.rb:23:33:23:40 | call to taint | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps | params_flow.rb:23:39:23:39 | 8 | | params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content element 0 | params_flow.rb:23:33:23:40 | synthetic splat argument | -| params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | +| params_flow.rb:23:39:23:39 | 8 | type tracker without call steps with content element :p1 | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:25:1:31:3 | &block | type tracker without call steps | params_flow.rb:25:1:31:3 | &block | | params_flow.rb:25:1:31:3 | kwargs | type tracker without call steps | params_flow.rb:25:1:31:3 | kwargs | | params_flow.rb:25:1:31:3 | self in kwargs | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | @@ -751,7 +725,6 @@ track | params_flow.rb:30:18:30:20 | :p4 | type tracker without call steps | params_flow.rb:30:18:30:20 | :p4 | | params_flow.rb:30:18:30:20 | :p4 | type tracker without call steps with content element 0 | params_flow.rb:30:11:30:21 | synthetic splat argument | | params_flow.rb:33:1:33:58 | call to kwargs | type tracker without call steps | params_flow.rb:33:1:33:58 | call to kwargs | -| params_flow.rb:33:1:33:58 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:8:33:9 | :p1 | type tracker without call steps | params_flow.rb:33:8:33:9 | :p1 | @@ -762,10 +735,9 @@ track | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:12:33:19 | call to taint | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:12:33:19 | call to taint | type tracker without call steps | params_flow.rb:33:12:33:19 | call to taint | -| params_flow.rb:33:12:33:19 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:12:33:19 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:12:33:19 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:12:33:19 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -774,66 +746,60 @@ track | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:18:33:18 | 9 | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps | params_flow.rb:33:12:33:19 | call to taint | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps | params_flow.rb:33:18:33:18 | 9 | | params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content element 0 | params_flow.rb:33:12:33:19 | synthetic splat argument | -| params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:18:33:18 | 9 | type tracker without call steps with content element :p1 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:22:33:23 | :p2 | type tracker without call steps | params_flow.rb:33:22:33:23 | :p2 | | params_flow.rb:33:22:33:34 | Pair | type tracker without call steps | params_flow.rb:33:22:33:34 | Pair | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | -| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:26:33:34 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:26:33:34 | call to taint | type tracker without call steps | params_flow.rb:33:26:33:34 | call to taint | -| params_flow.rb:33:26:33:34 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:26:33:34 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:26:33:34 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:26:33:34 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps | params_flow.rb:28:11:28:21 | ...[...] | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content element 0 | params_flow.rb:28:5:28:22 | synthetic splat argument | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:32:33:33 | 10 | type tracker with call steps with content element :p2 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps | params_flow.rb:33:26:33:34 | call to taint | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps | params_flow.rb:33:32:33:33 | 10 | | params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content element 0 | params_flow.rb:33:26:33:34 | synthetic splat argument | -| params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:32:33:33 | 10 | type tracker without call steps with content element :p2 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:37:33:38 | :p3 | type tracker without call steps | params_flow.rb:33:37:33:38 | :p3 | | params_flow.rb:33:37:33:49 | Pair | type tracker without call steps | params_flow.rb:33:37:33:49 | Pair | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | -| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:41:33:49 | call to taint | type tracker with call steps with content element :p3 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:41:33:49 | call to taint | type tracker without call steps | params_flow.rb:33:41:33:49 | call to taint | -| params_flow.rb:33:41:33:49 | call to taint | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:41:33:49 | call to taint | type tracker without call steps with content element :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:41:33:49 | synthetic splat argument | type tracker without call steps | params_flow.rb:33:41:33:49 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps | params_flow.rb:29:11:29:21 | ...[...] | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content element 0 | params_flow.rb:29:5:29:22 | synthetic splat argument | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content hash-splat position :p3 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:47:33:48 | 11 | type tracker with call steps with content element :p3 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps | params_flow.rb:33:41:33:49 | call to taint | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps | params_flow.rb:33:47:33:48 | 11 | | params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content element 0 | params_flow.rb:33:41:33:49 | synthetic splat argument | -| params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content hash-splat position :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:47:33:48 | 11 | type tracker without call steps with content element :p3 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:33:52:33:53 | :p4 | type tracker without call steps | params_flow.rb:33:52:33:53 | :p4 | | params_flow.rb:33:52:33:57 | Pair | type tracker without call steps | params_flow.rb:33:52:33:57 | Pair | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps | params_flow.rb:30:11:30:21 | ...[...] | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content element 0 | params_flow.rb:30:5:30:22 | synthetic splat argument | -| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content hash-splat position :p4 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content hash-splat position :p4 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:33:56:33:57 | "" | type tracker with call steps with content element :p4 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:56:33:57 | "" | type tracker without call steps | params_flow.rb:33:56:33:57 | "" | -| params_flow.rb:33:56:33:57 | "" | type tracker without call steps with content hash-splat position :p4 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | +| params_flow.rb:33:56:33:57 | "" | type tracker without call steps with content element :p4 | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | | params_flow.rb:34:1:34:4 | args | type tracker without call steps | params_flow.rb:34:1:34:4 | args | | params_flow.rb:34:8:34:32 | Hash | type tracker without call steps | params_flow.rb:34:8:34:32 | Hash | | params_flow.rb:34:8:34:32 | call to [] | type tracker without call steps | params_flow.rb:34:8:34:32 | call to [] | @@ -878,7 +844,6 @@ track | params_flow.rb:34:29:34:30 | "" | type tracker without call steps with content element :p4 | params_flow.rb:34:8:34:32 | synthetic hash-splat argument | | params_flow.rb:34:29:34:30 | "" | type tracker without call steps with content element :p4 | params_flow.rb:35:23:35:28 | ** ... | | params_flow.rb:35:1:35:29 | call to kwargs | type tracker without call steps | params_flow.rb:35:1:35:29 | call to kwargs | -| params_flow.rb:35:1:35:29 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | | params_flow.rb:35:8:35:9 | :p1 | type tracker without call steps | params_flow.rb:35:8:35:9 | :p1 | @@ -889,10 +854,9 @@ track | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:35:12:35:20 | call to taint | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:12:35:20 | call to taint | type tracker without call steps | params_flow.rb:35:12:35:20 | call to taint | -| params_flow.rb:35:12:35:20 | call to taint | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | +| params_flow.rb:35:12:35:20 | call to taint | type tracker without call steps with content element :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | | params_flow.rb:35:12:35:20 | synthetic splat argument | type tracker without call steps | params_flow.rb:35:12:35:20 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -901,12 +865,11 @@ track | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:26:5:26:11 | synthetic splat argument | | params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element 0 | params_flow.rb:27:5:27:22 | synthetic splat argument | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | -| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:25:17:25:24 | **kwargs | +| params_flow.rb:35:18:35:19 | 13 | type tracker with call steps with content element :p1 | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps | params_flow.rb:35:12:35:20 | call to taint | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps | params_flow.rb:35:18:35:19 | 13 | | params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content element 0 | params_flow.rb:35:12:35:20 | synthetic splat argument | -| params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | +| params_flow.rb:35:18:35:19 | 13 | type tracker without call steps with content element :p1 | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | | params_flow.rb:35:23:35:28 | ** ... | type tracker with call steps | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:23:35:28 | ** ... | type tracker with call steps | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:23:35:28 | ** ... | type tracker without call steps | params_flow.rb:35:23:35:28 | ** ... | @@ -1005,7 +968,6 @@ track | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element :p1 | params_flow.rb:40:8:40:26 | synthetic hash-splat argument | | params_flow.rb:40:22:40:23 | 16 | type tracker without call steps with content element :p1 | params_flow.rb:41:24:41:29 | ** ... | | params_flow.rb:41:1:41:30 | call to keyword | type tracker without call steps | params_flow.rb:41:1:41:30 | call to keyword | -| params_flow.rb:41:1:41:30 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | | params_flow.rb:41:9:41:10 | :p2 | type tracker without call steps | params_flow.rb:41:9:41:10 | :p2 | | params_flow.rb:41:9:41:21 | Pair | type tracker without call steps | params_flow.rb:41:9:41:21 | Pair | @@ -1013,20 +975,18 @@ track | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:41:13:41:21 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:13:41:21 | call to taint | type tracker without call steps | params_flow.rb:41:13:41:21 | call to taint | -| params_flow.rb:41:13:41:21 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | +| params_flow.rb:41:13:41:21 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | | params_flow.rb:41:13:41:21 | synthetic splat argument | type tracker without call steps | params_flow.rb:41:13:41:21 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps | params_flow.rb:16:18:16:19 | p2 | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content element 0 | params_flow.rb:18:5:18:11 | synthetic splat argument | -| params_flow.rb:41:19:41:20 | 17 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps | params_flow.rb:41:13:41:21 | call to taint | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps | params_flow.rb:41:19:41:20 | 17 | | params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content element 0 | params_flow.rb:41:13:41:21 | synthetic splat argument | -| params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | +| params_flow.rb:41:19:41:20 | 17 | type tracker without call steps with content element :p2 | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | | params_flow.rb:41:24:41:29 | ** ... | type tracker with call steps | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:24:41:29 | ** ... | type tracker without call steps | params_flow.rb:41:24:41:29 | ** ... | | params_flow.rb:43:1:43:4 | args | type tracker without call steps | params_flow.rb:43:1:43:4 | args | @@ -2208,7 +2168,6 @@ track | params_flow.rb:111:5:111:10 | call to sink | type tracker without call steps | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | | params_flow.rb:111:5:111:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | type tracker without call steps | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | -| params_flow.rb:114:1:114:67 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | | params_flow.rb:114:1:114:67 | synthetic splat argument | type tracker with call steps | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:114:1:114:67 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:1:114:67 | synthetic splat argument | @@ -2256,20 +2215,18 @@ track | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps | params_flow.rb:108:44:108:44 | c | | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | -| params_flow.rb:114:58:114:66 | call to taint | type tracker with call steps with content hash-splat position :c | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | | params_flow.rb:114:58:114:66 | call to taint | type tracker without call steps | params_flow.rb:114:58:114:66 | call to taint | -| params_flow.rb:114:58:114:66 | call to taint | type tracker without call steps with content hash-splat position :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | +| params_flow.rb:114:58:114:66 | call to taint | type tracker without call steps with content element :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | | params_flow.rb:114:58:114:66 | synthetic splat argument | type tracker without call steps | params_flow.rb:114:58:114:66 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps | params_flow.rb:108:44:108:44 | c | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content element 0 | params_flow.rb:111:5:111:10 | synthetic splat argument | -| params_flow.rb:114:64:114:65 | 60 | type tracker with call steps with content hash-splat position :c | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps | params_flow.rb:114:58:114:66 | call to taint | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps | params_flow.rb:114:64:114:65 | 60 | | params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content element 0 | params_flow.rb:114:58:114:66 | synthetic splat argument | -| params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content hash-splat position :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | +| params_flow.rb:114:64:114:65 | 60 | type tracker without call steps with content element :c | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | | params_flow.rb:116:1:116:1 | x | type tracker without call steps | params_flow.rb:116:1:116:1 | x | | params_flow.rb:116:5:116:6 | Array | type tracker without call steps | params_flow.rb:116:5:116:6 | Array | | params_flow.rb:116:5:116:6 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -2699,9 +2656,9 @@ track | params_flow.rb:148:1:148:2 | p1 | type tracker without call steps | params_flow.rb:148:1:148:2 | p1 | | params_flow.rb:148:6:148:7 | Array | type tracker without call steps | params_flow.rb:148:6:148:7 | Array | | params_flow.rb:148:6:148:7 | call to [] | type tracker with call steps | params_flow.rb:140:5:140:15 | ...[...] | -| params_flow.rb:148:6:148:7 | call to [] | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:139:25:139:32 | **kwargs | +| params_flow.rb:148:6:148:7 | call to [] | type tracker with call steps with content element :p1 | params_flow.rb:139:25:139:32 | **kwargs | | params_flow.rb:148:6:148:7 | call to [] | type tracker without call steps | params_flow.rb:148:6:148:7 | call to [] | -| params_flow.rb:148:6:148:7 | call to [] | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | +| params_flow.rb:148:6:148:7 | call to [] | type tracker without call steps with content element :p1 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:149:1:149:11 | call to sink | type tracker without call steps | params_flow.rb:149:1:149:11 | call to sink | | params_flow.rb:149:1:149:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:149:1:149:11 | synthetic splat argument | | params_flow.rb:149:6:149:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -2722,20 +2679,20 @@ track | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | | params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | -| params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:139:25:139:32 | **kwargs | +| params_flow.rb:150:33:150:41 | call to taint | type tracker with call steps with content element :p2 | params_flow.rb:139:25:139:32 | **kwargs | | params_flow.rb:150:33:150:41 | call to taint | type tracker without call steps | params_flow.rb:150:33:150:41 | call to taint | -| params_flow.rb:150:33:150:41 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | +| params_flow.rb:150:33:150:41 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:150:33:150:41 | synthetic splat argument | type tracker without call steps | params_flow.rb:150:33:150:41 | synthetic splat argument | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps | params_flow.rb:140:27:140:37 | ...[...] | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:15 | [post] ...[...] | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 0 or unknown | params_flow.rb:140:5:140:38 | call to insert | | params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element 1 | params_flow.rb:140:5:140:38 | synthetic splat argument | -| params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:139:25:139:32 | **kwargs | +| params_flow.rb:150:39:150:40 | 73 | type tracker with call steps with content element :p2 | params_flow.rb:139:25:139:32 | **kwargs | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps | params_flow.rb:150:33:150:41 | call to taint | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps | params_flow.rb:150:39:150:40 | 73 | | params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content element 0 | params_flow.rb:150:33:150:41 | synthetic splat argument | -| params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | +| params_flow.rb:150:39:150:40 | 73 | type tracker without call steps with content element :p2 | params_flow.rb:150:1:150:42 | synthetic hash-splat argument | | params_flow.rb:151:1:151:11 | call to sink | type tracker without call steps | params_flow.rb:151:1:151:11 | call to sink | | params_flow.rb:151:1:151:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:151:1:151:11 | synthetic splat argument | | params_flow.rb:151:6:151:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -2837,9 +2794,8 @@ track | params_flow.rb:162:1:162:2 | p1 | type tracker without call steps | params_flow.rb:162:1:162:2 | p1 | | params_flow.rb:162:6:162:7 | Array | type tracker without call steps | params_flow.rb:162:6:162:7 | Array | | params_flow.rb:162:6:162:7 | call to [] | type tracker with call steps | params_flow.rb:153:23:153:24 | p1 | -| params_flow.rb:162:6:162:7 | call to [] | type tracker with call steps with content hash-splat position :p1 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:162:6:162:7 | call to [] | type tracker without call steps | params_flow.rb:162:6:162:7 | call to [] | -| params_flow.rb:162:6:162:7 | call to [] | type tracker without call steps with content hash-splat position :p1 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | +| params_flow.rb:162:6:162:7 | call to [] | type tracker without call steps with content element :p1 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:163:1:163:11 | call to sink | type tracker without call steps | params_flow.rb:163:1:163:11 | call to sink | | params_flow.rb:163:1:163:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:163:1:163:11 | synthetic splat argument | | params_flow.rb:163:6:163:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -2850,7 +2806,6 @@ track | params_flow.rb:163:9:163:9 | 0 | type tracker without call steps | params_flow.rb:163:9:163:9 | 0 | | params_flow.rb:163:9:163:9 | 0 | type tracker without call steps with content element 0 | params_flow.rb:163:6:163:10 | synthetic splat argument | | params_flow.rb:164:1:164:40 | call to keywordSideEffect | type tracker without call steps | params_flow.rb:164:1:164:40 | call to keywordSideEffect | -| params_flow.rb:164:1:164:40 | synthetic hash-splat argument | type tracker with call steps | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | type tracker without call steps | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:164:19:164:20 | :p1 | type tracker without call steps | params_flow.rb:164:19:164:20 | :p1 | | params_flow.rb:164:19:164:24 | Pair | type tracker without call steps | params_flow.rb:164:19:164:24 | Pair | @@ -2860,20 +2815,18 @@ track | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | | params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | -| params_flow.rb:164:31:164:39 | call to taint | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:164:31:164:39 | call to taint | type tracker without call steps | params_flow.rb:164:31:164:39 | call to taint | -| params_flow.rb:164:31:164:39 | call to taint | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | +| params_flow.rb:164:31:164:39 | call to taint | type tracker without call steps with content element :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:164:31:164:39 | synthetic splat argument | type tracker without call steps | params_flow.rb:164:31:164:39 | synthetic splat argument | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps | params_flow.rb:153:28:153:29 | p2 | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:6 | [post] p1 | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 0 or unknown | params_flow.rb:154:5:154:20 | call to insert | | params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content element 1 | params_flow.rb:154:5:154:20 | synthetic splat argument | -| params_flow.rb:164:37:164:38 | 75 | type tracker with call steps with content hash-splat position :p2 | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps | params_flow.rb:164:31:164:39 | call to taint | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps | params_flow.rb:164:37:164:38 | 75 | | params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content element 0 | params_flow.rb:164:31:164:39 | synthetic splat argument | -| params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content hash-splat position :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | +| params_flow.rb:164:37:164:38 | 75 | type tracker without call steps with content element :p2 | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:165:1:165:11 | call to sink | type tracker without call steps | params_flow.rb:165:1:165:11 | call to sink | | params_flow.rb:165:1:165:11 | synthetic splat argument | type tracker without call steps | params_flow.rb:165:1:165:11 | synthetic splat argument | | params_flow.rb:165:6:165:10 | ...[...] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | @@ -3841,7 +3794,6 @@ trackEnd | params_flow.rb:18:5:18:11 | call to sink | params_flow.rb:41:1:41:30 | call to keyword | | params_flow.rb:18:5:18:11 | synthetic splat argument | params_flow.rb:18:5:18:11 | synthetic splat argument | | params_flow.rb:21:1:21:35 | call to keyword | params_flow.rb:21:1:21:35 | call to keyword | -| params_flow.rb:21:1:21:35 | synthetic hash-splat argument | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | params_flow.rb:21:1:21:35 | synthetic hash-splat argument | | params_flow.rb:21:9:21:10 | :p1 | params_flow.rb:21:9:21:10 | :p1 | | params_flow.rb:21:9:21:20 | Pair | params_flow.rb:21:9:21:20 | Pair | @@ -3886,7 +3838,6 @@ trackEnd | params_flow.rb:21:33:21:33 | 4 | params_flow.rb:21:27:21:34 | call to taint | | params_flow.rb:21:33:21:33 | 4 | params_flow.rb:21:33:21:33 | 4 | | params_flow.rb:22:1:22:35 | call to keyword | params_flow.rb:22:1:22:35 | call to keyword | -| params_flow.rb:22:1:22:35 | synthetic hash-splat argument | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | params_flow.rb:22:1:22:35 | synthetic hash-splat argument | | params_flow.rb:22:9:22:10 | :p2 | params_flow.rb:22:9:22:10 | :p2 | | params_flow.rb:22:9:22:20 | Pair | params_flow.rb:22:9:22:20 | Pair | @@ -3931,7 +3882,6 @@ trackEnd | params_flow.rb:22:33:22:33 | 6 | params_flow.rb:22:27:22:34 | call to taint | | params_flow.rb:22:33:22:33 | 6 | params_flow.rb:22:33:22:33 | 6 | | params_flow.rb:23:1:23:41 | call to keyword | params_flow.rb:23:1:23:41 | call to keyword | -| params_flow.rb:23:1:23:41 | synthetic hash-splat argument | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | params_flow.rb:23:1:23:41 | synthetic hash-splat argument | | params_flow.rb:23:9:23:11 | :p2 | params_flow.rb:23:9:23:11 | :p2 | | params_flow.rb:23:9:23:23 | Pair | params_flow.rb:23:9:23:23 | Pair | @@ -4044,7 +3994,6 @@ trackEnd | params_flow.rb:30:11:30:21 | synthetic splat argument | params_flow.rb:30:11:30:21 | synthetic splat argument | | params_flow.rb:30:18:30:20 | :p4 | params_flow.rb:30:18:30:20 | :p4 | | params_flow.rb:33:1:33:58 | call to kwargs | params_flow.rb:33:1:33:58 | call to kwargs | -| params_flow.rb:33:1:33:58 | synthetic hash-splat argument | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | params_flow.rb:25:19:25:24 | kwargs | | params_flow.rb:33:1:33:58 | synthetic hash-splat argument | params_flow.rb:27:11:27:16 | kwargs | @@ -4162,7 +4111,6 @@ trackEnd | params_flow.rb:34:29:34:30 | "" | params_flow.rb:30:11:30:21 | ...[...] | | params_flow.rb:34:29:34:30 | "" | params_flow.rb:34:29:34:30 | "" | | params_flow.rb:35:1:35:29 | call to kwargs | params_flow.rb:35:1:35:29 | call to kwargs | -| params_flow.rb:35:1:35:29 | synthetic hash-splat argument | params_flow.rb:25:1:31:3 | synthetic hash-splat parameter | | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | params_flow.rb:25:17:25:24 | **kwargs | | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | params_flow.rb:25:19:25:24 | kwargs | | params_flow.rb:35:1:35:29 | synthetic hash-splat argument | params_flow.rb:27:11:27:16 | kwargs | @@ -4300,7 +4248,6 @@ trackEnd | params_flow.rb:40:22:40:23 | 16 | params_flow.rb:40:16:40:24 | call to taint | | params_flow.rb:40:22:40:23 | 16 | params_flow.rb:40:22:40:23 | 16 | | params_flow.rb:41:1:41:30 | call to keyword | params_flow.rb:41:1:41:30 | call to keyword | -| params_flow.rb:41:1:41:30 | synthetic hash-splat argument | params_flow.rb:16:1:19:3 | synthetic hash-splat parameter | | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | params_flow.rb:41:1:41:30 | synthetic hash-splat argument | | params_flow.rb:41:9:41:10 | :p2 | params_flow.rb:41:9:41:10 | :p2 | | params_flow.rb:41:9:41:21 | Pair | params_flow.rb:41:9:41:21 | Pair | @@ -5498,7 +5445,6 @@ trackEnd | params_flow.rb:111:5:111:10 | call to sink | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | | params_flow.rb:111:5:111:10 | synthetic splat argument | params_flow.rb:111:5:111:10 | synthetic splat argument | | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | params_flow.rb:114:1:114:67 | call to splat_followed_by_keyword_param | -| params_flow.rb:114:1:114:67 | synthetic hash-splat argument | params_flow.rb:108:1:112:3 | synthetic hash-splat parameter | | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | params_flow.rb:114:1:114:67 | synthetic hash-splat argument | | params_flow.rb:114:1:114:67 | synthetic splat argument | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:114:1:114:67 | synthetic splat argument | params_flow.rb:114:1:114:67 | synthetic splat argument | @@ -6111,7 +6057,6 @@ trackEnd | params_flow.rb:163:6:163:10 | synthetic splat argument | params_flow.rb:163:6:163:10 | synthetic splat argument | | params_flow.rb:163:9:163:9 | 0 | params_flow.rb:163:9:163:9 | 0 | | params_flow.rb:164:1:164:40 | call to keywordSideEffect | params_flow.rb:164:1:164:40 | call to keywordSideEffect | -| params_flow.rb:164:1:164:40 | synthetic hash-splat argument | params_flow.rb:153:1:155:3 | synthetic hash-splat parameter | | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | params_flow.rb:164:1:164:40 | synthetic hash-splat argument | | params_flow.rb:164:19:164:20 | :p1 | params_flow.rb:164:19:164:20 | :p1 | | params_flow.rb:164:19:164:24 | Pair | params_flow.rb:164:19:164:24 | Pair | diff --git a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected index 4b079e0ebbb..0484c2f1e27 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -15,17 +15,13 @@ edges | params_flow.rb:25:12:25:13 | p1 | params_flow.rb:26:10:26:11 | p1 | provenance | | | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | params_flow.rb:28:11:28:16 | kwargs [element :p2] | provenance | | | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | params_flow.rb:29:11:29:16 | kwargs [element :p3] | provenance | | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | provenance | | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | provenance | | | params_flow.rb:28:11:28:16 | kwargs [element :p2] | params_flow.rb:28:11:28:21 | ...[...] | provenance | | -| params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | params_flow.rb:28:11:28:21 | ...[...] | provenance | | | params_flow.rb:28:11:28:21 | ...[...] | params_flow.rb:28:10:28:22 | ( ... ) | provenance | | | params_flow.rb:29:11:29:16 | kwargs [element :p3] | params_flow.rb:29:11:29:21 | ...[...] | provenance | | -| params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | params_flow.rb:29:11:29:21 | ...[...] | provenance | | | params_flow.rb:29:11:29:21 | ...[...] | params_flow.rb:29:10:29:22 | ( ... ) | provenance | | | params_flow.rb:33:12:33:19 | call to taint | params_flow.rb:25:12:25:13 | p1 | provenance | | -| params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | provenance | | -| params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | provenance | | +| params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | provenance | | +| params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | provenance | | | params_flow.rb:34:1:34:4 | args [element :p3] | params_flow.rb:35:25:35:28 | args [element :p3] | provenance | | | params_flow.rb:34:8:34:32 | call to [] [element :p3] | params_flow.rb:34:1:34:4 | args [element :p3] | provenance | | | params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:8:34:32 | call to [] [element :p3] | provenance | | @@ -206,16 +202,12 @@ nodes | params_flow.rb:25:12:25:13 | p1 | semmle.label | p1 | | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | semmle.label | **kwargs [element :p2] | | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | semmle.label | **kwargs [element :p3] | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | semmle.label | **kwargs [hash-splat position :p2] | -| params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | semmle.label | **kwargs [hash-splat position :p3] | | params_flow.rb:26:10:26:11 | p1 | semmle.label | p1 | | params_flow.rb:28:10:28:22 | ( ... ) | semmle.label | ( ... ) | | params_flow.rb:28:11:28:16 | kwargs [element :p2] | semmle.label | kwargs [element :p2] | -| params_flow.rb:28:11:28:16 | kwargs [hash-splat position :p2] | semmle.label | kwargs [hash-splat position :p2] | | params_flow.rb:28:11:28:21 | ...[...] | semmle.label | ...[...] | | params_flow.rb:29:10:29:22 | ( ... ) | semmle.label | ( ... ) | | params_flow.rb:29:11:29:16 | kwargs [element :p3] | semmle.label | kwargs [element :p3] | -| params_flow.rb:29:11:29:16 | kwargs [hash-splat position :p3] | semmle.label | kwargs [hash-splat position :p3] | | params_flow.rb:29:11:29:21 | ...[...] | semmle.label | ...[...] | | params_flow.rb:33:12:33:19 | call to taint | semmle.label | call to taint | | params_flow.rb:33:26:33:34 | call to taint | semmle.label | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected index f0199572d78..7b308c6816c 100644 --- a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected @@ -98,56 +98,47 @@ track | type_tracker.rb:27:5:27:11 | call to puts | type tracker without call steps | type_tracker.rb:32:1:32:27 | call to keyword | | type_tracker.rb:27:5:27:11 | synthetic splat argument | type tracker without call steps | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:30:1:30:21 | call to keyword | type tracker without call steps | type_tracker.rb:30:1:30:21 | call to keyword | -| type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | type tracker with call steps | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | type tracker without call steps | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:30:9:30:10 | :p1 | type tracker without call steps | type_tracker.rb:30:9:30:10 | :p1 | | type_tracker.rb:30:9:30:13 | Pair | type tracker without call steps | type_tracker.rb:30:9:30:13 | Pair | | type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | | type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | -| type_tracker.rb:30:13:30:13 | 3 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:30:13:30:13 | 3 | type tracker without call steps | type_tracker.rb:30:13:30:13 | 3 | -| type_tracker.rb:30:13:30:13 | 3 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | +| type_tracker.rb:30:13:30:13 | 3 | type tracker without call steps with content element :p1 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:30:16:30:17 | :p2 | type tracker without call steps | type_tracker.rb:30:16:30:17 | :p2 | | type_tracker.rb:30:16:30:20 | Pair | type tracker without call steps | type_tracker.rb:30:16:30:20 | Pair | | type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | | type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | -| type_tracker.rb:30:20:30:20 | 4 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:30:20:30:20 | 4 | type tracker without call steps | type_tracker.rb:30:20:30:20 | 4 | -| type_tracker.rb:30:20:30:20 | 4 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | +| type_tracker.rb:30:20:30:20 | 4 | type tracker without call steps with content element :p2 | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:31:1:31:21 | call to keyword | type tracker without call steps | type_tracker.rb:31:1:31:21 | call to keyword | -| type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | type tracker with call steps | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | type tracker without call steps | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:31:9:31:10 | :p2 | type tracker without call steps | type_tracker.rb:31:9:31:10 | :p2 | | type_tracker.rb:31:9:31:13 | Pair | type tracker without call steps | type_tracker.rb:31:9:31:13 | Pair | | type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | | type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | -| type_tracker.rb:31:13:31:13 | 5 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:31:13:31:13 | 5 | type tracker without call steps | type_tracker.rb:31:13:31:13 | 5 | -| type_tracker.rb:31:13:31:13 | 5 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | +| type_tracker.rb:31:13:31:13 | 5 | type tracker without call steps with content element :p2 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:31:16:31:17 | :p1 | type tracker without call steps | type_tracker.rb:31:16:31:17 | :p1 | | type_tracker.rb:31:16:31:20 | Pair | type tracker without call steps | type_tracker.rb:31:16:31:20 | Pair | | type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | | type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | -| type_tracker.rb:31:20:31:20 | 6 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:31:20:31:20 | 6 | type tracker without call steps | type_tracker.rb:31:20:31:20 | 6 | -| type_tracker.rb:31:20:31:20 | 6 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | +| type_tracker.rb:31:20:31:20 | 6 | type tracker without call steps with content element :p1 | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:32:1:32:27 | call to keyword | type tracker without call steps | type_tracker.rb:32:1:32:27 | call to keyword | -| type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | type tracker with call steps | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | type tracker without call steps | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:32:9:32:11 | :p2 | type tracker without call steps | type_tracker.rb:32:9:32:11 | :p2 | | type_tracker.rb:32:9:32:16 | Pair | type tracker without call steps | type_tracker.rb:32:9:32:16 | Pair | | type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps | type_tracker.rb:25:18:25:19 | p2 | | type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps with content element 0 | type_tracker.rb:27:5:27:11 | synthetic splat argument | -| type_tracker.rb:32:16:32:16 | 7 | type tracker with call steps with content hash-splat position :p2 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:32:16:32:16 | 7 | type tracker without call steps | type_tracker.rb:32:16:32:16 | 7 | -| type_tracker.rb:32:16:32:16 | 7 | type tracker without call steps with content hash-splat position :p2 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | +| type_tracker.rb:32:16:32:16 | 7 | type tracker without call steps with content element :p2 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:32:19:32:21 | :p1 | type tracker without call steps | type_tracker.rb:32:19:32:21 | :p1 | | type_tracker.rb:32:19:32:26 | Pair | type tracker without call steps | type_tracker.rb:32:19:32:26 | Pair | | type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps | type_tracker.rb:25:13:25:14 | p1 | | type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps with content element 0 | type_tracker.rb:26:5:26:11 | synthetic splat argument | -| type_tracker.rb:32:26:32:26 | 8 | type tracker with call steps with content hash-splat position :p1 | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:32:26:32:26 | 8 | type tracker without call steps | type_tracker.rb:32:26:32:26 | 8 | -| type_tracker.rb:32:26:32:26 | 8 | type tracker without call steps with content hash-splat position :p1 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | +| type_tracker.rb:32:26:32:26 | 8 | type tracker without call steps with content element :p1 | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:34:1:53:3 | &block | type tracker without call steps | type_tracker.rb:34:1:53:3 | &block | | type_tracker.rb:34:1:53:3 | self in throughArray | type tracker without call steps | type_tracker.rb:34:1:53:3 | self in throughArray | | type_tracker.rb:34:1:53:3 | synthetic splat parameter | type tracker without call steps | type_tracker.rb:34:1:53:3 | synthetic splat parameter | @@ -484,7 +475,6 @@ trackEnd | type_tracker.rb:27:5:27:11 | call to puts | type_tracker.rb:32:1:32:27 | call to keyword | | type_tracker.rb:27:5:27:11 | synthetic splat argument | type_tracker.rb:27:5:27:11 | synthetic splat argument | | type_tracker.rb:30:1:30:21 | call to keyword | type_tracker.rb:30:1:30:21 | call to keyword | -| type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | type_tracker.rb:30:1:30:21 | synthetic hash-splat argument | | type_tracker.rb:30:9:30:10 | :p1 | type_tracker.rb:30:9:30:10 | :p1 | | type_tracker.rb:30:9:30:13 | Pair | type_tracker.rb:30:9:30:13 | Pair | @@ -499,7 +489,6 @@ trackEnd | type_tracker.rb:30:20:30:20 | 4 | type_tracker.rb:27:10:27:11 | p2 | | type_tracker.rb:30:20:30:20 | 4 | type_tracker.rb:30:20:30:20 | 4 | | type_tracker.rb:31:1:31:21 | call to keyword | type_tracker.rb:31:1:31:21 | call to keyword | -| type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | type_tracker.rb:31:1:31:21 | synthetic hash-splat argument | | type_tracker.rb:31:9:31:10 | :p2 | type_tracker.rb:31:9:31:10 | :p2 | | type_tracker.rb:31:9:31:13 | Pair | type_tracker.rb:31:9:31:13 | Pair | @@ -514,7 +503,6 @@ trackEnd | type_tracker.rb:31:20:31:20 | 6 | type_tracker.rb:26:10:26:11 | p1 | | type_tracker.rb:31:20:31:20 | 6 | type_tracker.rb:31:20:31:20 | 6 | | type_tracker.rb:32:1:32:27 | call to keyword | type_tracker.rb:32:1:32:27 | call to keyword | -| type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | type_tracker.rb:25:1:28:3 | synthetic hash-splat parameter | | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | type_tracker.rb:32:1:32:27 | synthetic hash-splat argument | | type_tracker.rb:32:9:32:11 | :p2 | type_tracker.rb:32:9:32:11 | :p2 | | type_tracker.rb:32:9:32:16 | Pair | type_tracker.rb:32:9:32:16 | Pair | From c4b0f818837ed81bbbd87760f2a0e2ac21f1a655 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 20 Aug 2024 14:19:29 +0200 Subject: [PATCH 073/334] Ruby: Prevent positional matching when preceded by a splat --- .../dataflow/internal/DataFlowPrivate.qll | 21 +- .../dataflow/params/TypeTracker.expected | 195 ------------------ .../dataflow/params/params-flow.expected | 30 --- .../dataflow/params/params_flow.rb | 12 +- 4 files changed, 22 insertions(+), 236 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 620a9fb5cab..1cfb3b0f395 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -195,7 +195,9 @@ private class Argument extends CfgNodes::ExprCfgNode { not this.getExpr().(Pair).getKey().getConstantValue().isSymbol(_) and not this.getExpr() instanceof HashSplatExpr and not this.getExpr() instanceof SplatExpr and - arg.isPositional(i) + arg.isPositional(i) and + // There are no splat arguments before the positional argument + not splatArgumentAt(call, any(int j | j < i)) ) or exists(CfgNodes::ExprNodes::PairCfgNode p | @@ -217,7 +219,9 @@ private class Argument extends CfgNodes::ExprCfgNode { exists(int pos | this = call.getArgument(pos) and this.getExpr() instanceof SplatExpr and - arg.isSplat(pos) + arg.isSplat(pos) and + // There are no earlier splat arguments + not splatArgumentAt(call, any(int j | j < pos)) ) or this = call.getAnArgument() and @@ -432,7 +436,7 @@ private predicate splatParameterAt(Callable c, int pos) { } private predicate splatArgumentAt(CfgNodes::ExprNodes::CallCfgNode c, int pos) { - exists(Argument arg, ArgumentPosition apos | arg.isArgumentOf(c, apos) and apos.isSplat(pos)) + c.getArgument(pos).getExpr() instanceof SplatExpr } /** A collection of cached types and predicates to be evaluated in the same stage. */ @@ -920,7 +924,12 @@ private module ParameterNodes { override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { exists(Callable callable | callable = c.asCfgScope() | - exists(int i | pos.isPositional(i) and callable.getParameter(i) = parameter | + exists(int i | + pos.isPositional(i) and + callable.getParameter(i) = parameter and + // There are no splat parameters before the positional parameter + not splatParameterAt(callable, any(int m | m < i)) + | parameter instanceof SimpleParameter or parameter instanceof OptionalParameter @@ -939,7 +948,9 @@ private module ParameterNodes { parameter = callable.getParameter(n).(SplatParameter) and pos.isSplat(n) and // There are no positional parameters after the splat - not exists(SimpleParameter p, int m | m > n | p = callable.getParameter(m)) + not exists(SimpleParameter p, int m | m > n | p = callable.getParameter(m)) and + // There are no earlier splat parameters + not splatParameterAt(callable, any(int m | m < n)) ) or parameter = callable.getAParameter().(BlockParameter) and diff --git a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected index 25e4a33a46b..4ebb2d50537 100644 --- a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected @@ -36,8 +36,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:65:10:65:13 | ...[...] | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:69:14:69:14 | x | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:69:27:69:27 | r | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:83:14:83:14 | t | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:83:17:83:17 | u | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:83:20:83:20 | v | @@ -45,7 +43,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:83:26:83:26 | x | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:83:29:83:29 | y | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:98:31:98:31 | b | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:108:37:108:37 | a | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:108:44:108:44 | c | | params_flow.rb:1:11:1:11 | x | type tracker with call steps | params_flow.rb:110:10:110:13 | ...[...] | @@ -74,8 +71,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:84:5:84:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | @@ -85,7 +80,6 @@ track | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | -| params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:108:1:112:3 | synthetic splat parameter | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:108:40:108:41 | *b | | params_flow.rb:1:11:1:11 | x | type tracker with call steps with content element 0 | params_flow.rb:109:5:109:10 | synthetic splat argument | @@ -1475,37 +1469,21 @@ track | params_flow.rb:78:38:78:39 | 29 | type tracker without call steps | params_flow.rb:78:38:78:39 | 29 | | params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content element 0 | params_flow.rb:78:32:78:40 | synthetic splat argument | | params_flow.rb:78:38:78:39 | 29 | type tracker without call steps with content element 2 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:78:43:78:51 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:43:78:51 | call to taint | type tracker without call steps | params_flow.rb:78:43:78:51 | call to taint | | params_flow.rb:78:43:78:51 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:43:78:51 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:43:78:51 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps | params_flow.rb:78:43:78:51 | call to taint | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps | params_flow.rb:78:49:78:50 | 30 | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content element 0 | params_flow.rb:78:43:78:51 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | type tracker without call steps with content element 3 | params_flow.rb:78:1:78:63 | synthetic splat argument | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:78:54:78:62 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:54:78:62 | call to taint | type tracker without call steps | params_flow.rb:78:54:78:62 | call to taint | | params_flow.rb:78:54:78:62 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:78:1:78:63 | synthetic splat argument | | params_flow.rb:78:54:78:62 | synthetic splat argument | type tracker without call steps | params_flow.rb:78:54:78:62 | synthetic splat argument | | params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:78:60:78:61 | 31 | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:78:60:78:61 | 31 | type tracker without call steps | params_flow.rb:78:54:78:62 | call to taint | | params_flow.rb:78:60:78:61 | 31 | type tracker without call steps | params_flow.rb:78:60:78:61 | 31 | @@ -1841,17 +1819,9 @@ track | params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content element 0 | params_flow.rb:94:21:94:29 | synthetic splat argument | | params_flow.rb:94:27:94:28 | 39 | type tracker without call steps with content element 1 | params_flow.rb:94:1:94:48 | synthetic splat argument | | params_flow.rb:94:32:94:36 | * ... | type tracker without call steps | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:39:94:47 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:94:39:94:47 | call to taint | type tracker without call steps | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:39:94:47 | synthetic splat argument | type tracker without call steps | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:94:45:94:46 | 44 | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps | params_flow.rb:94:45:94:46 | 44 | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps with content element 0 | params_flow.rb:94:39:94:47 | synthetic splat argument | @@ -1953,31 +1923,15 @@ track | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:68:96:76 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:96:68:96:76 | call to taint | type tracker without call steps | params_flow.rb:96:68:96:76 | call to taint | | params_flow.rb:96:68:96:76 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:68:96:76 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:74:96:75 | 50 | type tracker with call steps with content element 0 | params_flow.rb:74:5:74:10 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | type tracker without call steps | params_flow.rb:96:68:96:76 | call to taint | | params_flow.rb:96:74:96:75 | 50 | type tracker without call steps | params_flow.rb:96:74:96:75 | 50 | | params_flow.rb:96:74:96:75 | 50 | type tracker without call steps with content element 0 | params_flow.rb:96:68:96:76 | synthetic splat argument | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:79:96:87 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:96:79:96:87 | call to taint | type tracker without call steps | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:96:79:96:87 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:79:96:87 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:85:96:86 | 51 | type tracker with call steps with content element 0 | params_flow.rb:75:5:75:10 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | type tracker without call steps | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:96:85:96:86 | 51 | type tracker without call steps | params_flow.rb:96:85:96:86 | 51 | | params_flow.rb:96:85:96:86 | 51 | type tracker without call steps with content element 0 | params_flow.rb:96:79:96:87 | synthetic splat argument | @@ -2117,19 +2071,11 @@ track | params_flow.rb:106:32:106:33 | 56 | type tracker without call steps | params_flow.rb:106:32:106:33 | 56 | | params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content element 0 | params_flow.rb:106:26:106:34 | synthetic splat argument | | params_flow.rb:106:32:106:33 | 56 | type tracker without call steps with content element 1 | params_flow.rb:106:1:106:46 | synthetic splat argument | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:106:37:106:45 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:37:106:45 | call to taint | type tracker without call steps | params_flow.rb:106:37:106:45 | call to taint | | params_flow.rb:106:37:106:45 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:106:1:106:46 | synthetic splat argument | | params_flow.rb:106:37:106:45 | synthetic splat argument | type tracker without call steps | params_flow.rb:106:37:106:45 | synthetic splat argument | | params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 0 | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:106:43:106:44 | 57 | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:106:43:106:44 | 57 | type tracker without call steps | params_flow.rb:106:37:106:45 | call to taint | | params_flow.rb:106:43:106:44 | 57 | type tracker without call steps | params_flow.rb:106:43:106:44 | 57 | @@ -2448,39 +2394,15 @@ track | params_flow.rb:131:1:131:46 | call to pos_many | type tracker without call steps | params_flow.rb:131:1:131:46 | call to pos_many | | params_flow.rb:131:10:131:14 | * ... | type tracker with call steps | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:131:10:131:14 | * ... | type tracker without call steps | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:17:131:25 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:131:17:131:25 | call to taint | type tracker without call steps | params_flow.rb:131:17:131:25 | call to taint | | params_flow.rb:131:17:131:25 | synthetic splat argument | type tracker without call steps | params_flow.rb:131:17:131:25 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:23:131:24 | 68 | type tracker with call steps with content element 0 | params_flow.rb:85:5:85:10 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | type tracker without call steps | params_flow.rb:131:17:131:25 | call to taint | | params_flow.rb:131:23:131:24 | 68 | type tracker without call steps | params_flow.rb:131:23:131:24 | 68 | | params_flow.rb:131:23:131:24 | 68 | type tracker without call steps with content element 0 | params_flow.rb:131:17:131:25 | synthetic splat argument | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:28:131:30 | nil | type tracker with call steps with content element 0 | params_flow.rb:86:5:86:10 | synthetic splat argument | | params_flow.rb:131:28:131:30 | nil | type tracker without call steps | params_flow.rb:131:28:131:30 | nil | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:33:131:35 | nil | type tracker with call steps with content element 0 | params_flow.rb:87:5:87:10 | synthetic splat argument | | params_flow.rb:131:33:131:35 | nil | type tracker without call steps | params_flow.rb:131:33:131:35 | nil | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:38:131:40 | nil | type tracker with call steps with content element 0 | params_flow.rb:88:5:88:10 | synthetic splat argument | | params_flow.rb:131:38:131:40 | nil | type tracker without call steps | params_flow.rb:131:38:131:40 | nil | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:131:43:131:45 | nil | type tracker with call steps with content element 0 | params_flow.rb:89:5:89:10 | synthetic splat argument | | params_flow.rb:131:43:131:45 | nil | type tracker without call steps | params_flow.rb:131:43:131:45 | nil | | params_flow.rb:133:1:135:3 | &block | type tracker without call steps | params_flow.rb:133:1:135:3 | &block | | params_flow.rb:133:1:135:3 | self in splatall | type tracker with call steps | params_flow.rb:5:1:7:3 | self in sink | @@ -3482,14 +3404,8 @@ trackEnd | params_flow.rb:1:11:1:11 | x | params_flow.rb:69:14:69:14 | x | | params_flow.rb:1:11:1:11 | x | params_flow.rb:69:17:69:17 | y | | params_flow.rb:1:11:1:11 | x | params_flow.rb:69:17:69:17 | y | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:69:27:69:27 | r | | params_flow.rb:1:11:1:11 | x | params_flow.rb:70:10:70:10 | x | | params_flow.rb:1:11:1:11 | x | params_flow.rb:71:10:71:10 | y | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:74:10:74:10 | w | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:75:10:75:10 | r | | params_flow.rb:1:11:1:11 | x | params_flow.rb:78:10:78:18 | call to taint | | params_flow.rb:1:11:1:11 | x | params_flow.rb:78:21:78:29 | call to taint | | params_flow.rb:1:11:1:11 | x | params_flow.rb:78:32:78:40 | call to taint | @@ -3535,10 +3451,7 @@ trackEnd | params_flow.rb:1:11:1:11 | x | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:1:11:1:11 | x | params_flow.rb:98:19:98:19 | a | | params_flow.rb:1:11:1:11 | x | params_flow.rb:98:19:98:19 | a | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:98:31:98:31 | b | | params_flow.rb:1:11:1:11 | x | params_flow.rb:99:10:99:10 | a | -| params_flow.rb:1:11:1:11 | x | params_flow.rb:102:10:102:10 | b | | params_flow.rb:1:11:1:11 | x | params_flow.rb:105:15:105:23 | call to taint | | params_flow.rb:1:11:1:11 | x | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:1:11:1:11 | x | params_flow.rb:105:39:105:47 | call to taint | @@ -4783,42 +4696,18 @@ trackEnd | params_flow.rb:78:38:78:39 | 29 | params_flow.rb:2:5:2:5 | x | | params_flow.rb:78:38:78:39 | 29 | params_flow.rb:78:32:78:40 | call to taint | | params_flow.rb:78:38:78:39 | 29 | params_flow.rb:78:38:78:39 | 29 | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:74:10:74:10 | w | | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:78:43:78:51 | call to taint | | params_flow.rb:78:43:78:51 | synthetic splat argument | params_flow.rb:78:43:78:51 | synthetic splat argument | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:78:49:78:50 | 30 | params_flow.rb:74:10:74:10 | w | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:78:43:78:51 | call to taint | | params_flow.rb:78:49:78:50 | 30 | params_flow.rb:78:49:78:50 | 30 | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:75:10:75:10 | r | | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:78:54:78:62 | call to taint | | params_flow.rb:78:54:78:62 | synthetic splat argument | params_flow.rb:78:54:78:62 | synthetic splat argument | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:78:60:78:61 | 31 | params_flow.rb:75:10:75:10 | r | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:78:54:78:62 | call to taint | | params_flow.rb:78:60:78:61 | 31 | params_flow.rb:78:60:78:61 | 31 | | params_flow.rb:80:1:80:4 | args | params_flow.rb:80:1:80:4 | args | @@ -5135,23 +5024,11 @@ trackEnd | params_flow.rb:94:27:94:28 | 39 | params_flow.rb:94:21:94:29 | call to taint | | params_flow.rb:94:27:94:28 | 39 | params_flow.rb:94:27:94:28 | 39 | | params_flow.rb:94:32:94:36 | * ... | params_flow.rb:94:32:94:36 | * ... | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:87:10:87:10 | w | | params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:39:94:47 | synthetic splat argument | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:94:45:94:46 | 44 | params_flow.rb:87:10:87:10 | w | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:94:45:94:46 | 44 | | params_flow.rb:96:1:96:88 | call to splatmid | params_flow.rb:96:1:96:88 | call to splatmid | @@ -5221,42 +5098,18 @@ trackEnd | params_flow.rb:96:62:96:63 | 49 | params_flow.rb:2:5:2:5 | x | | params_flow.rb:96:62:96:63 | 49 | params_flow.rb:96:56:96:64 | call to taint | | params_flow.rb:96:62:96:63 | 49 | params_flow.rb:96:62:96:63 | 49 | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:74:10:74:10 | w | | params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:96:68:96:76 | call to taint | | params_flow.rb:96:68:96:76 | synthetic splat argument | params_flow.rb:96:68:96:76 | synthetic splat argument | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:69:24:69:24 | w | -| params_flow.rb:96:74:96:75 | 50 | params_flow.rb:74:10:74:10 | w | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:96:68:96:76 | call to taint | | params_flow.rb:96:74:96:75 | 50 | params_flow.rb:96:74:96:75 | 50 | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:75:10:75:10 | r | | params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:96:79:96:87 | synthetic splat argument | params_flow.rb:96:79:96:87 | synthetic splat argument | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:69:27:69:27 | r | -| params_flow.rb:96:85:96:86 | 51 | params_flow.rb:75:10:75:10 | r | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:96:79:96:87 | call to taint | | params_flow.rb:96:85:96:86 | 51 | params_flow.rb:96:85:96:86 | 51 | | params_flow.rb:98:1:103:3 | &block | params_flow.rb:98:1:103:3 | &block | @@ -5382,23 +5235,11 @@ trackEnd | params_flow.rb:106:32:106:33 | 56 | params_flow.rb:2:5:2:5 | x | | params_flow.rb:106:32:106:33 | 56 | params_flow.rb:106:26:106:34 | call to taint | | params_flow.rb:106:32:106:33 | 56 | params_flow.rb:106:32:106:33 | 56 | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:102:10:102:10 | b | | params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:106:37:106:45 | call to taint | | params_flow.rb:106:37:106:45 | synthetic splat argument | params_flow.rb:106:37:106:45 | synthetic splat argument | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:98:31:98:31 | b | -| params_flow.rb:106:43:106:44 | 57 | params_flow.rb:102:10:102:10 | b | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:106:37:106:45 | call to taint | | params_flow.rb:106:43:106:44 | 57 | params_flow.rb:106:43:106:44 | 57 | | params_flow.rb:108:1:112:3 | &block | params_flow.rb:108:1:112:3 | &block | @@ -5724,52 +5565,16 @@ trackEnd | params_flow.rb:131:1:131:46 | call to pos_many | params_flow.rb:131:1:131:46 | call to pos_many | | params_flow.rb:131:10:131:14 | * ... | params_flow.rb:83:1:91:3 | synthetic splat parameter | | params_flow.rb:131:10:131:14 | * ... | params_flow.rb:131:10:131:14 | * ... | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:85:10:85:10 | u | | params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:131:17:131:25 | call to taint | | params_flow.rb:131:17:131:25 | synthetic splat argument | params_flow.rb:131:17:131:25 | synthetic splat argument | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:1:11:1:11 | x | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:2:5:2:5 | x | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:83:17:83:17 | u | -| params_flow.rb:131:23:131:24 | 68 | params_flow.rb:85:10:85:10 | u | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:131:17:131:25 | call to taint | | params_flow.rb:131:23:131:24 | 68 | params_flow.rb:131:23:131:24 | 68 | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:83:20:83:20 | v | -| params_flow.rb:131:28:131:30 | nil | params_flow.rb:86:10:86:10 | v | | params_flow.rb:131:28:131:30 | nil | params_flow.rb:131:28:131:30 | nil | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:83:23:83:23 | w | -| params_flow.rb:131:33:131:35 | nil | params_flow.rb:87:10:87:10 | w | | params_flow.rb:131:33:131:35 | nil | params_flow.rb:131:33:131:35 | nil | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:83:26:83:26 | x | -| params_flow.rb:131:38:131:40 | nil | params_flow.rb:88:10:88:10 | x | | params_flow.rb:131:38:131:40 | nil | params_flow.rb:131:38:131:40 | nil | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:5:10:5:10 | x | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:6:10:6:10 | x | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:83:29:83:29 | y | -| params_flow.rb:131:43:131:45 | nil | params_flow.rb:89:10:89:10 | y | | params_flow.rb:131:43:131:45 | nil | params_flow.rb:131:43:131:45 | nil | | params_flow.rb:133:1:135:3 | &block | params_flow.rb:133:1:135:3 | &block | | params_flow.rb:133:1:135:3 | self in splatall | params_flow.rb:5:1:7:3 | self (sink) | diff --git a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected index 0484c2f1e27..f665080a329 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -90,12 +90,8 @@ edges | params_flow.rb:67:13:67:16 | args | params_flow.rb:67:12:67:16 | * ... [element 0] | provenance | | | params_flow.rb:69:14:69:14 | x | params_flow.rb:70:10:70:10 | x | provenance | | | params_flow.rb:69:17:69:17 | y | params_flow.rb:71:10:71:10 | y | provenance | | -| params_flow.rb:69:24:69:24 | w | params_flow.rb:74:10:74:10 | w | provenance | | -| params_flow.rb:69:27:69:27 | r | params_flow.rb:75:10:75:10 | r | provenance | | | params_flow.rb:78:10:78:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | | params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:69:17:69:17 | y | provenance | | -| params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | provenance | | -| params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | provenance | | | params_flow.rb:80:1:80:4 | args [element 0] | params_flow.rb:81:22:81:25 | args [element 0] | provenance | | | params_flow.rb:80:8:80:51 | call to [] [element 0] | params_flow.rb:80:1:80:4 | args [element 0] | provenance | | | params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:8:80:51 | call to [] [element 0] | provenance | | @@ -130,16 +126,11 @@ edges | params_flow.rb:94:33:94:36 | args [element 1] | params_flow.rb:94:32:94:36 | * ... [element 1] | provenance | | | params_flow.rb:94:33:94:36 | args [element 2] | params_flow.rb:94:32:94:36 | * ... [element 2] | provenance | | | params_flow.rb:94:33:94:36 | args [element 3] | params_flow.rb:94:32:94:36 | * ... [element 3] | provenance | | -| params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:83:23:83:23 | w | provenance | | | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | | params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:69:17:69:17 | y | provenance | | -| params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:69:24:69:24 | w | provenance | | -| params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:69:27:69:27 | r | provenance | | | params_flow.rb:98:19:98:19 | a | params_flow.rb:99:10:99:10 | a | provenance | | -| params_flow.rb:98:31:98:31 | b | params_flow.rb:102:10:102:10 | b | provenance | | | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:98:19:98:19 | a | provenance | | | params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:98:19:98:19 | a | provenance | | -| params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:98:31:98:31 | b | provenance | | | params_flow.rb:108:37:108:37 | a | params_flow.rb:109:10:109:10 | a | provenance | | | params_flow.rb:108:40:108:41 | *b [element 0] | params_flow.rb:110:10:110:10 | b [element 0] | provenance | | | params_flow.rb:108:44:108:44 | c | params_flow.rb:111:10:111:10 | c | provenance | | @@ -162,7 +153,6 @@ edges | params_flow.rb:131:10:131:14 | * ... [element 1] | params_flow.rb:83:17:83:17 | u | provenance | | | params_flow.rb:131:11:131:14 | args [element 0] | params_flow.rb:131:10:131:14 | * ... [element 0] | provenance | | | params_flow.rb:131:11:131:14 | args [element 1] | params_flow.rb:131:10:131:14 | * ... [element 1] | provenance | | -| params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:83:17:83:17 | u | provenance | | | params_flow.rb:133:14:133:18 | *args [element 1] | params_flow.rb:134:10:134:13 | args [element 1] | provenance | | | params_flow.rb:134:10:134:13 | args [element 1] | params_flow.rb:134:10:134:16 | ...[...] | provenance | | | params_flow.rb:137:10:137:43 | * ... [element 1] | params_flow.rb:133:14:133:18 | *args [element 1] | provenance | | @@ -283,16 +273,10 @@ nodes | params_flow.rb:67:13:67:16 | args | semmle.label | args | | params_flow.rb:69:14:69:14 | x | semmle.label | x | | params_flow.rb:69:17:69:17 | y | semmle.label | y | -| params_flow.rb:69:24:69:24 | w | semmle.label | w | -| params_flow.rb:69:27:69:27 | r | semmle.label | r | | params_flow.rb:70:10:70:10 | x | semmle.label | x | | params_flow.rb:71:10:71:10 | y | semmle.label | y | -| params_flow.rb:74:10:74:10 | w | semmle.label | w | -| params_flow.rb:75:10:75:10 | r | semmle.label | r | | params_flow.rb:78:10:78:18 | call to taint | semmle.label | call to taint | | params_flow.rb:78:21:78:29 | call to taint | semmle.label | call to taint | -| params_flow.rb:78:43:78:51 | call to taint | semmle.label | call to taint | -| params_flow.rb:78:54:78:62 | call to taint | semmle.label | call to taint | | params_flow.rb:80:1:80:4 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:80:8:80:51 | call to [] [element 0] | semmle.label | call to [] [element 0] | | params_flow.rb:80:9:80:17 | call to taint | semmle.label | call to taint | @@ -333,18 +317,12 @@ nodes | params_flow.rb:94:33:94:36 | args [element 1] | semmle.label | args [element 1] | | params_flow.rb:94:33:94:36 | args [element 2] | semmle.label | args [element 2] | | params_flow.rb:94:33:94:36 | args [element 3] | semmle.label | args [element 3] | -| params_flow.rb:94:39:94:47 | call to taint | semmle.label | call to taint | | params_flow.rb:96:10:96:18 | call to taint | semmle.label | call to taint | | params_flow.rb:96:21:96:29 | call to taint | semmle.label | call to taint | -| params_flow.rb:96:68:96:76 | call to taint | semmle.label | call to taint | -| params_flow.rb:96:79:96:87 | call to taint | semmle.label | call to taint | | params_flow.rb:98:19:98:19 | a | semmle.label | a | -| params_flow.rb:98:31:98:31 | b | semmle.label | b | | params_flow.rb:99:10:99:10 | a | semmle.label | a | -| params_flow.rb:102:10:102:10 | b | semmle.label | b | | params_flow.rb:105:15:105:23 | call to taint | semmle.label | call to taint | | params_flow.rb:106:15:106:23 | call to taint | semmle.label | call to taint | -| params_flow.rb:106:37:106:45 | call to taint | semmle.label | call to taint | | params_flow.rb:108:37:108:37 | a | semmle.label | a | | params_flow.rb:108:40:108:41 | *b [element 0] | semmle.label | *b [element 0] | | params_flow.rb:108:44:108:44 | c | semmle.label | c | @@ -369,7 +347,6 @@ nodes | params_flow.rb:131:10:131:14 | * ... [element 1] | semmle.label | * ... [element 1] | | params_flow.rb:131:11:131:14 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:131:11:131:14 | args [element 1] | semmle.label | args [element 1] | -| params_flow.rb:131:17:131:25 | call to taint | semmle.label | call to taint | | params_flow.rb:133:14:133:18 | *args [element 1] | semmle.label | *args [element 1] | | params_flow.rb:134:10:134:13 | args [element 1] | semmle.label | args [element 1] | | params_flow.rb:134:10:134:16 | ...[...] | semmle.label | ...[...] | @@ -433,23 +410,16 @@ testFailures | params_flow.rb:71:10:71:10 | y | params_flow.rb:78:21:78:29 | call to taint | params_flow.rb:71:10:71:10 | y | $@ | params_flow.rb:78:21:78:29 | call to taint | call to taint | | params_flow.rb:71:10:71:10 | y | params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:71:10:71:10 | y | $@ | params_flow.rb:80:9:80:17 | call to taint | call to taint | | params_flow.rb:71:10:71:10 | y | params_flow.rb:96:21:96:29 | call to taint | params_flow.rb:71:10:71:10 | y | $@ | params_flow.rb:96:21:96:29 | call to taint | call to taint | -| params_flow.rb:74:10:74:10 | w | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:74:10:74:10 | w | $@ | params_flow.rb:78:43:78:51 | call to taint | call to taint | -| params_flow.rb:74:10:74:10 | w | params_flow.rb:96:68:96:76 | call to taint | params_flow.rb:74:10:74:10 | w | $@ | params_flow.rb:96:68:96:76 | call to taint | call to taint | -| params_flow.rb:75:10:75:10 | r | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:75:10:75:10 | r | $@ | params_flow.rb:78:54:78:62 | call to taint | call to taint | -| params_flow.rb:75:10:75:10 | r | params_flow.rb:96:79:96:87 | call to taint | params_flow.rb:75:10:75:10 | r | $@ | params_flow.rb:96:79:96:87 | call to taint | call to taint | | params_flow.rb:84:10:84:10 | t | params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:84:10:84:10 | t | $@ | params_flow.rb:94:10:94:18 | call to taint | call to taint | | params_flow.rb:84:10:84:10 | t | params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:84:10:84:10 | t | $@ | params_flow.rb:130:9:130:17 | call to taint | call to taint | | params_flow.rb:85:10:85:10 | u | params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:85:10:85:10 | u | $@ | params_flow.rb:94:21:94:29 | call to taint | call to taint | | params_flow.rb:85:10:85:10 | u | params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:85:10:85:10 | u | $@ | params_flow.rb:130:20:130:28 | call to taint | call to taint | -| params_flow.rb:85:10:85:10 | u | params_flow.rb:131:17:131:25 | call to taint | params_flow.rb:85:10:85:10 | u | $@ | params_flow.rb:131:17:131:25 | call to taint | call to taint | | params_flow.rb:86:10:86:10 | v | params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:86:10:86:10 | v | $@ | params_flow.rb:93:9:93:17 | call to taint | call to taint | | params_flow.rb:87:10:87:10 | w | params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:87:10:87:10 | w | $@ | params_flow.rb:93:20:93:28 | call to taint | call to taint | -| params_flow.rb:87:10:87:10 | w | params_flow.rb:94:39:94:47 | call to taint | params_flow.rb:87:10:87:10 | w | $@ | params_flow.rb:94:39:94:47 | call to taint | call to taint | | params_flow.rb:88:10:88:10 | x | params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:88:10:88:10 | x | $@ | params_flow.rb:93:31:93:39 | call to taint | call to taint | | params_flow.rb:89:10:89:10 | y | params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:89:10:89:10 | y | $@ | params_flow.rb:93:42:93:50 | call to taint | call to taint | | params_flow.rb:99:10:99:10 | a | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:99:10:99:10 | a | $@ | params_flow.rb:105:15:105:23 | call to taint | call to taint | | params_flow.rb:99:10:99:10 | a | params_flow.rb:106:15:106:23 | call to taint | params_flow.rb:99:10:99:10 | a | $@ | params_flow.rb:106:15:106:23 | call to taint | call to taint | -| params_flow.rb:102:10:102:10 | b | params_flow.rb:106:37:106:45 | call to taint | params_flow.rb:102:10:102:10 | b | $@ | params_flow.rb:106:37:106:45 | call to taint | call to taint | | params_flow.rb:109:10:109:10 | a | params_flow.rb:114:33:114:41 | call to taint | params_flow.rb:109:10:109:10 | a | $@ | params_flow.rb:114:33:114:41 | call to taint | call to taint | | params_flow.rb:110:10:110:13 | ...[...] | params_flow.rb:114:44:114:52 | call to taint | params_flow.rb:110:10:110:13 | ...[...] | $@ | params_flow.rb:114:44:114:52 | call to taint | call to taint | | params_flow.rb:111:10:111:10 | c | params_flow.rb:114:58:114:66 | call to taint | params_flow.rb:111:10:111:10 | c | $@ | params_flow.rb:114:58:114:66 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/params/params_flow.rb b/ruby/ql/test/library-tests/dataflow/params/params_flow.rb index 34599eb35a9..65b663a7c4e 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/params/params_flow.rb @@ -69,10 +69,10 @@ splatstuff(*args) def splatmid(x, y, *z, w, r) sink x # $ hasValueFlow=27 $ hasValueFlow=32 $ hasValueFlow=45 sink y # $ hasValueFlow=28 $ hasValueFlow=46 $ hasValueFlow=33 - sink z[0] # MISSING: $ hasValueFlow=47 $ hasValueFlow=29 $ hasValueFlow=34 + sink z[0] # $ MISSING: hasValueFlow=47 $ hasValueFlow=29 $ hasValueFlow=34 sink z[1] # $ MISSING: hasValueFlow=48 $ hasValueFlow=35 - sink w # $ hasValueFlow=30 $ hasValueFlow=50 $ MISSING: hasValueFlow=36 - sink r # $ hasValueFlow=31 $ hasValueFlow=51 $ MISSING: hasValueFlow=37 + sink w # $ MISSING: hasValueFlow=30 $ hasValueFlow=50 $ hasValueFlow=36 + sink r # $ MISSING: hasValueFlow=31 $ hasValueFlow=51 $ hasValueFlow=37 end splatmid(taint(27), taint(28), taint(29), taint(30), taint(31)) @@ -82,9 +82,9 @@ splatmid(taint(32), *args, taint(37)) def pos_many(t, u, v, w, x, y, z) sink t # $ hasValueFlow=38 $ hasValueFlow=66 - sink u # $ hasValueFlow=39 $ hasValueFlow=67 $ SPURIOUS: hasValueFlow=68 + sink u # $ hasValueFlow=39 $ hasValueFlow=67 sink v # $ hasValueFlow=40 - sink w # $ hasValueFlow=41 $ SPURIOUS: hasValueFlow=44 + sink w # $ hasValueFlow=41 sink x # $ hasValueFlow=42 sink y # $ hasValueFlow=43 sink z # $ MISSING: hasValueFlow=44 @@ -99,7 +99,7 @@ def splatmidsmall(a, *splats, b) sink a # $ hasValueFlow=52 $ hasValueFlow=55 sink splats[0] # $ MISSING: hasValueFlow=53 sink splats[1] - sink b # $ hasValueFlow=57 $ MISSING: hasValueFlow=54 + sink b # $ MISSING: hasValueFlow=57 $ hasValueFlow=54 end splatmidsmall(taint(52), *[taint(53), taint(54)]) From d15e1b5598841c7d710abc67a3c170076b3869bc Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 20 Aug 2024 15:05:49 +0200 Subject: [PATCH 074/334] Ruby: Prevent synthetic splat matching for actual splats at same positions --- .../dataflow/internal/DataFlowDispatch.qll | 81 ++++++++++--------- .../dataflow/internal/DataFlowPrivate.qll | 22 ++--- .../dataflow/params/TypeTracker.expected | 34 -------- 3 files changed, 53 insertions(+), 84 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index 97c0e24fa5b..268c289259e 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -563,7 +563,11 @@ private module Cached { THashSplatArgumentPosition() or TSynthHashSplatArgumentPosition() or TSplatArgumentPosition(int pos) { exists(Call c | c.getArgument(pos) instanceof SplatExpr) } or - TSynthSplatArgumentPosition(Boolean hasActualSplat) or + TSynthSplatArgumentPosition(int actualSplatPos) { + actualSplatPos = -1 // represents no actual splat + or + exists(Call c | c.getArgument(actualSplatPos) instanceof SplatExpr) + } or TAnyArgumentPosition() or TAnyKeywordArgumentPosition() @@ -594,7 +598,11 @@ private module Cached { or exists(Parameter p | p.getPosition() = pos and p instanceof SplatParameter) } or - TSynthSplatParameterPosition(Boolean hasActualSplat) or + TSynthSplatParameterPosition(int actualSplatPos) { + actualSplatPos = -1 // represents no actual splat + or + exists(Callable c | c.getParameter(actualSplatPos) instanceof SplatParameter) + } or TAnyParameterPosition() or TAnyKeywordParameterPosition() } @@ -1386,12 +1394,11 @@ class ParameterPosition extends TParameterPosition { /** * Holds if this position represents a synthetic splat parameter. * - * `hasActualSplat` indicates whether the method that the parameter belongs - * to also has an actual splat parameter. + * `actualSplatPos` indicates the position of the (unique) actual splat + * parameter belonging to the same method, with `-1` representing no actual + * splat parameter. */ - predicate isSynthSplat(boolean hasActualSplat) { - this = TSynthSplatParameterPosition(hasActualSplat) - } + predicate isSynthSplat(int actualSplatPos) { this = TSynthSplatParameterPosition(actualSplatPos) } /** * Holds if this position represents any parameter, except `self` parameters. This @@ -1426,10 +1433,10 @@ class ParameterPosition extends TParameterPosition { or exists(int pos | this.isSplat(pos) and result = "* (position " + pos + ")") or - exists(boolean hasActualSplat, string suffix | - this.isSynthSplat(hasActualSplat) and + exists(int actualSplatPos, string suffix | + this.isSynthSplat(actualSplatPos) and result = "synthetic *" + suffix and - if hasActualSplat = true then suffix = " (with actual)" else suffix = "" + if actualSplatPos = -1 then suffix = "" else suffix = " (actual at " + actualSplatPos + ")" ) } } @@ -1472,12 +1479,11 @@ class ArgumentPosition extends TArgumentPosition { /** * Holds if this position represents a synthetic splat argument. * - * `hasActualSplat` indicates whether the call that the argument belongs - * to also has an actual splat argument. + * `actualSplatPos` indicates the position of the (unique) actual splat + * argument belonging to the same call, with `-1` representing no actual + * splat argument. */ - predicate isSynthSplat(boolean hasActualSplat) { - this = TSynthSplatArgumentPosition(hasActualSplat) - } + predicate isSynthSplat(int actualSplatPos) { this = TSynthSplatArgumentPosition(actualSplatPos) } /** Gets a textual representation of this position. */ string toString() { @@ -1501,10 +1507,10 @@ class ArgumentPosition extends TArgumentPosition { or exists(int pos | this.isSplat(pos) and result = "* (position " + pos + ")") or - exists(boolean hasActualSplat, string suffix | - this.isSynthSplat(hasActualSplat) and + exists(int actualSplatPos, string suffix | + this.isSynthSplat(actualSplatPos) and result = "synthetic *" + suffix and - if hasActualSplat = true then suffix = " (with actual)" else suffix = "" + if actualSplatPos = -1 then suffix = "" else suffix = " (actual at " + actualSplatPos + ")" ) } } @@ -1538,35 +1544,30 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { or exists(string name | ppos.isKeyword(name) and apos.isKeyword(name)) or - ppos.isHashSplat() and - (apos.isHashSplat() or apos.isSynthHashSplat()) + (ppos.isHashSplat() or ppos.isSynthHashSplat()) and + (apos.isHashSplat() or apos.isSynthHashSplat()) and + // prevent synthetic hash-splat parameters from matching synthetic hash-splat + // arguments when direct keyword matching is possible + not (ppos.isSynthHashSplat() and apos.isSynthHashSplat()) or - // no case for `apos.isSynthHashSplat() and ppos.isSynthHashSplat()`, since - // direct keyword matching is possible - ppos.isSynthHashSplat() and - apos.isHashSplat() - or - exists(int pos, boolean hasActualSplatParam, boolean hasActualSplatArg | + exists(int pos | ( - ppos.isSplat(pos) and - hasActualSplatParam = true // allow matching with synthetic splat argument + ppos.isSplat(pos) or - ppos.isSynthSplat(hasActualSplatParam) and - pos = 0 and - // prevent synthetic splat parameters from matching synthetic splat arguments - // when direct positional matching is possible - ( - hasActualSplatParam = true - or - hasActualSplatArg = true - ) + ppos.isSynthSplat(_) and + pos = 0 ) and ( - apos.isSplat(pos) and - hasActualSplatArg = true // allow matching with synthetic splat parameter + apos.isSplat(pos) or - apos.isSynthSplat(hasActualSplatArg) and pos = 0 + apos.isSynthSplat(_) and pos = 0 ) + ) and + // prevent synthetic splat parameters from matching synthetic splat arguments + // when direct positional matching is possible + not exists(int actualSplatPos | + ppos.isSynthSplat(actualSplatPos) and + apos.isSynthSplat(actualSplatPos) ) or ppos.isAny() and argumentPositionIsNotSelf(apos) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 1cfb3b0f395..78f0491ff13 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -1204,11 +1204,11 @@ private module ParameterNodes { final override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { c = callable and - exists(boolean hasActualSplat | - pos.isSynthSplat(hasActualSplat) and - if exists(TSynthSplatParameterShiftNode(c, _, _)) - then hasActualSplat = true - else hasActualSplat = false + exists(int actualSplat | pos.isSynthSplat(actualSplat) | + exists(TSynthSplatParameterShiftNode(c, actualSplat, _)) + or + not exists(TSynthSplatParameterShiftNode(c, _, _)) and + actualSplat = -1 ) } @@ -1488,11 +1488,13 @@ module ArgumentNodes { override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, ArgumentPosition pos) { call = call_ and - exists(boolean hasActualSplat | - pos.isSynthSplat(hasActualSplat) and - if any(SynthSplatArgumentShiftNode shift).storeInto(this, _) - then hasActualSplat = true - else hasActualSplat = false + exists(int actualSplat | pos.isSynthSplat(actualSplat) | + any(SynthSplatArgumentShiftNode shift | + shift = TSynthSplatArgumentShiftNode(_, actualSplat, _) + ).storeInto(this, _) + or + not any(SynthSplatArgumentShiftNode shift).storeInto(this, _) and + actualSplat = -1 ) } diff --git a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected index 4ebb2d50537..23d66c80ad2 100644 --- a/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/params/TypeTracker.expected @@ -1193,20 +1193,16 @@ track | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:8:57:18 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:58:20:58:24 | * ... | | params_flow.rb:57:8:57:18 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps | params_flow.rb:51:11:51:20 | ...[...] | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 0 or unknown | params_flow.rb:49:17:49:24 | *posargs | -| params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps | params_flow.rb:57:8:57:18 | synthetic splat argument | | params_flow.rb:57:8:57:18 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:58:20:58:24 | * ... | @@ -1216,7 +1212,6 @@ track | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:9:57:17 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps | params_flow.rb:57:9:57:17 | call to taint | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | call to [] | | params_flow.rb:57:9:57:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | synthetic splat argument | @@ -1229,7 +1224,6 @@ track | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:49:17:49:24 | *posargs | | params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 0 | params_flow.rb:51:5:51:21 | synthetic splat argument | -| params_flow.rb:57:15:57:16 | 22 | type tracker with call steps with content element 1 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps | params_flow.rb:57:9:57:17 | call to taint | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps | params_flow.rb:57:15:57:16 | 22 | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:57:8:57:18 | call to [] | @@ -1238,12 +1232,10 @@ track | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 0 | params_flow.rb:58:20:58:24 | * ... | | params_flow.rb:57:15:57:16 | 22 | type tracker without call steps with content element 1 | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:1:58:25 | call to posargs | type tracker without call steps | params_flow.rb:58:1:58:25 | call to posargs | -| params_flow.rb:58:1:58:25 | synthetic splat argument | type tracker with call steps | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:58:1:58:25 | synthetic splat argument | type tracker without call steps | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:58:9:58:17 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:58:9:58:17 | call to taint | type tracker without call steps | params_flow.rb:58:9:58:17 | call to taint | | params_flow.rb:58:9:58:17 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:58:1:58:25 | synthetic splat argument | @@ -1252,7 +1244,6 @@ track | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps | params_flow.rb:49:13:49:14 | p1 | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:58:15:58:16 | 23 | type tracker with call steps with content element 0 | params_flow.rb:50:5:50:11 | synthetic splat argument | | params_flow.rb:58:15:58:16 | 23 | type tracker without call steps | params_flow.rb:58:9:58:17 | call to taint | | params_flow.rb:58:15:58:16 | 23 | type tracker without call steps | params_flow.rb:58:15:58:16 | 23 | @@ -1826,12 +1817,10 @@ track | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps | params_flow.rb:94:45:94:46 | 44 | | params_flow.rb:94:45:94:46 | 44 | type tracker without call steps with content element 0 | params_flow.rb:94:39:94:47 | synthetic splat argument | | params_flow.rb:96:1:96:88 | call to splatmid | type tracker without call steps | params_flow.rb:96:1:96:88 | call to splatmid | -| params_flow.rb:96:1:96:88 | synthetic splat argument | type tracker with call steps | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:1:96:88 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps | params_flow.rb:69:14:69:14 | x | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:10:96:18 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:96:10:96:18 | call to taint | type tracker without call steps | params_flow.rb:96:10:96:18 | call to taint | | params_flow.rb:96:10:96:18 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:1:96:88 | synthetic splat argument | @@ -1840,7 +1829,6 @@ track | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps | params_flow.rb:69:14:69:14 | x | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:16:96:17 | 45 | type tracker with call steps with content element 0 | params_flow.rb:70:5:70:10 | synthetic splat argument | | params_flow.rb:96:16:96:17 | 45 | type tracker without call steps | params_flow.rb:96:10:96:18 | call to taint | | params_flow.rb:96:16:96:17 | 45 | type tracker without call steps | params_flow.rb:96:16:96:17 | 45 | @@ -1850,7 +1838,6 @@ track | params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps | params_flow.rb:69:17:69:17 | y | | params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:96:21:96:29 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:21:96:29 | call to taint | type tracker without call steps | params_flow.rb:96:21:96:29 | call to taint | | params_flow.rb:96:21:96:29 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:21:96:29 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:21:96:29 | synthetic splat argument | @@ -1859,23 +1846,19 @@ track | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps | params_flow.rb:69:17:69:17 | y | | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | | params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 0 | params_flow.rb:71:5:71:10 | synthetic splat argument | -| params_flow.rb:96:27:96:28 | 46 | type tracker with call steps with content element 1 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps | params_flow.rb:96:21:96:29 | call to taint | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps | params_flow.rb:96:27:96:28 | 46 | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content element 0 | params_flow.rb:96:21:96:29 | synthetic splat argument | | params_flow.rb:96:27:96:28 | 46 | type tracker without call steps with content element 1 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:32:96:65 | * ... | type tracker without call steps | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:33:96:65 | Array | type tracker without call steps | params_flow.rb:96:33:96:65 | Array | -| params_flow.rb:96:33:96:65 | call to [] | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:33:96:65 | call to [] | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:33:96:65 | synthetic splat argument | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:34:96:42 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps | params_flow.rb:96:34:96:42 | call to taint | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | call to [] | @@ -1883,7 +1866,6 @@ track | params_flow.rb:96:34:96:42 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:34:96:42 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:34:96:42 | synthetic splat argument | | params_flow.rb:96:40:96:41 | 47 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:40:96:41 | 47 | type tracker with call steps with content element 2 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps | params_flow.rb:96:34:96:42 | call to taint | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps | params_flow.rb:96:40:96:41 | 47 | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:32:96:65 | * ... | @@ -1891,7 +1873,6 @@ track | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 0 | params_flow.rb:96:34:96:42 | synthetic splat argument | | params_flow.rb:96:40:96:41 | 47 | type tracker without call steps with content element 2 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:45:96:53 | call to taint | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps | params_flow.rb:96:45:96:53 | call to taint | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | call to [] | @@ -1899,7 +1880,6 @@ track | params_flow.rb:96:45:96:53 | call to taint | type tracker without call steps with content element 3 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:45:96:53 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:45:96:53 | synthetic splat argument | | params_flow.rb:96:51:96:52 | 48 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:51:96:52 | 48 | type tracker with call steps with content element 3 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps | params_flow.rb:96:45:96:53 | call to taint | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps | params_flow.rb:96:51:96:52 | 48 | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 0 | params_flow.rb:96:45:96:53 | synthetic splat argument | @@ -1907,7 +1887,6 @@ track | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | call to [] | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 1 | params_flow.rb:96:33:96:65 | synthetic splat argument | | params_flow.rb:96:51:96:52 | 48 | type tracker without call steps with content element 3 | params_flow.rb:96:1:96:88 | synthetic splat argument | -| params_flow.rb:96:56:96:64 | call to taint | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps | params_flow.rb:96:56:96:64 | call to taint | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:32:96:65 | * ... | | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:96:33:96:65 | call to [] | @@ -1915,7 +1894,6 @@ track | params_flow.rb:96:56:96:64 | call to taint | type tracker without call steps with content element 4 | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:56:96:64 | synthetic splat argument | type tracker without call steps | params_flow.rb:96:56:96:64 | synthetic splat argument | | params_flow.rb:96:62:96:63 | 49 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:96:62:96:63 | 49 | type tracker with call steps with content element 4 | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps | params_flow.rb:96:56:96:64 | call to taint | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps | params_flow.rb:96:62:96:63 | 49 | | params_flow.rb:96:62:96:63 | 49 | type tracker without call steps with content element 0 | params_flow.rb:96:56:96:64 | synthetic splat argument | @@ -1977,12 +1955,10 @@ track | params_flow.rb:102:5:102:10 | call to sink | type tracker without call steps | params_flow.rb:106:1:106:46 | call to splatmidsmall | | params_flow.rb:102:5:102:10 | synthetic splat argument | type tracker without call steps | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:105:1:105:49 | call to splatmidsmall | type tracker without call steps | params_flow.rb:105:1:105:49 | call to splatmidsmall | -| params_flow.rb:105:1:105:49 | synthetic splat argument | type tracker with call steps | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:1:105:49 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps | params_flow.rb:98:19:98:19 | a | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:15:105:23 | call to taint | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:105:15:105:23 | call to taint | type tracker without call steps | params_flow.rb:105:15:105:23 | call to taint | | params_flow.rb:105:15:105:23 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:1:105:49 | synthetic splat argument | @@ -1991,7 +1967,6 @@ track | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps | params_flow.rb:5:10:5:10 | x | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps | params_flow.rb:98:19:98:19 | a | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:6:5:6:10 | synthetic splat argument | -| params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:21:105:22 | 52 | type tracker with call steps with content element 0 | params_flow.rb:99:5:99:10 | synthetic splat argument | | params_flow.rb:105:21:105:22 | 52 | type tracker without call steps | params_flow.rb:105:15:105:23 | call to taint | | params_flow.rb:105:21:105:22 | 52 | type tracker without call steps | params_flow.rb:105:21:105:22 | 52 | @@ -1999,16 +1974,13 @@ track | params_flow.rb:105:21:105:22 | 52 | type tracker without call steps with content element 0 | params_flow.rb:105:15:105:23 | synthetic splat argument | | params_flow.rb:105:26:105:48 | * ... | type tracker without call steps | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:27:105:48 | Array | type tracker without call steps | params_flow.rb:105:27:105:48 | Array | -| params_flow.rb:105:27:105:48 | call to [] | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps with content element 0 or unknown | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:27:105:48 | call to [] | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:27:105:48 | call to [] | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:27:105:48 | synthetic splat argument | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps with content element 0 or unknown | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:27:105:48 | synthetic splat argument | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:28:105:36 | call to taint | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | call to [] | @@ -2016,7 +1988,6 @@ track | params_flow.rb:105:28:105:36 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:28:105:36 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:28:105:36 | synthetic splat argument | | params_flow.rb:105:34:105:35 | 53 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:105:34:105:35 | 53 | type tracker with call steps with content element 1 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps | params_flow.rb:105:28:105:36 | call to taint | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps | params_flow.rb:105:34:105:35 | 53 | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:26:105:48 | * ... | @@ -2024,7 +1995,6 @@ track | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:27:105:48 | synthetic splat argument | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 0 | params_flow.rb:105:28:105:36 | synthetic splat argument | | params_flow.rb:105:34:105:35 | 53 | type tracker without call steps with content element 1 | params_flow.rb:105:1:105:49 | synthetic splat argument | -| params_flow.rb:105:39:105:47 | call to taint | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps | params_flow.rb:105:39:105:47 | call to taint | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:26:105:48 | * ... | | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 1 | params_flow.rb:105:27:105:48 | call to [] | @@ -2032,7 +2002,6 @@ track | params_flow.rb:105:39:105:47 | call to taint | type tracker without call steps with content element 2 | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:39:105:47 | synthetic splat argument | type tracker without call steps | params_flow.rb:105:39:105:47 | synthetic splat argument | | params_flow.rb:105:45:105:46 | 54 | type tracker with call steps | params_flow.rb:1:11:1:11 | x | -| params_flow.rb:105:45:105:46 | 54 | type tracker with call steps with content element 2 | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps | params_flow.rb:105:39:105:47 | call to taint | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps | params_flow.rb:105:45:105:46 | 54 | | params_flow.rb:105:45:105:46 | 54 | type tracker without call steps with content element 0 | params_flow.rb:105:39:105:47 | synthetic splat argument | @@ -4438,7 +4407,6 @@ trackEnd | params_flow.rb:57:15:57:16 | 22 | params_flow.rb:57:9:57:17 | call to taint | | params_flow.rb:57:15:57:16 | 22 | params_flow.rb:57:15:57:16 | 22 | | params_flow.rb:58:1:58:25 | call to posargs | params_flow.rb:58:1:58:25 | call to posargs | -| params_flow.rb:58:1:58:25 | synthetic splat argument | params_flow.rb:49:1:53:3 | synthetic splat parameter | | params_flow.rb:58:1:58:25 | synthetic splat argument | params_flow.rb:58:1:58:25 | synthetic splat argument | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:5:10:5:10 | x | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:5:10:5:10 | x | @@ -5032,7 +5000,6 @@ trackEnd | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:94:39:94:47 | call to taint | | params_flow.rb:94:45:94:46 | 44 | params_flow.rb:94:45:94:46 | 44 | | params_flow.rb:96:1:96:88 | call to splatmid | params_flow.rb:96:1:96:88 | call to splatmid | -| params_flow.rb:96:1:96:88 | synthetic splat argument | params_flow.rb:69:1:76:3 | synthetic splat parameter | | params_flow.rb:96:1:96:88 | synthetic splat argument | params_flow.rb:96:1:96:88 | synthetic splat argument | | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:5:10:5:10 | x | | params_flow.rb:96:10:96:18 | call to taint | params_flow.rb:5:10:5:10 | x | @@ -5166,7 +5133,6 @@ trackEnd | params_flow.rb:102:5:102:10 | call to sink | params_flow.rb:106:1:106:46 | call to splatmidsmall | | params_flow.rb:102:5:102:10 | synthetic splat argument | params_flow.rb:102:5:102:10 | synthetic splat argument | | params_flow.rb:105:1:105:49 | call to splatmidsmall | params_flow.rb:105:1:105:49 | call to splatmidsmall | -| params_flow.rb:105:1:105:49 | synthetic splat argument | params_flow.rb:98:1:103:3 | synthetic splat parameter | | params_flow.rb:105:1:105:49 | synthetic splat argument | params_flow.rb:105:1:105:49 | synthetic splat argument | | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:5:10:5:10 | x | | params_flow.rb:105:15:105:23 | call to taint | params_flow.rb:5:10:5:10 | x | From fd311d5143de10e8f1f7611b8a68454721beb7f4 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 16 Aug 2024 16:09:55 +0200 Subject: [PATCH 075/334] Java: Add some summary debugging queries. --- .../debug/CaptureSummaryModelsPartialPath.ql | 28 +++++++++++++++++++ .../debug/CaptureSummaryModelsPath.ql | 25 +++++++++++++++++ .../src/utils/modelgenerator/debug/README.md | 1 + .../modelgenerator/internal/CaptureModels.qll | 23 ++++++++++----- 4 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql create mode 100644 java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql create mode 100644 java/ql/src/utils/modelgenerator/debug/README.md diff --git a/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql new file mode 100644 index 00000000000..2b8a6e220f8 --- /dev/null +++ b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql @@ -0,0 +1,28 @@ +/** + * @name Capture Summary Models Partial Path + * @description Capture Summary Models Partial Path + * @kind path-problem + * @precision low + * @id java/utils/modelgenerator/summary-models-partial-path + * @severity info + * @tags modelgenerator + */ + +import java +import semmle.code.java.dataflow.DataFlow +import utils.modelgenerator.internal.CaptureModels +import PartialFlow::PartialPathGraph + +int explorationLimit() { result = 3 } + +module PartialFlow = PropagateFlow::FlowExplorationFwd; + +from + PartialFlow::PartialPathNode source, PartialFlow::PartialPathNode sink, + DataFlowSummaryTargetApi api, DataFlow::ParameterNode p +where + PartialFlow::partialFlow(source, sink, _) and + p = source.getNode() and + p.asParameter() = api.getParameter(0) +select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(), + "parameter", sink.getNode(), "intermediate value" diff --git a/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql new file mode 100644 index 00000000000..88d45dc1f5b --- /dev/null +++ b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql @@ -0,0 +1,25 @@ +/** + * @name Capture Summary Models Path + * @description Capture Summary Models Path + * @kind path-problem + * @precision low + * @id java/utils/modelgenerator/summary-models-path + * @severity warning + * @tags modelgenerator + */ + +import java +import semmle.code.java.dataflow.DataFlow +import utils.modelgenerator.internal.CaptureModels +import PropagateFlow::PathGraph + +from + PropagateFlow::PathNode source, PropagateFlow::PathNode sink, DataFlowSummaryTargetApi api, + DataFlow::Node p, DataFlow::Node returnNodeExt +where + PropagateFlow::flowPath(source, sink) and + p = source.getNode() and + returnNodeExt = sink.getNode() and + exists(captureThroughFlow0(api, p, returnNodeExt)) +select sink.getNode(), source, sink, "There is flow from $@ to the $@.", source.getNode(), + "parameter", sink.getNode(), "return value" diff --git a/java/ql/src/utils/modelgenerator/debug/README.md b/java/ql/src/utils/modelgenerator/debug/README.md new file mode 100644 index 00000000000..8d01e511882 --- /dev/null +++ b/java/ql/src/utils/modelgenerator/debug/README.md @@ -0,0 +1 @@ +The queries in this directory are purely used for model generator debugging purposes in VS Code. diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b8bc01f0800..ae8c2cad891 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -196,14 +196,13 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { } } -private module PropagateFlow = TaintTracking::GlobalWithState; +module PropagateFlow = TaintTracking::GlobalWithState; -/** - * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. - */ -string captureThroughFlow(DataFlowSummaryTargetApi api) { - exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output | - PropagateFlow::flow(p, returnNodeExt) and +string captureThroughFlow0( + DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt +) { + exists(string input, string output | + p.getEnclosingCallable() = api and returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and input = parameterNodeAsInput(p) and output = returnNodeExt.getOutput() and @@ -212,6 +211,16 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) { ) } +/** + * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. + */ +string captureThroughFlow(DataFlowSummaryTargetApi api) { + exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt | + PropagateFlow::flow(p, returnNodeExt) and + result = captureThroughFlow0(api, p, returnNodeExt) + ) +} + /** * A dataflow configuration used for finding new sources. * The sources are the already known existing sources and the sinks are the API return nodes. From 6ea01b81bbdd865a092130b397da0366e9b6cf98 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 20 Aug 2024 16:23:22 +0200 Subject: [PATCH 076/334] C#: Add some summary debugging queries. --- .../debug/CaptureSummaryModelsPartialPath.ql | 27 +++++++++++++++++++ .../debug/CaptureSummaryModelsPath.ql | 24 +++++++++++++++++ .../src/utils/modelgenerator/debug/README.md | 1 + .../modelgenerator/internal/CaptureModels.qll | 23 +++++++++++----- 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql create mode 100644 csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql create mode 100644 csharp/ql/src/utils/modelgenerator/debug/README.md diff --git a/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql new file mode 100644 index 00000000000..614fb7630b4 --- /dev/null +++ b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql @@ -0,0 +1,27 @@ +/** + * @name Capture Summary Models Partial Path + * @description Capture Summary Models Partial Path + * @kind path-problem + * @precision low + * @id csharp/utils/modelgenerator/summary-models-partial-path + * @severity info + * @tags modelgenerator + */ + +import csharp +import utils.modelgenerator.internal.CaptureModels +import PartialFlow::PartialPathGraph + +int explorationLimit() { result = 3 } + +module PartialFlow = PropagateFlow::FlowExplorationFwd; + +from + PartialFlow::PartialPathNode source, PartialFlow::PartialPathNode sink, + DataFlowSummaryTargetApi api, DataFlow::ParameterNode p +where + PartialFlow::partialFlow(source, sink, _) and + p = source.getNode() and + p.asParameter() = api.getParameter(0) +select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(), + "parameter", sink.getNode(), "intermediate value" diff --git a/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql new file mode 100644 index 00000000000..7be5a1fc00e --- /dev/null +++ b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql @@ -0,0 +1,24 @@ +/** + * @name Capture Summary Models Path + * @description Capture Summary Models Path + * @kind path-problem + * @precision low + * @id csharp/utils/modelgenerator/summary-models-path + * @severity warning + * @tags modelgenerator + */ + +import csharp +import utils.modelgenerator.internal.CaptureModels +import PropagateFlow::PathGraph + +from + PropagateFlow::PathNode source, PropagateFlow::PathNode sink, DataFlowSummaryTargetApi api, + DataFlow::Node p, DataFlow::Node returnNodeExt +where + PropagateFlow::flowPath(source, sink) and + p = source.getNode() and + returnNodeExt = sink.getNode() and + exists(captureThroughFlow0(api, p, returnNodeExt)) +select sink.getNode(), source, sink, "There is flow from $@ to the $@.", source.getNode(), + "parameter", sink.getNode(), "return value" diff --git a/csharp/ql/src/utils/modelgenerator/debug/README.md b/csharp/ql/src/utils/modelgenerator/debug/README.md new file mode 100644 index 00000000000..8d01e511882 --- /dev/null +++ b/csharp/ql/src/utils/modelgenerator/debug/README.md @@ -0,0 +1 @@ +The queries in this directory are purely used for model generator debugging purposes in VS Code. diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index b8bc01f0800..ae8c2cad891 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -196,14 +196,13 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { } } -private module PropagateFlow = TaintTracking::GlobalWithState; +module PropagateFlow = TaintTracking::GlobalWithState; -/** - * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. - */ -string captureThroughFlow(DataFlowSummaryTargetApi api) { - exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output | - PropagateFlow::flow(p, returnNodeExt) and +string captureThroughFlow0( + DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt +) { + exists(string input, string output | + p.getEnclosingCallable() = api and returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and input = parameterNodeAsInput(p) and output = returnNodeExt.getOutput() and @@ -212,6 +211,16 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) { ) } +/** + * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. + */ +string captureThroughFlow(DataFlowSummaryTargetApi api) { + exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt | + PropagateFlow::flow(p, returnNodeExt) and + result = captureThroughFlow0(api, p, returnNodeExt) + ) +} + /** * A dataflow configuration used for finding new sources. * The sources are the already known existing sources and the sinks are the API return nodes. From 658326d7f269a9b881a2d875ee1ec8ca32b06f5a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 16:42:49 +0200 Subject: [PATCH 077/334] Work around some instability on Windows --- .../cshtml_standalone_net6/Files.expected | 2 +- .../all-platforms/cshtml_standalone_net6/Files.ql | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected index 4b1c2d02005..65357c4e360 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected @@ -1,4 +1,4 @@ | Program.cs | | Views/Home/Index.cshtml | | test-db/working/implicitUsings/GlobalUsings.g.cs | -| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.NET.Sdk.Razor.SourceGenerators/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_net6_test_test_Views_Home_Index_cshtml.g.cs | +| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/[...]/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_net6_test_test_Views_Home_Index_cshtml.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql index 2ab3af8e13e..f59129efe94 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.ql @@ -4,14 +4,18 @@ private string getPath(File f) { result = f.getRelativePath() and not exists(result.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_")) or - exists(int index1, int index2, string pattern | - pattern = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and - index1 = f.getRelativePath().indexOf(pattern) and + exists(int index0, int index1, int index2, string pattern0, string pattern1 | + // TODO: Remove index0 and pattern0. Currently there's some instability in the path depending on which dotnet SDK is being used. (See issue #448) + pattern0 = "EC52D77FE9BF67AD10C5C3F248392316" and + index0 = f.getRelativePath().indexOf(pattern0) and + pattern1 = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and + index1 = f.getRelativePath().indexOf(pattern1) and index2 = f.getRelativePath() .indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and result = - f.getRelativePath().substring(0, index1 + pattern.length()) + "/[...]" + + f.getRelativePath().substring(0, index0 + pattern0.length()) + "/[...]/" + + f.getRelativePath().substring(index1, index1 + pattern1.length()) + "/[...]" + f.getRelativePath().substring(index2, f.getRelativePath().length()) ) } From 73674e72e6ae988ad19cf5a89b54d3d732fb01a9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 20 Aug 2024 16:51:32 +0200 Subject: [PATCH 078/334] Use cancallation token in download stream copying --- csharp/extractor/Semmle.Util/FileUtils.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 70aca8fc68c..0a606e82574 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -104,7 +104,7 @@ namespace Semmle.Util { using var contentStream = await httpClient.GetStreamAsync(address, token); using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true); - await contentStream.CopyToAsync(stream, CancellationToken.None); + await contentStream.CopyToAsync(stream, token); } private static void DownloadFileWithRetry(string address, string fileName, int tryCount, int timeoutMilliSeconds, ILogger logger) From 21366dd5023b588215a9820f541b4c3a3e38700f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 14 Aug 2024 17:57:24 +0100 Subject: [PATCH 079/334] Go / configure-baseline: account for multiple vendor directories and the `CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS` setting Our existing configure-baseline scripts would give the wrong result if a `vendor` directory wasn't at the root of the repository, or if the `CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS` variable was set to `true` indicating the user wants their vendored code scanned. Here I replace the shell scripts that implemented the very simplest behaviour with a small Go program. --- go/BUILD.bazel | 1 + go/codeql-tools/baseline-config-empty.json | 3 -- go/codeql-tools/baseline-config-vendor.json | 5 -- go/codeql-tools/configure-baseline.cmd | 11 +++-- go/codeql-tools/configure-baseline.sh | 6 +-- .../cli/go-configure-baseline/BUILD.bazel | 18 +++++++ .../go-configure-baseline.go | 14 ++++++ go/extractor/configurebaseline/BUILD.bazel | 10 ++++ .../configurebaseline/configurebaseline.go | 48 +++++++++++++++++++ 9 files changed, 98 insertions(+), 18 deletions(-) delete mode 100644 go/codeql-tools/baseline-config-empty.json delete mode 100644 go/codeql-tools/baseline-config-vendor.json create mode 100644 go/extractor/cli/go-configure-baseline/BUILD.bazel create mode 100644 go/extractor/cli/go-configure-baseline/go-configure-baseline.go create mode 100644 go/extractor/configurebaseline/BUILD.bazel create mode 100644 go/extractor/configurebaseline/configurebaseline.go diff --git a/go/BUILD.bazel b/go/BUILD.bazel index 936c86e0ed1..931f061da9e 100644 --- a/go/BUILD.bazel +++ b/go/BUILD.bazel @@ -47,6 +47,7 @@ codeql_pkg_files( "//go/extractor/cli/go-autobuilder", "//go/extractor/cli/go-bootstrap", "//go/extractor/cli/go-build-runner", + "//go/extractor/cli/go-configure-baseline", "//go/extractor/cli/go-extractor", "//go/extractor/cli/go-gen-dbscheme", "//go/extractor/cli/go-tokenizer", diff --git a/go/codeql-tools/baseline-config-empty.json b/go/codeql-tools/baseline-config-empty.json deleted file mode 100644 index 568d688fc3f..00000000000 --- a/go/codeql-tools/baseline-config-empty.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "paths-ignore": [] -} \ No newline at end of file diff --git a/go/codeql-tools/baseline-config-vendor.json b/go/codeql-tools/baseline-config-vendor.json deleted file mode 100644 index d2f654073b0..00000000000 --- a/go/codeql-tools/baseline-config-vendor.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "paths-ignore": [ - "vendor/**" - ] -} \ No newline at end of file diff --git a/go/codeql-tools/configure-baseline.cmd b/go/codeql-tools/configure-baseline.cmd index 285c3d66829..03edd525f3e 100644 --- a/go/codeql-tools/configure-baseline.cmd +++ b/go/codeql-tools/configure-baseline.cmd @@ -1,6 +1,7 @@ @echo off -if exist vendor\modules.txt ( - type "%CODEQL_EXTRACTOR_GO_ROOT%\tools\baseline-config-vendor.json" -) else ( - type "%CODEQL_EXTRACTOR_GO_ROOT%\tools\baseline-config-empty.json" -) +SETLOCAL EnableDelayedExpansion + +type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-configure-baseline.exe" +exit /b %ERRORLEVEL% + +ENDLOCAL diff --git a/go/codeql-tools/configure-baseline.sh b/go/codeql-tools/configure-baseline.sh index f426773c3ba..20edf8b4c93 100755 --- a/go/codeql-tools/configure-baseline.sh +++ b/go/codeql-tools/configure-baseline.sh @@ -1,7 +1,3 @@ #!/bin/sh -if [ -f vendor/modules.txt ]; then - cat "$CODEQL_EXTRACTOR_GO_ROOT/tools/baseline-config-vendor.json" -else - cat "$CODEQL_EXTRACTOR_GO_ROOT/tools/baseline-config-empty.json" -fi +"$CODEQL_EXTRACTOR_GO_ROOT/tools/$CODEQL_PLATFORM/go-configure-baseline" diff --git a/go/extractor/cli/go-configure-baseline/BUILD.bazel b/go/extractor/cli/go-configure-baseline/BUILD.bazel new file mode 100644 index 00000000000..df1af64d6a3 --- /dev/null +++ b/go/extractor/cli/go-configure-baseline/BUILD.bazel @@ -0,0 +1,18 @@ +# generated running `bazel run //go/gazelle`, do not edit + +load("@rules_go//go:def.bzl", "go_library") +load("//go:rules.bzl", "codeql_go_binary") + +go_library( + name = "go-configure-baseline_lib", + srcs = ["go-configure-baseline.go"], + importpath = "github.com/github/codeql-go/extractor/cli/go-configure-baseline", + visibility = ["//visibility:private"], + deps = ["//go/extractor/configurebaseline"], +) + +codeql_go_binary( + name = "go-configure-baseline", + embed = [":go-configure-baseline_lib"], + visibility = ["//visibility:public"], +) diff --git a/go/extractor/cli/go-configure-baseline/go-configure-baseline.go b/go/extractor/cli/go-configure-baseline/go-configure-baseline.go new file mode 100644 index 00000000000..b7f88230267 --- /dev/null +++ b/go/extractor/cli/go-configure-baseline/go-configure-baseline.go @@ -0,0 +1,14 @@ +package main + +import ( + "github.com/github/codeql-go/extractor/configurebaseline" +) + +func main() { + jsonResult, err := configurebaseline.GetConfigBaselineAsJSON(".") + if err != nil { + panic(err) + } else { + println(string(jsonResult)) + } +} diff --git a/go/extractor/configurebaseline/BUILD.bazel b/go/extractor/configurebaseline/BUILD.bazel new file mode 100644 index 00000000000..7c5161683f5 --- /dev/null +++ b/go/extractor/configurebaseline/BUILD.bazel @@ -0,0 +1,10 @@ +# generated running `bazel run //go/gazelle`, do not edit + +load("@rules_go//go:def.bzl", "go_library") + +go_library( + name = "configurebaseline", + srcs = ["configurebaseline.go"], + importpath = "github.com/github/codeql-go/extractor/configurebaseline", + visibility = ["//visibility:public"], +) diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go new file mode 100644 index 00000000000..b8bab4eeb95 --- /dev/null +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -0,0 +1,48 @@ +package configurebaseline + +import ( + "encoding/json" + "io/fs" + "os" + "path" + "path/filepath" +) + +func fileExists(path string) bool { + stat, err := os.Stat(path) + return err == nil && stat.Mode().IsRegular() +} + +func isGolangVendorDirectory(dirPath string) bool { + // Call a directory a Golang vendor directory if it contains a modules.txt file. + return path.Base(dirPath) == "vendor" && fileExists(path.Join(dirPath, "modules.txt")) +} + +type PathsIgnoreStruct struct { + PathsIgnore []string `json:"paths-ignore"` +} + +func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { + vendorDirs := make([]string, 0) + + // If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true": + if os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" { + // The user wants vendor directories scanned; emit an empty report. + } else { + filepath.WalkDir(rootDir, func(dirPath string, d fs.DirEntry, err error) error { + if err != nil { + // Mask any unreadable paths. + return nil + } + if isGolangVendorDirectory(dirPath) { + vendorDirs = append(vendorDirs, path.Join(dirPath, "**")) + return filepath.SkipDir + } else { + return nil + } + }) + } + + outputStruct := PathsIgnoreStruct{PathsIgnore: vendorDirs} + return json.Marshal(outputStruct) +} From 624d2b83c04928f32e27f585cac8712aaa8f13db Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 19 Aug 2024 17:40:27 +0100 Subject: [PATCH 080/334] Tidy comments --- go/extractor/configurebaseline/configurebaseline.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index b8bab4eeb95..5ed112c624b 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -13,8 +13,9 @@ func fileExists(path string) bool { return err == nil && stat.Mode().IsRegular() } +// Decides if `dirPath` is a vendor directory by testing whether it is called `vendor` +// and contains a `modules.txt` file. func isGolangVendorDirectory(dirPath string) bool { - // Call a directory a Golang vendor directory if it contains a modules.txt file. return path.Base(dirPath) == "vendor" && fileExists(path.Join(dirPath, "modules.txt")) } @@ -25,7 +26,6 @@ type PathsIgnoreStruct struct { func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { vendorDirs := make([]string, 0) - // If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true": if os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" { // The user wants vendor directories scanned; emit an empty report. } else { From 5d34dbf2c296db396a7ab84161c5edb21111b00d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 19 Aug 2024 17:49:48 +0100 Subject: [PATCH 081/334] Remove unnecessary batch script flag --- go/codeql-tools/configure-baseline.cmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/go/codeql-tools/configure-baseline.cmd b/go/codeql-tools/configure-baseline.cmd index 03edd525f3e..47789cfbd3a 100644 --- a/go/codeql-tools/configure-baseline.cmd +++ b/go/codeql-tools/configure-baseline.cmd @@ -1,7 +1,4 @@ @echo off -SETLOCAL EnableDelayedExpansion type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-configure-baseline.exe" exit /b %ERRORLEVEL% - -ENDLOCAL From 22802fd41fea6b854ab54f9afe30e36abd6c9018 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 19 Aug 2024 17:50:53 +0100 Subject: [PATCH 082/334] Improve struct naming --- go/extractor/configurebaseline/configurebaseline.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index 5ed112c624b..59075b07239 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -19,7 +19,7 @@ func isGolangVendorDirectory(dirPath string) bool { return path.Base(dirPath) == "vendor" && fileExists(path.Join(dirPath, "modules.txt")) } -type PathsIgnoreStruct struct { +type BaselineConfig struct { PathsIgnore []string `json:"paths-ignore"` } @@ -43,6 +43,6 @@ func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { }) } - outputStruct := PathsIgnoreStruct{PathsIgnore: vendorDirs} + outputStruct := BaselineConfig{PathsIgnore: vendorDirs} return json.Marshal(outputStruct) } From f1f6f9b580a11977fa31a3da1992b7fb6f70fd15 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 19 Aug 2024 17:55:42 +0100 Subject: [PATCH 083/334] Share vendor-dir extraction logic between extractor and configure-baseline script --- go/extractor/configurebaseline/configurebaseline.go | 4 +++- go/extractor/extractor.go | 2 +- go/extractor/util/extractvendordirs.go | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 go/extractor/util/extractvendordirs.go diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index 59075b07239..e318111fef9 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -6,6 +6,8 @@ import ( "os" "path" "path/filepath" + + "github.com/github/codeql-go/extractor/util" ) func fileExists(path string) bool { @@ -26,7 +28,7 @@ type BaselineConfig struct { func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { vendorDirs := make([]string, 0) - if os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" { + if util.IsVendorDirExtractionEnabled() { // The user wants vendor directories scanned; emit an empty report. } else { filepath.WalkDir(rootDir, func(dirPath string, d fs.DirEntry, err error) error { diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index df3a43f80cf..4926d8e3e13 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -199,7 +199,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { // If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true", we extract `vendor` directories; // otherwise (the default) is to exclude them from extraction - includeVendor := os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" + includeVendor := util.IsVendorDirExtractionEnabled() if !includeVendor { excludedDirs = append(excludedDirs, "vendor") } diff --git a/go/extractor/util/extractvendordirs.go b/go/extractor/util/extractvendordirs.go new file mode 100644 index 00000000000..778d5120cf2 --- /dev/null +++ b/go/extractor/util/extractvendordirs.go @@ -0,0 +1,9 @@ +package util + +import ( + "os" +) + +func IsVendorDirExtractionEnabled() bool { + return os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" +} From ea3e5c8a99011495c02e9ae2a8ff0afbc6a02234 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 19 Aug 2024 17:57:12 +0100 Subject: [PATCH 084/334] Clarify comment --- go/extractor/configurebaseline/configurebaseline.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index e318111fef9..fa8023f24a8 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -33,7 +33,8 @@ func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { } else { filepath.WalkDir(rootDir, func(dirPath string, d fs.DirEntry, err error) error { if err != nil { - // Mask any unreadable paths. + // Ignore any unreadable paths -- if this script can't see it, very likely + // it will not be extracted either. return nil } if isGolangVendorDirectory(dirPath) { From 8b9617cd3810c07a32ec173a1b47747d4f258008 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 20 Aug 2024 15:55:02 +0100 Subject: [PATCH 085/334] Update bazel build files --- go/extractor/configurebaseline/BUILD.bazel | 1 + go/extractor/util/BUILD.bazel | 1 + 2 files changed, 2 insertions(+) diff --git a/go/extractor/configurebaseline/BUILD.bazel b/go/extractor/configurebaseline/BUILD.bazel index 7c5161683f5..b12e89abaf3 100644 --- a/go/extractor/configurebaseline/BUILD.bazel +++ b/go/extractor/configurebaseline/BUILD.bazel @@ -7,4 +7,5 @@ go_library( srcs = ["configurebaseline.go"], importpath = "github.com/github/codeql-go/extractor/configurebaseline", visibility = ["//visibility:public"], + deps = ["//go/extractor/util"], ) diff --git a/go/extractor/util/BUILD.bazel b/go/extractor/util/BUILD.bazel index d0195e05be2..b7a7783aa79 100644 --- a/go/extractor/util/BUILD.bazel +++ b/go/extractor/util/BUILD.bazel @@ -5,6 +5,7 @@ load("@rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "util", srcs = [ + "extractvendordirs.go", "semver.go", "util.go", ], From 15b5bcc67c7028a95e792e00bea91bd163eaa90a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 20 Aug 2024 17:01:54 +0100 Subject: [PATCH 086/334] Output to stdout, not stderr --- .../cli/go-configure-baseline/go-configure-baseline.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go/extractor/cli/go-configure-baseline/go-configure-baseline.go b/go/extractor/cli/go-configure-baseline/go-configure-baseline.go index b7f88230267..c8159908e0a 100644 --- a/go/extractor/cli/go-configure-baseline/go-configure-baseline.go +++ b/go/extractor/cli/go-configure-baseline/go-configure-baseline.go @@ -1,6 +1,8 @@ package main import ( + "fmt" + "github.com/github/codeql-go/extractor/configurebaseline" ) @@ -9,6 +11,6 @@ func main() { if err != nil { panic(err) } else { - println(string(jsonResult)) + fmt.Println(string(jsonResult)) } } From 3acab640b2b990857f9ecad64a8ee166bc109310 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 20 Aug 2024 17:07:09 +0100 Subject: [PATCH 087/334] Add configure-baseline integration test --- .../go/configure-baseline/src/a/vendor/avendor.go | 1 + .../go/configure-baseline/src/a/vendor/modules.txt | 0 .../go/configure-baseline/src/b/vendor/bvendor.go | 1 + .../go/configure-baseline/src/b/vendor/modules.txt | 0 .../go/configure-baseline/src/c/vendor/cvendor.go | 1 + .../all-platforms/go/configure-baseline/src/root.go | 1 + .../all-platforms/go/configure-baseline/test.py | 9 +++++++++ 7 files changed, 13 insertions(+) create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go create mode 100644 go/ql/integration-tests/all-platforms/go/configure-baseline/test.py diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go new file mode 100644 index 00000000000..6e423a61072 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go @@ -0,0 +1 @@ +package abc diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go new file mode 100644 index 00000000000..6e423a61072 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go @@ -0,0 +1 @@ +package abc diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go new file mode 100644 index 00000000000..6e423a61072 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go @@ -0,0 +1 @@ +package abc diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go new file mode 100644 index 00000000000..6e423a61072 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go @@ -0,0 +1 @@ +package abc diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py new file mode 100644 index 00000000000..ea414349666 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py @@ -0,0 +1,9 @@ +import os.path +import json + +def test(codeql, go): + codeql.database.init(source_root="src") + baseline_info_path = os.path.join("test-db", "baseline-info.json") + with open(baseline_info_path, "r") as f: + baseline_info = json.load(f) + assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", os.path.join("c", "vendor", "cvendor.go")]), "Expected root.go and cvendor.go in baseline" From fc301206d1d8deeccfc8bb45cf4334d6bf2b5277 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 20 Aug 2024 17:11:58 +0100 Subject: [PATCH 088/334] Change note --- go/ql/lib/change-notes/2024-08-20-vendor-dirs-baseline.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-08-20-vendor-dirs-baseline.md diff --git a/go/ql/lib/change-notes/2024-08-20-vendor-dirs-baseline.md b/go/ql/lib/change-notes/2024-08-20-vendor-dirs-baseline.md new file mode 100644 index 00000000000..cab6b49f3ba --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-20-vendor-dirs-baseline.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Golang vendor directories not at the root of a repository are now correctly excluded from the baseline Go file count. This means code coverage information will be more accurate. From e066c52ac6dcb83ef31c525db71ca4bfca7fc7e9 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Tue, 20 Aug 2024 12:33:38 -0400 Subject: [PATCH 089/334] Update change note Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/change-notes/2024-08-12-add-file-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/change-notes/2024-08-12-add-file-models.md b/go/ql/lib/change-notes/2024-08-12-add-file-models.md index e50f7138090..eed216dd361 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-file-models.md +++ b/go/ql/lib/change-notes/2024-08-12-add-file-models.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Local source models have been added for the file APIs in the "os" package in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). +* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). From 06f73e76b8d3ea29db3b99901a2a3c9e57d9b981 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 20 Aug 2024 12:43:25 -0400 Subject: [PATCH 090/334] Add additional test cases --- .../dataflow/flowsources/local/file/test.go | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go index 92d2adbe813..0e98fed62e9 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go @@ -1,6 +1,10 @@ package test -import "os" +import ( + "io/fs" + "io/ioutil" + "os" +) func open() { file, err := os.Open("file.txt") // $ source @@ -27,3 +31,40 @@ func readFile() { } _ = data } + +func readFileIoUtil() { + data, err := ioutil.ReadFile("file.txt") // $source + if err != nil { + return + } + _ = data +} + +func getFileFS() fs.ReadFileFS { + return nil +} + +func readFileFs() { + data, err := fs.ReadFile(os.DirFS("."), "file.txt") // $source + if err != nil { + return + } + _ = data + + dir := getFileFS() + data, err = dir.ReadFile("file.txt") // $source + + if err != nil { + return + } + _ = data +} + +func fsOpen() { + file, err := os.DirFS(".").Open("file.txt") // $source + if err != nil { + return + } + defer file.Close() + file.Read([]byte{1, 2, 3}) +} \ No newline at end of file From b001c24dfcedbbae70cd50e9e83afb4a0d46d8e9 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 20 Aug 2024 20:57:11 +0200 Subject: [PATCH 091/334] update tests to pass the github actions --- .../security/CWE-347/Auth0NoVerifier.expected | 19 ++++++++++++------- .../security/CWE-347/Auth0NoVerifier.qlref | 3 ++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected index 5e21f635d61..3d91060cc31 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.expected @@ -1,16 +1,24 @@ +#select +| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:44:28:44:55 | getParameter(...) | JWT | +| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) | JWT | edges -| JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | provenance | Src:MaD:44685 | +| JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | provenance | Src:MaD:4 | | JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | JwtNoVerifier.java:89:38:89:55 | token : String | provenance | | | JwtNoVerifier.java:58:28:58:62 | (...)... : String | JwtNoVerifier.java:59:32:59:40 | JwtToken3 : String | provenance | | -| JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:58:28:58:62 | (...)... : String | provenance | Src:MaD:2352 | +| JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:58:28:58:62 | (...)... : String | provenance | Src:MaD:1 | | JwtNoVerifier.java:59:32:59:40 | JwtToken3 : String | JwtNoVerifier.java:89:38:89:55 | token : String | provenance | | | JwtNoVerifier.java:89:38:89:55 | token : String | JwtNoVerifier.java:90:37:90:41 | token : String | provenance | | | JwtNoVerifier.java:90:26:90:42 | decode(...) : DecodedJWT | JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | provenance | | | JwtNoVerifier.java:90:37:90:41 | token : String | JwtNoVerifier.java:90:26:90:42 | decode(...) : DecodedJWT | provenance | Config | -| JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | provenance | MaD:43978 | -| JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:43980 | +| JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | provenance | MaD:2 | +| JwtNoVerifier.java:91:28:91:30 | jwt : DecodedJWT | JwtNoVerifier.java:91:16:91:31 | of(...) : Optional [] : DecodedJWT | provenance | MaD:3 | | JwtNoVerifier.java:91:37:91:40 | item : DecodedJWT | JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | provenance | | | JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | provenance | Config | +models +| 1 | Source: org.apache.shiro.authc; AuthenticationToken; true; getCredentials; (); ; ReturnValue; remote; manual | +| 2 | Summary: java.util; Optional; false; map; ; ; Argument[this].Element; Argument[0].Parameter[0]; value; manual | +| 3 | Summary: java.util; Optional; false; of; ; ; Argument[0]; ReturnValue.Element; value; manual | +| 4 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | nodes | JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JwtNoVerifier.java:45:39:45:47 | JwtToken1 : String | semmle.label | JwtToken1 : String | @@ -26,6 +34,3 @@ nodes | JwtNoVerifier.java:91:45:91:48 | item : DecodedJWT | semmle.label | item : DecodedJWT | | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | semmle.label | getClaim(...) | subpaths -#select -| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:44:28:44:55 | getParameter(...) : String | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:44:28:44:55 | getParameter(...) | JWT | -| JwtNoVerifier.java:91:45:91:69 | getClaim(...) | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) : Object | JwtNoVerifier.java:91:45:91:69 | getClaim(...) | This parses a $@, but the signature is not verified. | JwtNoVerifier.java:58:37:58:62 | getCredentials(...) | JWT | diff --git a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref index 49e8b6542d6..14b020f24cd 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref +++ b/java/ql/test/experimental/query-tests/security/CWE-347/Auth0NoVerifier.qlref @@ -1 +1,2 @@ -experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql \ No newline at end of file +query: experimental/Security/CWE/CWE-347/Auth0NoVerifier.ql +postprocess: TestUtilities/PrettyPrintModels.ql \ No newline at end of file From b14c58445a08fdb24ac99a88938f4f9b74f747ff Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 20 Aug 2024 16:47:19 -0400 Subject: [PATCH 092/334] Fix formatting --- .../semmle/go/dataflow/flowsources/local/file/test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go index 0e98fed62e9..1a145751476 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/file/test.go @@ -67,4 +67,4 @@ func fsOpen() { } defer file.Close() file.Read([]byte{1, 2, 3}) -} \ No newline at end of file +} From 65a6fa7bc37eff9588968ba2c064c589c52b165e Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 17:10:38 -0400 Subject: [PATCH 093/334] Go Environment variable (parsing) models and tests --- ...github.com.hashicorp.go-envparse.model.yml | 6 ++ .../ext/github.com.joho.godotenv.model.yml | 9 +++ ...ub.com.kelseyhightower.envconfig.model.yml | 11 +++ go/ql/lib/ext/os.model.yml | 5 +- .../flowsources/local/environment/go.mod | 9 +++ .../local/environment/test.expected | 6 ++ .../local/environment/test.ext.yml | 6 ++ .../flowsources/local/environment/test.go | 67 +++++++++++++++++++ .../flowsources/local/environment/test.ql | 5 ++ .../github.com/hashicorp/go-envparse/stub.go | 7 ++ .../vendor/github.com/joho/godotenv/stub.go | 37 ++++++++++ .../kelseyhightower/envconfig/stub.go | 30 +++++++++ .../local/environment/vendor/modules.txt | 9 +++ 13 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 go/ql/lib/ext/github.com.hashicorp.go-envparse.model.yml create mode 100644 go/ql/lib/ext/github.com.joho.godotenv.model.yml create mode 100644 go/ql/lib/ext/github.com.kelseyhightower.envconfig.model.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/go.mod create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ext.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/hashicorp/go-envparse/stub.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/kelseyhightower/envconfig/stub.go create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/modules.txt diff --git a/go/ql/lib/ext/github.com.hashicorp.go-envparse.model.yml b/go/ql/lib/ext/github.com.hashicorp.go-envparse.model.yml new file mode 100644 index 00000000000..73a178fbdcc --- /dev/null +++ b/go/ql/lib/ext/github.com.hashicorp.go-envparse.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/hashicorp/go-envparse", "", False, "Parse", "", "", "ReturnValue", "environment", "manual"] diff --git a/go/ql/lib/ext/github.com.joho.godotenv.model.yml b/go/ql/lib/ext/github.com.joho.godotenv.model.yml new file mode 100644 index 00000000000..8bd62c5dd0b --- /dev/null +++ b/go/ql/lib/ext/github.com.joho.godotenv.model.yml @@ -0,0 +1,9 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/joho/godotenv", "", False, "Parse", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/joho/godotenv", "", False, "Read", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/joho/godotenv", "", False, "Unmarshal", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/joho/godotenv", "", False, "UnmarshalBytes", "", "", "ReturnValue", "environment", "manual"] diff --git a/go/ql/lib/ext/github.com.kelseyhightower.envconfig.model.yml b/go/ql/lib/ext/github.com.kelseyhightower.envconfig.model.yml new file mode 100644 index 00000000000..71d032a18e1 --- /dev/null +++ b/go/ql/lib/ext/github.com.kelseyhightower.envconfig.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/kelseyhightower/envconfig", "", False, "CheckDisallowed", "", "", "Argument[1]", "environment", "manual"] + - ["github.com/kelseyhightower/envconfig", "", False, "MustProcess", "", "", "Argument[1]", "environment", "manual"] + - ["github.com/kelseyhightower/envconfig", "", False, "Process", "", "", "Argument[1]", "environment", "manual"] + - ["github.com/kelseyhightower/envconfig", "", False, "Usage", "", "", "Argument[1]", "environment", "manual"] + - ["github.com/kelseyhightower/envconfig", "", False, "Usagef", "", "", "Argument[1]", "environment", "manual"] + - ["github.com/kelseyhightower/envconfig", "", False, "Usaget", "", "", "Argument[1]", "environment", "manual"] \ No newline at end of file diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index 31034541b6d..48c9481c587 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -46,6 +46,9 @@ extensions: pack: codeql/go-all extensible: sourceModel data: + - ["os", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] + - ["os", "", False, "Getenv", "", "", "ReturnValue", "environment", "manual"] + - ["os", "", False, "LookupEnv", "", "", "ReturnValue[0]", "environment", "manual"] - ["os", "", False, "Open", "", "", "ReturnValue[0]", "file", "manual"] - ["os", "", False, "OpenFile", "", "", "ReturnValue[0]", "file", "manual"] - - ["os", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] \ No newline at end of file + - ["os", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/go.mod b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/go.mod new file mode 100644 index 00000000000..90c1c9f5660 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/go.mod @@ -0,0 +1,9 @@ +module test + +go 1.22.5 + +require ( + github.com/hashicorp/go-envparse v0.1.0 + github.com/joho/godotenv v1.5.1 + github.com/kelseyhightower/envconfig v1.4.0 +) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected new file mode 100644 index 00000000000..555ce04aded --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected @@ -0,0 +1,6 @@ +| test.go:12:10:12:26 | call to Getenv | +| test.go:14:2:14:33 | ... := ...[0] | +| test.go:19:20:19:31 | call to Environ | +| test.go:34:29:34:32 | &... | +| test.go:41:2:41:40 | ... := ...[0] | +| test.go:48:2:48:52 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ext.yml new file mode 100644 index 00000000000..b7075d8e7ae --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ext.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["environment", true, 0] \ No newline at end of file diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go new file mode 100644 index 00000000000..fe93d21adb6 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -0,0 +1,67 @@ +package test + +import ( + "fmt" + "github.com/hashicorp/go-envparse" + "github.com/joho/godotenv" + "github.com/kelseyhightower/envconfig" + "os" +) + +func osEnvironmentVariables() { + home := os.Getenv("HOME") + + port, ok := os.LookupEnv("PORT") + if !ok { + port = "3000" + } + + for _, e := range os.Environ() { + _ = e + } + + fmt.Printf("HOME: %s\n", home) + fmt.Printf("PORT: %s\n", port) +} + +type ServerConfig struct { + Port int `envconfig:"PORT"` + Host string `envconfig:"HOST"` +} + +func envconfigEnvironmentVariables() { + var cfg ServerConfig + envconfig.Process("myapp", &cfg) +} + +func godotenvEnvironmentVariables() { + var err error + var username, greeting string + + users, err := godotenv.Read("user.env") + if err != nil { + return + } + + username := users["USERNAME"] + + greetings, err := godotenv.Unmarshal("HELLO=hello") + if err != nil { + return + } + + greeting := greetings["HELLO"] + + fmt.Printf("%s, %s!\n", greeting, username) +} + +func envparseEnvironmentVariables() { + f := os.Open("file.txt") + envVars, ok := envparse.Parse(f) + + if !ok { + return + } + + fmt.Printf("HOME: %s\n", envVars["HOME"]) +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql new file mode 100644 index 00000000000..fff26479399 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql @@ -0,0 +1,5 @@ +import go + +from DataFlow::Node source +where source instanceof ThreatModelFlowSource +select source diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/hashicorp/go-envparse/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/hashicorp/go-envparse/stub.go new file mode 100644 index 00000000000..0ce38bd0173 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/hashicorp/go-envparse/stub.go @@ -0,0 +1,7 @@ +package envparse + +import "io" + +func Parse(r io.Reader) (map[string]string, error) { + return nil, nil +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go new file mode 100644 index 00000000000..bd8d60dd192 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go @@ -0,0 +1,37 @@ +package godotenv + +func Exec(filenames []string, cmd string, cmdArgs []string, overload bool) error { + return nil +} + +func Load(filenames ...string) (err error) { + return nil +} + +func Marshal(envMap map[string]string) (string, error) { + return "", nil +} + +func Overload(filenames ...string) (err error) { + return nil +} + +func Parse(r io.Reader) (map[string]string, error) { + return nil, nil +} + +func Read(filenames ...string) (envMap map[string]string, err error) { + return nil, nil +} + +func Unmarshal(str string) (envMap map[string]string, err error) { + return nil, nil +} + +func UnmarshalBytes(src []byte) (map[string]string, error) { + return nil, nil +} + +func Write(envMap map[string]string, filename string) error { + return nil +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/kelseyhightower/envconfig/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/kelseyhightower/envconfig/stub.go new file mode 100644 index 00000000000..856b8ebb6ef --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/kelseyhightower/envconfig/stub.go @@ -0,0 +1,30 @@ +package envconfig + +import ( + "io" + "text/template" +) + +func CheckDisallowed(prefix string, cfg interface{}) error { + return nil +} + +func MustProcess(prefix string, cfg interface{}) { + +} + +func Process(prefix string, cfg interface{}) error { + return nil +} + +func Usage(prefix string, spec interface{}) error { + return nil +} + +func Usagef(prefix string, spec interface{}, out io.Writer, format string) error { + return nil +} + +func Usaget(prefix string, spec interface{}, out io.Writer, tmpl *template.Template) error { + return nil +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/modules.txt b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/modules.txt new file mode 100644 index 00000000000..0b7968eaec9 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/modules.txt @@ -0,0 +1,9 @@ +# github.com/hashicorp/go-envparse v0.1.0 +## explicit +github.com/hashicorp/go-envparse +# github.com/joho/godotenv v1.5.1 +## explicit +github.com/joho/godotenv +# github.com/kelseyhightower/envconfig v1.4.0 +## explicit +github.com/kelseyhightower/envconfig From 69f02293f55de9e7b822e8d7e624d2b8ce95ad32 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 17:23:31 -0400 Subject: [PATCH 094/334] Add change note --- .../lib/change-notes/2024-08-12-add-environment-models.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-08-12-add-environment-models.md diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md new file mode 100644 index 00000000000..cc88532a506 --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md @@ -0,0 +1,8 @@ +--- +category: minorAnalysis +--- +* Local source models for reading and parsing environment variables have been added. The effect libraries include + - "os" + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig From 69679dec1d07341a66cc791959f312f36c24040a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 12 Aug 2024 20:10:44 -0400 Subject: [PATCH 095/334] Add defer statement --- .../go/dataflow/flowsources/local/environment/test.expected | 1 + .../semmle/go/dataflow/flowsources/local/environment/test.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected index 555ce04aded..9d356855b27 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected @@ -4,3 +4,4 @@ | test.go:34:29:34:32 | &... | | test.go:41:2:41:40 | ... := ...[0] | | test.go:48:2:48:52 | ... := ...[0] | +| test.go:61:2:61:33 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index fe93d21adb6..08d2012a6c5 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -56,7 +56,8 @@ func godotenvEnvironmentVariables() { } func envparseEnvironmentVariables() { - f := os.Open("file.txt") + f := os.OpenRead("file.txt") + defer f.Close() envVars, ok := envparse.Parse(f) if !ok { From ed36aaa5708f22f0c18faaa8947ed9d079857dfc Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 13 Aug 2024 10:38:15 -0400 Subject: [PATCH 096/334] Fix some minor issues --- .../go/dataflow/flowsources/local/environment/test.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index 08d2012a6c5..dfb04497522 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -43,7 +43,7 @@ func godotenvEnvironmentVariables() { return } - username := users["USERNAME"] + username = users["USERNAME"] greetings, err := godotenv.Unmarshal("HELLO=hello") if err != nil { @@ -56,11 +56,14 @@ func godotenvEnvironmentVariables() { } func envparseEnvironmentVariables() { - f := os.OpenRead("file.txt") + f, err := os.Open("file.txt") + if err != nil { + return + } defer f.Close() - envVars, ok := envparse.Parse(f) + envVars, err := envparse.Parse(f) - if !ok { + if err != nil { return } From 47974914a566b8c456e3ead1a380e7b7d2f5fdd2 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Mon, 19 Aug 2024 17:27:10 -0400 Subject: [PATCH 097/334] Apply suggestions from code review Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- .../lib/change-notes/2024-08-12-add-environment-models.md | 4 ++-- go/ql/lib/ext/os.model.yml | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md index cc88532a506..0b0317da839 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md +++ b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md @@ -1,8 +1,8 @@ --- category: minorAnalysis --- -* Local source models for reading and parsing environment variables have been added. The effect libraries include - - "os" +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os - github.com/hashicorp/go-envparse - github.com/joho/godotenv - github.com/kelseyhightower/envconfig diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index 48c9481c587..592b55377f5 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -46,9 +46,14 @@ extensions: pack: codeql/go-all extensible: sourceModel data: - - ["os", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] + - ["os", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["os", "", False, "ExpandEnv", "", "", "ReturnValue", "environment", "manual"] - ["os", "", False, "Getenv", "", "", "ReturnValue", "environment", "manual"] - ["os", "", False, "LookupEnv", "", "", "ReturnValue[0]", "environment", "manual"] - ["os", "", False, "Open", "", "", "ReturnValue[0]", "file", "manual"] - ["os", "", False, "OpenFile", "", "", "ReturnValue[0]", "file", "manual"] - ["os", "", False, "ReadFile", "", "", "ReturnValue[0]", "file", "manual"] + - ["os", "", False, "UserCacheDir", "", "", "ReturnValue[0]", "environment", "manual"] + - ["os", "", False, "UserConfigDir", "", "", "ReturnValue[0]", "environment", "manual"] + - ["os", "", False, "UserHomeDir", "", "", "ReturnValue[0]", "environment", "manual"] + - ["os", "ProcAttr", False, "Env", "", "", "", "environment", "manual"] # TODO: when sources can have access paths, use .ArrayElement From 257436a49d5f5bd040ce199812dcd488432e25eb Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 17:46:22 -0400 Subject: [PATCH 098/334] Convert test to inline expectation test --- .../local/environment/test.expected | 10 +++------- .../flowsources/local/environment/test.go | 14 ++++++------- .../flowsources/local/environment/test.ql | 20 ++++++++++++++++--- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected index 9d356855b27..db33d6d2504 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.expected @@ -1,7 +1,3 @@ -| test.go:12:10:12:26 | call to Getenv | -| test.go:14:2:14:33 | ... := ...[0] | -| test.go:19:20:19:31 | call to Environ | -| test.go:34:29:34:32 | &... | -| test.go:41:2:41:40 | ... := ...[0] | -| test.go:48:2:48:52 | ... := ...[0] | -| test.go:61:2:61:33 | ... := ...[0] | +testFailures +invalidModelRow +failures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index dfb04497522..64307ac0d3f 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -9,14 +9,14 @@ import ( ) func osEnvironmentVariables() { - home := os.Getenv("HOME") + home := os.Getenv("HOME") // $ source - port, ok := os.LookupEnv("PORT") + port, ok := os.LookupEnv("PORT") // $ source if !ok { port = "3000" } - for _, e := range os.Environ() { + for _, e := range os.Environ() { // $ source _ = e } @@ -31,21 +31,21 @@ type ServerConfig struct { func envconfigEnvironmentVariables() { var cfg ServerConfig - envconfig.Process("myapp", &cfg) + envconfig.Process("myapp", &cfg) // $ source } func godotenvEnvironmentVariables() { var err error var username, greeting string - users, err := godotenv.Read("user.env") + users, err := godotenv.Read("user.env") // $ source if err != nil { return } username = users["USERNAME"] - greetings, err := godotenv.Unmarshal("HELLO=hello") + greetings, err := godotenv.Unmarshal("HELLO=hello") // $ source if err != nil { return } @@ -61,7 +61,7 @@ func envparseEnvironmentVariables() { return } defer f.Close() - envVars, err := envparse.Parse(f) + envVars, err := envparse.Parse(f) // $ source if err != nil { return diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql index fff26479399..db6bbb1a2d1 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.ql @@ -1,5 +1,19 @@ import go +import ModelValidation +import TestUtilities.InlineExpectationsTest -from DataFlow::Node source -where source instanceof ThreatModelFlowSource -select source +module SourceTest implements TestSig { + string getARelevantTag() { result = "source" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(ThreatModelFlowSource s | + s.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = s.toString() and + value = "" and + tag = "source" + ) + } +} + +import MakeTest From f0f535b0e434b2b5a1a8730a0a62ae5f90319bd5 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 18:36:10 -0400 Subject: [PATCH 099/334] Fix frontend errors --- .../semmle/go/dataflow/flowsources/local/environment/test.go | 2 +- .../local/environment/vendor/github.com/joho/godotenv/stub.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index 64307ac0d3f..20042d6a40c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -50,7 +50,7 @@ func godotenvEnvironmentVariables() { return } - greeting := greetings["HELLO"] + greeting = greetings["HELLO"] fmt.Printf("%s, %s!\n", greeting, username) } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go index bd8d60dd192..eba88b5050c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/joho/godotenv/stub.go @@ -1,5 +1,7 @@ package godotenv +import "io" + func Exec(filenames []string, cmd string, cmdArgs []string, overload bool) error { return nil } From 8a7e378b401cb8d7bc7f30a8cc02f30c455c6067 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 19 Aug 2024 18:59:59 -0400 Subject: [PATCH 100/334] caarlos0/env --- .../lib/ext/github.com.caarlos0.env.model.yml | 15 ++++++++++ .../flowsources/local/environment/test.go | 17 +++++++++++ .../vendor/github.com/caarlos0/env/stub.go | 28 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 go/ql/lib/ext/github.com.caarlos0.env.model.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go diff --git a/go/ql/lib/ext/github.com.caarlos0.env.model.yml b/go/ql/lib/ext/github.com.caarlos0.env.model.yml new file mode 100644 index 00000000000..58576632ea5 --- /dev/null +++ b/go/ql/lib/ext/github.com.caarlos0.env.model.yml @@ -0,0 +1,15 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/caarlos0/env", "", False, "Parse", "", "", "Argument[0]", "environment", "manual"] + - ["github.com/caarlos0/env", "", False, "ParseAs", "", "", "ReturnValue[0]", "environment", "manual"] + - ["github.com/caarlos0/env", "", False, "ParseAsWithOptions", "", "", "ReturnValue[0]", "environment", "manual"] + - ["github.com/caarlos0/env", "", False, "ParseWithOptions", "", "", "Argument[0]", "environment", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/caarlos0/env", "", False, "Must", "", "", "Argument[0]", "ReturnValue", "value", "manual"] + - ["github.com/caarlos0/env", "", False, "ToMap", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index 20042d6a40c..a4d8a66deaf 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -2,6 +2,7 @@ package test import ( "fmt" + "github.com/caarlos0/env" "github.com/hashicorp/go-envparse" "github.com/joho/godotenv" "github.com/kelseyhightower/envconfig" @@ -69,3 +70,19 @@ func envparseEnvironmentVariables() { fmt.Printf("HOME: %s\n", envVars["HOME"]) } + +func caarlos0EnvironmentVariables() { + type config struct { + Home string `env:"HOME"` + Port int `env:"PORT"` + } + + cfg := config{} + env.Parse(&cfg) // $ source + + fmt.Printf("HOME: %s\n", cfg.Home) + + cfg = env.ParseAs[config]() // $ source + + fmt.Printf("HOME: %s\n", cfg.Home) +} \ No newline at end of file diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go new file mode 100644 index 00000000000..fa042b6a43d --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go @@ -0,0 +1,28 @@ +type Options struct {} + +func Must[T any](t T, err error) T { + if err != nil { + panic(err) + } + return t +} + +func Parse(v interface{}) error { + return nil +} + +func ParseAs[T any]() (T, error) { + return nil, nil +} + +func ParseAsWithOptions[T any](opts Options) (T, error) { + return nil, nil +} + +func ParseWithOptions(v interface{}, opts Options) error { + return nil +} + +func ToMap(env []string) map[string]string { + return nil +} \ No newline at end of file From cf3b3d75d0206afee81503414c10e3b2db1a4833 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Aug 2024 00:29:17 -0400 Subject: [PATCH 101/334] Fix caarlos0 test --- .../go/dataflow/flowsources/local/environment/test.go | 6 +++--- .../environment/vendor/github.com/caarlos0/env/stub.go | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index a4d8a66deaf..b34e34c4318 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -78,11 +78,11 @@ func caarlos0EnvironmentVariables() { } cfg := config{} - env.Parse(&cfg) // $ source + err := env.Parse(&cfg) // $ source fmt.Printf("HOME: %s\n", cfg.Home) - cfg = env.ParseAs[config]() // $ source + cfg, err = env.ParseAs[config]() // $ source fmt.Printf("HOME: %s\n", cfg.Home) -} \ No newline at end of file +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go index fa042b6a43d..c504b1b17b9 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go @@ -1,3 +1,5 @@ +package env + type Options struct {} func Must[T any](t T, err error) T { From 9f00a0060dec7157efbea4c4b5a1fdfacf241d88 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Aug 2024 00:30:36 -0400 Subject: [PATCH 102/334] gobuffalo/envy --- .../ext/github.com.gobuffalo.envy.model.yml | 12 ++++++++ .../flowsources/local/environment/test.go | 11 +++++++ .../vendor/github.com/gobuffalo/envy/stub.go | 29 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 go/ql/lib/ext/github.com.gobuffalo.envy.model.yml create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/gobuffalo/envy/stub.go diff --git a/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml b/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml new file mode 100644 index 00000000000..aaedbb254c9 --- /dev/null +++ b/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/gobuffalo/envy", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "Get", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "GoPath", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "GoPaths", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "GoBin", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "Map", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "MustGet", "", "", "ReturnValue[0]", "environment", "manual"] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index b34e34c4318..b25386ff6f6 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -3,6 +3,7 @@ package test import ( "fmt" "github.com/caarlos0/env" + "github.com/gobuffalo/envy" "github.com/hashicorp/go-envparse" "github.com/joho/godotenv" "github.com/kelseyhightower/envconfig" @@ -86,3 +87,13 @@ func caarlos0EnvironmentVariables() { fmt.Printf("HOME: %s\n", cfg.Home) } + +func envyEnvironmentVariables() { + goPath := envy.GoPath() // $ source + + fmt.Printf("GOPATH: %s\n", goPath) + + homeDir := envy.MustGet("HOME") // $ source + + fmt.Printf("HOME: %s\n", homeDir) +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/gobuffalo/envy/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/gobuffalo/envy/stub.go new file mode 100644 index 00000000000..895b82e9a10 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/gobuffalo/envy/stub.go @@ -0,0 +1,29 @@ +package envy + +func Environ() []string { + return nil +} + +func Get(key string) string { + return "" +} + +func GoPath() string { + return "" +} + +func GoPaths() []string { + return nil +} + +func GoBin() string { + return "" +} + +func Map() map[string]string { + return nil +} + +func MustGet(key string) string { + return "" +} From 0eddaa066404c5b9e185a0eeccba8c5b2617e092 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Aug 2024 00:36:48 -0400 Subject: [PATCH 103/334] syscall environment variables --- go/ql/lib/ext/syscall.model.yml | 7 +++++++ .../dataflow/flowsources/local/environment/test.go | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/go/ql/lib/ext/syscall.model.yml b/go/ql/lib/ext/syscall.model.yml index 14ddd68b402..00ab6018c3f 100644 --- a/go/ql/lib/ext/syscall.model.yml +++ b/go/ql/lib/ext/syscall.model.yml @@ -20,3 +20,10 @@ extensions: - ["syscall", "Conn", True, "SyscallConn", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["syscall", "RawConn", True, "Read", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - ["syscall", "RawConn", True, "Write", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["syscall", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] + - ["syscall", "", False, "Getenv", "", "", "ReturnValue[0]", "environment", "manual"] + - ["syscall", "ProcAttr", True, "Env", "", "", "", "environment", "manual"] \ No newline at end of file diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index b25386ff6f6..400f38fd133 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -8,6 +8,7 @@ import ( "github.com/joho/godotenv" "github.com/kelseyhightower/envconfig" "os" + "syscall" ) func osEnvironmentVariables() { @@ -97,3 +98,15 @@ func envyEnvironmentVariables() { fmt.Printf("HOME: %s\n", homeDir) } + +func syscallEnvironmentVariables() { + for _, envVar := range syscall.Environ() { // $ source + fmt.Println("%s", envVar) + } + + home, err := syscall.Getenv("HOME") // $ source + if err != nil { + return + } + fmt.Println("HOME: %s", home) +} From e4ce003e878eb6be5eb9b3e9335bd36e4988d4af Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 21 Aug 2024 09:44:45 +0200 Subject: [PATCH 104/334] C++: Fix tests and add an actual true negative --- .../TaintedAllocationSize.expected | 108 +++++++++--------- .../semmle/TaintedAllocationSize/test.cpp | 8 +- 2 files changed, 61 insertions(+), 55 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected index b922d7d8ba3..9e5f61c7c88 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected @@ -13,26 +13,26 @@ edges | test.cpp:133:19:133:32 | *call to getenv | test.cpp:133:14:133:17 | call to atoi | provenance | TaintFunction | | test.cpp:148:15:148:18 | call to atol | test.cpp:152:11:152:28 | ... * ... | provenance | | | test.cpp:148:20:148:33 | *call to getenv | test.cpp:148:15:148:18 | call to atol | provenance | TaintFunction | -| test.cpp:218:8:218:23 | *get_tainted_size | test.cpp:250:9:250:24 | call to get_tainted_size | provenance | | -| test.cpp:220:9:220:42 | ... * ... | test.cpp:218:8:218:23 | *get_tainted_size | provenance | | -| test.cpp:220:14:220:27 | *call to getenv | test.cpp:220:9:220:42 | ... * ... | provenance | TaintFunction | -| test.cpp:239:21:239:21 | s | test.cpp:240:21:240:21 | s | provenance | | -| test.cpp:246:19:246:52 | ... * ... | test.cpp:248:9:248:18 | local_size | provenance | | -| test.cpp:246:19:246:52 | ... * ... | test.cpp:254:11:254:20 | local_size | provenance | | -| test.cpp:246:19:246:52 | ... * ... | test.cpp:256:10:256:19 | local_size | provenance | | -| test.cpp:246:24:246:37 | *call to getenv | test.cpp:246:19:246:52 | ... * ... | provenance | TaintFunction | -| test.cpp:256:10:256:19 | local_size | test.cpp:239:21:239:21 | s | provenance | | -| test.cpp:259:20:259:27 | *out_size | test.cpp:298:17:298:20 | get_size output argument | provenance | | -| test.cpp:259:20:259:27 | *out_size | test.cpp:314:18:314:21 | get_size output argument | provenance | | -| test.cpp:260:2:260:32 | ... = ... | test.cpp:259:20:259:27 | *out_size | provenance | | -| test.cpp:260:18:260:31 | *call to getenv | test.cpp:260:2:260:32 | ... = ... | provenance | TaintFunction | -| test.cpp:268:15:268:18 | call to atoi | test.cpp:272:11:272:29 | ... * ... | provenance | | -| test.cpp:268:20:268:33 | *call to getenv | test.cpp:268:15:268:18 | call to atoi | provenance | TaintFunction | -| test.cpp:298:17:298:20 | get_size output argument | test.cpp:300:11:300:28 | ... * ... | provenance | | -| test.cpp:314:18:314:21 | get_size output argument | test.cpp:317:10:317:27 | ... * ... | provenance | | -| test.cpp:362:13:362:16 | call to atoi | test.cpp:364:35:364:38 | size | provenance | | -| test.cpp:362:13:362:16 | call to atoi | test.cpp:365:35:365:38 | size | provenance | | -| test.cpp:362:18:362:31 | *call to getenv | test.cpp:362:13:362:16 | call to atoi | provenance | TaintFunction | +| test.cpp:224:8:224:23 | *get_tainted_size | test.cpp:256:9:256:24 | call to get_tainted_size | provenance | | +| test.cpp:226:9:226:42 | ... * ... | test.cpp:224:8:224:23 | *get_tainted_size | provenance | | +| test.cpp:226:14:226:27 | *call to getenv | test.cpp:226:9:226:42 | ... * ... | provenance | TaintFunction | +| test.cpp:245:21:245:21 | s | test.cpp:246:21:246:21 | s | provenance | | +| test.cpp:252:19:252:52 | ... * ... | test.cpp:254:9:254:18 | local_size | provenance | | +| test.cpp:252:19:252:52 | ... * ... | test.cpp:260:11:260:20 | local_size | provenance | | +| test.cpp:252:19:252:52 | ... * ... | test.cpp:262:10:262:19 | local_size | provenance | | +| test.cpp:252:24:252:37 | *call to getenv | test.cpp:252:19:252:52 | ... * ... | provenance | TaintFunction | +| test.cpp:262:10:262:19 | local_size | test.cpp:245:21:245:21 | s | provenance | | +| test.cpp:265:20:265:27 | *out_size | test.cpp:304:17:304:20 | get_size output argument | provenance | | +| test.cpp:265:20:265:27 | *out_size | test.cpp:320:18:320:21 | get_size output argument | provenance | | +| test.cpp:266:2:266:32 | ... = ... | test.cpp:265:20:265:27 | *out_size | provenance | | +| test.cpp:266:18:266:31 | *call to getenv | test.cpp:266:2:266:32 | ... = ... | provenance | TaintFunction | +| test.cpp:274:15:274:18 | call to atoi | test.cpp:278:11:278:29 | ... * ... | provenance | | +| test.cpp:274:20:274:33 | *call to getenv | test.cpp:274:15:274:18 | call to atoi | provenance | TaintFunction | +| test.cpp:304:17:304:20 | get_size output argument | test.cpp:306:11:306:28 | ... * ... | provenance | | +| test.cpp:320:18:320:21 | get_size output argument | test.cpp:323:10:323:27 | ... * ... | provenance | | +| test.cpp:368:13:368:16 | call to atoi | test.cpp:370:35:370:38 | size | provenance | | +| test.cpp:368:13:368:16 | call to atoi | test.cpp:371:35:371:38 | size | provenance | | +| test.cpp:368:18:368:31 | *call to getenv | test.cpp:368:13:368:16 | call to atoi | provenance | TaintFunction | nodes | test.cpp:39:27:39:30 | **argv | semmle.label | **argv | | test.cpp:40:16:40:19 | call to atoi | semmle.label | call to atoi | @@ -52,31 +52,31 @@ nodes | test.cpp:148:15:148:18 | call to atol | semmle.label | call to atol | | test.cpp:148:20:148:33 | *call to getenv | semmle.label | *call to getenv | | test.cpp:152:11:152:28 | ... * ... | semmle.label | ... * ... | -| test.cpp:218:8:218:23 | *get_tainted_size | semmle.label | *get_tainted_size | -| test.cpp:220:9:220:42 | ... * ... | semmle.label | ... * ... | -| test.cpp:220:14:220:27 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:239:21:239:21 | s | semmle.label | s | -| test.cpp:240:21:240:21 | s | semmle.label | s | -| test.cpp:246:19:246:52 | ... * ... | semmle.label | ... * ... | -| test.cpp:246:24:246:37 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:248:9:248:18 | local_size | semmle.label | local_size | -| test.cpp:250:9:250:24 | call to get_tainted_size | semmle.label | call to get_tainted_size | -| test.cpp:254:11:254:20 | local_size | semmle.label | local_size | -| test.cpp:256:10:256:19 | local_size | semmle.label | local_size | -| test.cpp:259:20:259:27 | *out_size | semmle.label | *out_size | -| test.cpp:260:2:260:32 | ... = ... | semmle.label | ... = ... | -| test.cpp:260:18:260:31 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:268:15:268:18 | call to atoi | semmle.label | call to atoi | -| test.cpp:268:20:268:33 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:272:11:272:29 | ... * ... | semmle.label | ... * ... | -| test.cpp:298:17:298:20 | get_size output argument | semmle.label | get_size output argument | -| test.cpp:300:11:300:28 | ... * ... | semmle.label | ... * ... | -| test.cpp:314:18:314:21 | get_size output argument | semmle.label | get_size output argument | -| test.cpp:317:10:317:27 | ... * ... | semmle.label | ... * ... | -| test.cpp:362:13:362:16 | call to atoi | semmle.label | call to atoi | -| test.cpp:362:18:362:31 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:364:35:364:38 | size | semmle.label | size | -| test.cpp:365:35:365:38 | size | semmle.label | size | +| test.cpp:224:8:224:23 | *get_tainted_size | semmle.label | *get_tainted_size | +| test.cpp:226:9:226:42 | ... * ... | semmle.label | ... * ... | +| test.cpp:226:14:226:27 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:245:21:245:21 | s | semmle.label | s | +| test.cpp:246:21:246:21 | s | semmle.label | s | +| test.cpp:252:19:252:52 | ... * ... | semmle.label | ... * ... | +| test.cpp:252:24:252:37 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:254:9:254:18 | local_size | semmle.label | local_size | +| test.cpp:256:9:256:24 | call to get_tainted_size | semmle.label | call to get_tainted_size | +| test.cpp:260:11:260:20 | local_size | semmle.label | local_size | +| test.cpp:262:10:262:19 | local_size | semmle.label | local_size | +| test.cpp:265:20:265:27 | *out_size | semmle.label | *out_size | +| test.cpp:266:2:266:32 | ... = ... | semmle.label | ... = ... | +| test.cpp:266:18:266:31 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:274:15:274:18 | call to atoi | semmle.label | call to atoi | +| test.cpp:274:20:274:33 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:278:11:278:29 | ... * ... | semmle.label | ... * ... | +| test.cpp:304:17:304:20 | get_size output argument | semmle.label | get_size output argument | +| test.cpp:306:11:306:28 | ... * ... | semmle.label | ... * ... | +| test.cpp:320:18:320:21 | get_size output argument | semmle.label | get_size output argument | +| test.cpp:323:10:323:27 | ... * ... | semmle.label | ... * ... | +| test.cpp:368:13:368:16 | call to atoi | semmle.label | call to atoi | +| test.cpp:368:18:368:31 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:370:35:370:38 | size | semmle.label | size | +| test.cpp:371:35:371:38 | size | semmle.label | size | subpaths #select | test.cpp:43:31:43:36 | call to malloc | test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:39:27:39:30 | **argv | user input (a command-line argument) | @@ -88,12 +88,12 @@ subpaths | test.cpp:128:17:128:22 | call to malloc | test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:124:18:124:31 | *call to getenv | user input (an environment variable) | | test.cpp:135:3:135:8 | call to malloc | test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:133:19:133:32 | *call to getenv | user input (an environment variable) | | test.cpp:152:4:152:9 | call to malloc | test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:148:20:148:33 | *call to getenv | user input (an environment variable) | -| test.cpp:240:14:240:19 | call to malloc | test.cpp:246:24:246:37 | *call to getenv | test.cpp:240:21:240:21 | s | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:246:24:246:37 | *call to getenv | user input (an environment variable) | -| test.cpp:248:2:248:7 | call to malloc | test.cpp:246:24:246:37 | *call to getenv | test.cpp:248:9:248:18 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:246:24:246:37 | *call to getenv | user input (an environment variable) | -| test.cpp:250:2:250:7 | call to malloc | test.cpp:220:14:220:27 | *call to getenv | test.cpp:250:9:250:24 | call to get_tainted_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:220:14:220:27 | *call to getenv | user input (an environment variable) | -| test.cpp:254:2:254:9 | call to my_alloc | test.cpp:246:24:246:37 | *call to getenv | test.cpp:254:11:254:20 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:246:24:246:37 | *call to getenv | user input (an environment variable) | -| test.cpp:272:4:272:9 | call to malloc | test.cpp:268:20:268:33 | *call to getenv | test.cpp:272:11:272:29 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:268:20:268:33 | *call to getenv | user input (an environment variable) | -| test.cpp:300:4:300:9 | call to malloc | test.cpp:260:18:260:31 | *call to getenv | test.cpp:300:11:300:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:260:18:260:31 | *call to getenv | user input (an environment variable) | -| test.cpp:317:3:317:8 | call to malloc | test.cpp:260:18:260:31 | *call to getenv | test.cpp:317:10:317:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:260:18:260:31 | *call to getenv | user input (an environment variable) | -| test.cpp:364:25:364:33 | call to MyMalloc1 | test.cpp:362:18:362:31 | *call to getenv | test.cpp:364:35:364:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:362:18:362:31 | *call to getenv | user input (an environment variable) | -| test.cpp:365:25:365:33 | call to MyMalloc2 | test.cpp:362:18:362:31 | *call to getenv | test.cpp:365:35:365:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:362:18:362:31 | *call to getenv | user input (an environment variable) | +| test.cpp:246:14:246:19 | call to malloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:246:21:246:21 | s | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | +| test.cpp:254:2:254:7 | call to malloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:254:9:254:18 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | +| test.cpp:256:2:256:7 | call to malloc | test.cpp:226:14:226:27 | *call to getenv | test.cpp:256:9:256:24 | call to get_tainted_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:226:14:226:27 | *call to getenv | user input (an environment variable) | +| test.cpp:260:2:260:9 | call to my_alloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:260:11:260:20 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | +| test.cpp:278:4:278:9 | call to malloc | test.cpp:274:20:274:33 | *call to getenv | test.cpp:278:11:278:29 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:274:20:274:33 | *call to getenv | user input (an environment variable) | +| test.cpp:306:4:306:9 | call to malloc | test.cpp:266:18:266:31 | *call to getenv | test.cpp:306:11:306:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:266:18:266:31 | *call to getenv | user input (an environment variable) | +| test.cpp:323:3:323:8 | call to malloc | test.cpp:266:18:266:31 | *call to getenv | test.cpp:323:10:323:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:266:18:266:31 | *call to getenv | user input (an environment variable) | +| test.cpp:370:25:370:33 | call to MyMalloc1 | test.cpp:368:18:368:31 | *call to getenv | test.cpp:370:35:370:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:368:18:368:31 | *call to getenv | user input (an environment variable) | +| test.cpp:371:25:371:33 | call to MyMalloc2 | test.cpp:368:18:368:31 | *call to getenv | test.cpp:371:35:371:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:368:18:368:31 | *call to getenv | user input (an environment variable) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp index f85df3fb8cb..f262d1943d0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp @@ -180,12 +180,18 @@ void more_bounded_tests() { } } + { + int size = atoi(getenv("USER")); + int size2 = size % 100; + malloc(size2 * sizeof(int)); // GOOD + } + { int size = atoi(getenv("USER")); if (size % 100) { - malloc(size * sizeof(int)); // GOOD + malloc(size * sizeof(int)); // BAD [NOT DETECTED] } } From 9bd3f3dee01958294ea45154a3b83a458cb4b6da Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 29 Jul 2024 13:30:45 +0200 Subject: [PATCH 105/334] Dataflow: Rename StagePathNode to StagePathNodeImpl. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 6425574581e..19966185c45 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2536,7 +2536,7 @@ module MakeImpl Lang> { TStagePathNodeSrcGrp() or TStagePathNodeSinkGrp() - class StagePathNode extends TStagePathNode { + class StagePathNodeImpl extends TStagePathNode { abstract string toString(); abstract Location getLocation(); @@ -2553,19 +2553,19 @@ module MakeImpl Lang> { predicate isArbitrarySink() { this instanceof TStagePathNodeSinkGrp } } - class StagePathNodeSrcGrp extends StagePathNode, TStagePathNodeSrcGrp { + class StagePathNodeSrcGrp extends StagePathNodeImpl, TStagePathNodeSrcGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } - class StagePathNodeSinkGrp extends StagePathNode, TStagePathNodeSinkGrp { + class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } - class StagePathNodeMid extends StagePathNode, TStagePathNodeMid { + class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { NodeEx node; FlowState state; Cc cc; @@ -2646,14 +2646,14 @@ module MakeImpl Lang> { bindingset[node, state, cc, summaryCtx, argT, argAp, t, ap] pragma[inline_late] - private StagePathNode mkStagePathNode( + private StagePathNodeImpl mkStagePathNode( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap ) { result = TStagePathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) } - private StagePathNode typeStrengthenToStagePathNode( + private StagePathNodeImpl typeStrengthenToStagePathNode( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap ) { @@ -2665,9 +2665,9 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThroughStep1( - StagePathNode pn1, StagePathNode pn2, StagePathNode pn3, DataFlowCall call, Cc cc, - FlowState state, CcCall ccc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, - Typ t, Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa + StagePathNodeImpl pn1, StagePathNodeImpl pn2, StagePathNodeImpl pn3, DataFlowCall call, + Cc cc, FlowState state, CcCall ccc, ParamNodeOption summaryCtx, TypOption argT, + ApOption argAp, Typ t, Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa ) { exists(FlowState state0, ArgNodeEx arg, ParamNodeEx p, Typ innerArgT, Ap innerArgAp | fwdFlowThroughStep0(call, arg, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, @@ -2685,7 +2685,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThroughStep2( - StagePathNode pn1, StagePathNode pn2, StagePathNode pn3, NodeEx node, Cc cc, + StagePathNodeImpl pn1, StagePathNodeImpl pn2, StagePathNodeImpl pn3, NodeEx node, Cc cc, FlowState state, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap ) { @@ -2701,7 +2701,7 @@ module MakeImpl Lang> { } private predicate localStep( - StagePathNode pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, + StagePathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label ) { exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | @@ -2732,7 +2732,7 @@ module MakeImpl Lang> { ) } - private predicate localStep(StagePathNode pn1, StagePathNode pn2, string label) { + private predicate localStep(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string label) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap @@ -2744,27 +2744,29 @@ module MakeImpl Lang> { summaryStep(pn1, pn2, label) } - private predicate summaryLabel(StagePathNode pn1, StagePathNode pn2, string summaryLabel) { + private predicate summaryLabel( + StagePathNodeImpl pn1, StagePathNodeImpl pn2, string summaryLabel + ) { pn1 = pn2 and summaryLabel = "" and subpaths(_, pn1, _, _) or - exists(StagePathNode mid, string l1, string l2 | + exists(StagePathNodeImpl mid, string l1, string l2 | summaryLabel(pn1, mid, l1) and localStep(mid, pn2, l2) and summaryLabel = mergeLabels(l1, l2) ) } - private predicate summaryStep(StagePathNode arg, StagePathNode out, string label) { - exists(StagePathNode par, StagePathNode ret | + private predicate summaryStep(StagePathNodeImpl arg, StagePathNodeImpl out, string label) { + exists(StagePathNodeImpl par, StagePathNodeImpl ret | subpaths(arg, par, ret, out) and summaryLabel(par, ret, label) ) } private predicate nonLocalStep( - StagePathNode pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, + StagePathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label ) { // jump @@ -2823,7 +2825,7 @@ module MakeImpl Lang> { ) } - private predicate nonLocalStep(StagePathNode pn1, StagePathNode pn2, string label) { + private predicate nonLocalStep(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string label) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap @@ -2834,7 +2836,8 @@ module MakeImpl Lang> { } query predicate subpaths( - StagePathNode arg, StagePathNode par, StagePathNode ret, StagePathNode out + StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, + StagePathNodeImpl out ) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -2845,7 +2848,7 @@ module MakeImpl Lang> { ) } - query predicate edges(StagePathNode pn1, StagePathNode pn2, string key, string val) { + query predicate edges(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string key, string val) { key = "provenance" and ( localStep(pn1, pn2, val) From bc0ae4cd1e1eec90b2d2dbf3e45be93adc16c2ec Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:45:40 +0200 Subject: [PATCH 106/334] Dataflow: Replace StagePathNode.getNode with getNodeEx. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 19966185c45..20b44896533 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2537,13 +2537,12 @@ module MakeImpl Lang> { TStagePathNodeSinkGrp() class StagePathNodeImpl extends TStagePathNode { + abstract NodeEx getNodeEx(); + abstract string toString(); abstract Location getLocation(); - /** Gets the corresponding `Node`, if any. */ - Node getNode() { none() } - predicate isSource() { none() } predicate isSink() { none() } @@ -2557,12 +2556,16 @@ module MakeImpl Lang> { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } + + override NodeEx getNodeEx() { none() } } class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } + + override NodeEx getNodeEx() { none() } } class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { @@ -2579,6 +2582,8 @@ module MakeImpl Lang> { this = TStagePathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) } + override NodeEx getNodeEx() { result = node } + override string toString() { result = node.toString() + " " + cc.toString() + " " + t.toString() + " " + ap.toString() @@ -2586,8 +2591,6 @@ module MakeImpl Lang> { override Location getLocation() { result = node.getLocation() } - override Node getNode() { result = node.asNode() } - override predicate isSource() { sourceNode(node, state) and (if hasSourceCallCtx() then cc = ccSomeCall() else cc = ccNone()) and From bdcc5e7b6725b42630311f8efb20c63c9014550b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:47:59 +0200 Subject: [PATCH 107/334] Dataflow: Refactor getLocation --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 20b44896533..147f8671417 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2541,12 +2541,13 @@ module MakeImpl Lang> { abstract string toString(); - abstract Location getLocation(); - predicate isSource() { none() } predicate isSink() { none() } + /** Gets the location of this node. */ + Location getLocation() { result = this.getNodeEx().getLocation() } + predicate isArbitrarySource() { this instanceof TStagePathNodeSrcGrp } predicate isArbitrarySink() { this instanceof TStagePathNodeSinkGrp } @@ -2589,8 +2590,6 @@ module MakeImpl Lang> { node.toString() + " " + cc.toString() + " " + t.toString() + " " + ap.toString() } - override Location getLocation() { result = node.getLocation() } - override predicate isSource() { sourceNode(node, state) and (if hasSourceCallCtx() then cc = ccSomeCall() else cc = ccNone()) and From 81a815c343a4d501bf200e31d27169633cd55f01 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:49:50 +0200 Subject: [PATCH 108/334] Dataflow: Add StagePathNode.getState. --- .../dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 147f8671417..8e70f6235fe 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2539,6 +2539,9 @@ module MakeImpl Lang> { class StagePathNodeImpl extends TStagePathNode { abstract NodeEx getNodeEx(); + /** Gets the `FlowState` of this node. */ + abstract FlowState getState(); + abstract string toString(); predicate isSource() { none() } @@ -2559,6 +2562,8 @@ module MakeImpl Lang> { override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } override NodeEx getNodeEx() { none() } + + override FlowState getState() { none() } } class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { @@ -2567,6 +2572,8 @@ module MakeImpl Lang> { override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } override NodeEx getNodeEx() { none() } + + override FlowState getState() { none() } } class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { @@ -2585,6 +2592,8 @@ module MakeImpl Lang> { override NodeEx getNodeEx() { result = node } + override FlowState getState() { result = state } + override string toString() { result = node.toString() + " " + cc.toString() + " " + t.toString() + " " + ap.toString() From 9429e5ccba23a09397eac402654de39a49e75491 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:54:56 +0200 Subject: [PATCH 109/334] Dataflow: Update StagePathNode.toString. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 8e70f6235fe..b9a4193dbb6 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2542,6 +2542,7 @@ module MakeImpl Lang> { /** Gets the `FlowState` of this node. */ abstract FlowState getState(); + /** Gets a textual representation of this element. */ abstract string toString(); predicate isSource() { none() } @@ -2594,9 +2595,39 @@ module MakeImpl Lang> { override FlowState getState() { result = state } - override string toString() { + private string ppType() { + exists(string ppt | ppt = t.toString() | + if ppt = "" then result = "" else result = " : " + ppt + ) + } + + private string ppAp() { + exists(string s | s = ap.toString() | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { result = " <" + cc + ">" } + + private string ppSummaryCtx() { + summaryCtx instanceof TParamNodeNone and result = "" + or + exists(ParamNode p, Ap argAp0 | + summaryCtx = TParamNodeSome(p) and argAp = apSome(argAp0) + | + result = " <" + p + " : " + argT + " " + argAp0 + ">" + ) + } + + override string toString() { result = node.toString() + this.ppType() + this.ppAp() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { result = - node.toString() + " " + cc.toString() + " " + t.toString() + " " + ap.toString() + node.toString() + this.ppType() + this.ppAp() + this.ppCtx() + this.ppSummaryCtx() } override predicate isSource() { From bc1dd45d4fede041a78f6065d3af5fa5dcf7a9d5 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:56:08 +0200 Subject: [PATCH 110/334] Dataflow: Make private --- .../dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index b9a4193dbb6..77eec1e907b 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2557,7 +2557,7 @@ module MakeImpl Lang> { predicate isArbitrarySink() { this instanceof TStagePathNodeSinkGrp } } - class StagePathNodeSrcGrp extends StagePathNodeImpl, TStagePathNodeSrcGrp { + private class StagePathNodeSrcGrp extends StagePathNodeImpl, TStagePathNodeSrcGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } @@ -2567,7 +2567,7 @@ module MakeImpl Lang> { override FlowState getState() { none() } } - class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { + private class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } @@ -2577,7 +2577,11 @@ module MakeImpl Lang> { override FlowState getState() { none() } } - class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { + /** + * An intermediate flow graph node. This is a tuple consisting of a node, + * a `FlowState`, a call context, a summary context, a tracked type, and an access path. + */ + private class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { NodeEx node; FlowState state; Cc cc; From b8d0b691da807ead4a6bdfb4bbb092a1f0529a4d Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 14:25:24 +0200 Subject: [PATCH 111/334] Dataflow: Introduce sink projection and add successor as member predicate. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 143 +++++++++++++++--- 1 file changed, 122 insertions(+), 21 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 77eec1e907b..ed00319dc0d 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2533,6 +2533,13 @@ module MakeImpl Lang> { fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) and revFlow(node, state, _, _, ap) } or + TStagePathNodeSink(NodeEx node, FlowState state) { + exists(StagePathNodeMid sink | + sink.isAtSink() and + node = sink.getNodeEx() and + state = sink.getState() + ) + } or TStagePathNodeSrcGrp() or TStagePathNodeSinkGrp() @@ -2542,13 +2549,17 @@ module MakeImpl Lang> { /** Gets the `FlowState` of this node. */ abstract FlowState getState(); + /** Holds if this node is a source. */ + abstract predicate isSource(); + + /** Holds if this node is a sink. */ + predicate isSink() { this instanceof TStagePathNodeSink } + + abstract StagePathNodeImpl getASuccessorImpl(string label); + /** Gets a textual representation of this element. */ abstract string toString(); - predicate isSource() { none() } - - predicate isSink() { none() } - /** Gets the location of this node. */ Location getLocation() { result = this.getNodeEx().getLocation() } @@ -2565,6 +2576,12 @@ module MakeImpl Lang> { override NodeEx getNodeEx() { none() } override FlowState getState() { none() } + + override StagePathNodeImpl getASuccessorImpl(string label) { + result.isSource() and label = "" + } + + override predicate isSource() { none() } } private class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { @@ -2575,6 +2592,10 @@ module MakeImpl Lang> { override NodeEx getNodeEx() { none() } override FlowState getState() { none() } + + override StagePathNodeImpl getASuccessorImpl(string label) { none() } + + override predicate isSource() { none() } } /** @@ -2599,6 +2620,48 @@ module MakeImpl Lang> { override FlowState getState() { result = state } + private StagePathNodeMid getSuccMid(string label) { + localStep(this, result, label) + or + nonLocalStep(this, result, label) + } + + private predicate isSourceWithLabel(string labelprefix) { + exists(string model | + this.isSource() and + sourceModel(node, model) and + model != "" and + labelprefix = "Src:" + model + " " + ) + } + + override StagePathNodeImpl getASuccessorImpl(string label) { + // an intermediate step to another intermediate node + exists(string l2 | result = this.getSuccMid(l2) | + not this.isSourceWithLabel(_) and label = l2 + or + exists(string l1 | + this.isSourceWithLabel(l1) and + label = l1 + l2 + ) + ) + or + // a final step to a sink + exists(string l2, string sinkmodel | + result = this.getSuccMid(l2).projectToSink(sinkmodel) + | + not this.isSourceWithLabel(_) and + if sinkmodel != "" then label = l2 + " Sink:" + sinkmodel else label = l2 + or + exists(string l1 | + this.isSourceWithLabel(l1) and + if sinkmodel != "" + then label = l1 + l2 + " Sink:" + sinkmodel + else label = l1 + l2 + ) + ) + } + private string ppType() { exists(string ppt | ppt = t.toString() | if ppt = "" then result = "" else result = " : " + ppt @@ -2642,7 +2705,7 @@ module MakeImpl Lang> { ap instanceof ApNil } - override predicate isSink() { + predicate isAtSink() { sinkNode(node, state) and ap instanceof ApNil and // For `FeatureHasSinkCallContext` the condition `cc instanceof CallContextNoCall` @@ -2662,6 +2725,37 @@ module MakeImpl Lang> { then instanceofCcNoCall(cc) else any() } + + StagePathNodeSink projectToSink(string model) { + this.isAtSink() and + sinkModel(node, model) and + result.getNodeEx() = node and + result.getState() = state + } + } + + /** + * A flow graph node corresponding to a sink. This is disjoint from the + * intermediate nodes in order to uniquely correspond to a given sink by + * excluding the call context. + */ + private class StagePathNodeSink extends StagePathNodeImpl, TStagePathNodeSink { + NodeEx node; + FlowState state; + + StagePathNodeSink() { this = TStagePathNodeSink(node, state) } + + override NodeEx getNodeEx() { result = node } + + override FlowState getState() { result = state } + + override string toString() { result = node.toString() } + + override StagePathNodeImpl getASuccessorImpl(string label) { + result.isArbitrarySink() and label = "" + } + + override predicate isSource() { sourceNode(node, state) } } pragma[nomagic] @@ -2795,7 +2889,7 @@ module MakeImpl Lang> { ) { pn1 = pn2 and summaryLabel = "" and - subpaths(_, pn1, _, _) + subpathsImpl(_, pn1, _, _) or exists(StagePathNodeImpl mid, string l1, string l2 | summaryLabel(pn1, mid, l1) and @@ -2806,7 +2900,7 @@ module MakeImpl Lang> { private predicate summaryStep(StagePathNodeImpl arg, StagePathNodeImpl out, string label) { exists(StagePathNodeImpl par, StagePathNodeImpl ret | - subpaths(arg, par, ret, out) and + subpathsImpl(arg, par, ret, out) and summaryLabel(par, ret, label) ) } @@ -2881,30 +2975,37 @@ module MakeImpl Lang> { ) } - query predicate subpaths( + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + * + * All of the nodes may be hidden. + */ + private predicate subpathsImpl( StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, StagePathNodeImpl out ) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap + ApOption argAp, Typ t0, Ap ap, StagePathNodeImpl out0 | fwdFlowThroughStep2(arg, par, ret, node, cc, state, summaryCtx, argT, argAp, t0, ap) and - out = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) + out0 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) + | + out = out0 or out = out0.(StagePathNodeMid).projectToSink(_) ) } - query predicate edges(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string key, string val) { - key = "provenance" and - ( - localStep(pn1, pn2, val) - or - nonLocalStep(pn1, pn2, val) - or - pn1.isArbitrarySource() and pn2.isSource() and val = "" - or - pn1.isSink() and pn2.isArbitrarySink() and val = "" - ) + module StagePathGraph { + predicate edges(StagePathNodeImpl a, StagePathNodeImpl b, string key, string val) { + a.getASuccessorImpl(val) = b and + key = "provenance" + } + + query predicate nodes(StagePathNodeImpl n, string key, string val) { + key = "semmle.label" and val = n.toString() + } + + query predicate subpaths = subpathsImpl/4; } } From c2b25c7f2b984aa2145c2248caff24f58fdda94e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 15:08:47 +0200 Subject: [PATCH 112/334] Dataflow: Check clearsContent on store targets in StagePathGraph. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 55 +++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index ed00319dc0d..da1825f8879 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1406,6 +1406,9 @@ module MakeImpl Lang> { bindingset[node, state, t0, ap] predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep); + bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -2842,11 +2845,12 @@ module MakeImpl Lang> { private predicate localStep( StagePathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, - TypOption argT, ApOption argAp, Typ t, Ap ap, string label + TypOption argT, ApOption argAp, Typ t, Ap ap, string label, boolean isStoreStep ) { exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | pn1 = TStagePathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and - localCc = getLocalCc(cc) + localCc = getLocalCc(cc) and + isStoreStep = false | localStep(mid, state0, node, state, true, _, localCc, label) and t = t0 @@ -2860,7 +2864,8 @@ module MakeImpl Lang> { pn1 = TStagePathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and fwdFlowStore(mid, t0, ap0, c, t, node, state, cc, summaryCtx, argT, argAp) and ap = apCons(c, t0, ap0) and - label = "" + label = "" and + isStoreStep = true ) or // read @@ -2868,17 +2873,19 @@ module MakeImpl Lang> { pn1 = TStagePathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and fwdFlowRead(t0, ap0, c, mid, node, state, cc, summaryCtx, argT, argAp) and fwdFlowConsCand(t0, ap0, c, t, ap) and - label = "" + label = "" and + isStoreStep = false ) } private predicate localStep(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string label) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap + ApOption argAp, Typ t0, Ap ap, boolean isStoreStep | - localStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label) and - pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) + localStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label, isStoreStep) and + pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + stepFilter(node, ap, isStoreStep) ) or summaryStep(pn1, pn2, label) @@ -2971,7 +2978,8 @@ module MakeImpl Lang> { ApOption argAp, Typ t0, Ap ap | nonLocalStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label) and - pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) + pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + stepFilter(node, ap, false) ) } @@ -2989,7 +2997,8 @@ module MakeImpl Lang> { ApOption argAp, Typ t0, Ap ap, StagePathNodeImpl out0 | fwdFlowThroughStep2(arg, par, ret, node, cc, state, summaryCtx, argT, argAp, t0, ap) and - out0 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) + out0 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + stepFilter(node, ap, false) | out = out0 or out = out0.(StagePathNodeMid).projectToSink(_) ) @@ -3181,6 +3190,9 @@ module MakeImpl Lang> { ) } + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep) { any() } + bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType) { any() } @@ -3459,6 +3471,9 @@ module MakeImpl Lang> { ) } + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep) { any() } + bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType) { any() } } @@ -3543,10 +3558,15 @@ module MakeImpl Lang> { private predicate clear(NodeEx node, Ap ap) { // When `node` is the target of a store, we interpret `clearsContent` as // only pertaining to _earlier_ store steps. In this case, we need to postpone - // checking `clearsContent` to the `pathStep` predicate + // checking `clearsContent` to the step creation. clearContent(node, ap.getHead(), false) } + pragma[nomagic] + private predicate clearExceptStore(NodeEx node, Ap ap) { + clearContent(node, ap.getHead(), true) + } + pragma[nomagic] private predicate expectsContentCand(NodeEx node, Ap ap) { exists(Content c | @@ -3569,6 +3589,11 @@ module MakeImpl Lang> { ) } + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep) { + if clearExceptStore(node, ap) then isStoreStep = true else any() + } + bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType) { // We need to typecheck stores here, since reverse flow through a getter @@ -3829,6 +3854,16 @@ module MakeImpl Lang> { exists(ap) } + pragma[nomagic] + private predicate clearExceptStore(NodeEx node, Ap ap) { + Stage4Param::clearContent(node, ap.getHead(), true) + } + + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep) { + if clearExceptStore(node, ap) then isStoreStep = true else any() + } + bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType) { compatibleTypesFilter(typ, contentType) From e594e7283d90d77e6d7fe1b7e03b5b29883f036c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 21 Aug 2024 10:18:01 +0200 Subject: [PATCH 113/334] Dataflow: Check stateful in/out-barriers in each stage. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index da1825f8879..6054dc4e27c 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1578,6 +1578,7 @@ module MakeImpl Lang> { fwdFlowThrough(call, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, innerArgApa) and flowThroughOutOfCall(call, ccc, ret, node, allowsFieldFlow, innerArgApa, apa) and + not inBarrier(node, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() ) } @@ -1610,6 +1611,8 @@ module MakeImpl Lang> { ) { exists(DataFlowType contentType, DataFlowType containerType, ApApprox apa1 | fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t1, ap1, apa1) and + not outBarrier(node1, state) and + not inBarrier(node2, state) and PrevStage::storeStepCand(node1, apa1, c, node2, contentType, containerType) and t2 = getTyp(containerType) and typecheckStore(t1, contentType) @@ -1651,6 +1654,8 @@ module MakeImpl Lang> { ) { exists(ApHeadContent apc | fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and + not outBarrier(node1, state) and + not inBarrier(node2, state) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1761,6 +1766,8 @@ module MakeImpl Lang> { or viableImplArgNotCallContextReduced(call, arg, outercc) ) and + not outBarrier(arg, state) and + not inBarrier(p, state) and callEdgeArgParamRestrictedInlineLate(call, inner, arg, p, allowsFieldFlow, apa) and (if allowsFieldFlow = false then emptyAp = true else any()) and if allowsFieldFlowThrough(call, inner) @@ -1888,6 +1895,7 @@ module MakeImpl Lang> { ApOption argAp, Typ t, Ap ap, ApApprox apa ) { instanceofCcNoCall(cc) and + not outBarrier(ret, state) and fwdFlow(ret, state, cc, summaryCtx, argT, argAp, t, ap, apa) } @@ -1925,6 +1933,7 @@ module MakeImpl Lang> { exists(RetNodeEx ret, CcNoCall innercc, boolean allowsFieldFlow | fwdFlowIntoRet(ret, state, innercc, summaryCtx, argT, argAp, t, ap, apa) and fwdFlowOutValidEdge(call, ret, innercc, inner, out, outercc, apa, allowsFieldFlow) and + not inBarrier(out, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() ) } @@ -2018,6 +2027,7 @@ module MakeImpl Lang> { fwdFlow(pragma[only_bind_into](ret), state, ccc, TParamNodeSome(pragma[only_bind_into](summaryCtx.asNode())), TypOption::some(argT), pragma[only_bind_into](apSome(argAp)), t, ap, pragma[only_bind_into](apa)) and + not outBarrier(ret, state) and kind = ret.getKind() and parameterFlowThroughAllowed(summaryCtx, kind) and argApa = getApprox(argAp) and @@ -2839,6 +2849,7 @@ module MakeImpl Lang> { fwdFlowThroughStep1(pn1, pn2, pn3, call, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, innerArgApa) and flowThroughOutOfCall(call, ccc, ret, node, allowsFieldFlow, innerArgApa, apa) and + not inBarrier(node, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() ) } @@ -2926,11 +2937,15 @@ module MakeImpl Lang> { | jumpStepEx(mid, node) and state = state0 and + not outBarrier(mid, state) and + not inBarrier(node, state) and t = t0 and label = "" or additionalJumpStep(mid, node, label) and state = state0 and + not outBarrier(mid, state) and + not inBarrier(node, state) and t = getNodeTyp(node) and ap instanceof ApNil or @@ -2967,6 +2982,7 @@ module MakeImpl Lang> { pn1 = TStagePathNodeMid(ret, state, innercc, summaryCtx, argT, argAp, t, ap) and fwdFlowIntoRet(ret, state, innercc, summaryCtx, argT, argAp, t, ap, apa) and fwdFlowOutValidEdge(_, ret, innercc, _, node, cc, apa, allowsFieldFlow) and + not inBarrier(node, state) and label = "" and if allowsFieldFlow = false then ap instanceof ApNil else any() ) From 831a66d812b4a4782c4247d1017e4e22cadd095f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 21 Aug 2024 10:21:32 +0200 Subject: [PATCH 114/334] Dataflow: Add getANonHiddenSuccessor to StagePathNodeImpl. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 6054dc4e27c..be41f435225 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2570,6 +2570,38 @@ module MakeImpl Lang> { abstract StagePathNodeImpl getASuccessorImpl(string label); + private StagePathNodeImpl getASuccessorIfHidden(string label) { + this.isHidden() and + result = this.getASuccessorImpl(label) + } + + private StagePathNodeImpl getASuccessorFromNonHidden(string label) { + result = this.getASuccessorImpl(label) and + not this.isHidden() + or + exists(string l1, string l2 | + result = this.getASuccessorFromNonHidden(l1).getASuccessorIfHidden(l2) and + label = mergeLabels(l1, l2) + ) + } + + final StagePathNodeImpl getANonHiddenSuccessor(string label) { + result = this.getASuccessorFromNonHidden(label) and not result.isHidden() + } + + predicate isHidden() { + not Config::includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof StagePathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + or + hiddenNode(this.getNodeEx().asParamReturnNode()) + ) + } + /** Gets a textual representation of this element. */ abstract string toString(); From 74739bedfc3414cda2ee13c9c282bc6f077c449f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 21 Aug 2024 10:27:51 +0200 Subject: [PATCH 115/334] Dataflow: Add Stage 6 instantiation. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index be41f435225..3992ce11697 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -4108,6 +4108,86 @@ module MakeImpl Lang> { ) } + private module Stage6Param implements MkStage::StageParam { + private module PrevStage = Stage5; + + class Typ = DataFlowType; + + class Ap = AccessPath; + + class ApNil = AccessPathNil; + + pragma[nomagic] + PrevStage::Ap getApprox(Ap ap) { result = ap.getApprox() } + + Typ getTyp(DataFlowType t) { result = t } + + bindingset[c, t, tail] + Ap apCons(Content c, Typ t, Ap tail) { result.isCons(c, t, tail) } + + class ApHeadContent = Content; + + pragma[noinline] + ApHeadContent getHeadContent(Ap ap) { result = ap.getHead() } + + ApHeadContent projectToHeadContent(Content c) { result = c } + + private module ApOption = Option; + + class ApOption = ApOption::Option; + + ApOption apNone() { result.isNone() } + + ApOption apSome(Ap ap) { result = ApOption::some(ap) } + + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + + predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + + predicate reducedViableImplInCallContextCand = + Stage5Param::reducedViableImplInCallContext/3; + + predicate reducedViableImplInReturnCand = Stage5Param::reducedViableImplInReturn/2; + } + + import CallContextSensitivity + import LocalCallContext + + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + Typ t, LocalCc lcc, string label + ) { + localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc, label) and + PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and + PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) + } + + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and + exists(state) and + exists(ap) + } + + pragma[nomagic] + private predicate clearExceptStore(NodeEx node, Ap ap) { + Stage4Param::clearContent(node, ap.getHead(), true) + } + + bindingset[node, ap, isStoreStep] + predicate stepFilter(NodeEx node, Ap ap, boolean isStoreStep) { + if clearExceptStore(node, ap) then isStoreStep = true else any() + } + + bindingset[typ, contentType] + predicate typecheckStore(Typ typ, DataFlowType contentType) { + compatibleTypesFilter(typ, contentType) + } + } + + module Stage6 = MkStage::Stage; + private module PrunedCallContextSensitivityStage5 { private module CallContextSensitivityInput implements CallContextSensitivityInputSig { predicate relevantCallEdgeIn = Stage5::relevantCallEdgeIn/2; From 1787bcb05a7ed8cb840a70c6dc0b5a81f9e151ae Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 21 Aug 2024 10:38:36 +0200 Subject: [PATCH 116/334] Dataflow: Replace PathNode with Stage implementation. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 1143 ++++------------- 1 file changed, 246 insertions(+), 897 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 3992ce11697..70c0b9ec6bf 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3064,6 +3064,241 @@ module MakeImpl Lang> { query predicate subpaths = subpathsImpl/4; } + + module Public { + private StagePathNodeImpl localStep(StagePathNodeImpl n) { localStep(n, result, _) } + + private predicate localStepToHidden(StagePathNodeImpl n1, StagePathNodeImpl n2) { + n2 = localStep(n1) and + n2.isHidden() + } + + private predicate localStepFromHidden(StagePathNodeImpl n1, StagePathNodeImpl n2) { + n2 = localStep(n1) and + n1.isHidden() + } + + bindingset[par, ret] + pragma[inline_late] + private predicate localStepStar(StagePathNodeImpl par, StagePathNodeImpl ret) { + localStep*(par) = ret + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + * + * `par` and `ret` are not hidden. + */ + pragma[nomagic] + private predicate subpaths1( + StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, + StagePathNodeImpl out + ) { + // direct subpath + subpathsImpl(arg, any(StagePathNodeImpl n | localStepFromHidden*(n, par)), + any(StagePathNodeImpl n | localStepToHidden*(ret, n)), out) and + not par.isHidden() and + not ret.isHidden() and + localStepStar(par, ret) + or + // wrapped subpath using hidden nodes, e.g. flow through a callback inside + // a summarized callable + exists(StagePathNodeImpl par0, StagePathNodeImpl ret0 | + subpaths1(any(StagePathNodeImpl n | localStepToHidden*(par0, n)), par, ret, + any(StagePathNodeImpl n | localStepFromHidden*(n, ret0))) and + subpathsImpl(arg, par0, ret0, out) + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + * + * None of the nodes are hidden. + */ + pragma[nomagic] + private predicate subpaths2( + StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, + StagePathNodeImpl out + ) { + exists(StagePathNodeImpl out0 | + subpaths1(any(StagePathNodeImpl n | localStepToHidden*(arg, n)), par, ret, + any(StagePathNodeImpl n | localStepFromHidden*(n, out0))) and + not arg.isHidden() and + not out0.isHidden() + | + out = out0 or out = out0.(StagePathNodeMid).projectToSink(_) + ) + } + + /** Holds if `n` is reachable from a source. */ + private predicate fwdReach(StagePathNodeImpl n) { + n.isArbitrarySource() + or + exists(StagePathNodeImpl mid | fwdReach(mid) and mid.getANonHiddenSuccessor(_) = n) + } + + /** Holds if `n` is reachable from a source and can reach a sink. */ + private predicate directReach(StagePathNodeImpl n) { + fwdReach(n) and + ( + n.isArbitrarySink() or + directReach(n.getANonHiddenSuccessor(_)) + ) + } + + /** + * Holds if `n` can reach a return node in a summarized subpath that can reach a sink. + */ + private predicate retReach(StagePathNodeImpl n) { + fwdReach(n) and + ( + exists(StagePathNodeImpl out | subpaths2(_, _, n, out) | + directReach(out) or retReach(out) + ) + or + exists(StagePathNodeImpl mid | + retReach(mid) and + n.getANonHiddenSuccessor(_) = mid and + not subpaths2(_, mid, _, _) + ) + ) + } + + /** Holds if `n` can reach a sink or is used in a subpath that can reach a sink. */ + private predicate reach(StagePathNodeImpl n) { directReach(n) or retReach(n) } + + /** + * A `Node` augmented with a call context (except for sinks) and an access path. + * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. + */ + class PathNode instanceof StagePathNodeImpl { + PathNode() { + reach(this) and + not this instanceof StagePathNodeSrcGrp and + not this instanceof StagePathNodeSinkGrp + } + + /** Gets a textual representation of this element. */ + final string toString() { result = super.toString() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + final string toStringWithContext() { + result = this.(StagePathNodeMid).toStringWithContext() + or + not this instanceof StagePathNodeMid and result = this.toString() + } + + /** Gets the location of this node. */ + Location getLocation() { result = super.getLocation() } + + /** Gets the underlying `Node`. */ + final Node getNode() { super.getNodeEx().projectToNode() = result } + + /** Gets the parameter node through which data is returned, if any. */ + final ParameterNode asParameterReturnNode() { + result = super.getNodeEx().asParamReturnNode() + } + + /** Gets the `FlowState` of this node. */ + final FlowState getState() { result = super.getState() } + + /** Gets a successor of this node, if any. */ + final PathNode getASuccessor() { result = super.getANonHiddenSuccessor(_) } + + /** Holds if this node is a source. */ + final predicate isSource() { super.isSource() } + + /** Holds if this node is a sink. */ + final predicate isSink() { this instanceof StagePathNodeSink } + + /** + * 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/). + */ + pragma[inline] + deprecated final predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation() + .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** + * DEPRECATED: This functionality is no longer available. + * + * Holds if this node is a grouping of source nodes. + */ + deprecated final predicate isSourceGroup(string group) { none() } + + /** + * DEPRECATED: This functionality is no longer available. + * + * Holds if this node is a grouping of sink nodes. + */ + deprecated final predicate isSinkGroup(string group) { none() } + } + + /** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ + private predicate pathSucc(StagePathNodeImpl n1, StagePathNodeImpl n2) { + n1.getANonHiddenSuccessor(_) = n2 and directReach(n2) + } + + private predicate tcSrc(StagePathNodeImpl n) { n.isSource() } + + private predicate tcSink(StagePathNodeImpl n) { n.isSink() } + + private predicate pathSuccPlus(StagePathNodeImpl n1, StagePathNodeImpl n2) = + doublyBoundedFastTC(pathSucc/2, tcSrc/1, tcSink/1)(n1, n2) + + /** + * Holds if data can flow from `source` to `sink`. + * + * The corresponding paths are generated from the end-points and the graph + * included in the module `PathGraph`. + */ + predicate flowPath(PathNode source, PathNode sink) { + exists(StagePathNodeImpl flowsource, StagePathNodeImpl flowsink | + source = flowsource and sink = flowsink + | + flowsource.isSource() and + (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and + flowsink.isSink() + ) + } + + /** + * Provides the query predicates needed to include a graph in a path-problem query. + */ + module PathGraph implements PathGraphSig { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PathNode a, PathNode b, string key, string val) { + a.(StagePathNodeImpl).getANonHiddenSuccessor(val) = b and + key = "provenance" + } + + /** Holds if `n` is a node in the graph of data flow path explanations. */ + query predicate nodes(PathNode n, string key, string val) { + key = "semmle.label" and val = n.toString() + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + query predicate subpaths(PathNode arg, PathNode par, PathNode ret, PathNode out) { + subpaths2(arg, par, ret, out) + } + } + } } additional predicate stats( @@ -4188,61 +4423,6 @@ module MakeImpl Lang> { module Stage6 = MkStage::Stage; - private module PrunedCallContextSensitivityStage5 { - private module CallContextSensitivityInput implements CallContextSensitivityInputSig { - predicate relevantCallEdgeIn = Stage5::relevantCallEdgeIn/2; - - predicate relevantCallEdgeOut = Stage5::relevantCallEdgeOut/2; - - predicate reducedViableImplInCallContextCand = - Stage5Param::reducedViableImplInCallContext/3; - - predicate reducedViableImplInReturnCand = Stage5Param::reducedViableImplInReturn/2; - } - - import CallContextSensitivity - import LocalCallContext - } - - private class CallContext = PrunedCallContextSensitivityStage5::Cc; - - private class CallContextCall = PrunedCallContextSensitivityStage5::CcCall; - - private class CallContextNoCall = PrunedCallContextSensitivityStage5::CcNoCall; - - private predicate callContextNone = PrunedCallContextSensitivityStage5::ccNone/0; - - private predicate callContextSomeCall = PrunedCallContextSensitivityStage5::ccSomeCall/0; - - private predicate sourceCallCtx(CallContext cc) { - if hasSourceCallCtx() then cc = callContextSomeCall() else cc = callContextNone() - } - - private newtype TPathNode = - TPathNodeMid( - NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap, - string summaryLabel - ) { - // A PathNode is introduced by a source ... - Stage5::revFlow(node, state) and - sourceNode(node, state) and - sourceCallCtx(cc) and - sc instanceof SummaryCtxNone and - t = node.getDataFlowType() and - ap = TAccessPathNil() and - summaryLabel = "-" - or - // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap, summaryLabel, _) - } or - TPathNodeSink(NodeEx node, FlowState state) { - exists(PathNodeMid sink | - sink.isAtSink(_) and - node = sink.getNodeEx() and - state = sink.getState() - ) - } - /** * A list of `Content`s where nested tails are also paired with a * `DataFlowType`. If data flows from a source to a given node with a given @@ -4411,830 +4591,23 @@ module MakeImpl Lang> { } } - abstract private class PathNodeImpl extends TPathNode { - /** Gets the `FlowState` of this node. */ - abstract FlowState getState(); + private module S6Graph = Stage6::Graph; - /** Holds if this node is a source. */ - abstract predicate isSource(string model); + private module S6 = S6Graph::Public; - abstract PathNodeImpl getASuccessorImpl(string label); - - private PathNodeImpl getASuccessorIfHidden(string label) { - this.isHidden() and - result = this.getASuccessorImpl(label) - } - - private PathNodeImpl getASuccessorFromNonHidden(string label) { - result = this.getASuccessorImpl(label) and - not this.isHidden() - or - exists(string l1, string l2 | - result = this.getASuccessorFromNonHidden(l1).getASuccessorIfHidden(l2) and - label = mergeLabels(l1, l2) - ) - } - - final PathNodeImpl getANonHiddenSuccessor(string label) { - result = this.getASuccessorFromNonHidden(label) and not result.isHidden() - } - - abstract NodeEx getNodeEx(); - - predicate isHidden() { - not Config::includeHiddenNodes() and - ( - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource(_) and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead - or - hiddenNode(this.getNodeEx().asParamReturnNode()) - ) - } - - predicate isFlowSource() { this.isSource(_) } - - predicate isFlowSink() { this instanceof PathNodeSink } - - private string ppType() { - this instanceof PathNodeSink and result = "" - or - exists(string t | t = this.(PathNodeMid).getType().toString() | - if t = "" then result = "" else result = " : " + t - ) - } - - private string ppAp() { - this instanceof PathNodeSink and result = "" - or - exists(string s | s = this.(PathNodeMid).getAp().toString() | - if s = "" then result = "" else result = " " + s - ) - } - - private string ppCtx() { - this instanceof PathNodeSink and result = "" - or - result = " <" + this.(PathNodeMid).getCallContext().toString() + ">" - } - - private string ppSummaryCtx() { - this instanceof PathNodeSink and result = "" - or - result = " <" + this.(PathNodeMid).getSummaryCtx().toString() + ">" - } - - /** Gets a textual representation of this element. */ - string toString() { result = this.getNodeEx().toString() + this.ppType() + this.ppAp() } - - /** - * Gets a textual representation of this element, including a textual - * representation of the call context. - */ - string toStringWithContext() { - result = - this.getNodeEx().toString() + this.ppType() + this.ppAp() + this.ppCtx() + - this.ppSummaryCtx() - } - - /** Gets the location of this node. */ - Location getLocation() { result = this.getNodeEx().getLocation() } - } - - /** Holds if `n` can reach a sink. */ - private predicate directReach(PathNodeImpl n) { - n instanceof PathNodeSink or - directReach(n.getANonHiddenSuccessor(_)) - } - - /** Holds if `n` can reach a sink or is used in a subpath that can reach a sink. */ - private predicate reach(PathNodeImpl n) { directReach(n) or Subpaths::retReach(n) } - - /** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ - private predicate pathSucc(PathNodeImpl n1, PathNodeImpl n2) { - n1.getANonHiddenSuccessor(_) = n2 and directReach(n2) - } - - private predicate tcSrc(PathNodeImpl n) { n.isFlowSource() or n.isSource(_) } - - private predicate tcSink(PathNodeImpl n) { n.isFlowSink() or n instanceof PathNodeSink } - - private predicate pathSuccPlus(PathNodeImpl n1, PathNodeImpl n2) = - doublyBoundedFastTC(pathSucc/2, tcSrc/1, tcSink/1)(n1, n2) - - /** - * A `Node` augmented with a call context (except for sinks) and an access path. - * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. - */ - class PathNode instanceof PathNodeImpl { - PathNode() { reach(this) } - - /** Gets a textual representation of this element. */ - final string toString() { result = super.toString() } - - /** - * Gets a textual representation of this element, including a textual - * representation of the call context. - */ - final string toStringWithContext() { result = super.toStringWithContext() } - - /** Gets the location of this node. */ - Location getLocation() { result = super.getLocation() } - - /** - * 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/). - */ - pragma[inline] - deprecated final predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - - /** Gets the underlying `Node`. */ - final Node getNode() { super.getNodeEx().projectToNode() = result } - - /** Gets the parameter node through which data is returned, if any. */ - final ParameterNode asParameterReturnNode() { result = super.getNodeEx().asParamReturnNode() } - - /** Gets the `FlowState` of this node. */ - final FlowState getState() { result = super.getState() } - - /** Gets a successor of this node, if any. */ - final PathNode getASuccessor() { result = super.getANonHiddenSuccessor(_) } - - /** Holds if this node is a source. */ - final predicate isSource() { super.isSource(_) } - - /** - * DEPRECATED: This functionality is no longer available. - * - * Holds if this node is a grouping of source nodes. - */ - deprecated final predicate isSourceGroup(string group) { none() } - - /** - * DEPRECATED: This functionality is no longer available. - * - * Holds if this node is a grouping of sink nodes. - */ - deprecated final predicate isSinkGroup(string group) { none() } - } - - /** - * Provides the query predicates needed to include a graph in a path-problem query. - */ - module PathGraph implements PathGraphSig { - /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - query predicate edges(PathNode a, PathNode b, string key, string val) { - a.(PathNodeImpl).getANonHiddenSuccessor(val) = b and - key = "provenance" - } - - /** Holds if `n` is a node in the graph of data flow path explanations. */ - query predicate nodes(PathNode n, string key, string val) { - key = "semmle.label" and val = n.toString() - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through - * a subpath between `par` and `ret` with the connecting edges `arg -> par` and - * `ret -> out` is summarized as the edge `arg -> out`. - */ - query predicate subpaths(PathNode arg, PathNode par, PathNode ret, PathNode out) { - Subpaths::subpaths(arg, par, ret, out) - } - } - - /** - * An intermediate flow graph node. This is a tuple consisting of a `Node`, - * a `FlowState`, a `CallContext`, a `SummaryCtx`, and an `AccessPath`. - */ - private class PathNodeMid extends PathNodeImpl, TPathNodeMid { - NodeEx node; - FlowState state; - CallContext cc; - SummaryCtx sc; - DataFlowType t; - AccessPath ap; - string summaryLabel; - - PathNodeMid() { this = TPathNodeMid(node, state, cc, sc, t, ap, summaryLabel) } - - override NodeEx getNodeEx() { result = node } - - pragma[inline] - final NodeEx getNodeExOutgoing() { result = node and not outBarrier(node, state) } - - override FlowState getState() { result = state } - - CallContext getCallContext() { result = cc } - - SummaryCtx getSummaryCtx() { result = sc } - - DataFlowType getType() { result = t } - - AccessPath getAp() { result = ap } - - string getSummaryLabel() { result = summaryLabel } - - private PathNodeMid getSuccMid(string label) { - pathStep(this, result.getNodeEx(), result.getState(), result.getCallContext(), - result.getSummaryCtx(), result.getType(), result.getAp(), result.getSummaryLabel(), label) - } - - private predicate isSourceWithLabel(string labelprefix) { - exists(string model | - this.isSource(model) and - model != "" and - labelprefix = "Src:" + model + " " - ) - } - - override PathNodeImpl getASuccessorImpl(string label) { - // an intermediate step to another intermediate node - exists(string l2 | result = this.getSuccMid(l2) | - not this.isSourceWithLabel(_) and label = l2 - or - exists(string l1 | - this.isSourceWithLabel(l1) and - label = l1 + l2 - ) - ) - or - // a final step to a sink - exists(string l2, string sinkmodel | result = this.getSuccMid(l2).projectToSink(sinkmodel) | - not this.isSourceWithLabel(_) and - if sinkmodel != "" then label = l2 + " Sink:" + sinkmodel else label = l2 - or - exists(string l1 | - this.isSourceWithLabel(l1) and - if sinkmodel != "" then label = l1 + l2 + " Sink:" + sinkmodel else label = l1 + l2 - ) - ) - } - - override predicate isSource(string model) { - sourceNode(node, state) and - sourceModel(node, model) and - sourceCallCtx(cc) and - sc instanceof SummaryCtxNone and - t = node.getDataFlowType() and - ap = TAccessPathNil() - } - - predicate isAtSink(string model) { - sinkNode(node, state) and - sinkModel(node, model) and - ap instanceof AccessPathNil and - // For `FeatureHasSinkCallContext` the condition `cc instanceof CallContextNoCall` - // is exactly what we need to check. - // For `FeatureEqualSourceSinkCallContext` the initial call context was - // set to `CallContextSomeCall` and jumps are disallowed, so - // `cc instanceof CallContextNoCall` never holds. On the other hand, - // in this case there's never any need to enter a call except to identify - // a summary, so the condition in `pathIntoCallable` enforces this, which - // means that `sc instanceof SummaryCtxNone` holds if and only if we are - // in the call context of the source. - if Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext - then sc instanceof SummaryCtxNone - else - if Config::getAFeature() instanceof FeatureHasSinkCallContext - then cc instanceof CallContextNoCall - else any() - } - - PathNodeSink projectToSink(string model) { - this.isAtSink(model) and - result.getNodeEx() = node and - result.getState() = state - } - } - - /** - * A flow graph node corresponding to a sink. This is disjoint from the - * intermediate nodes in order to uniquely correspond to a given sink by - * excluding the `CallContext`. - */ - private class PathNodeSink extends PathNodeImpl, TPathNodeSink { - NodeEx node; - FlowState state; - - PathNodeSink() { this = TPathNodeSink(node, state) } - - override NodeEx getNodeEx() { result = node } - - override FlowState getState() { result = state } - - override PathNodeImpl getASuccessorImpl(string label) { none() } - - override predicate isSource(string model) { - sourceNode(node, state) and sourceModel(node, model) - } - } - - private predicate pathNode( - PathNodeMid mid, NodeEx midnode, FlowState state, CallContext cc, SummaryCtx sc, - DataFlowType t, AccessPath ap, string summaryLabel, LocalCallContext localCC - ) { - midnode = mid.getNodeEx() and - state = mid.getState() and - cc = mid.getCallContext() and - sc = mid.getSummaryCtx() and - localCC = PrunedCallContextSensitivityStage5::getLocalCc(cc) and - t = mid.getType() and - ap = mid.getAp() and - summaryLabel = mid.getSummaryLabel() - } - - private predicate pathStep( - PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, - AccessPath ap, string summaryLabel, string label - ) { - exists(DataFlowType t0, boolean isStoreStep | - pathStep0(mid, pragma[only_bind_into](node), pragma[only_bind_into](state), cc, sc, t0, ap, - isStoreStep, summaryLabel, label) and - Stage5::revFlow(pragma[only_bind_into](node), pragma[only_bind_into](state), ap.getApprox()) and - strengthenType(node, t0, t) and - not inBarrier(node, state) and - if ap.storeTargetIsClearedAt(node) then isStoreStep = true else any() - ) - } - - /** - * Holds if data may flow from `mid` to `node`. The last step in or out of - * a callable is recorded by `cc`. - */ - pragma[nomagic] - private predicate pathStep0( - PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, - AccessPath ap, boolean isStoreStep, string summaryLabel, string label - ) { - exists(NodeEx midnode, FlowState state0, string sl, LocalCallContext localCC | - pathNode(mid, midnode, state0, cc, sc, t, ap, sl, localCC) and - localFlowBigStep(midnode, state0, node, state, true, _, localCC, label) and - isStoreStep = false and - summaryLabel = mergeLabels(sl, label) - ) - or - exists(NodeEx midnode, FlowState state0, string sl, LocalCallContext localCC | - pathNode(mid, midnode, state0, cc, sc, _, ap, sl, localCC) and - localFlowBigStep(midnode, state0, node, state, false, t, localCC, label) and - ap instanceof AccessPathNil and - isStoreStep = false and - summaryLabel = mergeLabels(sl, label) - ) - or - jumpStepEx(mid.getNodeExOutgoing(), node) and - state = mid.getState() and - cc = callContextNone() and - sc instanceof SummaryCtxNone and - t = mid.getType() and - ap = mid.getAp() and - isStoreStep = false and - summaryLabel = "-" and - label = "" - or - additionalJumpStep(mid.getNodeExOutgoing(), node, label) and - state = mid.getState() and - cc = callContextNone() and - sc instanceof SummaryCtxNone and - mid.getAp() instanceof AccessPathNil and - t = node.getDataFlowType() and - ap = TAccessPathNil() and - isStoreStep = false and - summaryLabel = "-" - or - additionalJumpStateStep(mid.getNodeExOutgoing(), mid.getState(), node, state) and - cc = callContextNone() and - sc instanceof SummaryCtxNone and - mid.getAp() instanceof AccessPathNil and - t = node.getDataFlowType() and - ap = TAccessPathNil() and - isStoreStep = false and - summaryLabel = "-" and - label = "Config" - or - exists(Content c, DataFlowType t0, AccessPath ap0 | - pathStoreStep(mid, node, state, t0, ap0, c, t, cc) and - ap.isCons(c, t0, ap0) and - sc = mid.getSummaryCtx() and - isStoreStep = true and - summaryLabel = mid.getSummaryLabel() and - label = "" - ) - or - exists(Content c, AccessPath ap0 | - pathReadStep(mid, node, state, ap0, c, cc) and - ap0.isCons(c, t, ap) and - sc = mid.getSummaryCtx() and - isStoreStep = false and - summaryLabel = mid.getSummaryLabel() and - label = "" - ) - or - pathIntoCallable(mid, node, state, _, cc, sc, _) and - t = mid.getType() and - ap = mid.getAp() and - isStoreStep = false and - (if sc instanceof SummaryCtxNone then summaryLabel = "-" else summaryLabel = "") and - label = "" - or - pathOutOfCallable(mid, node, state, cc) and - t = mid.getType() and - ap = mid.getAp() and - sc instanceof SummaryCtxNone and - isStoreStep = false and - summaryLabel = "-" and - label = "" - or - pathThroughCallable(mid, node, state, cc, t, ap, label) and - sc = mid.getSummaryCtx() and - isStoreStep = false and - summaryLabel = mergeLabels(mid.getSummaryLabel(), label) - } - - pragma[nomagic] - private predicate pathReadStep( - PathNodeMid mid, NodeEx node, FlowState state, AccessPath ap0, Content c, CallContext cc - ) { - ap0 = mid.getAp() and - c = ap0.getHead() and - Stage5::readStepCand(mid.getNodeExOutgoing(), c, node) and - state = mid.getState() and - cc = mid.getCallContext() - } - - pragma[nomagic] - private predicate pathStoreStep( - PathNodeMid mid, NodeEx node, FlowState state, DataFlowType t0, AccessPath ap0, Content c, - DataFlowType t, CallContext cc - ) { - exists(DataFlowType contentType | - t0 = mid.getType() and - ap0 = mid.getAp() and - Stage5::storeStepCand(mid.getNodeExOutgoing(), _, c, node, contentType, t) and - state = mid.getState() and - cc = mid.getCallContext() and - compatibleTypesFilter(t0, contentType) - ) - } - - private predicate pathOutOfCallable0( - PathNodeMid mid, ReturnPosition pos, FlowState state, CallContext innercc, - AccessPathApprox apa - ) { - exists(RetNodeEx retNode | - retNode = mid.getNodeEx() and - pos = retNode.getReturnPosition() and - state = mid.getState() and - not outBarrier(retNode, state) and - innercc = mid.getCallContext() and - innercc instanceof CallContextNoCall and - apa = mid.getAp().getApprox() and - not outBarrier(retNode, state) - ) - } - - pragma[nomagic] - private predicate pathOutOfCallable1( - PathNodeMid mid, DataFlowCall call, ReturnKindExt kind, FlowState state, CallContext cc, - AccessPathApprox apa - ) { - exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | - pathOutOfCallable0(mid, pos, state, innercc, apa) and - c = pos.getCallable() and - kind = pos.getKind() and - PrunedCallContextSensitivityStage5::resolveReturn(innercc, c, call) and - cc = PrunedCallContextSensitivityStage5::getCallContextReturn(c, call) - ) - } - - pragma[noinline] - private NodeEx getAnOutNodeFlow(ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa) { - result.asNode() = kind.getAnOutNode(call) and - Stage5::revFlow(result, _, apa) - } - - /** - * Holds if data may flow from `mid` to `out`. The last step of this path - * is a return from a callable and is recorded by `cc`, if needed. - */ - pragma[noinline] - private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, FlowState state, CallContext cc) { - exists(ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa | - pathOutOfCallable1(mid, call, kind, state, cc, apa) and - out = getAnOutNodeFlow(kind, call, apa) and - not inBarrier(out, state) - ) - } - - /** - * Holds if data may flow from `mid` to the `i`th argument of `call` in `cc`. - */ - pragma[noinline] - private predicate pathIntoArg( - PathNodeMid mid, ParameterPosition ppos, FlowState state, CallContext cc, DataFlowCall call, - DataFlowType t, AccessPath ap, AccessPathApprox apa - ) { - exists(ArgNodeEx arg, ArgumentPosition apos | - pathNode(mid, arg, state, cc, _, t, ap, _, _) and - not outBarrier(arg, state) and - arg.asNode().(ArgNode).argumentOf(call, apos) and - apa = ap.getApprox() and - parameterMatch(ppos, apos) - ) - } - - pragma[nomagic] - private predicate parameterCand( - DataFlowCallable callable, ParameterPosition pos, AccessPathApprox apa - ) { - exists(ParamNodeEx p | - Stage5::revFlow(p, _, apa) and - p.isParameterOf(callable, pos) - ) - } - - pragma[nomagic] - private predicate pathIntoCallable0( - PathNodeMid mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, - CallContext outercc, DataFlowCall call, DataFlowType t, AccessPath ap - ) { - exists(AccessPathApprox apa | - pathIntoArg(mid, pragma[only_bind_into](pos), state, outercc, call, t, ap, - pragma[only_bind_into](apa)) and - callable = PrunedCallContextSensitivityStage5::resolveCall(call, outercc) and - parameterCand(callable, pragma[only_bind_into](pos), pragma[only_bind_into](apa)) - ) - } - - /** - * Holds if data may flow from `mid` to `p` through `call`. The contexts - * before and after entering the callable are `outercc` and `innercc`, - * respectively. - */ - pragma[nomagic] - private predicate pathIntoCallable( - PathNodeMid mid, ParamNodeEx p, FlowState state, CallContext outercc, CallContextCall innercc, - SummaryCtx sc, DataFlowCall call - ) { - exists(ParameterPosition pos, DataFlowCallable callable, DataFlowType t, AccessPath ap | - pathIntoCallable0(mid, callable, pos, state, outercc, call, t, ap) and - p.isParameterOf(callable, pos) and - not inBarrier(p, state) and - ( - sc = TSummaryCtxSome(p, state, t, ap) - or - not exists(TSummaryCtxSome(p, state, t, ap)) and - sc = TSummaryCtxNone() and - // When the call contexts of source and sink needs to match then there's - // never any reason to enter a callable except to find a summary. See also - // the comment in `PathNodeMid::isAtSink`. - not Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext - ) and - innercc = PrunedCallContextSensitivityStage5::getCallContextCall(call, callable) - ) - } - - /** Holds if data may flow from a parameter given by `sc` to a return of kind `kind`. */ - pragma[nomagic] - private predicate paramFlowsThrough( - ReturnKindExt kind, FlowState state, CallContextCall cc, SummaryCtxSome sc, DataFlowType t, - AccessPath ap, AccessPathApprox apa, string summaryLabel - ) { - exists(RetNodeEx ret | - pathNode(_, ret, state, cc, sc, t, ap, summaryLabel, _) and - kind = ret.getKind() and - apa = ap.getApprox() and - parameterFlowThroughAllowed(sc.getParamNode(), kind) and - not outBarrier(ret, state) - ) - } - - pragma[nomagic] - private predicate pathThroughCallable0( - DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, - DataFlowType t, AccessPath ap, AccessPathApprox apa, string label - ) { - exists(CallContext innercc, SummaryCtx sc | - pathIntoCallable(mid, _, _, cc, innercc, sc, call) and - paramFlowsThrough(kind, state, innercc, sc, t, ap, apa, label) - ) - } - - /** - * Holds if data may flow from `mid` through a callable to the node `out`. - * The context `cc` is restored to its value prior to entering the callable. - */ - pragma[noinline] - private predicate pathThroughCallable( - PathNodeMid mid, NodeEx out, FlowState state, CallContext cc, DataFlowType t, AccessPath ap, - string label - ) { - exists(DataFlowCall call, ReturnKindExt kind, AccessPathApprox apa | - pathThroughCallable0(call, mid, kind, state, cc, t, ap, apa, label) and - out = getAnOutNodeFlow(kind, call, apa) - ) - } - - private module Subpaths { - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by - * `kind`, `sc`, `apout`, and `innercc`. - */ - pragma[nomagic] - private predicate subpaths01( - PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, - ReturnKindExt kind, NodeEx out, FlowState sout, DataFlowType t, AccessPath apout - ) { - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](t), - pragma[only_bind_into](apout), _) and - pathIntoCallable(arg, par, _, _, innercc, sc, _) and - paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, - pragma[only_bind_into](t), pragma[only_bind_into](apout), _, _) - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by - * `kind`, `sc`, `sout`, `apout`, and `innercc`. - */ - pragma[nomagic] - private predicate subpaths02( - PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, - ReturnKindExt kind, NodeEx out, FlowState sout, DataFlowType t, AccessPath apout - ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, t, apout) and - out.asNode() = kind.getAnOutNode(_) - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple. - */ - pragma[nomagic] - private predicate subpaths03( - PathNodeImpl arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - DataFlowType t, AccessPath apout - ) { - exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, t, apout) and - pathNode(ret, retnode, sout, innercc, sc, t, apout, _, _) and - kind = retnode.getKind() - ) - } - - private PathNodeImpl localStep(PathNodeImpl n) { - n.getASuccessorImpl(_) = result and - exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | - localFlowBigStep(n1, _, n2, _, _, _, _, _) or - storeEx(n1, _, n2, _, _) or - readSetEx(n1, _, n2) - ) - } - - private PathNodeImpl summaryCtxStep(PathNodeImpl n) { - n.getASuccessorImpl(_) = result and - exists(SummaryCtxSome sc | - pathNode(n, _, _, _, pragma[only_bind_into](sc), _, _, _, _) and - pathNode(result, _, _, _, pragma[only_bind_into](sc), _, _, _, _) - ) - } - - private predicate localStepToHidden(PathNodeImpl n1, PathNodeImpl n2) { - n2 = localStep(n1) and - n2.isHidden() - } - - private predicate localStepFromHidden(PathNodeImpl n1, PathNodeImpl n2) { - n2 = localStep(n1) and - n1.isHidden() - } - - pragma[nomagic] - private predicate hasSuccessor(PathNodeImpl pred, PathNodeMid succ, NodeEx succNode) { - succ = pred.getASuccessorImpl(_) and - succNode = succ.getNodeEx() - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple. - * - * All of the nodes may be hidden. - */ - pragma[nomagic] - private predicate subpaths04( - PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out - ) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, DataFlowType t0, DataFlowType t, - AccessPath apout, PathNodeMid out0 - | - pragma[only_bind_into](arg).getASuccessorImpl(_) = pragma[only_bind_into](out0) and - subpaths03(pragma[only_bind_into](arg), p, ret, o, sout, t0, apout) and - hasSuccessor(pragma[only_bind_into](arg), par, p) and - strengthenType(o, t0, t) and - pathNode(out0, o, sout, _, _, t, apout, _, _) - | - out = out0 or out = out0.projectToSink(_) - ) - } - - bindingset[par, ret] - pragma[inline_late] - private predicate summaryCtxStepStar(PathNodeImpl par, PathNodeImpl ret) { - summaryCtxStep*(par) = ret - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple. - * - * `par` and `ret` are not hidden. - */ - pragma[nomagic] - private predicate subpaths05( - PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out - ) { - // direct subpath - subpaths04(arg, any(PathNodeImpl n | localStepFromHidden*(n, par)), - any(PathNodeImpl n | localStepToHidden*(ret, n)), out) and - not par.isHidden() and - not ret.isHidden() and - summaryCtxStepStar(par, ret) - or - // wrapped subpath using hidden nodes, e.g. flow through a callback inside - // a summarized callable - exists(PathNodeImpl par0, PathNodeImpl ret0 | - subpaths05(any(PathNodeImpl n | localStepToHidden*(par0, n)), par, ret, - any(PathNodeImpl n | localStepFromHidden*(n, ret0))) and - subpaths04(arg, par0, ret0, out) - ) - } - - /** - * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through - * a subpath between `par` and `ret` with the connecting edges `arg -> par` and - * `ret -> out` is summarized as the edge `arg -> out`. - * - * None of the nodes are hidden. - */ - pragma[nomagic] - predicate subpaths(PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out) { - subpaths05(any(PathNodeImpl n | localStepToHidden*(arg, n)), par, ret, - any(PathNodeImpl n | localStepFromHidden*(n, out))) and - not arg.isHidden() and - not out.isHidden() - } - - /** - * Holds if `n` can reach a return node in a summarized subpath that can reach a sink. - */ - predicate retReach(PathNodeImpl n) { - exists(PathNodeImpl out | subpaths(_, _, n, out) | directReach(out) or retReach(out)) - or - exists(PathNodeImpl mid | - retReach(mid) and - n.getANonHiddenSuccessor(_) = mid and - not subpaths(_, mid, _, _) - ) - } - } - - /** - * Holds if data can flow from `source` to `sink`. - * - * The corresponding paths are generated from the end-points and the graph - * included in the module `PathGraph`. - */ - predicate flowPath(PathNode source, PathNode sink) { - exists(PathNodeImpl flowsource, PathNodeImpl flowsink | - source = flowsource and sink = flowsink - | - flowsource.isFlowSource() and - (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and - flowsink.isFlowSink() - ) - } + import S6 /** DEPRECATED: Use `flowPath` instead. */ deprecated predicate hasFlowPath = flowPath/2; - private predicate flowsTo(PathNodeImpl flowsource, PathNodeSink flowsink, Node source, Node sink) { - flowsource.isSource(_) and - flowsource.getNodeEx().asNode() = source and - (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and - flowsink.getNodeEx().asNode() = sink - } - /** * Holds if data can flow from `source` to `sink`. */ - predicate flow(Node source, Node sink) { flowsTo(_, _, source, sink) } + predicate flow(Node source, Node sink) { + exists(PathNode source0, PathNode sink0 | + flowPath(source0, sink0) and source0.getNode() = source and sink0.getNode() = sink + ) + } /** DEPRECATED: Use `flow` instead. */ deprecated predicate hasFlow = flow/2; @@ -5242,7 +4615,7 @@ module MakeImpl Lang> { /** * Holds if data can flow from some source to `sink`. */ - predicate flowTo(Node sink) { sink = any(PathNodeSink n).getNodeEx().asNode() } + predicate flowTo(Node sink) { exists(PathNode n | n.isSink() and n.getNode() = sink) } /** DEPRECATED: Use `flowTo` instead. */ deprecated predicate hasFlowTo = flowTo/1; @@ -5255,24 +4628,6 @@ module MakeImpl Lang> { /** DEPRECATED: Use `flowToExpr` instead. */ deprecated predicate hasFlowToExpr = flowToExpr/1; - private predicate finalStats( - boolean fwd, int nodes, int fields, int conscand, int states, int tuples - ) { - fwd = true and - nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0)) and - fields = count(Content f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0)) and - conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap)) and - states = count(FlowState state | exists(PathNodeMid pn | pn.getState() = state)) and - tuples = count(PathNodeImpl pn) - or - fwd = false and - nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0 and reach(pn))) and - fields = count(Content f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0 and reach(pn))) and - conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap and reach(pn))) and - states = count(FlowState state | exists(PathNodeMid pn | pn.getState() = state and reach(pn))) and - tuples = count(PathNode pn) - } - /** * INTERNAL: Only for debugging. * @@ -5387,17 +4742,11 @@ module MakeImpl Lang> { or stage = "6 Fwd" and n = 60 and - finalStats(true, nodes, fields, conscand, states, tuples) and - calledges = -1 and - tfnodes = -1 and - tftuples = -1 + Stage6::stats(true, nodes, fields, conscand, states, tuples, calledges, tfnodes, tftuples) or stage = "6 Rev" and n = 65 and - finalStats(false, nodes, fields, conscand, states, tuples) and - calledges = -1 and - tfnodes = -1 and - tftuples = -1 + Stage6::stats(false, nodes, fields, conscand, states, tuples, calledges, tfnodes, tftuples) } } From 273c0bd1217c4efd2a58dc3e7a085345ae906784 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 15:08:47 +0200 Subject: [PATCH 117/334] Dataflow: Delete dead code. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 53 ------------------- 1 file changed, 53 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 70c0b9ec6bf..d2441852c9f 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -4175,49 +4175,6 @@ module MakeImpl Lang> { ) } - private newtype TSummaryCtx = - TSummaryCtxNone() or - TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { - exists(AccessPathApprox apa | ap.getApprox() = apa | - Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and - Stage5::revFlow(p, state, _) - ) - } - - /** - * A context for generating flow summaries. This represents flow entry through - * a specific parameter with an access path of a specific shape. - * - * Summaries are only created for parameters that may flow through. - */ - abstract private class SummaryCtx extends TSummaryCtx { - abstract string toString(); - } - - /** A summary context from which no flow summary can be generated. */ - private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { - override string toString() { result = "" } - } - - /** A summary context from which a flow summary can be generated. */ - private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { - private ParamNodeEx p; - private FlowState s; - private DataFlowType t; - private AccessPath ap; - - SummaryCtxSome() { this = TSummaryCtxSome(p, s, t, ap) } - - ParamNodeEx getParamNode() { result = p } - - private string ppTyp() { result = t.toString() and result != "" } - - override string toString() { result = p + concat(" : " + this.ppTyp()) + " " + ap } - - Location getLocation() { result = p.getLocation() } - } - pragma[nomagic] private predicate stage5ConsCand(Content c, DataFlowType t, AccessPathFront apf, int len) { Stage5::consCand(c, t, any(AccessPathApprox ap | ap.getFront() = apf and ap.len() = len - 1)) @@ -4448,16 +4405,6 @@ module MakeImpl Lang> { /** Gets a textual representation of this access path. */ abstract string toString(); - - /** Holds if `node`, which is the target of a store step, clears data stored in this access path. */ - pragma[nomagic] - predicate storeTargetIsClearedAt(NodeEx node) { - exists(AccessPathApprox apa | - apa = this.getApprox() and - Stage5::revFlowAp(node, apa) and - Stage4Param::clearContent(node, apa.getHead(), true) - ) - } } private class AccessPathNil extends AccessPath, TAccessPathNil { From 5fbdd83a23453ad6f80ee5c564d2f52cc57948e2 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Aug 2024 11:39:55 +0200 Subject: [PATCH 118/334] Dataflow: Rename StagePathNode to PathNode. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 198 +++++++++--------- 1 file changed, 95 insertions(+), 103 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index d2441852c9f..379a618dbdf 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2538,25 +2538,25 @@ module MakeImpl Lang> { * Provides a graph representation of the data flow in this stage suitable for use in a `path-problem` query. */ additional module Graph { - private newtype TStagePathNode = - TStagePathNodeMid( + private newtype TPathNode = + TPathNodeMid( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap ) { fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) and revFlow(node, state, _, _, ap) } or - TStagePathNodeSink(NodeEx node, FlowState state) { - exists(StagePathNodeMid sink | + TPathNodeSink(NodeEx node, FlowState state) { + exists(PathNodeMid sink | sink.isAtSink() and node = sink.getNodeEx() and state = sink.getState() ) } or - TStagePathNodeSrcGrp() or - TStagePathNodeSinkGrp() + TPathNodeSrcGrp() or + TPathNodeSinkGrp() - class StagePathNodeImpl extends TStagePathNode { + class PathNodeImpl extends TPathNode { abstract NodeEx getNodeEx(); /** Gets the `FlowState` of this node. */ @@ -2566,16 +2566,16 @@ module MakeImpl Lang> { abstract predicate isSource(); /** Holds if this node is a sink. */ - predicate isSink() { this instanceof TStagePathNodeSink } + predicate isSink() { this instanceof TPathNodeSink } - abstract StagePathNodeImpl getASuccessorImpl(string label); + abstract PathNodeImpl getASuccessorImpl(string label); - private StagePathNodeImpl getASuccessorIfHidden(string label) { + private PathNodeImpl getASuccessorIfHidden(string label) { this.isHidden() and result = this.getASuccessorImpl(label) } - private StagePathNodeImpl getASuccessorFromNonHidden(string label) { + private PathNodeImpl getASuccessorFromNonHidden(string label) { result = this.getASuccessorImpl(label) and not this.isHidden() or @@ -2585,7 +2585,7 @@ module MakeImpl Lang> { ) } - final StagePathNodeImpl getANonHiddenSuccessor(string label) { + final PathNodeImpl getANonHiddenSuccessor(string label) { result = this.getASuccessorFromNonHidden(label) and not result.isHidden() } @@ -2594,7 +2594,7 @@ module MakeImpl Lang> { ( hiddenNode(this.getNodeEx().asNode()) and not this.isSource() and - not this instanceof StagePathNodeSink + not this instanceof PathNodeSink or this.getNodeEx() instanceof TNodeImplicitRead or @@ -2608,12 +2608,12 @@ module MakeImpl Lang> { /** Gets the location of this node. */ Location getLocation() { result = this.getNodeEx().getLocation() } - predicate isArbitrarySource() { this instanceof TStagePathNodeSrcGrp } + predicate isArbitrarySource() { this instanceof TPathNodeSrcGrp } - predicate isArbitrarySink() { this instanceof TStagePathNodeSinkGrp } + predicate isArbitrarySink() { this instanceof TPathNodeSinkGrp } } - private class StagePathNodeSrcGrp extends StagePathNodeImpl, TStagePathNodeSrcGrp { + private class PathNodeSrcGrp extends PathNodeImpl, TPathNodeSrcGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } @@ -2622,14 +2622,14 @@ module MakeImpl Lang> { override FlowState getState() { none() } - override StagePathNodeImpl getASuccessorImpl(string label) { + override PathNodeImpl getASuccessorImpl(string label) { result.isSource() and label = "" } override predicate isSource() { none() } } - private class StagePathNodeSinkGrp extends StagePathNodeImpl, TStagePathNodeSinkGrp { + private class PathNodeSinkGrp extends PathNodeImpl, TPathNodeSinkGrp { override string toString() { result = "" } override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } @@ -2638,7 +2638,7 @@ module MakeImpl Lang> { override FlowState getState() { none() } - override StagePathNodeImpl getASuccessorImpl(string label) { none() } + override PathNodeImpl getASuccessorImpl(string label) { none() } override predicate isSource() { none() } } @@ -2647,7 +2647,7 @@ module MakeImpl Lang> { * An intermediate flow graph node. This is a tuple consisting of a node, * a `FlowState`, a call context, a summary context, a tracked type, and an access path. */ - private class StagePathNodeMid extends StagePathNodeImpl, TStagePathNodeMid { + private class PathNodeMid extends PathNodeImpl, TPathNodeMid { NodeEx node; FlowState state; Cc cc; @@ -2657,15 +2657,13 @@ module MakeImpl Lang> { Typ t; Ap ap; - StagePathNodeMid() { - this = TStagePathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) - } + PathNodeMid() { this = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) } override NodeEx getNodeEx() { result = node } override FlowState getState() { result = state } - private StagePathNodeMid getSuccMid(string label) { + private PathNodeMid getSuccMid(string label) { localStep(this, result, label) or nonLocalStep(this, result, label) @@ -2680,7 +2678,7 @@ module MakeImpl Lang> { ) } - override StagePathNodeImpl getASuccessorImpl(string label) { + override PathNodeImpl getASuccessorImpl(string label) { // an intermediate step to another intermediate node exists(string l2 | result = this.getSuccMid(l2) | not this.isSourceWithLabel(_) and label = l2 @@ -2771,7 +2769,7 @@ module MakeImpl Lang> { else any() } - StagePathNodeSink projectToSink(string model) { + PathNodeSink projectToSink(string model) { this.isAtSink() and sinkModel(node, model) and result.getNodeEx() = node and @@ -2784,11 +2782,11 @@ module MakeImpl Lang> { * intermediate nodes in order to uniquely correspond to a given sink by * excluding the call context. */ - private class StagePathNodeSink extends StagePathNodeImpl, TStagePathNodeSink { + private class PathNodeSink extends PathNodeImpl, TPathNodeSink { NodeEx node; FlowState state; - StagePathNodeSink() { this = TStagePathNodeSink(node, state) } + PathNodeSink() { this = TPathNodeSink(node, state) } override NodeEx getNodeEx() { result = node } @@ -2796,7 +2794,7 @@ module MakeImpl Lang> { override string toString() { result = node.toString() } - override StagePathNodeImpl getASuccessorImpl(string label) { + override PathNodeImpl getASuccessorImpl(string label) { result.isArbitrarySink() and label = "" } @@ -2831,46 +2829,46 @@ module MakeImpl Lang> { bindingset[node, state, cc, summaryCtx, argT, argAp, t, ap] pragma[inline_late] - private StagePathNodeImpl mkStagePathNode( + private PathNodeImpl mkPathNode( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap ) { - result = TStagePathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) + result = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) } - private StagePathNodeImpl typeStrengthenToStagePathNode( + private PathNodeImpl typeStrengthenToPathNode( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap ) { exists(Typ t | fwdFlow1(node, state, cc, summaryCtx, argT, argAp, t0, t, ap, _) and - result = TStagePathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) + result = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) ) } pragma[nomagic] private predicate fwdFlowThroughStep1( - StagePathNodeImpl pn1, StagePathNodeImpl pn2, StagePathNodeImpl pn3, DataFlowCall call, - Cc cc, FlowState state, CcCall ccc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa + PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, DataFlowCall call, Cc cc, + FlowState state, CcCall ccc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, + Typ t, Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa ) { exists(FlowState state0, ArgNodeEx arg, ParamNodeEx p, Typ innerArgT, Ap innerArgAp | fwdFlowThroughStep0(call, arg, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, p, innerArgT, innerArgAp, innerArgApa) and revFlow(arg, state0, _, _, _) and - pn1 = mkStagePathNode(arg, state0, cc, summaryCtx, argT, argAp, innerArgT, innerArgAp) and + pn1 = mkPathNode(arg, state0, cc, summaryCtx, argT, argAp, innerArgT, innerArgAp) and pn2 = - typeStrengthenToStagePathNode(p, state0, ccc, TParamNodeSome(p.asNode()), + typeStrengthenToPathNode(p, state0, ccc, TParamNodeSome(p.asNode()), TypOption::some(innerArgT), apSome(innerArgAp), innerArgT, innerArgAp) and pn3 = - mkStagePathNode(ret, state, ccc, TParamNodeSome(p.asNode()), - TypOption::some(innerArgT), apSome(innerArgAp), t, ap) + mkPathNode(ret, state, ccc, TParamNodeSome(p.asNode()), TypOption::some(innerArgT), + apSome(innerArgAp), t, ap) ) } pragma[nomagic] private predicate fwdFlowThroughStep2( - StagePathNodeImpl pn1, StagePathNodeImpl pn2, StagePathNodeImpl pn3, NodeEx node, Cc cc, + PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, NodeEx node, Cc cc, FlowState state, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap ) { @@ -2887,11 +2885,11 @@ module MakeImpl Lang> { } private predicate localStep( - StagePathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, + PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label, boolean isStoreStep ) { exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | - pn1 = TStagePathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and + pn1 = TPathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and localCc = getLocalCc(cc) and isStoreStep = false | @@ -2904,7 +2902,7 @@ module MakeImpl Lang> { or // store exists(NodeEx mid, Content c, Typ t0, Ap ap0 | - pn1 = TStagePathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and + pn1 = TPathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and fwdFlowStore(mid, t0, ap0, c, t, node, state, cc, summaryCtx, argT, argAp) and ap = apCons(c, t0, ap0) and label = "" and @@ -2913,7 +2911,7 @@ module MakeImpl Lang> { or // read exists(NodeEx mid, Typ t0, Ap ap0, Content c | - pn1 = TStagePathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and + pn1 = TPathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and fwdFlowRead(t0, ap0, c, mid, node, state, cc, summaryCtx, argT, argAp) and fwdFlowConsCand(t0, ap0, c, t, ap) and label = "" and @@ -2921,47 +2919,45 @@ module MakeImpl Lang> { ) } - private predicate localStep(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string label) { + private predicate localStep(PathNodeImpl pn1, PathNodeImpl pn2, string label) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap, boolean isStoreStep | localStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label, isStoreStep) and - pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and stepFilter(node, ap, isStoreStep) ) or summaryStep(pn1, pn2, label) } - private predicate summaryLabel( - StagePathNodeImpl pn1, StagePathNodeImpl pn2, string summaryLabel - ) { + private predicate summaryLabel(PathNodeImpl pn1, PathNodeImpl pn2, string summaryLabel) { pn1 = pn2 and summaryLabel = "" and subpathsImpl(_, pn1, _, _) or - exists(StagePathNodeImpl mid, string l1, string l2 | + exists(PathNodeImpl mid, string l1, string l2 | summaryLabel(pn1, mid, l1) and localStep(mid, pn2, l2) and summaryLabel = mergeLabels(l1, l2) ) } - private predicate summaryStep(StagePathNodeImpl arg, StagePathNodeImpl out, string label) { - exists(StagePathNodeImpl par, StagePathNodeImpl ret | + private predicate summaryStep(PathNodeImpl arg, PathNodeImpl out, string label) { + exists(PathNodeImpl par, PathNodeImpl ret | subpathsImpl(arg, par, ret, out) and summaryLabel(par, ret, label) ) } private predicate nonLocalStep( - StagePathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, + PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label ) { // jump exists(NodeEx mid, FlowState state0, Typ t0 | - pn1 = TStagePathNodeMid(mid, state0, _, _, _, _, t0, ap) and + pn1 = TPathNodeMid(mid, state0, _, _, _, _, t0, ap) and cc = ccNone() and summaryCtx = TParamNodeNone() and argT instanceof TypOption::None and @@ -2992,8 +2988,7 @@ module MakeImpl Lang> { ArgNodeEx arg, boolean allowsFlowThrough, Cc outercc, ParamNodeOption outerSummaryCtx, TypOption outerArgT, ApOption outerArgAp | - pn1 = - TStagePathNodeMid(arg, state, outercc, outerSummaryCtx, outerArgT, outerArgAp, t, ap) and + pn1 = TPathNodeMid(arg, state, outercc, outerSummaryCtx, outerArgT, outerArgAp, t, ap) and fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, outerArgT, outerArgAp, t, ap, allowsFlowThrough) and label = "" and @@ -3011,7 +3006,7 @@ module MakeImpl Lang> { or // flow out of a callable exists(RetNodeEx ret, CcNoCall innercc, boolean allowsFieldFlow, ApApprox apa | - pn1 = TStagePathNodeMid(ret, state, innercc, summaryCtx, argT, argAp, t, ap) and + pn1 = TPathNodeMid(ret, state, innercc, summaryCtx, argT, argAp, t, ap) and fwdFlowIntoRet(ret, state, innercc, summaryCtx, argT, argAp, t, ap, apa) and fwdFlowOutValidEdge(_, ret, innercc, _, node, cc, apa, allowsFieldFlow) and not inBarrier(node, state) and @@ -3020,13 +3015,13 @@ module MakeImpl Lang> { ) } - private predicate nonLocalStep(StagePathNodeImpl pn1, StagePathNodeImpl pn2, string label) { + private predicate nonLocalStep(PathNodeImpl pn1, PathNodeImpl pn2, string label) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t0, Ap ap | nonLocalStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label) and - pn2 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and stepFilter(node, ap, false) ) } @@ -3037,28 +3032,27 @@ module MakeImpl Lang> { * All of the nodes may be hidden. */ private predicate subpathsImpl( - StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, - StagePathNodeImpl out + PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out ) { exists( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap, StagePathNodeImpl out0 + ApOption argAp, Typ t0, Ap ap, PathNodeImpl out0 | fwdFlowThroughStep2(arg, par, ret, node, cc, state, summaryCtx, argT, argAp, t0, ap) and - out0 = typeStrengthenToStagePathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + out0 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and stepFilter(node, ap, false) | - out = out0 or out = out0.(StagePathNodeMid).projectToSink(_) + out = out0 or out = out0.(PathNodeMid).projectToSink(_) ) } module StagePathGraph { - predicate edges(StagePathNodeImpl a, StagePathNodeImpl b, string key, string val) { + predicate edges(PathNodeImpl a, PathNodeImpl b, string key, string val) { a.getASuccessorImpl(val) = b and key = "provenance" } - query predicate nodes(StagePathNodeImpl n, string key, string val) { + query predicate nodes(PathNodeImpl n, string key, string val) { key = "semmle.label" and val = n.toString() } @@ -3066,21 +3060,21 @@ module MakeImpl Lang> { } module Public { - private StagePathNodeImpl localStep(StagePathNodeImpl n) { localStep(n, result, _) } + private PathNodeImpl localStep(PathNodeImpl n) { localStep(n, result, _) } - private predicate localStepToHidden(StagePathNodeImpl n1, StagePathNodeImpl n2) { + private predicate localStepToHidden(PathNodeImpl n1, PathNodeImpl n2) { n2 = localStep(n1) and n2.isHidden() } - private predicate localStepFromHidden(StagePathNodeImpl n1, StagePathNodeImpl n2) { + private predicate localStepFromHidden(PathNodeImpl n1, PathNodeImpl n2) { n2 = localStep(n1) and n1.isHidden() } bindingset[par, ret] pragma[inline_late] - private predicate localStepStar(StagePathNodeImpl par, StagePathNodeImpl ret) { + private predicate localStepStar(PathNodeImpl par, PathNodeImpl ret) { localStep*(par) = ret } @@ -3091,21 +3085,20 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate subpaths1( - StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, - StagePathNodeImpl out + PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out ) { // direct subpath - subpathsImpl(arg, any(StagePathNodeImpl n | localStepFromHidden*(n, par)), - any(StagePathNodeImpl n | localStepToHidden*(ret, n)), out) and + subpathsImpl(arg, any(PathNodeImpl n | localStepFromHidden*(n, par)), + any(PathNodeImpl n | localStepToHidden*(ret, n)), out) and not par.isHidden() and not ret.isHidden() and localStepStar(par, ret) or // wrapped subpath using hidden nodes, e.g. flow through a callback inside // a summarized callable - exists(StagePathNodeImpl par0, StagePathNodeImpl ret0 | - subpaths1(any(StagePathNodeImpl n | localStepToHidden*(par0, n)), par, ret, - any(StagePathNodeImpl n | localStepFromHidden*(n, ret0))) and + exists(PathNodeImpl par0, PathNodeImpl ret0 | + subpaths1(any(PathNodeImpl n | localStepToHidden*(par0, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, ret0))) and subpathsImpl(arg, par0, ret0, out) ) } @@ -3119,28 +3112,27 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate subpaths2( - StagePathNodeImpl arg, StagePathNodeImpl par, StagePathNodeImpl ret, - StagePathNodeImpl out + PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out ) { - exists(StagePathNodeImpl out0 | - subpaths1(any(StagePathNodeImpl n | localStepToHidden*(arg, n)), par, ret, - any(StagePathNodeImpl n | localStepFromHidden*(n, out0))) and + exists(PathNodeImpl out0 | + subpaths1(any(PathNodeImpl n | localStepToHidden*(arg, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, out0))) and not arg.isHidden() and not out0.isHidden() | - out = out0 or out = out0.(StagePathNodeMid).projectToSink(_) + out = out0 or out = out0.(PathNodeMid).projectToSink(_) ) } /** Holds if `n` is reachable from a source. */ - private predicate fwdReach(StagePathNodeImpl n) { + private predicate fwdReach(PathNodeImpl n) { n.isArbitrarySource() or - exists(StagePathNodeImpl mid | fwdReach(mid) and mid.getANonHiddenSuccessor(_) = n) + exists(PathNodeImpl mid | fwdReach(mid) and mid.getANonHiddenSuccessor(_) = n) } /** Holds if `n` is reachable from a source and can reach a sink. */ - private predicate directReach(StagePathNodeImpl n) { + private predicate directReach(PathNodeImpl n) { fwdReach(n) and ( n.isArbitrarySink() or @@ -3151,14 +3143,14 @@ module MakeImpl Lang> { /** * Holds if `n` can reach a return node in a summarized subpath that can reach a sink. */ - private predicate retReach(StagePathNodeImpl n) { + private predicate retReach(PathNodeImpl n) { fwdReach(n) and ( - exists(StagePathNodeImpl out | subpaths2(_, _, n, out) | + exists(PathNodeImpl out | subpaths2(_, _, n, out) | directReach(out) or retReach(out) ) or - exists(StagePathNodeImpl mid | + exists(PathNodeImpl mid | retReach(mid) and n.getANonHiddenSuccessor(_) = mid and not subpaths2(_, mid, _, _) @@ -3167,17 +3159,17 @@ module MakeImpl Lang> { } /** Holds if `n` can reach a sink or is used in a subpath that can reach a sink. */ - private predicate reach(StagePathNodeImpl n) { directReach(n) or retReach(n) } + private predicate reach(PathNodeImpl n) { directReach(n) or retReach(n) } /** * A `Node` augmented with a call context (except for sinks) and an access path. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. */ - class PathNode instanceof StagePathNodeImpl { + class PathNode instanceof PathNodeImpl { PathNode() { reach(this) and - not this instanceof StagePathNodeSrcGrp and - not this instanceof StagePathNodeSinkGrp + not this instanceof PathNodeSrcGrp and + not this instanceof PathNodeSinkGrp } /** Gets a textual representation of this element. */ @@ -3188,9 +3180,9 @@ module MakeImpl Lang> { * representation of the call context. */ final string toStringWithContext() { - result = this.(StagePathNodeMid).toStringWithContext() + result = this.(PathNodeMid).toStringWithContext() or - not this instanceof StagePathNodeMid and result = this.toString() + not this instanceof PathNodeMid and result = this.toString() } /** Gets the location of this node. */ @@ -3214,7 +3206,7 @@ module MakeImpl Lang> { final predicate isSource() { super.isSource() } /** Holds if this node is a sink. */ - final predicate isSink() { this instanceof StagePathNodeSink } + final predicate isSink() { this instanceof PathNodeSink } /** * Holds if this element is at the specified location. @@ -3247,15 +3239,15 @@ module MakeImpl Lang> { } /** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ - private predicate pathSucc(StagePathNodeImpl n1, StagePathNodeImpl n2) { + private predicate pathSucc(PathNodeImpl n1, PathNodeImpl n2) { n1.getANonHiddenSuccessor(_) = n2 and directReach(n2) } - private predicate tcSrc(StagePathNodeImpl n) { n.isSource() } + private predicate tcSrc(PathNodeImpl n) { n.isSource() } - private predicate tcSink(StagePathNodeImpl n) { n.isSink() } + private predicate tcSink(PathNodeImpl n) { n.isSink() } - private predicate pathSuccPlus(StagePathNodeImpl n1, StagePathNodeImpl n2) = + private predicate pathSuccPlus(PathNodeImpl n1, PathNodeImpl n2) = doublyBoundedFastTC(pathSucc/2, tcSrc/1, tcSink/1)(n1, n2) /** @@ -3265,7 +3257,7 @@ module MakeImpl Lang> { * included in the module `PathGraph`. */ predicate flowPath(PathNode source, PathNode sink) { - exists(StagePathNodeImpl flowsource, StagePathNodeImpl flowsink | + exists(PathNodeImpl flowsource, PathNodeImpl flowsink | source = flowsource and sink = flowsink | flowsource.isSource() and @@ -3280,7 +3272,7 @@ module MakeImpl Lang> { module PathGraph implements PathGraphSig { /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ query predicate edges(PathNode a, PathNode b, string key, string val) { - a.(StagePathNodeImpl).getANonHiddenSuccessor(val) = b and + a.(PathNodeImpl).getANonHiddenSuccessor(val) = b and key = "provenance" } From 525b6f30e3dbcfb150e4f7580b7cf0eb39df2834 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 19 Aug 2024 11:33:46 +0200 Subject: [PATCH 119/334] C++/C#/Java: Accept test changes. --- .../dataflow/fields/ir-path-flow.expected | 4 + .../dataflow/fields/path-flow.expected | 4 + .../collections/CollectionFlow.expected | 11 - .../global/TaintTrackingPath.expected | 20 ++ .../CWE-625/PermissiveDotRegex.expected | 5 - .../dataflow/capture/inlinetest.expected | 9 - .../apache-collections/test.expected | 208 ------------------ .../frameworks/spring/beans/test.expected | 18 -- .../frameworks/spring/cache/test.expected | 4 - .../frameworks/spring/util/test.expected | 8 - .../frameworks/stream/test.expected | 30 +++ 11 files changed, 58 insertions(+), 263 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index 98ca0290f47..43725bb4524 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -848,6 +848,8 @@ edges | simple.cpp:120:8:120:8 | *a [i] | simple.cpp:120:10:120:10 | i | provenance | | | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | | +| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | | +| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | provenance | | | struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | provenance | | @@ -1758,6 +1760,8 @@ nodes | simple.cpp:120:10:120:10 | i | semmle.label | i | | struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] | | struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] | +| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] | +| struct_init.c:15:8:15:9 | *ab [a] | semmle.label | *ab [a] | | struct_init.c:15:8:15:9 | *ab [a] | semmle.label | *ab [a] | | struct_init.c:15:12:15:12 | a | semmle.label | a | | struct_init.c:20:13:20:14 | *definition of ab [a] | semmle.label | *definition of ab [a] | diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected index 17cd0b7ce02..98e93029073 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -737,6 +737,8 @@ edges | simple.cpp:120:8:120:8 | a [i] | simple.cpp:120:10:120:10 | i | provenance | | | struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | | struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | | +| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | | +| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | | struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | @@ -1549,6 +1551,8 @@ nodes | simple.cpp:120:10:120:10 | i | semmle.label | i | | struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | | struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | +| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] | +| struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] | | struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] | | struct_init.c:15:8:15:9 | ab [post update] [a] | semmle.label | ab [post update] [a] | | struct_init.c:15:12:15:12 | a | semmle.label | a | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index aae5dff536d..dfc46ac8071 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -52,12 +52,10 @@ edges | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | MaD:2 | | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | MaD:8 | | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | provenance | MaD:16 | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | provenance | MaD:16 | | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | MaD:1 | | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | MaD:7 | | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | provenance | MaD:16 | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | provenance | MaD:16 | | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | provenance | MaD:16 | | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | provenance | | @@ -378,14 +376,10 @@ nodes | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | semmle.label | access to property Values : ICollection [element] : A | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | semmle.label | access to property Values : ICollection [element] : A | -| CollectionFlow.cs:30:69:30:87 | call to method First : A | semmle.label | call to method First : A | | CollectionFlow.cs:30:69:30:87 | call to method First : A | semmle.label | call to method First : A | | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | semmle.label | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:32:67:32:83 | call to method First : A | semmle.label | call to method First : A | | CollectionFlow.cs:32:67:32:83 | call to method First : A | semmle.label | call to method First : A | | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | @@ -671,20 +665,15 @@ subpaths | CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero | | CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue | | CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | -| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | | CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero | | CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue | | CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | -| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | | CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero | | CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue | | CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | -| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | -| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | | CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | -| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:23:328:27 | array [Return] : A[] [element] : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:337:14:337:23 | call to method First | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 24693500fbf..4bf73387c5d 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -301,14 +301,22 @@ edges | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | provenance | | | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | provenance | | | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | provenance | MaD:2 | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:89:89:89 | s : String | provenance | MaD:2 | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:104:89:104 | x : String | provenance | MaD:2 | | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | provenance | | | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:89:89:89:89 | s : String | GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | provenance | | +| GlobalDataFlow.cs:89:104:89:104 | x : String | GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | provenance | | | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | provenance | | | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | provenance | | | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | provenance | | | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | provenance | | | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | provenance | | | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | provenance | MaD:3 | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:84:91:86 | acc : String | provenance | MaD:3 | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:104:91:104 | x : String | provenance | MaD:3 | +| GlobalDataFlow.cs:91:84:91:86 | acc : String | GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | provenance | | +| GlobalDataFlow.cs:91:104:91:104 | x : String | GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | provenance | | | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | provenance | MaD:22 | | GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | provenance | | | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | access to local variable sink22 : Boolean | provenance | MaD:20 | @@ -788,10 +796,18 @@ nodes | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String | | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String | | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String | +| GlobalDataFlow.cs:89:89:89:89 | s : String | semmle.label | s : String | +| GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | semmle.label | ... + ... : String | +| GlobalDataFlow.cs:89:104:89:104 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | semmle.label | access to local variable sink17 | | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | semmle.label | access to local variable sink18 : String | | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | semmle.label | call to method Aggregate : String | | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String | +| GlobalDataFlow.cs:91:84:91:86 | acc : String | semmle.label | acc : String | +| GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | semmle.label | ... + ... : String | +| GlobalDataFlow.cs:91:104:91:104 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | semmle.label | access to local variable sink18 | | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | semmle.label | access to local variable sink18 : String | | GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | semmle.label | access to local variable sink21 : Int32 | @@ -1102,6 +1118,10 @@ subpaths | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:89:89:89 | s : String | GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:104:89:104 | x : String | GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:84:91:86 | acc : String | GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:104:91:104 | x : String | GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected index 7832305e0ac..424cbc58af8 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected @@ -32,7 +32,6 @@ edges | DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:71:29:71:32 | path : String | provenance | | | DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | | | DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:3 | -| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:3 | models | 1 | Source: javax.servlet.http; HttpServletRequest; false; getPathInfo; (); ; ReturnValue; uri-path; manual | | 2 | Source: javax.servlet.http; HttpServletRequest; false; getRequestURI; (); ; ReturnValue; uri-path; manual | @@ -61,11 +60,7 @@ nodes | DotRegexSpring.java:69:28:69:38 | path : String | semmle.label | path : String | | DotRegexSpring.java:71:11:71:42 | decode(...) : String | semmle.label | decode(...) : String | | DotRegexSpring.java:71:29:71:32 | path : String | semmle.label | path : String | -| DotRegexSpring.java:71:29:71:32 | path : String | semmle.label | path : String | -| DotRegexSpring.java:73:10:73:13 | path : String | semmle.label | path : String | | DotRegexSpring.java:73:10:73:13 | path : String | semmle.label | path : String | subpaths | DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | -| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | -| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | | DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String | diff --git a/java/ql/test/library-tests/dataflow/capture/inlinetest.expected b/java/ql/test/library-tests/dataflow/capture/inlinetest.expected index 0987959e449..5c08b6d3c31 100644 --- a/java/ql/test/library-tests/dataflow/capture/inlinetest.expected +++ b/java/ql/test/library-tests/dataflow/capture/inlinetest.expected @@ -116,16 +116,13 @@ edges | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | provenance | heuristic-callback | | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | List out1 : ArrayList [] : String | provenance | | | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | List out2 : ArrayList [] : String | provenance | | -| B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | List out2 : ArrayList [] : String | provenance | | | B.java:107:31:111:5 | List out1 : ArrayList [] : String | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | provenance | | | B.java:107:31:111:5 | List out2 : ArrayList [] : String | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | provenance | | -| B.java:107:31:111:5 | List out2 : ArrayList [] : String | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | provenance | | | B.java:107:31:111:5 | String s : String | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | provenance | | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:108:12:108:12 | this : new Consumer(...) { ... } [String s] : String | provenance | | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:110:16:110:16 | this : new Consumer(...) { ... } [String s] : String | provenance | | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | provenance | | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | provenance | | -| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | provenance | | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [String s] : String | B.java:107:31:111:5 | String s : String | provenance | | | B.java:108:12:108:12 | this : new Consumer(...) { ... } [String s] : String | B.java:108:12:108:12 | s | provenance | | | B.java:109:7:109:10 | out1 [post update] : ArrayList [] : String | B.java:109:7:109:10 | this : new Consumer(...) { ... } [List out1, ] : String | provenance | | @@ -363,23 +360,19 @@ nodes | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer>(...) { ... } [String s] : String | | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | semmle.label | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | -| B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | | B.java:107:21:107:21 | l : ArrayList [] : String | semmle.label | l : ArrayList [] : String | | B.java:107:31:107:31 | x : String | semmle.label | x : String | | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | semmle.label | ...->... : new Consumer(...) { ... } [String s] : String | | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | semmle.label | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | semmle.label | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | -| B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | semmle.label | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | | B.java:107:31:111:5 | List out1 : ArrayList [] : String | semmle.label | List out1 : ArrayList [] : String | | B.java:107:31:111:5 | List out2 : ArrayList [] : String | semmle.label | List out2 : ArrayList [] : String | -| B.java:107:31:111:5 | List out2 : ArrayList [] : String | semmle.label | List out2 : ArrayList [] : String | | B.java:107:31:111:5 | String s : String | semmle.label | String s : String | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer(...) { ... } [String s] : String | | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | semmle.label | this : new Consumer>(...) { ... } [List out1, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | this : new Consumer>(...) { ... } [List out2, ] : String | -| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | this : new Consumer>(...) { ... } [List out2, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [String s] : String | semmle.label | this : new Consumer>(...) { ... } [String s] : String | | B.java:108:12:108:12 | s | semmle.label | s | | B.java:108:12:108:12 | this : new Consumer(...) { ... } [String s] : String | semmle.label | this : new Consumer(...) { ... } [String s] : String | @@ -527,10 +520,8 @@ subpaths | B.java:46:13:46:14 | m1 : HashMap [] : String | B.java:38:23:38:45 | inp : HashMap [] : String | B.java:38:48:38:70 | out [Return] : HashMap [] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [] : String | | B.java:107:5:107:6 | l2 : ArrayList [, ] : String | B.java:107:16:107:16 | l : ArrayList [] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out1, ] : String | | B.java:107:16:111:6 | ...->... : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out2, ] : String | -| B.java:107:16:111:6 | ...->... : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out2, ] : String | | B.java:107:21:107:21 | l : ArrayList [] : String | B.java:107:31:107:31 | x : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | -| B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | | B.java:137:5:137:5 | r : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l2, ] : String | B.java:137:5:137:5 | r [post update] : new TwoRuns(...) { ... } [List l2, ] : String | | B.java:148:17:148:29 | new MyLocal(...) [pre constructor] : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this [Return] : MyLocal [f] : String | B.java:148:17:148:29 | new MyLocal(...) : MyLocal [f] : String | | B.java:149:10:149:10 | m : MyLocal [f] : String | B.java:146:14:146:17 | parameter this : MyLocal [f] : String | B.java:146:30:146:35 | this.f : String | B.java:149:10:149:17 | getF(...) | diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.expected b/java/ql/test/library-tests/frameworks/apache-collections/test.expected index 76ef7c2b4cf..96a0a4853c3 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.expected +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.expected @@ -1663,7 +1663,6 @@ edges | Test.java:257:91:257:97 | element : String | Test.java:257:73:257:98 | of(...) : FluentIterable [] : String | provenance | MaD:469 | | Test.java:258:49:258:57 | element : String | Test.java:258:110:258:116 | element : String | provenance | | | Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | provenance | | -| Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | provenance | | | Test.java:258:110:258:116 | element : String | Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | provenance | MaD:2 | | Test.java:258:110:258:116 | element : String | Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | provenance | MaD:673 | | Test.java:259:49:259:57 | element : String | Test.java:259:90:259:96 | element : String | provenance | | @@ -1683,17 +1682,13 @@ edges | Test.java:261:77:261:83 | element : String | Test.java:261:61:261:93 | new MultiKey(...) : MultiKey [] : String | provenance | MaD:215 | | Test.java:262:52:262:60 | element : String | Test.java:262:106:262:112 | element : String | provenance | | | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | provenance | MaD:674 | -| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | provenance | MaD:674 | | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | provenance | | -| Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | provenance | | -| Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | provenance | MaD:1 | | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | provenance | MaD:1 | | Test.java:262:106:262:112 | element : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | provenance | MaD:2 | | Test.java:262:106:262:112 | element : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | provenance | MaD:673 | | Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | provenance | | | Test.java:263:41:263:49 | element : String | Test.java:263:102:263:108 | element : String | provenance | | | Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | provenance | | -| Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | provenance | | | Test.java:263:102:263:108 | element : String | Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | provenance | MaD:2 | | Test.java:263:102:263:108 | element : String | Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | provenance | MaD:673 | | Test.java:264:80:264:88 | element : String | Test.java:264:177:264:183 | element : String | provenance | | @@ -1708,8 +1703,6 @@ edges | Test.java:267:39:267:47 | element : ListIterator [] : String | Test.java:267:90:267:96 | element : ListIterator [] : String | provenance | | | Test.java:267:39:267:47 | element : String | Test.java:267:90:267:96 | element : String | provenance | | | Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | Test.java:267:107:267:107 | b : TreeBag [, ] : String | provenance | | -| Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | Test.java:267:107:267:107 | b : TreeBag [, ] : String | provenance | | -| Test.java:267:84:267:84 | b [post update] : TreeBag [] : String | Test.java:267:107:267:107 | b : TreeBag [] : String | provenance | | | Test.java:267:84:267:84 | b [post update] : TreeBag [] : String | Test.java:267:107:267:107 | b : TreeBag [] : String | provenance | | | Test.java:267:90:267:96 | element : ListIterator [] : String | Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | provenance | MaD:2 | | Test.java:267:90:267:96 | element : ListIterator [] : String | Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | provenance | MaD:395 | @@ -1734,7 +1727,6 @@ edges | Test.java:274:114:274:116 | key : String | Test.java:274:107:274:123 | of(...) : Map [] : String | provenance | MaD:11 | | Test.java:275:49:275:53 | key : String | Test.java:275:107:275:109 | key : String | provenance | | | Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | Test.java:275:125:275:125 | m : HashedMap [] : String | provenance | | -| Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | Test.java:275:125:275:125 | m : HashedMap [] : String | provenance | | | Test.java:275:107:275:109 | key : String | Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | provenance | MaD:14 | | Test.java:275:107:275:109 | key : String | Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | provenance | MaD:705 | | Test.java:276:49:276:53 | key : String | Test.java:276:96:276:98 | key : String | provenance | | @@ -1748,8 +1740,6 @@ edges | Test.java:277:122:277:124 | key : String | Test.java:277:115:277:131 | of(...) : Map [] : String | provenance | MaD:11 | | Test.java:279:47:279:51 | key : String | Test.java:279:113:279:115 | key : String | provenance | | | Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | provenance | | -| Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | provenance | | -| Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | provenance | | | Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | provenance | MaD:14 | | Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | provenance | MaD:661 | | Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | provenance | MaD:705 | @@ -1766,11 +1756,9 @@ edges | Test.java:282:102:282:104 | key : String | Test.java:7043:22:7043:26 | key : String | provenance | | | Test.java:283:53:283:57 | key : String | Test.java:283:111:283:113 | key : String | provenance | | | Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | Test.java:283:129:283:129 | m : LinkedMap [] : String | provenance | | -| Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | Test.java:283:129:283:129 | m : LinkedMap [] : String | provenance | | | Test.java:283:111:283:113 | key : String | Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | provenance | MaD:14 | | Test.java:283:111:283:113 | key : String | Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | provenance | MaD:705 | | Test.java:283:129:283:129 | m : LinkedMap [] : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:487 | -| Test.java:283:129:283:129 | m : LinkedMap [] : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:487 | | Test.java:285:47:285:51 | key : String | Test.java:285:103:285:105 | key : String | provenance | | | Test.java:285:97:285:97 | m [post update] : TreeMap [] : String | Test.java:285:121:285:121 | m : TreeMap [] : String | provenance | | | Test.java:285:103:285:105 | key : String | Test.java:285:97:285:97 | m [post update] : TreeMap [] : String | provenance | MaD:14 | @@ -1778,12 +1766,10 @@ edges | Test.java:286:113:286:115 | key : String | Test.java:286:62:286:116 | new TiedMapEntry(...) : TiedMapEntry [] : String | provenance | MaD:234 | | Test.java:287:75:287:79 | key : String | Test.java:287:137:287:139 | key : String | provenance | | | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | provenance | | -| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | provenance | | | Test.java:287:137:287:139 | key : String | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | provenance | MaD:14 | | Test.java:287:137:287:139 | key : String | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | provenance | MaD:705 | | Test.java:288:49:288:58 | key : String | Test.java:288:116:288:118 | key : String | provenance | | | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | provenance | | -| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | provenance | | | Test.java:288:116:288:118 | key : String | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | provenance | MaD:14 | | Test.java:288:116:288:118 | key : String | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | provenance | MaD:705 | | Test.java:290:60:290:66 | value : String | Test.java:290:151:290:155 | value : String | provenance | | @@ -1796,7 +1782,6 @@ edges | Test.java:292:124:292:128 | value : String | Test.java:292:111:292:129 | of(...) : Map [] : String | provenance | MaD:12 | | Test.java:293:51:293:57 | value : String | Test.java:293:116:293:120 | value : String | provenance | | | Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | Test.java:293:131:293:131 | m : HashedMap [] : String | provenance | | -| Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | Test.java:293:131:293:131 | m : HashedMap [] : String | provenance | | | Test.java:293:116:293:120 | value : String | Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | provenance | MaD:15 | | Test.java:293:116:293:120 | value : String | Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | provenance | MaD:706 | | Test.java:294:58:294:64 | value : String | Test.java:294:145:294:149 | value : String | provenance | | @@ -1817,7 +1802,6 @@ edges | Test.java:298:49:298:55 | value : String | Test.java:298:122:298:126 | value : String | provenance | | | Test.java:298:111:298:111 | m [post update] : MultiValueMap [, ] : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | provenance | | | Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | provenance | | -| Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | provenance | | | Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [, ] : String | provenance | MaD:662 | | Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | provenance | MaD:15 | | Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | provenance | MaD:706 | @@ -1834,11 +1818,9 @@ edges | Test.java:301:145:301:149 | value : String | Test.java:301:125:301:150 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | provenance | MaD:196 | | Test.java:302:54:302:60 | value : String | Test.java:302:119:302:123 | value : String | provenance | | | Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | Test.java:302:134:302:134 | m : LinkedMap [] : String | provenance | | -| Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | Test.java:302:134:302:134 | m : LinkedMap [] : String | provenance | | | Test.java:302:119:302:123 | value : String | Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | provenance | MaD:15 | | Test.java:302:119:302:123 | value : String | Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | provenance | MaD:706 | | Test.java:302:134:302:134 | m : LinkedMap [] : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:488 | -| Test.java:302:134:302:134 | m : LinkedMap [] : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:488 | | Test.java:304:49:304:55 | value : Map | Test.java:304:112:304:116 | value : Map | provenance | | | Test.java:304:49:304:55 | value : String | Test.java:304:112:304:116 | value : String | provenance | | | Test.java:304:101:304:101 | m [post update] : TreeMap [] : Map | Test.java:304:127:304:127 | m : TreeMap [] : Map | provenance | | @@ -1851,12 +1833,10 @@ edges | Test.java:305:116:305:120 | value : String | Test.java:305:93:305:121 | newTreeMapWithMapValue(...) : TreeMap [] : String | provenance | MaD:15 | | Test.java:306:77:306:83 | value : String | Test.java:306:146:306:150 | value : String | provenance | | | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | provenance | | -| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | provenance | | | Test.java:306:146:306:150 | value : String | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | provenance | MaD:15 | | Test.java:306:146:306:150 | value : String | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | provenance | MaD:706 | | Test.java:307:50:307:56 | value : String | Test.java:307:114:307:118 | value : String | provenance | | | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | provenance | | -| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | provenance | | | Test.java:307:114:307:118 | value : String | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | provenance | MaD:15 | | Test.java:307:114:307:118 | value : String | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | provenance | MaD:706 | | Test.java:308:56:308:62 | value : String | Test.java:308:114:308:118 | value : String | provenance | | @@ -10555,7 +10535,6 @@ nodes | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [] : String | semmle.label | container : MyAbstractMapEntryDecorator [] : String | | Test.java:239:69:239:77 | container : MyAbstractMapEntryDecorator [] : String | semmle.label | container : MyAbstractMapEntryDecorator [] : String | | Test.java:239:69:239:86 | getKey(...) : String | semmle.label | getKey(...) : String | -| Test.java:239:69:239:86 | getKey(...) : String | semmle.label | getKey(...) : String | | Test.java:240:18:240:46 | container : ArrayListValuedHashMap [] : String | semmle.label | container : ArrayListValuedHashMap [] : String | | Test.java:240:18:240:46 | container : HashSetValuedHashMap [] : String | semmle.label | container : HashSetValuedHashMap [] : String | | Test.java:240:18:240:46 | container : MultiValuedMap [] : Object | semmle.label | container : MultiValuedMap [] : Object | @@ -10641,7 +10620,6 @@ nodes | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [] : String | semmle.label | container : MyAbstractMapEntryDecorator [] : String | | Test.java:245:71:245:79 | container : MyAbstractMapEntryDecorator [] : String | semmle.label | container : MyAbstractMapEntryDecorator [] : String | | Test.java:245:71:245:90 | getValue(...) : String | semmle.label | getValue(...) : String | -| Test.java:245:71:245:90 | getValue(...) : String | semmle.label | getValue(...) : String | | Test.java:246:20:246:47 | mapIterator : EntrySetToMapIteratorAdapter [] : String | semmle.label | mapIterator : EntrySetToMapIteratorAdapter [] : String | | Test.java:246:20:246:47 | mapIterator : MapIterator [] : Object | semmle.label | mapIterator : MapIterator [] : Object | | Test.java:246:20:246:47 | mapIterator : MapIterator [] : String | semmle.label | mapIterator : MapIterator [] : String | @@ -10732,10 +10710,8 @@ nodes | Test.java:257:91:257:97 | element : String | semmle.label | element : String | | Test.java:258:49:258:57 | element : String | semmle.label | element : String | | Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | semmle.label | x [post update] : HashMultiSet [] : String | -| Test.java:258:104:258:104 | x [post update] : HashMultiSet [] : String | semmle.label | x [post update] : HashMultiSet [] : String | | Test.java:258:110:258:116 | element : String | semmle.label | element : String | | Test.java:258:127:258:127 | x : HashMultiSet [] : String | semmle.label | x : HashMultiSet [] : String | -| Test.java:258:127:258:127 | x : HashMultiSet [] : String | semmle.label | x : HashMultiSet [] : String | | Test.java:259:49:259:57 | element : String | semmle.label | element : String | | Test.java:259:69:259:97 | newVectorWithElement(...) : Vector [] : String | semmle.label | newVectorWithElement(...) : Vector [] : String | | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | semmle.label | listIterator(...) : ListIterator [] : String | @@ -10757,18 +10733,13 @@ nodes | Test.java:261:77:261:83 | element : String | semmle.label | element : String | | Test.java:262:52:262:60 | element : String | semmle.label | element : String | | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | semmle.label | getElement(...) : Entry [] : String | -| Test.java:262:72:262:125 | getElement(...) : Entry [] : String | semmle.label | getElement(...) : Entry [] : String | | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | semmle.label | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | semmle.label | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | semmle.label | entrySet(...) : Set [, ] : String | | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | semmle.label | entrySet(...) : Set [, ] : String | | Test.java:262:106:262:112 | element : String | semmle.label | element : String | | Test.java:263:41:263:49 | element : String | semmle.label | element : String | | Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | semmle.label | h [post update] : HashMultiSet [] : String | -| Test.java:263:96:263:96 | h [post update] : HashMultiSet [] : String | semmle.label | h [post update] : HashMultiSet [] : String | | Test.java:263:102:263:108 | element : String | semmle.label | element : String | | Test.java:263:119:263:119 | h : HashMultiSet [] : String | semmle.label | h : HashMultiSet [] : String | -| Test.java:263:119:263:119 | h : HashMultiSet [] : String | semmle.label | h : HashMultiSet [] : String | | Test.java:264:80:264:88 | element : String | semmle.label | element : String | | Test.java:264:171:264:171 | x [post update] : Builder [] : String | semmle.label | x [post update] : Builder [] : String | | Test.java:264:177:264:183 | element : String | semmle.label | element : String | @@ -10784,14 +10755,10 @@ nodes | Test.java:267:39:267:47 | element : ListIterator [] : String | semmle.label | element : ListIterator [] : String | | Test.java:267:39:267:47 | element : String | semmle.label | element : String | | Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | semmle.label | b [post update] : TreeBag [, ] : String | -| Test.java:267:84:267:84 | b [post update] : TreeBag [, ] : String | semmle.label | b [post update] : TreeBag [, ] : String | -| Test.java:267:84:267:84 | b [post update] : TreeBag [] : String | semmle.label | b [post update] : TreeBag [] : String | | Test.java:267:84:267:84 | b [post update] : TreeBag [] : String | semmle.label | b [post update] : TreeBag [] : String | | Test.java:267:90:267:96 | element : ListIterator [] : String | semmle.label | element : ListIterator [] : String | | Test.java:267:90:267:96 | element : String | semmle.label | element : String | | Test.java:267:107:267:107 | b : TreeBag [, ] : String | semmle.label | b : TreeBag [, ] : String | -| Test.java:267:107:267:107 | b : TreeBag [, ] : String | semmle.label | b : TreeBag [, ] : String | -| Test.java:267:107:267:107 | b : TreeBag [] : String | semmle.label | b : TreeBag [] : String | | Test.java:267:107:267:107 | b : TreeBag [] : String | semmle.label | b : TreeBag [] : String | | Test.java:268:39:268:47 | element : String | semmle.label | element : String | | Test.java:268:84:268:84 | h [post update] : TreeSet [] : String | semmle.label | h [post update] : TreeSet [] : String | @@ -10818,10 +10785,8 @@ nodes | Test.java:274:114:274:116 | key : String | semmle.label | key : String | | Test.java:275:49:275:53 | key : String | semmle.label | key : String | | Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | semmle.label | m [post update] : HashedMap [] : String | -| Test.java:275:101:275:101 | m [post update] : HashedMap [] : String | semmle.label | m [post update] : HashedMap [] : String | | Test.java:275:107:275:109 | key : String | semmle.label | key : String | | Test.java:275:125:275:125 | m : HashedMap [] : String | semmle.label | m : HashedMap [] : String | -| Test.java:275:125:275:125 | m : HashedMap [] : String | semmle.label | m : HashedMap [] : String | | Test.java:276:49:276:53 | key : String | semmle.label | key : String | | Test.java:276:65:276:106 | new LinkedMap(...) : LinkedMap [] : String | semmle.label | new LinkedMap(...) : LinkedMap [] : String | | Test.java:276:89:276:105 | of(...) : Map [] : String | semmle.label | of(...) : Map [] : String | @@ -10836,12 +10801,8 @@ nodes | Test.java:277:122:277:124 | key : String | semmle.label | key : String | | Test.java:279:47:279:51 | key : String | semmle.label | key : String | | Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | semmle.label | m [post update] : MultiValueMap [] : String | -| Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | semmle.label | m [post update] : MultiValueMap [] : String | -| Test.java:279:107:279:107 | m [post update] : MultiValueMap [] : String | semmle.label | m [post update] : MultiValueMap [] : String | | Test.java:279:113:279:115 | key : String | semmle.label | key : String | | Test.java:279:131:279:131 | m : MultiValueMap [] : String | semmle.label | m : MultiValueMap [] : String | -| Test.java:279:131:279:131 | m : MultiValueMap [] : String | semmle.label | m : MultiValueMap [] : String | -| Test.java:279:131:279:131 | m : MultiValueMap [] : String | semmle.label | m : MultiValueMap [] : String | | Test.java:280:53:280:57 | key : String | semmle.label | key : String | | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | semmle.label | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | | Test.java:280:102:280:104 | key : String | semmle.label | key : String | @@ -10854,11 +10815,8 @@ nodes | Test.java:282:102:282:104 | key : String | semmle.label | key : String | | Test.java:283:53:283:57 | key : String | semmle.label | key : String | | Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | semmle.label | m [post update] : LinkedMap [] : String | -| Test.java:283:105:283:105 | m [post update] : LinkedMap [] : String | semmle.label | m [post update] : LinkedMap [] : String | | Test.java:283:111:283:113 | key : String | semmle.label | key : String | | Test.java:283:129:283:129 | m : LinkedMap [] : String | semmle.label | m : LinkedMap [] : String | -| Test.java:283:129:283:129 | m : LinkedMap [] : String | semmle.label | m : LinkedMap [] : String | -| Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | semmle.label | mapIterator(...) : OrderedMapIterator [] : String | | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | semmle.label | mapIterator(...) : OrderedMapIterator [] : String | | Test.java:285:47:285:51 | key : String | semmle.label | key : String | | Test.java:285:97:285:97 | m [post update] : TreeMap [] : String | semmle.label | m [post update] : TreeMap [] : String | @@ -10869,16 +10827,12 @@ nodes | Test.java:286:113:286:115 | key : String | semmle.label | key : String | | Test.java:287:75:287:79 | key : String | semmle.label | key : String | | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | semmle.label | m [post update] : TreeBidiMap [] : String | -| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [] : String | semmle.label | m [post update] : TreeBidiMap [] : String | | Test.java:287:137:287:139 | key : String | semmle.label | key : String | | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | semmle.label | m : TreeBidiMap [] : String | -| Test.java:287:155:287:155 | m : TreeBidiMap [] : String | semmle.label | m : TreeBidiMap [] : String | | Test.java:288:49:288:58 | key : String | semmle.label | key : String | | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | semmle.label | m [post update] : PatriciaTrie [] : String | -| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [] : String | semmle.label | m [post update] : PatriciaTrie [] : String | | Test.java:288:116:288:118 | key : String | semmle.label | key : String | | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | semmle.label | m : PatriciaTrie [] : String | -| Test.java:288:134:288:134 | m : PatriciaTrie [] : String | semmle.label | m : PatriciaTrie [] : String | | Test.java:290:60:290:66 | value : String | semmle.label | value : String | | Test.java:290:140:290:140 | m [post update] : ArrayListValuedHashMap [, ] : String | semmle.label | m [post update] : ArrayListValuedHashMap [, ] : String | | Test.java:290:151:290:155 | value : String | semmle.label | value : String | @@ -10892,10 +10846,8 @@ nodes | Test.java:292:124:292:128 | value : String | semmle.label | value : String | | Test.java:293:51:293:57 | value : String | semmle.label | value : String | | Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | semmle.label | m [post update] : HashedMap [] : String | -| Test.java:293:105:293:105 | m [post update] : HashedMap [] : String | semmle.label | m [post update] : HashedMap [] : String | | Test.java:293:116:293:120 | value : String | semmle.label | value : String | | Test.java:293:131:293:131 | m : HashedMap [] : String | semmle.label | m : HashedMap [] : String | -| Test.java:293:131:293:131 | m : HashedMap [] : String | semmle.label | m : HashedMap [] : String | | Test.java:294:58:294:64 | value : String | semmle.label | value : String | | Test.java:294:134:294:134 | m [post update] : HashSetValuedHashMap [, ] : String | semmle.label | m [post update] : HashSetValuedHashMap [, ] : String | | Test.java:294:145:294:149 | value : String | semmle.label | value : String | @@ -10919,11 +10871,9 @@ nodes | Test.java:298:49:298:55 | value : String | semmle.label | value : String | | Test.java:298:111:298:111 | m [post update] : MultiValueMap [, ] : String | semmle.label | m [post update] : MultiValueMap [, ] : String | | Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | semmle.label | m [post update] : MultiValueMap [] : String | -| Test.java:298:111:298:111 | m [post update] : MultiValueMap [] : String | semmle.label | m [post update] : MultiValueMap [] : String | | Test.java:298:122:298:126 | value : String | semmle.label | value : String | | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | semmle.label | m : MultiValueMap [, ] : String | | Test.java:298:137:298:137 | m : MultiValueMap [] : String | semmle.label | m : MultiValueMap [] : String | -| Test.java:298:137:298:137 | m : MultiValueMap [] : String | semmle.label | m : MultiValueMap [] : String | | Test.java:299:55:299:61 | value : String | semmle.label | value : String | | Test.java:299:73:299:116 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | semmle.label | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | | Test.java:299:111:299:115 | value : String | semmle.label | value : String | @@ -10936,11 +10886,8 @@ nodes | Test.java:301:145:301:149 | value : String | semmle.label | value : String | | Test.java:302:54:302:60 | value : String | semmle.label | value : String | | Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | semmle.label | m [post update] : LinkedMap [] : String | -| Test.java:302:108:302:108 | m [post update] : LinkedMap [] : String | semmle.label | m [post update] : LinkedMap [] : String | | Test.java:302:119:302:123 | value : String | semmle.label | value : String | | Test.java:302:134:302:134 | m : LinkedMap [] : String | semmle.label | m : LinkedMap [] : String | -| Test.java:302:134:302:134 | m : LinkedMap [] : String | semmle.label | m : LinkedMap [] : String | -| Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | semmle.label | mapIterator(...) : OrderedMapIterator [] : String | | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | semmle.label | mapIterator(...) : OrderedMapIterator [] : String | | Test.java:304:49:304:55 | value : Map | semmle.label | value : Map | | Test.java:304:49:304:55 | value : String | semmle.label | value : String | @@ -10956,16 +10903,12 @@ nodes | Test.java:305:116:305:120 | value : String | semmle.label | value : String | | Test.java:306:77:306:83 | value : String | semmle.label | value : String | | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | semmle.label | m [post update] : TreeBidiMap [] : String | -| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [] : String | semmle.label | m [post update] : TreeBidiMap [] : String | | Test.java:306:146:306:150 | value : String | semmle.label | value : String | | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | semmle.label | m : TreeBidiMap [] : String | -| Test.java:306:161:306:161 | m : TreeBidiMap [] : String | semmle.label | m : TreeBidiMap [] : String | | Test.java:307:50:307:56 | value : String | semmle.label | value : String | | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | semmle.label | m [post update] : PatriciaTrie [] : String | -| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [] : String | semmle.label | m [post update] : PatriciaTrie [] : String | | Test.java:307:114:307:118 | value : String | semmle.label | value : String | | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | semmle.label | m : PatriciaTrie [] : String | -| Test.java:307:129:307:129 | m : PatriciaTrie [] : String | semmle.label | m : PatriciaTrie [] : String | | Test.java:308:56:308:62 | value : String | semmle.label | value : String | | Test.java:308:74:308:119 | new UnmodifiableMapEntry(...) : UnmodifiableMapEntry [] : String | semmle.label | new UnmodifiableMapEntry(...) : UnmodifiableMapEntry [] : String | | Test.java:308:114:308:118 | value : String | semmle.label | value : String | @@ -17799,10 +17742,6 @@ subpaths | Test.java:256:115:256:121 | element : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:256:94:256:122 | newVectorWithElement(...) : Vector [] : String | | Test.java:259:90:259:96 | element : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:259:69:259:97 | newVectorWithElement(...) : Vector [] : String | | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | -| Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | -| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:280:102:280:104 | key : String | Test.java:7057:22:7057:32 | key : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | | Test.java:281:121:281:142 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | @@ -17843,11 +17782,9 @@ subpaths | Test.java:444:52:444:67 | (...)... : String | Test.java:280:53:280:57 | key : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:444:34:444:68 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | | Test.java:445:42:445:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:445:10:445:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:446:19:446:21 | out : MyAbstractMapEntryDecorator [] : String | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [] : String | Test.java:239:69:239:86 | getKey(...) : String | Test.java:446:9:446:22 | getMapKey(...) | -| Test.java:446:19:446:21 | out : MyAbstractMapEntryDecorator [] : String | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [] : String | Test.java:239:69:239:86 | getKey(...) : String | Test.java:446:9:446:22 | getMapKey(...) | | Test.java:451:54:451:69 | (...)... : String | Test.java:300:55:300:61 | value : String | Test.java:300:73:300:116 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:451:34:451:70 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | | Test.java:452:42:452:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:452:10:452:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:453:21:453:23 | out : MyAbstractMapEntryDecorator [] : String | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [] : String | Test.java:245:71:245:90 | getValue(...) : String | Test.java:453:9:453:24 | getMapValue(...) | -| Test.java:453:21:453:23 | out : MyAbstractMapEntryDecorator [] : String | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [] : String | Test.java:245:71:245:90 | getValue(...) : String | Test.java:453:9:453:24 | getMapValue(...) | | Test.java:458:56:458:71 | (...)... : String | Test.java:281:63:281:67 | key : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | Test.java:458:37:458:72 | newMAMEDWithMapKey(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:459:10:459:11 | in : MyAbstractMapEntryDecorator [] : String | Test.java:7071:19:7071:31 | parameter this : MyAbstractMapEntryDecorator [] : String | Test.java:7072:11:7072:29 | getMapEntry(...) : Entry [] : String | Test.java:459:10:459:27 | myGetMapEntry(...) : Entry [] : String | | Test.java:460:28:460:30 | out : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:460:9:460:31 | getMapKeyFromEntry(...) | @@ -18041,45 +17978,31 @@ subpaths | Test.java:1212:20:1212:22 | out : Bag [] : Object | Test.java:230:19:230:32 | it : Bag [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:1212:9:1212:23 | getElement(...) | | Test.java:1219:20:1219:22 | out : Bag [] : Object | Test.java:230:19:230:32 | it : Bag [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:1219:9:1219:23 | getElement(...) | | Test.java:1224:35:1224:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1224:13:1224:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1224:35:1224:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1224:13:1224:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1226:20:1226:22 | out : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1226:9:1226:23 | getElement(...) | | Test.java:1231:35:1231:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1231:13:1231:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1231:35:1231:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1231:13:1231:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1233:20:1233:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1233:9:1233:23 | getElement(...) | | Test.java:1238:35:1238:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1238:13:1238:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1238:35:1238:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1238:13:1238:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1240:20:1240:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1240:9:1240:23 | getElement(...) | | Test.java:1245:41:1245:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1245:19:1245:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1245:41:1245:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1245:19:1245:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1247:20:1247:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1247:9:1247:23 | getElement(...) | | Test.java:1252:35:1252:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1252:13:1252:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1252:35:1252:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1252:13:1252:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1254:20:1254:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1254:9:1254:23 | getElement(...) | | Test.java:1259:41:1259:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1259:19:1259:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1259:41:1259:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1259:19:1259:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1261:20:1261:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1261:9:1261:23 | getElement(...) | | Test.java:1266:35:1266:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1266:13:1266:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1266:35:1266:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1266:13:1266:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1268:20:1268:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1268:9:1268:23 | getElement(...) | | Test.java:1273:41:1273:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1273:19:1273:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1273:41:1273:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1273:19:1273:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1275:20:1275:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1275:9:1275:23 | getElement(...) | | Test.java:1280:35:1280:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1280:13:1280:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1280:35:1280:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1280:13:1280:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1282:20:1282:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1282:9:1282:23 | getElement(...) | | Test.java:1287:41:1287:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1287:19:1287:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:1287:41:1287:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:1287:19:1287:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:1289:20:1289:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1289:9:1289:23 | getElement(...) | | Test.java:1294:42:1294:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1294:17:1294:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:1294:42:1294:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1294:17:1294:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:1301:42:1301:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1301:17:1301:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:1301:42:1301:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1301:17:1301:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:1303:21:1303:23 | out : BidiMap [] : String | Test.java:232:20:232:31 | map : BidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:1303:9:1303:24 | getMapValue(...) | | Test.java:1308:44:1308:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:1308:17:1308:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | -| Test.java:1308:44:1308:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:1308:17:1308:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | | Test.java:1310:19:1310:21 | out : BidiMap [] : String | Test.java:228:18:228:29 | map : BidiMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:1310:9:1310:22 | getMapKey(...) | | Test.java:1315:42:1315:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1315:17:1315:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:1315:42:1315:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:1315:17:1315:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:1322:47:1322:62 | (...)... : String | Test.java:256:47:256:55 | element : String | Test.java:256:67:256:134 | new IteratorEnumeration(...) : IteratorEnumeration [] : String | Test.java:1322:21:1322:63 | newEnumerationWithElement(...) : IteratorEnumeration [] : String | | Test.java:1324:20:1324:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1324:9:1324:23 | getElement(...) | | Test.java:1329:39:1329:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:1329:18:1329:55 | newVectorWithElement(...) : Vector [] : String | @@ -18230,87 +18153,58 @@ subpaths | Test.java:1908:39:1908:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:1908:18:1908:55 | newVectorWithElement(...) : Vector [] : String | | Test.java:1911:20:1911:22 | out : FluentIterable [] : String | Test.java:230:19:230:32 | it : FluentIterable [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1911:9:1911:23 | getElement(...) | | Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [] : String | | Test.java:1918:28:1918:42 | getElement(...) : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1918:9:1918:43 | getMapKeyFromEntry(...) | | Test.java:1918:39:1918:41 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1918:28:1918:42 | getElement(...) : Entry [] : String | | Test.java:1923:39:1923:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:1923:13:1923:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | -| Test.java:1923:39:1923:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:1923:13:1923:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:1925:28:1925:42 | getElement(...) : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1925:9:1925:43 | getMapKeyFromEntry(...) | | Test.java:1925:39:1925:41 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1925:28:1925:42 | getElement(...) : Entry [] : String | | Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | | Test.java:1932:28:1932:42 | getElement(...) : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1932:9:1932:43 | getMapKeyFromEntry(...) | | Test.java:1932:39:1932:41 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1932:28:1932:42 | getElement(...) : Entry [] : String | | Test.java:1937:42:1937:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1937:23:1937:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1937:42:1937:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1937:23:1937:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:1939:30:1939:44 | getElement(...) : Entry [] : String | Test.java:244:29:244:52 | container : Entry [] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1939:9:1939:45 | getMapValueFromEntry(...) | | Test.java:1939:41:1939:43 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1939:30:1939:44 | getElement(...) : Entry [] : String | | Test.java:1944:41:1944:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:1944:13:1944:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:1944:41:1944:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:1944:13:1944:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:1946:30:1946:44 | getElement(...) : Entry [] : String | Test.java:244:29:244:52 | container : Entry [] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1946:9:1946:45 | getMapValueFromEntry(...) | | Test.java:1946:41:1946:43 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1946:30:1946:44 | getElement(...) : Entry [] : String | | Test.java:1951:49:1951:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1951:30:1951:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1951:49:1951:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1951:30:1951:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:1953:30:1953:44 | getElement(...) : Entry [] : String | Test.java:244:29:244:52 | container : Entry [] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1953:9:1953:45 | getMapValueFromEntry(...) | | Test.java:1953:41:1953:43 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:1953:30:1953:44 | getElement(...) : Entry [] : String | | Test.java:1958:37:1958:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1958:18:1958:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1958:37:1958:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1958:18:1958:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1965:41:1965:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:1965:13:1965:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:1965:41:1965:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:1965:13:1965:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:1972:49:1972:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1972:30:1972:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1972:49:1972:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1972:30:1972:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1979:39:1979:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:1979:13:1979:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:1979:39:1979:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:1979:13:1979:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:1981:20:1981:22 | out : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1981:9:1981:23 | getElement(...) | | Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [] : String | | Test.java:1988:20:1988:22 | out : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1988:9:1988:23 | getElement(...) | | Test.java:1993:37:1993:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1993:18:1993:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:1993:37:1993:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:1993:18:1993:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2000:41:2000:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:2000:13:2000:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:2000:41:2000:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:2000:13:2000:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:2007:49:2007:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2007:30:2007:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2007:49:2007:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2007:30:2007:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2014:44:2014:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:2014:17:2014:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | | Test.java:2014:44:2014:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:2014:17:2014:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | | Test.java:2016:20:2016:22 | out : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2016:9:2016:23 | getElement(...) | | Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:2023:20:2023:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:2023:9:2023:23 | getElement(...) | | Test.java:2023:20:2023:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2023:9:2023:23 | getElement(...) | | Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:2030:20:2030:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:2030:9:2030:23 | getElement(...) | | Test.java:2030:20:2030:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2030:9:2030:23 | getElement(...) | | Test.java:2035:41:2035:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:2035:13:2035:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:2035:41:2035:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:2035:13:2035:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:2037:20:2037:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2037:9:2037:23 | getElement(...) | | Test.java:2042:49:2042:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2042:30:2042:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2042:49:2042:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2042:30:2042:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:2044:20:2044:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2044:9:2044:23 | getElement(...) | | Test.java:2049:45:2049:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:2049:20:2049:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:2049:45:2049:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:2049:20:2049:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:2051:20:2051:22 | out : OrderedMapIterator [] : String | Test.java:231:19:231:32 | it : OrderedMapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2051:9:2051:23 | getElement(...) | | Test.java:2056:44:2056:59 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:2056:21:2056:60 | newHashedMapWithMapKey(...) : HashedMap [] : String | -| Test.java:2056:44:2056:59 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:2056:21:2056:60 | newHashedMapWithMapKey(...) : HashedMap [] : String | | Test.java:2058:20:2058:22 | out : MapIterator [] : String | Test.java:231:19:231:32 | it : MapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2058:9:2058:23 | getElement(...) | | Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [] : String | | Test.java:2065:20:2065:22 | out : MapIterator [] : String | Test.java:231:19:231:32 | it : MapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2065:9:2065:23 | getElement(...) | | Test.java:2070:47:2070:62 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:2070:20:2070:63 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | -| Test.java:2070:47:2070:62 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:2070:20:2070:63 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | | Test.java:2072:21:2072:23 | out : OrderedMapIterator [] : String | Test.java:246:20:246:47 | mapIterator : OrderedMapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2072:9:2072:24 | getMapValue(...) | | Test.java:2077:46:2077:61 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:2077:21:2077:62 | newHashedMapWithMapValue(...) : HashedMap [] : String | -| Test.java:2077:46:2077:61 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:2077:21:2077:62 | newHashedMapWithMapValue(...) : HashedMap [] : String | | Test.java:2079:21:2079:23 | out : MapIterator [] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2079:9:2079:24 | getMapValue(...) | | Test.java:2084:48:2084:63 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2084:29:2084:64 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:2084:48:2084:63 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:2084:29:2084:64 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:2086:21:2086:23 | out : MapIterator [] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2086:9:2086:24 | getMapValue(...) | | Test.java:2091:39:2091:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:2091:18:2091:55 | newVectorWithElement(...) : Vector [] : String | | Test.java:2093:20:2093:22 | out : Iterable [] : String | Test.java:230:19:230:32 | it : Iterable [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2093:9:2093:23 | getElement(...) | @@ -18473,10 +18367,8 @@ subpaths | Test.java:2721:49:2721:64 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:2721:22:2721:65 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:2723:20:2723:22 | out : ListIterator [] : String | Test.java:231:19:231:32 | it : ListIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2723:9:2723:23 | getElement(...) | | Test.java:2728:39:2728:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2728:21:2728:55 | newOMIWithElement(...) : OrderedMapIterator [] : String | -| Test.java:2728:39:2728:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2728:21:2728:55 | newOMIWithElement(...) : OrderedMapIterator [] : String | | Test.java:2730:20:2730:22 | out : MapIterator [] : String | Test.java:231:19:231:32 | it : MapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2730:9:2730:23 | getElement(...) | | Test.java:2735:40:2735:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2735:21:2735:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | -| Test.java:2735:40:2735:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2735:21:2735:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | | Test.java:2737:21:2737:23 | out : MapIterator [] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2737:9:2737:24 | getMapValue(...) | | Test.java:2742:45:2742:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:2742:18:2742:61 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:2744:20:2744:22 | out : ZippingIterator [] : String | Test.java:231:19:231:32 | it : ZippingIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2744:9:2744:23 | getElement(...) | @@ -18538,15 +18430,11 @@ subpaths | Test.java:2973:35:2973:50 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:2973:14:2973:51 | newVectorWithElement(...) : Vector [] : String | | Test.java:2975:20:2975:22 | out : List [] : String | Test.java:230:19:230:32 | it : List [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2975:9:2975:23 | getElement(...) | | Test.java:2980:39:2980:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2980:21:2980:55 | newOMIWithElement(...) : OrderedMapIterator [] : String | -| Test.java:2980:39:2980:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2980:21:2980:55 | newOMIWithElement(...) : OrderedMapIterator [] : String | -| Test.java:2987:40:2987:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2987:21:2987:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | | Test.java:2987:40:2987:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:2987:21:2987:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | | Test.java:2996:21:2996:23 | out : MapIterator [] : Object | Test.java:246:20:246:47 | mapIterator : MapIterator [] : Object | Test.java:246:59:246:80 | getValue(...) : Object | Test.java:2996:9:2996:24 | getMapValue(...) | | Test.java:3001:40:3001:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3001:21:3001:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | -| Test.java:3001:40:3001:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3001:21:3001:56 | newOMIWithMapValue(...) : OrderedMapIterator [] : String | | Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3010:20:3010:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3010:9:3010:23 | getElement(...) | | Test.java:3010:20:3010:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3010:9:3010:23 | getElement(...) | | Test.java:3017:19:3017:21 | out : MultiValueMap [] : Object | Test.java:228:18:228:29 | map : MultiValueMap [] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:3017:9:3017:22 | getMapKey(...) | @@ -18561,12 +18449,10 @@ subpaths | Test.java:3038:44:3038:46 | out : MultiMap [] : Object | Test.java:232:20:232:31 | map : MultiMap [] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3038:32:3038:47 | getMapValue(...) : Object | | Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3045:20:3045:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3045:9:3045:23 | getElement(...) | | Test.java:3045:20:3045:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3045:9:3045:23 | getElement(...) | | Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3052:20:3052:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3052:9:3052:23 | getElement(...) | | Test.java:3052:20:3052:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3052:9:3052:23 | getElement(...) | | Test.java:3064:43:3064:58 | (...)... : String | Test.java:272:58:272:62 | key : String | Test.java:272:160:272:160 | m : ArrayListValuedHashMap [] : String | Test.java:3064:24:3064:59 | newALVHMWithMapKey(...) : ArrayListValuedHashMap [] : String | @@ -18594,24 +18480,18 @@ subpaths | Test.java:3129:20:3129:35 | getMapValue(...) : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3129:9:3129:36 | getElement(...) | | Test.java:3129:32:3129:34 | out : MultiValuedMap [, ] : String | Test.java:247:32:247:60 | container : MultiValuedMap [, ] : String | Test.java:247:72:247:90 | get(...) : Collection [] : String | Test.java:3129:20:3129:35 | getMapValue(...) : Collection [] : String | | Test.java:3134:52:3134:67 | (...)... : String | Test.java:262:52:262:60 | element : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | Test.java:3134:24:3134:68 | newMultiSetEntryWithElement(...) : Entry [] : String | -| Test.java:3134:52:3134:67 | (...)... : String | Test.java:262:52:262:60 | element : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | Test.java:3134:24:3134:68 | newMultiSetEntryWithElement(...) : Entry [] : String | | Test.java:3143:20:3143:22 | out : MultiSet [] : Object | Test.java:230:19:230:32 | it : MultiSet [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3143:9:3143:23 | getElement(...) | | Test.java:3150:20:3150:22 | out : MultiSet [] : Object | Test.java:230:19:230:32 | it : MultiSet [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3150:9:3150:23 | getElement(...) | | Test.java:3155:41:3155:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3155:18:3155:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:3155:41:3155:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3155:18:3155:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:3157:20:3157:34 | getElement(...) : Entry [] : String | Test.java:235:19:235:45 | container : Entry [] : String | Test.java:235:57:235:78 | getElement(...) : String | Test.java:3157:9:3157:35 | getElement(...) | | Test.java:3157:31:3157:33 | out : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:3157:20:3157:34 | getElement(...) : Entry [] : String | | Test.java:3162:41:3162:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3162:18:3162:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:3162:41:3162:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3162:18:3162:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:3164:20:3164:22 | out : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3164:9:3164:23 | getElement(...) | | Test.java:3169:41:3169:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3169:18:3169:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:3169:41:3169:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3169:18:3169:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:3171:20:3171:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3171:9:3171:23 | getElement(...) | | Test.java:3176:41:3176:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3176:18:3176:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:3176:41:3176:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3176:18:3176:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:3178:20:3178:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3178:9:3178:23 | getElement(...) | | Test.java:3183:41:3183:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3183:18:3183:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:3183:41:3183:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:3183:18:3183:57 | newMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:3185:20:3185:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3185:9:3185:23 | getElement(...) | | Test.java:3190:45:3190:60 | (...)... : String | Test.java:290:60:290:66 | value : String | Test.java:290:166:290:166 | m : ArrayListValuedHashMap [, ] : String | Test.java:3190:24:3190:61 | newALVHMWithMapValue(...) : ArrayListValuedHashMap [, ] : String | | Test.java:3192:20:3192:47 | (...)... : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3192:9:3192:48 | getElement(...) | @@ -18658,16 +18538,10 @@ subpaths | Test.java:3330:45:3330:60 | (...)... : String | Test.java:290:60:290:66 | value : String | Test.java:290:166:290:166 | m : ArrayListValuedHashMap [, ] : String | Test.java:3330:24:3330:61 | newALVHMWithMapValue(...) : ArrayListValuedHashMap [, ] : String | | Test.java:3332:20:3332:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3332:9:3332:23 | getElement(...) | | Test.java:3337:46:3337:61 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3337:28:3337:62 | newOMIWithElement(...) : OrderedMapIterator [] : String | -| Test.java:3337:46:3337:61 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3337:28:3337:62 | newOMIWithElement(...) : OrderedMapIterator [] : String | -| Test.java:3344:43:3344:58 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3344:25:3344:59 | newOMIWithElement(...) : OrderedMapIterator [] : String | | Test.java:3344:43:3344:58 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:3344:25:3344:59 | newOMIWithElement(...) : OrderedMapIterator [] : String | | Test.java:3351:45:3351:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3351:20:3351:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:3351:45:3351:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3351:20:3351:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:3358:45:3358:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3358:20:3358:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:3358:45:3358:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3358:20:3358:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:3365:45:3365:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3365:20:3365:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:3365:45:3365:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3365:20:3365:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | -| Test.java:3372:45:3372:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3372:20:3372:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:3372:45:3372:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [] : String | Test.java:3372:20:3372:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [] : String | | Test.java:3381:26:3381:28 | out : Put [] : Object | Test.java:242:27:242:44 | container : Put [] : Object | Test.java:242:56:242:85 | getMapKey(...) : Object | Test.java:3381:9:3381:29 | getMapKeyFromPut(...) | | Test.java:3388:19:3388:21 | out : MultiValueMap [] : Object | Test.java:228:18:228:29 | map : MultiValueMap [] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:3388:9:3388:22 | getMapKey(...) | @@ -18680,14 +18554,9 @@ subpaths | Test.java:3437:21:3437:23 | out : BidiMap [] : Object | Test.java:232:20:232:31 | map : BidiMap [] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3437:9:3437:24 | getMapValue(...) | | Test.java:3444:21:3444:23 | out : AbstractMapDecorator [] : Object | Test.java:232:20:232:31 | map : AbstractMapDecorator [] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3444:9:3444:24 | getMapValue(...) | | Test.java:3449:38:3449:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3449:13:3449:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | -| Test.java:3449:38:3449:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3449:13:3449:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | -| Test.java:3456:42:3456:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3456:23:3456:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3456:42:3456:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3456:23:3456:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3463:37:3463:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3463:18:3463:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:3463:37:3463:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3463:18:3463:53 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3470:44:3470:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:3470:17:3470:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | -| Test.java:3470:44:3470:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [] : String | Test.java:3470:17:3470:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [] : String | -| Test.java:3477:49:3477:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3477:30:3477:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3477:49:3477:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:3477:30:3477:65 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:3484:34:3484:49 | (...)... : String | Test.java:285:47:285:51 | key : String | Test.java:285:121:285:121 | m : TreeMap [] : String | Test.java:3484:13:3484:50 | newTreeMapWithMapKey(...) : TreeMap [] : String | | Test.java:3486:26:3486:28 | out : Put [] : String | Test.java:242:27:242:44 | container : Put [] : String | Test.java:242:56:242:85 | getMapKey(...) : String | Test.java:3486:9:3486:29 | getMapKeyFromPut(...) | @@ -18757,35 +18626,24 @@ subpaths | Test.java:3722:41:3722:56 | (...)... : String | Test.java:268:39:268:47 | element : String | Test.java:268:107:268:107 | h : TreeSet [] : String | Test.java:3722:19:3722:57 | newTreeSetWithElement(...) : TreeSet [] : String | | Test.java:3724:20:3724:22 | out : SortedSet [] : String | Test.java:230:19:230:32 | it : SortedSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3724:9:3724:23 | getElement(...) | | Test.java:3729:41:3729:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3729:19:3729:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3729:41:3729:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3729:19:3729:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3736:41:3736:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3736:19:3736:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3736:41:3736:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3736:19:3736:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3743:36:3743:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:3743:13:3743:52 | newHashedMapWithMapKey(...) : HashedMap [] : String | | Test.java:3743:36:3743:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:3743:13:3743:52 | newHashedMapWithMapKey(...) : HashedMap [] : String | | Test.java:3745:19:3745:21 | out : IterableMap [] : String | Test.java:228:18:228:29 | map : IterableMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3745:9:3745:22 | getMapKey(...) | | Test.java:3750:38:3750:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3750:13:3750:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | -| Test.java:3750:38:3750:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3750:13:3750:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | | Test.java:3752:21:3752:23 | out : IterableMap [] : String | Test.java:232:20:232:31 | map : IterableMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3752:9:3752:24 | getMapValue(...) | | Test.java:3757:36:3757:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:3757:13:3757:52 | newHashedMapWithMapKey(...) : HashedMap [] : String | -| Test.java:3757:36:3757:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [] : String | Test.java:3757:13:3757:52 | newHashedMapWithMapKey(...) : HashedMap [] : String | | Test.java:3759:19:3759:21 | out : Map [] : String | Test.java:228:18:228:29 | map : Map [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3759:9:3759:22 | getMapKey(...) | | Test.java:3764:38:3764:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3764:13:3764:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | -| Test.java:3764:38:3764:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [] : String | Test.java:3764:13:3764:54 | newHashedMapWithMapValue(...) : HashedMap [] : String | | Test.java:3766:21:3766:23 | out : Map [] : String | Test.java:232:20:232:31 | map : Map [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3766:9:3766:24 | getMapValue(...) | | Test.java:3771:40:3771:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:3771:14:3771:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | -| Test.java:3771:40:3771:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:3771:14:3771:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:3773:19:3773:21 | out : SortedMap [] : String | Test.java:228:18:228:29 | map : SortedMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3773:9:3773:22 | getMapKey(...) | | Test.java:3778:42:3778:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:3778:14:3778:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:3778:42:3778:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:3778:14:3778:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:3780:21:3780:23 | out : SortedMap [] : String | Test.java:232:20:232:31 | map : SortedMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3780:9:3780:24 | getMapValue(...) | | Test.java:3785:40:3785:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:3785:14:3785:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | -| Test.java:3785:40:3785:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:3785:14:3785:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:3787:19:3787:21 | out : Trie [] : String | Test.java:228:18:228:29 | map : Trie [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3787:9:3787:22 | getMapKey(...) | | Test.java:3792:42:3792:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:3792:14:3792:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:3792:42:3792:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:3792:14:3792:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:3794:21:3794:23 | out : Trie [] : String | Test.java:232:20:232:31 | map : Trie [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3794:9:3794:24 | getMapValue(...) | | Test.java:3799:35:3799:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3799:13:3799:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3799:35:3799:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3799:13:3799:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3800:37:3800:38 | in : TreeBag [] : String | Test.java:7104:33:7104:48 | bag : TreeBag [] : String | Test.java:7104:10:7104:31 | parameter this [Return] : MyAbstractBagDecorator [] : String | Test.java:3800:10:3800:39 | new MyAbstractBagDecorator<>(...) : MyAbstractBagDecorator [] : String | | Test.java:3801:20:3801:22 | out : MyAbstractBagDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractBagDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3801:9:3801:23 | getElement(...) | | Test.java:3807:31:3807:32 | in : Map [] : String | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [] : String | Test.java:3807:10:3807:33 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [] : String | @@ -18794,50 +18652,35 @@ subpaths | Test.java:3814:10:3814:11 | in : MyAbstractMapBag [] : String | Test.java:7113:33:7113:40 | parameter this : MyAbstractMapBag [] : String | Test.java:7114:11:7114:24 | getMap(...) : Map [] : String | Test.java:3814:10:3814:22 | myGetMap(...) : Map [] : String | | Test.java:3815:19:3815:21 | out : Map [] : String | Test.java:228:18:228:29 | map : Map [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3815:9:3815:22 | getMapKey(...) | | Test.java:3820:41:3820:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3820:19:3820:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3820:41:3820:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3820:19:3820:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3821:43:3821:44 | in : TreeBag [] : String | Test.java:7119:39:7119:60 | bag : TreeBag [] : String | Test.java:7119:10:7119:37 | parameter this [Return] : MyAbstractSortedBagDecorator [] : String | Test.java:3821:10:3821:45 | new MyAbstractSortedBagDecorator<>(...) : MyAbstractSortedBagDecorator [] : String | | Test.java:3822:20:3822:22 | out : MyAbstractSortedBagDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractSortedBagDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3822:9:3822:23 | getElement(...) | | Test.java:3827:35:3827:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3827:13:3827:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3827:35:3827:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3827:13:3827:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3829:20:3829:22 | out : CollectionBag [] : String | Test.java:230:19:230:32 | it : CollectionBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3829:9:3829:23 | getElement(...) | | Test.java:3834:35:3834:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3834:13:3834:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3834:35:3834:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3834:13:3834:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3836:20:3836:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3836:9:3836:23 | getElement(...) | | Test.java:3841:41:3841:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3841:19:3841:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3841:41:3841:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3841:19:3841:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3843:20:3843:22 | out : CollectionSortedBag [] : String | Test.java:230:19:230:32 | it : CollectionSortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3843:9:3843:23 | getElement(...) | | Test.java:3848:41:3848:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3848:19:3848:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3848:41:3848:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3848:19:3848:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3850:20:3850:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3850:9:3850:23 | getElement(...) | | Test.java:3855:42:3855:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3855:20:3855:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3855:42:3855:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3855:20:3855:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3857:20:3857:22 | out : HashBag [] : String | Test.java:230:19:230:32 | it : HashBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3857:9:3857:23 | getElement(...) | | Test.java:3862:35:3862:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3862:13:3862:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3862:35:3862:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3862:13:3862:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3864:20:3864:22 | out : PredicatedBag [] : String | Test.java:230:19:230:32 | it : PredicatedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3864:9:3864:23 | getElement(...) | | Test.java:3869:41:3869:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3869:19:3869:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3869:41:3869:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3869:19:3869:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3871:20:3871:22 | out : PredicatedSortedBag [] : String | Test.java:230:19:230:32 | it : PredicatedSortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3871:9:3871:23 | getElement(...) | | Test.java:3876:35:3876:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3876:13:3876:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3876:35:3876:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3876:13:3876:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3878:20:3878:22 | out : SynchronizedBag [] : String | Test.java:230:19:230:32 | it : SynchronizedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3878:9:3878:23 | getElement(...) | | Test.java:3883:41:3883:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3883:19:3883:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3883:41:3883:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3883:19:3883:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3885:20:3885:22 | out : SynchronizedSortedBag [] : String | Test.java:230:19:230:32 | it : SynchronizedSortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3885:9:3885:23 | getElement(...) | | Test.java:3890:35:3890:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3890:13:3890:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3890:35:3890:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3890:13:3890:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3892:20:3892:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3892:9:3892:23 | getElement(...) | | Test.java:3897:41:3897:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3897:19:3897:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3897:41:3897:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3897:19:3897:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3899:20:3899:22 | out : TransformedSortedBag [] : String | Test.java:230:19:230:32 | it : TransformedSortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3899:9:3899:23 | getElement(...) | | Test.java:3904:42:3904:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3904:20:3904:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3904:42:3904:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3904:20:3904:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3906:20:3906:22 | out : TreeBag [] : String | Test.java:230:19:230:32 | it : TreeBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3906:9:3906:23 | getElement(...) | | Test.java:3911:35:3911:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3911:13:3911:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3911:35:3911:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3911:13:3911:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3913:20:3913:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3913:9:3913:23 | getElement(...) | | Test.java:3918:41:3918:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3918:19:3918:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3918:41:3918:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3918:19:3918:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3920:20:3920:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3920:9:3920:23 | getElement(...) | | Test.java:3925:46:3925:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3925:17:3925:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | | Test.java:3926:41:3926:42 | in : DualTreeBidiMap [] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | Test.java:3926:10:3926:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [] : String | @@ -18908,72 +18751,52 @@ subpaths | Test.java:4142:54:4142:69 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:4142:23:4142:70 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | | Test.java:4144:21:4144:23 | out : SortedBidiMap [] : String | Test.java:232:20:232:31 | map : SortedBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:4144:9:4144:24 | getMapValue(...) | | Test.java:4149:42:4149:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4149:20:4149:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4149:42:4149:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4149:20:4149:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4150:44:4150:45 | in : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4150:10:4150:46 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | | Test.java:4151:20:4151:22 | out : MyAbstractCollectionDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4151:9:4151:23 | getElement(...) | | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4156:39:4156:112 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | | Test.java:4156:95:4156:110 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4156:95:4156:110 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4157:10:4157:11 | in : MyAbstractCollectionDecorator [] : String | Test.java:7152:24:7152:34 | parameter this : MyAbstractCollectionDecorator [] : String | Test.java:7153:11:7153:27 | decorated(...) : Collection [] : String | Test.java:4157:10:4157:25 | myDecorated(...) : Collection [] : String | | Test.java:4158:20:4158:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4158:9:4158:23 | getElement(...) | | Test.java:4163:42:4163:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4163:20:4163:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4163:42:4163:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4163:20:4163:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4164:24:4164:25 | in : TreeBag [] : String | Test.java:7155:31:7155:54 | coll : TreeBag [] : String | Test.java:7155:15:7155:29 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4164:4:4164:6 | out [post update] : MyAbstractCollectionDecorator [] : String | | Test.java:4165:20:4165:22 | out : MyAbstractCollectionDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4165:9:4165:23 | getElement(...) | | Test.java:4173:20:4173:22 | out : CompositeCollection [] : Object | Test.java:230:19:230:32 | it : CompositeCollection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4173:9:4173:23 | getElement(...) | | Test.java:4181:20:4181:34 | getElement(...) : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4181:9:4181:35 | getElement(...) | | Test.java:4181:31:4181:33 | out : List [, ] : Object | Test.java:230:19:230:32 | it : List [, ] : Object | Test.java:230:44:230:63 | next(...) : Object [] : Object | Test.java:4181:20:4181:34 | getElement(...) : Collection [] : Object | | Test.java:4186:42:4186:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4186:20:4186:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4186:42:4186:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4186:20:4186:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4189:20:4189:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4189:9:4189:23 | getElement(...) | | Test.java:4194:42:4194:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4194:20:4194:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4194:42:4194:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4194:20:4194:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4197:20:4197:34 | getElement(...) : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4197:9:4197:35 | getElement(...) | | Test.java:4197:31:4197:33 | out : List [, ] : String | Test.java:230:19:230:32 | it : List [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:4197:20:4197:34 | getElement(...) : Collection [] : String | | Test.java:4202:42:4202:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4202:20:4202:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4202:42:4202:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4202:20:4202:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4204:20:4204:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4204:9:4204:23 | getElement(...) | | Test.java:4209:42:4209:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4209:20:4209:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4209:42:4209:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4209:20:4209:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4211:20:4211:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4211:9:4211:23 | getElement(...) | | Test.java:4216:42:4216:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4216:20:4216:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4216:42:4216:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4216:20:4216:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4218:20:4218:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4218:9:4218:23 | getElement(...) | | Test.java:4223:61:4223:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4223:39:4223:77 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4223:61:4223:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4223:39:4223:77 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4225:20:4225:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4225:9:4225:23 | getElement(...) | | Test.java:4230:42:4230:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4230:20:4230:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4230:42:4230:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4230:20:4230:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4232:20:4232:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4232:9:4232:23 | getElement(...) | | Test.java:4237:42:4237:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4237:20:4237:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4237:42:4237:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4237:20:4237:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4239:20:4239:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4239:9:4239:23 | getElement(...) | | Test.java:4244:42:4244:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4244:20:4244:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4244:42:4244:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4244:20:4244:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4246:20:4246:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4246:9:4246:23 | getElement(...) | | Test.java:4251:61:4251:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4251:39:4251:77 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4251:61:4251:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4251:39:4251:77 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4253:20:4253:22 | out : CompositeCollection [] : String | Test.java:230:19:230:32 | it : CompositeCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4253:9:4253:23 | getElement(...) | | Test.java:4258:75:4258:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4258:53:4258:91 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4258:75:4258:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4258:53:4258:91 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4260:20:4260:34 | getElement(...) : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4260:9:4260:35 | getElement(...) | | Test.java:4260:31:4260:33 | out : List [, ] : String | Test.java:230:19:230:32 | it : List [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:4260:20:4260:34 | getElement(...) : Collection [] : String | | Test.java:4265:75:4265:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4265:53:4265:91 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4265:75:4265:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4265:53:4265:91 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4267:20:4267:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4267:9:4267:23 | getElement(...) | | Test.java:4272:42:4272:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4272:20:4272:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4272:42:4272:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4272:20:4272:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4274:20:4274:22 | out : IndexedCollection [] : String | Test.java:230:19:230:32 | it : IndexedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4274:9:4274:23 | getElement(...) | | Test.java:4279:71:4279:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4279:49:4279:87 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4279:71:4279:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4279:49:4279:87 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4286:42:4286:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4286:20:4286:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4286:42:4286:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4286:20:4286:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4288:20:4288:22 | out : IndexedCollection [] : String | Test.java:230:19:230:32 | it : IndexedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4288:9:4288:23 | getElement(...) | | Test.java:4293:42:4293:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4293:20:4293:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4293:42:4293:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4293:20:4293:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4295:20:4295:22 | out : IndexedCollection [] : String | Test.java:230:19:230:32 | it : IndexedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4295:9:4295:23 | getElement(...) | | Test.java:4300:71:4300:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4300:49:4300:87 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4300:71:4300:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4300:49:4300:87 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4302:20:4302:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4302:9:4302:23 | getElement(...) | | Test.java:4309:20:4309:45 | createPredicatedList(...) : List [] : String | Test.java:230:19:230:32 | it : List [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4309:9:4309:46 | getElement(...) | | Test.java:4316:20:4316:45 | createPredicatedList(...) : List [] : String | Test.java:230:19:230:32 | it : List [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4316:9:4316:46 | getElement(...) | @@ -18982,7 +18805,6 @@ subpaths | Test.java:4328:80:4328:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [] : String | Test.java:4328:38:4328:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [] : String | | Test.java:4330:20:4330:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4330:9:4330:23 | getElement(...) | | Test.java:4335:35:4335:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4335:13:4335:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4335:35:4335:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4335:13:4335:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4338:20:4338:22 | out : Bag [] : String | Test.java:230:19:230:32 | it : Bag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4338:9:4338:23 | getElement(...) | | Test.java:4343:80:4343:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [] : String | Test.java:4343:38:4343:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [] : String | | Test.java:4345:20:4345:22 | out : List [] : String | Test.java:230:19:230:32 | it : List [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4345:9:4345:23 | getElement(...) | @@ -18994,7 +18816,6 @@ subpaths | Test.java:4372:80:4372:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [] : String | Test.java:4372:38:4372:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [] : String | | Test.java:4374:20:4374:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4374:9:4374:23 | getElement(...) | | Test.java:4379:45:4379:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:4379:18:4379:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:4379:45:4379:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:4379:18:4379:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:4382:20:4382:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4382:9:4382:23 | getElement(...) | | Test.java:4387:80:4387:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [] : String | Test.java:4387:38:4387:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [] : String | | Test.java:4389:20:4389:22 | out : Queue [] : String | Test.java:230:19:230:32 | it : Queue [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4389:9:4389:23 | getElement(...) | @@ -19011,21 +18832,16 @@ subpaths | Test.java:4431:80:4431:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [] : String | Test.java:4431:38:4431:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [] : String | | Test.java:4433:20:4433:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4433:9:4433:23 | getElement(...) | | Test.java:4438:42:4438:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4438:20:4438:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4438:42:4438:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4438:20:4438:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4440:20:4440:22 | out : PredicatedCollection [] : String | Test.java:230:19:230:32 | it : PredicatedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4440:9:4440:23 | getElement(...) | | Test.java:4445:42:4445:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4445:20:4445:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4445:42:4445:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4445:20:4445:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4447:20:4447:22 | out : SynchronizedCollection [] : String | Test.java:230:19:230:32 | it : SynchronizedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4447:9:4447:23 | getElement(...) | | Test.java:4452:42:4452:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4452:20:4452:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4452:42:4452:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4452:20:4452:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4454:20:4454:22 | out : TransformedCollection [] : String | Test.java:230:19:230:32 | it : TransformedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4454:9:4454:23 | getElement(...) | | Test.java:4459:42:4459:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4459:20:4459:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4459:42:4459:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4459:20:4459:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4461:20:4461:22 | out : BoundedCollection [] : String | Test.java:230:19:230:32 | it : BoundedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4461:9:4461:23 | getElement(...) | | Test.java:4466:59:4466:74 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [] : String | Test.java:4466:27:4466:75 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [] : String | | Test.java:4468:20:4468:22 | out : BoundedCollection [] : String | Test.java:230:19:230:32 | it : BoundedCollection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4468:9:4468:23 | getElement(...) | | Test.java:4473:42:4473:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4473:20:4473:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4473:42:4473:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4473:20:4473:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4475:20:4475:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4475:9:4475:23 | getElement(...) | | Test.java:4480:45:4480:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4480:18:4480:61 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4481:42:4481:43 | in : ListIterator [] : String | Test.java:7161:38:7161:63 | iterator : ListIterator [] : String | Test.java:7161:10:7161:36 | parameter this [Return] : MyAbstractIteratorDecorator [] : String | Test.java:4481:10:4481:44 | new MyAbstractIteratorDecorator<>(...) : MyAbstractIteratorDecorator [] : String | @@ -19128,7 +18944,6 @@ subpaths | Test.java:4753:49:4753:64 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4753:22:4753:65 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4755:20:4755:22 | out : FilterListIterator [] : String | Test.java:231:19:231:32 | it : FilterListIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4755:9:4755:23 | getElement(...) | | Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:267:39:267:47 | element : ListIterator [] : String | Test.java:267:107:267:107 | b : TreeBag [, ] : String | Test.java:4760:20:4760:86 | newTreeBagWithElement(...) : TreeBag [, ] : String | -| Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:267:39:267:47 | element : ListIterator [] : String | Test.java:267:107:267:107 | b : TreeBag [, ] : String | Test.java:4760:20:4760:86 | newTreeBagWithElement(...) : TreeBag [, ] : String | | Test.java:4760:69:4760:84 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4762:20:4762:22 | out : IteratorChain [] : String | Test.java:231:19:231:32 | it : IteratorChain [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4762:9:4762:23 | getElement(...) | | Test.java:4767:45:4767:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4767:18:4767:61 | newListIteratorWithElement(...) : ListIterator [] : String | @@ -19154,7 +18969,6 @@ subpaths | Test.java:4837:45:4837:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4837:18:4837:61 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4839:20:4839:22 | out : ListIteratorWrapper [] : String | Test.java:231:19:231:32 | it : ListIteratorWrapper [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4839:9:4839:23 | getElement(...) | | Test.java:4844:42:4844:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4844:20:4844:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4844:42:4844:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4844:20:4844:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4846:20:4846:22 | out : LoopingIterator [] : String | Test.java:231:19:231:32 | it : LoopingIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4846:9:4846:23 | getElement(...) | | Test.java:4853:20:4853:22 | out : LoopingListIterator [] : String | Test.java:231:19:231:32 | it : LoopingListIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4853:9:4853:23 | getElement(...) | | Test.java:4860:20:4860:22 | out : ObjectArrayIterator [] : String | Test.java:231:19:231:32 | it : ObjectArrayIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4860:9:4860:23 | getElement(...) | @@ -19229,7 +19043,6 @@ subpaths | Test.java:5208:41:5208:56 | (...)... : String | Test.java:261:41:261:49 | element : String | Test.java:261:61:261:93 | new MultiKey(...) : MultiKey [] : String | Test.java:5208:18:5208:57 | newMultiKeyWithElement(...) : MultiKey [] : String | | Test.java:5210:25:5210:27 | out : Object[] [[]] : String | Test.java:229:24:229:32 | array : Object[] [[]] : String | Test.java:229:44:229:51 | ...[...] : String | Test.java:5210:9:5210:28 | getArrayElement(...) | | Test.java:5215:42:5215:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:5215:20:5215:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:5215:42:5215:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:5215:20:5215:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:5216:35:5216:36 | in : TreeBag [] : String | Test.java:7204:31:7204:64 | coll : TreeBag [] : String | Test.java:7204:10:7204:29 | parameter this [Return] : MyAbstractLinkedList [] : String | Test.java:5216:10:5216:37 | new MyAbstractLinkedList<>(...) : MyAbstractLinkedList [] : String | | Test.java:5217:20:5217:22 | out : MyAbstractLinkedList [] : String | Test.java:230:19:230:32 | it : MyAbstractLinkedList [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5217:9:5217:23 | getElement(...) | | Test.java:5224:20:5224:22 | out : AbstractLinkedList [] : Object | Test.java:230:19:230:32 | it : AbstractLinkedList [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:5224:9:5224:23 | getElement(...) | @@ -19418,24 +19231,19 @@ subpaths | Test.java:6169:40:6169:55 | (...)... : String | Test.java:297:47:297:53 | value : String | Test.java:297:136:297:136 | m : MultiKeyMap [] : String | Test.java:6169:21:6169:56 | newMKMWithMapValue(...) : MultiKeyMap [] : String | | Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:6178:20:6178:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6178:9:6178:23 | getElement(...) | | Test.java:6178:20:6178:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6178:9:6178:23 | getElement(...) | | Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:6185:30:6185:44 | getElement(...) : Entry [] : Object | Test.java:244:29:244:52 | container : Entry [] : Object | Test.java:244:64:244:83 | getValue(...) : Object | Test.java:6185:9:6185:45 | getMapValueFromEntry(...) | | Test.java:6185:30:6185:44 | getElement(...) : Entry [] : String | Test.java:244:29:244:52 | container : Entry [] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:6185:9:6185:45 | getMapValueFromEntry(...) | | Test.java:6185:41:6185:43 | out : Iterator [, ] : Object | Test.java:231:19:231:32 | it : Iterator [, ] : Object | Test.java:231:44:231:52 | next(...) : Object [] : Object | Test.java:6185:30:6185:44 | getElement(...) : Entry [] : Object | | Test.java:6185:41:6185:43 | out : Iterator [, ] : String | Test.java:231:19:231:32 | it : Iterator [, ] : String | Test.java:231:44:231:52 | next(...) : Object [] : String | Test.java:6185:30:6185:44 | getElement(...) : Entry [] : String | | Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [] : String | -| Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [] : String | | Test.java:6192:28:6192:42 | getElement(...) : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:6192:9:6192:43 | getMapKeyFromEntry(...) | | Test.java:6192:39:6192:41 | out : Iterator [, ] : String | Test.java:231:19:231:32 | it : Iterator [, ] : String | Test.java:231:44:231:52 | next(...) : Object [] : String | Test.java:6192:28:6192:42 | getElement(...) : Entry [] : String | | Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:6199:20:6199:22 | out : Iterator [] : Object | Test.java:231:19:231:32 | it : Iterator [] : Object | Test.java:231:44:231:52 | next(...) : Object | Test.java:6199:9:6199:23 | getElement(...) | | Test.java:6199:20:6199:22 | out : Iterator [] : String | Test.java:231:19:231:32 | it : Iterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:6199:9:6199:23 | getElement(...) | | Test.java:6204:47:6204:62 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:6204:26:6204:63 | newVectorWithElement(...) : Vector [] : String | @@ -19452,7 +19260,6 @@ subpaths | Test.java:6241:19:6241:21 | out : MultiValueMap [] : String | Test.java:228:18:228:29 | map : MultiValueMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6241:9:6241:22 | getMapKey(...) | | Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:6248:20:6248:47 | (...)... : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6248:9:6248:48 | getElement(...) | | Test.java:6248:20:6248:47 | (...)... : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6248:9:6248:48 | getElement(...) | | Test.java:6248:44:6248:46 | out : MultiValueMap [, ] : Object | Test.java:232:20:232:31 | map : MultiValueMap [, ] : Object | Test.java:232:43:232:55 | get(...) : Object [] : Object | Test.java:6248:32:6248:47 | getMapValue(...) : Object [] : Object | @@ -19463,12 +19270,10 @@ subpaths | Test.java:6255:44:6255:46 | out : MultiValueMap [] : Object | Test.java:232:20:232:31 | map : MultiValueMap [] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:6255:32:6255:47 | getMapValue(...) : Object | | Test.java:6262:19:6262:21 | out : MultiValueMap [] : Object | Test.java:228:18:228:29 | map : MultiValueMap [] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:6262:9:6262:22 | getMapKey(...) | | Test.java:6267:42:6267:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6267:20:6267:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:6267:42:6267:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6267:20:6267:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:6269:20:6269:47 | (...)... : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6269:9:6269:48 | getElement(...) | | Test.java:6269:44:6269:46 | out : MultiValueMap [, ] : String | Test.java:232:20:232:31 | map : MultiValueMap [, ] : String | Test.java:232:43:232:55 | get(...) : Object [] : String | Test.java:6269:32:6269:47 | getMapValue(...) : Object [] : String | | Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [, ] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [, ] : String | | Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | -| Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [] : String | | Test.java:6276:20:6276:22 | out : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6276:9:6276:23 | getElement(...) | | Test.java:6276:20:6276:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6276:9:6276:23 | getElement(...) | | Test.java:6283:19:6283:21 | out : PassiveExpiringMap [] : String | Test.java:228:18:228:29 | map : PassiveExpiringMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6283:9:6283:22 | getMapKey(...) | @@ -19549,19 +19354,14 @@ subpaths | Test.java:6589:43:6589:58 | (...)... : String | Test.java:272:58:272:62 | key : String | Test.java:272:160:272:160 | m : ArrayListValuedHashMap [] : String | Test.java:6589:24:6589:59 | newALVHMWithMapKey(...) : ArrayListValuedHashMap [] : String | | Test.java:6591:19:6591:21 | out : UnmodifiableMultiValuedMap [] : String | Test.java:240:18:240:46 | container : UnmodifiableMultiValuedMap [] : String | Test.java:240:58:240:93 | next(...) : String | Test.java:6591:9:6591:22 | getMapKey(...) | | Test.java:6596:42:6596:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6596:20:6596:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:6596:42:6596:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6596:20:6596:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:6598:20:6598:22 | out : HashMultiSet [] : String | Test.java:230:19:230:32 | it : HashMultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6598:9:6598:23 | getElement(...) | | Test.java:6603:45:6603:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6603:18:6603:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:6603:45:6603:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6603:18:6603:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:6605:20:6605:22 | out : PredicatedMultiSet [] : String | Test.java:230:19:230:32 | it : PredicatedMultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6605:9:6605:23 | getElement(...) | | Test.java:6610:45:6610:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6610:18:6610:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:6610:45:6610:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6610:18:6610:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:6612:20:6612:22 | out : SynchronizedMultiSet [] : String | Test.java:230:19:230:32 | it : SynchronizedMultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6612:9:6612:23 | getElement(...) | | Test.java:6617:45:6617:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6617:18:6617:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:6617:45:6617:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [] : String | Test.java:6617:18:6617:61 | newHashMultiSetWithElement(...) : HashMultiSet [] : String | | Test.java:6619:20:6619:22 | out : MultiSet [] : String | Test.java:230:19:230:32 | it : MultiSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6619:9:6619:23 | getElement(...) | | Test.java:6688:42:6688:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6688:20:6688:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:6688:42:6688:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6688:20:6688:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:6690:20:6690:22 | out : CircularFifoQueue [] : String | Test.java:230:19:230:32 | it : CircularFifoQueue [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6690:9:6690:23 | getElement(...) | | Test.java:6695:59:6695:74 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [] : String | Test.java:6695:27:6695:75 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [] : String | | Test.java:6702:47:6702:62 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [] : String | Test.java:6702:15:6702:63 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [] : String | @@ -19585,10 +19385,8 @@ subpaths | Test.java:6762:20:6762:34 | getElement(...) : Set [] : Object | Test.java:230:19:230:32 | it : Set [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6762:9:6762:35 | getElement(...) | | Test.java:6762:31:6762:33 | out : List [, ] : Object | Test.java:230:19:230:32 | it : List [, ] : Object | Test.java:230:44:230:63 | next(...) : Object [] : Object | Test.java:6762:20:6762:34 | getElement(...) : Set [] : Object | | Test.java:6767:42:6767:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6767:20:6767:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:6767:42:6767:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6767:20:6767:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:6770:20:6770:22 | out : CompositeSet [] : String | Test.java:230:19:230:32 | it : CompositeSet [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6770:9:6770:23 | getElement(...) | | Test.java:6775:42:6775:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6775:20:6775:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:6775:42:6775:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:6775:20:6775:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:6778:20:6778:34 | getElement(...) : Set [] : String | Test.java:230:19:230:32 | it : Set [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6778:9:6778:35 | getElement(...) | | Test.java:6778:31:6778:33 | out : List [, ] : String | Test.java:230:19:230:32 | it : List [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:6778:20:6778:34 | getElement(...) : Set [] : String | | Test.java:6783:42:6783:57 | (...)... : String | Test.java:260:53:260:61 | element : String | Test.java:260:135:260:135 | x : ListOrderedSet [] : String | Test.java:6783:13:6783:58 | newListOrderedSetWithElement(...) : ListOrderedSet [] : String | @@ -19643,19 +19441,13 @@ subpaths | Test.java:6988:19:6988:21 | out : PatriciaTrie [] : String | Test.java:228:18:228:29 | map : PatriciaTrie [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6988:9:6988:22 | getMapKey(...) | | Test.java:6995:21:6995:23 | out : PatriciaTrie [] : String | Test.java:232:20:232:31 | map : PatriciaTrie [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:6995:9:6995:24 | getMapValue(...) | | Test.java:6999:56:6999:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:6999:30:6999:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | -| Test.java:6999:56:6999:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:6999:30:6999:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:7002:28:7002:30 | out : Entry [] : String | Test.java:238:27:238:50 | container : Entry [] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:7002:9:7002:31 | getMapKeyFromEntry(...) | | Test.java:7006:58:7006:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7006:30:7006:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:7006:58:7006:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7006:30:7006:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:7009:30:7009:32 | out : Entry [] : String | Test.java:244:29:244:52 | container : Entry [] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:7009:9:7009:33 | getMapValueFromEntry(...) | | Test.java:7013:56:7013:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:7013:30:7013:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | -| Test.java:7013:56:7013:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:7013:30:7013:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:7020:58:7020:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7020:30:7020:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:7020:58:7020:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7020:30:7020:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:7028:40:7028:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:7028:14:7028:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:7028:40:7028:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [] : String | Test.java:7028:14:7028:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [] : String | | Test.java:7030:19:7030:21 | out : Trie [] : String | Test.java:228:18:228:29 | map : Trie [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:7030:9:7030:22 | getMapKey(...) | | Test.java:7035:42:7035:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7035:14:7035:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | -| Test.java:7035:42:7035:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:7035:14:7035:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:7037:21:7037:23 | out : Trie [] : String | Test.java:232:20:232:31 | map : Trie [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:7037:9:7037:24 | getMapValue(...) | testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/beans/test.expected b/java/ql/test/library-tests/frameworks/spring/beans/test.expected index 8c015c105f9..f2ed45d01da 100644 --- a/java/ql/test/library-tests/frameworks/spring/beans/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/beans/test.expected @@ -312,13 +312,8 @@ nodes | Test.java:21:10:21:18 | container : MutablePropertyValues [] : PropertyValue | semmle.label | container : MutablePropertyValues [] : PropertyValue | | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue | | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue | -| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue | -| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue | -| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | semmle.label | getPropertyValue(...) : PropertyValue [] : Object | | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | semmle.label | getPropertyValue(...) : PropertyValue [] : Object | | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | semmle.label | getPropertyValue(...) : PropertyValue [] : String | -| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | semmle.label | getPropertyValue(...) : PropertyValue [] : String | -| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | semmle.label | getPropertyValue(...) : PropertyValue [] : Object | | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | semmle.label | getPropertyValue(...) : PropertyValue [] : Object | | Test.java:24:26:24:48 | container : PropertyValue [] : Object | semmle.label | container : PropertyValue [] : Object | | Test.java:24:26:24:48 | container : PropertyValue [] : String | semmle.label | container : PropertyValue [] : String | @@ -540,39 +535,27 @@ nodes | Test.java:279:25:279:27 | out : PropertyValue[] [[]] : PropertyValue | semmle.label | out : PropertyValue[] [[]] : PropertyValue | subpaths | Test.java:57:27:57:29 | out : MutablePropertyValues [] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:57:9:57:30 | getElementDefault(...) | -| Test.java:57:27:57:29 | out : MutablePropertyValues [] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:57:9:57:30 | getElementDefault(...) | | Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [] : Object | Test.java:24:26:24:48 | container : PropertyValue [] : Object | Test.java:25:10:25:28 | getName(...) : String | Test.java:64:9:64:48 | getMapKeyDefault(...) | | Test.java:64:44:64:46 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:64:44:64:46 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [] : Object | | Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [] : Object | Test.java:28:28:28:50 | container : PropertyValue [] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:71:9:71:50 | getMapValueDefault(...) | | Test.java:71:46:71:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:71:46:71:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [] : Object | | Test.java:76:60:76:83 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [] : PropertyValue | Test.java:76:24:76:84 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [] : PropertyValue | | Test.java:78:27:78:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:78:9:78:30 | getElementDefault(...) | -| Test.java:78:27:78:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:78:9:78:30 | getElementDefault(...) | | Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [] : String | Test.java:24:26:24:48 | container : PropertyValue [] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:92:9:92:48 | getMapKeyDefault(...) | | Test.java:92:44:92:46 | out : MutablePropertyValues [, ] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [] : String | -| Test.java:92:44:92:46 | out : MutablePropertyValues [, ] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [] : String | | Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [] : Object | Test.java:28:28:28:50 | container : PropertyValue [] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:99:9:99:50 | getMapValueDefault(...) | | Test.java:99:46:99:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:99:46:99:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:113:27:113:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:113:9:113:30 | getElementDefault(...) | | Test.java:113:27:113:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:113:9:113:30 | getElementDefault(...) | | Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [] : String | Test.java:24:26:24:48 | container : PropertyValue [] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:120:9:120:48 | getMapKeyDefault(...) | | Test.java:120:44:120:46 | out : MutablePropertyValues [, ] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [] : String | -| Test.java:120:44:120:46 | out : MutablePropertyValues [, ] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : String | Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [] : String | | Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [] : Object | Test.java:28:28:28:50 | container : PropertyValue [] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:127:9:127:50 | getMapValueDefault(...) | | Test.java:127:46:127:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:127:46:127:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [] : Object | | Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [] : Object | Test.java:24:26:24:48 | container : PropertyValue [] : Object | Test.java:25:10:25:28 | getName(...) : String | Test.java:141:9:141:48 | getMapKeyDefault(...) | | Test.java:141:44:141:46 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:141:44:141:46 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [] : Object | | Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [] : Object | Test.java:28:28:28:50 | container : PropertyValue [] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:148:9:148:50 | getMapValueDefault(...) | | Test.java:148:46:148:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [] : Object | -| Test.java:148:46:148:48 | out : MutablePropertyValues [, ] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [, ] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [] : Object | Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [] : Object | | Test.java:160:60:160:83 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [] : PropertyValue | Test.java:160:24:160:84 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [] : PropertyValue | | Test.java:162:27:162:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:162:9:162:30 | getElementDefault(...) | -| Test.java:162:27:162:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:162:9:162:30 | getElementDefault(...) | | Test.java:167:68:167:75 | source(...) : Object | Test.java:40:61:40:74 | element : Object | Test.java:41:10:41:57 | new MutablePropertyValues(...) : MutablePropertyValues [, ] : Object | Test.java:167:31:167:76 | newMutablePropertyValuesWithMapValue(...) : MutablePropertyValues [, ] : Object | | Test.java:175:42:175:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [] : PropertyValue | Test.java:175:6:175:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [] : PropertyValue | | Test.java:183:42:183:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [] : PropertyValue | Test.java:183:6:183:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [] : PropertyValue | @@ -580,7 +563,6 @@ subpaths | Test.java:191:42:191:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [] : PropertyValue | Test.java:191:6:191:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [] : PropertyValue | | Test.java:193:25:193:27 | out : PropertyValue[] [[]] : PropertyValue | Test.java:12:24:12:32 | array : PropertyValue[] [[]] : PropertyValue | Test.java:13:10:13:17 | ...[...] : PropertyValue | Test.java:193:9:193:28 | getArrayElement(...) | | Test.java:200:27:200:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:200:9:200:30 | getElementDefault(...) | -| Test.java:200:27:200:29 | out : MutablePropertyValues [] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:200:9:200:30 | getElementDefault(...) | | Test.java:214:26:214:28 | out : PropertyValue [] : String | Test.java:24:26:24:48 | container : PropertyValue [] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:214:9:214:29 | getMapKeyDefault(...) | | Test.java:221:28:221:30 | out : PropertyValue [] : Object | Test.java:28:28:28:50 | container : PropertyValue [] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:221:9:221:31 | getMapValueDefault(...) | | Test.java:228:26:228:28 | out : PropertyValue [] : String | Test.java:24:26:24:48 | container : PropertyValue [] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:228:9:228:29 | getMapKeyDefault(...) | diff --git a/java/ql/test/library-tests/frameworks/spring/cache/test.expected b/java/ql/test/library-tests/frameworks/spring/cache/test.expected index 3d15ea5d79f..5183f66ad64 100644 --- a/java/ql/test/library-tests/frameworks/spring/cache/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/cache/test.expected @@ -156,7 +156,6 @@ nodes | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | semmle.label | container : ValueWrapper [] : Object | | Test.java:42:60:42:68 | container : ValueWrapper [] : Object | semmle.label | container : ValueWrapper [] : Object | | Test.java:42:60:42:74 | get(...) : Object | semmle.label | get(...) : Object | -| Test.java:42:60:42:74 | get(...) : Object | semmle.label | get(...) : Object | | Test.java:51:16:51:23 | source(...) : Object | semmle.label | source(...) : Object | | Test.java:52:10:52:58 | new ValueRetrievalException(...) : ValueRetrievalException [] : Object | semmle.label | new ValueRetrievalException(...) : ValueRetrievalException [] : Object | | Test.java:52:44:52:45 | in : Object | semmle.label | in : Object | @@ -228,13 +227,11 @@ nodes | Test.java:137:21:137:23 | out : ValueWrapper [] : Object | semmle.label | out : ValueWrapper [] : Object | subpaths | Test.java:42:60:42:68 | container : ValueWrapper [] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:42:60:42:74 | get(...) : Object | -| Test.java:42:60:42:68 | container : ValueWrapper [] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:42:60:42:74 | get(...) : Object | | Test.java:53:19:53:21 | out : ValueRetrievalException [] : Object | Test.java:39:19:39:57 | container : ValueRetrievalException [] : Object | Test.java:39:69:39:86 | getKey(...) : Object | Test.java:53:9:53:22 | getMapKey(...) | | Test.java:65:45:65:52 | source(...) : Object | Test.java:13:16:13:29 | element : Object | Test.java:13:3:13:14 | parameter this [Return] : ValueWrapper [] : Object | Test.java:65:28:65:53 | new ValueWrapper(...) : ValueWrapper [] : Object | | Test.java:66:10:66:11 | in : ValueWrapper [] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:66:10:66:17 | get(...) : Object | | Test.java:72:36:72:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:72:15:72:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:74:21:74:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:74:9:74:24 | getMapValue(...) | -| Test.java:74:21:74:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:74:9:74:24 | getMapValue(...) | | Test.java:79:36:79:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:79:15:79:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:86:36:86:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:86:15:86:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:93:30:93:37 | source(...) : Object | Test.java:22:14:22:23 | key : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:93:15:93:44 | new DummyCache(...) : DummyCache [] : Object | @@ -247,5 +244,4 @@ subpaths | Test.java:130:21:130:23 | out : Cache [] : Object | Test.java:41:21:41:35 | container : Cache [] : Object | Test.java:41:47:41:78 | get(...) : Object | Test.java:130:9:130:24 | getMapValue(...) | | Test.java:135:36:135:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:135:15:135:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:137:21:137:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:137:9:137:24 | getMapValue(...) | -| Test.java:137:21:137:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:137:9:137:24 | getMapValue(...) | testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/util/test.expected b/java/ql/test/library-tests/frameworks/spring/util/test.expected index f27398764b8..bb5944e8dee 100644 --- a/java/ql/test/library-tests/frameworks/spring/util/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/util/test.expected @@ -208,12 +208,10 @@ edges | Test.java:53:70:53:76 | element : Object | Test.java:53:56:53:77 | {...} : Object[] [[]] : Object | provenance | | | Test.java:54:37:54:50 | element : Object | Test.java:54:94:54:100 | element : Object | provenance | | | Test.java:54:88:54:88 | p [post update] : Properties [] : Object | Test.java:54:117:54:117 | p : Properties [] : Object | provenance | | -| Test.java:54:88:54:88 | p [post update] : Properties [] : Object | Test.java:54:117:54:117 | p : Properties [] : Object | provenance | | | Test.java:54:94:54:100 | element : Object | Test.java:54:88:54:88 | p [post update] : Properties [] : Object | provenance | MaD:5 | | Test.java:54:94:54:100 | element : Object | Test.java:54:88:54:88 | p [post update] : Properties [] : Object | provenance | MaD:13 | | Test.java:55:39:55:52 | element : Object | Test.java:55:102:55:108 | element : Object | provenance | | | Test.java:55:90:55:90 | p [post update] : Properties [] : Object | Test.java:55:119:55:119 | p : Properties [] : Object | provenance | | -| Test.java:55:90:55:90 | p [post update] : Properties [] : Object | Test.java:55:119:55:119 | p : Properties [] : Object | provenance | | | Test.java:55:102:55:108 | element : Object | Test.java:55:90:55:90 | p [post update] : Properties [] : Object | provenance | MaD:6 | | Test.java:55:102:55:108 | element : Object | Test.java:55:90:55:90 | p [post update] : Properties [] : Object | provenance | MaD:14 | | Test.java:66:17:66:32 | (...)... : String | Test.java:67:33:67:34 | in : String | provenance | | @@ -1264,16 +1262,12 @@ nodes | Test.java:53:70:53:76 | element : Object | semmle.label | element : Object | | Test.java:54:37:54:50 | element : Object | semmle.label | element : Object | | Test.java:54:88:54:88 | p [post update] : Properties [] : Object | semmle.label | p [post update] : Properties [] : Object | -| Test.java:54:88:54:88 | p [post update] : Properties [] : Object | semmle.label | p [post update] : Properties [] : Object | | Test.java:54:94:54:100 | element : Object | semmle.label | element : Object | | Test.java:54:117:54:117 | p : Properties [] : Object | semmle.label | p : Properties [] : Object | -| Test.java:54:117:54:117 | p : Properties [] : Object | semmle.label | p : Properties [] : Object | | Test.java:55:39:55:52 | element : Object | semmle.label | element : Object | | Test.java:55:90:55:90 | p [post update] : Properties [] : Object | semmle.label | p [post update] : Properties [] : Object | -| Test.java:55:90:55:90 | p [post update] : Properties [] : Object | semmle.label | p [post update] : Properties [] : Object | | Test.java:55:102:55:108 | element : Object | semmle.label | element : Object | | Test.java:55:119:55:119 | p : Properties [] : Object | semmle.label | p : Properties [] : Object | -| Test.java:55:119:55:119 | p : Properties [] : Object | semmle.label | p : Properties [] : Object | | Test.java:66:17:66:32 | (...)... : String | semmle.label | (...)... : String | | Test.java:66:25:66:32 | source(...) : Object | semmle.label | source(...) : Object | | Test.java:67:33:67:34 | in : String | semmle.label | in : String | @@ -2338,10 +2332,8 @@ subpaths | Test.java:251:38:251:45 | source(...) : Object | Test.java:53:31:53:44 | element : Object | Test.java:53:56:53:77 | new Object[] : Object[] [[]] : Object | Test.java:251:18:251:46 | newWithArrayElement(...) : Object[] [[]] : Object | | Test.java:253:20:253:22 | out : Collection [] : Object | Test.java:49:19:49:41 | container : Collection [] : Object | Test.java:49:53:49:79 | next(...) : Object | Test.java:253:9:253:23 | getElement(...) | | Test.java:258:44:258:51 | source(...) : Object | Test.java:54:37:54:50 | element : Object | Test.java:54:117:54:117 | p : Properties [] : Object | Test.java:258:20:258:52 | newPropertiesWithMapKey(...) : Properties [] : Object | -| Test.java:258:44:258:51 | source(...) : Object | Test.java:54:37:54:50 | element : Object | Test.java:54:117:54:117 | p : Properties [] : Object | Test.java:258:20:258:52 | newPropertiesWithMapKey(...) : Properties [] : Object | | Test.java:260:19:260:21 | out : Map [] : Object | Test.java:51:21:51:39 | container : Map [] : Object | Test.java:51:51:51:86 | next(...) : Object | Test.java:260:9:260:22 | getMapKey(...) | | Test.java:265:46:265:53 | source(...) : Object | Test.java:55:39:55:52 | element : Object | Test.java:55:119:55:119 | p : Properties [] : Object | Test.java:265:20:265:54 | newPropertiesWithMapValue(...) : Properties [] : Object | -| Test.java:265:46:265:53 | source(...) : Object | Test.java:55:39:55:52 | element : Object | Test.java:55:119:55:119 | p : Properties [] : Object | Test.java:265:20:265:54 | newPropertiesWithMapValue(...) : Properties [] : Object | | Test.java:267:21:267:23 | out : Map [] : Object | Test.java:52:23:52:41 | container : Map [] : Object | Test.java:52:53:52:71 | get(...) : Object | Test.java:267:9:267:24 | getMapValue(...) | | Test.java:274:20:274:22 | out : Iterator [] : Object | Test.java:50:19:50:39 | container : Iterator [] : Object | Test.java:50:51:50:66 | next(...) : Object | Test.java:274:9:274:23 | getElement(...) | | Test.java:281:20:281:35 | getMapValue(...) : List [] : Object | Test.java:49:19:49:41 | container : List [] : Object | Test.java:49:53:49:79 | next(...) : Object | Test.java:281:9:281:36 | getElement(...) | diff --git a/java/ql/test/library-tests/frameworks/stream/test.expected b/java/ql/test/library-tests/frameworks/stream/test.expected index ddb42b6a63d..8fc629e7fd7 100644 --- a/java/ql/test/library-tests/frameworks/stream/test.expected +++ b/java/ql/test/library-tests/frameworks/stream/test.expected @@ -305,12 +305,16 @@ edges | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | +| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | +| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:16 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | +| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | +| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 | | Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | provenance | | | Test.java:240:29:240:47 | source(...) : Object | Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | provenance | | | Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | provenance | | @@ -324,6 +328,8 @@ edges | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:13+MaD:14 | | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 | | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 | +| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 | +| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 | | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | provenance | | | Test.java:249:38:249:56 | source(...) : Object | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | provenance | | | Test.java:250:18:250:18 | a : Object[] [[]] : Object | Test.java:251:26:251:26 | a : Object[] [[]] : Object | provenance | | @@ -335,6 +341,8 @@ edges | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:16 | | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14 | | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14 | | Test.java:251:26:251:26 | a : Object[] [[]] : Object | Test.java:251:26:251:29 | ...[...] | provenance | | | Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | provenance | | | Test.java:252:28:252:46 | source(...) : Object | Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | provenance | | @@ -347,10 +355,20 @@ edges | Test.java:261:43:261:61 | source(...) : Object | Test.java:261:33:261:62 | of(...) : Stream [] : Object | provenance | MaD:56 | | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:12 | | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:264:21:264:21 | x : Object | provenance | MaD:12 | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 | | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | Test.java:269:18:269:20 | out : Object[] [[]] : Object | provenance | | | Test.java:264:21:264:21 | x : Object | Test.java:264:36:264:36 | x : Object | provenance | | | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | provenance | | | Test.java:264:36:264:36 | x : Object | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | provenance | | +| Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | provenance | | +| Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | provenance | | +| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | Test.java:266:29:266:33 | ...[...] : Object | provenance | | +| Test.java:266:29:266:33 | ...[...] : Object | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | provenance | | +| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | Test.java:267:29:267:33 | ...[...] : Object | provenance | | +| Test.java:267:29:267:33 | ...[...] : Object | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | provenance | | | Test.java:269:18:269:20 | out : Object[] [[]] : Object | Test.java:269:18:269:23 | ...[...] | provenance | | | Test.java:273:33:273:62 | of(...) : Stream [] : Object | Test.java:274:13:274:14 | in : Stream [] : Object | provenance | | | Test.java:273:43:273:61 | source(...) : Object | Test.java:273:33:273:62 | of(...) : Stream [] : Object | provenance | MaD:56 | @@ -790,6 +808,16 @@ nodes | Test.java:264:21:264:21 | x : Object | semmle.label | x : Object | | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | semmle.label | a [post update] : Object[] [[]] : Object | | Test.java:264:36:264:36 | x : Object | semmle.label | x : Object | +| Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object | +| Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | semmle.label | a1 [Return] : Object[] [[]] : Object | +| Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | +| Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object | +| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | semmle.label | a1 [post update] : Object[] [[]] : Object | +| Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | +| Test.java:266:29:266:33 | ...[...] : Object | semmle.label | ...[...] : Object | +| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | semmle.label | a2 [post update] : Object[] [[]] : Object | +| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object | +| Test.java:267:29:267:33 | ...[...] : Object | semmle.label | ...[...] : Object | | Test.java:269:18:269:20 | out : Object[] [[]] : Object | semmle.label | out : Object[] [[]] : Object | | Test.java:269:18:269:23 | ...[...] | semmle.label | ...[...] | | Test.java:273:33:273:62 | of(...) : Stream [] : Object | semmle.label | of(...) : Stream [] : Object | @@ -1010,6 +1038,8 @@ subpaths | Test.java:208:34:208:36 | out : Object[] [[]] : Object | Test.java:16:27:16:35 | array : Object[] [[]] : Object | Test.java:16:47:16:54 | ...[...] : Object | Test.java:208:18:208:37 | getArrayElement(...) | | Test.java:215:29:215:31 | out : List [] : Object | Test.java:18:22:18:35 | it : List [] : Object | Test.java:18:47:18:66 | next(...) : Object | Test.java:215:18:215:32 | getElement(...) | | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:264:21:264:21 | x : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | | Test.java:289:29:289:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:289:18:289:32 | getElement(...) | | Test.java:319:29:319:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:319:18:319:32 | getElement(...) | | Test.java:335:29:335:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:335:18:335:32 | getElement(...) | From c99a84689b8665d8d2664218c524365fd4aabc53 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 21 Aug 2024 09:56:08 +0100 Subject: [PATCH 120/334] Switch test expectations to use unix-style paths --- .../all-platforms/go/configure-baseline/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py index ea414349666..b0dbb86365b 100644 --- a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py @@ -6,4 +6,4 @@ def test(codeql, go): baseline_info_path = os.path.join("test-db", "baseline-info.json") with open(baseline_info_path, "r") as f: baseline_info = json.load(f) - assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", os.path.join("c", "vendor", "cvendor.go")]), "Expected root.go and cvendor.go in baseline" + assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", "c/vendor/cvendor.go")]), "Expected root.go and cvendor.go in baseline" From 2939cefc68d38685c069ad90aa780a8b9a264308 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 21 Aug 2024 10:15:44 +0100 Subject: [PATCH 121/334] Use platform path separators for file testing, and forward-slashes for reporting to CodeQL --- go/extractor/configurebaseline/configurebaseline.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index fa8023f24a8..f8e2c998f8c 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -18,7 +18,7 @@ func fileExists(path string) bool { // Decides if `dirPath` is a vendor directory by testing whether it is called `vendor` // and contains a `modules.txt` file. func isGolangVendorDirectory(dirPath string) bool { - return path.Base(dirPath) == "vendor" && fileExists(path.Join(dirPath, "modules.txt")) + return filepath.Base(dirPath) == "vendor" && fileExists(filepath.Join(dirPath, "modules.txt")) } type BaselineConfig struct { @@ -38,7 +38,8 @@ func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { return nil } if isGolangVendorDirectory(dirPath) { - vendorDirs = append(vendorDirs, path.Join(dirPath, "**")) + // Note that CodeQL expects a forward-slash-separated path, even on Windows. + vendorDirs = append(vendorDirs, path.Join(filepath.ToSlash(dirPath), "**")) return filepath.SkipDir } else { return nil From f13f19d5dc749666da62136cb1e8e5efa27e2000 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 21 Aug 2024 10:22:42 +0100 Subject: [PATCH 122/334] Fix typo --- .../all-platforms/go/configure-baseline/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py index b0dbb86365b..e92cc868cab 100644 --- a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py +++ b/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py @@ -6,4 +6,4 @@ def test(codeql, go): baseline_info_path = os.path.join("test-db", "baseline-info.json") with open(baseline_info_path, "r") as f: baseline_info = json.load(f) - assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", "c/vendor/cvendor.go")]), "Expected root.go and cvendor.go in baseline" + assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", "c/vendor/cvendor.go"]), "Expected root.go and cvendor.go in baseline" From 88cd77e459f51361feb18bf7175c903b15248da2 Mon Sep 17 00:00:00 2001 From: Felicity Chapman Date: Wed, 21 Aug 2024 10:16:30 +0100 Subject: [PATCH 123/334] Define redirect for renamed article --- .../analyzing-data-flow-in-cpp-new.rst | 6 ++++++ docs/codeql/conf.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst new file mode 100644 index 00000000000..c4d395ae7cd --- /dev/null +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst @@ -0,0 +1,6 @@ +.. _analyzing-data-flow-in-cpp-new: + +Analyzing data flow in C and C++ +================================ + +This article has moved to a new location: https://codeql.github.com/docs/codeql-language-guides/analyzing-data-flow-in-cpp/. diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index 5bc008b7a10..15ea776fb07 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -67,7 +67,7 @@ def setup(sphinx): # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -language = None +language = 'en' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False From 5d14307ea24750a8ba9e8443ebf76e339e03c75e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 21 Aug 2024 11:53:50 +0200 Subject: [PATCH 124/334] C#: Add a SQL injection test case for ASP.NET. --- .../Security Features/CWE-089/SqlInjection.cs | 29 +++++ .../CWE-089/SqlInjection.expected | 110 +++++++++--------- .../Security Features/CWE-089/options | 1 + 3 files changed, 85 insertions(+), 55 deletions(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs index b698edfddce..38dcf94ef8d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs @@ -10,7 +10,12 @@ namespace Test using System.Data; using System.Data.Entity; using System.Data.SqlClient; + using System.Diagnostics.CodeAnalysis; + using System.Threading; + using System.Threading.Tasks; using System.Web.UI.WebControls; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; public class EntityFrameworkContext : DbContext { @@ -110,4 +115,28 @@ namespace Test System.Windows.Forms.TextBox box1; } + + public abstract class MyController : Controller + { + [HttpPost("{userId:string}")] + public async Task GetUserById([FromRoute] string userId, CancellationToken cancellationToken) + { + // This is a vulnerable method due to SQL injection + string query = "SELECT * FROM Users WHERE UserId = '" + userId + "'"; + + using (SqlConnection connection = new SqlConnection("YourConnectionString")) + { + SqlCommand command = new SqlCommand(query, connection); + connection.Open(); + + SqlDataReader reader = command.ExecuteReader(); + while (reader.Read()) + { + Console.WriteLine(String.Format("{0}, {1}", reader["UserId"], reader["Username"])); + } + } + + return Ok(); + } + } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index a6f74041843..df48e097cf8 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -1,14 +1,14 @@ #select | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | This query depends on $@. | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | this database input | | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | This query depends on $@. | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | this file stream | -| SqlInjection.cs:34:50:34:55 | access to local variable query1 | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:34:50:34:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | this ASP.NET user input | -| SqlInjection.cs:69:56:69:61 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:69:56:69:61 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | -| SqlInjection.cs:70:55:70:60 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:70:55:70:60 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | -| SqlInjection.cs:83:50:83:55 | access to local variable query1 | SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:82:21:82:29 | access to property Text : String | this TextBox text | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString | SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:92:21:92:29 | access to property Text : String | this TextBox text | -| SqlInjection.cs:94:50:94:52 | access to local variable cmd | SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:94:50:94:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:92:21:92:29 | access to property Text : String | this TextBox text | -| SqlInjection.cs:104:42:104:52 | access to local variable queryString | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | this read from stdin | -| SqlInjection.cs:105:50:105:52 | access to local variable cmd | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:105:50:105:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | this read from stdin | +| SqlInjection.cs:39:50:39:55 | access to local variable query1 | SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:39:50:39:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | this ASP.NET user input | +| SqlInjection.cs:74:56:74:61 | access to local variable query1 | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:74:56:74:61 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | +| SqlInjection.cs:75:55:75:60 | access to local variable query1 | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:75:55:75:60 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | +| SqlInjection.cs:88:50:88:55 | access to local variable query1 | SqlInjection.cs:87:21:87:29 | access to property Text : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:87:21:87:29 | access to property Text : String | this TextBox text | +| SqlInjection.cs:98:42:98:52 | access to local variable queryString | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:97:21:97:29 | access to property Text : String | this TextBox text | +| SqlInjection.cs:99:50:99:52 | access to local variable cmd | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:99:50:99:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:97:21:97:29 | access to property Text : String | this TextBox text | +| SqlInjection.cs:109:42:109:52 | access to local variable queryString | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin | +| SqlInjection.cs:110:50:110:52 | access to local variable cmd | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:110:50:110:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin | | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | this TextBox text | @@ -40,27 +40,27 @@ edges | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | Sink:MaD:10 | | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | MaD:28 | | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | provenance | | -| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | Sink:MaD:18 | -| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | provenance | MaD:26 | -| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | Sink:MaD:7 | -| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | provenance | Sink:MaD:8 | -| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | provenance | MaD:26 | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | provenance | Sink:MaD:18 | -| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | provenance | | -| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | provenance | Sink:MaD:15 | -| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | provenance | Sink:MaD:17 | -| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 | -| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString | provenance | Sink:MaD:15 | -| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | provenance | Src:MaD:27 | -| SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:105:50:105:52 | access to local variable cmd | provenance | Sink:MaD:17 | -| SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 | +| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | SqlInjection.cs:39:50:39:55 | access to local variable query1 | provenance | Sink:MaD:18 | +| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:38:21:38:40 | access to property Text : String | provenance | MaD:26 | +| SqlInjection.cs:38:21:38:40 | access to property Text : String | SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | provenance | | +| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:74:56:74:61 | access to local variable query1 | provenance | Sink:MaD:7 | +| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:75:55:75:60 | access to local variable query1 | provenance | Sink:MaD:8 | +| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:73:33:73:52 | access to property Text : String | provenance | MaD:26 | +| SqlInjection.cs:73:33:73:52 | access to property Text : String | SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | provenance | | +| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | provenance | Sink:MaD:18 | +| SqlInjection.cs:87:21:87:29 | access to property Text : String | SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | provenance | | +| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | provenance | Sink:MaD:15 | +| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | provenance | | +| SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | provenance | | +| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:99:50:99:52 | access to local variable cmd | provenance | Sink:MaD:17 | +| SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | provenance | | +| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 | +| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | provenance | Sink:MaD:15 | +| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | provenance | | +| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | provenance | Src:MaD:27 | +| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:110:50:110:52 | access to local variable cmd | provenance | Sink:MaD:17 | +| SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | provenance | | +| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 | | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | Sink:MaD:4 | | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | provenance | | | SqlInjectionDapper.cs:29:21:29:25 | access to local variable query : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | Sink:MaD:5 | @@ -144,32 +144,32 @@ nodes | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | semmle.label | access to local variable sql : String | | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | semmle.label | call to method Trim : String | | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | semmle.label | access to local variable sql | -| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | -| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | -| SqlInjection.cs:33:21:33:40 | access to property Text : String | semmle.label | access to property Text : String | -| SqlInjection.cs:34:50:34:55 | access to local variable query1 | semmle.label | access to local variable query1 | -| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | -| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | semmle.label | access to property Text : String | -| SqlInjection.cs:69:56:69:61 | access to local variable query1 | semmle.label | access to local variable query1 | -| SqlInjection.cs:70:55:70:60 | access to local variable query1 | semmle.label | access to local variable query1 | -| SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | -| SqlInjection.cs:82:21:82:29 | access to property Text : String | semmle.label | access to property Text : String | -| SqlInjection.cs:83:50:83:55 | access to local variable query1 | semmle.label | access to local variable query1 | -| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | semmle.label | access to property Text : String | -| SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | -| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString | semmle.label | access to local variable queryString | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:94:50:94:52 | access to local variable cmd | semmle.label | access to local variable cmd | -| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | -| SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | -| SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | -| SqlInjection.cs:104:42:104:52 | access to local variable queryString | semmle.label | access to local variable queryString | -| SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:105:50:105:52 | access to local variable cmd | semmle.label | access to local variable cmd | +| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | +| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | +| SqlInjection.cs:38:21:38:40 | access to property Text : String | semmle.label | access to property Text : String | +| SqlInjection.cs:39:50:39:55 | access to local variable query1 | semmle.label | access to local variable query1 | +| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | +| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | +| SqlInjection.cs:73:33:73:52 | access to property Text : String | semmle.label | access to property Text : String | +| SqlInjection.cs:74:56:74:61 | access to local variable query1 | semmle.label | access to local variable query1 | +| SqlInjection.cs:75:55:75:60 | access to local variable query1 | semmle.label | access to local variable query1 | +| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | +| SqlInjection.cs:87:21:87:29 | access to property Text : String | semmle.label | access to property Text : String | +| SqlInjection.cs:88:50:88:55 | access to local variable query1 | semmle.label | access to local variable query1 | +| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | +| SqlInjection.cs:97:21:97:29 | access to property Text : String | semmle.label | access to property Text : String | +| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | +| SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | +| SqlInjection.cs:98:42:98:52 | access to local variable queryString | semmle.label | access to local variable queryString | +| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | +| SqlInjection.cs:99:50:99:52 | access to local variable cmd | semmle.label | access to local variable cmd | +| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | +| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | +| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | +| SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | +| SqlInjection.cs:109:42:109:52 | access to local variable queryString | semmle.label | access to local variable queryString | +| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | +| SqlInjection.cs:110:50:110:52 | access to local variable cmd | semmle.label | access to local variable cmd | | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | semmle.label | access to local variable query : String | | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | semmle.label | access to property Text : String | | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | semmle.label | access to local variable query | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/options b/csharp/ql/test/query-tests/Security Features/CWE-089/options index 656d05b7449..c6ef0c87f2d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/options @@ -3,3 +3,4 @@ semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resour 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 +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj From 75772c58321ca70f682c4b18d995fc485db71d67 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 21 Aug 2024 12:08:21 +0200 Subject: [PATCH 125/334] C#: Add abstract controller remote flow source example. --- .../aspremote/AspRemoteFlowSource.cs | 7 ++++- .../frameworks/microsoft/AspNetCore.cs | 26 +++++++++---------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/AspRemoteFlowSource.cs b/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/AspRemoteFlowSource.cs index 7f110e5c6fd..176f95e4a89 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/AspRemoteFlowSource.cs +++ b/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/AspRemoteFlowSource.cs @@ -58,4 +58,9 @@ namespace Testing app.Run(); } } -} \ No newline at end of file + + public abstract class AbstractTestController : Controller + { + public void MyActionMethod(string param) { } + } +} diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.cs b/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.cs index 78095254d09..bcf0c766f34 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.cs +++ b/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.cs @@ -56,6 +56,15 @@ public class HomeController5 : HomeController4 } } +// is abstract +public abstract class HomeController6 : Controller +{ + public string Index() + { + return "This is Home Controller"; + } +} + // is not public internal class NotHomeController : Controller { @@ -65,17 +74,8 @@ internal class NotHomeController : Controller } } -// is abstract -public abstract class NotHomeController2 : Controller -{ - public string Index() - { - return "This is Home Controller"; - } -} - // contains generic parameters -public class NotHomeController3 : Controller +public class NotHomeController2 : Controller { public string Index() { @@ -85,7 +85,7 @@ public class NotHomeController3 : Controller // has [NonController] attribute [NonController] -public class NotHomeController4 : Controller +public class NotHomeController3 : Controller { public string Index() { @@ -94,10 +94,10 @@ public class NotHomeController4 : Controller } // derived from a class that has [NonController] attribute -public class NotController : NotHomeController4 +public class NotController : NotHomeController3 { public string Index() { return "This is Home Controller"; } -} \ No newline at end of file +} From 79718f1cd6d71d0e79819ae7aeac9a56f419e02e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 21 Aug 2024 12:09:09 +0200 Subject: [PATCH 126/334] C#: Remove requirement that a controller is not allowed to be abstract. --- .../lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll index 08ff4df55cb..350465052d1 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/AspNetCore.qll @@ -205,7 +205,6 @@ class MicrosoftAspNetCoreMvcController extends Class { ) ) and this.isPublic() and - (not this.isAbstract() or this instanceof MicrosoftAspNetCoreMvcControllerBaseClass) and not this instanceof Generic and ( this.getABaseType*() instanceof MicrosoftAspNetCoreMvcControllerBaseClass From 45d4d5138ac4aa12fafa479659782c35519c23d7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 21 Aug 2024 12:18:50 +0200 Subject: [PATCH 127/334] C#: Update expected test output. --- .../flowsources/aspremote/aspRemoteFlowSource.expected | 1 + .../library-tests/frameworks/microsoft/AspNetCore.expected | 1 + .../Security Features/CWE-089/SqlInjection.expected | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/aspRemoteFlowSource.expected b/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/aspRemoteFlowSource.expected index 199ed69f28f..a7442a80839 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/aspRemoteFlowSource.expected +++ b/csharp/ql/test/library-tests/dataflow/flowsources/aspremote/aspRemoteFlowSource.expected @@ -12,3 +12,4 @@ remoteFlowSources | AspRemoteFlowSource.cs:53:63:53:73 | mapPutParam | | AspRemoteFlowSource.cs:54:69:54:82 | mapDeleteParam | | AspRemoteFlowSource.cs:56:41:56:44 | item | +| AspRemoteFlowSource.cs:64:43:64:47 | param | diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.expected b/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.expected index c4c58957115..e9866698ccd 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/AspNetCore.expected @@ -4,3 +4,4 @@ | AspNetCore.cs:32:14:32:28 | HomeController3 | | AspNetCore.cs:42:14:42:28 | HomeController4 | | AspNetCore.cs:51:14:51:28 | HomeController5 | +| AspNetCore.cs:60:23:60:37 | HomeController6 | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index df48e097cf8..7a0e0fad181 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -9,6 +9,7 @@ | SqlInjection.cs:99:50:99:52 | access to local variable cmd | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:99:50:99:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:97:21:97:29 | access to property Text : String | this TextBox text | | SqlInjection.cs:109:42:109:52 | access to local variable queryString | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin | | SqlInjection.cs:110:50:110:52 | access to local variable cmd | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:110:50:110:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin | +| SqlInjection.cs:129:53:129:57 | access to local variable query | SqlInjection.cs:122:73:122:78 | userId : String | SqlInjection.cs:129:53:129:57 | access to local variable query | This query depends on $@. | SqlInjection.cs:122:73:122:78 | userId : String | this ASP.NET Core MVC action method parameter | | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | this TextBox text | | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | this TextBox text | @@ -61,6 +62,8 @@ edges | SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:110:50:110:52 | access to local variable cmd | provenance | Sink:MaD:17 | | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | provenance | | | SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 | +| SqlInjection.cs:122:73:122:78 | userId : String | SqlInjection.cs:125:20:125:24 | access to local variable query : String | provenance | | +| SqlInjection.cs:125:20:125:24 | access to local variable query : String | SqlInjection.cs:129:53:129:57 | access to local variable query | provenance | Sink:MaD:16 | | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | Sink:MaD:4 | | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | provenance | | | SqlInjectionDapper.cs:29:21:29:25 | access to local variable query : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | Sink:MaD:5 | @@ -170,6 +173,9 @@ nodes | SqlInjection.cs:109:42:109:52 | access to local variable queryString | semmle.label | access to local variable queryString | | SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | | SqlInjection.cs:110:50:110:52 | access to local variable cmd | semmle.label | access to local variable cmd | +| SqlInjection.cs:122:73:122:78 | userId : String | semmle.label | userId : String | +| SqlInjection.cs:125:20:125:24 | access to local variable query : String | semmle.label | access to local variable query : String | +| SqlInjection.cs:129:53:129:57 | access to local variable query | semmle.label | access to local variable query | | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | semmle.label | access to local variable query : String | | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | semmle.label | access to property Text : String | | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | semmle.label | access to local variable query | From 771992ca9fddb4c12b37014f4e2b8873762bb8b4 Mon Sep 17 00:00:00 2001 From: Felicity Chapman Date: Wed, 21 Aug 2024 12:18:12 +0100 Subject: [PATCH 128/334] Add missing attributes --- .../codeql-language-guides/analyzing-data-flow-in-cpp-new.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst index c4d395ae7cd..a20f5bcdd05 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp-new.rst @@ -1,5 +1,8 @@ .. _analyzing-data-flow-in-cpp-new: +:orphan: +:nosearch: + Analyzing data flow in C and C++ ================================ From 5751fc2d3a7fa4d00aa1ade792f2f62ce6fef1a3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 21 Aug 2024 13:36:47 +0200 Subject: [PATCH 129/334] Java: Reveal false negative in test One of the sinks was flagged for the wrong reason in the test case. The flow into the 'startActivities' sink isn't working properly, but this was not revealed by the test since an alternate, spurious path exists. The spurious path goes through the implicit read at the prior sink and takes a use-use step to the 'startActivities' sink. Swapping the order of the two sinks reveals the false negative. --- .../security/CWE-927/ImplicitPendingIntentsTest.expected | 1 + .../security/CWE-927/ImplicitPendingIntentsTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected index 48de9172b36..1dc60bf81c4 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected @@ -1,2 +1,3 @@ failures testFailures +| ImplicitPendingIntentsTest.java:35:60:35:87 | // $hasImplicitPendingIntent | Missing result:hasImplicitPendingIntent= | diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java index 746c9ca83dc..bb680ebf35c 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java @@ -32,8 +32,8 @@ public class ImplicitPendingIntentsTest { PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent ctx.startActivities(new Intent[] {fwdIntent}); // $hasImplicitPendingIntent + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent ctx.startService(fwdIntent); // Safe ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent From f7ea8a15639f6562215024c9c7867dc77b16af2f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 21 Aug 2024 13:37:38 +0200 Subject: [PATCH 130/334] Java: trivial result set re-order --- .../security/CWE-927/ImplicitPendingIntentsTest.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected index 1dc60bf81c4..20a754571c4 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected @@ -1,3 +1,3 @@ -failures testFailures | ImplicitPendingIntentsTest.java:35:60:35:87 | // $hasImplicitPendingIntent | Missing result:hasImplicitPendingIntent= | +failures From 3aa32e4aff844d141de435e90276ade6ada19563 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 21 Aug 2024 13:40:40 +0200 Subject: [PATCH 131/334] Java: use MISSING inline annotation --- .../security/CWE-927/ImplicitPendingIntentsTest.expected | 1 - .../security/CWE-927/ImplicitPendingIntentsTest.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected index 20a754571c4..8ec8033d086 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected @@ -1,3 +1,2 @@ testFailures -| ImplicitPendingIntentsTest.java:35:60:35:87 | // $hasImplicitPendingIntent | Missing result:hasImplicitPendingIntent= | failures diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java index bb680ebf35c..80f66149221 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java @@ -32,7 +32,7 @@ public class ImplicitPendingIntentsTest { PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivities(new Intent[] {fwdIntent}); // $hasImplicitPendingIntent + ctx.startActivities(new Intent[] {fwdIntent}); // $ MISSING: hasImplicitPendingIntent ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent ctx.startService(fwdIntent); // Safe ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent From 7049499e95fcbc69a2ccd9a479b9eb4d665a2c31 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 21 Aug 2024 14:38:55 +0200 Subject: [PATCH 132/334] C#: Add change-note. --- .../ql/lib/change-notes/2024-08-21-abstract-asp-controller.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-08-21-abstract-asp-controller.md diff --git a/csharp/ql/lib/change-notes/2024-08-21-abstract-asp-controller.md b/csharp/ql/lib/change-notes/2024-08-21-abstract-asp-controller.md new file mode 100644 index 00000000000..61d4f6ec600 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-08-21-abstract-asp-controller.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Parameters of public methods in abstract controller-like classes are now considered remote flow sources. From 7c4733e88f7f54c8a9afd5c1405ac1882447034d Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 21 Aug 2024 15:13:14 +0200 Subject: [PATCH 133/334] C#: Change reporting location of partial methods --- .../Entities/OrdinaryMethod.cs | 2 +- .../library-tests/partial/MethodIsPartial.expected | 2 +- csharp/ql/test/library-tests/partial/Partial1.expected | 2 +- csharp/ql/test/library-tests/partial/Partial2.expected | 4 ++-- .../library-tests/partial/PartialMethodBody.expected | 2 +- csharp/ql/test/library-tests/partial/PrintAst.expected | 10 +++++----- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs index 9ecfb3687b6..bd3a637a624 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs @@ -21,7 +21,7 @@ namespace Semmle.Extraction.CSharp.Entities public override Microsoft.CodeAnalysis.Location ReportingLocation => IsCompilerGeneratedDelegate() ? Symbol.ContainingType.GetSymbolLocation() - : Symbol.GetSymbolLocation(); + : BodyDeclaringSymbol.GetSymbolLocation(); public override bool NeedsPopulation => base.NeedsPopulation || IsCompilerGeneratedDelegate(); diff --git a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected index 8ee8f25b0c8..66f2dc7d3a0 100644 --- a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected +++ b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected @@ -1,6 +1,6 @@ -| Partial.cs:3:18:3:39 | PartialMethodWithBody1 | true | | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | true | | Partial.cs:5:17:5:23 | Method2 | false | +| Partial.cs:10:18:10:39 | PartialMethodWithBody1 | true | | Partial.cs:11:17:11:23 | Method3 | false | | Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | true | | Partial.cs:17:17:17:23 | Method4 | false | diff --git a/csharp/ql/test/library-tests/partial/Partial1.expected b/csharp/ql/test/library-tests/partial/Partial1.expected index 722482cac4f..6830307e8e7 100644 --- a/csharp/ql/test/library-tests/partial/Partial1.expected +++ b/csharp/ql/test/library-tests/partial/Partial1.expected @@ -1,6 +1,6 @@ | Partial.cs:1:15:1:26 | TwoPartClass | -| Partial.cs:3:18:3:39 | PartialMethodWithBody1 | | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | | Partial.cs:8:15:8:26 | TwoPartClass | +| Partial.cs:10:18:10:39 | PartialMethodWithBody1 | | Partial.cs:14:15:14:33 | OnePartPartialClass | | Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | diff --git a/csharp/ql/test/library-tests/partial/Partial2.expected b/csharp/ql/test/library-tests/partial/Partial2.expected index 6723b575fc7..de1327fe159 100644 --- a/csharp/ql/test/library-tests/partial/Partial2.expected +++ b/csharp/ql/test/library-tests/partial/Partial2.expected @@ -1,10 +1,10 @@ -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:3:18:3:39 | PartialMethodWithBody1 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | +| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:10:18:10:39 | PartialMethodWithBody1 | | Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:11:17:11:23 | Method3 | -| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:3:18:3:39 | PartialMethodWithBody1 | | Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | | Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | +| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:10:18:10:39 | PartialMethodWithBody1 | | Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:11:17:11:23 | Method3 | | Partial.cs:14:15:14:33 | OnePartPartialClass | Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | | Partial.cs:14:15:14:33 | OnePartPartialClass | Partial.cs:17:17:17:23 | Method4 | diff --git a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected index e6592704f1a..b440bfb640b 100644 --- a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected +++ b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected @@ -1,3 +1,3 @@ -| Partial.cs:3:18:3:39 | PartialMethodWithBody1 | true | | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | false | +| Partial.cs:10:18:10:39 | PartialMethodWithBody1 | true | | Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | false | diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index 264e06ce944..08e8e66d40e 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -1,13 +1,13 @@ Partial.cs: # 1| [Class] TwoPartClass -# 3| 5: [Method] PartialMethodWithBody1 -# 3| -1: [TypeMention] Void -# 10| 4: [BlockStmt] {...} -# 4| 6: [Method] PartialMethodWithoutBody1 +# 4| 5: [Method] PartialMethodWithoutBody1 # 4| -1: [TypeMention] Void -# 5| 7: [Method] Method2 +# 5| 6: [Method] Method2 # 5| -1: [TypeMention] Void # 5| 4: [BlockStmt] {...} +# 10| 7: [Method] PartialMethodWithBody1 +# 3| -1: [TypeMention] Void +# 10| 4: [BlockStmt] {...} # 11| 8: [Method] Method3 # 11| -1: [TypeMention] Void # 11| 4: [BlockStmt] {...} From 318a376a78d3e715be9b6ae7422c00049b902f3b Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 21 Aug 2024 09:43:04 -0400 Subject: [PATCH 134/334] Remove ProcAttr models Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/ext/os.model.yml | 1 - go/ql/lib/ext/syscall.model.yml | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index 592b55377f5..3d87eefe43f 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -56,4 +56,3 @@ extensions: - ["os", "", False, "UserCacheDir", "", "", "ReturnValue[0]", "environment", "manual"] - ["os", "", False, "UserConfigDir", "", "", "ReturnValue[0]", "environment", "manual"] - ["os", "", False, "UserHomeDir", "", "", "ReturnValue[0]", "environment", "manual"] - - ["os", "ProcAttr", False, "Env", "", "", "", "environment", "manual"] # TODO: when sources can have access paths, use .ArrayElement diff --git a/go/ql/lib/ext/syscall.model.yml b/go/ql/lib/ext/syscall.model.yml index 00ab6018c3f..9d65f2bedbd 100644 --- a/go/ql/lib/ext/syscall.model.yml +++ b/go/ql/lib/ext/syscall.model.yml @@ -25,5 +25,4 @@ extensions: extensible: sourceModel data: - ["syscall", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] - - ["syscall", "", False, "Getenv", "", "", "ReturnValue[0]", "environment", "manual"] - - ["syscall", "ProcAttr", True, "Env", "", "", "", "environment", "manual"] \ No newline at end of file + - ["syscall", "", False, "Getenv", "", "", "ReturnValue[0]", "environment", "manual"] \ No newline at end of file From 7ae52425cea0888ba197b8f73b31766c9a95d3fe Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 21 Aug 2024 09:43:24 -0400 Subject: [PATCH 135/334] Update package list in change note --- go/ql/lib/change-notes/2024-08-12-add-environment-models.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md index 0b0317da839..c511718475d 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md +++ b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md @@ -3,6 +3,9 @@ category: minorAnalysis --- * Local source models for reading and parsing environment variables have been added for the following libraries: - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy - github.com/hashicorp/go-envparse - github.com/joho/godotenv - github.com/kelseyhightower/envconfig From 210ea5be79e02183d84b9fceb2a7268eea4f1ef5 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 21 Aug 2024 09:43:58 -0400 Subject: [PATCH 136/334] Add model from older versions of caarlos0/env Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/ext/github.com.caarlos0.env.model.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/go/ql/lib/ext/github.com.caarlos0.env.model.yml b/go/ql/lib/ext/github.com.caarlos0.env.model.yml index 58576632ea5..42f6380c3fa 100644 --- a/go/ql/lib/ext/github.com.caarlos0.env.model.yml +++ b/go/ql/lib/ext/github.com.caarlos0.env.model.yml @@ -6,6 +6,7 @@ extensions: - ["github.com/caarlos0/env", "", False, "Parse", "", "", "Argument[0]", "environment", "manual"] - ["github.com/caarlos0/env", "", False, "ParseAs", "", "", "ReturnValue[0]", "environment", "manual"] - ["github.com/caarlos0/env", "", False, "ParseAsWithOptions", "", "", "ReturnValue[0]", "environment", "manual"] + - ["github.com/caarlos0/env", "", False, "ParseWithFuncs", "", "", "Argument[0]", "environment", "manual"] - ["github.com/caarlos0/env", "", False, "ParseWithOptions", "", "", "Argument[0]", "environment", "manual"] - addsTo: pack: codeql/go-all From 2aa3e1f7a264c5aa5f2acf0489633ff6bbc68c5f Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Wed, 21 Aug 2024 09:44:20 -0400 Subject: [PATCH 137/334] Alphabetize models Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/lib/ext/github.com.gobuffalo.envy.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml b/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml index aaedbb254c9..1d0d890560d 100644 --- a/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml +++ b/go/ql/lib/ext/github.com.gobuffalo.envy.model.yml @@ -5,8 +5,8 @@ extensions: data: - ["github.com/gobuffalo/envy", "", False, "Environ", "", "", "ReturnValue", "environment", "manual"] - ["github.com/gobuffalo/envy", "", False, "Get", "", "", "ReturnValue", "environment", "manual"] + - ["github.com/gobuffalo/envy", "", False, "GoBin", "", "", "ReturnValue", "environment", "manual"] - ["github.com/gobuffalo/envy", "", False, "GoPath", "", "", "ReturnValue", "environment", "manual"] - ["github.com/gobuffalo/envy", "", False, "GoPaths", "", "", "ReturnValue", "environment", "manual"] - - ["github.com/gobuffalo/envy", "", False, "GoBin", "", "", "ReturnValue", "environment", "manual"] - ["github.com/gobuffalo/envy", "", False, "Map", "", "", "ReturnValue", "environment", "manual"] - ["github.com/gobuffalo/envy", "", False, "MustGet", "", "", "ReturnValue[0]", "environment", "manual"] From 6fdff977e500bdbbf0d0f1f0fa588ab094f47b40 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Aug 2024 09:47:46 -0400 Subject: [PATCH 138/334] Fix test cases --- .../go/dataflow/flowsources/local/environment/test.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go index 400f38fd133..515888f570e 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/test.go @@ -86,6 +86,10 @@ func caarlos0EnvironmentVariables() { cfg, err = env.ParseAs[config]() // $ source + if err != nil { + return + } + fmt.Printf("HOME: %s\n", cfg.Home) } @@ -104,8 +108,8 @@ func syscallEnvironmentVariables() { fmt.Println("%s", envVar) } - home, err := syscall.Getenv("HOME") // $ source - if err != nil { + home, found := syscall.Getenv("HOME") // $ source + if !found { return } fmt.Println("HOME: %s", home) From c2fa72196652ad7b15d0205625116141fbdf324a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Aug 2024 09:56:42 -0400 Subject: [PATCH 139/334] Fix stub --- .../environment/vendor/github.com/caarlos0/env/stub.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go index c504b1b17b9..9223a3f4677 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/environment/vendor/github.com/caarlos0/env/stub.go @@ -1,6 +1,6 @@ package env -type Options struct {} +type Options struct{} func Must[T any](t T, err error) T { if err != nil { @@ -14,11 +14,13 @@ func Parse(v interface{}) error { } func ParseAs[T any]() (T, error) { - return nil, nil + var t T + return t, nil } func ParseAsWithOptions[T any](opts Options) (T, error) { - return nil, nil + var t T + return t, nil } func ParseWithOptions(v interface{}, opts Options) error { @@ -27,4 +29,4 @@ func ParseWithOptions(v interface{}, opts Options) error { func ToMap(env []string) map[string]string { return nil -} \ No newline at end of file +} From f7bf5e89be3933ab8994df4e4efaafe1031ec2b2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 21 Aug 2024 15:58:05 +0200 Subject: [PATCH 140/334] Add change note --- csharp/ql/lib/change-notes/2024-08-21-partial-methods.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-08-21-partial-methods.md diff --git a/csharp/ql/lib/change-notes/2024-08-21-partial-methods.md b/csharp/ql/lib/change-notes/2024-08-21-partial-methods.md new file mode 100644 index 00000000000..f750ccacf57 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-08-21-partial-methods.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The reported location of `partial` methods has been changed from the definition to the implementation part. From b0003c045373965438cb71ecd32837e23db326d4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 21 Aug 2024 16:58:53 +0200 Subject: [PATCH 141/334] Ruby: Remove two redundant checks --- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 78f0491ff13..20db26be92f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -1191,8 +1191,7 @@ private module ParameterNodes { /** Holds if a read-step should be added into parameter `p`. */ predicate readInto(ParameterNode p, ContentSet c) { exists(int n | - isParameterNode(p, callable, any(ParameterPosition pos | pos.isPositional(n))) and - not exists(int i | splatParameterAt(callable.asCfgScope(), i) and i < n) + isParameterNode(p, callable, any(ParameterPosition pos | pos.isPositional(n))) | c = getArrayContent(n) or @@ -1465,7 +1464,6 @@ module ArgumentNodes { exists(int n, ArgumentPosition pos | arg.isArgumentOf(call, pos) and pos.isPositional(n) and - not exists(int i | splatArgumentAt(call, i) and i < n) and c = getArrayContent(n) ) } From cb1b1da422a8d46dad6ead972112134637a316a5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 21 Aug 2024 19:05:56 +0200 Subject: [PATCH 142/334] Ruby: Add another array flow test --- .../dataflow/array-flow/array-flow.expected | 24 +++++++++++++++++++ .../dataflow/array-flow/array_flow.rb | 15 ++++++++++++ .../type-tracking-array-flow.expected | 1 + 3 files changed, 40 insertions(+) diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected index a9bd1236f47..3899a648b45 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected @@ -2356,6 +2356,16 @@ edges | array_flow.rb:1686:14:1686:14 | w | array_flow.rb:1690:10:1690:10 | w | provenance | | | array_flow.rb:1686:18:1686:18 | a [element 2] | array_flow.rb:1686:11:1686:11 | z | provenance | | | array_flow.rb:1686:18:1686:18 | a [element 3] | array_flow.rb:1686:14:1686:14 | w | provenance | | +| array_flow.rb:1693:10:1693:14 | *args [element 1] | array_flow.rb:1694:17:1694:20 | args [element 1] | provenance | | +| array_flow.rb:1694:16:1694:20 | * ... [element 1] | array_flow.rb:1694:5:1694:21 | call to [] [element 1] | provenance | | +| array_flow.rb:1694:17:1694:20 | args [element 1] | array_flow.rb:1694:16:1694:20 | * ... [element 1] | provenance | | +| array_flow.rb:1697:13:1697:13 | y | array_flow.rb:1699:10:1699:10 | y | provenance | | +| array_flow.rb:1704:5:1704:5 | a [element 1] | array_flow.rb:1705:11:1705:11 | a [element 1] | provenance | | +| array_flow.rb:1704:9:1704:31 | call to m141 [element 1] | array_flow.rb:1704:5:1704:5 | a [element 1] | provenance | | +| array_flow.rb:1704:17:1704:27 | call to source | array_flow.rb:1693:10:1693:14 | *args [element 1] | provenance | | +| array_flow.rb:1704:17:1704:27 | call to source | array_flow.rb:1704:9:1704:31 | call to m141 [element 1] | provenance | | +| array_flow.rb:1705:10:1705:11 | * ... [element 1] | array_flow.rb:1697:13:1697:13 | y | provenance | | +| array_flow.rb:1705:11:1705:11 | a [element 1] | array_flow.rb:1705:10:1705:11 | * ... [element 1] | provenance | | nodes | array_flow.rb:2:5:2:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:2:9:2:20 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -4849,11 +4859,23 @@ nodes | array_flow.rb:1686:18:1686:18 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:1689:10:1689:10 | z | semmle.label | z | | array_flow.rb:1690:10:1690:10 | w | semmle.label | w | +| array_flow.rb:1693:10:1693:14 | *args [element 1] | semmle.label | *args [element 1] | +| array_flow.rb:1694:5:1694:21 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:1694:16:1694:20 | * ... [element 1] | semmle.label | * ... [element 1] | +| array_flow.rb:1694:17:1694:20 | args [element 1] | semmle.label | args [element 1] | +| array_flow.rb:1697:13:1697:13 | y | semmle.label | y | +| array_flow.rb:1699:10:1699:10 | y | semmle.label | y | +| array_flow.rb:1704:5:1704:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:1704:9:1704:31 | call to m141 [element 1] | semmle.label | call to m141 [element 1] | +| array_flow.rb:1704:17:1704:27 | call to source | semmle.label | call to source | +| array_flow.rb:1705:10:1705:11 | * ... [element 1] | semmle.label | * ... [element 1] | +| array_flow.rb:1705:11:1705:11 | a [element 1] | semmle.label | a [element 1] | subpaths | array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:30:251:30 | x | array_flow.rb:253:9:253:25 | call to [] [element 0] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | | array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:26:507:26 | x | array_flow.rb:509:9:509:9 | x | array_flow.rb:507:9:510:7 | call to filter_map [element] | | array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:24:571:24 | x | array_flow.rb:573:9:573:25 | call to [] [element 0] | array_flow.rb:571:9:574:7 | call to flat_map [element] | | array_flow.rb:1678:9:1678:9 | a [element 2] | array_flow.rb:1678:19:1678:19 | x | array_flow.rb:1679:9:1679:9 | x | array_flow.rb:1678:9:1680:7 | call to map [element] | +| array_flow.rb:1704:17:1704:27 | call to source | array_flow.rb:1693:10:1693:14 | *args [element 1] | array_flow.rb:1694:5:1694:21 | call to [] [element 1] | array_flow.rb:1704:9:1704:31 | call to m141 [element 1] | testFailures arrayLiteral | array_flow.rb:9:9:9:25 | call to [] | @@ -5046,6 +5068,7 @@ arrayLiteral | array_flow.rb:1668:14:1668:41 | ...[...] | | array_flow.rb:1677:9:1677:29 | call to [] | | array_flow.rb:1685:9:1685:44 | call to [] | +| array_flow.rb:1694:5:1694:21 | call to [] | #select | array_flow.rb:3:10:3:13 | ...[...] | array_flow.rb:2:10:2:20 | call to source | array_flow.rb:3:10:3:13 | ...[...] | $@ | array_flow.rb:2:10:2:20 | call to source | call to source | | array_flow.rb:5:10:5:13 | ...[...] | array_flow.rb:2:10:2:20 | call to source | array_flow.rb:5:10:5:13 | ...[...] | $@ | array_flow.rb:2:10:2:20 | call to source | call to source | @@ -5749,3 +5772,4 @@ arrayLiteral | array_flow.rb:1681:10:1681:13 | ...[...] | array_flow.rb:1677:16:1677:28 | call to source | array_flow.rb:1681:10:1681:13 | ...[...] | $@ | array_flow.rb:1677:16:1677:28 | call to source | call to source | | array_flow.rb:1689:10:1689:10 | z | array_flow.rb:1685:16:1685:28 | call to source | array_flow.rb:1689:10:1689:10 | z | $@ | array_flow.rb:1685:16:1685:28 | call to source | call to source | | array_flow.rb:1690:10:1690:10 | w | array_flow.rb:1685:31:1685:43 | call to source | array_flow.rb:1690:10:1690:10 | w | $@ | array_flow.rb:1685:31:1685:43 | call to source | call to source | +| array_flow.rb:1699:10:1699:10 | y | array_flow.rb:1704:17:1704:27 | call to source | array_flow.rb:1699:10:1699:10 | y | $@ | array_flow.rb:1704:17:1704:27 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb b/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb index cb07ce96ca6..2edfef21688 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb @@ -1689,3 +1689,18 @@ def m140 sink z # $ hasValueFlow=140.1 sink w # $ hasValueFlow=140.2 end + +def m141(*args) + ::Array.[](*args) +end + +def m142(x, y, z) + sink(x) + sink(y) # $ hasValueFlow=143 + sink(z) +end + +def m143 + a = m141(0, source(143), 1) + m142(*a) +end diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/type-tracking-array-flow.expected b/ruby/ql/test/library-tests/dataflow/array-flow/type-tracking-array-flow.expected index bbb3be53b54..9750c7a94b2 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/type-tracking-array-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/array-flow/type-tracking-array-flow.expected @@ -64,4 +64,5 @@ testFailures | array_flow.rb:1626:19:1626:70 | # $ hasValueFlow=136.2 $ SPURIOUS hasValueFlow=136.1 | Missing result:hasValueFlow=136.1 | | array_flow.rb:1626:19:1626:70 | # $ hasValueFlow=136.2 $ SPURIOUS hasValueFlow=136.1 | Missing result:hasValueFlow=136.2 | | array_flow.rb:1627:19:1627:40 | # $ hasValueFlow=136.1 | Missing result:hasValueFlow=136.1 | +| array_flow.rb:1699:13:1699:32 | # $ hasValueFlow=143 | Missing result:hasValueFlow=143 | failures From 17cd9624fb206b6eaa9bc55f1ba98a06139b0064 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Aug 2024 17:13:52 +0000 Subject: [PATCH 143/334] Release preparation for version 2.18.3 --- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/1.4.1.md | 3 +++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 6 ++++++ .../1.2.1.md} | 9 +++++---- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../lib/change-notes/released/1.7.23.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 ++++ .../src/change-notes/released/1.7.23.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 +++++++++++ .../2024-05-23-static-field-side-effect.md | 4 ---- .../2024-07-10-conditional-compilation.md | 4 ---- .../lib/change-notes/2024-07-19-added-sources.md | 4 ---- csharp/ql/lib/change-notes/released/1.1.0.md | 10 ++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 7 +++++++ .../src/change-notes/2024-08-12-doc-comments.md | 4 ---- .../1.0.6.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/1.0.6.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 14 ++++++++++++++ .../2024-08-12-add-environment-models.md | 11 ----------- .../1.1.5.md} | 15 ++++++++++++--- 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/1.0.6.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/1.0.6.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 12 ++++++++++++ .../2024-08-09-buildless-executable-war.md | 4 ---- .../2024-08-09-buildless-gradle-classifiers.md | 4 ---- .../change-notes/2024-08-13-stdin-threat-model.md | 4 ---- .../2024-08-14-buildless-coder-malfunction.md | 4 ---- java/ql/lib/change-notes/released/3.0.1.md | 11 +++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.1.3.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/1.1.3.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 8 ++++++++ .../1.1.2.md} | 7 ++++--- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/1.0.6.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/1.0.6.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../1.2.0.md} | 9 +++++---- 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/1.0.6.md | 3 +++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.1.1.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/1.0.6.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ++++++ .../1.1.0.md} | 7 ++++--- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.6.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/1.0.6.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.6.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/1.0.6.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/1.0.6.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/1.0.6.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ shared/typeflow/change-notes/released/1.0.6.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/1.0.6.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.6.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/1.0.6.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.6.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.6.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/1.1.2.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 6 ++++++ .../1.0.6.md} | 7 ++++--- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 149 files changed, 389 insertions(+), 137 deletions(-) create mode 100644 cpp/ql/lib/change-notes/released/1.4.1.md rename cpp/ql/src/change-notes/{2024-08-16-uncontrolled-allocation-size.md => released/1.2.1.md} (70%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md delete mode 100644 csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md delete mode 100644 csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md delete mode 100644 csharp/ql/lib/change-notes/2024-07-19-added-sources.md create mode 100644 csharp/ql/lib/change-notes/released/1.1.0.md delete mode 100644 csharp/ql/src/change-notes/2024-08-12-doc-comments.md rename csharp/ql/src/change-notes/{2024-08-07-db-quality-diagnostic.md => released/1.0.6.md} (59%) create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.6.md delete mode 100644 go/ql/lib/change-notes/2024-08-12-add-environment-models.md rename go/ql/lib/change-notes/{2024-08-12-add-file-models.md => released/1.1.5.md} (69%) create mode 100644 go/ql/src/change-notes/released/1.0.6.md create mode 100644 java/ql/automodel/src/change-notes/released/1.0.6.md delete mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md delete mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md delete mode 100644 java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md delete mode 100644 java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md create mode 100644 java/ql/lib/change-notes/released/3.0.1.md create mode 100644 java/ql/src/change-notes/released/1.1.3.md create mode 100644 javascript/ql/lib/change-notes/released/1.1.3.md rename javascript/ql/src/change-notes/{2024-08-16-post-message-source-client-side.md => released/1.1.2.md} (87%) create mode 100644 misc/suite-helpers/change-notes/released/1.0.6.md create mode 100644 python/ql/lib/change-notes/released/1.0.6.md rename python/ql/src/change-notes/{2024-07-23-insecure-cookie-promotion.md => released/1.2.0.md} (85%) create mode 100644 ruby/ql/lib/change-notes/released/1.0.6.md create mode 100644 ruby/ql/src/change-notes/released/1.1.1.md create mode 100644 shared/controlflow/change-notes/released/1.0.6.md rename shared/dataflow/change-notes/{2024-08-20-remove-srcsink-grouping.md => released/1.1.0.md} (82%) create mode 100644 shared/mad/change-notes/released/1.0.6.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.6.md create mode 100644 shared/regex/change-notes/released/1.0.6.md create mode 100644 shared/ssa/change-notes/released/1.0.6.md create mode 100644 shared/threat-models/change-notes/released/1.0.6.md create mode 100644 shared/tutorial/change-notes/released/1.0.6.md create mode 100644 shared/typeflow/change-notes/released/1.0.6.md create mode 100644 shared/typetracking/change-notes/released/1.0.6.md create mode 100644 shared/typos/change-notes/released/1.0.6.md create mode 100644 shared/util/change-notes/released/1.0.6.md create mode 100644 shared/xml/change-notes/released/1.0.6.md create mode 100644 shared/yaml/change-notes/released/1.0.6.md create mode 100644 swift/ql/lib/change-notes/released/1.1.2.md rename swift/ql/src/change-notes/{2024-08-12-cleartext-transmission.md => released/1.0.6.md} (81%) diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 646199bb39c..c66bc4a4552 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.1 + +No user-facing changes. + ## 1.4.0 ### New Features diff --git a/cpp/ql/lib/change-notes/released/1.4.1.md b/cpp/ql/lib/change-notes/released/1.4.1.md new file mode 100644 index 00000000000..38987aa49cd --- /dev/null +++ b/cpp/ql/lib/change-notes/released/1.4.1.md @@ -0,0 +1,3 @@ +## 1.4.1 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index b8b2e97d508..43ccf4467be 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.0 +lastReleaseVersion: 1.4.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 830e4f75408..0db1f9e8036 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.4.1-dev +version: 1.4.1 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 25e322a99b7..d5e4575e097 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.1 + +### Minor Analysis Improvements + +* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. + ## 1.2.0 ### Query Metadata Changes diff --git a/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md b/cpp/ql/src/change-notes/released/1.2.1.md similarity index 70% rename from cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md rename to cpp/ql/src/change-notes/released/1.2.1.md index 4d0d0593363..c7f2fafb36b 100644 --- a/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md +++ b/cpp/ql/src/change-notes/released/1.2.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. \ No newline at end of file +## 1.2.1 + +### Minor Analysis Improvements + +* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 75430e73d1c..73dd403938c 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.2.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 13d1448bf8d..a0728a2475b 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.1-dev +version: 1.2.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index eb7af5234e3..18779106c78 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.23 + +No user-facing changes. + ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md new file mode 100644 index 00000000000..97c0d95c5c3 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md @@ -0,0 +1,3 @@ +## 1.7.23 + +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 6a79a0ec163..55921f9b14a 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.22 +lastReleaseVersion: 1.7.23 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 07db663f549..0c04b5292ef 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.23-dev +version: 1.7.23 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index eb7af5234e3..18779106c78 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.23 + +No user-facing changes. + ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md new file mode 100644 index 00000000000..97c0d95c5c3 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md @@ -0,0 +1,3 @@ +## 1.7.23 + +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 6a79a0ec163..55921f9b14a 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.22 +lastReleaseVersion: 1.7.23 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 880aae8371f..83d083f56c2 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.23-dev +version: 1.7.23 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 50a19e99d36..a2aaab7a542 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 1.1.0 + +### Major Analysis Improvements + +* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. + +### Minor Analysis Improvements + +* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. +* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. + ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md b/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md deleted file mode 100644 index f41dfab76d4..00000000000 --- a/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md b/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md deleted file mode 100644 index a4a59b2abea..00000000000 --- a/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/change-notes/2024-07-19-added-sources.md b/csharp/ql/lib/change-notes/2024-07-19-added-sources.md deleted file mode 100644 index 43e7b947a98..00000000000 --- a/csharp/ql/lib/change-notes/2024-07-19-added-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. diff --git a/csharp/ql/lib/change-notes/released/1.1.0.md b/csharp/ql/lib/change-notes/released/1.1.0.md new file mode 100644 index 00000000000..a02581a221b --- /dev/null +++ b/csharp/ql/lib/change-notes/released/1.1.0.md @@ -0,0 +1,10 @@ +## 1.1.0 + +### Major Analysis Improvements + +* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. + +### Minor Analysis Improvements + +* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. +* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 42da17b3841..2ac15439f56 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.1.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2bba2984c8f..75d559a215d 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.0.6-dev +version: 1.1.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index bd25f8118dd..088c7af07c1 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.0.6 + +### Minor Analysis Improvements + +* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. + ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-08-12-doc-comments.md b/csharp/ql/src/change-notes/2024-08-12-doc-comments.md deleted file mode 100644 index e4c49351f3a..00000000000 --- a/csharp/ql/src/change-notes/2024-08-12-doc-comments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md b/csharp/ql/src/change-notes/released/1.0.6.md similarity index 59% rename from csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md rename to csharp/ql/src/change-notes/released/1.0.6.md index a22d136ce8b..43c27ec7b75 100644 --- a/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md +++ b/csharp/ql/src/change-notes/released/1.0.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. \ No newline at end of file +## 1.0.6 + +### Minor Analysis Improvements + +* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 51699111e25..975b56f78e4 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.6-dev +version: 1.0.6 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 2e7162889c3..6976ee14e27 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.6.md b/go/ql/consistency-queries/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +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 42da17b3841..8033d980afa 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 17f966d2c41..aaa6fc16d08 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.6-dev +version: 1.0.6 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 41cfec4595e..a4aa642333e 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 1.1.5 + +### Minor Analysis Improvements + +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig +* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + ## 1.1.4 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md deleted file mode 100644 index c511718475d..00000000000 --- a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -category: minorAnalysis ---- -* Local source models for reading and parsing environment variables have been added for the following libraries: - - os - - syscall - - github.com/caarlos0/env - - github.com/gobuffalo/envy - - github.com/hashicorp/go-envparse - - github.com/joho/godotenv - - github.com/kelseyhightower/envconfig diff --git a/go/ql/lib/change-notes/2024-08-12-add-file-models.md b/go/ql/lib/change-notes/released/1.1.5.md similarity index 69% rename from go/ql/lib/change-notes/2024-08-12-add-file-models.md rename to go/ql/lib/change-notes/released/1.1.5.md index eed216dd361..2ee8763424d 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-file-models.md +++ b/go/ql/lib/change-notes/released/1.1.5.md @@ -1,4 +1,13 @@ ---- -category: minorAnalysis ---- +## 1.1.5 + +### Minor Analysis Improvements + +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig * Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 26cbcd3f123..df39a9de059 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.5 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5d56d0ecc73..cc840ed3854 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.5-dev +version: 1.1.5 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 36470f89eba..88ad1b3ceec 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.0.6.md b/go/ql/src/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/go/ql/src/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4df9de83c21..8129981ba0a 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.6-dev +version: 1.0.6 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 7dc759d1ac6..3d5fc1f2229 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.6.md b/java/ql/automodel/src/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +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 42da17b3841..8033d980afa 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index fd277afd1d7..0bc0c8b24ac 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: 1.0.6-dev +version: 1.0.6 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2dd89daf33f..608f229f028 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,15 @@ +## 3.0.1 + +### Minor Analysis Improvements + +* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). + +### Bug Fixes + +* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. +* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. +* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. + ## 3.0.0 ### Breaking Changes diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md b/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md deleted file mode 100644 index 96088e50532..00000000000 --- a/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md b/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md deleted file mode 100644 index d8ed932ecf2..00000000000 --- a/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md b/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md deleted file mode 100644 index 93d456dc2a3..00000000000 --- a/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). diff --git a/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md b/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md deleted file mode 100644 index a84fec4c8f1..00000000000 --- a/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. diff --git a/java/ql/lib/change-notes/released/3.0.1.md b/java/ql/lib/change-notes/released/3.0.1.md new file mode 100644 index 00000000000..6c67dd0d9bf --- /dev/null +++ b/java/ql/lib/change-notes/released/3.0.1.md @@ -0,0 +1,11 @@ +## 3.0.1 + +### Minor Analysis Improvements + +* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). + +### Bug Fixes + +* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. +* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. +* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 33d3a2cd113..e3b15d965db 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.0 +lastReleaseVersion: 3.0.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 3b1e06d84ae..9fcae1be43e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 3.0.1-dev +version: 3.0.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 464768e3a7f..f40eb15e63e 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +No user-facing changes. + ## 1.1.2 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.3.md b/java/ql/src/change-notes/released/1.1.3.md new file mode 100644 index 00000000000..e8f1701bd62 --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.3.md @@ -0,0 +1,3 @@ +## 1.1.3 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 53ab127707f..35e710ab1bf 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.3 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 32442dbf4d6..6cde17b60a0 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.3-dev +version: 1.1.3 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 134bbe39a69..301a52e0d9d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +No user-facing changes. + ## 1.1.2 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/1.1.3.md b/javascript/ql/lib/change-notes/released/1.1.3.md new file mode 100644 index 00000000000..e8f1701bd62 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/1.1.3.md @@ -0,0 +1,3 @@ +## 1.1.3 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 53ab127707f..35e710ab1bf 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.3 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 0a9adfd363a..42774a82e85 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.3-dev +version: 1.1.3 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index af1e040cc44..a5f03a2f00e 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.1.2 + +### Minor Analysis Improvements + +* Message events in the browser are now properly classified as client-side taint sources. Previously they were + incorrectly classified as server-side taint sources, which resulted in some alerts being reported by + the wrong query, such as server-side URL redirection instead of client-side URL redirection. + ## 1.1.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md b/javascript/ql/src/change-notes/released/1.1.2.md similarity index 87% rename from javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md rename to javascript/ql/src/change-notes/released/1.1.2.md index 0866061c3bd..1f410e20195 100644 --- a/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md +++ b/javascript/ql/src/change-notes/released/1.1.2.md @@ -1,6 +1,7 @@ ---- -category: minorAnalysis ---- +## 1.1.2 + +### Minor Analysis Improvements + * Message events in the browser are now properly classified as client-side taint sources. Previously they were incorrectly classified as server-side taint sources, which resulted in some alerts being reported by the wrong query, such as server-side URL redirection instead of client-side URL redirection. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 1a19084be3f..53ab127707f 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 9932097414b..fe53021b0d9 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.1.2-dev +version: 1.1.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 5e4196ac337..66b29a94c27 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.6.md b/misc/suite-helpers/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index baedc3f13a1..c3a10882810 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.6-dev +version: 1.0.6 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 87cbf5bfda1..588534dbe81 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/1.0.6.md b/python/ql/lib/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/python/ql/lib/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 81d09c13b5d..f96c4ffe076 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.6-dev +version: 1.0.6 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 31897112925..88f9c1e5fa0 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.0 + +### New Queries + +* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. + ## 1.1.0 ### New Queries diff --git a/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md b/python/ql/src/change-notes/released/1.2.0.md similarity index 85% rename from python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md rename to python/ql/src/change-notes/released/1.2.0.md index 370fe162290..10a58295368 100644 --- a/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md +++ b/python/ql/src/change-notes/released/1.2.0.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- -* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. \ No newline at end of file +## 1.2.0 + +### New Queries + +* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 2ac15439f56..75430e73d1c 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.2.0 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index d244f5dd13d..f466064bdaf 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.1.1-dev +version: 1.2.0 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 4d575d4ef0f..d0d039c5bc6 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/1.0.6.md b/ruby/ql/lib/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index ecda3a78e65..12e6145cde4 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.6-dev +version: 1.0.6 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 37101f41c70..fc4544acada 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### New Queries diff --git a/ruby/ql/src/change-notes/released/1.1.1.md b/ruby/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..7fb56d36610 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 2ac15439f56..1a19084be3f 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index ada2d7236d0..c4a7f239e67 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.1-dev +version: 1.1.1 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index f62d99b8a59..38127a99b3f 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.6.md b/shared/controlflow/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index b610d434e33..adc81518975 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 0a94e1b80ec..84b64cbc6ea 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.0 + +### Deprecated APIs + +* The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. + ## 1.0.5 No user-facing changes. diff --git a/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md b/shared/dataflow/change-notes/released/1.1.0.md similarity index 82% rename from shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md rename to shared/dataflow/change-notes/released/1.1.0.md index ba3e86b720f..44897538158 100644 --- a/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md +++ b/shared/dataflow/change-notes/released/1.1.0.md @@ -1,4 +1,5 @@ ---- -category: deprecated ---- +## 1.1.0 + +### Deprecated APIs + * The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 42da17b3841..2ac15439f56 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.1.0 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 6bc83bb5164..36b88fe930e 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.0.6-dev +version: 1.1.0 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 0bf218b9656..0a7df5106a1 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.6.md b/shared/mad/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 8568e62a12b..00705b11131 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index f445578246d..efa13cf50bc 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.6.md b/shared/rangeanalysis/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 4a9285c82ec..e5950297314 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 78f8369e739..92db438ed2f 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.6.md b/shared/regex/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 39a0ce40768..d581b02a8a1 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index f41fc9a7fe7..27b5d839dc1 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.6.md b/shared/ssa/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index ef726856cfb..b9f9493484c 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 2e7162889c3..6976ee14e27 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.6.md b/shared/threat-models/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index aa7f4f989fd..886d7c97770 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.6-dev +version: 1.0.6 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index f20cfe347d7..a1da8419af7 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.6.md b/shared/tutorial/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index e0516acd41d..723ed36b4b4 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 7ba137cbf53..9eedb855a5a 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.6.md b/shared/typeflow/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 0681ba51825..68f2725581e 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 77d9b6f4fcf..712c3146f53 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.6.md b/shared/typetracking/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index da304ceb020..a617c9f0abd 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index f8ac1347b0f..968e737bdc4 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.6.md b/shared/typos/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index bc581f54edf..5ba50ebea97 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index e44386743ad..d316357e039 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.6.md b/shared/util/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/util/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 38a2417c1c2..500e4730ddf 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 1b292c16876..ba782d71646 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.6.md b/shared/xml/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6c62493a3c8..6b55ad64714 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 064f83a6efd..e9239e16de7 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.6.md b/shared/yaml/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 5fc9dd318df..3f140588def 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index b8e0122e0a0..f1e051b1bcb 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.2 + +No user-facing changes. + ## 1.1.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/1.1.2.md b/swift/ql/lib/change-notes/released/1.1.2.md new file mode 100644 index 00000000000..ce8d2c1a4f3 --- /dev/null +++ b/swift/ql/lib/change-notes/released/1.1.2.md @@ -0,0 +1,3 @@ +## 1.1.2 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 1a19084be3f..53ab127707f 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.2 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 49920fff303..344577f0876 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.1.2-dev +version: 1.1.2 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index e33d96f63f5..8ced5909fd0 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.6 + +### Minor Analysis Improvements + +* False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. + ## 1.0.5 ### Minor Analysis Improvements diff --git a/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md b/swift/ql/src/change-notes/released/1.0.6.md similarity index 81% rename from swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md rename to swift/ql/src/change-notes/released/1.0.6.md index d8f3f3d16d5..93df2cccfdb 100644 --- a/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md +++ b/swift/ql/src/change-notes/released/1.0.6.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.0.6 + +### Minor Analysis Improvements + * False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 5941fbe1954..49b89fbc9fb 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.6-dev +version: 1.0.6 groups: - swift - queries From c4d37ebec7ebab94e205ef9f22cd604a0a5abbd5 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 21 Aug 2024 18:17:45 +0100 Subject: [PATCH 144/334] C#: Add spaces around em dash in changelog note --- csharp/ql/src/CHANGELOG.md | 2 +- csharp/ql/src/change-notes/released/1.0.6.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 088c7af07c1..1b1d04129e2 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. ## 1.0.5 diff --git a/csharp/ql/src/change-notes/released/1.0.6.md b/csharp/ql/src/change-notes/released/1.0.6.md index 43c27ec7b75..c1454642823 100644 --- a/csharp/ql/src/change-notes/released/1.0.6.md +++ b/csharp/ql/src/change-notes/released/1.0.6.md @@ -3,4 +3,4 @@ ### Minor Analysis Improvements * Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. From 0724fd7ce2fc436f5f12079b380a4a9f66d9e4ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Aug 2024 18:25:54 +0000 Subject: [PATCH 145/334] Post-release preparation for codeql-cli-2.18.3 --- 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/typeflow/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 0db1f9e8036..049e5afd0eb 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.4.1 +version: 1.4.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a0728a2475b..291bde88faf 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.1 +version: 1.2.2-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 0c04b5292ef..407855e6868 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.23 +version: 1.7.24-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 83d083f56c2..9236640dbe5 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.23 +version: 1.7.24-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 75d559a215d..84426015538 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.1.0 +version: 1.1.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 975b56f78e4..4f1c93fc25b 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.6 +version: 1.0.7-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index aaa6fc16d08..fc1029a0c85 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.6 +version: 1.0.7-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index cc840ed3854..b81046b49cd 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.5 +version: 1.1.6-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 8129981ba0a..1e6ffa6dac5 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.6 +version: 1.0.7-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 0bc0c8b24ac..5da02bb9e8e 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: 1.0.6 +version: 1.0.7-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 9fcae1be43e..2d416db7f68 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 3.0.1 +version: 3.0.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 6cde17b60a0..19a3ede39d2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.3 +version: 1.1.4-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 42774a82e85..66933738bce 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.3 +version: 1.1.4-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index fe53021b0d9..30fd61f190b 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.1.2 +version: 1.1.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c3a10882810..0e10bf7cc48 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.6 +version: 1.0.7-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index f96c4ffe076..a5976074c0e 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.6 +version: 1.0.7-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index f466064bdaf..5352607aa77 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.2.0 +version: 1.2.1-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 12e6145cde4..e4004ff3d55 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.6 +version: 1.0.7-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index c4a7f239e67..ffbc8ea2abd 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.1 +version: 1.1.2-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index adc81518975..5bfb02b0179 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 36b88fe930e..63fa78dc872 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.0 +version: 1.1.1-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 00705b11131..6654580da12 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e5950297314..1015269eeb4 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index d581b02a8a1..6bb3b9c3551 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index b9f9493484c..0f48f8dfb6d 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 886d7c97770..fc01f5d5556 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.6 +version: 1.0.7-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 723ed36b4b4..bbba5576202 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 68f2725581e..99dd1a1057e 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a617c9f0abd..aeb3a45bff3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 5ba50ebea97..ded7cbb17ea 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 500e4730ddf..5914dae3575 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6b55ad64714..6f272d210d2 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 3f140588def..e7dc99d9b83 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 344577f0876..cc38a4ce8e5 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.1.2 +version: 1.1.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 49b89fbc9fb..fcfbd491b37 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.6 +version: 1.0.7-dev groups: - swift - queries From e94fabcc193ca6e3cc2527386786958cf590ebe0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 22 Aug 2024 08:27:15 +0200 Subject: [PATCH 146/334] Address review comment --- .../lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 84e486c7a55..df876aae455 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -314,8 +314,6 @@ class ContentSet extends TContentSet { this.isProperty(p1) and p2 = result.(PropertyContent).getProperty() | - p1 = p2 - or overridesOrImplementsSourceDecl(p2, p1) or overridesOrImplementsSourceDecl(p1, p2) From 81239dcd959749e8943d5b4c75c9fbfb161bad3d Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 20 Aug 2024 14:11:44 +0200 Subject: [PATCH 147/334] Java: add test case --- .../dataflow/implicit-read/A.java | 27 +++++++++++++++++++ .../dataflow/implicit-read/test.expected | 0 .../dataflow/implicit-read/test.ql | 22 +++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 java/ql/test/library-tests/dataflow/implicit-read/A.java create mode 100644 java/ql/test/library-tests/dataflow/implicit-read/test.expected create mode 100644 java/ql/test/library-tests/dataflow/implicit-read/test.ql diff --git a/java/ql/test/library-tests/dataflow/implicit-read/A.java b/java/ql/test/library-tests/dataflow/implicit-read/A.java new file mode 100644 index 00000000000..c845c7febe2 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/implicit-read/A.java @@ -0,0 +1,27 @@ +public class A { + String field; + + static String source(String name) { + return name; + } + + static void sink(Object o) {} + + static String step(Object o) { + return ""; + } + + static Object getA() { + A a = new A(); + a.field = source("source"); + return a; + } + + static void test() { + Object object = getA(); + + sink(step(object)); // $ hasTaintFlow=source + sink(object); // $ SPURIOUS: hasTaintFlow=source + sink(((A)object).field); // $ hasTaintFlow=source + } +} diff --git a/java/ql/test/library-tests/dataflow/implicit-read/test.expected b/java/ql/test/library-tests/dataflow/implicit-read/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/dataflow/implicit-read/test.ql b/java/ql/test/library-tests/dataflow/implicit-read/test.ql new file mode 100644 index 00000000000..4b07984456b --- /dev/null +++ b/java/ql/test/library-tests/dataflow/implicit-read/test.ql @@ -0,0 +1,22 @@ +import java +import TestUtilities.InlineFlowTest + +module TestConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { DefaultFlowConfig::isSource(source) } + + predicate isSink(DataFlow::Node sink) { DefaultFlowConfig::isSink(sink) } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodCall call | + call.getMethod().getName() = "step" and + node1.asExpr() = call.getArgument(0) and + node2.asExpr() = call + ) + } + + predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet content) { + isAdditionalFlowStep(node, _) and content instanceof DataFlow::FieldContent + } +} + +import TaintFlowTest From 2edadbf42397708b896d8f52eab37e9e390bd835 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 22 Aug 2024 11:44:34 +0100 Subject: [PATCH 148/334] Try to fix packages in frameworks coverage --- go/ql/lib/semmle/go/dataflow/ExternalFlow.qll | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index 3cd177f92eb..d905201fd45 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -213,16 +213,30 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { ) } +bindingset[p] +private string cleanPackage(string p) { + exists(string noPrefix | + p = fixedVersionPrefix() + noPrefix + or + not p = fixedVersionPrefix() + any(string s) and + noPrefix = p + | + result = noPrefix.regexpReplaceAll(majorVersionSuffixRegex(), "") + ) +} + private predicate relevantPackage(string package) { - sourceModel(package, _, _, _, _, _, _, _, _, _) or - sinkModel(package, _, _, _, _, _, _, _, _, _) or - summaryModel(package, _, _, _, _, _, _, _, _, _, _) + exists(string p | package = cleanPackage(p) | + sourceModel(p, _, _, _, _, _, _, _, _, _) or + sinkModel(p, _, _, _, _, _, _, _, _, _) or + summaryModel(p, _, _, _, _, _, _, _, _, _, _) + ) } private predicate packageLink(string shortpkg, string longpkg) { relevantPackage(shortpkg) and relevantPackage(longpkg) and - longpkg.prefix(longpkg.indexOf(".")) = shortpkg + longpkg.prefix(longpkg.indexOf("/")) = shortpkg } private predicate canonicalPackage(string package) { @@ -245,26 +259,28 @@ predicate modelCoverage(string package, int pkgs, string kind, string part, int part = "source" and n = strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance | + string ext, string output, string provenance, string x | canonicalPkgLink(package, subpkg) and - sourceModel(subpkg, type, subtypes, name, signature, ext, output, kind, provenance, _) + subpkg = cleanPackage(x) and + sourceModel(x, type, subtypes, name, signature, ext, output, kind, provenance, _) ) or part = "sink" and n = strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance | + string ext, string input, string provenance, string x | canonicalPkgLink(package, subpkg) and - sinkModel(subpkg, type, subtypes, name, signature, ext, input, kind, provenance, _) + subpkg = cleanPackage(x) and + sinkModel(x, type, subtypes, name, signature, ext, input, kind, provenance, _) ) or part = "summary" and n = strictcount(string subpkg, string type, boolean subtypes, string name, string signature, - string ext, string input, string output, string provenance | + string ext, string input, string output, string provenance, string x | canonicalPkgLink(package, subpkg) and - summaryModel(subpkg, type, subtypes, name, signature, ext, input, output, kind, provenance, - _) + subpkg = cleanPackage(x) and + summaryModel(x, type, subtypes, name, signature, ext, input, output, kind, provenance, _) ) ) } From 4cd34531c6c08d11b8339724b42cb092e35d0f95 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 22 Aug 2024 15:07:45 +0200 Subject: [PATCH 149/334] Shared: Add a copy of the existing C# Content Dataflow implementation. --- .../dataflow/internal/ContentDataFlowImpl.qll | 504 ++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll new file mode 100644 index 00000000000..76936549051 --- /dev/null +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -0,0 +1,504 @@ +/** + * Provides classes for performing global (inter-procedural) + * content-sensitive data flow analyses. + * + * Unlike `DataFlow::Global`, we allow for data to be stored (possibly nested) inside + * contents of sources and sinks. + * We track flow paths of the form + * + * ``` + * source --value-->* node + * (--read--> node --value-->* node)* + * --(non-value|value)-->* node + * (--store--> node --value-->* node)* + * --value-->* sink + * ``` + * + * where `--value-->` is a value-preserving flow step, `--read-->` is a read + * step, `--store-->` is a store step, and `--(non-value)-->` is a + * non-value-preserving flow step. + * + * That is, first a sequence of 0 or more reads, followed by 0 or more additional + * steps, followed by 0 or more stores, with value-preserving steps allowed in + * between all other steps. + */ + +private import csharp +private import codeql.util.Boolean +private import DataFlowImplCommon +private import DataFlowImplSpecific::Private +private import DataFlowImplSpecific::Private as DataFlowPrivate + +/** + * An input configuration for content data flow. + */ +signature module ConfigSig { + /** + * Holds if `source` is a relevant data flow source. + */ + predicate isSource(DataFlow::Node source); + + /** + * Holds if `sink` is a relevant data flow sink. + */ + predicate isSink(DataFlow::Node sink); + + /** + * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. + */ + default predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { none() } + + /** Holds if data flow into `node` is prohibited. */ + default predicate isBarrier(DataFlow::Node node) { none() } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. + * + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. + */ + default DataFlow::FlowFeature getAFeature() { none() } + + /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ + default int accessPathLimit() { result = DataFlowPrivate::accessPathLimit() } + + /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ + default predicate isRelevantContent(DataFlow::ContentSet c) { any() } +} + +/** + * Constructs a global content data flow computation. + */ +module Global { + private module FlowConfig implements DataFlow::StateConfigSig { + class FlowState = State; + + predicate isSource(DataFlow::Node source, FlowState state) { + ContentConfig::isSource(source) and + state.(InitState).decode(true) + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + ContentConfig::isSink(sink) and + ( + state instanceof InitState or + state instanceof StoreState or + state instanceof ReadState + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 + ) { + storeStep(node1, state1, _, node2, state2) or + readStep(node1, state1, _, node2, state2) or + additionalStep(node1, state1, node2, state2) + } + + predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; + + predicate isBarrier = ContentConfig::isBarrier/1; + + DataFlow::FlowFeature getAFeature() { result = ContentConfig::getAFeature() } + + predicate accessPathLimit = ContentConfig::accessPathLimit/0; + + // needed to record reads/stores inside summarized callables + predicate includeHiddenNodes() { any() } + } + + private module Flow = DataFlow::GlobalWithState; + + /** + * Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink` + * for this configuration. `preservesValue` indicates whether any of the additional + * flow steps defined by `isAdditionalFlowStep` are needed. + * + * For the source access path, `sourceAp`, the top of the stack represents the content + * that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow from `source.Field2.Field1`. + * + * For the sink access path, `sinkAp`, the top of the stack represents the content + * that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow into `sink.Field1.Field2`. + */ + predicate flow( + DataFlow::Node source, AccessPath sourceAp, DataFlow::Node sink, AccessPath sinkAp, + boolean preservesValue + ) { + exists(Flow::PathNode pathSource, Flow::PathNode pathSink | + Flow::flowPath(pathSource, pathSink) and + nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and + source = pathSource.getNode() and + sink = pathSink.getNode() + | + pathSink.getState().(InitState).decode(preservesValue) + or + pathSink.getState().(ReadState).decode(_, preservesValue) + or + pathSink.getState().(StoreState).decode(_, preservesValue) + ) + } + + private newtype TState = + TInitState(Boolean preservesValue) or + TStoreState(int size, Boolean preservesValue) { + size in [1 .. ContentConfig::accessPathLimit()] + } or + TReadState(int size, Boolean preservesValue) { size in [1 .. ContentConfig::accessPathLimit()] } + + abstract private class State extends TState { + abstract string toString(); + } + + /** A flow state representing no reads or stores. */ + private class InitState extends State, TInitState { + private boolean preservesValue_; + + InitState() { this = TInitState(preservesValue_) } + + override string toString() { result = "Init(" + preservesValue_ + ")" } + + predicate decode(boolean preservesValue) { preservesValue = preservesValue_ } + } + + /** A flow state representing that content has been stored into. */ + private class StoreState extends State, TStoreState { + private boolean preservesValue_; + private int size_; + + StoreState() { this = TStoreState(size_, preservesValue_) } + + override string toString() { result = "StoreState(" + size_ + "," + preservesValue_ + ")" } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + /** A flow state representing that content has been read from. */ + private class ReadState extends State, TReadState { + private boolean preservesValue_; + private int size_; + + ReadState() { this = TReadState(size_, preservesValue_) } + + override string toString() { result = "ReadState(" + size_ + "," + preservesValue_ + ")" } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + private predicate storeStep( + DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, + StoreState state2 + ) { + exists(boolean preservesValue, int size | + storeSet(node1, c, node2, _, _) and + ContentConfig::isRelevantContent(c) and + state2.decode(size + 1, preservesValue) + | + state1.(InitState).decode(preservesValue) and size = 0 + or + state1.(ReadState).decode(_, preservesValue) and size = 0 + or + state1.(StoreState).decode(size, preservesValue) + ) + } + + private predicate readStep( + DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, + ReadState state2 + ) { + exists(int size | + readSet(node1, c, node2) and + ContentConfig::isRelevantContent(c) and + state2.decode(size + 1, true) + | + state1.(InitState).decode(true) and + size = 0 + or + state1.(ReadState).decode(size, true) + ) + } + + private predicate additionalStep( + DataFlow::Node node1, State state1, DataFlow::Node node2, State state2 + ) { + ContentConfig::isAdditionalFlowStep(node1, node2) and + ( + state1 instanceof InitState and + state2.(InitState).decode(false) + or + exists(int size | + state1.(ReadState).decode(size, _) and + state2.(ReadState).decode(size, false) + ) + ) + } + + private newtype TAccessPath = + TAccessPathNil() or + TAccessPathCons(DataFlow::ContentSet head, AccessPath tail) { + nodeReachesStore(_, _, _, _, head, _, tail) + or + nodeReachesRead(_, _, _, _, head, tail, _) + } + + /** An access path. */ + class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + DataFlow::ContentSet getHead() { this = TAccessPathCons(result, _) } + + /** Gets the tail of this access path, if any. */ + AccessPath getTail() { this = TAccessPathCons(_, result) } + + /** + * Gets a textual representation of this access path. + * + * Elements are dot-separated, and the head of the stack is + * rendered first. + */ + string toString() { + this = TAccessPathNil() and + result = "" + or + exists(DataFlow::ContentSet head, AccessPath tail | + this = TAccessPathCons(head, tail) and + result = head + "." + tail + ) + } + } + + /** + * Provides a big-step flow relation, where flow stops at read/store steps that + * must be recorded, and flow via `subpaths` such that reads/stores inside + * summarized callables can be recorded as well. + */ + private module BigStepFlow { + private predicate reachesSink(Flow::PathNode node) { + FlowConfig::isSink(node.getNode(), node.getState()) + or + reachesSink(node.getASuccessor()) + } + + /** + * Holds if the flow step `pred -> succ` should not be allowed to be included + * in the big-step relation. + */ + pragma[nomagic] + private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { + pred.getASuccessor() = succ and + ( + // we need to record reads/stores inside summarized callables + Flow::PathGraph::subpaths(pred, _, _, succ) + or + // only allow flow into a summarized callable, as part of the big-step + // relation, when flow can reach a sink without going back out + Flow::PathGraph::subpaths(pred, succ, _, _) and + not reachesSink(succ) + or + // needed to record store steps + storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + or + // needed to record read steps + readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + ) + } + + pragma[nomagic] + private DataFlowCallable getEnclosingCallableImpl(Flow::PathNode node) { + result = getNodeEnclosingCallable(node.getNode()) + } + + pragma[inline] + private DataFlowCallable getEnclosingCallable(Flow::PathNode node) { + pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node)) + } + + pragma[nomagic] + private predicate bigStepEntry(Flow::PathNode node) { + ( + FlowConfig::isSource(node.getNode(), node.getState()) + or + excludeStep(_, node) + or + Flow::PathGraph::subpaths(_, node, _, _) + ) + } + + pragma[nomagic] + private predicate bigStepExit(Flow::PathNode node) { + ( + bigStepEntry(node) + or + FlowConfig::isSink(node.getNode(), node.getState()) + or + excludeStep(node, _) + or + Flow::PathGraph::subpaths(_, _, node, _) + ) + } + + pragma[nomagic] + private predicate step(Flow::PathNode pred, Flow::PathNode succ) { + pred.getASuccessor() = succ and + not excludeStep(pred, succ) + } + + pragma[nomagic] + private predicate stepRec(Flow::PathNode pred, Flow::PathNode succ) { + step(pred, succ) and + not bigStepEntry(pred) + } + + private predicate stepRecPlus(Flow::PathNode n1, Flow::PathNode n2) = fastTC(stepRec/2)(n1, n2) + + /** + * Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does + * not go through any reads/stores that need to be recorded, or summarized + * steps. + */ + pragma[nomagic] + private predicate bigStep(Flow::PathNode pred, Flow::PathNode succ) { + exists(Flow::PathNode mid | + bigStepEntry(pred) and + step(pred, mid) + | + succ = mid + or + stepRecPlus(mid, succ) + ) and + bigStepExit(succ) + } + + pragma[nomagic] + predicate bigStepNotLocal(Flow::PathNode pred, Flow::PathNode succ) { + bigStep(pred, succ) and + not getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + + pragma[nomagic] + predicate bigStepMaybeLocal(Flow::PathNode pred, Flow::PathNode succ) { + bigStep(pred, succ) and + getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + } + + /** + * Holds if `source` can reach `node`, having read `reads` from the source and + * written `stores` into `node`. + * + * `source` is either a source from a configuration, in which case `scReads` and + * `scStores` are always empty, or it is the parameter of a summarized callable, + * in which case `scReads` and `scStores` record the reads/stores for a summary + * context, that is, the reads/stores for an argument that can reach the parameter. + */ + pragma[nomagic] + private predicate nodeReaches( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + AccessPath reads, AccessPath stores + ) { + node = source and + reads = scReads and + stores = scStores and + ( + Flow::flowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() + or + // the argument in a sub path can be reached, so we start flow from the sub path + // parameter, while recording the read/store summary context + exists(Flow::PathNode arg | + nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and + Flow::PathGraph::subpaths(arg, source, _, _) + ) + ) + or + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepMaybeLocal(mid, node) + ) + or + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepNotLocal(mid, node) and + // when flow is not local, we cannot flow back out, so we may stop + // flow early when computing summary flow + Flow::flowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() + ) + or + // store step + exists(AccessPath storesMid, DataFlow::ContentSet c | + nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and + stores = TAccessPathCons(c, storesMid) + ) + or + // read step + exists(AccessPath readsMid, DataFlow::ContentSet c | + nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and + reads = TAccessPathCons(c, readsMid) + ) + or + // flow-through step; match outer stores/reads with inner store/read summary contexts + exists(Flow::PathNode mid, AccessPath innerScReads, AccessPath innerScStores | + nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and + subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores) + ) + } + + pragma[nomagic] + private predicate nodeReachesStore( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + DataFlow::ContentSet c, AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and + mid.getASuccessor() = node + ) + } + + pragma[nomagic] + private predicate nodeReachesRead( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + DataFlow::ContentSet c, AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and + mid.getASuccessor() = node + ) + } + + pragma[nomagic] + private predicate nodeReachesSubpathArg( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode arg, + AccessPath reads, AccessPath stores + ) { + nodeReaches(source, scReads, scStores, arg, reads, stores) and + Flow::PathGraph::subpaths(arg, _, _, _) + } + + pragma[nomagic] + private predicate subpathArgReachesOut( + Flow::PathNode arg, AccessPath scReads, AccessPath scStores, Flow::PathNode out, + AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode source, Flow::PathNode ret | + nodeReaches(source, scReads, scStores, ret, reads, stores) and + Flow::PathGraph::subpaths(arg, source, ret, out) + ) + } +} From 6827bedaa731514827501408948c2f8eb7e31fa5 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 22 Aug 2024 14:53:43 +0200 Subject: [PATCH 150/334] C#: Add aggregated compiler and extractor message counts to extraction telemetry query --- .../Entities/Compilations/Compilation.cs | 11 ++++++++++- .../Semmle.Extraction.CSharp/Extractor/Analyser.cs | 2 ++ .../Semmle.Extraction.CSharp/Extractor/Extractor.cs | 1 + csharp/extractor/Semmle.Extraction/BUILD.bazel | 1 + .../Semmle.Extraction/Entities/ExtractionMessage.cs | 9 ++++++++- .../Semmle.Extraction/Semmle.Extraction.csproj | 2 ++ .../all-platforms/standalone/Diag.expected | 2 ++ .../all-platforms/standalone/Diag.ql | 3 ++- .../standalone_winforms/CompilationInfo.ql | 2 +- csharp/ql/src/Telemetry/ExtractorInformation.ql | 13 +++++++++++++ 10 files changed, 42 insertions(+), 4 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs index 8685c9d7a7d..ecb5d51d44d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.IO; using System.Linq; using Microsoft.CodeAnalysis; +using Semmle.Extraction.Entities; using Semmle.Util; namespace Semmle.Extraction.CSharp.Entities @@ -89,13 +90,21 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.compilation_finished(this, (float)p.Total.Cpu.TotalSeconds, (float)p.Total.Elapsed.TotalSeconds); } + public void PopulateAggregatedMessages() + { + ExtractionMessage.groupedMessageCounts.ForEach(pair => + { + Context.TrapWriter.Writer.compilation_info(this, $"Extractor message count for group '{pair.Key}'", pair.Value.ToString()); + }); + } + public override void WriteId(EscapingTextWriter trapFile) { trapFile.Write(hashCode); trapFile.Write(";compilation"); } - public override Location ReportingLocation => throw new NotImplementedException(); + public override Microsoft.CodeAnalysis.Location ReportingLocation => throw new NotImplementedException(); public override bool NeedsPopulation => Context.IsAssemblyScope; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 0b523e69b1a..b839d2c976a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -250,6 +250,8 @@ namespace Semmle.Extraction.CSharp public void LogPerformance(Entities.PerformanceMetrics p) => compilationEntity.PopulatePerformance(p); + public void ExtractAggregatedMessages() => compilationEntity.PopulateAggregatedMessages(); + #nullable restore warnings /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs index ae3875f5028..d87f6fd24c0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs @@ -458,6 +458,7 @@ namespace Semmle.Extraction.CSharp sw.Restart(); analyser.PerformExtraction(options.Threads); + analyser.ExtractAggregatedMessages(); sw.Stop(); var cpuTime2 = currentProcess.TotalProcessorTime; var userTime2 = currentProcess.UserProcessorTime; diff --git a/csharp/extractor/Semmle.Extraction/BUILD.bazel b/csharp/extractor/Semmle.Extraction/BUILD.bazel index de3a6c2d96a..83dfb8235e8 100644 --- a/csharp/extractor/Semmle.Extraction/BUILD.bazel +++ b/csharp/extractor/Semmle.Extraction/BUILD.bazel @@ -26,6 +26,7 @@ codeql_csharp_library( ], "//conditions:default": [], }), + internals_visible_to = ["Semmle.Extraction.CSharp"], visibility = ["//csharp:__subpackages__"], deps = [ "//csharp/extractor/Semmle.Util", diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs index f417a170c10..514ce433c0a 100644 --- a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs +++ b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs @@ -1,4 +1,5 @@ -using System.IO; +using System.Collections.Concurrent; +using System.IO; using System.Threading; using Semmle.Util; @@ -7,6 +8,8 @@ namespace Semmle.Extraction.Entities internal class ExtractionMessage : FreshEntity { private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("MESSAGE_LIMIT") ?? 10000; + + internal static readonly ConcurrentDictionary groupedMessageCounts = []; private static int messageCount = 0; private readonly Message msg; @@ -25,6 +28,10 @@ namespace Semmle.Extraction.Entities protected override void Populate(TextWriter trapFile) { + // For the time being we're counting the number of messages per severity, we could introduce other groupings in the future + var key = msg.Severity.ToString(); + groupedMessageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); + if (!bypassLimit) { var val = Interlocked.Increment(ref messageCount); diff --git a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj index b4625b16017..2173a50f2ad 100644 --- a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj +++ b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj @@ -5,6 +5,8 @@ + + diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected index 6d84e27e5ce..74314f2c0c9 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected @@ -7,3 +7,5 @@ extractorMessagesLeachedLimit compilationInfo | Compiler diagnostic count for CS0103 | 3.0 | | Compiler diagnostic count for CS8019 | 7.0 | +| Extractor message count for group 'Error' | 8.0 | +| Extractor message count for group 'Warning' | 1.0 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql index 8b1fbae6b2f..e2fa743471c 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql @@ -11,7 +11,8 @@ query predicate extractorMessagesLeachedLimit(ExtractorMessage msg) { query predicate compilationInfo(string key, float value) { exists(Compilation c, string infoValue | - infoValue = c.getInfo(key) and key.matches("Compiler diagnostic count for%") + infoValue = c.getInfo(key) and + key.matches(["Compiler diagnostic count for%", "Extractor message count for group%"]) | value = infoValue.toFloat() ) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql index a96c2fd99a6..078e352be4d 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql @@ -4,7 +4,7 @@ import semmle.code.csharp.commons.Diagnostics query predicate compilationInfo(string key, float value) { key != "Resolved references" and key != "Resolved assembly conflicts" and - not key.matches("Compiler diagnostic count for%") and + not key.matches(["Compiler diagnostic count for%", "Extractor message count for group%"]) 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 c2d80f7c768..6fdaf9ca22d 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -12,6 +12,7 @@ import DatabaseQuality predicate compilationInfo(string key, float value) { not key.matches("Compiler diagnostic count for%") and + not key.matches("Extractor message count for group%") and exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | key = infoKey and value = infoValue.toFloat() @@ -22,6 +23,16 @@ predicate compilationInfo(string key, float value) { ) } +predicate compilerDiagnostics(string key, int value) { + key.matches("Compiler diagnostic count for%") and + strictsum(Compilation c | | c.getInfo(key).toInt()) = value +} + +predicate extractorMessages(string key, int value) { + key.matches("Extractor message count for group%") and + strictsum(Compilation c | | c.getInfo(key).toInt()) = value +} + predicate fileCount(string key, int value) { key = "Number of files" and value = strictcount(File f) @@ -140,6 +151,8 @@ from string key, float value where ( compilationInfo(key, value) or + compilerDiagnostics(key, value) or + extractorMessages(key, value) or fileCount(key, value) or fileCountByExtension(key, value) or totalNumberOfLines(key, value) or From e6424f0f45848b8f11a883a4d8688819b9f287e7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 22 Aug 2024 15:45:34 +0200 Subject: [PATCH 151/334] Shared: Make ContentDataFlow reusable. --- .../dataflow/internal/ContentDataFlowImpl.qll | 888 +++++++++--------- 1 file changed, 444 insertions(+), 444 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index 76936549051..18e44061967 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -23,482 +23,482 @@ * between all other steps. */ -private import csharp +private import codeql.dataflow.DataFlow private import codeql.util.Boolean +private import codeql.util.Location +private import DataFlowImpl private import DataFlowImplCommon -private import DataFlowImplSpecific::Private -private import DataFlowImplSpecific::Private as DataFlowPrivate -/** - * An input configuration for content data flow. - */ -signature module ConfigSig { - /** - * Holds if `source` is a relevant data flow source. - */ - predicate isSource(DataFlow::Node source); +module MakeImplContentDataFlow Lang> { + private import Lang + private import DataFlowMake + private import DataFlowImplCommon::MakeImplCommon /** - * Holds if `sink` is a relevant data flow sink. + * An input configuration for content data flow. */ - predicate isSink(DataFlow::Node sink); - - /** - * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. - */ - default predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { none() } - - /** Holds if data flow into `node` is prohibited. */ - default predicate isBarrier(DataFlow::Node node) { none() } - - /** - * Gets a data flow configuration feature to add restrictions to the set of - * valid flow paths. - * - * - `FeatureHasSourceCallContext`: - * Assume that sources have some existing call context to disallow - * conflicting return-flow directly following the source. - * - `FeatureHasSinkCallContext`: - * Assume that sinks have some existing call context to disallow - * conflicting argument-to-parameter flow directly preceding the sink. - * - `FeatureEqualSourceSinkCallContext`: - * Implies both of the above and additionally ensures that the entire flow - * path preserves the call context. - */ - default DataFlow::FlowFeature getAFeature() { none() } - - /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ - default int accessPathLimit() { result = DataFlowPrivate::accessPathLimit() } - - /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ - default predicate isRelevantContent(DataFlow::ContentSet c) { any() } -} - -/** - * Constructs a global content data flow computation. - */ -module Global { - private module FlowConfig implements DataFlow::StateConfigSig { - class FlowState = State; - - predicate isSource(DataFlow::Node source, FlowState state) { - ContentConfig::isSource(source) and - state.(InitState).decode(true) - } - - predicate isSink(DataFlow::Node sink, FlowState state) { - ContentConfig::isSink(sink) and - ( - state instanceof InitState or - state instanceof StoreState or - state instanceof ReadState - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 - ) { - storeStep(node1, state1, _, node2, state2) or - readStep(node1, state1, _, node2, state2) or - additionalStep(node1, state1, node2, state2) - } - - predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; - - predicate isBarrier = ContentConfig::isBarrier/1; - - DataFlow::FlowFeature getAFeature() { result = ContentConfig::getAFeature() } - - predicate accessPathLimit = ContentConfig::accessPathLimit/0; - - // needed to record reads/stores inside summarized callables - predicate includeHiddenNodes() { any() } - } - - private module Flow = DataFlow::GlobalWithState; - - /** - * Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink` - * for this configuration. `preservesValue` indicates whether any of the additional - * flow steps defined by `isAdditionalFlowStep` are needed. - * - * For the source access path, `sourceAp`, the top of the stack represents the content - * that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1` - * being the top of the stack), then there is flow from `source.Field2.Field1`. - * - * For the sink access path, `sinkAp`, the top of the stack represents the content - * that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1` - * being the top of the stack), then there is flow into `sink.Field1.Field2`. - */ - predicate flow( - DataFlow::Node source, AccessPath sourceAp, DataFlow::Node sink, AccessPath sinkAp, - boolean preservesValue - ) { - exists(Flow::PathNode pathSource, Flow::PathNode pathSink | - Flow::flowPath(pathSource, pathSink) and - nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and - source = pathSource.getNode() and - sink = pathSink.getNode() - | - pathSink.getState().(InitState).decode(preservesValue) - or - pathSink.getState().(ReadState).decode(_, preservesValue) - or - pathSink.getState().(StoreState).decode(_, preservesValue) - ) - } - - private newtype TState = - TInitState(Boolean preservesValue) or - TStoreState(int size, Boolean preservesValue) { - size in [1 .. ContentConfig::accessPathLimit()] - } or - TReadState(int size, Boolean preservesValue) { size in [1 .. ContentConfig::accessPathLimit()] } - - abstract private class State extends TState { - abstract string toString(); - } - - /** A flow state representing no reads or stores. */ - private class InitState extends State, TInitState { - private boolean preservesValue_; - - InitState() { this = TInitState(preservesValue_) } - - override string toString() { result = "Init(" + preservesValue_ + ")" } - - predicate decode(boolean preservesValue) { preservesValue = preservesValue_ } - } - - /** A flow state representing that content has been stored into. */ - private class StoreState extends State, TStoreState { - private boolean preservesValue_; - private int size_; - - StoreState() { this = TStoreState(size_, preservesValue_) } - - override string toString() { result = "StoreState(" + size_ + "," + preservesValue_ + ")" } - - predicate decode(int size, boolean preservesValue) { - size = size_ and preservesValue = preservesValue_ - } - } - - /** A flow state representing that content has been read from. */ - private class ReadState extends State, TReadState { - private boolean preservesValue_; - private int size_; - - ReadState() { this = TReadState(size_, preservesValue_) } - - override string toString() { result = "ReadState(" + size_ + "," + preservesValue_ + ")" } - - predicate decode(int size, boolean preservesValue) { - size = size_ and preservesValue = preservesValue_ - } - } - - private predicate storeStep( - DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, - StoreState state2 - ) { - exists(boolean preservesValue, int size | - storeSet(node1, c, node2, _, _) and - ContentConfig::isRelevantContent(c) and - state2.decode(size + 1, preservesValue) - | - state1.(InitState).decode(preservesValue) and size = 0 - or - state1.(ReadState).decode(_, preservesValue) and size = 0 - or - state1.(StoreState).decode(size, preservesValue) - ) - } - - private predicate readStep( - DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, - ReadState state2 - ) { - exists(int size | - readSet(node1, c, node2) and - ContentConfig::isRelevantContent(c) and - state2.decode(size + 1, true) - | - state1.(InitState).decode(true) and - size = 0 - or - state1.(ReadState).decode(size, true) - ) - } - - private predicate additionalStep( - DataFlow::Node node1, State state1, DataFlow::Node node2, State state2 - ) { - ContentConfig::isAdditionalFlowStep(node1, node2) and - ( - state1 instanceof InitState and - state2.(InitState).decode(false) - or - exists(int size | - state1.(ReadState).decode(size, _) and - state2.(ReadState).decode(size, false) - ) - ) - } - - private newtype TAccessPath = - TAccessPathNil() or - TAccessPathCons(DataFlow::ContentSet head, AccessPath tail) { - nodeReachesStore(_, _, _, _, head, _, tail) - or - nodeReachesRead(_, _, _, _, head, tail, _) - } - - /** An access path. */ - class AccessPath extends TAccessPath { - /** Gets the head of this access path, if any. */ - DataFlow::ContentSet getHead() { this = TAccessPathCons(result, _) } - - /** Gets the tail of this access path, if any. */ - AccessPath getTail() { this = TAccessPathCons(_, result) } + signature module ConfigSig { + /** + * Holds if `source` is a relevant data flow source. + */ + predicate isSource(Node source); /** - * Gets a textual representation of this access path. + * Holds if `sink` is a relevant data flow sink. + */ + predicate isSink(Node sink); + + /** + * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. + */ + default predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + + /** Holds if data flow into `node` is prohibited. */ + default predicate isBarrier(Node node) { none() } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. * - * Elements are dot-separated, and the head of the stack is - * rendered first. + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. */ - string toString() { - this = TAccessPathNil() and - result = "" - or - exists(DataFlow::ContentSet head, AccessPath tail | - this = TAccessPathCons(head, tail) and - result = head + "." + tail - ) - } + default FlowFeature getAFeature() { none() } + + /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ + default int accessPathLimit() { result = Lang::accessPathLimit() } + + /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ + default predicate isRelevantContent(ContentSet c) { any() } } /** - * Provides a big-step flow relation, where flow stops at read/store steps that - * must be recorded, and flow via `subpaths` such that reads/stores inside - * summarized callables can be recorded as well. + * Constructs a global content data flow computation. */ - private module BigStepFlow { - private predicate reachesSink(Flow::PathNode node) { - FlowConfig::isSink(node.getNode(), node.getState()) - or - reachesSink(node.getASuccessor()) + module Global { + private module FlowConfig implements StateConfigSig { + class FlowState = State; + + predicate isSource(Node source, FlowState state) { + ContentConfig::isSource(source) and + state.(InitState).decode(true) + } + + predicate isSink(Node sink, FlowState state) { + ContentConfig::isSink(sink) and + ( + state instanceof InitState or + state instanceof StoreState or + state instanceof ReadState + ) + } + + predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) { + storeStep(node1, state1, _, node2, state2) or + readStep(node1, state1, _, node2, state2) or + additionalStep(node1, state1, node2, state2) + } + + predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; + + predicate isBarrier = ContentConfig::isBarrier/1; + + FlowFeature getAFeature() { result = ContentConfig::getAFeature() } + + predicate accessPathLimit = ContentConfig::accessPathLimit/0; + + // needed to record reads/stores inside summarized callables + predicate includeHiddenNodes() { any() } + } + + private module Flow = GlobalWithState; + + /** + * Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink` + * for this configuration. `preservesValue` indicates whether any of the additional + * flow steps defined by `isAdditionalFlowStep` are needed. + * + * For the source access path, `sourceAp`, the top of the stack represents the content + * that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow from `source.Field2.Field1`. + * + * For the sink access path, `sinkAp`, the top of the stack represents the content + * that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow into `sink.Field1.Field2`. + */ + predicate flow( + Node source, AccessPath sourceAp, Node sink, AccessPath sinkAp, boolean preservesValue + ) { + exists(Flow::PathNode pathSource, Flow::PathNode pathSink | + Flow::flowPath(pathSource, pathSink) and + nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and + source = pathSource.getNode() and + sink = pathSink.getNode() + | + pathSink.getState().(InitState).decode(preservesValue) + or + pathSink.getState().(ReadState).decode(_, preservesValue) + or + pathSink.getState().(StoreState).decode(_, preservesValue) + ) + } + + private newtype TState = + TInitState(Boolean preservesValue) or + TStoreState(int size, Boolean preservesValue) { + size in [1 .. ContentConfig::accessPathLimit()] + } or + TReadState(int size, Boolean preservesValue) { + size in [1 .. ContentConfig::accessPathLimit()] + } + + abstract private class State extends TState { + abstract string toString(); + } + + /** A flow state representing no reads or stores. */ + private class InitState extends State, TInitState { + private boolean preservesValue_; + + InitState() { this = TInitState(preservesValue_) } + + override string toString() { result = "Init(" + preservesValue_ + ")" } + + predicate decode(boolean preservesValue) { preservesValue = preservesValue_ } + } + + /** A flow state representing that content has been stored into. */ + private class StoreState extends State, TStoreState { + private boolean preservesValue_; + private int size_; + + StoreState() { this = TStoreState(size_, preservesValue_) } + + override string toString() { result = "StoreState(" + size_ + "," + preservesValue_ + ")" } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + /** A flow state representing that content has been read from. */ + private class ReadState extends State, TReadState { + private boolean preservesValue_; + private int size_; + + ReadState() { this = TReadState(size_, preservesValue_) } + + override string toString() { result = "ReadState(" + size_ + "," + preservesValue_ + ")" } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + private predicate storeStep( + Node node1, State state1, ContentSet c, Node node2, StoreState state2 + ) { + exists(boolean preservesValue, int size | + storeSet(node1, c, node2, _, _) and + ContentConfig::isRelevantContent(c) and + state2.decode(size + 1, preservesValue) + | + state1.(InitState).decode(preservesValue) and size = 0 + or + state1.(ReadState).decode(_, preservesValue) and size = 0 + or + state1.(StoreState).decode(size, preservesValue) + ) + } + + private predicate readStep(Node node1, State state1, ContentSet c, Node node2, ReadState state2) { + exists(int size | + readSet(node1, c, node2) and + ContentConfig::isRelevantContent(c) and + state2.decode(size + 1, true) + | + state1.(InitState).decode(true) and + size = 0 + or + state1.(ReadState).decode(size, true) + ) + } + + private predicate additionalStep(Node node1, State state1, Node node2, State state2) { + ContentConfig::isAdditionalFlowStep(node1, node2) and + ( + state1 instanceof InitState and + state2.(InitState).decode(false) + or + exists(int size | + state1.(ReadState).decode(size, _) and + state2.(ReadState).decode(size, false) + ) + ) + } + + private newtype TAccessPath = + TAccessPathNil() or + TAccessPathCons(ContentSet head, AccessPath tail) { + nodeReachesStore(_, _, _, _, head, _, tail) + or + nodeReachesRead(_, _, _, _, head, tail, _) + } + + /** An access path. */ + class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + ContentSet getHead() { this = TAccessPathCons(result, _) } + + /** Gets the tail of this access path, if any. */ + AccessPath getTail() { this = TAccessPathCons(_, result) } + + /** + * Gets a textual representation of this access path. + * + * Elements are dot-separated, and the head of the stack is + * rendered first. + */ + string toString() { + this = TAccessPathNil() and + result = "" + or + exists(ContentSet head, AccessPath tail | + this = TAccessPathCons(head, tail) and + result = head + "." + tail + ) + } } /** - * Holds if the flow step `pred -> succ` should not be allowed to be included - * in the big-step relation. + * Provides a big-step flow relation, where flow stops at read/store steps that + * must be recorded, and flow via `subpaths` such that reads/stores inside + * summarized callables can be recorded as well. */ - pragma[nomagic] - private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { - pred.getASuccessor() = succ and - ( - // we need to record reads/stores inside summarized callables - Flow::PathGraph::subpaths(pred, _, _, succ) - or - // only allow flow into a summarized callable, as part of the big-step - // relation, when flow can reach a sink without going back out - Flow::PathGraph::subpaths(pred, succ, _, _) and - not reachesSink(succ) - or - // needed to record store steps - storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) - or - // needed to record read steps - readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) - ) - } - - pragma[nomagic] - private DataFlowCallable getEnclosingCallableImpl(Flow::PathNode node) { - result = getNodeEnclosingCallable(node.getNode()) - } - - pragma[inline] - private DataFlowCallable getEnclosingCallable(Flow::PathNode node) { - pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node)) - } - - pragma[nomagic] - private predicate bigStepEntry(Flow::PathNode node) { - ( - FlowConfig::isSource(node.getNode(), node.getState()) - or - excludeStep(_, node) - or - Flow::PathGraph::subpaths(_, node, _, _) - ) - } - - pragma[nomagic] - private predicate bigStepExit(Flow::PathNode node) { - ( - bigStepEntry(node) - or + private module BigStepFlow { + private predicate reachesSink(Flow::PathNode node) { FlowConfig::isSink(node.getNode(), node.getState()) or - excludeStep(node, _) - or - Flow::PathGraph::subpaths(_, _, node, _) - ) - } + reachesSink(node.getASuccessor()) + } - pragma[nomagic] - private predicate step(Flow::PathNode pred, Flow::PathNode succ) { - pred.getASuccessor() = succ and - not excludeStep(pred, succ) - } + /** + * Holds if the flow step `pred -> succ` should not be allowed to be included + * in the big-step relation. + */ + pragma[nomagic] + private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { + pred.getASuccessor() = succ and + ( + // we need to record reads/stores inside summarized callables + Flow::PathGraph::subpaths(pred, _, _, succ) + or + // only allow flow into a summarized callable, as part of the big-step + // relation, when flow can reach a sink without going back out + Flow::PathGraph::subpaths(pred, succ, _, _) and + not reachesSink(succ) + or + // needed to record store steps + storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + or + // needed to record read steps + readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + ) + } - pragma[nomagic] - private predicate stepRec(Flow::PathNode pred, Flow::PathNode succ) { - step(pred, succ) and - not bigStepEntry(pred) - } + pragma[nomagic] + private DataFlowCallable getEnclosingCallableImpl(Flow::PathNode node) { + result = getNodeEnclosingCallable(node.getNode()) + } - private predicate stepRecPlus(Flow::PathNode n1, Flow::PathNode n2) = fastTC(stepRec/2)(n1, n2) + pragma[inline] + private DataFlowCallable getEnclosingCallable(Flow::PathNode node) { + pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node)) + } + + pragma[nomagic] + private predicate bigStepEntry(Flow::PathNode node) { + ( + FlowConfig::isSource(node.getNode(), node.getState()) + or + excludeStep(_, node) + or + Flow::PathGraph::subpaths(_, node, _, _) + ) + } + + pragma[nomagic] + private predicate bigStepExit(Flow::PathNode node) { + ( + bigStepEntry(node) + or + FlowConfig::isSink(node.getNode(), node.getState()) + or + excludeStep(node, _) + or + Flow::PathGraph::subpaths(_, _, node, _) + ) + } + + pragma[nomagic] + private predicate step(Flow::PathNode pred, Flow::PathNode succ) { + pred.getASuccessor() = succ and + not excludeStep(pred, succ) + } + + pragma[nomagic] + private predicate stepRec(Flow::PathNode pred, Flow::PathNode succ) { + step(pred, succ) and + not bigStepEntry(pred) + } + + private predicate stepRecPlus(Flow::PathNode n1, Flow::PathNode n2) = + fastTC(stepRec/2)(n1, n2) + + /** + * Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does + * not go through any reads/stores that need to be recorded, or summarized + * steps. + */ + pragma[nomagic] + private predicate bigStep(Flow::PathNode pred, Flow::PathNode succ) { + exists(Flow::PathNode mid | + bigStepEntry(pred) and + step(pred, mid) + | + succ = mid + or + stepRecPlus(mid, succ) + ) and + bigStepExit(succ) + } + + pragma[nomagic] + predicate bigStepNotLocal(Flow::PathNode pred, Flow::PathNode succ) { + bigStep(pred, succ) and + not getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + + pragma[nomagic] + predicate bigStepMaybeLocal(Flow::PathNode pred, Flow::PathNode succ) { + bigStep(pred, succ) and + getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + } /** - * Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does - * not go through any reads/stores that need to be recorded, or summarized - * steps. + * Holds if `source` can reach `node`, having read `reads` from the source and + * written `stores` into `node`. + * + * `source` is either a source from a configuration, in which case `scReads` and + * `scStores` are always empty, or it is the parameter of a summarized callable, + * in which case `scReads` and `scStores` record the reads/stores for a summary + * context, that is, the reads/stores for an argument that can reach the parameter. */ pragma[nomagic] - private predicate bigStep(Flow::PathNode pred, Flow::PathNode succ) { - exists(Flow::PathNode mid | - bigStepEntry(pred) and - step(pred, mid) - | - succ = mid + private predicate nodeReaches( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + AccessPath reads, AccessPath stores + ) { + node = source and + reads = scReads and + stores = scStores and + ( + Flow::flowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() or - stepRecPlus(mid, succ) - ) and - bigStepExit(succ) - } - - pragma[nomagic] - predicate bigStepNotLocal(Flow::PathNode pred, Flow::PathNode succ) { - bigStep(pred, succ) and - not getEnclosingCallable(pred) = getEnclosingCallable(succ) - } - - pragma[nomagic] - predicate bigStepMaybeLocal(Flow::PathNode pred, Flow::PathNode succ) { - bigStep(pred, succ) and - getEnclosingCallable(pred) = getEnclosingCallable(succ) - } - } - - /** - * Holds if `source` can reach `node`, having read `reads` from the source and - * written `stores` into `node`. - * - * `source` is either a source from a configuration, in which case `scReads` and - * `scStores` are always empty, or it is the parameter of a summarized callable, - * in which case `scReads` and `scStores` record the reads/stores for a summary - * context, that is, the reads/stores for an argument that can reach the parameter. - */ - pragma[nomagic] - private predicate nodeReaches( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - AccessPath reads, AccessPath stores - ) { - node = source and - reads = scReads and - stores = scStores and - ( - Flow::flowPath(source, _) and - scReads = TAccessPathNil() and - scStores = TAccessPathNil() - or - // the argument in a sub path can be reached, so we start flow from the sub path - // parameter, while recording the read/store summary context - exists(Flow::PathNode arg | - nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and - Flow::PathGraph::subpaths(arg, source, _, _) + // the argument in a sub path can be reached, so we start flow from the sub path + // parameter, while recording the read/store summary context + exists(Flow::PathNode arg | + nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and + Flow::PathGraph::subpaths(arg, source, _, _) + ) ) - ) - or - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - BigStepFlow::bigStepMaybeLocal(mid, node) - ) - or - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - BigStepFlow::bigStepNotLocal(mid, node) and - // when flow is not local, we cannot flow back out, so we may stop - // flow early when computing summary flow - Flow::flowPath(source, _) and - scReads = TAccessPathNil() and - scStores = TAccessPathNil() - ) - or - // store step - exists(AccessPath storesMid, DataFlow::ContentSet c | - nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and - stores = TAccessPathCons(c, storesMid) - ) - or - // read step - exists(AccessPath readsMid, DataFlow::ContentSet c | - nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and - reads = TAccessPathCons(c, readsMid) - ) - or - // flow-through step; match outer stores/reads with inner store/read summary contexts - exists(Flow::PathNode mid, AccessPath innerScReads, AccessPath innerScStores | - nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and - subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores) - ) - } + or + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepMaybeLocal(mid, node) + ) + or + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepNotLocal(mid, node) and + // when flow is not local, we cannot flow back out, so we may stop + // flow early when computing summary flow + Flow::flowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() + ) + or + // store step + exists(AccessPath storesMid, ContentSet c | + nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and + stores = TAccessPathCons(c, storesMid) + ) + or + // read step + exists(AccessPath readsMid, ContentSet c | + nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and + reads = TAccessPathCons(c, readsMid) + ) + or + // flow-through step; match outer stores/reads with inner store/read summary contexts + exists(Flow::PathNode mid, AccessPath innerScReads, AccessPath innerScStores | + nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and + subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores) + ) + } - pragma[nomagic] - private predicate nodeReachesStore( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - DataFlow::ContentSet c, AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node - ) - } + pragma[nomagic] + private predicate nodeReachesStore( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + ContentSet c, AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and + mid.getASuccessor() = node + ) + } - pragma[nomagic] - private predicate nodeReachesRead( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - DataFlow::ContentSet c, AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node - ) - } + pragma[nomagic] + private predicate nodeReachesRead( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + ContentSet c, AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and + mid.getASuccessor() = node + ) + } - pragma[nomagic] - private predicate nodeReachesSubpathArg( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode arg, - AccessPath reads, AccessPath stores - ) { - nodeReaches(source, scReads, scStores, arg, reads, stores) and - Flow::PathGraph::subpaths(arg, _, _, _) - } + pragma[nomagic] + private predicate nodeReachesSubpathArg( + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode arg, + AccessPath reads, AccessPath stores + ) { + nodeReaches(source, scReads, scStores, arg, reads, stores) and + Flow::PathGraph::subpaths(arg, _, _, _) + } - pragma[nomagic] - private predicate subpathArgReachesOut( - Flow::PathNode arg, AccessPath scReads, AccessPath scStores, Flow::PathNode out, - AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode source, Flow::PathNode ret | - nodeReaches(source, scReads, scStores, ret, reads, stores) and - Flow::PathGraph::subpaths(arg, source, ret, out) - ) + pragma[nomagic] + private predicate subpathArgReachesOut( + Flow::PathNode arg, AccessPath scReads, AccessPath scStores, Flow::PathNode out, + AccessPath reads, AccessPath stores + ) { + exists(Flow::PathNode source, Flow::PathNode ret | + nodeReaches(source, scReads, scStores, ret, reads, stores) and + Flow::PathGraph::subpaths(arg, source, ret, out) + ) + } } } From d935c472318de67e07311990991839fc4349c41b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 22 Aug 2024 15:43:41 +0200 Subject: [PATCH 152/334] C#: Use the shared content flow implementation. --- .../dataflow/internal/ContentDataFlow.qll | 508 +----------------- 1 file changed, 4 insertions(+), 504 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll index 76936549051..a0368f1c335 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll @@ -1,504 +1,4 @@ -/** - * Provides classes for performing global (inter-procedural) - * content-sensitive data flow analyses. - * - * Unlike `DataFlow::Global`, we allow for data to be stored (possibly nested) inside - * contents of sources and sinks. - * We track flow paths of the form - * - * ``` - * source --value-->* node - * (--read--> node --value-->* node)* - * --(non-value|value)-->* node - * (--store--> node --value-->* node)* - * --value-->* sink - * ``` - * - * where `--value-->` is a value-preserving flow step, `--read-->` is a read - * step, `--store-->` is a store step, and `--(non-value)-->` is a - * non-value-preserving flow step. - * - * That is, first a sequence of 0 or more reads, followed by 0 or more additional - * steps, followed by 0 or more stores, with value-preserving steps allowed in - * between all other steps. - */ - -private import csharp -private import codeql.util.Boolean -private import DataFlowImplCommon -private import DataFlowImplSpecific::Private -private import DataFlowImplSpecific::Private as DataFlowPrivate - -/** - * An input configuration for content data flow. - */ -signature module ConfigSig { - /** - * Holds if `source` is a relevant data flow source. - */ - predicate isSource(DataFlow::Node source); - - /** - * Holds if `sink` is a relevant data flow sink. - */ - predicate isSink(DataFlow::Node sink); - - /** - * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. - */ - default predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { none() } - - /** Holds if data flow into `node` is prohibited. */ - default predicate isBarrier(DataFlow::Node node) { none() } - - /** - * Gets a data flow configuration feature to add restrictions to the set of - * valid flow paths. - * - * - `FeatureHasSourceCallContext`: - * Assume that sources have some existing call context to disallow - * conflicting return-flow directly following the source. - * - `FeatureHasSinkCallContext`: - * Assume that sinks have some existing call context to disallow - * conflicting argument-to-parameter flow directly preceding the sink. - * - `FeatureEqualSourceSinkCallContext`: - * Implies both of the above and additionally ensures that the entire flow - * path preserves the call context. - */ - default DataFlow::FlowFeature getAFeature() { none() } - - /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ - default int accessPathLimit() { result = DataFlowPrivate::accessPathLimit() } - - /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ - default predicate isRelevantContent(DataFlow::ContentSet c) { any() } -} - -/** - * Constructs a global content data flow computation. - */ -module Global { - private module FlowConfig implements DataFlow::StateConfigSig { - class FlowState = State; - - predicate isSource(DataFlow::Node source, FlowState state) { - ContentConfig::isSource(source) and - state.(InitState).decode(true) - } - - predicate isSink(DataFlow::Node sink, FlowState state) { - ContentConfig::isSink(sink) and - ( - state instanceof InitState or - state instanceof StoreState or - state instanceof ReadState - ) - } - - predicate isAdditionalFlowStep( - DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 - ) { - storeStep(node1, state1, _, node2, state2) or - readStep(node1, state1, _, node2, state2) or - additionalStep(node1, state1, node2, state2) - } - - predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; - - predicate isBarrier = ContentConfig::isBarrier/1; - - DataFlow::FlowFeature getAFeature() { result = ContentConfig::getAFeature() } - - predicate accessPathLimit = ContentConfig::accessPathLimit/0; - - // needed to record reads/stores inside summarized callables - predicate includeHiddenNodes() { any() } - } - - private module Flow = DataFlow::GlobalWithState; - - /** - * Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink` - * for this configuration. `preservesValue` indicates whether any of the additional - * flow steps defined by `isAdditionalFlowStep` are needed. - * - * For the source access path, `sourceAp`, the top of the stack represents the content - * that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1` - * being the top of the stack), then there is flow from `source.Field2.Field1`. - * - * For the sink access path, `sinkAp`, the top of the stack represents the content - * that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1` - * being the top of the stack), then there is flow into `sink.Field1.Field2`. - */ - predicate flow( - DataFlow::Node source, AccessPath sourceAp, DataFlow::Node sink, AccessPath sinkAp, - boolean preservesValue - ) { - exists(Flow::PathNode pathSource, Flow::PathNode pathSink | - Flow::flowPath(pathSource, pathSink) and - nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and - source = pathSource.getNode() and - sink = pathSink.getNode() - | - pathSink.getState().(InitState).decode(preservesValue) - or - pathSink.getState().(ReadState).decode(_, preservesValue) - or - pathSink.getState().(StoreState).decode(_, preservesValue) - ) - } - - private newtype TState = - TInitState(Boolean preservesValue) or - TStoreState(int size, Boolean preservesValue) { - size in [1 .. ContentConfig::accessPathLimit()] - } or - TReadState(int size, Boolean preservesValue) { size in [1 .. ContentConfig::accessPathLimit()] } - - abstract private class State extends TState { - abstract string toString(); - } - - /** A flow state representing no reads or stores. */ - private class InitState extends State, TInitState { - private boolean preservesValue_; - - InitState() { this = TInitState(preservesValue_) } - - override string toString() { result = "Init(" + preservesValue_ + ")" } - - predicate decode(boolean preservesValue) { preservesValue = preservesValue_ } - } - - /** A flow state representing that content has been stored into. */ - private class StoreState extends State, TStoreState { - private boolean preservesValue_; - private int size_; - - StoreState() { this = TStoreState(size_, preservesValue_) } - - override string toString() { result = "StoreState(" + size_ + "," + preservesValue_ + ")" } - - predicate decode(int size, boolean preservesValue) { - size = size_ and preservesValue = preservesValue_ - } - } - - /** A flow state representing that content has been read from. */ - private class ReadState extends State, TReadState { - private boolean preservesValue_; - private int size_; - - ReadState() { this = TReadState(size_, preservesValue_) } - - override string toString() { result = "ReadState(" + size_ + "," + preservesValue_ + ")" } - - predicate decode(int size, boolean preservesValue) { - size = size_ and preservesValue = preservesValue_ - } - } - - private predicate storeStep( - DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, - StoreState state2 - ) { - exists(boolean preservesValue, int size | - storeSet(node1, c, node2, _, _) and - ContentConfig::isRelevantContent(c) and - state2.decode(size + 1, preservesValue) - | - state1.(InitState).decode(preservesValue) and size = 0 - or - state1.(ReadState).decode(_, preservesValue) and size = 0 - or - state1.(StoreState).decode(size, preservesValue) - ) - } - - private predicate readStep( - DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2, - ReadState state2 - ) { - exists(int size | - readSet(node1, c, node2) and - ContentConfig::isRelevantContent(c) and - state2.decode(size + 1, true) - | - state1.(InitState).decode(true) and - size = 0 - or - state1.(ReadState).decode(size, true) - ) - } - - private predicate additionalStep( - DataFlow::Node node1, State state1, DataFlow::Node node2, State state2 - ) { - ContentConfig::isAdditionalFlowStep(node1, node2) and - ( - state1 instanceof InitState and - state2.(InitState).decode(false) - or - exists(int size | - state1.(ReadState).decode(size, _) and - state2.(ReadState).decode(size, false) - ) - ) - } - - private newtype TAccessPath = - TAccessPathNil() or - TAccessPathCons(DataFlow::ContentSet head, AccessPath tail) { - nodeReachesStore(_, _, _, _, head, _, tail) - or - nodeReachesRead(_, _, _, _, head, tail, _) - } - - /** An access path. */ - class AccessPath extends TAccessPath { - /** Gets the head of this access path, if any. */ - DataFlow::ContentSet getHead() { this = TAccessPathCons(result, _) } - - /** Gets the tail of this access path, if any. */ - AccessPath getTail() { this = TAccessPathCons(_, result) } - - /** - * Gets a textual representation of this access path. - * - * Elements are dot-separated, and the head of the stack is - * rendered first. - */ - string toString() { - this = TAccessPathNil() and - result = "" - or - exists(DataFlow::ContentSet head, AccessPath tail | - this = TAccessPathCons(head, tail) and - result = head + "." + tail - ) - } - } - - /** - * Provides a big-step flow relation, where flow stops at read/store steps that - * must be recorded, and flow via `subpaths` such that reads/stores inside - * summarized callables can be recorded as well. - */ - private module BigStepFlow { - private predicate reachesSink(Flow::PathNode node) { - FlowConfig::isSink(node.getNode(), node.getState()) - or - reachesSink(node.getASuccessor()) - } - - /** - * Holds if the flow step `pred -> succ` should not be allowed to be included - * in the big-step relation. - */ - pragma[nomagic] - private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { - pred.getASuccessor() = succ and - ( - // we need to record reads/stores inside summarized callables - Flow::PathGraph::subpaths(pred, _, _, succ) - or - // only allow flow into a summarized callable, as part of the big-step - // relation, when flow can reach a sink without going back out - Flow::PathGraph::subpaths(pred, succ, _, _) and - not reachesSink(succ) - or - // needed to record store steps - storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) - or - // needed to record read steps - readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) - ) - } - - pragma[nomagic] - private DataFlowCallable getEnclosingCallableImpl(Flow::PathNode node) { - result = getNodeEnclosingCallable(node.getNode()) - } - - pragma[inline] - private DataFlowCallable getEnclosingCallable(Flow::PathNode node) { - pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node)) - } - - pragma[nomagic] - private predicate bigStepEntry(Flow::PathNode node) { - ( - FlowConfig::isSource(node.getNode(), node.getState()) - or - excludeStep(_, node) - or - Flow::PathGraph::subpaths(_, node, _, _) - ) - } - - pragma[nomagic] - private predicate bigStepExit(Flow::PathNode node) { - ( - bigStepEntry(node) - or - FlowConfig::isSink(node.getNode(), node.getState()) - or - excludeStep(node, _) - or - Flow::PathGraph::subpaths(_, _, node, _) - ) - } - - pragma[nomagic] - private predicate step(Flow::PathNode pred, Flow::PathNode succ) { - pred.getASuccessor() = succ and - not excludeStep(pred, succ) - } - - pragma[nomagic] - private predicate stepRec(Flow::PathNode pred, Flow::PathNode succ) { - step(pred, succ) and - not bigStepEntry(pred) - } - - private predicate stepRecPlus(Flow::PathNode n1, Flow::PathNode n2) = fastTC(stepRec/2)(n1, n2) - - /** - * Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does - * not go through any reads/stores that need to be recorded, or summarized - * steps. - */ - pragma[nomagic] - private predicate bigStep(Flow::PathNode pred, Flow::PathNode succ) { - exists(Flow::PathNode mid | - bigStepEntry(pred) and - step(pred, mid) - | - succ = mid - or - stepRecPlus(mid, succ) - ) and - bigStepExit(succ) - } - - pragma[nomagic] - predicate bigStepNotLocal(Flow::PathNode pred, Flow::PathNode succ) { - bigStep(pred, succ) and - not getEnclosingCallable(pred) = getEnclosingCallable(succ) - } - - pragma[nomagic] - predicate bigStepMaybeLocal(Flow::PathNode pred, Flow::PathNode succ) { - bigStep(pred, succ) and - getEnclosingCallable(pred) = getEnclosingCallable(succ) - } - } - - /** - * Holds if `source` can reach `node`, having read `reads` from the source and - * written `stores` into `node`. - * - * `source` is either a source from a configuration, in which case `scReads` and - * `scStores` are always empty, or it is the parameter of a summarized callable, - * in which case `scReads` and `scStores` record the reads/stores for a summary - * context, that is, the reads/stores for an argument that can reach the parameter. - */ - pragma[nomagic] - private predicate nodeReaches( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - AccessPath reads, AccessPath stores - ) { - node = source and - reads = scReads and - stores = scStores and - ( - Flow::flowPath(source, _) and - scReads = TAccessPathNil() and - scStores = TAccessPathNil() - or - // the argument in a sub path can be reached, so we start flow from the sub path - // parameter, while recording the read/store summary context - exists(Flow::PathNode arg | - nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and - Flow::PathGraph::subpaths(arg, source, _, _) - ) - ) - or - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - BigStepFlow::bigStepMaybeLocal(mid, node) - ) - or - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - BigStepFlow::bigStepNotLocal(mid, node) and - // when flow is not local, we cannot flow back out, so we may stop - // flow early when computing summary flow - Flow::flowPath(source, _) and - scReads = TAccessPathNil() and - scStores = TAccessPathNil() - ) - or - // store step - exists(AccessPath storesMid, DataFlow::ContentSet c | - nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and - stores = TAccessPathCons(c, storesMid) - ) - or - // read step - exists(AccessPath readsMid, DataFlow::ContentSet c | - nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and - reads = TAccessPathCons(c, readsMid) - ) - or - // flow-through step; match outer stores/reads with inner store/read summary contexts - exists(Flow::PathNode mid, AccessPath innerScReads, AccessPath innerScStores | - nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and - subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores) - ) - } - - pragma[nomagic] - private predicate nodeReachesStore( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - DataFlow::ContentSet c, AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node - ) - } - - pragma[nomagic] - private predicate nodeReachesRead( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, - DataFlow::ContentSet c, AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode mid | - nodeReaches(source, scReads, scStores, mid, reads, stores) and - readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node - ) - } - - pragma[nomagic] - private predicate nodeReachesSubpathArg( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode arg, - AccessPath reads, AccessPath stores - ) { - nodeReaches(source, scReads, scStores, arg, reads, stores) and - Flow::PathGraph::subpaths(arg, _, _, _) - } - - pragma[nomagic] - private predicate subpathArgReachesOut( - Flow::PathNode arg, AccessPath scReads, AccessPath scStores, Flow::PathNode out, - AccessPath reads, AccessPath stores - ) { - exists(Flow::PathNode source, Flow::PathNode ret | - nodeReaches(source, scReads, scStores, ret, reads, stores) and - Flow::PathGraph::subpaths(arg, source, ret, out) - ) - } -} +private import semmle.code.csharp.Location +private import DataFlowImplSpecific +private import codeql.dataflow.internal.ContentDataFlowImpl +import MakeImplContentDataFlow From c1c9ef2c1fd5d3ba8bd3fa688bab80c52a07237c Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Wed, 21 Aug 2024 16:25:02 -0700 Subject: [PATCH 153/334] Add a pull request template --- .github/pull_request_template.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000000..520020522cc --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,7 @@ +### Pull Request checklist + +- [ ] Add a change note if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md). +- [ ] If this PR makes significant changes to `.ql`, `.qll`, or `.qhelp` files, make sure that autofixes generated based on these changes are valid. See [the documentation](https://github.com/github/codeql-team/blob/main/docs/best-practices/validating-autofix-for-query-changes.md) (internal access required). +- [ ] All new queries has appropriate `.qhelp`. +- [ ] QL tests are added if necessary. +- [ ] Test your changes in [DCA](https://github.com/github/codeql-dca/) (internal access required). From 19c2eb17c4088ca37fea1070b94517f063afe14b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 23 Aug 2024 09:04:13 +0200 Subject: [PATCH 154/334] C#: Remove redundant imports. --- .../dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index 18e44061967..a4d3e413625 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -26,8 +26,6 @@ private import codeql.dataflow.DataFlow private import codeql.util.Boolean private import codeql.util.Location -private import DataFlowImpl -private import DataFlowImplCommon module MakeImplContentDataFlow Lang> { private import Lang From c3b36325b2b5d73b1527247c6aa80f6b77f78656 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 22 Aug 2024 11:25:44 +0200 Subject: [PATCH 155/334] Shared: prevent use-use flow through implicit reads (part 1) --- .../codeql/dataflow/internal/DataFlowImpl.qll | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 379a618dbdf..d290306ff35 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -173,6 +173,11 @@ module MakeImpl Lang> { Node asNode() { this = TNodeNormal(result) } + /** Gets the corresponding Node if this is a normal node or its post-implicit read node. */ + Node asNodeOrImplicitRead() { + this = TNodeNormal(result) or this = TNodeImplicitRead(result, true) + } + predicate isImplicitReadNode(Node n, boolean hasRead) { this = TNodeImplicitRead(n, hasRead) } ParameterNode asParamReturnNode() { this = TParamReturnNode(result, _) } @@ -241,6 +246,16 @@ module MakeImpl Lang> { ReturnKindExt getKind() { result = pos.getKind() } } + /** If `node` corresponds to a sink, gets the normal node for that sink. */ + pragma[nomagic] + private NodeEx toNormalSinkNodeEx(NodeEx node) { + exists(Node n | + node.asNodeOrImplicitRead() = n and + (Config::isSink(n) or Config::isSink(n, _)) and + result.asNode() = n + ) + } + private predicate inBarrier(NodeEx node) { exists(Node n | node.asNode() = n and @@ -260,7 +275,7 @@ module MakeImpl Lang> { private predicate outBarrier(NodeEx node) { exists(Node n | - node.asNode() = n and + node.asNodeOrImplicitRead() = n and Config::isBarrierOut(n) | Config::isSink(n, _) @@ -272,7 +287,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate outBarrier(NodeEx node, FlowState state) { exists(Node n | - node.asNode() = n and + node.asNodeOrImplicitRead() = n and Config::isBarrierOut(n, state) | Config::isSink(n, state) @@ -318,7 +333,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate sinkNodeWithState(NodeEx node, FlowState state) { - Config::isSink(node.asNode(), state) and + Config::isSink(node.asNodeOrImplicitRead(), state) and not fullBarrier(node) and not stateBarrier(node, state) } @@ -380,26 +395,19 @@ module MakeImpl Lang> { */ private predicate additionalLocalFlowStep(NodeEx node1, NodeEx node2, string model) { exists(Node n1, Node n2 | - node1.asNode() = n1 and + node1.asNodeOrImplicitRead() = n1 and node2.asNode() = n2 and Config::isAdditionalFlowStep(pragma[only_bind_into](n1), pragma[only_bind_into](n2), model) and getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and stepFilter(node1, node2) ) - or - exists(Node n | - node1.isImplicitReadNode(n, true) and - node2.asNode() = n and - not fullBarrier(node2) and - model = "" - ) } private predicate additionalLocalStateStep( NodeEx node1, FlowState s1, NodeEx node2, FlowState s2 ) { exists(Node n1, Node n2 | - node1.asNode() = n1 and + node1.asNodeOrImplicitRead() = n1 and node2.asNode() = n2 and Config::isAdditionalFlowStep(pragma[only_bind_into](n1), s1, pragma[only_bind_into](n2), s2) and getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and @@ -425,7 +433,7 @@ module MakeImpl Lang> { */ private predicate additionalJumpStep(NodeEx node1, NodeEx node2, string model) { exists(Node n1, Node n2 | - node1.asNode() = n1 and + node1.asNodeOrImplicitRead() = n1 and node2.asNode() = n2 and Config::isAdditionalFlowStep(pragma[only_bind_into](n1), pragma[only_bind_into](n2), model) and getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and @@ -436,7 +444,7 @@ module MakeImpl Lang> { private predicate additionalJumpStateStep(NodeEx node1, FlowState s1, NodeEx node2, FlowState s2) { exists(Node n1, Node n2 | - node1.asNode() = n1 and + node1.asNodeOrImplicitRead() = n1 and node2.asNode() = n2 and Config::isAdditionalFlowStep(pragma[only_bind_into](n1), s1, pragma[only_bind_into](n2), s2) and getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and @@ -729,7 +737,7 @@ module MakeImpl Lang> { additional predicate sinkNode(NodeEx node, FlowState state) { fwdFlow(node) and fwdFlowState(state) and - Config::isSink(node.asNode()) + Config::isSink(node.asNodeOrImplicitRead()) or fwdFlow(node) and fwdFlowState(state) and @@ -1052,7 +1060,7 @@ module MakeImpl Lang> { private predicate sinkModel(NodeEx node, string model) { sinkNode(node, _) and - exists(Node n | n = node.asNode() | + exists(Node n | n = node.asNodeOrImplicitRead() | knownSinkModel(n, model) or not knownSinkModel(n, _) and model = "" @@ -2549,7 +2557,7 @@ module MakeImpl Lang> { TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | sink.isAtSink() and - node = sink.getNodeEx() and + node = toNormalSinkNodeEx(sink.getNodeEx()) and state = sink.getState() ) } or @@ -2772,7 +2780,7 @@ module MakeImpl Lang> { PathNodeSink projectToSink(string model) { this.isAtSink() and sinkModel(node, model) and - result.getNodeEx() = node and + result.getNodeEx() = toNormalSinkNodeEx(node) and result.getState() = state } } @@ -4851,7 +4859,7 @@ module MakeImpl Lang> { private predicate revSinkNode(NodeEx node, FlowState state) { sinkNodeWithState(node, state) or - Config::isSink(node.asNode()) and + Config::isSink(node.asNodeOrImplicitRead()) and relevantState(state) and not fullBarrier(node) and not stateBarrier(node, state) From 6bc8407bd60fcf215e6614247c3a0f005e1c7844 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 20 Aug 2024 14:14:30 +0200 Subject: [PATCH 156/334] Java: Update test output --- java/ql/test/library-tests/dataflow/implicit-read/A.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/library-tests/dataflow/implicit-read/A.java b/java/ql/test/library-tests/dataflow/implicit-read/A.java index c845c7febe2..fbc4212b3b2 100644 --- a/java/ql/test/library-tests/dataflow/implicit-read/A.java +++ b/java/ql/test/library-tests/dataflow/implicit-read/A.java @@ -21,7 +21,7 @@ public class A { Object object = getA(); sink(step(object)); // $ hasTaintFlow=source - sink(object); // $ SPURIOUS: hasTaintFlow=source + sink(object); sink(((A)object).field); // $ hasTaintFlow=source } } From 9703f6779421dc3a1287bb4bdf62908342b0a40b Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 23 Aug 2024 11:03:26 +0200 Subject: [PATCH 157/334] Test output updates that only affect nodes/edges --- .../dataflow/summaries/test.expected | 6 --- .../dataflow/summaries/test.expected | 6 --- .../CWE-200/SensitiveAndroidFileLeak.expected | 4 +- .../apache-commons-lang3/flow.expected | 5 --- .../dataflow/taint/core/Taint.expected | 18 --------- .../Security/CWE-094/UnsafeJsEval.expected | 8 +--- .../CWE-321/HardcodedEncryptionKey.expected | 9 ----- .../Security/CWE-757/InsecureTLS.expected | 38 ------------------- 8 files changed, 3 insertions(+), 91 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/dataflow/summaries/test.expected b/java/ql/test-kotlin1/library-tests/dataflow/summaries/test.expected index 7f55b285880..84fdf028642 100644 --- a/java/ql/test-kotlin1/library-tests/dataflow/summaries/test.expected +++ b/java/ql/test-kotlin1/library-tests/dataflow/summaries/test.expected @@ -36,19 +36,14 @@ edges | apply.kt:6:28:6:41 | $this$apply : String | apply.kt:6:35:6:38 | this | provenance | | | apply.kt:7:14:7:25 | taint(...) : String | apply.kt:7:14:7:40 | apply(...) | provenance | MaD:31 | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:7:14:7:14 | l | provenance | | -| list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:8:14:8:14 | l : List | provenance | | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:8:14:8:14 | l : List [] : String | provenance | | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:9:19:9:19 | l : List [] : String | provenance | | -| list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:10:18:10:18 | s | provenance | | | list.kt:6:16:6:25 | taint(...) : String | list.kt:6:9:6:9 | l [post update] : List [] : String | provenance | MaD:27 | -| list.kt:8:14:8:14 | l : List | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 | | list.kt:8:14:8:14 | l : List [] : String | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 | | list.kt:9:19:9:19 | l : List [] : String | list.kt:10:18:10:18 | s | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:14:14:14:14 | a | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:14 | a : String[] [[]] : String | provenance | | -| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:16:19:16:19 | a : String[] [[]] : String | provenance | | -| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | | | list.kt:13:25:13:34 | taint(...) : String | list.kt:13:17:13:40 | {...} : String[] [[]] : String | provenance | | | list.kt:15:14:15:14 | a : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | | | list.kt:16:19:16:19 | a : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | | @@ -134,7 +129,6 @@ nodes | list.kt:6:9:6:9 | l [post update] : List [] : String | semmle.label | l [post update] : List [] : String | | list.kt:6:16:6:25 | taint(...) : String | semmle.label | taint(...) : String | | list.kt:7:14:7:14 | l | semmle.label | l | -| list.kt:8:14:8:14 | l : List | semmle.label | l : List | | list.kt:8:14:8:14 | l : List [] : String | semmle.label | l : List [] : String | | list.kt:8:14:8:17 | get(...) | semmle.label | get(...) | | list.kt:9:19:9:19 | l : List [] : String | semmle.label | l : List [] : String | diff --git a/java/ql/test-kotlin2/library-tests/dataflow/summaries/test.expected b/java/ql/test-kotlin2/library-tests/dataflow/summaries/test.expected index 7f55b285880..84fdf028642 100644 --- a/java/ql/test-kotlin2/library-tests/dataflow/summaries/test.expected +++ b/java/ql/test-kotlin2/library-tests/dataflow/summaries/test.expected @@ -36,19 +36,14 @@ edges | apply.kt:6:28:6:41 | $this$apply : String | apply.kt:6:35:6:38 | this | provenance | | | apply.kt:7:14:7:25 | taint(...) : String | apply.kt:7:14:7:40 | apply(...) | provenance | MaD:31 | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:7:14:7:14 | l | provenance | | -| list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:8:14:8:14 | l : List | provenance | | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:8:14:8:14 | l : List [] : String | provenance | | | list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:9:19:9:19 | l : List [] : String | provenance | | -| list.kt:6:9:6:9 | l [post update] : List [] : String | list.kt:10:18:10:18 | s | provenance | | | list.kt:6:16:6:25 | taint(...) : String | list.kt:6:9:6:9 | l [post update] : List [] : String | provenance | MaD:27 | -| list.kt:8:14:8:14 | l : List | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 | | list.kt:8:14:8:14 | l : List [] : String | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 | | list.kt:9:19:9:19 | l : List [] : String | list.kt:10:18:10:18 | s | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:14:14:14:14 | a | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:14 | a : String[] [[]] : String | provenance | | -| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | | | list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:16:19:16:19 | a : String[] [[]] : String | provenance | | -| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | | | list.kt:13:25:13:34 | taint(...) : String | list.kt:13:17:13:40 | {...} : String[] [[]] : String | provenance | | | list.kt:15:14:15:14 | a : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | | | list.kt:16:19:16:19 | a : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | | @@ -134,7 +129,6 @@ nodes | list.kt:6:9:6:9 | l [post update] : List [] : String | semmle.label | l [post update] : List [] : String | | list.kt:6:16:6:25 | taint(...) : String | semmle.label | taint(...) : String | | list.kt:7:14:7:14 | l | semmle.label | l | -| list.kt:8:14:8:14 | l : List | semmle.label | l : List | | list.kt:8:14:8:14 | l : List [] : String | semmle.label | l : List [] : String | | list.kt:8:14:8:17 | get(...) | semmle.label | get(...) | | list.kt:9:19:9:19 | l : List [] : String | semmle.label | l : List [] : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index f232f30d6b1..4282361f89e 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -6,8 +6,7 @@ edges | FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | provenance | | | FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | provenance | MaD:2 | | FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | provenance | | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | provenance | Config | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | provenance | | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:40:41:40:55 | params : Object[] | provenance | Config | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | provenance | | | FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | provenance | | | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | provenance | | @@ -33,7 +32,6 @@ nodes | FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | semmle.label | makeParamsToExecute(...) : Object[] [[]] : String | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | | FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected index 93eaf02d839..5a5618355c0 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected @@ -745,12 +745,9 @@ edges | ArrayUtilsTest.java:68:27:68:57 | {...} : int[] [[]] : Number | ArrayUtilsTest.java:69:56:69:66 | taintedInts : int[] [[]] : Number | provenance | | | ArrayUtilsTest.java:68:39:68:55 | taint(...) : Number | ArrayUtilsTest.java:68:27:68:57 | {...} : int[] [[]] : Number | provenance | | | ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:70:12:70:27 | taintedBoxedInts | provenance | | -| ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | provenance | | | ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | provenance | | | ArrayUtilsTest.java:69:56:69:66 | taintedInts : int[] [[]] : Number | ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | provenance | MaD:53 | | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | provenance | | -| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | provenance | | -| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | provenance | MaD:54 | | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | provenance | MaD:54 | | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) | provenance | | | ArrayUtilsTest.java:72:53:72:69 | taint(...) : Number | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | provenance | MaD:55 | @@ -3434,8 +3431,6 @@ nodes | ArrayUtilsTest.java:70:12:70:27 | taintedBoxedInts | semmle.label | taintedBoxedInts | | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | semmle.label | toPrimitive(...) | | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | semmle.label | toPrimitive(...) : int[] [[]] : Number | -| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | semmle.label | toPrimitive(...) : int[] [[]] : Object | -| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | semmle.label | taintedBoxedInts : Integer[] | | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | semmle.label | taintedBoxedInts : Integer[] [[]] : Number | | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) | semmle.label | toPrimitive(...) | | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | semmle.label | toPrimitive(...) : int[] [[]] : Number | diff --git a/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected b/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected index 00392ecb043..c1b21928881 100644 --- a/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected +++ b/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected @@ -9,18 +9,13 @@ edges | conversions.swift:37:19:37:29 | call to sourceInt() | conversions.swift:37:12:37:30 | call to String.init(_:) | provenance | | | conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:40:12:40:12 | arr | provenance | | | conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:12 | arr [Collection element] | provenance | | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:41:12:41:17 | ...[...] | provenance | | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr | provenance | | | conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:42:20:42:20 | arr [Collection element] | provenance | | -| conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr | provenance | | | conversions.swift:39:12:39:30 | [...] [Collection element] | conversions.swift:43:20:43:20 | arr [Collection element] | provenance | | | conversions.swift:39:19:39:29 | call to sourceInt() | conversions.swift:39:12:39:30 | [...] [Collection element] | provenance | | | conversions.swift:41:12:41:12 | arr [Collection element] | conversions.swift:41:12:41:17 | ...[...] | provenance | | | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) | provenance | | -| conversions.swift:42:20:42:20 | arr | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:42:20:42:20 | arr [Collection element] | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | conversions.swift:43:12:43:26 | ...[...] | provenance | | -| conversions.swift:43:20:43:20 | arr | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:43:20:43:20 | arr [Collection element] | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | conversions.swift:44:12:44:39 | call to Array.init(_:) | provenance | | | conversions.swift:44:20:44:33 | call to sourceString() | conversions.swift:44:20:44:35 | .utf8 | provenance | | @@ -106,32 +101,23 @@ edges | conversions.swift:171:14:171:33 | call to sourceArray(_:) | conversions.swift:185:31:185:31 | arr1 | provenance | | | conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:174:13:174:13 | arr2 | provenance | | | conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:13 | arr2 [Collection element] | provenance | | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:19 | ...[...] | provenance | | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 | provenance | | | conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 [Collection element] | provenance | | -| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 | provenance | | | conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 [Collection element] | provenance | | | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:172:14:172:26 | [...] [Collection element] | provenance | | | conversions.swift:176:13:176:13 | arr2 [Collection element] | conversions.swift:176:13:176:19 | ...[...] | provenance | | | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:180:13:180:13 | arr1b | provenance | | | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:13 | arr1b [Collection element] | provenance | | -| conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | conversions.swift:182:13:182:20 | ...[...] | provenance | | | conversions.swift:178:25:178:25 | arr1 | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:181:13:181:13 | arr2b | provenance | | | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:13 | arr2b [Collection element] | provenance | | -| conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | conversions.swift:183:13:183:20 | ...[...] | provenance | | -| conversions.swift:179:25:179:25 | arr2 | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:179:25:179:25 | arr2 [Collection element] | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | provenance | | | conversions.swift:182:13:182:13 | arr1b [Collection element] | conversions.swift:182:13:182:20 | ...[...] | provenance | | | conversions.swift:183:13:183:13 | arr2b [Collection element] | conversions.swift:183:13:183:20 | ...[...] | provenance | | | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:187:13:187:13 | arr1c | provenance | | | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:13 | arr1c [Collection element] | provenance | | -| conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:189:13:189:20 | ...[...] | provenance | | | conversions.swift:185:31:185:31 | arr1 | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:188:13:188:13 | arr2c | provenance | | | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:13 | arr2c [Collection element] | provenance | | -| conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | conversions.swift:190:13:190:20 | ...[...] | provenance | | -| conversions.swift:186:31:186:31 | arr2 | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | | conversions.swift:186:31:186:31 | arr2 [Collection element] | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | provenance | | | conversions.swift:189:13:189:13 | arr1c [Collection element] | conversions.swift:189:13:189:20 | ...[...] | provenance | | | conversions.swift:190:13:190:13 | arr2c [Collection element] | conversions.swift:190:13:190:20 | ...[...] | provenance | | @@ -277,11 +263,9 @@ nodes | conversions.swift:41:12:41:17 | ...[...] | semmle.label | ...[...] | | conversions.swift:42:12:42:23 | call to Array.init(_:) | semmle.label | call to Array.init(_:) | | conversions.swift:42:12:42:23 | call to Array.init(_:) [Collection element] | semmle.label | call to Array.init(_:) [Collection element] | -| conversions.swift:42:20:42:20 | arr | semmle.label | arr | | conversions.swift:42:20:42:20 | arr [Collection element] | semmle.label | arr [Collection element] | | conversions.swift:43:12:43:23 | call to Array.init(_:) [Collection element] | semmle.label | call to Array.init(_:) [Collection element] | | conversions.swift:43:12:43:26 | ...[...] | semmle.label | ...[...] | -| conversions.swift:43:20:43:20 | arr | semmle.label | arr | | conversions.swift:43:20:43:20 | arr [Collection element] | semmle.label | arr [Collection element] | | conversions.swift:44:12:44:39 | call to Array.init(_:) | semmle.label | call to Array.init(_:) | | conversions.swift:44:12:44:39 | call to Array.init(_:) [Collection element] | semmle.label | call to Array.init(_:) [Collection element] | @@ -409,7 +393,6 @@ nodes | conversions.swift:178:19:178:29 | call to Array.init(_:) [Collection element] | semmle.label | call to Array.init(_:) [Collection element] | | conversions.swift:178:25:178:25 | arr1 | semmle.label | arr1 | | conversions.swift:179:19:179:29 | call to Array.init(_:) [Collection element] | semmle.label | call to Array.init(_:) [Collection element] | -| conversions.swift:179:25:179:25 | arr2 | semmle.label | arr2 | | conversions.swift:179:25:179:25 | arr2 [Collection element] | semmle.label | arr2 [Collection element] | | conversions.swift:180:13:180:13 | arr1b | semmle.label | arr1b | | conversions.swift:181:13:181:13 | arr2b | semmle.label | arr2b | @@ -420,7 +403,6 @@ nodes | conversions.swift:185:15:185:35 | call to ContiguousArray.init(_:) [Collection element] | semmle.label | call to ContiguousArray.init(_:) [Collection element] | | conversions.swift:185:31:185:31 | arr1 | semmle.label | arr1 | | conversions.swift:186:15:186:35 | call to ContiguousArray.init(_:) [Collection element] | semmle.label | call to ContiguousArray.init(_:) [Collection element] | -| conversions.swift:186:31:186:31 | arr2 | semmle.label | arr2 | | conversions.swift:186:31:186:31 | arr2 [Collection element] | semmle.label | arr2 [Collection element] | | conversions.swift:187:13:187:13 | arr1c | semmle.label | arr1c | | conversions.swift:188:13:188:13 | arr2c | semmle.label | arr2c | diff --git a/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected b/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected index 835a6a5706e..cfd68d818ef 100644 --- a/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected +++ b/swift/ql/test/query-tests/Security/CWE-094/UnsafeJsEval.expected @@ -41,16 +41,14 @@ edges | UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | provenance | | | UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | UnsafeJsEval.swift:291:17:291:17 | jsstr | provenance | | | UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | provenance | | -| UnsafeJsEval.swift:287:60:287:60 | stringBytes | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | provenance | Config | -| UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:60 | stringBytes | provenance | | +| UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | provenance | Config | | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | provenance | | | UnsafeJsEval.swift:299:13:299:13 | string | UnsafeJsEval.swift:300:3:300:10 | .utf8CString | provenance | | | UnsafeJsEval.swift:300:3:300:10 | .utf8CString | UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | provenance | | | UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | provenance | | | UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | UnsafeJsEval.swift:305:17:305:17 | jsstr | provenance | | | UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | provenance | | -| UnsafeJsEval.swift:301:61:301:61 | stringBytes | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | provenance | Config | -| UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:61 | stringBytes | provenance | | +| UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | provenance | Config | | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | provenance | | | UnsafeJsEval.swift:318:24:318:87 | call to String.init(contentsOf:) | UnsafeJsEval.swift:320:44:320:74 | ... .+(_:_:) ... | provenance | | nodes @@ -80,7 +78,6 @@ nodes | UnsafeJsEval.swift:286:51:286:51 | stringBytes [Collection element] | semmle.label | stringBytes [Collection element] | | UnsafeJsEval.swift:287:16:287:98 | call to JSStringRetain(_:) | semmle.label | call to JSStringRetain(_:) | | UnsafeJsEval.swift:287:31:287:97 | call to JSStringCreateWithCharacters(_:_:) | semmle.label | call to JSStringCreateWithCharacters(_:_:) | -| UnsafeJsEval.swift:287:60:287:60 | stringBytes | semmle.label | stringBytes | | UnsafeJsEval.swift:287:60:287:60 | stringBytes [Collection element] | semmle.label | stringBytes [Collection element] | | UnsafeJsEval.swift:287:60:287:72 | .baseAddress | semmle.label | .baseAddress | | UnsafeJsEval.swift:291:17:291:17 | jsstr | semmle.label | jsstr | @@ -89,7 +86,6 @@ nodes | UnsafeJsEval.swift:300:48:300:48 | stringBytes [Collection element] | semmle.label | stringBytes [Collection element] | | UnsafeJsEval.swift:301:16:301:85 | call to JSStringRetain(_:) | semmle.label | call to JSStringRetain(_:) | | UnsafeJsEval.swift:301:31:301:84 | call to JSStringCreateWithUTF8CString(_:) | semmle.label | call to JSStringCreateWithUTF8CString(_:) | -| UnsafeJsEval.swift:301:61:301:61 | stringBytes | semmle.label | stringBytes | | UnsafeJsEval.swift:301:61:301:61 | stringBytes [Collection element] | semmle.label | stringBytes [Collection element] | | UnsafeJsEval.swift:301:61:301:73 | .baseAddress | semmle.label | .baseAddress | | UnsafeJsEval.swift:305:17:305:17 | jsstr | semmle.label | jsstr | diff --git a/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected b/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected index 0d8a259fe90..544431cfb4f 100644 --- a/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected +++ b/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected @@ -26,10 +26,7 @@ edges | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:155:26:155:26 | keyString | provenance | | | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:164:24:164:24 | keyString | provenance | | | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:166:24:166:24 | keyString | provenance | | -| file://:0:0:0:0 | [post] self | misc.swift:30:7:30:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [encryptionKey] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [encryptionKey] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [encryptionKey] | misc.swift:30:7:30:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [encryptionKey] | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [encryptionKey] | provenance | | | grdb.swift:21:20:21:20 | abc123 | grdb.swift:27:23:27:23 | constString | provenance | | @@ -45,11 +42,9 @@ edges | misc.swift:57:24:57:24 | abcdef123456 | misc.swift:57:19:57:38 | call to Data.init(_:) | provenance | | | misc.swift:66:2:66:2 | [post] config [encryptionKey] | misc.swift:66:2:66:2 | [post] config | provenance | | | misc.swift:66:25:66:25 | myConstKey | misc.swift:30:7:30:7 | value | provenance | | -| misc.swift:66:25:66:25 | myConstKey | misc.swift:66:2:66:2 | [post] config | provenance | | | misc.swift:66:25:66:25 | myConstKey | misc.swift:66:2:66:2 | [post] config [encryptionKey] | provenance | | | misc.swift:70:2:70:18 | [post] getter for .config [encryptionKey] | misc.swift:70:2:70:18 | [post] getter for .config | provenance | | | misc.swift:70:41:70:41 | myConstKey | misc.swift:30:7:30:7 | value | provenance | | -| misc.swift:70:41:70:41 | myConstKey | misc.swift:70:2:70:18 | [post] getter for .config | provenance | | | misc.swift:70:41:70:41 | myConstKey | misc.swift:70:2:70:18 | [post] getter for .config [encryptionKey] | provenance | | | misc.swift:73:14:73:20 | k1 | misc.swift:76:26:76:29 | .utf8 | provenance | | | misc.swift:73:28:73:34 | k2 | misc.swift:77:26:77:29 | .utf8 | provenance | | @@ -117,7 +112,6 @@ nodes | cryptoswift.swift:165:24:165:24 | key | semmle.label | key | | cryptoswift.swift:166:24:166:24 | keyString | semmle.label | keyString | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self [encryptionKey] | semmle.label | [post] self [encryptionKey] | | file://:0:0:0:0 | value | semmle.label | value | | grdb.swift:21:20:21:20 | abc123 | semmle.label | abc123 | @@ -128,7 +122,6 @@ nodes | grdb.swift:29:23:29:23 | constData | semmle.label | constData | | grdb.swift:31:26:31:26 | constString | semmle.label | constString | | grdb.swift:33:26:33:26 | constData | semmle.label | constData | -| misc.swift:30:7:30:7 | self [Return] | semmle.label | self [Return] | | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | semmle.label | self [Return] [encryptionKey] | | misc.swift:30:7:30:7 | value | semmle.label | value | | misc.swift:57:19:57:38 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | @@ -175,9 +168,7 @@ nodes | sqlite3_c_api.swift:49:36:49:36 | buffer | semmle.label | buffer | | sqlite3_c_api.swift:50:38:50:38 | buffer | semmle.label | buffer | subpaths -| misc.swift:66:25:66:25 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] | misc.swift:66:2:66:2 | [post] config | | misc.swift:66:25:66:25 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | misc.swift:66:2:66:2 | [post] config [encryptionKey] | -| misc.swift:70:41:70:41 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] | misc.swift:70:2:70:18 | [post] getter for .config | | misc.swift:70:41:70:41 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | misc.swift:70:2:70:18 | [post] getter for .config [encryptionKey] | #select | SQLite.swift:43:13:43:13 | hardcoded_key | SQLite.swift:43:13:43:13 | hardcoded_key | SQLite.swift:43:13:43:13 | hardcoded_key | The key 'hardcoded_key' has been initialized with hard-coded values from $@. | SQLite.swift:43:13:43:13 | hardcoded_key | hardcoded_key | diff --git a/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected b/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected index 267c16ae53b..f463e8d939b 100644 --- a/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected +++ b/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected @@ -5,33 +5,26 @@ edges | InsecureTLS.swift:23:7:23:7 | value | file://:0:0:0:0 | value | provenance | | | InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config | provenance | | | InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config | provenance | | | InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config | provenance | | | InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config | provenance | | | InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config | provenance | | | InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | provenance | | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config | provenance | | | InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config | provenance | | | InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | provenance | | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config | provenance | | | InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | provenance | | | InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config | provenance | | | InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | provenance | | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config | provenance | | | InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | provenance | | | InsecureTLS.swift:102:10:102:33 | .TLSv10 | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | provenance | | | InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config | provenance | | | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config | provenance | | | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:121:55:121:66 | version | InsecureTLS.swift:122:47:122:47 | version | provenance | | | InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config | provenance | | | InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config | provenance | | | InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:127:25:127:48 | .TLSv11 | InsecureTLS.swift:121:55:121:66 | version | provenance | | | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | file://:0:0:0:0 | self [TLSVersion] | provenance | | @@ -43,11 +36,9 @@ edges | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | provenance | | | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:165:47:165:51 | .TLSVersion | provenance | | | InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config | provenance | | | InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | provenance | | | InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | provenance | | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | provenance | | | InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:185:20:185:36 | withMinVersion | InsecureTLS.swift:187:42:187:42 | withMinVersion | provenance | | | InsecureTLS.swift:187:5:187:5 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:187:5:187:5 | [post] self | provenance | | @@ -58,27 +49,15 @@ edges | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | InsecureTLS.swift:202:24:202:24 | [post] config [tlsMinimumSupportedProtocolVersion] | provenance | | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:196:56:196:63 | value | provenance | | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | provenance | | -| file://:0:0:0:0 | [post] self | InsecureTLS.swift:19:7:19:7 | self [Return] | provenance | | -| file://:0:0:0:0 | [post] self | InsecureTLS.swift:20:7:20:7 | self [Return] | provenance | | -| file://:0:0:0:0 | [post] self | InsecureTLS.swift:22:7:22:7 | self [Return] | provenance | | -| file://:0:0:0:0 | [post] self | InsecureTLS.swift:23:7:23:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [Return] [TLSVersion] | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:20:7:20:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | provenance | | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | InsecureTLS.swift:23:7:23:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | provenance | | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:19:7:19:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | provenance | | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | InsecureTLS.swift:22:7:22:7 | self [Return] | provenance | | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | provenance | | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | file://:0:0:0:0 | [post] self | provenance | | | file://:0:0:0:0 | self [TLSVersion] | file://:0:0:0:0 | .TLSVersion | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [TLSVersion] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | provenance | | @@ -86,16 +65,12 @@ edges | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | provenance | | nodes -| InsecureTLS.swift:19:7:19:7 | self [Return] | semmle.label | self [Return] | | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | semmle.label | self [Return] [tlsMinimumSupportedProtocolVersion] | | InsecureTLS.swift:19:7:19:7 | value | semmle.label | value | -| InsecureTLS.swift:20:7:20:7 | self [Return] | semmle.label | self [Return] | | InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | semmle.label | self [Return] [tlsMaximumSupportedProtocolVersion] | | InsecureTLS.swift:20:7:20:7 | value | semmle.label | value | -| InsecureTLS.swift:22:7:22:7 | self [Return] | semmle.label | self [Return] | | InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | semmle.label | self [Return] [tlsMinimumSupportedProtocol] | | InsecureTLS.swift:22:7:22:7 | value | semmle.label | value | -| InsecureTLS.swift:23:7:23:7 | self [Return] | semmle.label | self [Return] | | InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | semmle.label | self [Return] [tlsMaximumSupportedProtocol] | | InsecureTLS.swift:23:7:23:7 | value | semmle.label | value | | InsecureTLS.swift:40:3:40:3 | [post] config | semmle.label | [post] config | @@ -150,10 +125,6 @@ nodes | file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self [TLSVersion] | semmle.label | [post] self [TLSVersion] | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | semmle.label | [post] self [tlsMaximumSupportedProtocolVersion] | | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | semmle.label | [post] self [tlsMaximumSupportedProtocol] | @@ -166,25 +137,16 @@ nodes | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | subpaths -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:40:3:40:3 | [post] config | | InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:45:3:45:3 | [post] config | | InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | InsecureTLS.swift:20:7:20:7 | self [Return] | InsecureTLS.swift:57:3:57:3 | [post] config | | InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config [tlsMaximumSupportedProtocolVersion] | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | InsecureTLS.swift:22:7:22:7 | self [Return] | InsecureTLS.swift:64:3:64:3 | [post] config | | InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config [tlsMinimumSupportedProtocol] | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | InsecureTLS.swift:23:7:23:7 | self [Return] | InsecureTLS.swift:76:3:76:3 | [post] config | | InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config [tlsMaximumSupportedProtocol] | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:111:3:111:3 | [post] config | | InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:122:3:122:3 | [post] config | | InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config [tlsMinimumSupportedProtocolVersion] | | InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:158:7:158:7 | value | InsecureTLS.swift:158:7:158:7 | self [Return] [TLSVersion] | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | file://:0:0:0:0 | .TLSVersion | InsecureTLS.swift:165:47:165:51 | .TLSVersion | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:165:3:165:3 | [post] config | | InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:165:3:165:3 | [post] config [tlsMinimumSupportedProtocolVersion] | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | | InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config [tlsMinimumSupportedProtocolVersion] | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:196:56:196:63 | value | InsecureTLS.swift:196:1:198:1 | version[return] | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | #select From d27b28d3714eeeac1f249c3fc4454b016ad32e7f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 21 Aug 2024 13:57:01 +0200 Subject: [PATCH 158/334] C++: update test output This reveals that some tests were passing for the wrong reasons. See https://github.com/github/codeql/pull/17275 --- cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected index 299f1413878..8d4dc3351b4 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected @@ -4,4 +4,7 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (tai WARNING: module 'DataFlow' has been deprecated and may be removed in future (taint.ql:68,25-33) WARNING: module 'TaintTracking' has been deprecated and may be removed in future (taint.ql:73,20-33) testFailures +| taint.cpp:453:23:453:42 | // $ ir MISSING: ast | Missing result:ir= | +| vector.cpp:118:12:118:30 | // $ ir MISSING:ast | Missing result:ir= | +| vector.cpp:119:12:119:30 | // $ ir MISSING:ast | Missing result:ir= | failures From 8df7fbf6d660f67c2a7d5b0a380183d4ea1c8e81 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 23 Aug 2024 11:30:50 +0200 Subject: [PATCH 159/334] Swift: update test output The 'first' field is seen as a TaintInheritingContent, which means any read step for 'first' becomes a taint step too. This type of taint step does not permit an implicit read before it, because it wasn't contributed by a configuration. So there is no way for the taint to get out of the collection content before the taint step through '.first'. The test previously passed because an implicit read at once of the earlier sinks could follow use-use flow down to the receiver of .first, allowing it to escape the collection content. --- .../ql/test/library-tests/dataflow/taint/libraries/set.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swift/ql/test/library-tests/dataflow/taint/libraries/set.swift b/swift/ql/test/library-tests/dataflow/taint/libraries/set.swift index 76b41ff8b93..b7ca5b86cca 100644 --- a/swift/ql/test/library-tests/dataflow/taint/libraries/set.swift +++ b/swift/ql/test/library-tests/dataflow/taint/libraries/set.swift @@ -28,7 +28,7 @@ func testSet(ix: Int) { sink(arg: taintedSet.max()!) // $ tainted=t1 sink(arg: taintedSet.firstIndex(of: source("t2"))!) sink(arg: taintedSet[taintedSet.firstIndex(of: source("t3"))!]) // $ tainted=t1 - sink(arg: taintedSet.first!) // $ tainted=t1 + sink(arg: taintedSet.first!) // $ MISSING: tainted=t1 for elem in taintedSet { sink(arg: elem) // $ tainted=t1 } @@ -100,7 +100,7 @@ func testSet(ix: Int) { sink(arg: taintedSet.sorted().randomElement()!) // $ tainted=t1 sink(arg: taintedSet.shuffled().randomElement()!) // $ tainted=t1 - sink(arg: taintedSet.lazy[taintedSet.firstIndex(of: source("t11"))!]) // $ tainted=t1 + sink(arg: taintedSet.lazy[taintedSet.firstIndex(of: source("t11"))!]) // $ MISSING: tainted=t1 var it = taintedSet.makeIterator() sink(arg: it.next()!) // $ tainted=t1 From ea6092ad3fc5e7a516862773d1eb9be1c8ed607d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 23 Aug 2024 14:10:56 +0200 Subject: [PATCH 160/334] Revert "C#: Add support for flow through side-effects on static fields" This reverts commit 1bcac50db124f7fbd2e0cf033b284b4d8224f0a3. --- .../dataflow/internal/DataFlowPrivate.qll | 6 ++--- .../dataflow/fields/FieldFlow.expected | 24 ------------------- .../test/library-tests/dataflow/fields/K.cs | 2 +- 3 files changed, 3 insertions(+), 29 deletions(-) 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 fef73365de0..f1c51f222d5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2170,11 +2170,9 @@ predicate jumpStep(Node pred, Node succ) { f.getAnAssignedValue() = pred.asExpr() and succ = TFlowInsensitiveFieldNode(f) or - exists(FieldOrPropertyRead fr | f.getAnAccess() = fr | - fr = pred.(PostUpdateNode).getPreUpdateNode().asExpr() and - succ = TFlowInsensitiveFieldNode(f) - or + exists(FieldOrPropertyRead fr | pred = TFlowInsensitiveFieldNode(f) and + f.getAnAccess() = fr and fr = succ.asExpr() and fr.hasNonlocalValue() ) diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index e4cf0bb2673..0317da509bb 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -1152,16 +1152,6 @@ edges | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | | J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | | J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | -| K.cs:7:13:7:13 | access to local variable o : String | K.cs:8:22:8:22 | access to local variable o : String | provenance | | -| K.cs:7:13:7:13 | access to local variable o : String | K.cs:8:22:8:22 | access to local variable o : String | provenance | | -| K.cs:7:17:7:33 | call to method Source : String | K.cs:7:13:7:13 | access to local variable o : String | provenance | | -| K.cs:7:17:7:33 | call to method Source : String | K.cs:7:13:7:13 | access to local variable o : String | provenance | | -| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | provenance | | -| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | provenance | | -| K.cs:8:22:8:22 | access to local variable o : String | K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | provenance | | -| K.cs:8:22:8:22 | access to local variable o : String | K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | provenance | | -| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | K.cs:13:14:13:23 | access to array element | provenance | | -| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | K.cs:13:14:13:23 | access to array element | provenance | | nodes | A.cs:5:13:5:13 | access to local variable c : C | semmle.label | access to local variable c : C | | A.cs:5:13:5:13 | access to local variable c : C | semmle.label | access to local variable c : C | @@ -2403,18 +2393,6 @@ nodes | J.cs:125:14:125:17 | (...) ... | semmle.label | (...) ... | | J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | | J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | -| K.cs:7:13:7:13 | access to local variable o : String | semmle.label | access to local variable o : String | -| K.cs:7:13:7:13 | access to local variable o : String | semmle.label | access to local variable o : String | -| K.cs:7:17:7:33 | call to method Source : String | semmle.label | call to method Source : String | -| K.cs:7:17:7:33 | call to method Source : String | semmle.label | call to method Source : String | -| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | semmle.label | [post] access to field Strings : String[] [element] : String | -| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | semmle.label | [post] access to field Strings : String[] [element] : String | -| K.cs:8:22:8:22 | access to local variable o : String | semmle.label | access to local variable o : String | -| K.cs:8:22:8:22 | access to local variable o : String | semmle.label | access to local variable o : String | -| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | semmle.label | access to field Strings : String[] [element] : String | -| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | semmle.label | access to field Strings : String[] [element] : String | -| K.cs:13:14:13:23 | access to array element | semmle.label | access to array element | -| K.cs:13:14:13:23 | access to array element | semmle.label | access to array element | subpaths | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | @@ -2670,5 +2648,3 @@ testFailures | J.cs:107:14:107:17 | access to property Y | J.cs:105:32:105:48 | call to method Source : Object | J.cs:107:14:107:17 | access to property Y | $@ | J.cs:105:32:105:48 | call to method Source : Object | call to method Source : Object | | J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | | J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | -| K.cs:13:14:13:23 | access to array element | K.cs:7:17:7:33 | call to method Source : String | K.cs:13:14:13:23 | access to array element | $@ | K.cs:7:17:7:33 | call to method Source : String | call to method Source : String | -| K.cs:13:14:13:23 | access to array element | K.cs:7:17:7:33 | call to method Source : String | K.cs:13:14:13:23 | access to array element | $@ | K.cs:7:17:7:33 | call to method Source : String | call to method Source : String | diff --git a/csharp/ql/test/library-tests/dataflow/fields/K.cs b/csharp/ql/test/library-tests/dataflow/fields/K.cs index cdefa485852..f8e79b6af54 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/K.cs +++ b/csharp/ql/test/library-tests/dataflow/fields/K.cs @@ -10,7 +10,7 @@ public class K private void M2() { - Sink(Strings[0]); // $ hasValueFlow=1 + Sink(Strings[0]); // $ MISSING: hasValueFlow=1 } public static void Sink(object o) { } From 65189e09f54e0513e8266a43c362ef395db802b8 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 23 Aug 2024 11:52:22 +0200 Subject: [PATCH 161/334] Dataflow: Simplify using a SummaryCtx type. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 459 +++++++++--------- .../dataflow/internal/DataFlowImplCommon.qll | 18 - 2 files changed, 224 insertions(+), 253 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 379a618dbdf..98291d25ffc 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1419,10 +1419,6 @@ module MakeImpl Lang> { import Param /* Begin: Stage logic. */ - private module TypOption = Option; - - private class TypOption = TypOption::Option; - pragma[nomagic] private Typ getNodeTyp(NodeEx node) { PrevStage::revFlow(node) and result = getTyp(node.getDataFlowType()) @@ -1475,17 +1471,16 @@ module MakeImpl Lang> { */ pragma[nomagic] additional predicate fwdFlow( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, ApApprox apa + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa ) { - fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) + fwdFlow1(node, state, cc, summaryCtx, _, t, ap, apa) } private predicate fwdFlow1( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t0, Typ t, Ap ap, + ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + fwdFlow0(node, state, cc, summaryCtx, t0, ap, apa) and PrevStage::revFlow(node, state, apa) and filter(node, state, t0, ap, t) and ( @@ -1500,25 +1495,22 @@ module MakeImpl Lang> { pragma[nomagic] private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { - fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t + fwdFlow1(_, _, _, _, t0, t, ap, _) and t0 != t } pragma[nomagic] private predicate fwdFlow0( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, ApApprox apa + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa ) { sourceNode(node, state) and (if hasSourceCallCtx() then cc = ccSomeCall() else cc = ccNone()) and - argT instanceof TypOption::None and - argAp = apNone() and - summaryCtx = TParamNodeNone() and + summaryCtx = TSummaryCtxNone() and t = getNodeTyp(node) and ap instanceof ApNil and apa = getApprox(ap) or exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | - fwdFlow(mid, state0, cc, summaryCtx, argT, argAp, t0, ap, apa) and + fwdFlow(mid, state0, cc, summaryCtx, t0, ap, apa) and localCc = getLocalCc(cc) | localStep(mid, state0, node, state, true, _, localCc, _) and @@ -1530,20 +1522,18 @@ module MakeImpl Lang> { or fwdFlowJump(node, state, t, ap, apa) and cc = ccNone() and - summaryCtx = TParamNodeNone() and - argT instanceof TypOption::None and - argAp = apNone() + summaryCtx = TSummaryCtxNone() or // store exists(Content c, Typ t0, Ap ap0 | - fwdFlowStore(_, t0, ap0, c, t, node, state, cc, summaryCtx, argT, argAp) and + fwdFlowStore(_, t0, ap0, c, t, node, state, cc, summaryCtx) and ap = apCons(c, t0, ap0) and apa = getApprox(ap) ) or // read exists(Typ t0, Ap ap0, Content c | - fwdFlowRead(t0, ap0, c, _, node, state, cc, summaryCtx, argT, argAp) and + fwdFlowRead(t0, ap0, c, _, node, state, cc, summaryCtx) and fwdFlowConsCand(t0, ap0, c, t, ap) and apa = getApprox(ap) ) @@ -1553,13 +1543,9 @@ module MakeImpl Lang> { fwdFlowIn(node, apa, state, cc, t, ap, allowsFlowThrough) and if allowsFlowThrough = true then ( - summaryCtx = TParamNodeSome(node.asNode()) and - argT = TypOption::some(t) and - argAp = apSome(ap) + summaryCtx = TSummaryCtxSome(node, t, ap) ) else ( - summaryCtx = TParamNodeNone() and - argT instanceof TypOption::None and - argAp = apNone() and + summaryCtx = TSummaryCtxNone() and // When the call contexts of source and sink needs to match then there's // never any reason to enter a callable except to find a summary. See also // the comment in `PathNodeMid::isAtSink`. @@ -1568,36 +1554,71 @@ module MakeImpl Lang> { ) or // flow out of a callable - fwdFlowOut(_, _, node, state, cc, summaryCtx, argT, argAp, t, ap, apa) + fwdFlowOut(_, _, node, state, cc, summaryCtx, t, ap, apa) or // flow through a callable exists( DataFlowCall call, CcCall ccc, RetNodeEx ret, boolean allowsFieldFlow, ApApprox innerArgApa | - fwdFlowThrough(call, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, - innerArgApa) and + fwdFlowThrough(call, cc, state, ccc, summaryCtx, t, ap, apa, ret, innerArgApa) and flowThroughOutOfCall(call, ccc, ret, node, allowsFieldFlow, innerArgApa, apa) and not inBarrier(node, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() ) } + private newtype TSummaryCtx = + TSummaryCtxNone() or + TSummaryCtxSome(ParamNodeEx p, Typ t, Ap ap) { fwdFlowIn(p, _, _, _, t, ap, true) } + + /** + * A context for generating flow summaries. This represents flow entry through + * a specific parameter with an access path of a specific shape. + * + * Summaries are only created for parameters that may flow through. + */ + private class SummaryCtx extends TSummaryCtx { + abstract string toString(); + } + + /** A summary context from which no flow summary can be generated. */ + private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { + override string toString() { result = "" } + } + + /** A summary context from which a flow summary can be generated. */ + private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { + private ParamNodeEx p; + private Typ t; + private Ap ap; + + SummaryCtxSome() { this = TSummaryCtxSome(p, t, ap) } + + ParamNodeEx getParamNode() { result = p } + + private string ppTyp() { result = t.toString() and result != "" } + + override string toString() { result = p + concat(" : " + this.ppTyp()) + " " + ap } + + Location getLocation() { result = p.getLocation() } + } + private predicate fwdFlowJump(NodeEx node, FlowState state, Typ t, Ap ap, ApApprox apa) { exists(NodeEx mid | - fwdFlow(mid, state, _, _, _, _, t, ap, apa) and + fwdFlow(mid, state, _, _, t, ap, apa) and jumpStepEx(mid, node) ) or exists(NodeEx mid | - fwdFlow(mid, state, _, _, _, _, _, ap, apa) and + fwdFlow(mid, state, _, _, _, ap, apa) and additionalJumpStep(mid, node, _) and t = getNodeTyp(node) and ap instanceof ApNil ) or exists(NodeEx mid, FlowState state0 | - fwdFlow(mid, state0, _, _, _, _, _, ap, apa) and + fwdFlow(mid, state0, _, _, _, ap, apa) and additionalJumpStateStep(mid, state0, node, state) and t = getNodeTyp(node) and ap instanceof ApNil @@ -1607,10 +1628,10 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowStore( NodeEx node1, Typ t1, Ap ap1, Content c, Typ t2, NodeEx node2, FlowState state, Cc cc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp + SummaryCtx summaryCtx ) { exists(DataFlowType contentType, DataFlowType containerType, ApApprox apa1 | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t1, ap1, apa1) and + fwdFlow(node1, state, cc, summaryCtx, t1, ap1, apa1) and not outBarrier(node1, state) and not inBarrier(node2, state) and PrevStage::storeStepCand(node1, apa1, c, node2, contentType, containerType) and @@ -1626,7 +1647,7 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { - fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and + fwdFlowStore(_, t1, tail, c, t2, _, _, _, _) and cons = apCons(c, t1, tail) or exists(Typ t0 | @@ -1650,10 +1671,10 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowRead( Typ t, Ap ap, Content c, NodeEx node1, NodeEx node2, FlowState state, Cc cc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp + SummaryCtx summaryCtx ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and + fwdFlow(node1, state, cc, summaryCtx, t, ap, _) and not outBarrier(node1, state) and not inBarrier(node2, state) and apc = getHeadContent(ap) and @@ -1663,10 +1684,10 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowIntoArg( - ArgNodeEx arg, FlowState state, Cc outercc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, boolean emptyAp, ApApprox apa, boolean cc + ArgNodeEx arg, FlowState state, Cc outercc, SummaryCtx summaryCtx, Typ t, Ap ap, + boolean emptyAp, ApApprox apa, boolean cc ) { - fwdFlow(arg, state, outercc, summaryCtx, argT, argAp, t, ap, apa) and + fwdFlow(arg, state, outercc, summaryCtx, t, ap, apa) and (if instanceofCcCall(outercc) then cc = true else cc = false) and if ap instanceof ApNil then emptyAp = true else emptyAp = false } @@ -1756,11 +1777,11 @@ module MakeImpl Lang> { pragma[inline] private predicate fwdFlowInCand( DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, - ParamNodeEx p, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, - boolean emptyAp, ApApprox apa, boolean cc, boolean allowsFlowThrough + ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, boolean emptyAp, ApApprox apa, + boolean cc, boolean allowsFlowThrough ) { exists(boolean allowsFieldFlow | - fwdFlowIntoArg(arg, state, outercc, summaryCtx, argT, argAp, t, ap, emptyAp, apa, cc) and + fwdFlowIntoArg(arg, state, outercc, summaryCtx, t, ap, emptyAp, apa, cc) and ( inner = viableImplCallContextReducedInlineLate(call, arg, outercc) or @@ -1779,12 +1800,12 @@ module MakeImpl Lang> { pragma[inline] private predicate fwdFlowInCandTypeFlowDisabled( DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, - ParamNodeEx p, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, - ApApprox apa, boolean cc, boolean allowsFlowThrough + ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, boolean cc, + boolean allowsFlowThrough ) { not enableTypeFlow() and - fwdFlowInCand(call, arg, state, outercc, inner, p, summaryCtx, argT, argAp, t, ap, _, - apa, cc, allowsFlowThrough) + fwdFlowInCand(call, arg, state, outercc, inner, p, summaryCtx, t, ap, _, apa, cc, + allowsFlowThrough) } pragma[nomagic] @@ -1793,7 +1814,7 @@ module MakeImpl Lang> { boolean emptyAp, ApApprox apa, boolean cc, boolean allowsFlowThrough ) { enableTypeFlow() and - fwdFlowInCand(call, arg, _, outercc, inner, p, _, _, _, _, _, emptyAp, apa, cc, + fwdFlowInCand(call, arg, _, outercc, inner, p, _, _, _, emptyAp, apa, cc, allowsFlowThrough) } @@ -1820,17 +1841,17 @@ module MakeImpl Lang> { pragma[inline] predicate fwdFlowIn( DataFlowCall call, ArgNodeEx arg, DataFlowCallable inner, ParamNodeEx p, - FlowState state, Cc outercc, CcCall innercc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, ApApprox apa, boolean cc, boolean allowsFlowThrough + FlowState state, Cc outercc, CcCall innercc, SummaryCtx summaryCtx, Typ t, Ap ap, + ApApprox apa, boolean cc, boolean allowsFlowThrough ) { // type flow disabled: linear recursion - fwdFlowInCandTypeFlowDisabled(call, arg, state, outercc, inner, p, summaryCtx, argT, - argAp, t, ap, apa, cc, allowsFlowThrough) and + fwdFlowInCandTypeFlowDisabled(call, arg, state, outercc, inner, p, summaryCtx, t, ap, + apa, cc, allowsFlowThrough) and fwdFlowInValidEdgeTypeFlowDisabled(call, inner, innercc, pragma[only_bind_into](cc)) or // type flow enabled: non-linear recursion exists(boolean emptyAp | - fwdFlowIntoArg(arg, state, outercc, summaryCtx, argT, argAp, t, ap, emptyAp, apa, cc) and + fwdFlowIntoArg(arg, state, outercc, summaryCtx, t, ap, emptyAp, apa, cc) and fwdFlowInValidEdgeTypeFlowEnabled(call, arg, outercc, inner, p, innercc, emptyAp, apa, cc, allowsFlowThrough) ) @@ -1845,8 +1866,8 @@ module MakeImpl Lang> { boolean allowsFlowThrough ) { exists(boolean allowsFlowThrough0 | - FwdFlowIn::fwdFlowIn(_, _, _, p, state, _, innercc, _, _, _, t, - ap, apa, _, allowsFlowThrough0) and + FwdFlowIn::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, + apa, _, allowsFlowThrough0) and if PrevStage::parameterMayFlowThrough(p, apa) then allowsFlowThrough = allowsFlowThrough0 else allowsFlowThrough = false @@ -1891,12 +1912,12 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowIntoRet( - RetNodeEx ret, FlowState state, CcNoCall cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap, ApApprox apa + RetNodeEx ret, FlowState state, CcNoCall cc, SummaryCtx summaryCtx, Typ t, Ap ap, + ApApprox apa ) { instanceofCcNoCall(cc) and not outBarrier(ret, state) and - fwdFlow(ret, state, cc, summaryCtx, argT, argAp, t, ap, apa) + fwdFlow(ret, state, cc, summaryCtx, t, ap, apa) } pragma[nomagic] @@ -1904,7 +1925,7 @@ module MakeImpl Lang> { DataFlowCall call, RetNodeEx ret, CcNoCall innercc, DataFlowCallable inner, NodeEx out, ApApprox apa, boolean allowsFieldFlow ) { - fwdFlowIntoRet(ret, _, innercc, _, _, _, _, _, apa) and + fwdFlowIntoRet(ret, _, innercc, _, _, _, apa) and inner = ret.getEnclosingCallable() and ( call = viableImplCallContextReducedReverseInlineLate(inner, innercc) and @@ -1928,10 +1949,10 @@ module MakeImpl Lang> { pragma[inline] private predicate fwdFlowOut( DataFlowCall call, DataFlowCallable inner, NodeEx out, FlowState state, CcNoCall outercc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa + SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa ) { exists(RetNodeEx ret, CcNoCall innercc, boolean allowsFieldFlow | - fwdFlowIntoRet(ret, state, innercc, summaryCtx, argT, argAp, t, ap, apa) and + fwdFlowIntoRet(ret, state, innercc, summaryCtx, t, ap, apa) and fwdFlowOutValidEdge(call, ret, innercc, inner, out, outercc, apa, allowsFieldFlow) and not inBarrier(out, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() @@ -1950,14 +1971,14 @@ module MakeImpl Lang> { DataFlowCall call, DataFlowCallable c, ParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, boolean cc ) { - FwdFlowIn::fwdFlowIn(call, _, c, p, state, _, innercc, _, _, _, - t, ap, _, cc, _) + FwdFlowIn::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, + _, cc, _) } pragma[nomagic] private predicate fwdFlow1Param(ParamNodeEx p, FlowState state, CcCall cc, Typ t0, Ap ap) { instanceofCcCall(cc) and - fwdFlow1(p, state, cc, _, _, _, t0, _, ap, _) + fwdFlow1(p, state, cc, _, t0, _, ap, _) } pragma[nomagic] @@ -1972,13 +1993,13 @@ module MakeImpl Lang> { private predicate dataFlowTakenCallEdgeOut0( DataFlowCall call, DataFlowCallable c, NodeEx node, FlowState state, Cc cc, Typ t, Ap ap ) { - fwdFlowOut(call, c, node, state, cc, _, _, _, t, ap, _) + fwdFlowOut(call, c, node, state, cc, _, t, ap, _) } pragma[nomagic] private predicate fwdFlow1Out(NodeEx node, FlowState state, Cc cc, Typ t0, Ap ap) { exists(ApApprox apa | - fwdFlow1(node, state, cc, _, _, _, t0, _, ap, apa) and + fwdFlow1(node, state, cc, _, t0, _, ap, apa) and PrevStage::callEdgeReturn(_, _, _, _, node, _, apa) ) } @@ -2019,43 +2040,39 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowRetFromArg( - RetNodeEx ret, FlowState state, CcCall ccc, ParamNodeEx summaryCtx, Typ argT, Ap argAp, - ApApprox argApa, Typ t, Ap ap, ApApprox apa + RetNodeEx ret, FlowState state, CcCall ccc, SummaryCtxSome summaryCtx, ApApprox argApa, + Typ t, Ap ap, ApApprox apa ) { - exists(ReturnKindExt kind | + exists(ReturnKindExt kind, ParamNodeEx p, Ap argAp | instanceofCcCall(ccc) and - fwdFlow(pragma[only_bind_into](ret), state, ccc, - TParamNodeSome(pragma[only_bind_into](summaryCtx.asNode())), TypOption::some(argT), - pragma[only_bind_into](apSome(argAp)), t, ap, pragma[only_bind_into](apa)) and + fwdFlow(pragma[only_bind_into](ret), state, ccc, summaryCtx, t, ap, + pragma[only_bind_into](apa)) and + summaryCtx = + TSummaryCtxSome(pragma[only_bind_into](p), _, pragma[only_bind_into](argAp)) and not outBarrier(ret, state) and kind = ret.getKind() and - parameterFlowThroughAllowed(summaryCtx, kind) and + parameterFlowThroughAllowed(p, kind) and argApa = getApprox(argAp) and - PrevStage::returnMayFlowThrough(ret, argApa, apa, kind) + PrevStage::returnMayFlowThrough(ret, pragma[only_bind_into](argApa), apa, kind) ) } pragma[inline] private predicate fwdFlowThrough0( DataFlowCall call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa, - RetNodeEx ret, ParamNodeEx innerSummaryCtx, Typ innerArgT, Ap innerArgAp, - ApApprox innerArgApa + SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, RetNodeEx ret, + SummaryCtxSome innerSummaryCtx, ApApprox innerArgApa ) { - fwdFlowRetFromArg(ret, state, ccc, innerSummaryCtx, innerArgT, innerArgAp, innerArgApa, t, - ap, apa) and - fwdFlowIsEntered(call, arg, cc, ccc, summaryCtx, argT, argAp, innerSummaryCtx, innerArgT, - innerArgAp) + fwdFlowRetFromArg(ret, state, ccc, innerSummaryCtx, innerArgApa, t, ap, apa) and + fwdFlowIsEntered(call, arg, cc, ccc, summaryCtx, innerSummaryCtx) } pragma[nomagic] private predicate fwdFlowThrough( - DataFlowCall call, Cc cc, FlowState state, CcCall ccc, ParamNodeOption summaryCtx, - TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa, RetNodeEx ret, - ApApprox innerArgApa + DataFlowCall call, Cc cc, FlowState state, CcCall ccc, SummaryCtx summaryCtx, Typ t, + Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa ) { - fwdFlowThrough0(call, _, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, _, _, - _, innerArgApa) + fwdFlowThrough0(call, _, cc, state, ccc, summaryCtx, t, ap, apa, ret, _, innerArgApa) } private module FwdFlowThroughRestriction implements FwdFlowInInputSig { @@ -2064,22 +2081,33 @@ module MakeImpl Lang> { predicate parameterRestriction = PrevStage::parameterMayFlowThrough/2; } + pragma[nomagic] + private predicate fwdFlowIsEntered0( + DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, + ParamNodeEx p, Typ t, Ap ap + ) { + FwdFlowIn::fwdFlowIn(call, arg, _, p, _, cc, innerCc, + summaryCtx, t, ap, _, _, true) + } + /** * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` * and data might flow through the target callable and back out at `call`. */ pragma[nomagic] private predicate fwdFlowIsEntered( - DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, ParamNodeOption summaryCtx, - TypOption argT, ApOption argAp, ParamNodeEx p, Typ t, Ap ap + DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, + SummaryCtxSome innerSummaryCtx ) { - FwdFlowIn::fwdFlowIn(call, arg, _, p, _, cc, innerCc, - summaryCtx, argT, argAp, t, ap, _, _, true) + exists(ParamNodeEx p, Typ t, Ap ap | + fwdFlowIsEntered0(call, arg, cc, innerCc, summaryCtx, p, t, ap) and + innerSummaryCtx = TSummaryCtxSome(p, t, ap) + ) } pragma[nomagic] private predicate storeStepFwd(NodeEx node1, Typ t1, Ap ap1, Content c, NodeEx node2, Ap ap2) { - fwdFlowStore(node1, t1, ap1, c, _, node2, _, _, _, _, _) and + fwdFlowStore(node1, t1, ap1, c, _, node2, _, _, _) and ap2 = apCons(c, t1, ap1) and readStepFwd(_, ap2, c, _, _) } @@ -2087,7 +2115,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate readStepFwd(NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2) { exists(Typ t1 | - fwdFlowRead(t1, ap1, c, n1, n2, _, _, _, _, _) and + fwdFlowRead(t1, ap1, c, n1, n2, _, _, _) and fwdFlowConsCand(t1, ap1, c, _, ap2) ) } @@ -2095,10 +2123,9 @@ module MakeImpl Lang> { pragma[nomagic] private predicate returnFlowsThrough0( DataFlowCall call, FlowState state, CcCall ccc, Ap ap, ApApprox apa, RetNodeEx ret, - ParamNodeEx innerSummaryCtx, Typ innerArgT, Ap innerArgAp, ApApprox innerArgApa + SummaryCtxSome innerSummaryCtx, ApApprox innerArgApa ) { - fwdFlowThrough0(call, _, _, state, ccc, _, _, _, _, ap, apa, ret, innerSummaryCtx, - innerArgT, innerArgAp, innerArgApa) + fwdFlowThrough0(call, _, _, state, ccc, _, _, ap, apa, ret, innerSummaryCtx, innerArgApa) } pragma[nomagic] @@ -2107,7 +2134,8 @@ module MakeImpl Lang> { Ap argAp, ApApprox argApa, Ap ap ) { exists(DataFlowCall call, ApApprox apa, boolean allowsFieldFlow | - returnFlowsThrough0(call, state, ccc, ap, apa, ret, p, argT, argAp, argApa) and + returnFlowsThrough0(call, state, ccc, ap, apa, ret, TSummaryCtxSome(p, argT, argAp), + argApa) and flowThroughOutOfCall(call, ccc, ret, _, allowsFieldFlow, argApa, apa) and pos = ret.getReturnPosition() and if allowsFieldFlow = false then ap instanceof ApNil else any() @@ -2122,7 +2150,7 @@ module MakeImpl Lang> { returnFlowsThrough(_, _, _, _, pragma[only_bind_into](p), pragma[only_bind_into](argT), pragma[only_bind_into](argAp), pragma[only_bind_into](argApa), ap) and flowIntoCallApaTaken(call, _, pragma[only_bind_into](arg), p, allowsFieldFlow, argApa) and - fwdFlow(arg, _, _, _, _, _, pragma[only_bind_into](argT), pragma[only_bind_into](argAp), + fwdFlow(arg, _, _, _, pragma[only_bind_into](argT), pragma[only_bind_into](argAp), pragma[only_bind_into](argApa)) and if allowsFieldFlow = false then argAp instanceof ApNil else any() ) @@ -2134,7 +2162,7 @@ module MakeImpl Lang> { ) { exists(ApApprox apa, boolean allowsFieldFlow | flowIntoCallApaTaken(call, c, arg, p, allowsFieldFlow, apa) and - fwdFlow(arg, _, _, _, _, _, _, ap, apa) and + fwdFlow(arg, _, _, _, _, ap, apa) and if allowsFieldFlow = false then ap instanceof ApNil else any() ) } @@ -2146,7 +2174,7 @@ module MakeImpl Lang> { ) { exists(ApApprox apa, boolean allowsFieldFlow | PrevStage::callEdgeReturn(call, c, ret, _, out, allowsFieldFlow, apa) and - fwdFlow(ret, _, _, _, _, _, _, ap, apa) and + fwdFlow(ret, _, _, _, _, ap, apa) and pos = ret.getReturnPosition() and if allowsFieldFlow = false then ap instanceof ApNil else any() | @@ -2169,14 +2197,14 @@ module MakeImpl Lang> { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap, _) + fwdFlow(node, state, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap, _) and + fwdFlow(node, state, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -2304,7 +2332,7 @@ module MakeImpl Lang> { predicate dataFlowNonCallEntry(DataFlowCallable c, boolean cc) { exists(NodeEx node, FlowState state, ApNil nil | - fwdFlow(node, state, _, _, _, _, _, nil, _) and + fwdFlow(node, state, _, _, _, nil, _) and sinkNode(node, state) and (if hasSinkCallCtx() then cc = true else cc = false) and c = node.getEnclosingCallable() @@ -2463,6 +2491,27 @@ module MakeImpl Lang> { ) } + pragma[nomagic] + private predicate nodeMayUseSummary0(NodeEx n, ParamNodeEx p, FlowState state, Ap ap) { + exists(Ap ap0 | + parameterMayFlowThrough(p, _) and + revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, ap0) and + fwdFlow(n, state, any(CcCall ccc), TSummaryCtxSome(p, _, ap), _, ap0, _) + ) + } + + /** + * Holds if `ap` is recorded as the summary context for flow reaching `node` + * and remains relevant for the following pruning stage. + */ + pragma[nomagic] + additional predicate nodeMayUseSummary(NodeEx n, FlowState state, Ap ap) { + exists(ParamNodeEx p | + parameterMayFlowThrough(p, ap) and + nodeMayUseSummary0(n, p, state, ap) + ) + } + pragma[nomagic] predicate returnMayFlowThrough(RetNodeEx ret, Ap argAp, Ap ap, ReturnKindExt kind) { exists(ParamNodeEx p, ReturnPosition pos | @@ -2539,11 +2588,8 @@ module MakeImpl Lang> { */ additional module Graph { private newtype TPathNode = - TPathNodeMid( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap - ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) and + TPathNodeMid(NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, Ap ap) { + fwdFlow(node, state, cc, summaryCtx, t, ap, _) and revFlow(node, state, _, _, ap) } or TPathNodeSink(NodeEx node, FlowState state) { @@ -2651,13 +2697,11 @@ module MakeImpl Lang> { NodeEx node; FlowState state; Cc cc; - ParamNodeOption summaryCtx; - TypOption argT; - ApOption argAp; + SummaryCtx summaryCtx; Typ t; Ap ap; - PathNodeMid() { this = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) } + PathNodeMid() { this = TPathNodeMid(node, state, cc, summaryCtx, t, ap) } override NodeEx getNodeEx() { result = node } @@ -2720,13 +2764,10 @@ module MakeImpl Lang> { private string ppCtx() { result = " <" + cc + ">" } private string ppSummaryCtx() { - summaryCtx instanceof TParamNodeNone and result = "" + summaryCtx instanceof SummaryCtxNone and result = "" or - exists(ParamNode p, Ap argAp0 | - summaryCtx = TParamNodeSome(p) and argAp = apSome(argAp0) - | - result = " <" + p + " : " + argT + " " + argAp0 + ">" - ) + summaryCtx instanceof SummaryCtxSome and + result = " <" + summaryCtx + ">" } override string toString() { result = node.toString() + this.ppType() + this.ppAp() } @@ -2743,7 +2784,7 @@ module MakeImpl Lang> { override predicate isSource() { sourceNode(node, state) and (if hasSourceCallCtx() then cc = ccSomeCall() else cc = ccNone()) and - summaryCtx = TParamNodeNone() and + summaryCtx = TSummaryCtxNone() and t = getNodeTyp(node) and ap instanceof ApNil } @@ -2762,7 +2803,7 @@ module MakeImpl Lang> { // which means that the summary context being empty holds if and // only if we are in the call context of the source. if Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext - then summaryCtx = TParamNodeNone() + then summaryCtx = TSummaryCtxNone() else if Config::getAFeature() instanceof FeatureHasSinkCallContext then instanceofCcNoCall(cc) @@ -2804,12 +2845,11 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInStep( ArgNodeEx arg, ParamNodeEx p, FlowState state, Cc outercc, CcCall innercc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, - boolean allowsFlowThrough + SummaryCtx summaryCtx, Typ t, Ap ap, boolean allowsFlowThrough ) { exists(ApApprox apa, boolean allowsFlowThrough0 | FwdFlowIn::fwdFlowIn(_, arg, _, p, state, outercc, innercc, - summaryCtx, argT, argAp, t, ap, apa, _, allowsFlowThrough0) and + summaryCtx, t, ap, apa, _, allowsFlowThrough0) and if PrevStage::parameterMayFlowThrough(p, apa) then allowsFlowThrough = allowsFlowThrough0 else allowsFlowThrough = false @@ -2819,65 +2859,61 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThroughStep0( DataFlowCall call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, - ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa, - RetNodeEx ret, ParamNodeEx innerSummaryCtx, Typ innerArgT, Ap innerArgAp, - ApApprox innerArgApa + SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, RetNodeEx ret, + SummaryCtxSome innerSummaryCtx, ApApprox innerArgApa ) { - fwdFlowThrough0(call, arg, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, ret, - innerSummaryCtx, innerArgT, innerArgAp, innerArgApa) + fwdFlowThrough0(call, arg, cc, state, ccc, summaryCtx, t, ap, apa, ret, innerSummaryCtx, + innerArgApa) } - bindingset[node, state, cc, summaryCtx, argT, argAp, t, ap] + bindingset[node, state, cc, summaryCtx, t, ap] pragma[inline_late] private PathNodeImpl mkPathNode( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, Ap ap ) { - result = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) + result = TPathNodeMid(node, state, cc, summaryCtx, t, ap) } private PathNodeImpl typeStrengthenToPathNode( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t0, Ap ap ) { exists(Typ t | - fwdFlow1(node, state, cc, summaryCtx, argT, argAp, t0, t, ap, _) and - result = TPathNodeMid(node, state, cc, summaryCtx, argT, argAp, t, ap) + fwdFlow1(node, state, cc, summaryCtx, t0, t, ap, _) and + result = TPathNodeMid(node, state, cc, summaryCtx, t, ap) ) } pragma[nomagic] private predicate fwdFlowThroughStep1( PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, DataFlowCall call, Cc cc, - FlowState state, CcCall ccc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, - Typ t, Ap ap, ApApprox apa, RetNodeEx ret, ApApprox innerArgApa + FlowState state, CcCall ccc, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, + RetNodeEx ret, ApApprox innerArgApa ) { - exists(FlowState state0, ArgNodeEx arg, ParamNodeEx p, Typ innerArgT, Ap innerArgAp | - fwdFlowThroughStep0(call, arg, cc, state, ccc, summaryCtx, argT, argAp, t, ap, apa, - ret, p, innerArgT, innerArgAp, innerArgApa) and + exists( + FlowState state0, ArgNodeEx arg, SummaryCtxSome innerSummaryCtx, ParamNodeEx p, + Typ innerArgT, Ap innerArgAp + | + fwdFlowThroughStep0(call, arg, cc, state, ccc, summaryCtx, t, ap, apa, ret, + innerSummaryCtx, innerArgApa) and + innerSummaryCtx = TSummaryCtxSome(p, innerArgT, innerArgAp) and revFlow(arg, state0, _, _, _) and - pn1 = mkPathNode(arg, state0, cc, summaryCtx, argT, argAp, innerArgT, innerArgAp) and - pn2 = - typeStrengthenToPathNode(p, state0, ccc, TParamNodeSome(p.asNode()), - TypOption::some(innerArgT), apSome(innerArgAp), innerArgT, innerArgAp) and - pn3 = - mkPathNode(ret, state, ccc, TParamNodeSome(p.asNode()), TypOption::some(innerArgT), - apSome(innerArgAp), t, ap) + pn1 = mkPathNode(arg, state0, cc, summaryCtx, innerArgT, innerArgAp) and + pn2 = typeStrengthenToPathNode(p, state0, ccc, innerSummaryCtx, innerArgT, innerArgAp) and + pn3 = mkPathNode(ret, state, ccc, innerSummaryCtx, t, ap) ) } pragma[nomagic] private predicate fwdFlowThroughStep2( PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, NodeEx node, Cc cc, - FlowState state, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, - Ap ap + FlowState state, SummaryCtx summaryCtx, Typ t, Ap ap ) { exists( DataFlowCall call, CcCall ccc, RetNodeEx ret, boolean allowsFieldFlow, ApApprox innerArgApa, ApApprox apa | - fwdFlowThroughStep1(pn1, pn2, pn3, call, cc, state, ccc, summaryCtx, argT, argAp, t, - ap, apa, ret, innerArgApa) and + fwdFlowThroughStep1(pn1, pn2, pn3, call, cc, state, ccc, summaryCtx, t, ap, apa, ret, + innerArgApa) and flowThroughOutOfCall(call, ccc, ret, node, allowsFieldFlow, innerArgApa, apa) and not inBarrier(node, state) and if allowsFieldFlow = false then ap instanceof ApNil else any() @@ -2885,11 +2921,11 @@ module MakeImpl Lang> { } private predicate localStep( - PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, - TypOption argT, ApOption argAp, Typ t, Ap ap, string label, boolean isStoreStep + PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, + Ap ap, string label, boolean isStoreStep ) { exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | - pn1 = TPathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and + pn1 = TPathNodeMid(mid, state0, cc, summaryCtx, t0, ap) and localCc = getLocalCc(cc) and isStoreStep = false | @@ -2902,8 +2938,8 @@ module MakeImpl Lang> { or // store exists(NodeEx mid, Content c, Typ t0, Ap ap0 | - pn1 = TPathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and - fwdFlowStore(mid, t0, ap0, c, t, node, state, cc, summaryCtx, argT, argAp) and + pn1 = TPathNodeMid(mid, state, cc, summaryCtx, t0, ap0) and + fwdFlowStore(mid, t0, ap0, c, t, node, state, cc, summaryCtx) and ap = apCons(c, t0, ap0) and label = "" and isStoreStep = true @@ -2911,8 +2947,8 @@ module MakeImpl Lang> { or // read exists(NodeEx mid, Typ t0, Ap ap0, Content c | - pn1 = TPathNodeMid(mid, state, cc, summaryCtx, argT, argAp, t0, ap0) and - fwdFlowRead(t0, ap0, c, mid, node, state, cc, summaryCtx, argT, argAp) and + pn1 = TPathNodeMid(mid, state, cc, summaryCtx, t0, ap0) and + fwdFlowRead(t0, ap0, c, mid, node, state, cc, summaryCtx) and fwdFlowConsCand(t0, ap0, c, t, ap) and label = "" and isStoreStep = false @@ -2921,11 +2957,11 @@ module MakeImpl Lang> { private predicate localStep(PathNodeImpl pn1, PathNodeImpl pn2, string label) { exists( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap, boolean isStoreStep + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t0, Ap ap, + boolean isStoreStep | - localStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label, isStoreStep) and - pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + localStep(pn1, node, state, cc, summaryCtx, t0, ap, label, isStoreStep) and + pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, t0, ap) and stepFilter(node, ap, isStoreStep) ) or @@ -2952,16 +2988,14 @@ module MakeImpl Lang> { } private predicate nonLocalStep( - PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, - TypOption argT, ApOption argAp, Typ t, Ap ap, string label + PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, + Ap ap, string label ) { // jump exists(NodeEx mid, FlowState state0, Typ t0 | - pn1 = TPathNodeMid(mid, state0, _, _, _, _, t0, ap) and + pn1 = TPathNodeMid(mid, state0, _, _, t0, ap) and cc = ccNone() and - summaryCtx = TParamNodeNone() and - argT instanceof TypOption::None and - argAp = apNone() + summaryCtx = TSummaryCtxNone() | jumpStepEx(mid, node) and state = state0 and @@ -2985,29 +3019,20 @@ module MakeImpl Lang> { or // flow into a callable exists( - ArgNodeEx arg, boolean allowsFlowThrough, Cc outercc, ParamNodeOption outerSummaryCtx, - TypOption outerArgT, ApOption outerArgAp + ArgNodeEx arg, boolean allowsFlowThrough, Cc outercc, SummaryCtx outerSummaryCtx | - pn1 = TPathNodeMid(arg, state, outercc, outerSummaryCtx, outerArgT, outerArgAp, t, ap) and - fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, outerArgT, outerArgAp, - t, ap, allowsFlowThrough) and + pn1 = TPathNodeMid(arg, state, outercc, outerSummaryCtx, t, ap) and + fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, t, ap, allowsFlowThrough) and label = "" and if allowsFlowThrough = true - then ( - summaryCtx = TParamNodeSome(node.asNode()) and - argT = TypOption::some(t) and - argAp = apSome(ap) - ) else ( - summaryCtx = TParamNodeNone() and - argT instanceof TypOption::None and - argAp = apNone() - ) + then summaryCtx = TSummaryCtxSome(node, t, ap) + else summaryCtx = TSummaryCtxNone() ) or // flow out of a callable exists(RetNodeEx ret, CcNoCall innercc, boolean allowsFieldFlow, ApApprox apa | - pn1 = TPathNodeMid(ret, state, innercc, summaryCtx, argT, argAp, t, ap) and - fwdFlowIntoRet(ret, state, innercc, summaryCtx, argT, argAp, t, ap, apa) and + pn1 = TPathNodeMid(ret, state, innercc, summaryCtx, t, ap) and + fwdFlowIntoRet(ret, state, innercc, summaryCtx, t, ap, apa) and fwdFlowOutValidEdge(_, ret, innercc, _, node, cc, apa, allowsFieldFlow) and not inBarrier(node, state) and label = "" and @@ -3016,12 +3041,9 @@ module MakeImpl Lang> { } private predicate nonLocalStep(PathNodeImpl pn1, PathNodeImpl pn2, string label) { - exists( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap - | - nonLocalStep(pn1, node, state, cc, summaryCtx, argT, argAp, t0, ap, label) and - pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + exists(NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t0, Ap ap | + nonLocalStep(pn1, node, state, cc, summaryCtx, t0, ap, label) and + pn2 = typeStrengthenToPathNode(node, state, cc, summaryCtx, t0, ap) and stepFilter(node, ap, false) ) } @@ -3035,11 +3057,11 @@ module MakeImpl Lang> { PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out ) { exists( - NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t0, Ap ap, PathNodeImpl out0 + NodeEx node, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t0, Ap ap, + PathNodeImpl out0 | - fwdFlowThroughStep2(arg, par, ret, node, cc, state, summaryCtx, argT, argAp, t0, ap) and - out0 = typeStrengthenToPathNode(node, state, cc, summaryCtx, argT, argAp, t0, ap) and + fwdFlowThroughStep2(arg, par, ret, node, cc, state, summaryCtx, t0, ap) and + out0 = typeStrengthenToPathNode(node, state, cc, summaryCtx, t0, ap) and stepFilter(node, ap, false) | out = out0 or out = out0.(PathNodeMid).projectToSink(_) @@ -3298,14 +3320,13 @@ module MakeImpl Lang> { int tfnodes, int tftuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _)) and tuples = - count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | - fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _) + count(NodeEx n, FlowState state, Cc cc, SummaryCtx summaryCtx, Typ t, Ap ap | + fwdFlow(n, state, cc, summaryCtx, t, ap, _) ) and calledges = count(DataFlowCall call, DataFlowCallable c | @@ -3879,18 +3900,6 @@ module MakeImpl Lang> { private module Stage4 = MkStage::Stage; - /** - * Holds if `argApf` is recorded as the summary context for flow reaching `node` - * and remains relevant for the following pruning stage. - */ - private predicate flowCandSummaryCtx(NodeEx node, FlowState state, AccessPathFront argApf) { - exists(AccessPathFront apf | - Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and - Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf, _) - ) - } - /** * Holds if a length 2 access path approximation with the head `c` is expected * to be expensive. @@ -3902,7 +3911,7 @@ module MakeImpl Lang> { strictcount(NodeEx n, FlowState state | Stage4::revFlow(n, state, any(AccessPathFrontHead apf | apf.getHead() = c)) or - flowCandSummaryCtx(n, state, any(AccessPathFrontHead apf | apf.getHead() = c)) + Stage4::nodeMayUseSummary(n, state, any(AccessPathFrontHead apf | apf.getHead() = c)) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and @@ -4147,26 +4156,6 @@ module MakeImpl Lang> { private module Stage5 = MkStage::Stage; - pragma[nomagic] - private predicate nodeMayUseSummary0( - NodeEx n, ParamNodeEx p, FlowState state, AccessPathApprox apa - ) { - exists(AccessPathApprox apa0 | - Stage5::parameterMayFlowThrough(p, _) and - Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and - Stage5::fwdFlow(n, state, any(Stage5Param::CcCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0, _) - ) - } - - pragma[nomagic] - private predicate nodeMayUseSummary(NodeEx n, FlowState state, AccessPathApprox apa) { - exists(ParamNodeEx p | - Stage5::parameterMayFlowThrough(p, apa) and - nodeMayUseSummary0(n, p, state, apa) - ) - } - pragma[nomagic] private predicate stage5ConsCand(Content c, DataFlowType t, AccessPathFront apf, int len) { Stage5::consCand(c, t, any(AccessPathApprox ap | ap.getFront() = apf and ap.len() = len - 1)) @@ -4186,7 +4175,7 @@ module MakeImpl Lang> { private int countNodesUsingAccessPath(AccessPathApprox apa) { result = strictcount(NodeEx n, FlowState state | - Stage5::revFlow(n, state, apa) or nodeMayUseSummary(n, state, apa) + Stage5::revFlow(n, state, apa) or Stage5::nodeMayUseSummary(n, state, apa) ) } diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 434fca9c995..8a82c7b570c 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1569,11 +1569,6 @@ module MakeImplCommon Lang> { TDataFlowCallNone() or TDataFlowCallSome(DataFlowCall call) - cached - newtype TParamNodeOption = - TParamNodeNone() or - TParamNodeSome(ParamNode p) - cached newtype TReturnCtx = TReturnCtxNone() or @@ -2234,19 +2229,6 @@ module MakeImplCommon Lang> { } } - /** An optional `ParamNode`. */ - class ParamNodeOption extends TParamNodeOption { - string toString() { - this = TParamNodeNone() and - result = "(none)" - or - exists(ParamNode p | - this = TParamNodeSome(p) and - result = p.toString() - ) - } - } - /** * A return context used to calculate flow summaries in reverse flow. * From d84e745ce9bc457ac7ed4afaa1403afbd277bcd4 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Fri, 23 Aug 2024 14:24:51 +0200 Subject: [PATCH 162/334] Make ripunzip installer accessible from outside this repo. * The relative path to misc doesn't work when running from another repo * The buildifier dependency is not available from other repos, therefore we can't pull in //misc/bazel without further refactoring. Therefore, inline the runfiles snippet here. --- misc/ripunzip/BUILD.bazel | 2 +- misc/ripunzip/install.sh | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/misc/ripunzip/BUILD.bazel b/misc/ripunzip/BUILD.bazel index ea21e6b1c94..83317a74e01 100644 --- a/misc/ripunzip/BUILD.bazel +++ b/misc/ripunzip/BUILD.bazel @@ -9,5 +9,5 @@ sh_binary( srcs = ["install.sh"], args = ["$(rlocationpath :ripunzip)"], data = [":ripunzip"], - deps = ["//misc/bazel:sh_runfiles"], + deps = ["@bazel_tools//tools/bash/runfiles"], ) diff --git a/misc/ripunzip/install.sh b/misc/ripunzip/install.sh index 2fb4d48ed6c..45b69f84f78 100755 --- a/misc/ripunzip/install.sh +++ b/misc/ripunzip/install.sh @@ -2,7 +2,16 @@ set -eu -. misc/bazel/runfiles.sh +# --- begin runfiles.bash initialization v3 --- +# Copy-pasted from the Bazel Bash runfiles library v3. +set -uo pipefail; set +e; f=bazel_tools/tools/bash/runfiles/runfiles.bash +source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \ + source "$0.runfiles/$f" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ + { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e +# --- end runfiles.bash initialization v3 --- dest="${2:-$HOME/.local/bin}" From 7d500cf58c9fb1dfb8594dca221d02a95dee99d7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 23 Aug 2024 15:08:10 +0100 Subject: [PATCH 163/334] Kotlin: Remove a redundant 'open' --- java/kotlin-extractor/src/main/kotlin/utils/Logger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 955a34feb1f..44b2a71af8e 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -279,7 +279,7 @@ open class LoggerBase(val logCounter: LogCounter) { } } -open class Logger(val loggerBase: LoggerBase, open val dtw: DiagnosticTrapWriter) { +open class Logger(val loggerBase: LoggerBase, val dtw: DiagnosticTrapWriter) { fun flush() { dtw.flush() loggerBase.flush() From 6a7d8b53014c1a501c4b6619692a5b0685027506 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 23 Aug 2024 15:41:21 +0100 Subject: [PATCH 164/334] Kotlin: Restrict some TrapWriter types to DiagnosticTrapWriter We never use the greater generality, so this makes it easier to see what's happening. --- .../kotlin-extractor/src/main/kotlin/utils/Logger.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 955a34feb1f..3fdf5d29b83 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -220,26 +220,26 @@ open class LoggerBase(val logCounter: LogCounter) { logStream.write(logMessage.toJsonLine()) } - fun trace(tw: TrapWriter, msg: String) { + fun trace(dtw: DiagnosticTrapWriter, msg: String) { if (verbosity >= 4) { val logMessage = LogMessage("TRACE", msg) - tw.writeComment(logMessage.toText()) + dtw.writeComment(logMessage.toText()) logStream.write(logMessage.toJsonLine()) } } - fun debug(tw: TrapWriter, msg: String) { + fun debug(dtw: DiagnosticTrapWriter, msg: String) { if (verbosity >= 4) { val logMessage = LogMessage("DEBUG", msg) - tw.writeComment(logMessage.toText()) + dtw.writeComment(logMessage.toText()) logStream.write(logMessage.toJsonLine()) } } - fun info(tw: TrapWriter, msg: String) { + fun info(dtw: DiagnosticTrapWriter, msg: String) { if (verbosity >= 3) { val logMessage = LogMessage("INFO", msg) - tw.writeComment(logMessage.toText()) + dtw.writeComment(logMessage.toText()) logStream.write(logMessage.toJsonLine()) } } From 3ac8108c4a4d2d3627b47cd2a0f685173413e539 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Fri, 23 Aug 2024 17:26:05 +0200 Subject: [PATCH 165/334] Address review. --- .github/workflows/buildifier.yml | 2 +- .pre-commit-config.yaml | 2 +- misc/bazel/BUILD.bazel | 10 ---------- misc/bazel/buildifier/BUILD.bazel | 9 +++++++++ misc/ripunzip/BUILD.bazel | 2 +- misc/ripunzip/install.sh | 11 +---------- 6 files changed, 13 insertions(+), 23 deletions(-) create mode 100644 misc/bazel/buildifier/BUILD.bazel diff --git a/.github/workflows/buildifier.yml b/.github/workflows/buildifier.yml index b5d1e2244d5..f3fbf97854c 100644 --- a/.github/workflows/buildifier.yml +++ b/.github/workflows/buildifier.yml @@ -24,5 +24,5 @@ jobs: extra_args: > buildifier --all-files 2>&1 || ( - echo -e "In order to format all bazel files, please run:\n bazel run //misc/bazel:buildifier"; exit 1 + echo -e "In order to format all bazel files, please run:\n bazel run //misc/bazel/buildifier"; exit 1 ) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 62ac0d95779..45935401bee 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,7 @@ repos: name: Format bazel files files: \.(bazel|bzl) language: system - entry: bazel run //misc/bazel:buildifier + entry: bazel run //misc/bazel/buildifier pass_filenames: false # DISABLED: can be enabled by copying this config and installing `pre-commit` with `--config` on the copy diff --git a/misc/bazel/BUILD.bazel b/misc/bazel/BUILD.bazel index d5c15743903..c3670b75c94 100644 --- a/misc/bazel/BUILD.bazel +++ b/misc/bazel/BUILD.bazel @@ -1,13 +1,3 @@ -load("@buildifier_prebuilt//:rules.bzl", "buildifier") - -buildifier( - name = "buildifier", - exclude_patterns = [ - "./.git/*", - ], - lint_mode = "fix", -) - sh_library( name = "sh_runfiles", srcs = ["runfiles.sh"], diff --git a/misc/bazel/buildifier/BUILD.bazel b/misc/bazel/buildifier/BUILD.bazel new file mode 100644 index 00000000000..3ccdcda5f12 --- /dev/null +++ b/misc/bazel/buildifier/BUILD.bazel @@ -0,0 +1,9 @@ +load("@buildifier_prebuilt//:rules.bzl", "buildifier") + +buildifier( + name = "buildifier", + exclude_patterns = [ + "./.git/*", + ], + lint_mode = "fix", +) diff --git a/misc/ripunzip/BUILD.bazel b/misc/ripunzip/BUILD.bazel index 83317a74e01..ea21e6b1c94 100644 --- a/misc/ripunzip/BUILD.bazel +++ b/misc/ripunzip/BUILD.bazel @@ -9,5 +9,5 @@ sh_binary( srcs = ["install.sh"], args = ["$(rlocationpath :ripunzip)"], data = [":ripunzip"], - deps = ["@bazel_tools//tools/bash/runfiles"], + deps = ["//misc/bazel:sh_runfiles"], ) diff --git a/misc/ripunzip/install.sh b/misc/ripunzip/install.sh index 45b69f84f78..d9ee6dda1cb 100755 --- a/misc/ripunzip/install.sh +++ b/misc/ripunzip/install.sh @@ -2,16 +2,7 @@ set -eu -# --- begin runfiles.bash initialization v3 --- -# Copy-pasted from the Bazel Bash runfiles library v3. -set -uo pipefail; set +e; f=bazel_tools/tools/bash/runfiles/runfiles.bash -source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ - source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \ - source "$0.runfiles/$f" 2>/dev/null || \ - source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ - source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ - { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e -# --- end runfiles.bash initialization v3 --- +source misc/bazel/runfiles.sh 2>/dev/null || source external/ql~/misc/bazel/runfiles.sh dest="${2:-$HOME/.local/bin}" From 686f47af9825b0193c2ddd7d0f7e815df4337c8c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:34:34 +0100 Subject: [PATCH 166/334] Revert "Fix typo in package path" This reverts commit 6f5a045437893c9dcf975903ddc20aec7fbdc25d. --- go/ql/lib/ext/github.com.sirupsen.logrus.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml b/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml index 54f802e0241..5779b5fa639 100644 --- a/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml +++ b/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml @@ -4,7 +4,7 @@ extensions: extensible: packageGrouping data: - ["logrus", "github.com/sirupsen/logrus"] - - ["logrus", "github.com/Sirupsen/logrus"] + - ["logrus", "ggithub.com/Sirupsen/logrus"] - addsTo: pack: codeql/go-all extensible: sinkModel From a6e3b913d0a55cd4da0b8c67b0da8749bc1e182e Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:39:24 +0100 Subject: [PATCH 167/334] Revert "Convert logging sinks to use MaD" This reverts commit fa472f5e18c17b06a0070e7f6d7c790c72991b78. --- go/ql/lib/ext/fmt.model.yml | 7 - ...github.com.beego.beego.core.logs.model.yml | 34 ----- ...ithub.com.beego.beego.core.utils.model.yml | 5 - ...ithub.com.beego.beego.server.web.model.yml | 12 -- .../github.com.davecgh.go-spew.spew.model.yml | 14 -- .../ext/github.com.elazarl.goproxy.model.yml | 6 - .../lib/ext/github.com.golang.glog.model.yml | 102 -------------- .../ext/github.com.sirupsen.logrus.model.yml | 131 ------------------ go/ql/lib/ext/go.uber.org.zap.model.yml | 37 ----- go/ql/lib/ext/log.model.yml | 24 ---- go/ql/lib/semmle/go/Concepts.qll | 13 -- go/ql/lib/semmle/go/frameworks/Beego.qll | 37 +++++ .../semmle/go/frameworks/ElazarlGoproxy.qll | 6 + go/ql/lib/semmle/go/frameworks/Glog.qll | 10 ++ go/ql/lib/semmle/go/frameworks/Logrus.qll | 6 + go/ql/lib/semmle/go/frameworks/Spew.qll | 10 ++ go/ql/lib/semmle/go/frameworks/Zap.qll | 12 ++ go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll | 7 + go/ql/lib/semmle/go/frameworks/stdlib/Log.qll | 10 ++ 19 files changed, 98 insertions(+), 385 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.beego.beego.core.logs.model.yml delete mode 100644 go/ql/lib/ext/github.com.davecgh.go-spew.spew.model.yml delete mode 100644 go/ql/lib/ext/github.com.golang.glog.model.yml delete mode 100644 go/ql/lib/ext/github.com.sirupsen.logrus.model.yml diff --git a/go/ql/lib/ext/fmt.model.yml b/go/ql/lib/ext/fmt.model.yml index ff975cf423c..5234b509933 100644 --- a/go/ql/lib/ext/fmt.model.yml +++ b/go/ql/lib/ext/fmt.model.yml @@ -1,11 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["fmt", "", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["fmt", "", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["fmt", "", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/ext/github.com.beego.beego.core.logs.model.yml b/go/ql/lib/ext/github.com.beego.beego.core.logs.model.yml deleted file mode 100644 index 3dfbbe89719..00000000000 --- a/go/ql/lib/ext/github.com.beego.beego.core.logs.model.yml +++ /dev/null @@ -1,34 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["beego-logs", "github.com/astaxie/beego/logs"] - - ["beego-logs", "github.com/beego/beego/logs"] - - ["beego-logs", "github.com/beego/beego/core/logs"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:beego-logs", "", False, "Alert", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Critical", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Debug", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Emergency", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Error", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Info", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Informational", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Notice", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Trace", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Warn", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "", False, "Warning", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Alert", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Critical", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Debug", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Emergency", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Error", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Info", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Informational", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Notice", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Trace", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Warn", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego-logs", "BeeLogger", False, "Warning", "", "", "Argument[0..1]", "log-injection", "manual"] diff --git a/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml b/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml index 63c05b92040..4eb0688e37e 100644 --- a/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml +++ b/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml @@ -6,11 +6,6 @@ extensions: - ["beego-utils", "github.com/astaxie/beego/utils"] - ["beego-utils", "github.com/beego/beego/utils"] - ["beego-utils", "github.com/beego/beego/core/utils"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:beego-utils", "", False, "Display", "", "", "Argument[0]", "log-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml b/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml index c55d620c2e4..8a11da7ad83 100644 --- a/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml +++ b/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml @@ -10,18 +10,6 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - # log-injection - - ["group:beego", "", False, "Alert", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Critical", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Debug", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Emergency", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Error", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Info", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Informational", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Notice", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Trace", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Warn", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:beego", "", False, "Warning", "", "", "Argument[0..1]", "log-injection", "manual"] # path-injection - ["group:beego", "", False, "Walk", "", "", "Argument[1]", "path-injection", "manual"] - ["group:beego", "Controller", False, "SaveToFile", "", "", "Argument[1]", "path-injection", "manual"] diff --git a/go/ql/lib/ext/github.com.davecgh.go-spew.spew.model.yml b/go/ql/lib/ext/github.com.davecgh.go-spew.spew.model.yml deleted file mode 100644 index 4b4996926e3..00000000000 --- a/go/ql/lib/ext/github.com.davecgh.go-spew.spew.model.yml +++ /dev/null @@ -1,14 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["github.com/davecgh/go-spew/spew", "", False, "Dump", "", "", "Argument[0]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Fdump", "", "", "Argument[1]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Fprint", "", "", "Argument[1]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Fprintf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Fprintln", "", "", "Argument[1]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["github.com/davecgh/go-spew/spew", "", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] diff --git a/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml b/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml index 01a61d2c3ac..20e4a26f1cd 100644 --- a/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml +++ b/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml @@ -1,10 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["github.com/elazarl/goproxy", "ProxyCtx", False, "Logf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["github.com/elazarl/goproxy", "ProxyCtx", False, "Warnf", "", "", "Argument[0..1]", "log-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/ext/github.com.golang.glog.model.yml b/go/ql/lib/ext/github.com.golang.glog.model.yml deleted file mode 100644 index dd36e6a7d8f..00000000000 --- a/go/ql/lib/ext/github.com.golang.glog.model.yml +++ /dev/null @@ -1,102 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["glog", "github.com/golang/glog"] - - ["glog", "gopkg.in/glog"] - - ["glog", "k8s.io/klog"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:glog", "", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "ErrorDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "", False, "Errorln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "Exit", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "ExitDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "Exitf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "", False, "Exitln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "FatalDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "InfoDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "", False, "Infoln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "Warning", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "", False, "WarningDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "", False, "Warningf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "", False, "Warningln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ErrorDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Errorln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Exit", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "ExitDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Exitf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Exitln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "FatalDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "InfoDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Infoln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Warning", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningContext", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningContextDepth", "", "", "Argument[2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningContextDepthf", "", "", "Argument[2..3]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningContextf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningDepth", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "WarningDepthf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Warningf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:glog", "Verbose", False, "Warningln", "", "", "Argument[0]", "log-injection", "manual"] diff --git a/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml b/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml deleted file mode 100644 index 5779b5fa639..00000000000 --- a/go/ql/lib/ext/github.com.sirupsen.logrus.model.yml +++ /dev/null @@ -1,131 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["logrus", "github.com/sirupsen/logrus"] - - ["logrus", "ggithub.com/Sirupsen/logrus"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:logrus", "", False, "Debug", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "DebugFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Debugf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Debugln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "ErrorFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Errorln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "FatalFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "InfoFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Infoln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "PanicFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Panicln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "PrintFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Trace", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "TraceFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Tracef", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Traceln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "WarnFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warnf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warnln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warning", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "WarningFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warningf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "Warningln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "WithError", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "WithField", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "", False, "WithFields", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "", False, "WithTime", "", "", "Argument[0]", "log-injection", "manual"] - - - ["group:logrus", "Entry", False, "Debug", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Debugf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Debugln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Errorln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Infoln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Log", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Logf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Logln", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Panicln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Trace", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Tracef", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Traceln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warnf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warnln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warning", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warningf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "Warningln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "WithError", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "WithField", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "WithFields", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Entry", False, "WithTime", "", "", "Argument[0]", "log-injection", "manual"] - - - ["group:logrus", "Logger", False, "Debug", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "DebugFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Debugf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Debugln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "ErrorFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Errorln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "FatalFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "InfoFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Infoln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Log", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "LogFn", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Logf", "", "", "Argument[1..2]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Logln", "", "", "Argument[1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "PanicFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Panicln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "PrintFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Trace", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "TraceFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Tracef", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Traceln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WarnFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warnf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warnln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warning", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WarningFn", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warningf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "Warningln", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WithError", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WithField", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WithFields", "", "", "Argument[0]", "log-injection", "manual"] - - ["group:logrus", "Logger", False, "WithTime", "", "", "Argument[0]", "log-injection", "manual"] diff --git a/go/ql/lib/ext/go.uber.org.zap.model.yml b/go/ql/lib/ext/go.uber.org.zap.model.yml index c4e43356f26..2ca7f7e8a80 100644 --- a/go/ql/lib/ext/go.uber.org.zap.model.yml +++ b/go/ql/lib/ext/go.uber.org.zap.model.yml @@ -1,41 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["go.uber.org/zap", "Logger", False, "DPanic", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Debug", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Error", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Fatal", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Info", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Named", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Panic", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "Warn", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "With", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "Logger", False, "WithOptions", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "DPanic", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "DPanicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "DPanicw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Debug", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Debugf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Debugw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Error", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Errorf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Errorw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Fatalw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Info", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Infof", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Infow", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Named", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Panicw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Warn", "", "", "Argument[0]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Warnf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "Warnw", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["go.uber.org/zap", "SugaredLogger", False, "With", "", "", "Argument[0]", "log-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/ext/log.model.yml b/go/ql/lib/ext/log.model.yml index 1ebce079a52..7f52a173307 100644 --- a/go/ql/lib/ext/log.model.yml +++ b/go/ql/lib/ext/log.model.yml @@ -1,28 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["log", "", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "", False, "Output", "", "", "Argument[1]", "log-injection", "manual"] - - ["log", "", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "", False, "Panicln", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Fatal", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Fatalf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "Logger", False, "Fatalln", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Output", "", "", "Argument[1]", "log-injection", "manual"] - - ["log", "Logger", False, "Panic", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Panicf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "Logger", False, "Panicln", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Print", "", "", "Argument[0]", "log-injection", "manual"] - - ["log", "Logger", False, "Printf", "", "", "Argument[0..1]", "log-injection", "manual"] - - ["log", "Logger", False, "Println", "", "", "Argument[0]", "log-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/semmle/go/Concepts.qll b/go/ql/lib/semmle/go/Concepts.qll index 8fd38a56e1c..c15d3683b40 100644 --- a/go/ql/lib/semmle/go/Concepts.qll +++ b/go/ql/lib/semmle/go/Concepts.qll @@ -373,19 +373,6 @@ module LoggerCall { } } -private class DefaultLoggerCall extends LoggerCall::Range, DataFlow::CallNode { - DataFlow::ArgumentNode messageArgument; - - DefaultLoggerCall() { - sinkNode(messageArgument, "log-injection") and - this = messageArgument.getCall() - } - - override DataFlow::Node getAMessageComponent() { - result = messageArgument.getACorrespondingSyntacticArgument() - } -} - /** * A function that encodes data into a binary or textual format. * diff --git a/go/ql/lib/semmle/go/frameworks/Beego.qll b/go/ql/lib/semmle/go/frameworks/Beego.qll index a9e296a1f97..9f6ee598003 100644 --- a/go/ql/lib/semmle/go/frameworks/Beego.qll +++ b/go/ql/lib/semmle/go/frameworks/Beego.qll @@ -33,6 +33,13 @@ module Beego { result = package(v2modulePath(), "server/web/context") } + /** Gets the path for the logs package of beego. */ + string logsPackagePath() { + result = package(v1modulePath(), "logs") + or + result = package(v2modulePath(), "core/logs") + } + /** Gets the path for the utils package of beego. */ string utilsPackagePath() { result = package(v1modulePath(), "utils") @@ -165,6 +172,36 @@ module Beego { override string getAContentType() { none() } } + private string getALogFunctionName() { + result = + [ + "Alert", "Critical", "Debug", "Emergency", "Error", "Info", "Informational", "Notice", + "Trace", "Warn", "Warning" + ] + } + + private class ToplevelBeegoLoggers extends LoggerCall::Range, DataFlow::CallNode { + ToplevelBeegoLoggers() { + this.getTarget().hasQualifiedName([packagePath(), logsPackagePath()], getALogFunctionName()) + } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + + private class BeegoLoggerMethods extends LoggerCall::Range, DataFlow::MethodCallNode { + BeegoLoggerMethods() { + this.getTarget().hasQualifiedName(logsPackagePath(), "BeeLogger", getALogFunctionName()) + } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + + private class UtilLoggers extends LoggerCall::Range, DataFlow::CallNode { + UtilLoggers() { this.getTarget().hasQualifiedName(utilsPackagePath(), "Display") } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + private class HtmlQuoteSanitizer extends SharedXss::Sanitizer { HtmlQuoteSanitizer() { exists(DataFlow::CallNode c | c.getTarget().hasQualifiedName(packagePath(), "Htmlquote") | diff --git a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll index b1bf4571216..4d10c8af312 100644 --- a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll +++ b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll @@ -100,4 +100,10 @@ module ElazarlGoproxy { override int getFormatStringIndex() { result = 0 } } + + private class ProxyLog extends LoggerCall::Range, DataFlow::MethodCallNode { + ProxyLog() { this.getTarget() instanceof ProxyLogFunction } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } } diff --git a/go/ql/lib/semmle/go/frameworks/Glog.qll b/go/ql/lib/semmle/go/frameworks/Glog.qll index 146b8a4f814..f9f5c9e3f11 100644 --- a/go/ql/lib/semmle/go/frameworks/Glog.qll +++ b/go/ql/lib/semmle/go/frameworks/Glog.qll @@ -40,4 +40,14 @@ module Glog { override int getFormatStringIndex() { result = super.getFirstPrintedArg() } } + + private class GlogCall extends LoggerCall::Range, DataFlow::CallNode { + GlogFunction callee; + + GlogCall() { this = callee.getACall() } + + override DataFlow::Node getAMessageComponent() { + result = this.getSyntacticArgument(any(int i | i >= callee.getFirstPrintedArg())) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/Logrus.qll b/go/ql/lib/semmle/go/frameworks/Logrus.qll index 83278a4cd9e..f7de9a75dae 100644 --- a/go/ql/lib/semmle/go/frameworks/Logrus.qll +++ b/go/ql/lib/semmle/go/frameworks/Logrus.qll @@ -28,6 +28,12 @@ module Logrus { } } + private class LogCall extends LoggerCall::Range, DataFlow::CallNode { + LogCall() { this = any(LogFunction f).getACall() } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + private class StringFormatters extends StringOps::Formatting::Range instanceof LogFunction { int argOffset; diff --git a/go/ql/lib/semmle/go/frameworks/Spew.qll b/go/ql/lib/semmle/go/frameworks/Spew.qll index f49a4aa4d89..b12bd0fed81 100644 --- a/go/ql/lib/semmle/go/frameworks/Spew.qll +++ b/go/ql/lib/semmle/go/frameworks/Spew.qll @@ -33,6 +33,16 @@ module Spew { override int getFormatStringIndex() { result = super.getFirstPrintedArg() } } + private class SpewCall extends LoggerCall::Range, DataFlow::CallNode { + SpewFunction target; + + SpewCall() { this = target.getACall() } + + override DataFlow::Node getAMessageComponent() { + result = this.getSyntacticArgument(any(int i | i >= target.getFirstPrintedArg())) + } + } + // These are expressed using TaintTracking::FunctionModel because varargs functions don't work with Models-as-Data sumamries yet. /** The `Sprint` function or one of its variants. */ class Sprinter extends TaintTracking::FunctionModel { diff --git a/go/ql/lib/semmle/go/frameworks/Zap.qll b/go/ql/lib/semmle/go/frameworks/Zap.qll index 0928d2b0595..359f9aba410 100644 --- a/go/ql/lib/semmle/go/frameworks/Zap.qll +++ b/go/ql/lib/semmle/go/frameworks/Zap.qll @@ -34,6 +34,18 @@ module Zap { override int getFormatStringIndex() { result = 0 } } + /** + * A call to a logger function in Zap. + * + * Functions which add data to be included the next time a direct logging + * function is called are included. + */ + private class ZapCall extends LoggerCall::Range, DataFlow::MethodCallNode { + ZapCall() { this = any(ZapFunction f).getACall() } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + // These are expressed using TaintTracking::FunctionModel because varargs functions don't work with Models-as-Data sumamries yet. /** The function `Fields` that creates an `Option` that can be added to the logger out of `Field`s. */ class FieldsFunction extends TaintTracking::FunctionModel { diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll index 8c4a5f27b3c..950b67483f0 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll @@ -41,6 +41,13 @@ module Fmt { Printer() { this.hasQualifiedName("fmt", ["Print", "Printf", "Println"]) } } + /** A call to `Print` or similar. */ + private class PrintCall extends LoggerCall::Range, DataFlow::CallNode { + PrintCall() { this.getTarget() instanceof Printer } + + override DataFlow::Node getAMessageComponent() { result = this.getASyntacticArgument() } + } + /** The `Fprint` function or one of its variants. */ private class Fprinter extends TaintTracking::FunctionModel { Fprinter() { diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll index ca74160bf0d..5b402fca1b7 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll @@ -32,6 +32,16 @@ module Log { override int getFormatStringIndex() { result = 0 } } + private class LogCall extends LoggerCall::Range, DataFlow::CallNode { + LogFunction target; + + LogCall() { this = target.getACall() } + + override DataFlow::Node getAMessageComponent() { + result = this.getSyntacticArgument(any(int i | i >= target.getFirstPrintedArg())) + } + } + /** A fatal log function, which calls `os.Exit`. */ private class FatalLogFunction extends Function { FatalLogFunction() { this.hasQualifiedName("log", ["Fatal", "Fatalf", "Fatalln"]) } From 437df5c2a5f9c93cb1e538401d94b02cae65b29a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:42:45 +0100 Subject: [PATCH 168/334] Revert "Convert gocb nosql-injection sinks to MaD" This reverts commit 2d2afb17ad6d8277a802dc93429b12899ab67047. --- .../ext/github.com.couchbase.gocb.model.yml | 57 +++++--------- ...o.mongodb.org.mongo-driver.mongo.model.yml | 2 +- go/ql/lib/semmle/go/frameworks/Couchbase.qll | 46 +++++++++-- go/ql/lib/semmle/go/frameworks/NoSQL.qll | 76 +++++++++++++++++++ 4 files changed, 138 insertions(+), 43 deletions(-) diff --git a/go/ql/lib/ext/github.com.couchbase.gocb.model.yml b/go/ql/lib/ext/github.com.couchbase.gocb.model.yml index d17b53dd6da..ff0a4c22c8d 100644 --- a/go/ql/lib/ext/github.com.couchbase.gocb.model.yml +++ b/go/ql/lib/ext/github.com.couchbase.gocb.model.yml @@ -3,43 +3,28 @@ extensions: pack: codeql/go-all extensible: packageGrouping data: - - ["gocb1", "fixed-version:github.com/couchbase/gocb"] - - ["gocb1", "fixed-version:gopkg.in/couchbase/gocb.v1"] - - ["gocb1", "fixed-version:github.com/couchbaselabs/gocb"] - - ["gocb2", "github.com/couchbase/gocb/v2"] - - ["gocb2", "gopkg.in/couchbase/gocb.v2"] - - ["gocb2", "github.com/couchbaselabs/gocb/v2"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:gocb1", "Bucket", True, "ExecuteN1qlQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb1", "Bucket", True, "ExecuteAnalyticsQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb1", "Cluster", True, "ExecuteN1qlQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb1", "Cluster", True, "ExecuteAnalyticsQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb2", "Cluster", True, "AnalyticsQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb2", "Cluster", True, "Query", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb2", "Scope", True, "AnalyticsQuery", "", "", "Argument[0]", "nosql-injection", "manual"] - - ["group:gocb2", "Scope", True, "Query", "", "", "Argument[0]", "nosql-injection", "manual"] + - ["gocb", "github.com/couchbase/gocb"] + - ["gocb", "gopkg.in/couchbase/gocb"] + - ["gocb", "github.com/couchbaselabs/gocb"] - addsTo: pack: codeql/go-all extensible: summaryModel data: - - ["group:gocb1", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["group:gocb1", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] diff --git a/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml b/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml index 6c2d4afdeae..ae07bd3a213 100644 --- a/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml +++ b/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml @@ -3,7 +3,6 @@ extensions: pack: codeql/go-all extensible: sinkModel data: - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Aggregate", "", "", "Argument[1]", "nosql-injection", "manual"] - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "CountDocuments", "", "", "Argument[1]", "nosql-injection", "manual"] - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "DeleteMany", "", "", "Argument[1]", "nosql-injection", "manual"] - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "DeleteOne", "", "", "Argument[1]", "nosql-injection", "manual"] @@ -17,3 +16,4 @@ extensions: - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "UpdateMany", "", "", "Argument[1]", "nosql-injection", "manual"] - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "UpdateOne", "", "", "Argument[1]", "nosql-injection", "manual"] - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Watch", "", "", "Argument[1]", "nosql-injection", "manual"] + - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Aggregate", "", "", "Argument[1]", "nosql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/Couchbase.qll b/go/ql/lib/semmle/go/frameworks/Couchbase.qll index b5bfbcb22a2..5eaa4d20c3a 100644 --- a/go/ql/lib/semmle/go/frameworks/Couchbase.qll +++ b/go/ql/lib/semmle/go/frameworks/Couchbase.qll @@ -5,23 +5,57 @@ import go /** - * DEPRECATED - * * Provides models of commonly used functions in the official Couchbase Go SDK library. */ -deprecated module Couchbase { +module Couchbase { /** - * DEPRECATED - * * Gets a package path for the official Couchbase Go SDK library. * * Note that v1 and v2 have different APIs, but the names are disjoint so there is no need to * distinguish between them. */ - deprecated string packagePath() { + string packagePath() { result = package([ "gopkg.in/couchbase/gocb", "github.com/couchbase/gocb", "github.com/couchbaselabs/gocb" ], "") } + + /** + * A query used in an API function acting on a `Bucket` or `Cluster` struct of v1 of + * the official Couchbase Go library, gocb. + */ + private class CouchbaseV1Query extends NoSql::Query::Range { + CouchbaseV1Query() { + // func (b *Bucket) ExecuteAnalyticsQuery(q *AnalyticsQuery, params interface{}) (AnalyticsResults, error) + // func (b *Bucket) ExecuteN1qlQuery(q *N1qlQuery, params interface{}) (QueryResults, error) + // func (c *Cluster) ExecuteAnalyticsQuery(q *AnalyticsQuery, params interface{}) (AnalyticsResults, error) + // func (c *Cluster) ExecuteN1qlQuery(q *N1qlQuery, params interface{}) (QueryResults, error) + exists(Method meth, string structName, string methodName | + structName in ["Bucket", "Cluster"] and + methodName in ["ExecuteN1qlQuery", "ExecuteAnalyticsQuery"] and + meth.hasQualifiedName(packagePath(), structName, methodName) and + this = meth.getACall().getArgument(0) + ) + } + } + + /** + * A query used in an API function acting on a `Bucket` or `Cluster` struct of v1 of + * the official Couchbase Go library, gocb. + */ + private class CouchbaseV2Query extends NoSql::Query::Range { + CouchbaseV2Query() { + // func (c *Cluster) AnalyticsQuery(statement string, opts *AnalyticsOptions) (*AnalyticsResult, error) + // func (c *Cluster) Query(statement string, opts *QueryOptions) (*QueryResult, error) + // func (s *Scope) AnalyticsQuery(statement string, opts *AnalyticsOptions) (*AnalyticsResult, error) + // func (s *Scope) Query(statement string, opts *QueryOptions) (*QueryResult, error) + exists(Method meth, string structName, string methodName | + structName in ["Cluster", "Scope"] and + methodName in ["AnalyticsQuery", "Query"] and + meth.hasQualifiedName(packagePath(), structName, methodName) and + this = meth.getACall().getArgument(0) + ) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/NoSQL.qll b/go/ql/lib/semmle/go/frameworks/NoSQL.qll index 36932149628..873b8230f1b 100644 --- a/go/ql/lib/semmle/go/frameworks/NoSQL.qll +++ b/go/ql/lib/semmle/go/frameworks/NoSQL.qll @@ -31,6 +31,82 @@ module NoSql { ) } } + // /** + // * Holds if method `name` of struct `Collection` from package + // * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo) + // * interprets parameter `n` as a query. + // */ + // private predicate mongoDbCollectionMethod(string name, int n) { + // // func (coll *Collection) CountDocuments(ctx context.Context, filter interface{}, + // // opts ...*options.CountOptions) (int64, error) + // name = "CountDocuments" and n = 1 + // or + // // func (coll *Collection) DeleteMany(ctx context.Context, filter interface{}, + // // opts ...*options.DeleteOptions) (*DeleteResult, error) + // name = "DeleteMany" and n = 1 + // or + // // func (coll *Collection) DeleteOne(ctx context.Context, filter interface{}, + // // opts ...*options.DeleteOptions) (*DeleteResult, error) + // name = "DeleteOne" and n = 1 + // or + // // func (coll *Collection) Distinct(ctx context.Context, fieldName string, filter interface{}, + // // ...) ([]interface{}, error) + // name = "Distinct" and n = 2 + // or + // // func (coll *Collection) Find(ctx context.Context, filter interface{}, + // // opts ...*options.FindOptions) (*Cursor, error) + // name = "Find" and n = 1 + // or + // // func (coll *Collection) FindOne(ctx context.Context, filter interface{}, + // // opts ...*options.FindOneOptions) *SingleResult + // name = "FindOne" and n = 1 + // or + // // func (coll *Collection) FindOneAndDelete(ctx context.Context, filter interface{}, ...) + // // *SingleResult + // name = "FindOneAndDelete" and n = 1 + // or + // // func (coll *Collection) FindOneAndReplace(ctx context.Context, filter interface{}, + // // replacement interface{}, ...) *SingleResult + // name = "FindOneAndReplace" and n = 1 + // or + // // func (coll *Collection) FindOneAndUpdate(ctx context.Context, filter interface{}, + // // update interface{}, ...) *SingleResult + // name = "FindOneAndUpdate" and n = 1 + // or + // // func (coll *Collection) ReplaceOne(ctx context.Context, filter interface{}, + // // replacement interface{}, ...) (*UpdateResult, error) + // name = "ReplaceOne" and n = 1 + // or + // // func (coll *Collection) UpdateMany(ctx context.Context, filter interface{}, + // // update interface{}, ...) (*UpdateResult, error) + // name = "UpdateMany" and n = 1 + // or + // // func (coll *Collection) UpdateOne(ctx context.Context, filter interface{}, + // // update interface{}, ...) (*UpdateResult, error) + // name = "UpdateOne" and n = 1 + // or + // // func (coll *Collection) Watch(ctx context.Context, pipeline interface{}, ...) + // // (*ChangeStream, error) + // name = "Watch" and n = 1 + // or + // // func (coll *Collection) Aggregate(ctx context.Context, pipeline interface{}, + // // opts ...*options.AggregateOptions) (*Cursor, error) + // name = "Aggregate" and n = 1 + // } + // /** + // * A query used in an API function acting on a `Collection` struct of package + // * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo). + // */ + // private class MongoDbCollectionQuery extends Range { + // MongoDbCollectionQuery() { + // exists(Method meth, string methodName, int n | + // mongoDbCollectionMethod(methodName, n) and + // meth.hasQualifiedName(package("go.mongodb.org/mongo-driver", "mongo"), "Collection", + // methodName) and + // this = meth.getACall().getArgument(n) + // ) + // } + // } } /** From c33568b6023e2fae75cb35b462e7000cedca738d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:42:49 +0100 Subject: [PATCH 169/334] Revert "Convert mongodb nosql-injection sinks to MaD" This reverts commit ec9d88b364b9f0ed8a1445386c08b0b4e1770843. --- ...o.mongodb.org.mongo-driver.mongo.model.yml | 19 --- go/ql/lib/semmle/go/frameworks/NoSQL.qll | 154 +++++++++--------- .../Security/CWE-089/SqlInjection.expected | 134 +++++++-------- 3 files changed, 137 insertions(+), 170 deletions(-) delete mode 100644 go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml diff --git a/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml b/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml deleted file mode 100644 index ae07bd3a213..00000000000 --- a/go/ql/lib/ext/go.mongodb.org.mongo-driver.mongo.model.yml +++ /dev/null @@ -1,19 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "CountDocuments", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "DeleteMany", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "DeleteOne", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Distinct", "", "", "Argument[2]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Find", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "FindOne", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "FindOneAndDelete", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "FindOneAndReplace", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "FindOneAndUpdate", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "ReplaceOne", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "UpdateMany", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "UpdateOne", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Watch", "", "", "Argument[1]", "nosql-injection", "manual"] - - ["go.mongodb.org/mongo-driver/mongo", "Collection", True, "Aggregate", "", "", "Argument[1]", "nosql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/NoSQL.qll b/go/ql/lib/semmle/go/frameworks/NoSQL.qll index 873b8230f1b..c2469fc02ac 100644 --- a/go/ql/lib/semmle/go/frameworks/NoSQL.qll +++ b/go/ql/lib/semmle/go/frameworks/NoSQL.qll @@ -31,82 +31,84 @@ module NoSql { ) } } - // /** - // * Holds if method `name` of struct `Collection` from package - // * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo) - // * interprets parameter `n` as a query. - // */ - // private predicate mongoDbCollectionMethod(string name, int n) { - // // func (coll *Collection) CountDocuments(ctx context.Context, filter interface{}, - // // opts ...*options.CountOptions) (int64, error) - // name = "CountDocuments" and n = 1 - // or - // // func (coll *Collection) DeleteMany(ctx context.Context, filter interface{}, - // // opts ...*options.DeleteOptions) (*DeleteResult, error) - // name = "DeleteMany" and n = 1 - // or - // // func (coll *Collection) DeleteOne(ctx context.Context, filter interface{}, - // // opts ...*options.DeleteOptions) (*DeleteResult, error) - // name = "DeleteOne" and n = 1 - // or - // // func (coll *Collection) Distinct(ctx context.Context, fieldName string, filter interface{}, - // // ...) ([]interface{}, error) - // name = "Distinct" and n = 2 - // or - // // func (coll *Collection) Find(ctx context.Context, filter interface{}, - // // opts ...*options.FindOptions) (*Cursor, error) - // name = "Find" and n = 1 - // or - // // func (coll *Collection) FindOne(ctx context.Context, filter interface{}, - // // opts ...*options.FindOneOptions) *SingleResult - // name = "FindOne" and n = 1 - // or - // // func (coll *Collection) FindOneAndDelete(ctx context.Context, filter interface{}, ...) - // // *SingleResult - // name = "FindOneAndDelete" and n = 1 - // or - // // func (coll *Collection) FindOneAndReplace(ctx context.Context, filter interface{}, - // // replacement interface{}, ...) *SingleResult - // name = "FindOneAndReplace" and n = 1 - // or - // // func (coll *Collection) FindOneAndUpdate(ctx context.Context, filter interface{}, - // // update interface{}, ...) *SingleResult - // name = "FindOneAndUpdate" and n = 1 - // or - // // func (coll *Collection) ReplaceOne(ctx context.Context, filter interface{}, - // // replacement interface{}, ...) (*UpdateResult, error) - // name = "ReplaceOne" and n = 1 - // or - // // func (coll *Collection) UpdateMany(ctx context.Context, filter interface{}, - // // update interface{}, ...) (*UpdateResult, error) - // name = "UpdateMany" and n = 1 - // or - // // func (coll *Collection) UpdateOne(ctx context.Context, filter interface{}, - // // update interface{}, ...) (*UpdateResult, error) - // name = "UpdateOne" and n = 1 - // or - // // func (coll *Collection) Watch(ctx context.Context, pipeline interface{}, ...) - // // (*ChangeStream, error) - // name = "Watch" and n = 1 - // or - // // func (coll *Collection) Aggregate(ctx context.Context, pipeline interface{}, - // // opts ...*options.AggregateOptions) (*Cursor, error) - // name = "Aggregate" and n = 1 - // } - // /** - // * A query used in an API function acting on a `Collection` struct of package - // * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo). - // */ - // private class MongoDbCollectionQuery extends Range { - // MongoDbCollectionQuery() { - // exists(Method meth, string methodName, int n | - // mongoDbCollectionMethod(methodName, n) and - // meth.hasQualifiedName(package("go.mongodb.org/mongo-driver", "mongo"), "Collection", - // methodName) and - // this = meth.getACall().getArgument(n) - // ) - // } - // } + + /** + * Holds if method `name` of struct `Collection` from package + * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo) + * interprets parameter `n` as a query. + */ + private predicate mongoDbCollectionMethod(string name, int n) { + // func (coll *Collection) CountDocuments(ctx context.Context, filter interface{}, + // opts ...*options.CountOptions) (int64, error) + name = "CountDocuments" and n = 1 + or + // func (coll *Collection) DeleteMany(ctx context.Context, filter interface{}, + // opts ...*options.DeleteOptions) (*DeleteResult, error) + name = "DeleteMany" and n = 1 + or + // func (coll *Collection) DeleteOne(ctx context.Context, filter interface{}, + // opts ...*options.DeleteOptions) (*DeleteResult, error) + name = "DeleteOne" and n = 1 + or + // func (coll *Collection) Distinct(ctx context.Context, fieldName string, filter interface{}, + // ...) ([]interface{}, error) + name = "Distinct" and n = 2 + or + // func (coll *Collection) Find(ctx context.Context, filter interface{}, + // opts ...*options.FindOptions) (*Cursor, error) + name = "Find" and n = 1 + or + // func (coll *Collection) FindOne(ctx context.Context, filter interface{}, + // opts ...*options.FindOneOptions) *SingleResult + name = "FindOne" and n = 1 + or + // func (coll *Collection) FindOneAndDelete(ctx context.Context, filter interface{}, ...) + // *SingleResult + name = "FindOneAndDelete" and n = 1 + or + // func (coll *Collection) FindOneAndReplace(ctx context.Context, filter interface{}, + // replacement interface{}, ...) *SingleResult + name = "FindOneAndReplace" and n = 1 + or + // func (coll *Collection) FindOneAndUpdate(ctx context.Context, filter interface{}, + // update interface{}, ...) *SingleResult + name = "FindOneAndUpdate" and n = 1 + or + // func (coll *Collection) ReplaceOne(ctx context.Context, filter interface{}, + // replacement interface{}, ...) (*UpdateResult, error) + name = "ReplaceOne" and n = 1 + or + // func (coll *Collection) UpdateMany(ctx context.Context, filter interface{}, + // update interface{}, ...) (*UpdateResult, error) + name = "UpdateMany" and n = 1 + or + // func (coll *Collection) UpdateOne(ctx context.Context, filter interface{}, + // update interface{}, ...) (*UpdateResult, error) + name = "UpdateOne" and n = 1 + or + // func (coll *Collection) Watch(ctx context.Context, pipeline interface{}, ...) + // (*ChangeStream, error) + name = "Watch" and n = 1 + or + // func (coll *Collection) Aggregate(ctx context.Context, pipeline interface{}, + // opts ...*options.AggregateOptions) (*Cursor, error) + name = "Aggregate" and n = 1 + } + + /** + * A query used in an API function acting on a `Collection` struct of package + * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo). + */ + private class MongoDbCollectionQuery extends Range { + MongoDbCollectionQuery() { + exists(Method meth, string methodName, int n | + mongoDbCollectionMethod(methodName, n) and + meth.hasQualifiedName(package("go.mongodb.org/mongo-driver", "mongo"), "Collection", + methodName) and + this = meth.getACall().getArgument(n) + ) + } + } } /** diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 2741f6545e9..0da4f893d87 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -25,53 +25,53 @@ | mongoDB.go:80:22:80:27 | filter | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:80:22:80:27 | filter | This query depends on a $@. | mongoDB.go:40:20:40:30 | call to Referer | user-provided value | | mongoDB.go:81:18:81:25 | pipeline | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:81:18:81:25 | pipeline | This query depends on a $@. | mongoDB.go:40:20:40:30 | call to Referer | user-provided value | edges -| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | MaD:4 | -| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | provenance | Sink:MaD:1 | -| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | Src:MaD:25 MaD:26 | +| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | MaD:2 | +| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | provenance | | +| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | Src:MaD:9 MaD:10 | | SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | FunctionModel | | issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | -| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | Src:MaD:22 MaD:19 | -| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | MaD:3 | +| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | Src:MaD:6 MaD:3 | +| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | MaD:1 | | issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | provenance | | -| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | MaD:4 | -| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | Sink:MaD:1 | +| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | MaD:2 | +| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | FunctionModel | | issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | -| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | Src:MaD:22 MaD:19 | -| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | MaD:3 | +| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | Src:MaD:6 MaD:3 | +| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | MaD:1 | | issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | provenance | | -| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | MaD:4 | -| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | provenance | Sink:MaD:1 | +| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | MaD:2 | +| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | provenance | | | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | provenance | | | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | provenance | FunctionModel | -| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | MaD:3 | -| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | Src:MaD:25 MaD:26 | +| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | MaD:1 | +| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | Src:MaD:9 MaD:10 | | issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | provenance | | | issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | provenance | | -| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | MaD:4 | -| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | Sink:MaD:1 | +| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | MaD:2 | +| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | | | issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | provenance | | | issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | provenance | FunctionModel | -| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | Src:MaD:23 Sink:MaD:1 | -| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | provenance | MaD:4 Sink:MaD:2 | -| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | Src:MaD:25 MaD:26 | +| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | Src:MaD:7 | +| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | provenance | MaD:2 | +| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | Src:MaD:9 MaD:10 | | main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | provenance | | | main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | provenance | | -| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | provenance | FunctionModel Sink:MaD:2 | -| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | provenance | MaD:4 Sink:MaD:2 | -| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | Src:MaD:24 MaD:20 | +| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | provenance | FunctionModel | +| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | provenance | MaD:2 | +| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | Src:MaD:8 MaD:4 | | main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | provenance | | -| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | provenance | FunctionModel Sink:MaD:2 | +| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | provenance | FunctionModel | | main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | provenance | | | main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | provenance | | -| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | Src:MaD:25 MaD:26 | +| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | Src:MaD:9 MaD:10 | | main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | provenance | | | main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | provenance | | -| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | MaD:4 | -| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | provenance | Sink:MaD:1 | +| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | MaD:2 | +| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | provenance | | | main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | provenance | | | main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | provenance | | | main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | provenance | | @@ -80,11 +80,11 @@ edges | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | | main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | | main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | provenance | | -| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | Src:MaD:25 MaD:26 | +| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | Src:MaD:9 MaD:10 | | main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | | main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | -| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | MaD:4 | -| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | Sink:MaD:1 | +| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | MaD:2 | +| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | | | main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | provenance | | | main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | provenance | | | main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | provenance | | @@ -93,11 +93,11 @@ edges | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | | main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | provenance | | | main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | provenance | | -| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | Src:MaD:25 MaD:26 | +| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | Src:MaD:9 MaD:10 | | main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | | main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | provenance | | -| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | MaD:4 | -| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | Sink:MaD:1 | +| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | MaD:2 | +| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | | | main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | provenance | | | main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | provenance | | | main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | provenance | | @@ -106,60 +106,44 @@ edges | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | | main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | provenance | | | main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | provenance | | -| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | Src:MaD:25 MaD:26 | +| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | Src:MaD:9 MaD:10 | | main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | | main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | provenance | | -| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | MaD:4 | -| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | Sink:MaD:1 | +| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | MaD:2 | +| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | | | main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | provenance | | | main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | provenance | FunctionModel | | main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | provenance | | | main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | -| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:21 | +| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:5 | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | Sink:MaD:6 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | Sink:MaD:7 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | provenance | Sink:MaD:8 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | provenance | Sink:MaD:9 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | provenance | Sink:MaD:10 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | provenance | Sink:MaD:11 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | provenance | Sink:MaD:12 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | provenance | Sink:MaD:13 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | provenance | Sink:MaD:14 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | provenance | Sink:MaD:15 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | provenance | Sink:MaD:16 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | provenance | Sink:MaD:17 | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | provenance | | | mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | provenance | Config | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | provenance | Sink:MaD:5 | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | provenance | Sink:MaD:18 | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | provenance | | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | provenance | | | mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | provenance | Config | models -| 1 | Sink: database/sql; DB; false; Query; ; ; Argument[0]; sql-injection; manual | -| 2 | Sink: database/sql; Tx; false; Query; ; ; Argument[0]; sql-injection; manual | -| 3 | Summary: encoding/json; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | -| 4 | Summary: fmt; ; true; Sprintf; ; ; Argument[1].ArrayElement; ReturnValue; taint; manual | -| 5 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; Aggregate; ; ; Argument[1]; nosql-injection; manual | -| 6 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; CountDocuments; ; ; Argument[1]; nosql-injection; manual | -| 7 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; DeleteMany; ; ; Argument[1]; nosql-injection; manual | -| 8 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; DeleteOne; ; ; Argument[1]; nosql-injection; manual | -| 9 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; Distinct; ; ; Argument[2]; nosql-injection; manual | -| 10 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; Find; ; ; Argument[1]; nosql-injection; manual | -| 11 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; FindOne; ; ; Argument[1]; nosql-injection; manual | -| 12 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; FindOneAndDelete; ; ; Argument[1]; nosql-injection; manual | -| 13 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; FindOneAndReplace; ; ; Argument[1]; nosql-injection; manual | -| 14 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; FindOneAndUpdate; ; ; Argument[1]; nosql-injection; manual | -| 15 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; ReplaceOne; ; ; Argument[1]; nosql-injection; manual | -| 16 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; UpdateMany; ; ; Argument[1]; nosql-injection; manual | -| 17 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; UpdateOne; ; ; Argument[1]; nosql-injection; manual | -| 18 | Sink: go.mongodb.org/mongo-driver/mongo; Collection; true; Watch; ; ; Argument[1]; nosql-injection; manual | -| 19 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | -| 20 | Summary: net/http; Header; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | -| 21 | Source: net/http; Request; true; Referer; ; ; ReturnValue; remote; manual | -| 22 | Source: net/http; Request; true; Body; ; ; ; remote; manual | -| 23 | Source: net/http; Request; true; Form; ; ; ; remote; manual | -| 24 | Source: net/http; Request; true; Header; ; ; ; remote; manual | -| 25 | Source: net/http; Request; true; URL; ; ; ; remote; manual | -| 26 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 1 | Summary: encoding/json; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | +| 2 | Summary: fmt; ; true; Sprintf; ; ; Argument[1].ArrayElement; ReturnValue; taint; manual | +| 3 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | +| 4 | Summary: net/http; Header; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 5 | Source: net/http; Request; true; Referer; ; ; ReturnValue; remote; manual | +| 6 | Source: net/http; Request; true; Body; ; ; ; remote; manual | +| 7 | Source: net/http; Request; true; Form; ; ; ; remote; manual | +| 8 | Source: net/http; Request; true; Header; ; ; ; remote; manual | +| 9 | Source: net/http; Request; true; URL; ; ; ; remote; manual | +| 10 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | nodes | SqlInjection.go:10:7:11:30 | []type{args} [array] | semmle.label | []type{args} [array] | | SqlInjection.go:10:7:11:30 | call to Sprintf | semmle.label | call to Sprintf | From b3326babba6fc37bc9b7e0853efea4519301f442 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:42:52 +0100 Subject: [PATCH 170/334] Revert "Convert database/sql/driver sql-injection sinks to MaD" This reverts commit 652dd88c363c96c806d7517f39812749bbd2304b. --- go/ql/lib/ext/database.sql.driver.model.yml | 10 -------- .../go/frameworks/stdlib/DatabaseSql.qll | 25 ++++++++++++++++++- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/go/ql/lib/ext/database.sql.driver.model.yml b/go/ql/lib/ext/database.sql.driver.model.yml index 50b699e4371..c2d780bb7c8 100644 --- a/go/ql/lib/ext/database.sql.driver.model.yml +++ b/go/ql/lib/ext/database.sql.driver.model.yml @@ -1,14 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["database/sql/driver", "Execer", False, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql/driver", "ExecerContext", False, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql/driver", "Conn", False, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql/driver", "ConnPrepareContext", False, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql/driver", "Queryer", False, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql/driver", "QueryerContext", False, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll index f4132688796..5f53ea2de8c 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll @@ -60,13 +60,36 @@ module DatabaseSql { override DataFlow::Node getAResult() { result = this.getResult(0) } override SQL::QueryString getAQueryString() { - result = this.getASyntacticArgument() + result = this.getAnArgument() or this.getTarget().hasQualifiedName("database/sql/driver", "Stmt") and result = this.getReceiver().getAPredecessor*().(DataFlow::MethodCallNode).getAnArgument() } } + /** A query string used in an API function of the standard `database/sql/driver` package. */ + private class DriverQueryString extends SQL::QueryString::Range { + DriverQueryString() { + exists(Method meth, int n | + ( + meth.hasQualifiedName("database/sql/driver", "Execer", "Exec") and n = 0 + or + meth.hasQualifiedName("database/sql/driver", "ExecerContext", "ExecContext") and n = 1 + or + meth.hasQualifiedName("database/sql/driver", "Conn", "Prepare") and n = 0 + or + meth.hasQualifiedName("database/sql/driver", "ConnPrepareContext", "PrepareContext") and + n = 1 + or + meth.hasQualifiedName("database/sql/driver", "Queryer", "Query") and n = 0 + or + meth.hasQualifiedName("database/sql/driver", "QueryerContext", "QueryContext") and n = 1 + ) and + this = meth.getACall().getArgument(n) + ) + } + } + // These are expressed using TaintTracking::FunctionModel because varargs functions don't work with Models-as-Data sumamries yet. private class SqlMethodModels extends TaintTracking::FunctionModel, Method { FunctionInput inp; From fa07f16bcc75fdcd7193323a2329d5714fe017e9 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:42:55 +0100 Subject: [PATCH 171/334] Revert "Convert database/sql sql-injection sinks to MaD" This reverts commit 501bb3eb56ace85259119ccf8cb4aeeaddbf1634. --- go/ql/lib/ext/database.sql.model.yml | 28 ------------------- .../go/frameworks/stdlib/DatabaseSql.qll | 20 ++++++++++++- .../frameworks/XNetHtml/SqlInjection.expected | 9 +++--- 3 files changed, 23 insertions(+), 34 deletions(-) diff --git a/go/ql/lib/ext/database.sql.model.yml b/go/ql/lib/ext/database.sql.model.yml index b8fb85bb893..e1083f6e49a 100644 --- a/go/ql/lib/ext/database.sql.model.yml +++ b/go/ql/lib/ext/database.sql.model.yml @@ -1,32 +1,4 @@ extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["database/sql", "Conn", False, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Conn", False, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "DB", False, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["database/sql", "Tx", False, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll index 5f53ea2de8c..845225af5bd 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll @@ -26,7 +26,7 @@ module DatabaseSql { override DataFlow::Node getAResult() { result = this.getResult(0) } override SQL::QueryString getAQueryString() { - result = this.getASyntacticArgument() + result = this.getAnArgument() or // attempt to resolve a `QueryString` for `Stmt`s using local data flow. t = "Stmt" and @@ -34,6 +34,24 @@ module DatabaseSql { } } + /** A query string used in an API function of the `database/sql` package. */ + private class QueryString extends SQL::QueryString::Range { + QueryString() { + exists(Method meth, string base, string t, string m, int n | + t = ["DB", "Tx", "Conn"] and + meth.hasQualifiedName("database/sql", t, m) and + this = meth.getACall().getArgument(n) + | + base = ["Exec", "Prepare", "Query", "QueryRow"] and + ( + m = base and n = 0 + or + m = base + "Context" and n = 1 + ) + ) + } + } + /** A query in the standard `database/sql/driver` package. */ private class DriverQuery extends SQL::Query::Range, DataFlow::MethodCallNode { DriverQuery() { diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected index b7a66a6a903..446695b259b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected @@ -1,12 +1,11 @@ #select | test.go:57:11:57:41 | call to EscapeString | test.go:56:2:56:42 | ... := ...[0] | test.go:57:11:57:41 | call to EscapeString | This query depends on a $@. | test.go:56:2:56:42 | ... := ...[0] | user-provided value | edges -| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | Src:MaD:3 | -| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | MaD:2 Sink:MaD:1 | +| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | Src:MaD:2 | +| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | MaD:1 | models -| 1 | Sink: database/sql; DB; false; Query; ; ; Argument[0]; sql-injection; manual | -| 2 | Summary: golang.org/x/net/html; ; false; EscapeString; ; ; Argument[0]; ReturnValue; taint; manual | -| 3 | Source: net/http; Request; true; Cookie; ; ; ReturnValue[0]; remote; manual | +| 1 | Summary: golang.org/x/net/html; ; false; EscapeString; ; ; Argument[0]; ReturnValue; taint; manual | +| 2 | Source: net/http; Request; true; Cookie; ; ; ReturnValue[0]; remote; manual | nodes | test.go:56:2:56:42 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:57:11:57:41 | call to EscapeString | semmle.label | call to EscapeString | From ec594928663d118695d78acbaf5af187633fd1af Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:42:57 +0100 Subject: [PATCH 172/334] Revert "Convert Beego orm sql-injection sinks to MaD" This reverts commit ad213579a1eb099e3c76e86a735dd560f95322b3. --- ...ithub.com.beego.beego.client.orm.model.yml | 42 --------- go/ql/lib/semmle/go/frameworks/BeegoOrm.qll | 51 +++++++++++ .../frameworks/BeegoOrm/SqlInjection.expected | 87 +++++++------------ 3 files changed, 84 insertions(+), 96 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.beego.beego.client.orm.model.yml diff --git a/go/ql/lib/ext/github.com.beego.beego.client.orm.model.yml b/go/ql/lib/ext/github.com.beego.beego.client.orm.model.yml deleted file mode 100644 index 9e8849423eb..00000000000 --- a/go/ql/lib/ext/github.com.beego.beego.client.orm.model.yml +++ /dev/null @@ -1,42 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["beego-orm", "github.com/beego/beego/client/orm"] - - ["beego-orm", "github.com/astaxie/beego/orm"] - - ["beego-orm", "github.com/beego/beego/orm"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:beego-orm", "Condition", False, "Raw", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "DB", False, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:beego-orm", "Ormer", False, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "And", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Delete", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "From", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "GroupBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Having", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "In", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "InnerJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "InsertInto", "", "", "Argument[0..1]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "LeftJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "On", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Or", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "RightJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Select", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Set", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Subquery", "", "", "Argument[0..1]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Update", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Values", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QueryBuilder", False, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:beego-orm", "QuerySeter", False, "FilterRaw", "", "", "Argument[1]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll index 925b0f19fa3..c1de0cf4244 100644 --- a/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll +++ b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll @@ -14,6 +14,57 @@ module BeegoOrm { /** Gets the package name `github.com/astaxie/beego/orm`. */ string packagePath() { result = package("github.com/astaxie/beego", "orm") } + private class DbSink extends SQL::QueryString::Range { + DbSink() { + exists(Method m, string methodName, int argNum | + m.hasQualifiedName(packagePath(), "DB", methodName) and + ( + methodName = ["Exec", "Prepare", "Query", "QueryRow"] and + argNum = 0 + or + methodName = ["ExecContext", "PrepareContext", "QueryContext", "QueryRowContext"] and + argNum = 1 + ) + | + this = m.getACall().getArgument(argNum) + ) + } + } + + private class QueryBuilderSink extends SQL::QueryString::Range { + // Note this class doesn't do any escaping, unlike the true ORM part of the package + QueryBuilderSink() { + exists(Method impl | impl.implements(packagePath(), "QueryBuilder", _) | + this = impl.getACall().getASyntacticArgument() + ) and + this.getType().getUnderlyingType() instanceof StringType + } + } + + private class OrmerRawSink extends SQL::QueryString::Range { + OrmerRawSink() { + exists(Method impl | impl.implements(packagePath(), "Ormer", "Raw") | + this = impl.getACall().getArgument(0) + ) + } + } + + private class QuerySeterFilterRawSink extends SQL::QueryString::Range { + QuerySeterFilterRawSink() { + exists(Method impl | impl.implements(packagePath(), "QuerySeter", "FilterRaw") | + this = impl.getACall().getArgument(1) + ) + } + } + + private class ConditionRawSink extends SQL::QueryString::Range { + ConditionRawSink() { + exists(Method impl | impl.implements(packagePath(), "Condition", "Raw") | + this = impl.getACall().getArgument(1) + ) + } + } + private class OrmerSource extends StoredXss::Source { OrmerSource() { exists(Method impl | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected index 992c1387103..6cc1e09486b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected @@ -32,61 +32,40 @@ | test.go:59:31:59:39 | untrusted | test.go:57:15:57:41 | call to UserAgent | test.go:59:31:59:39 | untrusted | This query depends on a $@. | test.go:57:15:57:41 | call to UserAgent | user-provided value | | test.go:65:19:65:27 | untrusted | test.go:63:15:63:41 | call to UserAgent | test.go:65:19:65:27 | untrusted | This query depends on a $@. | test.go:63:15:63:41 | call to UserAgent | user-provided value | edges -| test.go:11:15:11:41 | call to UserAgent | test.go:13:11:13:19 | untrusted | provenance | Src:MaD:22 Sink:MaD:2 | -| test.go:11:15:11:41 | call to UserAgent | test.go:14:23:14:31 | untrusted | provenance | Src:MaD:22 Sink:MaD:3 | -| test.go:11:15:11:41 | call to UserAgent | test.go:15:14:15:22 | untrusted | provenance | Src:MaD:22 Sink:MaD:4 | -| test.go:11:15:11:41 | call to UserAgent | test.go:16:26:16:34 | untrusted | provenance | Src:MaD:22 Sink:MaD:5 | -| test.go:11:15:11:41 | call to UserAgent | test.go:17:12:17:20 | untrusted | provenance | Src:MaD:22 Sink:MaD:6 | -| test.go:11:15:11:41 | call to UserAgent | test.go:18:24:18:32 | untrusted | provenance | Src:MaD:22 Sink:MaD:7 | -| test.go:11:15:11:41 | call to UserAgent | test.go:19:15:19:23 | untrusted | provenance | Src:MaD:22 Sink:MaD:8 | -| test.go:11:15:11:41 | call to UserAgent | test.go:20:27:20:35 | untrusted | provenance | Src:MaD:22 Sink:MaD:9 | -| test.go:25:15:25:41 | call to UserAgent | test.go:28:12:28:20 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:29:10:29:18 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | Src:MaD:22 Sink:MaD:13 | -| test.go:25:15:25:41 | call to UserAgent | test.go:31:14:31:22 | untrusted | provenance | Src:MaD:22 Sink:MaD:15 | -| test.go:25:15:25:41 | call to UserAgent | test.go:32:15:32:23 | untrusted | provenance | Src:MaD:22 Sink:MaD:18 | -| test.go:25:15:25:41 | call to UserAgent | test.go:33:8:33:16 | untrusted | provenance | Src:MaD:22 Sink:MaD:16 | -| test.go:25:15:25:41 | call to UserAgent | test.go:34:11:34:19 | untrusted | provenance | Src:MaD:22 Sink:MaD:20 | -| test.go:25:15:25:41 | call to UserAgent | test.go:35:9:35:17 | untrusted | provenance | Src:MaD:22 Sink:MaD:11 | -| test.go:25:15:25:41 | call to UserAgent | test.go:36:8:36:16 | untrusted | provenance | Src:MaD:22 Sink:MaD:17 | -| test.go:25:15:25:41 | call to UserAgent | test.go:37:8:37:16 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:38:13:38:21 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:39:13:39:21 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:40:12:40:20 | untrusted | provenance | Src:MaD:22 Sink:MaD:12 | -| test.go:25:15:25:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:42:9:42:17 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:44:16:44:24 | untrusted | provenance | Src:MaD:22 Sink:MaD:14 | -| test.go:25:15:25:41 | call to UserAgent | test.go:45:12:45:20 | untrusted | provenance | Src:MaD:22 | -| test.go:25:15:25:41 | call to UserAgent | test.go:46:14:46:22 | untrusted | provenance | Src:MaD:22 Sink:MaD:19 | -| test.go:26:16:26:42 | call to UserAgent | test.go:44:27:44:36 | untrusted2 | provenance | Src:MaD:22 | -| test.go:26:16:26:42 | call to UserAgent | test.go:46:25:46:34 | untrusted2 | provenance | Src:MaD:22 Sink:MaD:19 | -| test.go:50:15:50:41 | call to UserAgent | test.go:52:12:52:20 | untrusted | provenance | Src:MaD:22 Sink:MaD:10 | -| test.go:57:15:57:41 | call to UserAgent | test.go:59:31:59:39 | untrusted | provenance | Src:MaD:22 Sink:MaD:21 | -| test.go:63:15:63:41 | call to UserAgent | test.go:65:19:65:27 | untrusted | provenance | Src:MaD:22 Sink:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:13:11:13:19 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:14:23:14:31 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:15:14:15:22 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:16:26:16:34 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:17:12:17:20 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:18:24:18:32 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:19:15:19:23 | untrusted | provenance | Src:MaD:1 | +| test.go:11:15:11:41 | call to UserAgent | test.go:20:27:20:35 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:28:12:28:20 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:29:10:29:18 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:31:14:31:22 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:32:15:32:23 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:33:8:33:16 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:34:11:34:19 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:35:9:35:17 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:36:8:36:16 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:37:8:37:16 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:38:13:38:21 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:39:13:39:21 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:40:12:40:20 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:42:9:42:17 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:44:16:44:24 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:45:12:45:20 | untrusted | provenance | Src:MaD:1 | +| test.go:25:15:25:41 | call to UserAgent | test.go:46:14:46:22 | untrusted | provenance | Src:MaD:1 | +| test.go:26:16:26:42 | call to UserAgent | test.go:44:27:44:36 | untrusted2 | provenance | Src:MaD:1 | +| test.go:26:16:26:42 | call to UserAgent | test.go:46:25:46:34 | untrusted2 | provenance | Src:MaD:1 | +| test.go:50:15:50:41 | call to UserAgent | test.go:52:12:52:20 | untrusted | provenance | Src:MaD:1 | +| test.go:57:15:57:41 | call to UserAgent | test.go:59:31:59:39 | untrusted | provenance | Src:MaD:1 | +| test.go:63:15:63:41 | call to UserAgent | test.go:65:19:65:27 | untrusted | provenance | Src:MaD:1 | models -| 1 | Sink: group:beego-orm; Condition; false; Raw; ; ; Argument[1]; sql-injection; manual | -| 2 | Sink: group:beego-orm; DB; false; Exec; ; ; Argument[0]; sql-injection; manual | -| 3 | Sink: group:beego-orm; DB; false; ExecContext; ; ; Argument[1]; sql-injection; manual | -| 4 | Sink: group:beego-orm; DB; false; Prepare; ; ; Argument[0]; sql-injection; manual | -| 5 | Sink: group:beego-orm; DB; false; PrepareContext; ; ; Argument[1]; sql-injection; manual | -| 6 | Sink: group:beego-orm; DB; false; Query; ; ; Argument[0]; sql-injection; manual | -| 7 | Sink: group:beego-orm; DB; false; QueryContext; ; ; Argument[1]; sql-injection; manual | -| 8 | Sink: group:beego-orm; DB; false; QueryRow; ; ; Argument[0]; sql-injection; manual | -| 9 | Sink: group:beego-orm; DB; false; QueryRowContext; ; ; Argument[1]; sql-injection; manual | -| 10 | Sink: group:beego-orm; Ormer; false; Raw; ; ; Argument[0]; sql-injection; manual | -| 11 | Sink: group:beego-orm; QueryBuilder; false; And; ; ; Argument[0]; sql-injection; manual | -| 12 | Sink: group:beego-orm; QueryBuilder; false; Having; ; ; Argument[0]; sql-injection; manual | -| 13 | Sink: group:beego-orm; QueryBuilder; false; InnerJoin; ; ; Argument[0]; sql-injection; manual | -| 14 | Sink: group:beego-orm; QueryBuilder; false; InsertInto; ; ; Argument[0..1]; sql-injection; manual | -| 15 | Sink: group:beego-orm; QueryBuilder; false; LeftJoin; ; ; Argument[0]; sql-injection; manual | -| 16 | Sink: group:beego-orm; QueryBuilder; false; On; ; ; Argument[0]; sql-injection; manual | -| 17 | Sink: group:beego-orm; QueryBuilder; false; Or; ; ; Argument[0]; sql-injection; manual | -| 18 | Sink: group:beego-orm; QueryBuilder; false; RightJoin; ; ; Argument[0]; sql-injection; manual | -| 19 | Sink: group:beego-orm; QueryBuilder; false; Subquery; ; ; Argument[0..1]; sql-injection; manual | -| 20 | Sink: group:beego-orm; QueryBuilder; false; Where; ; ; Argument[0]; sql-injection; manual | -| 21 | Sink: group:beego-orm; QuerySeter; false; FilterRaw; ; ; Argument[1]; sql-injection; manual | -| 22 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | +| 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | nodes | test.go:11:15:11:41 | call to UserAgent | semmle.label | call to UserAgent | | test.go:13:11:13:19 | untrusted | semmle.label | untrusted | From 59bb142e8b0dbc88af0a8316c9f5c4897877ea48 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:00 +0100 Subject: [PATCH 173/334] Revert "Convert Bun sql-injection sinks to MaD" This reverts commit 3eb5b2669b2f5a8f020288184932c2e72379d2ad. --- .../lib/ext/github.com.uptrace.bun.model.yml | 68 ------------------- go/ql/lib/semmle/go/frameworks/SQL.qll | 43 +++++++++++- .../frameworks/SQL/bun/QueryString.expected | 3 - .../go/frameworks/SQL/bun/QueryString.ql | 60 ---------------- .../semmle/go/frameworks/SQL/bun/bun.go | 42 ++++++------ 5 files changed, 61 insertions(+), 155 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.uptrace.bun.model.yml delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.expected delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.ql diff --git a/go/ql/lib/ext/github.com.uptrace.bun.model.yml b/go/ql/lib/ext/github.com.uptrace.bun.model.yml deleted file mode 100644 index eb060b4f9cc..00000000000 --- a/go/ql/lib/ext/github.com.uptrace.bun.model.yml +++ /dev/null @@ -1,68 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["github.com/uptrace/bun", "", True, "NewRawQuery", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "AddColumnQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "AddColumnQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "AddColumnQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "NewRaw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "Conn", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateIndexQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateIndexQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateIndexQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateIndexQuery", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateIndexQuery", True, "WhereOr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateTableQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateTableQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "CreateTableQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "ExecContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "NewRaw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "QueryRow", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "PrepareContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "QueryRowContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DB", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DeleteQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DeleteQuery", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DeleteQuery", True, "WhereOr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DropColumnQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DropColumnQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DropColumnQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DropTableQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "DropTableQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "InsertQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "InsertQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "InsertQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "InsertQuery", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "InsertQuery", True, "WhereOr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "MergeQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "MergeQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "RawQuery", True, "NewRaw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "ColumnExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "DistinctOn", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "For", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "GroupExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "Having", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "OrderExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "SelectQuery", True, "WhereOr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "TruncateTableQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "UpdateQuery", True, "ModelTableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "UpdateQuery", True, "TableExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "UpdateQuery", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/uptrace/bun", "UpdateQuery", True, "WhereOr", "", "", "Argument[0]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index b97df15a37d..6b8072378f1 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -167,8 +167,45 @@ module Xorm { } /** - * DEPRECATED - * * Provides classes for working with the [Bun](https://bun.uptrace.dev/) package. */ -deprecated module Bun { } +module Bun { + /** Gets the package name for Bun package. */ + private string packagePath() { result = package("github.com/uptrace/bun", "") } + + /** A model for sinks of Bun. */ + private class BunSink extends SQL::QueryString::Range { + BunSink() { + exists(Function f, string m, int arg | this = f.getACall().getArgument(arg) | + f.hasQualifiedName(packagePath(), m) and + m = "NewRawQuery" and + arg = 1 + ) + or + exists(Method f, string tp, string m, int arg | this = f.getACall().getArgument(arg) | + f.hasQualifiedName(packagePath(), tp, m) and + ( + tp = ["DB", "Conn"] and + m = ["ExecContext", "PrepareContext", "QueryContext", "QueryRowContext"] and + arg = 1 + or + tp = ["DB", "Conn"] and + m = ["Exec", "NewRaw", "Prepare", "Query", "QueryRow", "Raw"] and + arg = 0 + or + tp.matches("%Query") and + m = + [ + "ColumnExpr", "DistinctOn", "For", "GroupExpr", "Having", "ModelTableExpr", + "OrderExpr", "TableExpr", "Where", "WhereOr" + ] and + arg = 0 + or + tp = "RawQuery" and + m = "NewRaw" and + arg = 0 + ) + ) + } + } +} diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.expected deleted file mode 100644 index 105b7026d0c..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.expected +++ /dev/null @@ -1,3 +0,0 @@ -failures -invalidModelRow -testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.ql deleted file mode 100644 index eeb43a82fad..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/QueryString.ql +++ /dev/null @@ -1,60 +0,0 @@ -import go -import semmle.go.dataflow.ExternalFlow -import ModelValidation -import TestUtilities.InlineExpectationsTest - -module SqlTest implements TestSig { - string getARelevantTag() { result = "query" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "query" and - exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | - q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = q.toString() and - value = qs.toString() - ) - } -} - -module QueryString implements TestSig { - string getARelevantTag() { result = "querystring" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "querystring" and - element = "" and - exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | - qs.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - value = qs.toString() - ) - } -} - -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - predicate isSink(DataFlow::Node n) { - n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() - } -} - -module Flow = TaintTracking::Global; - -module TaintFlow implements TestSig { - string getARelevantTag() { result = "flowfrom" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "flowfrom" and - element = "" and - exists(DataFlow::Node fromNode, DataFlow::Node toNode | - toNode - .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - Flow::flow(fromNode, toNode) and - value = fromNode.asExpr().(StringLit).getValue() - ) - } -} - -import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/bun.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/bun.go index 44a2e2c2fce..8ce4e5b0826 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/bun.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bun/bun.go @@ -22,28 +22,28 @@ func main() { panic(err) } db := bun.NewDB(sqlite, sqlitedialect.New()) - bun.NewRawQuery(db, untrusted) // $ querystring=untrusted + bun.NewRawQuery(db, untrusted) - db.ExecContext(ctx, untrusted) // $ querystring=untrusted - db.PrepareContext(ctx, untrusted) // $ querystring=untrusted - db.QueryContext(ctx, untrusted) // $ querystring=untrusted - db.QueryRowContext(ctx, untrusted) // $ querystring=untrusted + db.ExecContext(ctx, untrusted) + db.PrepareContext(ctx, untrusted) + db.QueryContext(ctx, untrusted) + db.QueryRowContext(ctx, untrusted) - db.Exec(untrusted) // $ querystring=untrusted - db.NewRaw(untrusted) // $ querystring=untrusted - db.Prepare(untrusted) // $ querystring=untrusted - db.Query(untrusted) // $ querystring=untrusted - db.QueryRow(untrusted) // $ querystring=untrusted - db.Raw(untrusted) // $ querystring=untrusted + db.Exec(untrusted) + db.NewRaw(untrusted) + db.Prepare(untrusted) + db.Query(untrusted) + db.QueryRow(untrusted) + db.Raw(untrusted) - db.NewSelect().ColumnExpr(untrusted) // $ querystring=untrusted - db.NewSelect().DistinctOn(untrusted) // $ querystring=untrusted - db.NewSelect().For(untrusted) // $ querystring=untrusted - db.NewSelect().GroupExpr(untrusted) // $ querystring=untrusted - db.NewSelect().Having(untrusted) // $ querystring=untrusted - db.NewSelect().ModelTableExpr(untrusted) // $ querystring=untrusted - db.NewSelect().OrderExpr(untrusted) // $ querystring=untrusted - db.NewSelect().TableExpr(untrusted) // $ querystring=untrusted - db.NewSelect().Where(untrusted) // $ querystring=untrusted - db.NewSelect().WhereOr(untrusted) // $ querystring=untrusted + db.NewSelect().ColumnExpr(untrusted) + db.NewSelect().DistinctOn(untrusted) + db.NewSelect().For(untrusted) + db.NewSelect().GroupExpr(untrusted) + db.NewSelect().Having(untrusted) + db.NewSelect().ModelTableExpr(untrusted) + db.NewSelect().OrderExpr(untrusted) + db.NewSelect().TableExpr(untrusted) + db.NewSelect().Where(untrusted) + db.NewSelect().WhereOr(untrusted) } From d8a2c08f125d696b1f31682656be7be3ebaf3af8 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:03 +0100 Subject: [PATCH 174/334] Revert "Convert Xorm sql-injection sinks to MaD" This reverts commit 3b2b7d7d1c3ead1ba09002795cac87c90e3e4c99. --- go/ql/lib/ext/xorm.io.xorm.model.yml | 53 -------------------------- go/ql/lib/semmle/go/frameworks/SQL.qll | 22 +++++++++++ 2 files changed, 22 insertions(+), 53 deletions(-) delete mode 100644 go/ql/lib/ext/xorm.io.xorm.model.yml diff --git a/go/ql/lib/ext/xorm.io.xorm.model.yml b/go/ql/lib/ext/xorm.io.xorm.model.yml deleted file mode 100644 index fd73b7c9a66..00000000000 --- a/go/ql/lib/ext/xorm.io.xorm.model.yml +++ /dev/null @@ -1,53 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["xorm", "xorm.io/xorm"] - - ["xorm", "github.com/go-xorm/xorm"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:xorm", "Engine", True, "Alias", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "And", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "GroupBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Having", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "In", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Join", "", "", "Argument[0..2]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "NotIn", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Or", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "QueryString", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "QueryInterface", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Select", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "SetExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "SQL", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Sum", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Sums", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "SumInt", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "SumsInt", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Engine", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Alias", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "And", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "GroupBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Having", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "In", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Join", "", "", "Argument[0..2]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "NotIn", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Or", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "QueryString", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "QueryInterface", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Select", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "SetExpr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "SQL", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Sum", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Sums", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "SumInt", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "SumsInt", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:xorm", "Session", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 6b8072378f1..a208cd92c50 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -164,6 +164,28 @@ module Gorm { module Xorm { /** Gets the package name for Xorm. */ string packagePath() { result = package(["xorm.io/xorm", "github.com/go-xorm/xorm"], "") } + + /** A model for sinks of XORM. */ + private class XormSink extends SQL::QueryString::Range { + XormSink() { + exists(Method meth, string type, string name, int n | + meth.hasQualifiedName(Xorm::packagePath(), type, name) and + this = meth.getACall().getSyntacticArgument(n) and + type = ["Engine", "Session"] + | + name = + [ + "Query", "Exec", "QueryString", "QueryInterface", "SQL", "Where", "And", "Or", "Alias", + "NotIn", "In", "Select", "SetExpr", "OrderBy", "Having", "GroupBy" + ] and + n = 0 + or + name = ["SumInt", "Sum", "Sums", "SumsInt"] and n = 1 + or + name = "Join" and n = [0, 1, 2] + ) + } + } } /** From 4e6d7fcb29319f2e89a6e30ab8c0384926796d73 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:06 +0100 Subject: [PATCH 175/334] Revert "Convert Gorm sql-injection sinks to MaD" This reverts commit ba310417a8ce94daa2240219335003518acdca33. --- go/ql/lib/ext/gorm.io.gorm.model.yml | 25 -------- go/ql/lib/semmle/go/frameworks/SQL.qll | 15 +++++ .../frameworks/SQL/Gorm/QueryString.expected | 3 - .../go/frameworks/SQL/Gorm/QueryString.ql | 60 ------------------- .../go/frameworks/SQL/Gorm/gorm.expected | 25 ++++++++ .../semmle/go/frameworks/SQL/Gorm/gorm.go | 51 ++++++++-------- .../semmle/go/frameworks/SQL/Gorm/gorm.ql | 5 ++ 7 files changed, 71 insertions(+), 113 deletions(-) delete mode 100644 go/ql/lib/ext/gorm.io.gorm.model.yml delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.expected delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.ql diff --git a/go/ql/lib/ext/gorm.io.gorm.model.yml b/go/ql/lib/ext/gorm.io.gorm.model.yml deleted file mode 100644 index bfcf1fa66a7..00000000000 --- a/go/ql/lib/ext/gorm.io.gorm.model.yml +++ /dev/null @@ -1,25 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["gorm", "gorm.io/gorm"] - - ["gorm", "github.com/jinzhu/gorm"] - - ["gorm", "github.com/go-gorm/gorm"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:gorm", "DB", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Order", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Not", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Or", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Select", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Table", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Group", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Having", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Joins", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Distinct", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorm", "DB", True, "Pluck", "", "", "Argument[0]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index a208cd92c50..0b20797f99b 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -146,6 +146,21 @@ module SQL { } } } + + /** A model for sinks of GORM. */ + private class GormSink extends SQL::QueryString::Range { + GormSink() { + exists(Method meth, string package, string name | + meth.hasQualifiedName(package, "DB", name) and + this = meth.getACall().getSyntacticArgument(0) and + package = Gorm::packagePath() and + name in [ + "Where", "Raw", "Order", "Not", "Or", "Select", "Table", "Group", "Having", "Joins", + "Exec", "Distinct", "Pluck" + ] + ) + } + } } /** diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.expected deleted file mode 100644 index db33d6d2504..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.expected +++ /dev/null @@ -1,3 +0,0 @@ -testFailures -invalidModelRow -failures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.ql deleted file mode 100644 index eeb43a82fad..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.ql +++ /dev/null @@ -1,60 +0,0 @@ -import go -import semmle.go.dataflow.ExternalFlow -import ModelValidation -import TestUtilities.InlineExpectationsTest - -module SqlTest implements TestSig { - string getARelevantTag() { result = "query" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "query" and - exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | - q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = q.toString() and - value = qs.toString() - ) - } -} - -module QueryString implements TestSig { - string getARelevantTag() { result = "querystring" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "querystring" and - element = "" and - exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | - qs.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - value = qs.toString() - ) - } -} - -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - predicate isSink(DataFlow::Node n) { - n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() - } -} - -module Flow = TaintTracking::Global; - -module TaintFlow implements TestSig { - string getARelevantTag() { result = "flowfrom" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "flowfrom" and - element = "" and - exists(DataFlow::Node fromNode, DataFlow::Node toNode | - toNode - .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - Flow::flow(fromNode, toNode) and - value = fromNode.asExpr().(StringLit).getValue() - ) - } -} - -import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.expected new file mode 100644 index 00000000000..ca70ed07c33 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.expected @@ -0,0 +1,25 @@ +| gorm.go:20:12:20:20 | untrusted | github.com/jinzhu/gorm | DB | Where | +| gorm.go:21:10:21:18 | untrusted | github.com/jinzhu/gorm | DB | Raw | +| gorm.go:22:10:22:18 | untrusted | github.com/jinzhu/gorm | DB | Not | +| gorm.go:23:12:23:20 | untrusted | github.com/jinzhu/gorm | DB | Order | +| gorm.go:24:9:24:17 | untrusted | github.com/jinzhu/gorm | DB | Or | +| gorm.go:25:13:25:21 | untrusted | github.com/jinzhu/gorm | DB | Select | +| gorm.go:26:12:26:20 | untrusted | github.com/jinzhu/gorm | DB | Table | +| gorm.go:27:12:27:20 | untrusted | github.com/jinzhu/gorm | DB | Group | +| gorm.go:28:13:28:21 | untrusted | github.com/jinzhu/gorm | DB | Having | +| gorm.go:29:12:29:20 | untrusted | github.com/jinzhu/gorm | DB | Joins | +| gorm.go:30:11:30:19 | untrusted | github.com/jinzhu/gorm | DB | Exec | +| gorm.go:31:12:31:20 | untrusted | github.com/jinzhu/gorm | DB | Pluck | +| gorm.go:34:12:34:20 | untrusted | gorm.io/gorm | DB | Where | +| gorm.go:35:10:35:18 | untrusted | gorm.io/gorm | DB | Raw | +| gorm.go:36:10:36:18 | untrusted | gorm.io/gorm | DB | Not | +| gorm.go:37:12:37:20 | untrusted | gorm.io/gorm | DB | Order | +| gorm.go:38:9:38:17 | untrusted | gorm.io/gorm | DB | Or | +| gorm.go:39:13:39:21 | untrusted | gorm.io/gorm | DB | Select | +| gorm.go:40:12:40:20 | untrusted | gorm.io/gorm | DB | Table | +| gorm.go:41:12:41:20 | untrusted | gorm.io/gorm | DB | Group | +| gorm.go:42:13:42:21 | untrusted | gorm.io/gorm | DB | Having | +| gorm.go:43:12:43:20 | untrusted | gorm.io/gorm | DB | Joins | +| gorm.go:44:11:44:19 | untrusted | gorm.io/gorm | DB | Exec | +| gorm.go:45:15:45:23 | untrusted | gorm.io/gorm | DB | Distinct | +| gorm.go:46:12:46:20 | untrusted | gorm.io/gorm | DB | Pluck | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.go index 2d736e2407c..bee8edbf7af 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.go @@ -13,35 +13,36 @@ func getUntrustedString() string { } func main() { + untrusted := getUntrustedString() db1 := gorm1.DB{} - db1.Where(untrusted) // $ querystring=untrusted - db1.Raw(untrusted) // $ querystring=untrusted - db1.Not(untrusted) // $ querystring=untrusted - db1.Order(untrusted) // $ querystring=untrusted - db1.Or(untrusted) // $ querystring=untrusted - db1.Select(untrusted) // $ querystring=untrusted - db1.Table(untrusted) // $ querystring=untrusted - db1.Group(untrusted) // $ querystring=untrusted - db1.Having(untrusted) // $ querystring=untrusted - db1.Joins(untrusted) // $ querystring=untrusted - db1.Exec(untrusted) // $ querystring=untrusted - db1.Pluck(untrusted, nil) // $ querystring=untrusted + db1.Where(untrusted) + db1.Raw(untrusted) + db1.Not(untrusted) + db1.Order(untrusted) + db1.Or(untrusted) + db1.Select(untrusted) + db1.Table(untrusted) + db1.Group(untrusted) + db1.Having(untrusted) + db1.Joins(untrusted) + db1.Exec(untrusted) + db1.Pluck(untrusted, nil) db2 := gorm2.DB{} - db2.Where(untrusted) // $ querystring=untrusted - db2.Raw(untrusted) // $ querystring=untrusted - db2.Not(untrusted) // $ querystring=untrusted - db2.Order(untrusted) // $ querystring=untrusted - db2.Or(untrusted) // $ querystring=untrusted - db2.Select(untrusted) // $ querystring=untrusted - db2.Table(untrusted) // $ querystring=untrusted - db2.Group(untrusted) // $ querystring=untrusted - db2.Having(untrusted) // $ querystring=untrusted - db2.Joins(untrusted) // $ querystring=untrusted - db2.Exec(untrusted) // $ querystring=untrusted - db2.Distinct(untrusted) // $ querystring=untrusted - db2.Pluck(untrusted, nil) // $ querystring=untrusted + db2.Where(untrusted) + db2.Raw(untrusted) + db2.Not(untrusted) + db2.Order(untrusted) + db2.Or(untrusted) + db2.Select(untrusted) + db2.Table(untrusted) + db2.Group(untrusted) + db2.Having(untrusted) + db2.Joins(untrusted) + db2.Exec(untrusted) + db2.Distinct(untrusted) + db2.Pluck(untrusted, nil) } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.ql new file mode 100644 index 00000000000..e08b506deaf --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.ql @@ -0,0 +1,5 @@ +import go + +from SQL::QueryString qs, Method meth, string a, string b, string c +where meth.hasQualifiedName(a, b, c) and qs = meth.getACall().getSyntacticArgument(0) +select qs, a, b, c From e7f788ae354116179947ef4a40abf3fd74a32ed7 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:09 +0100 Subject: [PATCH 176/334] Revert "Convert sqlx sql-injection sinks to MaD" This reverts commit 7ad63fc3e6df9c212add21742de11337ff525afc. --- .../lib/ext/github.com.jmoiron.sqlx.model.yml | 17 ------ go/ql/lib/semmle/go/frameworks/SQL.qll | 14 +++++ .../frameworks/SQL/Sqlx/QueryString.expected | 3 - .../go/frameworks/SQL/Sqlx/QueryString.ql | 60 ------------------- .../go/frameworks/SQL/Sqlx/sqlx.expected | 12 ++++ .../semmle/go/frameworks/SQL/Sqlx/sqlx.go | 24 ++++---- .../semmle/go/frameworks/SQL/Sqlx/sqlx.ql | 4 ++ 7 files changed, 42 insertions(+), 92 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.jmoiron.sqlx.model.yml delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.expected delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.ql diff --git a/go/ql/lib/ext/github.com.jmoiron.sqlx.model.yml b/go/ql/lib/ext/github.com.jmoiron.sqlx.model.yml deleted file mode 100644 index 8c9d19b4b85..00000000000 --- a/go/ql/lib/ext/github.com.jmoiron.sqlx.model.yml +++ /dev/null @@ -1,17 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["github.com/jmoiron/sqlx", "DB", True, "Get", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "DB", True, "MustExec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "DB", True, "NamedExec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "DB", True, "NamedQuery", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "DB", True, "Queryx", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "DB", True, "Select", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "Get", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "MustExec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "NamedExec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "NamedQuery", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "Queryx", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/jmoiron/sqlx", "Tx", True, "Select", "", "", "Argument[1]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 0b20797f99b..97539329ab7 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -161,6 +161,20 @@ module SQL { ) } } + + /** A model for sinks of github.com/jmoiron/sqlx. */ + private class SqlxSink extends SQL::QueryString::Range { + SqlxSink() { + exists(Method meth, string name, int n | + meth.hasQualifiedName(package("github.com/jmoiron/sqlx", ""), ["DB", "Tx"], name) and + this = meth.getACall().getArgument(n) + | + name = ["Select", "Get"] and n = 1 + or + name = ["MustExec", "Queryx", "NamedExec", "NamedQuery"] and n = 0 + ) + } + } } /** diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.expected deleted file mode 100644 index db33d6d2504..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.expected +++ /dev/null @@ -1,3 +0,0 @@ -testFailures -invalidModelRow -failures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.ql deleted file mode 100644 index eeb43a82fad..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/QueryString.ql +++ /dev/null @@ -1,60 +0,0 @@ -import go -import semmle.go.dataflow.ExternalFlow -import ModelValidation -import TestUtilities.InlineExpectationsTest - -module SqlTest implements TestSig { - string getARelevantTag() { result = "query" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "query" and - exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | - q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = q.toString() and - value = qs.toString() - ) - } -} - -module QueryString implements TestSig { - string getARelevantTag() { result = "querystring" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "querystring" and - element = "" and - exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | - qs.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - value = qs.toString() - ) - } -} - -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - predicate isSink(DataFlow::Node n) { - n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() - } -} - -module Flow = TaintTracking::Global; - -module TaintFlow implements TestSig { - string getARelevantTag() { result = "flowfrom" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "flowfrom" and - element = "" and - exists(DataFlow::Node fromNode, DataFlow::Node toNode | - toNode - .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - Flow::flow(fromNode, toNode) and - value = fromNode.asExpr().(StringLit).getValue() - ) - } -} - -import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.expected new file mode 100644 index 00000000000..0540a78fb34 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.expected @@ -0,0 +1,12 @@ +| sqlx.go:15:17:15:25 | untrusted | +| sqlx.go:16:14:16:22 | untrusted | +| sqlx.go:17:14:17:22 | untrusted | +| sqlx.go:18:12:18:20 | untrusted | +| sqlx.go:19:15:19:23 | untrusted | +| sqlx.go:20:16:20:24 | untrusted | +| sqlx.go:23:17:23:25 | untrusted | +| sqlx.go:24:14:24:22 | untrusted | +| sqlx.go:25:14:25:22 | untrusted | +| sqlx.go:26:12:26:20 | untrusted | +| sqlx.go:27:15:27:23 | untrusted | +| sqlx.go:28:16:28:24 | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.go index e4e8d43395b..edc29c4d4ee 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.go @@ -12,19 +12,19 @@ func main() { db := sqlx.DB{} untrusted := getUntrustedString() - db.Select(nil, untrusted) // $ querystring=untrusted - db.Get(nil, untrusted) // $ querystring=untrusted - db.MustExec(untrusted) // $ querystring=untrusted - db.Queryx(untrusted) // $ querystring=untrusted - db.NamedExec(untrusted, nil) // $ querystring=untrusted - db.NamedQuery(untrusted, nil) // $ querystring=untrusted + db.Select(nil, untrusted) + db.Get(nil, untrusted) + db.MustExec(untrusted) + db.Queryx(untrusted) + db.NamedExec(untrusted, nil) + db.NamedQuery(untrusted, nil) tx := sqlx.Tx{} - tx.Select(nil, untrusted) // $ querystring=untrusted - tx.Get(nil, untrusted) // $ querystring=untrusted - tx.MustExec(untrusted) // $ querystring=untrusted - tx.Queryx(untrusted) // $ querystring=untrusted - tx.NamedExec(untrusted, nil) // $ querystring=untrusted - tx.NamedQuery(untrusted, nil) // $ querystring=untrusted + tx.Select(nil, untrusted) + tx.Get(nil, untrusted) + tx.MustExec(untrusted) + tx.Queryx(untrusted) + tx.NamedExec(untrusted, nil) + tx.NamedQuery(untrusted, nil) } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.ql new file mode 100644 index 00000000000..7b56fd97441 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/Sqlx/sqlx.ql @@ -0,0 +1,4 @@ +import go + +from SQL::QueryString qs +select qs From 8fc3b00fb96de77278af4bb15f0dfe27f287f718 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:12 +0100 Subject: [PATCH 177/334] Revert "Convert gogf/gf sql-injection sinks to MaD" This reverts commit db559f75b69fceefea0ad9e64a65031182b601af. --- .../github.com.gogf.gf.database.gdb.model.yml | 57 ------------------ go/ql/lib/semmle/go/frameworks/SQL.qll | 43 +++++++++++++ .../frameworks/SQL/gogf/QueryString.expected | 3 - .../go/frameworks/SQL/gogf/QueryString.ql | 60 ------------------- .../go/frameworks/SQL/gogf/gogf.expected | 47 +++++++++++++++ .../semmle/go/frameworks/SQL/gogf/gogf.go | 38 ++++++------ .../semmle/go/frameworks/SQL/gogf/gogf.ql | 4 ++ 7 files changed, 112 insertions(+), 140 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.gogf.gf.database.gdb.model.yml delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.expected delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.ql diff --git a/go/ql/lib/ext/github.com.gogf.gf.database.gdb.model.yml b/go/ql/lib/ext/github.com.gogf.gf.database.gdb.model.yml deleted file mode 100644 index 030656c6eb8..00000000000 --- a/go/ql/lib/ext/github.com.gogf.gf.database.gdb.model.yml +++ /dev/null @@ -1,57 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - # These models are for v1. Some of them hold for v2, but we should model v2 properly. - - ["github.com/gogf/gf/database/gdb", "Core", True, "DoCommit", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "DoExec", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "DoGetAll", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "DoQuery", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "DoPrepare", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetAll", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetArray", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetCount", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetScan", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetStruct", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetStructs", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "GetValue", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Core", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "DoCommit", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "DoExec", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "DoGetAll", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "DoQuery", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "DoPrepare", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetAll", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetArray", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetCount", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetScan", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetStruct", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetStructs", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "GetValue", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "DB", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "DoCommit", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "DoExec", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "DoGetAll", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "DoQuery", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "DoPrepare", "", "", "Argument[2]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "Exec", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetAll", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetArray", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetCount", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetScan", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetStruct", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetStructs", "", "", "Argument[1]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "GetValue", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "Prepare", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["github.com/gogf/gf/database/gdb", "Tx", True, "Raw", "", "", "Argument[0]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 97539329ab7..030a1568ce8 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -81,6 +81,9 @@ module SQL { /** A string that might identify package `go-pg/pg/orm` or a specific version of it. */ private string gopgorm() { result = package("github.com/go-pg/pg", "orm") } + /** A string that might identify package `github.com/gogf/gf/database/gdb` or a specific version of it. */ + private string gogf() { result = package("github.com/gogf/gf", "database/gdb") } + /** * A string argument to an API of `go-pg/pg` that is directly interpreted as SQL without * taking syntactic structure into account. @@ -145,6 +148,46 @@ module SQL { ) } } + + /** + * A string argument to an API of `github.com/gogf/gf/database/gdb`, or a specific version of it, that is directly interpreted as SQL without + * taking syntactic structure into account. + */ + private class GogfQueryString extends Range { + GogfQueryString() { + exists(Method m, string name | m.implements(gogf(), ["DB", "Core", "TX"], name) | + // func (c *Core) Exec(sql string, args ...interface{}) (result sql.Result, err error) + // func (c *Core) GetAll(sql string, args ...interface{}) (Result, error) + // func (c *Core) GetArray(sql string, args ...interface{}) ([]Value, error) + // func (c *Core) GetCount(sql string, args ...interface{}) (int, error) + // func (c *Core) GetOne(sql string, args ...interface{}) (Record, error) + // func (c *Core) GetValue(sql string, args ...interface{}) (Value, error) + // func (c *Core) Prepare(sql string, execOnMaster ...bool) (*Stmt, error) + // func (c *Core) Query(sql string, args ...interface{}) (rows *sql.Rows, err error) + // func (c *Core) Raw(rawSql string, args ...interface{}) *Model + name = + [ + "Query", "Exec", "Prepare", "GetAll", "GetOne", "GetValue", "GetArray", "GetCount", + "Raw" + ] and + this = m.getACall().getArgument(0) + or + // func (c *Core) GetScan(pointer interface{}, sql string, args ...interface{}) error + // func (c *Core) GetStruct(pointer interface{}, sql string, args ...interface{}) error + // func (c *Core) GetStructs(pointer interface{}, sql string, args ...interface{}) error + name = ["GetScan", "GetStruct", "GetStructs"] and + this = m.getACall().getArgument(1) + or + // func (c *Core) DoCommit(ctx context.Context, link Link, sql string, args []interface{}) (newSql string, newArgs []interface{}, err error) + // func (c *Core) DoExec(ctx context.Context, link Link, sql string, args ...interface{}) (result sql.Result, err error) + // func (c *Core) DoGetAll(ctx context.Context, link Link, sql string, args ...interface{}) (result Result, err error) + // func (c *Core) DoPrepare(ctx context.Context, link Link, sql string) (*Stmt, error) + // func (c *Core) DoQuery(ctx context.Context, link Link, sql string, args ...interface{}) (rows *sql.Rows, err error) + name = ["DoGetAll", "DoQuery", "DoExec", "DoCommit", "DoPrepare"] and + this = m.getACall().getArgument(2) + ) + } + } } /** A model for sinks of GORM. */ diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.expected deleted file mode 100644 index db33d6d2504..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.expected +++ /dev/null @@ -1,3 +0,0 @@ -testFailures -invalidModelRow -failures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.ql deleted file mode 100644 index eeb43a82fad..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/QueryString.ql +++ /dev/null @@ -1,60 +0,0 @@ -import go -import semmle.go.dataflow.ExternalFlow -import ModelValidation -import TestUtilities.InlineExpectationsTest - -module SqlTest implements TestSig { - string getARelevantTag() { result = "query" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "query" and - exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | - q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = q.toString() and - value = qs.toString() - ) - } -} - -module QueryString implements TestSig { - string getARelevantTag() { result = "querystring" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "querystring" and - element = "" and - exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | - qs.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - value = qs.toString() - ) - } -} - -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - predicate isSink(DataFlow::Node n) { - n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() - } -} - -module Flow = TaintTracking::Global; - -module TaintFlow implements TestSig { - string getARelevantTag() { result = "flowfrom" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "flowfrom" and - element = "" and - exists(DataFlow::Node fromNode, DataFlow::Node toNode | - toNode - .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - Flow::flow(fromNode, toNode) and - value = fromNode.asExpr().(StringLit).getValue() - ) - } -} - -import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.expected new file mode 100644 index 00000000000..f4e3e4f15b0 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.expected @@ -0,0 +1,47 @@ +| gogf.go:12:9:12:11 | sql | +| gogf.go:13:11:13:13 | sql | +| gogf.go:14:13:14:15 | sql | +| gogf.go:15:13:15:15 | sql | +| gogf.go:16:11:16:13 | sql | +| gogf.go:17:13:17:15 | sql | +| gogf.go:18:12:18:14 | sql | +| gogf.go:19:10:19:12 | sql | +| gogf.go:20:8:20:10 | sql | +| gogf.go:21:17:21:19 | sql | +| gogf.go:22:19:22:21 | sql | +| gogf.go:23:20:23:22 | sql | +| gogf.go:24:23:24:25 | sql | +| gogf.go:25:21:25:23 | sql | +| gogf.go:26:23:26:25 | sql | +| gogf.go:27:22:27:24 | sql | +| gogf.go:28:24:28:26 | sql | +| gogf.go:32:9:32:11 | sql | +| gogf.go:33:11:33:13 | sql | +| gogf.go:34:13:34:15 | sql | +| gogf.go:35:13:35:15 | sql | +| gogf.go:36:11:36:13 | sql | +| gogf.go:37:13:37:15 | sql | +| gogf.go:38:12:38:14 | sql | +| gogf.go:39:10:39:12 | sql | +| gogf.go:40:8:40:10 | sql | +| gogf.go:41:17:41:19 | sql | +| gogf.go:42:23:42:25 | sql | +| gogf.go:43:21:43:23 | sql | +| gogf.go:44:23:44:25 | sql | +| gogf.go:45:22:45:24 | sql | +| gogf.go:46:24:46:26 | sql | +| gogf.go:51:9:51:11 | sql | +| gogf.go:52:11:52:13 | sql | +| gogf.go:53:13:53:15 | sql | +| gogf.go:54:13:54:15 | sql | +| gogf.go:55:11:55:13 | sql | +| gogf.go:56:13:56:15 | sql | +| gogf.go:57:12:57:14 | sql | +| gogf.go:58:10:58:12 | sql | +| gogf.go:59:8:59:10 | sql | +| gogf.go:60:17:60:19 | sql | +| gogf.go:61:23:61:25 | sql | +| gogf.go:62:21:62:23 | sql | +| gogf.go:63:23:63:25 | sql | +| gogf.go:64:22:64:24 | sql | +| gogf.go:65:24:65:26 | sql | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.go index e2db8016cf0..d0eceaf862c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.go @@ -4,13 +4,11 @@ package main //go:generate depstubber -vendor github.com/gogf/gf/database/gdb DB,Core,TX "" import ( - "context" - "github.com/gogf/gf/database/gdb" "github.com/gogf/gf/frame/g" ) -func gogfCoreTest(sql string, c *gdb.Core, ctx context.Context) { +func gogfCoreTest(sql string, c *gdb.Core) { c.Exec(sql, nil) // $ querystring=sql c.GetAll(sql, nil) // $ querystring=sql c.GetArray(sql, nil) // $ querystring=sql @@ -23,14 +21,14 @@ func gogfCoreTest(sql string, c *gdb.Core, ctx context.Context) { c.GetScan(nil, sql, nil) // $ querystring=sql c.GetStruct(nil, sql, nil) // $ querystring=sql c.GetStructs(nil, sql, nil) // $ querystring=sql - c.DoCommit(ctx, nil, sql, nil) // $ querystring=sql - c.DoExec(ctx, nil, sql, nil) // $ querystring=sql - c.DoGetAll(ctx, nil, sql, nil) // $ querystring=sql - c.DoQuery(ctx, nil, sql, nil) // $ querystring=sql - c.DoPrepare(ctx, nil, sql) // $ querystring=sql + c.DoCommit(nil, nil, sql, nil) // $ querystring=sql + c.DoExec(nil, nil, sql, nil) // $ querystring=sql + c.DoGetAll(nil, nil, sql, nil) // $ querystring=sql + c.DoQuery(nil, nil, sql, nil) // $ querystring=sql + c.DoPrepare(nil, nil, sql) // $ querystring=sql } -func gogfDbtest(sql string, c gdb.DB, ctx context.Context) { +func gogfDbtest(sql string, c gdb.DB) { c.Exec(sql, nil) // $ querystring=sql c.GetAll(sql, nil) // $ querystring=sql c.GetArray(sql, nil) // $ querystring=sql @@ -41,14 +39,14 @@ func gogfDbtest(sql string, c gdb.DB, ctx context.Context) { c.Query(sql, nil) // $ querystring=sql c.Raw(sql, nil) // $ querystring=sql c.GetScan(nil, sql, nil) // $ querystring=sql - c.DoCommit(ctx, nil, sql, nil) // $ querystring=sql - c.DoExec(ctx, nil, sql, nil) // $ querystring=sql - c.DoGetAll(ctx, nil, sql, nil) // $ querystring=sql - c.DoQuery(ctx, nil, sql, nil) // $ querystring=sql - c.DoPrepare(ctx, nil, sql) // $ querystring=sql + c.DoCommit(nil, nil, sql, nil) // $ querystring=sql + c.DoExec(nil, nil, sql, nil) // $ querystring=sql + c.DoGetAll(nil, nil, sql, nil) // $ querystring=sql + c.DoQuery(nil, nil, sql, nil) // $ querystring=sql + c.DoPrepare(nil, nil, sql) // $ querystring=sql } -func gogfGTest(sql string, ctx context.Context) { +func gogfGTest(sql string) { c := g.DB("ad") c.Exec(sql, nil) // $ querystring=sql c.GetAll(sql, nil) // $ querystring=sql @@ -60,11 +58,11 @@ func gogfGTest(sql string, ctx context.Context) { c.Query(sql, nil) // $ querystring=sql c.Raw(sql, nil) // $ querystring=sql c.GetScan(nil, sql, nil) // $ querystring=sql - c.DoCommit(ctx, nil, sql, nil) // $ querystring=sql - c.DoExec(ctx, nil, sql, nil) // $ querystring=sql - c.DoGetAll(ctx, nil, sql, nil) // $ querystring=sql - c.DoQuery(ctx, nil, sql, nil) // $ querystring=sql - c.DoPrepare(ctx, nil, sql) // $ querystring=sql + c.DoCommit(nil, nil, sql, nil) // $ querystring=sql + c.DoExec(nil, nil, sql, nil) // $ querystring=sql + c.DoGetAll(nil, nil, sql, nil) // $ querystring=sql + c.DoQuery(nil, nil, sql, nil) // $ querystring=sql + c.DoPrepare(nil, nil, sql) // $ querystring=sql } func main() { diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.ql new file mode 100644 index 00000000000..7b56fd97441 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gogf/gogf.ql @@ -0,0 +1,4 @@ +import go + +from SQL::QueryString qs +select qs From ab88b9b136bc6d29bb730d68e6db27573093e65f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:43:15 +0100 Subject: [PATCH 178/334] Revert "Upgrade and convert gorqlite sql-injection sinks to MaD" This reverts commit ce0cb12c2933ade4d3e7776342180b56ee5e8cd4. --- .../ext/github.com.rqlite.gorqlite.model.yml | 35 ------ go/ql/lib/semmle/go/frameworks/SQL.qll | 24 ++++ .../SQL/gorqlite/QueryString.expected | 3 - .../go/frameworks/SQL/gorqlite/QueryString.ql | 60 --------- .../semmle/go/frameworks/SQL/gorqlite/go.mod | 2 +- .../frameworks/SQL/gorqlite/gorqlite.expected | 6 + .../go/frameworks/SQL/gorqlite/gorqlite.go | 39 +----- .../go/frameworks/SQL/gorqlite/gorqlite.ql | 4 + .../vendor/github.com/rqlite/gorqlite/stub.go | 115 +----------------- .../SQL/gorqlite/vendor/modules.txt | 2 +- 10 files changed, 45 insertions(+), 245 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.rqlite.gorqlite.model.yml delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.expected delete mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.ql diff --git a/go/ql/lib/ext/github.com.rqlite.gorqlite.model.yml b/go/ql/lib/ext/github.com.rqlite.gorqlite.model.yml deleted file mode 100644 index 62e24f2c920..00000000000 --- a/go/ql/lib/ext/github.com.rqlite.gorqlite.model.yml +++ /dev/null @@ -1,35 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["gorqlite", "github.com/rqlite/gorqlite"] - - ["gorqlite", "github.com/raindog308/gorqlite"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:gorqlite", "Connection", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryOneContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryOneParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryOneParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueryParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "Queue", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueOneContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueOneParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueOneParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "QueueParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "Write", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteOne", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteOneContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteOneParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteOneParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteParameterized", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:gorqlite", "Connection", True, "WriteParameterizedContext", "", "", "Argument[1]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 030a1568ce8..0100d5de209 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -81,6 +81,11 @@ module SQL { /** A string that might identify package `go-pg/pg/orm` or a specific version of it. */ private string gopgorm() { result = package("github.com/go-pg/pg", "orm") } + /** A string that might identify package `github.com/rqlite/gorqlite` or `github.com/raindog308/gorqlite` or a specific version of it. */ + private string gorqlite() { + result = package(["github.com/rqlite/gorqlite", "github.com/raindog308/gorqlite"], "") + } + /** A string that might identify package `github.com/gogf/gf/database/gdb` or a specific version of it. */ private string gogf() { result = package("github.com/gogf/gf", "database/gdb") } @@ -149,6 +154,25 @@ module SQL { } } + /** + * A string argument to an API of `github.com/rqlite/gorqlite`, or a specific version of it, that is directly interpreted as SQL without + * taking syntactic structure into account. + */ + private class GorqliteQueryString extends Range { + GorqliteQueryString() { + // func (conn *Connection) Query(sqlStatements []string) (results []QueryResult, err error) + // func (conn *Connection) QueryOne(sqlStatement string) (qr QueryResult, err error) + // func (conn *Connection) Queue(sqlStatements []string) (seq int64, err error) + // func (conn *Connection) QueueOne(sqlStatement string) (seq int64, err error) + // func (conn *Connection) Write(sqlStatements []string) (results []WriteResult, err error) + // func (conn *Connection) WriteOne(sqlStatement string) (wr WriteResult, err error) + exists(Method m, string name | m.hasQualifiedName(gorqlite(), "Connection", name) | + name = ["Query", "QueryOne", "Queue", "QueueOne", "Write", "WriteOne"] and + this = m.getACall().getArgument(0) + ) + } + } + /** * A string argument to an API of `github.com/gogf/gf/database/gdb`, or a specific version of it, that is directly interpreted as SQL without * taking syntactic structure into account. diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.expected deleted file mode 100644 index db33d6d2504..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.expected +++ /dev/null @@ -1,3 +0,0 @@ -testFailures -invalidModelRow -failures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.ql deleted file mode 100644 index eeb43a82fad..00000000000 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/QueryString.ql +++ /dev/null @@ -1,60 +0,0 @@ -import go -import semmle.go.dataflow.ExternalFlow -import ModelValidation -import TestUtilities.InlineExpectationsTest - -module SqlTest implements TestSig { - string getARelevantTag() { result = "query" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "query" and - exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | - q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = q.toString() and - value = qs.toString() - ) - } -} - -module QueryString implements TestSig { - string getARelevantTag() { result = "querystring" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "querystring" and - element = "" and - exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | - qs.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - value = qs.toString() - ) - } -} - -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - predicate isSink(DataFlow::Node n) { - n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() - } -} - -module Flow = TaintTracking::Global; - -module TaintFlow implements TestSig { - string getARelevantTag() { result = "flowfrom" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "flowfrom" and - element = "" and - exists(DataFlow::Node fromNode, DataFlow::Node toNode | - toNode - .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - Flow::flow(fromNode, toNode) and - value = fromNode.asExpr().(StringLit).getValue() - ) - } -} - -import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/go.mod b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/go.mod index 826ed0eb1c0..1f243775658 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/go.mod +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/go.mod @@ -2,4 +2,4 @@ module main go 1.18 -require github.com/rqlite/gorqlite v0.0.0-20240808172217-12ae7d03ef19 +require github.com/rqlite/gorqlite v0.0.0-20220528150909-c4e99ae96be6 diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.expected new file mode 100644 index 00000000000..cbd8166ea5e --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.expected @@ -0,0 +1,6 @@ +| gorqlite.go:11:13:11:16 | sqls | +| gorqlite.go:12:13:12:16 | sqls | +| gorqlite.go:13:13:13:16 | sqls | +| gorqlite.go:14:16:14:18 | sql | +| gorqlite.go:15:16:15:18 | sql | +| gorqlite.go:16:16:16:18 | sql | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.go index ebd6e5fd9f3..9b60c6684e6 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.go @@ -1,49 +1,20 @@ package main -//go:generate depstubber -vendor github.com/rqlite/gorqlite Connection,ParameterizedStatement Open +//go:generate depstubber -vendor github.com/rqlite/gorqlite Connection Open import ( - "context" - "github.com/rqlite/gorqlite" ) -func gorqlitetest(sql string, sqls []string, param_sql gorqlite.ParameterizedStatement, param_sqls []gorqlite.ParameterizedStatement, ctx context.Context) { +func gorqlitetest(sql string, sqls []string) { conn, _ := gorqlite.Open("dbUrl") - - conn.Query(sqls) // $ querystring=sqls - conn.Queue(sqls) // $ querystring=sqls - conn.Write(sqls) // $ querystring=sqls - + conn.Query(sqls) // $ querystring=sqls + conn.Queue(sqls) // $ querystring=sqls + conn.Write(sqls) // $ querystring=sqls conn.QueryOne(sql) // $ querystring=sql conn.QueueOne(sql) // $ querystring=sql conn.WriteOne(sql) // $ querystring=sql - - conn.QueryParameterized(param_sqls) // $ querystring=param_sqls - conn.QueueParameterized(param_sqls) // $ querystring=param_sqls - conn.WriteParameterized(param_sqls) // $ querystring=param_sqls - - conn.QueryOneParameterized(param_sql) // $ querystring=param_sql - conn.QueueOneParameterized(param_sql) // $ querystring=param_sql - conn.WriteOneParameterized(param_sql) // $ querystring=param_sql - - conn.QueryContext(ctx, sqls) // $ querystring=sqls - conn.QueueContext(ctx, sqls) // $ querystring=sqls - conn.WriteContext(ctx, sqls) // $ querystring=sqls - - conn.QueryOneContext(ctx, sql) // $ querystring=sql - conn.QueueOneContext(ctx, sql) // $ querystring=sql - conn.WriteOneContext(ctx, sql) // $ querystring=sql - - conn.QueryParameterizedContext(ctx, param_sqls) // $ querystring=param_sqls - conn.QueueParameterizedContext(ctx, param_sqls) // $ querystring=param_sqls - conn.WriteParameterizedContext(ctx, param_sqls) // $ querystring=param_sqls - - conn.QueryOneParameterizedContext(ctx, param_sql) // $ querystring=param_sql - conn.QueueOneParameterizedContext(ctx, param_sql) // $ querystring=param_sql - conn.WriteOneParameterizedContext(ctx, param_sql) // $ querystring=param_sql } - func main() { return } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.ql new file mode 100644 index 00000000000..7b56fd97441 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/gorqlite.ql @@ -0,0 +1,4 @@ +import go + +from SQL::QueryString qs +select qs diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/github.com/rqlite/gorqlite/stub.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/github.com/rqlite/gorqlite/stub.go index 0572097582e..f6f4ca18ec1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/github.com/rqlite/gorqlite/stub.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/github.com/rqlite/gorqlite/stub.go @@ -2,15 +2,11 @@ // This is a simple stub for github.com/rqlite/gorqlite, strictly for use in testing. // See the LICENSE file for information about the licensing of the original library. -// Source: github.com/rqlite/gorqlite (exports: Connection,ParameterizedStatement; functions: Open) +// Source: github.com/rqlite/gorqlite (exports: Connection; functions: Open) // Package gorqlite is a stub of github.com/rqlite/gorqlite, generated by depstubber. package gorqlite -import ( - context "context" -) - type Connection struct { ID string } @@ -33,83 +29,19 @@ func (_ *Connection) Query(_ []string) ([]QueryResult, error) { return nil, nil } -func (_ *Connection) QueryContext(_ context.Context, _ []string) ([]QueryResult, error) { - return nil, nil -} - func (_ *Connection) QueryOne(_ string) (QueryResult, error) { return QueryResult{}, nil } -func (_ *Connection) QueryOneContext(_ context.Context, _ string) (QueryResult, error) { - return QueryResult{}, nil -} - -func (_ *Connection) QueryOneParameterized(_ ParameterizedStatement) (QueryResult, error) { - return QueryResult{}, nil -} - -func (_ *Connection) QueryOneParameterizedContext(_ context.Context, _ ParameterizedStatement) (QueryResult, error) { - return QueryResult{}, nil -} - -func (_ *Connection) QueryParameterized(_ []ParameterizedStatement) ([]QueryResult, error) { - return nil, nil -} - -func (_ *Connection) QueryParameterizedContext(_ context.Context, _ []ParameterizedStatement) ([]QueryResult, error) { - return nil, nil -} - func (_ *Connection) Queue(_ []string) (int64, error) { return 0, nil } -func (_ *Connection) QueueContext(_ context.Context, _ []string) (int64, error) { - return 0, nil -} - func (_ *Connection) QueueOne(_ string) (int64, error) { return 0, nil } -func (_ *Connection) QueueOneContext(_ context.Context, _ string) (int64, error) { - return 0, nil -} - -func (_ *Connection) QueueOneParameterized(_ ParameterizedStatement) (int64, error) { - return 0, nil -} - -func (_ *Connection) QueueOneParameterizedContext(_ context.Context, _ ParameterizedStatement) (int64, error) { - return 0, nil -} - -func (_ *Connection) QueueParameterized(_ []ParameterizedStatement) (int64, error) { - return 0, nil -} - -func (_ *Connection) QueueParameterizedContext(_ context.Context, _ []ParameterizedStatement) (int64, error) { - return 0, nil -} - -func (_ *Connection) Request(_ []string) ([]RequestResult, error) { - return nil, nil -} - -func (_ *Connection) RequestContext(_ context.Context, _ []string) ([]RequestResult, error) { - return nil, nil -} - -func (_ *Connection) RequestParameterized(_ []ParameterizedStatement) ([]RequestResult, error) { - return nil, nil -} - -func (_ *Connection) RequestParameterizedContext(_ context.Context, _ []ParameterizedStatement) ([]RequestResult, error) { - return nil, nil -} - -func (_ *Connection) SetConsistencyLevel(_ interface{}) error { +func (_ *Connection) SetConsistencyLevel(_ string) error { return nil } @@ -121,41 +53,12 @@ func (_ *Connection) Write(_ []string) ([]WriteResult, error) { return nil, nil } -func (_ *Connection) WriteContext(_ context.Context, _ []string) ([]WriteResult, error) { - return nil, nil -} - func (_ *Connection) WriteOne(_ string) (WriteResult, error) { return WriteResult{}, nil } -func (_ *Connection) WriteOneContext(_ context.Context, _ string) (WriteResult, error) { - return WriteResult{}, nil -} - -func (_ *Connection) WriteOneParameterized(_ ParameterizedStatement) (WriteResult, error) { - return WriteResult{}, nil -} - -func (_ *Connection) WriteOneParameterizedContext(_ context.Context, _ ParameterizedStatement) (WriteResult, error) { - return WriteResult{}, nil -} - -func (_ *Connection) WriteParameterized(_ []ParameterizedStatement) ([]WriteResult, error) { - return nil, nil -} - -func (_ *Connection) WriteParameterizedContext(_ context.Context, _ []ParameterizedStatement) ([]WriteResult, error) { - return nil, nil -} - -func Open(_ string) (*Connection, error) { - return nil, nil -} - -type ParameterizedStatement struct { - Query string - Arguments []interface{} +func Open(_ string) (Connection, error) { + return Connection{}, nil } type QueryResult struct { @@ -187,20 +90,10 @@ func (_ *QueryResult) Scan(_ ...interface{}) error { return nil } -func (_ *QueryResult) Slice() ([]interface{}, error) { - return nil, nil -} - func (_ *QueryResult) Types() []string { return nil } -type RequestResult struct { - Err error - Query *QueryResult - Write *WriteResult -} - type WriteResult struct { Err error Timing float64 diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/modules.txt b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/modules.txt index dafb7c6d1a9..f5e5b9989ed 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/modules.txt +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/gorqlite/vendor/modules.txt @@ -1,3 +1,3 @@ -# github.com/rqlite/gorqlite v0.0.0-20240808172217-12ae7d03ef19 +# github.com/rqlite/gorqlite v0.0.0-20220528150909-c4e99ae96be6 ## explicit github.com/rqlite/gorqlite From a832730a1155ebee1a28bcf6f5b25d9310cb4061 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:44:40 +0100 Subject: [PATCH 179/334] Revert "Convert squirrel sql-injection sinks to MaD (non-existent methods removed)" This reverts commit 06f86dd22f33185c817cdc5127aba859ec65d05d. --- .../github.com.mastermind.squirrel.model.yml | 51 ------------------- go/ql/lib/semmle/go/frameworks/SQL.qll | 40 +++++++++++++-- .../semmle/go/frameworks/SQL/squirrel.go | 18 +++---- 3 files changed, 45 insertions(+), 64 deletions(-) delete mode 100644 go/ql/lib/ext/github.com.mastermind.squirrel.model.yml diff --git a/go/ql/lib/ext/github.com.mastermind.squirrel.model.yml b/go/ql/lib/ext/github.com.mastermind.squirrel.model.yml deleted file mode 100644 index a5f46d7c214..00000000000 --- a/go/ql/lib/ext/github.com.mastermind.squirrel.model.yml +++ /dev/null @@ -1,51 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: packageGrouping - data: - - ["squirrel", "github.com/Masterminds/squirrel"] - - ["squirrel", "gopkg.in/Masterminds/squirrel"] - - ["squirrel", "github.com/lann/squirrel"] - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["group:squirrel", "", True, "Delete", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "", True, "Expr", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "", True, "Insert", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "", True, "Select", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "", True, "Update", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - - ["group:squirrel", "DeleteBuilder", True, "From", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "DeleteBuilder", True, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "DeleteBuilder", True, "Prefix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "DeleteBuilder", True, "Suffix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "DeleteBuilder", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - - ["group:squirrel", "InsertBuilder", True, "Columns", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "InsertBuilder", True, "Into", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "InsertBuilder", True, "Options", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "InsertBuilder", True, "Prefix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "InsertBuilder", True, "Suffix", "", "", "Argument[0]", "sql-injection", "manual"] - - - ["group:squirrel", "SelectBuilder", True, "CrossJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "Column", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "Columns", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "SelectBuilder", True, "From", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "GroupBy", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "InnerJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "LeftJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "Options", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "SelectBuilder", True, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "SelectBuilder", True, "Prefix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "RightJoin", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "Suffix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "SelectBuilder", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] - - - ["group:squirrel", "UpdateBuilder", True, "From", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "UpdateBuilder", True, "OrderBy", "", "", "Argument[0]", "sql-injection", "manual"] # TODO: when sources can have access paths, use .ArrayElement - - ["group:squirrel", "UpdateBuilder", True, "Prefix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "UpdateBuilder", True, "Set", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "UpdateBuilder", True, "Suffix", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "UpdateBuilder", True, "Table", "", "", "Argument[0]", "sql-injection", "manual"] - - ["group:squirrel", "UpdateBuilder", True, "Where", "", "", "Argument[0]", "sql-injection", "manual"] diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 0100d5de209..1a6e2280781 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -67,10 +67,42 @@ module SQL { */ abstract class Range extends DataFlow::Node { } - private class DefaultQueryString extends Range { - DefaultQueryString() { - exists(DataFlow::ArgumentNode arg | sinkNode(arg, "sql-injection") | - this = arg.getACorrespondingSyntacticArgument() + /** + * An argument to an API of the squirrel library that is directly interpreted as SQL without + * taking syntactic structure into account. + */ + private class SquirrelQueryString extends Range { + SquirrelQueryString() { + exists(Function fn | + exists(string sq | + sq = + package([ + "github.com/Masterminds/squirrel", "gopkg.in/Masterminds/squirrel", + "github.com/lann/squirrel" + ], "") + | + fn.hasQualifiedName(sq, ["Delete", "Expr", "Insert", "Select", "Update"]) + or + exists(Method m, string builder | m = fn | + builder = ["DeleteBuilder", "InsertBuilder", "SelectBuilder", "UpdateBuilder"] and + m.hasQualifiedName(sq, builder, + ["Columns", "From", "Options", "OrderBy", "Prefix", "Suffix", "Where"]) + or + builder = "InsertBuilder" and + m.hasQualifiedName(sq, builder, ["Replace", "Into"]) + or + builder = "SelectBuilder" and + m.hasQualifiedName(sq, builder, + ["CrossJoin", "GroupBy", "InnerJoin", "LeftJoin", "RightJoin"]) + or + builder = "UpdateBuilder" and + m.hasQualifiedName(sq, builder, ["Set", "Table"]) + ) + ) and + this = fn.getACall().getArgument(0) + | + this.getType().getUnderlyingType() instanceof StringType or + this.getType().getUnderlyingType().(SliceType).getElementType() instanceof StringType ) } } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/squirrel.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/squirrel.go index 3629b8087cb..15b687c7ad1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/squirrel.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/squirrel.go @@ -10,35 +10,35 @@ func squirrelTest(querypart string) { squirrel.Expr(querypart) // $ querystring=querypart deleteBuilder := squirrel.Delete(querypart) // $ querystring=querypart deleteBuilder.From(querypart) // $ querystring=querypart - deleteBuilder.OrderBy(querypart) // $ querystring=querypart + deleteBuilder.OrderBy(querypart) // $ querystring=[]type{args} deleteBuilder.Prefix(querypart) // $ querystring=querypart deleteBuilder.Suffix(querypart) // $ querystring=querypart deleteBuilder.Where(querypart) // $ querystring=querypart insertBuilder := squirrel.Insert(querypart) // $ querystring=querypart - insertBuilder.Columns(querypart) // $ querystring=querypart - insertBuilder.Options(querypart) // $ querystring=querypart + insertBuilder.Columns(querypart) // $ querystring=[]type{args} + insertBuilder.Options(querypart) // $ querystring=[]type{args} insertBuilder.Prefix(querypart) // $ querystring=querypart insertBuilder.Suffix(querypart) // $ querystring=querypart insertBuilder.Into(querypart) // $ querystring=querypart - selectBuilder := squirrel.Select(querypart) // $ querystring=querypart - selectBuilder.Columns(querypart) // $ querystring=querypart + selectBuilder := squirrel.Select(querypart) // $ querystring=[]type{args} + selectBuilder.Columns(querypart) // $ querystring=[]type{args} selectBuilder.From(querypart) // $ querystring=querypart - selectBuilder.Options(querypart) // $ querystring=querypart - selectBuilder.OrderBy(querypart) // $ querystring=querypart + selectBuilder.Options(querypart) // $ querystring=[]type{args} + selectBuilder.OrderBy(querypart) // $ querystring=[]type{args} selectBuilder.Prefix(querypart) // $ querystring=querypart selectBuilder.Suffix(querypart) // $ querystring=querypart selectBuilder.Where(querypart) // $ querystring=querypart selectBuilder.CrossJoin(querypart) // $ querystring=querypart - selectBuilder.GroupBy(querypart) // $ querystring=querypart + selectBuilder.GroupBy(querypart) // $ querystring=[]type{args} selectBuilder.InnerJoin(querypart) // $ querystring=querypart selectBuilder.LeftJoin(querypart) // $ querystring=querypart selectBuilder.RightJoin(querypart) // $ querystring=querypart updateBuilder := squirrel.Update(querypart) // $ querystring=querypart updateBuilder.From(querypart) // $ querystring=querypart - updateBuilder.OrderBy(querypart) // $ querystring=querypart + updateBuilder.OrderBy(querypart) // $ querystring=[]type{args} updateBuilder.Prefix(querypart) // $ querystring=querypart updateBuilder.Suffix(querypart) // $ querystring=querypart updateBuilder.Where(querypart) // $ querystring=querypart From 7cb67a50be69d11da5d618f5107a2873c72210c7 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 24 Aug 2024 17:49:26 +0100 Subject: [PATCH 180/334] Add change note for ioutil fix --- go/ql/lib/change-notes/2024-08-24-ioutil-fix.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-08-24-ioutil-fix.md diff --git a/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md b/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md new file mode 100644 index 00000000000..68e480fd35a --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md @@ -0,0 +1,5 @@ +--- +category: fix +--- +* Fixed an issue where `io/ioutil.WriteFile`'s non-path arguments incorrectly generated `go/path-injection` alerts when untrusted data was written to a file, or controlled the file's mode. + From c92c96fa788e57fcc47f9010ddfb75b3ff0f3374 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 12 Jul 2024 14:02:54 +0200 Subject: [PATCH 181/334] Data flow: Compute local big step relation per stage --- .../MemoryFreed/UseAfterFree.expected | 1 - .../semmle/tainted/ArithmeticTainted.expected | 2 - .../CWE-338/InsecureRandomness.expected | 2 - .../CWE-1004/CookieWithoutHttpOnly.expected | 55 -- .../CWE-74/DsnInjectionLocal.expected | 1 - .../frameworks/Twirp/RequestForgery.expected | 1 - .../frameworks/XNetHtml/ReflectedXss.expected | 4 - .../Security/CWE-078/StoredCommand.expected | 1 - .../Security/CWE-079/StoredXss.expected | 1 - .../django-orm/ReflectedXss.expected | 1 - .../CodeInjection/CodeInjection.expected | 3 - .../codeql/dataflow/internal/DataFlowImpl.qll | 504 +++++++++--------- .../dataflow/internal/DataFlowImplCommon.qll | 18 +- .../CWE-078/CommandInjection.expected | 14 - 14 files changed, 246 insertions(+), 362 deletions(-) diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected index 05fdfd7f035..891141f56f1 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected @@ -16,7 +16,6 @@ edges | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:153:5:153:5 | a | provenance | | | test_free.cpp:233:14:233:15 | pointer to free output argument | test_free.cpp:234:9:234:11 | *... ++ | provenance | | | test_free.cpp:234:9:234:11 | *... ++ | test_free.cpp:236:9:236:10 | * ... | provenance | | -| test_free.cpp:238:15:238:17 | *... ++ | test_free.cpp:238:15:238:17 | *... ++ | provenance | | | test_free.cpp:238:15:238:17 | *... ++ | test_free.cpp:241:9:241:10 | * ... | provenance | | | test_free.cpp:239:14:239:15 | pointer to free output argument | test_free.cpp:238:15:238:17 | *... ++ | provenance | | | test_free.cpp:245:10:245:11 | pointer to free output argument | test_free.cpp:246:9:246:10 | * ... | provenance | | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index b6e6310b779..c60b26aae40 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -22,11 +22,9 @@ edges | test.c:41:5:41:24 | ... = ... | test.c:44:7:44:10 | len2 | provenance | | | test.c:41:5:41:24 | ... = ... | test.c:44:7:44:12 | ... -- | provenance | | | test.c:44:7:44:12 | ... -- | test.c:44:7:44:10 | len2 | provenance | | -| test.c:44:7:44:12 | ... -- | test.c:44:7:44:12 | ... -- | provenance | | | test.c:51:5:51:24 | ... = ... | test.c:54:7:54:10 | len3 | provenance | | | test.c:51:5:51:24 | ... = ... | test.c:54:7:54:12 | ... -- | provenance | | | test.c:54:7:54:12 | ... -- | test.c:54:7:54:10 | len3 | provenance | | -| test.c:54:7:54:12 | ... -- | test.c:54:7:54:12 | ... -- | provenance | | nodes | test2.cpp:12:21:12:21 | v | semmle.label | v | | test2.cpp:14:11:14:11 | v | semmle.label | v | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected index ab87d7c7254..f1cb229f93a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected @@ -12,13 +12,11 @@ edges | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | provenance | MaD:1 | | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | provenance | MaD:3 | | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | provenance | | -| InsecureRandomness.cs:60:13:60:18 | access to local variable result : String | InsecureRandomness.cs:60:13:60:18 | access to local variable result : String | provenance | | | InsecureRandomness.cs:60:13:60:18 | access to local variable result : String | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | provenance | | | InsecureRandomness.cs:60:23:60:40 | access to array element : String | InsecureRandomness.cs:60:13:60:18 | access to local variable result : String | provenance | | | InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:60:23:60:40 | access to array element : String | provenance | Config | | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | provenance | MaD:4 | | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | provenance | | -| InsecureRandomness.cs:72:13:72:18 | access to local variable result : String | InsecureRandomness.cs:72:13:72:18 | access to local variable result : String | provenance | | | InsecureRandomness.cs:72:13:72:18 | access to local variable result : String | InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | provenance | | | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | InsecureRandomness.cs:72:13:72:18 | access to local variable result : String | provenance | | | InsecureRandomness.cs:72:31:72:39 | call to method Next : Int32 | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | provenance | Config | diff --git a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected index ee50d6a6e07..467f08e74e6 100644 --- a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected +++ b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected @@ -3,8 +3,6 @@ edges | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | | CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | | CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | @@ -18,10 +16,6 @@ edges | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | @@ -40,10 +34,6 @@ edges | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | @@ -62,10 +52,6 @@ edges | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | @@ -84,10 +70,6 @@ edges | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | @@ -108,10 +90,6 @@ edges | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | @@ -132,10 +110,6 @@ edges | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | @@ -156,10 +130,6 @@ edges | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | @@ -180,10 +150,6 @@ edges | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | @@ -198,8 +164,6 @@ edges | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | | CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | | CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | @@ -214,10 +178,6 @@ edges | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | @@ -237,10 +197,6 @@ edges | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | @@ -292,8 +248,6 @@ edges | CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | @@ -316,7 +270,6 @@ edges | CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | Config | | CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | Config | | CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | | CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | @@ -336,7 +289,6 @@ edges | CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | | CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | @@ -348,7 +300,6 @@ edges | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | | CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | Config | | CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | | CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | | CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | | CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | @@ -371,8 +322,6 @@ edges | CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | @@ -395,7 +344,6 @@ edges | CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | Config | | CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | Config | | CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | | CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | @@ -421,8 +369,6 @@ edges | CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | @@ -445,7 +391,6 @@ edges | CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | Config | | CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | Config | | CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | | CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | diff --git a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected index a9d713d9392..7b433794a6c 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected @@ -11,7 +11,6 @@ edges | Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | | Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | provenance | | | Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | provenance | | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | | Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | | Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | provenance | | | Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | provenance | FunctionModel | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index ac8a66d1e2a..93ad219ccfc 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -2,7 +2,6 @@ | server/main.go:30:38:30:48 | selection of Text | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | user-provided value | | server/main.go:30:38:30:48 | selection of Text | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | server/main.go:19:56:19:61 | definition of params | user-provided value | edges -| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | provenance | | | client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected index cc487a014a0..7cd78374940 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected @@ -50,8 +50,6 @@ edges | test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | provenance | | | test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | Src:MaD:15 MaD:3 | | test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | MaD:8 | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | | test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | provenance | | | test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | | test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | @@ -63,8 +61,6 @@ edges | test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | provenance | | | test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | Src:MaD:15 MaD:3 | | test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | MaD:9 | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | | test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | provenance | | | test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | | test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected index b1c1822ca70..faba4f42251 100644 --- a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected +++ b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected @@ -3,7 +3,6 @@ edges | StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | provenance | | | StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | provenance | FunctionModel | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | provenance | | | StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | provenance | Sink:MaD:1 | models | 1 | Sink: os/exec; ; false; Command; ; ; Argument[0]; command-injection; manual | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index dfbfac29d86..efe98650a4e 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -2,7 +2,6 @@ edges | StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | provenance | | | stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | provenance | | | stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | provenance | FunctionModel | -| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | provenance | | | stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | provenance | | | stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | provenance | | nodes diff --git a/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected b/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected index fb9a00ca180..938e4d2c4e9 100644 --- a/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected +++ b/python/ql/test/library-tests/frameworks/django-orm/ReflectedXss.expected @@ -16,7 +16,6 @@ edges | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | provenance | | | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute age] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute age] | provenance | | | testapp/orm_security_tests.py:42:23:42:42 | ControlFlowNode for Attribute() [List element, Attribute name] | testapp/orm_security_tests.py:42:13:42:18 | ControlFlowNode for person [Attribute name] | provenance | | -| testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | provenance | | | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | testapp/orm_security_tests.py:44:29:44:37 | ControlFlowNode for resp_text | provenance | | | testapp/orm_security_tests.py:43:49:43:54 | ControlFlowNode for person [Attribute name] | testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | provenance | | | testapp/orm_security_tests.py:43:49:43:59 | ControlFlowNode for Attribute | testapp/orm_security_tests.py:43:13:43:21 | ControlFlowNode for resp_text | provenance | | diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected index bec51d351fb..ca8345d92ee 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected @@ -17,7 +17,6 @@ edges | CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:21 | | CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:21 | | CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:80:16:80:19 | code | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:25 | ... + ... | provenance | | | CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | | CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:22:86:25 | code | provenance | | | CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | provenance | AdditionalTaintStep | @@ -27,7 +26,6 @@ edges | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | | CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | | CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | -| CodeInjection.rb:86:10:86:25 | ... + ... | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | | CodeInjection.rb:86:10:86:25 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... [element] | provenance | | | CodeInjection.rb:86:10:86:37 | ... + ... [element] | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | | CodeInjection.rb:86:22:86:25 | code | CodeInjection.rb:86:10:86:25 | ... + ... [element] | provenance | | @@ -74,7 +72,6 @@ nodes | CodeInjection.rb:78:12:78:24 | ...[...] | semmle.label | ...[...] | | CodeInjection.rb:78:12:78:24 | ...[...] | semmle.label | ...[...] | | CodeInjection.rb:80:16:80:19 | code | semmle.label | code | -| CodeInjection.rb:86:10:86:25 | ... + ... | semmle.label | ... + ... | | CodeInjection.rb:86:10:86:25 | ... + ... [element] | semmle.label | ... + ... [element] | | CodeInjection.rb:86:10:86:37 | ... + ... | semmle.label | ... + ... | | CodeInjection.rb:86:10:86:37 | ... + ... [element] | semmle.label | ... + ... [element] | diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 379a618dbdf..8280f1a9da2 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1068,18 +1068,6 @@ module MakeImpl Lang> { if label1 = "" then result = label2 else result = label1 } - pragma[noinline] - private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { - Stage1::revFlow(node2) and - localFlowStepEx(node1, node2, model) - } - - pragma[noinline] - private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { - Stage1::revFlow(node2) and - additionalLocalFlowStep(node1, node2, model) - } - pragma[nomagic] private predicate viableReturnPosOutNodeCand1(DataFlowCall call, ReturnPosition pos, NodeEx out) { Stage1::revFlow(out) and @@ -1376,8 +1364,6 @@ module MakeImpl Lang> { predicate instanceofCcNoCall(CcNoCall cc); - class LocalCc; - DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx); bindingset[call, ctx] @@ -1394,13 +1380,13 @@ module MakeImpl Lang> { CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call); bindingset[cc] - LocalCc getLocalCc(Cc cc); + LocalCallContext getLocalCc(Cc cc); bindingset[node1, state1] bindingset[node2, state2] predicate localStep( NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label + DataFlowType t, LocalCallContext lcc, string label ); bindingset[node, state, t0, ap] @@ -1503,6 +1489,18 @@ module MakeImpl Lang> { fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } + bindingset[node1, state1] + bindingset[node2, state2] + additional predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + Typ t, LocalCallContext lcc, string label + ) { + exists(DataFlowType type | + Param::localStep(node1, state1, node2, state2, preservesValue, type, lcc, label) and + t = getTyp(type) + ) + } + pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1517,7 +1515,7 @@ module MakeImpl Lang> { ap instanceof ApNil and apa = getApprox(ap) or - exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | + exists(NodeEx mid, FlowState state0, Typ t0, LocalCallContext localCc | fwdFlow(mid, state0, cc, summaryCtx, argT, argAp, t0, ap, apa) and localCc = getLocalCc(cc) | @@ -2532,6 +2530,173 @@ module MakeImpl Lang> { callEdgeReturn(call, c, _, _, _, _, _) } + /** Provides a big-step relation for local flow steps. */ + additional module LocalFlowBigStep { + final private class NodeExFinal = NodeEx; + + /** + * A node where some checking is required, and hence the big-step relation + * is not allowed to step over. + */ + private class FlowCheckNode extends NodeExFinal { + FlowCheckNode() { + revFlow(this, _, _) and + ( + castNode(this.asNode()) or + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) or + Config::neverSkip(this.asNode()) + ) + } + } + + private predicate additionalLocalStateStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, DataFlowType t, + LocalCallContext lcc, string label + ) { + exists(ApNil nil | + revFlow(node1, state1, pragma[only_bind_into](nil)) and + revFlow(node2, state2, pragma[only_bind_into](nil)) and + Param::localStep(node1, state1, node2, state2, false, t, lcc, label) and + state1 != state2 + ) + } + + /** + * Holds if `node` can be the first node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowEntry(NodeEx node, FlowState state, Ap ap) { + revFlow(node, state, ap) and + ( + sourceNode(node, state) + or + jumpStepEx(_, node) + or + additionalJumpStep(_, node, _) + or + additionalJumpStateStep(_, _, node, state) + or + node instanceof ParamNodeEx + or + node.asNode() instanceof OutNodeExt + or + storeStepCand(_, _, _, node, _, _) + or + readStepCand(_, _, node) + or + node instanceof FlowCheckNode + or + exists(FlowState s | + additionalLocalStateStep(_, s, node, state, _, _, _) and + s != state + ) + ) + } + + /** + * Holds if `node` can be the last node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowExit(NodeEx node, FlowState state, Ap ap) { + revFlow(node, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and + ( + exists(NodeEx next, Ap apNext | revFlow(next, pragma[only_bind_into](state), apNext) | + jumpStepEx(node, next) and + apNext = ap + or + additionalJumpStep(node, next, _) and + apNext = ap and + ap instanceof ApNil + or + callEdgeArgParam(_, _, node, next, _, ap) and + apNext = ap + or + callEdgeReturn(_, _, node, _, next, _, ap) and + apNext = ap + or + storeStepCand(node, _, _, next, _, _) + or + readStepCand(node, _, next) + ) + or + exists(NodeEx next, FlowState s | + revFlow(next, s, pragma[only_bind_into](ap)) and ap instanceof ApNil + | + additionalJumpStateStep(node, state, next, s) + or + additionalLocalStateStep(node, state, next, s) and + s != state + ) + or + node instanceof FlowCheckNode + or + sinkNode(node, state) and + ap instanceof ApNil + ) + } + + /** + * Holds if the local path from `node1` to `node2` is a prefix of a maximal + * subsequence of local flow steps in a dataflow path. + * + * This is the transitive closure of `[additional]localFlowStep` beginning + * at `localFlowEntry`. + */ + pragma[nomagic] + private predicate localFlowStepPlus( + NodeEx node1, FlowState state, NodeEx node2, boolean preservesValue, DataFlowType t, + LocalCallContext cc, string label + ) { + not inBarrier(node2, state) and + not outBarrier(node1, state) and + exists(NodeEx node0, boolean preservesValue0, DataFlowType t0, string label0, Ap ap | + Param::localStep(node0, state, node2, state, preservesValue0, t0, cc, label0) and + revFlow(node2, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and + not outBarrier(node0, state) and + (preservesValue = true or ap instanceof ApNil) + | + node1 = node0 and + localFlowEntry(node1, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and + preservesValue = preservesValue0 and + label = label0 and + t = t0 and + node1 != node2 + or + exists(boolean preservesValue1, DataFlowType t1, string label1 | + localFlowStepPlus(node1, pragma[only_bind_into](state), node0, preservesValue1, t1, + cc, label1) and + not node0 instanceof FlowCheckNode and + preservesValue = preservesValue0.booleanAnd(preservesValue1) and + label = mergeLabels(label1, label0) and + if preservesValue0 = true then t = t1 else t = t0 + ) + ) + } + + /** + * Holds if `node1` can step to `node2` in one or more local steps and this + * path can occur as a maximal subsequence of local steps in a dataflow path. + */ + pragma[nomagic] + predicate localFlowBigStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext callContext, string label + ) { + exists(Ap ap | + localFlowStepPlus(node1, state1, node2, preservesValue, t, callContext, label) and + localFlowExit(node2, state1, ap) and + state1 = state2 + | + preservesValue = true or ap instanceof ApNil + ) + or + additionalLocalStateStep(node1, state1, node2, state2, t, callContext, label) and + preservesValue = false + } + } + /** * INTERNAL: Only for debugging. * @@ -2888,7 +3053,7 @@ module MakeImpl Lang> { PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label, boolean isStoreStep ) { - exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | + exists(NodeEx mid, FlowState state0, Typ t0, LocalCallContext localCc | pn1 = TPathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and localCc = getLocalCc(cc) and isStoreStep = false @@ -3358,10 +3523,13 @@ module MakeImpl Lang> { predicate instanceofCcNoCall(CcNoCall cc) { any() } - class LocalCc = Unit; - bindingset[cc] - LocalCc getLocalCc(Cc cc) { any() } + LocalCallContext getLocalCc(Cc cc) { + cc = ccSomeCall() and + result instanceof LocalCallContextSpecificCall + or + result instanceof LocalCallContextAny + } DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { none() } @@ -3417,29 +3585,63 @@ module MakeImpl Lang> { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } import CachedCallContextSensitivity - import NoLocalCallContext + import LocalCallContext + + pragma[noinline] + private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { + Stage1::revFlow(node2) and + localFlowStepEx(node1, node2, model) + } + + pragma[nomagic] + private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { + Stage1::revFlow(node2) and + additionalLocalFlowStep(node1, node2, model) + } + + pragma[nomagic] + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, DataFlowType t, LocalCallContext lcc, + string label + ) { + ( + preservesValue = true and + localFlowStepNodeCand1(node1, node2, label) and + t = node1.getDataFlowType() + or + preservesValue = false and + additionalLocalFlowStepNodeCand1(node1, node2, label) and + t = node2.getDataFlowType() + ) and + lcc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCall1(node1, lcc) and + not isUnreachableInCall1(node2, lcc) + } + + pragma[nomagic] + private predicate localStateStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext lcc, string label + ) { + preservesValue = false and + additionalLocalStateStep(node1, state1, node2, state2) and + label = "Config" and + t = node2.getDataFlowType() and + lcc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCall1(node1, lcc) and + not isUnreachableInCall1(node2, lcc) + } bindingset[node1, state1] bindingset[node2, state2] predicate localStep( NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label + DataFlowType t, LocalCallContext lcc, string label ) { - ( - preservesValue = true and - localFlowStepNodeCand1(node1, node2, label) and - state1 = state2 - or - preservesValue = false and - additionalLocalFlowStepNodeCand1(node1, node2, label) and - state1 = state2 - or - preservesValue = false and - additionalLocalStateStep(node1, state1, node2, state2) and - label = "Config" - ) and - exists(t) and - exists(lcc) + localStep(node1, node2, preservesValue, t, lcc, label) and + state1 = state2 + or + localStateStep(node1, state1, node2, state2, preservesValue, t, lcc, label) } pragma[nomagic] @@ -3476,192 +3678,6 @@ module MakeImpl Lang> { private module Stage2 = MkStage::Stage; - pragma[nomagic] - private predicate flowOutOfCallNodeCand2( - DataFlowCall call, RetNodeEx node1, ReturnKindExt kind, NodeEx node2, boolean allowsFieldFlow - ) { - flowOutOfCallNodeCand1(call, node1, kind, node2, allowsFieldFlow) and - Stage2::revFlow(node2) and - Stage2::revFlow(node1) - } - - pragma[nomagic] - private predicate flowIntoCallNodeCand2( - DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow - ) { - flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow) and - Stage2::revFlow(node2) and - Stage2::revFlow(node1) - } - - private module LocalFlowBigStep { - /** - * A node where some checking is required, and hence the big-step relation - * is not allowed to step over. - */ - private class FlowCheckNode extends NodeEx { - FlowCheckNode() { - castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) or - neverSkipInPathGraph(this.asNode()) or - Config::neverSkip(this.asNode()) - } - } - - /** - * Holds if `node` can be the first node in a maximal subsequence of local - * flow steps in a dataflow path. - */ - private predicate localFlowEntry(NodeEx node, FlowState state) { - Stage2::revFlow(node, state) and - ( - sourceNode(node, state) - or - jumpStepEx(_, node) - or - additionalJumpStep(_, node, _) - or - additionalJumpStateStep(_, _, node, state) - or - node instanceof ParamNodeEx - or - node.asNode() instanceof OutNodeExt - or - Stage2::storeStepCand(_, _, _, node, _, _) - or - Stage2::readStepCand(_, _, node) - or - node instanceof FlowCheckNode - or - exists(FlowState s | - additionalLocalStateStep(_, s, node, state) and - s != state - ) - ) - } - - /** - * Holds if `node` can be the last node in a maximal subsequence of local - * flow steps in a dataflow path. - */ - private predicate localFlowExit(NodeEx node, FlowState state) { - exists(NodeEx next | Stage2::revFlow(next, state) | - jumpStepEx(node, next) or - additionalJumpStep(node, next, _) or - flowIntoCallNodeCand2(_, node, next, _) or - flowOutOfCallNodeCand2(_, node, _, next, _) or - Stage2::storeStepCand(node, _, _, next, _, _) or - Stage2::readStepCand(node, _, next) - ) - or - exists(NodeEx next, FlowState s | Stage2::revFlow(next, s) | - additionalJumpStateStep(node, state, next, s) - or - additionalLocalStateStep(node, state, next, s) and - s != state - ) - or - Stage2::revFlow(node, state) and - node instanceof FlowCheckNode - or - sinkNode(node, state) - } - - pragma[noinline] - private predicate additionalLocalFlowStepNodeCand2( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, string label - ) { - additionalLocalFlowStepNodeCand1(node1, node2, label) and - state1 = state2 and - Stage2::revFlow(node1, pragma[only_bind_into](state1), false) and - Stage2::revFlow(node2, pragma[only_bind_into](state2), false) - or - additionalLocalStateStep(node1, state1, node2, state2) and - label = "Config" and - Stage2::revFlow(node1, state1, false) and - Stage2::revFlow(node2, state2, false) - } - - /** - * Holds if the local path from `node1` to `node2` is a prefix of a maximal - * subsequence of local flow steps in a dataflow path. - * - * This is the transitive closure of `[additional]localFlowStep` beginning - * at `localFlowEntry`. - */ - pragma[nomagic] - private predicate localFlowStepPlus( - NodeEx node1, FlowState state, NodeEx node2, boolean preservesValue, DataFlowType t, - LocalCallContext cc, string label - ) { - not isUnreachableInCall1(node2, cc) and - not inBarrier(node2, state) and - not outBarrier(node1, state) and - ( - localFlowEntry(node1, pragma[only_bind_into](state)) and - ( - localFlowStepNodeCand1(node1, node2, label) and - preservesValue = true and - t = node1.getDataFlowType() and // irrelevant dummy value - Stage2::revFlow(node2, pragma[only_bind_into](state)) - or - additionalLocalFlowStepNodeCand2(node1, state, node2, state, label) and - preservesValue = false and - t = node2.getDataFlowType() - ) and - node1 != node2 and - cc.relevantFor(node1.getEnclosingCallable()) and - not isUnreachableInCall1(node1, cc) and - not outBarrier(node1, state) - or - exists(NodeEx mid, string label1, string label2 | - localFlowStepPlus(node1, pragma[only_bind_into](state), mid, preservesValue, t, cc, - label1) and - localFlowStepNodeCand1(mid, node2, label2) and - not outBarrier(mid, state) and - not mid instanceof FlowCheckNode and - Stage2::revFlow(node2, pragma[only_bind_into](state)) and - label = mergeLabels(label1, label2) - ) - or - exists(NodeEx mid, string label1, string label2 | - localFlowStepPlus(node1, state, mid, _, _, cc, label1) and - additionalLocalFlowStepNodeCand2(mid, state, node2, state, label2) and - not outBarrier(mid, state) and - not mid instanceof FlowCheckNode and - preservesValue = false and - t = node2.getDataFlowType() and - label = mergeLabels(label1, label2) - ) - ) - } - - /** - * Holds if `node1` can step to `node2` in one or more local steps and this - * path can occur as a maximal subsequence of local steps in a dataflow path. - */ - pragma[nomagic] - predicate localFlowBigStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCallContext callContext, string label - ) { - localFlowStepPlus(node1, state1, node2, preservesValue, t, callContext, label) and - localFlowExit(node2, state1) and - state1 = state2 - or - additionalLocalFlowStepNodeCand2(node1, state1, node2, state2, label) and - state1 != state2 and - preservesValue = false and - t = node2.getDataFlowType() and - callContext.relevantFor(node1.getEnclosingCallable()) and - not isUnreachableInCall1(node1, callContext) and - not isUnreachableInCall1(node2, callContext) - } - } - - private import LocalFlowBigStep - pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode or exists(node.asParamReturnNode()) @@ -3709,16 +3725,9 @@ module MakeImpl Lang> { } import CallContextSensitivity - import NoLocalCallContext + import LocalCallContext - predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label - ) { - localFlowBigStep(node1, state1, node2, state2, preservesValue, _, _, label) and - exists(t) and - exists(lcc) - } + predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; pragma[nomagic] private predicate expectsContentCand(NodeEx node, Ap ap) { @@ -3800,16 +3809,7 @@ module MakeImpl Lang> { import BooleanCallContext - pragma[nomagic] - predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label - ) { - localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _, label) and - PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and - PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) and - exists(lcc) - } + predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; pragma[nomagic] private predicate clearSet(NodeEx node, ContentSet c) { @@ -4113,14 +4113,7 @@ module MakeImpl Lang> { import CallContextSensitivity import LocalCallContext - predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label - ) { - localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc, label) and - PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and - PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) - } + predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; bindingset[node, state, t0, ap] predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { @@ -4338,14 +4331,7 @@ module MakeImpl Lang> { import CallContextSensitivity import LocalCallContext - predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCc lcc, string label - ) { - localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc, label) and - PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and - PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) - } + predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; bindingset[node, state, t0, ap] predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 434fca9c995..5fe86520882 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -778,23 +778,7 @@ module MakeImplCommon Lang> { recordDataFlowCallSiteDispatch(call, c) } - module NoLocalCallContext { - class LocalCc = Unit; - - bindingset[cc] - LocalCc getLocalCc(CallContext cc) { any() } - - bindingset[call, c] - CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { - if recordDataFlowCallSiteDispatch(call, c) - then result = Input2::getSpecificCallContextCall(call, c) - else result = TSomeCall() - } - } - module LocalCallContext { - class LocalCc = LocalCallContext; - private UnreachableSet getUnreachable(CallContext ctx) { exists(UnreachableSetOption unreachable | ctx = TSpecificCall(_, _, unreachable) | result = unreachable.asSome() @@ -810,7 +794,7 @@ module MakeImplCommon Lang> { bindingset[cc] pragma[inline_late] - LocalCc getLocalCc(CallContext cc) { result = getLocalCallContext(cc) } + LocalCallContext getLocalCc(CallContext cc) { result = getLocalCallContext(cc) } bindingset[call, c] CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { diff --git a/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index f9c1f7bd175..0fe8ae7b868 100644 --- a/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/swift/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -44,7 +44,6 @@ edges | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:137:36:137:36 | userControlledString | provenance | | | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:138:21:138:21 | userControlledString | provenance | | | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:139:22:139:22 | userControlledString | provenance | | -| CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:140:24:140:24 | userControlledString | provenance | | | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:150:42:150:42 | userControlledString | provenance | | | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:151:75:151:75 | userControlledString | provenance | | | CommandInjection.swift:105:12:105:12 | userControlledString | CommandInjection.swift:154:35:154:35 | userControlledString | provenance | | @@ -65,7 +64,6 @@ edges | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:137:36:137:36 | userControlledString | provenance | | | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:138:21:138:21 | userControlledString | provenance | | | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:139:22:139:22 | userControlledString | provenance | | -| CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:140:24:140:24 | userControlledString | provenance | | | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:150:42:150:42 | userControlledString | provenance | | | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:151:75:151:75 | userControlledString | provenance | | | CommandInjection.swift:105:40:105:94 | call to String.init(contentsOf:) | CommandInjection.swift:154:35:154:35 | userControlledString | provenance | | @@ -110,14 +108,6 @@ edges | CommandInjection.swift:138:21:138:21 | userControlledString | CommandInjection.swift:138:20:138:41 | [...] [Collection element] | provenance | | | CommandInjection.swift:139:21:139:42 | [...] [Collection element] | CommandInjection.swift:99:20:99:40 | arguments [Collection element] | provenance | | | CommandInjection.swift:139:22:139:22 | userControlledString | CommandInjection.swift:139:21:139:42 | [...] [Collection element] | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:150:42:150:42 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:151:75:151:75 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:154:35:154:35 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:155:70:155:70 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:160:53:160:53 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:163:52:163:52 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:164:33:164:33 | userControlledString | provenance | | -| CommandInjection.swift:140:24:140:24 | userControlledString | CommandInjection.swift:166:57:166:57 | userControlledString | provenance | | | CommandInjection.swift:151:67:151:95 | [...] [Collection element] | CommandInjection.swift:151:67:151:95 | [...] | provenance | | | CommandInjection.swift:151:75:151:75 | userControlledString | CommandInjection.swift:151:67:151:95 | [...] [Collection element] | provenance | | | CommandInjection.swift:154:23:154:55 | call to URL.init(string:) [some:0] | CommandInjection.swift:154:23:154:56 | ...! | provenance | | @@ -158,11 +148,8 @@ edges | CommandInjection.swift:205:19:205:19 | userControlledString | CommandInjection.swift:205:18:205:39 | [...] [Collection element] | provenance | | | CommandInjection.swift:207:3:207:3 | [post] getter for .p1 [arguments, Collection element] | CommandInjection.swift:207:3:207:3 | [post] getter for .p1 | provenance | | | CommandInjection.swift:207:18:207:18 | tainted1 [Collection element] | CommandInjection.swift:207:3:207:3 | [post] getter for .p1 [arguments, Collection element] | provenance | | -| CommandInjection.swift:207:18:207:18 | tainted1 [Collection element] | CommandInjection.swift:208:19:208:19 | tainted1 [Collection element] | provenance | | -| CommandInjection.swift:207:18:207:18 | tainted1 [Collection element] | CommandInjection.swift:209:18:209:18 | tainted1 [Collection element] | provenance | | | CommandInjection.swift:208:3:208:5 | [post] ...! [arguments, Collection element] | CommandInjection.swift:208:3:208:5 | [post] ...! | provenance | | | CommandInjection.swift:208:19:208:19 | tainted1 [Collection element] | CommandInjection.swift:208:3:208:5 | [post] ...! [arguments, Collection element] | provenance | | -| CommandInjection.swift:208:19:208:19 | tainted1 [Collection element] | CommandInjection.swift:209:18:209:18 | tainted1 [Collection element] | provenance | | | CommandInjection.swift:209:3:209:3 | [post] ...! [arguments, Collection element] | CommandInjection.swift:209:3:209:3 | [post] ...! | provenance | | | CommandInjection.swift:209:18:209:18 | tainted1 [Collection element] | CommandInjection.swift:209:3:209:3 | [post] ...! [arguments, Collection element] | provenance | | | CommandInjection.swift:211:30:211:51 | [...] [Collection element] | CommandInjection.swift:213:18:213:18 | tainted2 [Collection element] | provenance | | @@ -259,7 +246,6 @@ nodes | CommandInjection.swift:138:21:138:21 | userControlledString | semmle.label | userControlledString | | CommandInjection.swift:139:21:139:42 | [...] [Collection element] | semmle.label | [...] [Collection element] | | CommandInjection.swift:139:22:139:22 | userControlledString | semmle.label | userControlledString | -| CommandInjection.swift:140:24:140:24 | userControlledString | semmle.label | userControlledString | | CommandInjection.swift:150:42:150:42 | userControlledString | semmle.label | userControlledString | | CommandInjection.swift:151:67:151:95 | [...] | semmle.label | [...] | | CommandInjection.swift:151:67:151:95 | [...] [Collection element] | semmle.label | [...] [Collection element] | From 128053e2145ac2bd5d4536a09e02248fd8e54dcd Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 26 Aug 2024 08:41:37 +0200 Subject: [PATCH 182/334] C++: Add basic modeling of functions that don't throw --- .../code/cpp/models/implementations/Memcpy.qll | 3 ++- .../code/cpp/models/implementations/Memset.qll | 3 ++- .../cpp/models/implementations/NoexceptFunction.qll | 11 +++++++++++ .../code/cpp/models/interfaces/NonThrowing.qll | 13 +++++++++++++ .../CWE/CWE-570/IncorrectAllocationErrorHandling.ql | 10 +++++----- .../2024-08-26-non-throwing-functions.md | 4 ++++ .../IncorrectAllocationErrorHandling.expected | 1 + .../test/query-tests/Security/CWE/CWE-570/test.cpp | 2 +- 8 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/models/implementations/NoexceptFunction.qll create mode 100644 cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll create mode 100644 cpp/ql/src/change-notes/2024-08-26-non-throwing-functions.md diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll index 2c47587f42e..0bf2dd31fe4 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll @@ -9,13 +9,14 @@ import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect import semmle.code.cpp.models.interfaces.Taint +import semmle.code.cpp.models.interfaces.NonThrowing /** * The standard functions `memcpy`, `memmove` and `bcopy`; and the gcc variant * `__builtin___memcpy_chk`. */ private class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction, - AliasFunction + AliasFunction, NonThrowingFunction { MemcpyFunction() { // memcpy(dest, src, num) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll index 965ac8daf3b..ab2e0af99f3 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll @@ -8,9 +8,10 @@ import semmle.code.cpp.models.interfaces.ArrayFunction import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect +import semmle.code.cpp.models.interfaces.NonThrowing private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, AliasFunction, - SideEffectFunction + SideEffectFunction, NonThrowingFunction { MemsetFunctionModel() { this.hasGlobalOrStdOrBslName("memset") diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/NoexceptFunction.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/NoexceptFunction.qll new file mode 100644 index 00000000000..b0f76ee6538 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/NoexceptFunction.qll @@ -0,0 +1,11 @@ +import semmle.code.cpp.models.interfaces.NonThrowing + +/** + * A function that is annotated with a `noexcept` specifier (or the equivalent + * `throw()` specifier) guaranteeing that the function can not throw exceptions. + * + * Note: The `throw` specifier was deprecated in C++11 and removed in C++17. + */ +class NoexceptFunction extends NonThrowingFunction { + NoexceptFunction() { this.isNoExcept() or this.isNoThrow() } +} diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll new file mode 100644 index 00000000000..f3ec13b5bd5 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll @@ -0,0 +1,13 @@ +/** + * Provides an abstract class for modeling functions that never throws. + * + * See also `ThrowingFunction` for modeling functions that do throw. + */ + +import semmle.code.cpp.Function +import semmle.code.cpp.models.Models + +/** + * A function that is guaranteed to never throw. + */ +abstract class NonThrowingFunction extends Function { } diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql index 7f74c229ceb..73d9f2386a4 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql @@ -16,6 +16,8 @@ import cpp import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.controlflow.Guards +import semmle.code.cpp.models.interfaces.NonThrowing +import semmle.code.cpp.models.implementations.NoexceptFunction /** Gets the `Constructor` invoked when `newExpr` allocates memory. */ Constructor getConstructorForAllocation(NewOrNewArrayExpr newExpr) { @@ -44,9 +46,8 @@ predicate deleteMayThrow(DeleteOrDeleteArrayExpr deleteExpr) { * like it might throw an exception, and the function does not have a `noexcept` or `throw()` specifier. */ predicate functionMayThrow(Function f) { - (not exists(f.getBlock()) or stmtMayThrow(f.getBlock())) and - not f.isNoExcept() and - not f.isNoThrow() + not f instanceof NonThrowingFunction and + (not exists(f.getBlock()) or stmtMayThrow(f.getBlock())) } /** Holds if the evaluation of `stmt` may throw an exception. */ @@ -172,8 +173,7 @@ class ThrowingAllocator extends Function { not exists(Parameter p | p = this.getAParameter() | p.getUnspecifiedType().stripType() instanceof NoThrowType ) and - not this.isNoExcept() and - not this.isNoThrow() + not this instanceof NoexceptFunction ) } } diff --git a/cpp/ql/src/change-notes/2024-08-26-non-throwing-functions.md b/cpp/ql/src/change-notes/2024-08-26-non-throwing-functions.md new file mode 100644 index 00000000000..94acaaecc81 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-08-26-non-throwing-functions.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Add modeling of C functions that don't throw, thereby increasing the precision of the `cpp/incorrect-allocation-error-handling` ("Incorrect allocation-error handling") query. The query now produces additional true positives. \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected index 991ff2de8a4..53907bfeb40 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected @@ -17,3 +17,4 @@ | test.cpp:229:15:229:35 | new | This allocation cannot throw. $@ is unnecessary. | test.cpp:231:16:231:19 | { ... } | This catch block | | test.cpp:242:14:242:34 | new | This allocation cannot throw. $@ is unnecessary. | test.cpp:243:34:243:36 | { ... } | This catch block | | test.cpp:276:17:276:31 | new[] | This allocation cannot return null. $@ is unnecessary. | test.cpp:277:8:277:12 | ! ... | This check | +| test.cpp:288:19:288:47 | new[] | This allocation cannot throw. $@ is unnecessary. | test.cpp:291:30:293:5 | { ... } | This catch block | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp index 977b6e878a2..9df901ca5a9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp @@ -282,7 +282,7 @@ namespace qhelp { } // BAD: the allocation won't throw an exception, but - // instead return a null pointer. [NOT DETECTED] + // instead return a null pointer. void bad2(std::size_t length) noexcept { try { int* dest = new(std::nothrow) int[length]; From e5d626f9079a65e5a658c662ac2d3a3c449f6701 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 26 Aug 2024 09:15:16 +0200 Subject: [PATCH 183/334] Data flow: Only recompute local big step in stage 6 --- .../codeql/dataflow/internal/DataFlowImpl.qll | 222 +++++++++++------- .../dataflow/internal/DataFlowImplCommon.qll | 18 +- 2 files changed, 157 insertions(+), 83 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 8280f1a9da2..9c50d245aa5 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1068,6 +1068,42 @@ module MakeImpl Lang> { if label1 = "" then result = label2 else result = label1 } + pragma[nomagic] + private predicate localStepNodeCand1( + NodeEx node1, NodeEx node2, boolean preservesValue, DataFlowType t, LocalCallContext lcc, + string label + ) { + Stage1::revFlow(node1) and + Stage1::revFlow(node2) and + ( + preservesValue = true and + localFlowStepEx(node1, node2, label) and + t = node1.getDataFlowType() + or + preservesValue = false and + additionalLocalFlowStep(node1, node2, label) and + t = node2.getDataFlowType() + ) and + lcc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCall1(node1, lcc) and + not isUnreachableInCall1(node2, lcc) + } + + pragma[nomagic] + private predicate localStateStepNodeCand1( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, DataFlowType t, + LocalCallContext lcc, string label + ) { + Stage1::revFlow(node1) and + Stage1::revFlow(node2) and + additionalLocalStateStep(node1, state1, node2, state2) and + label = "Config" and + t = node2.getDataFlowType() and + lcc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCall1(node1, lcc) and + not isUnreachableInCall1(node2, lcc) + } + pragma[nomagic] private predicate viableReturnPosOutNodeCand1(DataFlowCall call, ReturnPosition pos, NodeEx out) { Stage1::revFlow(out) and @@ -1364,6 +1400,8 @@ module MakeImpl Lang> { predicate instanceofCcNoCall(CcNoCall cc); + class LocalCc; + DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx); bindingset[call, ctx] @@ -1380,13 +1418,13 @@ module MakeImpl Lang> { CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call); bindingset[cc] - LocalCallContext getLocalCc(Cc cc); + LocalCc getLocalCc(Cc cc); bindingset[node1, state1] bindingset[node2, state2] predicate localStep( NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCallContext lcc, string label + Typ t, LocalCc lcc, string label ); bindingset[node, state, t0, ap] @@ -1489,18 +1527,6 @@ module MakeImpl Lang> { fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - bindingset[node1, state1] - bindingset[node2, state2] - additional predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - Typ t, LocalCallContext lcc, string label - ) { - exists(DataFlowType type | - Param::localStep(node1, state1, node2, state2, preservesValue, type, lcc, label) and - t = getTyp(type) - ) - } - pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1515,7 +1541,7 @@ module MakeImpl Lang> { ap instanceof ApNil and apa = getApprox(ap) or - exists(NodeEx mid, FlowState state0, Typ t0, LocalCallContext localCc | + exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | fwdFlow(mid, state0, cc, summaryCtx, argT, argAp, t0, ap, apa) and localCc = getLocalCc(cc) | @@ -2530,8 +2556,24 @@ module MakeImpl Lang> { callEdgeReturn(call, c, _, _, _, _, _) } - /** Provides a big-step relation for local flow steps. */ - additional module LocalFlowBigStep { + /** Provides the input to `LocalFlowBigStep`. */ + signature module LocalFlowBigStepInputSig { + bindingset[node1, state1] + bindingset[node2, state2] + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext lcc, string label + ); + } + + /** + * Provides a big-step relation for local flow steps. + * + * The big-step releation is based on the `localStep` relation from the + * input module, restricted to nodes that are forwards and backwards + * reachable in this stage. + */ + additional module LocalFlowBigStep { final private class NodeExFinal = NodeEx; /** @@ -2558,7 +2600,7 @@ module MakeImpl Lang> { exists(ApNil nil | revFlow(node1, state1, pragma[only_bind_into](nil)) and revFlow(node2, state2, pragma[only_bind_into](nil)) and - Param::localStep(node1, state1, node2, state2, false, t, lcc, label) and + Input::localStep(node1, state1, node2, state2, false, t, lcc, label) and state1 != state2 ) } @@ -2652,7 +2694,7 @@ module MakeImpl Lang> { not inBarrier(node2, state) and not outBarrier(node1, state) and exists(NodeEx node0, boolean preservesValue0, DataFlowType t0, string label0, Ap ap | - Param::localStep(node0, state, node2, state, preservesValue0, t0, cc, label0) and + Input::localStep(node0, state, node2, state, preservesValue0, t0, cc, label0) and revFlow(node2, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and not outBarrier(node0, state) and (preservesValue = true or ap instanceof ApNil) @@ -3053,7 +3095,7 @@ module MakeImpl Lang> { PathNodeImpl pn1, NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, string label, boolean isStoreStep ) { - exists(NodeEx mid, FlowState state0, Typ t0, LocalCallContext localCc | + exists(NodeEx mid, FlowState state0, Typ t0, LocalCc localCc | pn1 = TPathNodeMid(mid, state0, cc, summaryCtx, argT, argAp, t0, ap) and localCc = getLocalCc(cc) and isStoreStep = false @@ -3523,13 +3565,10 @@ module MakeImpl Lang> { predicate instanceofCcNoCall(CcNoCall cc) { any() } + class LocalCc = Unit; + bindingset[cc] - LocalCallContext getLocalCc(Cc cc) { - cc = ccSomeCall() and - result instanceof LocalCallContextSpecificCall - or - result instanceof LocalCallContextAny - } + LocalCc getLocalCc(Cc cc) { any() } DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { none() } @@ -3585,63 +3624,23 @@ module MakeImpl Lang> { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } import CachedCallContextSensitivity - import LocalCallContext - - pragma[noinline] - private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { - Stage1::revFlow(node2) and - localFlowStepEx(node1, node2, model) - } - - pragma[nomagic] - private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, string model) { - Stage1::revFlow(node2) and - additionalLocalFlowStep(node1, node2, model) - } - - pragma[nomagic] - private predicate localStep( - NodeEx node1, NodeEx node2, boolean preservesValue, DataFlowType t, LocalCallContext lcc, - string label - ) { - ( - preservesValue = true and - localFlowStepNodeCand1(node1, node2, label) and - t = node1.getDataFlowType() - or - preservesValue = false and - additionalLocalFlowStepNodeCand1(node1, node2, label) and - t = node2.getDataFlowType() - ) and - lcc.relevantFor(node1.getEnclosingCallable()) and - not isUnreachableInCall1(node1, lcc) and - not isUnreachableInCall1(node2, lcc) - } - - pragma[nomagic] - private predicate localStateStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCallContext lcc, string label - ) { - preservesValue = false and - additionalLocalStateStep(node1, state1, node2, state2) and - label = "Config" and - t = node2.getDataFlowType() and - lcc.relevantFor(node1.getEnclosingCallable()) and - not isUnreachableInCall1(node1, lcc) and - not isUnreachableInCall1(node2, lcc) - } + import NoLocalCallContext bindingset[node1, state1] bindingset[node2, state2] predicate localStep( NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCallContext lcc, string label + Typ t, LocalCc lcc, string label ) { - localStep(node1, node2, preservesValue, t, lcc, label) and - state1 = state2 - or - localStateStep(node1, state1, node2, state2, preservesValue, t, lcc, label) + ( + localStepNodeCand1(node1, node2, preservesValue, _, _, label) and + state1 = state2 + or + localStateStepNodeCand1(node1, state1, node2, state2, _, _, label) and + preservesValue = false + ) and + exists(t) and + exists(lcc) } pragma[nomagic] @@ -3725,9 +3724,41 @@ module MakeImpl Lang> { } import CallContextSensitivity - import LocalCallContext + import NoLocalCallContext - predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; + private module BigStepInput implements PrevStage::LocalFlowBigStepInputSig { + bindingset[node1, state1] + bindingset[node2, state2] + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext lcc, string label + ) { + localStepNodeCand1(node1, node2, preservesValue, t, lcc, label) and + state1 = state2 + or + localStateStepNodeCand1(node1, state1, node2, state2, t, lcc, label) and + preservesValue = false + } + } + + additional predicate localFlowBigStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext lcc, string label + ) { + PrevStage::LocalFlowBigStep::localFlowBigStep(node1, state1, node2, state2, + preservesValue, t, lcc, label) + } + + bindingset[node1, state1] + bindingset[node2, state2] + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + Typ t, LocalCc lcc, string label + ) { + localFlowBigStep(node1, state1, node2, state2, preservesValue, _, _, label) and + exists(t) and + exists(lcc) + } pragma[nomagic] private predicate expectsContentCand(NodeEx node, Ap ap) { @@ -3809,7 +3840,16 @@ module MakeImpl Lang> { import BooleanCallContext - predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; + pragma[nomagic] + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + Typ t, LocalCc lcc, string label + ) { + Stage3Param::localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _, label) and + PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and + PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) and + exists(lcc) + } pragma[nomagic] private predicate clearSet(NodeEx node, ContentSet c) { @@ -4113,7 +4153,14 @@ module MakeImpl Lang> { import CallContextSensitivity import LocalCallContext - predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + Typ t, LocalCc lcc, string label + ) { + Stage3Param::localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc, label) and + PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and + PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) + } bindingset[node, state, t0, ap] predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { @@ -4331,7 +4378,18 @@ module MakeImpl Lang> { import CallContextSensitivity import LocalCallContext - predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; + private module BigStepInput implements PrevStage::LocalFlowBigStepInputSig { + predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + DataFlowType t, LocalCallContext lcc, string label + ) { + Stage3Param::localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc, label) and + PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and + PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) + } + } + + predicate localStep = PrevStage::LocalFlowBigStep::localFlowBigStep/8; bindingset[node, state, t0, ap] predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 5fe86520882..434fca9c995 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -778,7 +778,23 @@ module MakeImplCommon Lang> { recordDataFlowCallSiteDispatch(call, c) } + module NoLocalCallContext { + class LocalCc = Unit; + + bindingset[cc] + LocalCc getLocalCc(CallContext cc) { any() } + + bindingset[call, c] + CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { + if recordDataFlowCallSiteDispatch(call, c) + then result = Input2::getSpecificCallContextCall(call, c) + else result = TSomeCall() + } + } + module LocalCallContext { + class LocalCc = LocalCallContext; + private UnreachableSet getUnreachable(CallContext ctx) { exists(UnreachableSetOption unreachable | ctx = TSpecificCall(_, _, unreachable) | result = unreachable.asSome() @@ -794,7 +810,7 @@ module MakeImplCommon Lang> { bindingset[cc] pragma[inline_late] - LocalCallContext getLocalCc(CallContext cc) { result = getLocalCallContext(cc) } + LocalCc getLocalCc(CallContext cc) { result = getLocalCallContext(cc) } bindingset[call, c] CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { From 16c2cf24b310bec935167466d85c2c94d161e568 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 26 Aug 2024 11:53:31 +0200 Subject: [PATCH 184/334] C++: use inline annotation for missing flow --- cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp | 2 +- cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected | 3 --- cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp | 4 ++-- 3 files changed, 3 insertions(+), 6 deletions(-) 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 1504142bdce..8e6199d35bd 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -450,7 +450,7 @@ void test_qualifiers() b.member = source(); sink(b); // $ ir MISSING: ast sink(b.member); // $ ast,ir - sink(b.getMember()); // $ ir MISSING: ast + sink(b.getMember()); // $ MISSING: ir ast c = new MyClass2(0); diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected index 8d4dc3351b4..299f1413878 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.expected @@ -4,7 +4,4 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (tai WARNING: module 'DataFlow' has been deprecated and may be removed in future (taint.ql:68,25-33) WARNING: module 'TaintTracking' has been deprecated and may be removed in future (taint.ql:73,20-33) testFailures -| taint.cpp:453:23:453:42 | // $ ir MISSING: ast | Missing result:ir= | -| vector.cpp:118:12:118:30 | // $ ir MISSING:ast | Missing result:ir= | -| vector.cpp:119:12:119:30 | // $ ir MISSING:ast | Missing result:ir= | failures diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp index a5e0c428b71..7f4d3f22d8e 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp @@ -115,8 +115,8 @@ void test_vector_swap() { v3.swap(v4); sink(v1); - sink(v2); // $ ir MISSING:ast - sink(v3); // $ ir MISSING:ast + sink(v2); // $ MISSING:ir ast + sink(v3); // $ MISSING:ir ast sink(v4); } From d9dbcdba3481016956f20f7f99c7d88a87dfb832 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 26 Aug 2024 12:42:44 +0200 Subject: [PATCH 185/334] C++: Fix imports --- cpp/ql/lib/semmle/code/cpp/models/Models.qll | 1 + .../src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index 90a97777d8f..1e0b6cd33ed 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -42,6 +42,7 @@ private import implementations.Accept private import implementations.Poll private import implementations.Select private import implementations.MySql +private import implementations.NoexceptFunction private import implementations.ODBC private import implementations.SqLite3 private import implementations.PostgreSql diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql index 73d9f2386a4..92daf31b057 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql @@ -16,7 +16,6 @@ import cpp import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.controlflow.Guards -import semmle.code.cpp.models.interfaces.NonThrowing import semmle.code.cpp.models.implementations.NoexceptFunction /** Gets the `Constructor` invoked when `newExpr` allocates memory. */ From 34d83a6b0d3041cebddb55d59c4e53bae433baaf Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 26 Aug 2024 15:02:27 +0200 Subject: [PATCH 186/334] C#/Java: Address review comments. --- .../modelgenerator/debug/CaptureSummaryModelsPartialPath.ql | 2 +- .../modelgenerator/debug/CaptureSummaryModelsPartialPath.ql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql index 614fb7630b4..62d3ad7f9f4 100644 --- a/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql +++ b/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql @@ -22,6 +22,6 @@ from where PartialFlow::partialFlow(source, sink, _) and p = source.getNode() and - p.asParameter() = api.getParameter(0) + p.asParameter() = api.getAParameter() select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(), "parameter", sink.getNode(), "intermediate value" diff --git a/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql index 2b8a6e220f8..1d9724abef8 100644 --- a/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql +++ b/java/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql @@ -23,6 +23,6 @@ from where PartialFlow::partialFlow(source, sink, _) and p = source.getNode() and - p.asParameter() = api.getParameter(0) + p.asParameter() = api.getAParameter() select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(), "parameter", sink.getNode(), "intermediate value" From cbb58d00410b83400bf632da157d4cb0fbdcab46 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 26 Aug 2024 15:05:30 +0200 Subject: [PATCH 187/334] Dataflow: Add a getLocation rootdef. --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 98291d25ffc..7288d3e6e06 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1580,11 +1580,15 @@ module MakeImpl Lang> { */ private class SummaryCtx extends TSummaryCtx { abstract string toString(); + + abstract Location getLocation(); } /** A summary context from which no flow summary can be generated. */ private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { override string toString() { result = "" } + + override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } /** A summary context from which a flow summary can be generated. */ @@ -1601,7 +1605,7 @@ module MakeImpl Lang> { override string toString() { result = p + concat(" : " + this.ppTyp()) + " " + ap } - Location getLocation() { result = p.getLocation() } + override Location getLocation() { result = p.getLocation() } } private predicate fwdFlowJump(NodeEx node, FlowState state, Typ t, Ap ap, ApApprox apa) { From d8c8bcd3866fd97827f351ee9e56069417fe8746 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 26 Aug 2024 15:12:37 +0200 Subject: [PATCH 188/334] Dataflow: Tweak qldoc. --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 7288d3e6e06..da197490c1b 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1466,8 +1466,8 @@ module MakeImpl Lang> { * Holds if `node` is reachable with access path `ap` from a source. * * The call context `cc` records whether the node is reached through an - * argument in a call, and if so, `summaryCtx` and `argAp` record the - * corresponding parameter position and access path of that argument, respectively. + * argument in a call, and if so, `summaryCtx` records the + * corresponding parameter position and access path of that argument. */ pragma[nomagic] additional predicate fwdFlow( From 4381bae5d1481b161096986fb30b1e426205b369 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 26 Aug 2024 14:10:40 +0200 Subject: [PATCH 189/334] Shared: Fix bad join. --- .../dataflow/internal/ContentDataFlowImpl.qll | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index a4d3e413625..1823a25155f 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -455,27 +455,42 @@ module MakeImplContentDataFlow Lang> { ) } + pragma[nomagic] + private predicate nodeAndState(Flow::PathNode n, Node node, State state) { + n.getNode() = node and n.getState() = state + } + + pragma[nomagic] + private predicate succNodeAndState( + Flow::PathNode pre, Node preNode, State preState, Flow::PathNode succ, Node succNode, + State succState + ) { + nodeAndState(pre, preNode, preState) and + nodeAndState(succ, succNode, succState) and + pre.getASuccessor() = succ + } + pragma[nomagic] private predicate nodeReachesStore( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode target, ContentSet c, AccessPath reads, AccessPath stores ) { - exists(Flow::PathNode mid | + exists(Flow::PathNode mid, State midState, Node midNode, State targetState, Node targetNode | nodeReaches(source, scReads, scStores, mid, reads, stores) and - storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node + succNodeAndState(mid, midNode, midState, target, targetNode, targetState) and + storeStep(midNode, midState, c, targetNode, targetState) ) } pragma[nomagic] private predicate nodeReachesRead( - Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node, + Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode target, ContentSet c, AccessPath reads, AccessPath stores ) { - exists(Flow::PathNode mid | + exists(Flow::PathNode mid, State midState, Node midNode, State targetState, Node targetNode | nodeReaches(source, scReads, scStores, mid, reads, stores) and - readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - mid.getASuccessor() = node + succNodeAndState(mid, midNode, midState, target, targetNode, targetState) and + readStep(midNode, midState, c, targetNode, targetState) ) } From 77bfe39ca7a4b85b9e322a9e13f0cecb21a773ee Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 26 Aug 2024 15:24:22 +0200 Subject: [PATCH 190/334] Shared: Address review comments. --- .../codeql/dataflow/internal/ContentDataFlowImpl.qll | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index 1823a25155f..c63f36bdeda 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -455,18 +455,15 @@ module MakeImplContentDataFlow Lang> { ) } - pragma[nomagic] - private predicate nodeAndState(Flow::PathNode n, Node node, State state) { - n.getNode() = node and n.getState() = state - } - pragma[nomagic] private predicate succNodeAndState( Flow::PathNode pre, Node preNode, State preState, Flow::PathNode succ, Node succNode, State succState ) { - nodeAndState(pre, preNode, preState) and - nodeAndState(succ, succNode, succState) and + pre.getNode() = preNode and + pre.getState() = preState and + succ.getNode() = succNode and + succ.getState() = succState and pre.getASuccessor() = succ } From d19102c3998ddb24b09a1540a33d57c9c386eccc Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Mon, 26 Aug 2024 14:38:32 -0700 Subject: [PATCH 191/334] Separate into two groups --- .github/pull_request_template.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 520020522cc..9d6ec6cb4f5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,7 +1,13 @@ ### Pull Request checklist -- [ ] Add a change note if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md). +#### All query authors + +- [ ] Add a change note if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md) in this repository. +- [ ] All new queries have appropriate `.qhelp`. See [the documentation](https://github.com/github/codeql/blob/mainπ /docs/query-help-style-guide.md) in this repository. +- [ ] QL tests are added if necessary. See [Testing custom queries](https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/testing-custom-queries) in the GitHub documentation. +- [ ] New and changed queries have correct query metadata. See [the documentation](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md) in this repository. + +#### Internal query authors only + - [ ] If this PR makes significant changes to `.ql`, `.qll`, or `.qhelp` files, make sure that autofixes generated based on these changes are valid. See [the documentation](https://github.com/github/codeql-team/blob/main/docs/best-practices/validating-autofix-for-query-changes.md) (internal access required). -- [ ] All new queries has appropriate `.qhelp`. -- [ ] QL tests are added if necessary. -- [ ] Test your changes in [DCA](https://github.com/github/codeql-dca/) (internal access required). +- [ ] Test your changes [at scale](https://github.com/github/codeql-dca/) (internal access required). From 0738e01e7ed679f7084b7f84a28ca8e01a278bd2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 27 Aug 2024 09:12:37 +0200 Subject: [PATCH 192/334] Bazel: fix logging bug in `git_lfs_probe.py` The case of an `HTTPError` was printed to stdout (and therefore globbed by bazel). While I'm at it, I also introduced a timeout to `urlopen` and improved the `no endpoints found` error message. --- misc/bazel/internal/git_lfs_probe.py | 47 +++++++++++++++------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/misc/bazel/internal/git_lfs_probe.py b/misc/bazel/internal/git_lfs_probe.py index 01b201c5486..22ca9855f54 100755 --- a/misc/bazel/internal/git_lfs_probe.py +++ b/misc/bazel/internal/git_lfs_probe.py @@ -16,13 +16,13 @@ import shutil import json import typing import urllib.request +import urllib.error from urllib.parse import urlparse import re import base64 from dataclasses import dataclass import argparse - def options(): p = argparse.ArgumentParser(description=__doc__) p.add_argument("--hash-only", action="store_true") @@ -30,6 +30,12 @@ def options(): return p.parse_args() +TIMEOUT = 20 + +def warn(message: str) -> None: + print(f"WARNING: {message}", file=sys.stderr) + + @dataclass class Endpoint: name: str @@ -41,6 +47,10 @@ class Endpoint: self.headers.update((k.capitalize(), v) for k, v in d) +class NoEndpointsFound(Exception): + pass + + opts = options() sources = [p.resolve() for p in opts.sources] source_dir = pathlib.Path(os.path.commonpath(src.parent for src in sources)) @@ -105,18 +115,12 @@ def get_endpoints() -> typing.Iterable[Endpoint]: "download", ] try: - res = subprocess.run(cmd, stdout=subprocess.PIPE, timeout=15) + res = subprocess.run(cmd, stdout=subprocess.PIPE, timeout=TIMEOUT) except subprocess.TimeoutExpired: - print( - f"WARNING: ssh timed out when connecting to {server}, ignoring {endpoint.name} endpoint", - file=sys.stderr, - ) + warn(f"ssh timed out when connecting to {server}, ignoring {endpoint.name} endpoint") continue if res.returncode != 0: - print( - f"WARNING: ssh failed when connecting to {server}, ignoring {endpoint.name} endpoint", - file=sys.stderr, - ) + warn(f"ssh failed when connecting to {server}, ignoring {endpoint.name} endpoint") continue ssh_resp = json.loads(res.stdout) endpoint.href = ssh_resp.get("href", endpoint) @@ -139,10 +143,7 @@ def get_endpoints() -> typing.Iterable[Endpoint]: input=f"protocol={url.scheme}\nhost={url.netloc}\npath={url.path[1:]}\n", ) if credentials is None: - print( - f"WARNING: no authorization method found, ignoring {data.name} endpoint", - file=sys.stderr, - ) + warn(f"no authorization method found, ignoring {endpoint.name} endpoint") continue credentials = dict(get_env(credentials)) auth = base64.b64encode( @@ -176,10 +177,10 @@ def get_locations(objects): data=json.dumps(data).encode("ascii"), ) try: - with urllib.request.urlopen(req) as resp: + with urllib.request.urlopen(req, timeout=TIMEOUT) as resp: data = json.load(resp) - except urllib.request.HTTPError as e: - print(f"WARNING: encountered HTTPError {e}, ignoring endpoint {e.name}") + except urllib.error.URLError as e: + warn(f"encountered {type(e).__name__} {e}, ignoring endpoint {endpoint.name}") continue assert len(data["objects"]) == len( indexes @@ -187,7 +188,7 @@ def get_locations(objects): for i, resp in zip(indexes, data["objects"]): ret[i] = f'{resp["oid"]} {resp["actions"]["download"]["href"]}' return ret - raise Exception(f"no valid endpoint found") + raise NoEndpointsFound def get_lfs_object(path): @@ -204,6 +205,10 @@ def get_lfs_object(path): return {"oid": sha256, "size": size} -objects = [get_lfs_object(src) for src in sources] -for resp in get_locations(objects): - print(resp) +try: + objects = [get_lfs_object(src) for src in sources] + for resp in get_locations(objects): + print(resp) +except NoEndpointsFound as e: + print(f"ERROR: no valid endpoints found", file=sys.stderr) + sys.exit(1) From 62219fae609730ea62f95fb11c5207e662f13d6d Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 27 Aug 2024 12:27:53 +0200 Subject: [PATCH 193/334] Bazel: switch to a 7.4.0 prerelease. --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index b26a34e4705..b9ad1fa3a7f 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.2.1 +5f5d70b6c4d2fb1a889479569107f1692239e8a7 From 123507e2dce45f1fbb2df51eb39634907b208ad5 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 27 Aug 2024 13:00:56 +0200 Subject: [PATCH 194/334] No need to disable the layering check anymore, this was fixed upstream. --- .github/workflows/cpp-swift-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml index b2ebbc7d7df..4b923f1b39c 100644 --- a/.github/workflows/cpp-swift-analysis.yml +++ b/.github/workflows/cpp-swift-analysis.yml @@ -37,7 +37,7 @@ jobs: with: languages: cpp config-file: ./.github/codeql/codeql-config.yml - + - name: "[Ubuntu] Remove GCC 13 from runner image" shell: bash run: | @@ -48,7 +48,7 @@ jobs: - 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 run //swift:create-extractor-pack --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local bazel shutdown - name: Perform CodeQL Analysis From 19606b1903494fb88c000d88ffe9a277a7cd8205 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Mon, 26 Aug 2024 12:41:47 +0200 Subject: [PATCH 195/334] Add *.actual to the gitignore file. This is also used by the integration tests. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a9a34f6bd4c..445faf8efaf 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,8 @@ .cache # qltest projects and artifacts +*.actual */ql/test/**/*.testproj -*/ql/test/**/*.actual */ql/test/**/go.sum # Visual studio temporaries, except a file used by QL4VS From 5fa30c33b833a305d33447fd77ea331c2f5f8795 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Fri, 23 Aug 2024 12:56:58 +0200 Subject: [PATCH 196/334] Remove legacy java files. --- java/ql/integration-tests/all-platforms/java/legacy | 0 java/ql/integration-tests/all-platforms/java/qlpack.yml | 5 ----- 2 files changed, 5 deletions(-) delete mode 100644 java/ql/integration-tests/all-platforms/java/legacy delete mode 100644 java/ql/integration-tests/all-platforms/java/qlpack.yml diff --git a/java/ql/integration-tests/all-platforms/java/legacy b/java/ql/integration-tests/all-platforms/java/legacy deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/java/ql/integration-tests/all-platforms/java/qlpack.yml b/java/ql/integration-tests/all-platforms/java/qlpack.yml deleted file mode 100644 index 4994af85a75..00000000000 --- a/java/ql/integration-tests/all-platforms/java/qlpack.yml +++ /dev/null @@ -1,5 +0,0 @@ -dependencies: - codeql/java-all: '*' - codeql/java-tests: '*' - codeql/java-queries: '*' -warnOnImplicitThis: true From c69df1a6e3eee9ad45759054aab369d0dea7d1bd Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Fri, 23 Aug 2024 14:14:04 +0200 Subject: [PATCH 197/334] Port java integration tests to pytest. Some notes: * These tests rely on a variety of fixtures * The previous maven-wrapper checks were checking for the version of maven installed by looking at the checked-in wrapper script. I dropped this behavior. * I replaced a lot of test queries that queried for a (subset of) source archive files with the source_archive fixture. In particular, tests that excluded properties files from being listed in the expected output now include them. It's much faster to generate this list via the fixture instead of using CodeQL for it. --- .../java/android-8-sample/.gitattributes | 6 - .../java/android-8-sample/.gitignore | 37 --- .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../java/android-8-sample/gradlew | 240 ----------------- .../java/android-8-sample/gradlew.bat | 91 ------- .../android-8-sample/source_archive.expected | 27 ++ .../java/android-8-sample/test.expected | 20 -- .../java/android-8-sample/test.py | 10 +- .../java/android-8-sample/test.ql | 7 - .../force_sequential_test_execution | 4 - .../source_archive.expected | 26 ++ .../test.expected | 20 -- .../test.py | 9 +- .../test.ql | 7 - .../.gitattributes | 6 - .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../gradlew | 240 ----------------- .../gradlew.bat | 91 ------- .../source_archive.expected | 26 ++ .../test.expected | 20 -- .../test.py | 9 +- .../test.ql | 7 - .../force_sequential_test_execution | 4 - .../source_archive.expected | 26 ++ .../android-sample-no-wrapper/test.expected | 20 -- .../java/android-sample-no-wrapper/test.py | 9 +- .../java/android-sample-no-wrapper/test.ql | 7 - .../force_sequential_test_execution | 4 - .../source_archive.expected | 29 ++ .../test.expected | 23 -- .../test.py | 10 +- .../test.ql | 7 - .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../gradlew | 240 ----------------- .../gradlew.bat | 91 ------- .../source_archive.expected | 29 ++ .../test.expected | 23 -- .../test.py | 9 +- .../test.ql | 7 - .../force_sequential_test_execution | 4 - .../source_archive.expected | 29 ++ .../test.expected | 23 -- .../test.py | 10 +- .../test.ql | 7 - .../android-sample-old-style/.gitattributes | 6 - .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../java/android-sample-old-style/gradlew | 240 ----------------- .../java/android-sample-old-style/gradlew.bat | 91 ------- .../source_archive.expected | 29 ++ .../android-sample-old-style/test.expected | 23 -- .../java/android-sample-old-style/test.py | 9 +- .../java/android-sample-old-style/test.ql | 7 - .../java/android-sample/.gitattributes | 6 - .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../all-platforms/java/android-sample/gradlew | 240 ----------------- .../java/android-sample/gradlew.bat | 91 ------- .../android-sample/source_archive.expected | 26 ++ .../java/android-sample/test.expected | 20 -- .../all-platforms/java/android-sample/test.py | 9 +- .../all-platforms/java/android-sample/test.ql | 7 - .../all-platforms/java/ant-sample/test.py | 7 +- .../force_sequential_test_execution | 1 - .../test.py | 33 ++- .../java/buildless-erroneous/test.py | 10 +- .../.gitattributes | 9 - .../buildless-gradle-classifiers/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - .../java/buildless-gradle-classifiers/gradlew | 249 ------------------ .../buildless-gradle-classifiers/gradlew.bat | 92 ------- .../source_archive.expected | 7 + .../test.expected | 1 - .../java/buildless-gradle-classifiers/test.py | 15 +- .../java/buildless-gradle-classifiers/test.ql | 5 - .../force_sequential_test_execution | 3 - .../source_archive.expected | 5 + .../buildless-gradle-timeout/test.expected | 5 - .../java/buildless-gradle-timeout/test.py | 16 +- .../java/buildless-gradle-timeout/test.ql | 7 - .../java/buildless-gradle/.gitattributes | 9 - .../java/buildless-gradle/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - .../java/buildless-gradle/gradlew | 249 ------------------ .../java/buildless-gradle/gradlew.bat | 92 ------- .../buildless-gradle/source_archive.expected | 7 + .../java/buildless-gradle/test.expected | 1 - .../java/buildless-gradle/test.py | 15 +- .../java/buildless-gradle/test.ql | 5 - .../force_sequential_test_execution | 1 - .../buildless-inherit-trust-store/test.py | 35 ++- .../force_sequential_test_execution | 1 - .../source_archive.expected | 7 + .../test.expected | 10 - .../buildless-maven-executable-war/test.py | 15 +- .../buildless-maven-executable-war/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 14 + .../buildless-maven-multimodule/test.expected | 17 -- .../java/buildless-maven-multimodule/test.py | 15 +- .../java/buildless-maven-multimodule/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 8 + .../buildless-maven-timeout/test.expected | 11 - .../java/buildless-maven-timeout/test.py | 15 +- .../java/buildless-maven-timeout/test.ql | 9 - .../force_sequential_test_execution | 1 - .../test.py | 12 +- .../force_sequential_test_execution | 1 - .../buildless-maven/source_archive.expected | 7 + .../java/buildless-maven/test.expected | 10 - .../java/buildless-maven/test.py | 15 +- .../java/buildless-maven/test.ql | 9 - .../test.py | 9 +- .../buildless-proxy-gradle/.gitattributes | 9 - .../java/buildless-proxy-gradle/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - .../java/buildless-proxy-gradle/gradlew | 249 ------------------ .../java/buildless-proxy-gradle/gradlew.bat | 92 ------- .../source_archive.expected | 7 + .../java/buildless-proxy-gradle/test.expected | 1 - .../java/buildless-proxy-gradle/test.py | 47 +--- .../java/buildless-proxy-gradle/test.ql | 5 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 8 + .../java/buildless-proxy-maven/test.expected | 11 - .../java/buildless-proxy-maven/test.py | 47 +--- .../java/buildless-proxy-maven/test.ql | 9 - .../force_sequential_test_execution | 3 - .../source_archive.expected | 29 ++ .../buildless-sibling-projects/test.expected | 8 - .../java/buildless-sibling-projects/test.py | 23 +- .../java/buildless-sibling-projects/test.ql | 5 - .../force_sequential_test_execution | 1 - .../buildless-snapshot-repository/test.py | 25 +- .../java/buildless/source_archive.expected | 6 + .../java/buildless/test.expected | 9 - .../all-platforms/java/buildless/test.py | 10 +- .../all-platforms/java/buildless/test.ql | 9 - .../.gitattributes | 6 - .../force_sequential_test_execution | 4 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../android-gradle-incompatibility/gradlew | 240 ----------------- .../gradlew.bat | 91 ------- .../android-gradle-incompatibility/test.py | 9 +- .../diagnostics/compilation-error/test.py | 9 +- .../java/diagnostics/dependency-error/test.py | 22 +- .../java-version-too-old/.gitattributes | 6 - .../java-version-too-old/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/verification-metadata.xml | 7 - .../gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../diagnostics/java-version-too-old/gradlew | 185 ------------- .../java-version-too-old/gradlew.bat | 89 ------- .../skip-on-platform-osx-arm | 3 - .../diagnostics/java-version-too-old/test.py | 38 ++- .../diagnostics/maven-http-repository/test.py | 9 +- .../multiple-candidate-builds/test.py | 9 +- .../java/diagnostics/no-build-system/test.py | 9 +- .../diagnostics.expected | 2 +- .../no-gradle-test-classes/test.py | 9 +- .../force_sequential_test_execution | 3 - .../diagnostics/no-gradle-wrapper/test.py | 9 +- .../ecj-sample-noexit/source_archive.expected | 2 + .../java/ecj-sample-noexit/test.expected | 1 - .../java/ecj-sample-noexit/test.py | 10 +- .../java/ecj-sample-noexit/test.ql | 3 - .../java/ecj-sample/source_archive.expected | 2 + .../java/ecj-sample/test.expected | 1 - .../all-platforms/java/ecj-sample/test.py | 10 +- .../all-platforms/java/ecj-sample/test.ql | 3 - .../{Diagnostics.expected => Diag.expected} | 0 .../{Diagnostics.ql => Diag.ql} | 0 .../ecj-tolerate-enum-annotations/test.py | 16 +- .../.gitattributes | 9 - .../gradle-sample-kotlin-script/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../source_archive.expected | 9 + .../gradle-sample-kotlin-script/test.expected | 4 - .../java/gradle-sample-kotlin-script/test.py | 7 +- .../java/gradle-sample-kotlin-script/test.ql | 7 - .../java/gradle-sample/.gitattributes | 6 - .../java/gradle-sample/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../gradle/verification-metadata.xml | 7 - .../gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../all-platforms/java/gradle-sample/gradlew | 185 ------------- .../java/gradle-sample/gradlew.bat | 89 ------- .../gradle-sample/source_archive.expected | 9 + .../java/gradle-sample/test.expected | 5 - .../all-platforms/java/gradle-sample/test.py | 10 +- .../all-platforms/java/gradle-sample/test.ql | 7 - .../force_sequential_test_execution | 1 - .../all-platforms/java/java-web-jsp/test.py | 9 +- .../force_sequential_test_execution | 1 - .../maven-enforcer/source_archive.expected | 12 + .../java/maven-enforcer/test.expected | 15 -- .../all-platforms/java/maven-enforcer/test.py | 7 +- .../all-platforms/java/maven-enforcer/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 12 + .../test.expected | 15 -- .../maven-sample-extract-properties/test.py | 7 +- .../maven-sample-extract-properties/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 10 + .../test.expected | 7 - .../java/maven-sample-large-xml-files/test.py | 16 +- .../java/maven-sample-large-xml-files/test.ql | 7 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 17 ++ .../test.expected | 14 - .../java/maven-sample-small-xml-files/test.py | 16 +- .../java/maven-sample-small-xml-files/test.ql | 7 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 12 + .../maven-sample-xml-mode-all/test.expected | 9 - .../java/maven-sample-xml-mode-all/test.py | 7 +- .../java/maven-sample-xml-mode-all/test.ql | 7 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 10 + .../test.expected | 7 - .../java/maven-sample-xml-mode-byname/test.py | 7 +- .../java/maven-sample-xml-mode-byname/test.ql | 7 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 7 + .../test.expected | 4 - .../maven-sample-xml-mode-disabled/test.py | 7 +- .../maven-sample-xml-mode-disabled/test.ql | 7 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 10 + .../maven-sample-xml-mode-smart/test.expected | 7 - .../java/maven-sample-xml-mode-smart/test.py | 7 +- .../java/maven-sample-xml-mode-smart/test.ql | 7 - .../force_sequential_test_execution | 1 - .../java/maven-sample/source_archive.expected | 12 + .../java/maven-sample/test.expected | 15 -- .../all-platforms/java/maven-sample/test.py | 7 +- .../all-platforms/java/maven-sample/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 13 + .../maven-wrapper-script-only/test.expected | 16 -- .../java/maven-wrapper-script-only/test.py | 9 +- .../java/maven-wrapper-script-only/test.ql | 9 - .../force_sequential_test_execution | 1 - .../source_archive.expected | 13 + .../maven-wrapper-source-only/test.expected | 16 -- .../java/maven-wrapper-source-only/test.py | 9 +- .../java/maven-wrapper-source-only/test.ql | 9 - .../force_sequential_test_execution | 1 - .../maven-wrapper/source_archive.expected | 13 + .../java/maven-wrapper/test.expected | 16 -- .../all-platforms/java/maven-wrapper/test.py | 9 +- .../all-platforms/java/maven-wrapper/test.ql | 9 - .../java/multi-release-jar-java11/test.py | 35 ++- .../java/multi-release-jar-java17/test.py | 33 ++- .../force_sequential_test_execution | 3 - .../source_archive.expected | 10 + .../test.expected | 5 - .../test.py | 40 +-- .../test.ql | 7 - .../java/partial-gradle-sample/.gitignore | 5 - .../force_sequential_test_execution | 3 - .../source_archive.expected | 10 + .../java/partial-gradle-sample/test.expected | 5 - .../java/partial-gradle-sample/test.py | 9 +- .../java/partial-gradle-sample/test.ql | 7 - .../java/spring-boot-sample/.gitattributes | 6 - .../java/spring-boot-sample/.gitignore | 37 --- .../force_sequential_test_execution | 3 - .../gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - .../java/spring-boot-sample/gradlew | 249 ------------------ .../java/spring-boot-sample/gradlew.bat | 92 ------- .../source_archive.expected | 11 + .../java/spring-boot-sample/test.expected | 4 - .../java/spring-boot-sample/test.py | 10 +- .../java/spring-boot-sample/test.ql | 7 - 297 files changed, 848 insertions(+), 5570 deletions(-) delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/android-8-sample/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-8-sample/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/android-sample/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/android-sample/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/buildless/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradlew.bat delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/verification-metadata.xml delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew.bat delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/skip-on-platform-osx-arm delete mode 100644 java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.ql create mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/ecj-sample/test.ql rename java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/{Diagnostics.expected => Diag.expected} (100%) rename java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/{Diagnostics.ql => Diag.ql} (100%) delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradle/wrapper/gradle-wrapper.properties create mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/verification-metadata.xml delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/gradle-sample/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/java-web-jsp/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-enforcer/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-sample/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/maven-wrapper/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.ql delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitattributes delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/force_sequential_test_execution delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitattributes b/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitignore b/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitignore deleted file mode 100644 index c2065bc2620..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -HELP.md -.gradle -build/ -!gradle/wrapper/gradle-wrapper.jar -!**/src/main/**/build/ -!**/src/test/**/build/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache -bin/ -!**/src/main/**/bin/ -!**/src/test/**/bin/ - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr -out/ -!**/src/main/**/out/ -!**/src/test/**/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ - -### VS Code ### -.vscode/ diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-8-sample/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/android-8-sample/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/gradlew.bat b/java/ql/integration-tests/all-platforms/java/android-8-sample/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected new file mode 100644 index 00000000000..8d61145f807 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected @@ -0,0 +1,27 @@ +.gradle/8.0/dependencies-accessors/gc.properties +.gradle/8.0/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalReportRelease/module.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalReportRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +project/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/packageReleaseResources/merger.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.expected b/java/ql/integration-tests/all-platforms/java/android-8-sample/test.expected deleted file mode 100644 index 64ce68113e7..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.expected +++ /dev/null @@ -1,20 +0,0 @@ -#select -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/module.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml | -| project/build/intermediates/incremental/release/packageReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/packageReleaseResources/merger.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.py b/java/ql/integration-tests/all-platforms/java/android-8-sample/test.py index 3a0b27fe5ce..72e3c5d3fc4 100644 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-8-sample/test.py @@ -1,10 +1,4 @@ -import sys - -from create_database_utils import * - # Put Java 11 on the path so as to challenge our version selection logic: Java 11 is unsuitable for Android Gradle Plugin 8+, # so it will be necessary to notice Java 17 available in the environment and actively select it. - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_8_0, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.ql b/java/ql/integration-tests/all-platforms/java/android-8-sample/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected new file mode 100644 index 00000000000..70b1edf245a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected @@ -0,0 +1,26 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalReportRelease/module.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalReportRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.expected deleted file mode 100644 index 4f191ddaa1a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.expected +++ /dev/null @@ -1,20 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/module.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py index 7f379da0a07..e3a791a59f3 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/.gitattributes b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradlew.bat b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected new file mode 100644 index 00000000000..70b1edf245a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected @@ -0,0 +1,26 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalReportRelease/module.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalReportRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.expected deleted file mode 100644 index 4f191ddaa1a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.expected +++ /dev/null @@ -1,20 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/module.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py index 7f379da0a07..d3399e414e6 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_7_4, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected new file mode 100644 index 00000000000..70b1edf245a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected @@ -0,0 +1,26 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalReportRelease/module.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalReportRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.expected deleted file mode 100644 index 4f191ddaa1a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.expected +++ /dev/null @@ -1,20 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/module.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py index 7f379da0a07..e3a791a59f3 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected new file mode 100644 index 00000000000..a8f354b9e17 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected @@ -0,0 +1,29 @@ +.gradle/7.0.2/dependencies-accessors/gc.properties +.gradle/7.0.2/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalRelease/module.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/mergeReleaseResources/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected deleted file mode 100644 index f49910c2646..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected +++ /dev/null @@ -1,23 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/module.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py index 36702f6bb24..ca4ae04350f 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py @@ -1,8 +1,2 @@ -from create_database_utils import * -from toolchains_test_utils import * - -try_use_java11() - -toolchains_file = actions_expose_all_toolchains() - -run_codeql_database_create([], lang="java", extra_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": toolchains_file}) +def test(codeql, use_java_11, java, android_sdk, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradlew.bat b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected new file mode 100644 index 00000000000..2d3a437d507 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected @@ -0,0 +1,29 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalRelease/module.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/mergeReleaseResources/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected deleted file mode 100644 index f49910c2646..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected +++ /dev/null @@ -1,23 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/module.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py index 7f379da0a07..d3399e414e6 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_7_4, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected new file mode 100644 index 00000000000..a8f354b9e17 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected @@ -0,0 +1,29 @@ +.gradle/7.0.2/dependencies-accessors/gc.properties +.gradle/7.0.2/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalRelease/module.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/mergeReleaseResources/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected deleted file mode 100644 index f49910c2646..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected +++ /dev/null @@ -1,23 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/module.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py index 36702f6bb24..ca4ae04350f 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py @@ -1,8 +1,2 @@ -from create_database_utils import * -from toolchains_test_utils import * - -try_use_java11() - -toolchains_file = actions_expose_all_toolchains() - -run_codeql_database_create([], lang="java", extra_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": toolchains_file}) +def test(codeql, use_java_11, java, android_sdk, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/.gitattributes b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradlew.bat b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected new file mode 100644 index 00000000000..2d3a437d507 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected @@ -0,0 +1,29 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalRelease/module.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/mergeReleaseResources/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected deleted file mode 100644 index f49910c2646..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected +++ /dev/null @@ -1,23 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-testArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/module.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py index 7f379da0a07..d3399e414e6 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_7_4, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/.gitattributes b/java/ql/integration-tests/all-platforms/java/android-sample/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/android-sample/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/android-sample/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/gradlew.bat b/java/ql/integration-tests/all-platforms/java/android-sample/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected new file mode 100644 index 00000000000..70b1edf245a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected @@ -0,0 +1,26 @@ +.gradle/7.4/dependencies-accessors/gc.properties +.gradle/7.4/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java +project/build/intermediates/app_metadata/release/app-metadata.properties +project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml +project/build/intermediates/incremental/lintVitalReportRelease/module.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml +project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml +project/build/intermediates/incremental/lintVitalReportRelease/release.xml +project/build/intermediates/incremental/mergeReleaseAssets/merger.xml +project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +project/build/intermediates/incremental/mergeReleaseShaders/merger.xml +project/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +project/build/intermediates/merged_manifest/release/AndroidManifest.xml +project/build/intermediates/merged_manifests/release/AndroidManifest.xml +project/build/intermediates/packaged_manifests/release/AndroidManifest.xml +project/src/main/AndroidManifest.xml +project/src/main/java/com/github/androidsample/Main.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample/test.expected deleted file mode 100644 index 4f191ddaa1a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample/test.expected +++ /dev/null @@ -1,20 +0,0 @@ -#select -| project/build/generated/source/buildConfig/release/com/github/androidsample/BuildConfig.java:0:0:0:0 | BuildConfig | -| project/src/main/java/com/github/androidsample/Main.java:0:0:0:0 | Main | -xmlFiles -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/module.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalAnalyzeRelease/release.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/module.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/module.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-dependencies.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release-mainArtifact-libraries.xml | -| project/build/intermediates/incremental/lintVitalReportRelease/release.xml:0:0:0:0 | project/build/intermediates/incremental/lintVitalReportRelease/release.xml | -| project/build/intermediates/incremental/mergeReleaseAssets/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseAssets/merger.xml | -| project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | -| project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | -| project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/release/mergeReleaseResources/merger.xml | -| project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | -| project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | -| project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | -| project/src/main/AndroidManifest.xml:0:0:0:0 | project/src/main/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/test.py b/java/ql/integration-tests/all-platforms/java/android-sample/test.py index 7f379da0a07..d3399e414e6 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/android-sample/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * - -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_7_4, android_sdk): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/test.ql b/java/ql/integration-tests/all-platforms/java/android-sample/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/android-sample/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/test.py b/java/ql/integration-tests/all-platforms/java/ant-sample/test.py index ab8845cbd73..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/ant-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/ant-sample/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py index 6d0437d3ae2..6e0e201d9a2 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py @@ -1,20 +1,19 @@ -import sys - -from create_database_utils import * -from buildless_test_utils import * import subprocess +import logging -# Each of these serves the "repo" and "repo2" directories on http://localhost:924[89] -repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9428"], cwd = "repo") -repo_server_process2 = subprocess.Popen(["python3", "-m", "http.server", "9429"], cwd = "repo2") -try: - run_codeql_database_create([], lang="java", extra_args=["--extractor-option=buildless=true"], extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) -finally: - try: - repo_server_process.kill() - except Exception as e: - print("Failed to kill server 1:", e, file = sys.stderr) - repo_server_process2.kill() - -check_buildless_fetches() +def test(codeql, java): + # Each of these serves the "repo" and "repo2" directories on http://localhost:924[89] + repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9428"], cwd="repo") + repo_server_process2 = subprocess.Popen(["python3", "-m", "http.server", "9429"], cwd="repo2") + try: + codeql.database.create( + extractor_option="buildless=true", + _env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}, + ) + finally: + try: + repo_server_process.kill() + except Exception as e: + logging.error("Failed to kill server 1:", e) + repo_server_process2.kill() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py index 747dd6a82ad..834b1132cf1 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py @@ -1,8 +1,2 @@ -import sys - -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"}) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"}) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitattributes b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitattributes deleted file mode 100644 index 097f9f98d9e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitignore b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index ac72c34e8ac..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew deleted file mode 100755 index 0adc8e1a532..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew.bat b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew.bat deleted file mode 100644 index 93e3f59f135..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected new file mode 100644 index 00000000000..1ee055eeb02 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected @@ -0,0 +1,7 @@ +.gradle/8.3/dependencies-accessors/gc.properties +.gradle/8.3/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/fractestexample/Test.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.expected deleted file mode 100644 index 05792cb19fc..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.expected +++ /dev/null @@ -1 +0,0 @@ -| src/main/java/com/fractestexample/Test.java:0:0:0:0 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py index bfff65b2fc2..bea3e5f552c 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py @@ -1,8 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java, gradle_8_3): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.ql deleted file mode 100644 index 8317a5a022f..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected new file mode 100644 index 00000000000..e51c49f2057 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected @@ -0,0 +1,5 @@ +gradle/verification-metadata.xml +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/example/App.java +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.expected deleted file mode 100644 index e7dd5838e6b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.expected +++ /dev/null @@ -1,5 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| gradle/verification-metadata.xml:0:0:0:0 | gradle/verification-metadata.xml | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py index 5e02cc11397..b0e307f15bb 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py @@ -1,9 +1,7 @@ -import sys - -from create_database_utils import * -from diagnostics_test_utils import * - -# gradlew has been rigged to stall for a long time by trying to fetch from a black-hole IP. We should find the timeout logic fires and buildless aborts the Gradle run quickly. - -run_codeql_database_create([], lang="java", extra_args=["--build-mode=none"], extra_env={"CODEQL_EXTRACTOR_JAVA_BUILDLESS_CHILD_PROCESS_IDLE_TIMEOUT": "5"}) -check_diagnostics() +def test(codeql, java): + # gradlew has been rigged to stall for a long time by trying to fetch from a black-hole IP. + # We should find the timeout logic fires and buildless aborts the Gradle run quickly. + codeql.database.create( + build_mode="none", + _env={"CODEQL_EXTRACTOR_JAVA_BUILDLESS_CHILD_PROCESS_IDLE_TIMEOUT": "5"}, + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes deleted file mode 100644 index 097f9f98d9e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63721 zcmb5Wb9gP!wgnp7wrv|bwr$&XvSZt}Z6`anZSUAlc9NHKf9JdJ;NJVr`=eI(_pMp0 zy1VAAG3FfAOI`{X1O)&90s;U4K;XLp008~hCjbEC_fbYfS%6kTR+JtXK>nW$ZR+`W ze|#J8f4A@M|F5BpfUJb5h>|j$jOe}0oE!`Zf6fM>CR?!y@zU(cL8NsKk`a z6tx5mAkdjD;J=LcJ;;Aw8p!v#ouk>mUDZF@ zK>yvw%+bKu+T{Nk@LZ;zkYy0HBKw06_IWcMHo*0HKpTsEFZhn5qCHH9j z)|XpN&{`!0a>Vl+PmdQc)Yg4A(AG-z!+@Q#eHr&g<9D?7E)_aEB?s_rx>UE9TUq|? z;(ggJt>9l?C|zoO@5)tu?EV0x_7T17q4fF-q3{yZ^ipUbKcRZ4Qftd!xO(#UGhb2y>?*@{xq%`(-`2T^vc=#< zx!+@4pRdk&*1ht2OWk^Z5IAQ0YTAXLkL{(D*$gENaD)7A%^XXrCchN&z2x+*>o2FwPFjWpeaL=!tzv#JOW#( z$B)Nel<+$bkH1KZv3&-}=SiG~w2sbDbAWarg%5>YbC|}*d9hBjBkR(@tyM0T)FO$# zPtRXukGPnOd)~z=?avu+4Co@wF}1T)-uh5jI<1$HLtyDrVak{gw`mcH@Q-@wg{v^c zRzu}hMKFHV<8w}o*yg6p@Sq%=gkd~;`_VGTS?L@yVu`xuGy+dH6YOwcP6ZE`_0rK% zAx5!FjDuss`FQ3eF|mhrWkjux(Pny^k$u_)dyCSEbAsecHsq#8B3n3kDU(zW5yE|( zgc>sFQywFj5}U*qtF9Y(bi*;>B7WJykcAXF86@)z|0-Vm@jt!EPoLA6>r)?@DIobIZ5Sx zsc@OC{b|3%vaMbyeM|O^UxEYlEMHK4r)V-{r)_yz`w1*xV0|lh-LQOP`OP`Pk1aW( z8DSlGN>Ts|n*xj+%If~+E_BxK)~5T#w6Q1WEKt{!Xtbd`J;`2a>8boRo;7u2M&iOop4qcy<)z023=oghSFV zST;?S;ye+dRQe>ygiJ6HCv4;~3DHtJ({fWeE~$H@mKn@Oh6Z(_sO>01JwH5oA4nvK zr5Sr^g+LC zLt(i&ecdmqsIJGNOSUyUpglvhhrY8lGkzO=0USEKNL%8zHshS>Qziu|`eyWP^5xL4 zRP122_dCJl>hZc~?58w~>`P_s18VoU|7(|Eit0-lZRgLTZKNq5{k zE?V=`7=R&ro(X%LTS*f+#H-mGo_j3dm@F_krAYegDLk6UV{`UKE;{YSsn$ z(yz{v1@p|p!0>g04!eRSrSVb>MQYPr8_MA|MpoGzqyd*$@4j|)cD_%^Hrd>SorF>@ zBX+V<@vEB5PRLGR(uP9&U&5=(HVc?6B58NJT_igiAH*q~Wb`dDZpJSKfy5#Aag4IX zj~uv74EQ_Q_1qaXWI!7Vf@ZrdUhZFE;L&P_Xr8l@GMkhc#=plV0+g(ki>+7fO%?Jb zl+bTy7q{w^pTb{>(Xf2q1BVdq?#f=!geqssXp z4pMu*q;iiHmA*IjOj4`4S&|8@gSw*^{|PT}Aw~}ZXU`6=vZB=GGeMm}V6W46|pU&58~P+?LUs%n@J}CSrICkeng6YJ^M? zS(W?K4nOtoBe4tvBXs@@`i?4G$S2W&;$z8VBSM;Mn9 zxcaEiQ9=vS|bIJ>*tf9AH~m&U%2+Dim<)E=}KORp+cZ^!@wI`h1NVBXu{@%hB2Cq(dXx_aQ9x3mr*fwL5!ZryQqi|KFJuzvP zK1)nrKZ7U+B{1ZmJub?4)Ln^J6k!i0t~VO#=q1{?T)%OV?MN}k5M{}vjyZu#M0_*u z8jwZKJ#Df~1jcLXZL7bnCEhB6IzQZ-GcoQJ!16I*39iazoVGugcKA{lhiHg4Ta2fD zk1Utyc5%QzZ$s3;p0N+N8VX{sd!~l*Ta3|t>lhI&G`sr6L~G5Lul`>m z{!^INm?J|&7X=;{XveF!(b*=?9NAp4y&r&N3(GKcW4rS(Ejk|Lzs1PrxPI_owB-`H zg3(Rruh^&)`TKA6+_!n>RdI6pw>Vt1_j&+bKIaMTYLiqhZ#y_=J8`TK{Jd<7l9&sY z^^`hmi7^14s16B6)1O;vJWOF$=$B5ONW;;2&|pUvJlmeUS&F;DbSHCrEb0QBDR|my zIs+pE0Y^`qJTyH-_mP=)Y+u^LHcuZhsM3+P||?+W#V!_6E-8boP#R-*na4!o-Q1 zVthtYhK{mDhF(&7Okzo9dTi03X(AE{8cH$JIg%MEQca`S zy@8{Fjft~~BdzWC(di#X{ny;!yYGK9b@=b|zcKZ{vv4D8i+`ilOPl;PJl{!&5-0!w z^fOl#|}vVg%=n)@_e1BrP)`A zKPgs`O0EO}Y2KWLuo`iGaKu1k#YR6BMySxQf2V++Wo{6EHmK>A~Q5o73yM z-RbxC7Qdh0Cz!nG+7BRZE>~FLI-?&W_rJUl-8FDIaXoNBL)@1hwKa^wOr1($*5h~T zF;%f^%<$p8Y_yu(JEg=c_O!aZ#)Gjh$n(hfJAp$C2he555W5zdrBqjFmo|VY+el;o z=*D_w|GXG|p0**hQ7~9-n|y5k%B}TAF0iarDM!q-jYbR^us(>&y;n^2l0C%@2B}KM zyeRT9)oMt97Agvc4sEKUEy%MpXr2vz*lb zh*L}}iG>-pqDRw7ud{=FvTD?}xjD)w{`KzjNom-$jS^;iw0+7nXSnt1R@G|VqoRhE%12nm+PH?9`(4rM0kfrZzIK9JU=^$YNyLvAIoxl#Q)xxDz!^0@zZ zSCs$nfcxK_vRYM34O<1}QHZ|hp4`ioX3x8(UV(FU$J@o%tw3t4k1QPmlEpZa2IujG&(roX_q*%e`Hq|);0;@k z0z=fZiFckp#JzW0p+2A+D$PC~IsakhJJkG(c;CqAgFfU0Z`u$PzG~-9I1oPHrCw&)@s^Dc~^)#HPW0Ra}J^=|h7Fs*<8|b13ZzG6MP*Q1dkoZ6&A^!}|hbjM{2HpqlSXv_UUg1U4gn z3Q)2VjU^ti1myodv+tjhSZp%D978m~p& z43uZUrraHs80Mq&vcetqfQpQP?m!CFj)44t8Z}k`E798wxg&~aCm+DBoI+nKq}&j^ zlPY3W$)K;KtEajks1`G?-@me7C>{PiiBu+41#yU_c(dITaqE?IQ(DBu+c^Ux!>pCj zLC|HJGU*v+!it1(;3e`6igkH(VA)-S+k(*yqxMgUah3$@C zz`7hEM47xr>j8^g`%*f=6S5n>z%Bt_Fg{Tvmr+MIsCx=0gsu_sF`q2hlkEmisz#Fy zj_0;zUWr;Gz}$BS%Y`meb(=$d%@Crs(OoJ|}m#<7=-A~PQbyN$x%2iXP2@e*nO0b7AwfH8cCUa*Wfu@b)D_>I*%uE4O3 z(lfnB`-Xf*LfC)E}e?%X2kK7DItK6Tf<+M^mX0Ijf_!IP>7c8IZX%8_#0060P{QMuV^B9i<^E`_Qf0pv9(P%_s8D`qvDE9LK9u-jB}J2S`(mCO&XHTS04Z5Ez*vl^T%!^$~EH8M-UdwhegL>3IQ*)(MtuH2Xt1p!fS4o~*rR?WLxlA!sjc2(O znjJn~wQ!Fp9s2e^IWP1C<4%sFF}T4omr}7+4asciyo3DntTgWIzhQpQirM$9{EbQd z3jz9vS@{aOqTQHI|l#aUV@2Q^Wko4T0T04Me4!2nsdrA8QY1%fnAYb~d2GDz@lAtfcHq(P7 zaMBAGo}+NcE-K*@9y;Vt3*(aCaMKXBB*BJcD_Qnxpt75r?GeAQ}*|>pYJE=uZb73 zC>sv)18)q#EGrTG6io*}JLuB_jP3AU1Uiu$D7r|2_zlIGb9 zjhst#ni)Y`$)!fc#reM*$~iaYoz~_Cy7J3ZTiPm)E?%`fbk`3Tu-F#`{i!l5pNEn5 zO-Tw-=TojYhzT{J=?SZj=Z8#|eoF>434b-DXiUsignxXNaR3 zm_}4iWU$gt2Mw5NvZ5(VpF`?X*f2UZDs1TEa1oZCif?Jdgr{>O~7}-$|BZ7I(IKW`{f;@|IZFX*R8&iT= zoWstN8&R;}@2Ka%d3vrLtR|O??ben;k8QbS-WB0VgiCz;<$pBmIZdN!aalyCSEm)crpS9dcD^Y@XT1a3+zpi-`D}e#HV<} z$Y(G&o~PvL-xSVD5D?JqF3?B9rxGWeb=oEGJ3vRp5xfBPlngh1O$yI95EL+T8{GC@ z98i1H9KhZGFl|;`)_=QpM6H?eDPpw~^(aFQWwyXZ8_EEE4#@QeT_URray*mEOGsGc z6|sdXtq!hVZo=d#+9^@lm&L5|q&-GDCyUx#YQiccq;spOBe3V+VKdjJA=IL=Zn%P} zNk=_8u}VhzFf{UYZV0`lUwcD&)9AFx0@Fc6LD9A6Rd1=ga>Mi0)_QxM2ddCVRmZ0d z+J=uXc(?5JLX3=)e)Jm$HS2yF`44IKhwRnm2*669_J=2LlwuF5$1tAo@ROSU@-y+;Foy2IEl2^V1N;fk~YR z?&EP8#t&m0B=?aJeuz~lHjAzRBX>&x=A;gIvb>MD{XEV zV%l-+9N-)i;YH%nKP?>f`=?#`>B(`*t`aiPLoQM(a6(qs4p5KFjDBN?8JGrf3z8>= zi7sD)c)Nm~x{e<^jy4nTx${P~cwz_*a>%0_;ULou3kHCAD7EYkw@l$8TN#LO9jC( z1BeFW`k+bu5e8Ns^a8dPcjEVHM;r6UX+cN=Uy7HU)j-myRU0wHd$A1fNI~`4;I~`zC)3ul#8#^rXVSO*m}Ag>c%_;nj=Nv$rCZ z*~L@C@OZg%Q^m)lc-kcX&a*a5`y&DaRxh6O*dfhLfF+fU5wKs(1v*!TkZidw*)YBP za@r`3+^IHRFeO%!ai%rxy;R;;V^Fr=OJlpBX;(b*3+SIw}7= zIq$*Thr(Zft-RlY)D3e8V;BmD&HOfX+E$H#Y@B3?UL5L~_fA-@*IB-!gItK7PIgG9 zgWuGZK_nuZjHVT_Fv(XxtU%)58;W39vzTI2n&)&4Dmq7&JX6G>XFaAR{7_3QB6zsT z?$L8c*WdN~nZGiscY%5KljQARN;`w$gho=p006z;n(qIQ*Zu<``TMO3n0{ARL@gYh zoRwS*|Niw~cR!?hE{m*y@F`1)vx-JRfqET=dJ5_(076st(=lFfjtKHoYg`k3oNmo_ zNbQEw8&sO5jAYmkD|Zaz_yUb0rC})U!rCHOl}JhbYIDLzLvrZVw0~JO`d*6f;X&?V=#T@ND*cv^I;`sFeq4 z##H5;gpZTb^0Hz@3C*~u0AqqNZ-r%rN3KD~%Gw`0XsIq$(^MEb<~H(2*5G^<2(*aI z%7}WB+TRlMIrEK#s0 z93xn*Ohb=kWFc)BNHG4I(~RPn-R8#0lqyBBz5OM6o5|>x9LK@%HaM}}Y5goCQRt2C z{j*2TtT4ne!Z}vh89mjwiSXG=%DURar~=kGNNaO_+Nkb+tRi~Rkf!7a$*QlavziD( z83s4GmQ^Wf*0Bd04f#0HX@ua_d8 z23~z*53ePD6@xwZ(vdl0DLc=>cPIOPOdca&MyR^jhhKrdQO?_jJh`xV3GKz&2lvP8 zEOwW6L*ufvK;TN{=S&R@pzV^U=QNk^Ec}5H z+2~JvEVA{`uMAr)?Kf|aW>33`)UL@bnfIUQc~L;TsTQ6>r-<^rB8uoNOJ>HWgqMI8 zSW}pZmp_;z_2O5_RD|fGyTxaxk53Hg_3Khc<8AUzV|ZeK{fp|Ne933=1&_^Dbv5^u zB9n=*)k*tjHDRJ@$bp9mrh}qFn*s}npMl5BMDC%Hs0M0g-hW~P*3CNG06G!MOPEQ_ zi}Qs-6M8aMt;sL$vlmVBR^+Ry<64jrm1EI1%#j?c?4b*7>)a{aDw#TfTYKq+SjEFA z(aJ&z_0?0JB83D-i3Vh+o|XV4UP+YJ$9Boid2^M2en@APw&wx7vU~t$r2V`F|7Qfo z>WKgI@eNBZ-+Og<{u2ZiG%>YvH2L3fNpV9J;WLJoBZda)01Rn;o@){01{7E#ke(7U zHK>S#qZ(N=aoae*4X!0A{)nu0R_sKpi1{)u>GVjC+b5Jyl6#AoQ-1_3UDovNSo`T> z?c-@7XX*2GMy?k?{g)7?Sv;SJkmxYPJPs!&QqB12ejq`Lee^-cDveVWL^CTUldb(G zjDGe(O4P=S{4fF=#~oAu>LG>wrU^z_?3yt24FOx>}{^lCGh8?vtvY$^hbZ)9I0E3r3NOlb9I?F-Yc=r$*~l`4N^xzlV~N zl~#oc>U)Yjl0BxV>O*Kr@lKT{Z09OXt2GlvE38nfs+DD7exl|&vT;)>VFXJVZp9Np zDK}aO;R3~ag$X*|hRVY3OPax|PG`@_ESc8E!mHRByJbZQRS38V2F__7MW~sgh!a>98Q2%lUNFO=^xU52|?D=IK#QjwBky-C>zOWlsiiM&1n z;!&1((Xn1$9K}xabq~222gYvx3hnZPg}VMF_GV~5ocE=-v>V=T&RsLBo&`)DOyIj* zLV{h)JU_y*7SdRtDajP_Y+rBkNN*1_TXiKwHH2&p51d(#zv~s#HwbNy?<+(=9WBvo zw2hkk2Dj%kTFhY+$T+W-b7@qD!bkfN#Z2ng@Pd=i3-i?xYfs5Z*1hO?kd7Sp^9`;Y zM2jeGg<-nJD1er@Pc_cSY7wo5dzQX44=%6rn}P_SRbpzsA{6B+!$3B0#;}qwO37G^ zL(V_5JK`XT?OHVk|{_$vQ|oNEpab*BO4F zUTNQ7RUhnRsU`TK#~`)$icsvKh~(pl=3p6m98@k3P#~upd=k*u20SNcb{l^1rUa)>qO997)pYRWMncC8A&&MHlbW?7i^7M`+B$hH~Y|J zd>FYOGQ;j>Zc2e7R{KK7)0>>nn_jYJy&o@sK!4G>-rLKM8Hv)f;hi1D2fAc$+six2 zyVZ@wZ6x|fJ!4KrpCJY=!Mq0;)X)OoS~{Lkh6u8J`eK%u0WtKh6B>GW_)PVc zl}-k`p09qwGtZ@VbYJC!>29V?Dr>>vk?)o(x?!z*9DJ||9qG-&G~#kXxbw{KKYy}J zQKa-dPt~M~E}V?PhW0R26xdA%1T*%ra6SguGu50YHngOTIv)@N|YttEXo#OZfgtP7;H?EeZZxo<}3YlYxtBq znJ!WFR^tmGf0Py}N?kZ(#=VtpC@%xJkDmfcCoBTxq zr_|5gP?u1@vJZbxPZ|G0AW4=tpb84gM2DpJU||(b8kMOV1S3|(yuwZJ&rIiFW(U;5 zUtAW`O6F6Zy+eZ1EDuP~AAHlSY-+A_eI5Gx)%*uro5tljy}kCZU*_d7)oJ>oQSZ3* zneTn`{gnNC&uJd)0aMBzAg021?YJ~b(fmkwZAd696a=0NzBAqBN54KuNDwa*no(^O z6p05bioXUR^uXjpTol*ppHp%1v9e)vkoUAUJyBx3lw0UO39b0?^{}yb!$yca(@DUn zCquRF?t=Zb9`Ed3AI6|L{eX~ijVH`VzSMheKoP7LSSf4g>md>`yi!TkoG5P>Ofp+n z(v~rW+(5L96L{vBb^g51B=(o)?%%xhvT*A5btOpw(TKh^g^4c zw>0%X!_0`{iN%RbVk+A^f{w-4-SSf*fu@FhruNL##F~sF24O~u zyYF<3el2b$$wZ_|uW#@Ak+VAGk#e|kS8nL1g>2B-SNMjMp^8;-FfeofY2fphFHO!{ z*!o4oTb{4e;S<|JEs<1_hPsmAlVNk?_5-Fp5KKU&d#FiNW~Y+pVFk@Cua1I{T+1|+ zHx6rFMor)7L)krbilqsWwy@T+g3DiH5MyVf8Wy}XbEaoFIDr~y;@r&I>FMW{ z?Q+(IgyebZ)-i4jNoXQhq4Muy9Fv+OxU;9_Jmn+<`mEC#%2Q_2bpcgzcinygNI!&^ z=V$)o2&Yz04~+&pPWWn`rrWxJ&}8khR)6B(--!9Q zubo}h+1T)>a@c)H^i``@<^j?|r4*{;tQf78(xn0g39IoZw0(CwY1f<%F>kEaJ zp9u|IeMY5mRdAlw*+gSN^5$Q)ShM<~E=(c8QM+T-Qk)FyKz#Sw0EJ*edYcuOtO#~Cx^(M7w5 z3)rl#L)rF|(Vun2LkFr!rg8Q@=r>9p>(t3Gf_auiJ2Xx9HmxYTa|=MH_SUlYL`mz9 zTTS$`%;D-|Jt}AP1&k7PcnfFNTH0A-*FmxstjBDiZX?}%u%Yq94$fUT&z6od+(Uk> zuqsld#G(b$G8tus=M!N#oPd|PVFX)?M?tCD0tS%2IGTfh}3YA3f&UM)W$_GNV8 zQo+a(ml2Km4o6O%gKTCSDNq+#zCTIQ1*`TIJh~k6Gp;htHBFnne))rlFdGqwC6dx2+La1&Mnko*352k0y z+tQcwndQlX`nc6nb$A9?<-o|r*%aWXV#=6PQic0Ok_D;q>wbv&j7cKc!w4~KF#-{6 z(S%6Za)WpGIWf7jZ3svNG5OLs0>vCL9{V7cgO%zevIVMH{WgP*^D9ws&OqA{yr|m| zKD4*07dGXshJHd#e%x%J+qmS^lS|0Bp?{drv;{@{l9ArPO&?Q5=?OO9=}h$oVe#3b z3Yofj&Cb}WC$PxmRRS)H%&$1-)z7jELS}!u!zQ?A^Y{Tv4QVt*vd@uj-^t2fYRzQj zfxGR>-q|o$3sGn^#VzZ!QQx?h9`njeJry}@x?|k0-GTTA4y3t2E`3DZ!A~D?GiJup z)8%PK2^9OVRlP(24P^4_<|D=H^7}WlWu#LgsdHzB%cPy|f8dD3|A^mh4WXxhLTVu_ z@abE{6Saz|Y{rXYPd4$tfPYo}ef(oQWZ=4Bct-=_9`#Qgp4ma$n$`tOwq#&E18$B; z@Bp)bn3&rEi0>fWWZ@7k5WazfoX`SCO4jQWwVuo+$PmSZn^Hz?O(-tW@*DGxuf)V1 zO_xm&;NVCaHD4dqt(-MlszI3F-p?0!-e$fbiCeuaw66h^TTDLWuaV<@C-`=Xe5WL) zwooG7h>4&*)p3pKMS3O!4>-4jQUN}iAMQ)2*70?hP~)TzzR?-f@?Aqy$$1Iy8VGG$ zMM?8;j!pUX7QQD$gRc_#+=raAS577ga-w?jd`vCiN5lu)dEUkkUPl9!?{$IJNxQys z*E4e$eF&n&+AMRQR2gcaFEjAy*r)G!s(P6D&TfoApMFC_*Ftx0|D0@E-=B7tezU@d zZ{hGiN;YLIoSeRS;9o%dEua4b%4R3;$SugDjP$x;Z!M!@QibuSBb)HY!3zJ7M;^jw zlx6AD50FD&p3JyP*>o+t9YWW8(7P2t!VQQ21pHJOcG_SXQD;(5aX#M6x##5H_Re>6lPyDCjxr*R(+HE%c&QN+b^tbT zXBJk?p)zhJj#I?&Y2n&~XiytG9!1ox;bw5Rbj~)7c(MFBb4>IiRATdhg zmiEFlj@S_hwYYI(ki{}&<;_7(Z0Qkfq>am z&LtL=2qc7rWguk3BtE4zL41@#S;NN*-jWw|7Kx7H7~_%7fPt;TIX}Ubo>;Rmj94V> zNB1=;-9AR7s`Pxn}t_6^3ahlq53e&!Lh85uG zec0vJY_6e`tg7LgfrJ3k!DjR)Bi#L@DHIrZ`sK=<5O0Ip!fxGf*OgGSpP@Hbbe&$9 z;ZI}8lEoC2_7;%L2=w?tb%1oL0V+=Z`7b=P&lNGY;yVBazXRYu;+cQDKvm*7NCxu&i;zub zAJh#11%?w>E2rf2e~C4+rAb-&$^vsdACs7 z@|Ra!OfVM(ke{vyiqh7puf&Yp6cd6{DptUteYfIRWG3pI+5< zBVBI_xkBAc<(pcb$!Y%dTW(b;B;2pOI-(QCsLv@U-D1XJ z(Gk8Q3l7Ws46Aktuj>|s{$6zA&xCPuXL-kB`CgYMs}4IeyG*P51IDwW?8UNQd+$i~ zlxOPtSi5L|gJcF@DwmJA5Ju8HEJ>o{{upwIpb!f{2(vLNBw`7xMbvcw<^{Fj@E~1( z?w`iIMieunS#>nXlmUcSMU+D3rX28f?s7z;X=se6bo8;5vM|O^(D6{A9*ChnGH!RG zP##3>LDC3jZPE4PH32AxrqPk|yIIrq~`aL-=}`okhNu9aT%q z1b)7iJ)CN=V#Ly84N_r7U^SH2FGdE5FpTO2 z630TF$P>GNMu8`rOytb(lB2};`;P4YNwW1<5d3Q~AX#P0aX}R2b2)`rgkp#zTxcGj zAV^cvFbhP|JgWrq_e`~exr~sIR$6p5V?o4Wym3kQ3HA+;Pr$bQ0(PmADVO%MKL!^q z?zAM8j1l4jrq|5X+V!8S*2Wl@=7*pPgciTVK6kS1Ge zMsd_u6DFK$jTnvVtE;qa+8(1sGBu~n&F%dh(&c(Zs4Fc#A=gG^^%^AyH}1^?|8quj zl@Z47h$){PlELJgYZCIHHL= z{U8O>Tw4x3<1{?$8>k-P<}1y9DmAZP_;(3Y*{Sk^H^A=_iSJ@+s5ktgwTXz_2$~W9>VVZsfwCm@s0sQ zeB50_yu@uS+e7QoPvdCwDz{prjo(AFwR%C?z`EL{1`|coJHQTk^nX=tvs1<0arUOJ z!^`*x&&BvTYmemyZ)2p~{%eYX=JVR?DYr(rNgqRMA5E1PR1Iw=prk=L2ldy3r3Vg@27IZx43+ywyzr-X*p*d@tZV+!U#~$-q=8c zgdSuh#r?b4GhEGNai)ayHQpk>5(%j5c@C1K3(W1pb~HeHpaqijJZa-e6vq_8t-^M^ zBJxq|MqZc?pjXPIH}70a5vt!IUh;l}<>VX<-Qcv^u@5(@@M2CHSe_hD$VG-eiV^V( zj7*9T0?di?P$FaD6oo?)<)QT>Npf6Og!GO^GmPV(Km0!=+dE&bk#SNI+C9RGQ|{~O*VC+tXK3!n`5 zHfl6>lwf_aEVV3`0T!aHNZLsj$paS$=LL(?b!Czaa5bbSuZ6#$_@LK<(7yrrl+80| z{tOFd=|ta2Z`^ssozD9BINn45NxUeCQis?-BKmU*Kt=FY-NJ+)8S1ecuFtN-M?&42 zl2$G>u!iNhAk*HoJ^4v^9#ORYp5t^wDj6|lx~5w45#E5wVqI1JQ~9l?nPp1YINf++ zMAdSif~_ETv@Er(EFBI^@L4BULFW>)NI+ejHFP*T}UhWNN`I)RRS8za? z*@`1>9ZB}An%aT5K=_2iQmfE;GcBVHLF!$`I99o5GO`O%O_zLr9AG18>&^HkG(;=V z%}c!OBQ~?MX(9h~tajX{=x)+!cbM7$YzTlmsPOdp2L-?GoW`@{lY9U3f;OUo*BwRB z8A+nv(br0-SH#VxGy#ZrgnGD(=@;HME;yd46EgWJ`EL%oXc&lFpc@Y}^>G(W>h_v_ zlN!`idhX+OjL+~T?19sroAFVGfa5tX-D49w$1g2g_-T|EpHL6}K_aX4$K=LTvwtlF zL*z}j{f+Uoe7{-px3_5iKPA<_7W=>Izkk)!l9ez2w%vi(?Y;i8AxRNLSOGDzNoqoI zP!1uAl}r=_871(G?y`i&)-7{u=%nxk7CZ_Qh#!|ITec zwQn`33GTUM`;D2POWnkqngqJhJRlM>CTONzTG}>^Q0wUunQyn|TAiHzyX2_%ATx%P z%7gW)%4rA9^)M<_%k@`Y?RbC<29sWU&5;@|9thf2#zf8z12$hRcZ!CSb>kUp=4N#y zl3hE#y6>kkA8VY2`W`g5Ip?2qC_BY$>R`iGQLhz2-S>x(RuWv)SPaGdl^)gGw7tjR zH@;jwk!jIaCgSg_*9iF|a);sRUTq30(8I(obh^|}S~}P4U^BIGYqcz;MPpC~Y@k_m zaw4WG1_vz2GdCAX!$_a%GHK**@IrHSkGoN>)e}>yzUTm52on`hYot7cB=oA-h1u|R ztH$11t?54Qg2L+i33FPFKKRm1aOjKST{l1*(nps`>sv%VqeVMWjl5+Gh+9);hIP8? zA@$?}Sc z3qIRpba+y5yf{R6G(u8Z^vkg0Fu&D-7?1s=QZU`Ub{-!Y`I?AGf1VNuc^L3v>)>i# z{DV9W$)>34wnzAXUiV^ZpYKw>UElrN_5Xj6{r_3| z$X5PK`e5$7>~9Dj7gK5ash(dvs`vwfk}&RD`>04;j62zoXESkFBklYaKm5seyiX(P zqQ-;XxlV*yg?Dhlx%xt!b0N3GHp@(p$A;8|%# zZ5m2KL|{on4nr>2_s9Yh=r5ScQ0;aMF)G$-9-Ca6%wA`Pa)i?NGFA|#Yi?{X-4ZO_ z^}%7%vkzvUHa$-^Y#aA+aiR5sa%S|Ebyn`EV<3Pc?ax_f>@sBZF1S;7y$CXd5t5=WGsTKBk8$OfH4v|0?0I=Yp}7c=WBSCg!{0n)XmiU;lfx)**zZaYqmDJelxk$)nZyx5`x$6R|fz(;u zEje5Dtm|a%zK!!tk3{i9$I2b{vXNFy%Bf{50X!x{98+BsDr_u9i>G5%*sqEX|06J0 z^IY{UcEbj6LDwuMh7cH`H@9sVt1l1#8kEQ(LyT@&+K}(ReE`ux8gb0r6L_#bDUo^P z3Ka2lRo52Hdtl_%+pwVs14=q`{d^L58PsU@AMf(hENumaxM{7iAT5sYmWh@hQCO^ zK&}ijo=`VqZ#a3vE?`7QW0ZREL17ZvDfdqKGD?0D4fg{7v%|Yj&_jcKJAB)>=*RS* zto8p6@k%;&^ZF>hvXm&$PCuEp{uqw3VPG$9VMdW5$w-fy2CNNT>E;>ejBgy-m_6`& z97L1p{%srn@O_JQgFpa_#f(_)eb#YS>o>q3(*uB;uZb605(iqM$=NK{nHY=+X2*G) zO3-_Xh%aG}fHWe*==58zBwp%&`mge<8uq8;xIxOd=P%9EK!34^E9sk|(Zq1QSz-JVeP12Fp)-`F|KY$LPwUE?rku zY@OJ)Z9A!ojfzfeyJ9;zv2EM7ZQB)AR5xGa-tMn^bl)FmoIiVyJ@!~@%{}qXXD&Ns zPnfe5U+&ohKefILu_1mPfLGuapX@btta5C#gPB2cjk5m4T}Nfi+Vfka!Yd(L?-c~5 z#ZK4VeQEXNPc4r$K00Fg>g#_W!YZ)cJ?JTS<&68_$#cZT-ME`}tcwqg3#``3M3UPvn+pi}(VNNx6y zFIMVb6OwYU(2`at$gHba*qrMVUl8xk5z-z~fb@Q3Y_+aXuEKH}L+>eW__!IAd@V}L zkw#s%H0v2k5-=vh$^vPCuAi22Luu3uKTf6fPo?*nvj$9(u)4$6tvF-%IM+3pt*cgs z_?wW}J7VAA{_~!?))?s6{M=KPpVhg4fNuU*|3THp@_(q!b*hdl{fjRVFWtu^1dV(f z6iOux9hi&+UK=|%M*~|aqFK{Urfl!TA}UWY#`w(0P!KMe1Si{8|o))Gy6d7;!JQYhgMYmXl?3FfOM2nQGN@~Ap6(G z3+d_5y@=nkpKAhRqf{qQ~k7Z$v&l&@m7Ppt#FSNzKPZM z8LhihcE6i=<(#87E|Wr~HKvVWhkll4iSK$^mUHaxgy8*K$_Zj;zJ`L$naPj+^3zTi z-3NTaaKnD5FPY-~?Tq6QHnmDDRxu0mh0D|zD~Y=vv_qig5r-cIbCpxlju&8Sya)@{ zsmv6XUSi)@(?PvItkiZEeN*)AE~I_?#+Ja-r8$(XiXei2d@Hi7Rx8+rZZb?ZLa{;@*EHeRQ-YDadz~M*YCM4&F-r;E#M+@CSJMJ0oU|PQ^ z=E!HBJDMQ2TN*Y(Ag(ynAL8%^v;=~q?s4plA_hig&5Z0x_^Oab!T)@6kRN$)qEJ6E zNuQjg|G7iwU(N8pI@_6==0CL;lRh1dQF#wePhmu@hADFd3B5KIH#dx(2A zp~K&;Xw}F_N6CU~0)QpQk7s$a+LcTOj1%=WXI(U=Dv!6 z{#<#-)2+gCyyv=Jw?Ab#PVkxPDeH|sAxyG`|Ys}A$PW4TdBv%zDz z^?lwrxWR<%Vzc8Sgt|?FL6ej_*e&rhqJZ3Y>k=X(^dytycR;XDU16}Pc9Vn0>_@H+ zQ;a`GSMEG64=JRAOg%~L)x*w{2re6DVprNp+FcNra4VdNjiaF0M^*>CdPkt(m150rCue?FVdL0nFL$V%5y6N z%eLr5%YN7D06k5ji5*p4v$UMM)G??Q%RB27IvH7vYr_^3>1D-M66#MN8tWGw>WED} z5AhlsanO=STFYFs)Il_0i)l)f<8qn|$DW7ZXhf5xI;m+7M5-%P63XFQrG9>DMqHc} zsgNU9nR`b}E^mL5=@7<1_R~j@q_2U^3h|+`7YH-?C=vme1C3m`Fe0HC>pjt6f_XMh zy~-i-8R46QNYneL4t@)<0VU7({aUO?aH`z4V2+kxgH5pYD5)wCh75JqQY)jIPN=U6 z+qi8cGiOtXG2tXm;_CfpH9ESCz#i5B(42}rBJJF$jh<1sbpj^8&L;gzGHb8M{of+} zzF^8VgML2O9nxBW7AvdEt90vp+#kZxWf@A)o9f9}vKJy9NDBjBW zSt=Hcs=YWCwnfY1UYx*+msp{g!w0HC<_SM!VL1(I2PE?CS}r(eh?{I)mQixmo5^p# zV?2R!R@3GV6hwTCrfHiK#3Orj>I!GS2kYhk1S;aFBD_}u2v;0HYFq}Iz1Z(I4oca4 zxquja8$+8JW_EagDHf$a1OTk5S97umGSDaj)gH=fLs9>_=XvVj^Xj9a#gLdk=&3tl zfmK9MNnIX9v{?%xdw7568 zNrZ|roYs(vC4pHB5RJ8>)^*OuyNC>x7ad)tB_}3SgQ96+-JT^Qi<`xi=)_=$Skwv~ zdqeT9Pa`LYvCAn&rMa2aCDV(TMI#PA5g#RtV|CWpgDYRA^|55LLN^uNh*gOU>Z=a06qJ;$C9z8;n-Pq=qZnc1zUwJ@t)L;&NN+E5m zRkQ(SeM8=l-aoAKGKD>!@?mWTW&~)uF2PYUJ;tB^my`r9n|Ly~0c%diYzqs9W#FTjy?h&X3TnH zXqA{QI82sdjPO->f=^K^f>N`+B`q9&rN0bOXO79S&a9XX8zund(kW7O76f4dcWhIu zER`XSMSFbSL>b;Rp#`CuGJ&p$s~G|76){d?xSA5wVg##_O0DrmyEYppyBr%fyWbbv zp`K84JwRNP$d-pJ!Qk|(RMr?*!wi1if-9G#0p>>1QXKXWFy)eB3ai)l3601q8!9JC zvU#ZWWDNKq9g6fYs?JQ)Q4C_cgTy3FhgKb8s&m)DdmL5zhNK#8wWg!J*7G7Qhe9VU zha?^AQTDpYcuN!B+#1dE*X{<#!M%zfUQbj=zLE{dW0XeQ7-oIsGY6RbkP2re@Q{}r_$iiH0xU%iN*ST`A)-EH6eaZB$GA#v)cLi z*MpA(3bYk$oBDKAzu^kJoSUsDd|856DApz={3u8sbQV@JnRkp2nC|)m;#T=DvIL-O zI4vh;g7824l}*`_p@MT4+d`JZ2%6NQh=N9bmgJ#q!hK@_<`HQq3}Z8Ij>3%~<*= zcv=!oT#5xmeGI92lqm9sGVE%#X$ls;St|F#u!?5Y7syhx6q#MVRa&lBmmn%$C0QzU z);*ldgwwCmzM3uglr}!Z2G+?& zf%Dpo&mD%2ZcNFiN-Z0f;c_Q;A%f@>26f?{d1kxIJD}LxsQkB47SAdwinfMILZdN3 zfj^HmTzS3Ku5BxY>ANutS8WPQ-G>v4^_Qndy==P3pDm+Xc?>rUHl-4+^%Sp5atOja z2oP}ftw-rqnb}+khR3CrRg^ibi6?QYk1*i^;kQGirQ=uB9Sd1NTfT-Rbv;hqnY4neE5H1YUrjS2m+2&@uXiAo- zrKUX|Ohg7(6F(AoP~tj;NZlV#xsfo-5reuQHB$&EIAhyZk;bL;k9ouDmJNBAun;H& zn;Of1z_Qj`x&M;5X;{s~iGzBQTY^kv-k{ksbE*Dl%Qf%N@hQCfY~iUw!=F-*$cpf2 z3wix|aLBV0b;W@z^%7S{>9Z^T^fLOI68_;l@+Qzaxo`nAI8emTV@rRhEKZ z?*z_{oGdI~R*#<2{bkz$G~^Qef}$*4OYTgtL$e9q!FY7EqxJ2`zk6SQc}M(k(_MaV zSLJnTXw&@djco1~a(vhBl^&w=$fa9{Sru>7g8SHahv$&Bl(D@(Zwxo_3r=;VH|uc5 zi1Ny)J!<(KN-EcQ(xlw%PNwK8U>4$9nVOhj(y0l9X^vP1TA>r_7WtSExIOsz`nDOP zs}d>Vxb2Vo2e5x8p(n~Y5ggAyvib>d)6?)|E@{FIz?G3PVGLf7-;BxaP;c?7ddH$z zA+{~k^V=bZuXafOv!RPsE1GrR3J2TH9uB=Z67gok+u`V#}BR86hB1xl}H4v`F+mRfr zYhortD%@IGfh!JB(NUNSDh+qDz?4ztEgCz&bIG-Wg7w-ua4ChgQR_c+z8dT3<1?uX z*G(DKy_LTl*Ea!%v!RhpCXW1WJO6F`bgS-SB;Xw9#! z<*K}=#wVu9$`Yo|e!z-CPYH!nj7s9dEPr-E`DXUBu0n!xX~&|%#G=BeM?X@shQQMf zMvr2!y7p_gD5-!Lnm|a@z8Of^EKboZsTMk%5VsJEm>VsJ4W7Kv{<|#4f-qDE$D-W>gWT%z-!qXnDHhOvLk=?^a1*|0j z{pW{M0{#1VcR5;F!!fIlLVNh_Gj zbnW(_j?0c2q$EHIi@fSMR{OUKBcLr{Y&$hrM8XhPByyZaXy|dd&{hYQRJ9@Fn%h3p7*VQolBIV@Eq`=y%5BU~3RPa^$a?ixp^cCg z+}Q*X+CW9~TL29@OOng(#OAOd!)e$d%sr}^KBJ-?-X&|4HTmtemxmp?cT3uA?md4% zT8yZ0U;6Rg6JHy3fJae{6TMGS?ZUX6+gGTT{Q{)SI85$5FD{g-eR%O0KMpWPY`4@O zx!hen1*8^E(*}{m^V_?}(b5k3hYo=T+$&M32+B`}81~KKZhY;2H{7O-M@vbCzuX0n zW-&HXeyr1%I3$@ns-V1~Lb@wIpkmx|8I~ob1Of7i6BTNysEwI}=!nU%q7(V_^+d*G z7G;07m(CRTJup!`cdYi93r^+LY+`M*>aMuHJm(A8_O8C#A*$!Xvddgpjx5)?_EB*q zgE8o5O>e~9IiSC@WtZpF{4Bj2J5eZ>uUzY%TgWF7wdDE!fSQIAWCP)V{;HsU3ap?4 znRsiiDbtN7i9hapO;(|Ew>Ip2TZSvK9Z^N21%J?OiA_&eP1{(Pu_=%JjKy|HOardq ze?zK^K zA%sjF64*Wufad%H<) z^|t>e*h+Z1#l=5wHexzt9HNDNXgM=-OPWKd^5p!~%SIl>Fo&7BvNpbf8{NXmH)o{r zO=aBJ;meX1^{O%q;kqdw*5k!Y7%t_30 zy{nGRVc&5qt?dBwLs+^Sfp;f`YVMSB#C>z^a9@fpZ!xb|b-JEz1LBX7ci)V@W+kvQ89KWA0T~Lj$aCcfW#nD5bt&Y_< z-q{4ZXDqVg?|0o)j1%l0^_it0WF*LCn-+)c!2y5yS7aZIN$>0LqNnkujV*YVes(v$ zY@_-!Q;!ZyJ}Bg|G-~w@or&u0RO?vlt5*9~yeoPV_UWrO2J54b4#{D(D>jF(R88u2 zo#B^@iF_%S>{iXSol8jpmsZuJ?+;epg>k=$d`?GSegAVp3n$`GVDvK${N*#L_1`44 z{w0fL{2%)0|E+qgZtjX}itZz^KJt4Y;*8uSK}Ft38+3>j|K(PxIXXR-t4VopXo#9# zt|F{LWr-?34y`$nLBVV_*UEgA6AUI65dYIbqpNq9cl&uLJ0~L}<=ESlOm?Y-S@L*d z<7vt}`)TW#f%Rp$Q}6@3=j$7Tze@_uZO@aMn<|si{?S}~maII`VTjs&?}jQ4_cut9$)PEqMukwoXobzaKx^MV z2fQwl+;LSZ$qy%Tys0oo^K=jOw$!YwCv^ei4NBVauL)tN%=wz9M{uf{IB(BxK|lT*pFkmNK_1tV`nb%jH=a0~VNq2RCKY(rG7jz!-D^k)Ec)yS%17pE#o6&eY+ z^qN(hQT$}5F(=4lgNQhlxj?nB4N6ntUY6(?+R#B?W3hY_a*)hnr4PA|vJ<6p`K3Z5Hy z{{8(|ux~NLUW=!?9Qe&WXMTAkQnLXg(g=I@(VG3{HE13OaUT|DljyWXPs2FE@?`iU z4GQlM&Q=T<4&v@Fe<+TuXiZQT3G~vZ&^POfmI1K2h6t4eD}Gk5XFGpbj1n_g*{qmD6Xy z`6Vv|lLZtLmrnv*{Q%xxtcWVj3K4M%$bdBk_a&ar{{GWyu#ljM;dII;*jP;QH z#+^o-A4np{@|Mz+LphTD0`FTyxYq#wY)*&Ls5o{0z9yg2K+K7ZN>j1>N&;r+Z`vI| zDzG1LJZ+sE?m?>x{5LJx^)g&pGEpY=fQ-4}{x=ru;}FL$inHemOg%|R*ZXPodU}Kh zFEd5#+8rGq$Y<_?k-}r5zgQ3jRV=ooHiF|@z_#D4pKVEmn5CGV(9VKCyG|sT9nc=U zEoT67R`C->KY8Wp-fEcjjFm^;Cg(ls|*ABVHq8clBE(;~K^b+S>6uj70g? z&{XQ5U&!Z$SO7zfP+y^8XBbiu*Cv-yJG|l-oe*!s5$@Lh_KpxYL2sx`B|V=dETN>5K+C+CU~a_3cI8{vbu$TNVdGf15*>D zz@f{zIlorkY>TRh7mKuAlN9A0>N>SV`X)+bEHms=mfYTMWt_AJtz_h+JMmrgH?mZt zm=lfdF`t^J*XLg7v+iS)XZROygK=CS@CvUaJo&w2W!Wb@aa?~Drtf`JV^cCMjngVZ zv&xaIBEo8EYWuML+vxCpjjY^s1-ahXJzAV6hTw%ZIy!FjI}aJ+{rE&u#>rs)vzuxz z+$5z=7W?zH2>Eb32dvgHYZtCAf!=OLY-pb4>Ae79rd68E2LkVPj-|jFeyqtBCCwiW zkB@kO_(3wFq)7qwV}bA=zD!*@UhT`geq}ITo%@O(Z5Y80nEX~;0-8kO{oB6|(4fQh z);73T!>3@{ZobPwRv*W?7m0Ml9GmJBCJd&6E?hdj9lV= z4flNfsc(J*DyPv?RCOx!MSvk(M952PJ-G|JeVxWVjN~SNS6n-_Ge3Q;TGE;EQvZg86%wZ`MB zSMQua(i*R8a75!6$QRO^(o7sGoomb+Y{OMy;m~Oa`;P9Yqo>?bJAhqXxLr7_3g_n>f#UVtxG!^F#1+y@os6x(sg z^28bsQ@8rw%Gxk-stAEPRbv^}5sLe=VMbkc@Jjimqjvmd!3E7+QnL>|(^3!R} zD-l1l7*Amu@j+PWLGHXXaFG0Ct2Q=}5YNUxEQHCAU7gA$sSC<5OGylNnQUa>>l%sM zyu}z6i&({U@x^hln**o6r2s-(C-L50tQvz|zHTqW!ir?w&V23tuYEDJVV#5pE|OJu z7^R!A$iM$YCe?8n67l*J-okwfZ+ZTkGvZ)tVPfR;|3gyFjF)8V zyXXN=!*bpyRg9#~Bg1+UDYCt0 ztp4&?t1X0q>uz;ann$OrZs{5*r`(oNvw=$7O#rD|Wuv*wIi)4b zGtq4%BX+kkagv3F9Id6~-c+1&?zny%w5j&nk9SQfo0k4LhdSU_kWGW7axkfpgR`8* z!?UTG*Zi_baA1^0eda8S|@&F z{)Rad0kiLjB|=}XFJhD(S3ssKlveFFmkN{Vl^_nb!o5M!RC=m)V&v2%e?ZoRC@h3> zJ(?pvToFd`*Zc@HFPL#=otWKwtuuQ_dT-Hr{S%pQX<6dqVJ8;f(o)4~VM_kEQkMR+ zs1SCVi~k>M`u1u2xc}>#D!V&6nOOh-E$O&SzYrjJdZpaDv1!R-QGA141WjQe2s0J~ zQ;AXG)F+K#K8_5HVqRoRM%^EduqOnS(j2)|ctA6Q^=|s_WJYU;Z%5bHp08HPL`YF2 zR)Ad1z{zh`=sDs^&V}J z%$Z$!jd7BY5AkT?j`eqMs%!Gm@T8)4w3GYEX~IwgE~`d|@T{WYHkudy(47brgHXx& zBL1yFG6!!!VOSmDxBpefy2{L_u5yTwja&HA!mYA#wg#bc-m%~8aRR|~AvMnind@zs zy>wkShe5&*un^zvSOdlVu%kHsEo>@puMQ`b1}(|)l~E{5)f7gC=E$fP(FC2=F<^|A zxeIm?{EE!3sO!Gr7e{w)Dx(uU#3WrFZ>ibmKSQ1tY?*-Nh1TDHLe+k*;{Rp!Bmd_m zb#^kh`Y*8l|9Cz2e{;RL%_lg{#^Ar+NH|3z*Zye>!alpt{z;4dFAw^^H!6ING*EFc z_yqhr8d!;%nHX9AKhFQZBGrSzfzYCi%C!(Q5*~hX>)0N`vbhZ@N|i;_972WSx*>LH z87?en(;2_`{_JHF`Sv6Wlps;dCcj+8IJ8ca6`DsOQCMb3n# z3)_w%FuJ3>fjeOOtWyq)ag|PmgQbC-s}KRHG~enBcIwqIiGW8R8jFeBNY9|YswRY5 zjGUxdGgUD26wOpwM#8a!Nuqg68*dG@VM~SbOroL_On0N6QdT9?)NeB3@0FCC?Z|E0 z6TPZj(AsPtwCw>*{eDEE}Gby>0q{*lI+g2e&(YQrsY&uGM{O~}(oM@YWmb*F zA0^rr5~UD^qmNljq$F#ARXRZ1igP`MQx4aS6*MS;Ot(1L5jF2NJ;de!NujUYg$dr# z=TEL_zTj2@>ZZN(NYCeVX2==~=aT)R30gETO{G&GM4XN<+!&W&(WcDP%oL8PyIVUC zs5AvMgh6qr-2?^unB@mXK*Dbil^y-GTC+>&N5HkzXtozVf93m~xOUHn8`HpX=$_v2 z61H;Z1qK9o;>->tb8y%#4H)765W4E>TQ1o0PFj)uTOPEvv&}%(_mG0ISmyhnQV33Z$#&yd{ zc{>8V8XK$3u8}04CmAQ#I@XvtmB*s4t8va?-IY4@CN>;)mLb_4!&P3XSw4pA_NzDb zORn!blT-aHk1%Jpi>T~oGLuh{DB)JIGZ9KOsciWs2N7mM1JWM+lna4vkDL?Q)z_Ct z`!mi0jtr+4*L&N7jk&LodVO#6?_qRGVaucqVB8*us6i3BTa^^EI0x%EREQSXV@f!lak6Wf1cNZ8>*artIJ(ADO*=<-an`3zB4d*oO*8D1K!f z*A@P1bZCNtU=p!742MrAj%&5v%Xp_dSX@4YCw%F|%Dk=u|1BOmo)HsVz)nD5USa zR~??e61sO(;PR)iaxK{M%QM_rIua9C^4ppVS$qCT9j2%?*em?`4Z;4@>I(c%M&#cH z>4}*;ej<4cKkbCAjjDsyKS8rIm90O)Jjgyxj5^venBx&7B!xLmzxW3jhj7sR(^3Fz z84EY|p1NauwXUr;FfZjdaAfh%ivyp+^!jBjJuAaKa!yCq=?T_)R!>16?{~p)FQ3LDoMyG%hL#pR!f@P%*;#90rs_y z@9}@r1BmM-SJ#DeuqCQk=J?ixDSwL*wh|G#us;dd{H}3*-Y7Tv5m=bQJMcH+_S`zVtf;!0kt*(zwJ zs+kedTm!A}cMiM!qv(c$o5K%}Yd0|nOd0iLjus&;s0Acvoi-PFrWm?+q9f^FslxGi z6ywB`QpL$rJzWDg(4)C4+!2cLE}UPCTBLa*_=c#*$b2PWrRN46$y~yST3a2$7hEH= zNjux+wna^AzQ=KEa_5#9Ph=G1{S0#hh1L3hQ`@HrVnCx{!fw_a0N5xV(iPdKZ-HOM za)LdgK}1ww*C_>V7hbQnTzjURJL`S%`6nTHcgS+dB6b_;PY1FsrdE8(2K6FN>37!62j_cBlui{jO^$dPkGHV>pXvW0EiOA zqW`YaSUBWg_v^Y5tPJfWLcLpsA8T zG)!x>pKMpt!lv3&KV!-um= zKCir6`bEL_LCFx4Z5bAFXW$g3Cq`?Q%)3q0r852XI*Der*JNuKUZ`C{cCuu8R8nkt z%pnF>R$uY8L+D!V{s^9>IC+bmt<05h**>49R*#vpM*4i0qRB2uPbg8{{s#9yC;Z18 zD7|4m<9qneQ84uX|J&f-g8a|nFKFt34@Bt{CU`v(SYbbn95Q67*)_Esl_;v291s=9 z+#2F2apZU4Tq=x+?V}CjwD(P=U~d<=mfEFuyPB`Ey82V9G#Sk8H_Ob_RnP3s?)S_3 zr%}Pb?;lt_)Nf>@zX~D~TBr;-LS<1I##8z`;0ZCvI_QbXNh8Iv)$LS=*gHr;}dgb=w5$3k2la1keIm|=7<-JD>)U%=Avl0Vj@+&vxn zt-)`vJxJr88D&!}2^{GPXc^nmRf#}nb$4MMkBA21GzB`-Or`-3lq^O^svO7Vs~FdM zv`NvzyG+0T!P8l_&8gH|pzE{N(gv_tgDU7SWeiI-iHC#0Ai%Ixn4&nt{5y3(GQs)i z&uA;~_0shP$0Wh0VooIeyC|lak__#KVJfxa7*mYmZ22@(<^W}FdKjd*U1CqSjNKW% z*z$5$=t^+;Ui=MoDW~A7;)Mj%ibX1_p4gu>RC}Z_pl`U*{_z@+HN?AF{_W z?M_X@o%w8fgFIJ$fIzBeK=v#*`mtY$HC3tqw7q^GCT!P$I%=2N4FY7j9nG8aIm$c9 zeKTxVKN!UJ{#W)zxW|Q^K!3s;(*7Gbn;e@pQBCDS(I|Y0euK#dSQ_W^)sv5pa%<^o zyu}3d?Lx`)3-n5Sy9r#`I{+t6x%I%G(iewGbvor&I^{lhu-!#}*Q3^itvY(^UWXgvthH52zLy&T+B)Pw;5>4D6>74 zO_EBS)>l!zLTVkX@NDqyN2cXTwsUVao7$HcqV2%t$YzdAC&T)dwzExa3*kt9d(}al zA~M}=%2NVNUjZiO7c>04YH)sRelXJYpWSn^aC$|Ji|E13a^-v2MB!Nc*b+=KY7MCm zqIteKfNkONq}uM;PB?vvgQvfKLPMB8u5+Am=d#>g+o&Ysb>dX9EC8q?D$pJH!MTAqa=DS5$cb+;hEvjwVfF{4;M{5U&^_+r zvZdu_rildI!*|*A$TzJ&apQWV@p{!W`=?t(o0{?9y&vM)V)ycGSlI3`;ps(vf2PUq zX745#`cmT*ra7XECC0gKkpu2eyhFEUb?;4@X7weEnLjXj_F~?OzL1U1L0|s6M+kIhmi%`n5vvDALMagi4`wMc=JV{XiO+^ z?s9i7;GgrRW{Mx)d7rj)?(;|b-`iBNPqdwtt%32se@?w4<^KU&585_kZ=`Wy^oLu9 z?DQAh5z%q;UkP48jgMFHTf#mj?#z|=w= z(q6~17Vn}P)J3M?O)x))%a5+>TFW3No~TgP;f}K$#icBh;rSS+R|}l鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index ac72c34e8ac..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew deleted file mode 100755 index 0adc8e1a532..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat deleted file mode 100644 index 93e3f59f135..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected new file mode 100644 index 00000000000..1ee055eeb02 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected @@ -0,0 +1,7 @@ +.gradle/8.3/dependencies-accessors/gc.properties +.gradle/8.3/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/fractestexample/Test.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected deleted file mode 100644 index 05792cb19fc..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected +++ /dev/null @@ -1 +0,0 @@ -| src/main/java/com/fractestexample/Test.java:0:0:0:0 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py index bfff65b2fc2..bea3e5f552c 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py @@ -1,8 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java, gradle_8_3): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql deleted file mode 100644 index 8317a5a022f..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py b/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py index 973a10c931c..b69070ddf81 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py @@ -1,22 +1,21 @@ -import sys - -from create_database_utils import * -from buildless_test_utils import * -from diagnostics_test_utils import * import subprocess -import os.path +import os -# This serves the "repo" directory on https://locahost:4443 -repo_server_process = subprocess.Popen(["python3", "../server.py"], cwd = "repo") -mypath = os.path.abspath(os.path.dirname(__file__)) -certspath = os.path.join(mypath, "jdk8_shipped_cacerts_plus_cert_pem") -maven_certs_option = "-Djavax.net.ssl.trustStore=" + certspath +def test(codeql, java, cwd): + # This serves the "repo" directory on https://locahost:4443 + repo_server_process = subprocess.Popen(["python3", "../server.py"], cwd="repo") + certspath = cwd / "jdk8_shipped_cacerts_plus_cert_pem" + # If we override MAVEN_OPTS, we'll break cross-test maven isolation, so we need to append to it instead + maven_opts = os.environ["MAVEN_OPTS"] + f" -Djavax.net.ssl.trustStore={certspath}" -try: - run_codeql_database_create([], lang="java", extra_args=["--build-mode=none"], extra_env={"MAVEN_OPTS": maven_certs_option, "CODEQL_JAVA_EXTRACTOR_TRUST_STORE_PATH": certspath}) -finally: - repo_server_process.kill() - -check_buildless_fetches() -check_diagnostics() + try: + codeql.database.create( + extractor_option="buildless=true", + _env={ + "MAVEN_OPTS": maven_opts, + "CODEQL_JAVA_EXTRACTOR_TRUST_STORE_PATH": str(certspath), + }, + ) + finally: + repo_server_process.kill() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected new file mode 100644 index 00000000000..c6f2f49cf7d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected @@ -0,0 +1,7 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.expected deleted file mode 100644 index cbd09bcf554..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.expected +++ /dev/null @@ -1,10 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py index bfff65b2fc2..a92ac46584c 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py @@ -1,8 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected new file mode 100644 index 00000000000..06978379cfb --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected @@ -0,0 +1,14 @@ +pom.xml +submod1/pom.xml +submod1/src/main/java/com/example/App.java +submod1/src/main/resources/my-app.properties +submod1/src/main/resources/page.xml +submod1/src/main/resources/struts.xml +submod1/src/test/java/com/example/AppTest.java +submod2/pom.xml +submod2/src/main/java/com/example/App2.java +submod2/src/main/resources/my-app.properties +submod2/src/main/resources/page.xml +submod2/src/main/resources/struts.xml +submod2/src/test/java/com/example/AppTest2.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.expected deleted file mode 100644 index ef6afbda3b0..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.expected +++ /dev/null @@ -1,17 +0,0 @@ -#select -| submod1/src/main/java/com/example/App.java:0:0:0:0 | App | -| submod1/src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -| submod2/src/main/java/com/example/App2.java:0:0:0:0 | App2 | -| submod2/src/test/java/com/example/AppTest2.java:0:0:0:0 | AppTest2 | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| submod1/pom.xml:0:0:0:0 | submod1/pom.xml | -| submod1/src/main/resources/page.xml:0:0:0:0 | submod1/src/main/resources/page.xml | -| submod1/src/main/resources/struts.xml:0:0:0:0 | submod1/src/main/resources/struts.xml | -| submod2/pom.xml:0:0:0:0 | submod2/pom.xml | -| submod2/src/main/resources/page.xml:0:0:0:0 | submod2/src/main/resources/page.xml | -| submod2/src/main/resources/struts.xml:0:0:0:0 | submod2/src/main/resources/struts.xml | -propertiesFiles -| submod1/src/main/resources/my-app.properties:0:0:0:0 | submod1/src/main/resources/my-app.properties | -| submod2/src/main/resources/my-app.properties:0:0:0:0 | submod2/src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py index bfff65b2fc2..a92ac46584c 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py @@ -1,8 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/force_sequential_test_execution deleted file mode 100644 index 44bcad8d582..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -The wrapper downloading a Maven distribution multiple times in parallel is not safe. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected new file mode 100644 index 00000000000..f73dc023c39 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected @@ -0,0 +1,8 @@ +.mvn/wrapper/maven-wrapper.properties +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.expected deleted file mode 100644 index 0728284fc94..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.expected +++ /dev/null @@ -1,11 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -propertiesFiles -| .mvn/wrapper/maven-wrapper.properties:0:0:0:0 | .mvn/wrapper/maven-wrapper.properties | -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py index 948d030eb9d..2c70d7dd91a 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py @@ -1,9 +1,6 @@ -import sys - -from create_database_utils import * -from diagnostics_test_utils import * - -# mvnw has been rigged to stall for a long time by trying to fetch from a black-hole IP. We should find the timeout logic fires and buildless aborts the Maven run quickly. - -run_codeql_database_create([], lang="java", extra_args=["--build-mode=none"], extra_env={"CODEQL_EXTRACTOR_JAVA_BUILDLESS_CHILD_PROCESS_IDLE_TIMEOUT": "5"}) -check_diagnostics() +def test(codeql, java): + # mvnw has been rigged to stall for a long time by trying to fetch from a black-hole IP. We should find the timeout logic fires and buildless aborts the Maven run quickly. + codeql.database.create( + build_mode="none", + _env={"CODEQL_EXTRACTOR_JAVA_BUILDLESS_CHILD_PROCESS_IDLE_TIMEOUT": "5"}, + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py index 3f8deac940f..f7673ce3ad1 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py @@ -1,8 +1,4 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_args=["--build-mode=none"]) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java): + codeql.database.create( + build_mode="none", + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-maven/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected new file mode 100644 index 00000000000..c6f2f49cf7d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected @@ -0,0 +1,7 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected deleted file mode 100644 index cbd09bcf554..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected +++ /dev/null @@ -1,10 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py index bfff65b2fc2..a92ac46584c 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py @@ -1,8 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, java): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py b/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py index a229dfff548..549f7b72e50 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py @@ -1,5 +1,4 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_args=["--extractor-option=buildless=true"]) +def test(codeql, java): + codeql.database.create( + extractor_option="buildless=true", + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitattributes b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitattributes deleted file mode 100644 index 097f9f98d9e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitignore b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index ac72c34e8ac..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew deleted file mode 100755 index 0adc8e1a532..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew.bat b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew.bat deleted file mode 100644 index 93e3f59f135..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected new file mode 100644 index 00000000000..1ee055eeb02 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected @@ -0,0 +1,7 @@ +.gradle/8.3/dependencies-accessors/gc.properties +.gradle/8.3/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/fractestexample/Test.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.expected deleted file mode 100644 index 05792cb19fc..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.expected +++ /dev/null @@ -1 +0,0 @@ -| src/main/java/com/fractestexample/Test.java:0:0:0:0 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py index ac3b64436ed..970c78f97ab 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py @@ -1,40 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * -import mitm_proxy -import os -import shutil -import subprocess -import sys - -shutil.rmtree('certs', ignore_errors=True) -os.mkdir('certs') - -ca_cert_file = 'certs/ca-cert.pem' -ca_key_file = 'certs/ca-key.pem' -mitm_proxy.generateCA(ca_cert_file, ca_key_file) -with open(ca_cert_file, 'rb') as f: - cert_pem = f.read().decode('ascii') - -# This starts an HTTP proxy server on http://localhost:9430 -environment = os.environ.copy() -environment["PROXY_USER"] = "proxy" -environment["PROXY_PASSWORD"] = "password" - -proxy_server_process = subprocess.Popen( - [sys.executable, mitm_proxy.__file__, "9430", "certs/ca-cert.pem", "certs/ca-key.pem"], env=environment) - -try: - run_codeql_database_create([], lang="java", extra_env={ - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", - "CODEQL_PROXY_HOST": "localhost", - "CODEQL_PROXY_PORT": "9430", - "CODEQL_PROXY_USER": "proxy", - "CODEQL_PROXY_PASSWORD": "password", - "CODEQL_PROXY_CA_CERTIFICATE": cert_pem - }) -finally: - proxy_server_process.kill() -check_diagnostics() -check_buildless_fetches() +def test(codeql, java, codeql_mitm_proxy, gradle_8_3): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.ql deleted file mode 100644 index 8317a5a022f..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected new file mode 100644 index 00000000000..cdb0dca9421 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected @@ -0,0 +1,8 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties +test-db/working/settings.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.expected deleted file mode 100644 index 9ab4eed832b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.expected +++ /dev/null @@ -1,11 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| test-db/working/settings.xml:0:0:0:0 | test-db/working/settings.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py index 648957a9920..c8919d321fa 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py @@ -1,40 +1,7 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * -import mitm_proxy -import os -import shutil -import subprocess -import sys - -shutil.rmtree('certs', ignore_errors=True) -os.mkdir('certs') - -ca_cert_file = 'certs/ca-cert.pem' -ca_key_file = 'certs/ca-key.pem' -mitm_proxy.generateCA(ca_cert_file, ca_key_file) -with open(ca_cert_file, 'rb') as f: - cert_pem = f.read().decode('ascii') - -# This starts an HTTP proxy server on http://localhost:9431 -environment = os.environ.copy() -environment["PROXY_USER"] = "proxy" -environment["PROXY_PASSWORD"] = "password" - -proxy_server_process = subprocess.Popen( - [sys.executable, mitm_proxy.__file__, "9431", "certs/ca-cert.pem", "certs/ca-key.pem"], env=environment) - -try: - run_codeql_database_create([], lang="java", extra_env={ - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", - "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", - "CODEQL_PROXY_HOST": "localhost", - "CODEQL_PROXY_PORT": "9431", - "CODEQL_PROXY_USER": "proxy", - "CODEQL_PROXY_PASSWORD": "password", - "CODEQL_PROXY_CA_CERTIFICATE": cert_pem - }) -finally: - proxy_server_process.kill() -check_diagnostics() -check_buildless_fetches() +def test(codeql, java, codeql_mitm_proxy): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected new file mode 100644 index 00000000000..d0e6787e268 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected @@ -0,0 +1,29 @@ +gradle-sample/.gradle/6.6.1/gc.properties +gradle-sample/.gradle/buildOutputCleanup/cache.properties +gradle-sample/.gradle/configuration-cache/gc.properties +gradle-sample/.gradle/vcs-1/gc.properties +gradle-sample/gradle/verification-metadata.xml +gradle-sample/gradle/wrapper/gradle-wrapper.properties +gradle-sample/src/main/java/com/example/App.java +gradle-sample/src/test/java/com/example/AppTest.java +gradle-sample2/.gradle/6.6.1/gc.properties +gradle-sample2/.gradle/buildOutputCleanup/cache.properties +gradle-sample2/.gradle/configuration-cache/gc.properties +gradle-sample2/.gradle/vcs-1/gc.properties +gradle-sample2/gradle/verification-metadata.xml +gradle-sample2/gradle/wrapper/gradle-wrapper.properties +gradle-sample2/src/main/java/com/example/App2.java +gradle-sample2/src/test/java/com/example/AppTest2.java +maven-project-1/pom.xml +maven-project-1/src/main/java/com/example/App3.java +maven-project-1/src/main/resources/my-app.properties +maven-project-1/src/main/resources/page.xml +maven-project-1/src/main/resources/struts.xml +maven-project-1/src/test/java/com/example/AppTest3.java +maven-project-2/pom.xml +maven-project-2/src/main/java/com/example/App4.java +maven-project-2/src/main/resources/my-app.properties +maven-project-2/src/main/resources/page.xml +maven-project-2/src/main/resources/struts.xml +maven-project-2/src/test/java/com/example/AppTest4.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.expected deleted file mode 100644 index fe848a3dbf2..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.expected +++ /dev/null @@ -1,8 +0,0 @@ -| gradle-sample2/src/main/java/com/example/App2.java:0:0:0:0 | App2 | -| gradle-sample2/src/test/java/com/example/AppTest2.java:0:0:0:0 | AppTest2 | -| gradle-sample/src/main/java/com/example/App.java:0:0:0:0 | App | -| gradle-sample/src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -| maven-project-1/src/main/java/com/example/App3.java:0:0:0:0 | App3 | -| maven-project-1/src/test/java/com/example/AppTest3.java:0:0:0:0 | AppTest3 | -| maven-project-2/src/main/java/com/example/App4.java:0:0:0:0 | App4 | -| maven-project-2/src/test/java/com/example/AppTest4.java:0:0:0:0 | AppTest4 | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py index 6971aa508db..1b7cae27c64 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py @@ -1,14 +1,9 @@ -from create_database_utils import * -from diagnostics_test_utils import * -from buildless_test_utils import * -from toolchains_test_utils import * - -#The version of gradle used doesn't work on java 17 -try_use_java11() - -toolchains_file = actions_expose_all_toolchains() - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", "LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": toolchains_file}) - -check_diagnostics() -check_buildless_fetches() +def test(codeql, use_java_11, java, actions_toolchains_file): + # The version of gradle used doesn't work on java 17 + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + "LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file), + } + ) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.ql deleted file mode 100644 index 8317a5a022f..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py index cc9d91c7792..e5e38d725ae 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py @@ -1,15 +1,16 @@ +import subprocess import sys -from create_database_utils import * -from buildless_test_utils import * -import subprocess -# This serves the "repo" directory on http://localhost:9427 -repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9427"], cwd = "repo") - -try: - run_codeql_database_create([], lang="java", extra_args=["--extractor-option=buildless=true"], extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) -finally: - repo_server_process.kill() - -check_buildless_fetches() +def test(codeql, java): + # This serves the "repo" directory on http://localhost:9427 + repo_server_process = subprocess.Popen( + [sys.executable, "-m", "http.server", "9427"], cwd="repo" + ) + try: + codeql.database.create( + extractor_option="buildless=true", + _env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}, + ) + finally: + repo_server_process.kill() diff --git a/java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected b/java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected new file mode 100644 index 00000000000..b3923b0fd96 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected @@ -0,0 +1,6 @@ +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.expected b/java/ql/integration-tests/all-platforms/java/buildless/test.expected deleted file mode 100644 index 0213d624f7b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless/test.expected +++ /dev/null @@ -1,9 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.py b/java/ql/integration-tests/all-platforms/java/buildless/test.py index 747dd6a82ad..834b1132cf1 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless/test.py @@ -1,8 +1,2 @@ -import sys - -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"}) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"}) diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.ql b/java/ql/integration-tests/all-platforms/java/buildless/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/buildless/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/.gitattributes b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/force_sequential_test_execution deleted file mode 100644 index 4947fd6fe51..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/force_sequential_test_execution +++ /dev/null @@ -1,4 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. -# Additionally, Android SDK on-demand downloading can fail when multiple tests try to download the same SDK in parallel. diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradlew.bat b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradlew.bat deleted file mode 100644 index f127cfd49d4..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py index 23fe1d32fd8..f58e84e77a2 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java, gradle_7_3, android_sdk): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py index 1838af5db40..d285932b959 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py @@ -1,18 +1,4 @@ -import os -import pathlib -import shutil -import re - -from create_database_utils import * -from diagnostics_test_utils import * - -# Ensure the intended dependency download failure is not cached: -try: - shutil.rmtree(pathlib.Path.home().joinpath(".m2", "repository", "junit", "junit-nonesuch")) -except FileNotFoundError: - pass - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -# Drop the specific output line here because it varies from version to version of Maven. -check_diagnostics(replacements = {"Relevant output line: [^\"]*": ""}) +def test(codeql, java, check_diagnostics): + codeql.database.create(_assert_failure=True) + # Drop the specific output line here because it varies from version to version of Maven. + check_diagnostics.replacements = [('Relevant output line: [^"]*', "")] diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitattributes b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitignore b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/verification-metadata.xml b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/verification-metadata.xml deleted file mode 100644 index 14a69b8178b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/verification-metadata.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - true - false - - \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59203 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

    K7UpUK$>l@ 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 E2O(~oYXATM diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 12d38de6a48..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew deleted file mode 100755 index 4f906e0c811..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew.bat b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew.bat deleted file mode 100644 index 107acd32c4e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/skip-on-platform-osx-arm b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/skip-on-platform-osx-arm deleted file mode 100644 index 8b3140e546e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/skip-on-platform-osx-arm +++ /dev/null @@ -1,3 +0,0 @@ -2023-11-08: - -There is no Java 8 build available for OSX Arm, therefore this test fails. diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py index d087461cd89..accbd8facdd 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py @@ -1,26 +1,20 @@ import os -from create_database_utils import * -from diagnostics_test_utils import * +import re +import runs_on -# Ensure we're using an old Java version that won't work with Gradle -for k in os.environ: - if k.upper() in ["JAVA_HOME_8_X64", "JAVA_HOME_8_ARM64"]: - os.environ["JAVA_HOME"] = os.environ[k] - sep = ";" if platform.system() == "Windows" else ":" - os.environ["PATH"] = "".join([os.path.join(os.environ["JAVA_HOME"], "bin"), sep, os.environ["PATH"]]) - break -# Ensure the autobuilder *doesn't* see newer Java versions, which it could switch to in order to build the project: -for k in os.environ: - if re.match(r"^JAVA_HOME_\d\d_", k): - del os.environ[k] +# There is no Java 8 build available for OSX Arm, therefore this test fails. +@runs_on.x86_64 +def test(codeql, use_java_8, java, cwd, gradle_6_6_1): + # Use a custom, empty toolchains.xml file so the autobuilder doesn't see any Java versions that may be + # in a system-level toolchains file + toolchains_path = cwd / "toolchains.xml" -# Use a custom, empty toolchains.xml file so the autobuilder doesn't see any Java versions that may be -# in a system-level toolchains file -toolchains_path = os.path.join(os.getcwd(), 'toolchains.xml') - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None, extra_env={ - 'LGTM_INDEX_MAVEN_TOOLCHAINS_FILE': toolchains_path -}) - -check_diagnostics() + # Ensure the autobuilder *doesn't* see newer Java versions, which it could switch to in order to build the project: + for k in os.environ: + if re.match(r"^JAVA_HOME_\d\d_", k): + del os.environ[k] + codeql.database.create( + _assert_failure=True, + _env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(toolchains_path)}, + ) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected index 30e328253da..e8f7e949c5e 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected @@ -13,7 +13,7 @@ } } { - "markdownMessage": "Gradle project does not define a `testClasses` goal. [Supply a manual build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages#adding-build-steps-for-a-compiled-language) that builds the code that should be analyzed.\n\nRelevant output line: `org.gradle.execution.TaskSelectionException: Task 'testClasses' not found in root project 'no-gradle-test-classes'.`", + "markdownMessage": "Gradle project does not define a `testClasses` goal. [Supply a manual build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages#adding-build-steps-for-a-compiled-language) that builds the code that should be analyzed.\n\nRelevant output line: `org.gradle.execution.TaskSelectionException: Task 'testClasses' not found in root project 'test'.`", "severity": "error", "source": { "extractorName": "java", diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py index 23fe1d32fd8..a0c0737d3ac 100644 --- a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="java", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, java): + codeql.database.create(_assert_failure=True) diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected new file mode 100644 index 00000000000..3d16d23ce76 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected @@ -0,0 +1,2 @@ +Test.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.expected b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.expected deleted file mode 100644 index 8f3e41e24f0..00000000000 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.expected +++ /dev/null @@ -1 +0,0 @@ -| Test.java:1:14:1:17 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py index 1478610427a..a9afd1055ef 100644 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py +++ b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py @@ -1,6 +1,4 @@ -import urllib.request -from create_database_utils import * - -urllib.request.urlretrieve("https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.37.0/ecj-3.37.0.jar", "ecj.jar") - -run_codeql_database_create(["java -cp ecj.jar org.eclipse.jdt.internal.compiler.batch.Main -noExit Test.java"], lang="java") +def test(codeql, java, ecj): + codeql.database.create( + command=f"java -cp {ecj} org.eclipse.jdt.internal.compiler.batch.Main -noExit Test.java" + ) diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.ql b/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.ql deleted file mode 100644 index a61eb5e336a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.ql +++ /dev/null @@ -1,3 +0,0 @@ -import java - -select any(Class c | c.fromSource()) diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected new file mode 100644 index 00000000000..3d16d23ce76 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected @@ -0,0 +1,2 @@ +Test.java +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.expected b/java/ql/integration-tests/all-platforms/java/ecj-sample/test.expected deleted file mode 100644 index 8f3e41e24f0..00000000000 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.expected +++ /dev/null @@ -1 +0,0 @@ -| Test.java:1:14:1:17 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.py b/java/ql/integration-tests/all-platforms/java/ecj-sample/test.py index 9acadbdb6f1..d9948b5b54f 100644 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/ecj-sample/test.py @@ -1,6 +1,4 @@ -import urllib.request -from create_database_utils import * - -urllib.request.urlretrieve("https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.37.0/ecj-3.37.0.jar", "ecj.jar") - -run_codeql_database_create(["java -cp ecj.jar org.eclipse.jdt.internal.compiler.batch.Main Test.java"], lang="java") +def test(codeql, java, ecj): + codeql.database.create( + command=f"java -cp {ecj} org.eclipse.jdt.internal.compiler.batch.Main Test.java" + ) diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.ql b/java/ql/integration-tests/all-platforms/java/ecj-sample/test.ql deleted file mode 100644 index a61eb5e336a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.ql +++ /dev/null @@ -1,3 +0,0 @@ -import java - -select any(Class c | c.fromSource()) diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diagnostics.expected b/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diagnostics.expected rename to java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.expected diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diagnostics.ql b/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diagnostics.ql rename to java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.ql diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py b/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py index 40313e2654a..027ca32b433 100644 --- a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py +++ b/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py @@ -1,8 +1,8 @@ -import urllib.request -from create_database_utils import * - -urllib.request.urlretrieve("https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.38.0/ecj-3.38.0.jar", "ecj.jar") - -# This tests the case where ECJ emits a RuntimeIn/VisibleAnnotations attribute that isn't the same size as the corresponding method argument list, in particular due to forgetting to include the synthetic parameters added to explicit enumeration constructors. - -run_codeql_database_create(["java -cp ecj.jar org.eclipse.jdt.internal.compiler.batch.Main Test.java -d out -source 8", "java -cp ecj.jar org.eclipse.jdt.internal.compiler.batch.Main Test2.java -cp out -source 8"], lang="java") +def test(codeql, java, ecj): + # This tests the case where ECJ emits a RuntimeIn/VisibleAnnotations attribute that isn't the same size as the corresponding method argument list, in particular due to forgetting to include the synthetic parameters added to explicit enumeration constructors. + codeql.database.create( + command=[ + f"java -cp {ecj} org.eclipse.jdt.internal.compiler.batch.Main Test.java -d out -source 8", + f"java -cp {ecj} org.eclipse.jdt.internal.compiler.batch.Main Test2.java -cp out -source 8", + ] + ) diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitattributes b/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitattributes deleted file mode 100644 index 097f9f98d9e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# Linux start script should use lf -/gradlew text eol=lf - -# These are Windows script files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitignore b/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f090a2944b7473328c07c9755baa3196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60756 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 - - - true - false - - \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59203 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

    K7UpUK$>l@ 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 E2O(~oYXATM diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 12d38de6a48..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew b/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew deleted file mode 100755 index 4f906e0c811..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew.bat b/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew.bat deleted file mode 100644 index 107acd32c4e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected new file mode 100644 index 00000000000..ccdedc5ab73 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected @@ -0,0 +1,9 @@ +.gradle/6.6.1/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/configuration-cache/gc.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/example/App.java +src/test/java/com/example/AppTest.java +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.expected b/java/ql/integration-tests/all-platforms/java/gradle-sample/test.expected deleted file mode 100644 index e7dd5838e6b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.expected +++ /dev/null @@ -1,5 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| gradle/verification-metadata.xml:0:0:0:0 | gradle/verification-metadata.xml | diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.py b/java/ql/integration-tests/all-platforms/java/gradle-sample/test.py index 1cb6e142763..34670acfeea 100644 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/gradle-sample/test.py @@ -1,8 +1,2 @@ -import sys - -from create_database_utils import * - -#The version of gradle used doesn't work on java 17 -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java, gradle_6_6_1): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.ql b/java/ql/integration-tests/all-platforms/java/gradle-sample/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/java-web-jsp/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/java-web-jsp/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py b/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py index e87b8a1c009..a727946877a 100644 --- a/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py +++ b/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py @@ -1,5 +1,4 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create(["mvn clean package -P tomcat8Jsp"], lang="java", extra_env = {"CODEQL_EXTRACTOR_JAVA_JSP": "true"}) +def test(codeql, java): + codeql.database.create( + command="mvn clean package -P tomcat8Jsp", _env={"CODEQL_EXTRACTOR_JAVA_JSP": "true"} + ) diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-enforcer/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-enforcer/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected new file mode 100644 index 00000000000..016c614aec4 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected @@ -0,0 +1,12 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected deleted file mode 100644 index fc706ca445a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected +++ /dev/null @@ -1,15 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py index ab8845cbd73..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected new file mode 100644 index 00000000000..016c614aec4 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected @@ -0,0 +1,12 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.expected deleted file mode 100644 index fc706ca445a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.expected +++ /dev/null @@ -1,15 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py index 6d5ed7563ef..a12444ef170 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env = {"LGTM_INDEX_PROPERTIES_FILES": "true"}) +def test(codeql, java): + codeql.database.create(_env={"LGTM_INDEX_PROPERTIES_FILES": "true"}) diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected new file mode 100644 index 00000000000..a4def4e92dc --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected @@ -0,0 +1,10 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.expected deleted file mode 100644 index 7857752a01b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.expected +++ /dev/null @@ -1,7 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py index 65499f91e25..08a582b9d42 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py @@ -1,10 +1,6 @@ -import sys - -from create_database_utils import * - -# Test that a build with 60 ~1MB XML docs extracts does not extract them, but we fall back to by-name mode instead: -for i in range(60): - with open("generated-%d.xml" % i, "w") as f: - f.write("" + ("a" * 1000000) + "") - -run_codeql_database_create([], lang="java") +def test(codeql, java): + # Test that a build with 60 ~1MB XML docs extracts does not extract them, but we fall back to by-name mode instead: + for i in range(60): + with open(f"generated-{i}.xml", "w") as f: + f.write("" + ("a" * 1000000) + "") + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected new file mode 100644 index 00000000000..ccc5c6f2513 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected @@ -0,0 +1,17 @@ +generated-0.xml +generated-1.xml +generated-2.xml +generated-3.xml +generated-4.xml +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.expected deleted file mode 100644 index 82e6308469f..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.expected +++ /dev/null @@ -1,14 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| generated-0.xml:0:0:0:0 | generated-0.xml | -| generated-1.xml:0:0:0:0 | generated-1.xml | -| generated-2.xml:0:0:0:0 | generated-2.xml | -| generated-3.xml:0:0:0:0 | generated-3.xml | -| generated-4.xml:0:0:0:0 | generated-4.xml | -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py index c951c4c6f0d..8795cbbaa09 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py @@ -1,10 +1,6 @@ -import sys - -from create_database_utils import * - -# Test that a build with 5 ~1MB XML docs extracts them: -for i in range(5): - with open("generated-%d.xml" % i, "w") as f: - f.write("" + ("a" * 1000000) + "") - -run_codeql_database_create([], lang="java") +def test(codeql, java): + # Test that a build with 5 ~1MB XML docs extracts them: + for i in range(5): + with open(f"generated-{i}.xml", "w") as f: + f.write("" + ("a" * 1000000) + "") + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected new file mode 100644 index 00000000000..016c614aec4 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected @@ -0,0 +1,12 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.expected deleted file mode 100644 index 05f39a55338..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.expected +++ /dev/null @@ -1,9 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py index 76966e04fb3..93ac0300499 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env = {"LGTM_INDEX_XML_MODE": "all"}) +def test(codeql, java): + codeql.database.create(_env={"LGTM_INDEX_XML_MODE": "all"}) diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected new file mode 100644 index 00000000000..a4def4e92dc --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected @@ -0,0 +1,10 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.expected deleted file mode 100644 index 7857752a01b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.expected +++ /dev/null @@ -1,7 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py index 7d004ffb52f..64e5f7ba05a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env = {"LGTM_INDEX_XML_MODE": "byname"}) +def test(codeql, java): + codeql.database.create(_env={"LGTM_INDEX_XML_MODE": "byname"}) diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected new file mode 100644 index 00000000000..23eaad53231 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected @@ -0,0 +1,7 @@ +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.expected deleted file mode 100644 index 2f2c7ce04f2..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.expected +++ /dev/null @@ -1,4 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py index 376596d1f9c..aa6c911f94d 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env = {"LGTM_INDEX_XML_MODE": "disabled"}) +def test(codeql, java): + codeql.database.create(_env={"LGTM_INDEX_XML_MODE": "disabled"}) diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected new file mode 100644 index 00000000000..a4def4e92dc --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected @@ -0,0 +1,10 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.expected deleted file mode 100644 index 7857752a01b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.expected +++ /dev/null @@ -1,7 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py index 7169e99d71f..7736927eb8a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env = {"LGTM_INDEX_XML_MODE": "smart"}) +def test(codeql, java): + codeql.database.create(_env={"LGTM_INDEX_XML_MODE": "smart"}) diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-sample/force_sequential_test_execution deleted file mode 100644 index dd90439bca5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -# Concurrent Maven processes using ~/.m2/repository is not safe, so this test must run sequentially diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected new file mode 100644 index 00000000000..016c614aec4 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected @@ -0,0 +1,12 @@ +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/test.expected b/java/ql/integration-tests/all-platforms/java/maven-sample/test.expected deleted file mode 100644 index fc706ca445a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample/test.expected +++ /dev/null @@ -1,15 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/test.py b/java/ql/integration-tests/all-platforms/java/maven-sample/test.py index ab8845cbd73..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-sample/test.py @@ -1,5 +1,2 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/test.ql b/java/ql/integration-tests/all-platforms/java/maven-sample/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-sample/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/force_sequential_test_execution deleted file mode 100644 index 44bcad8d582..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -The wrapper downloading a Maven distribution multiple times in parallel is not safe. diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected new file mode 100644 index 00000000000..63c4821feac --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected @@ -0,0 +1,13 @@ +.mvn/wrapper/maven-wrapper.properties +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.expected deleted file mode 100644 index dd77a3fab0a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.expected +++ /dev/null @@ -1,16 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| .mvn/wrapper/maven-wrapper.properties:0:0:0:0 | .mvn/wrapper/maven-wrapper.properties | -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py index 5311b982c2b..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * -from maven_wrapper_test_utils import * - -run_codeql_database_create([], lang="java") -check_maven_wrapper_exists("3.9.4") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.ql b/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/force_sequential_test_execution deleted file mode 100644 index 44bcad8d582..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -The wrapper downloading a Maven distribution multiple times in parallel is not safe. diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected new file mode 100644 index 00000000000..63c4821feac --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected @@ -0,0 +1,13 @@ +.mvn/wrapper/maven-wrapper.properties +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.expected deleted file mode 100644 index dd77a3fab0a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.expected +++ /dev/null @@ -1,16 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| .mvn/wrapper/maven-wrapper.properties:0:0:0:0 | .mvn/wrapper/maven-wrapper.properties | -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py index 5311b982c2b..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * -from maven_wrapper_test_utils import * - -run_codeql_database_create([], lang="java") -check_maven_wrapper_exists("3.9.4") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.ql b/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/maven-wrapper/force_sequential_test_execution deleted file mode 100644 index 44bcad8d582..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper/force_sequential_test_execution +++ /dev/null @@ -1 +0,0 @@ -The wrapper downloading a Maven distribution multiple times in parallel is not safe. diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected new file mode 100644 index 00000000000..63c4821feac --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected @@ -0,0 +1,13 @@ +.mvn/wrapper/maven-wrapper.properties +pom.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +target/classes/my-app.properties +target/classes/page.xml +target/classes/struts.xml +target/maven-archiver/pom.properties +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.expected deleted file mode 100644 index dd77a3fab0a..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.expected +++ /dev/null @@ -1,16 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| pom.xml:0:0:0:0 | pom.xml | -| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | -| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | -| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | -| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | -propertiesFiles -| .mvn/wrapper/maven-wrapper.properties:0:0:0:0 | .mvn/wrapper/maven-wrapper.properties | -| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | -| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | -| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | -| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | -| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py b/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py index 5311b982c2b..eb49efe6a2a 100644 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py +++ b/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py @@ -1,7 +1,2 @@ -import sys - -from create_database_utils import * -from maven_wrapper_test_utils import * - -run_codeql_database_create([], lang="java") -check_maven_wrapper_exists("3.9.4") +def test(codeql, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.ql b/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.ql deleted file mode 100644 index 25cd26fdd14..00000000000 --- a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } - -query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py index c4726143c50..d67602f8bcb 100644 --- a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py @@ -1,15 +1,24 @@ -import sys +import commands -from create_database_utils import * -import subprocess -import os -try_use_java11() - -os.mkdir("mod1obj") -os.mkdir("mod2obj") - -subprocess.check_call(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) -subprocess.check_call(["jar", "-c", "-f", "mod1.jar", "-C", "mod1obj", "mod1pkg/Mod1Class.class", "--release", "9", "-C", "mod1obj", "module-info.class"]) - -run_codeql_database_create(["javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar"], lang="java") +def test(codeql, use_java_11, java): + commands.run(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) + commands.run( + [ + "jar", + "-c", + "-f", + "mod1.jar", + "-C", + "mod1obj", + "mod1pkg/Mod1Class.class", + "--release", + "9", + "-C", + "mod1obj", + "module-info.class", + ] + ) + codeql.database.create( + command="javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar" + ) diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py index c912a0cb27a..567cd51bef2 100644 --- a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py @@ -1,13 +1,24 @@ -import sys +import commands -from create_database_utils import * -import subprocess -import os -os.mkdir("mod1obj") -os.mkdir("mod2obj") - -subprocess.check_call(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) -subprocess.check_call(["jar", "-c", "-f", "mod1.jar", "-C", "mod1obj", "mod1pkg/Mod1Class.class", "--release", "9", "-C", "mod1obj", "module-info.class"]) - -run_codeql_database_create(["javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar"], lang="java") +def test(codeql, java): + commands.run(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) + commands.run( + [ + "jar", + "-c", + "-f", + "mod1.jar", + "-C", + "mod1obj", + "mod1pkg/Mod1Class.class", + "--release", + "9", + "-C", + "mod1obj", + "module-info.class", + ] + ) + codeql.database.create( + command="javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar" + ) diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected new file mode 100644 index 00000000000..67b20f5ad70 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected @@ -0,0 +1,10 @@ +.gradle/6.6.1/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/configuration-cache/gc.properties +.gradle/vcs-1/gc.properties +gradle/verification-metadata.xml +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/example/App.java +src/test/java/com/example/AppTest.java +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected deleted file mode 100644 index e7dd5838e6b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected +++ /dev/null @@ -1,5 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| gradle/verification-metadata.xml:0:0:0:0 | gradle/verification-metadata.xml | diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py index 846a89e8703..44576600a58 100644 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py @@ -1,31 +1,17 @@ -import sys - -from create_database_utils import * -import shutil -import os.path import tempfile -import platform +import runs_on +import pathlib -#The version of gradle used doesn't work on java 17 -try_use_java11() -gradle_override_dir = tempfile.mkdtemp() -if platform.system() == "Windows": - with open(os.path.join(gradle_override_dir, "gradle.bat"), "w") as f: - f.write("@echo off\nexit /b 2\n") -else: - gradlepath = os.path.join(gradle_override_dir, "gradle") - with open(gradlepath, "w") as f: - f.write("#!/bin/bash\nexit 1\n") - os.chmod(gradlepath, 0o0755) +# The version of gradle used doesn't work on java 17 +def test(codeql, use_java_11, java, environment): + gradle_override_dir = pathlib.Path(tempfile.mkdtemp()) + if runs_on.windows: + (gradle_override_dir / "gradle.bat").write_text("@echo off\nexit /b 2\n") + else: + gradlepath = gradle_override_dir / "gradle" + gradlepath.write_text("#!/bin/bash\nexit 1\n") + gradlepath.chmod(0o0755) -oldpath = os.getenv("PATH") -os.environ["PATH"] = gradle_override_dir + os.pathsep + oldpath - -try: - run_codeql_database_create([], lang="java") -finally: - try: - shutil.rmtree(gradle_override_dir) - except Exception as e: - pass + environment.add_path(gradle_override_dir) + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitignore b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected new file mode 100644 index 00000000000..67b20f5ad70 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected @@ -0,0 +1,10 @@ +.gradle/6.6.1/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/configuration-cache/gc.properties +.gradle/vcs-1/gc.properties +gradle/verification-metadata.xml +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/example/App.java +src/test/java/com/example/AppTest.java +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.expected b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.expected deleted file mode 100644 index e7dd5838e6b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.expected +++ /dev/null @@ -1,5 +0,0 @@ -#select -| src/main/java/com/example/App.java:0:0:0:0 | App | -| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | -xmlFiles -| gradle/verification-metadata.xml:0:0:0:0 | gradle/verification-metadata.xml | diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py index 1cb6e142763..31e476045b1 100644 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py @@ -1,8 +1,5 @@ -import sys +# The version of gradle used doesn't work on java 17 -from create_database_utils import * -#The version of gradle used doesn't work on java 17 -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, use_java_11, java): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.ql b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitattributes b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitattributes deleted file mode 100644 index 00a51aff5e5..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitignore b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitignore deleted file mode 100644 index c2065bc2620..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -HELP.md -.gradle -build/ -!gradle/wrapper/gradle-wrapper.jar -!**/src/main/**/build/ -!**/src/test/**/build/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache -bin/ -!**/src/main/**/bin/ -!**/src/test/**/bin/ - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr -out/ -!**/src/main/**/out/ -!**/src/test/**/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ - -### VS Code ### -.vscode/ diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/force_sequential_test_execution deleted file mode 100644 index b0e2500b259..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/force_sequential_test_execution +++ /dev/null @@ -1,3 +0,0 @@ -# We currently have a bug where gradle tests become flaky when executed in parallel -# - sometimes, gradle fails to connect to the gradle daemon. -# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e6441136f3d4ba8a0da8d277868979cfbc8ad796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ zQccdaaVK$5bz;*rnyK{_SQYM>;aES6Qs^lj9lEs6_J+%nIiuQC*fN;z8md>r_~Mfl zU%p5Dt_YT>gQqfr@`cR!$NWr~+`CZb%dn;WtzrAOI>P_JtsB76PYe*<%H(y>qx-`Kq!X_; z<{RpAqYhE=L1r*M)gNF3B8r(<%8mo*SR2hu zccLRZwGARt)Hlo1euqTyM>^!HK*!Q2P;4UYrysje@;(<|$&%vQekbn|0Ruu_Io(w4#%p6ld2Yp7tlA`Y$cciThP zKzNGIMPXX%&Ud0uQh!uQZz|FB`4KGD?3!ND?wQt6!n*f4EmCoJUh&b?;B{|lxs#F- z31~HQ`SF4x$&v00@(P+j1pAaj5!s`)b2RDBp*PB=2IB>oBF!*6vwr7Dp%zpAx*dPr zb@Zjq^XjN?O4QcZ*O+8>)|HlrR>oD*?WQl5ri3R#2?*W6iJ>>kH%KnnME&TT@ZzrHS$Q%LC?n|e>V+D+8D zYc4)QddFz7I8#}y#Wj6>4P%34dZH~OUDb?uP%-E zwjXM(?Sg~1!|wI(RVuxbu)-rH+O=igSho_pDCw(c6b=P zKk4ATlB?bj9+HHlh<_!&z0rx13K3ZrAR8W)!@Y}o`?a*JJsD+twZIv`W)@Y?Amu_u zz``@-e2X}27$i(2=9rvIu5uTUOVhzwu%mNazS|lZb&PT;XE2|B&W1>=B58#*!~D&) zfVmJGg8UdP*fx(>Cj^?yS^zH#o-$Q-*$SnK(ZVFkw+er=>N^7!)FtP3y~Xxnu^nzY zikgB>Nj0%;WOltWIob|}%lo?_C7<``a5hEkx&1ku$|)i>Rh6@3h*`slY=9U}(Ql_< zaNG*J8vb&@zpdhAvv`?{=zDedJ23TD&Zg__snRAH4eh~^oawdYi6A3w8<Ozh@Kw)#bdktM^GVb zrG08?0bG?|NG+w^&JvD*7LAbjED{_Zkc`3H!My>0u5Q}m!+6VokMLXxl`Mkd=g&Xx z-a>m*#G3SLlhbKB!)tnzfWOBV;u;ftU}S!NdD5+YtOjLg?X}dl>7m^gOpihrf1;PY zvll&>dIuUGs{Qnd- zwIR3oIrct8Va^Tm0t#(bJD7c$Z7DO9*7NnRZorrSm`b`cxz>OIC;jSE3DO8`hX955ui`s%||YQtt2 z5DNA&pG-V+4oI2s*x^>-$6J?p=I>C|9wZF8z;VjR??Icg?1w2v5Me+FgAeGGa8(3S z4vg*$>zC-WIVZtJ7}o9{D-7d>zCe|z#<9>CFve-OPAYsneTb^JH!Enaza#j}^mXy1 z+ULn^10+rWLF6j2>Ya@@Kq?26>AqK{A_| zQKb*~F1>sE*=d?A?W7N2j?L09_7n+HGi{VY;MoTGr_)G9)ot$p!-UY5zZ2Xtbm=t z@dpPSGwgH=QtIcEulQNI>S-#ifbnO5EWkI;$A|pxJd885oM+ zGZ0_0gDvG8q2xebj+fbCHYfAXuZStH2j~|d^sBAzo46(K8n59+T6rzBwK)^rfPT+B zyIFw)9YC-V^rhtK`!3jrhmW-sTmM+tPH+;nwjL#-SjQPUZ53L@A>y*rt(#M(qsiB2 zx6B)dI}6Wlsw%bJ8h|(lhkJVogQZA&n{?Vgs6gNSXzuZpEyu*xySy8ro07QZ7Vk1!3tJphN_5V7qOiyK8p z#@jcDD8nmtYi1^l8ml;AF<#IPK?!pqf9D4moYk>d99Im}Jtwj6c#+A;f)CQ*f-hZ< z=p_T86jog%!p)D&5g9taSwYi&eP z#JuEK%+NULWus;0w32-SYFku#i}d~+{Pkho&^{;RxzP&0!RCm3-9K6`>KZpnzS6?L z^H^V*s!8<>x8bomvD%rh>Zp3>Db%kyin;qtl+jAv8Oo~1g~mqGAC&Qi_wy|xEt2iz zWAJEfTV%cl2Cs<1L&DLRVVH05EDq`pH7Oh7sR`NNkL%wi}8n>IXcO40hp+J+sC!W?!krJf!GJNE8uj zg-y~Ns-<~D?yqbzVRB}G>0A^f0!^N7l=$m0OdZuqAOQqLc zX?AEGr1Ht+inZ-Qiwnl@Z0qukd__a!C*CKuGdy5#nD7VUBM^6OCpxCa2A(X;e0&V4 zM&WR8+wErQ7UIc6LY~Q9x%Sn*Tn>>P`^t&idaOEnOd(Ufw#>NoR^1QdhJ8s`h^|R_ zXX`c5*O~Xdvh%q;7L!_!ohf$NfEBmCde|#uVZvEo>OfEq%+Ns7&_f$OR9xsihRpBb z+cjk8LyDm@U{YN>+r46?nn{7Gh(;WhFw6GAxtcKD+YWV?uge>;+q#Xx4!GpRkVZYu zzsF}1)7$?%s9g9CH=Zs+B%M_)+~*j3L0&Q9u7!|+T`^O{xE6qvAP?XWv9_MrZKdo& z%IyU)$Q95AB4!#hT!_dA>4e@zjOBD*Y=XjtMm)V|+IXzjuM;(l+8aA5#Kaz_$rR6! zj>#&^DidYD$nUY(D$mH`9eb|dtV0b{S>H6FBfq>t5`;OxA4Nn{J(+XihF(stSche7$es&~N$epi&PDM_N`As;*9D^L==2Q7Z2zD+CiU(|+-kL*VG+&9!Yb3LgPy?A zm7Z&^qRG_JIxK7-FBzZI3Q<;{`DIxtc48k> zc|0dmX;Z=W$+)qE)~`yn6MdoJ4co;%!`ddy+FV538Y)j(vg}5*k(WK)KWZ3WaOG!8 z!syGn=s{H$odtpqFrT#JGM*utN7B((abXnpDM6w56nhw}OY}0TiTG1#f*VFZr+^-g zbP10`$LPq_;PvrA1XXlyx2uM^mrjTzX}w{yuLo-cOClE8MMk47T25G8M!9Z5ypOSV zAJUBGEg5L2fY)ZGJb^E34R2zJ?}Vf>{~gB!8=5Z) z9y$>5c)=;o0HeHHSuE4U)#vG&KF|I%-cF6f$~pdYJWk_dD}iOA>iA$O$+4%@>JU08 zS`ep)$XLPJ+n0_i@PkF#ri6T8?ZeAot$6JIYHm&P6EB=BiaNY|aA$W0I+nz*zkz_z zkEru!tj!QUffq%)8y0y`T&`fuus-1p>=^hnBiBqD^hXrPs`PY9tU3m0np~rISY09> z`P3s=-kt_cYcxWd{de@}TwSqg*xVhp;E9zCsnXo6z z?f&Sv^U7n4`xr=mXle94HzOdN!2kB~4=%)u&N!+2;z6UYKUDqi-s6AZ!haB;@&B`? z_TRX0%@suz^TRdCb?!vNJYPY8L_}&07uySH9%W^Tc&1pia6y1q#?*Drf}GjGbPjBS zbOPcUY#*$3sL2x4v_i*Y=N7E$mR}J%|GUI(>WEr+28+V z%v5{#e!UF*6~G&%;l*q*$V?&r$Pp^sE^i-0$+RH3ERUUdQ0>rAq2(2QAbG}$y{de( z>{qD~GGuOk559Y@%$?N^1ApVL_a704>8OD%8Y%8B;FCt%AoPu8*D1 zLB5X>b}Syz81pn;xnB}%0FnwazlWfUV)Z-~rZg6~b z6!9J$EcE&sEbzcy?CI~=boWA&eeIa%z(7SE^qgVLz??1Vbc1*aRvc%Mri)AJaAG!p z$X!_9Ds;Zz)f+;%s&dRcJt2==P{^j3bf0M=nJd&xwUGlUFn?H=2W(*2I2Gdu zv!gYCwM10aeus)`RIZSrCK=&oKaO_Ry~D1B5!y0R=%!i2*KfXGYX&gNv_u+n9wiR5 z*e$Zjju&ODRW3phN925%S(jL+bCHv6rZtc?!*`1TyYXT6%Ju=|X;6D@lq$8T zW{Y|e39ioPez(pBH%k)HzFITXHvnD6hw^lIoUMA;qAJ^CU?top1fo@s7xT13Fvn1H z6JWa-6+FJF#x>~+A;D~;VDs26>^oH0EI`IYT2iagy23?nyJ==i{g4%HrAf1-*v zK1)~@&(KkwR7TL}L(A@C_S0G;-GMDy=MJn2$FP5s<%wC)4jC5PXoxrQBFZ_k0P{{s@sz+gX`-!=T8rcB(=7vW}^K6oLWMmp(rwDh}b zwaGGd>yEy6fHv%jM$yJXo5oMAQ>c9j`**}F?MCry;T@47@r?&sKHgVe$MCqk#Z_3S z1GZI~nOEN*P~+UaFGnj{{Jo@16`(qVNtbU>O0Hf57-P>x8Jikp=`s8xWs^dAJ9lCQ z)GFm+=OV%AMVqVATtN@|vp61VVAHRn87}%PC^RAzJ%JngmZTasWBAWsoAqBU+8L8u z4A&Pe?fmTm0?mK-BL9t+{y7o(7jm+RpOhL9KnY#E&qu^}B6=K_dB}*VlSEiC9fn)+V=J;OnN)Ta5v66ic1rG+dGAJ1 z1%Zb_+!$=tQ~lxQrzv3x#CPb?CekEkA}0MYSgx$Jdd}q8+R=ma$|&1a#)TQ=l$1tQ z=tL9&_^vJ)Pk}EDO-va`UCT1m#Uty1{v^A3P~83_#v^ozH}6*9mIjIr;t3Uv%@VeW zGL6(CwCUp)Jq%G0bIG%?{_*Y#5IHf*5M@wPo6A{$Um++Co$wLC=J1aoG93&T7Ho}P z=mGEPP7GbvoG!uD$k(H3A$Z))+i{Hy?QHdk>3xSBXR0j!11O^mEe9RHmw!pvzv?Ua~2_l2Yh~_!s1qS`|0~0)YsbHSz8!mG)WiJE| z2f($6TQtt6L_f~ApQYQKSb=`053LgrQq7G@98#igV>y#i==-nEjQ!XNu9 z~;mE+gtj4IDDNQJ~JVk5Ux6&LCSFL!y=>79kE9=V}J7tD==Ga+IW zX)r7>VZ9dY=V&}DR))xUoV!u(Z|%3ciQi_2jl}3=$Agc(`RPb z8kEBpvY>1FGQ9W$n>Cq=DIpski};nE)`p3IUw1Oz0|wxll^)4dq3;CCY@RyJgFgc# zKouFh!`?Xuo{IMz^xi-h=StCis_M7yq$u) z?XHvw*HP0VgR+KR6wI)jEMX|ssqYvSf*_3W8zVTQzD?3>H!#>InzpSO)@SC8q*ii- z%%h}_#0{4JG;Jm`4zg};BPTGkYamx$Xo#O~lBirRY)q=5M45n{GCfV7h9qwyu1NxOMoP4)jjZMxmT|IQQh0U7C$EbnMN<3)Kk?fFHYq$d|ICu>KbY_hO zTZM+uKHe(cIZfEqyzyYSUBZa8;Fcut-GN!HSA9ius`ltNebF46ZX_BbZNU}}ZOm{M2&nANL9@0qvih15(|`S~z}m&h!u4x~(%MAO$jHRWNfuxWF#B)E&g3ghSQ9|> z(MFaLQj)NE0lowyjvg8z0#m6FIuKE9lDO~Glg}nSb7`~^&#(Lw{}GVOS>U)m8bF}x zVjbXljBm34Cs-yM6TVusr+3kYFjr28STT3g056y3cH5Tmge~ASxBj z%|yb>$eF;WgrcOZf569sDZOVwoo%8>XO>XQOX1OyN9I-SQgrm;U;+#3OI(zrWyow3 zk==|{lt2xrQ%FIXOTejR>;wv(Pb8u8}BUpx?yd(Abh6? zsoO3VYWkeLnF43&@*#MQ9-i-d0t*xN-UEyNKeyNMHw|A(k(_6QKO=nKMCxD(W(Yop zsRQ)QeL4X3Lxp^L%wzi2-WVSsf61dqliPUM7srDB?Wm6Lzn0&{*}|IsKQW;02(Y&| zaTKv|`U(pSzuvR6Rduu$wzK_W-Y-7>7s?G$)U}&uK;<>vU}^^ns@Z!p+9?St1s)dG zK%y6xkPyyS1$~&6v{kl?Md6gwM|>mt6Upm>oa8RLD^8T{0?HC!Z>;(Bob7el(DV6x zi`I)$&E&ngwFS@bi4^xFLAn`=fzTC;aimE^!cMI2n@Vo%Ae-ne`RF((&5y6xsjjAZ zVguVoQ?Z9uk$2ON;ersE%PU*xGO@T*;j1BO5#TuZKEf(mB7|g7pcEA=nYJ{s3vlbg zd4-DUlD{*6o%Gc^N!Nptgay>j6E5;3psI+C3Q!1ZIbeCubW%w4pq9)MSDyB{HLm|k zxv-{$$A*pS@csolri$Ge<4VZ}e~78JOL-EVyrbxKra^d{?|NnPp86!q>t<&IP07?Z z^>~IK^k#OEKgRH+LjllZXk7iA>2cfH6+(e&9ku5poo~6y{GC5>(bRK7hwjiurqAiZ zg*DmtgY}v83IjE&AbiWgMyFbaRUPZ{lYiz$U^&Zt2YjG<%m((&_JUbZcfJ22(>bi5 z!J?<7AySj0JZ&<-qXX;mcV!f~>G=sB0KnjWca4}vrtunD^1TrpfeS^4dvFr!65knK zZh`d;*VOkPs4*-9kL>$GP0`(M!j~B;#x?Ba~&s6CopvO86oM?-? zOw#dIRc;6A6T?B`Qp%^<U5 z19x(ywSH$_N+Io!6;e?`tWaM$`=Db!gzx|lQ${DG!zb1Zl&|{kX0y6xvO1o z220r<-oaS^^R2pEyY;=Qllqpmue|5yI~D|iI!IGt@iod{Opz@*ml^w2bNs)p`M(Io z|E;;m*Xpjd9l)4G#KaWfV(t8YUn@A;nK^#xgv=LtnArX|vWQVuw3}B${h+frU2>9^ z!l6)!Uo4`5k`<<;E(ido7M6lKTgWezNLq>U*=uz&s=cc$1%>VrAeOoUtA|T6gO4>UNqsdK=NF*8|~*sl&wI=x9-EGiq*aqV!(VVXA57 zw9*o6Ir8Lj1npUXvlevtn(_+^X5rzdR>#(}4YcB9O50q97%rW2me5_L=%ffYPUSRc z!vv?Kv>dH994Qi>U(a<0KF6NH5b16enCp+mw^Hb3Xs1^tThFpz!3QuN#}KBbww`(h z7GO)1olDqy6?T$()R7y%NYx*B0k_2IBiZ14&8|JPFxeMF{vSTxF-Vi3+ZOI=Thq2} zyQgjYY1_7^ZQHh{?P))4+qUiQJLi1&{yE>h?~jU%tjdV0h|FENbM3X(KnJdPKc?~k zh=^Ixv*+smUll!DTWH!jrV*wSh*(mx0o6}1@JExzF(#9FXgmTXVoU+>kDe68N)dkQ zH#_98Zv$}lQwjKL@yBd;U(UD0UCl322=pav<=6g>03{O_3oKTq;9bLFX1ia*lw;#K zOiYDcBJf)82->83N_Y(J7Kr_3lE)hAu;)Q(nUVydv+l+nQ$?|%MWTy`t>{havFSQloHwiIkGK9YZ79^9?AZo0ZyQlVR#}lF%dn5n%xYksXf8gnBm=wO7g_^! zauQ-bH1Dc@3ItZ-9D_*pH}p!IG7j8A_o94#~>$LR|TFq zZ-b00*nuw|-5C2lJDCw&8p5N~Z1J&TrcyErds&!l3$eSz%`(*izc;-?HAFD9AHb-| z>)id`QCrzRws^9(#&=pIx9OEf2rmlob8sK&xPCWS+nD~qzU|qG6KwA{zbikcfQrdH z+ zQg>O<`K4L8rN7`GJB0*3<3`z({lWe#K!4AZLsI{%z#ja^OpfjU{!{)x0ZH~RB0W5X zTwN^w=|nA!4PEU2=LR05x~}|B&ZP?#pNgDMwD*ajI6oJqv!L81gu=KpqH22avXf0w zX3HjbCI!n9>l046)5rr5&v5ja!xkKK42zmqHzPx$9Nn_MZk`gLeSLgC=LFf;H1O#B zn=8|^1iRrujHfbgA+8i<9jaXc;CQBAmQvMGQPhFec2H1knCK2x!T`e6soyrqCamX% zTQ4dX_E*8so)E*TB$*io{$c6X)~{aWfaqdTh=xEeGvOAN9H&-t5tEE-qso<+C!2>+ zskX51H-H}#X{A75wqFe-J{?o8Bx|>fTBtl&tcbdR|132Ztqu5X0i-pisB-z8n71%q%>EF}yy5?z=Ve`}hVh{Drv1YWL zW=%ug_&chF11gDv3D6B)Tz5g54H0mDHNjuKZ+)CKFk4Z|$RD zfRuKLW`1B>B?*RUfVd0+u8h3r-{@fZ{k)c!93t1b0+Q9vOaRnEn1*IL>5Z4E4dZ!7 ztp4GP-^1d>8~LMeb}bW!(aAnB1tM_*la=Xx)q(I0Y@__Zd$!KYb8T2VBRw%e$iSdZ zkwdMwd}eV9q*;YvrBFTv1>1+}{H!JK2M*C|TNe$ZSA>UHKk);wz$(F$rXVc|sI^lD zV^?_J!3cLM;GJuBMbftbaRUs$;F}HDEDtIeHQ)^EJJ1F9FKJTGH<(Jj`phE6OuvE) zqK^K`;3S{Y#1M@8yRQwH`?kHMq4tHX#rJ>5lY3DM#o@or4&^_xtBC(|JpGTfrbGkA z2Tu+AyT^pHannww!4^!$5?@5v`LYy~T`qs7SYt$JgrY(w%C+IWA;ZkwEF)u5sDvOK zGk;G>Mh&elvXDcV69J_h02l&O;!{$({fng9Rlc3ID#tmB^FIG^w{HLUpF+iB`|

    NnX)EH+Nua)3Y(c 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradlew.bat b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradlew.bat deleted file mode 100644 index 25da30dbdee..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected new file mode 100644 index 00000000000..7c6e9b460fe --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected @@ -0,0 +1,11 @@ +.gradle/8.7/dependencies-accessors/gc.properties +.gradle/8.7/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +build/resources/main/application.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/github/springbootsample/SpringBootSampleApplication.java +src/main/resources/application.properties +src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java +test-db/log/ext/javac-1.properties +test-db/log/ext/javac.properties diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.expected b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.expected deleted file mode 100644 index f8e614cd984..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.expected +++ /dev/null @@ -1,4 +0,0 @@ -#select -| src/main/java/com/github/springbootsample/SpringBootSampleApplication.java:0:0:0:0 | SpringBootSampleApplication | -| src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java:0:0:0:0 | SpringBootSampleApplicationTests | -xmlFiles diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py index 1cb6e142763..a3d842b5390 100644 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py +++ b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py @@ -1,8 +1,2 @@ -import sys - -from create_database_utils import * - -#The version of gradle used doesn't work on java 17 -try_use_java11() - -run_codeql_database_create([], lang="java") +def test(codeql, java, gradle_8_7): + codeql.database.create() diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.ql b/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.ql deleted file mode 100644 index c11b8fba707..00000000000 --- a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java - -from File f -where f.isSourceFile() -select f - -query predicate xmlFiles(XmlFile x) { any() } From 1c3b9f7031c940ecef911f55003b12fcec788188 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 27 Aug 2024 13:13:55 +0200 Subject: [PATCH 198/334] Delete legacy test utils. --- .../buildless_test_utils.py | 37 ---- .../maven_wrapper_test_utils.py | 12 -- java/integration-tests-lib/mitm_proxy.py | 173 ------------------ .../toolchains_test_utils.py | 42 ----- 4 files changed, 264 deletions(-) delete mode 100644 java/integration-tests-lib/buildless_test_utils.py delete mode 100644 java/integration-tests-lib/maven_wrapper_test_utils.py delete mode 100644 java/integration-tests-lib/mitm_proxy.py delete mode 100644 java/integration-tests-lib/toolchains_test_utils.py diff --git a/java/integration-tests-lib/buildless_test_utils.py b/java/integration-tests-lib/buildless_test_utils.py deleted file mode 100644 index 27f43060dae..00000000000 --- a/java/integration-tests-lib/buildless_test_utils.py +++ /dev/null @@ -1,37 +0,0 @@ -import sys -import os.path -import glob - -def extract_fetched_jar_path(l): - if not l.startswith("["): - # Line continuation - return None - bits = l.split(" ", 3) # date time processid logline - if len(bits) >= 4 and bits[3].startswith("Fetch "): - return bits[3][6:].strip() - else: - return None - -def read_fetched_jars(fname): - with open(fname, "r") as f: - lines = [l for l in f] - return [l for l in map(extract_fetched_jar_path, lines) if l is not None] - -def check_buildless_fetches(): - - extractor_logs = glob.glob(os.path.join("test-db", "log", "javac-extractor-*.log")) - fetched_jars = map(read_fetched_jars, extractor_logs) - all_fetched_jars = tuple(sorted([item for sublist in fetched_jars for item in sublist])) - - try: - with open("buildless-fetches.expected", "r") as f: - expected_jar_fetches = tuple(l.strip() for l in f) - except FileNotFoundError: - expected_jar_fetches = tuple() - - if all_fetched_jars != expected_jar_fetches: - print("Expected jar fetch mismatch. Expected:\n%s\n\nActual:\n%s" % ("\n".join(expected_jar_fetches), "\n".join(all_fetched_jars)), file = sys.stderr) - with open("buildless-fetches.actual", "w") as f: - for j in all_fetched_jars: - f.write(j + "\n") - sys.exit(1) diff --git a/java/integration-tests-lib/maven_wrapper_test_utils.py b/java/integration-tests-lib/maven_wrapper_test_utils.py deleted file mode 100644 index fd3b727ff77..00000000000 --- a/java/integration-tests-lib/maven_wrapper_test_utils.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys -import os.path - -def check_maven_wrapper_exists(expected_version): - if not os.path.exists(".mvn/wrapper/maven-wrapper.jar"): - print("Maven wrapper jar file expected but not found", file = sys.stderr) - sys.exit(1) - with open(".mvn/wrapper/maven-wrapper.properties", "r") as f: - content = f.read() - if ("apache-maven-%s-" % expected_version) not in content: - print("Expected Maven wrapper to fetch version %s, but actual properties file said:\n\n%s" % (expected_version, content), file = sys.stderr) - sys.exit(1) diff --git a/java/integration-tests-lib/mitm_proxy.py b/java/integration-tests-lib/mitm_proxy.py deleted file mode 100644 index a7606380019..00000000000 --- a/java/integration-tests-lib/mitm_proxy.py +++ /dev/null @@ -1,173 +0,0 @@ -import http.server -import sys -import os -import socket -import ssl -import random -from datetime import datetime, timedelta, timezone -from cryptography.hazmat.primitives import hashes, serialization -from cryptography import utils, x509 -from cryptography.hazmat.primitives.asymmetric import rsa, dsa - -import select - - -def generateCA(ca_cert_file, ca_key_file): - ca_key = dsa.generate_private_key(4096) - name = x509.Name([ - x509.NameAttribute(x509.NameOID.COUNTRY_NAME, "US"), - x509.NameAttribute(x509.NameOID.ORGANIZATION_NAME, "GitHub"), - x509.NameAttribute(x509.NameOID.COMMON_NAME, "GitHub CodeQL Proxy")]) - ca_cert = x509.CertificateBuilder().subject_name(name).issuer_name(name) - ca_cert = ca_cert.public_key(ca_key.public_key()) - ca_cert = ca_cert.serial_number(random.randint(50000000, 100000000)) - ca_cert = ca_cert.not_valid_before(datetime.now(timezone.utc)) - ca_cert = ca_cert.not_valid_after( - datetime.now(timezone.utc) + timedelta(days=3650)) - ca_cert = ca_cert.add_extension(x509.BasicConstraints( - ca=True, path_length=None), critical=True) - ca_cert = ca_cert.add_extension( - x509.SubjectKeyIdentifier.from_public_key(ca_key.public_key()), critical=False) - ca_cert = ca_cert.sign(ca_key, hashes.SHA256()) - with open(ca_cert_file, 'wb') as f: - f.write(ca_cert.public_bytes(encoding=serialization.Encoding.PEM)) - with open(ca_key_file, 'wb') as f: - f.write(ca_key.private_bytes(encoding=serialization.Encoding.PEM, - format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption())) - - -def create_certificate(hostname): - pkey = rsa.generate_private_key(public_exponent=65537, key_size=2048) - subject = x509.Name( - [x509.NameAttribute(x509.NameOID.COMMON_NAME, hostname)]) - - cert = x509.CertificateBuilder() - cert = cert.subject_name(subject).issuer_name(ca_certificate.subject) - cert = cert.public_key(pkey.public_key()) - cert = cert.serial_number(random.randint(50000000, 100000000)) - cert = cert.not_valid_before(datetime.now(timezone.utc)).not_valid_after( - datetime.now(timezone.utc) + timedelta(days=3650)) - cert = cert.add_extension(x509.BasicConstraints( - ca=False, path_length=None), critical=True) - cert = cert.add_extension( - x509.SubjectAlternativeName([x509.DNSName(hostname), x509.DNSName(f"*.{hostname}")]), critical=False) - - cert = cert.sign(ca_key, hashes.SHA256()) - - return (cert, pkey) - - -class Handler(http.server.SimpleHTTPRequestHandler): - def check_auth(self): - username = os.getenv('PROXY_USER') - password = os.getenv('PROXY_PASSWORD') - if username is None or password is None: - return True - - authorization = self.headers.get( - 'Proxy-Authorization', self.headers.get('Authorization', '')) - authorization = authorization.split() - if len(authorization) == 2: - import base64 - import binascii - auth_type = authorization[0] - if auth_type.lower() == "basic": - try: - authorization = authorization[1].encode('ascii') - authorization = base64.decodebytes( - authorization).decode('ascii') - except (binascii.Error, UnicodeError): - pass - else: - authorization = authorization.split(':') - if len(authorization) == 2: - return username == authorization[0] and password == authorization[1] - return False - - def do_CONNECT(self): - if not self.check_auth(): - self.send_response( - http.HTTPStatus.PROXY_AUTHENTICATION_REQUIRED) - self.send_header('Proxy-Authenticate', 'Basic realm="Proxy"') - self.end_headers() - return - # split self.path into host and port - host, port = self.path.split(':') - port = int(port) - self.send_response(http.HTTPStatus.OK, 'Connection established') - self.send_header('Connection', 'close') - self.end_headers() - self.mitm(host, port) - - # man in the middle SSL connection - def mitm(self, host, port): - ssl_client_context = ssl.create_default_context( - purpose=ssl.Purpose.CLIENT_AUTH) - if not os.path.exists("certs/" + host + '.pem'): - cert, pkey = create_certificate(host) - with open("certs/" + host + '.pem', 'wb') as f: - f.write(pkey.private_bytes(encoding=serialization.Encoding.PEM, - format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption())) - f.write(cert.public_bytes(encoding=serialization.Encoding.PEM)) - - ssl_client_context.load_cert_chain("certs/" + host + '.pem') - ssl_client_context.load_verify_locations(ca_certificate_path) - # wrap self.connection in SSL - client = ssl_client_context.wrap_socket( - self.connection, server_side=True) - - # create socket to host:port - remote = socket.create_connection( - (host, port)) - # wrap socket in SSL - ssl_server_context = ssl.create_default_context( - purpose=ssl.Purpose.SERVER_AUTH) - remote = ssl_server_context.wrap_socket(remote, server_hostname=host) - - try: - while True: - ready, _, _ = select.select( - [client, remote], [], [], 2.0) - if not ready: - break - for src in ready: - if src is client: - dst = remote - else: - dst = client - src.setblocking(False) - dst.setblocking(True) - pending = 8192 - while pending: - try: - data = src.recv(pending) - except ssl.SSLWantReadError: - break - if not data: - return - pending = src.pending() - dst.sendall(data) - finally: - remote.close() - client.close() - - def do_GET(self): - raise NotImplementedError() - - -if __name__ == '__main__': - port = int(sys.argv[1]) - ca_certificate = None - ca_certificate_path = None - ca_key = None - if len(sys.argv) > 2: - ca_certificate_path = sys.argv[2] - with open(ca_certificate_path, 'rb') as f: - ca_certificate = x509.load_pem_x509_certificate(f.read()) - with open(sys.argv[3], 'rb') as f: - ca_key = serialization.load_pem_private_key( - f.read(), password=None) - - server_address = ('localhost', port) - httpd = http.server.HTTPServer(server_address, Handler) - httpd.serve_forever() diff --git a/java/integration-tests-lib/toolchains_test_utils.py b/java/integration-tests-lib/toolchains_test_utils.py deleted file mode 100644 index 938096dbb4b..00000000000 --- a/java/integration-tests-lib/toolchains_test_utils.py +++ /dev/null @@ -1,42 +0,0 @@ -import os.path -import sys -import tempfile - -def actions_expose_all_toolchains(): - - # On actions, expose all usable toolchains so that we can test version-selection logic. - - toolchains_dir = tempfile.mkdtemp(prefix="integration-tests-toolchains-") - toolchains_file = os.path.join(toolchains_dir, "toolchains.xml") - - def none_or_blank(s): - return s is None or s == "" - - with open(toolchains_file, "w") as f: - f.write('\n\n') - - for v in [8, 11, 17, 21]: - homedir = os.getenv("JAVA_HOME_%d_X64" % v) - if none_or_blank(homedir): - homedir = os.getenv("JAVA_HOME_%d_arm64" % v) - if none_or_blank(homedir) and v == 8 and not none_or_blank(os.getenv("JAVA_HOME_11_arm64")): - print("Mocking a toolchain entry using Java 11 install as a fake Java 8 entry, so this test behaves the same on x64 and arm64 runners", file = sys.stderr) - homedir = os.getenv("JAVA_HOME_11_arm64") - if homedir is not None and homedir != "": - f.write(""" - - jdk - - %d - oracle - - - %s - - - """ % (v, homedir)) - - f.write("") - - return toolchains_file - From fe6693739adb5aadff1140ef3464432520859fbc Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 15 Aug 2024 15:33:03 +0200 Subject: [PATCH 199/334] Java: Make more finegrained dataflow dispatch viable callable heuristic. --- java/ql/lib/semmle/code/java/Element.qll | 7 +++++ .../dataflow/internal/DataFlowDispatch.qll | 26 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index 08689f05f94..aecdd51e144 100644 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -36,6 +36,13 @@ class Element extends @element, Top { */ predicate fromSource() { this.getCompilationUnit().isSourceFile() } + /** + * Holds if this element is from source and classified as a stub implementation. + * An implementation is considered a stub, if the the path to the + * source file contains `/stubs/`. + */ + predicate isStub() { this.fromSource() and this.getFile().getAbsolutePath().matches("%/stubs/%") } + /** Gets the compilation unit that this element belongs to. */ CompilationUnit getCompilationUnit() { result = this.getFile() } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll index 6f27ea5b4b5..775d3c0067b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll @@ -40,11 +40,29 @@ private module DispatchImpl { else any() } - /** Gets a viable implementation of the target of the given `Call`. */ + /** + * Gets a viable implementation of the target of the given `Call`. + * The following heuristic is applied for finding the appropriate callable: + * 1. If an exact manual model exists, only dispatch to the summarized callable. + * 2. If a (non exact) manual model exists and/or if the source code is available, dispatch to both/either. + * 3. Only dispatch to a summarized callable (based on a generated model) if neither of the above apply. + */ DataFlowCallable viableCallable(DataFlowCall c) { - result.asCallable() = sourceDispatch(c.asCall()) - or - result.asSummarizedCallable().getACall() = c.asCall() + exists(Call call | call = c.asCall() | + result.asCallable() = sourceDispatch(call) + or + not ( + // Only use summarized callables with generated summaries in case + // we are not able to dispatch to a source declaration. + // Note that if applyGeneratedModel holds it implies that there doesn't + // exist a manual (exact) model. + exists(Callable callable | callable = sourceDispatch(call) | + callable.fromSource() and not callable.isStub() + ) and + result.asSummarizedCallable().applyGeneratedModel() + ) and + result.asSummarizedCallable().getACall() = call + ) } /** From 68880b20569fefcb9ae759535b0908d698582892 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 16 Aug 2024 11:39:49 +0200 Subject: [PATCH 200/334] Java: Update expected test output. Generated models are no longer applied as there exist a source implementation. --- .../test/library-tests/dataflow/external-models/steps.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/external-models/steps.expected b/java/ql/test/library-tests/dataflow/external-models/steps.expected index c9b2fd4d01e..3ef7da26182 100644 --- a/java/ql/test/library-tests/dataflow/external-models/steps.expected +++ b/java/ql/test/library-tests/dataflow/external-models/steps.expected @@ -8,6 +8,4 @@ invalidModelRow | C.java:20:5:20:8 | this | C.java:20:5:20:22 | stepQualRes(...) | | C.java:21:5:21:17 | this <.method> | C.java:21:5:21:17 | stepQualRes(...) | | C.java:24:5:24:23 | this <.method> | C.java:24:17:24:22 | argOut [post update] | -| C.java:29:25:29:28 | arg1 | C.java:29:5:29:29 | stepArgResGenerated(...) | | C.java:34:38:34:41 | arg2 | C.java:34:5:34:42 | stepArgResGeneratedIgnored(...) | -| C.java:36:26:36:29 | arg1 | C.java:36:5:36:30 | this <.method> [post update] | From 6cb5e13a23ee165185d859c256ae22a29439acf0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 16 Aug 2024 12:07:29 +0200 Subject: [PATCH 201/334] Java: Re-factor tests and update expected test output. --- .../dataflow/external-models/C.java | 59 ++++++++++++------- .../dataflow/external-models/steps.expected | 20 ++++--- .../dataflow/external-models/steps.ext.yml | 13 ++-- .../external-models/stubs/Library.java | 19 ++++++ 4 files changed, 75 insertions(+), 36 deletions(-) create mode 100644 java/ql/test/library-tests/dataflow/external-models/stubs/Library.java diff --git a/java/ql/test/library-tests/dataflow/external-models/C.java b/java/ql/test/library-tests/dataflow/external-models/C.java index b1c7f2dc85c..c0270dbe9f1 100644 --- a/java/ql/test/library-tests/dataflow/external-models/C.java +++ b/java/ql/test/library-tests/dataflow/external-models/C.java @@ -1,5 +1,7 @@ package my.qltest; +import my.qltest.external.Library; + public class C { void foo() { Object arg1 = new Object(); @@ -25,35 +27,50 @@ public class C { } void fooGenerated() { - Object arg1 = new Object(); - stepArgResGenerated(arg1); + Object arg = new Object(); - Object arg2 = new Object(); - // The summary for the first parameter is ignored, because it is generated and - // because there is hand written summary for the second parameter. - stepArgResGeneratedIgnored(arg1, arg2); - - stepArgQualGenerated(arg1); - // The summary for the first parameter is ignored, because it is generated and - // because there is hand written neutral summary model for this callable. - stepArgQualGeneratedIgnored(arg1); + // The (generated) summary is ignored because the source code is available. + stepArgResGenerated(arg); } - Object stepArgRes(Object x) { return null; } + // Library functionality is emulated by placing the source code in a "stubs" + // folder. This means that a generated summary will be applied, if there + // doesn't exist a manual summary or manual summary neutral. + void fooLibrary() { + Object arg1 = new Object(); - void stepArgArg(Object in, Object out) { } + Library lib = new Library(); - void stepArgQual(Object x) { } + lib.apiStepArgResGenerated(arg1); - Object stepQualRes() { return null; } + Object arg2 = new Object(); - void stepQualArg(Object out) { } + // The summary for the first parameter is ignored, because it is generated and + // because there is a manual summary for the second parameter. + lib.apiStepArgResGeneratedIgnored(arg1, arg2); - Object stepArgResGenerated(Object x) { return null; } + lib.apiStepArgQualGenerated(arg1); - Object stepArgResGeneratedIgnored(Object x, Object y) { return null; } + // The summary for the parameter is ignored, because it is generated and + // because there is a manual neutral summary model for this callable. + lib.apiStepArgQualGeneratedIgnored(arg1); + } - Object stepArgQualGenerated(Object x) { return null; } - - Object stepArgQualGeneratedIgnored(Object x) { return null; } + Object stepArgRes(Object x) { + return null; + } + + void stepArgArg(Object in, Object out) {} + + void stepArgQual(Object x) {} + + Object stepQualRes() { + return null; + } + + void stepQualArg(Object out) {} + + Object stepArgResGenerated(Object x) { + return null; + } } diff --git a/java/ql/test/library-tests/dataflow/external-models/steps.expected b/java/ql/test/library-tests/dataflow/external-models/steps.expected index 3ef7da26182..e9cbb7ec99e 100644 --- a/java/ql/test/library-tests/dataflow/external-models/steps.expected +++ b/java/ql/test/library-tests/dataflow/external-models/steps.expected @@ -1,11 +1,13 @@ invalidModelRow #select -| C.java:6:16:6:19 | arg1 | C.java:6:5:6:20 | stepArgRes(...) | -| C.java:10:16:10:21 | argIn1 | C.java:10:24:10:30 | argOut1 [post update] | -| C.java:13:16:13:21 | argIn2 | C.java:13:24:13:30 | argOut2 [post update] | -| C.java:16:17:16:20 | arg2 | C.java:16:5:16:21 | this <.method> [post update] | -| C.java:18:22:18:25 | arg3 | C.java:18:5:18:8 | this [post update] | -| C.java:20:5:20:8 | this | C.java:20:5:20:22 | stepQualRes(...) | -| C.java:21:5:21:17 | this <.method> | C.java:21:5:21:17 | stepQualRes(...) | -| C.java:24:5:24:23 | this <.method> | C.java:24:17:24:22 | argOut [post update] | -| C.java:34:38:34:41 | arg2 | C.java:34:5:34:42 | stepArgResGeneratedIgnored(...) | +| C.java:8:16:8:19 | arg1 | C.java:8:5:8:20 | stepArgRes(...) | +| C.java:12:16:12:21 | argIn1 | C.java:12:24:12:30 | argOut1 [post update] | +| C.java:15:16:15:21 | argIn2 | C.java:15:24:15:30 | argOut2 [post update] | +| C.java:18:17:18:20 | arg2 | C.java:18:5:18:21 | this <.method> [post update] | +| C.java:20:22:20:25 | arg3 | C.java:20:5:20:8 | this [post update] | +| C.java:22:5:22:8 | this | C.java:22:5:22:22 | stepQualRes(...) | +| C.java:23:5:23:17 | this <.method> | C.java:23:5:23:17 | stepQualRes(...) | +| C.java:26:5:26:23 | this <.method> | C.java:26:17:26:22 | argOut [post update] | +| C.java:44:32:44:35 | arg1 | C.java:44:5:44:36 | apiStepArgResGenerated(...) | +| C.java:50:45:50:48 | arg2 | C.java:50:5:50:49 | apiStepArgResGeneratedIgnored(...) | +| C.java:52:33:52:36 | arg1 | C.java:52:5:52:7 | lib [post update] | diff --git a/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml b/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml index 831079dd40b..fbfcf0536ae 100644 --- a/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml +++ b/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml @@ -9,13 +9,14 @@ extensions: - ["my.qltest", "C", False, "stepQualRes", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["my.qltest", "C", False, "stepQualArg", "(Object)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["my.qltest", "C", False, "stepArgResGenerated", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["my.qltest", "C", False, "stepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["my.qltest", "C", False, "stepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "manual"] - - ["my.qltest", "C", False, "stepArgQualGenerated", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["my.qltest", "C", False, "stepArgQualGeneratedIgnored", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["my.qltest.external", "Library", False, "apiStepArgResGenerated", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["my.qltest.external", "Library", False, "apiStepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["my.qltest.external", "Library", False, "apiStepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "manual"] + - ["my.qltest.external", "Library", False, "apiStepArgQualGenerated", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["my.qltest.external", "Library", False, "apiStepArgQualGeneratedIgnored", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - addsTo: pack: codeql/java-all extensible: neutralModel data: - - ["my.qltest", "C", "stepArgQualGenerated", "(Object)", "summary", "df-generated"] - - ["my.qltest", "C", "stepArgQualGeneratedIgnored", "(Object)", "summary", "manual"] + - ["my.qltest.external", "Library", "apiStepArgQualGenerated", "(Object)", "summary", "df-generated"] + - ["my.qltest.external", "Library", "apiStepArgQualGeneratedIgnored", "(Object)", "summary", "manual"] diff --git a/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java b/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java new file mode 100644 index 00000000000..945d8671b39 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java @@ -0,0 +1,19 @@ +package my.qltest.external; + +public class Library { + public Object apiStepArgResGenerated(Object x) { + return null; + } + + public Object apiStepArgResGeneratedIgnored(Object x, Object y) { + return null; + } + + public Object apiStepArgQualGenerated(Object x) { + return null; + } + + public Object apiStepArgQualGeneratedIgnored(Object x) { + return null; + } +} From db51604f4611a6e1dcfe934754fe9c6bf2f457a8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 19 Aug 2024 13:54:19 +0200 Subject: [PATCH 202/334] Java: Promote some generated models and add some manual neutrals. --- java/ql/lib/ext/java.net.model.yml | 1 + java/ql/lib/ext/java.nio.model.yml | 15 ++++++++++++++- java/ql/lib/ext/java.security.cert.model.yml | 8 ++++++++ java/ql/lib/ext/java.security.model.yml | 3 +++ java/ql/lib/ext/java.util.logging.model.yml | 3 +++ java/ql/lib/ext/javax.management.model.yml | 3 +++ 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index f48acbeace1..5acfd7f4e10 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -48,6 +48,7 @@ extensions: - ["java.net", "URI", False, "URI", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.net", "URI", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.net", "URI", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "toASCIIString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/ext/java.nio.model.yml b/java/ql/lib/ext/java.nio.model.yml index 1548dc2c649..1848916b43b 100644 --- a/java/ql/lib/ext/java.nio.model.yml +++ b/java/ql/lib/ext/java.nio.model.yml @@ -5,7 +5,20 @@ extensions: data: - ["java.nio", "ByteBuffer", False, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio", "ByteBuffer", False, "get", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio", "ByteBuffer", False, "wrap", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] + - ["java.nio", "ByteBuffer", True, "wrap", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "ByteBuffer", True, "wrap", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - addsTo: pack: codeql/java-all diff --git a/java/ql/lib/ext/java.security.cert.model.yml b/java/ql/lib/ext/java.security.cert.model.yml index 503ad06cabf..d85413b723d 100644 --- a/java/ql/lib/ext/java.security.cert.model.yml +++ b/java/ql/lib/ext/java.security.cert.model.yml @@ -4,6 +4,14 @@ extensions: extensible: sinkModel data: - ["java.security.cert", "X509CertSelector", False, "setSubjectPublicKey", "(byte[])", "", "Argument[0]", "credentials-key", "hq-generated"] + + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security.cert", "X509Certificate", True, "getIssuerX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["java.security.cert", "X509Certificate", True, "getSubjectX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/lib/ext/java.security.model.yml b/java/ql/lib/ext/java.security.model.yml index 6157c635fe6..27120072763 100644 --- a/java/ql/lib/ext/java.security.model.yml +++ b/java/ql/lib/ext/java.security.model.yml @@ -26,6 +26,9 @@ extensions: - ["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"] + - ["java.security", "Permission", True, "Permission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.security", "Permission", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/lib/ext/java.util.logging.model.yml b/java/ql/lib/ext/java.util.logging.model.yml index 4bd8c6556c9..4913254bf2d 100644 --- a/java/ql/lib/ext/java.util.logging.model.yml +++ b/java/ql/lib/ext/java.util.logging.model.yml @@ -46,8 +46,11 @@ extensions: - ["java.util.logging", "Logger", False, "getLogger", "(String)", "", "Argument[0]", "ReturnValue.SyntheticField[java.util.logging.Logger.name]", "value", "manual"] - ["java.util.logging", "Logger", False, "getName", "()", "", "Argument[this].SyntheticField[java.util.logging.Logger.name]", "ReturnValue", "value", "manual"] - ["java.util.logging", "LogRecord", False, "LogRecord", "", "", "Argument[1]", "Argument[this]", "taint", "manual"] + - ["java.util.logging", "LogRecord", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - addsTo: pack: codeql/java-all extensible: neutralModel data: + - ["java.util.logging", "Handler", "getEncoding", "()", "summary", "manual"] - ["java.util.logging", "Logger", "isLoggable", "(Level)", "summary", "manual"] + - ["java.util.logging", "LogRecord", "getParameters", "()", "summary", "manual"] diff --git a/java/ql/lib/ext/javax.management.model.yml b/java/ql/lib/ext/javax.management.model.yml index f1877228cf1..d973be3a69b 100644 --- a/java/ql/lib/ext/javax.management.model.yml +++ b/java/ql/lib/ext/javax.management.model.yml @@ -3,4 +3,7 @@ extensions: pack: codeql/java-all extensible: summaryModel data: + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[3]", "Argument[this]", "taint", "df-manual"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[4]", "Argument[this]", "taint", "df-manual"] + - ["javax.management", "Notification", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["javax.management", "ObjectName", True, "ObjectName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] From d79aa294ec72a81268ea2fa487f787f4d06523e4 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 19 Aug 2024 13:58:12 +0200 Subject: [PATCH 203/334] Java: Move some neutrals into the model.yml file (they have previosly been ignored due to wrong file extension). --- java/ql/lib/ext/java.util.logging.model.yml | 4 ++++ java/ql/lib/ext/java.util.logging.yml | 8 -------- 2 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 java/ql/lib/ext/java.util.logging.yml diff --git a/java/ql/lib/ext/java.util.logging.model.yml b/java/ql/lib/ext/java.util.logging.model.yml index 4913254bf2d..d13803d73bb 100644 --- a/java/ql/lib/ext/java.util.logging.model.yml +++ b/java/ql/lib/ext/java.util.logging.model.yml @@ -53,4 +53,8 @@ extensions: data: - ["java.util.logging", "Handler", "getEncoding", "()", "summary", "manual"] - ["java.util.logging", "Logger", "isLoggable", "(Level)", "summary", "manual"] + - ["java.util.logging", "LogRecord", "getResourceBundle", "()", "summary", "df-manual"] + # If needed, a pair of manual summary models using synthetics can be made for the two + # neutrals below. - ["java.util.logging", "LogRecord", "getParameters", "()", "summary", "manual"] + - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.util.logging.yml b/java/ql/lib/ext/java.util.logging.yml deleted file mode 100644 index c4bf4e77300..00000000000 --- a/java/ql/lib/ext/java.util.logging.yml +++ /dev/null @@ -1,8 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: neutralModel - data: - # summary neutrals - - ["java.util.logging", "LogRecord", "getResourceBundle", "()", "summary", "df-manual"] - - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "df-manual"] From 7488cc0811dcc03a08e371db9ab09bffc9064af9 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 19 Aug 2024 15:17:27 +0200 Subject: [PATCH 204/334] Java: Updated expected test output. --- .../apache-commons-lang3/flow.expected | 646 +++++++++--------- 1 file changed, 323 insertions(+), 323 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected index 5a5618355c0..5c7448f4222 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected @@ -1,14 +1,14 @@ models -| 1 | Summary: java.nio; CharBuffer; true; wrap; (char[]); ; Argument[0]; ReturnValue; taint; df-generated | -| 2 | Summary: java.io; Reader; true; read; ; ; Argument[this]; Argument[0]; taint; manual | -| 3 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 4 | Summary: java.lang; Appendable; true; append; ; ; Argument[0]; Argument[this]; taint; manual | -| 5 | Summary: java.lang; CharSequence; true; subSequence; ; ; Argument[this]; ReturnValue; taint; manual | -| 6 | Summary: java.lang; CharSequence; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | -| 7 | Summary: java.lang; Iterable; true; iterator; (); ; Argument[this].Element; ReturnValue.Element; value; manual | -| 8 | Summary: java.lang; String; false; toCharArray; ; ; Argument[this]; ReturnValue; taint; manual | -| 9 | Summary: java.lang; StringBuffer; true; StringBuffer; (String); ; Argument[0]; Argument[this]; taint; manual | -| 10 | Summary: java.lang; StringBuilder; true; StringBuilder; ; ; Argument[0]; Argument[this]; taint; manual | +| 1 | Summary: java.io; Reader; true; read; ; ; Argument[this]; Argument[0]; taint; manual | +| 2 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | +| 3 | Summary: java.lang; Appendable; true; append; ; ; Argument[0]; Argument[this]; taint; manual | +| 4 | Summary: java.lang; CharSequence; true; subSequence; ; ; Argument[this]; ReturnValue; taint; manual | +| 5 | Summary: java.lang; CharSequence; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | +| 6 | Summary: java.lang; Iterable; true; iterator; (); ; Argument[this].Element; ReturnValue.Element; value; manual | +| 7 | Summary: java.lang; String; false; toCharArray; ; ; Argument[this]; ReturnValue; taint; manual | +| 8 | Summary: java.lang; StringBuffer; true; StringBuffer; (String); ; Argument[0]; Argument[this]; taint; manual | +| 9 | Summary: java.lang; StringBuilder; true; StringBuilder; ; ; Argument[0]; Argument[this]; taint; manual | +| 10 | Summary: java.nio; CharBuffer; true; wrap; (char[]); ; Argument[0]; ReturnValue; taint; df-manual | | 11 | Summary: java.util; Collection; true; add; ; ; Argument[0]; Argument[this].Element; value; manual | | 12 | Summary: java.util; Dictionary; true; put; (Object,Object); ; Argument[1]; Argument[this].MapValue; value; manual | | 13 | Summary: java.util; Iterator; true; next; ; ; Argument[this].Element; ReturnValue; value; manual | @@ -945,234 +945,234 @@ edges | RegExUtilsTest.java:27:57:27:63 | taint(...) : String | RegExUtilsTest.java:27:10:27:64 | replacePattern(...) | provenance | MaD:78 | | StrBuilderTest.java:17:28:17:50 | new StrBuilder(...) : StrBuilder | StrBuilderTest.java:17:58:17:62 | cons1 : StrBuilder | provenance | | | StrBuilderTest.java:17:43:17:49 | taint(...) : String | StrBuilderTest.java:17:28:17:50 | new StrBuilder(...) : StrBuilder | provenance | MaD:226 | -| StrBuilderTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTest.java:17:58:17:73 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTest.java:17:58:17:73 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTest.java:17:58:17:73 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:19:44:19:46 | sb1 [post update] : StrBuilder | StrBuilderTest.java:19:84:19:86 | sb1 : StrBuilder | provenance | | -| StrBuilderTest.java:19:55:19:61 | taint(...) : String | StrBuilderTest.java:19:55:19:75 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:19:55:19:61 | taint(...) : String | StrBuilderTest.java:19:55:19:75 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:19:55:19:75 | toCharArray(...) : char[] | StrBuilderTest.java:19:44:19:46 | sb1 [post update] : StrBuilder | provenance | MaD:228 | -| StrBuilderTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTest.java:19:84:19:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTest.java:19:84:19:97 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTest.java:19:84:19:97 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:20:44:20:46 | sb2 [post update] : StrBuilder | StrBuilderTest.java:20:90:20:92 | sb2 : StrBuilder | provenance | | -| StrBuilderTest.java:20:55:20:61 | taint(...) : String | StrBuilderTest.java:20:55:20:75 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:20:55:20:61 | taint(...) : String | StrBuilderTest.java:20:55:20:75 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:20:55:20:75 | toCharArray(...) : char[] | StrBuilderTest.java:20:44:20:46 | sb2 [post update] : StrBuilder | provenance | MaD:229 | -| StrBuilderTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTest.java:20:90:20:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTest.java:20:90:20:103 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTest.java:20:90:20:103 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:21:44:21:46 | sb3 [post update] : StrBuilder | StrBuilderTest.java:21:101:21:103 | sb3 : StrBuilder | provenance | | | StrBuilderTest.java:21:55:21:92 | wrap(...) : CharBuffer | StrBuilderTest.java:21:44:21:46 | sb3 [post update] : StrBuilder | provenance | MaD:241 | -| StrBuilderTest.java:21:71:21:77 | taint(...) : String | StrBuilderTest.java:21:71:21:91 | toCharArray(...) : char[] | provenance | MaD:8 | -| StrBuilderTest.java:21:71:21:91 | toCharArray(...) : char[] | StrBuilderTest.java:21:55:21:92 | wrap(...) : CharBuffer | provenance | MaD:1 | -| StrBuilderTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTest.java:21:101:21:114 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:21:71:21:77 | taint(...) : String | StrBuilderTest.java:21:71:21:91 | toCharArray(...) : char[] | provenance | MaD:7 | +| StrBuilderTest.java:21:71:21:91 | toCharArray(...) : char[] | StrBuilderTest.java:21:55:21:92 | wrap(...) : CharBuffer | provenance | MaD:10 | +| StrBuilderTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTest.java:21:101:21:114 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTest.java:21:101:21:114 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:22:44:22:46 | sb4 [post update] : StrBuilder | StrBuilderTest.java:22:107:22:109 | sb4 : StrBuilder | provenance | | | StrBuilderTest.java:22:55:22:92 | wrap(...) : CharBuffer | StrBuilderTest.java:22:44:22:46 | sb4 [post update] : StrBuilder | provenance | MaD:242 | -| StrBuilderTest.java:22:71:22:77 | taint(...) : String | StrBuilderTest.java:22:71:22:91 | toCharArray(...) : char[] | provenance | MaD:8 | -| StrBuilderTest.java:22:71:22:91 | toCharArray(...) : char[] | StrBuilderTest.java:22:55:22:92 | wrap(...) : CharBuffer | provenance | MaD:1 | -| StrBuilderTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTest.java:22:107:22:120 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:22:71:22:77 | taint(...) : String | StrBuilderTest.java:22:71:22:91 | toCharArray(...) : char[] | provenance | MaD:7 | +| StrBuilderTest.java:22:71:22:91 | toCharArray(...) : char[] | StrBuilderTest.java:22:55:22:92 | wrap(...) : CharBuffer | provenance | MaD:10 | +| StrBuilderTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTest.java:22:107:22:120 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTest.java:22:107:22:120 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | StrBuilderTest.java:23:84:23:86 | sb5 : StrBuilder | provenance | | -| StrBuilderTest.java:23:55:23:75 | (...)... : String | StrBuilderTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:4 | +| StrBuilderTest.java:23:55:23:75 | (...)... : String | StrBuilderTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:3 | | StrBuilderTest.java:23:55:23:75 | (...)... : String | StrBuilderTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:230 | | StrBuilderTest.java:23:69:23:75 | taint(...) : String | StrBuilderTest.java:23:55:23:75 | (...)... : String | provenance | | -| StrBuilderTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTest.java:23:84:23:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTest.java:23:84:23:97 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTest.java:23:84:23:97 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | StrBuilderTest.java:24:90:24:92 | sb6 : StrBuilder | provenance | | -| StrBuilderTest.java:24:55:24:75 | (...)... : String | StrBuilderTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:4 | +| StrBuilderTest.java:24:55:24:75 | (...)... : String | StrBuilderTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:3 | | StrBuilderTest.java:24:55:24:75 | (...)... : String | StrBuilderTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:231 | | StrBuilderTest.java:24:69:24:75 | taint(...) : String | StrBuilderTest.java:24:55:24:75 | (...)... : String | provenance | | -| StrBuilderTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTest.java:24:90:24:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTest.java:24:90:24:103 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTest.java:24:90:24:103 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:25:44:25:46 | sb7 [post update] : StrBuilder | StrBuilderTest.java:25:78:25:80 | sb7 : StrBuilder | provenance | | | StrBuilderTest.java:25:55:25:69 | (...)... : String | StrBuilderTest.java:25:44:25:46 | sb7 [post update] : StrBuilder | provenance | MaD:232 | | StrBuilderTest.java:25:63:25:69 | taint(...) : String | StrBuilderTest.java:25:55:25:69 | (...)... : String | provenance | | -| StrBuilderTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTest.java:25:78:25:91 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTest.java:25:78:25:91 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTest.java:25:78:25:91 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:27:50:27:54 | auxsb [post update] : StrBuilder | StrBuilderTest.java:28:59:28:63 | auxsb : StrBuilder | provenance | | | StrBuilderTest.java:27:63:27:69 | taint(...) : String | StrBuilderTest.java:27:50:27:54 | auxsb [post update] : StrBuilder | provenance | MaD:233 | | StrBuilderTest.java:28:48:28:50 | sb8 [post update] : StrBuilder | StrBuilderTest.java:28:72:28:74 | sb8 : StrBuilder | provenance | | | StrBuilderTest.java:28:59:28:63 | auxsb : StrBuilder | StrBuilderTest.java:28:48:28:50 | sb8 [post update] : StrBuilder | provenance | MaD:243 | -| StrBuilderTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTest.java:28:72:28:85 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTest.java:28:72:28:85 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTest.java:28:72:28:85 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:30:44:30:46 | sb9 [post update] : StrBuilder | StrBuilderTest.java:30:88:30:90 | sb9 : StrBuilder | provenance | | | StrBuilderTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | StrBuilderTest.java:30:44:30:46 | sb9 [post update] : StrBuilder | provenance | MaD:237 | -| StrBuilderTest.java:30:72:30:78 | taint(...) : String | StrBuilderTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTest.java:30:88:30:101 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:30:72:30:78 | taint(...) : String | StrBuilderTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTest.java:30:88:30:101 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTest.java:30:88:30:101 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:31:45:31:48 | sb10 [post update] : StrBuilder | StrBuilderTest.java:31:96:31:99 | sb10 : StrBuilder | provenance | | | StrBuilderTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | StrBuilderTest.java:31:45:31:48 | sb10 [post update] : StrBuilder | provenance | MaD:238 | -| StrBuilderTest.java:31:74:31:80 | taint(...) : String | StrBuilderTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTest.java:31:96:31:110 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:31:74:31:80 | taint(...) : String | StrBuilderTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTest.java:31:96:31:110 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTest.java:31:96:31:110 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:32:45:32:48 | sb11 [post update] : StrBuilder | StrBuilderTest.java:32:91:32:94 | sb11 : StrBuilder | provenance | | | StrBuilderTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | StrBuilderTest.java:32:45:32:48 | sb11 [post update] : StrBuilder | provenance | MaD:239 | -| StrBuilderTest.java:32:75:32:81 | taint(...) : String | StrBuilderTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTest.java:32:91:32:105 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:32:75:32:81 | taint(...) : String | StrBuilderTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTest.java:32:91:32:105 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTest.java:32:91:32:105 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:33:45:33:48 | sb12 [post update] : StrBuilder | StrBuilderTest.java:33:97:33:100 | sb12 : StrBuilder | provenance | | | StrBuilderTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | StrBuilderTest.java:33:45:33:48 | sb12 [post update] : StrBuilder | provenance | MaD:240 | -| StrBuilderTest.java:33:75:33:81 | taint(...) : String | StrBuilderTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTest.java:33:97:33:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:33:75:33:81 | taint(...) : String | StrBuilderTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTest.java:33:97:33:111 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTest.java:33:97:33:111 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:34:45:34:48 | sb13 [post update] : StrBuilder | StrBuilderTest.java:34:72:34:75 | sb13 : StrBuilder | provenance | | | StrBuilderTest.java:34:57:34:63 | taint(...) : String | StrBuilderTest.java:34:45:34:48 | sb13 [post update] : StrBuilder | provenance | MaD:233 | -| StrBuilderTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTest.java:34:72:34:86 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTest.java:34:72:34:86 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTest.java:34:72:34:86 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:35:45:35:48 | sb14 [post update] : StrBuilder | StrBuilderTest.java:35:78:35:81 | sb14 : StrBuilder | provenance | | | StrBuilderTest.java:35:57:35:63 | taint(...) : String | StrBuilderTest.java:35:45:35:48 | sb14 [post update] : StrBuilder | provenance | MaD:234 | -| StrBuilderTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTest.java:35:78:35:92 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTest.java:35:78:35:92 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTest.java:35:78:35:92 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:36:45:36:48 | sb15 [post update] : StrBuilder | StrBuilderTest.java:36:90:36:93 | sb15 : StrBuilder | provenance | | | StrBuilderTest.java:36:57:36:63 | taint(...) : String | StrBuilderTest.java:36:45:36:48 | sb15 [post update] : StrBuilder | provenance | MaD:235 | -| StrBuilderTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTest.java:36:90:36:104 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTest.java:36:90:36:104 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTest.java:36:90:36:104 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:37:45:37:48 | sb16 [post update] : StrBuilder | StrBuilderTest.java:37:97:37:100 | sb16 : StrBuilder | provenance | | | StrBuilderTest.java:37:45:37:89 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTest.java:37:45:37:48 | sb16 [post update] : StrBuilder | provenance | MaD:236 | | StrBuilderTest.java:37:74:37:80 | taint(...) : String | StrBuilderTest.java:37:45:37:89 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTest.java:37:97:37:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTest.java:37:97:37:111 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTest.java:37:97:37:111 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTest.java:41:64:41:74 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTest.java:42:64:42:74 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTest.java:40:29:40:35 | taint(...) : String | StrBuilderTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | StrBuilderTest.java:41:49:41:52 | sb17 [post update] : StrBuilder | StrBuilderTest.java:41:83:41:86 | sb17 : StrBuilder | provenance | | | StrBuilderTest.java:41:64:41:74 | taintedList : ArrayList [] : String | StrBuilderTest.java:41:49:41:52 | sb17 [post update] : StrBuilder | provenance | MaD:245 | -| StrBuilderTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTest.java:41:83:41:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTest.java:41:83:41:97 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTest.java:41:83:41:97 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:42:49:42:52 | sb18 [post update] : StrBuilder | StrBuilderTest.java:42:94:42:97 | sb18 : StrBuilder | provenance | | -| StrBuilderTest.java:42:64:42:74 | taintedList : ArrayList [] : String | StrBuilderTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| StrBuilderTest.java:42:64:42:74 | taintedList : ArrayList [] : String | StrBuilderTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | StrBuilderTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | StrBuilderTest.java:42:49:42:52 | sb18 [post update] : StrBuilder | provenance | MaD:246 | -| StrBuilderTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTest.java:42:94:42:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTest.java:42:94:42:108 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTest.java:42:94:42:108 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:44:45:44:48 | sb19 [post update] : StrBuilder | StrBuilderTest.java:44:84:44:87 | sb19 : StrBuilder | provenance | | | StrBuilderTest.java:44:45:44:76 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTest.java:44:45:44:48 | sb19 [post update] : StrBuilder | provenance | MaD:247 | | StrBuilderTest.java:44:69:44:75 | taint(...) : String | StrBuilderTest.java:44:45:44:76 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTest.java:44:84:44:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTest.java:44:84:44:98 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTest.java:44:84:44:98 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:45:45:45:48 | sb20 [post update] : StrBuilder | StrBuilderTest.java:45:84:45:87 | sb20 : StrBuilder | provenance | | | StrBuilderTest.java:45:45:45:76 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTest.java:45:45:45:48 | sb20 [post update] : StrBuilder | provenance | MaD:247 | | StrBuilderTest.java:45:60:45:66 | taint(...) : String | StrBuilderTest.java:45:45:45:76 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTest.java:45:84:45:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTest.java:45:84:45:98 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTest.java:45:84:45:98 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:46:45:46:48 | sb21 [post update] : StrBuilder | StrBuilderTest.java:46:97:46:100 | sb21 : StrBuilder | provenance | | | StrBuilderTest.java:46:74:46:80 | taint(...) : String | StrBuilderTest.java:46:45:46:48 | sb21 [post update] : StrBuilder | provenance | MaD:249 | -| StrBuilderTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTest.java:46:97:46:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTest.java:46:97:46:111 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTest.java:46:97:46:111 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:47:45:47:48 | sb22 [post update] : StrBuilder | StrBuilderTest.java:47:98:47:101 | sb22 : StrBuilder | provenance | | | StrBuilderTest.java:47:75:47:81 | taint(...) : String | StrBuilderTest.java:47:45:47:48 | sb22 [post update] : StrBuilder | provenance | MaD:251 | -| StrBuilderTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTest.java:47:98:47:112 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTest.java:47:98:47:112 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTest.java:47:98:47:112 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:48:45:48:48 | sb23 [post update] : StrBuilder | StrBuilderTest.java:48:88:48:91 | sb23 : StrBuilder | provenance | | -| StrBuilderTest.java:48:59:48:65 | taint(...) : String | StrBuilderTest.java:48:59:48:79 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:48:59:48:65 | taint(...) : String | StrBuilderTest.java:48:59:48:79 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:48:59:48:79 | toCharArray(...) : char[] | StrBuilderTest.java:48:45:48:48 | sb23 [post update] : StrBuilder | provenance | MaD:266 | -| StrBuilderTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTest.java:48:88:48:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTest.java:48:88:48:102 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTest.java:48:88:48:102 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:49:45:49:48 | sb24 [post update] : StrBuilder | StrBuilderTest.java:49:94:49:97 | sb24 : StrBuilder | provenance | | -| StrBuilderTest.java:49:59:49:65 | taint(...) : String | StrBuilderTest.java:49:59:49:79 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:49:59:49:65 | taint(...) : String | StrBuilderTest.java:49:59:49:79 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:49:59:49:79 | toCharArray(...) : char[] | StrBuilderTest.java:49:45:49:48 | sb24 [post update] : StrBuilder | provenance | MaD:267 | -| StrBuilderTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTest.java:49:94:49:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTest.java:49:94:49:108 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTest.java:49:94:49:108 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:50:45:50:48 | sb25 [post update] : StrBuilder | StrBuilderTest.java:50:82:50:85 | sb25 : StrBuilder | provenance | | | StrBuilderTest.java:50:59:50:73 | (...)... : String | StrBuilderTest.java:50:45:50:48 | sb25 [post update] : StrBuilder | provenance | MaD:268 | | StrBuilderTest.java:50:67:50:73 | taint(...) : String | StrBuilderTest.java:50:59:50:73 | (...)... : String | provenance | | -| StrBuilderTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTest.java:50:82:50:96 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTest.java:50:82:50:96 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTest.java:50:82:50:96 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:52:50:52:54 | auxsb [post update] : StrBuilder | StrBuilderTest.java:53:63:53:67 | auxsb : StrBuilder | provenance | | | StrBuilderTest.java:52:65:52:71 | taint(...) : String | StrBuilderTest.java:52:50:52:54 | auxsb [post update] : StrBuilder | provenance | MaD:269 | | StrBuilderTest.java:53:49:53:52 | sb26 [post update] : StrBuilder | StrBuilderTest.java:53:76:53:79 | sb26 : StrBuilder | provenance | | | StrBuilderTest.java:53:63:53:67 | auxsb : StrBuilder | StrBuilderTest.java:53:49:53:52 | sb26 [post update] : StrBuilder | provenance | MaD:277 | -| StrBuilderTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTest.java:53:76:53:90 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTest.java:53:76:53:90 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTest.java:53:76:53:90 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:55:45:55:48 | sb27 [post update] : StrBuilder | StrBuilderTest.java:55:92:55:95 | sb27 : StrBuilder | provenance | | | StrBuilderTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | StrBuilderTest.java:55:45:55:48 | sb27 [post update] : StrBuilder | provenance | MaD:273 | -| StrBuilderTest.java:55:76:55:82 | taint(...) : String | StrBuilderTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTest.java:55:92:55:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:55:76:55:82 | taint(...) : String | StrBuilderTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTest.java:55:92:55:106 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTest.java:55:92:55:106 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:56:45:56:48 | sb28 [post update] : StrBuilder | StrBuilderTest.java:56:98:56:101 | sb28 : StrBuilder | provenance | | | StrBuilderTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | StrBuilderTest.java:56:45:56:48 | sb28 [post update] : StrBuilder | provenance | MaD:274 | -| StrBuilderTest.java:56:76:56:82 | taint(...) : String | StrBuilderTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTest.java:56:98:56:112 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:56:76:56:82 | taint(...) : String | StrBuilderTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTest.java:56:98:56:112 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTest.java:56:98:56:112 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:57:45:57:48 | sb29 [post update] : StrBuilder | StrBuilderTest.java:57:93:57:96 | sb29 : StrBuilder | provenance | | | StrBuilderTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | StrBuilderTest.java:57:45:57:48 | sb29 [post update] : StrBuilder | provenance | MaD:275 | -| StrBuilderTest.java:57:77:57:83 | taint(...) : String | StrBuilderTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTest.java:57:93:57:107 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:57:77:57:83 | taint(...) : String | StrBuilderTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTest.java:57:93:57:107 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTest.java:57:93:57:107 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:58:45:58:48 | sb30 [post update] : StrBuilder | StrBuilderTest.java:58:99:58:102 | sb30 : StrBuilder | provenance | | | StrBuilderTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | StrBuilderTest.java:58:45:58:48 | sb30 [post update] : StrBuilder | provenance | MaD:276 | -| StrBuilderTest.java:58:77:58:83 | taint(...) : String | StrBuilderTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTest.java:58:99:58:113 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:58:77:58:83 | taint(...) : String | StrBuilderTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTest.java:58:99:58:113 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTest.java:58:99:58:113 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:59:45:59:48 | sb31 [post update] : StrBuilder | StrBuilderTest.java:59:74:59:77 | sb31 : StrBuilder | provenance | | | StrBuilderTest.java:59:59:59:65 | taint(...) : String | StrBuilderTest.java:59:45:59:48 | sb31 [post update] : StrBuilder | provenance | MaD:269 | -| StrBuilderTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTest.java:59:74:59:88 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTest.java:59:74:59:88 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTest.java:59:74:59:88 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:60:45:60:48 | sb32 [post update] : StrBuilder | StrBuilderTest.java:60:80:60:83 | sb32 : StrBuilder | provenance | | | StrBuilderTest.java:60:59:60:65 | taint(...) : String | StrBuilderTest.java:60:45:60:48 | sb32 [post update] : StrBuilder | provenance | MaD:270 | -| StrBuilderTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTest.java:60:80:60:94 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTest.java:60:80:60:94 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTest.java:60:80:60:94 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:61:45:61:48 | sb33 [post update] : StrBuilder | StrBuilderTest.java:61:92:61:95 | sb33 : StrBuilder | provenance | | | StrBuilderTest.java:61:59:61:65 | taint(...) : String | StrBuilderTest.java:61:45:61:48 | sb33 [post update] : StrBuilder | provenance | MaD:271 | -| StrBuilderTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTest.java:61:92:61:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTest.java:61:92:61:106 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTest.java:61:92:61:106 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:62:45:62:48 | sb34 [post update] : StrBuilder | StrBuilderTest.java:62:99:62:102 | sb34 : StrBuilder | provenance | | | StrBuilderTest.java:62:45:62:91 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTest.java:62:45:62:48 | sb34 [post update] : StrBuilder | provenance | MaD:272 | | StrBuilderTest.java:62:76:62:82 | taint(...) : String | StrBuilderTest.java:62:45:62:91 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTest.java:62:99:62:113 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTest.java:62:99:62:113 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTest.java:62:99:62:113 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:63:45:63:48 | sb35 [post update] : StrBuilder | StrBuilderTest.java:63:81:63:84 | sb35 : StrBuilder | provenance | | | StrBuilderTest.java:63:66:63:72 | taint(...) : String | StrBuilderTest.java:63:45:63:48 | sb35 [post update] : StrBuilder | provenance | MaD:256 | -| StrBuilderTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTest.java:63:81:63:95 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTest.java:63:81:63:95 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTest.java:63:81:63:95 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:64:45:64:48 | sb36 [post update] : StrBuilder | StrBuilderTest.java:64:84:64:87 | sb36 : StrBuilder | provenance | | | StrBuilderTest.java:64:66:64:72 | taint(...) : String | StrBuilderTest.java:64:45:64:48 | sb36 [post update] : StrBuilder | provenance | MaD:257 | -| StrBuilderTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTest.java:64:84:64:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTest.java:64:84:64:98 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTest.java:64:84:64:98 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:65:45:65:48 | sb37 [post update] : StrBuilder | StrBuilderTest.java:65:92:65:95 | sb37 : StrBuilder | provenance | | | StrBuilderTest.java:65:66:65:72 | taint(...) : String | StrBuilderTest.java:65:45:65:48 | sb37 [post update] : StrBuilder | provenance | MaD:258 | -| StrBuilderTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTest.java:65:92:65:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTest.java:65:92:65:106 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTest.java:65:92:65:106 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:66:45:66:48 | sb38 [post update] : StrBuilder | StrBuilderTest.java:66:85:66:88 | sb38 : StrBuilder | provenance | | | StrBuilderTest.java:66:70:66:76 | taint(...) : String | StrBuilderTest.java:66:45:66:48 | sb38 [post update] : StrBuilder | provenance | MaD:258 | -| StrBuilderTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTest.java:66:85:66:99 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTest.java:66:85:66:99 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTest.java:66:85:66:99 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:68:50:68:54 | auxsb [post update] : StrBuilder | StrBuilderTest.java:69:49:69:53 | auxsb : StrBuilder | provenance | | | StrBuilderTest.java:68:65:68:71 | taint(...) : String | StrBuilderTest.java:68:50:68:54 | auxsb [post update] : StrBuilder | provenance | MaD:269 | | StrBuilderTest.java:69:49:69:53 | auxsb : StrBuilder | StrBuilderTest.java:69:64:69:67 | sb39 [post update] : StrBuilder | provenance | MaD:259 | | StrBuilderTest.java:69:64:69:67 | sb39 [post update] : StrBuilder | StrBuilderTest.java:69:76:69:79 | sb39 : StrBuilder | provenance | | -| StrBuilderTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTest.java:69:76:69:90 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTest.java:69:76:69:90 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTest.java:69:76:69:90 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTest.java:74:75:74:85 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTest.java:75:75:75:85 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTest.java:73:29:73:35 | taint(...) : String | StrBuilderTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | StrBuilderTest.java:74:49:74:52 | sb40 [post update] : StrBuilder | StrBuilderTest.java:74:100:74:103 | sb40 : StrBuilder | provenance | | | StrBuilderTest.java:74:75:74:85 | taintedList : ArrayList [] : String | StrBuilderTest.java:74:49:74:52 | sb40 [post update] : StrBuilder | provenance | MaD:262 | -| StrBuilderTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTest.java:74:100:74:114 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTest.java:74:100:74:114 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTest.java:74:100:74:114 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:75:49:75:52 | sb41 [post update] : StrBuilder | StrBuilderTest.java:75:111:75:114 | sb41 : StrBuilder | provenance | | -| StrBuilderTest.java:75:75:75:85 | taintedList : ArrayList [] : String | StrBuilderTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| StrBuilderTest.java:75:75:75:85 | taintedList : ArrayList [] : String | StrBuilderTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | StrBuilderTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | StrBuilderTest.java:75:49:75:52 | sb41 [post update] : StrBuilder | provenance | MaD:263 | -| StrBuilderTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTest.java:75:111:75:125 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTest.java:75:111:75:125 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTest.java:75:111:75:125 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:77:49:77:52 | sb42 [post update] : StrBuilder | StrBuilderTest.java:77:105:77:108 | sb42 : StrBuilder | provenance | | | StrBuilderTest.java:77:90:77:96 | taint(...) : String | StrBuilderTest.java:77:49:77:52 | sb42 [post update] : StrBuilder | provenance | MaD:261 | -| StrBuilderTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTest.java:77:105:77:119 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTest.java:77:105:77:119 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTest.java:77:105:77:119 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:78:49:78:52 | sb43 [post update] : StrBuilder | StrBuilderTest.java:78:116:78:119 | sb43 : StrBuilder | provenance | | | StrBuilderTest.java:78:101:78:107 | taint(...) : String | StrBuilderTest.java:78:49:78:52 | sb43 [post update] : StrBuilder | provenance | MaD:261 | -| StrBuilderTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTest.java:78:116:78:130 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTest.java:78:116:78:130 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTest.java:78:116:78:130 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:79:37:79:60 | {...} : String[] [[]] : String | StrBuilderTest.java:81:75:81:86 | taintedArray : String[] [[]] : String | provenance | | | StrBuilderTest.java:79:52:79:58 | taint(...) : String | StrBuilderTest.java:79:37:79:60 | {...} : String[] [[]] : String | provenance | | | StrBuilderTest.java:81:49:81:52 | sb44 [post update] : StrBuilder | StrBuilderTest.java:81:101:81:104 | sb44 : StrBuilder | provenance | | | StrBuilderTest.java:81:75:81:86 | taintedArray : String[] [[]] : String | StrBuilderTest.java:81:49:81:52 | sb44 [post update] : StrBuilder | provenance | MaD:264 | -| StrBuilderTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTest.java:81:101:81:115 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTest.java:81:101:81:115 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTest.java:81:101:81:115 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:82:49:82:52 | sb45 [post update] : StrBuilder | StrBuilderTest.java:82:106:82:109 | sb45 : StrBuilder | provenance | | | StrBuilderTest.java:82:91:82:97 | taint(...) : String | StrBuilderTest.java:82:49:82:52 | sb45 [post update] : StrBuilder | provenance | MaD:261 | -| StrBuilderTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTest.java:82:106:82:120 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTest.java:82:106:82:120 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTest.java:82:106:82:120 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:85:49:85:52 | sb46 [post update] : StrBuilder | StrBuilderTest.java:87:13:87:16 | sb46 : StrBuilder | provenance | | | StrBuilderTest.java:85:61:85:67 | taint(...) : String | StrBuilderTest.java:85:49:85:52 | sb46 [post update] : StrBuilder | provenance | MaD:233 | | StrBuilderTest.java:87:13:87:16 | sb46 : StrBuilder | StrBuilderTest.java:87:13:87:27 | asReader(...) : Reader | provenance | MaD:278 | -| StrBuilderTest.java:87:13:87:27 | asReader(...) : Reader | StrBuilderTest.java:87:34:87:39 | target [post update] : char[] | provenance | MaD:2 | +| StrBuilderTest.java:87:13:87:27 | asReader(...) : Reader | StrBuilderTest.java:87:34:87:39 | target [post update] : char[] | provenance | MaD:1 | | StrBuilderTest.java:87:34:87:39 | target [post update] : char[] | StrBuilderTest.java:88:18:88:23 | target | provenance | | | StrBuilderTest.java:90:45:90:48 | sb47 [post update] : StrBuilder | StrBuilderTest.java:90:72:90:75 | sb47 : StrBuilder | provenance | | | StrBuilderTest.java:90:57:90:63 | taint(...) : String | StrBuilderTest.java:90:45:90:48 | sb47 [post update] : StrBuilder | provenance | MaD:233 | @@ -1194,23 +1194,23 @@ edges | StrBuilderTest.java:102:13:102:16 | sb51 : StrBuilder | StrBuilderTest.java:102:33:102:38 | target [post update] : char[] | provenance | MaD:288 | | StrBuilderTest.java:102:33:102:38 | target [post update] : char[] | StrBuilderTest.java:103:18:103:23 | target | provenance | | | StrBuilderTest.java:105:45:105:48 | sb52 [post update] : StrBuilder | StrBuilderTest.java:105:89:105:92 | sb52 : StrBuilder | provenance | | -| StrBuilderTest.java:105:60:105:66 | taint(...) : String | StrBuilderTest.java:105:60:105:80 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:105:60:105:66 | taint(...) : String | StrBuilderTest.java:105:60:105:80 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:105:60:105:80 | toCharArray(...) : char[] | StrBuilderTest.java:105:45:105:48 | sb52 [post update] : StrBuilder | provenance | MaD:290 | -| StrBuilderTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTest.java:105:89:105:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTest.java:105:89:105:103 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTest.java:105:89:105:103 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:106:45:106:48 | sb53 [post update] : StrBuilder | StrBuilderTest.java:106:95:106:98 | sb53 : StrBuilder | provenance | | -| StrBuilderTest.java:106:60:106:66 | taint(...) : String | StrBuilderTest.java:106:60:106:80 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTest.java:106:60:106:66 | taint(...) : String | StrBuilderTest.java:106:60:106:80 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTest.java:106:60:106:80 | toCharArray(...) : char[] | StrBuilderTest.java:106:45:106:48 | sb53 [post update] : StrBuilder | provenance | MaD:290 | -| StrBuilderTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTest.java:106:95:106:109 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTest.java:106:95:106:109 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTest.java:106:95:106:109 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:107:45:107:48 | sb54 [post update] : StrBuilder | StrBuilderTest.java:107:75:107:78 | sb54 : StrBuilder | provenance | | | StrBuilderTest.java:107:60:107:66 | taint(...) : String | StrBuilderTest.java:107:45:107:48 | sb54 [post update] : StrBuilder | provenance | MaD:290 | -| StrBuilderTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTest.java:107:75:107:89 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTest.java:107:75:107:89 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTest.java:107:75:107:89 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:108:45:108:48 | sb55 [post update] : StrBuilder | StrBuilderTest.java:108:83:108:86 | sb55 : StrBuilder | provenance | | | StrBuilderTest.java:108:60:108:74 | (...)... : String | StrBuilderTest.java:108:45:108:48 | sb55 [post update] : StrBuilder | provenance | MaD:290 | | StrBuilderTest.java:108:68:108:74 | taint(...) : String | StrBuilderTest.java:108:60:108:74 | (...)... : String | provenance | | -| StrBuilderTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTest.java:108:83:108:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTest.java:108:83:108:97 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTest.java:108:83:108:97 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:109:45:109:48 | sb56 [post update] : StrBuilder | StrBuilderTest.java:109:72:109:75 | sb56 : StrBuilder | provenance | | | StrBuilderTest.java:109:57:109:63 | taint(...) : String | StrBuilderTest.java:109:45:109:48 | sb56 [post update] : StrBuilder | provenance | MaD:233 | @@ -1219,41 +1219,41 @@ edges | StrBuilderTest.java:110:57:110:63 | taint(...) : String | StrBuilderTest.java:110:45:110:48 | sb57 [post update] : StrBuilder | provenance | MaD:233 | | StrBuilderTest.java:110:72:110:75 | sb57 : StrBuilder | StrBuilderTest.java:110:72:110:91 | midString(...) | provenance | MaD:292 | | StrBuilderTest.java:112:35:112:59 | new StringReader(...) : StringReader | StrBuilderTest.java:113:63:113:68 | reader : StringReader | provenance | | -| StrBuilderTest.java:112:52:112:58 | taint(...) : String | StrBuilderTest.java:112:35:112:59 | new StringReader(...) : StringReader | provenance | MaD:3 | +| StrBuilderTest.java:112:52:112:58 | taint(...) : String | StrBuilderTest.java:112:35:112:59 | new StringReader(...) : StringReader | provenance | MaD:2 | | StrBuilderTest.java:113:49:113:52 | sb58 [post update] : StrBuilder | StrBuilderTest.java:113:77:113:80 | sb58 : StrBuilder | provenance | | | StrBuilderTest.java:113:63:113:68 | reader : StringReader | StrBuilderTest.java:113:49:113:52 | sb58 [post update] : StrBuilder | provenance | MaD:294 | -| StrBuilderTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTest.java:113:77:113:91 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTest.java:113:77:113:91 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTest.java:113:77:113:91 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:115:45:115:48 | sb59 [post update] : StrBuilder | StrBuilderTest.java:115:79:115:82 | sb59 : StrBuilder | provenance | | | StrBuilderTest.java:115:64:115:70 | taint(...) : String | StrBuilderTest.java:115:45:115:48 | sb59 [post update] : StrBuilder | provenance | MaD:296 | -| StrBuilderTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTest.java:115:79:115:93 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTest.java:115:79:115:93 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTest.java:115:79:115:93 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:116:45:116:48 | sb60 [post update] : StrBuilder | StrBuilderTest.java:116:88:116:91 | sb60 : StrBuilder | provenance | | | StrBuilderTest.java:116:64:116:70 | taint(...) : String | StrBuilderTest.java:116:45:116:48 | sb60 [post update] : StrBuilder | provenance | MaD:297 | -| StrBuilderTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTest.java:116:88:116:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTest.java:116:88:116:102 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTest.java:116:88:116:102 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:117:45:117:48 | sb61 [post update] : StrBuilder | StrBuilderTest.java:117:94:117:97 | sb61 : StrBuilder | provenance | | | StrBuilderTest.java:117:79:117:85 | taint(...) : String | StrBuilderTest.java:117:45:117:48 | sb61 [post update] : StrBuilder | provenance | MaD:299 | -| StrBuilderTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTest.java:117:94:117:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTest.java:117:94:117:108 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTest.java:117:94:117:108 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:118:45:118:48 | sb62 [post update] : StrBuilder | StrBuilderTest.java:118:86:118:89 | sb62 : StrBuilder | provenance | | | StrBuilderTest.java:118:71:118:77 | taint(...) : String | StrBuilderTest.java:118:45:118:48 | sb62 [post update] : StrBuilder | provenance | MaD:299 | -| StrBuilderTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTest.java:118:86:118:100 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTest.java:118:86:118:100 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTest.java:118:86:118:100 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:120:45:120:48 | sb64 [post update] : StrBuilder | StrBuilderTest.java:120:96:120:99 | sb64 : StrBuilder | provenance | | | StrBuilderTest.java:120:81:120:87 | taint(...) : String | StrBuilderTest.java:120:45:120:48 | sb64 [post update] : StrBuilder | provenance | MaD:301 | -| StrBuilderTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTest.java:120:96:120:110 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTest.java:120:96:120:110 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTest.java:120:96:120:110 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:121:45:121:48 | sb65 [post update] : StrBuilder | StrBuilderTest.java:121:88:121:91 | sb65 : StrBuilder | provenance | | | StrBuilderTest.java:121:73:121:79 | taint(...) : String | StrBuilderTest.java:121:45:121:48 | sb65 [post update] : StrBuilder | provenance | MaD:301 | -| StrBuilderTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTest.java:121:88:121:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTest.java:121:88:121:102 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTest.java:121:88:121:102 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:123:45:123:48 | sb67 [post update] : StrBuilder | StrBuilderTest.java:123:72:123:75 | sb67 : StrBuilder | provenance | | | StrBuilderTest.java:123:57:123:63 | taint(...) : String | StrBuilderTest.java:123:45:123:48 | sb67 [post update] : StrBuilder | provenance | MaD:233 | | StrBuilderTest.java:123:72:123:75 | sb67 : StrBuilder | StrBuilderTest.java:123:72:123:90 | rightString(...) | provenance | MaD:303 | | StrBuilderTest.java:124:45:124:48 | sb68 [post update] : StrBuilder | StrBuilderTest.java:124:72:124:75 | sb68 : StrBuilder | provenance | | | StrBuilderTest.java:124:57:124:63 | taint(...) : String | StrBuilderTest.java:124:45:124:48 | sb68 [post update] : StrBuilder | provenance | MaD:233 | -| StrBuilderTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:5 | +| StrBuilderTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:4 | | StrBuilderTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:308 | | StrBuilderTest.java:125:45:125:48 | sb69 [post update] : StrBuilder | StrBuilderTest.java:125:72:125:75 | sb69 : StrBuilder | provenance | | | StrBuilderTest.java:125:57:125:63 | taint(...) : String | StrBuilderTest.java:125:45:125:48 | sb69 [post update] : StrBuilder | provenance | MaD:233 | @@ -1275,18 +1275,18 @@ edges | StrBuilderTest.java:130:72:130:75 | sb74 : StrBuilder | StrBuilderTest.java:130:72:130:93 | toStringBuilder(...) | provenance | MaD:313 | | StrBuilderTest.java:135:14:135:58 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | provenance | MaD:227 | | StrBuilderTest.java:135:14:135:58 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | provenance | ValuePreservingMethod | -| StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:93 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:93 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:93 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:135:51:135:57 | taint(...) : String | StrBuilderTest.java:135:14:135:58 | append(...) : StrBuilder | provenance | MaD:233+MaD:227 | | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | MaD:227 | | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | ValuePreservingMethod | | StrBuilderTest.java:138:54:138:60 | taint(...) : String | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | provenance | MaD:233 | -| StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTest.java:139:14:139:42 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTest.java:139:14:139:42 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTest.java:139:14:139:42 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | MaD:227 | | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | ValuePreservingMethod | | StrBuilderTest.java:143:55:143:61 | taint(...) : String | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | provenance | MaD:233 | -| StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTest.java:144:14:144:43 | toString(...) | provenance | MaD:6 | +| StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTest.java:144:14:144:43 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTest.java:144:14:144:43 | toString(...) | provenance | MaD:311 | | StrBuilderTest.java:147:43:147:65 | new StrBuilder(...) : StrBuilder | StrBuilderTest.java:148:14:148:33 | fluentAllMethodsTest : StrBuilder | provenance | | | StrBuilderTest.java:147:43:147:65 | new StrBuilder(...) : StrBuilder | StrBuilderTest.java:148:14:149:23 | append(...) : StrBuilder | provenance | ValuePreservingMethod | @@ -1672,234 +1672,234 @@ edges | StrBuilderTest.java:205:17:205:23 | taint(...) : String | StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | provenance | MaD:233 | | StrBuilderTextTest.java:17:28:17:50 | new StrBuilder(...) : StrBuilder | StrBuilderTextTest.java:17:58:17:62 | cons1 : StrBuilder | provenance | | | StrBuilderTextTest.java:17:43:17:49 | taint(...) : String | StrBuilderTextTest.java:17:28:17:50 | new StrBuilder(...) : StrBuilder | provenance | MaD:418 | -| StrBuilderTextTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTextTest.java:17:58:17:73 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTextTest.java:17:58:17:73 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:17:58:17:62 | cons1 : StrBuilder | StrBuilderTextTest.java:17:58:17:73 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:19:44:19:46 | sb1 [post update] : StrBuilder | StrBuilderTextTest.java:19:84:19:86 | sb1 : StrBuilder | provenance | | -| StrBuilderTextTest.java:19:55:19:61 | taint(...) : String | StrBuilderTextTest.java:19:55:19:75 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:19:55:19:61 | taint(...) : String | StrBuilderTextTest.java:19:55:19:75 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:19:55:19:75 | toCharArray(...) : char[] | StrBuilderTextTest.java:19:44:19:46 | sb1 [post update] : StrBuilder | provenance | MaD:420 | -| StrBuilderTextTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTextTest.java:19:84:19:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTextTest.java:19:84:19:97 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:19:84:19:86 | sb1 : StrBuilder | StrBuilderTextTest.java:19:84:19:97 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:20:44:20:46 | sb2 [post update] : StrBuilder | StrBuilderTextTest.java:20:90:20:92 | sb2 : StrBuilder | provenance | | -| StrBuilderTextTest.java:20:55:20:61 | taint(...) : String | StrBuilderTextTest.java:20:55:20:75 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:20:55:20:61 | taint(...) : String | StrBuilderTextTest.java:20:55:20:75 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:20:55:20:75 | toCharArray(...) : char[] | StrBuilderTextTest.java:20:44:20:46 | sb2 [post update] : StrBuilder | provenance | MaD:421 | -| StrBuilderTextTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTextTest.java:20:90:20:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTextTest.java:20:90:20:103 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:20:90:20:92 | sb2 : StrBuilder | StrBuilderTextTest.java:20:90:20:103 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:21:44:21:46 | sb3 [post update] : StrBuilder | StrBuilderTextTest.java:21:101:21:103 | sb3 : StrBuilder | provenance | | | StrBuilderTextTest.java:21:55:21:92 | wrap(...) : CharBuffer | StrBuilderTextTest.java:21:44:21:46 | sb3 [post update] : StrBuilder | provenance | MaD:433 | -| StrBuilderTextTest.java:21:71:21:77 | taint(...) : String | StrBuilderTextTest.java:21:71:21:91 | toCharArray(...) : char[] | provenance | MaD:8 | -| StrBuilderTextTest.java:21:71:21:91 | toCharArray(...) : char[] | StrBuilderTextTest.java:21:55:21:92 | wrap(...) : CharBuffer | provenance | MaD:1 | -| StrBuilderTextTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTextTest.java:21:101:21:114 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:21:71:21:77 | taint(...) : String | StrBuilderTextTest.java:21:71:21:91 | toCharArray(...) : char[] | provenance | MaD:7 | +| StrBuilderTextTest.java:21:71:21:91 | toCharArray(...) : char[] | StrBuilderTextTest.java:21:55:21:92 | wrap(...) : CharBuffer | provenance | MaD:10 | +| StrBuilderTextTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTextTest.java:21:101:21:114 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:21:101:21:103 | sb3 : StrBuilder | StrBuilderTextTest.java:21:101:21:114 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:22:44:22:46 | sb4 [post update] : StrBuilder | StrBuilderTextTest.java:22:107:22:109 | sb4 : StrBuilder | provenance | | | StrBuilderTextTest.java:22:55:22:92 | wrap(...) : CharBuffer | StrBuilderTextTest.java:22:44:22:46 | sb4 [post update] : StrBuilder | provenance | MaD:434 | -| StrBuilderTextTest.java:22:71:22:77 | taint(...) : String | StrBuilderTextTest.java:22:71:22:91 | toCharArray(...) : char[] | provenance | MaD:8 | -| StrBuilderTextTest.java:22:71:22:91 | toCharArray(...) : char[] | StrBuilderTextTest.java:22:55:22:92 | wrap(...) : CharBuffer | provenance | MaD:1 | -| StrBuilderTextTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTextTest.java:22:107:22:120 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:22:71:22:77 | taint(...) : String | StrBuilderTextTest.java:22:71:22:91 | toCharArray(...) : char[] | provenance | MaD:7 | +| StrBuilderTextTest.java:22:71:22:91 | toCharArray(...) : char[] | StrBuilderTextTest.java:22:55:22:92 | wrap(...) : CharBuffer | provenance | MaD:10 | +| StrBuilderTextTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTextTest.java:22:107:22:120 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:22:107:22:109 | sb4 : StrBuilder | StrBuilderTextTest.java:22:107:22:120 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | StrBuilderTextTest.java:23:84:23:86 | sb5 : StrBuilder | provenance | | -| StrBuilderTextTest.java:23:55:23:75 | (...)... : String | StrBuilderTextTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:4 | +| StrBuilderTextTest.java:23:55:23:75 | (...)... : String | StrBuilderTextTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:3 | | StrBuilderTextTest.java:23:55:23:75 | (...)... : String | StrBuilderTextTest.java:23:44:23:46 | sb5 [post update] : StrBuilder | provenance | MaD:422 | | StrBuilderTextTest.java:23:69:23:75 | taint(...) : String | StrBuilderTextTest.java:23:55:23:75 | (...)... : String | provenance | | -| StrBuilderTextTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTextTest.java:23:84:23:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTextTest.java:23:84:23:97 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:23:84:23:86 | sb5 : StrBuilder | StrBuilderTextTest.java:23:84:23:97 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | StrBuilderTextTest.java:24:90:24:92 | sb6 : StrBuilder | provenance | | -| StrBuilderTextTest.java:24:55:24:75 | (...)... : String | StrBuilderTextTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:4 | +| StrBuilderTextTest.java:24:55:24:75 | (...)... : String | StrBuilderTextTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:3 | | StrBuilderTextTest.java:24:55:24:75 | (...)... : String | StrBuilderTextTest.java:24:44:24:46 | sb6 [post update] : StrBuilder | provenance | MaD:423 | | StrBuilderTextTest.java:24:69:24:75 | taint(...) : String | StrBuilderTextTest.java:24:55:24:75 | (...)... : String | provenance | | -| StrBuilderTextTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTextTest.java:24:90:24:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTextTest.java:24:90:24:103 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:24:90:24:92 | sb6 : StrBuilder | StrBuilderTextTest.java:24:90:24:103 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:25:44:25:46 | sb7 [post update] : StrBuilder | StrBuilderTextTest.java:25:78:25:80 | sb7 : StrBuilder | provenance | | | StrBuilderTextTest.java:25:55:25:69 | (...)... : String | StrBuilderTextTest.java:25:44:25:46 | sb7 [post update] : StrBuilder | provenance | MaD:424 | | StrBuilderTextTest.java:25:63:25:69 | taint(...) : String | StrBuilderTextTest.java:25:55:25:69 | (...)... : String | provenance | | -| StrBuilderTextTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTextTest.java:25:78:25:91 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTextTest.java:25:78:25:91 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:25:78:25:80 | sb7 : StrBuilder | StrBuilderTextTest.java:25:78:25:91 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:27:50:27:54 | auxsb [post update] : StrBuilder | StrBuilderTextTest.java:28:59:28:63 | auxsb : StrBuilder | provenance | | | StrBuilderTextTest.java:27:63:27:69 | taint(...) : String | StrBuilderTextTest.java:27:50:27:54 | auxsb [post update] : StrBuilder | provenance | MaD:425 | | StrBuilderTextTest.java:28:48:28:50 | sb8 [post update] : StrBuilder | StrBuilderTextTest.java:28:72:28:74 | sb8 : StrBuilder | provenance | | | StrBuilderTextTest.java:28:59:28:63 | auxsb : StrBuilder | StrBuilderTextTest.java:28:48:28:50 | sb8 [post update] : StrBuilder | provenance | MaD:435 | -| StrBuilderTextTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTextTest.java:28:72:28:85 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTextTest.java:28:72:28:85 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:28:72:28:74 | sb8 : StrBuilder | StrBuilderTextTest.java:28:72:28:85 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:30:44:30:46 | sb9 [post update] : StrBuilder | StrBuilderTextTest.java:30:88:30:90 | sb9 : StrBuilder | provenance | | | StrBuilderTextTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | StrBuilderTextTest.java:30:44:30:46 | sb9 [post update] : StrBuilder | provenance | MaD:429 | -| StrBuilderTextTest.java:30:72:30:78 | taint(...) : String | StrBuilderTextTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTextTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTextTest.java:30:88:30:101 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:30:72:30:78 | taint(...) : String | StrBuilderTextTest.java:30:55:30:79 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTextTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTextTest.java:30:88:30:101 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:30:88:30:90 | sb9 : StrBuilder | StrBuilderTextTest.java:30:88:30:101 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:31:45:31:48 | sb10 [post update] : StrBuilder | StrBuilderTextTest.java:31:96:31:99 | sb10 : StrBuilder | provenance | | | StrBuilderTextTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | StrBuilderTextTest.java:31:45:31:48 | sb10 [post update] : StrBuilder | provenance | MaD:430 | -| StrBuilderTextTest.java:31:74:31:80 | taint(...) : String | StrBuilderTextTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTextTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTextTest.java:31:96:31:110 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:31:74:31:80 | taint(...) : String | StrBuilderTextTest.java:31:57:31:81 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTextTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTextTest.java:31:96:31:110 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:31:96:31:99 | sb10 : StrBuilder | StrBuilderTextTest.java:31:96:31:110 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:32:45:32:48 | sb11 [post update] : StrBuilder | StrBuilderTextTest.java:32:91:32:94 | sb11 : StrBuilder | provenance | | | StrBuilderTextTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | StrBuilderTextTest.java:32:45:32:48 | sb11 [post update] : StrBuilder | provenance | MaD:431 | -| StrBuilderTextTest.java:32:75:32:81 | taint(...) : String | StrBuilderTextTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTextTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTextTest.java:32:91:32:105 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:32:75:32:81 | taint(...) : String | StrBuilderTextTest.java:32:57:32:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTextTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTextTest.java:32:91:32:105 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:32:91:32:94 | sb11 : StrBuilder | StrBuilderTextTest.java:32:91:32:105 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:33:45:33:48 | sb12 [post update] : StrBuilder | StrBuilderTextTest.java:33:97:33:100 | sb12 : StrBuilder | provenance | | | StrBuilderTextTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | StrBuilderTextTest.java:33:45:33:48 | sb12 [post update] : StrBuilder | provenance | MaD:432 | -| StrBuilderTextTest.java:33:75:33:81 | taint(...) : String | StrBuilderTextTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTextTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTextTest.java:33:97:33:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:33:75:33:81 | taint(...) : String | StrBuilderTextTest.java:33:57:33:82 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTextTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTextTest.java:33:97:33:111 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:33:97:33:100 | sb12 : StrBuilder | StrBuilderTextTest.java:33:97:33:111 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:34:45:34:48 | sb13 [post update] : StrBuilder | StrBuilderTextTest.java:34:72:34:75 | sb13 : StrBuilder | provenance | | | StrBuilderTextTest.java:34:57:34:63 | taint(...) : String | StrBuilderTextTest.java:34:45:34:48 | sb13 [post update] : StrBuilder | provenance | MaD:425 | -| StrBuilderTextTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTextTest.java:34:72:34:86 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTextTest.java:34:72:34:86 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:34:72:34:75 | sb13 : StrBuilder | StrBuilderTextTest.java:34:72:34:86 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:35:45:35:48 | sb14 [post update] : StrBuilder | StrBuilderTextTest.java:35:78:35:81 | sb14 : StrBuilder | provenance | | | StrBuilderTextTest.java:35:57:35:63 | taint(...) : String | StrBuilderTextTest.java:35:45:35:48 | sb14 [post update] : StrBuilder | provenance | MaD:426 | -| StrBuilderTextTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTextTest.java:35:78:35:92 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTextTest.java:35:78:35:92 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:35:78:35:81 | sb14 : StrBuilder | StrBuilderTextTest.java:35:78:35:92 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:36:45:36:48 | sb15 [post update] : StrBuilder | StrBuilderTextTest.java:36:90:36:93 | sb15 : StrBuilder | provenance | | | StrBuilderTextTest.java:36:57:36:63 | taint(...) : String | StrBuilderTextTest.java:36:45:36:48 | sb15 [post update] : StrBuilder | provenance | MaD:427 | -| StrBuilderTextTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTextTest.java:36:90:36:104 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTextTest.java:36:90:36:104 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:36:90:36:93 | sb15 : StrBuilder | StrBuilderTextTest.java:36:90:36:104 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:37:45:37:48 | sb16 [post update] : StrBuilder | StrBuilderTextTest.java:37:97:37:100 | sb16 : StrBuilder | provenance | | | StrBuilderTextTest.java:37:45:37:89 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTextTest.java:37:45:37:48 | sb16 [post update] : StrBuilder | provenance | MaD:428 | | StrBuilderTextTest.java:37:74:37:80 | taint(...) : String | StrBuilderTextTest.java:37:45:37:89 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTextTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTextTest.java:37:97:37:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTextTest.java:37:97:37:111 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:37:97:37:100 | sb16 : StrBuilder | StrBuilderTextTest.java:37:97:37:111 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTextTest.java:41:64:41:74 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTextTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTextTest.java:42:64:42:74 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTextTest.java:40:29:40:35 | taint(...) : String | StrBuilderTextTest.java:40:13:40:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | StrBuilderTextTest.java:41:49:41:52 | sb17 [post update] : StrBuilder | StrBuilderTextTest.java:41:83:41:86 | sb17 : StrBuilder | provenance | | | StrBuilderTextTest.java:41:64:41:74 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:41:49:41:52 | sb17 [post update] : StrBuilder | provenance | MaD:437 | -| StrBuilderTextTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTextTest.java:41:83:41:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTextTest.java:41:83:41:97 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:41:83:41:86 | sb17 : StrBuilder | StrBuilderTextTest.java:41:83:41:97 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:42:49:42:52 | sb18 [post update] : StrBuilder | StrBuilderTextTest.java:42:94:42:97 | sb18 : StrBuilder | provenance | | -| StrBuilderTextTest.java:42:64:42:74 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| StrBuilderTextTest.java:42:64:42:74 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | StrBuilderTextTest.java:42:64:42:85 | iterator(...) : Iterator [] : String | StrBuilderTextTest.java:42:49:42:52 | sb18 [post update] : StrBuilder | provenance | MaD:438 | -| StrBuilderTextTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTextTest.java:42:94:42:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTextTest.java:42:94:42:108 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:42:94:42:97 | sb18 : StrBuilder | StrBuilderTextTest.java:42:94:42:108 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:44:45:44:48 | sb19 [post update] : StrBuilder | StrBuilderTextTest.java:44:84:44:87 | sb19 : StrBuilder | provenance | | | StrBuilderTextTest.java:44:45:44:76 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTextTest.java:44:45:44:48 | sb19 [post update] : StrBuilder | provenance | MaD:439 | | StrBuilderTextTest.java:44:69:44:75 | taint(...) : String | StrBuilderTextTest.java:44:45:44:76 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTextTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTextTest.java:44:84:44:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTextTest.java:44:84:44:98 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:44:84:44:87 | sb19 : StrBuilder | StrBuilderTextTest.java:44:84:44:98 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:45:45:45:48 | sb20 [post update] : StrBuilder | StrBuilderTextTest.java:45:84:45:87 | sb20 : StrBuilder | provenance | | | StrBuilderTextTest.java:45:45:45:76 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTextTest.java:45:45:45:48 | sb20 [post update] : StrBuilder | provenance | MaD:439 | | StrBuilderTextTest.java:45:60:45:66 | taint(...) : String | StrBuilderTextTest.java:45:45:45:76 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTextTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTextTest.java:45:84:45:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTextTest.java:45:84:45:98 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:45:84:45:87 | sb20 : StrBuilder | StrBuilderTextTest.java:45:84:45:98 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:46:45:46:48 | sb21 [post update] : StrBuilder | StrBuilderTextTest.java:46:97:46:100 | sb21 : StrBuilder | provenance | | | StrBuilderTextTest.java:46:74:46:80 | taint(...) : String | StrBuilderTextTest.java:46:45:46:48 | sb21 [post update] : StrBuilder | provenance | MaD:441 | -| StrBuilderTextTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTextTest.java:46:97:46:111 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTextTest.java:46:97:46:111 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:46:97:46:100 | sb21 : StrBuilder | StrBuilderTextTest.java:46:97:46:111 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:47:45:47:48 | sb22 [post update] : StrBuilder | StrBuilderTextTest.java:47:98:47:101 | sb22 : StrBuilder | provenance | | | StrBuilderTextTest.java:47:75:47:81 | taint(...) : String | StrBuilderTextTest.java:47:45:47:48 | sb22 [post update] : StrBuilder | provenance | MaD:443 | -| StrBuilderTextTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTextTest.java:47:98:47:112 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTextTest.java:47:98:47:112 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:47:98:47:101 | sb22 : StrBuilder | StrBuilderTextTest.java:47:98:47:112 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:48:45:48:48 | sb23 [post update] : StrBuilder | StrBuilderTextTest.java:48:88:48:91 | sb23 : StrBuilder | provenance | | -| StrBuilderTextTest.java:48:59:48:65 | taint(...) : String | StrBuilderTextTest.java:48:59:48:79 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:48:59:48:65 | taint(...) : String | StrBuilderTextTest.java:48:59:48:79 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:48:59:48:79 | toCharArray(...) : char[] | StrBuilderTextTest.java:48:45:48:48 | sb23 [post update] : StrBuilder | provenance | MaD:458 | -| StrBuilderTextTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTextTest.java:48:88:48:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTextTest.java:48:88:48:102 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:48:88:48:91 | sb23 : StrBuilder | StrBuilderTextTest.java:48:88:48:102 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:49:45:49:48 | sb24 [post update] : StrBuilder | StrBuilderTextTest.java:49:94:49:97 | sb24 : StrBuilder | provenance | | -| StrBuilderTextTest.java:49:59:49:65 | taint(...) : String | StrBuilderTextTest.java:49:59:49:79 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:49:59:49:65 | taint(...) : String | StrBuilderTextTest.java:49:59:49:79 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:49:59:49:79 | toCharArray(...) : char[] | StrBuilderTextTest.java:49:45:49:48 | sb24 [post update] : StrBuilder | provenance | MaD:459 | -| StrBuilderTextTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTextTest.java:49:94:49:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTextTest.java:49:94:49:108 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:49:94:49:97 | sb24 : StrBuilder | StrBuilderTextTest.java:49:94:49:108 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:50:45:50:48 | sb25 [post update] : StrBuilder | StrBuilderTextTest.java:50:82:50:85 | sb25 : StrBuilder | provenance | | | StrBuilderTextTest.java:50:59:50:73 | (...)... : String | StrBuilderTextTest.java:50:45:50:48 | sb25 [post update] : StrBuilder | provenance | MaD:460 | | StrBuilderTextTest.java:50:67:50:73 | taint(...) : String | StrBuilderTextTest.java:50:59:50:73 | (...)... : String | provenance | | -| StrBuilderTextTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTextTest.java:50:82:50:96 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTextTest.java:50:82:50:96 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:50:82:50:85 | sb25 : StrBuilder | StrBuilderTextTest.java:50:82:50:96 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:52:50:52:54 | auxsb [post update] : StrBuilder | StrBuilderTextTest.java:53:63:53:67 | auxsb : StrBuilder | provenance | | | StrBuilderTextTest.java:52:65:52:71 | taint(...) : String | StrBuilderTextTest.java:52:50:52:54 | auxsb [post update] : StrBuilder | provenance | MaD:461 | | StrBuilderTextTest.java:53:49:53:52 | sb26 [post update] : StrBuilder | StrBuilderTextTest.java:53:76:53:79 | sb26 : StrBuilder | provenance | | | StrBuilderTextTest.java:53:63:53:67 | auxsb : StrBuilder | StrBuilderTextTest.java:53:49:53:52 | sb26 [post update] : StrBuilder | provenance | MaD:469 | -| StrBuilderTextTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTextTest.java:53:76:53:90 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTextTest.java:53:76:53:90 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:53:76:53:79 | sb26 : StrBuilder | StrBuilderTextTest.java:53:76:53:90 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:55:45:55:48 | sb27 [post update] : StrBuilder | StrBuilderTextTest.java:55:92:55:95 | sb27 : StrBuilder | provenance | | | StrBuilderTextTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | StrBuilderTextTest.java:55:45:55:48 | sb27 [post update] : StrBuilder | provenance | MaD:465 | -| StrBuilderTextTest.java:55:76:55:82 | taint(...) : String | StrBuilderTextTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTextTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTextTest.java:55:92:55:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:55:76:55:82 | taint(...) : String | StrBuilderTextTest.java:55:59:55:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTextTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTextTest.java:55:92:55:106 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:55:92:55:95 | sb27 : StrBuilder | StrBuilderTextTest.java:55:92:55:106 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:56:45:56:48 | sb28 [post update] : StrBuilder | StrBuilderTextTest.java:56:98:56:101 | sb28 : StrBuilder | provenance | | | StrBuilderTextTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | StrBuilderTextTest.java:56:45:56:48 | sb28 [post update] : StrBuilder | provenance | MaD:466 | -| StrBuilderTextTest.java:56:76:56:82 | taint(...) : String | StrBuilderTextTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| StrBuilderTextTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTextTest.java:56:98:56:112 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:56:76:56:82 | taint(...) : String | StrBuilderTextTest.java:56:59:56:83 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| StrBuilderTextTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTextTest.java:56:98:56:112 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:56:98:56:101 | sb28 : StrBuilder | StrBuilderTextTest.java:56:98:56:112 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:57:45:57:48 | sb29 [post update] : StrBuilder | StrBuilderTextTest.java:57:93:57:96 | sb29 : StrBuilder | provenance | | | StrBuilderTextTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | StrBuilderTextTest.java:57:45:57:48 | sb29 [post update] : StrBuilder | provenance | MaD:467 | -| StrBuilderTextTest.java:57:77:57:83 | taint(...) : String | StrBuilderTextTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTextTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTextTest.java:57:93:57:107 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:57:77:57:83 | taint(...) : String | StrBuilderTextTest.java:57:59:57:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTextTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTextTest.java:57:93:57:107 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:57:93:57:96 | sb29 : StrBuilder | StrBuilderTextTest.java:57:93:57:107 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:58:45:58:48 | sb30 [post update] : StrBuilder | StrBuilderTextTest.java:58:99:58:102 | sb30 : StrBuilder | provenance | | | StrBuilderTextTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | StrBuilderTextTest.java:58:45:58:48 | sb30 [post update] : StrBuilder | provenance | MaD:468 | -| StrBuilderTextTest.java:58:77:58:83 | taint(...) : String | StrBuilderTextTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| StrBuilderTextTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTextTest.java:58:99:58:113 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:58:77:58:83 | taint(...) : String | StrBuilderTextTest.java:58:59:58:84 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| StrBuilderTextTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTextTest.java:58:99:58:113 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:58:99:58:102 | sb30 : StrBuilder | StrBuilderTextTest.java:58:99:58:113 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:59:45:59:48 | sb31 [post update] : StrBuilder | StrBuilderTextTest.java:59:74:59:77 | sb31 : StrBuilder | provenance | | | StrBuilderTextTest.java:59:59:59:65 | taint(...) : String | StrBuilderTextTest.java:59:45:59:48 | sb31 [post update] : StrBuilder | provenance | MaD:461 | -| StrBuilderTextTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTextTest.java:59:74:59:88 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTextTest.java:59:74:59:88 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:59:74:59:77 | sb31 : StrBuilder | StrBuilderTextTest.java:59:74:59:88 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:60:45:60:48 | sb32 [post update] : StrBuilder | StrBuilderTextTest.java:60:80:60:83 | sb32 : StrBuilder | provenance | | | StrBuilderTextTest.java:60:59:60:65 | taint(...) : String | StrBuilderTextTest.java:60:45:60:48 | sb32 [post update] : StrBuilder | provenance | MaD:462 | -| StrBuilderTextTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTextTest.java:60:80:60:94 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTextTest.java:60:80:60:94 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:60:80:60:83 | sb32 : StrBuilder | StrBuilderTextTest.java:60:80:60:94 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:61:45:61:48 | sb33 [post update] : StrBuilder | StrBuilderTextTest.java:61:92:61:95 | sb33 : StrBuilder | provenance | | | StrBuilderTextTest.java:61:59:61:65 | taint(...) : String | StrBuilderTextTest.java:61:45:61:48 | sb33 [post update] : StrBuilder | provenance | MaD:463 | -| StrBuilderTextTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTextTest.java:61:92:61:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTextTest.java:61:92:61:106 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:61:92:61:95 | sb33 : StrBuilder | StrBuilderTextTest.java:61:92:61:106 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:62:45:62:48 | sb34 [post update] : StrBuilder | StrBuilderTextTest.java:62:99:62:102 | sb34 : StrBuilder | provenance | | | StrBuilderTextTest.java:62:45:62:91 | new ..[] { .. } : Object[] [[]] : String | StrBuilderTextTest.java:62:45:62:48 | sb34 [post update] : StrBuilder | provenance | MaD:464 | | StrBuilderTextTest.java:62:76:62:82 | taint(...) : String | StrBuilderTextTest.java:62:45:62:91 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| StrBuilderTextTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTextTest.java:62:99:62:113 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTextTest.java:62:99:62:113 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:62:99:62:102 | sb34 : StrBuilder | StrBuilderTextTest.java:62:99:62:113 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:63:45:63:48 | sb35 [post update] : StrBuilder | StrBuilderTextTest.java:63:81:63:84 | sb35 : StrBuilder | provenance | | | StrBuilderTextTest.java:63:66:63:72 | taint(...) : String | StrBuilderTextTest.java:63:45:63:48 | sb35 [post update] : StrBuilder | provenance | MaD:448 | -| StrBuilderTextTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTextTest.java:63:81:63:95 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTextTest.java:63:81:63:95 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:63:81:63:84 | sb35 : StrBuilder | StrBuilderTextTest.java:63:81:63:95 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:64:45:64:48 | sb36 [post update] : StrBuilder | StrBuilderTextTest.java:64:84:64:87 | sb36 : StrBuilder | provenance | | | StrBuilderTextTest.java:64:66:64:72 | taint(...) : String | StrBuilderTextTest.java:64:45:64:48 | sb36 [post update] : StrBuilder | provenance | MaD:449 | -| StrBuilderTextTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTextTest.java:64:84:64:98 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTextTest.java:64:84:64:98 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:64:84:64:87 | sb36 : StrBuilder | StrBuilderTextTest.java:64:84:64:98 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:65:45:65:48 | sb37 [post update] : StrBuilder | StrBuilderTextTest.java:65:92:65:95 | sb37 : StrBuilder | provenance | | | StrBuilderTextTest.java:65:66:65:72 | taint(...) : String | StrBuilderTextTest.java:65:45:65:48 | sb37 [post update] : StrBuilder | provenance | MaD:450 | -| StrBuilderTextTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTextTest.java:65:92:65:106 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTextTest.java:65:92:65:106 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:65:92:65:95 | sb37 : StrBuilder | StrBuilderTextTest.java:65:92:65:106 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:66:45:66:48 | sb38 [post update] : StrBuilder | StrBuilderTextTest.java:66:85:66:88 | sb38 : StrBuilder | provenance | | | StrBuilderTextTest.java:66:70:66:76 | taint(...) : String | StrBuilderTextTest.java:66:45:66:48 | sb38 [post update] : StrBuilder | provenance | MaD:450 | -| StrBuilderTextTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTextTest.java:66:85:66:99 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTextTest.java:66:85:66:99 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:66:85:66:88 | sb38 : StrBuilder | StrBuilderTextTest.java:66:85:66:99 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:68:50:68:54 | auxsb [post update] : StrBuilder | StrBuilderTextTest.java:69:49:69:53 | auxsb : StrBuilder | provenance | | | StrBuilderTextTest.java:68:65:68:71 | taint(...) : String | StrBuilderTextTest.java:68:50:68:54 | auxsb [post update] : StrBuilder | provenance | MaD:461 | | StrBuilderTextTest.java:69:49:69:53 | auxsb : StrBuilder | StrBuilderTextTest.java:69:64:69:67 | sb39 [post update] : StrBuilder | provenance | MaD:451 | | StrBuilderTextTest.java:69:64:69:67 | sb39 [post update] : StrBuilder | StrBuilderTextTest.java:69:76:69:79 | sb39 : StrBuilder | provenance | | -| StrBuilderTextTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTextTest.java:69:76:69:90 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTextTest.java:69:76:69:90 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:69:76:69:79 | sb39 : StrBuilder | StrBuilderTextTest.java:69:76:69:90 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTextTest.java:74:75:74:85 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTextTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | StrBuilderTextTest.java:75:75:75:85 | taintedList : ArrayList [] : String | provenance | | | StrBuilderTextTest.java:73:29:73:35 | taint(...) : String | StrBuilderTextTest.java:73:13:73:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | StrBuilderTextTest.java:74:49:74:52 | sb40 [post update] : StrBuilder | StrBuilderTextTest.java:74:100:74:103 | sb40 : StrBuilder | provenance | | | StrBuilderTextTest.java:74:75:74:85 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:74:49:74:52 | sb40 [post update] : StrBuilder | provenance | MaD:454 | -| StrBuilderTextTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTextTest.java:74:100:74:114 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTextTest.java:74:100:74:114 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:74:100:74:103 | sb40 : StrBuilder | StrBuilderTextTest.java:74:100:74:114 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:75:49:75:52 | sb41 [post update] : StrBuilder | StrBuilderTextTest.java:75:111:75:114 | sb41 : StrBuilder | provenance | | -| StrBuilderTextTest.java:75:75:75:85 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| StrBuilderTextTest.java:75:75:75:85 | taintedList : ArrayList [] : String | StrBuilderTextTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | StrBuilderTextTest.java:75:75:75:96 | iterator(...) : Iterator [] : String | StrBuilderTextTest.java:75:49:75:52 | sb41 [post update] : StrBuilder | provenance | MaD:455 | -| StrBuilderTextTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTextTest.java:75:111:75:125 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTextTest.java:75:111:75:125 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:75:111:75:114 | sb41 : StrBuilder | StrBuilderTextTest.java:75:111:75:125 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:77:49:77:52 | sb42 [post update] : StrBuilder | StrBuilderTextTest.java:77:105:77:108 | sb42 : StrBuilder | provenance | | | StrBuilderTextTest.java:77:90:77:96 | taint(...) : String | StrBuilderTextTest.java:77:49:77:52 | sb42 [post update] : StrBuilder | provenance | MaD:453 | -| StrBuilderTextTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTextTest.java:77:105:77:119 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTextTest.java:77:105:77:119 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:77:105:77:108 | sb42 : StrBuilder | StrBuilderTextTest.java:77:105:77:119 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:78:49:78:52 | sb43 [post update] : StrBuilder | StrBuilderTextTest.java:78:116:78:119 | sb43 : StrBuilder | provenance | | | StrBuilderTextTest.java:78:101:78:107 | taint(...) : String | StrBuilderTextTest.java:78:49:78:52 | sb43 [post update] : StrBuilder | provenance | MaD:453 | -| StrBuilderTextTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTextTest.java:78:116:78:130 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTextTest.java:78:116:78:130 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:78:116:78:119 | sb43 : StrBuilder | StrBuilderTextTest.java:78:116:78:130 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:79:37:79:60 | {...} : String[] [[]] : String | StrBuilderTextTest.java:81:75:81:86 | taintedArray : String[] [[]] : String | provenance | | | StrBuilderTextTest.java:79:52:79:58 | taint(...) : String | StrBuilderTextTest.java:79:37:79:60 | {...} : String[] [[]] : String | provenance | | | StrBuilderTextTest.java:81:49:81:52 | sb44 [post update] : StrBuilder | StrBuilderTextTest.java:81:101:81:104 | sb44 : StrBuilder | provenance | | | StrBuilderTextTest.java:81:75:81:86 | taintedArray : String[] [[]] : String | StrBuilderTextTest.java:81:49:81:52 | sb44 [post update] : StrBuilder | provenance | MaD:456 | -| StrBuilderTextTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTextTest.java:81:101:81:115 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTextTest.java:81:101:81:115 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:81:101:81:104 | sb44 : StrBuilder | StrBuilderTextTest.java:81:101:81:115 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:82:49:82:52 | sb45 [post update] : StrBuilder | StrBuilderTextTest.java:82:106:82:109 | sb45 : StrBuilder | provenance | | | StrBuilderTextTest.java:82:91:82:97 | taint(...) : String | StrBuilderTextTest.java:82:49:82:52 | sb45 [post update] : StrBuilder | provenance | MaD:453 | -| StrBuilderTextTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTextTest.java:82:106:82:120 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTextTest.java:82:106:82:120 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:82:106:82:109 | sb45 : StrBuilder | StrBuilderTextTest.java:82:106:82:120 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:85:49:85:52 | sb46 [post update] : StrBuilder | StrBuilderTextTest.java:87:13:87:16 | sb46 : StrBuilder | provenance | | | StrBuilderTextTest.java:85:61:85:67 | taint(...) : String | StrBuilderTextTest.java:85:49:85:52 | sb46 [post update] : StrBuilder | provenance | MaD:425 | | StrBuilderTextTest.java:87:13:87:16 | sb46 : StrBuilder | StrBuilderTextTest.java:87:13:87:27 | asReader(...) : Reader | provenance | MaD:470 | -| StrBuilderTextTest.java:87:13:87:27 | asReader(...) : Reader | StrBuilderTextTest.java:87:34:87:39 | target [post update] : char[] | provenance | MaD:2 | +| StrBuilderTextTest.java:87:13:87:27 | asReader(...) : Reader | StrBuilderTextTest.java:87:34:87:39 | target [post update] : char[] | provenance | MaD:1 | | StrBuilderTextTest.java:87:34:87:39 | target [post update] : char[] | StrBuilderTextTest.java:88:18:88:23 | target | provenance | | | StrBuilderTextTest.java:90:45:90:48 | sb47 [post update] : StrBuilder | StrBuilderTextTest.java:90:72:90:75 | sb47 : StrBuilder | provenance | | | StrBuilderTextTest.java:90:57:90:63 | taint(...) : String | StrBuilderTextTest.java:90:45:90:48 | sb47 [post update] : StrBuilder | provenance | MaD:425 | @@ -1921,23 +1921,23 @@ edges | StrBuilderTextTest.java:102:13:102:16 | sb51 : StrBuilder | StrBuilderTextTest.java:102:33:102:38 | target [post update] : char[] | provenance | MaD:480 | | StrBuilderTextTest.java:102:33:102:38 | target [post update] : char[] | StrBuilderTextTest.java:103:18:103:23 | target | provenance | | | StrBuilderTextTest.java:105:45:105:48 | sb52 [post update] : StrBuilder | StrBuilderTextTest.java:105:89:105:92 | sb52 : StrBuilder | provenance | | -| StrBuilderTextTest.java:105:60:105:66 | taint(...) : String | StrBuilderTextTest.java:105:60:105:80 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:105:60:105:66 | taint(...) : String | StrBuilderTextTest.java:105:60:105:80 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:105:60:105:80 | toCharArray(...) : char[] | StrBuilderTextTest.java:105:45:105:48 | sb52 [post update] : StrBuilder | provenance | MaD:482 | -| StrBuilderTextTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTextTest.java:105:89:105:103 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTextTest.java:105:89:105:103 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:105:89:105:92 | sb52 : StrBuilder | StrBuilderTextTest.java:105:89:105:103 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:106:45:106:48 | sb53 [post update] : StrBuilder | StrBuilderTextTest.java:106:95:106:98 | sb53 : StrBuilder | provenance | | -| StrBuilderTextTest.java:106:60:106:66 | taint(...) : String | StrBuilderTextTest.java:106:60:106:80 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrBuilderTextTest.java:106:60:106:66 | taint(...) : String | StrBuilderTextTest.java:106:60:106:80 | toCharArray(...) : char[] | provenance | MaD:7 | | StrBuilderTextTest.java:106:60:106:80 | toCharArray(...) : char[] | StrBuilderTextTest.java:106:45:106:48 | sb53 [post update] : StrBuilder | provenance | MaD:482 | -| StrBuilderTextTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTextTest.java:106:95:106:109 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTextTest.java:106:95:106:109 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:106:95:106:98 | sb53 : StrBuilder | StrBuilderTextTest.java:106:95:106:109 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:107:45:107:48 | sb54 [post update] : StrBuilder | StrBuilderTextTest.java:107:75:107:78 | sb54 : StrBuilder | provenance | | | StrBuilderTextTest.java:107:60:107:66 | taint(...) : String | StrBuilderTextTest.java:107:45:107:48 | sb54 [post update] : StrBuilder | provenance | MaD:482 | -| StrBuilderTextTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTextTest.java:107:75:107:89 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTextTest.java:107:75:107:89 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:107:75:107:78 | sb54 : StrBuilder | StrBuilderTextTest.java:107:75:107:89 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:108:45:108:48 | sb55 [post update] : StrBuilder | StrBuilderTextTest.java:108:83:108:86 | sb55 : StrBuilder | provenance | | | StrBuilderTextTest.java:108:60:108:74 | (...)... : String | StrBuilderTextTest.java:108:45:108:48 | sb55 [post update] : StrBuilder | provenance | MaD:482 | | StrBuilderTextTest.java:108:68:108:74 | taint(...) : String | StrBuilderTextTest.java:108:60:108:74 | (...)... : String | provenance | | -| StrBuilderTextTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTextTest.java:108:83:108:97 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTextTest.java:108:83:108:97 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:108:83:108:86 | sb55 : StrBuilder | StrBuilderTextTest.java:108:83:108:97 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:109:45:109:48 | sb56 [post update] : StrBuilder | StrBuilderTextTest.java:109:72:109:75 | sb56 : StrBuilder | provenance | | | StrBuilderTextTest.java:109:57:109:63 | taint(...) : String | StrBuilderTextTest.java:109:45:109:48 | sb56 [post update] : StrBuilder | provenance | MaD:425 | @@ -1946,41 +1946,41 @@ edges | StrBuilderTextTest.java:110:57:110:63 | taint(...) : String | StrBuilderTextTest.java:110:45:110:48 | sb57 [post update] : StrBuilder | provenance | MaD:425 | | StrBuilderTextTest.java:110:72:110:75 | sb57 : StrBuilder | StrBuilderTextTest.java:110:72:110:91 | midString(...) | provenance | MaD:484 | | StrBuilderTextTest.java:112:35:112:59 | new StringReader(...) : StringReader | StrBuilderTextTest.java:113:63:113:68 | reader : StringReader | provenance | | -| StrBuilderTextTest.java:112:52:112:58 | taint(...) : String | StrBuilderTextTest.java:112:35:112:59 | new StringReader(...) : StringReader | provenance | MaD:3 | +| StrBuilderTextTest.java:112:52:112:58 | taint(...) : String | StrBuilderTextTest.java:112:35:112:59 | new StringReader(...) : StringReader | provenance | MaD:2 | | StrBuilderTextTest.java:113:49:113:52 | sb58 [post update] : StrBuilder | StrBuilderTextTest.java:113:77:113:80 | sb58 : StrBuilder | provenance | | | StrBuilderTextTest.java:113:63:113:68 | reader : StringReader | StrBuilderTextTest.java:113:49:113:52 | sb58 [post update] : StrBuilder | provenance | MaD:486 | -| StrBuilderTextTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTextTest.java:113:77:113:91 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTextTest.java:113:77:113:91 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:113:77:113:80 | sb58 : StrBuilder | StrBuilderTextTest.java:113:77:113:91 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:115:45:115:48 | sb59 [post update] : StrBuilder | StrBuilderTextTest.java:115:79:115:82 | sb59 : StrBuilder | provenance | | | StrBuilderTextTest.java:115:64:115:70 | taint(...) : String | StrBuilderTextTest.java:115:45:115:48 | sb59 [post update] : StrBuilder | provenance | MaD:488 | -| StrBuilderTextTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTextTest.java:115:79:115:93 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTextTest.java:115:79:115:93 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:115:79:115:82 | sb59 : StrBuilder | StrBuilderTextTest.java:115:79:115:93 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:116:45:116:48 | sb60 [post update] : StrBuilder | StrBuilderTextTest.java:116:88:116:91 | sb60 : StrBuilder | provenance | | | StrBuilderTextTest.java:116:64:116:70 | taint(...) : String | StrBuilderTextTest.java:116:45:116:48 | sb60 [post update] : StrBuilder | provenance | MaD:489 | -| StrBuilderTextTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTextTest.java:116:88:116:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTextTest.java:116:88:116:102 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:116:88:116:91 | sb60 : StrBuilder | StrBuilderTextTest.java:116:88:116:102 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:117:45:117:48 | sb61 [post update] : StrBuilder | StrBuilderTextTest.java:117:94:117:97 | sb61 : StrBuilder | provenance | | | StrBuilderTextTest.java:117:79:117:85 | taint(...) : String | StrBuilderTextTest.java:117:45:117:48 | sb61 [post update] : StrBuilder | provenance | MaD:491 | -| StrBuilderTextTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTextTest.java:117:94:117:108 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTextTest.java:117:94:117:108 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:117:94:117:97 | sb61 : StrBuilder | StrBuilderTextTest.java:117:94:117:108 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:118:45:118:48 | sb62 [post update] : StrBuilder | StrBuilderTextTest.java:118:86:118:89 | sb62 : StrBuilder | provenance | | | StrBuilderTextTest.java:118:71:118:77 | taint(...) : String | StrBuilderTextTest.java:118:45:118:48 | sb62 [post update] : StrBuilder | provenance | MaD:491 | -| StrBuilderTextTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTextTest.java:118:86:118:100 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTextTest.java:118:86:118:100 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:118:86:118:89 | sb62 : StrBuilder | StrBuilderTextTest.java:118:86:118:100 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:120:45:120:48 | sb64 [post update] : StrBuilder | StrBuilderTextTest.java:120:96:120:99 | sb64 : StrBuilder | provenance | | | StrBuilderTextTest.java:120:81:120:87 | taint(...) : String | StrBuilderTextTest.java:120:45:120:48 | sb64 [post update] : StrBuilder | provenance | MaD:493 | -| StrBuilderTextTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTextTest.java:120:96:120:110 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTextTest.java:120:96:120:110 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:120:96:120:99 | sb64 : StrBuilder | StrBuilderTextTest.java:120:96:120:110 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:121:45:121:48 | sb65 [post update] : StrBuilder | StrBuilderTextTest.java:121:88:121:91 | sb65 : StrBuilder | provenance | | | StrBuilderTextTest.java:121:73:121:79 | taint(...) : String | StrBuilderTextTest.java:121:45:121:48 | sb65 [post update] : StrBuilder | provenance | MaD:493 | -| StrBuilderTextTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTextTest.java:121:88:121:102 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTextTest.java:121:88:121:102 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:121:88:121:91 | sb65 : StrBuilder | StrBuilderTextTest.java:121:88:121:102 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:123:45:123:48 | sb67 [post update] : StrBuilder | StrBuilderTextTest.java:123:72:123:75 | sb67 : StrBuilder | provenance | | | StrBuilderTextTest.java:123:57:123:63 | taint(...) : String | StrBuilderTextTest.java:123:45:123:48 | sb67 [post update] : StrBuilder | provenance | MaD:425 | | StrBuilderTextTest.java:123:72:123:75 | sb67 : StrBuilder | StrBuilderTextTest.java:123:72:123:90 | rightString(...) | provenance | MaD:495 | | StrBuilderTextTest.java:124:45:124:48 | sb68 [post update] : StrBuilder | StrBuilderTextTest.java:124:72:124:75 | sb68 : StrBuilder | provenance | | | StrBuilderTextTest.java:124:57:124:63 | taint(...) : String | StrBuilderTextTest.java:124:45:124:48 | sb68 [post update] : StrBuilder | provenance | MaD:425 | -| StrBuilderTextTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTextTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:5 | +| StrBuilderTextTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTextTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:4 | | StrBuilderTextTest.java:124:72:124:75 | sb68 : StrBuilder | StrBuilderTextTest.java:124:72:124:93 | subSequence(...) | provenance | MaD:500 | | StrBuilderTextTest.java:125:45:125:48 | sb69 [post update] : StrBuilder | StrBuilderTextTest.java:125:72:125:75 | sb69 : StrBuilder | provenance | | | StrBuilderTextTest.java:125:57:125:63 | taint(...) : String | StrBuilderTextTest.java:125:45:125:48 | sb69 [post update] : StrBuilder | provenance | MaD:425 | @@ -2001,16 +2001,16 @@ edges | StrBuilderTextTest.java:130:57:130:63 | taint(...) : String | StrBuilderTextTest.java:130:45:130:48 | sb74 [post update] : StrBuilder | provenance | MaD:425 | | StrBuilderTextTest.java:130:72:130:75 | sb74 : StrBuilder | StrBuilderTextTest.java:130:72:130:93 | toStringBuilder(...) | provenance | MaD:505 | | StrBuilderTextTest.java:135:14:135:58 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | provenance | MaD:419 | -| StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:93 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:93 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:93 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:135:51:135:57 | taint(...) : String | StrBuilderTextTest.java:135:14:135:58 | append(...) : StrBuilder | provenance | MaD:425+MaD:419 | | StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | MaD:419 | | StrBuilderTextTest.java:138:54:138:60 | taint(...) : String | StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | provenance | MaD:425 | -| StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTextTest.java:139:14:139:42 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTextTest.java:139:14:139:42 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTextTest.java:139:14:139:42 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | MaD:419 | | StrBuilderTextTest.java:143:55:143:61 | taint(...) : String | StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | provenance | MaD:425 | -| StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTextTest.java:144:14:144:43 | toString(...) | provenance | MaD:6 | +| StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTextTest.java:144:14:144:43 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTextTest.java:144:14:144:43 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:147:43:147:65 | new StrBuilder(...) : StrBuilder | StrBuilderTextTest.java:148:14:148:33 | fluentAllMethodsTest : StrBuilder | provenance | | | StrBuilderTextTest.java:147:58:147:64 | taint(...) : String | StrBuilderTextTest.java:147:43:147:65 | new StrBuilder(...) : StrBuilder | provenance | MaD:418 | @@ -2150,10 +2150,10 @@ edges | StrSubstitutorTest.java:51:12:51:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:51:12:51:48 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:51:35:51:41 | taint(...) : String | StrSubstitutorTest.java:51:12:51:48 | replace(...) | provenance | MaD:332 | | StrSubstitutorTest.java:52:12:52:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:52:12:52:56 | replace(...) | provenance | MaD:319 | -| StrSubstitutorTest.java:52:35:52:41 | taint(...) : String | StrSubstitutorTest.java:52:35:52:55 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrSubstitutorTest.java:52:35:52:41 | taint(...) : String | StrSubstitutorTest.java:52:35:52:55 | toCharArray(...) : char[] | provenance | MaD:7 | | StrSubstitutorTest.java:52:35:52:55 | toCharArray(...) : char[] | StrSubstitutorTest.java:52:12:52:56 | replace(...) | provenance | MaD:320 | | StrSubstitutorTest.java:53:12:53:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:53:12:53:62 | replace(...) | provenance | MaD:319 | -| StrSubstitutorTest.java:53:35:53:41 | taint(...) : String | StrSubstitutorTest.java:53:35:53:55 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrSubstitutorTest.java:53:35:53:41 | taint(...) : String | StrSubstitutorTest.java:53:35:53:55 | toCharArray(...) : char[] | provenance | MaD:7 | | StrSubstitutorTest.java:53:35:53:55 | toCharArray(...) : char[] | StrSubstitutorTest.java:53:12:53:62 | replace(...) | provenance | MaD:321 | | StrSubstitutorTest.java:54:12:54:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:54:12:54:56 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:54:35:54:55 | (...)... : String | StrSubstitutorTest.java:54:12:54:56 | replace(...) | provenance | MaD:322 | @@ -2169,16 +2169,16 @@ edges | StrSubstitutorTest.java:57:50:57:56 | taint(...) : String | StrSubstitutorTest.java:57:35:57:57 | new StrBuilder(...) : StrBuilder | provenance | MaD:226 | | StrSubstitutorTest.java:58:12:58:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:58:12:58:61 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:58:35:58:60 | new StringBuilder(...) : StringBuilder | StrSubstitutorTest.java:58:12:58:61 | replace(...) | provenance | MaD:322 | -| StrSubstitutorTest.java:58:53:58:59 | taint(...) : String | StrSubstitutorTest.java:58:35:58:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | +| StrSubstitutorTest.java:58:53:58:59 | taint(...) : String | StrSubstitutorTest.java:58:35:58:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | | StrSubstitutorTest.java:59:12:59:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:59:12:59:67 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | StrSubstitutorTest.java:59:12:59:67 | replace(...) | provenance | MaD:323 | -| StrSubstitutorTest.java:59:53:59:59 | taint(...) : String | StrSubstitutorTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | +| StrSubstitutorTest.java:59:53:59:59 | taint(...) : String | StrSubstitutorTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | | StrSubstitutorTest.java:60:12:60:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:60:12:60:60 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:60:35:60:59 | new StringBuffer(...) : StringBuffer | StrSubstitutorTest.java:60:12:60:60 | replace(...) | provenance | MaD:333 | -| StrSubstitutorTest.java:60:52:60:58 | taint(...) : String | StrSubstitutorTest.java:60:35:60:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | +| StrSubstitutorTest.java:60:52:60:58 | taint(...) : String | StrSubstitutorTest.java:60:35:60:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | | StrSubstitutorTest.java:61:12:61:25 | untaintedSubst : StrSubstitutor | StrSubstitutorTest.java:61:12:61:66 | replace(...) | provenance | MaD:319 | | StrSubstitutorTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | StrSubstitutorTest.java:61:12:61:66 | replace(...) | provenance | MaD:334 | -| StrSubstitutorTest.java:61:52:61:58 | taint(...) : String | StrSubstitutorTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | +| StrSubstitutorTest.java:61:52:61:58 | taint(...) : String | StrSubstitutorTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | | StrSubstitutorTest.java:64:35:64:41 | taint(...) : String | StrSubstitutorTest.java:64:12:64:73 | replace(...) | provenance | MaD:325 | | StrSubstitutorTest.java:65:35:65:41 | taint(...) : String | StrSubstitutorTest.java:65:12:65:83 | replace(...) | provenance | MaD:327 | | StrSubstitutorTest.java:66:44:66:53 | taintedMap : HashMap [] : String | StrSubstitutorTest.java:66:12:66:54 | replace(...) | provenance | MaD:326 | @@ -2190,41 +2190,41 @@ edges | StrSubstitutorTest.java:71:44:71:55 | taintedProps : Properties [] : String | StrSubstitutorTest.java:71:12:71:56 | replace(...) | provenance | MaD:330 | | StrSubstitutorTest.java:74:50:74:61 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:74:73:74:83 | strBuilder1 [post update] : StrBuilder | provenance | MaD:341 | | StrSubstitutorTest.java:74:73:74:83 | strBuilder1 [post update] : StrBuilder | StrSubstitutorTest.java:74:92:74:102 | strBuilder1 : StrBuilder | provenance | | -| StrSubstitutorTest.java:74:92:74:102 | strBuilder1 : StrBuilder | StrSubstitutorTest.java:74:92:74:113 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:74:92:74:102 | strBuilder1 : StrBuilder | StrSubstitutorTest.java:74:92:74:113 | toString(...) | provenance | MaD:5 | | StrSubstitutorTest.java:74:92:74:102 | strBuilder1 : StrBuilder | StrSubstitutorTest.java:74:92:74:113 | toString(...) | provenance | MaD:311 | | StrSubstitutorTest.java:75:50:75:61 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:75:73:75:83 | strBuilder2 [post update] : StrBuilder | provenance | MaD:342 | | StrSubstitutorTest.java:75:73:75:83 | strBuilder2 [post update] : StrBuilder | StrSubstitutorTest.java:75:98:75:108 | strBuilder2 : StrBuilder | provenance | | -| StrSubstitutorTest.java:75:98:75:108 | strBuilder2 : StrBuilder | StrSubstitutorTest.java:75:98:75:119 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:75:98:75:108 | strBuilder2 : StrBuilder | StrSubstitutorTest.java:75:98:75:119 | toString(...) | provenance | MaD:5 | | StrSubstitutorTest.java:75:98:75:108 | strBuilder2 : StrBuilder | StrSubstitutorTest.java:75:98:75:119 | toString(...) | provenance | MaD:311 | | StrSubstitutorTest.java:76:59:76:70 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:76:82:76:95 | stringBuilder1 [post update] : StringBuilder | provenance | MaD:339 | | StrSubstitutorTest.java:76:82:76:95 | stringBuilder1 [post update] : StringBuilder | StrSubstitutorTest.java:76:104:76:117 | stringBuilder1 : StringBuilder | provenance | | -| StrSubstitutorTest.java:76:104:76:117 | stringBuilder1 : StringBuilder | StrSubstitutorTest.java:76:104:76:128 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:76:104:76:117 | stringBuilder1 : StringBuilder | StrSubstitutorTest.java:76:104:76:128 | toString(...) | provenance | MaD:5 | | StrSubstitutorTest.java:77:59:77:70 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:77:82:77:95 | stringBuilder2 [post update] : StringBuilder | provenance | MaD:340 | | StrSubstitutorTest.java:77:82:77:95 | stringBuilder2 [post update] : StringBuilder | StrSubstitutorTest.java:77:110:77:123 | stringBuilder2 : StringBuilder | provenance | | -| StrSubstitutorTest.java:77:110:77:123 | stringBuilder2 : StringBuilder | StrSubstitutorTest.java:77:110:77:134 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:77:110:77:123 | stringBuilder2 : StringBuilder | StrSubstitutorTest.java:77:110:77:134 | toString(...) | provenance | MaD:5 | | StrSubstitutorTest.java:78:56:78:67 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:78:79:78:91 | stringBuffer1 [post update] : StringBuffer | provenance | MaD:337 | | StrSubstitutorTest.java:78:79:78:91 | stringBuffer1 [post update] : StringBuffer | StrSubstitutorTest.java:78:100:78:112 | stringBuffer1 : StringBuffer | provenance | | -| StrSubstitutorTest.java:78:100:78:112 | stringBuffer1 : StringBuffer | StrSubstitutorTest.java:78:100:78:123 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:78:100:78:112 | stringBuffer1 : StringBuffer | StrSubstitutorTest.java:78:100:78:123 | toString(...) | provenance | MaD:5 | | StrSubstitutorTest.java:79:56:79:67 | taintedSubst : StrSubstitutor | StrSubstitutorTest.java:79:79:79:91 | stringBuffer2 [post update] : StringBuffer | provenance | MaD:338 | | StrSubstitutorTest.java:79:79:79:91 | stringBuffer2 [post update] : StringBuffer | StrSubstitutorTest.java:79:106:79:118 | stringBuffer2 : StringBuffer | provenance | | -| StrSubstitutorTest.java:79:106:79:118 | stringBuffer2 : StringBuffer | StrSubstitutorTest.java:79:106:79:129 | toString(...) | provenance | MaD:6 | +| StrSubstitutorTest.java:79:106:79:118 | stringBuffer2 : StringBuffer | StrSubstitutorTest.java:79:106:79:129 | toString(...) | provenance | MaD:5 | | StrTokenizerTest.java:12:11:12:49 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:12:10:12:61 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:12:28:12:34 | taint(...) : String | StrTokenizerTest.java:12:28:12:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:12:28:12:34 | taint(...) : String | StrTokenizerTest.java:12:28:12:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:12:28:12:48 | toCharArray(...) : char[] | StrTokenizerTest.java:12:11:12:49 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:13:11:13:54 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:13:10:13:66 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:13:28:13:34 | taint(...) : String | StrTokenizerTest.java:13:28:13:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:13:28:13:34 | taint(...) : String | StrTokenizerTest.java:13:28:13:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:13:28:13:48 | toCharArray(...) : char[] | StrTokenizerTest.java:13:11:13:54 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:14:11:14:59 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:14:10:14:71 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:14:28:14:34 | taint(...) : String | StrTokenizerTest.java:14:28:14:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:14:28:14:34 | taint(...) : String | StrTokenizerTest.java:14:28:14:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:14:28:14:48 | toCharArray(...) : char[] | StrTokenizerTest.java:14:11:14:59 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:15:11:15:54 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:15:10:15:66 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:15:28:15:34 | taint(...) : String | StrTokenizerTest.java:15:28:15:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:15:28:15:34 | taint(...) : String | StrTokenizerTest.java:15:28:15:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:15:28:15:48 | toCharArray(...) : char[] | StrTokenizerTest.java:15:11:15:54 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:16:11:16:67 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:16:10:16:79 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:16:28:16:34 | taint(...) : String | StrTokenizerTest.java:16:28:16:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:16:28:16:34 | taint(...) : String | StrTokenizerTest.java:16:28:16:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:16:28:16:48 | toCharArray(...) : char[] | StrTokenizerTest.java:16:11:16:67 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:17:11:17:85 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:17:10:17:97 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:17:28:17:34 | taint(...) : String | StrTokenizerTest.java:17:28:17:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:17:28:17:34 | taint(...) : String | StrTokenizerTest.java:17:28:17:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:17:28:17:48 | toCharArray(...) : char[] | StrTokenizerTest.java:17:11:17:85 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:18:11:18:35 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:18:10:18:47 | toString(...) | provenance | MaD:356 | | StrTokenizerTest.java:18:28:18:34 | taint(...) : String | StrTokenizerTest.java:18:11:18:35 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | @@ -2239,12 +2239,12 @@ edges | StrTokenizerTest.java:23:11:23:71 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:23:10:23:83 | toString(...) | provenance | MaD:356 | | StrTokenizerTest.java:23:28:23:34 | taint(...) : String | StrTokenizerTest.java:23:11:23:71 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:26:10:26:59 | getCSVInstance(...) : StrTokenizer | StrTokenizerTest.java:26:10:26:70 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:26:38:26:44 | taint(...) : String | StrTokenizerTest.java:26:38:26:58 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:26:38:26:44 | taint(...) : String | StrTokenizerTest.java:26:38:26:58 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:26:38:26:58 | toCharArray(...) : char[] | StrTokenizerTest.java:26:10:26:59 | getCSVInstance(...) : StrTokenizer | provenance | MaD:346 | | StrTokenizerTest.java:27:10:27:45 | getCSVInstance(...) : StrTokenizer | StrTokenizerTest.java:27:10:27:56 | toString(...) | provenance | MaD:356 | | StrTokenizerTest.java:27:38:27:44 | taint(...) : String | StrTokenizerTest.java:27:10:27:45 | getCSVInstance(...) : StrTokenizer | provenance | MaD:346 | | StrTokenizerTest.java:28:10:28:59 | getTSVInstance(...) : StrTokenizer | StrTokenizerTest.java:28:10:28:70 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:28:38:28:44 | taint(...) : String | StrTokenizerTest.java:28:38:28:58 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:28:38:28:44 | taint(...) : String | StrTokenizerTest.java:28:38:28:58 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:28:38:28:58 | toCharArray(...) : char[] | StrTokenizerTest.java:28:10:28:59 | getTSVInstance(...) : StrTokenizer | provenance | MaD:348 | | StrTokenizerTest.java:29:10:29:45 | getTSVInstance(...) : StrTokenizer | StrTokenizerTest.java:29:10:29:56 | toString(...) | provenance | MaD:356 | | StrTokenizerTest.java:29:38:29:44 | taint(...) : String | StrTokenizerTest.java:29:10:29:45 | getTSVInstance(...) : StrTokenizer | provenance | MaD:348 | @@ -2268,27 +2268,27 @@ edges | StrTokenizerTest.java:39:11:39:35 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTest.java:39:10:39:52 | previousToken(...) | provenance | MaD:354 | | StrTokenizerTest.java:39:28:39:34 | taint(...) : String | StrTokenizerTest.java:39:11:39:35 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:344 | | StrTokenizerTest.java:42:10:42:58 | reset(...) : StrTokenizer | StrTokenizerTest.java:42:10:42:69 | toString(...) | provenance | MaD:356 | -| StrTokenizerTest.java:42:37:42:43 | taint(...) : String | StrTokenizerTest.java:42:37:42:57 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTest.java:42:37:42:43 | taint(...) : String | StrTokenizerTest.java:42:37:42:57 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTest.java:42:37:42:57 | toCharArray(...) : char[] | StrTokenizerTest.java:42:10:42:58 | reset(...) : StrTokenizer | provenance | MaD:355 | | StrTokenizerTest.java:43:10:43:44 | reset(...) : StrTokenizer | StrTokenizerTest.java:43:10:43:55 | toString(...) | provenance | MaD:356 | | StrTokenizerTest.java:43:37:43:43 | taint(...) : String | StrTokenizerTest.java:43:10:43:44 | reset(...) : StrTokenizer | provenance | MaD:355 | | StrTokenizerTextTest.java:12:11:12:49 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:12:10:12:61 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:12:28:12:34 | taint(...) : String | StrTokenizerTextTest.java:12:28:12:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:12:28:12:34 | taint(...) : String | StrTokenizerTextTest.java:12:28:12:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:12:28:12:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:12:11:12:49 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:13:11:13:54 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:13:10:13:66 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:13:28:13:34 | taint(...) : String | StrTokenizerTextTest.java:13:28:13:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:13:28:13:34 | taint(...) : String | StrTokenizerTextTest.java:13:28:13:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:13:28:13:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:13:11:13:54 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:14:11:14:59 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:14:10:14:71 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:14:28:14:34 | taint(...) : String | StrTokenizerTextTest.java:14:28:14:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:14:28:14:34 | taint(...) : String | StrTokenizerTextTest.java:14:28:14:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:14:28:14:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:14:11:14:59 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:15:11:15:54 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:15:10:15:66 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:15:28:15:34 | taint(...) : String | StrTokenizerTextTest.java:15:28:15:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:15:28:15:34 | taint(...) : String | StrTokenizerTextTest.java:15:28:15:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:15:28:15:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:15:11:15:54 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:16:11:16:67 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:16:10:16:79 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:16:28:16:34 | taint(...) : String | StrTokenizerTextTest.java:16:28:16:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:16:28:16:34 | taint(...) : String | StrTokenizerTextTest.java:16:28:16:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:16:28:16:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:16:11:16:67 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:17:11:17:85 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:17:10:17:97 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:17:28:17:34 | taint(...) : String | StrTokenizerTextTest.java:17:28:17:48 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:17:28:17:34 | taint(...) : String | StrTokenizerTextTest.java:17:28:17:48 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:17:28:17:48 | toCharArray(...) : char[] | StrTokenizerTextTest.java:17:11:17:85 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:18:11:18:35 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:18:10:18:47 | toString(...) | provenance | MaD:519 | | StrTokenizerTextTest.java:18:28:18:34 | taint(...) : String | StrTokenizerTextTest.java:18:11:18:35 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | @@ -2303,12 +2303,12 @@ edges | StrTokenizerTextTest.java:23:11:23:71 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:23:10:23:83 | toString(...) | provenance | MaD:519 | | StrTokenizerTextTest.java:23:28:23:34 | taint(...) : String | StrTokenizerTextTest.java:23:11:23:71 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:26:10:26:59 | getCSVInstance(...) : StrTokenizer | StrTokenizerTextTest.java:26:10:26:70 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:26:38:26:44 | taint(...) : String | StrTokenizerTextTest.java:26:38:26:58 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:26:38:26:44 | taint(...) : String | StrTokenizerTextTest.java:26:38:26:58 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:26:38:26:58 | toCharArray(...) : char[] | StrTokenizerTextTest.java:26:10:26:59 | getCSVInstance(...) : StrTokenizer | provenance | MaD:509 | | StrTokenizerTextTest.java:27:10:27:45 | getCSVInstance(...) : StrTokenizer | StrTokenizerTextTest.java:27:10:27:56 | toString(...) | provenance | MaD:519 | | StrTokenizerTextTest.java:27:38:27:44 | taint(...) : String | StrTokenizerTextTest.java:27:10:27:45 | getCSVInstance(...) : StrTokenizer | provenance | MaD:509 | | StrTokenizerTextTest.java:28:10:28:59 | getTSVInstance(...) : StrTokenizer | StrTokenizerTextTest.java:28:10:28:70 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:28:38:28:44 | taint(...) : String | StrTokenizerTextTest.java:28:38:28:58 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:28:38:28:44 | taint(...) : String | StrTokenizerTextTest.java:28:38:28:58 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:28:38:28:58 | toCharArray(...) : char[] | StrTokenizerTextTest.java:28:10:28:59 | getTSVInstance(...) : StrTokenizer | provenance | MaD:511 | | StrTokenizerTextTest.java:29:10:29:45 | getTSVInstance(...) : StrTokenizer | StrTokenizerTextTest.java:29:10:29:56 | toString(...) | provenance | MaD:519 | | StrTokenizerTextTest.java:29:38:29:44 | taint(...) : String | StrTokenizerTextTest.java:29:10:29:45 | getTSVInstance(...) : StrTokenizer | provenance | MaD:511 | @@ -2332,7 +2332,7 @@ edges | StrTokenizerTextTest.java:39:11:39:35 | new StrTokenizer(...) : StrTokenizer | StrTokenizerTextTest.java:39:10:39:52 | previousToken(...) | provenance | MaD:517 | | StrTokenizerTextTest.java:39:28:39:34 | taint(...) : String | StrTokenizerTextTest.java:39:11:39:35 | new StrTokenizer(...) : StrTokenizer | provenance | MaD:507 | | StrTokenizerTextTest.java:42:10:42:58 | reset(...) : StrTokenizer | StrTokenizerTextTest.java:42:10:42:69 | toString(...) | provenance | MaD:519 | -| StrTokenizerTextTest.java:42:37:42:43 | taint(...) : String | StrTokenizerTextTest.java:42:37:42:57 | toCharArray(...) : char[] | provenance | MaD:8 | +| StrTokenizerTextTest.java:42:37:42:43 | taint(...) : String | StrTokenizerTextTest.java:42:37:42:57 | toCharArray(...) : char[] | provenance | MaD:7 | | StrTokenizerTextTest.java:42:37:42:57 | toCharArray(...) : char[] | StrTokenizerTextTest.java:42:10:42:58 | reset(...) : StrTokenizer | provenance | MaD:518 | | StrTokenizerTextTest.java:43:10:43:44 | reset(...) : StrTokenizer | StrTokenizerTextTest.java:43:10:43:55 | toString(...) | provenance | MaD:519 | | StrTokenizerTextTest.java:43:37:43:43 | taint(...) : String | StrTokenizerTextTest.java:43:10:43:44 | reset(...) : StrTokenizer | provenance | MaD:518 | @@ -2445,10 +2445,10 @@ edges | StringSubstitutorTextTest.java:52:12:52:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:52:12:52:48 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:52:35:52:41 | taint(...) : String | StringSubstitutorTextTest.java:52:12:52:48 | replace(...) | provenance | MaD:535 | | StringSubstitutorTextTest.java:53:12:53:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:53:12:53:56 | replace(...) | provenance | MaD:522 | -| StringSubstitutorTextTest.java:53:35:53:41 | taint(...) : String | StringSubstitutorTextTest.java:53:35:53:55 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringSubstitutorTextTest.java:53:35:53:41 | taint(...) : String | StringSubstitutorTextTest.java:53:35:53:55 | toCharArray(...) : char[] | provenance | MaD:7 | | StringSubstitutorTextTest.java:53:35:53:55 | toCharArray(...) : char[] | StringSubstitutorTextTest.java:53:12:53:56 | replace(...) | provenance | MaD:523 | | StringSubstitutorTextTest.java:54:12:54:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:54:12:54:62 | replace(...) | provenance | MaD:522 | -| StringSubstitutorTextTest.java:54:35:54:41 | taint(...) : String | StringSubstitutorTextTest.java:54:35:54:55 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringSubstitutorTextTest.java:54:35:54:41 | taint(...) : String | StringSubstitutorTextTest.java:54:35:54:55 | toCharArray(...) : char[] | provenance | MaD:7 | | StringSubstitutorTextTest.java:54:35:54:55 | toCharArray(...) : char[] | StringSubstitutorTextTest.java:54:12:54:62 | replace(...) | provenance | MaD:524 | | StringSubstitutorTextTest.java:55:12:55:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:55:12:55:56 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:55:35:55:55 | (...)... : String | StringSubstitutorTextTest.java:55:12:55:56 | replace(...) | provenance | MaD:525 | @@ -2464,16 +2464,16 @@ edges | StringSubstitutorTextTest.java:58:57:58:63 | taint(...) : String | StringSubstitutorTextTest.java:58:35:58:64 | new TextStringBuilder(...) : TextStringBuilder | provenance | MaD:561 | | StringSubstitutorTextTest.java:59:12:59:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:59:12:59:61 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | StringSubstitutorTextTest.java:59:12:59:61 | replace(...) | provenance | MaD:525 | -| StringSubstitutorTextTest.java:59:53:59:59 | taint(...) : String | StringSubstitutorTextTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | +| StringSubstitutorTextTest.java:59:53:59:59 | taint(...) : String | StringSubstitutorTextTest.java:59:35:59:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | | StringSubstitutorTextTest.java:60:12:60:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:60:12:60:67 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:60:35:60:60 | new StringBuilder(...) : StringBuilder | StringSubstitutorTextTest.java:60:12:60:67 | replace(...) | provenance | MaD:526 | -| StringSubstitutorTextTest.java:60:53:60:59 | taint(...) : String | StringSubstitutorTextTest.java:60:35:60:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | +| StringSubstitutorTextTest.java:60:53:60:59 | taint(...) : String | StringSubstitutorTextTest.java:60:35:60:60 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | | StringSubstitutorTextTest.java:61:12:61:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:61:12:61:60 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | StringSubstitutorTextTest.java:61:12:61:60 | replace(...) | provenance | MaD:536 | -| StringSubstitutorTextTest.java:61:52:61:58 | taint(...) : String | StringSubstitutorTextTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | +| StringSubstitutorTextTest.java:61:52:61:58 | taint(...) : String | StringSubstitutorTextTest.java:61:35:61:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | | StringSubstitutorTextTest.java:62:12:62:25 | untaintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:62:12:62:66 | replace(...) | provenance | MaD:522 | | StringSubstitutorTextTest.java:62:35:62:59 | new StringBuffer(...) : StringBuffer | StringSubstitutorTextTest.java:62:12:62:66 | replace(...) | provenance | MaD:537 | -| StringSubstitutorTextTest.java:62:52:62:58 | taint(...) : String | StringSubstitutorTextTest.java:62:35:62:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | +| StringSubstitutorTextTest.java:62:52:62:58 | taint(...) : String | StringSubstitutorTextTest.java:62:35:62:59 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | | StringSubstitutorTextTest.java:65:38:65:44 | taint(...) : String | StringSubstitutorTextTest.java:65:12:65:76 | replace(...) | provenance | MaD:528 | | StringSubstitutorTextTest.java:66:38:66:44 | taint(...) : String | StringSubstitutorTextTest.java:66:12:66:86 | replace(...) | provenance | MaD:530 | | StringSubstitutorTextTest.java:67:47:67:56 | taintedMap : HashMap [] : String | StringSubstitutorTextTest.java:67:12:67:57 | replace(...) | provenance | MaD:529 | @@ -2485,41 +2485,41 @@ edges | StringSubstitutorTextTest.java:72:47:72:58 | taintedProps : Properties [] : String | StringSubstitutorTextTest.java:72:12:72:59 | replace(...) | provenance | MaD:533 | | StringSubstitutorTextTest.java:75:64:75:75 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:75:87:75:97 | strBuilder1 [post update] : TextStringBuilder | provenance | MaD:544 | | StringSubstitutorTextTest.java:75:87:75:97 | strBuilder1 [post update] : TextStringBuilder | StringSubstitutorTextTest.java:75:106:75:116 | strBuilder1 : TextStringBuilder | provenance | | -| StringSubstitutorTextTest.java:75:106:75:116 | strBuilder1 : TextStringBuilder | StringSubstitutorTextTest.java:75:106:75:127 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:75:106:75:116 | strBuilder1 : TextStringBuilder | StringSubstitutorTextTest.java:75:106:75:127 | toString(...) | provenance | MaD:5 | | StringSubstitutorTextTest.java:75:106:75:116 | strBuilder1 : TextStringBuilder | StringSubstitutorTextTest.java:75:106:75:127 | toString(...) | provenance | MaD:646 | | StringSubstitutorTextTest.java:76:64:76:75 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:76:87:76:97 | strBuilder2 [post update] : TextStringBuilder | provenance | MaD:545 | | StringSubstitutorTextTest.java:76:87:76:97 | strBuilder2 [post update] : TextStringBuilder | StringSubstitutorTextTest.java:76:112:76:122 | strBuilder2 : TextStringBuilder | provenance | | -| StringSubstitutorTextTest.java:76:112:76:122 | strBuilder2 : TextStringBuilder | StringSubstitutorTextTest.java:76:112:76:133 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:76:112:76:122 | strBuilder2 : TextStringBuilder | StringSubstitutorTextTest.java:76:112:76:133 | toString(...) | provenance | MaD:5 | | StringSubstitutorTextTest.java:76:112:76:122 | strBuilder2 : TextStringBuilder | StringSubstitutorTextTest.java:76:112:76:133 | toString(...) | provenance | MaD:646 | | StringSubstitutorTextTest.java:77:59:77:70 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:77:82:77:95 | stringBuilder1 [post update] : StringBuilder | provenance | MaD:542 | | StringSubstitutorTextTest.java:77:82:77:95 | stringBuilder1 [post update] : StringBuilder | StringSubstitutorTextTest.java:77:104:77:117 | stringBuilder1 : StringBuilder | provenance | | -| StringSubstitutorTextTest.java:77:104:77:117 | stringBuilder1 : StringBuilder | StringSubstitutorTextTest.java:77:104:77:128 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:77:104:77:117 | stringBuilder1 : StringBuilder | StringSubstitutorTextTest.java:77:104:77:128 | toString(...) | provenance | MaD:5 | | StringSubstitutorTextTest.java:78:59:78:70 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:78:82:78:95 | stringBuilder2 [post update] : StringBuilder | provenance | MaD:543 | | StringSubstitutorTextTest.java:78:82:78:95 | stringBuilder2 [post update] : StringBuilder | StringSubstitutorTextTest.java:78:110:78:123 | stringBuilder2 : StringBuilder | provenance | | -| StringSubstitutorTextTest.java:78:110:78:123 | stringBuilder2 : StringBuilder | StringSubstitutorTextTest.java:78:110:78:134 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:78:110:78:123 | stringBuilder2 : StringBuilder | StringSubstitutorTextTest.java:78:110:78:134 | toString(...) | provenance | MaD:5 | | StringSubstitutorTextTest.java:79:56:79:67 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:79:79:79:91 | stringBuffer1 [post update] : StringBuffer | provenance | MaD:540 | | StringSubstitutorTextTest.java:79:79:79:91 | stringBuffer1 [post update] : StringBuffer | StringSubstitutorTextTest.java:79:100:79:112 | stringBuffer1 : StringBuffer | provenance | | -| StringSubstitutorTextTest.java:79:100:79:112 | stringBuffer1 : StringBuffer | StringSubstitutorTextTest.java:79:100:79:123 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:79:100:79:112 | stringBuffer1 : StringBuffer | StringSubstitutorTextTest.java:79:100:79:123 | toString(...) | provenance | MaD:5 | | StringSubstitutorTextTest.java:80:56:80:67 | taintedSubst : StringSubstitutor | StringSubstitutorTextTest.java:80:79:80:91 | stringBuffer2 [post update] : StringBuffer | provenance | MaD:541 | | StringSubstitutorTextTest.java:80:79:80:91 | stringBuffer2 [post update] : StringBuffer | StringSubstitutorTextTest.java:80:106:80:118 | stringBuffer2 : StringBuffer | provenance | | -| StringSubstitutorTextTest.java:80:106:80:118 | stringBuffer2 : StringBuffer | StringSubstitutorTextTest.java:80:106:80:129 | toString(...) | provenance | MaD:6 | +| StringSubstitutorTextTest.java:80:106:80:118 | stringBuffer2 : StringBuffer | StringSubstitutorTextTest.java:80:106:80:129 | toString(...) | provenance | MaD:5 | | StringTokenizerTest.java:12:11:12:52 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:12:10:12:64 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:12:31:12:37 | taint(...) : String | StringTokenizerTest.java:12:31:12:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:12:31:12:37 | taint(...) : String | StringTokenizerTest.java:12:31:12:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:12:31:12:51 | toCharArray(...) : char[] | StringTokenizerTest.java:12:11:12:52 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:13:11:13:57 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:13:10:13:69 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:13:31:13:37 | taint(...) : String | StringTokenizerTest.java:13:31:13:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:13:31:13:37 | taint(...) : String | StringTokenizerTest.java:13:31:13:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:13:31:13:51 | toCharArray(...) : char[] | StringTokenizerTest.java:13:11:13:57 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:14:11:14:62 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:14:10:14:74 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:14:31:14:37 | taint(...) : String | StringTokenizerTest.java:14:31:14:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:14:31:14:37 | taint(...) : String | StringTokenizerTest.java:14:31:14:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:14:31:14:51 | toCharArray(...) : char[] | StringTokenizerTest.java:14:11:14:62 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:15:11:15:57 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:15:10:15:69 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:15:31:15:37 | taint(...) : String | StringTokenizerTest.java:15:31:15:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:15:31:15:37 | taint(...) : String | StringTokenizerTest.java:15:31:15:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:15:31:15:51 | toCharArray(...) : char[] | StringTokenizerTest.java:15:11:15:57 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:16:11:16:73 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:16:10:16:85 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:16:31:16:37 | taint(...) : String | StringTokenizerTest.java:16:31:16:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:16:31:16:37 | taint(...) : String | StringTokenizerTest.java:16:31:16:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:16:31:16:51 | toCharArray(...) : char[] | StringTokenizerTest.java:16:11:16:73 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:17:11:17:94 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:17:10:17:106 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:17:31:17:37 | taint(...) : String | StringTokenizerTest.java:17:31:17:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:17:31:17:37 | taint(...) : String | StringTokenizerTest.java:17:31:17:51 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:17:31:17:51 | toCharArray(...) : char[] | StringTokenizerTest.java:17:11:17:94 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:18:11:18:38 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:18:10:18:50 | toString(...) | provenance | MaD:559 | | StringTokenizerTest.java:18:31:18:37 | taint(...) : String | StringTokenizerTest.java:18:11:18:38 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | @@ -2534,12 +2534,12 @@ edges | StringTokenizerTest.java:23:11:23:80 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:23:10:23:92 | toString(...) | provenance | MaD:559 | | StringTokenizerTest.java:23:31:23:37 | taint(...) : String | StringTokenizerTest.java:23:11:23:80 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:26:10:26:62 | getCSVInstance(...) : StringTokenizer | StringTokenizerTest.java:26:10:26:73 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:26:41:26:47 | taint(...) : String | StringTokenizerTest.java:26:41:26:61 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:26:41:26:47 | taint(...) : String | StringTokenizerTest.java:26:41:26:61 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:26:41:26:61 | toCharArray(...) : char[] | StringTokenizerTest.java:26:10:26:62 | getCSVInstance(...) : StringTokenizer | provenance | MaD:549 | | StringTokenizerTest.java:27:10:27:48 | getCSVInstance(...) : StringTokenizer | StringTokenizerTest.java:27:10:27:59 | toString(...) | provenance | MaD:559 | | StringTokenizerTest.java:27:41:27:47 | taint(...) : String | StringTokenizerTest.java:27:10:27:48 | getCSVInstance(...) : StringTokenizer | provenance | MaD:549 | | StringTokenizerTest.java:28:10:28:62 | getTSVInstance(...) : StringTokenizer | StringTokenizerTest.java:28:10:28:73 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:28:41:28:47 | taint(...) : String | StringTokenizerTest.java:28:41:28:61 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:28:41:28:47 | taint(...) : String | StringTokenizerTest.java:28:41:28:61 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:28:41:28:61 | toCharArray(...) : char[] | StringTokenizerTest.java:28:10:28:62 | getTSVInstance(...) : StringTokenizer | provenance | MaD:551 | | StringTokenizerTest.java:29:10:29:48 | getTSVInstance(...) : StringTokenizer | StringTokenizerTest.java:29:10:29:59 | toString(...) | provenance | MaD:559 | | StringTokenizerTest.java:29:41:29:47 | taint(...) : String | StringTokenizerTest.java:29:10:29:48 | getTSVInstance(...) : StringTokenizer | provenance | MaD:551 | @@ -2563,7 +2563,7 @@ edges | StringTokenizerTest.java:39:11:39:38 | new StringTokenizer(...) : StringTokenizer | StringTokenizerTest.java:39:10:39:55 | previousToken(...) | provenance | MaD:557 | | StringTokenizerTest.java:39:31:39:37 | taint(...) : String | StringTokenizerTest.java:39:11:39:38 | new StringTokenizer(...) : StringTokenizer | provenance | MaD:547 | | StringTokenizerTest.java:42:10:42:61 | reset(...) : StringTokenizer | StringTokenizerTest.java:42:10:42:72 | toString(...) | provenance | MaD:559 | -| StringTokenizerTest.java:42:40:42:46 | taint(...) : String | StringTokenizerTest.java:42:40:42:60 | toCharArray(...) : char[] | provenance | MaD:8 | +| StringTokenizerTest.java:42:40:42:46 | taint(...) : String | StringTokenizerTest.java:42:40:42:60 | toCharArray(...) : char[] | provenance | MaD:7 | | StringTokenizerTest.java:42:40:42:60 | toCharArray(...) : char[] | StringTokenizerTest.java:42:10:42:61 | reset(...) : StringTokenizer | provenance | MaD:558 | | StringTokenizerTest.java:43:10:43:47 | reset(...) : StringTokenizer | StringTokenizerTest.java:43:10:43:58 | toString(...) | provenance | MaD:559 | | StringTokenizerTest.java:43:40:43:46 | taint(...) : String | StringTokenizerTest.java:43:10:43:47 | reset(...) : StringTokenizer | provenance | MaD:558 | @@ -2614,9 +2614,9 @@ edges | Test.java:63:36:63:42 | taint(...) : String | Test.java:63:14:63:43 | getDigits(...) | provenance | MaD:104 | | Test.java:64:37:64:43 | taint(...) : String | Test.java:64:14:64:61 | getIfBlank(...) | provenance | MaD:105 | | Test.java:65:37:65:43 | taint(...) : String | Test.java:65:14:65:61 | getIfEmpty(...) | provenance | MaD:106 | -| Test.java:73:31:73:37 | taint(...) : String | Test.java:73:31:73:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| Test.java:73:31:73:37 | taint(...) : String | Test.java:73:31:73:51 | toCharArray(...) : char[] | provenance | MaD:7 | | Test.java:73:31:73:51 | toCharArray(...) : char[] | Test.java:73:14:73:57 | join(...) | provenance | MaD:107 | -| Test.java:74:31:74:37 | taint(...) : String | Test.java:74:31:74:51 | toCharArray(...) : char[] | provenance | MaD:8 | +| Test.java:74:31:74:37 | taint(...) : String | Test.java:74:31:74:51 | toCharArray(...) : char[] | provenance | MaD:7 | | Test.java:74:31:74:51 | toCharArray(...) : char[] | Test.java:74:14:74:63 | join(...) | provenance | MaD:108 | | Test.java:77:9:77:19 | taintedList [post update] : ArrayList [] : String | Test.java:78:31:78:41 | taintedList : ArrayList [] : String | provenance | | | Test.java:77:9:77:19 | taintedList [post update] : ArrayList [] : String | Test.java:79:31:79:41 | taintedList : ArrayList [] : String | provenance | | @@ -2628,9 +2628,9 @@ edges | Test.java:78:31:78:41 | taintedList : ArrayList [] : String | Test.java:78:14:78:47 | join(...) | provenance | MaD:109 | | Test.java:79:31:79:41 | taintedList : ArrayList [] : String | Test.java:79:14:79:49 | join(...) | provenance | MaD:110 | | Test.java:81:46:81:52 | taint(...) : String | Test.java:81:14:81:53 | join(...) | provenance | MaD:111 | -| Test.java:83:31:83:41 | taintedList : ArrayList [] : String | Test.java:83:31:83:52 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| Test.java:83:31:83:41 | taintedList : ArrayList [] : String | Test.java:83:31:83:52 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | Test.java:83:31:83:52 | iterator(...) : Iterator [] : String | Test.java:83:14:83:58 | join(...) | provenance | MaD:119 | -| Test.java:84:31:84:41 | taintedList : ArrayList [] : String | Test.java:84:31:84:52 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| Test.java:84:31:84:41 | taintedList : ArrayList [] : String | Test.java:84:31:84:52 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | Test.java:84:31:84:52 | iterator(...) : Iterator [] : String | Test.java:84:14:84:60 | join(...) | provenance | MaD:120 | | Test.java:85:57:85:63 | taint(...) : String | Test.java:85:14:85:64 | join(...) | provenance | MaD:121 | | Test.java:87:31:87:41 | taintedList : ArrayList [] : String | Test.java:87:14:87:53 | join(...) | provenance | MaD:122 | @@ -2774,7 +2774,7 @@ edges | Test.java:263:33:263:39 | taint(...) : String | Test.java:263:14:263:53 | unwrap(...) | provenance | MaD:215 | | Test.java:266:36:266:42 | taint(...) : String | Test.java:266:14:266:43 | upperCase(...) | provenance | MaD:216 | | Test.java:267:36:267:42 | taint(...) : String | Test.java:267:14:267:49 | upperCase(...) | provenance | MaD:217 | -| Test.java:268:34:268:40 | taint(...) : String | Test.java:268:34:268:54 | toCharArray(...) : char[] | provenance | MaD:8 | +| Test.java:268:34:268:40 | taint(...) : String | Test.java:268:34:268:54 | toCharArray(...) : char[] | provenance | MaD:7 | | Test.java:268:34:268:54 | toCharArray(...) : char[] | Test.java:268:14:268:55 | valueOf(...) | provenance | MaD:218 | | Test.java:269:31:269:37 | taint(...) : String | Test.java:269:14:269:43 | wrap(...) | provenance | MaD:219 | | Test.java:270:31:270:37 | taint(...) : String | Test.java:270:14:270:55 | wrap(...) | provenance | MaD:220 | @@ -2784,239 +2784,239 @@ edges | Test.java:274:51:274:57 | taint(...) : String | Test.java:274:14:274:58 | wrapIfMissing(...) | provenance | MaD:222 | | TextStringBuilderTest.java:17:35:17:64 | new TextStringBuilder(...) : TextStringBuilder | TextStringBuilderTest.java:17:72:17:76 | cons1 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:17:57:17:63 | taint(...) : String | TextStringBuilderTest.java:17:35:17:64 | new TextStringBuilder(...) : TextStringBuilder | provenance | MaD:561 | -| TextStringBuilderTest.java:17:72:17:76 | cons1 : TextStringBuilder | TextStringBuilderTest.java:17:72:17:87 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:17:72:17:76 | cons1 : TextStringBuilder | TextStringBuilderTest.java:17:72:17:87 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:17:72:17:76 | cons1 : TextStringBuilder | TextStringBuilderTest.java:17:72:17:87 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:18:35:18:78 | new TextStringBuilder(...) : TextStringBuilder | TextStringBuilderTest.java:18:86:18:90 | cons2 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:18:57:18:77 | (...)... : String | TextStringBuilderTest.java:18:35:18:78 | new TextStringBuilder(...) : TextStringBuilder | provenance | MaD:560 | | TextStringBuilderTest.java:18:71:18:77 | taint(...) : String | TextStringBuilderTest.java:18:57:18:77 | (...)... : String | provenance | | -| TextStringBuilderTest.java:18:86:18:90 | cons2 : TextStringBuilder | TextStringBuilderTest.java:18:86:18:101 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:18:86:18:90 | cons2 : TextStringBuilder | TextStringBuilderTest.java:18:86:18:101 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:18:86:18:90 | cons2 : TextStringBuilder | TextStringBuilderTest.java:18:86:18:101 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:20:58:20:60 | sb1 [post update] : TextStringBuilder | TextStringBuilderTest.java:20:98:20:100 | sb1 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:20:69:20:75 | taint(...) : String | TextStringBuilderTest.java:20:69:20:89 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:20:69:20:75 | taint(...) : String | TextStringBuilderTest.java:20:69:20:89 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:20:69:20:89 | toCharArray(...) : char[] | TextStringBuilderTest.java:20:58:20:60 | sb1 [post update] : TextStringBuilder | provenance | MaD:563 | -| TextStringBuilderTest.java:20:98:20:100 | sb1 : TextStringBuilder | TextStringBuilderTest.java:20:98:20:111 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:20:98:20:100 | sb1 : TextStringBuilder | TextStringBuilderTest.java:20:98:20:111 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:20:98:20:100 | sb1 : TextStringBuilder | TextStringBuilderTest.java:20:98:20:111 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:21:58:21:60 | sb2 [post update] : TextStringBuilder | TextStringBuilderTest.java:21:104:21:106 | sb2 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:21:69:21:75 | taint(...) : String | TextStringBuilderTest.java:21:69:21:89 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:21:69:21:75 | taint(...) : String | TextStringBuilderTest.java:21:69:21:89 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:21:69:21:89 | toCharArray(...) : char[] | TextStringBuilderTest.java:21:58:21:60 | sb2 [post update] : TextStringBuilder | provenance | MaD:564 | -| TextStringBuilderTest.java:21:104:21:106 | sb2 : TextStringBuilder | TextStringBuilderTest.java:21:104:21:117 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:21:104:21:106 | sb2 : TextStringBuilder | TextStringBuilderTest.java:21:104:21:117 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:21:104:21:106 | sb2 : TextStringBuilder | TextStringBuilderTest.java:21:104:21:117 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:22:58:22:60 | sb3 [post update] : TextStringBuilder | TextStringBuilderTest.java:22:115:22:117 | sb3 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:22:69:22:106 | wrap(...) : CharBuffer | TextStringBuilderTest.java:22:58:22:60 | sb3 [post update] : TextStringBuilder | provenance | MaD:576 | -| TextStringBuilderTest.java:22:85:22:91 | taint(...) : String | TextStringBuilderTest.java:22:85:22:105 | toCharArray(...) : char[] | provenance | MaD:8 | -| TextStringBuilderTest.java:22:85:22:105 | toCharArray(...) : char[] | TextStringBuilderTest.java:22:69:22:106 | wrap(...) : CharBuffer | provenance | MaD:1 | -| TextStringBuilderTest.java:22:115:22:117 | sb3 : TextStringBuilder | TextStringBuilderTest.java:22:115:22:128 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:22:85:22:91 | taint(...) : String | TextStringBuilderTest.java:22:85:22:105 | toCharArray(...) : char[] | provenance | MaD:7 | +| TextStringBuilderTest.java:22:85:22:105 | toCharArray(...) : char[] | TextStringBuilderTest.java:22:69:22:106 | wrap(...) : CharBuffer | provenance | MaD:10 | +| TextStringBuilderTest.java:22:115:22:117 | sb3 : TextStringBuilder | TextStringBuilderTest.java:22:115:22:128 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:22:115:22:117 | sb3 : TextStringBuilder | TextStringBuilderTest.java:22:115:22:128 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:23:58:23:60 | sb4 [post update] : TextStringBuilder | TextStringBuilderTest.java:23:121:23:123 | sb4 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:23:69:23:106 | wrap(...) : CharBuffer | TextStringBuilderTest.java:23:58:23:60 | sb4 [post update] : TextStringBuilder | provenance | MaD:577 | -| TextStringBuilderTest.java:23:85:23:91 | taint(...) : String | TextStringBuilderTest.java:23:85:23:105 | toCharArray(...) : char[] | provenance | MaD:8 | -| TextStringBuilderTest.java:23:85:23:105 | toCharArray(...) : char[] | TextStringBuilderTest.java:23:69:23:106 | wrap(...) : CharBuffer | provenance | MaD:1 | -| TextStringBuilderTest.java:23:121:23:123 | sb4 : TextStringBuilder | TextStringBuilderTest.java:23:121:23:134 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:23:85:23:91 | taint(...) : String | TextStringBuilderTest.java:23:85:23:105 | toCharArray(...) : char[] | provenance | MaD:7 | +| TextStringBuilderTest.java:23:85:23:105 | toCharArray(...) : char[] | TextStringBuilderTest.java:23:69:23:106 | wrap(...) : CharBuffer | provenance | MaD:10 | +| TextStringBuilderTest.java:23:121:23:123 | sb4 : TextStringBuilder | TextStringBuilderTest.java:23:121:23:134 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:23:121:23:123 | sb4 : TextStringBuilder | TextStringBuilderTest.java:23:121:23:134 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:24:58:24:60 | sb5 [post update] : TextStringBuilder | TextStringBuilderTest.java:24:98:24:100 | sb5 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:24:69:24:89 | (...)... : String | TextStringBuilderTest.java:24:58:24:60 | sb5 [post update] : TextStringBuilder | provenance | MaD:4 | +| TextStringBuilderTest.java:24:69:24:89 | (...)... : String | TextStringBuilderTest.java:24:58:24:60 | sb5 [post update] : TextStringBuilder | provenance | MaD:3 | | TextStringBuilderTest.java:24:69:24:89 | (...)... : String | TextStringBuilderTest.java:24:58:24:60 | sb5 [post update] : TextStringBuilder | provenance | MaD:565 | | TextStringBuilderTest.java:24:83:24:89 | taint(...) : String | TextStringBuilderTest.java:24:69:24:89 | (...)... : String | provenance | | -| TextStringBuilderTest.java:24:98:24:100 | sb5 : TextStringBuilder | TextStringBuilderTest.java:24:98:24:111 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:24:98:24:100 | sb5 : TextStringBuilder | TextStringBuilderTest.java:24:98:24:111 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:24:98:24:100 | sb5 : TextStringBuilder | TextStringBuilderTest.java:24:98:24:111 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:25:58:25:60 | sb6 [post update] : TextStringBuilder | TextStringBuilderTest.java:25:104:25:106 | sb6 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:25:69:25:89 | (...)... : String | TextStringBuilderTest.java:25:58:25:60 | sb6 [post update] : TextStringBuilder | provenance | MaD:4 | +| TextStringBuilderTest.java:25:69:25:89 | (...)... : String | TextStringBuilderTest.java:25:58:25:60 | sb6 [post update] : TextStringBuilder | provenance | MaD:3 | | TextStringBuilderTest.java:25:69:25:89 | (...)... : String | TextStringBuilderTest.java:25:58:25:60 | sb6 [post update] : TextStringBuilder | provenance | MaD:566 | | TextStringBuilderTest.java:25:83:25:89 | taint(...) : String | TextStringBuilderTest.java:25:69:25:89 | (...)... : String | provenance | | -| TextStringBuilderTest.java:25:104:25:106 | sb6 : TextStringBuilder | TextStringBuilderTest.java:25:104:25:117 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:25:104:25:106 | sb6 : TextStringBuilder | TextStringBuilderTest.java:25:104:25:117 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:25:104:25:106 | sb6 : TextStringBuilder | TextStringBuilderTest.java:25:104:25:117 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:26:58:26:60 | sb7 [post update] : TextStringBuilder | TextStringBuilderTest.java:26:92:26:94 | sb7 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:26:69:26:83 | (...)... : String | TextStringBuilderTest.java:26:58:26:60 | sb7 [post update] : TextStringBuilder | provenance | MaD:567 | | TextStringBuilderTest.java:26:77:26:83 | taint(...) : String | TextStringBuilderTest.java:26:69:26:83 | (...)... : String | provenance | | -| TextStringBuilderTest.java:26:92:26:94 | sb7 : TextStringBuilder | TextStringBuilderTest.java:26:92:26:105 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:26:92:26:94 | sb7 : TextStringBuilder | TextStringBuilderTest.java:26:92:26:105 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:26:92:26:94 | sb7 : TextStringBuilder | TextStringBuilderTest.java:26:92:26:105 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:28:64:28:68 | auxsb [post update] : TextStringBuilder | TextStringBuilderTest.java:29:73:29:77 | auxsb : TextStringBuilder | provenance | | | TextStringBuilderTest.java:28:77:28:83 | taint(...) : String | TextStringBuilderTest.java:28:64:28:68 | auxsb [post update] : TextStringBuilder | provenance | MaD:568 | | TextStringBuilderTest.java:29:62:29:64 | sb8 [post update] : TextStringBuilder | TextStringBuilderTest.java:29:86:29:88 | sb8 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:29:73:29:77 | auxsb : TextStringBuilder | TextStringBuilderTest.java:29:62:29:64 | sb8 [post update] : TextStringBuilder | provenance | MaD:578 | -| TextStringBuilderTest.java:29:86:29:88 | sb8 : TextStringBuilder | TextStringBuilderTest.java:29:86:29:99 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:29:86:29:88 | sb8 : TextStringBuilder | TextStringBuilderTest.java:29:86:29:99 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:29:86:29:88 | sb8 : TextStringBuilder | TextStringBuilderTest.java:29:86:29:99 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:31:58:31:60 | sb9 [post update] : TextStringBuilder | TextStringBuilderTest.java:31:102:31:104 | sb9 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:31:69:31:93 | new StringBuffer(...) : StringBuffer | TextStringBuilderTest.java:31:58:31:60 | sb9 [post update] : TextStringBuilder | provenance | MaD:572 | -| TextStringBuilderTest.java:31:86:31:92 | taint(...) : String | TextStringBuilderTest.java:31:69:31:93 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| TextStringBuilderTest.java:31:102:31:104 | sb9 : TextStringBuilder | TextStringBuilderTest.java:31:102:31:115 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:31:86:31:92 | taint(...) : String | TextStringBuilderTest.java:31:69:31:93 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| TextStringBuilderTest.java:31:102:31:104 | sb9 : TextStringBuilder | TextStringBuilderTest.java:31:102:31:115 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:31:102:31:104 | sb9 : TextStringBuilder | TextStringBuilderTest.java:31:102:31:115 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:32:59:32:62 | sb10 [post update] : TextStringBuilder | TextStringBuilderTest.java:32:110:32:113 | sb10 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:32:71:32:95 | new StringBuffer(...) : StringBuffer | TextStringBuilderTest.java:32:59:32:62 | sb10 [post update] : TextStringBuilder | provenance | MaD:573 | -| TextStringBuilderTest.java:32:88:32:94 | taint(...) : String | TextStringBuilderTest.java:32:71:32:95 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| TextStringBuilderTest.java:32:110:32:113 | sb10 : TextStringBuilder | TextStringBuilderTest.java:32:110:32:124 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:32:88:32:94 | taint(...) : String | TextStringBuilderTest.java:32:71:32:95 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| TextStringBuilderTest.java:32:110:32:113 | sb10 : TextStringBuilder | TextStringBuilderTest.java:32:110:32:124 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:32:110:32:113 | sb10 : TextStringBuilder | TextStringBuilderTest.java:32:110:32:124 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:33:59:33:62 | sb11 [post update] : TextStringBuilder | TextStringBuilderTest.java:33:105:33:108 | sb11 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:33:71:33:96 | new StringBuilder(...) : StringBuilder | TextStringBuilderTest.java:33:59:33:62 | sb11 [post update] : TextStringBuilder | provenance | MaD:574 | -| TextStringBuilderTest.java:33:89:33:95 | taint(...) : String | TextStringBuilderTest.java:33:71:33:96 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| TextStringBuilderTest.java:33:105:33:108 | sb11 : TextStringBuilder | TextStringBuilderTest.java:33:105:33:119 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:33:89:33:95 | taint(...) : String | TextStringBuilderTest.java:33:71:33:96 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| TextStringBuilderTest.java:33:105:33:108 | sb11 : TextStringBuilder | TextStringBuilderTest.java:33:105:33:119 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:33:105:33:108 | sb11 : TextStringBuilder | TextStringBuilderTest.java:33:105:33:119 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:34:59:34:62 | sb12 [post update] : TextStringBuilder | TextStringBuilderTest.java:34:111:34:114 | sb12 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:34:71:34:96 | new StringBuilder(...) : StringBuilder | TextStringBuilderTest.java:34:59:34:62 | sb12 [post update] : TextStringBuilder | provenance | MaD:575 | -| TextStringBuilderTest.java:34:89:34:95 | taint(...) : String | TextStringBuilderTest.java:34:71:34:96 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| TextStringBuilderTest.java:34:111:34:114 | sb12 : TextStringBuilder | TextStringBuilderTest.java:34:111:34:125 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:34:89:34:95 | taint(...) : String | TextStringBuilderTest.java:34:71:34:96 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| TextStringBuilderTest.java:34:111:34:114 | sb12 : TextStringBuilder | TextStringBuilderTest.java:34:111:34:125 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:34:111:34:114 | sb12 : TextStringBuilder | TextStringBuilderTest.java:34:111:34:125 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:35:59:35:62 | sb13 [post update] : TextStringBuilder | TextStringBuilderTest.java:35:86:35:89 | sb13 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:35:71:35:77 | taint(...) : String | TextStringBuilderTest.java:35:59:35:62 | sb13 [post update] : TextStringBuilder | provenance | MaD:568 | -| TextStringBuilderTest.java:35:86:35:89 | sb13 : TextStringBuilder | TextStringBuilderTest.java:35:86:35:100 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:35:86:35:89 | sb13 : TextStringBuilder | TextStringBuilderTest.java:35:86:35:100 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:35:86:35:89 | sb13 : TextStringBuilder | TextStringBuilderTest.java:35:86:35:100 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:36:59:36:62 | sb14 [post update] : TextStringBuilder | TextStringBuilderTest.java:36:92:36:95 | sb14 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:36:71:36:77 | taint(...) : String | TextStringBuilderTest.java:36:59:36:62 | sb14 [post update] : TextStringBuilder | provenance | MaD:569 | -| TextStringBuilderTest.java:36:92:36:95 | sb14 : TextStringBuilder | TextStringBuilderTest.java:36:92:36:106 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:36:92:36:95 | sb14 : TextStringBuilder | TextStringBuilderTest.java:36:92:36:106 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:36:92:36:95 | sb14 : TextStringBuilder | TextStringBuilderTest.java:36:92:36:106 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:37:59:37:62 | sb15 [post update] : TextStringBuilder | TextStringBuilderTest.java:37:104:37:107 | sb15 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:37:71:37:77 | taint(...) : String | TextStringBuilderTest.java:37:59:37:62 | sb15 [post update] : TextStringBuilder | provenance | MaD:570 | -| TextStringBuilderTest.java:37:104:37:107 | sb15 : TextStringBuilder | TextStringBuilderTest.java:37:104:37:118 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:37:104:37:107 | sb15 : TextStringBuilder | TextStringBuilderTest.java:37:104:37:118 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:37:104:37:107 | sb15 : TextStringBuilder | TextStringBuilderTest.java:37:104:37:118 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:38:59:38:62 | sb16 [post update] : TextStringBuilder | TextStringBuilderTest.java:38:111:38:114 | sb16 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:38:59:38:103 | new ..[] { .. } : Object[] [[]] : String | TextStringBuilderTest.java:38:59:38:62 | sb16 [post update] : TextStringBuilder | provenance | MaD:571 | | TextStringBuilderTest.java:38:88:38:94 | taint(...) : String | TextStringBuilderTest.java:38:59:38:103 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| TextStringBuilderTest.java:38:111:38:114 | sb16 : TextStringBuilder | TextStringBuilderTest.java:38:111:38:125 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:38:111:38:114 | sb16 : TextStringBuilder | TextStringBuilderTest.java:38:111:38:125 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:38:111:38:114 | sb16 : TextStringBuilder | TextStringBuilderTest.java:38:111:38:125 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:41:13:41:23 | taintedList [post update] : ArrayList [] : String | TextStringBuilderTest.java:42:78:42:88 | taintedList : ArrayList [] : String | provenance | | | TextStringBuilderTest.java:41:13:41:23 | taintedList [post update] : ArrayList [] : String | TextStringBuilderTest.java:43:78:43:88 | taintedList : ArrayList [] : String | provenance | | | TextStringBuilderTest.java:41:29:41:35 | taint(...) : String | TextStringBuilderTest.java:41:13:41:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | TextStringBuilderTest.java:42:63:42:66 | sb17 [post update] : TextStringBuilder | TextStringBuilderTest.java:42:97:42:100 | sb17 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:42:78:42:88 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:42:63:42:66 | sb17 [post update] : TextStringBuilder | provenance | MaD:580 | -| TextStringBuilderTest.java:42:97:42:100 | sb17 : TextStringBuilder | TextStringBuilderTest.java:42:97:42:111 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:42:97:42:100 | sb17 : TextStringBuilder | TextStringBuilderTest.java:42:97:42:111 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:42:97:42:100 | sb17 : TextStringBuilder | TextStringBuilderTest.java:42:97:42:111 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:43:63:43:66 | sb18 [post update] : TextStringBuilder | TextStringBuilderTest.java:43:108:43:111 | sb18 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:43:78:43:88 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:43:78:43:99 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| TextStringBuilderTest.java:43:78:43:88 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:43:78:43:99 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | TextStringBuilderTest.java:43:78:43:99 | iterator(...) : Iterator [] : String | TextStringBuilderTest.java:43:63:43:66 | sb18 [post update] : TextStringBuilder | provenance | MaD:581 | -| TextStringBuilderTest.java:43:108:43:111 | sb18 : TextStringBuilder | TextStringBuilderTest.java:43:108:43:122 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:43:108:43:111 | sb18 : TextStringBuilder | TextStringBuilderTest.java:43:108:43:122 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:43:108:43:111 | sb18 : TextStringBuilder | TextStringBuilderTest.java:43:108:43:122 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:45:59:45:62 | sb19 [post update] : TextStringBuilder | TextStringBuilderTest.java:45:98:45:101 | sb19 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:45:59:45:90 | new ..[] { .. } : Object[] [[]] : String | TextStringBuilderTest.java:45:59:45:62 | sb19 [post update] : TextStringBuilder | provenance | MaD:582 | | TextStringBuilderTest.java:45:83:45:89 | taint(...) : String | TextStringBuilderTest.java:45:59:45:90 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| TextStringBuilderTest.java:45:98:45:101 | sb19 : TextStringBuilder | TextStringBuilderTest.java:45:98:45:112 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:45:98:45:101 | sb19 : TextStringBuilder | TextStringBuilderTest.java:45:98:45:112 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:45:98:45:101 | sb19 : TextStringBuilder | TextStringBuilderTest.java:45:98:45:112 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:46:59:46:62 | sb20 [post update] : TextStringBuilder | TextStringBuilderTest.java:46:98:46:101 | sb20 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:46:59:46:90 | new ..[] { .. } : Object[] [[]] : String | TextStringBuilderTest.java:46:59:46:62 | sb20 [post update] : TextStringBuilder | provenance | MaD:582 | | TextStringBuilderTest.java:46:74:46:80 | taint(...) : String | TextStringBuilderTest.java:46:59:46:90 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| TextStringBuilderTest.java:46:98:46:101 | sb20 : TextStringBuilder | TextStringBuilderTest.java:46:98:46:112 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:46:98:46:101 | sb20 : TextStringBuilder | TextStringBuilderTest.java:46:98:46:112 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:46:98:46:101 | sb20 : TextStringBuilder | TextStringBuilderTest.java:46:98:46:112 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:47:59:47:62 | sb21 [post update] : TextStringBuilder | TextStringBuilderTest.java:47:111:47:114 | sb21 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:47:88:47:94 | taint(...) : String | TextStringBuilderTest.java:47:59:47:62 | sb21 [post update] : TextStringBuilder | provenance | MaD:584 | -| TextStringBuilderTest.java:47:111:47:114 | sb21 : TextStringBuilder | TextStringBuilderTest.java:47:111:47:125 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:47:111:47:114 | sb21 : TextStringBuilder | TextStringBuilderTest.java:47:111:47:125 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:47:111:47:114 | sb21 : TextStringBuilder | TextStringBuilderTest.java:47:111:47:125 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:48:59:48:62 | sb22 [post update] : TextStringBuilder | TextStringBuilderTest.java:48:112:48:115 | sb22 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:48:89:48:95 | taint(...) : String | TextStringBuilderTest.java:48:59:48:62 | sb22 [post update] : TextStringBuilder | provenance | MaD:586 | -| TextStringBuilderTest.java:48:112:48:115 | sb22 : TextStringBuilder | TextStringBuilderTest.java:48:112:48:126 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:48:112:48:115 | sb22 : TextStringBuilder | TextStringBuilderTest.java:48:112:48:126 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:48:112:48:115 | sb22 : TextStringBuilder | TextStringBuilderTest.java:48:112:48:126 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:49:59:49:62 | sb23 [post update] : TextStringBuilder | TextStringBuilderTest.java:49:102:49:105 | sb23 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:49:73:49:79 | taint(...) : String | TextStringBuilderTest.java:49:73:49:93 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:49:73:49:79 | taint(...) : String | TextStringBuilderTest.java:49:73:49:93 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:49:73:49:93 | toCharArray(...) : char[] | TextStringBuilderTest.java:49:59:49:62 | sb23 [post update] : TextStringBuilder | provenance | MaD:601 | -| TextStringBuilderTest.java:49:102:49:105 | sb23 : TextStringBuilder | TextStringBuilderTest.java:49:102:49:116 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:49:102:49:105 | sb23 : TextStringBuilder | TextStringBuilderTest.java:49:102:49:116 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:49:102:49:105 | sb23 : TextStringBuilder | TextStringBuilderTest.java:49:102:49:116 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:50:59:50:62 | sb24 [post update] : TextStringBuilder | TextStringBuilderTest.java:50:108:50:111 | sb24 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:50:73:50:79 | taint(...) : String | TextStringBuilderTest.java:50:73:50:93 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:50:73:50:79 | taint(...) : String | TextStringBuilderTest.java:50:73:50:93 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:50:73:50:93 | toCharArray(...) : char[] | TextStringBuilderTest.java:50:59:50:62 | sb24 [post update] : TextStringBuilder | provenance | MaD:602 | -| TextStringBuilderTest.java:50:108:50:111 | sb24 : TextStringBuilder | TextStringBuilderTest.java:50:108:50:122 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:50:108:50:111 | sb24 : TextStringBuilder | TextStringBuilderTest.java:50:108:50:122 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:50:108:50:111 | sb24 : TextStringBuilder | TextStringBuilderTest.java:50:108:50:122 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:51:59:51:62 | sb25 [post update] : TextStringBuilder | TextStringBuilderTest.java:51:96:51:99 | sb25 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:51:73:51:87 | (...)... : String | TextStringBuilderTest.java:51:59:51:62 | sb25 [post update] : TextStringBuilder | provenance | MaD:603 | | TextStringBuilderTest.java:51:81:51:87 | taint(...) : String | TextStringBuilderTest.java:51:73:51:87 | (...)... : String | provenance | | -| TextStringBuilderTest.java:51:96:51:99 | sb25 : TextStringBuilder | TextStringBuilderTest.java:51:96:51:110 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:51:96:51:99 | sb25 : TextStringBuilder | TextStringBuilderTest.java:51:96:51:110 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:51:96:51:99 | sb25 : TextStringBuilder | TextStringBuilderTest.java:51:96:51:110 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:53:64:53:68 | auxsb [post update] : TextStringBuilder | TextStringBuilderTest.java:54:77:54:81 | auxsb : TextStringBuilder | provenance | | | TextStringBuilderTest.java:53:79:53:85 | taint(...) : String | TextStringBuilderTest.java:53:64:53:68 | auxsb [post update] : TextStringBuilder | provenance | MaD:604 | | TextStringBuilderTest.java:54:63:54:66 | sb26 [post update] : TextStringBuilder | TextStringBuilderTest.java:54:90:54:93 | sb26 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:54:77:54:81 | auxsb : TextStringBuilder | TextStringBuilderTest.java:54:63:54:66 | sb26 [post update] : TextStringBuilder | provenance | MaD:612 | -| TextStringBuilderTest.java:54:90:54:93 | sb26 : TextStringBuilder | TextStringBuilderTest.java:54:90:54:104 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:54:90:54:93 | sb26 : TextStringBuilder | TextStringBuilderTest.java:54:90:54:104 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:54:90:54:93 | sb26 : TextStringBuilder | TextStringBuilderTest.java:54:90:54:104 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:56:59:56:62 | sb27 [post update] : TextStringBuilder | TextStringBuilderTest.java:56:106:56:109 | sb27 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:56:73:56:97 | new StringBuffer(...) : StringBuffer | TextStringBuilderTest.java:56:59:56:62 | sb27 [post update] : TextStringBuilder | provenance | MaD:608 | -| TextStringBuilderTest.java:56:90:56:96 | taint(...) : String | TextStringBuilderTest.java:56:73:56:97 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| TextStringBuilderTest.java:56:106:56:109 | sb27 : TextStringBuilder | TextStringBuilderTest.java:56:106:56:120 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:56:90:56:96 | taint(...) : String | TextStringBuilderTest.java:56:73:56:97 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| TextStringBuilderTest.java:56:106:56:109 | sb27 : TextStringBuilder | TextStringBuilderTest.java:56:106:56:120 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:56:106:56:109 | sb27 : TextStringBuilder | TextStringBuilderTest.java:56:106:56:120 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:57:59:57:62 | sb28 [post update] : TextStringBuilder | TextStringBuilderTest.java:57:112:57:115 | sb28 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:57:73:57:97 | new StringBuffer(...) : StringBuffer | TextStringBuilderTest.java:57:59:57:62 | sb28 [post update] : TextStringBuilder | provenance | MaD:609 | -| TextStringBuilderTest.java:57:90:57:96 | taint(...) : String | TextStringBuilderTest.java:57:73:57:97 | new StringBuffer(...) : StringBuffer | provenance | MaD:9 | -| TextStringBuilderTest.java:57:112:57:115 | sb28 : TextStringBuilder | TextStringBuilderTest.java:57:112:57:126 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:57:90:57:96 | taint(...) : String | TextStringBuilderTest.java:57:73:57:97 | new StringBuffer(...) : StringBuffer | provenance | MaD:8 | +| TextStringBuilderTest.java:57:112:57:115 | sb28 : TextStringBuilder | TextStringBuilderTest.java:57:112:57:126 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:57:112:57:115 | sb28 : TextStringBuilder | TextStringBuilderTest.java:57:112:57:126 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:58:59:58:62 | sb29 [post update] : TextStringBuilder | TextStringBuilderTest.java:58:107:58:110 | sb29 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:58:73:58:98 | new StringBuilder(...) : StringBuilder | TextStringBuilderTest.java:58:59:58:62 | sb29 [post update] : TextStringBuilder | provenance | MaD:610 | -| TextStringBuilderTest.java:58:91:58:97 | taint(...) : String | TextStringBuilderTest.java:58:73:58:98 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| TextStringBuilderTest.java:58:107:58:110 | sb29 : TextStringBuilder | TextStringBuilderTest.java:58:107:58:121 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:58:91:58:97 | taint(...) : String | TextStringBuilderTest.java:58:73:58:98 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| TextStringBuilderTest.java:58:107:58:110 | sb29 : TextStringBuilder | TextStringBuilderTest.java:58:107:58:121 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:58:107:58:110 | sb29 : TextStringBuilder | TextStringBuilderTest.java:58:107:58:121 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:59:59:59:62 | sb30 [post update] : TextStringBuilder | TextStringBuilderTest.java:59:113:59:116 | sb30 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:59:73:59:98 | new StringBuilder(...) : StringBuilder | TextStringBuilderTest.java:59:59:59:62 | sb30 [post update] : TextStringBuilder | provenance | MaD:611 | -| TextStringBuilderTest.java:59:91:59:97 | taint(...) : String | TextStringBuilderTest.java:59:73:59:98 | new StringBuilder(...) : StringBuilder | provenance | MaD:10 | -| TextStringBuilderTest.java:59:113:59:116 | sb30 : TextStringBuilder | TextStringBuilderTest.java:59:113:59:127 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:59:91:59:97 | taint(...) : String | TextStringBuilderTest.java:59:73:59:98 | new StringBuilder(...) : StringBuilder | provenance | MaD:9 | +| TextStringBuilderTest.java:59:113:59:116 | sb30 : TextStringBuilder | TextStringBuilderTest.java:59:113:59:127 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:59:113:59:116 | sb30 : TextStringBuilder | TextStringBuilderTest.java:59:113:59:127 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:60:59:60:62 | sb31 [post update] : TextStringBuilder | TextStringBuilderTest.java:60:88:60:91 | sb31 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:60:73:60:79 | taint(...) : String | TextStringBuilderTest.java:60:59:60:62 | sb31 [post update] : TextStringBuilder | provenance | MaD:604 | -| TextStringBuilderTest.java:60:88:60:91 | sb31 : TextStringBuilder | TextStringBuilderTest.java:60:88:60:102 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:60:88:60:91 | sb31 : TextStringBuilder | TextStringBuilderTest.java:60:88:60:102 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:60:88:60:91 | sb31 : TextStringBuilder | TextStringBuilderTest.java:60:88:60:102 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:61:59:61:62 | sb32 [post update] : TextStringBuilder | TextStringBuilderTest.java:61:94:61:97 | sb32 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:61:73:61:79 | taint(...) : String | TextStringBuilderTest.java:61:59:61:62 | sb32 [post update] : TextStringBuilder | provenance | MaD:605 | -| TextStringBuilderTest.java:61:94:61:97 | sb32 : TextStringBuilder | TextStringBuilderTest.java:61:94:61:108 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:61:94:61:97 | sb32 : TextStringBuilder | TextStringBuilderTest.java:61:94:61:108 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:61:94:61:97 | sb32 : TextStringBuilder | TextStringBuilderTest.java:61:94:61:108 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:62:59:62:62 | sb33 [post update] : TextStringBuilder | TextStringBuilderTest.java:62:106:62:109 | sb33 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:62:73:62:79 | taint(...) : String | TextStringBuilderTest.java:62:59:62:62 | sb33 [post update] : TextStringBuilder | provenance | MaD:606 | -| TextStringBuilderTest.java:62:106:62:109 | sb33 : TextStringBuilder | TextStringBuilderTest.java:62:106:62:120 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:62:106:62:109 | sb33 : TextStringBuilder | TextStringBuilderTest.java:62:106:62:120 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:62:106:62:109 | sb33 : TextStringBuilder | TextStringBuilderTest.java:62:106:62:120 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:63:59:63:62 | sb34 [post update] : TextStringBuilder | TextStringBuilderTest.java:63:113:63:116 | sb34 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:63:59:63:105 | new ..[] { .. } : Object[] [[]] : String | TextStringBuilderTest.java:63:59:63:62 | sb34 [post update] : TextStringBuilder | provenance | MaD:607 | | TextStringBuilderTest.java:63:90:63:96 | taint(...) : String | TextStringBuilderTest.java:63:59:63:105 | new ..[] { .. } : Object[] [[]] : String | provenance | | -| TextStringBuilderTest.java:63:113:63:116 | sb34 : TextStringBuilder | TextStringBuilderTest.java:63:113:63:127 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:63:113:63:116 | sb34 : TextStringBuilder | TextStringBuilderTest.java:63:113:63:127 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:63:113:63:116 | sb34 : TextStringBuilder | TextStringBuilderTest.java:63:113:63:127 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:64:59:64:62 | sb35 [post update] : TextStringBuilder | TextStringBuilderTest.java:64:95:64:98 | sb35 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:64:80:64:86 | taint(...) : String | TextStringBuilderTest.java:64:59:64:62 | sb35 [post update] : TextStringBuilder | provenance | MaD:591 | -| TextStringBuilderTest.java:64:95:64:98 | sb35 : TextStringBuilder | TextStringBuilderTest.java:64:95:64:109 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:64:95:64:98 | sb35 : TextStringBuilder | TextStringBuilderTest.java:64:95:64:109 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:64:95:64:98 | sb35 : TextStringBuilder | TextStringBuilderTest.java:64:95:64:109 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:65:59:65:62 | sb36 [post update] : TextStringBuilder | TextStringBuilderTest.java:65:98:65:101 | sb36 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:65:80:65:86 | taint(...) : String | TextStringBuilderTest.java:65:59:65:62 | sb36 [post update] : TextStringBuilder | provenance | MaD:592 | -| TextStringBuilderTest.java:65:98:65:101 | sb36 : TextStringBuilder | TextStringBuilderTest.java:65:98:65:112 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:65:98:65:101 | sb36 : TextStringBuilder | TextStringBuilderTest.java:65:98:65:112 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:65:98:65:101 | sb36 : TextStringBuilder | TextStringBuilderTest.java:65:98:65:112 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:66:59:66:62 | sb37 [post update] : TextStringBuilder | TextStringBuilderTest.java:66:106:66:109 | sb37 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:66:80:66:86 | taint(...) : String | TextStringBuilderTest.java:66:59:66:62 | sb37 [post update] : TextStringBuilder | provenance | MaD:593 | -| TextStringBuilderTest.java:66:106:66:109 | sb37 : TextStringBuilder | TextStringBuilderTest.java:66:106:66:120 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:66:106:66:109 | sb37 : TextStringBuilder | TextStringBuilderTest.java:66:106:66:120 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:66:106:66:109 | sb37 : TextStringBuilder | TextStringBuilderTest.java:66:106:66:120 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:67:59:67:62 | sb38 [post update] : TextStringBuilder | TextStringBuilderTest.java:67:99:67:102 | sb38 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:67:84:67:90 | taint(...) : String | TextStringBuilderTest.java:67:59:67:62 | sb38 [post update] : TextStringBuilder | provenance | MaD:593 | -| TextStringBuilderTest.java:67:99:67:102 | sb38 : TextStringBuilder | TextStringBuilderTest.java:67:99:67:113 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:67:99:67:102 | sb38 : TextStringBuilder | TextStringBuilderTest.java:67:99:67:113 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:67:99:67:102 | sb38 : TextStringBuilder | TextStringBuilderTest.java:67:99:67:113 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:69:64:69:68 | auxsb [post update] : TextStringBuilder | TextStringBuilderTest.java:70:63:70:67 | auxsb : TextStringBuilder | provenance | | | TextStringBuilderTest.java:69:79:69:85 | taint(...) : String | TextStringBuilderTest.java:69:64:69:68 | auxsb [post update] : TextStringBuilder | provenance | MaD:604 | | TextStringBuilderTest.java:70:63:70:67 | auxsb : TextStringBuilder | TextStringBuilderTest.java:70:78:70:81 | sb39 [post update] : TextStringBuilder | provenance | MaD:594 | | TextStringBuilderTest.java:70:78:70:81 | sb39 [post update] : TextStringBuilder | TextStringBuilderTest.java:70:90:70:93 | sb39 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:70:90:70:93 | sb39 : TextStringBuilder | TextStringBuilderTest.java:70:90:70:104 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:70:90:70:93 | sb39 : TextStringBuilder | TextStringBuilderTest.java:70:90:70:104 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:70:90:70:93 | sb39 : TextStringBuilder | TextStringBuilderTest.java:70:90:70:104 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:74:13:74:23 | taintedList [post update] : ArrayList [] : String | TextStringBuilderTest.java:75:89:75:99 | taintedList : ArrayList [] : String | provenance | | | TextStringBuilderTest.java:74:13:74:23 | taintedList [post update] : ArrayList [] : String | TextStringBuilderTest.java:76:89:76:99 | taintedList : ArrayList [] : String | provenance | | | TextStringBuilderTest.java:74:29:74:35 | taint(...) : String | TextStringBuilderTest.java:74:13:74:23 | taintedList [post update] : ArrayList [] : String | provenance | MaD:11 | | TextStringBuilderTest.java:75:63:75:66 | sb40 [post update] : TextStringBuilder | TextStringBuilderTest.java:75:114:75:117 | sb40 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:75:89:75:99 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:75:63:75:66 | sb40 [post update] : TextStringBuilder | provenance | MaD:597 | -| TextStringBuilderTest.java:75:114:75:117 | sb40 : TextStringBuilder | TextStringBuilderTest.java:75:114:75:128 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:75:114:75:117 | sb40 : TextStringBuilder | TextStringBuilderTest.java:75:114:75:128 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:75:114:75:117 | sb40 : TextStringBuilder | TextStringBuilderTest.java:75:114:75:128 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:76:63:76:66 | sb41 [post update] : TextStringBuilder | TextStringBuilderTest.java:76:125:76:128 | sb41 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:76:89:76:99 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:76:89:76:110 | iterator(...) : Iterator [] : String | provenance | MaD:7 | +| TextStringBuilderTest.java:76:89:76:99 | taintedList : ArrayList [] : String | TextStringBuilderTest.java:76:89:76:110 | iterator(...) : Iterator [] : String | provenance | MaD:6 | | TextStringBuilderTest.java:76:89:76:110 | iterator(...) : Iterator [] : String | TextStringBuilderTest.java:76:63:76:66 | sb41 [post update] : TextStringBuilder | provenance | MaD:598 | -| TextStringBuilderTest.java:76:125:76:128 | sb41 : TextStringBuilder | TextStringBuilderTest.java:76:125:76:139 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:76:125:76:128 | sb41 : TextStringBuilder | TextStringBuilderTest.java:76:125:76:139 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:76:125:76:128 | sb41 : TextStringBuilder | TextStringBuilderTest.java:76:125:76:139 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:78:63:78:66 | sb42 [post update] : TextStringBuilder | TextStringBuilderTest.java:78:119:78:122 | sb42 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:78:104:78:110 | taint(...) : String | TextStringBuilderTest.java:78:63:78:66 | sb42 [post update] : TextStringBuilder | provenance | MaD:596 | -| TextStringBuilderTest.java:78:119:78:122 | sb42 : TextStringBuilder | TextStringBuilderTest.java:78:119:78:133 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:78:119:78:122 | sb42 : TextStringBuilder | TextStringBuilderTest.java:78:119:78:133 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:78:119:78:122 | sb42 : TextStringBuilder | TextStringBuilderTest.java:78:119:78:133 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:79:63:79:66 | sb43 [post update] : TextStringBuilder | TextStringBuilderTest.java:79:130:79:133 | sb43 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:79:115:79:121 | taint(...) : String | TextStringBuilderTest.java:79:63:79:66 | sb43 [post update] : TextStringBuilder | provenance | MaD:596 | -| TextStringBuilderTest.java:79:130:79:133 | sb43 : TextStringBuilder | TextStringBuilderTest.java:79:130:79:144 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:79:130:79:133 | sb43 : TextStringBuilder | TextStringBuilderTest.java:79:130:79:144 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:79:130:79:133 | sb43 : TextStringBuilder | TextStringBuilderTest.java:79:130:79:144 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:80:37:80:60 | {...} : String[] [[]] : String | TextStringBuilderTest.java:82:89:82:100 | taintedArray : String[] [[]] : String | provenance | | | TextStringBuilderTest.java:80:52:80:58 | taint(...) : String | TextStringBuilderTest.java:80:37:80:60 | {...} : String[] [[]] : String | provenance | | | TextStringBuilderTest.java:82:63:82:66 | sb44 [post update] : TextStringBuilder | TextStringBuilderTest.java:82:115:82:118 | sb44 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:82:89:82:100 | taintedArray : String[] [[]] : String | TextStringBuilderTest.java:82:63:82:66 | sb44 [post update] : TextStringBuilder | provenance | MaD:599 | -| TextStringBuilderTest.java:82:115:82:118 | sb44 : TextStringBuilder | TextStringBuilderTest.java:82:115:82:129 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:82:115:82:118 | sb44 : TextStringBuilder | TextStringBuilderTest.java:82:115:82:129 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:82:115:82:118 | sb44 : TextStringBuilder | TextStringBuilderTest.java:82:115:82:129 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:83:63:83:66 | sb45 [post update] : TextStringBuilder | TextStringBuilderTest.java:83:120:83:123 | sb45 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:83:105:83:111 | taint(...) : String | TextStringBuilderTest.java:83:63:83:66 | sb45 [post update] : TextStringBuilder | provenance | MaD:596 | -| TextStringBuilderTest.java:83:120:83:123 | sb45 : TextStringBuilder | TextStringBuilderTest.java:83:120:83:134 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:83:120:83:123 | sb45 : TextStringBuilder | TextStringBuilderTest.java:83:120:83:134 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:83:120:83:123 | sb45 : TextStringBuilder | TextStringBuilderTest.java:83:120:83:134 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:86:63:86:66 | sb46 [post update] : TextStringBuilder | TextStringBuilderTest.java:88:13:88:16 | sb46 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:86:75:86:81 | taint(...) : String | TextStringBuilderTest.java:86:63:86:66 | sb46 [post update] : TextStringBuilder | provenance | MaD:568 | | TextStringBuilderTest.java:88:13:88:16 | sb46 : TextStringBuilder | TextStringBuilderTest.java:88:13:88:27 | asReader(...) : Reader | provenance | MaD:613 | -| TextStringBuilderTest.java:88:13:88:27 | asReader(...) : Reader | TextStringBuilderTest.java:88:34:88:39 | target [post update] : char[] | provenance | MaD:2 | +| TextStringBuilderTest.java:88:13:88:27 | asReader(...) : Reader | TextStringBuilderTest.java:88:34:88:39 | target [post update] : char[] | provenance | MaD:1 | | TextStringBuilderTest.java:88:34:88:39 | target [post update] : char[] | TextStringBuilderTest.java:89:18:89:23 | target | provenance | | | TextStringBuilderTest.java:91:59:91:62 | sb47 [post update] : TextStringBuilder | TextStringBuilderTest.java:91:86:91:89 | sb47 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:91:71:91:77 | taint(...) : String | TextStringBuilderTest.java:91:59:91:62 | sb47 [post update] : TextStringBuilder | provenance | MaD:568 | @@ -3038,23 +3038,23 @@ edges | TextStringBuilderTest.java:103:13:103:16 | sb51 : TextStringBuilder | TextStringBuilderTest.java:103:33:103:38 | target [post update] : char[] | provenance | MaD:623 | | TextStringBuilderTest.java:103:33:103:38 | target [post update] : char[] | TextStringBuilderTest.java:104:18:104:23 | target | provenance | | | TextStringBuilderTest.java:106:59:106:62 | sb52 [post update] : TextStringBuilder | TextStringBuilderTest.java:106:103:106:106 | sb52 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:106:74:106:80 | taint(...) : String | TextStringBuilderTest.java:106:74:106:94 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:106:74:106:80 | taint(...) : String | TextStringBuilderTest.java:106:74:106:94 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:106:74:106:94 | toCharArray(...) : char[] | TextStringBuilderTest.java:106:59:106:62 | sb52 [post update] : TextStringBuilder | provenance | MaD:625 | -| TextStringBuilderTest.java:106:103:106:106 | sb52 : TextStringBuilder | TextStringBuilderTest.java:106:103:106:117 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:106:103:106:106 | sb52 : TextStringBuilder | TextStringBuilderTest.java:106:103:106:117 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:106:103:106:106 | sb52 : TextStringBuilder | TextStringBuilderTest.java:106:103:106:117 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:107:59:107:62 | sb53 [post update] : TextStringBuilder | TextStringBuilderTest.java:107:109:107:112 | sb53 : TextStringBuilder | provenance | | -| TextStringBuilderTest.java:107:74:107:80 | taint(...) : String | TextStringBuilderTest.java:107:74:107:94 | toCharArray(...) : char[] | provenance | MaD:8 | +| TextStringBuilderTest.java:107:74:107:80 | taint(...) : String | TextStringBuilderTest.java:107:74:107:94 | toCharArray(...) : char[] | provenance | MaD:7 | | TextStringBuilderTest.java:107:74:107:94 | toCharArray(...) : char[] | TextStringBuilderTest.java:107:59:107:62 | sb53 [post update] : TextStringBuilder | provenance | MaD:625 | -| TextStringBuilderTest.java:107:109:107:112 | sb53 : TextStringBuilder | TextStringBuilderTest.java:107:109:107:123 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:107:109:107:112 | sb53 : TextStringBuilder | TextStringBuilderTest.java:107:109:107:123 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:107:109:107:112 | sb53 : TextStringBuilder | TextStringBuilderTest.java:107:109:107:123 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:108:59:108:62 | sb54 [post update] : TextStringBuilder | TextStringBuilderTest.java:108:89:108:92 | sb54 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:108:74:108:80 | taint(...) : String | TextStringBuilderTest.java:108:59:108:62 | sb54 [post update] : TextStringBuilder | provenance | MaD:625 | -| TextStringBuilderTest.java:108:89:108:92 | sb54 : TextStringBuilder | TextStringBuilderTest.java:108:89:108:103 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:108:89:108:92 | sb54 : TextStringBuilder | TextStringBuilderTest.java:108:89:108:103 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:108:89:108:92 | sb54 : TextStringBuilder | TextStringBuilderTest.java:108:89:108:103 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:109:59:109:62 | sb55 [post update] : TextStringBuilder | TextStringBuilderTest.java:109:97:109:100 | sb55 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:109:74:109:88 | (...)... : String | TextStringBuilderTest.java:109:59:109:62 | sb55 [post update] : TextStringBuilder | provenance | MaD:625 | | TextStringBuilderTest.java:109:82:109:88 | taint(...) : String | TextStringBuilderTest.java:109:74:109:88 | (...)... : String | provenance | | -| TextStringBuilderTest.java:109:97:109:100 | sb55 : TextStringBuilder | TextStringBuilderTest.java:109:97:109:111 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:109:97:109:100 | sb55 : TextStringBuilder | TextStringBuilderTest.java:109:97:109:111 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:109:97:109:100 | sb55 : TextStringBuilder | TextStringBuilderTest.java:109:97:109:111 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:110:59:110:62 | sb56 [post update] : TextStringBuilder | TextStringBuilderTest.java:110:86:110:89 | sb56 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:110:71:110:77 | taint(...) : String | TextStringBuilderTest.java:110:59:110:62 | sb56 [post update] : TextStringBuilder | provenance | MaD:568 | @@ -3063,41 +3063,41 @@ edges | TextStringBuilderTest.java:111:71:111:77 | taint(...) : String | TextStringBuilderTest.java:111:59:111:62 | sb57 [post update] : TextStringBuilder | provenance | MaD:568 | | TextStringBuilderTest.java:111:86:111:89 | sb57 : TextStringBuilder | TextStringBuilderTest.java:111:86:111:105 | midString(...) | provenance | MaD:627 | | TextStringBuilderTest.java:113:35:113:59 | new StringReader(...) : StringReader | TextStringBuilderTest.java:114:77:114:82 | reader : StringReader | provenance | | -| TextStringBuilderTest.java:113:52:113:58 | taint(...) : String | TextStringBuilderTest.java:113:35:113:59 | new StringReader(...) : StringReader | provenance | MaD:3 | +| TextStringBuilderTest.java:113:52:113:58 | taint(...) : String | TextStringBuilderTest.java:113:35:113:59 | new StringReader(...) : StringReader | provenance | MaD:2 | | TextStringBuilderTest.java:114:63:114:66 | sb58 [post update] : TextStringBuilder | TextStringBuilderTest.java:114:91:114:94 | sb58 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:114:77:114:82 | reader : StringReader | TextStringBuilderTest.java:114:63:114:66 | sb58 [post update] : TextStringBuilder | provenance | MaD:629 | -| TextStringBuilderTest.java:114:91:114:94 | sb58 : TextStringBuilder | TextStringBuilderTest.java:114:91:114:105 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:114:91:114:94 | sb58 : TextStringBuilder | TextStringBuilderTest.java:114:91:114:105 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:114:91:114:94 | sb58 : TextStringBuilder | TextStringBuilderTest.java:114:91:114:105 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:116:59:116:62 | sb59 [post update] : TextStringBuilder | TextStringBuilderTest.java:116:93:116:96 | sb59 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:116:78:116:84 | taint(...) : String | TextStringBuilderTest.java:116:59:116:62 | sb59 [post update] : TextStringBuilder | provenance | MaD:631 | -| TextStringBuilderTest.java:116:93:116:96 | sb59 : TextStringBuilder | TextStringBuilderTest.java:116:93:116:107 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:116:93:116:96 | sb59 : TextStringBuilder | TextStringBuilderTest.java:116:93:116:107 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:116:93:116:96 | sb59 : TextStringBuilder | TextStringBuilderTest.java:116:93:116:107 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:117:59:117:62 | sb60 [post update] : TextStringBuilder | TextStringBuilderTest.java:117:102:117:105 | sb60 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:117:78:117:84 | taint(...) : String | TextStringBuilderTest.java:117:59:117:62 | sb60 [post update] : TextStringBuilder | provenance | MaD:632 | -| TextStringBuilderTest.java:117:102:117:105 | sb60 : TextStringBuilder | TextStringBuilderTest.java:117:102:117:116 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:117:102:117:105 | sb60 : TextStringBuilder | TextStringBuilderTest.java:117:102:117:116 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:117:102:117:105 | sb60 : TextStringBuilder | TextStringBuilderTest.java:117:102:117:116 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:118:59:118:62 | sb61 [post update] : TextStringBuilder | TextStringBuilderTest.java:118:111:118:114 | sb61 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:118:96:118:102 | taint(...) : String | TextStringBuilderTest.java:118:59:118:62 | sb61 [post update] : TextStringBuilder | provenance | MaD:634 | -| TextStringBuilderTest.java:118:111:118:114 | sb61 : TextStringBuilder | TextStringBuilderTest.java:118:111:118:125 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:118:111:118:114 | sb61 : TextStringBuilder | TextStringBuilderTest.java:118:111:118:125 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:118:111:118:114 | sb61 : TextStringBuilder | TextStringBuilderTest.java:118:111:118:125 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:119:59:119:62 | sb62 [post update] : TextStringBuilder | TextStringBuilderTest.java:119:100:119:103 | sb62 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:119:85:119:91 | taint(...) : String | TextStringBuilderTest.java:119:59:119:62 | sb62 [post update] : TextStringBuilder | provenance | MaD:634 | -| TextStringBuilderTest.java:119:100:119:103 | sb62 : TextStringBuilder | TextStringBuilderTest.java:119:100:119:114 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:119:100:119:103 | sb62 : TextStringBuilder | TextStringBuilderTest.java:119:100:119:114 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:119:100:119:103 | sb62 : TextStringBuilder | TextStringBuilderTest.java:119:100:119:114 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:121:59:121:62 | sb64 [post update] : TextStringBuilder | TextStringBuilderTest.java:121:113:121:116 | sb64 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:121:98:121:104 | taint(...) : String | TextStringBuilderTest.java:121:59:121:62 | sb64 [post update] : TextStringBuilder | provenance | MaD:636 | -| TextStringBuilderTest.java:121:113:121:116 | sb64 : TextStringBuilder | TextStringBuilderTest.java:121:113:121:127 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:121:113:121:116 | sb64 : TextStringBuilder | TextStringBuilderTest.java:121:113:121:127 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:121:113:121:116 | sb64 : TextStringBuilder | TextStringBuilderTest.java:121:113:121:127 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:122:59:122:62 | sb65 [post update] : TextStringBuilder | TextStringBuilderTest.java:122:102:122:105 | sb65 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:122:87:122:93 | taint(...) : String | TextStringBuilderTest.java:122:59:122:62 | sb65 [post update] : TextStringBuilder | provenance | MaD:636 | -| TextStringBuilderTest.java:122:102:122:105 | sb65 : TextStringBuilder | TextStringBuilderTest.java:122:102:122:116 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:122:102:122:105 | sb65 : TextStringBuilder | TextStringBuilderTest.java:122:102:122:116 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:122:102:122:105 | sb65 : TextStringBuilder | TextStringBuilderTest.java:122:102:122:116 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:124:59:124:62 | sb67 [post update] : TextStringBuilder | TextStringBuilderTest.java:124:86:124:89 | sb67 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:124:71:124:77 | taint(...) : String | TextStringBuilderTest.java:124:59:124:62 | sb67 [post update] : TextStringBuilder | provenance | MaD:568 | | TextStringBuilderTest.java:124:86:124:89 | sb67 : TextStringBuilder | TextStringBuilderTest.java:124:86:124:104 | rightString(...) | provenance | MaD:638 | | TextStringBuilderTest.java:125:59:125:62 | sb68 [post update] : TextStringBuilder | TextStringBuilderTest.java:125:86:125:89 | sb68 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:125:71:125:77 | taint(...) : String | TextStringBuilderTest.java:125:59:125:62 | sb68 [post update] : TextStringBuilder | provenance | MaD:568 | -| TextStringBuilderTest.java:125:86:125:89 | sb68 : TextStringBuilder | TextStringBuilderTest.java:125:86:125:107 | subSequence(...) | provenance | MaD:5 | +| TextStringBuilderTest.java:125:86:125:89 | sb68 : TextStringBuilder | TextStringBuilderTest.java:125:86:125:107 | subSequence(...) | provenance | MaD:4 | | TextStringBuilderTest.java:125:86:125:89 | sb68 : TextStringBuilder | TextStringBuilderTest.java:125:86:125:107 | subSequence(...) | provenance | MaD:643 | | TextStringBuilderTest.java:126:59:126:62 | sb69 [post update] : TextStringBuilder | TextStringBuilderTest.java:126:86:126:89 | sb69 : TextStringBuilder | provenance | | | TextStringBuilderTest.java:126:71:126:77 | taint(...) : String | TextStringBuilderTest.java:126:59:126:62 | sb69 [post update] : TextStringBuilder | provenance | MaD:568 | @@ -3118,16 +3118,16 @@ edges | TextStringBuilderTest.java:131:71:131:77 | taint(...) : String | TextStringBuilderTest.java:131:59:131:62 | sb74 [post update] : TextStringBuilder | provenance | MaD:568 | | TextStringBuilderTest.java:131:86:131:89 | sb74 : TextStringBuilder | TextStringBuilderTest.java:131:86:131:107 | toStringBuilder(...) | provenance | MaD:648 | | TextStringBuilderTest.java:136:14:136:58 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | provenance | MaD:562 | -| TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:93 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:93 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:93 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:136:51:136:57 | taint(...) : String | TextStringBuilderTest.java:136:14:136:58 | append(...) : TextStringBuilder | provenance | MaD:568+MaD:562 | | TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | provenance | MaD:562 | | TextStringBuilderTest.java:139:54:139:60 | taint(...) : String | TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | provenance | MaD:568 | -| TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | TextStringBuilderTest.java:140:14:140:42 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | TextStringBuilderTest.java:140:14:140:42 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | TextStringBuilderTest.java:140:14:140:42 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | provenance | MaD:562 | | TextStringBuilderTest.java:144:55:144:61 | taint(...) : String | TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | provenance | MaD:568 | -| TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | TextStringBuilderTest.java:145:14:145:43 | toString(...) | provenance | MaD:6 | +| TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | TextStringBuilderTest.java:145:14:145:43 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | TextStringBuilderTest.java:145:14:145:43 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:148:50:148:79 | new TextStringBuilder(...) : TextStringBuilder | TextStringBuilderTest.java:149:14:149:33 | fluentAllMethodsTest : TextStringBuilder | provenance | | | TextStringBuilderTest.java:148:72:148:78 | taint(...) : String | TextStringBuilderTest.java:148:50:148:79 | new TextStringBuilder(...) : TextStringBuilder | provenance | MaD:561 | @@ -3198,7 +3198,7 @@ edges | ToStringBuilderTest.java:21:71:21:85 | (...)... : String | ToStringBuilderTest.java:21:59:21:62 | sb11 [post update] : ToStringBuilder | provenance | MaD:20 | | ToStringBuilderTest.java:21:79:21:85 | taint(...) : String | ToStringBuilderTest.java:21:71:21:85 | (...)... : String | provenance | | | ToStringBuilderTest.java:21:94:21:97 | sb11 : ToStringBuilder | ToStringBuilderTest.java:21:94:21:115 | getStringBuffer(...) : StringBuffer | provenance | MaD:29 | -| ToStringBuilderTest.java:21:94:21:115 | getStringBuffer(...) : StringBuffer | ToStringBuilderTest.java:21:94:21:126 | toString(...) | provenance | MaD:6 | +| ToStringBuilderTest.java:21:94:21:115 | getStringBuffer(...) : StringBuffer | ToStringBuilderTest.java:21:94:21:126 | toString(...) | provenance | MaD:5 | | ToStringBuilderTest.java:25:14:25:58 | append(...) : ToStringBuilder | ToStringBuilderTest.java:25:14:25:82 | append(...) : ToStringBuilder | provenance | MaD:19 | | ToStringBuilderTest.java:25:14:25:82 | append(...) : ToStringBuilder | ToStringBuilderTest.java:25:14:25:93 | toString(...) | provenance | MaD:30 | | ToStringBuilderTest.java:25:51:25:57 | taint(...) : String | ToStringBuilderTest.java:25:14:25:58 | append(...) : ToStringBuilder | provenance | MaD:20+MaD:19 | From 43b52a09213d4c5da5d52188c1f8941844f51a97 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 20 Aug 2024 15:57:24 +0200 Subject: [PATCH 205/334] Java: Add change note. --- java/ql/lib/change-notes/2024-08-20-dataflow-dispatch.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-08-20-dataflow-dispatch.md diff --git a/java/ql/lib/change-notes/2024-08-20-dataflow-dispatch.md b/java/ql/lib/change-notes/2024-08-20-dataflow-dispatch.md new file mode 100644 index 00000000000..b67cea4c8ba --- /dev/null +++ b/java/ql/lib/change-notes/2024-08-20-dataflow-dispatch.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* A generated (Models as Data) summary model is no longer used, if there exists a source code alternative. This primarily affects the analysis, when the analysis includes generated models for the source code being analysed. From 021fd1450ea7eb4db578035153b2d179fa523f66 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Aug 2024 11:43:06 +0200 Subject: [PATCH 206/334] Java: Add some dispatch examples to the external flow step test. --- .../dataflow/external-models/C.java | 32 +++++++++++++++++++ .../dataflow/external-models/steps.ext.yml | 2 ++ .../external-models/stubs/Library.java | 4 +++ 3 files changed, 38 insertions(+) diff --git a/java/ql/test/library-tests/dataflow/external-models/C.java b/java/ql/test/library-tests/dataflow/external-models/C.java index c0270dbe9f1..79d43480703 100644 --- a/java/ql/test/library-tests/dataflow/external-models/C.java +++ b/java/ql/test/library-tests/dataflow/external-models/C.java @@ -56,6 +56,24 @@ public class C { lib.apiStepArgQualGeneratedIgnored(arg1); } + void fooPossibleLibraryDispatch(Library lib) { + Object arg1 = new Object(); + + lib.id(arg1); + } + + void fooExplicitDispatch() { + Object arg1 = new Object(); + + MyLibrary lib = new MyLibrary(); + + lib.id(arg1); + } + + void fooGeneric(MyGenericLibrary lib) { + lib.get(); + } + Object stepArgRes(Object x) { return null; } @@ -73,4 +91,18 @@ public class C { Object stepArgResGenerated(Object x) { return null; } + + class MyLibrary extends Library { + @Override + // Bad implementation of the id function. + public Object id(Object x) { + return null; + } + } + + public class MyGenericLibrary { + public T get() { + return null; + } + } } diff --git a/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml b/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml index fbfcf0536ae..a0f01e48d51 100644 --- a/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml +++ b/java/ql/test/library-tests/dataflow/external-models/steps.ext.yml @@ -9,11 +9,13 @@ extensions: - ["my.qltest", "C", False, "stepQualRes", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["my.qltest", "C", False, "stepQualArg", "(Object)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["my.qltest", "C", False, "stepArgResGenerated", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["my.qltest", "C$MyGenericLibrary", True, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["my.qltest.external", "Library", False, "apiStepArgResGenerated", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["my.qltest.external", "Library", False, "apiStepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["my.qltest.external", "Library", False, "apiStepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "manual"] - ["my.qltest.external", "Library", False, "apiStepArgQualGenerated", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["my.qltest.external", "Library", False, "apiStepArgQualGeneratedIgnored", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["my.qltest.external", "Library", False, "id", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java b/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java index 945d8671b39..2515c8aebfa 100644 --- a/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java +++ b/java/ql/test/library-tests/dataflow/external-models/stubs/Library.java @@ -16,4 +16,8 @@ public class Library { public Object apiStepArgQualGeneratedIgnored(Object x) { return null; } + + public Object id(Object x) { + return null; + } } From 8f734ad1b2b2869430ed7436b38e9a6d1c072854 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Aug 2024 11:43:47 +0200 Subject: [PATCH 207/334] Java: Tighten the criteria for when we disregard generated models. --- .../code/java/dataflow/internal/DataFlowDispatch.qll | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll index 775d3c0067b..633a8cd3472 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll @@ -45,7 +45,7 @@ private module DispatchImpl { * The following heuristic is applied for finding the appropriate callable: * 1. If an exact manual model exists, only dispatch to the summarized callable. * 2. If a (non exact) manual model exists and/or if the source code is available, dispatch to both/either. - * 3. Only dispatch to a summarized callable (based on a generated model) if neither of the above apply. + * 3. Only dispatch to a summarized callable in case the static call target in not in source. */ DataFlowCallable viableCallable(DataFlowCall c) { exists(Call call | call = c.asCall() | @@ -53,11 +53,11 @@ private module DispatchImpl { or not ( // Only use summarized callables with generated summaries in case - // we are not able to dispatch to a source declaration. + // the static call target is not in the source code. // Note that if applyGeneratedModel holds it implies that there doesn't - // exist a manual (exact) model. - exists(Callable callable | callable = sourceDispatch(call) | - callable.fromSource() and not callable.isStub() + // exist a manual model. + exists(Callable staticTarget | staticTarget = call.getCallee().getSourceDeclaration() | + staticTarget.fromSource() and not staticTarget.isStub() ) and result.asSummarizedCallable().applyGeneratedModel() ) and From 15b06907ddd8b45491f4de1e7e6401c48009aa97 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Aug 2024 11:51:16 +0200 Subject: [PATCH 208/334] Java: Updated expected test output. --- .../test/library-tests/dataflow/external-models/steps.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/test/library-tests/dataflow/external-models/steps.expected b/java/ql/test/library-tests/dataflow/external-models/steps.expected index e9cbb7ec99e..37d38018502 100644 --- a/java/ql/test/library-tests/dataflow/external-models/steps.expected +++ b/java/ql/test/library-tests/dataflow/external-models/steps.expected @@ -11,3 +11,4 @@ invalidModelRow | C.java:44:32:44:35 | arg1 | C.java:44:5:44:36 | apiStepArgResGenerated(...) | | C.java:50:45:50:48 | arg2 | C.java:50:5:50:49 | apiStepArgResGeneratedIgnored(...) | | C.java:52:33:52:36 | arg1 | C.java:52:5:52:7 | lib [post update] | +| C.java:62:12:62:15 | arg1 | C.java:62:5:62:16 | id(...) | From 1cb23e7e8650c39f41c08097d1315424bad9073f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 27 Aug 2024 13:16:10 +0100 Subject: [PATCH 209/334] Exclude certificates from being cinsidered sensitive data by cleartext-storage and cleartext-logging queries --- .../security/dataflow/CleartextLoggingCustomizations.qll | 3 ++- .../security/dataflow/CleartextStorageCustomizations.qll | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll index ae61bd04314..d794b024996 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll @@ -41,7 +41,8 @@ module CleartextLogging { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() = SensitiveDataClassification::id() + not SensitiveDataSource.super.getClassification() = + [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] } override SensitiveDataClassification getClassification() { diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll index 001b9395ef4..ebe70bc1b59 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll @@ -40,7 +40,8 @@ module CleartextStorage { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() = SensitiveDataClassification::id() + not SensitiveDataSource.super.getClassification() = + [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] } override SensitiveDataClassification getClassification() { From fc24ca304d141b02797fc88f5370078bdc1257e8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 27 Aug 2024 14:03:01 +0100 Subject: [PATCH 210/334] Update tests --- .../CleartextLogging.expected | 2 -- .../Security/CWE-312-CleartextLogging/test.py | 6 ++--- .../CleartextStorage.expected | 22 +++++++++---------- .../Security/CWE-312-CleartextStorage/test.py | 11 +++++++++- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected index 1322f5b80e6..dca1a33e73a 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/CleartextLogging.expected @@ -30,7 +30,6 @@ nodes | test.py:23:58:23:65 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | test.py:27:40:27:47 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | test.py:30:58:30:65 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | -| test.py:34:30:34:39 | ControlFlowNode for get_cert() | semmle.label | ControlFlowNode for get_cert() | | test.py:37:11:37:24 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | | test.py:39:22:39:35 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | | test.py:40:22:40:35 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | @@ -73,7 +72,6 @@ subpaths | test.py:23:58:23:65 | ControlFlowNode for password | test.py:19:16:19:29 | ControlFlowNode for get_password() | test.py:23:58:23:65 | ControlFlowNode for password | This expression logs $@ as clear text. | test.py:19:16:19:29 | ControlFlowNode for get_password() | sensitive data (password) | | test.py:27:40:27:47 | ControlFlowNode for password | test.py:19:16:19:29 | ControlFlowNode for get_password() | test.py:27:40:27:47 | ControlFlowNode for password | This expression logs $@ as clear text. | test.py:19:16:19:29 | ControlFlowNode for get_password() | sensitive data (password) | | test.py:30:58:30:65 | ControlFlowNode for password | test.py:19:16:19:29 | ControlFlowNode for get_password() | test.py:30:58:30:65 | ControlFlowNode for password | This expression logs $@ as clear text. | test.py:19:16:19:29 | ControlFlowNode for get_password() | sensitive data (password) | -| test.py:34:30:34:39 | ControlFlowNode for get_cert() | test.py:34:30:34:39 | ControlFlowNode for get_cert() | test.py:34:30:34:39 | ControlFlowNode for get_cert() | This expression logs $@ as clear text. | test.py:34:30:34:39 | ControlFlowNode for get_cert() | sensitive data (certificate) | | test.py:37:11:37:24 | ControlFlowNode for get_password() | test.py:37:11:37:24 | ControlFlowNode for get_password() | test.py:37:11:37:24 | ControlFlowNode for get_password() | This expression logs $@ as clear text. | test.py:37:11:37:24 | ControlFlowNode for get_password() | sensitive data (password) | | test.py:39:22:39:35 | ControlFlowNode for get_password() | test.py:39:22:39:35 | ControlFlowNode for get_password() | test.py:39:22:39:35 | ControlFlowNode for get_password() | This expression logs $@ as clear text. | test.py:39:22:39:35 | ControlFlowNode for get_password() | sensitive data (password) | | test.py:40:22:40:35 | ControlFlowNode for get_password() | test.py:40:22:40:35 | ControlFlowNode for get_password() | test.py:40:22:40:35 | ControlFlowNode for get_password() | This expression logs $@ as clear text. | test.py:40:22:40:35 | ControlFlowNode for get_password() | sensitive data (password) | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/test.py b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/test.py index 94a8c9db836..d8d70c56bd5 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/test.py +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextLogging/test.py @@ -31,7 +31,7 @@ def log_password(): def log_cert(): - logging.debug("Cert=%s", get_cert()) # NOT OK + logging.debug("Cert=%s", get_cert()) # OK def print_password(): print(get_password()) # NOT OK @@ -52,8 +52,8 @@ def log_private(): print(passportNo) # NOT OK def log2(post_code, zipCode, home_address): - print(post_code) # NOT OK, but NOT FOUND - "code" is treated as enxrypted and thus not sensitive - print(zipCode) # NOT OK, but NOT FOUND - "code" is treated as enxrypted and thus not sensitive + print(post_code) # NOT OK, but NOT FOUND - "code" is treated as encrypted and thus not sensitive + print(zipCode) # NOT OK, but NOT FOUND - "code" is treated as encrypted and thus not sensitive print(home_address) # NOT OK def log3(user_latitude, user_longitude): diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected index eac0bd37b1b..c3c1206ce92 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/CleartextStorage.expected @@ -3,10 +3,10 @@ edges | password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | provenance | | | password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | provenance | | | password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | provenance | | -| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:8:20:8:23 | ControlFlowNode for cert | provenance | | -| test.py:6:5:6:8 | ControlFlowNode for cert | test.py:9:9:9:13 | ControlFlowNode for lines | provenance | | -| test.py:6:12:6:21 | ControlFlowNode for get_cert() | test.py:6:5:6:8 | ControlFlowNode for cert | provenance | | -| test.py:9:9:9:13 | ControlFlowNode for lines | test.py:10:25:10:29 | ControlFlowNode for lines | provenance | | +| test.py:15:5:15:12 | ControlFlowNode for password | test.py:17:20:17:27 | ControlFlowNode for password | provenance | | +| test.py:15:5:15:12 | ControlFlowNode for password | test.py:18:9:18:13 | ControlFlowNode for lines | provenance | | +| test.py:15:16:15:29 | ControlFlowNode for get_password() | test.py:15:5:15:12 | ControlFlowNode for password | provenance | | +| test.py:18:9:18:13 | ControlFlowNode for lines | test.py:19:25:19:29 | ControlFlowNode for lines | provenance | | nodes | password_in_cookie.py:7:5:7:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | @@ -14,14 +14,14 @@ nodes | password_in_cookie.py:14:5:14:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | | password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | -| test.py:6:5:6:8 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | -| test.py:6:12:6:21 | ControlFlowNode for get_cert() | semmle.label | ControlFlowNode for get_cert() | -| test.py:8:20:8:23 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | -| test.py:9:9:9:13 | ControlFlowNode for lines | semmle.label | ControlFlowNode for lines | -| test.py:10:25:10:29 | ControlFlowNode for lines | semmle.label | ControlFlowNode for lines | +| test.py:15:5:15:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | +| test.py:15:16:15:29 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | +| test.py:17:20:17:27 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | +| test.py:18:9:18:13 | ControlFlowNode for lines | semmle.label | ControlFlowNode for lines | +| test.py:19:25:19:29 | ControlFlowNode for lines | semmle.label | ControlFlowNode for lines | subpaths #select | password_in_cookie.py:9:33:9:40 | ControlFlowNode for password | password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | password_in_cookie.py:9:33:9:40 | ControlFlowNode for password | This expression stores $@ as clear text. | password_in_cookie.py:7:16:7:43 | ControlFlowNode for Attribute() | sensitive data (password) | | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | password_in_cookie.py:16:33:16:40 | ControlFlowNode for password | This expression stores $@ as clear text. | password_in_cookie.py:14:16:14:43 | ControlFlowNode for Attribute() | sensitive data (password) | -| test.py:8:20:8:23 | ControlFlowNode for cert | test.py:6:12:6:21 | ControlFlowNode for get_cert() | test.py:8:20:8:23 | ControlFlowNode for cert | This expression stores $@ as clear text. | test.py:6:12:6:21 | ControlFlowNode for get_cert() | sensitive data (certificate) | -| test.py:10:25:10:29 | ControlFlowNode for lines | test.py:6:12:6:21 | ControlFlowNode for get_cert() | test.py:10:25:10:29 | ControlFlowNode for lines | This expression stores $@ as clear text. | test.py:6:12:6:21 | ControlFlowNode for get_cert() | sensitive data (certificate) | +| test.py:17:20:17:27 | ControlFlowNode for password | test.py:15:16:15:29 | ControlFlowNode for get_password() | test.py:17:20:17:27 | ControlFlowNode for password | This expression stores $@ as clear text. | test.py:15:16:15:29 | ControlFlowNode for get_password() | sensitive data (password) | +| test.py:19:25:19:29 | ControlFlowNode for lines | test.py:15:16:15:29 | ControlFlowNode for get_password() | test.py:19:25:19:29 | ControlFlowNode for lines | This expression stores $@ as clear text. | test.py:15:16:15:29 | ControlFlowNode for get_password() | sensitive data (password) | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/test.py b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/test.py index f232f1a2ad6..6d04aa4b170 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/test.py +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage/test.py @@ -1,12 +1,21 @@ def get_cert(): return "" +def get_password(): + return "password" def write_cert(filename): cert = get_cert() with open(filename, "w") as file: - file.write(cert) # NOT OK + file.write(cert) # OK lines = [cert + "\n"] + file.writelines(lines) # OK + +def write_password(filename): + password = get_password() + with open(filename, "w") as file: + file.write(password) # NOT OK + lines = [password + "\n"] file.writelines(lines) # NOT OK def FPs(): From 80b6135a64d0acbdcd1a6bfe40bb896e710940e6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 27 Aug 2024 14:48:57 +0200 Subject: [PATCH 211/334] Data flow: Move `toNormalSinkNodeEx` into `PathNodeMid` --- .../codeql/dataflow/internal/DataFlowImpl.qll | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 75ccdbecf9f..3af2de29cc1 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -246,16 +246,6 @@ module MakeImpl Lang> { ReturnKindExt getKind() { result = pos.getKind() } } - /** If `node` corresponds to a sink, gets the normal node for that sink. */ - pragma[nomagic] - private NodeEx toNormalSinkNodeEx(NodeEx node) { - exists(Node n | - node.asNodeOrImplicitRead() = n and - (Config::isSink(n) or Config::isSink(n, _)) and - result.asNode() = n - ) - } - private predicate inBarrier(NodeEx node) { exists(Node n | node.asNode() = n and @@ -2607,7 +2597,7 @@ module MakeImpl Lang> { TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | sink.isAtSink() and - node = toNormalSinkNodeEx(sink.getNodeEx()) and + node = sink.toNormalSinkNodeEx() and state = sink.getState() ) } or @@ -2734,6 +2724,16 @@ module MakeImpl Lang> { ) } + /** If this node corresponds to a sink, gets the normal node for that sink. */ + pragma[nomagic] + NodeEx toNormalSinkNodeEx() { + exists(Node n | + node.asNodeOrImplicitRead() = n and + (Config::isSink(n) or Config::isSink(n, _)) and + result.asNode() = n + ) + } + override PathNodeImpl getASuccessorImpl(string label) { // an intermediate step to another intermediate node exists(string l2 | result = this.getSuccMid(l2) | @@ -2825,7 +2825,7 @@ module MakeImpl Lang> { PathNodeSink projectToSink(string model) { this.isAtSink() and sinkModel(node, model) and - result.getNodeEx() = toNormalSinkNodeEx(node) and + result.getNodeEx() = this.toNormalSinkNodeEx() and result.getState() = state } } From b589fcad1124bb5b0fecd84fdf640a99d1f24da7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 27 Aug 2024 15:42:24 +0200 Subject: [PATCH 212/334] Data flow: Tweak join-order in `toNormalSinkNodeEx` --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 3af2de29cc1..dc0da810f11 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2728,7 +2728,7 @@ module MakeImpl Lang> { pragma[nomagic] NodeEx toNormalSinkNodeEx() { exists(Node n | - node.asNodeOrImplicitRead() = n and + pragma[only_bind_out](node.asNodeOrImplicitRead()) = n and (Config::isSink(n) or Config::isSink(n, _)) and result.asNode() = n ) From 0f44cd3f62fb3d0e308a0aab4bed49271e3536b4 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Tue, 27 Aug 2024 18:19:25 +0100 Subject: [PATCH 213/334] Revert "Release preparation for version 2.18.3" --- cpp/ql/lib/CHANGELOG.md | 4 ---- cpp/ql/lib/change-notes/released/1.4.1.md | 3 --- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 6 ------ ...=> 2024-08-16-uncontrolled-allocation-size.md} | 9 ++++----- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ---- .../lib/change-notes/released/1.7.23.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 ---- .../src/change-notes/released/1.7.23.md | 3 --- .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 ----------- .../2024-05-23-static-field-side-effect.md | 4 ++++ .../2024-07-10-conditional-compilation.md | 4 ++++ .../lib/change-notes/2024-07-19-added-sources.md | 4 ++++ csharp/ql/lib/change-notes/released/1.1.0.md | 10 ---------- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 7 ------- .../2024-08-07-db-quality-diagnostic.md | 4 ++++ .../src/change-notes/2024-08-12-doc-comments.md | 4 ++++ csharp/ql/src/change-notes/released/1.0.6.md | 6 ------ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/1.0.6.md | 3 --- go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 14 -------------- .../2024-08-12-add-environment-models.md | 11 +++++++++++ .../1.1.5.md => 2024-08-12-add-file-models.md} | 15 +++------------ 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/1.0.6.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/1.0.6.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 12 ------------ .../2024-08-09-buildless-executable-war.md | 4 ++++ .../2024-08-09-buildless-gradle-classifiers.md | 4 ++++ .../change-notes/2024-08-13-stdin-threat-model.md | 4 ++++ .../2024-08-14-buildless-coder-malfunction.md | 4 ++++ java/ql/lib/change-notes/released/3.0.1.md | 11 ----------- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ---- java/ql/src/change-notes/released/1.1.3.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/1.1.3.md | 3 --- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 8 -------- ...2024-08-16-post-message-source-client-side.md} | 7 +++---- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ---- misc/suite-helpers/change-notes/released/1.0.6.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/1.0.6.md | 3 --- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ------ ...md => 2024-07-23-insecure-cookie-promotion.md} | 9 ++++----- 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/1.0.6.md | 3 --- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ---- ruby/ql/src/change-notes/released/1.1.1.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/1.0.6.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ------ ...0.md => 2024-08-20-remove-srcsink-grouping.md} | 7 +++---- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/1.0.6.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- .../rangeanalysis/change-notes/released/1.0.6.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/1.0.6.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/1.0.6.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/1.0.6.md | 3 --- shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ---- shared/tutorial/change-notes/released/1.0.6.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ---- shared/typeflow/change-notes/released/1.0.6.md | 3 --- shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- .../typetracking/change-notes/released/1.0.6.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/1.0.6.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/1.0.6.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ---- shared/xml/change-notes/released/1.0.6.md | 3 --- shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/1.0.6.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/1.1.2.md | 3 --- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 6 ------ ....6.md => 2024-08-12-cleartext-transmission.md} | 7 +++---- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 137 insertions(+), 389 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/released/1.4.1.md rename cpp/ql/src/change-notes/{released/1.2.1.md => 2024-08-16-uncontrolled-allocation-size.md} (70%) delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md create mode 100644 csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md create mode 100644 csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md create mode 100644 csharp/ql/lib/change-notes/2024-07-19-added-sources.md delete mode 100644 csharp/ql/lib/change-notes/released/1.1.0.md create mode 100644 csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md create mode 100644 csharp/ql/src/change-notes/2024-08-12-doc-comments.md delete mode 100644 csharp/ql/src/change-notes/released/1.0.6.md delete mode 100644 go/ql/consistency-queries/change-notes/released/1.0.6.md create mode 100644 go/ql/lib/change-notes/2024-08-12-add-environment-models.md rename go/ql/lib/change-notes/{released/1.1.5.md => 2024-08-12-add-file-models.md} (69%) delete mode 100644 go/ql/src/change-notes/released/1.0.6.md delete mode 100644 java/ql/automodel/src/change-notes/released/1.0.6.md create mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md create mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md create mode 100644 java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md create mode 100644 java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md delete mode 100644 java/ql/lib/change-notes/released/3.0.1.md delete mode 100644 java/ql/src/change-notes/released/1.1.3.md delete mode 100644 javascript/ql/lib/change-notes/released/1.1.3.md rename javascript/ql/src/change-notes/{released/1.1.2.md => 2024-08-16-post-message-source-client-side.md} (87%) delete mode 100644 misc/suite-helpers/change-notes/released/1.0.6.md delete mode 100644 python/ql/lib/change-notes/released/1.0.6.md rename python/ql/src/change-notes/{released/1.2.0.md => 2024-07-23-insecure-cookie-promotion.md} (85%) delete mode 100644 ruby/ql/lib/change-notes/released/1.0.6.md delete mode 100644 ruby/ql/src/change-notes/released/1.1.1.md delete mode 100644 shared/controlflow/change-notes/released/1.0.6.md rename shared/dataflow/change-notes/{released/1.1.0.md => 2024-08-20-remove-srcsink-grouping.md} (82%) delete mode 100644 shared/mad/change-notes/released/1.0.6.md delete mode 100644 shared/rangeanalysis/change-notes/released/1.0.6.md delete mode 100644 shared/regex/change-notes/released/1.0.6.md delete mode 100644 shared/ssa/change-notes/released/1.0.6.md delete mode 100644 shared/threat-models/change-notes/released/1.0.6.md delete mode 100644 shared/tutorial/change-notes/released/1.0.6.md delete mode 100644 shared/typeflow/change-notes/released/1.0.6.md delete mode 100644 shared/typetracking/change-notes/released/1.0.6.md delete mode 100644 shared/typos/change-notes/released/1.0.6.md delete mode 100644 shared/util/change-notes/released/1.0.6.md delete mode 100644 shared/xml/change-notes/released/1.0.6.md delete mode 100644 shared/yaml/change-notes/released/1.0.6.md delete mode 100644 swift/ql/lib/change-notes/released/1.1.2.md rename swift/ql/src/change-notes/{released/1.0.6.md => 2024-08-12-cleartext-transmission.md} (81%) diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index c66bc4a4552..646199bb39c 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.4.1 - -No user-facing changes. - ## 1.4.0 ### New Features diff --git a/cpp/ql/lib/change-notes/released/1.4.1.md b/cpp/ql/lib/change-notes/released/1.4.1.md deleted file mode 100644 index 38987aa49cd..00000000000 --- a/cpp/ql/lib/change-notes/released/1.4.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.4.1 - -No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 43ccf4467be..b8b2e97d508 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.1 +lastReleaseVersion: 1.4.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 0db1f9e8036..830e4f75408 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.4.1 +version: 1.4.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index d5e4575e097..25e322a99b7 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 1.2.1 - -### Minor Analysis Improvements - -* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. - ## 1.2.0 ### Query Metadata Changes diff --git a/cpp/ql/src/change-notes/released/1.2.1.md b/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md similarity index 70% rename from cpp/ql/src/change-notes/released/1.2.1.md rename to cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md index c7f2fafb36b..4d0d0593363 100644 --- a/cpp/ql/src/change-notes/released/1.2.1.md +++ b/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md @@ -1,5 +1,4 @@ -## 1.2.1 - -### Minor Analysis Improvements - -* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. +--- +category: minorAnalysis +--- +* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. \ 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 73dd403938c..75430e73d1c 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.2.0 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a0728a2475b..13d1448bf8d 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.1 +version: 1.2.1-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 18779106c78..eb7af5234e3 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.23 - -No user-facing changes. - ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md deleted file mode 100644 index 97c0d95c5c3..00000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.23 - -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 55921f9b14a..6a79a0ec163 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.23 +lastReleaseVersion: 1.7.22 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 0c04b5292ef..07db663f549 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.23 +version: 1.7.23-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 18779106c78..eb7af5234e3 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.23 - -No user-facing changes. - ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md deleted file mode 100644 index 97c0d95c5c3..00000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.23 - -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 55921f9b14a..6a79a0ec163 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.23 +lastReleaseVersion: 1.7.22 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 83d083f56c2..880aae8371f 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.23 +version: 1.7.23-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index a2aaab7a542..50a19e99d36 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 1.1.0 - -### Major Analysis Improvements - -* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. - -### Minor Analysis Improvements - -* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. -* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. - ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md b/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md new file mode 100644 index 00000000000..f41dfab76d4 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md b/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md new file mode 100644 index 00000000000..a4a59b2abea --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/change-notes/2024-07-19-added-sources.md b/csharp/ql/lib/change-notes/2024-07-19-added-sources.md new file mode 100644 index 00000000000..43e7b947a98 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-07-19-added-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. diff --git a/csharp/ql/lib/change-notes/released/1.1.0.md b/csharp/ql/lib/change-notes/released/1.1.0.md deleted file mode 100644 index a02581a221b..00000000000 --- a/csharp/ql/lib/change-notes/released/1.1.0.md +++ /dev/null @@ -1,10 +0,0 @@ -## 1.1.0 - -### Major Analysis Improvements - -* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. - -### Minor Analysis Improvements - -* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. -* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 2ac15439f56..42da17b3841 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.0.5 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 75d559a215d..2bba2984c8f 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.1.0 +version: 1.0.6-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 1b1d04129e2..bd25f8118dd 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 1.0.6 - -### Minor Analysis Improvements - -* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. - ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md b/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md new file mode 100644 index 00000000000..a22d136ce8b --- /dev/null +++ b/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2024-08-12-doc-comments.md b/csharp/ql/src/change-notes/2024-08-12-doc-comments.md new file mode 100644 index 00000000000..e4c49351f3a --- /dev/null +++ b/csharp/ql/src/change-notes/2024-08-12-doc-comments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/released/1.0.6.md b/csharp/ql/src/change-notes/released/1.0.6.md deleted file mode 100644 index c1454642823..00000000000 --- a/csharp/ql/src/change-notes/released/1.0.6.md +++ /dev/null @@ -1,6 +0,0 @@ -## 1.0.6 - -### Minor Analysis Improvements - -* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 975b56f78e4..51699111e25 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.6 +version: 1.0.6-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 6976ee14e27..2e7162889c3 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.6.md b/go/ql/consistency-queries/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/go/ql/consistency-queries/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -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 8033d980afa..42da17b3841 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index aaa6fc16d08..17f966d2c41 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.6 +version: 1.0.6-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index a4aa642333e..41cfec4595e 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,17 +1,3 @@ -## 1.1.5 - -### Minor Analysis Improvements - -* Local source models for reading and parsing environment variables have been added for the following libraries: - - os - - syscall - - github.com/caarlos0/env - - github.com/gobuffalo/envy - - github.com/hashicorp/go-envparse - - github.com/joho/godotenv - - github.com/kelseyhightower/envconfig -* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). - ## 1.1.4 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md new file mode 100644 index 00000000000..c511718475d --- /dev/null +++ b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md @@ -0,0 +1,11 @@ +--- +category: minorAnalysis +--- +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig diff --git a/go/ql/lib/change-notes/released/1.1.5.md b/go/ql/lib/change-notes/2024-08-12-add-file-models.md similarity index 69% rename from go/ql/lib/change-notes/released/1.1.5.md rename to go/ql/lib/change-notes/2024-08-12-add-file-models.md index 2ee8763424d..eed216dd361 100644 --- a/go/ql/lib/change-notes/released/1.1.5.md +++ b/go/ql/lib/change-notes/2024-08-12-add-file-models.md @@ -1,13 +1,4 @@ -## 1.1.5 - -### Minor Analysis Improvements - -* Local source models for reading and parsing environment variables have been added for the following libraries: - - os - - syscall - - github.com/caarlos0/env - - github.com/gobuffalo/envy - - github.com/hashicorp/go-envparse - - github.com/joho/godotenv - - github.com/kelseyhightower/envconfig +--- +category: minorAnalysis +--- * Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index df39a9de059..26cbcd3f123 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.5 +lastReleaseVersion: 1.1.4 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index cc840ed3854..5d56d0ecc73 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.5 +version: 1.1.5-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 88ad1b3ceec..36470f89eba 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.0.6.md b/go/ql/src/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/go/ql/src/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 8129981ba0a..4df9de83c21 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.6 +version: 1.0.6-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 3d5fc1f2229..7dc759d1ac6 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.6.md b/java/ql/automodel/src/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/java/ql/automodel/src/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -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 8033d980afa..42da17b3841 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 0bc0c8b24ac..fd277afd1d7 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: 1.0.6 +version: 1.0.6-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 608f229f028..2dd89daf33f 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,15 +1,3 @@ -## 3.0.1 - -### Minor Analysis Improvements - -* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). - -### Bug Fixes - -* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. -* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. -* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. - ## 3.0.0 ### Breaking Changes diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md b/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md new file mode 100644 index 00000000000..96088e50532 --- /dev/null +++ b/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md b/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md new file mode 100644 index 00000000000..d8ed932ecf2 --- /dev/null +++ b/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md b/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md new file mode 100644 index 00000000000..93d456dc2a3 --- /dev/null +++ b/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). diff --git a/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md b/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md new file mode 100644 index 00000000000..a84fec4c8f1 --- /dev/null +++ b/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. diff --git a/java/ql/lib/change-notes/released/3.0.1.md b/java/ql/lib/change-notes/released/3.0.1.md deleted file mode 100644 index 6c67dd0d9bf..00000000000 --- a/java/ql/lib/change-notes/released/3.0.1.md +++ /dev/null @@ -1,11 +0,0 @@ -## 3.0.1 - -### Minor Analysis Improvements - -* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). - -### Bug Fixes - -* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. -* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. -* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index e3b15d965db..33d3a2cd113 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.1 +lastReleaseVersion: 3.0.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 9fcae1be43e..3b1e06d84ae 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 3.0.1 +version: 3.0.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index f40eb15e63e..464768e3a7f 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.3 - -No user-facing changes. - ## 1.1.2 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.3.md b/java/ql/src/change-notes/released/1.1.3.md deleted file mode 100644 index e8f1701bd62..00000000000 --- a/java/ql/src/change-notes/released/1.1.3.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.3 - -No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 35e710ab1bf..53ab127707f 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.2 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 6cde17b60a0..32442dbf4d6 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.3 +version: 1.1.3-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 301a52e0d9d..134bbe39a69 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.3 - -No user-facing changes. - ## 1.1.2 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/1.1.3.md b/javascript/ql/lib/change-notes/released/1.1.3.md deleted file mode 100644 index e8f1701bd62..00000000000 --- a/javascript/ql/lib/change-notes/released/1.1.3.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.3 - -No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 35e710ab1bf..53ab127707f 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.2 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 42774a82e85..0a9adfd363a 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.3 +version: 1.1.3-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index a5f03a2f00e..af1e040cc44 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,11 +1,3 @@ -## 1.1.2 - -### Minor Analysis Improvements - -* Message events in the browser are now properly classified as client-side taint sources. Previously they were - incorrectly classified as server-side taint sources, which resulted in some alerts being reported by - the wrong query, such as server-side URL redirection instead of client-side URL redirection. - ## 1.1.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.1.2.md b/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md similarity index 87% rename from javascript/ql/src/change-notes/released/1.1.2.md rename to javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md index 1f410e20195..0866061c3bd 100644 --- a/javascript/ql/src/change-notes/released/1.1.2.md +++ b/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md @@ -1,7 +1,6 @@ -## 1.1.2 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Message events in the browser are now properly classified as client-side taint sources. Previously they were incorrectly classified as server-side taint sources, which resulted in some alerts being reported by the wrong query, such as server-side URL redirection instead of client-side URL redirection. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 53ab127707f..1a19084be3f 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.1 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index fe53021b0d9..9932097414b 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.1.2 +version: 1.1.2-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 66b29a94c27..5e4196ac337 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.6.md b/misc/suite-helpers/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/misc/suite-helpers/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c3a10882810..baedc3f13a1 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.6 +version: 1.0.6-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 588534dbe81..87cbf5bfda1 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/1.0.6.md b/python/ql/lib/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/python/ql/lib/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index f96c4ffe076..81d09c13b5d 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.6 +version: 1.0.6-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 88f9c1e5fa0..31897112925 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 1.2.0 - -### New Queries - -* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. - ## 1.1.0 ### New Queries diff --git a/python/ql/src/change-notes/released/1.2.0.md b/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md similarity index 85% rename from python/ql/src/change-notes/released/1.2.0.md rename to python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md index 10a58295368..370fe162290 100644 --- a/python/ql/src/change-notes/released/1.2.0.md +++ b/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md @@ -1,5 +1,4 @@ -## 1.2.0 - -### New Queries - -* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. +--- +category: newQuery +--- +* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. \ No newline at end of file diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 75430e73d1c..2ac15439f56 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.1.0 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index f466064bdaf..d244f5dd13d 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.2.0 +version: 1.1.1-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index d0d039c5bc6..4d575d4ef0f 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/1.0.6.md b/ruby/ql/lib/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/ruby/ql/lib/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 12e6145cde4..ecda3a78e65 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.6 +version: 1.0.6-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index fc4544acada..37101f41c70 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.1 - -No user-facing changes. - ## 1.1.0 ### New Queries diff --git a/ruby/ql/src/change-notes/released/1.1.1.md b/ruby/ql/src/change-notes/released/1.1.1.md deleted file mode 100644 index 7fb56d36610..00000000000 --- a/ruby/ql/src/change-notes/released/1.1.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.1 - -No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 1a19084be3f..2ac15439f56 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.0 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index c4a7f239e67..ada2d7236d0 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.1 +version: 1.1.1-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 38127a99b3f..f62d99b8a59 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.6.md b/shared/controlflow/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/controlflow/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index adc81518975..b610d434e33 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 84b64cbc6ea..0a94e1b80ec 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,9 +1,3 @@ -## 1.1.0 - -### Deprecated APIs - -* The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. - ## 1.0.5 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.1.0.md b/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md similarity index 82% rename from shared/dataflow/change-notes/released/1.1.0.md rename to shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md index 44897538158..ba3e86b720f 100644 --- a/shared/dataflow/change-notes/released/1.1.0.md +++ b/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md @@ -1,5 +1,4 @@ -## 1.1.0 - -### Deprecated APIs - +--- +category: deprecated +--- * The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 2ac15439f56..42da17b3841 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.0.5 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 36b88fe930e..6bc83bb5164 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.0 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 0a7df5106a1..0bf218b9656 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.6.md b/shared/mad/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/mad/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 00705b11131..8568e62a12b 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index efa13cf50bc..f445578246d 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.6.md b/shared/rangeanalysis/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/rangeanalysis/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e5950297314..4a9285c82ec 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 92db438ed2f..78f8369e739 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.6.md b/shared/regex/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/regex/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index d581b02a8a1..39a0ce40768 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 27b5d839dc1..f41fc9a7fe7 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.6.md b/shared/ssa/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/ssa/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index b9f9493484c..ef726856cfb 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 6976ee14e27..2e7162889c3 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.6.md b/shared/threat-models/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/threat-models/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 886d7c97770..aa7f4f989fd 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.6 +version: 1.0.6-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index a1da8419af7..f20cfe347d7 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.6.md b/shared/tutorial/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/tutorial/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 723ed36b4b4..e0516acd41d 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 9eedb855a5a..7ba137cbf53 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.6.md b/shared/typeflow/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/typeflow/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 68f2725581e..0681ba51825 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 712c3146f53..77d9b6f4fcf 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.6.md b/shared/typetracking/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/typetracking/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a617c9f0abd..da304ceb020 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 968e737bdc4..f8ac1347b0f 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.6.md b/shared/typos/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/typos/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 5ba50ebea97..bc581f54edf 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index d316357e039..e44386743ad 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.6.md b/shared/util/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/util/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 500e4730ddf..38a2417c1c2 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index ba782d71646..1b292c16876 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.6.md b/shared/xml/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/xml/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6b55ad64714..6c62493a3c8 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e9239e16de7..064f83a6efd 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.6 - -No user-facing changes. - ## 1.0.5 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.6.md b/shared/yaml/change-notes/released/1.0.6.md deleted file mode 100644 index e5e80a3b3f1..00000000000 --- a/shared/yaml/change-notes/released/1.0.6.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.6 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 3f140588def..5fc9dd318df 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.6 +version: 1.0.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index f1e051b1bcb..b8e0122e0a0 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.1.2 - -No user-facing changes. - ## 1.1.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/1.1.2.md b/swift/ql/lib/change-notes/released/1.1.2.md deleted file mode 100644 index ce8d2c1a4f3..00000000000 --- a/swift/ql/lib/change-notes/released/1.1.2.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.1.2 - -No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 53ab127707f..1a19084be3f 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.1 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 344577f0876..49920fff303 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.1.2 +version: 1.1.2-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 8ced5909fd0..e33d96f63f5 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 1.0.6 - -### Minor Analysis Improvements - -* False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. - ## 1.0.5 ### Minor Analysis Improvements diff --git a/swift/ql/src/change-notes/released/1.0.6.md b/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md similarity index 81% rename from swift/ql/src/change-notes/released/1.0.6.md rename to swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md index 93df2cccfdb..d8f3f3d16d5 100644 --- a/swift/ql/src/change-notes/released/1.0.6.md +++ b/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md @@ -1,5 +1,4 @@ -## 1.0.6 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 8033d980afa..42da17b3841 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.6 +lastReleaseVersion: 1.0.5 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 49b89fbc9fb..5941fbe1954 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.6 +version: 1.0.6-dev groups: - swift - queries From 0db6379602ac82f058e557a032322c9224ac988a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 27 Aug 2024 17:50:22 +0000 Subject: [PATCH 214/334] Release preparation for version 2.18.3 --- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/1.4.1.md | 3 +++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 6 ++++++ .../1.2.1.md} | 9 +++++---- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../lib/change-notes/released/1.7.23.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.23.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 11 +++++++++++ .../2024-05-23-static-field-side-effect.md | 4 ---- .../2024-07-10-conditional-compilation.md | 4 ---- .../change-notes/2024-07-19-added-sources.md | 4 ---- csharp/ql/lib/change-notes/released/1.1.0.md | 10 ++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 7 +++++++ .../change-notes/2024-08-12-doc-comments.md | 4 ---- .../1.0.6.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/1.0.6.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 18 ++++++++++++++++++ .../2024-08-12-add-environment-models.md | 11 ----------- .../lib/change-notes/2024-08-24-ioutil-fix.md | 5 ----- .../1.1.5.md} | 19 ++++++++++++++++--- 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/1.0.6.md | 3 +++ 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/1.0.6.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 12 ++++++++++++ .../2024-08-09-buildless-executable-war.md | 4 ---- ...2024-08-09-buildless-gradle-classifiers.md | 4 ---- .../2024-08-13-stdin-threat-model.md | 4 ---- .../2024-08-14-buildless-coder-malfunction.md | 4 ---- java/ql/lib/change-notes/released/3.0.1.md | 11 +++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.1.3.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ .../ql/lib/change-notes/released/1.1.3.md | 3 +++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 8 ++++++++ .../1.1.2.md} | 7 ++++--- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.6.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/1.0.6.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../1.2.0.md} | 9 +++++---- 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/1.0.6.md | 3 +++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.1.1.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.6.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ++++++ .../1.1.0.md} | 7 ++++--- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.6.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.6.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.6.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/1.0.6.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.6.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ .../tutorial/change-notes/released/1.0.6.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ .../typeflow/change-notes/released/1.0.6.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.6.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.6.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/1.0.6.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.6.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.6.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/1.1.2.md | 3 +++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 6 ++++++ .../1.0.6.md} | 7 ++++--- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 397 insertions(+), 142 deletions(-) create mode 100644 cpp/ql/lib/change-notes/released/1.4.1.md rename cpp/ql/src/change-notes/{2024-08-16-uncontrolled-allocation-size.md => released/1.2.1.md} (70%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md delete mode 100644 csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md delete mode 100644 csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md delete mode 100644 csharp/ql/lib/change-notes/2024-07-19-added-sources.md create mode 100644 csharp/ql/lib/change-notes/released/1.1.0.md delete mode 100644 csharp/ql/src/change-notes/2024-08-12-doc-comments.md rename csharp/ql/src/change-notes/{2024-08-07-db-quality-diagnostic.md => released/1.0.6.md} (59%) create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.6.md delete mode 100644 go/ql/lib/change-notes/2024-08-12-add-environment-models.md delete mode 100644 go/ql/lib/change-notes/2024-08-24-ioutil-fix.md rename go/ql/lib/change-notes/{2024-08-12-add-file-models.md => released/1.1.5.md} (58%) create mode 100644 go/ql/src/change-notes/released/1.0.6.md create mode 100644 java/ql/automodel/src/change-notes/released/1.0.6.md delete mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md delete mode 100644 java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md delete mode 100644 java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md delete mode 100644 java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md create mode 100644 java/ql/lib/change-notes/released/3.0.1.md create mode 100644 java/ql/src/change-notes/released/1.1.3.md create mode 100644 javascript/ql/lib/change-notes/released/1.1.3.md rename javascript/ql/src/change-notes/{2024-08-16-post-message-source-client-side.md => released/1.1.2.md} (87%) create mode 100644 misc/suite-helpers/change-notes/released/1.0.6.md create mode 100644 python/ql/lib/change-notes/released/1.0.6.md rename python/ql/src/change-notes/{2024-07-23-insecure-cookie-promotion.md => released/1.2.0.md} (85%) create mode 100644 ruby/ql/lib/change-notes/released/1.0.6.md create mode 100644 ruby/ql/src/change-notes/released/1.1.1.md create mode 100644 shared/controlflow/change-notes/released/1.0.6.md rename shared/dataflow/change-notes/{2024-08-20-remove-srcsink-grouping.md => released/1.1.0.md} (82%) create mode 100644 shared/mad/change-notes/released/1.0.6.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.6.md create mode 100644 shared/regex/change-notes/released/1.0.6.md create mode 100644 shared/ssa/change-notes/released/1.0.6.md create mode 100644 shared/threat-models/change-notes/released/1.0.6.md create mode 100644 shared/tutorial/change-notes/released/1.0.6.md create mode 100644 shared/typeflow/change-notes/released/1.0.6.md create mode 100644 shared/typetracking/change-notes/released/1.0.6.md create mode 100644 shared/typos/change-notes/released/1.0.6.md create mode 100644 shared/util/change-notes/released/1.0.6.md create mode 100644 shared/xml/change-notes/released/1.0.6.md create mode 100644 shared/yaml/change-notes/released/1.0.6.md create mode 100644 swift/ql/lib/change-notes/released/1.1.2.md rename swift/ql/src/change-notes/{2024-08-12-cleartext-transmission.md => released/1.0.6.md} (81%) diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 646199bb39c..c66bc4a4552 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.1 + +No user-facing changes. + ## 1.4.0 ### New Features diff --git a/cpp/ql/lib/change-notes/released/1.4.1.md b/cpp/ql/lib/change-notes/released/1.4.1.md new file mode 100644 index 00000000000..38987aa49cd --- /dev/null +++ b/cpp/ql/lib/change-notes/released/1.4.1.md @@ -0,0 +1,3 @@ +## 1.4.1 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index b8b2e97d508..43ccf4467be 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.0 +lastReleaseVersion: 1.4.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 830e4f75408..0db1f9e8036 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.4.1-dev +version: 1.4.1 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 25e322a99b7..d5e4575e097 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.1 + +### Minor Analysis Improvements + +* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. + ## 1.2.0 ### Query Metadata Changes diff --git a/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md b/cpp/ql/src/change-notes/released/1.2.1.md similarity index 70% rename from cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md rename to cpp/ql/src/change-notes/released/1.2.1.md index 4d0d0593363..c7f2fafb36b 100644 --- a/cpp/ql/src/change-notes/2024-08-16-uncontrolled-allocation-size.md +++ b/cpp/ql/src/change-notes/released/1.2.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. \ No newline at end of file +## 1.2.1 + +### Minor Analysis Improvements + +* The `cpp/uncontrolled-allocation-size` ("Uncontrolled allocation size") query now considers arithmetic operations that might reduce the size of user input as a barrier. The query therefore produces fewer false positive results. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 75430e73d1c..73dd403938c 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.2.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 13d1448bf8d..a0728a2475b 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.1-dev +version: 1.2.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index eb7af5234e3..18779106c78 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.23 + +No user-facing changes. + ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md new file mode 100644 index 00000000000..97c0d95c5c3 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.23.md @@ -0,0 +1,3 @@ +## 1.7.23 + +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 6a79a0ec163..55921f9b14a 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.22 +lastReleaseVersion: 1.7.23 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 07db663f549..0c04b5292ef 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.23-dev +version: 1.7.23 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index eb7af5234e3..18779106c78 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.23 + +No user-facing changes. + ## 1.7.22 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md new file mode 100644 index 00000000000..97c0d95c5c3 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.23.md @@ -0,0 +1,3 @@ +## 1.7.23 + +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 6a79a0ec163..55921f9b14a 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.22 +lastReleaseVersion: 1.7.23 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 880aae8371f..83d083f56c2 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.23-dev +version: 1.7.23 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 50a19e99d36..a2aaab7a542 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 1.1.0 + +### Major Analysis Improvements + +* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. + +### Minor Analysis Improvements + +* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. +* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. + ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md b/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md deleted file mode 100644 index f41dfab76d4..00000000000 --- a/csharp/ql/lib/change-notes/2024-05-23-static-field-side-effect.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md b/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md deleted file mode 100644 index a4a59b2abea..00000000000 --- a/csharp/ql/lib/change-notes/2024-07-10-conditional-compilation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/change-notes/2024-07-19-added-sources.md b/csharp/ql/lib/change-notes/2024-07-19-added-sources.md deleted file mode 100644 index 43e7b947a98..00000000000 --- a/csharp/ql/lib/change-notes/2024-07-19-added-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. diff --git a/csharp/ql/lib/change-notes/released/1.1.0.md b/csharp/ql/lib/change-notes/released/1.1.0.md new file mode 100644 index 00000000000..a02581a221b --- /dev/null +++ b/csharp/ql/lib/change-notes/released/1.1.0.md @@ -0,0 +1,10 @@ +## 1.1.0 + +### Major Analysis Improvements + +* Added support for data flow through side-effects on static fields. For example, when a static field containing an array is updated. + +### Minor Analysis Improvements + +* Added some new `local` source models. Most prominently `System.IO.Path.GetTempPath` and `System.Environment.GetFolderPath`. This might produce more alerts, if the `local` threat model is enabled. +* The extractor has been changed to not skip source files that have already been seen. This has an impact on source files that are compiled multiple times in the build process. Source files with conditional compilation preprocessor directives (such as `#if`) are now extracted for each set of preprocessor symbols that are used during the build process. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 42da17b3841..2ac15439f56 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.1.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2bba2984c8f..75d559a215d 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.0.6-dev +version: 1.1.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index bd25f8118dd..088c7af07c1 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.0.6 + +### Minor Analysis Improvements + +* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. + ## 1.0.5 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-08-12-doc-comments.md b/csharp/ql/src/change-notes/2024-08-12-doc-comments.md deleted file mode 100644 index e4c49351f3a..00000000000 --- a/csharp/ql/src/change-notes/2024-08-12-doc-comments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md b/csharp/ql/src/change-notes/released/1.0.6.md similarity index 59% rename from csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md rename to csharp/ql/src/change-notes/released/1.0.6.md index a22d136ce8b..43c27ec7b75 100644 --- a/csharp/ql/src/change-notes/2024-08-07-db-quality-diagnostic.md +++ b/csharp/ql/src/change-notes/released/1.0.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. \ No newline at end of file +## 1.0.6 + +### Minor Analysis Improvements + +* Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 51699111e25..975b56f78e4 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.6-dev +version: 1.0.6 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 2e7162889c3..6976ee14e27 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.6.md b/go/ql/consistency-queries/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +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 42da17b3841..8033d980afa 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 17f966d2c41..aaa6fc16d08 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.6-dev +version: 1.0.6 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 41cfec4595e..d44205e61f7 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,21 @@ +## 1.1.5 + +### Minor Analysis Improvements + +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig +* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + +### Bug Fixes + +* Fixed an issue where `io/ioutil.WriteFile`'s non-path arguments incorrectly generated `go/path-injection` alerts when untrusted data was written to a file, or controlled the file's mode. + ## 1.1.4 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md b/go/ql/lib/change-notes/2024-08-12-add-environment-models.md deleted file mode 100644 index c511718475d..00000000000 --- a/go/ql/lib/change-notes/2024-08-12-add-environment-models.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -category: minorAnalysis ---- -* Local source models for reading and parsing environment variables have been added for the following libraries: - - os - - syscall - - github.com/caarlos0/env - - github.com/gobuffalo/envy - - github.com/hashicorp/go-envparse - - github.com/joho/godotenv - - github.com/kelseyhightower/envconfig diff --git a/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md b/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md deleted file mode 100644 index 68e480fd35a..00000000000 --- a/go/ql/lib/change-notes/2024-08-24-ioutil-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where `io/ioutil.WriteFile`'s non-path arguments incorrectly generated `go/path-injection` alerts when untrusted data was written to a file, or controlled the file's mode. - diff --git a/go/ql/lib/change-notes/2024-08-12-add-file-models.md b/go/ql/lib/change-notes/released/1.1.5.md similarity index 58% rename from go/ql/lib/change-notes/2024-08-12-add-file-models.md rename to go/ql/lib/change-notes/released/1.1.5.md index eed216dd361..6f2221304e9 100644 --- a/go/ql/lib/change-notes/2024-08-12-add-file-models.md +++ b/go/ql/lib/change-notes/released/1.1.5.md @@ -1,4 +1,17 @@ ---- -category: minorAnalysis ---- +## 1.1.5 + +### Minor Analysis Improvements + +* Local source models for reading and parsing environment variables have been added for the following libraries: + - os + - syscall + - github.com/caarlos0/env + - github.com/gobuffalo/envy + - github.com/hashicorp/go-envparse + - github.com/joho/godotenv + - github.com/kelseyhightower/envconfig * Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + +### Bug Fixes + +* Fixed an issue where `io/ioutil.WriteFile`'s non-path arguments incorrectly generated `go/path-injection` alerts when untrusted data was written to a file, or controlled the file's mode. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 26cbcd3f123..df39a9de059 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.5 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5d56d0ecc73..cc840ed3854 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.5-dev +version: 1.1.5 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 36470f89eba..88ad1b3ceec 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.0.6.md b/go/ql/src/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/go/ql/src/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4df9de83c21..8129981ba0a 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.6-dev +version: 1.0.6 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 7dc759d1ac6..3d5fc1f2229 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.6.md b/java/ql/automodel/src/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +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 42da17b3841..8033d980afa 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index fd277afd1d7..0bc0c8b24ac 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: 1.0.6-dev +version: 1.0.6 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2dd89daf33f..608f229f028 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,15 @@ +## 3.0.1 + +### Minor Analysis Improvements + +* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). + +### Bug Fixes + +* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. +* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. +* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. + ## 3.0.0 ### Breaking Changes diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md b/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md deleted file mode 100644 index 96088e50532..00000000000 --- a/java/ql/lib/change-notes/2024-08-09-buildless-executable-war.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. diff --git a/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md b/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md deleted file mode 100644 index d8ed932ecf2..00000000000 --- a/java/ql/lib/change-notes/2024-08-09-buildless-gradle-classifiers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md b/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md deleted file mode 100644 index 93d456dc2a3..00000000000 --- a/java/ql/lib/change-notes/2024-08-13-stdin-threat-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). diff --git a/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md b/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md deleted file mode 100644 index a84fec4c8f1..00000000000 --- a/java/ql/lib/change-notes/2024-08-14-buildless-coder-malfunction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. diff --git a/java/ql/lib/change-notes/released/3.0.1.md b/java/ql/lib/change-notes/released/3.0.1.md new file mode 100644 index 00000000000..6c67dd0d9bf --- /dev/null +++ b/java/ql/lib/change-notes/released/3.0.1.md @@ -0,0 +1,11 @@ +## 3.0.1 + +### Minor Analysis Improvements + +* Threat-model for `System.in` changed from `commandargs` to newly created `stdin` (both subgroups of `local`). + +### Bug Fixes + +* Fixed an issue where analysis in `build-mode: none` may very occasionally throw a `CoderMalfunctionError` while resolving dependencies provided by a build system (Maven or Gradle), which could cause some dependency resolution and consequently alerts to vary unpredictably from one run to another. +* Fixed an issue where Java analysis in `build-mode: none` would fail to resolve dependencies using the `executable-war` Maven artifact type. +* Fixed an issue where analysis in `build-mode: none` may fail to resolve dependencies of Gradle projects where the dependency uses a non-empty artifact classifier -- for example, `someproject-1.2.3-tests.jar`, which has the classifier `tests`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 33d3a2cd113..e3b15d965db 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.0 +lastReleaseVersion: 3.0.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 3b1e06d84ae..9fcae1be43e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 3.0.1-dev +version: 3.0.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 464768e3a7f..f40eb15e63e 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +No user-facing changes. + ## 1.1.2 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.1.3.md b/java/ql/src/change-notes/released/1.1.3.md new file mode 100644 index 00000000000..e8f1701bd62 --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.3.md @@ -0,0 +1,3 @@ +## 1.1.3 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 53ab127707f..35e710ab1bf 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.3 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 32442dbf4d6..6cde17b60a0 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.3-dev +version: 1.1.3 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 134bbe39a69..301a52e0d9d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +No user-facing changes. + ## 1.1.2 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/1.1.3.md b/javascript/ql/lib/change-notes/released/1.1.3.md new file mode 100644 index 00000000000..e8f1701bd62 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/1.1.3.md @@ -0,0 +1,3 @@ +## 1.1.3 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 53ab127707f..35e710ab1bf 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.3 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 0a9adfd363a..42774a82e85 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.3-dev +version: 1.1.3 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index af1e040cc44..a5f03a2f00e 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.1.2 + +### Minor Analysis Improvements + +* Message events in the browser are now properly classified as client-side taint sources. Previously they were + incorrectly classified as server-side taint sources, which resulted in some alerts being reported by + the wrong query, such as server-side URL redirection instead of client-side URL redirection. + ## 1.1.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md b/javascript/ql/src/change-notes/released/1.1.2.md similarity index 87% rename from javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md rename to javascript/ql/src/change-notes/released/1.1.2.md index 0866061c3bd..1f410e20195 100644 --- a/javascript/ql/src/change-notes/2024-08-16-post-message-source-client-side.md +++ b/javascript/ql/src/change-notes/released/1.1.2.md @@ -1,6 +1,7 @@ ---- -category: minorAnalysis ---- +## 1.1.2 + +### Minor Analysis Improvements + * Message events in the browser are now properly classified as client-side taint sources. Previously they were incorrectly classified as server-side taint sources, which resulted in some alerts being reported by the wrong query, such as server-side URL redirection instead of client-side URL redirection. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 1a19084be3f..53ab127707f 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 9932097414b..fe53021b0d9 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.1.2-dev +version: 1.1.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 5e4196ac337..66b29a94c27 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.6.md b/misc/suite-helpers/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index baedc3f13a1..c3a10882810 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.6-dev +version: 1.0.6 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 87cbf5bfda1..588534dbe81 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/1.0.6.md b/python/ql/lib/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/python/ql/lib/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 81d09c13b5d..f96c4ffe076 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.6-dev +version: 1.0.6 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 31897112925..88f9c1e5fa0 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.0 + +### New Queries + +* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. + ## 1.1.0 ### New Queries diff --git a/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md b/python/ql/src/change-notes/released/1.2.0.md similarity index 85% rename from python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md rename to python/ql/src/change-notes/released/1.2.0.md index 370fe162290..10a58295368 100644 --- a/python/ql/src/change-notes/2024-07-23-insecure-cookie-promotion.md +++ b/python/ql/src/change-notes/released/1.2.0.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- -* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. \ No newline at end of file +## 1.2.0 + +### New Queries + +* The `py/cookie-injection` query, originally contributed to the experimental query pack by @jorgectf, has been promoted to the main query pack. This query finds instances of cookies being set without the `Secure`, `HttpOnly`, or `SameSite` attributes set to secure values. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 2ac15439f56..75430e73d1c 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.2.0 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index d244f5dd13d..f466064bdaf 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.1.1-dev +version: 1.2.0 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 4d575d4ef0f..d0d039c5bc6 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/1.0.6.md b/ruby/ql/lib/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index ecda3a78e65..12e6145cde4 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.6-dev +version: 1.0.6 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 37101f41c70..fc4544acada 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### New Queries diff --git a/ruby/ql/src/change-notes/released/1.1.1.md b/ruby/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..7fb56d36610 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 2ac15439f56..1a19084be3f 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index ada2d7236d0..c4a7f239e67 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.1-dev +version: 1.1.1 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index f62d99b8a59..38127a99b3f 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.6.md b/shared/controlflow/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index b610d434e33..adc81518975 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 0a94e1b80ec..84b64cbc6ea 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.0 + +### Deprecated APIs + +* The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. + ## 1.0.5 No user-facing changes. diff --git a/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md b/shared/dataflow/change-notes/released/1.1.0.md similarity index 82% rename from shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md rename to shared/dataflow/change-notes/released/1.1.0.md index ba3e86b720f..44897538158 100644 --- a/shared/dataflow/change-notes/2024-08-20-remove-srcsink-grouping.md +++ b/shared/dataflow/change-notes/released/1.1.0.md @@ -1,4 +1,5 @@ ---- -category: deprecated ---- +## 1.1.0 + +### Deprecated APIs + * The source/sink grouping feature of the data flow library has been removed. It was introduced primarily for debugging, but has not proven useful. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 42da17b3841..2ac15439f56 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.1.0 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 6bc83bb5164..36b88fe930e 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.0.6-dev +version: 1.1.0 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 0bf218b9656..0a7df5106a1 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.6.md b/shared/mad/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 8568e62a12b..00705b11131 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index f445578246d..efa13cf50bc 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.6.md b/shared/rangeanalysis/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 4a9285c82ec..e5950297314 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 78f8369e739..92db438ed2f 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.6.md b/shared/regex/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 39a0ce40768..d581b02a8a1 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index f41fc9a7fe7..27b5d839dc1 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.6.md b/shared/ssa/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index ef726856cfb..b9f9493484c 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 2e7162889c3..6976ee14e27 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.6.md b/shared/threat-models/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index aa7f4f989fd..886d7c97770 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.6-dev +version: 1.0.6 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index f20cfe347d7..a1da8419af7 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.6.md b/shared/tutorial/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index e0516acd41d..723ed36b4b4 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 7ba137cbf53..9eedb855a5a 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.6.md b/shared/typeflow/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 0681ba51825..68f2725581e 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 77d9b6f4fcf..712c3146f53 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.6.md b/shared/typetracking/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index da304ceb020..a617c9f0abd 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index f8ac1347b0f..968e737bdc4 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.6.md b/shared/typos/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index bc581f54edf..5ba50ebea97 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index e44386743ad..d316357e039 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.6.md b/shared/util/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/util/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 38a2417c1c2..500e4730ddf 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 1b292c16876..ba782d71646 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.6.md b/shared/xml/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6c62493a3c8..6b55ad64714 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 064f83a6efd..e9239e16de7 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.6 + +No user-facing changes. + ## 1.0.5 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.6.md b/shared/yaml/change-notes/released/1.0.6.md new file mode 100644 index 00000000000..e5e80a3b3f1 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.6.md @@ -0,0 +1,3 @@ +## 1.0.6 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 5fc9dd318df..3f140588def 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.6-dev +version: 1.0.6 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index b8e0122e0a0..f1e051b1bcb 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.2 + +No user-facing changes. + ## 1.1.1 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/1.1.2.md b/swift/ql/lib/change-notes/released/1.1.2.md new file mode 100644 index 00000000000..ce8d2c1a4f3 --- /dev/null +++ b/swift/ql/lib/change-notes/released/1.1.2.md @@ -0,0 +1,3 @@ +## 1.1.2 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 1a19084be3f..53ab127707f 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.1 +lastReleaseVersion: 1.1.2 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 49920fff303..344577f0876 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.1.2-dev +version: 1.1.2 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index e33d96f63f5..8ced5909fd0 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.6 + +### Minor Analysis Improvements + +* False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. + ## 1.0.5 ### Minor Analysis Improvements diff --git a/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md b/swift/ql/src/change-notes/released/1.0.6.md similarity index 81% rename from swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md rename to swift/ql/src/change-notes/released/1.0.6.md index d8f3f3d16d5..93df2cccfdb 100644 --- a/swift/ql/src/change-notes/2024-08-12-cleartext-transmission.md +++ b/swift/ql/src/change-notes/released/1.0.6.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.0.6 + +### Minor Analysis Improvements + * False positive results from the `swift/cleartext-transmission` ("Cleartext transmission of sensitive information") query involving `tel:`, `mailto:` and similar URLs have been fixed. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 42da17b3841..8033d980afa 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.5 +lastReleaseVersion: 1.0.6 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 5941fbe1954..49b89fbc9fb 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.6-dev +version: 1.0.6 groups: - swift - queries From 3d8c402b6fe2f81e0d307688446dbdf72467ae7d Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 21 Aug 2024 18:17:45 +0100 Subject: [PATCH 215/334] C#: Add spaces around em dash in changelog note --- csharp/ql/src/CHANGELOG.md | 2 +- csharp/ql/src/change-notes/released/1.0.6.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 088c7af07c1..1b1d04129e2 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -3,7 +3,7 @@ ### Minor Analysis Improvements * Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. ## 1.0.5 diff --git a/csharp/ql/src/change-notes/released/1.0.6.md b/csharp/ql/src/change-notes/released/1.0.6.md index 43c27ec7b75..c1454642823 100644 --- a/csharp/ql/src/change-notes/released/1.0.6.md +++ b/csharp/ql/src/change-notes/released/1.0.6.md @@ -3,4 +3,4 @@ ### Minor Analysis Improvements * Attributes in the `System.Runtime.CompilerServices` namespace are ignored when checking if a declaration requires documentation comments. -* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. +* C# build-mode `none` analyses now report a warning on the CodeQL status page when there are significant analysis problems -- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. From 3e774476c6670c45312c5ef3a089fccee1d6658b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 27 Aug 2024 18:52:31 +0000 Subject: [PATCH 216/334] Post-release preparation for codeql-cli-2.18.3 --- 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/typeflow/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 0db1f9e8036..049e5afd0eb 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.4.1 +version: 1.4.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a0728a2475b..291bde88faf 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.1 +version: 1.2.2-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 0c04b5292ef..407855e6868 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.23 +version: 1.7.24-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 83d083f56c2..9236640dbe5 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.23 +version: 1.7.24-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 75d559a215d..84426015538 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.1.0 +version: 1.1.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 975b56f78e4..4f1c93fc25b 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.6 +version: 1.0.7-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index aaa6fc16d08..fc1029a0c85 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.6 +version: 1.0.7-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index cc840ed3854..b81046b49cd 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.5 +version: 1.1.6-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 8129981ba0a..1e6ffa6dac5 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.6 +version: 1.0.7-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 0bc0c8b24ac..5da02bb9e8e 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: 1.0.6 +version: 1.0.7-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 9fcae1be43e..2d416db7f68 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 3.0.1 +version: 3.0.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 6cde17b60a0..19a3ede39d2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.3 +version: 1.1.4-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 42774a82e85..66933738bce 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.3 +version: 1.1.4-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index fe53021b0d9..30fd61f190b 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.1.2 +version: 1.1.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c3a10882810..0e10bf7cc48 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.6 +version: 1.0.7-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index f96c4ffe076..a5976074c0e 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.6 +version: 1.0.7-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index f466064bdaf..5352607aa77 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.2.0 +version: 1.2.1-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 12e6145cde4..e4004ff3d55 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.6 +version: 1.0.7-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index c4a7f239e67..ffbc8ea2abd 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.1 +version: 1.1.2-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index adc81518975..5bfb02b0179 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 36b88fe930e..63fa78dc872 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.0 +version: 1.1.1-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 00705b11131..6654580da12 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e5950297314..1015269eeb4 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index d581b02a8a1..6bb3b9c3551 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index b9f9493484c..0f48f8dfb6d 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 886d7c97770..fc01f5d5556 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.6 +version: 1.0.7-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 723ed36b4b4..bbba5576202 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 68f2725581e..99dd1a1057e 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a617c9f0abd..aeb3a45bff3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 5ba50ebea97..ded7cbb17ea 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 500e4730ddf..5914dae3575 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 6b55ad64714..6f272d210d2 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 3f140588def..e7dc99d9b83 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.6 +version: 1.0.7-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 344577f0876..cc38a4ce8e5 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.1.2 +version: 1.1.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 49b89fbc9fb..fcfbd491b37 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.6 +version: 1.0.7-dev groups: - swift - queries From f3dea1d647556afc7b76113343d445ba84e212c9 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 27 Aug 2024 14:16:25 +0100 Subject: [PATCH 217/334] Add changenote --- .../ql/src/change-notes/2024-08-27-sensitive-certificate.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/src/change-notes/2024-08-27-sensitive-certificate.md diff --git a/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md b/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md new file mode 100644 index 00000000000..9db609ebbe6 --- /dev/null +++ b/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `py/clear-text-logging-sensitive-data` and `py/clear-text-storage-sensitive-data` queries have been updated to exclude the `certificate` classification of of sensitive sources, which often do not actually contain sensitive data. \ No newline at end of file From a8591c79c5dff1c8209d7fa7fd3a63d3f70632e3 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 28 Aug 2024 09:11:34 +0100 Subject: [PATCH 218/334] Update test --- .../CleartextStorage.expected | 24 +++++++++---------- .../CWE-312-CleartextStorage-py3/test.py | 12 +++++----- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected index 6b252ea7833..588cfae32ef 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/CleartextStorage.expected @@ -1,16 +1,16 @@ edges -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:12:21:12:24 | ControlFlowNode for cert | provenance | | -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:13:22:13:41 | ControlFlowNode for Attribute() | provenance | | -| test.py:9:5:9:8 | ControlFlowNode for cert | test.py:15:26:15:29 | ControlFlowNode for cert | provenance | | -| test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:9:5:9:8 | ControlFlowNode for cert | provenance | | +| test.py:9:5:9:12 | ControlFlowNode for password | test.py:12:21:12:28 | ControlFlowNode for password | provenance | | +| test.py:9:5:9:12 | ControlFlowNode for password | test.py:13:22:13:45 | ControlFlowNode for Attribute() | provenance | | +| test.py:9:5:9:12 | ControlFlowNode for password | test.py:15:26:15:33 | ControlFlowNode for password | provenance | | +| test.py:9:16:9:29 | ControlFlowNode for get_password() | test.py:9:5:9:12 | ControlFlowNode for password | provenance | | nodes -| test.py:9:5:9:8 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | -| test.py:9:12:9:21 | ControlFlowNode for get_cert() | semmle.label | ControlFlowNode for get_cert() | -| test.py:12:21:12:24 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | -| test.py:13:22:13:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:15:26:15:29 | ControlFlowNode for cert | semmle.label | ControlFlowNode for cert | +| test.py:9:5:9:12 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | +| test.py:9:16:9:29 | ControlFlowNode for get_password() | semmle.label | ControlFlowNode for get_password() | +| test.py:12:21:12:28 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | +| test.py:13:22:13:45 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:15:26:15:33 | ControlFlowNode for password | semmle.label | ControlFlowNode for password | subpaths #select -| test.py:12:21:12:24 | ControlFlowNode for cert | test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:12:21:12:24 | ControlFlowNode for cert | This expression stores $@ as clear text. | test.py:9:12:9:21 | ControlFlowNode for get_cert() | sensitive data (certificate) | -| test.py:13:22:13:41 | ControlFlowNode for Attribute() | test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:13:22:13:41 | ControlFlowNode for Attribute() | This expression stores $@ as clear text. | test.py:9:12:9:21 | ControlFlowNode for get_cert() | sensitive data (certificate) | -| test.py:15:26:15:29 | ControlFlowNode for cert | test.py:9:12:9:21 | ControlFlowNode for get_cert() | test.py:15:26:15:29 | ControlFlowNode for cert | This expression stores $@ as clear text. | test.py:9:12:9:21 | ControlFlowNode for get_cert() | sensitive data (certificate) | +| test.py:12:21:12:28 | ControlFlowNode for password | test.py:9:16:9:29 | ControlFlowNode for get_password() | test.py:12:21:12:28 | ControlFlowNode for password | This expression stores $@ as clear text. | test.py:9:16:9:29 | ControlFlowNode for get_password() | sensitive data (password) | +| test.py:13:22:13:45 | ControlFlowNode for Attribute() | test.py:9:16:9:29 | ControlFlowNode for get_password() | test.py:13:22:13:45 | ControlFlowNode for Attribute() | This expression stores $@ as clear text. | test.py:9:16:9:29 | ControlFlowNode for get_password() | sensitive data (password) | +| test.py:15:26:15:33 | ControlFlowNode for password | test.py:9:16:9:29 | ControlFlowNode for get_password() | test.py:15:26:15:33 | ControlFlowNode for password | This expression stores $@ as clear text. | test.py:9:16:9:29 | ControlFlowNode for get_password() | sensitive data (password) | diff --git a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/test.py b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/test.py index 980a24e274d..91b7fb7e6c2 100644 --- a/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/test.py +++ b/python/ql/test/query-tests/Security/CWE-312-CleartextStorage-py3/test.py @@ -1,15 +1,15 @@ import pathlib -def get_cert(): - return "" +def get_password(): + return "password" def write_password(filename): - cert = get_cert() + password = get_password() path = pathlib.Path(filename) - path.write_text(cert) # NOT OK - path.write_bytes(cert.encode("utf-8")) # NOT OK + path.write_text(password) # NOT OK + path.write_bytes(password.encode("utf-8")) # NOT OK - path.open("w").write(cert) # NOT OK + path.open("w").write(password) # NOT OK From bfc6fee828ed9c6ae8ea33996a9ba143c16d942e Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 28 Aug 2024 10:37:59 +0200 Subject: [PATCH 219/334] Go: Move all integration tests. We no longer need the platform-specific directories, so simplify the test organization. If you want to retain the `linux` directory for two tests, or not do this at all, just skip merging this PR. It's purely optional. --- .../go => }/bazel-sample-1/build_environment.expected | 0 .../{all-platforms/go => }/bazel-sample-1/diagnostics.expected | 0 .../{all-platforms/go => }/bazel-sample-1/src/BUILD.bazel | 0 .../{all-platforms/go => }/bazel-sample-1/src/go.mod | 0 .../{all-platforms/go => }/bazel-sample-1/src/go.sum | 0 .../{all-platforms/go => }/bazel-sample-1/src/test.go | 0 .../{all-platforms/go => }/bazel-sample-1/src/todel.go | 0 .../{all-platforms/go => }/bazel-sample-1/test.expected | 0 .../{all-platforms/go => }/bazel-sample-1/test.py | 0 .../{all-platforms/go => }/bazel-sample-1/test.ql | 0 .../go => }/bazel-sample-2/build_environment.expected | 0 .../{all-platforms/go => }/bazel-sample-2/diagnostics.expected | 0 .../{all-platforms/go => }/bazel-sample-2/src/BUILD | 0 .../{all-platforms/go => }/bazel-sample-2/src/go.mod | 0 .../{all-platforms/go => }/bazel-sample-2/src/go.sum | 0 .../{all-platforms/go => }/bazel-sample-2/src/test.go | 0 .../{all-platforms/go => }/bazel-sample-2/src/todel.go | 0 .../{all-platforms/go => }/bazel-sample-2/test.expected | 0 .../{all-platforms/go => }/bazel-sample-2/test.py | 0 .../{all-platforms/go => }/bazel-sample-2/test.ql | 0 .../go => }/configure-baseline/src/a/vendor/avendor.go | 0 .../go => }/configure-baseline/src/a/vendor/modules.txt | 0 .../go => }/configure-baseline/src/b/vendor/bvendor.go | 0 .../go => }/configure-baseline/src/b/vendor/modules.txt | 0 .../go => }/configure-baseline/src/c/vendor/cvendor.go | 0 .../{all-platforms/go => }/configure-baseline/src/root.go | 0 .../{all-platforms/go => }/configure-baseline/test.py | 0 .../build_environment.expected | 0 .../{linux-only/go => }/dep-sample/diagnostics.expected | 0 .../{linux-only/go => }/dep-sample/test.expected | 0 go/ql/integration-tests/{linux-only/go => }/dep-sample/test.py | 0 .../go/go-get-without-modules-sample => dep-sample}/test.ql | 0 .../{linux-only/go => }/dep-sample/work/Gopkg.lock | 0 .../{linux-only/go => }/dep-sample/work/Gopkg.toml | 0 .../integration-tests/{linux-only/go => }/dep-sample/work/test.go | 0 .../go => }/dep-sample/work/vendor/golang.org/x/time/AUTHORS | 0 .../go => }/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS | 0 .../go => }/dep-sample/work/vendor/golang.org/x/time/LICENSE | 0 .../go => }/dep-sample/work/vendor/golang.org/x/time/PATENTS | 0 .../go => }/dep-sample/work/vendor/golang.org/x/time/rate/rate.go | 0 .../build_environment.expected | 0 .../build-constraints-exclude-all-go-files/diagnostics.expected | 0 .../diagnostics/build-constraints-exclude-all-go-files/test.py | 0 .../build-constraints-exclude-all-go-files/work/go.mod | 0 .../build-constraints-exclude-all-go-files/work/go.sum | 0 .../build-constraints-exclude-all-go-files/work/test.go | 0 .../go-files-found-not-processed}/build_environment.expected | 0 .../diagnostics/go-files-found-not-processed/diagnostics.expected | 0 .../diagnostics/go-files-found-not-processed/test.expected | 0 .../go => }/diagnostics/go-files-found-not-processed/test.py | 0 .../go => }/diagnostics/go-files-found-not-processed/test.ql | 0 .../go => }/diagnostics/go-files-found-not-processed/work/go.mod | 0 .../go => }/diagnostics/go-files-found-not-processed/work/go.sum | 0 .../diagnostics/go-files-found-not-processed/work/subdir/go.mod | 0 .../diagnostics/go-files-found-not-processed/work/subdir/go.sum | 0 .../diagnostics/go-files-found-not-processed/work/subdir/test.go | 0 .../invalid-toolchain-version}/build_environment.expected | 0 .../diagnostics/invalid-toolchain-version/diagnostics.expected | 0 .../go => }/diagnostics/invalid-toolchain-version/src/go.mod | 0 .../go => }/diagnostics/invalid-toolchain-version/src/main.go | 0 .../go => }/diagnostics/invalid-toolchain-version/test.py | 0 .../newer-go-version-needed}/build_environment.expected | 0 .../diagnostics/newer-go-version-needed/diagnostics.expected | 0 .../go => }/diagnostics/newer-go-version-needed/test.py | 0 .../go => }/diagnostics/newer-go-version-needed/work/go.mod | 0 .../go => }/diagnostics/newer-go-version-needed/work/go.sum | 0 .../go => }/diagnostics/newer-go-version-needed/work/test.go | 0 .../no-go-files-found}/build_environment.expected | 0 .../go => }/diagnostics/no-go-files-found/diagnostics.expected | 0 .../{all-platforms/go => }/diagnostics/no-go-files-found/test.py | 0 .../go => }/diagnostics/no-go-files-found/work/test.txt | 0 .../package-not-found-with-go-mod}/build_environment.expected | 0 .../package-not-found-with-go-mod/diagnostics.expected | 0 .../go => }/diagnostics/package-not-found-with-go-mod/test.py | 0 .../go => }/diagnostics/package-not-found-with-go-mod/work/go.mod | 0 .../go => }/diagnostics/package-not-found-with-go-mod/work/go.sum | 0 .../diagnostics/package-not-found-with-go-mod/work/test.go | 0 .../package-not-found-without-go-mod}/build_environment.expected | 0 .../package-not-found-without-go-mod/diagnostics.expected | 0 .../go => }/diagnostics/package-not-found-without-go-mod/test.py | 0 .../diagnostics/package-not-found-without-go-mod/work/test.go | 0 .../unsupported-relative-path}/build_environment.expected | 0 .../diagnostics/unsupported-relative-path/diagnostics.expected | 0 .../go => }/diagnostics/unsupported-relative-path/test.py | 0 .../diagnostics/unsupported-relative-path/work/main/main.go | 0 .../unsupported-relative-path/work/main/subpkg/subpkg.go | 0 .../build_environment.expected | 0 .../{all-platforms/go => }/extract-vendor/diagnostics.expected | 0 .../{all-platforms/go => }/extract-vendor/src/go.mod | 0 .../{all-platforms/go => }/extract-vendor/src/go.sum | 0 .../{all-platforms/go => }/extract-vendor/src/test.go | 0 .../go => }/extract-vendor/src/vendor/example.com/test/add.go | 0 .../{all-platforms/go => }/extract-vendor/src/vendor/modules.txt | 0 .../{all-platforms/go => }/extract-vendor/test.expected | 0 .../{all-platforms/go => }/extract-vendor/test.py | 0 .../{all-platforms/go => }/extract-vendor/test.ql | 0 .../go/go-mod-sample => glide-sample}/build_environment.expected | 0 .../{linux-only/go => }/glide-sample/diagnostics.expected | 0 .../go => }/glide-sample/force_sequential_test_execution | 0 .../{linux-only/go => }/glide-sample/test.expected | 0 go/ql/integration-tests/{linux-only/go => }/glide-sample/test.py | 0 .../{all-platforms/go/go-mod-sample => glide-sample}/test.ql | 0 .../{linux-only/go => }/glide-sample/work/glide.lock | 0 .../{linux-only/go => }/glide-sample/work/glide.yaml | 0 .../{linux-only/go => }/glide-sample/work/test.go | 0 .../go => }/glide-sample/work/vendor/golang.org/x/time/AUTHORS | 0 .../glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md | 0 .../glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS | 0 .../go => }/glide-sample/work/vendor/golang.org/x/time/LICENSE | 0 .../go => }/glide-sample/work/vendor/golang.org/x/time/PATENTS | 0 .../go => }/glide-sample/work/vendor/golang.org/x/time/README.md | 0 .../go => }/glide-sample/work/vendor/golang.org/x/time/go.mod | 0 .../glide-sample/work/vendor/golang.org/x/time/rate/rate.go | 0 .../glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go | 0 .../build_environment.expected | 0 .../go => }/go-get-without-modules-sample/src/test.go | 0 .../go => }/go-get-without-modules-sample/test.expected | 0 .../{all-platforms/go => }/go-get-without-modules-sample/test.py | 0 .../go/make-sample => go-get-without-modules-sample}/test.ql | 0 .../go-version-bump => go-mod-sample}/build_environment.expected | 0 .../{all-platforms/go => }/go-mod-sample/diagnostics.expected | 0 .../{all-platforms/go => }/go-mod-sample/src/Makefile | 0 .../{all-platforms/go => }/go-mod-sample/src/go.mod | 0 .../{all-platforms/go => }/go-mod-sample/src/go.sum | 0 .../{all-platforms/go => }/go-mod-sample/src/test.go | 0 .../{all-platforms/go => }/go-mod-sample/test.expected | 0 .../{all-platforms/go => }/go-mod-sample/test.py | 0 .../{all-platforms/go/ninja-sample => go-mod-sample}/test.ql | 0 .../build_environment.expected | 0 .../go => }/go-mod-without-version/diagnostics.expected | 0 .../{all-platforms/go => }/go-mod-without-version/src/go.mod | 0 .../{all-platforms/go => }/go-mod-without-version/src/go.sum | 0 .../go => }/go-mod-without-version/src/subdir/add.go | 0 .../{all-platforms/go => }/go-mod-without-version/src/test.go | 0 .../{all-platforms/go => }/go-mod-without-version/test.expected | 0 .../{all-platforms/go => }/go-mod-without-version/test.py | 0 .../{all-platforms/go => }/go-mod-without-version/test.ql | 0 .../mixed-layout => go-version-bump}/build_environment.expected | 0 .../{all-platforms/go => }/go-version-bump/diagnostics.expected | 0 .../{all-platforms/go => }/go-version-bump/src/go.mod | 0 .../{all-platforms/go => }/go-version-bump/src/main.go | 0 .../{all-platforms/go => }/go-version-bump/test.py | 0 .../go/ninja-sample => make-sample}/build_environment.expected | 0 .../{all-platforms/go => }/make-sample/diagnostics.expected | 0 .../{all-platforms/go => }/make-sample/src/Makefile | 0 .../{all-platforms/go => }/make-sample/src/go.mod | 0 .../{all-platforms/go => }/make-sample/src/go.sum | 0 .../{all-platforms/go => }/make-sample/src/test.go | 0 .../{all-platforms/go => }/make-sample/src/todel.go | 0 .../{all-platforms/go => }/make-sample/test.expected | 0 .../integration-tests/{all-platforms/go => }/make-sample/test.py | 0 .../{linux-only/go/dep-sample => make-sample}/test.ql | 0 .../build_environment.expected | 0 .../{all-platforms/go => }/mixed-layout/diagnostics.expected | 0 .../{all-platforms/go => }/mixed-layout/src/module/go.mod | 0 .../{all-platforms/go => }/mixed-layout/src/module/go.sum | 0 .../{all-platforms/go => }/mixed-layout/src/module/test.go | 0 .../{all-platforms/go => }/mixed-layout/src/stray-files/test.go | 0 .../{all-platforms/go => }/mixed-layout/src/workspace/go.work | 0 .../go => }/mixed-layout/src/workspace/subdir/go.mod | 0 .../go => }/mixed-layout/src/workspace/subdir/go.sum | 0 .../go => }/mixed-layout/src/workspace/subdir/test.go | 0 .../{all-platforms/go => }/mixed-layout/test.expected | 0 .../integration-tests/{all-platforms/go => }/mixed-layout/test.py | 0 .../integration-tests/{all-platforms/go => }/mixed-layout/test.ql | 0 .../build_environment.expected | 0 .../{all-platforms/go => }/ninja-sample/diagnostics.expected | 0 .../{all-platforms/go => }/ninja-sample/src/.ninja_log | 0 .../{all-platforms/go => }/ninja-sample/src/build.ninja | 0 .../{all-platforms/go => }/ninja-sample/src/go.mod | 0 .../{all-platforms/go => }/ninja-sample/src/go.sum | 0 .../{all-platforms/go => }/ninja-sample/src/test.go | 0 .../{all-platforms/go => }/ninja-sample/src/todel.go | 0 .../{all-platforms/go => }/ninja-sample/test.expected | 0 .../integration-tests/{all-platforms/go => }/ninja-sample/test.py | 0 .../{linux-only/go/glide-sample => ninja-sample}/test.ql | 0 .../newer-go-needed/build_environment.expected | 0 .../newer-go-needed/diagnostics.expected | 0 .../go => }/resolve-build-environment/newer-go-needed/src/go.mod | 0 .../go => }/resolve-build-environment/newer-go-needed/src/main.go | 0 .../go => }/resolve-build-environment/newer-go-needed/test.py | 0 .../build_environment.expected | 0 .../single-go-mod-and-go-files-not-under-it/diagnostics.expected | 0 .../go => }/single-go-mod-and-go-files-not-under-it/src/main.go | 0 .../single-go-mod-and-go-files-not-under-it/src/subdir/go.mod | 0 .../single-go-mod-and-go-files-not-under-it/src/subdir/go.sum | 0 .../src/subdir/subsubdir/add.go | 0 .../single-go-mod-and-go-files-not-under-it/src/subdir/test.go | 0 .../go => }/single-go-mod-and-go-files-not-under-it/test.expected | 0 .../go => }/single-go-mod-and-go-files-not-under-it/test.py | 0 .../go => }/single-go-mod-and-go-files-not-under-it/test.ql | 0 .../build_environment.expected | 0 .../go => }/single-go-mod-in-root/diagnostics.expected | 0 .../{all-platforms/go => }/single-go-mod-in-root/src/go.mod | 0 .../{all-platforms/go => }/single-go-mod-in-root/src/go.sum | 0 .../go => }/single-go-mod-in-root/src/subdir/add.go | 0 .../{all-platforms/go => }/single-go-mod-in-root/src/test.go | 0 .../{all-platforms/go => }/single-go-mod-in-root/test.expected | 0 .../{all-platforms/go => }/single-go-mod-in-root/test.py | 0 .../{all-platforms/go => }/single-go-mod-in-root/test.ql | 0 .../build_environment.expected | 0 .../go => }/single-go-mod-not-in-root/diagnostics.expected | 0 .../go => }/single-go-mod-not-in-root/src/subdir/go.mod | 0 .../go => }/single-go-mod-not-in-root/src/subdir/go.sum | 0 .../go => }/single-go-mod-not-in-root/src/subdir/subsubdir/add.go | 0 .../go => }/single-go-mod-not-in-root/src/subdir/test.go | 0 .../go => }/single-go-mod-not-in-root/test.expected | 0 .../{all-platforms/go => }/single-go-mod-not-in-root/test.py | 0 .../{all-platforms/go => }/single-go-mod-not-in-root/test.ql | 0 .../build_environment.expected | 0 .../go => }/single-go-work-not-in-root/diagnostics.expected | 0 .../go => }/single-go-work-not-in-root/src/modules/go.work | 0 .../go => }/single-go-work-not-in-root/src/modules/subdir1/go.mod | 0 .../go => }/single-go-work-not-in-root/src/modules/subdir1/go.sum | 0 .../src/modules/subdir1/subsubdir1/add.go | 0 .../single-go-work-not-in-root/src/modules/subdir1/test.go | 0 .../go => }/single-go-work-not-in-root/src/modules/subdir2/go.mod | 0 .../go => }/single-go-work-not-in-root/src/modules/subdir2/go.sum | 0 .../src/modules/subdir2/subsubdir2/add.go | 0 .../single-go-work-not-in-root/src/modules/subdir2/test.go | 0 .../go => }/single-go-work-not-in-root/test.expected | 0 .../{all-platforms/go => }/single-go-work-not-in-root/test.py | 0 .../{all-platforms/go => }/single-go-work-not-in-root/test.ql | 0 .../build_environment.expected | 0 .../go => }/two-go-mods-nested-none-in-root/diagnostics.expected | 0 .../go => }/two-go-mods-nested-none-in-root/src/subdir0/go.mod | 0 .../go => }/two-go-mods-nested-none-in-root/src/subdir0/go.sum | 0 .../two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod | 0 .../two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum | 0 .../src/subdir0/subdir1/subsubdir1/add.go | 0 .../two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go | 0 .../two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go | 0 .../go => }/two-go-mods-nested-none-in-root/src/subdir0/test.go | 0 .../go => }/two-go-mods-nested-none-in-root/test.expected | 0 .../go => }/two-go-mods-nested-none-in-root/test.py | 0 .../go => }/two-go-mods-nested-none-in-root/test.ql | 0 .../build_environment.expected | 0 .../go => }/two-go-mods-nested-one-in-root/diagnostics.expected | 0 .../go => }/two-go-mods-nested-one-in-root/src/go.mod | 0 .../go => }/two-go-mods-nested-one-in-root/src/go.sum | 0 .../go => }/two-go-mods-nested-one-in-root/src/subdir1/go.mod | 0 .../go => }/two-go-mods-nested-one-in-root/src/subdir1/go.sum | 0 .../two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go | 0 .../go => }/two-go-mods-nested-one-in-root/src/subdir1/test.go | 0 .../go => }/two-go-mods-nested-one-in-root/src/subdir2/add.go | 0 .../go => }/two-go-mods-nested-one-in-root/src/test.go | 0 .../go => }/two-go-mods-nested-one-in-root/test.expected | 0 .../{all-platforms/go => }/two-go-mods-nested-one-in-root/test.py | 0 .../{all-platforms/go => }/two-go-mods-nested-one-in-root/test.ql | 0 .../build_environment.expected | 0 .../go => }/two-go-mods-not-nested/diagnostics.expected | 0 .../go => }/two-go-mods-not-nested/src/subdir1/go.mod | 0 .../go => }/two-go-mods-not-nested/src/subdir1/go.sum | 0 .../go => }/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go | 0 .../go => }/two-go-mods-not-nested/src/subdir1/test.go | 0 .../go => }/two-go-mods-not-nested/src/subdir2/go.mod | 0 .../go => }/two-go-mods-not-nested/src/subdir2/go.sum | 0 .../go => }/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go | 0 .../go => }/two-go-mods-not-nested/src/subdir2/test.go | 0 .../{all-platforms/go => }/two-go-mods-not-nested/test.expected | 0 .../{all-platforms/go => }/two-go-mods-not-nested/test.py | 0 .../{all-platforms/go => }/two-go-mods-not-nested/test.ql | 0 .../build_environment.expected | 0 .../go => }/two-go-mods-one-failure/diagnostics.expected | 0 .../go => }/two-go-mods-one-failure/src/subdir1/go.mod | 0 .../go => }/two-go-mods-one-failure/src/subdir1/go.sum | 0 .../go => }/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go | 0 .../go => }/two-go-mods-one-failure/src/subdir1/test.go | 0 .../go => }/two-go-mods-one-failure/src/subdir2/go.mod | 0 .../go => }/two-go-mods-one-failure/src/subdir2/go.sum | 0 .../go => }/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go | 0 .../go => }/two-go-mods-one-failure/src/subdir2/test.go | 0 .../{all-platforms/go => }/two-go-mods-one-failure/test.expected | 0 .../{all-platforms/go => }/two-go-mods-one-failure/test.py | 0 .../{all-platforms/go => }/two-go-mods-one-failure/test.ql | 0 275 files changed, 0 insertions(+), 0 deletions(-) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/src/BUILD.bazel (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/src/todel.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-1/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/src/BUILD (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/src/todel.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/bazel-sample-2/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/a/vendor/avendor.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/a/vendor/modules.txt (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/b/vendor/bvendor.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/b/vendor/modules.txt (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/c/vendor/cvendor.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/src/root.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/configure-baseline/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/build-constraints-exclude-all-go-files => dep-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/diagnostics.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/test.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/go-get-without-modules-sample => dep-sample}/test.ql (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/Gopkg.lock (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/Gopkg.toml (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/test.go (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/vendor/golang.org/x/time/AUTHORS (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/vendor/golang.org/x/time/LICENSE (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/vendor/golang.org/x/time/PATENTS (100%) rename go/ql/integration-tests/{linux-only/go => }/dep-sample/work/vendor/golang.org/x/time/rate/rate.go (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/go-files-found-not-processed => diagnostics/build-constraints-exclude-all-go-files}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/build-constraints-exclude-all-go-files/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/build-constraints-exclude-all-go-files/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/build-constraints-exclude-all-go-files/work/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/build-constraints-exclude-all-go-files/work/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/build-constraints-exclude-all-go-files/work/test.go (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/invalid-toolchain-version => diagnostics/go-files-found-not-processed}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/work/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/work/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/work/subdir/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/work/subdir/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/go-files-found-not-processed/work/subdir/test.go (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/newer-go-version-needed => diagnostics/invalid-toolchain-version}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/invalid-toolchain-version/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/invalid-toolchain-version/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/invalid-toolchain-version/src/main.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/invalid-toolchain-version/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/no-go-files-found => diagnostics/newer-go-version-needed}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/newer-go-version-needed/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/newer-go-version-needed/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/newer-go-version-needed/work/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/newer-go-version-needed/work/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/newer-go-version-needed/work/test.go (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/package-not-found-with-go-mod => diagnostics/no-go-files-found}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/no-go-files-found/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/no-go-files-found/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/no-go-files-found/work/test.txt (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/package-not-found-without-go-mod => diagnostics/package-not-found-with-go-mod}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-with-go-mod/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-with-go-mod/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-with-go-mod/work/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-with-go-mod/work/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-with-go-mod/work/test.go (100%) rename go/ql/integration-tests/{all-platforms/go/diagnostics/unsupported-relative-path => diagnostics/package-not-found-without-go-mod}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-without-go-mod/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-without-go-mod/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/package-not-found-without-go-mod/work/test.go (100%) rename go/ql/integration-tests/{all-platforms/go/extract-vendor => diagnostics/unsupported-relative-path}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/unsupported-relative-path/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/unsupported-relative-path/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/unsupported-relative-path/work/main/main.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/diagnostics/unsupported-relative-path/work/main/subpkg/subpkg.go (100%) rename go/ql/integration-tests/{all-platforms/go/go-get-without-modules-sample => extract-vendor}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/src/vendor/example.com/test/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/src/vendor/modules.txt (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/extract-vendor/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/go-mod-sample => glide-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/diagnostics.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/force_sequential_test_execution (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/test.expected (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/go-mod-sample => glide-sample}/test.ql (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/glide.lock (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/glide.yaml (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/test.go (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/AUTHORS (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/LICENSE (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/PATENTS (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/README.md (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/go.mod (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/rate/rate.go (100%) rename go/ql/integration-tests/{linux-only/go => }/glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go (100%) rename go/ql/integration-tests/{all-platforms/go/go-mod-without-version => go-get-without-modules-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-get-without-modules-sample/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-get-without-modules-sample/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-get-without-modules-sample/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/make-sample => go-get-without-modules-sample}/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/go-version-bump => go-mod-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/src/Makefile (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-sample/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/ninja-sample => go-mod-sample}/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/make-sample => go-mod-without-version}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/src/subdir/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-mod-without-version/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/mixed-layout => go-version-bump}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-version-bump/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-version-bump/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-version-bump/src/main.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/go-version-bump/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/ninja-sample => make-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/src/Makefile (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/src/todel.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/make-sample/test.py (100%) rename go/ql/integration-tests/{linux-only/go/dep-sample => make-sample}/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/single-go-mod-and-go-files-not-under-it => mixed-layout}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/module/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/module/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/module/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/stray-files/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/workspace/go.work (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/workspace/subdir/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/workspace/subdir/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/src/workspace/subdir/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/mixed-layout/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/single-go-mod-in-root => ninja-sample}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/.ninja_log (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/build.ninja (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/src/todel.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/ninja-sample/test.py (100%) rename go/ql/integration-tests/{linux-only/go/glide-sample => ninja-sample}/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go => }/resolve-build-environment/newer-go-needed/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/resolve-build-environment/newer-go-needed/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/resolve-build-environment/newer-go-needed/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/resolve-build-environment/newer-go-needed/src/main.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/resolve-build-environment/newer-go-needed/test.py (100%) rename go/ql/integration-tests/{all-platforms/go/single-go-mod-not-in-root => single-go-mod-and-go-files-not-under-it}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/src/main.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/src/subdir/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/src/subdir/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/src/subdir/subsubdir/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/src/subdir/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-and-go-files-not-under-it/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/single-go-work-not-in-root => single-go-mod-in-root}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/src/subdir/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-in-root/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/two-go-mods-nested-none-in-root => single-go-mod-not-in-root}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/src/subdir/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/src/subdir/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/src/subdir/subsubdir/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/src/subdir/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-mod-not-in-root/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/two-go-mods-nested-one-in-root => single-go-work-not-in-root}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/go.work (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir1/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir1/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir1/subsubdir1/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir1/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir2/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir2/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir2/subsubdir2/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/src/modules/subdir2/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/single-go-work-not-in-root/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/two-go-mods-not-nested => two-go-mods-nested-none-in-root}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/subdir1/subsubdir1/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/src/subdir0/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-none-in-root/test.ql (100%) rename go/ql/integration-tests/{all-platforms/go/two-go-mods-one-failure => two-go-mods-nested-one-in-root}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/subdir1/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/subdir1/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/subdir1/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/subdir2/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/src/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-nested-one-in-root/test.ql (100%) rename go/ql/integration-tests/{linux-only/go/dep-sample => two-go-mods-not-nested}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir1/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir1/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir1/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir2/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir2/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/src/subdir2/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-not-nested/test.ql (100%) rename go/ql/integration-tests/{linux-only/go/glide-sample => two-go-mods-one-failure}/build_environment.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/diagnostics.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir1/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir1/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir1/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir2/go.mod (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir2/go.sum (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/src/subdir2/test.go (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/test.expected (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/test.py (100%) rename go/ql/integration-tests/{all-platforms/go => }/two-go-mods-one-failure/test.ql (100%) diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/build_environment.expected b/go/ql/integration-tests/bazel-sample-1/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/build_environment.expected rename to go/ql/integration-tests/bazel-sample-1/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/diagnostics.expected b/go/ql/integration-tests/bazel-sample-1/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/diagnostics.expected rename to go/ql/integration-tests/bazel-sample-1/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/BUILD.bazel b/go/ql/integration-tests/bazel-sample-1/src/BUILD.bazel similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/BUILD.bazel rename to go/ql/integration-tests/bazel-sample-1/src/BUILD.bazel diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/go.mod b/go/ql/integration-tests/bazel-sample-1/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/go.mod rename to go/ql/integration-tests/bazel-sample-1/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/go.sum b/go/ql/integration-tests/bazel-sample-1/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/go.sum rename to go/ql/integration-tests/bazel-sample-1/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/test.go b/go/ql/integration-tests/bazel-sample-1/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/test.go rename to go/ql/integration-tests/bazel-sample-1/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/todel.go b/go/ql/integration-tests/bazel-sample-1/src/todel.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/src/todel.go rename to go/ql/integration-tests/bazel-sample-1/src/todel.go diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.expected b/go/ql/integration-tests/bazel-sample-1/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.expected rename to go/ql/integration-tests/bazel-sample-1/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.py b/go/ql/integration-tests/bazel-sample-1/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.py rename to go/ql/integration-tests/bazel-sample-1/test.py diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.ql b/go/ql/integration-tests/bazel-sample-1/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-1/test.ql rename to go/ql/integration-tests/bazel-sample-1/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/build_environment.expected b/go/ql/integration-tests/bazel-sample-2/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/build_environment.expected rename to go/ql/integration-tests/bazel-sample-2/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/diagnostics.expected b/go/ql/integration-tests/bazel-sample-2/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/diagnostics.expected rename to go/ql/integration-tests/bazel-sample-2/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/BUILD b/go/ql/integration-tests/bazel-sample-2/src/BUILD similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/BUILD rename to go/ql/integration-tests/bazel-sample-2/src/BUILD diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/go.mod b/go/ql/integration-tests/bazel-sample-2/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/go.mod rename to go/ql/integration-tests/bazel-sample-2/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/go.sum b/go/ql/integration-tests/bazel-sample-2/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/go.sum rename to go/ql/integration-tests/bazel-sample-2/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/test.go b/go/ql/integration-tests/bazel-sample-2/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/test.go rename to go/ql/integration-tests/bazel-sample-2/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/todel.go b/go/ql/integration-tests/bazel-sample-2/src/todel.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/src/todel.go rename to go/ql/integration-tests/bazel-sample-2/src/todel.go diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.expected b/go/ql/integration-tests/bazel-sample-2/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.expected rename to go/ql/integration-tests/bazel-sample-2/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.py b/go/ql/integration-tests/bazel-sample-2/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.py rename to go/ql/integration-tests/bazel-sample-2/test.py diff --git a/go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.ql b/go/ql/integration-tests/bazel-sample-2/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/bazel-sample-2/test.ql rename to go/ql/integration-tests/bazel-sample-2/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go b/go/ql/integration-tests/configure-baseline/src/a/vendor/avendor.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go rename to go/ql/integration-tests/configure-baseline/src/a/vendor/avendor.go diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt b/go/ql/integration-tests/configure-baseline/src/a/vendor/modules.txt similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt rename to go/ql/integration-tests/configure-baseline/src/a/vendor/modules.txt diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go b/go/ql/integration-tests/configure-baseline/src/b/vendor/bvendor.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go rename to go/ql/integration-tests/configure-baseline/src/b/vendor/bvendor.go diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt b/go/ql/integration-tests/configure-baseline/src/b/vendor/modules.txt similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt rename to go/ql/integration-tests/configure-baseline/src/b/vendor/modules.txt diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go b/go/ql/integration-tests/configure-baseline/src/c/vendor/cvendor.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go rename to go/ql/integration-tests/configure-baseline/src/c/vendor/cvendor.go diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go b/go/ql/integration-tests/configure-baseline/src/root.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/src/root.go rename to go/ql/integration-tests/configure-baseline/src/root.go diff --git a/go/ql/integration-tests/all-platforms/go/configure-baseline/test.py b/go/ql/integration-tests/configure-baseline/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/configure-baseline/test.py rename to go/ql/integration-tests/configure-baseline/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/build_environment.expected b/go/ql/integration-tests/dep-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/build_environment.expected rename to go/ql/integration-tests/dep-sample/build_environment.expected diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/diagnostics.expected b/go/ql/integration-tests/dep-sample/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/diagnostics.expected rename to go/ql/integration-tests/dep-sample/diagnostics.expected diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/test.expected b/go/ql/integration-tests/dep-sample/test.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/test.expected rename to go/ql/integration-tests/dep-sample/test.expected diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/test.py b/go/ql/integration-tests/dep-sample/test.py similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/test.py rename to go/ql/integration-tests/dep-sample/test.py diff --git a/go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.ql b/go/ql/integration-tests/dep-sample/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.ql rename to go/ql/integration-tests/dep-sample/test.ql diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/Gopkg.lock b/go/ql/integration-tests/dep-sample/work/Gopkg.lock similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/Gopkg.lock rename to go/ql/integration-tests/dep-sample/work/Gopkg.lock diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/Gopkg.toml b/go/ql/integration-tests/dep-sample/work/Gopkg.toml similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/Gopkg.toml rename to go/ql/integration-tests/dep-sample/work/Gopkg.toml diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/test.go b/go/ql/integration-tests/dep-sample/work/test.go similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/test.go rename to go/ql/integration-tests/dep-sample/work/test.go diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/AUTHORS b/go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/AUTHORS similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/AUTHORS rename to go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/AUTHORS diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS b/go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS rename to go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/CONTRIBUTORS diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/LICENSE b/go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/LICENSE similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/LICENSE rename to go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/LICENSE diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/PATENTS b/go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/PATENTS similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/PATENTS rename to go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/PATENTS diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/rate/rate.go b/go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/rate/rate.go similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/work/vendor/golang.org/x/time/rate/rate.go rename to go/ql/integration-tests/dep-sample/work/vendor/golang.org/x/time/rate/rate.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/build_environment.expected b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/build_environment.expected rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/diagnostics.expected b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/diagnostics.expected rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/test.py b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/test.py rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/go.mod b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/go.mod rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/go.sum b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/go.sum rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/test.go b/go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/build-constraints-exclude-all-go-files/work/test.go rename to go/ql/integration-tests/diagnostics/build-constraints-exclude-all-go-files/work/test.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/build_environment.expected b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/build_environment.expected rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/diagnostics.expected b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/diagnostics.expected rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.expected b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.expected rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.ql b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.ql rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/go.mod b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/go.mod rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/go.sum b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/go.sum rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/go.mod b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/go.mod rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/go.sum b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/go.sum rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/test.go b/go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/work/subdir/test.go rename to go/ql/integration-tests/diagnostics/go-files-found-not-processed/work/subdir/test.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/build_environment.expected b/go/ql/integration-tests/diagnostics/invalid-toolchain-version/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/build_environment.expected rename to go/ql/integration-tests/diagnostics/invalid-toolchain-version/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected b/go/ql/integration-tests/diagnostics/invalid-toolchain-version/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected rename to go/ql/integration-tests/diagnostics/invalid-toolchain-version/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod b/go/ql/integration-tests/diagnostics/invalid-toolchain-version/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod rename to go/ql/integration-tests/diagnostics/invalid-toolchain-version/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go b/go/ql/integration-tests/diagnostics/invalid-toolchain-version/src/main.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go rename to go/ql/integration-tests/diagnostics/invalid-toolchain-version/src/main.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py b/go/ql/integration-tests/diagnostics/invalid-toolchain-version/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py rename to go/ql/integration-tests/diagnostics/invalid-toolchain-version/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/build_environment.expected b/go/ql/integration-tests/diagnostics/newer-go-version-needed/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/build_environment.expected rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/diagnostics.expected b/go/ql/integration-tests/diagnostics/newer-go-version-needed/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/diagnostics.expected rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/test.py b/go/ql/integration-tests/diagnostics/newer-go-version-needed/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/test.py rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/go.mod b/go/ql/integration-tests/diagnostics/newer-go-version-needed/work/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/go.mod rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/work/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/go.sum b/go/ql/integration-tests/diagnostics/newer-go-version-needed/work/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/go.sum rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/work/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/test.go b/go/ql/integration-tests/diagnostics/newer-go-version-needed/work/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/newer-go-version-needed/work/test.go rename to go/ql/integration-tests/diagnostics/newer-go-version-needed/work/test.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/build_environment.expected b/go/ql/integration-tests/diagnostics/no-go-files-found/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/build_environment.expected rename to go/ql/integration-tests/diagnostics/no-go-files-found/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/diagnostics.expected b/go/ql/integration-tests/diagnostics/no-go-files-found/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/diagnostics.expected rename to go/ql/integration-tests/diagnostics/no-go-files-found/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/test.py b/go/ql/integration-tests/diagnostics/no-go-files-found/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/test.py rename to go/ql/integration-tests/diagnostics/no-go-files-found/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/work/test.txt b/go/ql/integration-tests/diagnostics/no-go-files-found/work/test.txt similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/no-go-files-found/work/test.txt rename to go/ql/integration-tests/diagnostics/no-go-files-found/work/test.txt diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/build_environment.expected b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/build_environment.expected rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/diagnostics.expected b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/diagnostics.expected rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/test.py b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/test.py rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/go.mod b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/go.mod rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/go.sum b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/go.sum rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/test.go b/go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-with-go-mod/work/test.go rename to go/ql/integration-tests/diagnostics/package-not-found-with-go-mod/work/test.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/build_environment.expected b/go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/build_environment.expected rename to go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/diagnostics.expected b/go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/diagnostics.expected rename to go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/test.py b/go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/test.py rename to go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/work/test.go b/go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/work/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/package-not-found-without-go-mod/work/test.go rename to go/ql/integration-tests/diagnostics/package-not-found-without-go-mod/work/test.go diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/build_environment.expected b/go/ql/integration-tests/diagnostics/unsupported-relative-path/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/build_environment.expected rename to go/ql/integration-tests/diagnostics/unsupported-relative-path/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/diagnostics.expected b/go/ql/integration-tests/diagnostics/unsupported-relative-path/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/diagnostics.expected rename to go/ql/integration-tests/diagnostics/unsupported-relative-path/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py b/go/ql/integration-tests/diagnostics/unsupported-relative-path/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py rename to go/ql/integration-tests/diagnostics/unsupported-relative-path/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/work/main/main.go b/go/ql/integration-tests/diagnostics/unsupported-relative-path/work/main/main.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/work/main/main.go rename to go/ql/integration-tests/diagnostics/unsupported-relative-path/work/main/main.go diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/work/main/subpkg/subpkg.go b/go/ql/integration-tests/diagnostics/unsupported-relative-path/work/main/subpkg/subpkg.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/work/main/subpkg/subpkg.go rename to go/ql/integration-tests/diagnostics/unsupported-relative-path/work/main/subpkg/subpkg.go diff --git a/go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/build_environment.expected b/go/ql/integration-tests/extract-vendor/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/build_environment.expected rename to go/ql/integration-tests/extract-vendor/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/diagnostics.expected b/go/ql/integration-tests/extract-vendor/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/diagnostics.expected rename to go/ql/integration-tests/extract-vendor/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.mod b/go/ql/integration-tests/extract-vendor/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.mod rename to go/ql/integration-tests/extract-vendor/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.sum b/go/ql/integration-tests/extract-vendor/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.sum rename to go/ql/integration-tests/extract-vendor/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/test.go b/go/ql/integration-tests/extract-vendor/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/src/test.go rename to go/ql/integration-tests/extract-vendor/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/example.com/test/add.go b/go/ql/integration-tests/extract-vendor/src/vendor/example.com/test/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/example.com/test/add.go rename to go/ql/integration-tests/extract-vendor/src/vendor/example.com/test/add.go diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/modules.txt b/go/ql/integration-tests/extract-vendor/src/vendor/modules.txt similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/modules.txt rename to go/ql/integration-tests/extract-vendor/src/vendor/modules.txt diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.expected b/go/ql/integration-tests/extract-vendor/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/test.expected rename to go/ql/integration-tests/extract-vendor/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.py b/go/ql/integration-tests/extract-vendor/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/test.py rename to go/ql/integration-tests/extract-vendor/test.py diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.ql b/go/ql/integration-tests/extract-vendor/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/extract-vendor/test.ql rename to go/ql/integration-tests/extract-vendor/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/build_environment.expected b/go/ql/integration-tests/glide-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/build_environment.expected rename to go/ql/integration-tests/glide-sample/build_environment.expected diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/diagnostics.expected b/go/ql/integration-tests/glide-sample/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/diagnostics.expected rename to go/ql/integration-tests/glide-sample/diagnostics.expected diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/force_sequential_test_execution b/go/ql/integration-tests/glide-sample/force_sequential_test_execution similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/force_sequential_test_execution rename to go/ql/integration-tests/glide-sample/force_sequential_test_execution diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/test.expected b/go/ql/integration-tests/glide-sample/test.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/test.expected rename to go/ql/integration-tests/glide-sample/test.expected diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/test.py b/go/ql/integration-tests/glide-sample/test.py similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/test.py rename to go/ql/integration-tests/glide-sample/test.py diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/test.ql b/go/ql/integration-tests/glide-sample/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/test.ql rename to go/ql/integration-tests/glide-sample/test.ql diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/glide.lock b/go/ql/integration-tests/glide-sample/work/glide.lock similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/glide.lock rename to go/ql/integration-tests/glide-sample/work/glide.lock diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/glide.yaml b/go/ql/integration-tests/glide-sample/work/glide.yaml similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/glide.yaml rename to go/ql/integration-tests/glide-sample/work/glide.yaml diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/test.go b/go/ql/integration-tests/glide-sample/work/test.go similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/test.go rename to go/ql/integration-tests/glide-sample/work/test.go diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/AUTHORS b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/AUTHORS similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/AUTHORS rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/AUTHORS diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTING.md diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/CONTRIBUTORS diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/LICENSE b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/LICENSE similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/LICENSE rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/LICENSE diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/PATENTS b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/PATENTS similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/PATENTS rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/PATENTS diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/README.md b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/README.md similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/README.md rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/README.md diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/go.mod b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/go.mod similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/go.mod rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/go.mod diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/rate/rate.go b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/rate/rate.go similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/rate/rate.go rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/rate/rate.go diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go b/go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go rename to go/ql/integration-tests/glide-sample/work/vendor/golang.org/x/time/rate/rate_test.go diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/build_environment.expected b/go/ql/integration-tests/go-get-without-modules-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/build_environment.expected rename to go/ql/integration-tests/go-get-without-modules-sample/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/src/test.go b/go/ql/integration-tests/go-get-without-modules-sample/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/src/test.go rename to go/ql/integration-tests/go-get-without-modules-sample/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.expected b/go/ql/integration-tests/go-get-without-modules-sample/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.expected rename to go/ql/integration-tests/go-get-without-modules-sample/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.py b/go/ql/integration-tests/go-get-without-modules-sample/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-get-without-modules-sample/test.py rename to go/ql/integration-tests/go-get-without-modules-sample/test.py diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/test.ql b/go/ql/integration-tests/go-get-without-modules-sample/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/test.ql rename to go/ql/integration-tests/go-get-without-modules-sample/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/build_environment.expected b/go/ql/integration-tests/go-mod-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-version-bump/build_environment.expected rename to go/ql/integration-tests/go-mod-sample/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/diagnostics.expected b/go/ql/integration-tests/go-mod-sample/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/diagnostics.expected rename to go/ql/integration-tests/go-mod-sample/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/src/Makefile b/go/ql/integration-tests/go-mod-sample/src/Makefile similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/src/Makefile rename to go/ql/integration-tests/go-mod-sample/src/Makefile diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/src/go.mod b/go/ql/integration-tests/go-mod-sample/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/src/go.mod rename to go/ql/integration-tests/go-mod-sample/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/src/go.sum b/go/ql/integration-tests/go-mod-sample/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/src/go.sum rename to go/ql/integration-tests/go-mod-sample/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/src/test.go b/go/ql/integration-tests/go-mod-sample/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/src/test.go rename to go/ql/integration-tests/go-mod-sample/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/test.expected b/go/ql/integration-tests/go-mod-sample/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/test.expected rename to go/ql/integration-tests/go-mod-sample/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-sample/test.py b/go/ql/integration-tests/go-mod-sample/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-sample/test.py rename to go/ql/integration-tests/go-mod-sample/test.py diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/test.ql b/go/ql/integration-tests/go-mod-sample/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/test.ql rename to go/ql/integration-tests/go-mod-sample/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/build_environment.expected b/go/ql/integration-tests/go-mod-without-version/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/build_environment.expected rename to go/ql/integration-tests/go-mod-without-version/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/diagnostics.expected b/go/ql/integration-tests/go-mod-without-version/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/diagnostics.expected rename to go/ql/integration-tests/go-mod-without-version/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.mod b/go/ql/integration-tests/go-mod-without-version/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.mod rename to go/ql/integration-tests/go-mod-without-version/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.sum b/go/ql/integration-tests/go-mod-without-version/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.sum rename to go/ql/integration-tests/go-mod-without-version/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/subdir/add.go b/go/ql/integration-tests/go-mod-without-version/src/subdir/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/subdir/add.go rename to go/ql/integration-tests/go-mod-without-version/src/subdir/add.go diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/test.go b/go/ql/integration-tests/go-mod-without-version/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/test.go rename to go/ql/integration-tests/go-mod-without-version/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.expected b/go/ql/integration-tests/go-mod-without-version/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.expected rename to go/ql/integration-tests/go-mod-without-version/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.py b/go/ql/integration-tests/go-mod-without-version/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.py rename to go/ql/integration-tests/go-mod-without-version/test.py diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.ql b/go/ql/integration-tests/go-mod-without-version/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.ql rename to go/ql/integration-tests/go-mod-without-version/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/build_environment.expected b/go/ql/integration-tests/go-version-bump/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/build_environment.expected rename to go/ql/integration-tests/go-version-bump/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected b/go/ql/integration-tests/go-version-bump/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected rename to go/ql/integration-tests/go-version-bump/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod b/go/ql/integration-tests/go-version-bump/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod rename to go/ql/integration-tests/go-version-bump/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go b/go/ql/integration-tests/go-version-bump/src/main.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go rename to go/ql/integration-tests/go-version-bump/src/main.go diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py b/go/ql/integration-tests/go-version-bump/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/go-version-bump/test.py rename to go/ql/integration-tests/go-version-bump/test.py diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/build_environment.expected b/go/ql/integration-tests/make-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/build_environment.expected rename to go/ql/integration-tests/make-sample/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/diagnostics.expected b/go/ql/integration-tests/make-sample/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/diagnostics.expected rename to go/ql/integration-tests/make-sample/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/src/Makefile b/go/ql/integration-tests/make-sample/src/Makefile similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/src/Makefile rename to go/ql/integration-tests/make-sample/src/Makefile diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/src/go.mod b/go/ql/integration-tests/make-sample/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/src/go.mod rename to go/ql/integration-tests/make-sample/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/src/go.sum b/go/ql/integration-tests/make-sample/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/src/go.sum rename to go/ql/integration-tests/make-sample/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/src/test.go b/go/ql/integration-tests/make-sample/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/src/test.go rename to go/ql/integration-tests/make-sample/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/src/todel.go b/go/ql/integration-tests/make-sample/src/todel.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/src/todel.go rename to go/ql/integration-tests/make-sample/src/todel.go diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/test.expected b/go/ql/integration-tests/make-sample/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/test.expected rename to go/ql/integration-tests/make-sample/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/make-sample/test.py b/go/ql/integration-tests/make-sample/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/make-sample/test.py rename to go/ql/integration-tests/make-sample/test.py diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/test.ql b/go/ql/integration-tests/make-sample/test.ql similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/test.ql rename to go/ql/integration-tests/make-sample/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/build_environment.expected b/go/ql/integration-tests/mixed-layout/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/build_environment.expected rename to go/ql/integration-tests/mixed-layout/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected b/go/ql/integration-tests/mixed-layout/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected rename to go/ql/integration-tests/mixed-layout/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod b/go/ql/integration-tests/mixed-layout/src/module/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod rename to go/ql/integration-tests/mixed-layout/src/module/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum b/go/ql/integration-tests/mixed-layout/src/module/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum rename to go/ql/integration-tests/mixed-layout/src/module/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go b/go/ql/integration-tests/mixed-layout/src/module/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go rename to go/ql/integration-tests/mixed-layout/src/module/test.go diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go b/go/ql/integration-tests/mixed-layout/src/stray-files/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go rename to go/ql/integration-tests/mixed-layout/src/stray-files/test.go diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work b/go/ql/integration-tests/mixed-layout/src/workspace/go.work similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work rename to go/ql/integration-tests/mixed-layout/src/workspace/go.work diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod b/go/ql/integration-tests/mixed-layout/src/workspace/subdir/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod rename to go/ql/integration-tests/mixed-layout/src/workspace/subdir/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum b/go/ql/integration-tests/mixed-layout/src/workspace/subdir/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum rename to go/ql/integration-tests/mixed-layout/src/workspace/subdir/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go b/go/ql/integration-tests/mixed-layout/src/workspace/subdir/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go rename to go/ql/integration-tests/mixed-layout/src/workspace/subdir/test.go diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected b/go/ql/integration-tests/mixed-layout/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected rename to go/ql/integration-tests/mixed-layout/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py b/go/ql/integration-tests/mixed-layout/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/test.py rename to go/ql/integration-tests/mixed-layout/test.py diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql b/go/ql/integration-tests/mixed-layout/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql rename to go/ql/integration-tests/mixed-layout/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/build_environment.expected b/go/ql/integration-tests/ninja-sample/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/build_environment.expected rename to go/ql/integration-tests/ninja-sample/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/diagnostics.expected b/go/ql/integration-tests/ninja-sample/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/diagnostics.expected rename to go/ql/integration-tests/ninja-sample/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/.ninja_log b/go/ql/integration-tests/ninja-sample/src/.ninja_log similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/.ninja_log rename to go/ql/integration-tests/ninja-sample/src/.ninja_log diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/build.ninja b/go/ql/integration-tests/ninja-sample/src/build.ninja similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/build.ninja rename to go/ql/integration-tests/ninja-sample/src/build.ninja diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/go.mod b/go/ql/integration-tests/ninja-sample/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/go.mod rename to go/ql/integration-tests/ninja-sample/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/go.sum b/go/ql/integration-tests/ninja-sample/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/go.sum rename to go/ql/integration-tests/ninja-sample/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/test.go b/go/ql/integration-tests/ninja-sample/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/test.go rename to go/ql/integration-tests/ninja-sample/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/src/todel.go b/go/ql/integration-tests/ninja-sample/src/todel.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/src/todel.go rename to go/ql/integration-tests/ninja-sample/src/todel.go diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/test.expected b/go/ql/integration-tests/ninja-sample/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/test.expected rename to go/ql/integration-tests/ninja-sample/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/ninja-sample/test.py b/go/ql/integration-tests/ninja-sample/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/ninja-sample/test.py rename to go/ql/integration-tests/ninja-sample/test.py diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/test.ql b/go/ql/integration-tests/ninja-sample/test.ql similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/test.ql rename to go/ql/integration-tests/ninja-sample/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/build_environment.expected b/go/ql/integration-tests/resolve-build-environment/newer-go-needed/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/build_environment.expected rename to go/ql/integration-tests/resolve-build-environment/newer-go-needed/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/diagnostics.expected b/go/ql/integration-tests/resolve-build-environment/newer-go-needed/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/diagnostics.expected rename to go/ql/integration-tests/resolve-build-environment/newer-go-needed/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/src/go.mod b/go/ql/integration-tests/resolve-build-environment/newer-go-needed/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/src/go.mod rename to go/ql/integration-tests/resolve-build-environment/newer-go-needed/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/src/main.go b/go/ql/integration-tests/resolve-build-environment/newer-go-needed/src/main.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/src/main.go rename to go/ql/integration-tests/resolve-build-environment/newer-go-needed/src/main.go diff --git a/go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/test.py b/go/ql/integration-tests/resolve-build-environment/newer-go-needed/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/resolve-build-environment/newer-go-needed/test.py rename to go/ql/integration-tests/resolve-build-environment/newer-go-needed/test.py diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/build_environment.expected b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/build_environment.expected rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/main.go b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/main.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/main.go rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/main.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/go.mod b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/go.mod rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/go.sum b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/go.sum rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/subsubdir/add.go b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/subsubdir/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/subsubdir/add.go rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/subsubdir/add.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/test.go b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/src/subdir/test.go rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/src/subdir/test.go 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/single-go-mod-and-go-files-not-under-it/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.py b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.py rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/test.py diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql b/go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql rename to go/ql/integration-tests/single-go-mod-and-go-files-not-under-it/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/build_environment.expected b/go/ql/integration-tests/single-go-mod-in-root/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/build_environment.expected rename to go/ql/integration-tests/single-go-mod-in-root/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/diagnostics.expected b/go/ql/integration-tests/single-go-mod-in-root/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/diagnostics.expected rename to go/ql/integration-tests/single-go-mod-in-root/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/go.mod b/go/ql/integration-tests/single-go-mod-in-root/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/go.mod rename to go/ql/integration-tests/single-go-mod-in-root/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/go.sum b/go/ql/integration-tests/single-go-mod-in-root/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/go.sum rename to go/ql/integration-tests/single-go-mod-in-root/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/subdir/add.go b/go/ql/integration-tests/single-go-mod-in-root/src/subdir/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/subdir/add.go rename to go/ql/integration-tests/single-go-mod-in-root/src/subdir/add.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/test.go b/go/ql/integration-tests/single-go-mod-in-root/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/src/test.go rename to go/ql/integration-tests/single-go-mod-in-root/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected b/go/ql/integration-tests/single-go-mod-in-root/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected rename to go/ql/integration-tests/single-go-mod-in-root/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.py b/go/ql/integration-tests/single-go-mod-in-root/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.py rename to go/ql/integration-tests/single-go-mod-in-root/test.py diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql b/go/ql/integration-tests/single-go-mod-in-root/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql rename to go/ql/integration-tests/single-go-mod-in-root/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/build_environment.expected b/go/ql/integration-tests/single-go-mod-not-in-root/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/build_environment.expected rename to go/ql/integration-tests/single-go-mod-not-in-root/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/diagnostics.expected b/go/ql/integration-tests/single-go-mod-not-in-root/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/diagnostics.expected rename to go/ql/integration-tests/single-go-mod-not-in-root/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/go.mod b/go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/go.mod rename to go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/go.sum b/go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/go.sum rename to go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/subsubdir/add.go b/go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/subsubdir/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/subsubdir/add.go rename to go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/subsubdir/add.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/test.go b/go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/src/subdir/test.go rename to go/ql/integration-tests/single-go-mod-not-in-root/src/subdir/test.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected b/go/ql/integration-tests/single-go-mod-not-in-root/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected rename to go/ql/integration-tests/single-go-mod-not-in-root/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.py b/go/ql/integration-tests/single-go-mod-not-in-root/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.py rename to go/ql/integration-tests/single-go-mod-not-in-root/test.py diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql b/go/ql/integration-tests/single-go-mod-not-in-root/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql rename to go/ql/integration-tests/single-go-mod-not-in-root/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/build_environment.expected b/go/ql/integration-tests/single-go-work-not-in-root/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/build_environment.expected rename to go/ql/integration-tests/single-go-work-not-in-root/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected b/go/ql/integration-tests/single-go-work-not-in-root/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected rename to go/ql/integration-tests/single-go-work-not-in-root/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/go.work b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/go.work similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/go.work rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/go.work diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/go.mod b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/go.mod rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/go.sum b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/go.sum rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/subsubdir1/add.go b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/subsubdir1/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/subsubdir1/add.go rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/subsubdir1/add.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/test.go b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir1/test.go rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir1/test.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/go.mod b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/go.mod rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/go.sum b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/go.sum rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/subsubdir2/add.go b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/subsubdir2/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/subsubdir2/add.go rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/subsubdir2/add.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/test.go b/go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/src/modules/subdir2/test.go rename to go/ql/integration-tests/single-go-work-not-in-root/src/modules/subdir2/test.go diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected b/go/ql/integration-tests/single-go-work-not-in-root/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected rename to go/ql/integration-tests/single-go-work-not-in-root/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.py b/go/ql/integration-tests/single-go-work-not-in-root/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.py rename to go/ql/integration-tests/single-go-work-not-in-root/test.py diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql b/go/ql/integration-tests/single-go-work-not-in-root/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql rename to go/ql/integration-tests/single-go-work-not-in-root/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/build_environment.expected b/go/ql/integration-tests/two-go-mods-nested-none-in-root/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/build_environment.expected rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected b/go/ql/integration-tests/two-go-mods-nested-none-in-root/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/go.mod b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/go.mod rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/go.sum b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/go.sum rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/subsubdir1/add.go b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/subsubdir1/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/subsubdir1/add.go rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/subsubdir1/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir1/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/subdir2/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/test.go b/go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/src/subdir0/test.go rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/src/subdir0/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected b/go/ql/integration-tests/two-go-mods-nested-none-in-root/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.py b/go/ql/integration-tests/two-go-mods-nested-none-in-root/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.py rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/test.py diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql b/go/ql/integration-tests/two-go-mods-nested-none-in-root/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql rename to go/ql/integration-tests/two-go-mods-nested-none-in-root/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/build_environment.expected b/go/ql/integration-tests/two-go-mods-nested-one-in-root/build_environment.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/build_environment.expected rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/diagnostics.expected b/go/ql/integration-tests/two-go-mods-nested-one-in-root/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/diagnostics.expected rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/go.mod b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/go.mod rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/go.sum b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/go.sum rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/go.mod b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/go.mod rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/go.sum b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/go.sum rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/subsubdir1/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/test.go b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir1/test.go rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir1/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir2/add.go b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir2/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/subdir2/add.go rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/subdir2/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/test.go b/go/ql/integration-tests/two-go-mods-nested-one-in-root/src/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/src/test.go rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/src/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected b/go/ql/integration-tests/two-go-mods-nested-one-in-root/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.py b/go/ql/integration-tests/two-go-mods-nested-one-in-root/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.py rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/test.py diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql b/go/ql/integration-tests/two-go-mods-nested-one-in-root/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql rename to go/ql/integration-tests/two-go-mods-nested-one-in-root/test.ql diff --git a/go/ql/integration-tests/linux-only/go/dep-sample/build_environment.expected b/go/ql/integration-tests/two-go-mods-not-nested/build_environment.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/dep-sample/build_environment.expected rename to go/ql/integration-tests/two-go-mods-not-nested/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected b/go/ql/integration-tests/two-go-mods-not-nested/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected rename to go/ql/integration-tests/two-go-mods-not-nested/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/go.mod b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/go.mod rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/go.sum b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/go.sum rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/subsubdir1/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/test.go b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir1/test.go rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir1/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/go.mod b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/go.mod rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/go.sum b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/go.sum rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/subsubdir2/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/test.go b/go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/src/subdir2/test.go rename to go/ql/integration-tests/two-go-mods-not-nested/src/subdir2/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected b/go/ql/integration-tests/two-go-mods-not-nested/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected rename to go/ql/integration-tests/two-go-mods-not-nested/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.py b/go/ql/integration-tests/two-go-mods-not-nested/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.py rename to go/ql/integration-tests/two-go-mods-not-nested/test.py diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql b/go/ql/integration-tests/two-go-mods-not-nested/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql rename to go/ql/integration-tests/two-go-mods-not-nested/test.ql diff --git a/go/ql/integration-tests/linux-only/go/glide-sample/build_environment.expected b/go/ql/integration-tests/two-go-mods-one-failure/build_environment.expected similarity index 100% rename from go/ql/integration-tests/linux-only/go/glide-sample/build_environment.expected rename to go/ql/integration-tests/two-go-mods-one-failure/build_environment.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected b/go/ql/integration-tests/two-go-mods-one-failure/diagnostics.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected rename to go/ql/integration-tests/two-go-mods-one-failure/diagnostics.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.mod b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.mod rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.sum b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.sum rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/test.go b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/test.go rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir1/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.mod b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/go.mod similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.mod rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/go.mod diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.sum b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/go.sum similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.sum rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/go.sum diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/test.go b/go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/test.go similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/test.go rename to go/ql/integration-tests/two-go-mods-one-failure/src/subdir2/test.go diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.expected b/go/ql/integration-tests/two-go-mods-one-failure/test.expected similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.expected rename to go/ql/integration-tests/two-go-mods-one-failure/test.expected diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.py b/go/ql/integration-tests/two-go-mods-one-failure/test.py similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.py rename to go/ql/integration-tests/two-go-mods-one-failure/test.py diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.ql b/go/ql/integration-tests/two-go-mods-one-failure/test.ql similarity index 100% rename from go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.ql rename to go/ql/integration-tests/two-go-mods-one-failure/test.ql From b7b475d13b960e6c46b42b008e774daf7d831343 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 28 Aug 2024 10:41:53 +0200 Subject: [PATCH 220/334] JS: Move all integration tests. We no longer need the platform-specific directories, so simplify the test organization. If you don't want this change, just skip merging this PR. It's purely optional. The PR also deletes a spurious qlpack.yml that I missed when converting the tests to pytest. --- .../ql/integration-tests/all-platforms/no-types/qlpack.yml | 3 --- .../diagnostics/internal-error/diagnostics.expected | 0 .../diagnostics/internal-error/src/my_failure.ts | 0 .../{all-platforms => }/diagnostics/internal-error/test.py | 0 .../diagnostics/internal-error/tsconfig.json | 0 .../{all-platforms => }/diagnostics/syntax-error/bad.js | 0 .../diagnostics/syntax-error/diagnostics.expected | 0 .../{all-platforms => }/diagnostics/syntax-error/test.py | 0 .../ql/integration-tests/{all-platforms => }/no-types/foo.ts | 0 .../{all-platforms => }/no-types/javascript.expected | 0 .../{all-platforms => }/no-types/javascript.ql | 0 .../ql/integration-tests/{all-platforms => }/no-types/test.py | 0 .../{all-platforms => }/no-types/tsconfig.json | 0 13 files changed, 3 deletions(-) delete mode 100644 javascript/ql/integration-tests/all-platforms/no-types/qlpack.yml rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/internal-error/diagnostics.expected (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/internal-error/src/my_failure.ts (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/internal-error/test.py (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/internal-error/tsconfig.json (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/bad.js (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/diagnostics.expected (100%) rename javascript/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/test.py (100%) rename javascript/ql/integration-tests/{all-platforms => }/no-types/foo.ts (100%) rename javascript/ql/integration-tests/{all-platforms => }/no-types/javascript.expected (100%) rename javascript/ql/integration-tests/{all-platforms => }/no-types/javascript.ql (100%) rename javascript/ql/integration-tests/{all-platforms => }/no-types/test.py (100%) rename javascript/ql/integration-tests/{all-platforms => }/no-types/tsconfig.json (100%) diff --git a/javascript/ql/integration-tests/all-platforms/no-types/qlpack.yml b/javascript/ql/integration-tests/all-platforms/no-types/qlpack.yml deleted file mode 100644 index 8d1460010cb..00000000000 --- a/javascript/ql/integration-tests/all-platforms/no-types/qlpack.yml +++ /dev/null @@ -1,3 +0,0 @@ -dependencies: - codeql/javascript-all: '*' -warnOnImplicitThis: true diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected b/javascript/ql/integration-tests/diagnostics/internal-error/diagnostics.expected similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected rename to javascript/ql/integration-tests/diagnostics/internal-error/diagnostics.expected diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/src/my_failure.ts b/javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/src/my_failure.ts rename to javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py b/javascript/ql/integration-tests/diagnostics/internal-error/test.py similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py rename to javascript/ql/integration-tests/diagnostics/internal-error/test.py diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/tsconfig.json b/javascript/ql/integration-tests/diagnostics/internal-error/tsconfig.json similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/tsconfig.json rename to javascript/ql/integration-tests/diagnostics/internal-error/tsconfig.json diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/bad.js b/javascript/ql/integration-tests/diagnostics/syntax-error/bad.js similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/bad.js rename to javascript/ql/integration-tests/diagnostics/syntax-error/bad.js diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/diagnostics.expected b/javascript/ql/integration-tests/diagnostics/syntax-error/diagnostics.expected similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/diagnostics.expected rename to javascript/ql/integration-tests/diagnostics/syntax-error/diagnostics.expected diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py b/javascript/ql/integration-tests/diagnostics/syntax-error/test.py similarity index 100% rename from javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py rename to javascript/ql/integration-tests/diagnostics/syntax-error/test.py diff --git a/javascript/ql/integration-tests/all-platforms/no-types/foo.ts b/javascript/ql/integration-tests/no-types/foo.ts similarity index 100% rename from javascript/ql/integration-tests/all-platforms/no-types/foo.ts rename to javascript/ql/integration-tests/no-types/foo.ts diff --git a/javascript/ql/integration-tests/all-platforms/no-types/javascript.expected b/javascript/ql/integration-tests/no-types/javascript.expected similarity index 100% rename from javascript/ql/integration-tests/all-platforms/no-types/javascript.expected rename to javascript/ql/integration-tests/no-types/javascript.expected diff --git a/javascript/ql/integration-tests/all-platforms/no-types/javascript.ql b/javascript/ql/integration-tests/no-types/javascript.ql similarity index 100% rename from javascript/ql/integration-tests/all-platforms/no-types/javascript.ql rename to javascript/ql/integration-tests/no-types/javascript.ql diff --git a/javascript/ql/integration-tests/all-platforms/no-types/test.py b/javascript/ql/integration-tests/no-types/test.py similarity index 100% rename from javascript/ql/integration-tests/all-platforms/no-types/test.py rename to javascript/ql/integration-tests/no-types/test.py diff --git a/javascript/ql/integration-tests/all-platforms/no-types/tsconfig.json b/javascript/ql/integration-tests/no-types/tsconfig.json similarity index 100% rename from javascript/ql/integration-tests/all-platforms/no-types/tsconfig.json rename to javascript/ql/integration-tests/no-types/tsconfig.json From 3326bc417c79f6c0aa386d7be47bbabef1de755c Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 28 Aug 2024 10:45:05 +0200 Subject: [PATCH 221/334] Ruby: Move all integration tests. We no longer need the platform-specific directories, so simplify the test organization. If you don't want this change, just skip merging this PR. It's purely optional. --- .../{all-platforms => }/diagnostics/syntax-error/bad.rb | 0 .../diagnostics/syntax-error/diagnostics.expected | 0 .../{all-platforms => }/diagnostics/syntax-error/test.py | 0 .../diagnostics/unknown-encoding/diagnostics.expected | 0 .../{all-platforms => }/diagnostics/unknown-encoding/encoding.rb | 0 .../{all-platforms => }/diagnostics/unknown-encoding/test.py | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/bad.rb (100%) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/diagnostics.expected (100%) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/syntax-error/test.py (100%) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/unknown-encoding/diagnostics.expected (100%) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/unknown-encoding/encoding.rb (100%) rename ruby/ql/integration-tests/{all-platforms => }/diagnostics/unknown-encoding/test.py (100%) diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/bad.rb b/ruby/ql/integration-tests/diagnostics/syntax-error/bad.rb similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/bad.rb rename to ruby/ql/integration-tests/diagnostics/syntax-error/bad.rb diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/diagnostics.expected b/ruby/ql/integration-tests/diagnostics/syntax-error/diagnostics.expected similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/diagnostics.expected rename to ruby/ql/integration-tests/diagnostics/syntax-error/diagnostics.expected diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py b/ruby/ql/integration-tests/diagnostics/syntax-error/test.py similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py rename to ruby/ql/integration-tests/diagnostics/syntax-error/test.py diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/diagnostics.expected b/ruby/ql/integration-tests/diagnostics/unknown-encoding/diagnostics.expected similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/diagnostics.expected rename to ruby/ql/integration-tests/diagnostics/unknown-encoding/diagnostics.expected diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/encoding.rb b/ruby/ql/integration-tests/diagnostics/unknown-encoding/encoding.rb similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/encoding.rb rename to ruby/ql/integration-tests/diagnostics/unknown-encoding/encoding.rb diff --git a/ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/test.py b/ruby/ql/integration-tests/diagnostics/unknown-encoding/test.py similarity index 100% rename from ruby/ql/integration-tests/all-platforms/diagnostics/unknown-encoding/test.py rename to ruby/ql/integration-tests/diagnostics/unknown-encoding/test.py From a92a84571999dc5c19cc823e8df50b1bb4679ea6 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 28 Aug 2024 10:47:17 +0200 Subject: [PATCH 222/334] Swift: Move all integration tests. We are no longer bound to the platform-specific directories, so simplify the test organization. If you don't want this change, just skip merging this PR. It's purely optional. --- .../{osx-only => }/autobuilder/failure/.gitignore | 0 .../{osx-only => }/autobuilder/failure/diagnostics.expected | 0 .../autobuilder/failure/hello-failure.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 0 .../integration-tests/{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 .../no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 0 .../autobuilder/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 .../project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 0 .../{osx-only => }/autobuilder/no-swift/hello-objective/main.m | 0 .../integration-tests/{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 .../{osx-only => }/autobuilder/only-tests-with-spm/Package.swift | 0 .../autobuilder/only-tests-with-spm/diagnostics.expected | 0 .../only-tests-with-spm/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 .../autobuilder/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 .../xcode-fails-spm-works/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 .../RegexLiteralExpr/RegexLiteralExpr.expected | 0 .../{linux-only => linux}/RegexLiteralExpr/RegexLiteralExpr.ql | 0 .../{linux-only => linux}/RegexLiteralExpr/regex.swift | 0 .../{linux-only => linux}/RegexLiteralExpr/test.py | 0 .../{osx-only => osx}/canonical-case/Files.expected | 0 .../integration-tests/{osx-only => osx}/canonical-case/Files.ql | 0 .../{osx-only => osx}/canonical-case/MiXeDcAsE.swifT | 0 .../integration-tests/{osx-only => osx}/canonical-case/build.sh | 0 .../ql/integration-tests/{osx-only => osx}/canonical-case/test.py | 0 .../{osx-only => osx}/hello-xcode/Files.expected | 0 swift/ql/integration-tests/{osx-only => osx}/hello-xcode/Files.ql | 0 .../codeql-swift-autobuild-test.xcodeproj/project.pbxproj | 0 .../hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift | 0 swift/ql/integration-tests/{osx-only => osx}/hello-xcode/test.py | 0 .../{posix-only => posix}/cross-references/Classes.expected | 0 .../{posix-only => posix}/cross-references/Classes.ql | 0 .../cross-references/Deinitializers.expected | 0 .../{posix-only => posix}/cross-references/Deinitializers.ql | 0 .../{posix-only => posix}/cross-references/Enums.expected | 0 .../{posix-only => posix}/cross-references/Enums.ql | 0 .../{posix-only => posix}/cross-references/Functions.expected | 0 .../{posix-only => posix}/cross-references/Functions.ql | 0 .../{posix-only => posix}/cross-references/Initializers.expected | 0 .../{posix-only => posix}/cross-references/Initializers.ql | 0 .../{posix-only => posix}/cross-references/Module.expected | 0 .../{posix-only => posix}/cross-references/Module.ql | 0 .../{posix-only => posix}/cross-references/Operators.expected | 0 .../{posix-only => posix}/cross-references/Operators.ql | 0 .../{posix-only => posix}/cross-references/Package.swift | 0 .../{posix-only => posix}/cross-references/Protocols.expected | 0 .../{posix-only => posix}/cross-references/Protocols.ql | 0 .../cross-references/Sources/cross-references/lib.swift | 0 .../cross-references/Sources/cross-references/main.swift | 0 .../{posix-only => posix}/cross-references/Structs.expected | 0 .../{posix-only => posix}/cross-references/Structs.ql | 0 .../{posix-only => posix}/cross-references/VarDecls.expected | 0 .../{posix-only => posix}/cross-references/VarDecls.ql | 0 .../{posix-only => posix}/cross-references/test.py | 0 .../{posix-only => posix}/deduplication/BuiltinTypes.expected | 0 .../{posix-only => posix}/deduplication/BuiltinTypes.ql | 0 .../{posix-only => posix}/deduplication/Decls.expected | 0 .../{posix-only => posix}/deduplication/Decls.ql | 0 .../{posix-only => posix}/deduplication/Package.swift | 0 .../{posix-only => posix}/deduplication/Relevant.qll | 0 .../deduplication/Sources/deduplication/def.swift | 0 .../deduplication/Sources/deduplication/use.swift | 0 .../{posix-only => posix}/deduplication/Types.expected | 0 .../{posix-only => posix}/deduplication/Types.ql | 0 .../integration-tests/{posix-only => posix}/deduplication/test.py | 0 .../{posix-only => posix}/frontend-invocations/.gitignore | 0 .../{posix-only => posix}/frontend-invocations/A.swift | 0 .../{posix-only => posix}/frontend-invocations/B.swift | 0 .../{posix-only => posix}/frontend-invocations/C.swift | 0 .../{posix-only => posix}/frontend-invocations/D.swift | 0 .../{posix-only => posix}/frontend-invocations/E.swift | 0 .../{posix-only => posix}/frontend-invocations/Esup.swift | 0 .../{posix-only => posix}/frontend-invocations/F1.swift | 0 .../{posix-only => posix}/frontend-invocations/F2.swift | 0 .../{posix-only => posix}/frontend-invocations/F3.swift | 0 .../{posix-only => posix}/frontend-invocations/F4.swift | 0 .../{posix-only => posix}/frontend-invocations/F5.swift | 0 .../{posix-only => posix}/frontend-invocations/Files.expected | 0 .../{posix-only => posix}/frontend-invocations/Files.ql | 0 .../{posix-only => posix}/frontend-invocations/G.swift | 0 .../{posix-only => posix}/frontend-invocations/H1.swift | 0 .../{posix-only => posix}/frontend-invocations/H2.swift | 0 .../{posix-only => posix}/frontend-invocations/H3.swift | 0 .../{posix-only => posix}/frontend-invocations/I1.swift | 0 .../{posix-only => posix}/frontend-invocations/I2.swift | 0 .../{posix-only => posix}/frontend-invocations/Modules.expected | 0 .../{posix-only => posix}/frontend-invocations/Modules.ql | 0 .../{posix-only => posix}/frontend-invocations/build.sh | 0 .../{posix-only => posix}/frontend-invocations/dir/.empty | 0 .../{posix-only => posix}/frontend-invocations/test.py | 0 .../{posix-only => posix}/hello-world/Bodies.expected | 0 .../integration-tests/{posix-only => posix}/hello-world/Bodies.ql | 0 .../{posix-only => posix}/hello-world/Package.swift | 0 .../hello-world/Sources/hello-world/hello_world.swift | 0 .../{posix-only => posix}/hello-world/test.expected | 0 .../integration-tests/{posix-only => posix}/hello-world/test.py | 0 .../integration-tests/{posix-only => posix}/hello-world/test.ql | 0 .../{posix-only => posix}/linkage-awareness/Bodies.expected | 0 .../{posix-only => posix}/linkage-awareness/Bodies.ql | 0 .../{posix-only => posix}/linkage-awareness/Foo1/Package.swift | 0 .../linkage-awareness/Foo1/Sources/foo/main.swift | 0 .../{posix-only => posix}/linkage-awareness/Foo2/Package.swift | 0 .../linkage-awareness/Foo2/Sources/foo/main.swift | 0 .../{posix-only => posix}/linkage-awareness/build.sh | 0 .../{posix-only => posix}/linkage-awareness/test.py | 0 .../{posix-only => posix}/partial-modules/A/Package.swift | 0 .../{posix-only => posix}/partial-modules/A/Sources/A/A.swift | 0 .../{posix-only => posix}/partial-modules/A/Sources/A/Asup.swift | 0 .../{posix-only => posix}/partial-modules/B/Package.swift | 0 .../{posix-only => posix}/partial-modules/B/Sources/B/B.swift | 0 .../{posix-only => posix}/partial-modules/B/Sources/B/Bsup.swift | 0 .../{posix-only => posix}/partial-modules/Modules.expected | 0 .../{posix-only => posix}/partial-modules/Modules.ql | 0 .../{posix-only => posix}/partial-modules/Package.swift | 0 .../partial-modules/Sources/partial-modules/partial_modules.swift | 0 .../{posix-only => posix}/partial-modules/Unknown.expected | 0 .../{posix-only => posix}/partial-modules/Unknown.ql | 0 .../{posix-only => posix}/partial-modules/test.py | 0 .../integration-tests/{posix-only => posix}/symlinks/.gitignore | 0 .../{posix-only => posix}/symlinks/Files.expected | 0 .../ql/integration-tests/{posix-only => posix}/symlinks/Files.ql | 0 .../integration-tests/{posix-only => posix}/symlinks/main.swift | 0 .../{posix-only => posix}/symlinks/preserve/Package.swift | 0 .../{posix-only => posix}/symlinks/preserve/Sources/.gitkeep | 0 .../{posix-only => posix}/symlinks/resolve/Package.swift | 0 .../{posix-only => posix}/symlinks/resolve/Sources/.gitkeep | 0 swift/ql/integration-tests/{posix-only => posix}/symlinks/test.py | 0 153 files changed, 0 insertions(+), 0 deletions(-) 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/{linux-only => linux}/RegexLiteralExpr/RegexLiteralExpr.expected (100%) rename swift/ql/integration-tests/{linux-only => linux}/RegexLiteralExpr/RegexLiteralExpr.ql (100%) rename swift/ql/integration-tests/{linux-only => linux}/RegexLiteralExpr/regex.swift (100%) rename swift/ql/integration-tests/{linux-only => linux}/RegexLiteralExpr/test.py (100%) rename swift/ql/integration-tests/{osx-only => osx}/canonical-case/Files.expected (100%) rename swift/ql/integration-tests/{osx-only => osx}/canonical-case/Files.ql (100%) rename swift/ql/integration-tests/{osx-only => osx}/canonical-case/MiXeDcAsE.swifT (100%) rename swift/ql/integration-tests/{osx-only => osx}/canonical-case/build.sh (100%) rename swift/ql/integration-tests/{osx-only => osx}/canonical-case/test.py (100%) rename swift/ql/integration-tests/{osx-only => osx}/hello-xcode/Files.expected (100%) rename swift/ql/integration-tests/{osx-only => osx}/hello-xcode/Files.ql (100%) rename swift/ql/integration-tests/{osx-only => osx}/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj (100%) rename swift/ql/integration-tests/{osx-only => osx}/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift (100%) rename swift/ql/integration-tests/{osx-only => osx}/hello-xcode/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Classes.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Classes.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Deinitializers.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Deinitializers.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Enums.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Enums.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Functions.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Functions.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Initializers.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Initializers.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Module.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Module.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Operators.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Operators.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Protocols.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Protocols.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Sources/cross-references/lib.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Sources/cross-references/main.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Structs.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/Structs.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/VarDecls.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/VarDecls.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/cross-references/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/BuiltinTypes.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/BuiltinTypes.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Decls.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Decls.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Relevant.qll (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Sources/deduplication/def.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Sources/deduplication/use.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Types.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/Types.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/deduplication/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/.gitignore (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/A.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/B.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/C.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/D.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/E.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/Esup.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/F1.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/F2.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/F3.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/F4.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/F5.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/Files.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/Files.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/G.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/H1.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/H2.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/H3.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/I1.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/I2.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/Modules.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/Modules.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/build.sh (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/dir/.empty (100%) rename swift/ql/integration-tests/{posix-only => posix}/frontend-invocations/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/Bodies.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/Bodies.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/Sources/hello-world/hello_world.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/test.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/hello-world/test.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Bodies.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Bodies.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Foo1/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Foo1/Sources/foo/main.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Foo2/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/Foo2/Sources/foo/main.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/build.sh (100%) rename swift/ql/integration-tests/{posix-only => posix}/linkage-awareness/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/A/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/A/Sources/A/A.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/A/Sources/A/Asup.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/B/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/B/Sources/B/B.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/B/Sources/B/Bsup.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Modules.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Modules.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Sources/partial-modules/partial_modules.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Unknown.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/Unknown.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/partial-modules/test.py (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/.gitignore (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/Files.expected (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/Files.ql (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/main.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/preserve/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/preserve/Sources/.gitkeep (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/resolve/Package.swift (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/resolve/Sources/.gitkeep (100%) rename swift/ql/integration-tests/{posix-only => posix}/symlinks/test.py (100%) diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore b/swift/ql/integration-tests/autobuilder/failure/.gitignore similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore rename to swift/ql/integration-tests/autobuilder/failure/.gitignore diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected b/swift/ql/integration-tests/autobuilder/failure/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/failure/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/ql/integration-tests/osx-only/autobuilder/failure/test.py b/swift/ql/integration-tests/autobuilder/failure/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/failure/test.py rename to swift/ql/integration-tests/autobuilder/failure/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected b/swift/ql/integration-tests/autobuilder/no-build-system/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/no-build-system/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py b/swift/ql/integration-tests/autobuilder/no-build-system/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py rename to swift/ql/integration-tests/autobuilder/no-build-system/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift b/swift/ql/integration-tests/autobuilder/no-build-system/x.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift rename to swift/ql/integration-tests/autobuilder/no-build-system/x.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective/Package.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective/Package.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective/main.m similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/hello-objective/main.m diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py b/swift/ql/integration-tests/autobuilder/no-swift-with-spm/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py rename to swift/ql/integration-tests/autobuilder/no-swift-with-spm/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected b/swift/ql/integration-tests/autobuilder/no-swift/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/no-swift/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m b/swift/ql/integration-tests/autobuilder/no-swift/hello-objective/main.m similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m rename to swift/ql/integration-tests/autobuilder/no-swift/hello-objective/main.m diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py b/swift/ql/integration-tests/autobuilder/no-swift/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py rename to swift/ql/integration-tests/autobuilder/no-swift/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift b/swift/ql/integration-tests/autobuilder/no-xcode-with-spm/Package.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift rename to swift/ql/integration-tests/autobuilder/no-xcode-with-spm/Package.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected b/swift/ql/integration-tests/autobuilder/no-xcode-with-spm/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/no-xcode-with-spm/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py b/swift/ql/integration-tests/autobuilder/no-xcode-with-spm/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py rename to swift/ql/integration-tests/autobuilder/no-xcode-with-spm/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift b/swift/ql/integration-tests/autobuilder/no-xcode-with-spm/x.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift rename to swift/ql/integration-tests/autobuilder/no-xcode-with-spm/x.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift b/swift/ql/integration-tests/autobuilder/only-tests-with-spm/Package.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift rename to swift/ql/integration-tests/autobuilder/only-tests-with-spm/Package.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected b/swift/ql/integration-tests/autobuilder/only-tests-with-spm/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/only-tests-with-spm/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py b/swift/ql/integration-tests/autobuilder/only-tests-with-spm/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py rename to swift/ql/integration-tests/autobuilder/only-tests-with-spm/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected b/swift/ql/integration-tests/autobuilder/only-tests/diagnostics.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected rename to swift/ql/integration-tests/autobuilder/only-tests/diagnostics.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py b/swift/ql/integration-tests/autobuilder/only-tests/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py rename to swift/ql/integration-tests/autobuilder/only-tests/test.py diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Files.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Files.expected diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Files.ql similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Files.ql diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Package.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Package.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py b/swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py rename to swift/ql/integration-tests/autobuilder/xcode-fails-spm-works/test.py diff --git a/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected b/swift/ql/integration-tests/linux/RegexLiteralExpr/RegexLiteralExpr.expected similarity index 100% rename from swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected rename to swift/ql/integration-tests/linux/RegexLiteralExpr/RegexLiteralExpr.expected diff --git a/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql b/swift/ql/integration-tests/linux/RegexLiteralExpr/RegexLiteralExpr.ql similarity index 100% rename from swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql rename to swift/ql/integration-tests/linux/RegexLiteralExpr/RegexLiteralExpr.ql diff --git a/swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift b/swift/ql/integration-tests/linux/RegexLiteralExpr/regex.swift similarity index 100% rename from swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift rename to swift/ql/integration-tests/linux/RegexLiteralExpr/regex.swift diff --git a/swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py b/swift/ql/integration-tests/linux/RegexLiteralExpr/test.py similarity index 100% rename from swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py rename to swift/ql/integration-tests/linux/RegexLiteralExpr/test.py diff --git a/swift/ql/integration-tests/osx-only/canonical-case/Files.expected b/swift/ql/integration-tests/osx/canonical-case/Files.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/canonical-case/Files.expected rename to swift/ql/integration-tests/osx/canonical-case/Files.expected diff --git a/swift/ql/integration-tests/osx-only/canonical-case/Files.ql b/swift/ql/integration-tests/osx/canonical-case/Files.ql similarity index 100% rename from swift/ql/integration-tests/osx-only/canonical-case/Files.ql rename to swift/ql/integration-tests/osx/canonical-case/Files.ql diff --git a/swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT b/swift/ql/integration-tests/osx/canonical-case/MiXeDcAsE.swifT similarity index 100% rename from swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT rename to swift/ql/integration-tests/osx/canonical-case/MiXeDcAsE.swifT diff --git a/swift/ql/integration-tests/osx-only/canonical-case/build.sh b/swift/ql/integration-tests/osx/canonical-case/build.sh similarity index 100% rename from swift/ql/integration-tests/osx-only/canonical-case/build.sh rename to swift/ql/integration-tests/osx/canonical-case/build.sh diff --git a/swift/ql/integration-tests/osx-only/canonical-case/test.py b/swift/ql/integration-tests/osx/canonical-case/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/canonical-case/test.py rename to swift/ql/integration-tests/osx/canonical-case/test.py diff --git a/swift/ql/integration-tests/osx-only/hello-xcode/Files.expected b/swift/ql/integration-tests/osx/hello-xcode/Files.expected similarity index 100% rename from swift/ql/integration-tests/osx-only/hello-xcode/Files.expected rename to swift/ql/integration-tests/osx/hello-xcode/Files.expected diff --git a/swift/ql/integration-tests/osx-only/hello-xcode/Files.ql b/swift/ql/integration-tests/osx/hello-xcode/Files.ql similarity index 100% rename from swift/ql/integration-tests/osx-only/hello-xcode/Files.ql rename to swift/ql/integration-tests/osx/hello-xcode/Files.ql diff --git a/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/osx/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/osx/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/ql/integration-tests/osx-only/hello-xcode/test.py b/swift/ql/integration-tests/osx/hello-xcode/test.py similarity index 100% rename from swift/ql/integration-tests/osx-only/hello-xcode/test.py rename to swift/ql/integration-tests/osx/hello-xcode/test.py diff --git a/swift/ql/integration-tests/posix-only/cross-references/Classes.expected b/swift/ql/integration-tests/posix/cross-references/Classes.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Classes.expected rename to swift/ql/integration-tests/posix/cross-references/Classes.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Classes.ql b/swift/ql/integration-tests/posix/cross-references/Classes.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Classes.ql rename to swift/ql/integration-tests/posix/cross-references/Classes.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected b/swift/ql/integration-tests/posix/cross-references/Deinitializers.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected rename to swift/ql/integration-tests/posix/cross-references/Deinitializers.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql b/swift/ql/integration-tests/posix/cross-references/Deinitializers.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql rename to swift/ql/integration-tests/posix/cross-references/Deinitializers.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Enums.expected b/swift/ql/integration-tests/posix/cross-references/Enums.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Enums.expected rename to swift/ql/integration-tests/posix/cross-references/Enums.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Enums.ql b/swift/ql/integration-tests/posix/cross-references/Enums.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Enums.ql rename to swift/ql/integration-tests/posix/cross-references/Enums.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Functions.expected b/swift/ql/integration-tests/posix/cross-references/Functions.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Functions.expected rename to swift/ql/integration-tests/posix/cross-references/Functions.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Functions.ql b/swift/ql/integration-tests/posix/cross-references/Functions.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Functions.ql rename to swift/ql/integration-tests/posix/cross-references/Functions.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Initializers.expected b/swift/ql/integration-tests/posix/cross-references/Initializers.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Initializers.expected rename to swift/ql/integration-tests/posix/cross-references/Initializers.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Initializers.ql b/swift/ql/integration-tests/posix/cross-references/Initializers.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Initializers.ql rename to swift/ql/integration-tests/posix/cross-references/Initializers.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Module.expected b/swift/ql/integration-tests/posix/cross-references/Module.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Module.expected rename to swift/ql/integration-tests/posix/cross-references/Module.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Module.ql b/swift/ql/integration-tests/posix/cross-references/Module.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Module.ql rename to swift/ql/integration-tests/posix/cross-references/Module.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Operators.expected b/swift/ql/integration-tests/posix/cross-references/Operators.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Operators.expected rename to swift/ql/integration-tests/posix/cross-references/Operators.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Operators.ql b/swift/ql/integration-tests/posix/cross-references/Operators.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Operators.ql rename to swift/ql/integration-tests/posix/cross-references/Operators.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Package.swift b/swift/ql/integration-tests/posix/cross-references/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Package.swift rename to swift/ql/integration-tests/posix/cross-references/Package.swift diff --git a/swift/ql/integration-tests/posix-only/cross-references/Protocols.expected b/swift/ql/integration-tests/posix/cross-references/Protocols.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Protocols.expected rename to swift/ql/integration-tests/posix/cross-references/Protocols.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Protocols.ql b/swift/ql/integration-tests/posix/cross-references/Protocols.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Protocols.ql rename to swift/ql/integration-tests/posix/cross-references/Protocols.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift b/swift/ql/integration-tests/posix/cross-references/Sources/cross-references/lib.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift rename to swift/ql/integration-tests/posix/cross-references/Sources/cross-references/lib.swift diff --git a/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift b/swift/ql/integration-tests/posix/cross-references/Sources/cross-references/main.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift rename to swift/ql/integration-tests/posix/cross-references/Sources/cross-references/main.swift diff --git a/swift/ql/integration-tests/posix-only/cross-references/Structs.expected b/swift/ql/integration-tests/posix/cross-references/Structs.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Structs.expected rename to swift/ql/integration-tests/posix/cross-references/Structs.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/Structs.ql b/swift/ql/integration-tests/posix/cross-references/Structs.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/Structs.ql rename to swift/ql/integration-tests/posix/cross-references/Structs.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected b/swift/ql/integration-tests/posix/cross-references/VarDecls.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected rename to swift/ql/integration-tests/posix/cross-references/VarDecls.expected diff --git a/swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql b/swift/ql/integration-tests/posix/cross-references/VarDecls.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql rename to swift/ql/integration-tests/posix/cross-references/VarDecls.ql diff --git a/swift/ql/integration-tests/posix-only/cross-references/test.py b/swift/ql/integration-tests/posix/cross-references/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/cross-references/test.py rename to swift/ql/integration-tests/posix/cross-references/test.py diff --git a/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected b/swift/ql/integration-tests/posix/deduplication/BuiltinTypes.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected rename to swift/ql/integration-tests/posix/deduplication/BuiltinTypes.expected diff --git a/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql b/swift/ql/integration-tests/posix/deduplication/BuiltinTypes.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql rename to swift/ql/integration-tests/posix/deduplication/BuiltinTypes.ql diff --git a/swift/ql/integration-tests/posix-only/deduplication/Decls.expected b/swift/ql/integration-tests/posix/deduplication/Decls.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Decls.expected rename to swift/ql/integration-tests/posix/deduplication/Decls.expected diff --git a/swift/ql/integration-tests/posix-only/deduplication/Decls.ql b/swift/ql/integration-tests/posix/deduplication/Decls.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Decls.ql rename to swift/ql/integration-tests/posix/deduplication/Decls.ql diff --git a/swift/ql/integration-tests/posix-only/deduplication/Package.swift b/swift/ql/integration-tests/posix/deduplication/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Package.swift rename to swift/ql/integration-tests/posix/deduplication/Package.swift diff --git a/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll b/swift/ql/integration-tests/posix/deduplication/Relevant.qll similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Relevant.qll rename to swift/ql/integration-tests/posix/deduplication/Relevant.qll diff --git a/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift b/swift/ql/integration-tests/posix/deduplication/Sources/deduplication/def.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift rename to swift/ql/integration-tests/posix/deduplication/Sources/deduplication/def.swift diff --git a/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift b/swift/ql/integration-tests/posix/deduplication/Sources/deduplication/use.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift rename to swift/ql/integration-tests/posix/deduplication/Sources/deduplication/use.swift diff --git a/swift/ql/integration-tests/posix-only/deduplication/Types.expected b/swift/ql/integration-tests/posix/deduplication/Types.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Types.expected rename to swift/ql/integration-tests/posix/deduplication/Types.expected diff --git a/swift/ql/integration-tests/posix-only/deduplication/Types.ql b/swift/ql/integration-tests/posix/deduplication/Types.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/Types.ql rename to swift/ql/integration-tests/posix/deduplication/Types.ql diff --git a/swift/ql/integration-tests/posix-only/deduplication/test.py b/swift/ql/integration-tests/posix/deduplication/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/deduplication/test.py rename to swift/ql/integration-tests/posix/deduplication/test.py diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore b/swift/ql/integration-tests/posix/frontend-invocations/.gitignore similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore rename to swift/ql/integration-tests/posix/frontend-invocations/.gitignore diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/A.swift b/swift/ql/integration-tests/posix/frontend-invocations/A.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/A.swift rename to swift/ql/integration-tests/posix/frontend-invocations/A.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/B.swift b/swift/ql/integration-tests/posix/frontend-invocations/B.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/B.swift rename to swift/ql/integration-tests/posix/frontend-invocations/B.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/C.swift b/swift/ql/integration-tests/posix/frontend-invocations/C.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/C.swift rename to swift/ql/integration-tests/posix/frontend-invocations/C.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/D.swift b/swift/ql/integration-tests/posix/frontend-invocations/D.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/D.swift rename to swift/ql/integration-tests/posix/frontend-invocations/D.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/E.swift b/swift/ql/integration-tests/posix/frontend-invocations/E.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/E.swift rename to swift/ql/integration-tests/posix/frontend-invocations/E.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift b/swift/ql/integration-tests/posix/frontend-invocations/Esup.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift rename to swift/ql/integration-tests/posix/frontend-invocations/Esup.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift b/swift/ql/integration-tests/posix/frontend-invocations/F1.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift rename to swift/ql/integration-tests/posix/frontend-invocations/F1.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift b/swift/ql/integration-tests/posix/frontend-invocations/F2.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift rename to swift/ql/integration-tests/posix/frontend-invocations/F2.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift b/swift/ql/integration-tests/posix/frontend-invocations/F3.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift rename to swift/ql/integration-tests/posix/frontend-invocations/F3.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift b/swift/ql/integration-tests/posix/frontend-invocations/F4.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift rename to swift/ql/integration-tests/posix/frontend-invocations/F4.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift b/swift/ql/integration-tests/posix/frontend-invocations/F5.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift rename to swift/ql/integration-tests/posix/frontend-invocations/F5.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected b/swift/ql/integration-tests/posix/frontend-invocations/Files.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected rename to swift/ql/integration-tests/posix/frontend-invocations/Files.expected diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql b/swift/ql/integration-tests/posix/frontend-invocations/Files.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql rename to swift/ql/integration-tests/posix/frontend-invocations/Files.ql diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/G.swift b/swift/ql/integration-tests/posix/frontend-invocations/G.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/G.swift rename to swift/ql/integration-tests/posix/frontend-invocations/G.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift b/swift/ql/integration-tests/posix/frontend-invocations/H1.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift rename to swift/ql/integration-tests/posix/frontend-invocations/H1.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift b/swift/ql/integration-tests/posix/frontend-invocations/H2.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift rename to swift/ql/integration-tests/posix/frontend-invocations/H2.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift b/swift/ql/integration-tests/posix/frontend-invocations/H3.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift rename to swift/ql/integration-tests/posix/frontend-invocations/H3.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift b/swift/ql/integration-tests/posix/frontend-invocations/I1.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift rename to swift/ql/integration-tests/posix/frontend-invocations/I1.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift b/swift/ql/integration-tests/posix/frontend-invocations/I2.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift rename to swift/ql/integration-tests/posix/frontend-invocations/I2.swift diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected b/swift/ql/integration-tests/posix/frontend-invocations/Modules.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected rename to swift/ql/integration-tests/posix/frontend-invocations/Modules.expected diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql b/swift/ql/integration-tests/posix/frontend-invocations/Modules.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql rename to swift/ql/integration-tests/posix/frontend-invocations/Modules.ql diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/build.sh b/swift/ql/integration-tests/posix/frontend-invocations/build.sh similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/build.sh rename to swift/ql/integration-tests/posix/frontend-invocations/build.sh diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty b/swift/ql/integration-tests/posix/frontend-invocations/dir/.empty similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty rename to swift/ql/integration-tests/posix/frontend-invocations/dir/.empty diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/test.py b/swift/ql/integration-tests/posix/frontend-invocations/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/frontend-invocations/test.py rename to swift/ql/integration-tests/posix/frontend-invocations/test.py diff --git a/swift/ql/integration-tests/posix-only/hello-world/Bodies.expected b/swift/ql/integration-tests/posix/hello-world/Bodies.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/Bodies.expected rename to swift/ql/integration-tests/posix/hello-world/Bodies.expected diff --git a/swift/ql/integration-tests/posix-only/hello-world/Bodies.ql b/swift/ql/integration-tests/posix/hello-world/Bodies.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/Bodies.ql rename to swift/ql/integration-tests/posix/hello-world/Bodies.ql diff --git a/swift/ql/integration-tests/posix-only/hello-world/Package.swift b/swift/ql/integration-tests/posix/hello-world/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/Package.swift rename to swift/ql/integration-tests/posix/hello-world/Package.swift diff --git a/swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/posix/hello-world/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/posix/hello-world/Sources/hello-world/hello_world.swift diff --git a/swift/ql/integration-tests/posix-only/hello-world/test.expected b/swift/ql/integration-tests/posix/hello-world/test.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/test.expected rename to swift/ql/integration-tests/posix/hello-world/test.expected diff --git a/swift/ql/integration-tests/posix-only/hello-world/test.py b/swift/ql/integration-tests/posix/hello-world/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/test.py rename to swift/ql/integration-tests/posix/hello-world/test.py diff --git a/swift/ql/integration-tests/posix-only/hello-world/test.ql b/swift/ql/integration-tests/posix/hello-world/test.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/hello-world/test.ql rename to swift/ql/integration-tests/posix/hello-world/test.ql diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected b/swift/ql/integration-tests/posix/linkage-awareness/Bodies.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected rename to swift/ql/integration-tests/posix/linkage-awareness/Bodies.expected diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql b/swift/ql/integration-tests/posix/linkage-awareness/Bodies.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql rename to swift/ql/integration-tests/posix/linkage-awareness/Bodies.ql diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift b/swift/ql/integration-tests/posix/linkage-awareness/Foo1/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift rename to swift/ql/integration-tests/posix/linkage-awareness/Foo1/Package.swift diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift b/swift/ql/integration-tests/posix/linkage-awareness/Foo1/Sources/foo/main.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift rename to swift/ql/integration-tests/posix/linkage-awareness/Foo1/Sources/foo/main.swift diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift b/swift/ql/integration-tests/posix/linkage-awareness/Foo2/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift rename to swift/ql/integration-tests/posix/linkage-awareness/Foo2/Package.swift diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift b/swift/ql/integration-tests/posix/linkage-awareness/Foo2/Sources/foo/main.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift rename to swift/ql/integration-tests/posix/linkage-awareness/Foo2/Sources/foo/main.swift diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/build.sh b/swift/ql/integration-tests/posix/linkage-awareness/build.sh similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/build.sh rename to swift/ql/integration-tests/posix/linkage-awareness/build.sh diff --git a/swift/ql/integration-tests/posix-only/linkage-awareness/test.py b/swift/ql/integration-tests/posix/linkage-awareness/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/linkage-awareness/test.py rename to swift/ql/integration-tests/posix/linkage-awareness/test.py diff --git a/swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift b/swift/ql/integration-tests/posix/partial-modules/A/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift rename to swift/ql/integration-tests/posix/partial-modules/A/Package.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift b/swift/ql/integration-tests/posix/partial-modules/A/Sources/A/A.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift rename to swift/ql/integration-tests/posix/partial-modules/A/Sources/A/A.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift b/swift/ql/integration-tests/posix/partial-modules/A/Sources/A/Asup.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift rename to swift/ql/integration-tests/posix/partial-modules/A/Sources/A/Asup.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift b/swift/ql/integration-tests/posix/partial-modules/B/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift rename to swift/ql/integration-tests/posix/partial-modules/B/Package.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift b/swift/ql/integration-tests/posix/partial-modules/B/Sources/B/B.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift rename to swift/ql/integration-tests/posix/partial-modules/B/Sources/B/B.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift b/swift/ql/integration-tests/posix/partial-modules/B/Sources/B/Bsup.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift rename to swift/ql/integration-tests/posix/partial-modules/B/Sources/B/Bsup.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Modules.expected b/swift/ql/integration-tests/posix/partial-modules/Modules.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Modules.expected rename to swift/ql/integration-tests/posix/partial-modules/Modules.expected diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Modules.ql b/swift/ql/integration-tests/posix/partial-modules/Modules.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Modules.ql rename to swift/ql/integration-tests/posix/partial-modules/Modules.ql diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Package.swift b/swift/ql/integration-tests/posix/partial-modules/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Package.swift rename to swift/ql/integration-tests/posix/partial-modules/Package.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift b/swift/ql/integration-tests/posix/partial-modules/Sources/partial-modules/partial_modules.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift rename to swift/ql/integration-tests/posix/partial-modules/Sources/partial-modules/partial_modules.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected b/swift/ql/integration-tests/posix/partial-modules/Unknown.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected rename to swift/ql/integration-tests/posix/partial-modules/Unknown.expected diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql b/swift/ql/integration-tests/posix/partial-modules/Unknown.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql rename to swift/ql/integration-tests/posix/partial-modules/Unknown.ql diff --git a/swift/ql/integration-tests/posix-only/partial-modules/test.py b/swift/ql/integration-tests/posix/partial-modules/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/partial-modules/test.py rename to swift/ql/integration-tests/posix/partial-modules/test.py diff --git a/swift/ql/integration-tests/posix-only/symlinks/.gitignore b/swift/ql/integration-tests/posix/symlinks/.gitignore similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/.gitignore rename to swift/ql/integration-tests/posix/symlinks/.gitignore diff --git a/swift/ql/integration-tests/posix-only/symlinks/Files.expected b/swift/ql/integration-tests/posix/symlinks/Files.expected similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/Files.expected rename to swift/ql/integration-tests/posix/symlinks/Files.expected diff --git a/swift/ql/integration-tests/posix-only/symlinks/Files.ql b/swift/ql/integration-tests/posix/symlinks/Files.ql similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/Files.ql rename to swift/ql/integration-tests/posix/symlinks/Files.ql diff --git a/swift/ql/integration-tests/posix-only/symlinks/main.swift b/swift/ql/integration-tests/posix/symlinks/main.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/main.swift rename to swift/ql/integration-tests/posix/symlinks/main.swift diff --git a/swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift b/swift/ql/integration-tests/posix/symlinks/preserve/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift rename to swift/ql/integration-tests/posix/symlinks/preserve/Package.swift diff --git a/swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep b/swift/ql/integration-tests/posix/symlinks/preserve/Sources/.gitkeep similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep rename to swift/ql/integration-tests/posix/symlinks/preserve/Sources/.gitkeep diff --git a/swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift b/swift/ql/integration-tests/posix/symlinks/resolve/Package.swift similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift rename to swift/ql/integration-tests/posix/symlinks/resolve/Package.swift diff --git a/swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep b/swift/ql/integration-tests/posix/symlinks/resolve/Sources/.gitkeep similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep rename to swift/ql/integration-tests/posix/symlinks/resolve/Sources/.gitkeep diff --git a/swift/ql/integration-tests/posix-only/symlinks/test.py b/swift/ql/integration-tests/posix/symlinks/test.py similarity index 100% rename from swift/ql/integration-tests/posix-only/symlinks/test.py rename to swift/ql/integration-tests/posix/symlinks/test.py From d6049cd98b38e0844669c7fea6ec25e273e83a35 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 28 Aug 2024 10:54:16 +0200 Subject: [PATCH 223/334] C++: Add additional implementations of NonThrowingFunction and make minor fixes to docs --- .../code/cpp/models/implementations/Printf.qll | 13 +++++++------ .../code/cpp/models/implementations/Strcat.qll | 5 ++++- .../code/cpp/models/implementations/Strcpy.qll | 5 ++++- .../code/cpp/models/interfaces/NonThrowing.qll | 4 +--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll index 677b9245b6b..a62e528c8a4 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll @@ -8,11 +8,12 @@ import semmle.code.cpp.models.interfaces.FormattingFunction import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect +import semmle.code.cpp.models.interfaces.NonThrowing /** * The standard functions `printf`, `wprintf` and their glib variants. */ -private class Printf extends FormattingFunction, AliasFunction { +private class Printf extends FormattingFunction, AliasFunction, NonThrowingFunction { Printf() { this instanceof TopLevelFunction and ( @@ -36,7 +37,7 @@ private class Printf extends FormattingFunction, AliasFunction { /** * The standard functions `fprintf`, `fwprintf` and their glib variants. */ -private class Fprintf extends FormattingFunction { +private class Fprintf extends FormattingFunction, NonThrowingFunction { Fprintf() { this instanceof TopLevelFunction and ( @@ -54,7 +55,7 @@ private class Fprintf extends FormattingFunction { /** * The standard function `sprintf` and its Microsoft and glib variants. */ -private class Sprintf extends FormattingFunction { +private class Sprintf extends FormattingFunction, NonThrowingFunction { Sprintf() { this instanceof TopLevelFunction and ( @@ -97,7 +98,7 @@ private class Sprintf extends FormattingFunction { /** * Implements `Snprintf`. */ -private class SnprintfImpl extends Snprintf, AliasFunction, SideEffectFunction { +private class SnprintfImpl extends Snprintf, AliasFunction, SideEffectFunction, NonThrowingFunction { SnprintfImpl() { this instanceof TopLevelFunction and ( @@ -172,7 +173,7 @@ private class SnprintfImpl extends Snprintf, AliasFunction, SideEffectFunction { * and * https://learn.microsoft.com/en-us/previous-versions/windows/embedded/ms860435(v=msdn.10) */ -private class StringCchPrintf extends FormattingFunction { +private class StringCchPrintf extends FormattingFunction, NonThrowingFunction { StringCchPrintf() { this instanceof TopLevelFunction and exists(string baseName | @@ -204,7 +205,7 @@ private class StringCchPrintf extends FormattingFunction { /** * The standard function `syslog`. */ -private class Syslog extends FormattingFunction { +private class Syslog extends FormattingFunction, NonThrowingFunction { Syslog() { this instanceof TopLevelFunction and this.hasGlobalName("syslog") and diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll index f081a36fac6..9b11ed0af15 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll @@ -7,13 +7,16 @@ import semmle.code.cpp.models.interfaces.ArrayFunction import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.models.interfaces.SideEffect +import semmle.code.cpp.models.interfaces.NonThrowing /** * The standard function `strcat` and its wide, sized, and Microsoft variants. * * Does not include `strlcat`, which is covered by `StrlcatFunction` */ -class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, SideEffectFunction { +class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, SideEffectFunction, + NonThrowingFunction +{ StrcatFunction() { this.hasGlobalOrStdOrBslName([ "strcat", // strcat(dst, src) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll index 1858da65234..b7f06f0cebf 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll @@ -7,11 +7,14 @@ import semmle.code.cpp.models.interfaces.ArrayFunction import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.models.interfaces.SideEffect +import semmle.code.cpp.models.interfaces.NonThrowing /** * The standard function `strcpy` and its wide, sized, and Microsoft variants. */ -class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, SideEffectFunction { +class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, SideEffectFunction, + NonThrowingFunction +{ StrcpyFunction() { this.hasGlobalOrStdOrBslName([ "strcpy", // strcpy(dst, src) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll index f3ec13b5bd5..64901d39ad3 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/NonThrowing.qll @@ -1,7 +1,5 @@ /** - * Provides an abstract class for modeling functions that never throws. - * - * See also `ThrowingFunction` for modeling functions that do throw. + * Provides an abstract class for modeling functions that never throw. */ import semmle.code.cpp.Function From 27bc8ed6afefa3d75a1ca00286b15ea1b1ed39c0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 28 Aug 2024 11:38:29 +0200 Subject: [PATCH 224/334] Address review comment --- .../codeql/dataflow/internal/DataFlowImpl.qll | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 9c50d245aa5..c47ed472fda 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2693,26 +2693,26 @@ module MakeImpl Lang> { ) { not inBarrier(node2, state) and not outBarrier(node1, state) and - exists(NodeEx node0, boolean preservesValue0, DataFlowType t0, string label0, Ap ap | - Input::localStep(node0, state, node2, state, preservesValue0, t0, cc, label0) and + exists(NodeEx mid, boolean preservesValue2, DataFlowType t2, string label2, Ap ap | + Input::localStep(mid, state, node2, state, preservesValue2, t2, cc, label2) and revFlow(node2, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and - not outBarrier(node0, state) and + not outBarrier(mid, state) and (preservesValue = true or ap instanceof ApNil) | - node1 = node0 and + node1 = mid and localFlowEntry(node1, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and - preservesValue = preservesValue0 and - label = label0 and - t = t0 and + preservesValue = preservesValue2 and + label = label2 and + t = t2 and node1 != node2 or exists(boolean preservesValue1, DataFlowType t1, string label1 | - localFlowStepPlus(node1, pragma[only_bind_into](state), node0, preservesValue1, t1, + localFlowStepPlus(node1, pragma[only_bind_into](state), mid, preservesValue1, t1, cc, label1) and - not node0 instanceof FlowCheckNode and - preservesValue = preservesValue0.booleanAnd(preservesValue1) and - label = mergeLabels(label1, label0) and - if preservesValue0 = true then t = t1 else t = t0 + not mid instanceof FlowCheckNode and + preservesValue = preservesValue2.booleanAnd(preservesValue1) and + label = mergeLabels(label1, label2) and + if preservesValue2 = true then t = t1 else t = t2 ) ) } From 9e861ce7174da8963cff7e892fcfbf5c3fa42266 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 27 Aug 2024 13:53:06 +0200 Subject: [PATCH 225/334] C++: Add support for more clang builtins --- .../exprs.ql | 17 + .../old.dbscheme | 2317 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2310 ++++++++++++++++ .../sizeof_bind.ql | 14 + .../upgrade.properties | 4 + .../code/cpp/exprs/BuiltInOperations.qll | 56 + cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll | 47 + cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 2 + cpp/ql/lib/semmlecode.cpp.dbscheme | 9 +- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 886 ++++--- .../old.dbscheme | 2310 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2317 +++++++++++++++++ .../upgrade.properties | 2 + .../builtins/type_traits/clang.cpp | 15 +- .../builtins/type_traits/expr.expected | 14 + .../types/datasizeof/datasizeof.cpp | 30 + .../types/datasizeof/datasizeof.expected | 10 + .../types/datasizeof/datasizeof.ql | 10 + 18 files changed, 9938 insertions(+), 432 deletions(-) create mode 100644 cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/exprs.ql create mode 100644 cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme create mode 100644 cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/sizeof_bind.ql create mode 100644 cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/upgrade.properties create mode 100644 cpp/ql/test/library-tests/types/datasizeof/datasizeof.cpp create mode 100644 cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected create mode 100644 cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql diff --git a/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/exprs.ql b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/exprs.ql new file mode 100644 index 00000000000..e575df01b5c --- /dev/null +++ b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/exprs.ql @@ -0,0 +1,17 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_expr { + string toString() { none() } +} + +predicate isExprWithNewBuiltin(Expr expr) { + exists(int kind | exprs(expr, kind, _) | 385 <= kind and kind <= 388) +} + +from Expr expr, int kind, int kind_new, Location location +where + exprs(expr, kind, location) and + if isExprWithNewBuiltin(expr) then kind_new = 1 else kind_new = kind +select expr, kind_new, location diff --git a/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme new file mode 100644 index 00000000000..02a123a1a68 --- /dev/null +++ b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme @@ -0,0 +1,2317 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..68930f3b81b --- /dev/null +++ b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme @@ -0,0 +1,2310 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + ; + +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/02a123a1a681f98cf502f189a2a79b0dfb398e59/sizeof_bind.ql b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/sizeof_bind.ql new file mode 100644 index 00000000000..47077d7fc82 --- /dev/null +++ b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/sizeof_bind.ql @@ -0,0 +1,14 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +from Expr expr, Type type, int kind +where + sizeof_bind(expr, type) and + exprs(expr, kind, _) and + (kind = 93 or kind = 94) +select expr, type diff --git a/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties new file mode 100644 index 00000000000..8b6ce267a06 --- /dev/null +++ b/cpp/downgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties @@ -0,0 +1,4 @@ +description: Add new builtin operations +compatibility: partial +exprs.rel: run exprs.qlo +sizeof_bind.rel: run sizeof_bind.qlo diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll index dcf72604ca9..dc55bcda9e6 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -1885,3 +1885,59 @@ class BuiltInOperationIsWinInterface extends BuiltInOperation, @iswininterface { override string getAPrimaryQlClass() { result = "BuiltInOperationIsWinInterface" } } + +/** + * A C++ `__is_trivially_equality_comparable` built-in operation. + * + * Returns `true` if comparing two objects of type `_Tp` is equivalent to + * comparing their object representations. + * + * ``` + * template + * struct is_trivially_equality_comparable + * : public integral_constant + * {}; + * ``` + */ +class BuiltInOperationIsTriviallyEqualityComparable extends BuiltInOperation, + @istriviallyequalitycomparable +{ + override string toString() { result = "__is_trivially_equality_comparable" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsTriviallyEqualityComparable" } +} + +/** + * A C++ `__is_scoped_enum` built-in operation (used by some implementations + * of the `` header). + * + * Returns `true` if a type is a scoped enum. + * ``` + * template + * constexpr bool is_scoped_enum = __is_scoped_enum(_Tp); + * ``` + */ +class BuiltInOperationIsScopedEnum extends BuiltInOperation, @isscopedenum { + override string toString() { result = "__is_scoped_enum" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsScopedEnum" } +} + +/** + * A C++ `__is_trivially_relocatable` built-in operation. + * + * Returns `true` if moving an object of type `_Tp` is equivalent to + * copying the underlying bytes. + * + * ``` + * template + * struct is_trivially_relocatable + * : public integral_constant + * {}; + * ``` + */ +class BuiltInOperationIsTriviallyRelocatable extends BuiltInOperation, @istriviallyrelocatable { + override string toString() { result = "__is_trivially_relocatable" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsTriviallyRelocatable" } +} diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll index e3ce623d217..b36624d127c 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll @@ -791,6 +791,53 @@ class AlignofTypeOperator extends AlignofOperator { override string toString() { result = "alignof(" + this.getTypeOperand().getName() + ")" } } +/** + * A C++ `__datasizeof` expression (used by some implementations + * of the `` header). + * + * The `__datasizeof` expression behaves identical to `sizeof` except + * that the result ignores tail padding. + */ +class DatasizeofOperator extends Expr, @datasizeof { + override int getPrecedence() { result = 16 } +} + +/** + * A C++ `__datasizeof` expression whose operand is an expression. + */ +class DatasizeofExprOperator extends DatasizeofOperator { + DatasizeofExprOperator() { exists(this.getChild(0)) } + + override string getAPrimaryQlClass() { result = "DatasizeofExprOperator" } + + /** Gets the contained expression. */ + Expr getExprOperand() { result = this.getChild(0) } + + override string toString() { result = "sizeof()" } + + override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() } + + override predicate mayBeGloballyImpure() { this.getExprOperand().mayBeGloballyImpure() } +} + +/** + * A C++ `__datasizeof` expression whose operand is a type name. + */ +class DatasizeofTypeOperator extends DatasizeofOperator { + DatasizeofTypeOperator() { sizeof_bind(underlyingElement(this), _) } + + override string getAPrimaryQlClass() { result = "DatasizeofTypeOperator" } + + /** Gets the contained type. */ + Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } + + override string toString() { result = "sizeof(" + this.getTypeOperand().getName() + ")" } + + override predicate mayBeImpure() { none() } + + override predicate mayBeGloballyImpure() { none() } +} + /** * A C/C++ array to pointer conversion. * diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 0689bf46070..d85962b9fe7 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -304,6 +304,8 @@ class Expr extends StmtParent, @expr { e instanceof NoExceptExpr or e instanceof AlignofOperator + or + e instanceof DatasizeofOperator ) or exists(Decltype d | d.getExpr() = this.getParentWithConversions*()) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 68930f3b81b..02a123a1a68 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1788,6 +1788,10 @@ case @expr.kind of | 382 = @isvalidwinrttype | 383 = @iswinclass | 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof ; @var_args_expr = @vastartexpr @@ -1901,6 +1905,9 @@ case @expr.kind of | @isvalidwinrttype | @iswinclass | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable ; new_allocated_type( @@ -1961,7 +1968,7 @@ uuidof_bind( int type_id: @type ref ); -@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; sizeof_bind( unique int expr: @runtime_sizeof_or_alignof ref, diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index ce799a53e70..d2d1f3a4e63 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9741 + 9742 @externalDataElement @@ -16,14 +16,14 @@ @svnentry 575525 - - @location_stmt - 3819884 - @location_default 29768335 + + @location_stmt + 3819884 + @diagnostic 4996 @@ -42,7 +42,7 @@ @macro_expansion - 33257696 + 33257908 @other_macro_reference @@ -98,7 +98,7 @@ @localvariable - 576947 + 576952 @enumconstant @@ -392,26 +392,6 @@ @specifier 24747 - - @gnuattribute - 553773 - - - @stdattribute - 253558 - - - @declspec - 239153 - - - @msattribute - 3 - - - @alignas - 4669 - @attribute_arg_token 25213 @@ -436,6 +416,26 @@ @attribute_arg_expr 3 + + @gnuattribute + 553773 + + + @stdattribute + 253563 + + + @declspec + 239153 + + + @msattribute + 3 + + + @alignas + 4669 + @derivation 391568 @@ -446,7 +446,7 @@ @comment - 8265960 + 8266137 @namespace @@ -554,7 +554,7 @@ @pdiffexpr - 33689 + 33690 @lshiftexpr @@ -638,7 +638,7 @@ @assignorexpr - 23627 + 23628 @assignxorexpr @@ -662,11 +662,11 @@ @commaexpr - 122838 + 122841 @subscriptexpr - 364479 + 364482 @callexpr @@ -966,11 +966,11 @@ @static_cast - 215643 + 215649 @reinterpret_cast - 31620 + 31621 @const_cast @@ -1340,6 +1340,22 @@ @iswininterface 1 + + @istriviallyequalitycomparable + 2 + + + @isscopedenum + 2 + + + @istriviallyrelocatable + 2 + + + @datasizeof + 10 + @stmt_expr 1486025 @@ -1350,7 +1366,7 @@ @stmt_while - 29316 + 29317 @stmt_goto @@ -1390,11 +1406,11 @@ @stmt_decl - 593107 + 593124 @stmt_empty - 192683 + 192685 @stmt_continue @@ -1434,7 +1450,7 @@ @stmt_constexpr_if - 52997 + 52998 @stmt_co_return @@ -1470,7 +1486,7 @@ @ppd_define - 2291875 + 2291924 @ppd_undef @@ -1482,7 +1498,7 @@ @ppd_line - 27520 + 27521 @ppd_error @@ -1490,7 +1506,7 @@ @ppd_pragma - 296704 + 296710 @ppd_objc_import @@ -1532,11 +1548,11 @@ compilations - 9741 + 9742 id - 9741 + 9742 cwd @@ -1554,7 +1570,7 @@ 1 2 - 9741 + 9742 @@ -2128,7 +2144,7 @@ seconds - 9588 + 9628 @@ -2209,47 +2225,52 @@ 3 4 - 799 + 679 4 5 - 199 + 319 5 - 7 - 119 + 8 + 159 8 - 10 - 159 + 9 + 79 10 11 - 119 + 199 11 - 14 + 17 159 - 14 + 17 18 + 39 + + + 18 + 19 159 - 19 - 24 + 21 + 53 159 - 42 - 85 - 119 + 95 + 96 + 39 @@ -2317,43 +2338,43 @@ 3 4 - 1358 + 1398 4 5 - 399 + 359 5 6 - 239 + 279 6 7 - 439 + 399 7 8 - 119 + 79 8 - 10 + 9 + 239 + + + 9 + 20 279 - 10 - 27 + 24 + 92 279 - - 28 - 89 - 199 - @@ -2403,13 +2424,13 @@ 79 - 123 - 124 + 135 + 136 39 - 137 - 138 + 138 + 139 39 @@ -2426,26 +2447,26 @@ 1 2 - 5073 + 4794 2 3 - 1957 + 2037 3 4 - 1438 + 1478 4 5 - 679 + 878 5 - 45 + 47 439 @@ -2462,32 +2483,32 @@ 1 2 - 4754 + 4394 2 3 - 1438 + 1717 3 4 - 1398 + 1757 4 5 - 799 + 719 5 - 7 - 799 + 9 + 838 - 7 - 74 - 399 + 9 + 77 + 199 @@ -2503,12 +2524,12 @@ 1 2 - 8549 + 8110 2 3 - 1038 + 1518 @@ -2844,15 +2865,15 @@ compilation_finished - 9741 + 9742 id - 9741 + 9742 cpu_seconds - 7314 + 7100 elapsed_seconds @@ -2870,7 +2891,7 @@ 1 2 - 9741 + 9742 @@ -2886,7 +2907,7 @@ 1 2 - 9741 + 9742 @@ -2902,17 +2923,17 @@ 1 2 - 5870 + 5633 2 3 - 993 + 925 3 - 13 - 451 + 17 + 541 @@ -2928,12 +2949,12 @@ 1 2 - 6581 + 6344 2 3 - 733 + 756 @@ -2952,48 +2973,48 @@ 33 - 6 - 7 + 4 + 5 11 - 8 - 9 + 9 + 10 11 - 11 - 12 + 12 + 13 11 - 16 - 17 + 17 + 18 11 - 49 - 50 + 47 + 48 11 - 166 - 167 + 165 + 166 11 - 173 - 174 + 174 + 175 11 - 190 - 191 + 187 + 188 11 - 238 - 239 + 242 + 243 11 @@ -3013,48 +3034,48 @@ 33 - 6 - 7 + 4 + 5 11 - 8 - 9 + 9 + 10 11 - 11 - 12 + 12 + 13 11 - 16 - 17 + 17 + 18 11 - 47 - 48 + 46 + 47 11 - 132 - 133 + 115 + 116 11 - 133 - 134 + 126 + 127 11 - 141 - 142 + 142 + 143 11 - 213 - 214 + 219 + 220 11 @@ -11755,7 +11776,7 @@ fileannotations - 5129296 + 5129447 id @@ -11767,11 +11788,11 @@ name - 54771 + 54773 value - 46045 + 46046 @@ -11790,7 +11811,7 @@ 2 3 - 4729 + 4730 @@ -12011,7 +12032,7 @@ 2 3 - 6219 + 6220 3 @@ -12041,7 +12062,7 @@ 20 34 - 4221 + 4222 34 @@ -12077,7 +12098,7 @@ 1 2 - 54771 + 54773 @@ -12098,7 +12119,7 @@ 2 3 - 8059 + 8060 3 @@ -12164,7 +12185,7 @@ 1 2 - 7156 + 7157 2 @@ -12219,7 +12240,7 @@ 322 399 - 3950 + 3951 399 @@ -12240,7 +12261,7 @@ 1 2 - 46034 + 46035 2 @@ -12331,15 +12352,15 @@ inmacroexpansion - 109779175 + 109779198 id - 18027366 + 18027369 inv - 2700172 + 2700171 @@ -12353,32 +12374,32 @@ 1 3 - 1581957 + 1581956 3 5 - 1077798 + 1077799 5 6 - 1184883 + 1184884 6 7 - 4819925 + 4819927 7 8 - 6385962 + 6385963 8 9 - 2605254 + 2605255 9 @@ -12399,12 +12420,12 @@ 1 2 - 378425 + 378424 2 3 - 544108 + 544106 3 @@ -12434,12 +12455,12 @@ 10 11 - 325486 + 325487 11 337 - 224846 + 224848 339 @@ -12459,7 +12480,7 @@ affectedbymacroexpansion - 35689090 + 35689096 id @@ -12467,7 +12488,7 @@ inv - 2784775 + 2784774 @@ -12481,7 +12502,7 @@ 1 2 - 2815935 + 2815934 2 @@ -12527,7 +12548,7 @@ 1 4 - 229117 + 229116 4 @@ -12597,19 +12618,19 @@ macroinvocations - 33490949 + 33491157 id - 33490949 + 33491157 macro_id - 79482 + 79484 location - 760368 + 760390 kind @@ -12627,7 +12648,7 @@ 1 2 - 33490949 + 33491157 @@ -12643,7 +12664,7 @@ 1 2 - 33490949 + 33491157 @@ -12659,7 +12680,7 @@ 1 2 - 33490949 + 33491157 @@ -12710,7 +12731,7 @@ 26 61 - 6061 + 6062 61 @@ -12741,7 +12762,7 @@ 1 2 - 42467 + 42468 2 @@ -12756,7 +12777,7 @@ 4 6 - 6840 + 6841 6 @@ -12787,7 +12808,7 @@ 1 2 - 73747 + 73749 2 @@ -12808,37 +12829,42 @@ 1 2 - 281218 + 281226 2 3 - 169654 + 169659 3 4 - 70733 + 70735 4 5 - 60325 + 60327 5 - 9 - 70360 + 8 + 53858 - 9 - 21 - 59106 + 8 + 17 + 62889 - 21 - 244764 - 48969 + 17 + 525 + 57030 + + + 534 + 244748 + 4662 @@ -12854,12 +12880,12 @@ 1 2 - 714198 + 714219 2 350 - 46169 + 46171 @@ -12875,7 +12901,7 @@ 1 2 - 760368 + 760390 @@ -12889,13 +12915,13 @@ 12 - 20663 - 20664 + 20662 + 20663 11 - 2946167 - 2946168 + 2946099 + 2946100 11 @@ -12948,15 +12974,15 @@ macroparent - 29950278 + 29950856 id - 29950278 + 29950856 parent_id - 23286721 + 23287102 @@ -12970,7 +12996,7 @@ 1 2 - 29950278 + 29950856 @@ -12986,17 +13012,17 @@ 1 2 - 17992646 + 17992872 2 3 - 4459439 + 4459570 3 88 - 834635 + 834659 @@ -13084,11 +13110,11 @@ macro_argument_unexpanded - 84547741 + 84549814 invocation - 26214485 + 26214874 argument_index @@ -13096,7 +13122,7 @@ text - 318300 + 318310 @@ -13110,22 +13136,22 @@ 1 2 - 7432628 + 7432497 2 3 - 10673794 + 10674075 3 4 - 6139174 + 6139354 4 67 - 1968888 + 1968946 @@ -13141,22 +13167,22 @@ 1 2 - 7502786 + 7502657 2 3 - 10820341 + 10820626 3 4 - 5972849 + 5973025 4 67 - 1918508 + 1918564 @@ -13181,7 +13207,7 @@ 718261 - 2322238 + 2322204 33 @@ -13224,12 +13250,12 @@ 1 2 - 35073 + 35074 2 3 - 61262 + 61264 3 @@ -13239,32 +13265,32 @@ 4 5 - 45086 + 45087 5 7 - 23931 + 23932 7 12 - 18490 + 18592 12 16 - 21617 + 21516 16 23 - 24981 + 24982 23 42 - 24326 + 24327 42 @@ -13274,7 +13300,7 @@ 128 522393 - 21910 + 21911 @@ -13290,17 +13316,17 @@ 1 2 - 230194 + 230201 2 3 - 77822 + 77824 3 9 - 10283 + 10284 @@ -13310,11 +13336,11 @@ macro_argument_expanded - 84547741 + 84549814 invocation - 26214485 + 26214874 argument_index @@ -13322,7 +13348,7 @@ text - 192897 + 192902 @@ -13336,22 +13362,22 @@ 1 2 - 7432628 + 7432497 2 3 - 10673794 + 10674075 3 4 - 6139174 + 6139354 4 67 - 1968888 + 1968946 @@ -13367,22 +13393,22 @@ 1 2 - 10688876 + 10688841 2 3 - 9201666 + 9201903 3 4 - 5208146 + 5208300 4 9 - 1115796 + 1115829 @@ -13407,7 +13433,7 @@ 718261 - 2322238 + 2322204 33 @@ -13455,7 +13481,7 @@ 2 3 - 37308 + 37309 3 @@ -13480,12 +13506,12 @@ 7 9 - 14776 + 14788 9 14 - 12044 + 12033 14 @@ -13500,11 +13526,11 @@ 48 151 - 14471 + 14472 152 - 1060426 + 1060410 13738 @@ -13521,12 +13547,12 @@ 1 2 - 97622 + 97625 2 3 - 80870 + 80872 3 @@ -15161,15 +15187,15 @@ fun_decl_noexcept - 61665 + 61667 fun_decl - 61665 + 61667 constant - 61567 + 61568 @@ -15183,7 +15209,7 @@ 1 2 - 61665 + 61667 @@ -15199,7 +15225,7 @@ 1 2 - 61468 + 61469 2 @@ -17082,7 +17108,7 @@ using_container - 466789 + 466802 parent @@ -17090,7 +17116,7 @@ child - 295983 + 295992 @@ -17160,17 +17186,17 @@ 1 2 - 218307 + 218314 2 3 - 51723 + 51725 3 11 - 23818 + 23819 13 @@ -18289,11 +18315,11 @@ overrides - 125725 + 125735 new - 122753 + 122762 old @@ -18311,7 +18337,7 @@ 1 2 - 119788 + 119798 2 @@ -18719,11 +18745,11 @@ localvariables - 576947 + 576952 id - 576947 + 576952 type_id @@ -18731,7 +18757,7 @@ name - 90548 + 90549 @@ -18745,7 +18771,7 @@ 1 2 - 576947 + 576952 @@ -18761,7 +18787,7 @@ 1 2 - 576947 + 576952 @@ -18854,7 +18880,7 @@ 1 2 - 57031 + 57032 2 @@ -18900,7 +18926,7 @@ 3 1486 - 6644 + 6645 @@ -18910,11 +18936,11 @@ autoderivation - 147958 + 147961 var - 147958 + 147961 derivation_type @@ -18932,7 +18958,7 @@ 1 2 - 147958 + 147961 @@ -21448,15 +21474,15 @@ typedefbase - 1686067 + 1686117 id - 1686067 + 1686117 type_id - 793466 + 793489 @@ -21470,7 +21496,7 @@ 1 2 - 1686067 + 1686117 @@ -21486,22 +21512,22 @@ 1 2 - 617388 + 617406 2 3 - 83252 + 83254 3 6 - 62030 + 62031 6 5437 - 30794 + 30795 @@ -22434,11 +22460,11 @@ is_pod_class - 534689 + 534705 id - 534689 + 534705 @@ -22566,11 +22592,11 @@ class_template_argument - 2883028 + 2882763 type_id - 1315580 + 1315517 index @@ -22578,7 +22604,7 @@ arg_type - 840471 + 840394 @@ -22592,7 +22618,7 @@ 1 2 - 540943 + 540959 2 @@ -22602,12 +22628,12 @@ 3 4 - 231424 + 231397 4 7 - 120368 + 120315 7 @@ -22628,22 +22654,22 @@ 1 2 - 567595 + 567611 2 3 - 410482 + 410483 3 4 - 244869 + 244842 4 113 - 92633 + 92579 @@ -22687,8 +22713,8 @@ 101 - 12810 - 116427 + 12805 + 116418 45 @@ -22751,27 +22777,27 @@ 1 2 - 523378 + 523348 2 3 - 174384 + 174344 3 4 - 51317 + 51341 4 10 - 64016 + 63984 10 10265 - 27374 + 27375 @@ -22787,12 +22813,12 @@ 1 2 - 746573 + 746494 2 3 - 77833 + 77836 3 @@ -23888,22 +23914,22 @@ is_variable_template - 40289 + 40290 id - 40289 + 40290 variable_instantiation - 204304 + 204308 to - 204304 + 204308 from @@ -23921,7 +23947,7 @@ 1 2 - 204304 + 204308 @@ -23937,7 +23963,7 @@ 1 2 - 12214 + 12215 2 @@ -23982,11 +24008,11 @@ variable_template_argument - 383982 + 383990 variable_id - 195635 + 195640 index @@ -23994,7 +24020,7 @@ arg_type - 187558 + 187562 @@ -24008,22 +24034,22 @@ 1 2 - 86095 + 86097 2 3 - 70235 + 70237 3 4 - 28862 + 28863 4 17 - 10441 + 10442 @@ -24039,17 +24065,17 @@ 1 2 - 90429 + 90431 2 3 - 71713 + 71714 3 4 - 24035 + 24036 4 @@ -24187,7 +24213,7 @@ 1 2 - 145594 + 145597 2 @@ -24218,7 +24244,7 @@ 1 2 - 170220 + 170224 2 @@ -25276,15 +25302,15 @@ explicit_specifier_exprs - 32605 + 32606 func_id - 32605 + 32606 constant - 32605 + 32606 @@ -25298,7 +25324,7 @@ 1 2 - 32605 + 32606 @@ -25314,7 +25340,7 @@ 1 2 - 32605 + 32606 @@ -27216,15 +27242,15 @@ enclosingfunction - 118325 + 118329 child - 118325 + 118329 parent - 67663 + 67665 @@ -27238,7 +27264,7 @@ 1 2 - 118325 + 118329 @@ -27254,12 +27280,12 @@ 1 2 - 35761 + 35762 2 3 - 21052 + 21053 3 @@ -27269,7 +27295,7 @@ 4 45 - 4887 + 4888 @@ -28600,19 +28626,19 @@ comments - 8265960 + 8266137 id - 8265960 + 8266137 contents - 3147511 + 3147578 location - 8265960 + 8266137 @@ -28626,7 +28652,7 @@ 1 2 - 8265960 + 8266137 @@ -28642,7 +28668,7 @@ 1 2 - 8265960 + 8266137 @@ -28658,17 +28684,17 @@ 1 2 - 2879275 + 2879337 2 7 - 236614 + 236620 7 32784 - 31620 + 31621 @@ -28684,17 +28710,17 @@ 1 2 - 2879275 + 2879337 2 7 - 236614 + 236620 7 32784 - 31620 + 31621 @@ -28710,7 +28736,7 @@ 1 2 - 8265960 + 8266137 @@ -28726,7 +28752,7 @@ 1 2 - 8265960 + 8266137 @@ -28794,15 +28820,15 @@ exprconv - 7033024 + 7033025 converted - 7033024 + 7033025 conversion - 7033024 + 7033025 @@ -28816,7 +28842,7 @@ 1 2 - 7033024 + 7033025 @@ -28832,7 +28858,7 @@ 1 2 - 7033024 + 7033025 @@ -29557,11 +29583,11 @@ expr_isload - 5096974 + 5096886 expr_id - 5096974 + 5096886 @@ -29837,7 +29863,7 @@ qualifyingelement - 97519 + 97538 location @@ -29951,7 +29977,7 @@ 1 2 - 58401 + 58420 2 @@ -29987,7 +30013,7 @@ 1 2 - 58401 + 58420 2 @@ -30023,7 +30049,7 @@ 1 2 - 63815 + 63834 2 @@ -30136,12 +30162,12 @@ 1 2 - 137074 + 137055 2 3 - 55684 + 55703 3 @@ -30262,7 +30288,7 @@ fun - 511325 + 511344 @@ -30297,12 +30323,12 @@ 1 2 - 315052 + 315090 2 3 - 77912 + 77893 3 @@ -32082,15 +32108,15 @@ expr_types - 18451522 + 18451524 id - 18319865 + 18319863 typeid - 1214570 + 1214606 value_category @@ -32108,12 +32134,12 @@ 1 2 - 18188208 + 18188202 2 3 - 131657 + 131661 @@ -32129,7 +32155,7 @@ 1 2 - 18319865 + 18319863 @@ -32145,42 +32171,42 @@ 1 2 - 438545 + 438558 2 3 - 249328 + 249335 3 4 - 102804 + 102807 4 5 - 81886 + 81888 5 8 - 109283 + 109275 8 14 - 96471 + 96485 14 41 - 91662 + 91665 41 - 125330 - 44589 + 125325 + 44590 @@ -32196,12 +32222,12 @@ 1 2 - 1050188 + 1050219 2 3 - 154189 + 154193 3 @@ -32225,13 +32251,13 @@ 11 - 368484 - 368485 + 368483 + 368484 11 - 1239526 - 1239527 + 1239479 + 1239480 11 @@ -34691,11 +34717,11 @@ stmts - 4630245 + 4630345 id - 4630245 + 4630345 kind @@ -34703,7 +34729,7 @@ location - 2171696 + 2171742 @@ -34717,7 +34743,7 @@ 1 2 - 4630245 + 4630345 @@ -34733,7 +34759,7 @@ 1 2 - 4630245 + 4630345 @@ -34961,22 +34987,22 @@ 1 2 - 1725752 + 1725789 2 3 - 178298 + 178302 3 8 - 167364 + 167367 8 653 - 100280 + 100282 @@ -34992,12 +35018,12 @@ 1 2 - 2117812 + 2117857 2 8 - 53883 + 53884 @@ -35295,15 +35321,15 @@ constexpr_if_then - 52997 + 52998 constexpr_if_stmt - 52997 + 52998 then_id - 52997 + 52998 @@ -35317,7 +35343,7 @@ 1 2 - 52997 + 52998 @@ -35333,7 +35359,7 @@ 1 2 - 52997 + 52998 @@ -35391,15 +35417,15 @@ while_body - 29316 + 29317 while_stmt - 29316 + 29317 body_id - 29316 + 29317 @@ -35413,7 +35439,7 @@ 1 2 - 29316 + 29317 @@ -35429,7 +35455,7 @@ 1 2 - 29316 + 29317 @@ -36308,11 +36334,11 @@ stmt_decl_bind - 580844 + 580849 stmt - 541062 + 541067 num @@ -36320,7 +36346,7 @@ decl - 580740 + 580745 @@ -36334,7 +36360,7 @@ 1 2 - 520373 + 520378 2 @@ -36355,7 +36381,7 @@ 1 2 - 520373 + 520378 2 @@ -36558,7 +36584,7 @@ 1 2 - 580703 + 580708 2 @@ -36579,7 +36605,7 @@ 1 2 - 580740 + 580745 @@ -36589,11 +36615,11 @@ stmt_decl_entry_bind - 580844 + 580849 stmt - 541062 + 541067 num @@ -36601,7 +36627,7 @@ decl_entry - 580786 + 580791 @@ -36615,7 +36641,7 @@ 1 2 - 520373 + 520378 2 @@ -36636,7 +36662,7 @@ 1 2 - 520373 + 520378 2 @@ -36839,7 +36865,7 @@ 1 2 - 580765 + 580770 3 @@ -36860,7 +36886,7 @@ 1 2 - 580786 + 580791 @@ -37410,19 +37436,19 @@ preproctext - 3367675 + 3367747 id - 3367675 + 3367747 head - 2440621 + 2440673 body - 1426388 + 1426418 @@ -37436,7 +37462,7 @@ 1 2 - 3367675 + 3367747 @@ -37452,7 +37478,7 @@ 1 2 - 3367675 + 3367747 @@ -37468,12 +37494,12 @@ 1 2 - 2301824 + 2301873 2 740 - 138797 + 138800 @@ -37489,12 +37515,12 @@ 1 2 - 2381911 + 2381962 2 5 - 58710 + 58711 @@ -37510,12 +37536,12 @@ 1 2 - 1291236 + 1291263 2 6 - 106979 + 106981 6 @@ -37536,17 +37562,17 @@ 1 2 - 1294092 + 1294120 2 7 - 107274 + 107276 7 2980 - 25020 + 25021 diff --git a/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/old.dbscheme b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/old.dbscheme new file mode 100644 index 00000000000..68930f3b81b --- /dev/null +++ b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/old.dbscheme @@ -0,0 +1,2310 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + ; + +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/68930f3b81bbe3fdbb91c850deca1fec8072d62a/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..02a123a1a68 --- /dev/null +++ b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/semmlecode.cpp.dbscheme @@ -0,0 +1,2317 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/68930f3b81bbe3fdbb91c850deca1fec8072d62a/upgrade.properties b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/upgrade.properties new file mode 100644 index 00000000000..db0e7e92d0e --- /dev/null +++ b/cpp/ql/lib/upgrades/68930f3b81bbe3fdbb91c850deca1fec8072d62a/upgrade.properties @@ -0,0 +1,2 @@ +description: Add new builtin operations +compatibility: backwards diff --git a/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp b/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp index 167023c1a33..73244454372 100644 --- a/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp +++ b/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp @@ -1,4 +1,4 @@ -// semmle-extractor-options: --clang --clang_version 180000 +// semmle-extractor-options: --clang --edg --clang_version --edg 190000 struct S { void f() {} @@ -108,3 +108,16 @@ bool b_is_unbounded_array2 = __is_unbounded_array(int[42]); bool b_is_referenceable1 = __is_referenceable(int); bool b_is_referenceable2 = __is_referenceable(void); + +bool b_is_trivially_equality_comparable1 = __is_trivially_equality_comparable(int); +bool b_is_trivially_equality_comparable2 = __is_trivially_equality_comparable(void); + +enum class E { + a, b +}; + +bool b_is_scoped_enum1 = __is_scoped_enum(E); +bool b_is_scoped_enum2 = __is_scoped_enum(int); + +bool b_is_trivially_relocatable1 = __is_trivially_relocatable(int); +bool b_is_trivially_relocatable2 = __is_trivially_relocatable(void); diff --git a/cpp/ql/test/library-tests/builtins/type_traits/expr.expected b/cpp/ql/test/library-tests/builtins/type_traits/expr.expected index edf63baef9e..55bf0757a49 100644 --- a/cpp/ql/test/library-tests/builtins/type_traits/expr.expected +++ b/cpp/ql/test/library-tests/builtins/type_traits/expr.expected @@ -153,7 +153,21 @@ | clang.cpp:109:28:109:50 | int | | | | clang.cpp:110:28:110:51 | __is_referenceable | void | 0 | | clang.cpp:110:28:110:51 | void | | | +| clang.cpp:112:44:112:82 | __is_trivially_equality_comparable | int | 1 | +| clang.cpp:112:44:112:82 | int | | | +| clang.cpp:113:44:113:83 | __is_trivially_equality_comparable | void | 0 | +| clang.cpp:113:44:113:83 | void | | | +| clang.cpp:119:26:119:44 | E | | | +| clang.cpp:119:26:119:44 | __is_scoped_enum | E | 1 | +| clang.cpp:120:26:120:46 | __is_scoped_enum | int | 0 | +| clang.cpp:120:26:120:46 | int | | | +| clang.cpp:122:36:122:66 | __is_trivially_relocatable | int | 1 | +| clang.cpp:122:36:122:66 | int | | | +| clang.cpp:123:36:123:67 | __is_trivially_relocatable | void | 0 | +| clang.cpp:123:36:123:67 | void | | | | file://:0:0:0:0 | 0 | | 0 | +| file://:0:0:0:0 | 0 | | 0 | +| file://:0:0:0:0 | 1 | | 1 | | file://:0:0:0:0 | 1 | | 1 | | file://:0:0:0:0 | 2 | | 2 | | gcc.cpp:3:25:3:25 | 8 | | 8 | diff --git a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.cpp b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.cpp new file mode 100644 index 00000000000..b6e65889a68 --- /dev/null +++ b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.cpp @@ -0,0 +1,30 @@ +// semmle-extractor-options: --clang --edg --clang_version --edg 190000 + +typedef unsigned int size_t; + +class MyClass +{ +public: + int x; + int *ptr; + char c; +}; + +void func() { + int i; + char c; + int * ptr; + MyClass mc; + int arr[10]; + + size_t sz1 = __datasizeof(int); + size_t sz2 = __datasizeof(char); + size_t sz3 = __datasizeof(int *); + size_t sz4 = __datasizeof(MyClass); + size_t sz5 = __datasizeof(i); + size_t sz6 = __datasizeof(c); + size_t sz7 = __datasizeof(ptr); + size_t sz8 = __datasizeof(mc); + size_t sz9 = __datasizeof(arr); + size_t sz10 = __datasizeof(arr[4]); +} diff --git a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected new file mode 100644 index 00000000000..e0deac1c2ba --- /dev/null +++ b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected @@ -0,0 +1,10 @@ +| datasizeof.cpp:20:15:20:31 | sizeof(int) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | +| datasizeof.cpp:21:15:21:32 | sizeof(char) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | +| datasizeof.cpp:22:15:22:33 | sizeof(int *) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | +| datasizeof.cpp:23:15:23:35 | sizeof(MyClass) | DatasizeofTypeOperator.getTypeOperand() | datasizeof.cpp:5:7:5:13 | MyClass | +| datasizeof.cpp:24:15:24:29 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:24:28:24:28 | i | +| datasizeof.cpp:25:15:25:29 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:25:28:25:28 | c | +| datasizeof.cpp:26:15:26:31 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:26:28:26:30 | ptr | +| datasizeof.cpp:27:15:27:30 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:27:28:27:29 | mc | +| datasizeof.cpp:28:15:28:31 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:28:28:28:30 | arr | +| datasizeof.cpp:29:16:29:35 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:29:29:29:34 | access to array | diff --git a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql new file mode 100644 index 00000000000..c2edf1844ff --- /dev/null +++ b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql @@ -0,0 +1,10 @@ +import cpp + +from DatasizeofOperator sto, string elemDesc, Element e +where + elemDesc = "DatasizeofTypeOperator.getTypeOperand()" and + e = sto.(DatasizeofTypeOperator).getTypeOperand() + or + elemDesc = "DatasizeofExprOperator.getExprOperand()" and + e = sto.(DatasizeofExprOperator).getExprOperand() +select sto, elemDesc, e From 026969b6e92466652ae3d80db974f40d4aff62ab Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 28 Aug 2024 12:21:59 +0200 Subject: [PATCH 226/334] C++: Add change note --- .../lib/change-notes/2024-08-28-more-builtin-operations.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-08-28-more-builtin-operations.md diff --git a/cpp/ql/lib/change-notes/2024-08-28-more-builtin-operations.md b/cpp/ql/lib/change-notes/2024-08-28-more-builtin-operations.md new file mode 100644 index 00000000000..25314598759 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-08-28-more-builtin-operations.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added subclasses of `BuiltInOperations` for the `__is_scoped_enum`, `__is_trivially_equality_comparable`, and `__is_trivially_relocatable` builtin operations. +* Added a subclass of `Expr` for `__datasizeof` expressions. From 6a9bd0de1d1a4f12bd599c5754aecaa7fb085608 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 28 Aug 2024 14:13:28 +0200 Subject: [PATCH 227/334] Dataflow: Include FlowState in SummaryCtx. --- .../codeql/dataflow/internal/DataFlowImpl.qll | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index f42da2f2fc0..48d6ba61e2f 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1565,7 +1565,7 @@ module MakeImpl Lang> { fwdFlowIn(node, apa, state, cc, t, ap, allowsFlowThrough) and if allowsFlowThrough = true then ( - summaryCtx = TSummaryCtxSome(node, t, ap) + summaryCtx = TSummaryCtxSome(node, state, t, ap) ) else ( summaryCtx = TSummaryCtxNone() and // When the call contexts of source and sink needs to match then there's @@ -1592,7 +1592,9 @@ module MakeImpl Lang> { private newtype TSummaryCtx = TSummaryCtxNone() or - TSummaryCtxSome(ParamNodeEx p, Typ t, Ap ap) { fwdFlowIn(p, _, _, _, t, ap, true) } + TSummaryCtxSome(ParamNodeEx p, FlowState state, Typ t, Ap ap) { + fwdFlowIn(p, _, state, _, t, ap, true) + } /** * A context for generating flow summaries. This represents flow entry through @@ -1616,10 +1618,11 @@ module MakeImpl Lang> { /** A summary context from which a flow summary can be generated. */ private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { private ParamNodeEx p; + private FlowState state; private Typ t; private Ap ap; - SummaryCtxSome() { this = TSummaryCtxSome(p, t, ap) } + SummaryCtxSome() { this = TSummaryCtxSome(p, state, t, ap) } ParamNodeEx getParamNode() { result = p } @@ -2074,7 +2077,7 @@ module MakeImpl Lang> { fwdFlow(pragma[only_bind_into](ret), state, ccc, summaryCtx, t, ap, pragma[only_bind_into](apa)) and summaryCtx = - TSummaryCtxSome(pragma[only_bind_into](p), _, pragma[only_bind_into](argAp)) and + TSummaryCtxSome(pragma[only_bind_into](p), _, _, pragma[only_bind_into](argAp)) and not outBarrier(ret, state) and kind = ret.getKind() and parameterFlowThroughAllowed(p, kind) and @@ -2110,9 +2113,9 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowIsEntered0( DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, - ParamNodeEx p, Typ t, Ap ap + ParamNodeEx p, FlowState state, Typ t, Ap ap ) { - FwdFlowIn::fwdFlowIn(call, arg, _, p, _, cc, innerCc, + FwdFlowIn::fwdFlowIn(call, arg, _, p, state, cc, innerCc, summaryCtx, t, ap, _, _, true) } @@ -2125,9 +2128,9 @@ module MakeImpl Lang> { DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, SummaryCtxSome innerSummaryCtx ) { - exists(ParamNodeEx p, Typ t, Ap ap | - fwdFlowIsEntered0(call, arg, cc, innerCc, summaryCtx, p, t, ap) and - innerSummaryCtx = TSummaryCtxSome(p, t, ap) + exists(ParamNodeEx p, FlowState state, Typ t, Ap ap | + fwdFlowIsEntered0(call, arg, cc, innerCc, summaryCtx, p, state, t, ap) and + innerSummaryCtx = TSummaryCtxSome(p, state, t, ap) ) } @@ -2160,7 +2163,7 @@ module MakeImpl Lang> { Ap argAp, ApApprox argApa, Ap ap ) { exists(DataFlowCall call, ApApprox apa, boolean allowsFieldFlow | - returnFlowsThrough0(call, state, ccc, ap, apa, ret, TSummaryCtxSome(p, argT, argAp), + returnFlowsThrough0(call, state, ccc, ap, apa, ret, TSummaryCtxSome(p, _, argT, argAp), argApa) and flowThroughOutOfCall(call, ccc, ret, _, allowsFieldFlow, argApa, apa) and pos = ret.getReturnPosition() and @@ -2522,7 +2525,7 @@ module MakeImpl Lang> { exists(Ap ap0 | parameterMayFlowThrough(p, _) and revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, ap0) and - fwdFlow(n, state, any(CcCall ccc), TSummaryCtxSome(p, _, ap), _, ap0, _) + fwdFlow(n, state, any(CcCall ccc), TSummaryCtxSome(p, _, _, ap), _, ap0, _) ) } @@ -3114,8 +3117,7 @@ module MakeImpl Lang> { | fwdFlowThroughStep0(call, arg, cc, state, ccc, summaryCtx, t, ap, apa, ret, innerSummaryCtx, innerArgApa) and - innerSummaryCtx = TSummaryCtxSome(p, innerArgT, innerArgAp) and - revFlow(arg, state0, _, _, _) and + innerSummaryCtx = TSummaryCtxSome(p, state0, innerArgT, innerArgAp) and pn1 = mkPathNode(arg, state0, cc, summaryCtx, innerArgT, innerArgAp) and pn2 = typeStrengthenToPathNode(p, state0, ccc, innerSummaryCtx, innerArgT, innerArgAp) and pn3 = mkPathNode(ret, state, ccc, innerSummaryCtx, t, ap) @@ -3244,7 +3246,7 @@ module MakeImpl Lang> { fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, t, ap, allowsFlowThrough) and label = "" and if allowsFlowThrough = true - then summaryCtx = TSummaryCtxSome(node, t, ap) + then summaryCtx = TSummaryCtxSome(node, state, t, ap) else summaryCtx = TSummaryCtxNone() ) or From 6d346dbedd27522beb0ca44829008d7717a3a114 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Aug 2024 14:40:04 +0200 Subject: [PATCH 228/334] DataFlow: Bugfix in flow state for value preservation. --- .../dataflow/internal/ContentDataFlowImpl.qll | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index c63f36bdeda..f4b4b9655e4 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -51,6 +51,11 @@ module MakeImplContentDataFlow Lang> { */ default predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + /** + * Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow steps. + */ + default predicate isAdditionalTaintStep(Node node1, Node node2) { none() } + /** Holds if data flow into `node` is prohibited. */ default predicate isBarrier(Node node) { none() } @@ -101,7 +106,7 @@ module MakeImplContentDataFlow Lang> { predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) { storeStep(node1, state1, _, node2, state2) or readStep(node1, state1, _, node2, state2) or - additionalStep(node1, state1, node2, state2) + additionalTaintStep(node1, state1, node2, state2) } predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; @@ -229,8 +234,8 @@ module MakeImplContentDataFlow Lang> { ) } - private predicate additionalStep(Node node1, State state1, Node node2, State state2) { - ContentConfig::isAdditionalFlowStep(node1, node2) and + private predicate additionalTaintStep(Node node1, State state1, Node node2, State state2) { + ContentConfig::isAdditionalTaintStep(node1, node2) and ( state1 instanceof InitState and state2.(InitState).decode(false) @@ -302,12 +307,16 @@ module MakeImplContentDataFlow Lang> { // relation, when flow can reach a sink without going back out Flow::PathGraph::subpaths(pred, succ, _, _) and not reachesSink(succ) - or + ) + or + exists(Node predNode, State predState, Node succNode, State succState | + succNodeAndState(pred, predNode, predState, succ, succNode, succState) + | // needed to record store steps - storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + storeStep(predNode, predState, _, succNode, succState) or // needed to record read steps - readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState()) + readStep(predNode, predState, _, succNode, succState) ) } From e8595e28e92368eceeba5bd40d91163e6c75849e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Aug 2024 15:04:38 +0200 Subject: [PATCH 229/334] Update java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll Co-authored-by: Anders Schack-Mulligen --- .../code/java/dataflow/internal/DataFlowDispatch.qll | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll index 633a8cd3472..f63df6ad09e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll @@ -43,9 +43,12 @@ private module DispatchImpl { /** * Gets a viable implementation of the target of the given `Call`. * The following heuristic is applied for finding the appropriate callable: - * 1. If an exact manual model exists, only dispatch to the summarized callable. - * 2. If a (non exact) manual model exists and/or if the source code is available, dispatch to both/either. - * 3. Only dispatch to a summarized callable in case the static call target in not in source. + * In general, dispatch to both any existing model and any viable source dispatch. + * However, if the model is generated and the static call target is in the source then + * we trust the source more than the model and skip dispatch to the model. + * Vice versa, if the model is manual and the source dispatch has a comparatively low + * confidence then we only dispatch to the model. Additionally, manual models that + * match a source dispatch exactly take precedence over the source. */ DataFlowCallable viableCallable(DataFlowCall c) { exists(Call call | call = c.asCall() | From 2b571cf450dfbb8f2dfc3773a944db68b9e0ad39 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 28 Aug 2024 15:11:42 +0200 Subject: [PATCH 230/334] C++: Address review comments --- cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll | 6 +++--- .../types/datasizeof/datasizeof.expected | 20 +++++++++---------- .../types/datasizeof/datasizeof.ql | 2 +- .../types/sizeof/sizeof.expected | 20 +++++++++---------- .../test/library-tests/types/sizeof/sizeof.ql | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll index b36624d127c..85293cc7313 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll @@ -795,7 +795,7 @@ class AlignofTypeOperator extends AlignofOperator { * A C++ `__datasizeof` expression (used by some implementations * of the `` header). * - * The `__datasizeof` expression behaves identical to `sizeof` except + * The `__datasizeof` expression behaves identically to `sizeof` except * that the result ignores tail padding. */ class DatasizeofOperator extends Expr, @datasizeof { @@ -813,7 +813,7 @@ class DatasizeofExprOperator extends DatasizeofOperator { /** Gets the contained expression. */ Expr getExprOperand() { result = this.getChild(0) } - override string toString() { result = "sizeof()" } + override string toString() { result = "__datasizeof()" } override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() } @@ -831,7 +831,7 @@ class DatasizeofTypeOperator extends DatasizeofOperator { /** Gets the contained type. */ Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } - override string toString() { result = "sizeof(" + this.getTypeOperand().getName() + ")" } + override string toString() { result = "__datasizeof(" + this.getTypeOperand().getName() + ")" } override predicate mayBeImpure() { none() } diff --git a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected index e0deac1c2ba..0ba70c61898 100644 --- a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected +++ b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.expected @@ -1,10 +1,10 @@ -| datasizeof.cpp:20:15:20:31 | sizeof(int) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | -| datasizeof.cpp:21:15:21:32 | sizeof(char) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | -| datasizeof.cpp:22:15:22:33 | sizeof(int *) | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | -| datasizeof.cpp:23:15:23:35 | sizeof(MyClass) | DatasizeofTypeOperator.getTypeOperand() | datasizeof.cpp:5:7:5:13 | MyClass | -| datasizeof.cpp:24:15:24:29 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:24:28:24:28 | i | -| datasizeof.cpp:25:15:25:29 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:25:28:25:28 | c | -| datasizeof.cpp:26:15:26:31 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:26:28:26:30 | ptr | -| datasizeof.cpp:27:15:27:30 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:27:28:27:29 | mc | -| datasizeof.cpp:28:15:28:31 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:28:28:28:30 | arr | -| datasizeof.cpp:29:16:29:35 | sizeof() | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:29:29:29:34 | access to array | +| datasizeof.cpp:20:15:20:31 | __datasizeof(int) | 4 | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | +| datasizeof.cpp:21:15:21:32 | __datasizeof(char) | 1 | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | +| datasizeof.cpp:22:15:22:33 | __datasizeof(int *) | 8 | DatasizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | +| datasizeof.cpp:23:15:23:35 | __datasizeof(MyClass) | 24 | DatasizeofTypeOperator.getTypeOperand() | datasizeof.cpp:5:7:5:13 | MyClass | +| datasizeof.cpp:24:15:24:29 | __datasizeof() | 4 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:24:28:24:28 | i | +| datasizeof.cpp:25:15:25:29 | __datasizeof() | 1 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:25:28:25:28 | c | +| datasizeof.cpp:26:15:26:31 | __datasizeof() | 8 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:26:28:26:30 | ptr | +| datasizeof.cpp:27:15:27:30 | __datasizeof() | 24 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:27:28:27:29 | mc | +| datasizeof.cpp:28:15:28:31 | __datasizeof() | 40 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:28:28:28:30 | arr | +| datasizeof.cpp:29:16:29:35 | __datasizeof() | 4 | DatasizeofExprOperator.getExprOperand() | datasizeof.cpp:29:29:29:34 | access to array | diff --git a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql index c2edf1844ff..3b839b4a8b9 100644 --- a/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql +++ b/cpp/ql/test/library-tests/types/datasizeof/datasizeof.ql @@ -7,4 +7,4 @@ where or elemDesc = "DatasizeofExprOperator.getExprOperand()" and e = sto.(DatasizeofExprOperator).getExprOperand() -select sto, elemDesc, e +select sto, sto.getValue(), elemDesc, e diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected index e75583fb9e5..c0d075126df 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected @@ -1,10 +1,10 @@ -| sizeof.cpp:19:15:19:25 | sizeof(int) | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | -| sizeof.cpp:20:15:20:26 | sizeof(char) | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | -| sizeof.cpp:21:15:21:27 | sizeof(int *) | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | -| sizeof.cpp:22:15:22:29 | sizeof(MyClass) | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | -| sizeof.cpp:23:15:23:23 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:23:22:23:22 | i | -| sizeof.cpp:24:15:24:23 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:24:22:24:22 | c | -| sizeof.cpp:25:15:25:25 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:25:22:25:24 | ptr | -| sizeof.cpp:26:15:26:24 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:26:22:26:23 | mc | -| sizeof.cpp:27:15:27:25 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:27:22:27:24 | arr | -| sizeof.cpp:28:16:28:29 | sizeof() | SizeofExprOperator.getExprOperand() | sizeof.cpp:28:23:28:28 | access to array | +| sizeof.cpp:19:15:19:25 | sizeof(int) | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | +| sizeof.cpp:20:15:20:26 | sizeof(char) | 1 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | +| sizeof.cpp:21:15:21:27 | sizeof(int *) | 8 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | +| sizeof.cpp:22:15:22:29 | sizeof(MyClass) | 16 | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | +| sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:23:22:23:22 | i | +| sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofExprOperator.getExprOperand() | sizeof.cpp:24:22:24:22 | c | +| sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofExprOperator.getExprOperand() | sizeof.cpp:25:22:25:24 | ptr | +| sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofExprOperator.getExprOperand() | sizeof.cpp:26:22:26:23 | mc | +| sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofExprOperator.getExprOperand() | sizeof.cpp:27:22:27:24 | arr | +| sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:28:23:28:28 | access to array | diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql index db8beba69a0..531f55ee45c 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql @@ -7,4 +7,4 @@ where or elemDesc = "SizeofExprOperator.getExprOperand()" and e = sto.(SizeofExprOperator).getExprOperand() -select sto, elemDesc, e +select sto, sto.getValue(), elemDesc, e From d1fecd869be3f519f6780a8fca6ca804f4b96c4e Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 28 Aug 2024 15:40:14 +0200 Subject: [PATCH 231/334] C++: Make StringCchPrintf not extend NonThrowingFunction --- cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll index a62e528c8a4..7286552e3ee 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Printf.qll @@ -173,7 +173,7 @@ private class SnprintfImpl extends Snprintf, AliasFunction, SideEffectFunction, * and * https://learn.microsoft.com/en-us/previous-versions/windows/embedded/ms860435(v=msdn.10) */ -private class StringCchPrintf extends FormattingFunction, NonThrowingFunction { +private class StringCchPrintf extends FormattingFunction { StringCchPrintf() { this instanceof TopLevelFunction and exists(string baseName | From 395656a1cfa0b701ce328d311aea5b8fc987c4d1 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Aug 2024 16:13:32 +0200 Subject: [PATCH 232/334] Java: Extend the logging test with a test case for parameters. --- java/ql/test/library-tests/logging/Test.java | 317 ++++++++-------- .../test/library-tests/logging/test.expected | 343 +++++++++--------- 2 files changed, 335 insertions(+), 325 deletions(-) diff --git a/java/ql/test/library-tests/logging/Test.java b/java/ql/test/library-tests/logging/Test.java index 4dacd6ccf5c..3e609f41735 100644 --- a/java/ql/test/library-tests/logging/Test.java +++ b/java/ql/test/library-tests/logging/Test.java @@ -6,163 +6,172 @@ import org.apache.logging.log4j.message.EntryMessage; import org.apache.logging.log4j.message.Message; import org.slf4j.spi.LoggingEventBuilder; -// Test case generated by GenerateFlowTestCase.ql +// Test case originally generated by GenerateFlowTestCase.ql +// Subsequently modified manually. public class Test { - Object source() { - return null; - } + Object source() { + return null; + } - void sink(Object o) {} + void sink(Object o) {} - public void test() throws Exception { - - { - // "java.util.logging;LogRecord;false;LogRecord;;;Argument[1];Argument[this];taint;manual" - LogRecord out = null; - String in = (String) source(); - out = new LogRecord(null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(Message);;Argument[0];ReturnValue;taint;manual" - EntryMessage out = null; - Message in = (Message) source(); - Logger instance = null; - out = instance.traceEntry(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Object[]);;Argument[0..1];ReturnValue;taint;manual" - EntryMessage out = null; - Object[] in = (Object[]) source(); - Logger instance = null; - out = instance.traceEntry((String) null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Object[]);;Argument[0..1];ReturnValue;taint;manual" - EntryMessage out = null; - String in = (String) source(); - Logger instance = null; - out = instance.traceEntry(in, (Object[]) null); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Supplier[]);;Argument[0..1];ReturnValue;taint;manual" - EntryMessage out = null; - String in = (String) source(); - Logger instance = null; - out = instance.traceEntry(in, (org.apache.logging.log4j.util.Supplier[]) null); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Supplier[]);;Argument[0..1];ReturnValue;taint;manual" - EntryMessage out = null; - org.apache.logging.log4j.util.Supplier[] in = - (org.apache.logging.log4j.util.Supplier[]) source(); - Logger instance = null; - out = instance.traceEntry((String) null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceEntry;(Supplier[]);;Argument[0];ReturnValue;taint;manual" - EntryMessage out = null; - org.apache.logging.log4j.util.Supplier[] in = - (org.apache.logging.log4j.util.Supplier[]) source(); - Logger instance = null; - out = instance.traceEntry(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceExit;(EntryMessage,Object);;Argument[1];ReturnValue;value;manual" - Object out = null; - Object in = (Object) source(); - Logger instance = null; - out = instance.traceExit((EntryMessage) null, in); - sink(out); // $ hasValueFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceExit;(Message,Object);;Argument[1];ReturnValue;value;manual" - Object out = null; - Object in = (Object) source(); - Logger instance = null; - out = instance.traceExit((Message) null, in); - sink(out); // $ hasValueFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceExit;(Object);;Argument[0];ReturnValue;value;manual" - Object out = null; - Object in = (Object) source(); - Logger instance = null; - out = instance.traceExit(in); - sink(out); // $ hasValueFlow - } - { - // "org.apache.logging.log4j;Logger;true;traceExit;(String,Object);;Argument[1];ReturnValue;value;manual" - Object out = null; - Object in = (Object) source(); - Logger instance = null; - out = instance.traceExit((String) null, in); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addArgument;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.addArgument((Object) null); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addArgument;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.addArgument((java.util.function.Supplier) null); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.addKeyValue((String) null, (Object) null); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.addKeyValue((String) null, (java.util.function.Supplier) null); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[1];Argument[this];taint;manual" - LoggingEventBuilder out = null; - Object in = (Object) source(); - out.addKeyValue((String) null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[1];Argument[this];taint;manual" - LoggingEventBuilder out = null; - java.util.function.Supplier in = (java.util.function.Supplier) source(); - out.addKeyValue((String) null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;addMarker;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.addMarker(null); - sink(out); // $ hasValueFlow - } - { - // "org.slf4j.spi;LoggingEventBuilder;true;setCause;;;Argument[this];ReturnValue;value;manual" - LoggingEventBuilder out = null; - LoggingEventBuilder in = (LoggingEventBuilder) source(); - out = in.setCause(null); - sink(out); // $ hasValueFlow - } - - } + public void test() throws Exception { + { + // "java.util.logging;LogRecord;false;LogRecord;;;Argument[1];Argument[this];taint;manual" + LogRecord out = null; + String in = (String) source(); + out = new LogRecord(null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(Message);;Argument[0];ReturnValue;taint;manual" + EntryMessage out = null; + Message in = (Message) source(); + Logger instance = null; + out = instance.traceEntry(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Object[]);;Argument[0..1];ReturnValue;taint;manual" + EntryMessage out = null; + Object[] in = (Object[]) source(); + Logger instance = null; + out = instance.traceEntry((String) null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Object[]);;Argument[0..1];ReturnValue;taint;manual" + EntryMessage out = null; + String in = (String) source(); + Logger instance = null; + out = instance.traceEntry(in, (Object[]) null); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Supplier[]);;Argument[0..1];ReturnValue;taint;manual" + EntryMessage out = null; + String in = (String) source(); + Logger instance = null; + out = instance.traceEntry(in, (org.apache.logging.log4j.util.Supplier[]) null); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(String,Supplier[]);;Argument[0..1];ReturnValue;taint;manual" + EntryMessage out = null; + org.apache.logging.log4j.util.Supplier[] in = + (org.apache.logging.log4j.util.Supplier[]) source(); + Logger instance = null; + out = instance.traceEntry((String) null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceEntry;(Supplier[]);;Argument[0];ReturnValue;taint;manual" + EntryMessage out = null; + org.apache.logging.log4j.util.Supplier[] in = + (org.apache.logging.log4j.util.Supplier[]) source(); + Logger instance = null; + out = instance.traceEntry(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceExit;(EntryMessage,Object);;Argument[1];ReturnValue;value;manual" + Object out = null; + Object in = (Object) source(); + Logger instance = null; + out = instance.traceExit((EntryMessage) null, in); + sink(out); // $ hasValueFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceExit;(Message,Object);;Argument[1];ReturnValue;value;manual" + Object out = null; + Object in = (Object) source(); + Logger instance = null; + out = instance.traceExit((Message) null, in); + sink(out); // $ hasValueFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceExit;(Object);;Argument[0];ReturnValue;value;manual" + Object out = null; + Object in = (Object) source(); + Logger instance = null; + out = instance.traceExit(in); + sink(out); // $ hasValueFlow + } + { + // "org.apache.logging.log4j;Logger;true;traceExit;(String,Object);;Argument[1];ReturnValue;value;manual" + Object out = null; + Object in = (Object) source(); + Logger instance = null; + out = instance.traceExit((String) null, in); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addArgument;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.addArgument((Object) null); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addArgument;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.addArgument((java.util.function.Supplier) null); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.addKeyValue((String) null, (Object) null); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.addKeyValue((String) null, (java.util.function.Supplier) null); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[1];Argument[this];taint;manual" + LoggingEventBuilder out = null; + Object in = (Object) source(); + out.addKeyValue((String) null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addKeyValue;;;Argument[1];Argument[this];taint;manual" + LoggingEventBuilder out = null; + java.util.function.Supplier in = (java.util.function.Supplier) source(); + out.addKeyValue((String) null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;addMarker;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.addMarker(null); + sink(out); // $ hasValueFlow + } + { + // "org.slf4j.spi;LoggingEventBuilder;true;setCause;;;Argument[this];ReturnValue;value;manual" + LoggingEventBuilder out = null; + LoggingEventBuilder in = (LoggingEventBuilder) source(); + out = in.setCause(null); + sink(out); // $ hasValueFlow + } + { + // "java.util.logging;LogRecord;true;getParameters;();;Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement;ReturnValue.ArrayElement;value;manual + // "java.util.logging;LogRecord;true;setParameters;(Object[]);Argument[0].ArrayElement;Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement;value;manual + LogRecord record = new LogRecord(null, null); + Object[] parameters = new Object[1]; + parameters[0] = source(); + record.setParameters(parameters); + Object[] out = record.getParameters(); + sink(out[0]); // $ hasValueFlow + } + } } diff --git a/java/ql/test/library-tests/logging/test.expected b/java/ql/test/library-tests/logging/test.expected index 4b8be156480..e66dd40c96c 100644 --- a/java/ql/test/library-tests/logging/test.expected +++ b/java/ql/test/library-tests/logging/test.expected @@ -14,177 +14,178 @@ models | 13 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addMarker; ; ; Argument[this]; ReturnValue; value; manual | | 14 | Summary: org.slf4j.spi; LoggingEventBuilder; true; setCause; ; ; Argument[this]; ReturnValue; value; manual | edges -| Test.java:23:16:23:32 | (...)... : String | Test.java:24:30:24:31 | in : String | provenance | | -| Test.java:23:25:23:32 | source(...) : Object | Test.java:23:16:23:32 | (...)... : String | provenance | | -| Test.java:24:10:24:32 | new LogRecord(...) : LogRecord | Test.java:25:9:25:11 | out | provenance | | -| Test.java:24:30:24:31 | in : String | Test.java:24:10:24:32 | new LogRecord(...) : LogRecord | provenance | MaD:1 | -| Test.java:30:17:30:34 | (...)... : Message | Test.java:32:30:32:31 | in : Message | provenance | | -| Test.java:30:27:30:34 | source(...) : Object | Test.java:30:17:30:34 | (...)... : Message | provenance | | -| Test.java:32:10:32:32 | traceEntry(...) : EntryMessage | Test.java:33:9:33:11 | out | provenance | | -| Test.java:32:30:32:31 | in : Message | Test.java:32:10:32:32 | traceEntry(...) : EntryMessage | provenance | MaD:2 | -| Test.java:38:18:38:36 | (...)... : Object[] | Test.java:40:45:40:46 | in : Object[] | provenance | | -| Test.java:38:29:38:36 | source(...) : Object | Test.java:38:18:38:36 | (...)... : Object[] | provenance | | -| Test.java:40:10:40:47 | traceEntry(...) : EntryMessage | Test.java:41:9:41:11 | out | provenance | | -| Test.java:40:45:40:46 | in : Object[] | Test.java:40:10:40:47 | traceEntry(...) : EntryMessage | provenance | MaD:3 | -| Test.java:46:16:46:32 | (...)... : String | Test.java:48:30:48:31 | in : String | provenance | | -| Test.java:46:25:46:32 | source(...) : Object | Test.java:46:16:46:32 | (...)... : String | provenance | | -| Test.java:48:10:48:49 | traceEntry(...) : EntryMessage | Test.java:49:9:49:11 | out | provenance | | -| Test.java:48:30:48:31 | in : String | Test.java:48:10:48:49 | traceEntry(...) : EntryMessage | provenance | MaD:3 | -| Test.java:54:16:54:32 | (...)... : String | Test.java:56:30:56:31 | in : String | provenance | | -| Test.java:54:25:54:32 | source(...) : Object | Test.java:54:16:54:32 | (...)... : String | provenance | | -| Test.java:56:10:56:81 | traceEntry(...) : EntryMessage | Test.java:57:9:57:11 | out | provenance | | -| Test.java:56:30:56:31 | in : String | Test.java:56:10:56:81 | traceEntry(...) : EntryMessage | provenance | MaD:4 | -| Test.java:63:6:63:56 | (...)... : Supplier[] | Test.java:65:45:65:46 | in : Supplier[] | provenance | | -| Test.java:63:49:63:56 | source(...) : Object | Test.java:63:6:63:56 | (...)... : Supplier[] | provenance | | -| Test.java:65:10:65:47 | traceEntry(...) : EntryMessage | Test.java:66:9:66:11 | out | provenance | | -| Test.java:65:45:65:46 | in : Supplier[] | Test.java:65:10:65:47 | traceEntry(...) : EntryMessage | provenance | MaD:4 | -| Test.java:72:6:72:56 | (...)... : Supplier[] | Test.java:74:30:74:31 | in : Supplier[] | provenance | | -| Test.java:72:49:72:56 | source(...) : Object | Test.java:72:6:72:56 | (...)... : Supplier[] | provenance | | -| Test.java:74:10:74:32 | traceEntry(...) : EntryMessage | Test.java:75:9:75:11 | out | provenance | | -| Test.java:74:30:74:31 | in : Supplier[] | Test.java:74:10:74:32 | traceEntry(...) : EntryMessage | provenance | MaD:5 | -| Test.java:80:16:80:32 | (...)... : Object | Test.java:82:50:82:51 | in : Object | provenance | | -| Test.java:80:25:80:32 | source(...) : Object | Test.java:80:16:80:32 | (...)... : Object | provenance | | -| Test.java:82:10:82:52 | traceExit(...) : Object | Test.java:83:9:83:11 | out | provenance | | -| Test.java:82:50:82:51 | in : Object | Test.java:82:10:82:52 | traceExit(...) : Object | provenance | MaD:6 | -| Test.java:88:16:88:32 | (...)... : Object | Test.java:90:45:90:46 | in : Object | provenance | | -| Test.java:88:25:88:32 | source(...) : Object | Test.java:88:16:88:32 | (...)... : Object | provenance | | -| Test.java:90:10:90:47 | traceExit(...) : Object | Test.java:91:9:91:11 | out | provenance | | -| Test.java:90:45:90:46 | in : Object | Test.java:90:10:90:47 | traceExit(...) : Object | provenance | MaD:7 | -| Test.java:96:16:96:32 | (...)... : Object | Test.java:98:29:98:30 | in : Object | provenance | | -| Test.java:96:25:96:32 | source(...) : Object | Test.java:96:16:96:32 | (...)... : Object | provenance | | -| Test.java:98:10:98:31 | traceExit(...) : Object | Test.java:99:9:99:11 | out | provenance | | -| Test.java:98:29:98:30 | in : Object | Test.java:98:10:98:31 | traceExit(...) : Object | provenance | MaD:8 | -| Test.java:104:16:104:32 | (...)... : Object | Test.java:106:44:106:45 | in : Object | provenance | | -| Test.java:104:25:104:32 | source(...) : Object | Test.java:104:16:104:32 | (...)... : Object | provenance | | -| Test.java:106:10:106:46 | traceExit(...) : Object | Test.java:107:9:107:11 | out | provenance | | -| Test.java:106:44:106:45 | in : Object | Test.java:106:10:106:46 | traceExit(...) : Object | provenance | MaD:9 | -| Test.java:112:29:112:58 | (...)... : LoggingEventBuilder | Test.java:113:10:113:11 | in : LoggingEventBuilder | provenance | | -| Test.java:112:51:112:58 | source(...) : Object | Test.java:112:29:112:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:113:10:113:11 | in : LoggingEventBuilder | Test.java:113:10:113:38 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | -| Test.java:113:10:113:38 | addArgument(...) : LoggingEventBuilder | Test.java:114:9:114:11 | out | provenance | | -| Test.java:119:29:119:58 | (...)... : LoggingEventBuilder | Test.java:120:10:120:11 | in : LoggingEventBuilder | provenance | | -| Test.java:119:51:119:58 | source(...) : Object | Test.java:119:29:119:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:120:10:120:11 | in : LoggingEventBuilder | Test.java:120:10:120:59 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | -| Test.java:120:10:120:59 | addArgument(...) : LoggingEventBuilder | Test.java:121:9:121:11 | out | provenance | | -| Test.java:126:29:126:58 | (...)... : LoggingEventBuilder | Test.java:127:10:127:11 | in : LoggingEventBuilder | provenance | | -| Test.java:126:51:126:58 | source(...) : Object | Test.java:126:29:126:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:127:10:127:11 | in : LoggingEventBuilder | Test.java:127:10:127:53 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | -| Test.java:127:10:127:53 | addKeyValue(...) : LoggingEventBuilder | Test.java:128:9:128:11 | out | provenance | | -| Test.java:133:29:133:58 | (...)... : LoggingEventBuilder | Test.java:134:10:134:11 | in : LoggingEventBuilder | provenance | | -| Test.java:133:51:133:58 | source(...) : Object | Test.java:133:29:133:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:134:10:134:11 | in : LoggingEventBuilder | Test.java:134:10:134:74 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | -| Test.java:134:10:134:74 | addKeyValue(...) : LoggingEventBuilder | Test.java:135:9:135:11 | out | provenance | | -| Test.java:140:16:140:32 | (...)... : Object | Test.java:141:35:141:36 | in : Object | provenance | | -| Test.java:140:25:140:32 | source(...) : Object | Test.java:140:16:140:32 | (...)... : Object | provenance | | -| Test.java:141:4:141:6 | out [post update] : LoggingEventBuilder | Test.java:142:9:142:11 | out | provenance | | -| Test.java:141:35:141:36 | in : Object | Test.java:141:4:141:6 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | -| Test.java:147:37:147:74 | (...)... : Supplier | Test.java:148:35:148:36 | in : Supplier | provenance | | -| Test.java:147:67:147:74 | source(...) : Object | Test.java:147:37:147:74 | (...)... : Supplier | provenance | | -| Test.java:148:4:148:6 | out [post update] : LoggingEventBuilder | Test.java:149:9:149:11 | out | provenance | | -| Test.java:148:35:148:36 | in : Supplier | Test.java:148:4:148:6 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | -| Test.java:154:29:154:58 | (...)... : LoggingEventBuilder | Test.java:155:10:155:11 | in : LoggingEventBuilder | provenance | | -| Test.java:154:51:154:58 | source(...) : Object | Test.java:154:29:154:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:155:10:155:11 | in : LoggingEventBuilder | Test.java:155:10:155:27 | addMarker(...) : LoggingEventBuilder | provenance | MaD:13 | -| Test.java:155:10:155:27 | addMarker(...) : LoggingEventBuilder | Test.java:156:9:156:11 | out | provenance | | -| Test.java:161:29:161:58 | (...)... : LoggingEventBuilder | Test.java:162:10:162:11 | in : LoggingEventBuilder | provenance | | -| Test.java:161:51:161:58 | source(...) : Object | Test.java:161:29:161:58 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:162:10:162:11 | in : LoggingEventBuilder | Test.java:162:10:162:26 | setCause(...) : LoggingEventBuilder | provenance | MaD:14 | -| Test.java:162:10:162:26 | setCause(...) : LoggingEventBuilder | Test.java:163:9:163:11 | out | provenance | | +| Test.java:24:19:24:35 | (...)... : String | Test.java:25:33:25:34 | in : String | provenance | | +| Test.java:24:28:24:35 | source(...) : Object | Test.java:24:19:24:35 | (...)... : String | provenance | | +| Test.java:25:13:25:35 | new LogRecord(...) : LogRecord | Test.java:26:12:26:14 | out | provenance | | +| Test.java:25:33:25:34 | in : String | Test.java:25:13:25:35 | new LogRecord(...) : LogRecord | provenance | MaD:1 | +| Test.java:31:20:31:37 | (...)... : Message | Test.java:33:33:33:34 | in : Message | provenance | | +| Test.java:31:30:31:37 | source(...) : Object | Test.java:31:20:31:37 | (...)... : Message | provenance | | +| Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | Test.java:34:12:34:14 | out | provenance | | +| Test.java:33:33:33:34 | in : Message | Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | provenance | MaD:2 | +| Test.java:39:21:39:39 | (...)... : Object[] | Test.java:41:48:41:49 | in : Object[] | provenance | | +| Test.java:39:32:39:39 | source(...) : Object | Test.java:39:21:39:39 | (...)... : Object[] | provenance | | +| Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | Test.java:42:12:42:14 | out | provenance | | +| Test.java:41:48:41:49 | in : Object[] | Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | provenance | MaD:3 | +| Test.java:47:19:47:35 | (...)... : String | Test.java:49:33:49:34 | in : String | provenance | | +| Test.java:47:28:47:35 | source(...) : Object | Test.java:47:19:47:35 | (...)... : String | provenance | | +| Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | Test.java:50:12:50:14 | out | provenance | | +| Test.java:49:33:49:34 | in : String | Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | provenance | MaD:3 | +| Test.java:55:19:55:35 | (...)... : String | Test.java:57:33:57:34 | in : String | provenance | | +| Test.java:55:28:55:35 | source(...) : Object | Test.java:55:19:55:35 | (...)... : String | provenance | | +| Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | Test.java:58:12:58:14 | out | provenance | | +| Test.java:57:33:57:34 | in : String | Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | provenance | MaD:4 | +| Test.java:64:11:64:61 | (...)... : Supplier[] | Test.java:66:48:66:49 | in : Supplier[] | provenance | | +| Test.java:64:54:64:61 | source(...) : Object | Test.java:64:11:64:61 | (...)... : Supplier[] | provenance | | +| Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | Test.java:67:12:67:14 | out | provenance | | +| Test.java:66:48:66:49 | in : Supplier[] | Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | provenance | MaD:4 | +| Test.java:73:11:73:61 | (...)... : Supplier[] | Test.java:75:33:75:34 | in : Supplier[] | provenance | | +| Test.java:73:54:73:61 | source(...) : Object | Test.java:73:11:73:61 | (...)... : Supplier[] | provenance | | +| Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | Test.java:76:12:76:14 | out | provenance | | +| Test.java:75:33:75:34 | in : Supplier[] | Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | provenance | MaD:5 | +| Test.java:81:19:81:35 | (...)... : Object | Test.java:83:53:83:54 | in : Object | provenance | | +| Test.java:81:28:81:35 | source(...) : Object | Test.java:81:19:81:35 | (...)... : Object | provenance | | +| Test.java:83:13:83:55 | traceExit(...) : Object | Test.java:84:12:84:14 | out | provenance | | +| Test.java:83:53:83:54 | in : Object | Test.java:83:13:83:55 | traceExit(...) : Object | provenance | MaD:6 | +| Test.java:89:19:89:35 | (...)... : Object | Test.java:91:48:91:49 | in : Object | provenance | | +| Test.java:89:28:89:35 | source(...) : Object | Test.java:89:19:89:35 | (...)... : Object | provenance | | +| Test.java:91:13:91:50 | traceExit(...) : Object | Test.java:92:12:92:14 | out | provenance | | +| Test.java:91:48:91:49 | in : Object | Test.java:91:13:91:50 | traceExit(...) : Object | provenance | MaD:7 | +| Test.java:97:19:97:35 | (...)... : Object | Test.java:99:32:99:33 | in : Object | provenance | | +| Test.java:97:28:97:35 | source(...) : Object | Test.java:97:19:97:35 | (...)... : Object | provenance | | +| Test.java:99:13:99:34 | traceExit(...) : Object | Test.java:100:12:100:14 | out | provenance | | +| Test.java:99:32:99:33 | in : Object | Test.java:99:13:99:34 | traceExit(...) : Object | provenance | MaD:8 | +| Test.java:105:19:105:35 | (...)... : Object | Test.java:107:47:107:48 | in : Object | provenance | | +| Test.java:105:28:105:35 | source(...) : Object | Test.java:105:19:105:35 | (...)... : Object | provenance | | +| Test.java:107:13:107:49 | traceExit(...) : Object | Test.java:108:12:108:14 | out | provenance | | +| Test.java:107:47:107:48 | in : Object | Test.java:107:13:107:49 | traceExit(...) : Object | provenance | MaD:9 | +| Test.java:113:32:113:61 | (...)... : LoggingEventBuilder | Test.java:114:13:114:14 | in : LoggingEventBuilder | provenance | | +| Test.java:113:54:113:61 | source(...) : Object | Test.java:113:32:113:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:114:13:114:14 | in : LoggingEventBuilder | Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | +| Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | Test.java:115:12:115:14 | out | provenance | | +| Test.java:120:32:120:61 | (...)... : LoggingEventBuilder | Test.java:121:13:121:14 | in : LoggingEventBuilder | provenance | | +| Test.java:120:54:120:61 | source(...) : Object | Test.java:120:32:120:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:121:13:121:14 | in : LoggingEventBuilder | Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | +| Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | Test.java:122:12:122:14 | out | provenance | | +| Test.java:127:32:127:61 | (...)... : LoggingEventBuilder | Test.java:128:13:128:14 | in : LoggingEventBuilder | provenance | | +| Test.java:127:54:127:61 | source(...) : Object | Test.java:127:32:127:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:128:13:128:14 | in : LoggingEventBuilder | Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | +| Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | Test.java:129:12:129:14 | out | provenance | | +| Test.java:134:32:134:61 | (...)... : LoggingEventBuilder | Test.java:135:13:135:14 | in : LoggingEventBuilder | provenance | | +| Test.java:134:54:134:61 | source(...) : Object | Test.java:134:32:134:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:135:13:135:14 | in : LoggingEventBuilder | Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | +| Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | Test.java:136:12:136:14 | out | provenance | | +| Test.java:141:19:141:35 | (...)... : Object | Test.java:142:38:142:39 | in : Object | provenance | | +| Test.java:141:28:141:35 | source(...) : Object | Test.java:141:19:141:35 | (...)... : Object | provenance | | +| Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | Test.java:143:12:143:14 | out | provenance | | +| Test.java:142:38:142:39 | in : Object | Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | +| Test.java:148:40:148:77 | (...)... : Supplier | Test.java:149:38:149:39 | in : Supplier | provenance | | +| Test.java:148:70:148:77 | source(...) : Object | Test.java:148:40:148:77 | (...)... : Supplier | provenance | | +| Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | Test.java:150:12:150:14 | out | provenance | | +| Test.java:149:38:149:39 | in : Supplier | Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | +| Test.java:155:32:155:61 | (...)... : LoggingEventBuilder | Test.java:156:13:156:14 | in : LoggingEventBuilder | provenance | | +| Test.java:155:54:155:61 | source(...) : Object | Test.java:155:32:155:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:156:13:156:14 | in : LoggingEventBuilder | Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | provenance | MaD:13 | +| Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | Test.java:157:12:157:14 | out | provenance | | +| Test.java:162:32:162:61 | (...)... : LoggingEventBuilder | Test.java:163:13:163:14 | in : LoggingEventBuilder | provenance | | +| Test.java:162:54:162:61 | source(...) : Object | Test.java:162:32:162:61 | (...)... : LoggingEventBuilder | provenance | | +| Test.java:163:13:163:14 | in : LoggingEventBuilder | Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | provenance | MaD:14 | +| Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | Test.java:164:12:164:14 | out | provenance | | nodes -| Test.java:23:16:23:32 | (...)... : String | semmle.label | (...)... : String | -| Test.java:23:25:23:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:24:10:24:32 | new LogRecord(...) : LogRecord | semmle.label | new LogRecord(...) : LogRecord | -| Test.java:24:30:24:31 | in : String | semmle.label | in : String | -| Test.java:25:9:25:11 | out | semmle.label | out | -| Test.java:30:17:30:34 | (...)... : Message | semmle.label | (...)... : Message | -| Test.java:30:27:30:34 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:32:10:32:32 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:32:30:32:31 | in : Message | semmle.label | in : Message | -| Test.java:33:9:33:11 | out | semmle.label | out | -| Test.java:38:18:38:36 | (...)... : Object[] | semmle.label | (...)... : Object[] | -| Test.java:38:29:38:36 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:40:10:40:47 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:40:45:40:46 | in : Object[] | semmle.label | in : Object[] | -| Test.java:41:9:41:11 | out | semmle.label | out | -| Test.java:46:16:46:32 | (...)... : String | semmle.label | (...)... : String | -| Test.java:46:25:46:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:48:10:48:49 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:48:30:48:31 | in : String | semmle.label | in : String | -| Test.java:49:9:49:11 | out | semmle.label | out | -| Test.java:54:16:54:32 | (...)... : String | semmle.label | (...)... : String | -| Test.java:54:25:54:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:56:10:56:81 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:56:30:56:31 | in : String | semmle.label | in : String | -| Test.java:57:9:57:11 | out | semmle.label | out | -| Test.java:63:6:63:56 | (...)... : Supplier[] | semmle.label | (...)... : Supplier[] | -| Test.java:63:49:63:56 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:65:10:65:47 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:65:45:65:46 | in : Supplier[] | semmle.label | in : Supplier[] | -| Test.java:66:9:66:11 | out | semmle.label | out | -| Test.java:72:6:72:56 | (...)... : Supplier[] | semmle.label | (...)... : Supplier[] | -| Test.java:72:49:72:56 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:74:10:74:32 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | -| Test.java:74:30:74:31 | in : Supplier[] | semmle.label | in : Supplier[] | -| Test.java:75:9:75:11 | out | semmle.label | out | -| Test.java:80:16:80:32 | (...)... : Object | semmle.label | (...)... : Object | -| Test.java:80:25:80:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:82:10:82:52 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | -| Test.java:82:50:82:51 | in : Object | semmle.label | in : Object | -| Test.java:83:9:83:11 | out | semmle.label | out | -| Test.java:88:16:88:32 | (...)... : Object | semmle.label | (...)... : Object | -| Test.java:88:25:88:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:90:10:90:47 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | -| Test.java:90:45:90:46 | in : Object | semmle.label | in : Object | -| Test.java:91:9:91:11 | out | semmle.label | out | -| Test.java:96:16:96:32 | (...)... : Object | semmle.label | (...)... : Object | -| Test.java:96:25:96:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:98:10:98:31 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | -| Test.java:98:29:98:30 | in : Object | semmle.label | in : Object | -| Test.java:99:9:99:11 | out | semmle.label | out | -| Test.java:104:16:104:32 | (...)... : Object | semmle.label | (...)... : Object | -| Test.java:104:25:104:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:106:10:106:46 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | -| Test.java:106:44:106:45 | in : Object | semmle.label | in : Object | -| Test.java:107:9:107:11 | out | semmle.label | out | -| Test.java:112:29:112:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:112:51:112:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:113:10:113:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:113:10:113:38 | addArgument(...) : LoggingEventBuilder | semmle.label | addArgument(...) : LoggingEventBuilder | -| Test.java:114:9:114:11 | out | semmle.label | out | -| Test.java:119:29:119:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:119:51:119:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:120:10:120:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:120:10:120:59 | addArgument(...) : LoggingEventBuilder | semmle.label | addArgument(...) : LoggingEventBuilder | -| Test.java:121:9:121:11 | out | semmle.label | out | -| Test.java:126:29:126:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:126:51:126:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:127:10:127:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:127:10:127:53 | addKeyValue(...) : LoggingEventBuilder | semmle.label | addKeyValue(...) : LoggingEventBuilder | -| Test.java:128:9:128:11 | out | semmle.label | out | -| Test.java:133:29:133:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:133:51:133:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:134:10:134:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:134:10:134:74 | addKeyValue(...) : LoggingEventBuilder | semmle.label | addKeyValue(...) : LoggingEventBuilder | -| Test.java:135:9:135:11 | out | semmle.label | out | -| Test.java:140:16:140:32 | (...)... : Object | semmle.label | (...)... : Object | -| Test.java:140:25:140:32 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:141:4:141:6 | out [post update] : LoggingEventBuilder | semmle.label | out [post update] : LoggingEventBuilder | -| Test.java:141:35:141:36 | in : Object | semmle.label | in : Object | -| Test.java:142:9:142:11 | out | semmle.label | out | -| Test.java:147:37:147:74 | (...)... : Supplier | semmle.label | (...)... : Supplier | -| Test.java:147:67:147:74 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:148:4:148:6 | out [post update] : LoggingEventBuilder | semmle.label | out [post update] : LoggingEventBuilder | -| Test.java:148:35:148:36 | in : Supplier | semmle.label | in : Supplier | -| Test.java:149:9:149:11 | out | semmle.label | out | -| Test.java:154:29:154:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:154:51:154:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:155:10:155:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:155:10:155:27 | addMarker(...) : LoggingEventBuilder | semmle.label | addMarker(...) : LoggingEventBuilder | -| Test.java:156:9:156:11 | out | semmle.label | out | -| Test.java:161:29:161:58 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | -| Test.java:161:51:161:58 | source(...) : Object | semmle.label | source(...) : Object | -| Test.java:162:10:162:11 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | -| Test.java:162:10:162:26 | setCause(...) : LoggingEventBuilder | semmle.label | setCause(...) : LoggingEventBuilder | -| Test.java:163:9:163:11 | out | semmle.label | out | +| Test.java:24:19:24:35 | (...)... : String | semmle.label | (...)... : String | +| Test.java:24:28:24:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:25:13:25:35 | new LogRecord(...) : LogRecord | semmle.label | new LogRecord(...) : LogRecord | +| Test.java:25:33:25:34 | in : String | semmle.label | in : String | +| Test.java:26:12:26:14 | out | semmle.label | out | +| Test.java:31:20:31:37 | (...)... : Message | semmle.label | (...)... : Message | +| Test.java:31:30:31:37 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:33:33:33:34 | in : Message | semmle.label | in : Message | +| Test.java:34:12:34:14 | out | semmle.label | out | +| Test.java:39:21:39:39 | (...)... : Object[] | semmle.label | (...)... : Object[] | +| Test.java:39:32:39:39 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:41:48:41:49 | in : Object[] | semmle.label | in : Object[] | +| Test.java:42:12:42:14 | out | semmle.label | out | +| Test.java:47:19:47:35 | (...)... : String | semmle.label | (...)... : String | +| Test.java:47:28:47:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:49:33:49:34 | in : String | semmle.label | in : String | +| Test.java:50:12:50:14 | out | semmle.label | out | +| Test.java:55:19:55:35 | (...)... : String | semmle.label | (...)... : String | +| Test.java:55:28:55:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:57:33:57:34 | in : String | semmle.label | in : String | +| Test.java:58:12:58:14 | out | semmle.label | out | +| Test.java:64:11:64:61 | (...)... : Supplier[] | semmle.label | (...)... : Supplier[] | +| Test.java:64:54:64:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:66:48:66:49 | in : Supplier[] | semmle.label | in : Supplier[] | +| Test.java:67:12:67:14 | out | semmle.label | out | +| Test.java:73:11:73:61 | (...)... : Supplier[] | semmle.label | (...)... : Supplier[] | +| Test.java:73:54:73:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | semmle.label | traceEntry(...) : EntryMessage | +| Test.java:75:33:75:34 | in : Supplier[] | semmle.label | in : Supplier[] | +| Test.java:76:12:76:14 | out | semmle.label | out | +| Test.java:81:19:81:35 | (...)... : Object | semmle.label | (...)... : Object | +| Test.java:81:28:81:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:83:13:83:55 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | +| Test.java:83:53:83:54 | in : Object | semmle.label | in : Object | +| Test.java:84:12:84:14 | out | semmle.label | out | +| Test.java:89:19:89:35 | (...)... : Object | semmle.label | (...)... : Object | +| Test.java:89:28:89:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:91:13:91:50 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | +| Test.java:91:48:91:49 | in : Object | semmle.label | in : Object | +| Test.java:92:12:92:14 | out | semmle.label | out | +| Test.java:97:19:97:35 | (...)... : Object | semmle.label | (...)... : Object | +| Test.java:97:28:97:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:99:13:99:34 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | +| Test.java:99:32:99:33 | in : Object | semmle.label | in : Object | +| Test.java:100:12:100:14 | out | semmle.label | out | +| Test.java:105:19:105:35 | (...)... : Object | semmle.label | (...)... : Object | +| Test.java:105:28:105:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:107:13:107:49 | traceExit(...) : Object | semmle.label | traceExit(...) : Object | +| Test.java:107:47:107:48 | in : Object | semmle.label | in : Object | +| Test.java:108:12:108:14 | out | semmle.label | out | +| Test.java:113:32:113:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:113:54:113:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:114:13:114:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | semmle.label | addArgument(...) : LoggingEventBuilder | +| Test.java:115:12:115:14 | out | semmle.label | out | +| Test.java:120:32:120:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:120:54:120:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:121:13:121:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | semmle.label | addArgument(...) : LoggingEventBuilder | +| Test.java:122:12:122:14 | out | semmle.label | out | +| Test.java:127:32:127:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:127:54:127:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:128:13:128:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | semmle.label | addKeyValue(...) : LoggingEventBuilder | +| Test.java:129:12:129:14 | out | semmle.label | out | +| Test.java:134:32:134:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:134:54:134:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:135:13:135:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | semmle.label | addKeyValue(...) : LoggingEventBuilder | +| Test.java:136:12:136:14 | out | semmle.label | out | +| Test.java:141:19:141:35 | (...)... : Object | semmle.label | (...)... : Object | +| Test.java:141:28:141:35 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | semmle.label | out [post update] : LoggingEventBuilder | +| Test.java:142:38:142:39 | in : Object | semmle.label | in : Object | +| Test.java:143:12:143:14 | out | semmle.label | out | +| Test.java:148:40:148:77 | (...)... : Supplier | semmle.label | (...)... : Supplier | +| Test.java:148:70:148:77 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | semmle.label | out [post update] : LoggingEventBuilder | +| Test.java:149:38:149:39 | in : Supplier | semmle.label | in : Supplier | +| Test.java:150:12:150:14 | out | semmle.label | out | +| Test.java:155:32:155:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:155:54:155:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:156:13:156:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | semmle.label | addMarker(...) : LoggingEventBuilder | +| Test.java:157:12:157:14 | out | semmle.label | out | +| Test.java:162:32:162:61 | (...)... : LoggingEventBuilder | semmle.label | (...)... : LoggingEventBuilder | +| Test.java:162:54:162:61 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:163:13:163:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | +| Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | semmle.label | setCause(...) : LoggingEventBuilder | +| Test.java:164:12:164:14 | out | semmle.label | out | subpaths testFailures +| Test.java:174:21:174:37 | // $ hasValueFlow | Missing result:hasValueFlow= | From bd5529cefae9711d00ed9d3d8105f80cdd2a633c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Aug 2024 16:14:33 +0200 Subject: [PATCH 233/334] Java: Update the Byte- and CharBuffer models and add models for set- and getParameters on LogRecord. --- java/ql/lib/ext/java.nio.model.yml | 24 ++++++++++----------- java/ql/lib/ext/java.util.logging.model.yml | 6 ++---- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/java/ql/lib/ext/java.nio.model.yml b/java/ql/lib/ext/java.nio.model.yml index 1848916b43b..40c12b6c633 100644 --- a/java/ql/lib/ext/java.nio.model.yml +++ b/java/ql/lib/ext/java.nio.model.yml @@ -5,19 +5,19 @@ extensions: data: - ["java.nio", "ByteBuffer", False, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio", "ByteBuffer", False, "get", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] - - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] + - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte)", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "manual"] - ["java.nio", "ByteBuffer", True, "wrap", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["java.nio", "ByteBuffer", True, "wrap", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "CharBuffer", True, "wrap", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] - - ["java.nio", "CharBuffer", True, "wrap", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["java.nio", "ByteBuffer", True, "wrap", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence,int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - addsTo: diff --git a/java/ql/lib/ext/java.util.logging.model.yml b/java/ql/lib/ext/java.util.logging.model.yml index d13803d73bb..f297bc8cda1 100644 --- a/java/ql/lib/ext/java.util.logging.model.yml +++ b/java/ql/lib/ext/java.util.logging.model.yml @@ -47,6 +47,8 @@ extensions: - ["java.util.logging", "Logger", False, "getName", "()", "", "Argument[this].SyntheticField[java.util.logging.Logger.name]", "ReturnValue", "value", "manual"] - ["java.util.logging", "LogRecord", False, "LogRecord", "", "", "Argument[1]", "Argument[this]", "taint", "manual"] - ["java.util.logging", "LogRecord", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["java.util.logging", "LogRecord", True, "getParameters", "()", "", "Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement", "ReturnValue.ArrayElement", "value", "manual"] + - ["java.util.logging", "LogRecord", True, "setParameters", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement", "value", "manual"] - addsTo: pack: codeql/java-all extensible: neutralModel @@ -54,7 +56,3 @@ extensions: - ["java.util.logging", "Handler", "getEncoding", "()", "summary", "manual"] - ["java.util.logging", "Logger", "isLoggable", "(Level)", "summary", "manual"] - ["java.util.logging", "LogRecord", "getResourceBundle", "()", "summary", "df-manual"] - # If needed, a pair of manual summary models using synthetics can be made for the two - # neutrals below. - - ["java.util.logging", "LogRecord", "getParameters", "()", "summary", "manual"] - - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "df-manual"] From fa5d6f12be07f0de8eaf3518c84978f20fa9bee3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Aug 2024 16:16:16 +0200 Subject: [PATCH 234/334] Java: Update logging test expected output. --- .../test/library-tests/logging/test.expected | 80 +++++++++++-------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/java/ql/test/library-tests/logging/test.expected b/java/ql/test/library-tests/logging/test.expected index e66dd40c96c..6aec73afeaf 100644 --- a/java/ql/test/library-tests/logging/test.expected +++ b/java/ql/test/library-tests/logging/test.expected @@ -1,18 +1,20 @@ models | 1 | Summary: java.util.logging; LogRecord; false; LogRecord; ; ; Argument[1]; Argument[this]; taint; manual | -| 2 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (Message); ; Argument[0]; ReturnValue; taint; manual | -| 3 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (String,Object[]); ; Argument[0..1]; ReturnValue; taint; manual | -| 4 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (String,Supplier[]); ; Argument[0..1]; ReturnValue; taint; manual | -| 5 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (Supplier[]); ; Argument[0]; ReturnValue; taint; manual | -| 6 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (EntryMessage,Object); ; Argument[1]; ReturnValue; value; manual | -| 7 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (Message,Object); ; Argument[1]; ReturnValue; value; manual | -| 8 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (Object); ; Argument[0]; ReturnValue; value; manual | -| 9 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (String,Object); ; Argument[1]; ReturnValue; value; manual | -| 10 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addArgument; ; ; Argument[this]; ReturnValue; value; manual | -| 11 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addKeyValue; ; ; Argument[this]; ReturnValue; value; manual | -| 12 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addKeyValue; ; ; Argument[1]; Argument[this]; taint; manual | -| 13 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addMarker; ; ; Argument[this]; ReturnValue; value; manual | -| 14 | Summary: org.slf4j.spi; LoggingEventBuilder; true; setCause; ; ; Argument[this]; ReturnValue; value; manual | +| 2 | Summary: java.util.logging; LogRecord; true; getParameters; (); ; Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement; ReturnValue.ArrayElement; value; manual | +| 3 | Summary: java.util.logging; LogRecord; true; setParameters; (Object[]); ; Argument[0].ArrayElement; Argument[this].SyntheticField[java.util.logging.LogRecord.parameters].ArrayElement; value; manual | +| 4 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (Message); ; Argument[0]; ReturnValue; taint; manual | +| 5 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (String,Object[]); ; Argument[0..1]; ReturnValue; taint; manual | +| 6 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (String,Supplier[]); ; Argument[0..1]; ReturnValue; taint; manual | +| 7 | Summary: org.apache.logging.log4j; Logger; true; traceEntry; (Supplier[]); ; Argument[0]; ReturnValue; taint; manual | +| 8 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (EntryMessage,Object); ; Argument[1]; ReturnValue; value; manual | +| 9 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (Message,Object); ; Argument[1]; ReturnValue; value; manual | +| 10 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (Object); ; Argument[0]; ReturnValue; value; manual | +| 11 | Summary: org.apache.logging.log4j; Logger; true; traceExit; (String,Object); ; Argument[1]; ReturnValue; value; manual | +| 12 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addArgument; ; ; Argument[this]; ReturnValue; value; manual | +| 13 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addKeyValue; ; ; Argument[this]; ReturnValue; value; manual | +| 14 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addKeyValue; ; ; Argument[1]; Argument[this]; taint; manual | +| 15 | Summary: org.slf4j.spi; LoggingEventBuilder; true; addMarker; ; ; Argument[this]; ReturnValue; value; manual | +| 16 | Summary: org.slf4j.spi; LoggingEventBuilder; true; setCause; ; ; Argument[this]; ReturnValue; value; manual | edges | Test.java:24:19:24:35 | (...)... : String | Test.java:25:33:25:34 | in : String | provenance | | | Test.java:24:28:24:35 | source(...) : Object | Test.java:24:19:24:35 | (...)... : String | provenance | | @@ -21,75 +23,82 @@ edges | Test.java:31:20:31:37 | (...)... : Message | Test.java:33:33:33:34 | in : Message | provenance | | | Test.java:31:30:31:37 | source(...) : Object | Test.java:31:20:31:37 | (...)... : Message | provenance | | | Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | Test.java:34:12:34:14 | out | provenance | | -| Test.java:33:33:33:34 | in : Message | Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | provenance | MaD:2 | +| Test.java:33:33:33:34 | in : Message | Test.java:33:13:33:35 | traceEntry(...) : EntryMessage | provenance | MaD:4 | | Test.java:39:21:39:39 | (...)... : Object[] | Test.java:41:48:41:49 | in : Object[] | provenance | | | Test.java:39:32:39:39 | source(...) : Object | Test.java:39:21:39:39 | (...)... : Object[] | provenance | | | Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | Test.java:42:12:42:14 | out | provenance | | -| Test.java:41:48:41:49 | in : Object[] | Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | provenance | MaD:3 | +| Test.java:41:48:41:49 | in : Object[] | Test.java:41:13:41:50 | traceEntry(...) : EntryMessage | provenance | MaD:5 | | Test.java:47:19:47:35 | (...)... : String | Test.java:49:33:49:34 | in : String | provenance | | | Test.java:47:28:47:35 | source(...) : Object | Test.java:47:19:47:35 | (...)... : String | provenance | | | Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | Test.java:50:12:50:14 | out | provenance | | -| Test.java:49:33:49:34 | in : String | Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | provenance | MaD:3 | +| Test.java:49:33:49:34 | in : String | Test.java:49:13:49:52 | traceEntry(...) : EntryMessage | provenance | MaD:5 | | Test.java:55:19:55:35 | (...)... : String | Test.java:57:33:57:34 | in : String | provenance | | | Test.java:55:28:55:35 | source(...) : Object | Test.java:55:19:55:35 | (...)... : String | provenance | | | Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | Test.java:58:12:58:14 | out | provenance | | -| Test.java:57:33:57:34 | in : String | Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | provenance | MaD:4 | +| Test.java:57:33:57:34 | in : String | Test.java:57:13:57:84 | traceEntry(...) : EntryMessage | provenance | MaD:6 | | Test.java:64:11:64:61 | (...)... : Supplier[] | Test.java:66:48:66:49 | in : Supplier[] | provenance | | | Test.java:64:54:64:61 | source(...) : Object | Test.java:64:11:64:61 | (...)... : Supplier[] | provenance | | | Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | Test.java:67:12:67:14 | out | provenance | | -| Test.java:66:48:66:49 | in : Supplier[] | Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | provenance | MaD:4 | +| Test.java:66:48:66:49 | in : Supplier[] | Test.java:66:13:66:50 | traceEntry(...) : EntryMessage | provenance | MaD:6 | | Test.java:73:11:73:61 | (...)... : Supplier[] | Test.java:75:33:75:34 | in : Supplier[] | provenance | | | Test.java:73:54:73:61 | source(...) : Object | Test.java:73:11:73:61 | (...)... : Supplier[] | provenance | | | Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | Test.java:76:12:76:14 | out | provenance | | -| Test.java:75:33:75:34 | in : Supplier[] | Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | provenance | MaD:5 | +| Test.java:75:33:75:34 | in : Supplier[] | Test.java:75:13:75:35 | traceEntry(...) : EntryMessage | provenance | MaD:7 | | Test.java:81:19:81:35 | (...)... : Object | Test.java:83:53:83:54 | in : Object | provenance | | | Test.java:81:28:81:35 | source(...) : Object | Test.java:81:19:81:35 | (...)... : Object | provenance | | | Test.java:83:13:83:55 | traceExit(...) : Object | Test.java:84:12:84:14 | out | provenance | | -| Test.java:83:53:83:54 | in : Object | Test.java:83:13:83:55 | traceExit(...) : Object | provenance | MaD:6 | +| Test.java:83:53:83:54 | in : Object | Test.java:83:13:83:55 | traceExit(...) : Object | provenance | MaD:8 | | Test.java:89:19:89:35 | (...)... : Object | Test.java:91:48:91:49 | in : Object | provenance | | | Test.java:89:28:89:35 | source(...) : Object | Test.java:89:19:89:35 | (...)... : Object | provenance | | | Test.java:91:13:91:50 | traceExit(...) : Object | Test.java:92:12:92:14 | out | provenance | | -| Test.java:91:48:91:49 | in : Object | Test.java:91:13:91:50 | traceExit(...) : Object | provenance | MaD:7 | +| Test.java:91:48:91:49 | in : Object | Test.java:91:13:91:50 | traceExit(...) : Object | provenance | MaD:9 | | Test.java:97:19:97:35 | (...)... : Object | Test.java:99:32:99:33 | in : Object | provenance | | | Test.java:97:28:97:35 | source(...) : Object | Test.java:97:19:97:35 | (...)... : Object | provenance | | | Test.java:99:13:99:34 | traceExit(...) : Object | Test.java:100:12:100:14 | out | provenance | | -| Test.java:99:32:99:33 | in : Object | Test.java:99:13:99:34 | traceExit(...) : Object | provenance | MaD:8 | +| Test.java:99:32:99:33 | in : Object | Test.java:99:13:99:34 | traceExit(...) : Object | provenance | MaD:10 | | Test.java:105:19:105:35 | (...)... : Object | Test.java:107:47:107:48 | in : Object | provenance | | | Test.java:105:28:105:35 | source(...) : Object | Test.java:105:19:105:35 | (...)... : Object | provenance | | | Test.java:107:13:107:49 | traceExit(...) : Object | Test.java:108:12:108:14 | out | provenance | | -| Test.java:107:47:107:48 | in : Object | Test.java:107:13:107:49 | traceExit(...) : Object | provenance | MaD:9 | +| Test.java:107:47:107:48 | in : Object | Test.java:107:13:107:49 | traceExit(...) : Object | provenance | MaD:11 | | Test.java:113:32:113:61 | (...)... : LoggingEventBuilder | Test.java:114:13:114:14 | in : LoggingEventBuilder | provenance | | | Test.java:113:54:113:61 | source(...) : Object | Test.java:113:32:113:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:114:13:114:14 | in : LoggingEventBuilder | Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | +| Test.java:114:13:114:14 | in : LoggingEventBuilder | Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | provenance | MaD:12 | | Test.java:114:13:114:41 | addArgument(...) : LoggingEventBuilder | Test.java:115:12:115:14 | out | provenance | | | Test.java:120:32:120:61 | (...)... : LoggingEventBuilder | Test.java:121:13:121:14 | in : LoggingEventBuilder | provenance | | | Test.java:120:54:120:61 | source(...) : Object | Test.java:120:32:120:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:121:13:121:14 | in : LoggingEventBuilder | Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | provenance | MaD:10 | +| Test.java:121:13:121:14 | in : LoggingEventBuilder | Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | provenance | MaD:12 | | Test.java:121:13:121:62 | addArgument(...) : LoggingEventBuilder | Test.java:122:12:122:14 | out | provenance | | | Test.java:127:32:127:61 | (...)... : LoggingEventBuilder | Test.java:128:13:128:14 | in : LoggingEventBuilder | provenance | | | Test.java:127:54:127:61 | source(...) : Object | Test.java:127:32:127:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:128:13:128:14 | in : LoggingEventBuilder | Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | +| Test.java:128:13:128:14 | in : LoggingEventBuilder | Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:13 | | Test.java:128:13:128:56 | addKeyValue(...) : LoggingEventBuilder | Test.java:129:12:129:14 | out | provenance | | | Test.java:134:32:134:61 | (...)... : LoggingEventBuilder | Test.java:135:13:135:14 | in : LoggingEventBuilder | provenance | | | Test.java:134:54:134:61 | source(...) : Object | Test.java:134:32:134:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:135:13:135:14 | in : LoggingEventBuilder | Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:11 | +| Test.java:135:13:135:14 | in : LoggingEventBuilder | Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | provenance | MaD:13 | | Test.java:135:13:135:77 | addKeyValue(...) : LoggingEventBuilder | Test.java:136:12:136:14 | out | provenance | | | Test.java:141:19:141:35 | (...)... : Object | Test.java:142:38:142:39 | in : Object | provenance | | | Test.java:141:28:141:35 | source(...) : Object | Test.java:141:19:141:35 | (...)... : Object | provenance | | | Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | Test.java:143:12:143:14 | out | provenance | | -| Test.java:142:38:142:39 | in : Object | Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | +| Test.java:142:38:142:39 | in : Object | Test.java:142:7:142:9 | out [post update] : LoggingEventBuilder | provenance | MaD:14 | | Test.java:148:40:148:77 | (...)... : Supplier | Test.java:149:38:149:39 | in : Supplier | provenance | | | Test.java:148:70:148:77 | source(...) : Object | Test.java:148:40:148:77 | (...)... : Supplier | provenance | | | Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | Test.java:150:12:150:14 | out | provenance | | -| Test.java:149:38:149:39 | in : Supplier | Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | provenance | MaD:12 | +| Test.java:149:38:149:39 | in : Supplier | Test.java:149:7:149:9 | out [post update] : LoggingEventBuilder | provenance | MaD:14 | | Test.java:155:32:155:61 | (...)... : LoggingEventBuilder | Test.java:156:13:156:14 | in : LoggingEventBuilder | provenance | | | Test.java:155:54:155:61 | source(...) : Object | Test.java:155:32:155:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:156:13:156:14 | in : LoggingEventBuilder | Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | provenance | MaD:13 | +| Test.java:156:13:156:14 | in : LoggingEventBuilder | Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | provenance | MaD:15 | | Test.java:156:13:156:30 | addMarker(...) : LoggingEventBuilder | Test.java:157:12:157:14 | out | provenance | | | Test.java:162:32:162:61 | (...)... : LoggingEventBuilder | Test.java:163:13:163:14 | in : LoggingEventBuilder | provenance | | | Test.java:162:54:162:61 | source(...) : Object | Test.java:162:32:162:61 | (...)... : LoggingEventBuilder | provenance | | -| Test.java:163:13:163:14 | in : LoggingEventBuilder | Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | provenance | MaD:14 | +| Test.java:163:13:163:14 | in : LoggingEventBuilder | Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | provenance | MaD:16 | | Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | Test.java:164:12:164:14 | out | provenance | | +| Test.java:171:7:171:16 | parameters [post update] : Object[] [[]] : Object | Test.java:172:28:172:37 | parameters : Object[] [[]] : Object | provenance | | +| Test.java:171:23:171:30 | source(...) : Object | Test.java:171:7:171:16 | parameters [post update] : Object[] [[]] : Object | provenance | | +| Test.java:172:7:172:12 | record [post update] : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | Test.java:173:22:173:27 | record : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | provenance | | +| Test.java:172:28:172:37 | parameters : Object[] [[]] : Object | Test.java:172:7:172:12 | record [post update] : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | provenance | MaD:3 | +| Test.java:173:22:173:27 | record : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | Test.java:173:22:173:43 | getParameters(...) : Object[] [[]] : Object | provenance | MaD:2 | +| Test.java:173:22:173:43 | getParameters(...) : Object[] [[]] : Object | Test.java:174:12:174:14 | out : Object[] [[]] : Object | provenance | | +| Test.java:174:12:174:14 | out : Object[] [[]] : Object | Test.java:174:12:174:17 | ...[...] | provenance | | nodes | Test.java:24:19:24:35 | (...)... : String | semmle.label | (...)... : String | | Test.java:24:28:24:35 | source(...) : Object | semmle.label | source(...) : Object | @@ -186,6 +195,13 @@ nodes | Test.java:163:13:163:14 | in : LoggingEventBuilder | semmle.label | in : LoggingEventBuilder | | Test.java:163:13:163:29 | setCause(...) : LoggingEventBuilder | semmle.label | setCause(...) : LoggingEventBuilder | | Test.java:164:12:164:14 | out | semmle.label | out | +| Test.java:171:7:171:16 | parameters [post update] : Object[] [[]] : Object | semmle.label | parameters [post update] : Object[] [[]] : Object | +| Test.java:171:23:171:30 | source(...) : Object | semmle.label | source(...) : Object | +| Test.java:172:7:172:12 | record [post update] : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | semmle.label | record [post update] : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | +| Test.java:172:28:172:37 | parameters : Object[] [[]] : Object | semmle.label | parameters : Object[] [[]] : Object | +| Test.java:173:22:173:27 | record : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | semmle.label | record : LogRecord [java.util.logging.LogRecord.parameters, []] : Object | +| Test.java:173:22:173:43 | getParameters(...) : Object[] [[]] : Object | semmle.label | getParameters(...) : Object[] [[]] : Object | +| Test.java:174:12:174:14 | out : Object[] [[]] : Object | semmle.label | out : Object[] [[]] : Object | +| Test.java:174:12:174:17 | ...[...] | semmle.label | ...[...] | subpaths testFailures -| Test.java:174:21:174:37 | // $ hasValueFlow | Missing result:hasValueFlow= | From 49a4f3a82fdac5c4ba4336cacc43b6700cebd55c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 27 Aug 2024 12:05:46 +0200 Subject: [PATCH 235/334] Data flow: Reduce non-linear recursion in `fwdFlow0` --- .../codeql/dataflow/internal/DataFlowImpl.qll | 204 +++++++++--------- 1 file changed, 106 insertions(+), 98 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 48d6ba61e2f..86bdd2d105d 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1560,20 +1560,17 @@ module MakeImpl Lang> { apa = getApprox(ap) ) or - // flow into a callable - exists(boolean allowsFlowThrough | - fwdFlowIn(node, apa, state, cc, t, ap, allowsFlowThrough) and - if allowsFlowThrough = true - then ( - summaryCtx = TSummaryCtxSome(node, state, t, ap) - ) else ( - summaryCtx = TSummaryCtxNone() and - // When the call contexts of source and sink needs to match then there's - // never any reason to enter a callable except to find a summary. See also - // the comment in `PathNodeMid::isAtSink`. - not Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext - ) - ) + // flow into a callable without summary context + fwdFlowInNoFlowThrough(node, apa, state, cc, t, ap) and + summaryCtx = TSummaryCtxNone() and + // When the call contexts of source and sink needs to match then there's + // never any reason to enter a callable except to find a summary. See also + // the comment in `PathNodeMid::isAtSink`. + not Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext + or + // flow into a callable with summary context (non-linear recursion) + fwdFlowInFlowThrough(node, apa, state, cc, t, ap) and + summaryCtx = TSummaryCtxSome(node, state, t, ap) or // flow out of a callable fwdFlowOut(_, _, node, state, cc, summaryCtx, t, ap, apa) @@ -1593,7 +1590,7 @@ module MakeImpl Lang> { private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, Typ t, Ap ap) { - fwdFlowIn(p, _, state, _, t, ap, true) + fwdFlowInFlowThrough(p, _, state, _, t, ap) } /** @@ -1721,12 +1718,10 @@ module MakeImpl Lang> { if ap instanceof ApNil then emptyAp = true else emptyAp = false } - private signature module FwdFlowInInputSig { - default predicate callRestriction(DataFlowCall call) { any() } - - bindingset[p, apa] - default predicate parameterRestriction(ParamNodeEx p, ApApprox apa) { any() } - } + bindingset[call, c, p, apa] + private signature predicate callRestrictionSig( + DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp + ); /** * Exposes the inlined predicate `fwdFlowIn`, which is used to calculate both @@ -1736,19 +1731,23 @@ module MakeImpl Lang> { * need to record the argument that flows into the parameter. * * For flow through, we do need to record the argument, however, we can restrict - * this to arguments that may actually flow through, using `callRestriction` and - * `parameterRestriction`, which reduces the argument-to-parameter fan-in - * significantly. + * this to arguments that may actually flow through, using `callRestrictionSig`, + * which reduces the argument-to-parameter fan-in significantly. */ - private module FwdFlowIn { + private module FwdFlowIn { pragma[nomagic] private predicate callEdgeArgParamRestricted( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, - boolean allowsFieldFlow, ApApprox apa + DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp, + ApApprox apa ) { - PrevStage::callEdgeArgParam(call, c, arg, p, allowsFieldFlow, apa) and - I::callRestriction(call) and - I::parameterRestriction(p, apa) + exists(boolean allowsFieldFlow | + PrevStage::callEdgeArgParam(call, c, arg, p, allowsFieldFlow, apa) and + callRestriction(call, c, p, apa, emptyAp) + | + allowsFieldFlow = true + or + emptyAp = true + ) } pragma[nomagic] @@ -1780,10 +1779,10 @@ module MakeImpl Lang> { bindingset[call] pragma[inline_late] private predicate callEdgeArgParamRestrictedInlineLate( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, - boolean allowsFieldFlow, ApApprox apa + DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp, + ApApprox apa ) { - callEdgeArgParamRestricted(call, c, arg, p, allowsFieldFlow, apa) + callEdgeArgParamRestricted(call, c, arg, p, emptyAp, apa) } bindingset[call, ctx] @@ -1807,44 +1806,35 @@ module MakeImpl Lang> { private predicate fwdFlowInCand( DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, boolean emptyAp, ApApprox apa, - boolean cc, boolean allowsFlowThrough + boolean cc ) { - exists(boolean allowsFieldFlow | - fwdFlowIntoArg(arg, state, outercc, summaryCtx, t, ap, emptyAp, apa, cc) and - ( - inner = viableImplCallContextReducedInlineLate(call, arg, outercc) - or - viableImplArgNotCallContextReduced(call, arg, outercc) - ) and - not outBarrier(arg, state) and - not inBarrier(p, state) and - callEdgeArgParamRestrictedInlineLate(call, inner, arg, p, allowsFieldFlow, apa) and - (if allowsFieldFlow = false then emptyAp = true else any()) and - if allowsFieldFlowThrough(call, inner) - then allowsFlowThrough = true - else allowsFlowThrough = emptyAp - ) + fwdFlowIntoArg(arg, state, outercc, summaryCtx, t, ap, emptyAp, apa, cc) and + ( + inner = viableImplCallContextReducedInlineLate(call, arg, outercc) + or + viableImplArgNotCallContextReduced(call, arg, outercc) + ) and + not outBarrier(arg, state) and + not inBarrier(p, state) and + callEdgeArgParamRestrictedInlineLate(call, inner, arg, p, emptyAp, apa) } pragma[inline] private predicate fwdFlowInCandTypeFlowDisabled( DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, - ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, boolean cc, - boolean allowsFlowThrough + ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, ApApprox apa, boolean cc ) { not enableTypeFlow() and - fwdFlowInCand(call, arg, state, outercc, inner, p, summaryCtx, t, ap, _, apa, cc, - allowsFlowThrough) + fwdFlowInCand(call, arg, state, outercc, inner, p, summaryCtx, t, ap, _, apa, cc) } pragma[nomagic] private predicate fwdFlowInCandTypeFlowEnabled( DataFlowCall call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, - boolean emptyAp, ApApprox apa, boolean cc, boolean allowsFlowThrough + boolean emptyAp, ApApprox apa, boolean cc ) { enableTypeFlow() and - fwdFlowInCand(call, arg, _, outercc, inner, p, _, _, _, emptyAp, apa, cc, - allowsFlowThrough) + fwdFlowInCand(call, arg, _, outercc, inner, p, _, _, _, emptyAp, apa, cc) } pragma[nomagic] @@ -1859,10 +1849,9 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInValidEdgeTypeFlowEnabled( DataFlowCall call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, - CcCall innercc, boolean emptyAp, ApApprox apa, boolean cc, boolean allowsFlowThrough + CcCall innercc, boolean emptyAp, ApApprox apa, boolean cc ) { - fwdFlowInCandTypeFlowEnabled(call, arg, outercc, inner, p, emptyAp, apa, cc, - allowsFlowThrough) and + fwdFlowInCandTypeFlowEnabled(call, arg, outercc, inner, p, emptyAp, apa, cc) and FwdTypeFlow::typeFlowValidEdgeIn(call, inner, cc) and innercc = getCallContextCall(call, inner) } @@ -1871,38 +1860,68 @@ module MakeImpl Lang> { predicate fwdFlowIn( DataFlowCall call, ArgNodeEx arg, DataFlowCallable inner, ParamNodeEx p, FlowState state, Cc outercc, CcCall innercc, SummaryCtx summaryCtx, Typ t, Ap ap, - ApApprox apa, boolean cc, boolean allowsFlowThrough + ApApprox apa, boolean cc ) { // type flow disabled: linear recursion fwdFlowInCandTypeFlowDisabled(call, arg, state, outercc, inner, p, summaryCtx, t, ap, - apa, cc, allowsFlowThrough) and + apa, cc) and fwdFlowInValidEdgeTypeFlowDisabled(call, inner, innercc, pragma[only_bind_into](cc)) or // type flow enabled: non-linear recursion exists(boolean emptyAp | fwdFlowIntoArg(arg, state, outercc, summaryCtx, t, ap, emptyAp, apa, cc) and fwdFlowInValidEdgeTypeFlowEnabled(call, arg, outercc, inner, p, innercc, emptyAp, apa, - cc, allowsFlowThrough) + cc) ) } } - private module FwdFlowInNoRestriction implements FwdFlowInInputSig { } + bindingset[call, c, p, apa] + private predicate callRestrictionNoFlowThrough( + DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp + ) { + ( + if + PrevStage::callMayFlowThroughRev(call) and + PrevStage::parameterMayFlowThrough(p, apa) + then not allowsFieldFlowThrough(call, c) and emptyAp = false + else emptyAp = [false, true] + ) and + exists(c) + } + + private module FwdFlowInNoThrough = FwdFlowIn; pragma[nomagic] - private predicate fwdFlowIn( - ParamNodeEx p, ApApprox apa, FlowState state, CcCall innercc, Typ t, Ap ap, - boolean allowsFlowThrough + private predicate fwdFlowInNoFlowThrough( + ParamNodeEx p, ApApprox apa, FlowState state, CcCall innercc, Typ t, Ap ap ) { - exists(boolean allowsFlowThrough0 | - FwdFlowIn::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, - apa, _, allowsFlowThrough0) and - if PrevStage::parameterMayFlowThrough(p, apa) - then allowsFlowThrough = allowsFlowThrough0 - else allowsFlowThrough = false + FwdFlowInNoThrough::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, apa, _) + } + + bindingset[call, c, p, apa] + private predicate callRestrictionFlowThrough( + DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp + ) { + PrevStage::callMayFlowThroughRev(call) and + PrevStage::parameterMayFlowThrough(p, apa) and + ( + emptyAp = true + or + allowsFieldFlowThrough(call, c) and + emptyAp = false ) } + private module FwdFlowInThrough = FwdFlowIn; + + pragma[nomagic] + private predicate fwdFlowInFlowThrough( + ParamNodeEx p, ApApprox apa, FlowState state, CcCall innercc, Typ t, Ap ap + ) { + FwdFlowInThrough::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, apa, _) + } + pragma[nomagic] private DataFlowCall viableImplCallContextReducedReverseRestricted( DataFlowCallable c, CcNoCall ctx @@ -2000,8 +2019,9 @@ module MakeImpl Lang> { DataFlowCall call, DataFlowCallable c, ParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, boolean cc ) { - FwdFlowIn::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, - _, cc, _) + FwdFlowInNoThrough::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, _, cc) + or + FwdFlowInThrough::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, _, cc) } pragma[nomagic] @@ -2104,19 +2124,12 @@ module MakeImpl Lang> { fwdFlowThrough0(call, _, cc, state, ccc, summaryCtx, t, ap, apa, ret, _, innerArgApa) } - private module FwdFlowThroughRestriction implements FwdFlowInInputSig { - predicate callRestriction = PrevStage::callMayFlowThroughRev/1; - - predicate parameterRestriction = PrevStage::parameterMayFlowThrough/2; - } - pragma[nomagic] private predicate fwdFlowIsEntered0( DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, ParamNodeEx p, FlowState state, Typ t, Ap ap ) { - FwdFlowIn::fwdFlowIn(call, arg, _, p, state, cc, innerCc, - summaryCtx, t, ap, _, _, true) + FwdFlowInThrough::fwdFlowIn(call, arg, _, p, state, cc, innerCc, summaryCtx, t, ap, _, _) } /** @@ -3067,15 +3080,15 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInStep( ArgNodeEx arg, ParamNodeEx p, FlowState state, Cc outercc, CcCall innercc, - SummaryCtx summaryCtx, Typ t, Ap ap, boolean allowsFlowThrough + SummaryCtx outerSummaryCtx, SummaryCtx innerSummaryCtx, Typ t, Ap ap ) { - exists(ApApprox apa, boolean allowsFlowThrough0 | - FwdFlowIn::fwdFlowIn(_, arg, _, p, state, outercc, innercc, - summaryCtx, t, ap, apa, _, allowsFlowThrough0) and - if PrevStage::parameterMayFlowThrough(p, apa) - then allowsFlowThrough = allowsFlowThrough0 - else allowsFlowThrough = false - ) + FwdFlowInNoThrough::fwdFlowIn(_, arg, _, p, state, outercc, innercc, outerSummaryCtx, t, + ap, _, _) and + innerSummaryCtx = TSummaryCtxNone() + or + FwdFlowInThrough::fwdFlowIn(_, arg, _, p, state, outercc, innercc, outerSummaryCtx, t, + ap, _, _) and + innerSummaryCtx = TSummaryCtxSome(p, state, t, ap) } pragma[nomagic] @@ -3239,15 +3252,10 @@ module MakeImpl Lang> { ) or // flow into a callable - exists( - ArgNodeEx arg, boolean allowsFlowThrough, Cc outercc, SummaryCtx outerSummaryCtx - | + exists(ArgNodeEx arg, Cc outercc, SummaryCtx outerSummaryCtx | pn1 = TPathNodeMid(arg, state, outercc, outerSummaryCtx, t, ap) and - fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, t, ap, allowsFlowThrough) and - label = "" and - if allowsFlowThrough = true - then summaryCtx = TSummaryCtxSome(node, state, t, ap) - else summaryCtx = TSummaryCtxNone() + fwdFlowInStep(arg, node, state, outercc, cc, outerSummaryCtx, summaryCtx, t, ap) and + label = "" ) or // flow out of a callable From 53b2471c9d9066023a2b6762a526dbfb1ccdfed5 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 29 Aug 2024 09:03:46 +0200 Subject: [PATCH 236/334] Java: Update expected test output. --- .../library-tests/frameworks/apache-commons-lang3/flow.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected index 5c7448f4222..9031c242a1c 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected @@ -8,7 +8,7 @@ models | 7 | Summary: java.lang; String; false; toCharArray; ; ; Argument[this]; ReturnValue; taint; manual | | 8 | Summary: java.lang; StringBuffer; true; StringBuffer; (String); ; Argument[0]; Argument[this]; taint; manual | | 9 | Summary: java.lang; StringBuilder; true; StringBuilder; ; ; Argument[0]; Argument[this]; taint; manual | -| 10 | Summary: java.nio; CharBuffer; true; wrap; (char[]); ; Argument[0]; ReturnValue; taint; df-manual | +| 10 | Summary: java.nio; CharBuffer; true; wrap; (char[]); ; Argument[0]; ReturnValue; taint; manual | | 11 | Summary: java.util; Collection; true; add; ; ; Argument[0]; Argument[this].Element; value; manual | | 12 | Summary: java.util; Dictionary; true; put; (Object,Object); ; Argument[1]; Argument[this].MapValue; value; manual | | 13 | Summary: java.util; Iterator; true; next; ; ; Argument[this].Element; ReturnValue; value; manual | From e7f059ae555a8b9e1fa4131f8dad6a8266a3831c Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 29 Aug 2024 10:32:31 +0200 Subject: [PATCH 237/334] C++: Tweak the `bounded` barrier --- cpp/ql/src/Security/CWE/CWE-190/Bounded.qll | 44 +++---- .../ArithmeticUncontrolled.expected | 6 + .../semmle/ArithmeticUncontrolled/test.cpp | 2 +- .../TaintedAllocationSize.expected | 120 ++++++++++-------- .../semmle/TaintedAllocationSize/test.cpp | 17 ++- 5 files changed, 110 insertions(+), 79 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-190/Bounded.qll b/cpp/ql/src/Security/CWE/CWE-190/Bounded.qll index bb855da3f44..01f4f94d60e 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/Bounded.qll +++ b/cpp/ql/src/Security/CWE/CWE-190/Bounded.qll @@ -1,6 +1,6 @@ /** - * This file provides the `bounded` predicate that is used in both `cpp/uncontrolled-arithmetic` - * and `cpp/tainted-arithmetic`. + * This file provides the `bounded` predicate that is used in `cpp/uncontrolled-arithmetic`, + * `cpp/tainted-arithmetic` and `cpp/uncontrolled-allocation-size`. */ private import cpp @@ -8,20 +8,18 @@ private import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis private import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils /** - * An operand `e` of a bitwise and expression `andExpr` (i.e., `andExpr` is either an `BitwiseAndExpr` - * or an `AssignAndExpr`) with operands `operand1` and `operand2` is the operand that is not `e` is upper - * bounded by some number that is less than the maximum integer allowed by the result type of `andExpr`. + * An operand `operand` of a bitwise and expression `andExpr` (i.e., `andExpr` is either a + * `BitwiseAndExpr` or an `AssignAndExpr`) is upper bounded by some number that is less than the + * maximum integer allowed by the result type of `andExpr`. */ pragma[inline] -private predicate boundedBitwiseAnd(Expr e, Expr andExpr, Expr operand1, Expr operand2) { - operand1 != operand2 and - e = operand1 and - upperBound(operand2.getFullyConverted()) < exprMaxVal(andExpr.getFullyConverted()) +private predicate boundedBitwiseAnd(Expr operand, Expr andExpr) { + upperBound(operand.getFullyConverted()) < exprMaxVal(andExpr.getFullyConverted()) } /** - * Holds if `e` is an arithmetic expression that cannot overflow, or if `e` is an operand of an - * operation that may greatly reduce the range of possible values. + * Holds if `e` is an arithmetic expression that cannot overflow, or if `e` is an operation that + * may greatly reduce the range of possible values. */ predicate bounded(Expr e) { // There can be two separate reasons for `convertedExprMightOverflow` not holding: @@ -35,25 +33,25 @@ predicate bounded(Expr e) { ) and not convertedExprMightOverflow(e) or - // Optimistically assume that a remainder expression always yields a much smaller value. - e = any(RemExpr rem).getLeftOperand() + // Optimistically assume that the following operations always yields a much smaller value. + e instanceof RemExpr or - e = any(AssignRemExpr rem).getLValue() + e instanceof DivExpr + or + e instanceof RShiftExpr or exists(BitwiseAndExpr andExpr | - boundedBitwiseAnd(e, andExpr, andExpr.getAnOperand(), andExpr.getAnOperand()) + e = andExpr and boundedBitwiseAnd(andExpr.getAnOperand(), andExpr) ) or - exists(AssignAndExpr andExpr | - boundedBitwiseAnd(e, andExpr, andExpr.getAnOperand(), andExpr.getAnOperand()) - ) - or - // Optimistically assume that a division always yields a much smaller value. - e = any(DivExpr div).getLeftOperand() + // For the assignment variant of the operations we place the barrier on the assigned lvalue. + e = any(AssignRemExpr rem).getLValue() or e = any(AssignDivExpr div).getLValue() or - e = any(RShiftExpr shift).getLeftOperand() - or e = any(AssignRShiftExpr div).getLValue() + or + exists(AssignAndExpr andExpr | + e = andExpr.getLValue() and boundedBitwiseAnd(andExpr.getRValue(), andExpr) + ) } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected index c21f9c38855..97bd3603cd3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected @@ -32,6 +32,8 @@ edges | test.cpp:24:11:24:18 | call to get_rand | test.cpp:25:7:25:7 | r | provenance | | | test.cpp:30:13:30:14 | get_rand2 output argument | test.cpp:31:7:31:7 | r | provenance | | | test.cpp:36:13:36:13 | get_rand3 output argument | test.cpp:37:7:37:7 | r | provenance | | +| test.cpp:62:19:62:24 | call to rand | test.cpp:62:19:62:24 | call to rand | provenance | | +| test.cpp:62:19:62:24 | call to rand | test.cpp:65:9:65:9 | x | provenance | | | test.cpp:86:10:86:13 | call to rand | test.cpp:86:10:86:13 | call to rand | provenance | | | test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | provenance | | | test.cpp:98:10:98:13 | call to rand | test.cpp:98:10:98:13 | call to rand | provenance | | @@ -105,6 +107,9 @@ nodes | test.cpp:31:7:31:7 | r | semmle.label | r | | test.cpp:36:13:36:13 | get_rand3 output argument | semmle.label | get_rand3 output argument | | test.cpp:37:7:37:7 | r | semmle.label | r | +| test.cpp:62:19:62:24 | call to rand | semmle.label | call to rand | +| test.cpp:62:19:62:24 | call to rand | semmle.label | call to rand | +| test.cpp:65:9:65:9 | x | semmle.label | x | | test.cpp:86:10:86:13 | call to rand | semmle.label | call to rand | | test.cpp:86:10:86:13 | call to rand | semmle.label | call to rand | | test.cpp:90:10:90:10 | x | semmle.label | x | @@ -156,6 +161,7 @@ subpaths | test.cpp:25:7:25:7 | r | test.cpp:8:9:8:12 | call to rand | test.cpp:25:7:25:7 | r | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:8:9:8:12 | call to rand | uncontrolled value | | test.cpp:31:7:31:7 | r | test.cpp:13:10:13:13 | call to rand | test.cpp:31:7:31:7 | r | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:13:10:13:13 | call to rand | uncontrolled value | | test.cpp:37:7:37:7 | r | test.cpp:18:9:18:12 | call to rand | test.cpp:37:7:37:7 | r | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:18:9:18:12 | call to rand | uncontrolled value | +| test.cpp:65:9:65:9 | x | test.cpp:62:19:62:24 | call to rand | test.cpp:65:9:65:9 | x | This arithmetic expression depends on an $@, potentially causing an underflow. | test.cpp:62:19:62:22 | call to rand | uncontrolled value | | test.cpp:90:10:90:10 | x | test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:86:10:86:13 | call to rand | uncontrolled value | | test.cpp:102:10:102:10 | x | test.cpp:98:10:98:13 | call to rand | test.cpp:102:10:102:10 | x | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:98:10:98:13 | call to rand | uncontrolled value | | test.cpp:146:9:146:9 | y | test.cpp:137:10:137:13 | call to rand | test.cpp:146:9:146:9 | y | This arithmetic expression depends on an $@, potentially causing an overflow. | test.cpp:137:10:137:13 | call to rand | uncontrolled value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/test.cpp index 6df97ef5452..f5e401c60cd 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/test.cpp @@ -62,7 +62,7 @@ unsigned int test_remainder_subtract_unsigned() unsigned int x = rand(); unsigned int y = x % 100; // y <= x - return x - y; // GOOD (as y <= x) + return x - y; // GOOD (as y <= x) [FALSE POSITIVE] } typedef unsigned long size_t; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected index 9e5f61c7c88..4235033abcc 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected @@ -13,26 +13,30 @@ edges | test.cpp:133:19:133:32 | *call to getenv | test.cpp:133:14:133:17 | call to atoi | provenance | TaintFunction | | test.cpp:148:15:148:18 | call to atol | test.cpp:152:11:152:28 | ... * ... | provenance | | | test.cpp:148:20:148:33 | *call to getenv | test.cpp:148:15:148:18 | call to atol | provenance | TaintFunction | -| test.cpp:224:8:224:23 | *get_tainted_size | test.cpp:256:9:256:24 | call to get_tainted_size | provenance | | -| test.cpp:226:9:226:42 | ... * ... | test.cpp:224:8:224:23 | *get_tainted_size | provenance | | -| test.cpp:226:14:226:27 | *call to getenv | test.cpp:226:9:226:42 | ... * ... | provenance | TaintFunction | -| test.cpp:245:21:245:21 | s | test.cpp:246:21:246:21 | s | provenance | | -| test.cpp:252:19:252:52 | ... * ... | test.cpp:254:9:254:18 | local_size | provenance | | -| test.cpp:252:19:252:52 | ... * ... | test.cpp:260:11:260:20 | local_size | provenance | | -| test.cpp:252:19:252:52 | ... * ... | test.cpp:262:10:262:19 | local_size | provenance | | -| test.cpp:252:24:252:37 | *call to getenv | test.cpp:252:19:252:52 | ... * ... | provenance | TaintFunction | -| test.cpp:262:10:262:19 | local_size | test.cpp:245:21:245:21 | s | provenance | | -| test.cpp:265:20:265:27 | *out_size | test.cpp:304:17:304:20 | get_size output argument | provenance | | -| test.cpp:265:20:265:27 | *out_size | test.cpp:320:18:320:21 | get_size output argument | provenance | | -| test.cpp:266:2:266:32 | ... = ... | test.cpp:265:20:265:27 | *out_size | provenance | | -| test.cpp:266:18:266:31 | *call to getenv | test.cpp:266:2:266:32 | ... = ... | provenance | TaintFunction | -| test.cpp:274:15:274:18 | call to atoi | test.cpp:278:11:278:29 | ... * ... | provenance | | -| test.cpp:274:20:274:33 | *call to getenv | test.cpp:274:15:274:18 | call to atoi | provenance | TaintFunction | -| test.cpp:304:17:304:20 | get_size output argument | test.cpp:306:11:306:28 | ... * ... | provenance | | -| test.cpp:320:18:320:21 | get_size output argument | test.cpp:323:10:323:27 | ... * ... | provenance | | -| test.cpp:368:13:368:16 | call to atoi | test.cpp:370:35:370:38 | size | provenance | | -| test.cpp:368:13:368:16 | call to atoi | test.cpp:371:35:371:38 | size | provenance | | -| test.cpp:368:18:368:31 | *call to getenv | test.cpp:368:13:368:16 | call to atoi | provenance | TaintFunction | +| test.cpp:190:14:190:17 | call to atoi | test.cpp:194:11:194:28 | ... * ... | provenance | | +| test.cpp:190:19:190:32 | *call to getenv | test.cpp:190:14:190:17 | call to atoi | provenance | TaintFunction | +| test.cpp:205:14:205:17 | call to atoi | test.cpp:209:11:209:28 | ... * ... | provenance | | +| test.cpp:205:19:205:32 | *call to getenv | test.cpp:205:14:205:17 | call to atoi | provenance | TaintFunction | +| test.cpp:239:8:239:23 | *get_tainted_size | test.cpp:271:9:271:24 | call to get_tainted_size | provenance | | +| test.cpp:241:9:241:42 | ... * ... | test.cpp:239:8:239:23 | *get_tainted_size | provenance | | +| test.cpp:241:14:241:27 | *call to getenv | test.cpp:241:9:241:42 | ... * ... | provenance | TaintFunction | +| test.cpp:260:21:260:21 | s | test.cpp:261:21:261:21 | s | provenance | | +| test.cpp:267:19:267:52 | ... * ... | test.cpp:269:9:269:18 | local_size | provenance | | +| test.cpp:267:19:267:52 | ... * ... | test.cpp:275:11:275:20 | local_size | provenance | | +| test.cpp:267:19:267:52 | ... * ... | test.cpp:277:10:277:19 | local_size | provenance | | +| test.cpp:267:24:267:37 | *call to getenv | test.cpp:267:19:267:52 | ... * ... | provenance | TaintFunction | +| test.cpp:277:10:277:19 | local_size | test.cpp:260:21:260:21 | s | provenance | | +| test.cpp:280:20:280:27 | *out_size | test.cpp:319:17:319:20 | get_size output argument | provenance | | +| test.cpp:280:20:280:27 | *out_size | test.cpp:335:18:335:21 | get_size output argument | provenance | | +| test.cpp:281:2:281:32 | ... = ... | test.cpp:280:20:280:27 | *out_size | provenance | | +| test.cpp:281:18:281:31 | *call to getenv | test.cpp:281:2:281:32 | ... = ... | provenance | TaintFunction | +| test.cpp:289:15:289:18 | call to atoi | test.cpp:293:11:293:29 | ... * ... | provenance | | +| test.cpp:289:20:289:33 | *call to getenv | test.cpp:289:15:289:18 | call to atoi | provenance | TaintFunction | +| test.cpp:319:17:319:20 | get_size output argument | test.cpp:321:11:321:28 | ... * ... | provenance | | +| test.cpp:335:18:335:21 | get_size output argument | test.cpp:338:10:338:27 | ... * ... | provenance | | +| test.cpp:383:13:383:16 | call to atoi | test.cpp:385:35:385:38 | size | provenance | | +| test.cpp:383:13:383:16 | call to atoi | test.cpp:386:35:386:38 | size | provenance | | +| test.cpp:383:18:383:31 | *call to getenv | test.cpp:383:13:383:16 | call to atoi | provenance | TaintFunction | nodes | test.cpp:39:27:39:30 | **argv | semmle.label | **argv | | test.cpp:40:16:40:19 | call to atoi | semmle.label | call to atoi | @@ -52,31 +56,37 @@ nodes | test.cpp:148:15:148:18 | call to atol | semmle.label | call to atol | | test.cpp:148:20:148:33 | *call to getenv | semmle.label | *call to getenv | | test.cpp:152:11:152:28 | ... * ... | semmle.label | ... * ... | -| test.cpp:224:8:224:23 | *get_tainted_size | semmle.label | *get_tainted_size | -| test.cpp:226:9:226:42 | ... * ... | semmle.label | ... * ... | -| test.cpp:226:14:226:27 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:245:21:245:21 | s | semmle.label | s | -| test.cpp:246:21:246:21 | s | semmle.label | s | -| test.cpp:252:19:252:52 | ... * ... | semmle.label | ... * ... | -| test.cpp:252:24:252:37 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:254:9:254:18 | local_size | semmle.label | local_size | -| test.cpp:256:9:256:24 | call to get_tainted_size | semmle.label | call to get_tainted_size | -| test.cpp:260:11:260:20 | local_size | semmle.label | local_size | -| test.cpp:262:10:262:19 | local_size | semmle.label | local_size | -| test.cpp:265:20:265:27 | *out_size | semmle.label | *out_size | -| test.cpp:266:2:266:32 | ... = ... | semmle.label | ... = ... | -| test.cpp:266:18:266:31 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:274:15:274:18 | call to atoi | semmle.label | call to atoi | -| test.cpp:274:20:274:33 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:278:11:278:29 | ... * ... | semmle.label | ... * ... | -| test.cpp:304:17:304:20 | get_size output argument | semmle.label | get_size output argument | -| test.cpp:306:11:306:28 | ... * ... | semmle.label | ... * ... | -| test.cpp:320:18:320:21 | get_size output argument | semmle.label | get_size output argument | -| test.cpp:323:10:323:27 | ... * ... | semmle.label | ... * ... | -| test.cpp:368:13:368:16 | call to atoi | semmle.label | call to atoi | -| test.cpp:368:18:368:31 | *call to getenv | semmle.label | *call to getenv | -| test.cpp:370:35:370:38 | size | semmle.label | size | -| test.cpp:371:35:371:38 | size | semmle.label | size | +| test.cpp:190:14:190:17 | call to atoi | semmle.label | call to atoi | +| test.cpp:190:19:190:32 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:194:11:194:28 | ... * ... | semmle.label | ... * ... | +| test.cpp:205:14:205:17 | call to atoi | semmle.label | call to atoi | +| test.cpp:205:19:205:32 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:209:11:209:28 | ... * ... | semmle.label | ... * ... | +| test.cpp:239:8:239:23 | *get_tainted_size | semmle.label | *get_tainted_size | +| test.cpp:241:9:241:42 | ... * ... | semmle.label | ... * ... | +| test.cpp:241:14:241:27 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:260:21:260:21 | s | semmle.label | s | +| test.cpp:261:21:261:21 | s | semmle.label | s | +| test.cpp:267:19:267:52 | ... * ... | semmle.label | ... * ... | +| test.cpp:267:24:267:37 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:269:9:269:18 | local_size | semmle.label | local_size | +| test.cpp:271:9:271:24 | call to get_tainted_size | semmle.label | call to get_tainted_size | +| test.cpp:275:11:275:20 | local_size | semmle.label | local_size | +| test.cpp:277:10:277:19 | local_size | semmle.label | local_size | +| test.cpp:280:20:280:27 | *out_size | semmle.label | *out_size | +| test.cpp:281:2:281:32 | ... = ... | semmle.label | ... = ... | +| test.cpp:281:18:281:31 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:289:15:289:18 | call to atoi | semmle.label | call to atoi | +| test.cpp:289:20:289:33 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:293:11:293:29 | ... * ... | semmle.label | ... * ... | +| test.cpp:319:17:319:20 | get_size output argument | semmle.label | get_size output argument | +| test.cpp:321:11:321:28 | ... * ... | semmle.label | ... * ... | +| test.cpp:335:18:335:21 | get_size output argument | semmle.label | get_size output argument | +| test.cpp:338:10:338:27 | ... * ... | semmle.label | ... * ... | +| test.cpp:383:13:383:16 | call to atoi | semmle.label | call to atoi | +| test.cpp:383:18:383:31 | *call to getenv | semmle.label | *call to getenv | +| test.cpp:385:35:385:38 | size | semmle.label | size | +| test.cpp:386:35:386:38 | size | semmle.label | size | subpaths #select | test.cpp:43:31:43:36 | call to malloc | test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:39:27:39:30 | **argv | user input (a command-line argument) | @@ -88,12 +98,14 @@ subpaths | test.cpp:128:17:128:22 | call to malloc | test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:124:18:124:31 | *call to getenv | user input (an environment variable) | | test.cpp:135:3:135:8 | call to malloc | test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:133:19:133:32 | *call to getenv | user input (an environment variable) | | test.cpp:152:4:152:9 | call to malloc | test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:148:20:148:33 | *call to getenv | user input (an environment variable) | -| test.cpp:246:14:246:19 | call to malloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:246:21:246:21 | s | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | -| test.cpp:254:2:254:7 | call to malloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:254:9:254:18 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | -| test.cpp:256:2:256:7 | call to malloc | test.cpp:226:14:226:27 | *call to getenv | test.cpp:256:9:256:24 | call to get_tainted_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:226:14:226:27 | *call to getenv | user input (an environment variable) | -| test.cpp:260:2:260:9 | call to my_alloc | test.cpp:252:24:252:37 | *call to getenv | test.cpp:260:11:260:20 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:252:24:252:37 | *call to getenv | user input (an environment variable) | -| test.cpp:278:4:278:9 | call to malloc | test.cpp:274:20:274:33 | *call to getenv | test.cpp:278:11:278:29 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:274:20:274:33 | *call to getenv | user input (an environment variable) | -| test.cpp:306:4:306:9 | call to malloc | test.cpp:266:18:266:31 | *call to getenv | test.cpp:306:11:306:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:266:18:266:31 | *call to getenv | user input (an environment variable) | -| test.cpp:323:3:323:8 | call to malloc | test.cpp:266:18:266:31 | *call to getenv | test.cpp:323:10:323:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:266:18:266:31 | *call to getenv | user input (an environment variable) | -| test.cpp:370:25:370:33 | call to MyMalloc1 | test.cpp:368:18:368:31 | *call to getenv | test.cpp:370:35:370:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:368:18:368:31 | *call to getenv | user input (an environment variable) | -| test.cpp:371:25:371:33 | call to MyMalloc2 | test.cpp:368:18:368:31 | *call to getenv | test.cpp:371:35:371:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:368:18:368:31 | *call to getenv | user input (an environment variable) | +| test.cpp:194:4:194:9 | call to malloc | test.cpp:190:19:190:32 | *call to getenv | test.cpp:194:11:194:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:190:19:190:32 | *call to getenv | user input (an environment variable) | +| test.cpp:209:4:209:9 | call to malloc | test.cpp:205:19:205:32 | *call to getenv | test.cpp:209:11:209:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:205:19:205:32 | *call to getenv | user input (an environment variable) | +| test.cpp:261:14:261:19 | call to malloc | test.cpp:267:24:267:37 | *call to getenv | test.cpp:261:21:261:21 | s | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:267:24:267:37 | *call to getenv | user input (an environment variable) | +| test.cpp:269:2:269:7 | call to malloc | test.cpp:267:24:267:37 | *call to getenv | test.cpp:269:9:269:18 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:267:24:267:37 | *call to getenv | user input (an environment variable) | +| test.cpp:271:2:271:7 | call to malloc | test.cpp:241:14:241:27 | *call to getenv | test.cpp:271:9:271:24 | call to get_tainted_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:241:14:241:27 | *call to getenv | user input (an environment variable) | +| test.cpp:275:2:275:9 | call to my_alloc | test.cpp:267:24:267:37 | *call to getenv | test.cpp:275:11:275:20 | local_size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:267:24:267:37 | *call to getenv | user input (an environment variable) | +| test.cpp:293:4:293:9 | call to malloc | test.cpp:289:20:289:33 | *call to getenv | test.cpp:293:11:293:29 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:289:20:289:33 | *call to getenv | user input (an environment variable) | +| test.cpp:321:4:321:9 | call to malloc | test.cpp:281:18:281:31 | *call to getenv | test.cpp:321:11:321:28 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:281:18:281:31 | *call to getenv | user input (an environment variable) | +| test.cpp:338:3:338:8 | call to malloc | test.cpp:281:18:281:31 | *call to getenv | test.cpp:338:10:338:27 | ... * ... | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:281:18:281:31 | *call to getenv | user input (an environment variable) | +| test.cpp:385:25:385:33 | call to MyMalloc1 | test.cpp:383:18:383:31 | *call to getenv | test.cpp:385:35:385:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:383:18:383:31 | *call to getenv | user input (an environment variable) | +| test.cpp:386:25:386:33 | call to MyMalloc2 | test.cpp:383:18:383:31 | *call to getenv | test.cpp:386:35:386:38 | size | This allocation size is derived from $@ and could allocate arbitrary amounts of memory. | test.cpp:383:18:383:31 | *call to getenv | user input (an environment variable) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp index f262d1943d0..e13c50a960b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/test.cpp @@ -191,7 +191,22 @@ void more_bounded_tests() { if (size % 100) { - malloc(size * sizeof(int)); // BAD [NOT DETECTED] + malloc(size * sizeof(int)); // BAD + } + } + + { + int size = atoi(getenv("USER")); + int size2 = size & 7; // Pick the first three bits of size + malloc(size2 * sizeof(int)); // GOOD + } + + { + int size = atoi(getenv("USER")); + + if (size & 7) + { + malloc(size * sizeof(int)); // BAD } } From 5494389c4b79c3c3b584157d2bb2bcb71d44efc4 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 29 Aug 2024 09:44:23 +0100 Subject: [PATCH 238/334] Update changenote Co-authored-by: Sid Shankar --- python/ql/src/change-notes/2024-08-27-sensitive-certificate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md b/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md index 9db609ebbe6..eee82db8cde 100644 --- a/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md +++ b/python/ql/src/change-notes/2024-08-27-sensitive-certificate.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* The `py/clear-text-logging-sensitive-data` and `py/clear-text-storage-sensitive-data` queries have been updated to exclude the `certificate` classification of of sensitive sources, which often do not actually contain sensitive data. \ No newline at end of file +* The `py/clear-text-logging-sensitive-data` and `py/clear-text-storage-sensitive-data` queries have been updated to exclude the `certificate` classification of sensitive sources, which often do not contain sensitive data. \ No newline at end of file From ff31aa540c45aef55cbbe3f0815f522aaa4f1127 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 29 Aug 2024 15:54:04 +0200 Subject: [PATCH 239/334] Address review comments. --- .../dataflow/internal/ContentDataFlowImpl.qll | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index f4b4b9655e4..f413c6dd7ad 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -51,11 +51,6 @@ module MakeImplContentDataFlow Lang> { */ default predicate isAdditionalFlowStep(Node node1, Node node2) { none() } - /** - * Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow steps. - */ - default predicate isAdditionalTaintStep(Node node1, Node node2) { none() } - /** Holds if data flow into `node` is prohibited. */ default predicate isBarrier(Node node) { none() } @@ -106,11 +101,9 @@ module MakeImplContentDataFlow Lang> { predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) { storeStep(node1, state1, _, node2, state2) or readStep(node1, state1, _, node2, state2) or - additionalTaintStep(node1, state1, node2, state2) + additionalStep(node1, state1, node2, state2) } - predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2; - predicate isBarrier = ContentConfig::isBarrier/1; FlowFeature getAFeature() { result = ContentConfig::getAFeature() } @@ -234,8 +227,8 @@ module MakeImplContentDataFlow Lang> { ) } - private predicate additionalTaintStep(Node node1, State state1, Node node2, State state2) { - ContentConfig::isAdditionalTaintStep(node1, node2) and + private predicate additionalStep(Node node1, State state1, Node node2, State state2) { + ContentConfig::isAdditionalFlowStep(node1, node2) and ( state1 instanceof InitState and state2.(InitState).decode(false) From dd7f757281876c257862885ee205c739916b1774 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 29 Aug 2024 16:43:27 +0200 Subject: [PATCH 240/334] Address review. --- .../java/multi-release-jar-java11/test.py | 17 ++--------------- .../java/multi-release-jar-java17/test.py | 17 ++--------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py index d67602f8bcb..fafe3e16fdd 100644 --- a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py @@ -2,22 +2,9 @@ import commands def test(codeql, use_java_11, java): - commands.run(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) commands.run( - [ - "jar", - "-c", - "-f", - "mod1.jar", - "-C", - "mod1obj", - "mod1pkg/Mod1Class.class", - "--release", - "9", - "-C", - "mod1obj", - "module-info.class", - ] + "javac mod1/module-info.java mod1/mod1pkg/Mod1Class.java -d mod1obj", + "jar -c -f mod1.jar -C mod1obj mod1pkg/Mod1Class.class --release 9 -C mod1obj module-info.class", ) codeql.database.create( command="javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar" diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py index 567cd51bef2..195ed61fadd 100644 --- a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py @@ -2,22 +2,9 @@ import commands def test(codeql, java): - commands.run(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) commands.run( - [ - "jar", - "-c", - "-f", - "mod1.jar", - "-C", - "mod1obj", - "mod1pkg/Mod1Class.class", - "--release", - "9", - "-C", - "mod1obj", - "module-info.class", - ] + "javac mod1/module-info.java mod1/mod1pkg/Mod1Class.java -d mod1obj", + "jar -c -f mod1.jar -C mod1obj mod1pkg/Mod1Class.class --release 9 -C mod1obj module-info.class", ) codeql.database.create( command="javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar" From 092ce01d939cdaffec4f0a947e4034adb76bf8f0 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 29 Aug 2024 19:06:56 +0200 Subject: [PATCH 241/334] C#: Rename integration test directories. We are no longer bound to the platform-specific directories, so simplify the test organization. If you don't want this change, just skip merging this PR. It's purely optional. This is not very invasive for C#, I'm just dropping the `only` suffix. You could also merge all the platform-specific test dirs, or all test dirs into the top-level directory. I'll leave that up to you. --- .../{linux-only => linux}/compiler_args/CompilerArgs.expected | 0 .../{linux-only => linux}/compiler_args/CompilerArgs.ql | 0 .../{linux-only => linux}/compiler_args/Program.cs | 0 .../{linux-only => linux}/compiler_args/global.json | 0 .../{linux-only => linux}/compiler_args/test.csproj | 0 .../integration-tests/{linux-only => linux}/compiler_args/test.py | 0 .../standalone_dependencies_non_utf8_filename/Program.cs | 0 .../standalone_dependencies_non_utf8_filename/global.json | 0 .../standalone_dependencies_non_utf8_filename/test.csproj | 0 .../standalone_dependencies_non_utf8_filename/test.py | 0 .../{posix-only => posix}/diag_autobuild_script/build.sh | 0 .../diag_autobuild_script/diagnostics.expected | 0 .../{posix-only => posix}/diag_autobuild_script/test.py | 0 .../{posix-only => posix}/diag_multiple_scripts/build.sh | 0 .../diag_multiple_scripts/diagnostics.expected | 0 .../{posix-only => posix}/diag_multiple_scripts/scripts/build.sh | 0 .../{posix-only => posix}/diag_multiple_scripts/test.py | 0 .../{posix-only => posix}/dotnet_test/UnitTest1.cs | 0 .../{posix-only => posix}/dotnet_test/diagnostics.expected | 0 .../{posix-only => posix}/dotnet_test/dotnet_test.csproj | 0 .../{posix-only => posix}/dotnet_test/global.json | 0 .../integration-tests/{posix-only => posix}/dotnet_test/test.py | 0 .../{posix-only => posix}/dotnet_test_mstest/UnitTest1.cs | 0 .../{posix-only => posix}/dotnet_test_mstest/Usings.cs | 0 .../{posix-only => posix}/dotnet_test_mstest/diagnostics.expected | 0 .../dotnet_test_mstest/dotnet_test_mstest.csproj | 0 .../{posix-only => posix}/dotnet_test_mstest/global.json | 0 .../{posix-only => posix}/dotnet_test_mstest/test.py | 0 .../{posix-only => posix}/inherit-env-vars/Program.cs | 0 .../{posix-only => posix}/inherit-env-vars/build.sh | 0 .../{posix-only => posix}/inherit-env-vars/diagnostics.expected | 0 .../{posix-only => posix}/inherit-env-vars/global.json | 0 .../{posix-only => posix}/inherit-env-vars/proj.csproj.no_auto | 0 .../{posix-only => posix}/inherit-env-vars/test.py | 0 .../standalone_dependencies/Assemblies.expected | 0 .../{posix-only => posix}/standalone_dependencies/Assemblies.ql | 0 .../{posix-only => posix}/standalone_dependencies/Program.cs | 0 .../{posix-only => posix}/standalone_dependencies/global.json | 0 .../standalone_dependencies/standalone.csproj | 0 .../{posix-only => posix}/standalone_dependencies/test.py | 0 .../standalone_dependencies_executing_runtime/Assemblies.expected | 0 .../standalone_dependencies_executing_runtime/Assemblies.ql | 0 .../standalone_dependencies_executing_runtime/Program.cs | 0 .../standalone_dependencies_executing_runtime/test.py | 0 .../standalone_dependencies_multi_project/Assemblies.expected | 0 .../standalone_dependencies_multi_project/Assemblies.ql | 0 .../standalone_dependencies_multi_project/Program.cs | 0 .../standalone_dependencies_multi_project/global.json | 0 .../standalone_dependencies_multi_project/standalone1.csproj | 0 .../standalone_dependencies_multi_project/standalone2.csproj | 0 .../standalone_dependencies_multi_project/test.py | 0 .../standalone_dependencies_multi_target/Assemblies.expected | 0 .../standalone_dependencies_multi_target/Assemblies.ql | 0 .../standalone_dependencies_multi_target/Program.cs | 0 .../standalone_dependencies_multi_target/global.json | 0 .../standalone_dependencies_multi_target/net48.csproj | 0 .../standalone_dependencies_multi_target/net70.csproj | 0 .../standalone_dependencies_multi_target/test.py | 0 .../standalone_dependencies_no_framework/Assemblies.expected | 0 .../standalone_dependencies_no_framework/Assemblies.ql | 0 .../standalone_dependencies_no_framework/Program.cs | 0 .../standalone_dependencies_no_framework/global.json | 0 .../standalone_dependencies_no_framework/packages.config | 0 .../standalone_dependencies_no_framework/test.py | 0 .../standalone_dependencies_no_framework/test_old.csproj | 0 .../standalone_dependencies_no_framework/test_sdk.csproj | 0 .../standalone_dependencies_nuget with_space/Assemblies.expected | 0 .../standalone_dependencies_nuget with_space/Assemblies.ql | 0 .../standalone_dependencies_nuget with_space/Program.cs | 0 .../standalone_dependencies_nuget with_space/global.json | 0 .../standalone_dependencies_nuget with_space/packages.config | 0 .../standalone_dependencies_nuget with_space/test.csproj | 0 .../standalone_dependencies_nuget with_space/test.py | 0 .../standalone_dependencies_nuget/Assemblies.expected | 0 .../standalone_dependencies_nuget/Assemblies.ql | 0 .../standalone_dependencies_nuget/Program.cs | 0 .../standalone_dependencies_nuget/global.json | 0 .../standalone_dependencies_nuget/packages.config | 0 .../standalone_dependencies_nuget/test.csproj | 0 .../{posix-only => posix}/standalone_dependencies_nuget/test.py | 0 .../Assemblies.expected | 0 .../standalone_dependencies_nuget_config_error/Assemblies.ql | 0 .../CompilationInfo.expected | 0 .../standalone_dependencies_nuget_config_error/CompilationInfo.ql | 0 .../standalone_dependencies_nuget_config_error/proj/Program.cs | 0 .../standalone_dependencies_nuget_config_error/proj/nuget.config | 0 .../standalone_dependencies_nuget_config_error/proj/proj.csproj | 0 .../standalone_dependencies_nuget_config_error/standalone.sln | 0 .../standalone_dependencies_nuget_config_error/test.py | 0 .../Assemblies.expected | 0 .../Assemblies.ql | 0 .../CompilationInfo.expected | 0 .../CompilationInfo.ql | 0 .../diagnostics.expected | 0 .../proj/Program.cs | 0 .../proj/nuget.config | 0 .../proj/proj.csproj | 0 .../standalone.sln | 0 .../standalone_dependencies_nuget_config_error_timeout/test.py | 0 .../Assemblies.expected | 0 .../standalone_dependencies_nuget_config_fallback/Assemblies.ql | 0 .../CompilationInfo.expected | 0 .../CompilationInfo.ql | 0 .../diagnostics.expected | 0 .../standalone_dependencies_nuget_config_fallback/proj/Program.cs | 0 .../proj/nuget.config | 0 .../proj/proj.csproj | 0 .../standalone_dependencies_nuget_config_fallback/standalone.sln | 0 .../standalone_dependencies_nuget_config_fallback/test.py | 0 .../standalone_dependencies_nuget_no_sources/Assemblies.expected | 0 .../standalone_dependencies_nuget_no_sources/Assemblies.ql | 0 .../standalone_dependencies_nuget_no_sources/nuget.config | 0 .../standalone_dependencies_nuget_no_sources/proj/Program.cs | 0 .../standalone_dependencies_nuget_no_sources/proj/global.json | 0 .../standalone_dependencies_nuget_no_sources/proj/packages.config | 0 .../standalone_dependencies_nuget_no_sources/proj/test.csproj | 0 .../standalone_dependencies_nuget_no_sources/test.py | 0 .../standalone_dependencies_nuget_versions/Assemblies.expected | 0 .../standalone_dependencies_nuget_versions/Assemblies.ql | 0 .../standalone_dependencies_nuget_versions/Program.cs | 0 .../standalone_dependencies_nuget_versions/d1/test1.csproj | 0 .../standalone_dependencies_nuget_versions/d2/test2.csproj | 0 .../standalone_dependencies_nuget_versions/global.json | 0 .../standalone_dependencies_nuget_versions/test.py | 0 .../{posix-only => posix}/warn_as_error/Errors.expected | 0 .../{posix-only => posix}/warn_as_error/Errors.ql | 0 .../{posix-only => posix}/warn_as_error/Program.cs | 0 .../{posix-only => posix}/warn_as_error/WarnAsError.csproj | 0 .../{posix-only => posix}/warn_as_error/build.sh | 0 .../{posix-only => posix}/warn_as_error/global.json | 0 .../integration-tests/{posix-only => posix}/warn_as_error/test.py | 0 .../{windows-only => windows}/diag_autobuild_script/build.bat | 0 .../diag_autobuild_script/diagnostics.expected | 0 .../{windows-only => windows}/diag_autobuild_script/test.py | 0 .../{windows-only => windows}/diag_multiple_scripts/build.bat | 0 .../diag_multiple_scripts/diagnostics.expected | 0 .../diag_multiple_scripts/scripts/build.bat | 0 .../{windows-only => windows}/diag_multiple_scripts/test.py | 0 .../standalone_dependencies/Assemblies.expected | 0 .../standalone_dependencies/Assemblies.ql | 0 .../{windows-only => windows}/standalone_dependencies/Program.cs | 0 .../{windows-only => windows}/standalone_dependencies/global.json | 0 .../standalone_dependencies/standalone.csproj | 0 .../{windows-only => windows}/standalone_dependencies/test.py | 0 144 files changed, 0 insertions(+), 0 deletions(-) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/CompilerArgs.expected (100%) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/CompilerArgs.ql (100%) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/Program.cs (100%) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/global.json (100%) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/test.csproj (100%) rename csharp/ql/integration-tests/{linux-only => linux}/compiler_args/test.py (100%) rename csharp/ql/integration-tests/{linux-only => linux}/standalone_dependencies_non_utf8_filename/Program.cs (100%) rename csharp/ql/integration-tests/{linux-only => linux}/standalone_dependencies_non_utf8_filename/global.json (100%) rename csharp/ql/integration-tests/{linux-only => linux}/standalone_dependencies_non_utf8_filename/test.csproj (100%) rename csharp/ql/integration-tests/{linux-only => linux}/standalone_dependencies_non_utf8_filename/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_autobuild_script/build.sh (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_autobuild_script/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_autobuild_script/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_multiple_scripts/build.sh (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_multiple_scripts/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_multiple_scripts/scripts/build.sh (100%) rename csharp/ql/integration-tests/{posix-only => posix}/diag_multiple_scripts/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test/UnitTest1.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test/dotnet_test.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/UnitTest1.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/Usings.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/dotnet_test_mstest.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/dotnet_test_mstest/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/build.sh (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/proj.csproj.no_auto (100%) rename csharp/ql/integration-tests/{posix-only => posix}/inherit-env-vars/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/standalone.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_executing_runtime/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_executing_runtime/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_executing_runtime/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_executing_runtime/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/standalone1.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/standalone2.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_project/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/net48.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/net70.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_multi_target/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/packages.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/test_old.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_no_framework/test_sdk.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/packages.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/test.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget with_space/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/packages.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/test.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/CompilationInfo.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/CompilationInfo.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/proj/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/proj/nuget.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/proj/proj.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/standalone.sln (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/standalone.sln (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_error_timeout/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/diagnostics.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/proj/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/proj/nuget.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/proj/proj.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/standalone.sln (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_config_fallback/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/nuget.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/proj/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/proj/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/proj/packages.config (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/proj/test.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_no_sources/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/Assemblies.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/Assemblies.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/d1/test1.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/d2/test2.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/standalone_dependencies_nuget_versions/test.py (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/Errors.expected (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/Errors.ql (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/Program.cs (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/WarnAsError.csproj (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/build.sh (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/global.json (100%) rename csharp/ql/integration-tests/{posix-only => posix}/warn_as_error/test.py (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_autobuild_script/build.bat (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_autobuild_script/diagnostics.expected (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_autobuild_script/test.py (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_multiple_scripts/build.bat (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_multiple_scripts/diagnostics.expected (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_multiple_scripts/scripts/build.bat (100%) rename csharp/ql/integration-tests/{windows-only => windows}/diag_multiple_scripts/test.py (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/Assemblies.expected (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/Assemblies.ql (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/Program.cs (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/global.json (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/standalone.csproj (100%) rename csharp/ql/integration-tests/{windows-only => windows}/standalone_dependencies/test.py (100%) diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected rename to csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.ql similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql rename to csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.ql diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/Program.cs b/csharp/ql/integration-tests/linux/compiler_args/Program.cs similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/Program.cs rename to csharp/ql/integration-tests/linux/compiler_args/Program.cs diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/global.json b/csharp/ql/integration-tests/linux/compiler_args/global.json similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/global.json rename to csharp/ql/integration-tests/linux/compiler_args/global.json diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/test.csproj b/csharp/ql/integration-tests/linux/compiler_args/test.csproj similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/test.csproj rename to csharp/ql/integration-tests/linux/compiler_args/test.csproj diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/test.py b/csharp/ql/integration-tests/linux/compiler_args/test.py similarity index 100% rename from csharp/ql/integration-tests/linux-only/compiler_args/test.py rename to csharp/ql/integration-tests/linux/compiler_args/test.py diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/Program.cs b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/Program.cs similarity index 100% rename from csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/Program.cs rename to csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/Program.cs diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/global.json b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json similarity index 100% rename from csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/global.json rename to csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj similarity index 100% rename from csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj rename to csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.csproj diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.py similarity index 100% rename from csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py rename to csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/test.py diff --git a/csharp/ql/integration-tests/posix-only/diag_autobuild_script/build.sh b/csharp/ql/integration-tests/posix/diag_autobuild_script/build.sh similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_autobuild_script/build.sh rename to csharp/ql/integration-tests/posix/diag_autobuild_script/build.sh diff --git a/csharp/ql/integration-tests/posix-only/diag_autobuild_script/diagnostics.expected b/csharp/ql/integration-tests/posix/diag_autobuild_script/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_autobuild_script/diagnostics.expected rename to csharp/ql/integration-tests/posix/diag_autobuild_script/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/diag_autobuild_script/test.py b/csharp/ql/integration-tests/posix/diag_autobuild_script/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_autobuild_script/test.py rename to csharp/ql/integration-tests/posix/diag_autobuild_script/test.py diff --git a/csharp/ql/integration-tests/posix-only/diag_multiple_scripts/build.sh b/csharp/ql/integration-tests/posix/diag_multiple_scripts/build.sh similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_multiple_scripts/build.sh rename to csharp/ql/integration-tests/posix/diag_multiple_scripts/build.sh diff --git a/csharp/ql/integration-tests/posix-only/diag_multiple_scripts/diagnostics.expected b/csharp/ql/integration-tests/posix/diag_multiple_scripts/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_multiple_scripts/diagnostics.expected rename to csharp/ql/integration-tests/posix/diag_multiple_scripts/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/diag_multiple_scripts/scripts/build.sh b/csharp/ql/integration-tests/posix/diag_multiple_scripts/scripts/build.sh similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_multiple_scripts/scripts/build.sh rename to csharp/ql/integration-tests/posix/diag_multiple_scripts/scripts/build.sh diff --git a/csharp/ql/integration-tests/posix-only/diag_multiple_scripts/test.py b/csharp/ql/integration-tests/posix/diag_multiple_scripts/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/diag_multiple_scripts/test.py rename to csharp/ql/integration-tests/posix/diag_multiple_scripts/test.py diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test/UnitTest1.cs b/csharp/ql/integration-tests/posix/dotnet_test/UnitTest1.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test/UnitTest1.cs rename to csharp/ql/integration-tests/posix/dotnet_test/UnitTest1.cs diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test/diagnostics.expected b/csharp/ql/integration-tests/posix/dotnet_test/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test/diagnostics.expected rename to csharp/ql/integration-tests/posix/dotnet_test/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test/dotnet_test.csproj b/csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test/dotnet_test.csproj rename to csharp/ql/integration-tests/posix/dotnet_test/dotnet_test.csproj diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test/global.json b/csharp/ql/integration-tests/posix/dotnet_test/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test/global.json rename to csharp/ql/integration-tests/posix/dotnet_test/global.json diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test/test.py b/csharp/ql/integration-tests/posix/dotnet_test/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test/test.py rename to csharp/ql/integration-tests/posix/dotnet_test/test.py diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/UnitTest1.cs b/csharp/ql/integration-tests/posix/dotnet_test_mstest/UnitTest1.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/UnitTest1.cs rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/UnitTest1.cs diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/Usings.cs b/csharp/ql/integration-tests/posix/dotnet_test_mstest/Usings.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/Usings.cs rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/Usings.cs diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/diagnostics.expected b/csharp/ql/integration-tests/posix/dotnet_test_mstest/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/diagnostics.expected rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/dotnet_test_mstest.csproj b/csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/dotnet_test_mstest.csproj rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/dotnet_test_mstest.csproj diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/global.json b/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/global.json rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json diff --git a/csharp/ql/integration-tests/posix-only/dotnet_test_mstest/test.py b/csharp/ql/integration-tests/posix/dotnet_test_mstest/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/dotnet_test_mstest/test.py rename to csharp/ql/integration-tests/posix/dotnet_test_mstest/test.py diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/Program.cs b/csharp/ql/integration-tests/posix/inherit-env-vars/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/Program.cs rename to csharp/ql/integration-tests/posix/inherit-env-vars/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/build.sh b/csharp/ql/integration-tests/posix/inherit-env-vars/build.sh similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/build.sh rename to csharp/ql/integration-tests/posix/inherit-env-vars/build.sh diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/diagnostics.expected b/csharp/ql/integration-tests/posix/inherit-env-vars/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/diagnostics.expected rename to csharp/ql/integration-tests/posix/inherit-env-vars/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/global.json b/csharp/ql/integration-tests/posix/inherit-env-vars/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/global.json rename to csharp/ql/integration-tests/posix/inherit-env-vars/global.json diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/proj.csproj.no_auto b/csharp/ql/integration-tests/posix/inherit-env-vars/proj.csproj.no_auto similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/proj.csproj.no_auto rename to csharp/ql/integration-tests/posix/inherit-env-vars/proj.csproj.no_auto diff --git a/csharp/ql/integration-tests/posix-only/inherit-env-vars/test.py b/csharp/ql/integration-tests/posix/inherit-env-vars/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/inherit-env-vars/test.py rename to csharp/ql/integration-tests/posix/inherit-env-vars/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/standalone.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies/standalone.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/standalone1.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/standalone1.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone1.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/standalone2.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/standalone2.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/standalone2.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_project/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/net48.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net48.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/net48.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net48.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/net70.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/net70.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/net70.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/packages.config b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/packages.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/packages.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/packages.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_old.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_old.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_old.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_old.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test_sdk.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test_sdk.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/packages.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/packages.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/packages.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/packages.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/packages.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/packages.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/packages.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/packages.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/CompilationInfo.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/CompilationInfo.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/CompilationInfo.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/CompilationInfo.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/nuget.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/nuget.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/nuget.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/nuget.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/proj/proj.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/standalone.sln b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/standalone.sln similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/standalone.sln rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/standalone.sln diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/standalone.sln similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/standalone.sln diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/diagnostics.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/diagnostics.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/diagnostics.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/nuget.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/nuget.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/nuget.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/nuget.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/proj.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/standalone.sln b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/standalone.sln similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/standalone.sln rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/standalone.sln diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/nuget.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/nuget.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/packages.config similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/packages.config diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/test.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/test.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.expected rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Assemblies.expected diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Assemblies.ql rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Assemblies.ql diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Program.cs b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/Program.cs rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/d1/test1.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/d1/test1.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d1/test1.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/d2/test2.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/d2/test2.csproj rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/d2/test2.csproj diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/global.json rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_versions/test.py rename to csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/test.py diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/Errors.expected b/csharp/ql/integration-tests/posix/warn_as_error/Errors.expected similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/Errors.expected rename to csharp/ql/integration-tests/posix/warn_as_error/Errors.expected diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/Errors.ql b/csharp/ql/integration-tests/posix/warn_as_error/Errors.ql similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/Errors.ql rename to csharp/ql/integration-tests/posix/warn_as_error/Errors.ql diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/Program.cs b/csharp/ql/integration-tests/posix/warn_as_error/Program.cs similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/Program.cs rename to csharp/ql/integration-tests/posix/warn_as_error/Program.cs diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/WarnAsError.csproj b/csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/WarnAsError.csproj rename to csharp/ql/integration-tests/posix/warn_as_error/WarnAsError.csproj diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/build.sh b/csharp/ql/integration-tests/posix/warn_as_error/build.sh similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/build.sh rename to csharp/ql/integration-tests/posix/warn_as_error/build.sh diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/global.json b/csharp/ql/integration-tests/posix/warn_as_error/global.json similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/global.json rename to csharp/ql/integration-tests/posix/warn_as_error/global.json diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/test.py b/csharp/ql/integration-tests/posix/warn_as_error/test.py similarity index 100% rename from csharp/ql/integration-tests/posix-only/warn_as_error/test.py rename to csharp/ql/integration-tests/posix/warn_as_error/test.py diff --git a/csharp/ql/integration-tests/windows-only/diag_autobuild_script/build.bat b/csharp/ql/integration-tests/windows/diag_autobuild_script/build.bat similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_autobuild_script/build.bat rename to csharp/ql/integration-tests/windows/diag_autobuild_script/build.bat diff --git a/csharp/ql/integration-tests/windows-only/diag_autobuild_script/diagnostics.expected b/csharp/ql/integration-tests/windows/diag_autobuild_script/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_autobuild_script/diagnostics.expected rename to csharp/ql/integration-tests/windows/diag_autobuild_script/diagnostics.expected diff --git a/csharp/ql/integration-tests/windows-only/diag_autobuild_script/test.py b/csharp/ql/integration-tests/windows/diag_autobuild_script/test.py similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_autobuild_script/test.py rename to csharp/ql/integration-tests/windows/diag_autobuild_script/test.py diff --git a/csharp/ql/integration-tests/windows-only/diag_multiple_scripts/build.bat b/csharp/ql/integration-tests/windows/diag_multiple_scripts/build.bat similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_multiple_scripts/build.bat rename to csharp/ql/integration-tests/windows/diag_multiple_scripts/build.bat diff --git a/csharp/ql/integration-tests/windows-only/diag_multiple_scripts/diagnostics.expected b/csharp/ql/integration-tests/windows/diag_multiple_scripts/diagnostics.expected similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_multiple_scripts/diagnostics.expected rename to csharp/ql/integration-tests/windows/diag_multiple_scripts/diagnostics.expected diff --git a/csharp/ql/integration-tests/windows-only/diag_multiple_scripts/scripts/build.bat b/csharp/ql/integration-tests/windows/diag_multiple_scripts/scripts/build.bat similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_multiple_scripts/scripts/build.bat rename to csharp/ql/integration-tests/windows/diag_multiple_scripts/scripts/build.bat diff --git a/csharp/ql/integration-tests/windows-only/diag_multiple_scripts/test.py b/csharp/ql/integration-tests/windows/diag_multiple_scripts/test.py similarity index 100% rename from csharp/ql/integration-tests/windows-only/diag_multiple_scripts/test.py rename to csharp/ql/integration-tests/windows/diag_multiple_scripts/test.py diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected rename to csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.ql similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql rename to csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.ql diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Program.cs b/csharp/ql/integration-tests/windows/standalone_dependencies/Program.cs similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/Program.cs rename to csharp/ql/integration-tests/windows/standalone_dependencies/Program.cs diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/global.json b/csharp/ql/integration-tests/windows/standalone_dependencies/global.json similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/global.json rename to csharp/ql/integration-tests/windows/standalone_dependencies/global.json diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/standalone.csproj rename to csharp/ql/integration-tests/windows/standalone_dependencies/standalone.csproj diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/windows/standalone_dependencies/test.py similarity index 100% rename from csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py rename to csharp/ql/integration-tests/windows/standalone_dependencies/test.py From d5bccd537305b864faea8979e76ceed22465a34a Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 29 Aug 2024 19:47:53 +0100 Subject: [PATCH 242/334] Reapply "C#: Add support for flow through side-effects on static fields" This reverts commit ea6092ad3fc5e7a516862773d1eb9be1c8ed607d. --- .../dataflow/internal/DataFlowPrivate.qll | 6 +++-- .../dataflow/fields/FieldFlow.expected | 24 +++++++++++++++++++ .../test/library-tests/dataflow/fields/K.cs | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) 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 f1c51f222d5..fef73365de0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2170,9 +2170,11 @@ predicate jumpStep(Node pred, Node succ) { f.getAnAssignedValue() = pred.asExpr() and succ = TFlowInsensitiveFieldNode(f) or - exists(FieldOrPropertyRead fr | + exists(FieldOrPropertyRead fr | f.getAnAccess() = fr | + fr = pred.(PostUpdateNode).getPreUpdateNode().asExpr() and + succ = TFlowInsensitiveFieldNode(f) + or pred = TFlowInsensitiveFieldNode(f) and - f.getAnAccess() = fr and fr = succ.asExpr() and fr.hasNonlocalValue() ) diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index 0317da509bb..e4cf0bb2673 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -1152,6 +1152,16 @@ edges | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | | J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | | J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | +| K.cs:7:13:7:13 | access to local variable o : String | K.cs:8:22:8:22 | access to local variable o : String | provenance | | +| K.cs:7:13:7:13 | access to local variable o : String | K.cs:8:22:8:22 | access to local variable o : String | provenance | | +| K.cs:7:17:7:33 | call to method Source : String | K.cs:7:13:7:13 | access to local variable o : String | provenance | | +| K.cs:7:17:7:33 | call to method Source : String | K.cs:7:13:7:13 | access to local variable o : String | provenance | | +| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | provenance | | +| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | provenance | | +| K.cs:8:22:8:22 | access to local variable o : String | K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | provenance | | +| K.cs:8:22:8:22 | access to local variable o : String | K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | provenance | | +| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | K.cs:13:14:13:23 | access to array element | provenance | | +| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | K.cs:13:14:13:23 | access to array element | provenance | | nodes | A.cs:5:13:5:13 | access to local variable c : C | semmle.label | access to local variable c : C | | A.cs:5:13:5:13 | access to local variable c : C | semmle.label | access to local variable c : C | @@ -2393,6 +2403,18 @@ nodes | J.cs:125:14:125:17 | (...) ... | semmle.label | (...) ... | | J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | | J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | +| K.cs:7:13:7:13 | access to local variable o : String | semmle.label | access to local variable o : String | +| K.cs:7:13:7:13 | access to local variable o : String | semmle.label | access to local variable o : String | +| K.cs:7:17:7:33 | call to method Source : String | semmle.label | call to method Source : String | +| K.cs:7:17:7:33 | call to method Source : String | semmle.label | call to method Source : String | +| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | semmle.label | [post] access to field Strings : String[] [element] : String | +| K.cs:8:9:8:15 | [post] access to field Strings : String[] [element] : String | semmle.label | [post] access to field Strings : String[] [element] : String | +| K.cs:8:22:8:22 | access to local variable o : String | semmle.label | access to local variable o : String | +| K.cs:8:22:8:22 | access to local variable o : String | semmle.label | access to local variable o : String | +| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | semmle.label | access to field Strings : String[] [element] : String | +| K.cs:13:14:13:20 | access to field Strings : String[] [element] : String | semmle.label | access to field Strings : String[] [element] : String | +| K.cs:13:14:13:23 | access to array element | semmle.label | access to array element | +| K.cs:13:14:13:23 | access to array element | semmle.label | access to array element | subpaths | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | @@ -2648,3 +2670,5 @@ testFailures | J.cs:107:14:107:17 | access to property Y | J.cs:105:32:105:48 | call to method Source : Object | J.cs:107:14:107:17 | access to property Y | $@ | J.cs:105:32:105:48 | call to method Source : Object | call to method Source : Object | | J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | | J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | +| K.cs:13:14:13:23 | access to array element | K.cs:7:17:7:33 | call to method Source : String | K.cs:13:14:13:23 | access to array element | $@ | K.cs:7:17:7:33 | call to method Source : String | call to method Source : String | +| K.cs:13:14:13:23 | access to array element | K.cs:7:17:7:33 | call to method Source : String | K.cs:13:14:13:23 | access to array element | $@ | K.cs:7:17:7:33 | call to method Source : String | call to method Source : String | diff --git a/csharp/ql/test/library-tests/dataflow/fields/K.cs b/csharp/ql/test/library-tests/dataflow/fields/K.cs index f8e79b6af54..cdefa485852 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/K.cs +++ b/csharp/ql/test/library-tests/dataflow/fields/K.cs @@ -10,7 +10,7 @@ public class K private void M2() { - Sink(Strings[0]); // $ MISSING: hasValueFlow=1 + Sink(Strings[0]); // $ hasValueFlow=1 } public static void Sink(object o) { } From 13705531b5725b8b5bb89d54baacd0645808a869 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Thu, 29 Aug 2024 14:47:54 -0700 Subject: [PATCH 243/334] Update .github/pull_request_template.md Co-authored-by: Aditya Sharad <6874315+adityasharad@users.noreply.github.com> --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9d6ec6cb4f5..ef7e5b92ebb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,7 +3,7 @@ #### All query authors - [ ] Add a change note if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md) in this repository. -- [ ] All new queries have appropriate `.qhelp`. See [the documentation](https://github.com/github/codeql/blob/mainπ /docs/query-help-style-guide.md) in this repository. +- [ ] All new queries have appropriate `.qhelp`. See [the documentation](https://github.com/github/codeql/blob/main/docs/query-help-style-guide.md) in this repository. - [ ] QL tests are added if necessary. See [Testing custom queries](https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/testing-custom-queries) in the GitHub documentation. - [ ] New and changed queries have correct query metadata. See [the documentation](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md) in this repository. From 321820e758b86827f6e19ab3d7226d70f9ad982c Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 29 Aug 2024 19:13:17 +0200 Subject: [PATCH 244/334] Java: Rename integration test directories. We are no longer bound to the platform-specific directories, so simplify the test organization. If you don't want this change, just skip merging this PR. It's purely optional. I kept the platform-specific directories around under `kotlin`, but you could also easily merge all these together if you find them unhelpful. I'll leave that change to you. --- .../java/android-8-sample/build.gradle | 0 .../java/android-8-sample/project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../java/android-8-sample/settings.gradle | 0 .../java/android-8-sample/source_archive.expected | 0 .../java/android-8-sample/test.py | 0 .../build.gradle.kts | 0 .../project/build.gradle.kts | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../settings.gradle.kts | 0 .../source_archive.expected | 0 .../test.py | 0 .../build.gradle.kts | 0 .../project/build.gradle.kts | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../settings.gradle.kts | 0 .../source_archive.expected | 0 .../java/android-sample-kotlin-build-script/test.py | 0 .../java/android-sample-no-wrapper/build.gradle | 0 .../android-sample-no-wrapper/project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../java/android-sample-no-wrapper/settings.gradle | 0 .../source_archive.expected | 0 .../java/android-sample-no-wrapper/test.py | 0 .../README | 0 .../build.gradle.kts | 0 .../project/build.gradle.kts | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../settings.gradle.kts | 0 .../source_archive.expected | 0 .../test.py | 0 .../.gitattributes | 0 .../README | 0 .../build.gradle.kts | 0 .../project/build.gradle.kts | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../settings.gradle.kts | 0 .../source_archive.expected | 0 .../test.py | 0 .../java/android-sample-old-style-no-wrapper/README | 0 .../build.gradle | 0 .../project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../settings.gradle | 0 .../source_archive.expected | 0 .../android-sample-old-style-no-wrapper/test.py | 0 .../java/android-sample-old-style/README | 0 .../java/android-sample-old-style/build.gradle | 0 .../android-sample-old-style/project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../java/android-sample-old-style/settings.gradle | 0 .../source_archive.expected | 0 .../java/android-sample-old-style/test.py | 0 .../java/android-sample/build.gradle | 0 .../java/android-sample/project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../java/android-sample/settings.gradle | 0 .../java/android-sample/source_archive.expected | 0 .../{all-platforms => }/java/android-sample/test.py | 0 .../{all-platforms => }/java/ant-sample/build.xml | 0 .../ant-sample/src/main/java/com/example/App.java | 0 .../java/ant-sample/test.expected | 0 .../{all-platforms => }/java/ant-sample/test.py | 0 .../{all-platforms => }/java/ant-sample/test.ql | 0 .../buildless-fetches.expected | 0 .../pom.xml | 0 .../otherreleasetest/1.0/otherreleasetest-1.0.jar | Bin .../1.0/otherreleasetest-1.0.jar.md5 | 0 .../1.0/otherreleasetest-1.0.jar.sha1 | 0 .../otherreleasetest/1.0/otherreleasetest-1.0.pom | 0 .../1.0/otherreleasetest-1.0.pom.md5 | 0 .../1.0/otherreleasetest-1.0.pom.sha1 | 0 .../repo/test/inotherrepo/1.0/inotherrepo-1.0.jar | Bin .../test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 | 0 .../test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 | 0 .../repo/test/inotherrepo/1.0/inotherrepo-1.0.pom | 0 .../test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 | 0 .../test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 | 0 .../src/main/java/Test.java | 0 .../test.expected | 0 .../test.py | 0 .../test.ql | 0 .../DatabaseQualityDiagnostics.expected | 0 .../DatabaseQualityDiagnostics.qlref | 0 .../ExtractorInformation.expected | 0 .../buildless-erroneous/ExtractorInformation.qlref | 0 .../java/buildless-erroneous/Test.java | 0 .../java/buildless-erroneous/diagnostics.expected | 0 .../java/buildless-erroneous/test.py | 0 .../java/buildless-gradle-classifiers/build.gradle | 0 .../buildless-fetches.expected | 0 .../diagnostics.expected | 0 .../buildless-gradle-classifiers/settings.gradle | 0 .../source_archive.expected | 0 .../src/main/java/com/fractestexample/Test.java | 0 .../java/buildless-gradle-classifiers/test.py | 0 .../java/buildless-gradle-timeout/.gitattributes | 0 .../java/buildless-gradle-timeout/.gitignore | 0 .../java/buildless-gradle-timeout/build.gradle | 0 .../buildless-gradle-timeout/diagnostics.expected | 0 .../gradle/verification-metadata.xml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../java/buildless-gradle-timeout/gradlew | 0 .../java/buildless-gradle-timeout/gradlew.bat | 0 .../java/buildless-gradle-timeout/settings.gradle | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/buildless-gradle-timeout/test.py | 0 .../java/buildless-gradle/build.gradle | 0 .../buildless-gradle/buildless-fetches.expected | 0 .../java/buildless-gradle/diagnostics.expected | 0 .../java/buildless-gradle/settings.gradle | 0 .../java/buildless-gradle/source_archive.expected | 0 .../src/main/java/com/fractestexample/Test.java | 0 .../java/buildless-gradle/test.py | 0 .../buildless-fetches.expected | 0 .../java/buildless-inherit-trust-store/cert.pem | 0 .../diagnostics.expected | 0 .../jdk8_shipped_cacerts_plus_cert_pem | Bin .../java/buildless-inherit-trust-store/key.pem | 0 .../java/buildless-inherit-trust-store/pom.xml | 0 .../snapshottest/1.0-SNAPSHOT/maven-metadata.xml | 0 .../1.0-SNAPSHOT/maven-metadata.xml.md5 | 0 .../1.0-SNAPSHOT/maven-metadata.xml.sha1 | 0 .../snapshottest-1.0-20230901.050514-100.jar | Bin .../snapshottest-1.0-20230901.050514-100.jar.md5 | 0 .../snapshottest-1.0-20230901.050514-100.jar.sha1 | 0 .../snapshottest-1.0-20230901.050514-100.pom | 0 .../snapshottest-1.0-20230901.050514-100.pom.md5 | 0 .../snapshottest-1.0-20230901.050514-100.pom.sha1 | 0 .../java/buildless-inherit-trust-store/server.py | 0 .../src/main/java/Test.java | 0 .../buildless-inherit-trust-store/test.expected | 0 .../java/buildless-inherit-trust-store/test.py | 0 .../java/buildless-inherit-trust-store/test.ql | 0 .../buildless-fetches.expected | 0 .../diagnostics.expected | 0 .../java/buildless-maven-executable-war/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/buildless-maven-executable-war/test.py | 0 .../buildless-fetches.expected | 0 .../diagnostics.expected | 0 .../java/buildless-maven-multimodule/pom.xml | 0 .../source_archive.expected | 0 .../buildless-maven-multimodule/submod1/pom.xml | 0 .../submod1/src/main/java/com/example/App.java | 0 .../submod1/src/main/resources/my-app.properties | 0 .../submod1/src/main/resources/page.xml | 0 .../submod1/src/main/resources/struts.xml | 0 .../submod1/src/test/java/com/example/AppTest.java | 0 .../buildless-maven-multimodule/submod2/pom.xml | 0 .../submod2/src/main/java/com/example/App2.java | 0 .../submod2/src/main/resources/my-app.properties | 0 .../submod2/src/main/resources/page.xml | 0 .../submod2/src/main/resources/struts.xml | 0 .../submod2/src/test/java/com/example/AppTest2.java | 0 .../java/buildless-maven-multimodule/test.py | 0 .../java/buildless-maven-timeout/.gitattributes | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../buildless-maven-timeout/diagnostics.expected | 0 .../java/buildless-maven-timeout/mvnw | 0 .../java/buildless-maven-timeout/mvnw.cmd | 0 .../java/buildless-maven-timeout/pom.xml | 0 .../buildless-maven-timeout/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/buildless-maven-timeout/test.py | 0 .../buildless-fetches.expected | 0 .../diagnostics.expected | 0 .../pom.xml | 0 .../src/main/java/dlfs/App.java | 0 .../src/site/site.xml | 0 .../src/test/java/dlfs/AppTest.java | 0 .../test.py | 0 .../java/buildless-maven/buildless-fetches.expected | 0 .../java/buildless-maven/diagnostics.expected | 0 .../java/buildless-maven/pom.xml | 0 .../java/buildless-maven/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../buildless-maven/src/main/resources/page.xml | 0 .../buildless-maven/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/buildless-maven/test.py | 0 .../PrintAst.expected | 0 .../PrintAst.qlref | 0 .../Test.java | 0 .../Test2.java | 0 .../test.py | 0 .../java/buildless-proxy-gradle/build.gradle | 0 .../buildless-fetches.expected | 0 .../buildless-proxy-gradle/diagnostics.expected | 0 .../java/buildless-proxy-gradle/settings.gradle | 0 .../buildless-proxy-gradle/source_archive.expected | 0 .../src/main/java/com/fractestexample/Test.java | 0 .../java/buildless-proxy-gradle/test.py | 0 .../buildless-fetches.expected | 0 .../java/buildless-proxy-maven/diagnostics.expected | 0 .../java/buildless-proxy-maven/pom.xml | 0 .../buildless-proxy-maven/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/buildless-proxy-maven/test.py | 0 .../buildless-fetches.expected | 0 .../buildless-sibling-projects/diagnostics.expected | 0 .../gradle-sample/.gitattributes | 0 .../gradle-sample/.gitignore | 0 .../gradle-sample/build.gradle | 0 .../gradle-sample/gradle/verification-metadata.xml | 0 .../gradle-sample/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradle-sample/gradlew | 0 .../gradle-sample/gradlew.bat | 0 .../gradle-sample/settings.gradle | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../gradle-sample2/.gitattributes | 0 .../gradle-sample2/.gitignore | 0 .../gradle-sample2/build.gradle | 0 .../gradle-sample2/gradle/verification-metadata.xml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradle-sample2/gradlew | 0 .../gradle-sample2/gradlew.bat | 0 .../gradle-sample2/settings.gradle | 0 .../src/main/java/com/example/App2.java | 0 .../src/test/java/com/example/AppTest2.java | 0 .../maven-project-1/pom.xml | 0 .../src/main/java/com/example/App3.java | 0 .../src/main/resources/my-app.properties | 0 .../maven-project-1/src/main/resources/page.xml | 0 .../maven-project-1/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest3.java | 0 .../maven-project-2/pom.xml | 0 .../src/main/java/com/example/App4.java | 0 .../src/main/resources/my-app.properties | 0 .../maven-project-2/src/main/resources/page.xml | 0 .../maven-project-2/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest4.java | 0 .../source_archive.expected | 0 .../java/buildless-sibling-projects/test.py | 0 .../buildless-fetches.expected | 0 .../java/buildless-snapshot-repository/pom.xml | 0 .../snapshottest/1.0-SNAPSHOT/maven-metadata.xml | 0 .../1.0-SNAPSHOT/maven-metadata.xml.md5 | 0 .../1.0-SNAPSHOT/maven-metadata.xml.sha1 | 0 .../snapshottest-1.0-20230901.050514-100.jar | Bin .../snapshottest-1.0-20230901.050514-100.jar.md5 | 0 .../snapshottest-1.0-20230901.050514-100.jar.sha1 | 0 .../snapshottest-1.0-20230901.050514-100.pom | 0 .../snapshottest-1.0-20230901.050514-100.pom.md5 | 0 .../snapshottest-1.0-20230901.050514-100.pom.sha1 | 0 .../src/main/java/Test.java | 0 .../buildless-snapshot-repository/test.expected | 0 .../java/buildless-snapshot-repository/test.py | 0 .../java/buildless-snapshot-repository/test.ql | 0 .../java/buildless/diagnostics.expected | 0 .../java/buildless/source_archive.expected | 0 .../buildless/src/main/java/com/example/App.java | 0 .../buildless/src/main/resources/my-app.properties | 0 .../java/buildless/src/main/resources/page.xml | 0 .../java/buildless/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../{all-platforms => }/java/buildless/test.py | 0 .../android-gradle-incompatibility/build.gradle | 0 .../diagnostics.expected | 0 .../project/build.gradle | 0 .../project/src/main/AndroidManifest.xml | 0 .../main/java/com/github/androidsample/Main.java | 0 .../android-gradle-incompatibility/settings.gradle | 0 .../android-gradle-incompatibility/test.py | 0 .../compilation-error/diagnostics.expected | 0 .../java/diagnostics/compilation-error/pom.xml | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../compilation-error/src/main/resources/page.xml | 0 .../compilation-error/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/diagnostics/compilation-error/test.py | 0 .../dependency-error/diagnostics.expected | 0 .../java/diagnostics/dependency-error/pom.xml | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../dependency-error/src/main/resources/page.xml | 0 .../dependency-error/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/diagnostics/dependency-error/test.py | 0 .../diagnostics/java-version-too-old/build.gradle | 0 .../java-version-too-old/diagnostics.expected | 0 .../java-version-too-old/settings.gradle | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/diagnostics/java-version-too-old/test.py | 0 .../diagnostics/java-version-too-old/toolchains.xml | 0 .../maven-http-repository/.gitattributes | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../maven-http-repository/diagnostics.expected | 0 .../java/diagnostics/maven-http-repository/mvnw | 0 .../java/diagnostics/maven-http-repository/mvnw.cmd | 0 .../java/diagnostics/maven-http-repository/pom.xml | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/diagnostics/maven-http-repository/test.py | 0 .../multiple-candidate-builds/diagnostics.expected | 0 .../maven-project-1/pom.xml | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../maven-project-1/src/main/resources/page.xml | 0 .../maven-project-1/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../maven-project-2/pom.xml | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../maven-project-2/src/main/resources/page.xml | 0 .../maven-project-2/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../diagnostics/multiple-candidate-builds/test.py | 0 .../java/diagnostics/no-build-system/Test.java | 0 .../no-build-system/diagnostics.expected | 0 .../java/diagnostics/no-build-system/test.py | 0 .../diagnostics/no-gradle-test-classes/build.gradle | 0 .../no-gradle-test-classes/diagnostics.expected | 0 .../no-gradle-test-classes/settings.gradle | 0 .../java/diagnostics/no-gradle-test-classes/test.py | 0 .../diagnostics/no-gradle-wrapper/.gitattributes | 0 .../java/diagnostics/no-gradle-wrapper/.gitignore | 0 .../java/diagnostics/no-gradle-wrapper/build.gradle | 0 .../no-gradle-wrapper/diagnostics.expected | 0 .../diagnostics/no-gradle-wrapper/settings.gradle | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/diagnostics/no-gradle-wrapper/test.py | 0 .../java/ecj-sample-noexit/Test.java | 0 .../java/ecj-sample-noexit/source_archive.expected | 0 .../java/ecj-sample-noexit/test.py | 0 .../{all-platforms => }/java/ecj-sample/Test.java | 0 .../java/ecj-sample/source_archive.expected | 0 .../{all-platforms => }/java/ecj-sample/test.py | 0 .../ecj-tolerate-enum-annotations/Diag.expected | 0 .../java/ecj-tolerate-enum-annotations/Diag.ql | 0 .../java/ecj-tolerate-enum-annotations/Test.java | 0 .../java/ecj-tolerate-enum-annotations/Test2.java | 0 .../ecj-tolerate-enum-annotations/test.expected | 0 .../java/ecj-tolerate-enum-annotations/test.py | 0 .../java/ecj-tolerate-enum-annotations/test.ql | 0 .../gradle-sample-kotlin-script}/.gitattributes | 0 .../app/build.gradle.kts | 0 .../app/src/main/java/test/App.java | 0 .../app/src/test/java/test/AppTest.java | 0 .../java/gradle-sample-kotlin-script/gradlew | 0 .../java/gradle-sample-kotlin-script/gradlew.bat | 0 .../gradle-sample-kotlin-script/settings.gradle.kts | 0 .../source_archive.expected | 0 .../java/gradle-sample-kotlin-script/test.py | 0 .../java/gradle-sample/build.gradle | 0 .../java/gradle-sample/settings.gradle | 0 .../java/gradle-sample/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../{all-platforms => }/java/gradle-sample/test.py | 0 .../java/java-web-jsp/.gitignore | 0 .../java/java-web-jsp/README.txt | 0 .../{all-platforms => }/java/java-web-jsp/pom.xml | 0 .../java/java-web-jsp/spotbugs-security-exclude.xml | 0 .../java/java-web-jsp/spotbugs-security-include.xml | 0 .../src/main/java/com/acme/Counter.java | 0 .../src/main/java/com/acme/Date2Tag.java | 0 .../src/main/java/com/acme/DateServlet.java | 0 .../src/main/java/com/acme/DateTag.java | 0 .../src/main/java/com/acme/TagListener.java | 0 .../java/org/eclipse/jetty/demo/LoggingUtil.java | 0 .../src/main/java/org/eclipse/jetty/demo/Main.java | 0 .../org/eclipse/jetty/demo/SystemOutHandler.java | 0 .../src/main/resources/jetty-logging.properties | 0 .../src/main/resources/logging.properties | 0 .../src/main/webapp/WEB-INF/acme-taglib.tld | 0 .../src/main/webapp/WEB-INF/acme-taglib2.tld | 0 .../src/main/webapp/WEB-INF/applicationContext.xml | 0 .../java-web-jsp/src/main/webapp/WEB-INF/secret.jsp | 0 .../java-web-jsp/src/main/webapp/WEB-INF/spring.tld | 0 .../src/main/webapp/WEB-INF/tags/panel.tag | 0 .../java-web-jsp/src/main/webapp/WEB-INF/web.xml | 0 .../src/main/webapp/WEB-INF/weblogic.xml | 0 .../main/webapp/include/${param.secret_param}.jsp | 0 .../src/main/webapp/include/jsp_include_1.jsp | 0 .../src/main/webapp/include/jsp_include_2_safe.jsp | 0 .../src/main/webapp/include/jsp_include_3.jsp | 0 .../java/java-web-jsp/src/main/webapp/index.jsp | 0 .../src/main/webapp/jstl/jstl_escape_1.jsp | 0 .../src/main/webapp/jstl/jstl_escape_2.jsp | 0 .../src/main/webapp/jstl/jstl_escape_3.jsp | 0 .../java/java-web-jsp/src/main/webapp/random.jsp | 0 .../src/main/webapp/spring/spring_eval_1.jsp | 0 .../src/main/webapp/spring/spring_eval_2.jsp | 0 .../src/main/webapp/spring/spring_eval_3.jsp | 0 .../src/main/webapp/spring/spring_eval_4_safe.jsp | 0 .../java-web-jsp/src/main/webapp/test/bean1.jsp | 0 .../java-web-jsp/src/main/webapp/test/bean2.jsp | 0 .../java/java-web-jsp/src/main/webapp/test/dump.jsp | 0 .../java/java-web-jsp/src/main/webapp/test/expr.jsp | 0 .../java-web-jsp/src/main/webapp/test/foo/foo.jsp | 0 .../java/java-web-jsp/src/main/webapp/test/jstl.jsp | 0 .../java/java-web-jsp/src/main/webapp/test/tag.jsp | 0 .../java/java-web-jsp/src/main/webapp/test/tag2.jsp | 0 .../java-web-jsp/src/main/webapp/test/tagfile.jsp | 0 .../java/java-web-jsp/src/main/webapp/various.jsp | 0 .../java/java-web-jsp/src/main/webapp/xml/xml1.jsp | 0 .../java/java-web-jsp/src/main/webapp/xml/xml2.jsp | 0 .../java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp | 0 .../java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp | 0 .../java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp | 0 .../java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss0.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss1.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss2.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss3.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss4.jsp | 0 .../java/java-web-jsp/src/main/webapp/xss/xss5.jsp | 0 .../java/java-web-jsp/test.expected | 0 .../{all-platforms => }/java/java-web-jsp/test.py | 0 .../{all-platforms => }/java/java-web-jsp/test.ql | 0 .../{all-platforms => }/java/maven-enforcer/pom.xml | 0 .../java/maven-enforcer/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../java/maven-enforcer/src/main/resources/page.xml | 0 .../maven-enforcer/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../{all-platforms => }/java/maven-enforcer/test.py | 0 .../java/maven-sample-extract-properties/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-extract-properties/test.py | 0 .../java/maven-sample-large-xml-files/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-large-xml-files/test.py | 0 .../java/maven-sample-small-xml-files/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-small-xml-files/test.py | 0 .../java/maven-sample-xml-mode-all/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-xml-mode-all/test.py | 0 .../java/maven-sample-xml-mode-byname/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-xml-mode-byname/test.py | 0 .../java/maven-sample-xml-mode-disabled/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-xml-mode-disabled/test.py | 0 .../java/maven-sample-xml-mode-smart/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-sample-xml-mode-smart/test.py | 0 .../{all-platforms => }/java/maven-sample/pom.xml | 0 .../java/maven-sample/source_archive.expected | 0 .../maven-sample/src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../java/maven-sample/src/main/resources/page.xml | 0 .../java/maven-sample/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../{all-platforms => }/java/maven-sample/test.py | 0 .../java/maven-wrapper-script-only/.gitattributes | 0 .../.mvn/wrapper/maven-wrapper.properties | 0 .../java/maven-wrapper-script-only/mvnw | 0 .../java/maven-wrapper-script-only/mvnw.cmd | 0 .../java/maven-wrapper-script-only/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-wrapper-script-only/test.py | 0 .../java/maven-wrapper-source-only/.gitattributes | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.properties | 0 .../java/maven-wrapper-source-only/mvnw | 0 .../java/maven-wrapper-source-only/mvnw.cmd | 0 .../java/maven-wrapper-source-only/pom.xml | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../src/main/resources/page.xml | 0 .../src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/maven-wrapper-source-only/test.py | 0 .../java/maven-wrapper/.gitattributes | 0 .../maven-wrapper/.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../{all-platforms => }/java/maven-wrapper/mvnw | 0 .../{all-platforms => }/java/maven-wrapper/mvnw.cmd | 0 .../{all-platforms => }/java/maven-wrapper/pom.xml | 0 .../java/maven-wrapper/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/main/resources/my-app.properties | 0 .../java/maven-wrapper/src/main/resources/page.xml | 0 .../maven-wrapper/src/main/resources/struts.xml | 0 .../src/test/java/com/example/AppTest.java | 0 .../{all-platforms => }/java/maven-wrapper/test.py | 0 .../ExtractorInformation.expected | 0 .../ExtractorInformation.qlref | 0 .../mod1/mod1pkg/Mod1Class.java | 0 .../multi-release-jar-java11/mod1/module-info.java | 0 .../multi-release-jar-java11/mod2/mod2pkg/User.java | 0 .../multi-release-jar-java11/mod2/module-info.java | 0 .../java/multi-release-jar-java11/test.py | 0 .../ExtractorInformation.expected | 0 .../ExtractorInformation.qlref | 0 .../mod1/mod1pkg/Mod1Class.java | 0 .../multi-release-jar-java17/mod1/module-info.java | 0 .../multi-release-jar-java17/mod2/mod2pkg/User.java | 0 .../multi-release-jar-java17/mod2/module-info.java | 0 .../java/multi-release-jar-java17/test.py | 0 .../.gitattributes | 0 .../partial-gradle-sample-without-gradle/.gitignore | 0 .../build.gradle | 0 .../gradle/verification-metadata.xml | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../partial-gradle-sample-without-gradle/gradlew | 0 .../gradlew.bat | 0 .../settings.gradle | 0 .../source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../partial-gradle-sample-without-gradle/test.py | 0 .../java/partial-gradle-sample/.gitattributes | 6 ++++++ .../java/partial-gradle-sample/build.gradle | 0 .../gradle/verification-metadata.xml | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../java/partial-gradle-sample/gradlew | 0 .../java/partial-gradle-sample/gradlew.bat | 0 .../java/partial-gradle-sample/settings.gradle | 0 .../partial-gradle-sample/source_archive.expected | 0 .../src/main/java/com/example/App.java | 0 .../src/test/java/com/example/AppTest.java | 0 .../java/partial-gradle-sample/test.py | 0 .../java/spring-boot-sample/README | 0 .../java/spring-boot-sample/build.gradle | 0 .../java/spring-boot-sample/settings.gradle | 0 .../java/spring-boot-sample/source_archive.expected | 0 .../SpringBootSampleApplication.java | 0 .../src/main/resources/application.properties | 0 .../SpringBootSampleApplicationTests.java | 0 .../java/spring-boot-sample/test.py | 0 .../annotation-id-consistency/PrintAst.expected | 0 .../annotation-id-consistency/PrintAst.qlref | 0 .../annotation-id-consistency/User.java | 0 .../deprecatedAnnotationTypes.expected | 0 .../deprecatedAnnotationTypes.ql | 0 .../annotation-id-consistency/ktUser.kt | 0 .../annotation-id-consistency/qlpack.yml | 0 .../annotation-id-consistency/test.ext.yml | 0 .../annotation-id-consistency/test.kt | 0 .../annotation-id-consistency/test.py | 0 .../compiler_arguments/app/build.gradle | 0 .../app/src/main/kotlin/testProject/App.kt | 0 .../compiler_arguments/compArgs.expected | 0 .../all-platforms}/compiler_arguments/compArgs.ql | 0 .../compiler_arguments/settings.gradle | 0 .../all-platforms}/compiler_arguments/test.py | 0 .../default-parameter-mad-flow/lib.kt | 0 .../default-parameter-mad-flow/qlpack.yml | 0 .../default-parameter-mad-flow/test.expected | 0 .../default-parameter-mad-flow/test.ext.yml | 0 .../default-parameter-mad-flow/test.py | 0 .../default-parameter-mad-flow/test.ql | 0 .../default-parameter-mad-flow/user.kt | 0 .../kotlin-version-too-new/diagnostics.expected | 0 .../com/intellij/mock/MockProject.java | 0 .../com/intellij/openapi/Disposable.java | 0 .../fake-kotlinc-source/driver/Main.java | 0 .../fake-kotlinc-source/kotlin/KotlinVersion.java | 0 .../org/jetbrains/kotlin/cli/common/ExitCode.java | 0 .../cli/common/arguments/CommonToolArguments.java | 0 .../common/arguments/K2JVMCompilerArguments.java | 0 .../arguments/ParseCommandLineArgumentsKt.java | 0 .../org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java | 0 .../kotlin/config/CompilerConfiguration.java | 0 .../org/jetbrains/kotlin/utils/KotlinPaths.java | 0 .../diagnostics/kotlin-version-too-new/test.py | 0 .../all-platforms}/enabling/KotlinDefault.kt | 0 .../all-platforms}/enabling/KotlinDisabled.kt | 0 .../all-platforms}/enabling/KotlinEnabled.kt | 0 .../all-platforms}/enabling/source_archive.expected | 0 .../all-platforms}/enabling/test.py | 0 .../enhanced-nullability/NotNull.java | 0 .../all-platforms}/enhanced-nullability/Test.java | 0 .../enhanced-nullability/test.expected | 0 .../all-platforms}/enhanced-nullability/test.py | 0 .../all-platforms}/enhanced-nullability/test.ql | 0 .../all-platforms}/enhanced-nullability/user.kt | 0 .../external-property-overloads/test.expected | 0 .../external-property-overloads/test.kt | 0 .../external-property-overloads/test.py | 0 .../external-property-overloads/test.ql | 0 .../external-property-overloads/user.kt | 0 .../all-platforms}/extractor_crash/classes.expected | 0 .../all-platforms}/extractor_crash/classes.ql | 0 .../all-platforms}/extractor_crash/code/A.kt | 0 .../all-platforms}/extractor_crash/code/B.kt | 0 .../all-platforms}/extractor_crash/code/C.kt | 0 .../extractor_crash/compilationFiles.expected | 0 .../extractor_crash/compilationFiles.ql | 0 .../extractor_crash/compilations.expected | 0 .../all-platforms}/extractor_crash/compilations.ql | 0 .../all-platforms}/extractor_crash/test.py | 0 .../ExtractorInformation.expected | 0 .../ExtractorInformation.ext.yml | 0 .../ExtractorInformation.qlref | 0 .../extractor_information_kotlin1/SomeClass.kt | 0 .../extractor_information_kotlin1/test.py | 0 .../ExtractorInformation.expected | 0 .../ExtractorInformation.ext.yml | 0 .../ExtractorInformation.qlref | 0 .../extractor_information_kotlin2/SomeClass.kt | 0 .../extractor_information_kotlin2/test.py | 0 .../all-platforms}/file_classes/A.kt | 0 .../all-platforms}/file_classes/B.kt | 0 .../all-platforms}/file_classes/C.kt | 0 .../all-platforms}/file_classes/classes.expected | 0 .../all-platforms}/file_classes/classes.ql | 0 .../all-platforms}/file_classes/test.py | 0 .../gradle_groovy_app/app/build.gradle | 0 .../app/src/main/kotlin/testProject/App.kt | 0 .../gradle_groovy_app/compilations.expected | 0 .../gradle_groovy_app/compilations.ql | 0 .../gradle_groovy_app/methods.expected | 0 .../all-platforms}/gradle_groovy_app/methods.ql | 0 .../gradle_groovy_app/settings.gradle | 0 .../all-platforms}/gradle_groovy_app/test.py | 0 .../ConstantExpAppearsNonConstant.expected | 0 .../ConstantExpAppearsNonConstant.qlref | 0 .../gradle_kotlinx_serialization/PrintAst.expected | 0 .../gradle_kotlinx_serialization/PrintAst.qlref | 0 .../gradle_kotlinx_serialization/app/build.gradle | 0 .../app/src/main/kotlin/testProject/App.kt | 0 .../gradle_kotlinx_serialization/diag.expected | 0 .../gradle_kotlinx_serialization/diag.ql | 0 .../gradle_kotlinx_serialization/settings.gradle | 0 .../gradle_kotlinx_serialization/test.py | 0 .../java-interface-redeclares-tostring/Test.java | 0 .../test.expected | 0 .../java-interface-redeclares-tostring/test.py | 0 .../java-interface-redeclares-tostring/test.ql | 0 .../java-interface-redeclares-tostring/user.kt | 0 .../java_modifiers/libsrc/extlib/A.java | 0 .../all-platforms}/java_modifiers/test.expected | 0 .../all-platforms}/java_modifiers/test.kt | 0 .../all-platforms}/java_modifiers/test.py | 0 .../all-platforms}/java_modifiers/test.ql | 0 .../jvmoverloads-external-class/User.java | 0 .../jvmoverloads-external-class/test.expected | 0 .../jvmoverloads-external-class/test.kt | 0 .../jvmoverloads-external-class/test.py | 0 .../jvmoverloads-external-class/test.ql | 0 .../jvmoverloads-external-class/user.kt | 0 .../kotlin-interface-inherited-default/User.java | 0 .../noforwards.kt | 0 .../test.expected | 0 .../kotlin-interface-inherited-default/test.kt | 0 .../kotlin-interface-inherited-default/test.py | 0 .../kotlin-interface-inherited-default/test.ql | 0 .../kotlin_compiler_java_source/J.java | 0 .../all-platforms}/kotlin_compiler_java_source/K.kt | 0 .../kotlin_compiler_java_source/K2.kt | 0 .../kotlin_compiler_java_source/jlocs.expected | 0 .../kotlin_compiler_java_source/jlocs.ql | 0 .../kotlin_compiler_java_source/test.py | 0 .../kotlin_file_import/libsrc/longsig.kt | 0 .../all-platforms}/kotlin_file_import/test.expected | 0 .../all-platforms}/kotlin_file_import/test.py | 0 .../all-platforms}/kotlin_file_import/test.ql | 0 .../all-platforms}/kotlin_file_import/user.kt | 0 .../kotlin_java_lowering_wildcards/JavaDefns.java | 0 .../kotlin_java_lowering_wildcards/JavaDefns2.java | 0 .../kotlin_java_lowering_wildcards/JavaUser.java | 0 .../kotlin_java_lowering_wildcards/kotlindefns.kt | 0 .../kotlin_java_lowering_wildcards/kotlinuser.kt | 0 .../kotlin_java_lowering_wildcards/test.expected | 0 .../kotlin_java_lowering_wildcards/test.py | 0 .../kotlin_java_lowering_wildcards/test.ql | 0 .../kotlin_java_static_fields/ReadsFields.java | 0 .../kotlin_java_static_fields/hasFields.kt | 0 .../kotlin_java_static_fields/test.expected | 0 .../kotlin_java_static_fields/test.py | 0 .../kotlin_java_static_fields/test.ql | 0 .../kotlin_kfunction/app/build.gradle | 0 .../app/src/main/kotlin/testProject/App.kt | 0 .../all-platforms}/kotlin_kfunction/diag.expected | 0 .../all-platforms}/kotlin_kfunction/diag.ql | 0 .../all-platforms}/kotlin_kfunction/settings.gradle | 0 .../all-platforms}/kotlin_kfunction/test.py | 0 .../all-platforms}/kotlinc_multi/FileA.kt | 0 .../all-platforms}/kotlinc_multi/FileB.kt | 0 .../kotlinc_multi/compilations.expected | 0 .../all-platforms}/kotlinc_multi/compilations.ql | 0 .../all-platforms}/kotlinc_multi/methods.expected | 0 .../all-platforms}/kotlinc_multi/methods.ql | 0 .../all-platforms}/kotlinc_multi/test.py | 0 .../all-platforms}/logs/logs.expected | 0 .../kotlin => kotlin/all-platforms}/logs/test.kt | 0 .../kotlin => kotlin/all-platforms}/logs/test.py | 0 .../nested_generic_types/JavaUser.java | 0 .../nested_generic_types/KotlinUser.kt | 0 .../libsrc/extlib/OuterGeneric.java | 0 .../libsrc/extlib/OuterManyParams.java | 0 .../libsrc/extlib/OuterNotGeneric.java | 0 .../libsrc/extlib/TypeParamVisibility.java | 0 .../nested_generic_types/test.expected | 0 .../all-platforms}/nested_generic_types/test.py | 0 .../all-platforms}/nested_generic_types/test.ql | 0 .../nullability-annotations/AnnotatedInterface.java | 0 .../nullability-annotations/AnnotatedMethods.java | 0 .../nullability-annotations/JavaUser.java | 0 .../nullability-annotations/ktUser.kt | 0 .../org/jetbrains/annotations/NotNull.java | 0 .../org/jetbrains/annotations/Nullable.java | 0 .../nullability-annotations/test.expected | 0 .../all-platforms}/nullability-annotations/test.py | 0 .../all-platforms}/nullability-annotations/test.ql | 0 .../nullability-annotations/zpkg/A.java | 0 .../path_transformer/classes.expected | 0 .../all-platforms}/path_transformer/classes.ql | 0 .../path_transformer/kotlin_source.kt | 0 .../all-platforms}/path_transformer/test.py | 0 .../private_property_accessors/hasprops.kt | 0 .../private_property_accessors/test.expected | 0 .../private_property_accessors/test.py | 0 .../private_property_accessors/test.ql | 0 .../private_property_accessors/usesprops.kt | 0 .../all-platforms}/raw_generic_types/JavaUser.java | 0 .../all-platforms}/raw_generic_types/KotlinUser.kt | 0 .../libsrc/extlib/GenericTypeJava.java | 0 .../libsrc/extlib/GenericTypeKotlin.java | 0 .../libsrc/extlib/RawTypesInSignatureJava.java | 0 .../libsrc/extlib/RawTypesInSignatureKotlin.java | 0 .../all-platforms}/raw_generic_types/test.expected | 0 .../all-platforms}/raw_generic_types/test.py | 0 .../all-platforms}/raw_generic_types/test.ql | 0 .../JavaDefinedContainer.java | 0 .../JavaDefinedRepeatable.java | 0 .../repeatable-annotations/JavaUser.java | 0 .../all-platforms}/repeatable-annotations/lib.kt | 0 .../repeatable-annotations/test.expected | 0 .../all-platforms}/repeatable-annotations/test.kt | 0 .../all-platforms}/repeatable-annotations/test.py | 0 .../all-platforms}/repeatable-annotations/test.ql | 0 .../all-platforms}/trap_compression/test.kt | 0 .../all-platforms}/trap_compression/test.py | 0 .../linux}/custom_plugin/PrintAst.expected | 0 .../linux}/custom_plugin/PrintAst.qlref | 0 .../kotlin => kotlin/linux}/custom_plugin/a.kt | 0 .../kotlin => kotlin/linux}/custom_plugin/b.kt | 0 .../kotlin => kotlin/linux}/custom_plugin/c.kt | 0 .../kotlin => kotlin/linux}/custom_plugin/d.kt | 0 .../linux}/custom_plugin/diag.expected | 0 .../kotlin => kotlin/linux}/custom_plugin/diag.ql | 0 .../kotlin => kotlin/linux}/custom_plugin/e.kt | 0 .../linux}/custom_plugin/methods.expected | 0 .../linux}/custom_plugin/methods.ql | 0 .../linux}/custom_plugin/plugin/BUILD.bazel | 0 .../linux}/custom_plugin/plugin/Plugin.kt | 0 ...brains.kotlin.compiler.plugin.ComponentRegistrar | 0 .../linux}/custom_plugin/qlpack.yml | 0 .../linux}/custom_plugin/rootClasses.expected | 0 .../linux}/custom_plugin/rootClasses.ql | 0 .../linux}/custom_plugin/staticinit.expected | 0 .../linux}/custom_plugin/staticinit.ql | 0 .../kotlin => kotlin/linux}/custom_plugin/test.py | 4 ++-- .../javasrc/extlib/BoundedGenericTest.java | 0 .../javasrc/extlib/ComplexBoundedGenericTest.java | 0 .../javasrc/extlib/GenericTest.java | 0 .../linux}/use_java_library/javasrc/extlib/Lib.java | 0 .../linux}/use_java_library/parameterTypes.expected | 0 .../linux}/use_java_library/parameterTypes.ql | 0 .../linux}/use_java_library/test.py | 0 .../linux}/use_java_library/user.kt | 0 .../posix}/generic-extension-property/User.java | 0 .../posix}/generic-extension-property/test.expected | 0 .../posix}/generic-extension-property/test.kt | 0 .../posix}/generic-extension-property/test.py | 0 .../posix}/generic-extension-property/test.ql | 0 .../java_kotlin_extraction_orders/test.expected | 0 .../posix}/java_kotlin_extraction_orders/test.py | 0 .../posix}/java_kotlin_extraction_orders/test.ql | 0 .../code/doubleIntercepted.kt | 0 .../kotlin_double_interception/code/manual.kt | 0 .../code/manuallyIntercepted.kt | 0 .../kotlin_double_interception/code/normal.kt | 0 .../kotlin_double_interception/code/notSeen.kt | 0 .../kotlin_double_interception/files.expected | 0 .../posix}/kotlin_double_interception/files.ql | 0 .../posix}/kotlin_double_interception/test.py | 0 .../posix}/module_mangled_names/User.java | 0 .../posix}/module_mangled_names/test.expected | 0 .../posix}/module_mangled_names/test.py | 0 .../posix}/module_mangled_names/test.ql | 0 .../posix}/module_mangled_names/test1.kt | 0 .../posix}/module_mangled_names/test2.kt | 0 .../posix}/module_mangled_names/test3.kt | 0 .../posix}/needless-java-wildcards/Test.java | 0 .../posix}/needless-java-wildcards/kConsumer.kt | 0 .../posix}/needless-java-wildcards/test.expected | 0 .../posix}/needless-java-wildcards/test.py | 0 .../posix}/needless-java-wildcards/test.ql | 0 .../posix}/needless-java-wildcards/user.kt | 0 865 files changed, 8 insertions(+), 2 deletions(-) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-8-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/project/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/settings.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script-no-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/project/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/settings.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-kotlin-build-script/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-no-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/README (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/settings.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/README (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/settings.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-kotlin-build-script/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/README (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style-no-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/README (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample-old-style/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/android-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ant-sample/build.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/ant-sample/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/ant-sample/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/ant-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ant-sample/test.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/src/main/java/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-dependency-different-repository/test.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/DatabaseQualityDiagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/DatabaseQualityDiagnostics.qlref (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/ExtractorInformation.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/ExtractorInformation.qlref (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-erroneous/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/src/main/java/com/fractestexample/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-classifiers/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/gradle/verification-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle-timeout/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/src/main/java/com/fractestexample/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-gradle/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/cert.pem (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/jdk8_shipped_cacerts_plus_cert_pem (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/key.pem (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/server.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/src/main/java/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-inherit-trust-store/test.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-executable-war/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod1/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/src/main/java/com/example/App2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/submod2/src/test/java/com/example/AppTest2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-multimodule/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/mvnw (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/mvnw.cmd (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-timeout/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/src/main/java/dlfs/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/src/site/site.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/src/test/java/dlfs/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven-tolerate-unavailable-dependency/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-maven/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-module-definition-not-in-module-info-file/PrintAst.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-module-definition-not-in-module-info-file/PrintAst.qlref (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-module-definition-not-in-module-info-file/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-module-definition-not-in-module-info-file/Test2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-module-definition-not-in-module-info-file/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/src/main/java/com/fractestexample/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-gradle/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-proxy-maven/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/gradle/verification-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/gradle/verification-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/src/main/java/com/example/App2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/gradle-sample2/src/test/java/com/example/AppTest2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/src/main/java/com/example/App3.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-1/src/test/java/com/example/AppTest3.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/src/main/java/com/example/App4.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/maven-project-2/src/test/java/com/example/AppTest4.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-sibling-projects/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/buildless-fetches.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/src/main/java/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless-snapshot-repository/test.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/buildless/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/project/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/project/src/main/AndroidManifest.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/project/src/main/java/com/github/androidsample/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/android-gradle-incompatibility/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/compilation-error/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/dependency-error/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/java-version-too-old/toolchains.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/mvnw (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/mvnw.cmd (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/maven-http-repository/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-1/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/maven-project-2/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/multiple-candidate-builds/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-build-system/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-build-system/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-build-system/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-test-classes/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-test-classes/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-test-classes/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-test-classes/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/diagnostics/no-gradle-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample-noexit/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample-noexit/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample-noexit/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/Diag.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/Diag.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/Test.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/Test2.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/ecj-tolerate-enum-annotations/test.ql (100%) rename java/ql/integration-tests/{all-platforms/java/partial-gradle-sample-without-gradle => java/gradle-sample-kotlin-script}/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/app/build.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/app/src/main/java/test/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/app/src/test/java/test/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/settings.gradle.kts (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample-kotlin-script/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/gradle-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/README.txt (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/spotbugs-security-exclude.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/spotbugs-security-include.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/com/acme/Counter.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/com/acme/Date2Tag.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/com/acme/DateServlet.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/com/acme/DateTag.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/com/acme/TagListener.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/LoggingUtil.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/Main.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/SystemOutHandler.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/resources/jetty-logging.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/resources/logging.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib.tld (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib2.tld (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/applicationContext.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/secret.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/spring.tld (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/tags/panel.tag (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/web.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/WEB-INF/weblogic.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/include/${param.secret_param}.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/include/jsp_include_1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/include/jsp_include_2_safe.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/include/jsp_include_3.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/index.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_3.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/random.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/spring/spring_eval_1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/spring/spring_eval_2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/spring/spring_eval_3.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/spring/spring_eval_4_safe.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/bean1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/bean2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/dump.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/expr.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/foo/foo.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/jstl.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/tag.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/tag2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/test/tagfile.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/various.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xml/xml1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xml/xml2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss0.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss1.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss2.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss3.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss4.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/src/main/webapp/xss/xss5.jsp (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/test.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/java-web-jsp/test.ql (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-enforcer/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-extract-properties/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-large-xml-files/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-small-xml-files/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-all/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-byname/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-disabled/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample-xml-mode-smart/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/.mvn/wrapper/maven-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/mvnw (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/mvnw.cmd (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-script-only/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/.mvn/wrapper/maven-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/mvnw (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/mvnw.cmd (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper-source-only/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/.mvn/wrapper/maven-wrapper.jar (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/.mvn/wrapper/maven-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/mvnw (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/mvnw.cmd (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/pom.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/src/main/resources/my-app.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/src/main/resources/page.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/src/main/resources/struts.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/maven-wrapper/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/ExtractorInformation.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/ExtractorInformation.qlref (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/mod1/module-info.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/mod2/mod2pkg/User.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/mod2/module-info.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java11/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/ExtractorInformation.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/ExtractorInformation.qlref (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/mod1/module-info.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/mod2/mod2pkg/User.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/mod2/module-info.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/multi-release-jar-java17/test.py (100%) rename java/ql/integration-tests/{all-platforms/java/partial-gradle-sample => java/partial-gradle-sample-without-gradle}/.gitattributes (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/.gitignore (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample-without-gradle/test.py (100%) create mode 100644 java/ql/integration-tests/java/partial-gradle-sample/.gitattributes rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/gradle/verification-metadata.xml (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/gradle/wrapper/gradle-wrapper.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/gradlew (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/gradlew.bat (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/src/main/java/com/example/App.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/src/test/java/com/example/AppTest.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/partial-gradle-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/README (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/build.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/src/main/java/com/github/springbootsample/SpringBootSampleApplication.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/src/main/resources/application.properties (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java (100%) rename java/ql/integration-tests/{all-platforms => }/java/spring-boot-sample/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/PrintAst.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/PrintAst.qlref (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/User.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/deprecatedAnnotationTypes.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/deprecatedAnnotationTypes.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/ktUser.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/qlpack.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/test.ext.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/annotation-id-consistency/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/app/build.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/app/src/main/kotlin/testProject/App.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/compArgs.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/compArgs.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/compiler_arguments/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/lib.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/qlpack.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/test.ext.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/default-parameter-mad-flow/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/diagnostics.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/mock/MockProject.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/openapi/Disposable.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/driver/Main.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/kotlin/KotlinVersion.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/ExitCode.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/CommonToolArguments.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/ParseCommandLineArgumentsKt.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/config/CompilerConfiguration.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/utils/KotlinPaths.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/diagnostics/kotlin-version-too-new/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enabling/KotlinDefault.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enabling/KotlinDisabled.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enabling/KotlinEnabled.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enabling/source_archive.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enabling/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/NotNull.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/Test.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/enhanced-nullability/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/external-property-overloads/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/external-property-overloads/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/external-property-overloads/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/external-property-overloads/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/external-property-overloads/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/classes.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/classes.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/code/A.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/code/B.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/code/C.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/compilationFiles.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/compilationFiles.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/compilations.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/compilations.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_crash/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin1/ExtractorInformation.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin1/ExtractorInformation.ext.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin1/ExtractorInformation.qlref (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin1/SomeClass.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin1/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin2/ExtractorInformation.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin2/ExtractorInformation.ext.yml (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin2/ExtractorInformation.qlref (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin2/SomeClass.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/extractor_information_kotlin2/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/A.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/B.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/C.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/classes.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/classes.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/file_classes/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/app/build.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/app/src/main/kotlin/testProject/App.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/compilations.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/compilations.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/methods.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/methods.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_groovy_app/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.qlref (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/PrintAst.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/PrintAst.qlref (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/app/build.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/app/src/main/kotlin/testProject/App.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/diag.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/diag.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/gradle_kotlinx_serialization/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java-interface-redeclares-tostring/Test.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java-interface-redeclares-tostring/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java-interface-redeclares-tostring/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java-interface-redeclares-tostring/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java-interface-redeclares-tostring/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java_modifiers/libsrc/extlib/A.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java_modifiers/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java_modifiers/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java_modifiers/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/java_modifiers/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/User.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/jvmoverloads-external-class/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/User.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/noforwards.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin-interface-inherited-default/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/J.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/K.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/K2.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/jlocs.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/jlocs.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_compiler_java_source/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_file_import/libsrc/longsig.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_file_import/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_file_import/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_file_import/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_file_import/user.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/JavaDefns.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/JavaDefns2.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/JavaUser.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/kotlindefns.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/kotlinuser.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_lowering_wildcards/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_static_fields/ReadsFields.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_static_fields/hasFields.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_static_fields/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_static_fields/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_java_static_fields/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/app/build.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/app/src/main/kotlin/testProject/App.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/diag.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/diag.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/settings.gradle (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlin_kfunction/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/FileA.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/FileB.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/compilations.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/compilations.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/methods.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/methods.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/kotlinc_multi/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/logs/logs.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/logs/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/logs/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/JavaUser.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/KotlinUser.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/libsrc/extlib/OuterGeneric.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/libsrc/extlib/OuterManyParams.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/libsrc/extlib/OuterNotGeneric.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/libsrc/extlib/TypeParamVisibility.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nested_generic_types/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/AnnotatedInterface.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/AnnotatedMethods.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/JavaUser.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/ktUser.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/org/jetbrains/annotations/NotNull.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/org/jetbrains/annotations/Nullable.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/nullability-annotations/zpkg/A.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/path_transformer/classes.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/path_transformer/classes.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/path_transformer/kotlin_source.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/path_transformer/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/private_property_accessors/hasprops.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/private_property_accessors/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/private_property_accessors/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/private_property_accessors/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/private_property_accessors/usesprops.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/JavaUser.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/KotlinUser.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/libsrc/extlib/GenericTypeJava.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/libsrc/extlib/GenericTypeKotlin.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/libsrc/extlib/RawTypesInSignatureJava.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/libsrc/extlib/RawTypesInSignatureKotlin.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/raw_generic_types/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/JavaDefinedContainer.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/JavaDefinedRepeatable.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/JavaUser.java (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/lib.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/test.expected (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/test.py (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/repeatable-annotations/test.ql (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/trap_compression/test.kt (100%) rename java/ql/integration-tests/{all-platforms/kotlin => kotlin/all-platforms}/trap_compression/test.py (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/PrintAst.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/PrintAst.qlref (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/a.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/b.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/c.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/d.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/diag.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/diag.ql (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/e.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/methods.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/methods.ql (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/plugin/BUILD.bazel (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/plugin/Plugin.kt (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/plugin/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/qlpack.yml (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/rootClasses.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/rootClasses.ql (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/staticinit.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/staticinit.ql (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/custom_plugin/test.py (82%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/javasrc/extlib/BoundedGenericTest.java (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/javasrc/extlib/ComplexBoundedGenericTest.java (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/javasrc/extlib/GenericTest.java (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/javasrc/extlib/Lib.java (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/parameterTypes.expected (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/parameterTypes.ql (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/test.py (100%) rename java/ql/integration-tests/{linux-only/kotlin => kotlin/linux}/use_java_library/user.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/generic-extension-property/User.java (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/generic-extension-property/test.expected (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/generic-extension-property/test.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/generic-extension-property/test.py (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/generic-extension-property/test.ql (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/java_kotlin_extraction_orders/test.expected (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/java_kotlin_extraction_orders/test.py (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/java_kotlin_extraction_orders/test.ql (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/code/doubleIntercepted.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/code/manual.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/code/manuallyIntercepted.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/code/normal.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/code/notSeen.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/files.expected (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/files.ql (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/kotlin_double_interception/test.py (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/User.java (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test.expected (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test.py (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test.ql (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test1.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test2.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/module_mangled_names/test3.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/Test.java (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/kConsumer.kt (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/test.expected (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/test.py (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/test.ql (100%) rename java/ql/integration-tests/{posix-only/kotlin => kotlin/posix}/needless-java-wildcards/user.kt (100%) diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/build.gradle b/java/ql/integration-tests/java/android-8-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/build.gradle rename to java/ql/integration-tests/java/android-8-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/project/build.gradle b/java/ql/integration-tests/java/android-8-sample/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/project/build.gradle rename to java/ql/integration-tests/java/android-8-sample/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-8-sample/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-8-sample/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-8-sample/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-8-sample/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/settings.gradle b/java/ql/integration-tests/java/android-8-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/settings.gradle rename to java/ql/integration-tests/java/android-8-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected b/java/ql/integration-tests/java/android-8-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/source_archive.expected rename to java/ql/integration-tests/java/android-8-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-8-sample/test.py b/java/ql/integration-tests/java/android-8-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-8-sample/test.py rename to java/ql/integration-tests/java/android-8-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/build.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/build.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/settings.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/settings.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/settings.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/settings.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script-no-wrapper/test.py rename to java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/build.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/build.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script/project/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/project/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-kotlin-build-script/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/settings.gradle.kts b/java/ql/integration-tests/java/android-sample-kotlin-build-script/settings.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/settings.gradle.kts rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/settings.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected b/java/ql/integration-tests/java/android-sample-kotlin-build-script/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/source_archive.expected rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py b/java/ql/integration-tests/java/android-sample-kotlin-build-script/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-kotlin-build-script/test.py rename to java/ql/integration-tests/java/android-sample-kotlin-build-script/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/build.gradle b/java/ql/integration-tests/java/android-sample-no-wrapper/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/build.gradle rename to java/ql/integration-tests/java/android-sample-no-wrapper/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/build.gradle b/java/ql/integration-tests/java/android-sample-no-wrapper/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/build.gradle rename to java/ql/integration-tests/java/android-sample-no-wrapper/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-no-wrapper/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-no-wrapper/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-no-wrapper/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-no-wrapper/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/settings.gradle b/java/ql/integration-tests/java/android-sample-no-wrapper/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/settings.gradle rename to java/ql/integration-tests/java/android-sample-no-wrapper/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected b/java/ql/integration-tests/java/android-sample-no-wrapper/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/source_archive.expected rename to java/ql/integration-tests/java/android-sample-no-wrapper/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-no-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-no-wrapper/test.py rename to java/ql/integration-tests/java/android-sample-no-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/README b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/README similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/README rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/README diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/build.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/settings.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/settings.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/settings.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/settings.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/.gitattributes b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/.gitattributes rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/README b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/README similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/README rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/README diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/build.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/settings.gradle.kts b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/settings.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/settings.gradle.kts rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/settings.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/source_archive.expected rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.py rename to java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/README b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/README similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/README rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/README diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/build.gradle b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/build.gradle rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/settings.gradle b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/settings.gradle rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/source_archive.expected rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.py rename to java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/README b/java/ql/integration-tests/java/android-sample-old-style/README similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/README rename to java/ql/integration-tests/java/android-sample-old-style/README diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/build.gradle b/java/ql/integration-tests/java/android-sample-old-style/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/build.gradle rename to java/ql/integration-tests/java/android-sample-old-style/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle b/java/ql/integration-tests/java/android-sample-old-style/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle rename to java/ql/integration-tests/java/android-sample-old-style/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample-old-style/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample-old-style/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample-old-style/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample-old-style/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/settings.gradle b/java/ql/integration-tests/java/android-sample-old-style/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/settings.gradle rename to java/ql/integration-tests/java/android-sample-old-style/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected b/java/ql/integration-tests/java/android-sample-old-style/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/source_archive.expected rename to java/ql/integration-tests/java/android-sample-old-style/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py b/java/ql/integration-tests/java/android-sample-old-style/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.py rename to java/ql/integration-tests/java/android-sample-old-style/test.py diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/build.gradle b/java/ql/integration-tests/java/android-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/build.gradle rename to java/ql/integration-tests/java/android-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/project/build.gradle b/java/ql/integration-tests/java/android-sample/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/project/build.gradle rename to java/ql/integration-tests/java/android-sample/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/android-sample/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/android-sample/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/android-sample/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/android-sample/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/settings.gradle b/java/ql/integration-tests/java/android-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/settings.gradle rename to java/ql/integration-tests/java/android-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected b/java/ql/integration-tests/java/android-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/source_archive.expected rename to java/ql/integration-tests/java/android-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/android-sample/test.py b/java/ql/integration-tests/java/android-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/android-sample/test.py rename to java/ql/integration-tests/java/android-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/build.xml b/java/ql/integration-tests/java/ant-sample/build.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ant-sample/build.xml rename to java/ql/integration-tests/java/ant-sample/build.xml diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/src/main/java/com/example/App.java b/java/ql/integration-tests/java/ant-sample/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ant-sample/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/ant-sample/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/test.expected b/java/ql/integration-tests/java/ant-sample/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ant-sample/test.expected rename to java/ql/integration-tests/java/ant-sample/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/test.py b/java/ql/integration-tests/java/ant-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ant-sample/test.py rename to java/ql/integration-tests/java/ant-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ant-sample/test.ql b/java/ql/integration-tests/java/ant-sample/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ant-sample/test.ql rename to java/ql/integration-tests/java/ant-sample/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-dependency-different-repository/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-dependency-different-repository/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml b/java/ql/integration-tests/java/buildless-dependency-different-repository/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml rename to java/ql/integration-tests/java/buildless-dependency-different-repository/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 b/java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 rename to java/ql/integration-tests/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java b/java/ql/integration-tests/java/buildless-dependency-different-repository/src/main/java/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java rename to java/ql/integration-tests/java/buildless-dependency-different-repository/src/main/java/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected b/java/ql/integration-tests/java/buildless-dependency-different-repository/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected rename to java/ql/integration-tests/java/buildless-dependency-different-repository/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py b/java/ql/integration-tests/java/buildless-dependency-different-repository/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py rename to java/ql/integration-tests/java/buildless-dependency-different-repository/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql b/java/ql/integration-tests/java/buildless-dependency-different-repository/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql rename to java/ql/integration-tests/java/buildless-dependency-different-repository/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/DatabaseQualityDiagnostics.expected b/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/DatabaseQualityDiagnostics.expected rename to java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/DatabaseQualityDiagnostics.qlref b/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/DatabaseQualityDiagnostics.qlref rename to java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.qlref diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.expected b/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.expected rename to java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.qlref b/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.qlref rename to java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.qlref diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/Test.java b/java/ql/integration-tests/java/buildless-erroneous/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/Test.java rename to java/ql/integration-tests/java/buildless-erroneous/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected b/java/ql/integration-tests/java/buildless-erroneous/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected rename to java/ql/integration-tests/java/buildless-erroneous/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py b/java/ql/integration-tests/java/buildless-erroneous/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py rename to java/ql/integration-tests/java/buildless-erroneous/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/build.gradle b/java/ql/integration-tests/java/buildless-gradle-classifiers/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/build.gradle rename to java/ql/integration-tests/java/buildless-gradle-classifiers/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-gradle-classifiers/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-gradle-classifiers/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/diagnostics.expected b/java/ql/integration-tests/java/buildless-gradle-classifiers/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/diagnostics.expected rename to java/ql/integration-tests/java/buildless-gradle-classifiers/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/settings.gradle b/java/ql/integration-tests/java/buildless-gradle-classifiers/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/settings.gradle rename to java/ql/integration-tests/java/buildless-gradle-classifiers/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected b/java/ql/integration-tests/java/buildless-gradle-classifiers/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/source_archive.expected rename to java/ql/integration-tests/java/buildless-gradle-classifiers/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/src/main/java/com/fractestexample/Test.java b/java/ql/integration-tests/java/buildless-gradle-classifiers/src/main/java/com/fractestexample/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/src/main/java/com/fractestexample/Test.java rename to java/ql/integration-tests/java/buildless-gradle-classifiers/src/main/java/com/fractestexample/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py b/java/ql/integration-tests/java/buildless-gradle-classifiers/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-classifiers/test.py rename to java/ql/integration-tests/java/buildless-gradle-classifiers/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/.gitattributes b/java/ql/integration-tests/java/buildless-gradle-timeout/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/.gitattributes rename to java/ql/integration-tests/java/buildless-gradle-timeout/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/.gitignore b/java/ql/integration-tests/java/buildless-gradle-timeout/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/.gitignore rename to java/ql/integration-tests/java/buildless-gradle-timeout/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/build.gradle b/java/ql/integration-tests/java/buildless-gradle-timeout/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/build.gradle rename to java/ql/integration-tests/java/buildless-gradle-timeout/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/diagnostics.expected b/java/ql/integration-tests/java/buildless-gradle-timeout/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/diagnostics.expected rename to java/ql/integration-tests/java/buildless-gradle-timeout/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/verification-metadata.xml b/java/ql/integration-tests/java/buildless-gradle-timeout/gradle/verification-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/verification-metadata.xml rename to java/ql/integration-tests/java/buildless-gradle-timeout/gradle/verification-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.jar rename to java/ql/integration-tests/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.properties rename to java/ql/integration-tests/java/buildless-gradle-timeout/gradle/wrapper/gradle-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradlew b/java/ql/integration-tests/java/buildless-gradle-timeout/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradlew rename to java/ql/integration-tests/java/buildless-gradle-timeout/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradlew.bat b/java/ql/integration-tests/java/buildless-gradle-timeout/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/gradlew.bat rename to java/ql/integration-tests/java/buildless-gradle-timeout/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/settings.gradle b/java/ql/integration-tests/java/buildless-gradle-timeout/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/settings.gradle rename to java/ql/integration-tests/java/buildless-gradle-timeout/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected b/java/ql/integration-tests/java/buildless-gradle-timeout/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/source_archive.expected rename to java/ql/integration-tests/java/buildless-gradle-timeout/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-gradle-timeout/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-gradle-timeout/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-gradle-timeout/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-gradle-timeout/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py b/java/ql/integration-tests/java/buildless-gradle-timeout/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle-timeout/test.py rename to java/ql/integration-tests/java/buildless-gradle-timeout/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle b/java/ql/integration-tests/java/buildless-gradle/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle rename to java/ql/integration-tests/java/buildless-gradle/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-gradle/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-gradle/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected b/java/ql/integration-tests/java/buildless-gradle/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected rename to java/ql/integration-tests/java/buildless-gradle/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle b/java/ql/integration-tests/java/buildless-gradle/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle rename to java/ql/integration-tests/java/buildless-gradle/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected b/java/ql/integration-tests/java/buildless-gradle/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/source_archive.expected rename to java/ql/integration-tests/java/buildless-gradle/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java b/java/ql/integration-tests/java/buildless-gradle/src/main/java/com/fractestexample/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java rename to java/ql/integration-tests/java/buildless-gradle/src/main/java/com/fractestexample/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py b/java/ql/integration-tests/java/buildless-gradle/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py rename to java/ql/integration-tests/java/buildless-gradle/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-inherit-trust-store/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-inherit-trust-store/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/cert.pem b/java/ql/integration-tests/java/buildless-inherit-trust-store/cert.pem similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/cert.pem rename to java/ql/integration-tests/java/buildless-inherit-trust-store/cert.pem diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/diagnostics.expected b/java/ql/integration-tests/java/buildless-inherit-trust-store/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/diagnostics.expected rename to java/ql/integration-tests/java/buildless-inherit-trust-store/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/jdk8_shipped_cacerts_plus_cert_pem b/java/ql/integration-tests/java/buildless-inherit-trust-store/jdk8_shipped_cacerts_plus_cert_pem similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/jdk8_shipped_cacerts_plus_cert_pem rename to java/ql/integration-tests/java/buildless-inherit-trust-store/jdk8_shipped_cacerts_plus_cert_pem diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/key.pem b/java/ql/integration-tests/java/buildless-inherit-trust-store/key.pem similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/key.pem rename to java/ql/integration-tests/java/buildless-inherit-trust-store/key.pem diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/pom.xml b/java/ql/integration-tests/java/buildless-inherit-trust-store/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/pom.xml rename to java/ql/integration-tests/java/buildless-inherit-trust-store/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 b/java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 rename to java/ql/integration-tests/java/buildless-inherit-trust-store/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/server.py b/java/ql/integration-tests/java/buildless-inherit-trust-store/server.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/server.py rename to java/ql/integration-tests/java/buildless-inherit-trust-store/server.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/src/main/java/Test.java b/java/ql/integration-tests/java/buildless-inherit-trust-store/src/main/java/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/src/main/java/Test.java rename to java/ql/integration-tests/java/buildless-inherit-trust-store/src/main/java/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.expected b/java/ql/integration-tests/java/buildless-inherit-trust-store/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.expected rename to java/ql/integration-tests/java/buildless-inherit-trust-store/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py b/java/ql/integration-tests/java/buildless-inherit-trust-store/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.py rename to java/ql/integration-tests/java/buildless-inherit-trust-store/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.ql b/java/ql/integration-tests/java/buildless-inherit-trust-store/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-inherit-trust-store/test.ql rename to java/ql/integration-tests/java/buildless-inherit-trust-store/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven-executable-war/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-maven-executable-war/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-executable-war/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/diagnostics.expected rename to java/ql/integration-tests/java/buildless-maven-executable-war/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/pom.xml b/java/ql/integration-tests/java/buildless-maven-executable-war/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/pom.xml rename to java/ql/integration-tests/java/buildless-maven-executable-war/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/source_archive.expected rename to java/ql/integration-tests/java/buildless-maven-executable-war/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven-executable-war/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-maven-executable-war/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-maven-executable-war/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven-executable-war/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-maven-executable-war/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py b/java/ql/integration-tests/java/buildless-maven-executable-war/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-executable-war/test.py rename to java/ql/integration-tests/java/buildless-maven-executable-war/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven-multimodule/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-maven-multimodule/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-multimodule/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected rename to java/ql/integration-tests/java/buildless-maven-multimodule/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/pom.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/pom.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/source_archive.expected rename to java/ql/integration-tests/java/buildless-maven-multimodule/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/pom.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/pom.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod1/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod1/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/pom.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/pom.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/java/com/example/App2.java b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/java/com/example/App2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/java/com/example/App2.java rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/java/com/example/App2.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/test/java/com/example/AppTest2.java b/java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/test/java/com/example/AppTest2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/submod2/src/test/java/com/example/AppTest2.java rename to java/ql/integration-tests/java/buildless-maven-multimodule/submod2/src/test/java/com/example/AppTest2.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py b/java/ql/integration-tests/java/buildless-maven-multimodule/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/test.py rename to java/ql/integration-tests/java/buildless-maven-multimodule/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.gitattributes b/java/ql/integration-tests/java/buildless-maven-timeout/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.gitattributes rename to java/ql/integration-tests/java/buildless-maven-timeout/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.jar b/java/ql/integration-tests/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.jar rename to java/ql/integration-tests/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.properties rename to java/ql/integration-tests/java/buildless-maven-timeout/.mvn/wrapper/maven-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/diagnostics.expected rename to java/ql/integration-tests/java/buildless-maven-timeout/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/mvnw b/java/ql/integration-tests/java/buildless-maven-timeout/mvnw similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/mvnw rename to java/ql/integration-tests/java/buildless-maven-timeout/mvnw diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/mvnw.cmd b/java/ql/integration-tests/java/buildless-maven-timeout/mvnw.cmd similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/mvnw.cmd rename to java/ql/integration-tests/java/buildless-maven-timeout/mvnw.cmd diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/pom.xml b/java/ql/integration-tests/java/buildless-maven-timeout/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/pom.xml rename to java/ql/integration-tests/java/buildless-maven-timeout/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/source_archive.expected rename to java/ql/integration-tests/java/buildless-maven-timeout/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven-timeout/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-maven-timeout/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-maven-timeout/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven-timeout/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-maven-timeout/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py b/java/ql/integration-tests/java/buildless-maven-timeout/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-timeout/test.py rename to java/ql/integration-tests/java/buildless-maven-timeout/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/pom.xml b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/pom.xml rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/main/java/dlfs/App.java b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/main/java/dlfs/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/main/java/dlfs/App.java rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/main/java/dlfs/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/site/site.xml b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/site/site.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/site/site.xml rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/site/site.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/test/java/dlfs/AppTest.java b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/test/java/dlfs/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/src/test/java/dlfs/AppTest.java rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/src/test/java/dlfs/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py b/java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven-tolerate-unavailable-dependency/test.py rename to java/ql/integration-tests/java/buildless-maven-tolerate-unavailable-dependency/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-maven/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected rename to java/ql/integration-tests/java/buildless-maven/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/pom.xml b/java/ql/integration-tests/java/buildless-maven/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/pom.xml rename to java/ql/integration-tests/java/buildless-maven/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected b/java/ql/integration-tests/java/buildless-maven/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/source_archive.expected rename to java/ql/integration-tests/java/buildless-maven/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-maven/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-maven/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-maven/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-maven/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-maven/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py b/java/ql/integration-tests/java/buildless-maven/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-maven/test.py rename to java/ql/integration-tests/java/buildless-maven/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/PrintAst.expected b/java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/PrintAst.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/PrintAst.expected rename to java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/PrintAst.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/PrintAst.qlref b/java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/PrintAst.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/PrintAst.qlref rename to java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/PrintAst.qlref diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/Test.java b/java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/Test.java rename to java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/Test2.java b/java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/Test2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/Test2.java rename to java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/Test2.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py b/java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-module-definition-not-in-module-info-file/test.py rename to java/ql/integration-tests/java/buildless-module-definition-not-in-module-info-file/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/build.gradle b/java/ql/integration-tests/java/buildless-proxy-gradle/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/build.gradle rename to java/ql/integration-tests/java/buildless-proxy-gradle/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-proxy-gradle/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-proxy-gradle/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/diagnostics.expected b/java/ql/integration-tests/java/buildless-proxy-gradle/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/diagnostics.expected rename to java/ql/integration-tests/java/buildless-proxy-gradle/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/settings.gradle b/java/ql/integration-tests/java/buildless-proxy-gradle/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/settings.gradle rename to java/ql/integration-tests/java/buildless-proxy-gradle/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected b/java/ql/integration-tests/java/buildless-proxy-gradle/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/source_archive.expected rename to java/ql/integration-tests/java/buildless-proxy-gradle/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/src/main/java/com/fractestexample/Test.java b/java/ql/integration-tests/java/buildless-proxy-gradle/src/main/java/com/fractestexample/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/src/main/java/com/fractestexample/Test.java rename to java/ql/integration-tests/java/buildless-proxy-gradle/src/main/java/com/fractestexample/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py b/java/ql/integration-tests/java/buildless-proxy-gradle/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-gradle/test.py rename to java/ql/integration-tests/java/buildless-proxy-gradle/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-proxy-maven/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-proxy-maven/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/diagnostics.expected b/java/ql/integration-tests/java/buildless-proxy-maven/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/diagnostics.expected rename to java/ql/integration-tests/java/buildless-proxy-maven/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/pom.xml b/java/ql/integration-tests/java/buildless-proxy-maven/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/pom.xml rename to java/ql/integration-tests/java/buildless-proxy-maven/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected b/java/ql/integration-tests/java/buildless-proxy-maven/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/source_archive.expected rename to java/ql/integration-tests/java/buildless-proxy-maven/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-proxy-maven/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-proxy-maven/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-proxy-maven/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-proxy-maven/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-proxy-maven/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py b/java/ql/integration-tests/java/buildless-proxy-maven/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-proxy-maven/test.py rename to java/ql/integration-tests/java/buildless-proxy-maven/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-sibling-projects/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-sibling-projects/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected b/java/ql/integration-tests/java/buildless-sibling-projects/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected rename to java/ql/integration-tests/java/buildless-sibling-projects/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/.gitattributes b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/.gitattributes rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/.gitignore b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/.gitignore rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/build.gradle b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/build.gradle rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/verification-metadata.xml b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/verification-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/verification-metadata.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/verification-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.jar rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.properties rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradle/wrapper/gradle-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradlew b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradlew rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradlew.bat b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/gradlew.bat rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/settings.gradle b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/settings.gradle rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/.gitattributes b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/.gitattributes rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/.gitignore b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/.gitignore rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/build.gradle b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/build.gradle rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/verification-metadata.xml b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/verification-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/verification-metadata.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/verification-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.jar rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.properties rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradle/wrapper/gradle-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradlew b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradlew rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradlew.bat b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/gradlew.bat rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/settings.gradle b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/settings.gradle rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/src/main/java/com/example/App2.java b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/src/main/java/com/example/App2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/src/main/java/com/example/App2.java rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/src/main/java/com/example/App2.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/src/test/java/com/example/AppTest2.java b/java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/src/test/java/com/example/AppTest2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/gradle-sample2/src/test/java/com/example/AppTest2.java rename to java/ql/integration-tests/java/buildless-sibling-projects/gradle-sample2/src/test/java/com/example/AppTest2.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/pom.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/pom.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/java/com/example/App3.java b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/java/com/example/App3.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/java/com/example/App3.java rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/java/com/example/App3.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/test/java/com/example/AppTest3.java b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/test/java/com/example/AppTest3.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-1/src/test/java/com/example/AppTest3.java rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-1/src/test/java/com/example/AppTest3.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/pom.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/pom.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/java/com/example/App4.java b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/java/com/example/App4.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/java/com/example/App4.java rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/java/com/example/App4.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/test/java/com/example/AppTest4.java b/java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/test/java/com/example/AppTest4.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/maven-project-2/src/test/java/com/example/AppTest4.java rename to java/ql/integration-tests/java/buildless-sibling-projects/maven-project-2/src/test/java/com/example/AppTest4.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected b/java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/source_archive.expected rename to java/ql/integration-tests/java/buildless-sibling-projects/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py b/java/ql/integration-tests/java/buildless-sibling-projects/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/test.py rename to java/ql/integration-tests/java/buildless-sibling-projects/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-snapshot-repository/buildless-fetches.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected rename to java/ql/integration-tests/java/buildless-snapshot-repository/buildless-fetches.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/pom.xml b/java/ql/integration-tests/java/buildless-snapshot-repository/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/pom.xml rename to java/ql/integration-tests/java/buildless-snapshot-repository/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/maven-metadata.xml.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.md5 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 b/java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 rename to java/ql/integration-tests/java/buildless-snapshot-repository/repo/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.pom.sha1 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/src/main/java/Test.java b/java/ql/integration-tests/java/buildless-snapshot-repository/src/main/java/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/src/main/java/Test.java rename to java/ql/integration-tests/java/buildless-snapshot-repository/src/main/java/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.expected b/java/ql/integration-tests/java/buildless-snapshot-repository/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.expected rename to java/ql/integration-tests/java/buildless-snapshot-repository/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py b/java/ql/integration-tests/java/buildless-snapshot-repository/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py rename to java/ql/integration-tests/java/buildless-snapshot-repository/test.py diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.ql b/java/ql/integration-tests/java/buildless-snapshot-repository/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.ql rename to java/ql/integration-tests/java/buildless-snapshot-repository/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected b/java/ql/integration-tests/java/buildless/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected rename to java/ql/integration-tests/java/buildless/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected b/java/ql/integration-tests/java/buildless/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/source_archive.expected rename to java/ql/integration-tests/java/buildless/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/buildless/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/buildless/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/page.xml rename to java/ql/integration-tests/java/buildless/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/struts.xml rename to java/ql/integration-tests/java/buildless/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/buildless/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.py b/java/ql/integration-tests/java/buildless/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/buildless/test.py rename to java/ql/integration-tests/java/buildless/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/build.gradle b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/build.gradle rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/build.gradle b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/build.gradle rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/src/main/AndroidManifest.xml b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/src/main/AndroidManifest.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/src/main/AndroidManifest.xml rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/src/main/AndroidManifest.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/src/main/java/com/github/androidsample/Main.java b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/src/main/java/com/github/androidsample/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/project/src/main/java/com/github/androidsample/Main.java rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/project/src/main/java/com/github/androidsample/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/settings.gradle b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/settings.gradle rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py b/java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/android-gradle-incompatibility/test.py rename to java/ql/integration-tests/java/diagnostics/android-gradle-incompatibility/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/compilation-error/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/compilation-error/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/pom.xml b/java/ql/integration-tests/java/diagnostics/compilation-error/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/pom.xml rename to java/ql/integration-tests/java/diagnostics/compilation-error/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/compilation-error/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/compilation-error/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/my-app.properties b/java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/page.xml b/java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/page.xml rename to java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/struts.xml b/java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/main/resources/struts.xml rename to java/ql/integration-tests/java/diagnostics/compilation-error/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/compilation-error/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/compilation-error/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py b/java/ql/integration-tests/java/diagnostics/compilation-error/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/compilation-error/test.py rename to java/ql/integration-tests/java/diagnostics/compilation-error/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/dependency-error/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/dependency-error/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/pom.xml b/java/ql/integration-tests/java/diagnostics/dependency-error/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/pom.xml rename to java/ql/integration-tests/java/diagnostics/dependency-error/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/dependency-error/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/dependency-error/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/my-app.properties b/java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/page.xml b/java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/page.xml rename to java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/struts.xml b/java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/main/resources/struts.xml rename to java/ql/integration-tests/java/diagnostics/dependency-error/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/dependency-error/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/dependency-error/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py b/java/ql/integration-tests/java/diagnostics/dependency-error/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/dependency-error/test.py rename to java/ql/integration-tests/java/diagnostics/dependency-error/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/build.gradle b/java/ql/integration-tests/java/diagnostics/java-version-too-old/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/build.gradle rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/java-version-too-old/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/settings.gradle b/java/ql/integration-tests/java/diagnostics/java-version-too-old/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/settings.gradle rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/java-version-too-old/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/java-version-too-old/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py b/java/ql/integration-tests/java/diagnostics/java-version-too-old/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/test.py rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/toolchains.xml b/java/ql/integration-tests/java/diagnostics/java-version-too-old/toolchains.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/java-version-too-old/toolchains.xml rename to java/ql/integration-tests/java/diagnostics/java-version-too-old/toolchains.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.gitattributes b/java/ql/integration-tests/java/diagnostics/maven-http-repository/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.gitattributes rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.jar b/java/ql/integration-tests/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.jar rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.properties rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/.mvn/wrapper/maven-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/maven-http-repository/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/mvnw b/java/ql/integration-tests/java/diagnostics/maven-http-repository/mvnw similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/mvnw rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/mvnw diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/mvnw.cmd b/java/ql/integration-tests/java/diagnostics/maven-http-repository/mvnw.cmd similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/mvnw.cmd rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/mvnw.cmd diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/pom.xml b/java/ql/integration-tests/java/diagnostics/maven-http-repository/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/pom.xml rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/my-app.properties b/java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/page.xml b/java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/page.xml rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/struts.xml b/java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/main/resources/struts.xml rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/maven-http-repository/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py b/java/ql/integration-tests/java/diagnostics/maven-http-repository/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/maven-http-repository/test.py rename to java/ql/integration-tests/java/diagnostics/maven-http-repository/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/pom.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/pom.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/my-app.properties b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/page.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/page.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/struts.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/struts.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-1/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-1/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/pom.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/pom.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/my-app.properties b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/page.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/page.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/struts.xml b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/struts.xml rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/maven-project-2/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/maven-project-2/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py b/java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/multiple-candidate-builds/test.py rename to java/ql/integration-tests/java/diagnostics/multiple-candidate-builds/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/Test.java b/java/ql/integration-tests/java/diagnostics/no-build-system/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/Test.java rename to java/ql/integration-tests/java/diagnostics/no-build-system/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/no-build-system/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/no-build-system/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py b/java/ql/integration-tests/java/diagnostics/no-build-system/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-build-system/test.py rename to java/ql/integration-tests/java/diagnostics/no-build-system/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/build.gradle b/java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/build.gradle rename to java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/settings.gradle b/java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/settings.gradle rename to java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py b/java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-test-classes/test.py rename to java/ql/integration-tests/java/diagnostics/no-gradle-test-classes/test.py diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/.gitattributes b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/.gitattributes rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/.gitignore b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/.gitignore rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/build.gradle b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/build.gradle rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/diagnostics.expected b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/diagnostics.expected rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/settings.gradle b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/settings.gradle rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/src/main/java/com/example/App.java b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py b/java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/diagnostics/no-gradle-wrapper/test.py rename to java/ql/integration-tests/java/diagnostics/no-gradle-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/Test.java b/java/ql/integration-tests/java/ecj-sample-noexit/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/Test.java rename to java/ql/integration-tests/java/ecj-sample-noexit/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected b/java/ql/integration-tests/java/ecj-sample-noexit/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/source_archive.expected rename to java/ql/integration-tests/java/ecj-sample-noexit/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py b/java/ql/integration-tests/java/ecj-sample-noexit/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample-noexit/test.py rename to java/ql/integration-tests/java/ecj-sample-noexit/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/Test.java b/java/ql/integration-tests/java/ecj-sample/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample/Test.java rename to java/ql/integration-tests/java/ecj-sample/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected b/java/ql/integration-tests/java/ecj-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample/source_archive.expected rename to java/ql/integration-tests/java/ecj-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/ecj-sample/test.py b/java/ql/integration-tests/java/ecj-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-sample/test.py rename to java/ql/integration-tests/java/ecj-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.expected b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Diag.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.expected rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Diag.expected diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.ql b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Diag.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Diag.ql rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Diag.ql diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Test.java b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Test.java rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Test.java diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Test2.java b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Test2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/Test2.java rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/Test2.java diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.expected b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.expected rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.py rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.py diff --git a/java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.ql b/java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/ecj-tolerate-enum-annotations/test.ql rename to java/ql/integration-tests/java/ecj-tolerate-enum-annotations/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes b/java/ql/integration-tests/java/gradle-sample-kotlin-script/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/build.gradle.kts b/java/ql/integration-tests/java/gradle-sample-kotlin-script/app/build.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/build.gradle.kts rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/app/build.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/src/main/java/test/App.java b/java/ql/integration-tests/java/gradle-sample-kotlin-script/app/src/main/java/test/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/src/main/java/test/App.java rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/app/src/main/java/test/App.java diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/src/test/java/test/AppTest.java b/java/ql/integration-tests/java/gradle-sample-kotlin-script/app/src/test/java/test/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/app/src/test/java/test/AppTest.java rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/app/src/test/java/test/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradlew b/java/ql/integration-tests/java/gradle-sample-kotlin-script/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradlew rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradlew.bat b/java/ql/integration-tests/java/gradle-sample-kotlin-script/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/gradlew.bat rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/settings.gradle.kts b/java/ql/integration-tests/java/gradle-sample-kotlin-script/settings.gradle.kts similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/settings.gradle.kts rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/settings.gradle.kts diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/source_archive.expected b/java/ql/integration-tests/java/gradle-sample-kotlin-script/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/source_archive.expected rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/test.py b/java/ql/integration-tests/java/gradle-sample-kotlin-script/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample-kotlin-script/test.py rename to java/ql/integration-tests/java/gradle-sample-kotlin-script/test.py diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/build.gradle b/java/ql/integration-tests/java/gradle-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/build.gradle rename to java/ql/integration-tests/java/gradle-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/settings.gradle b/java/ql/integration-tests/java/gradle-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/settings.gradle rename to java/ql/integration-tests/java/gradle-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected b/java/ql/integration-tests/java/gradle-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/source_archive.expected rename to java/ql/integration-tests/java/gradle-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/src/main/java/com/example/App.java b/java/ql/integration-tests/java/gradle-sample/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/gradle-sample/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/gradle-sample/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/gradle-sample/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/gradle-sample/test.py b/java/ql/integration-tests/java/gradle-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/gradle-sample/test.py rename to java/ql/integration-tests/java/gradle-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/.gitignore b/java/ql/integration-tests/java/java-web-jsp/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/.gitignore rename to java/ql/integration-tests/java/java-web-jsp/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/README.txt b/java/ql/integration-tests/java/java-web-jsp/README.txt similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/README.txt rename to java/ql/integration-tests/java/java-web-jsp/README.txt diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/pom.xml b/java/ql/integration-tests/java/java-web-jsp/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/pom.xml rename to java/ql/integration-tests/java/java-web-jsp/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/spotbugs-security-exclude.xml b/java/ql/integration-tests/java/java-web-jsp/spotbugs-security-exclude.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/spotbugs-security-exclude.xml rename to java/ql/integration-tests/java/java-web-jsp/spotbugs-security-exclude.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/spotbugs-security-include.xml b/java/ql/integration-tests/java/java-web-jsp/spotbugs-security-include.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/spotbugs-security-include.xml rename to java/ql/integration-tests/java/java-web-jsp/spotbugs-security-include.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/Counter.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/Counter.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/Counter.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/Counter.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/Date2Tag.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/Date2Tag.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/Date2Tag.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/Date2Tag.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/DateServlet.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/DateServlet.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/DateServlet.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/DateServlet.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/DateTag.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/DateTag.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/DateTag.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/DateTag.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/TagListener.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/TagListener.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/com/acme/TagListener.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/com/acme/TagListener.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/LoggingUtil.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/LoggingUtil.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/LoggingUtil.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/LoggingUtil.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/Main.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/Main.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/Main.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/SystemOutHandler.java b/java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/SystemOutHandler.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/SystemOutHandler.java rename to java/ql/integration-tests/java/java-web-jsp/src/main/java/org/eclipse/jetty/demo/SystemOutHandler.java diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/resources/jetty-logging.properties b/java/ql/integration-tests/java/java-web-jsp/src/main/resources/jetty-logging.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/resources/jetty-logging.properties rename to java/ql/integration-tests/java/java-web-jsp/src/main/resources/jetty-logging.properties diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/resources/logging.properties b/java/ql/integration-tests/java/java-web-jsp/src/main/resources/logging.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/resources/logging.properties rename to java/ql/integration-tests/java/java-web-jsp/src/main/resources/logging.properties diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib.tld b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib.tld similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib.tld rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib.tld diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib2.tld b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib2.tld similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib2.tld rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/acme-taglib2.tld diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/applicationContext.xml b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/applicationContext.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/applicationContext.xml rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/applicationContext.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/secret.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/secret.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/secret.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/secret.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/spring.tld b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/spring.tld similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/spring.tld rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/spring.tld diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/tags/panel.tag b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/tags/panel.tag similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/tags/panel.tag rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/tags/panel.tag diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/web.xml b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/web.xml rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/web.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/weblogic.xml b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/weblogic.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/WEB-INF/weblogic.xml rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/WEB-INF/weblogic.xml diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/${param.secret_param}.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/${param.secret_param}.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/${param.secret_param}.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/${param.secret_param}.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_2_safe.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_2_safe.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_2_safe.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_2_safe.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_3.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_3.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/include/jsp_include_3.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/include/jsp_include_3.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/index.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/index.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/index.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/index.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_3.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_3.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_3.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/jstl/jstl_escape_3.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/random.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/random.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/random.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/random.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_3.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_3.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_3.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_3.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_4_safe.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_4_safe.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/spring/spring_eval_4_safe.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/spring/spring_eval_4_safe.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/bean1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/bean1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/bean1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/bean1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/bean2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/bean2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/bean2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/bean2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/dump.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/dump.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/dump.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/dump.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/expr.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/expr.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/expr.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/expr.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/foo/foo.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/foo/foo.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/foo/foo.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/foo/foo.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/jstl.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/jstl.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/jstl.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/jstl.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tag.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tag.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tag.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tag.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tag2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tag2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tag2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tag2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tagfile.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tagfile.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/test/tagfile.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/test/tagfile.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/various.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/various.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/various.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/various.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xml/xml1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xml/xml1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xml/xml1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xml/xml1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xml/xml2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xml/xml2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xml/xml2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xml/xml2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl3.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xsl/xsl4.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss0.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss0.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss0.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss0.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss1.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss1.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss1.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss1.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss2.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss2.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss2.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss2.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss3.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss3.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss3.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss3.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss4.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss4.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss4.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss4.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss5.jsp b/java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss5.jsp similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/src/main/webapp/xss/xss5.jsp rename to java/ql/integration-tests/java/java-web-jsp/src/main/webapp/xss/xss5.jsp diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.expected b/java/ql/integration-tests/java/java-web-jsp/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/test.expected rename to java/ql/integration-tests/java/java-web-jsp/test.expected diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py b/java/ql/integration-tests/java/java-web-jsp/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/test.py rename to java/ql/integration-tests/java/java-web-jsp/test.py diff --git a/java/ql/integration-tests/all-platforms/java/java-web-jsp/test.ql b/java/ql/integration-tests/java/java-web-jsp/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/java/java-web-jsp/test.ql rename to java/ql/integration-tests/java/java-web-jsp/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/pom.xml b/java/ql/integration-tests/java/maven-enforcer/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/pom.xml rename to java/ql/integration-tests/java/maven-enforcer/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected b/java/ql/integration-tests/java/maven-enforcer/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/source_archive.expected rename to java/ql/integration-tests/java/maven-enforcer/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-enforcer/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-enforcer/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-enforcer/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-enforcer/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-enforcer/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-enforcer/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-enforcer/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-enforcer/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-enforcer/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-enforcer/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py b/java/ql/integration-tests/java/maven-enforcer/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py rename to java/ql/integration-tests/java/maven-enforcer/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/pom.xml b/java/ql/integration-tests/java/maven-sample-extract-properties/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/pom.xml rename to java/ql/integration-tests/java/maven-sample-extract-properties/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected b/java/ql/integration-tests/java/maven-sample-extract-properties/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-extract-properties/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-extract-properties/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-extract-properties/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-extract-properties/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-extract-properties/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-extract-properties/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py b/java/ql/integration-tests/java/maven-sample-extract-properties/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-extract-properties/test.py rename to java/ql/integration-tests/java/maven-sample-extract-properties/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/pom.xml b/java/ql/integration-tests/java/maven-sample-large-xml-files/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/pom.xml rename to java/ql/integration-tests/java/maven-sample-large-xml-files/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected b/java/ql/integration-tests/java/maven-sample-large-xml-files/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-large-xml-files/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-large-xml-files/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-large-xml-files/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-large-xml-files/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py b/java/ql/integration-tests/java/maven-sample-large-xml-files/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-large-xml-files/test.py rename to java/ql/integration-tests/java/maven-sample-large-xml-files/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/pom.xml b/java/ql/integration-tests/java/maven-sample-small-xml-files/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/pom.xml rename to java/ql/integration-tests/java/maven-sample-small-xml-files/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected b/java/ql/integration-tests/java/maven-sample-small-xml-files/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-small-xml-files/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-small-xml-files/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-small-xml-files/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-small-xml-files/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py b/java/ql/integration-tests/java/maven-sample-small-xml-files/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-small-xml-files/test.py rename to java/ql/integration-tests/java/maven-sample-small-xml-files/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/pom.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-all/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/pom.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected b/java/ql/integration-tests/java/maven-sample-xml-mode-all/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-xml-mode-all/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py b/java/ql/integration-tests/java/maven-sample-xml-mode-all/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-all/test.py rename to java/ql/integration-tests/java/maven-sample-xml-mode-all/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/pom.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/pom.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py b/java/ql/integration-tests/java/maven-sample-xml-mode-byname/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-byname/test.py rename to java/ql/integration-tests/java/maven-sample-xml-mode-byname/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/pom.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/pom.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py b/java/ql/integration-tests/java/maven-sample-xml-mode-disabled/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-disabled/test.py rename to java/ql/integration-tests/java/maven-sample-xml-mode-disabled/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/pom.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/pom.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/source_archive.expected rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py b/java/ql/integration-tests/java/maven-sample-xml-mode-smart/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample-xml-mode-smart/test.py rename to java/ql/integration-tests/java/maven-sample-xml-mode-smart/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/pom.xml b/java/ql/integration-tests/java/maven-sample/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/pom.xml rename to java/ql/integration-tests/java/maven-sample/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected b/java/ql/integration-tests/java/maven-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/source_archive.expected rename to java/ql/integration-tests/java/maven-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-sample/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-sample/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-sample/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-sample/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-sample/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-sample/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-sample/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-sample/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-sample/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-sample/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-sample/test.py b/java/ql/integration-tests/java/maven-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-sample/test.py rename to java/ql/integration-tests/java/maven-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/.gitattributes b/java/ql/integration-tests/java/maven-wrapper-script-only/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/.gitattributes rename to java/ql/integration-tests/java/maven-wrapper-script-only/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/maven-wrapper-script-only/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/.mvn/wrapper/maven-wrapper.properties rename to java/ql/integration-tests/java/maven-wrapper-script-only/.mvn/wrapper/maven-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/mvnw b/java/ql/integration-tests/java/maven-wrapper-script-only/mvnw similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/mvnw rename to java/ql/integration-tests/java/maven-wrapper-script-only/mvnw diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/mvnw.cmd b/java/ql/integration-tests/java/maven-wrapper-script-only/mvnw.cmd similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/mvnw.cmd rename to java/ql/integration-tests/java/maven-wrapper-script-only/mvnw.cmd diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/pom.xml b/java/ql/integration-tests/java/maven-wrapper-script-only/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/pom.xml rename to java/ql/integration-tests/java/maven-wrapper-script-only/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected b/java/ql/integration-tests/java/maven-wrapper-script-only/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/source_archive.expected rename to java/ql/integration-tests/java/maven-wrapper-script-only/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-wrapper-script-only/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-wrapper-script-only/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-wrapper-script-only/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-wrapper-script-only/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-wrapper-script-only/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py b/java/ql/integration-tests/java/maven-wrapper-script-only/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-script-only/test.py rename to java/ql/integration-tests/java/maven-wrapper-script-only/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.gitattributes b/java/ql/integration-tests/java/maven-wrapper-source-only/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.gitattributes rename to java/ql/integration-tests/java/maven-wrapper-source-only/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.mvn/wrapper/MavenWrapperDownloader.java b/java/ql/integration-tests/java/maven-wrapper-source-only/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.mvn/wrapper/MavenWrapperDownloader.java rename to java/ql/integration-tests/java/maven-wrapper-source-only/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/maven-wrapper-source-only/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/.mvn/wrapper/maven-wrapper.properties rename to java/ql/integration-tests/java/maven-wrapper-source-only/.mvn/wrapper/maven-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/mvnw b/java/ql/integration-tests/java/maven-wrapper-source-only/mvnw similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/mvnw rename to java/ql/integration-tests/java/maven-wrapper-source-only/mvnw diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/mvnw.cmd b/java/ql/integration-tests/java/maven-wrapper-source-only/mvnw.cmd similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/mvnw.cmd rename to java/ql/integration-tests/java/maven-wrapper-source-only/mvnw.cmd diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/pom.xml b/java/ql/integration-tests/java/maven-wrapper-source-only/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/pom.xml rename to java/ql/integration-tests/java/maven-wrapper-source-only/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected b/java/ql/integration-tests/java/maven-wrapper-source-only/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/source_archive.expected rename to java/ql/integration-tests/java/maven-wrapper-source-only/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-wrapper-source-only/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-wrapper-source-only/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-wrapper-source-only/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-wrapper-source-only/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-wrapper-source-only/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py b/java/ql/integration-tests/java/maven-wrapper-source-only/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper-source-only/test.py rename to java/ql/integration-tests/java/maven-wrapper-source-only/test.py diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/.gitattributes b/java/ql/integration-tests/java/maven-wrapper/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/.gitattributes rename to java/ql/integration-tests/java/maven-wrapper/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/.mvn/wrapper/maven-wrapper.jar b/java/ql/integration-tests/java/maven-wrapper/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/.mvn/wrapper/maven-wrapper.jar rename to java/ql/integration-tests/java/maven-wrapper/.mvn/wrapper/maven-wrapper.jar diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/maven-wrapper/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/.mvn/wrapper/maven-wrapper.properties rename to java/ql/integration-tests/java/maven-wrapper/.mvn/wrapper/maven-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/mvnw b/java/ql/integration-tests/java/maven-wrapper/mvnw similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/mvnw rename to java/ql/integration-tests/java/maven-wrapper/mvnw diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/mvnw.cmd b/java/ql/integration-tests/java/maven-wrapper/mvnw.cmd similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/mvnw.cmd rename to java/ql/integration-tests/java/maven-wrapper/mvnw.cmd diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/pom.xml b/java/ql/integration-tests/java/maven-wrapper/pom.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/pom.xml rename to java/ql/integration-tests/java/maven-wrapper/pom.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected b/java/ql/integration-tests/java/maven-wrapper/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/source_archive.expected rename to java/ql/integration-tests/java/maven-wrapper/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-wrapper/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/maven-wrapper/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/my-app.properties b/java/ql/integration-tests/java/maven-wrapper/src/main/resources/my-app.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/my-app.properties rename to java/ql/integration-tests/java/maven-wrapper/src/main/resources/my-app.properties diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/page.xml b/java/ql/integration-tests/java/maven-wrapper/src/main/resources/page.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/page.xml rename to java/ql/integration-tests/java/maven-wrapper/src/main/resources/page.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/struts.xml b/java/ql/integration-tests/java/maven-wrapper/src/main/resources/struts.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/src/main/resources/struts.xml rename to java/ql/integration-tests/java/maven-wrapper/src/main/resources/struts.xml diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-wrapper/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/maven-wrapper/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py b/java/ql/integration-tests/java/maven-wrapper/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/maven-wrapper/test.py rename to java/ql/integration-tests/java/maven-wrapper/test.py diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected b/java/ql/integration-tests/java/multi-release-jar-java11/ExtractorInformation.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected rename to java/ql/integration-tests/java/multi-release-jar-java11/ExtractorInformation.expected diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref b/java/ql/integration-tests/java/multi-release-jar-java11/ExtractorInformation.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref rename to java/ql/integration-tests/java/multi-release-jar-java11/ExtractorInformation.qlref diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java b/java/ql/integration-tests/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java rename to java/ql/integration-tests/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java b/java/ql/integration-tests/java/multi-release-jar-java11/mod1/module-info.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java rename to java/ql/integration-tests/java/multi-release-jar-java11/mod1/module-info.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java b/java/ql/integration-tests/java/multi-release-jar-java11/mod2/mod2pkg/User.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java rename to java/ql/integration-tests/java/multi-release-jar-java11/mod2/mod2pkg/User.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java b/java/ql/integration-tests/java/multi-release-jar-java11/mod2/module-info.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java rename to java/ql/integration-tests/java/multi-release-jar-java11/mod2/module-info.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py b/java/ql/integration-tests/java/multi-release-jar-java11/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py rename to java/ql/integration-tests/java/multi-release-jar-java11/test.py diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected b/java/ql/integration-tests/java/multi-release-jar-java17/ExtractorInformation.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected rename to java/ql/integration-tests/java/multi-release-jar-java17/ExtractorInformation.expected diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref b/java/ql/integration-tests/java/multi-release-jar-java17/ExtractorInformation.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref rename to java/ql/integration-tests/java/multi-release-jar-java17/ExtractorInformation.qlref diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java b/java/ql/integration-tests/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java rename to java/ql/integration-tests/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java b/java/ql/integration-tests/java/multi-release-jar-java17/mod1/module-info.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java rename to java/ql/integration-tests/java/multi-release-jar-java17/mod1/module-info.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java b/java/ql/integration-tests/java/multi-release-jar-java17/mod2/mod2pkg/User.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java rename to java/ql/integration-tests/java/multi-release-jar-java17/mod2/mod2pkg/User.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java b/java/ql/integration-tests/java/multi-release-jar-java17/mod2/module-info.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java rename to java/ql/integration-tests/java/multi-release-jar-java17/mod2/module-info.java diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py b/java/ql/integration-tests/java/multi-release-jar-java17/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py rename to java/ql/integration-tests/java/multi-release-jar-java17/test.py diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitattributes b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/.gitattributes similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/.gitattributes rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/.gitattributes diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/.gitignore similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/.gitignore diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/source_archive.expected rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py b/java/ql/integration-tests/java/partial-gradle-sample-without-gradle/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py rename to java/ql/integration-tests/java/partial-gradle-sample-without-gradle/test.py diff --git a/java/ql/integration-tests/java/partial-gradle-sample/.gitattributes b/java/ql/integration-tests/java/partial-gradle-sample/.gitattributes new file mode 100644 index 00000000000..00a51aff5e5 --- /dev/null +++ b/java/ql/integration-tests/java/partial-gradle-sample/.gitattributes @@ -0,0 +1,6 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# These are explicitly windows files and should use crlf +*.bat text eol=crlf + diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/build.gradle b/java/ql/integration-tests/java/partial-gradle-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/build.gradle rename to java/ql/integration-tests/java/partial-gradle-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradle/verification-metadata.xml b/java/ql/integration-tests/java/partial-gradle-sample/gradle/verification-metadata.xml similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradle/verification-metadata.xml rename to java/ql/integration-tests/java/partial-gradle-sample/gradle/verification-metadata.xml diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/java/partial-gradle-sample/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradle/wrapper/gradle-wrapper.properties rename to java/ql/integration-tests/java/partial-gradle-sample/gradle/wrapper/gradle-wrapper.properties diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradlew b/java/ql/integration-tests/java/partial-gradle-sample/gradlew similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradlew rename to java/ql/integration-tests/java/partial-gradle-sample/gradlew diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradlew.bat b/java/ql/integration-tests/java/partial-gradle-sample/gradlew.bat similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/gradlew.bat rename to java/ql/integration-tests/java/partial-gradle-sample/gradlew.bat diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/settings.gradle b/java/ql/integration-tests/java/partial-gradle-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/settings.gradle rename to java/ql/integration-tests/java/partial-gradle-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected b/java/ql/integration-tests/java/partial-gradle-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/source_archive.expected rename to java/ql/integration-tests/java/partial-gradle-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/src/main/java/com/example/App.java b/java/ql/integration-tests/java/partial-gradle-sample/src/main/java/com/example/App.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/src/main/java/com/example/App.java rename to java/ql/integration-tests/java/partial-gradle-sample/src/main/java/com/example/App.java diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/partial-gradle-sample/src/test/java/com/example/AppTest.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/src/test/java/com/example/AppTest.java rename to java/ql/integration-tests/java/partial-gradle-sample/src/test/java/com/example/AppTest.java diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py b/java/ql/integration-tests/java/partial-gradle-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/partial-gradle-sample/test.py rename to java/ql/integration-tests/java/partial-gradle-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/README b/java/ql/integration-tests/java/spring-boot-sample/README similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/README rename to java/ql/integration-tests/java/spring-boot-sample/README diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/build.gradle b/java/ql/integration-tests/java/spring-boot-sample/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/build.gradle rename to java/ql/integration-tests/java/spring-boot-sample/build.gradle diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/settings.gradle b/java/ql/integration-tests/java/spring-boot-sample/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/settings.gradle rename to java/ql/integration-tests/java/spring-boot-sample/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected b/java/ql/integration-tests/java/spring-boot-sample/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/source_archive.expected rename to java/ql/integration-tests/java/spring-boot-sample/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/main/java/com/github/springbootsample/SpringBootSampleApplication.java b/java/ql/integration-tests/java/spring-boot-sample/src/main/java/com/github/springbootsample/SpringBootSampleApplication.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/main/java/com/github/springbootsample/SpringBootSampleApplication.java rename to java/ql/integration-tests/java/spring-boot-sample/src/main/java/com/github/springbootsample/SpringBootSampleApplication.java diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/main/resources/application.properties b/java/ql/integration-tests/java/spring-boot-sample/src/main/resources/application.properties similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/main/resources/application.properties rename to java/ql/integration-tests/java/spring-boot-sample/src/main/resources/application.properties diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java b/java/ql/integration-tests/java/spring-boot-sample/src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java rename to java/ql/integration-tests/java/spring-boot-sample/src/test/java/com/github/springbootsample/SpringBootSampleApplicationTests.java diff --git a/java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py b/java/ql/integration-tests/java/spring-boot-sample/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/java/spring-boot-sample/test.py rename to java/ql/integration-tests/java/spring-boot-sample/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/PrintAst.expected b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/PrintAst.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/PrintAst.expected rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/PrintAst.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/PrintAst.qlref b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/PrintAst.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/PrintAst.qlref rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/PrintAst.qlref diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/User.java b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/User.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/User.java rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/User.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/deprecatedAnnotationTypes.expected b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/deprecatedAnnotationTypes.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/deprecatedAnnotationTypes.expected rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/deprecatedAnnotationTypes.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/deprecatedAnnotationTypes.ql b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/deprecatedAnnotationTypes.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/deprecatedAnnotationTypes.ql rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/deprecatedAnnotationTypes.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/ktUser.kt b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/ktUser.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/ktUser.kt rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/ktUser.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/qlpack.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/qlpack.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.ext.yml b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.ext.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.ext.yml rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.ext.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.kt b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.py b/java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/test.py rename to java/ql/integration-tests/kotlin/all-platforms/annotation-id-consistency/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/app/build.gradle b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/app/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/app/build.gradle rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/app/build.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/app/src/main/kotlin/testProject/App.kt b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/app/src/main/kotlin/testProject/App.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/app/src/main/kotlin/testProject/App.kt rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/app/src/main/kotlin/testProject/App.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/compArgs.expected b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/compArgs.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/compArgs.expected rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/compArgs.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/compArgs.ql b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/compArgs.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/compArgs.ql rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/compArgs.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/settings.gradle b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/settings.gradle rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/test.py b/java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/compiler_arguments/test.py rename to java/ql/integration-tests/kotlin/all-platforms/compiler_arguments/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/lib.kt b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/lib.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/lib.kt rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/lib.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/qlpack.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/qlpack.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.ext.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.ext.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.py b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.py rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/user.kt b/java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/default-parameter-mad-flow/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/diagnostics.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/diagnostics.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/mock/MockProject.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/mock/MockProject.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/mock/MockProject.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/mock/MockProject.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/openapi/Disposable.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/openapi/Disposable.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/openapi/Disposable.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/com/intellij/openapi/Disposable.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/driver/Main.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/driver/Main.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/driver/Main.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/driver/Main.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/kotlin/KotlinVersion.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/kotlin/KotlinVersion.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/kotlin/KotlinVersion.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/kotlin/KotlinVersion.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/ExitCode.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/ExitCode.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/ExitCode.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/ExitCode.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/CommonToolArguments.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/CommonToolArguments.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/CommonToolArguments.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/CommonToolArguments.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/ParseCommandLineArgumentsKt.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/ParseCommandLineArgumentsKt.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/ParseCommandLineArgumentsKt.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/common/arguments/ParseCommandLineArgumentsKt.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/config/CompilerConfiguration.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/config/CompilerConfiguration.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/config/CompilerConfiguration.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/config/CompilerConfiguration.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/utils/KotlinPaths.java b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/utils/KotlinPaths.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/utils/KotlinPaths.java rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/fake-kotlinc-source/org/jetbrains/kotlin/utils/KotlinPaths.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/test.py b/java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/test.py rename to java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinDefault.kt b/java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinDefault.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinDefault.kt rename to java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinDefault.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinDisabled.kt b/java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinDisabled.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinDisabled.kt rename to java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinDisabled.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinEnabled.kt b/java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinEnabled.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enabling/KotlinEnabled.kt rename to java/ql/integration-tests/kotlin/all-platforms/enabling/KotlinEnabled.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/enabling/source_archive.expected b/java/ql/integration-tests/kotlin/all-platforms/enabling/source_archive.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enabling/source_archive.expected rename to java/ql/integration-tests/kotlin/all-platforms/enabling/source_archive.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/enabling/test.py b/java/ql/integration-tests/kotlin/all-platforms/enabling/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enabling/test.py rename to java/ql/integration-tests/kotlin/all-platforms/enabling/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/NotNull.java b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/NotNull.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/NotNull.java rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/NotNull.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/Test.java b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/Test.java rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/Test.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.expected b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.py b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.py rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.ql b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/user.kt b/java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/enhanced-nullability/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.expected b/java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.kt b/java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.py b/java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.py rename to java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.ql b/java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/user.kt b/java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/external-property-overloads/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/classes.expected b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/classes.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/classes.expected rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/classes.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/classes.ql b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/classes.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/classes.ql rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/classes.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/A.kt b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/A.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/A.kt rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/A.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/B.kt b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/B.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/B.kt rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/B.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/C.kt b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/C.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/code/C.kt rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/code/C.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilationFiles.expected b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilationFiles.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilationFiles.expected rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilationFiles.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilationFiles.ql b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilationFiles.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilationFiles.ql rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilationFiles.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilations.expected b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilations.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilations.expected rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilations.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilations.ql b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilations.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/compilations.ql rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/compilations.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_crash/test.py b/java/ql/integration-tests/kotlin/all-platforms/extractor_crash/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_crash/test.py rename to java/ql/integration-tests/kotlin/all-platforms/extractor_crash/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.ext.yml b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.ext.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.ext.yml rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.ext.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.qlref b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.qlref rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.qlref diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/SomeClass.kt b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/SomeClass.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/SomeClass.kt rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/SomeClass.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/test.py b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/test.py rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.ext.yml b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.ext.yml similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.ext.yml rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.ext.yml diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.qlref b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.qlref rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/ExtractorInformation.qlref diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/SomeClass.kt b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/SomeClass.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/SomeClass.kt rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/SomeClass.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/test.py b/java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/test.py rename to java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin2/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/A.kt b/java/ql/integration-tests/kotlin/all-platforms/file_classes/A.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/A.kt rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/A.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/B.kt b/java/ql/integration-tests/kotlin/all-platforms/file_classes/B.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/B.kt rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/B.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/C.kt b/java/ql/integration-tests/kotlin/all-platforms/file_classes/C.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/C.kt rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/C.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/classes.expected b/java/ql/integration-tests/kotlin/all-platforms/file_classes/classes.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/classes.expected rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/classes.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/classes.ql b/java/ql/integration-tests/kotlin/all-platforms/file_classes/classes.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/classes.ql rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/classes.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/file_classes/test.py b/java/ql/integration-tests/kotlin/all-platforms/file_classes/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/file_classes/test.py rename to java/ql/integration-tests/kotlin/all-platforms/file_classes/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/app/build.gradle b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/app/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/app/build.gradle rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/app/build.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/app/src/main/kotlin/testProject/App.kt b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/app/src/main/kotlin/testProject/App.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/app/src/main/kotlin/testProject/App.kt rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/app/src/main/kotlin/testProject/App.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/compilations.expected b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/compilations.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/compilations.expected rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/compilations.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/compilations.ql b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/compilations.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/compilations.ql rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/compilations.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/methods.expected b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/methods.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/methods.expected rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/methods.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/methods.ql b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/methods.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/methods.ql rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/methods.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/settings.gradle b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/settings.gradle rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/test.py b/java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_groovy_app/test.py rename to java/ql/integration-tests/kotlin/all-platforms/gradle_groovy_app/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.expected b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.expected rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.qlref b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.qlref rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/ConstantExpAppearsNonConstant.qlref diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/PrintAst.expected b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/PrintAst.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/PrintAst.expected rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/PrintAst.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/PrintAst.qlref b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/PrintAst.qlref similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/PrintAst.qlref rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/PrintAst.qlref diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/app/build.gradle b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/app/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/app/build.gradle rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/app/build.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/app/src/main/kotlin/testProject/App.kt b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/app/src/main/kotlin/testProject/App.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/app/src/main/kotlin/testProject/App.kt rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/app/src/main/kotlin/testProject/App.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/diag.expected b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/diag.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/diag.expected rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/diag.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/diag.ql b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/diag.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/diag.ql rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/diag.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/settings.gradle b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/settings.gradle rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/test.py b/java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/test.py rename to java/ql/integration-tests/kotlin/all-platforms/gradle_kotlinx_serialization/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/Test.java b/java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/Test.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/Test.java rename to java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/Test.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.expected b/java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.py b/java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.py rename to java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.ql b/java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/user.kt b/java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java-interface-redeclares-tostring/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/java_modifiers/libsrc/extlib/A.java b/java/ql/integration-tests/kotlin/all-platforms/java_modifiers/libsrc/extlib/A.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java_modifiers/libsrc/extlib/A.java rename to java/ql/integration-tests/kotlin/all-platforms/java_modifiers/libsrc/extlib/A.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.expected b/java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.kt b/java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.py b/java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.py rename to java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.ql b/java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/java_modifiers/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/java_modifiers/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/User.java b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/User.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/User.java rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/User.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.expected b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.kt b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.py b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.py rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.ql b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/user.kt b/java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/jvmoverloads-external-class/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/jvmoverloads-external-class/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/User.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/User.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/User.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/User.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/noforwards.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/noforwards.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/noforwards.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/noforwards.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin-interface-inherited-default/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/J.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/J.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/J.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/J.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/K.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/K.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/K.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/K.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/K2.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/K2.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/K2.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/K2.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/jlocs.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/jlocs.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/jlocs.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/jlocs.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/jlocs.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/jlocs.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/jlocs.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/jlocs.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_compiler_java_source/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_compiler_java_source/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/libsrc/longsig.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/libsrc/longsig.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/libsrc/longsig.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/libsrc/longsig.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/user.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/user.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_file_import/user.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_file_import/user.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaDefns.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaDefns.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaDefns.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaDefns.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaDefns2.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaDefns2.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaDefns2.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaDefns2.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaUser.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaUser.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/JavaUser.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/JavaUser.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/kotlindefns.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/kotlindefns.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/kotlindefns.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/kotlindefns.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/kotlinuser.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/kotlinuser.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/kotlinuser.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/kotlinuser.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_lowering_wildcards/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/ReadsFields.java b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/ReadsFields.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/ReadsFields.java rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/ReadsFields.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/hasFields.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/hasFields.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/hasFields.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/hasFields.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_java_static_fields/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/app/build.gradle b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/app/build.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/app/build.gradle rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/app/build.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/app/src/main/kotlin/testProject/App.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/app/src/main/kotlin/testProject/App.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/app/src/main/kotlin/testProject/App.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/app/src/main/kotlin/testProject/App.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/diag.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/diag.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/diag.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/diag.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/diag.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/diag.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/diag.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/diag.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/settings.gradle b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/settings.gradle similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/settings.gradle rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/settings.gradle diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlin_kfunction/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlin_kfunction/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/FileA.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/FileA.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/FileA.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/FileA.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/FileB.kt b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/FileB.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/FileB.kt rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/FileB.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/compilations.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/compilations.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/compilations.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/compilations.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/compilations.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/compilations.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/compilations.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/compilations.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/methods.expected b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/methods.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/methods.expected rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/methods.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/methods.ql b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/methods.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/methods.ql rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/methods.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/test.py b/java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/kotlinc_multi/test.py rename to java/ql/integration-tests/kotlin/all-platforms/kotlinc_multi/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/logs/logs.expected b/java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/logs/logs.expected rename to java/ql/integration-tests/kotlin/all-platforms/logs/logs.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/logs/test.kt b/java/ql/integration-tests/kotlin/all-platforms/logs/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/logs/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/logs/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/logs/test.py b/java/ql/integration-tests/kotlin/all-platforms/logs/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/logs/test.py rename to java/ql/integration-tests/kotlin/all-platforms/logs/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/JavaUser.java b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/JavaUser.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/JavaUser.java rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/JavaUser.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/KotlinUser.kt b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/KotlinUser.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/KotlinUser.kt rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/KotlinUser.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterGeneric.java b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterGeneric.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterGeneric.java rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterGeneric.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterManyParams.java b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterManyParams.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterManyParams.java rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterManyParams.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterNotGeneric.java b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterNotGeneric.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/OuterNotGeneric.java rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/OuterNotGeneric.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/TypeParamVisibility.java b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/TypeParamVisibility.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/libsrc/extlib/TypeParamVisibility.java rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/libsrc/extlib/TypeParamVisibility.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.expected b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.py b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.py rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.ql b/java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nested_generic_types/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/nested_generic_types/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/AnnotatedInterface.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/AnnotatedInterface.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/AnnotatedInterface.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/AnnotatedInterface.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/AnnotatedMethods.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/AnnotatedMethods.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/AnnotatedMethods.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/AnnotatedMethods.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/JavaUser.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/JavaUser.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/JavaUser.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/JavaUser.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/ktUser.kt b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/ktUser.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/ktUser.kt rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/ktUser.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/org/jetbrains/annotations/NotNull.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/org/jetbrains/annotations/NotNull.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/org/jetbrains/annotations/NotNull.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/org/jetbrains/annotations/NotNull.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/org/jetbrains/annotations/Nullable.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/org/jetbrains/annotations/Nullable.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/org/jetbrains/annotations/Nullable.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/org/jetbrains/annotations/Nullable.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.expected b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.py b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.py rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.ql b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/zpkg/A.java b/java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/zpkg/A.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/nullability-annotations/zpkg/A.java rename to java/ql/integration-tests/kotlin/all-platforms/nullability-annotations/zpkg/A.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/path_transformer/classes.expected b/java/ql/integration-tests/kotlin/all-platforms/path_transformer/classes.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/path_transformer/classes.expected rename to java/ql/integration-tests/kotlin/all-platforms/path_transformer/classes.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/path_transformer/classes.ql b/java/ql/integration-tests/kotlin/all-platforms/path_transformer/classes.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/path_transformer/classes.ql rename to java/ql/integration-tests/kotlin/all-platforms/path_transformer/classes.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/path_transformer/kotlin_source.kt b/java/ql/integration-tests/kotlin/all-platforms/path_transformer/kotlin_source.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/path_transformer/kotlin_source.kt rename to java/ql/integration-tests/kotlin/all-platforms/path_transformer/kotlin_source.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/path_transformer/test.py b/java/ql/integration-tests/kotlin/all-platforms/path_transformer/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/path_transformer/test.py rename to java/ql/integration-tests/kotlin/all-platforms/path_transformer/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/hasprops.kt b/java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/hasprops.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/hasprops.kt rename to java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/hasprops.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.expected b/java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.py b/java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.py rename to java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.ql b/java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/usesprops.kt b/java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/usesprops.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/private_property_accessors/usesprops.kt rename to java/ql/integration-tests/kotlin/all-platforms/private_property_accessors/usesprops.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/JavaUser.java b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/JavaUser.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/JavaUser.java rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/JavaUser.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/KotlinUser.kt b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/KotlinUser.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/KotlinUser.kt rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/KotlinUser.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/GenericTypeJava.java b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/GenericTypeJava.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/GenericTypeJava.java rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/GenericTypeJava.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/GenericTypeKotlin.java b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/GenericTypeKotlin.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/GenericTypeKotlin.java rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/GenericTypeKotlin.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/RawTypesInSignatureJava.java b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/RawTypesInSignatureJava.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/RawTypesInSignatureJava.java rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/RawTypesInSignatureJava.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/RawTypesInSignatureKotlin.java b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/RawTypesInSignatureKotlin.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/libsrc/extlib/RawTypesInSignatureKotlin.java rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/libsrc/extlib/RawTypesInSignatureKotlin.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.expected b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.py b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.py rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.ql b/java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/raw_generic_types/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/raw_generic_types/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaDefinedContainer.java b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaDefinedContainer.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaDefinedContainer.java rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaDefinedContainer.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaDefinedRepeatable.java b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaDefinedRepeatable.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaDefinedRepeatable.java rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaDefinedRepeatable.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaUser.java b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaUser.java similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/JavaUser.java rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/JavaUser.java diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/lib.kt b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/lib.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/lib.kt rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/lib.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.expected b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.expected similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.expected rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.expected diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.kt b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.py b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.py rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.py diff --git a/java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.ql b/java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.ql similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/repeatable-annotations/test.ql rename to java/ql/integration-tests/kotlin/all-platforms/repeatable-annotations/test.ql diff --git a/java/ql/integration-tests/all-platforms/kotlin/trap_compression/test.kt b/java/ql/integration-tests/kotlin/all-platforms/trap_compression/test.kt similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/trap_compression/test.kt rename to java/ql/integration-tests/kotlin/all-platforms/trap_compression/test.kt diff --git a/java/ql/integration-tests/all-platforms/kotlin/trap_compression/test.py b/java/ql/integration-tests/kotlin/all-platforms/trap_compression/test.py similarity index 100% rename from java/ql/integration-tests/all-platforms/kotlin/trap_compression/test.py rename to java/ql/integration-tests/kotlin/all-platforms/trap_compression/test.py diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/PrintAst.expected b/java/ql/integration-tests/kotlin/linux/custom_plugin/PrintAst.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/PrintAst.expected rename to java/ql/integration-tests/kotlin/linux/custom_plugin/PrintAst.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/PrintAst.qlref b/java/ql/integration-tests/kotlin/linux/custom_plugin/PrintAst.qlref similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/PrintAst.qlref rename to java/ql/integration-tests/kotlin/linux/custom_plugin/PrintAst.qlref diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/a.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/a.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/a.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/a.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/b.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/b.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/b.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/b.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/c.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/c.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/c.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/c.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/d.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/d.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/d.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/d.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/diag.expected b/java/ql/integration-tests/kotlin/linux/custom_plugin/diag.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/diag.expected rename to java/ql/integration-tests/kotlin/linux/custom_plugin/diag.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/diag.ql b/java/ql/integration-tests/kotlin/linux/custom_plugin/diag.ql similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/diag.ql rename to java/ql/integration-tests/kotlin/linux/custom_plugin/diag.ql diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/e.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/e.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/e.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/e.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/methods.expected b/java/ql/integration-tests/kotlin/linux/custom_plugin/methods.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/methods.expected rename to java/ql/integration-tests/kotlin/linux/custom_plugin/methods.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/methods.ql b/java/ql/integration-tests/kotlin/linux/custom_plugin/methods.ql similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/methods.ql rename to java/ql/integration-tests/kotlin/linux/custom_plugin/methods.ql diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/BUILD.bazel b/java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/BUILD.bazel similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/BUILD.bazel rename to java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/BUILD.bazel diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/Plugin.kt b/java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/Plugin.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/Plugin.kt rename to java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/Plugin.kt diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar rename to java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml b/java/ql/integration-tests/kotlin/linux/custom_plugin/qlpack.yml similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml rename to java/ql/integration-tests/kotlin/linux/custom_plugin/qlpack.yml diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/rootClasses.expected b/java/ql/integration-tests/kotlin/linux/custom_plugin/rootClasses.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/rootClasses.expected rename to java/ql/integration-tests/kotlin/linux/custom_plugin/rootClasses.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/rootClasses.ql b/java/ql/integration-tests/kotlin/linux/custom_plugin/rootClasses.ql similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/rootClasses.ql rename to java/ql/integration-tests/kotlin/linux/custom_plugin/rootClasses.ql diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/staticinit.expected b/java/ql/integration-tests/kotlin/linux/custom_plugin/staticinit.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/staticinit.expected rename to java/ql/integration-tests/kotlin/linux/custom_plugin/staticinit.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/staticinit.ql b/java/ql/integration-tests/kotlin/linux/custom_plugin/staticinit.ql similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/staticinit.ql rename to java/ql/integration-tests/kotlin/linux/custom_plugin/staticinit.ql diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/test.py b/java/ql/integration-tests/kotlin/linux/custom_plugin/test.py similarity index 82% rename from java/ql/integration-tests/linux-only/kotlin/custom_plugin/test.py rename to java/ql/integration-tests/kotlin/linux/custom_plugin/test.py index 2ec685ac685..71b6514059f 100644 --- a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/test.py +++ b/java/ql/integration-tests/kotlin/linux/custom_plugin/test.py @@ -13,7 +13,7 @@ def test(codeql, java_full, cwd, semmle_code_dir, test_dir): f"--output_user_root={build_dir}", "--max_idle_secs=1", "build", - "//java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin", + "//java/ql/integration-tests/kotlin/linux/custom_plugin/plugin", "--spawn_strategy=local", "--nouse_action_cache", "--noremote_accept_cached", @@ -23,7 +23,7 @@ def test(codeql, java_full, cwd, semmle_code_dir, test_dir): _cwd=test_dir, ) shutil.copy( - "bazel-bin/java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/plugin.jar", + "bazel-bin/java/ql/integration-tests/kotlin/linux/custom_plugin/plugin/plugin.jar", "plugin.jar", ) codeql.database.create( diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/BoundedGenericTest.java b/java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/BoundedGenericTest.java similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/BoundedGenericTest.java rename to java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/BoundedGenericTest.java diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/ComplexBoundedGenericTest.java b/java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/ComplexBoundedGenericTest.java similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/ComplexBoundedGenericTest.java rename to java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/ComplexBoundedGenericTest.java diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/GenericTest.java b/java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/GenericTest.java similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/GenericTest.java rename to java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/GenericTest.java diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/Lib.java b/java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/Lib.java similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/javasrc/extlib/Lib.java rename to java/ql/integration-tests/kotlin/linux/use_java_library/javasrc/extlib/Lib.java diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/parameterTypes.expected b/java/ql/integration-tests/kotlin/linux/use_java_library/parameterTypes.expected similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/parameterTypes.expected rename to java/ql/integration-tests/kotlin/linux/use_java_library/parameterTypes.expected diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/parameterTypes.ql b/java/ql/integration-tests/kotlin/linux/use_java_library/parameterTypes.ql similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/parameterTypes.ql rename to java/ql/integration-tests/kotlin/linux/use_java_library/parameterTypes.ql diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/test.py b/java/ql/integration-tests/kotlin/linux/use_java_library/test.py similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/test.py rename to java/ql/integration-tests/kotlin/linux/use_java_library/test.py diff --git a/java/ql/integration-tests/linux-only/kotlin/use_java_library/user.kt b/java/ql/integration-tests/kotlin/linux/use_java_library/user.kt similarity index 100% rename from java/ql/integration-tests/linux-only/kotlin/use_java_library/user.kt rename to java/ql/integration-tests/kotlin/linux/use_java_library/user.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/generic-extension-property/User.java b/java/ql/integration-tests/kotlin/posix/generic-extension-property/User.java similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/generic-extension-property/User.java rename to java/ql/integration-tests/kotlin/posix/generic-extension-property/User.java diff --git a/java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.expected b/java/ql/integration-tests/kotlin/posix/generic-extension-property/test.expected similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.expected rename to java/ql/integration-tests/kotlin/posix/generic-extension-property/test.expected diff --git a/java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.kt b/java/ql/integration-tests/kotlin/posix/generic-extension-property/test.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.kt rename to java/ql/integration-tests/kotlin/posix/generic-extension-property/test.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.py b/java/ql/integration-tests/kotlin/posix/generic-extension-property/test.py similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.py rename to java/ql/integration-tests/kotlin/posix/generic-extension-property/test.py diff --git a/java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.ql b/java/ql/integration-tests/kotlin/posix/generic-extension-property/test.ql similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/generic-extension-property/test.ql rename to java/ql/integration-tests/kotlin/posix/generic-extension-property/test.ql diff --git a/java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.expected b/java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.expected similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.expected rename to java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.expected diff --git a/java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.py b/java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.py similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.py rename to java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.py diff --git a/java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.ql b/java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.ql similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/java_kotlin_extraction_orders/test.ql rename to java/ql/integration-tests/kotlin/posix/java_kotlin_extraction_orders/test.ql diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/doubleIntercepted.kt b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/doubleIntercepted.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/doubleIntercepted.kt rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/doubleIntercepted.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/manual.kt b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/manual.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/manual.kt rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/manual.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/manuallyIntercepted.kt b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/manuallyIntercepted.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/manuallyIntercepted.kt rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/manuallyIntercepted.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/normal.kt b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/normal.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/normal.kt rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/normal.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/notSeen.kt b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/notSeen.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/code/notSeen.kt rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/code/notSeen.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/files.expected b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/files.expected similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/files.expected rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/files.expected diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/files.ql b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/files.ql similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/files.ql rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/files.ql diff --git a/java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/test.py b/java/ql/integration-tests/kotlin/posix/kotlin_double_interception/test.py similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/kotlin_double_interception/test.py rename to java/ql/integration-tests/kotlin/posix/kotlin_double_interception/test.py diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/User.java b/java/ql/integration-tests/kotlin/posix/module_mangled_names/User.java similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/User.java rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/User.java diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.expected b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test.expected similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.expected rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test.expected diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.py b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test.py similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.py rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test.py diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.ql b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test.ql similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test.ql rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test.ql diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test1.kt b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test1.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test1.kt rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test1.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test2.kt b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test2.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test2.kt rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test2.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test3.kt b/java/ql/integration-tests/kotlin/posix/module_mangled_names/test3.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/module_mangled_names/test3.kt rename to java/ql/integration-tests/kotlin/posix/module_mangled_names/test3.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/Test.java b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/Test.java similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/Test.java rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/Test.java diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/kConsumer.kt b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/kConsumer.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/kConsumer.kt rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/kConsumer.kt diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.expected b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.expected similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.expected rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.expected diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.py b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.py similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.py rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.py diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.ql b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.ql similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/test.ql rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/test.ql diff --git a/java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/user.kt b/java/ql/integration-tests/kotlin/posix/needless-java-wildcards/user.kt similarity index 100% rename from java/ql/integration-tests/posix-only/kotlin/needless-java-wildcards/user.kt rename to java/ql/integration-tests/kotlin/posix/needless-java-wildcards/user.kt From 30335ab81ee52abe516d28bf20c9fc615eafd619 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 2 Aug 2024 22:00:31 +0200 Subject: [PATCH 245/334] C++: Add C11 `_Generic` IR tests --- .../library-tests/ir/ir/PrintAST.expected | 61 ++++++++++++++++++- .../library-tests/ir/ir/aliased_ir.expected | 58 +++++++++++++++++- cpp/ql/test/library-tests/ir/ir/generic.c | 29 ++++++++- .../test/library-tests/ir/ir/raw_ir.expected | 55 ++++++++++++++++- 4 files changed, 198 insertions(+), 5 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 4c912a36756..66606ff7056 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4180,7 +4180,7 @@ destructors_for_temps.cpp: # 103| ValueCategory = prvalue # 104| getStmt(1): [ReturnStmt] return ... generic.c: -# 1| [TopLevelFunction] void c11_generic_test(unsigned int, int) +# 1| [TopLevelFunction] void c11_generic_test_with_load(unsigned int, int) # 1| : # 1| getParameter(0): [Parameter] x # 1| Type = [IntType] unsigned int @@ -4213,6 +4213,65 @@ generic.c: # 3| Value = [CStyleCast] 1 # 3| ValueCategory = prvalue # 4| getStmt(2): [ReturnStmt] return ... +# 12| [TopLevelFunction] char const* c11_generic_test_with_constant_and_macro() +# 12| : +# 13| getEntryPoint(): [BlockStmt] { ... } +# 14| getStmt(0): [DeclStmt] declaration +# 14| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 14| Type = [IntType] int +# 16| getStmt(1): [ReturnStmt] return ... +# 16| getExpr(): int +# 16| Type = [ArrayType] char[4] +# 16| Value = [StringLiteral] "int" +# 16| ValueCategory = lvalue +# 16| getExpr().getFullyConverted(): [CStyleCast] (const char *)... +# 16| Conversion = [PointerConversion] pointer conversion +# 16| Type = [PointerType] const char * +# 16| ValueCategory = prvalue +# 16| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 16| Type = [CharPointerType] char * +# 16| ValueCategory = prvalue +# 19| [TopLevelFunction] char const* c11_generic_test_with_constant_and_no_macro() +# 19| : +# 20| getEntryPoint(): [BlockStmt] { ... } +# 21| getStmt(0): [DeclStmt] declaration +# 21| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 21| Type = [IntType] int +# 23| getStmt(1): [ReturnStmt] return ... +# 23| getExpr(): int +# 23| Type = [ArrayType] char[4] +# 23| Value = [StringLiteral] "int" +# 23| ValueCategory = lvalue +# 23| getExpr().getFullyConverted(): [CStyleCast] (const char *)... +# 23| Conversion = [PointerConversion] pointer conversion +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 23| Type = [CharPointerType] char * +# 23| ValueCategory = prvalue +# 26| [TopLevelFunction] void c11_generic_test_test_with_cast(int) +# 26| : +# 26| getParameter(0): [Parameter] y +# 26| Type = [IntType] int +# 26| getEntryPoint(): [BlockStmt] { ... } +# 27| getStmt(0): [DeclStmt] declaration +# 27| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 27| Type = [IntType] unsigned int +# 28| getStmt(1): [ExprStmt] ExprStmt +# 28| getExpr(): [AssignExpr] ... = ... +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = prvalue +# 28| getLValue(): [VariableAccess] r +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = lvalue +# 28| getRValue(): [VariableAccess] y +# 28| Type = [IntType] int +# 28| ValueCategory = prvalue(load) +# 28| getRValue().getFullyConverted(): [CStyleCast] (unsigned int)... +# 28| Conversion = [IntegralConversion] integral conversion +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = prvalue +# 29| getStmt(2): [ReturnStmt] return ... ir.c: # 5| [TopLevelFunction] int getX(MyCoords*) # 5| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 54ecfba3ffc..ced441595d7 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -2959,7 +2959,7 @@ destructors_for_temps.cpp: # 102| v102_10(void) = ExitFunction : generic.c: -# 1| void c11_generic_test(unsigned int, int) +# 1| void c11_generic_test_with_load(unsigned int, int) # 1| Block 0 # 1| v1_1(void) = EnterFunction : # 1| m1_2(unknown) = AliasedDefinition : @@ -2982,6 +2982,62 @@ generic.c: # 1| v1_10(void) = AliasedUse : m1_3 # 1| v1_11(void) = ExitFunction : +# 12| char const* c11_generic_test_with_constant_and_macro() +# 12| Block 0 +# 12| v12_1(void) = EnterFunction : +# 12| m12_2(unknown) = AliasedDefinition : +# 12| m12_3(unknown) = InitializeNonLocal : +# 12| m12_4(unknown) = Chi : total:m12_2, partial:m12_3 +# 14| r14_1(glval) = VariableAddress[i] : +# 14| m14_2(int) = Uninitialized[i] : &:r14_1 +# 16| r16_1(glval) = VariableAddress[#return] : +# 16| r16_2(glval) = StringConstant[int] : +# 16| r16_3(char *) = Convert : r16_2 +# 16| r16_4(char *) = Convert : r16_3 +# 16| m16_5(char *) = Store[#return] : &:r16_1, r16_4 +# 12| r12_5(glval) = VariableAddress[#return] : +# 12| v12_6(void) = ReturnValue : &:r12_5, m16_5 +# 12| v12_7(void) = AliasedUse : m12_3 +# 12| v12_8(void) = ExitFunction : + +# 19| char const* c11_generic_test_with_constant_and_no_macro() +# 19| Block 0 +# 19| v19_1(void) = EnterFunction : +# 19| m19_2(unknown) = AliasedDefinition : +# 19| m19_3(unknown) = InitializeNonLocal : +# 19| m19_4(unknown) = Chi : total:m19_2, partial:m19_3 +# 21| r21_1(glval) = VariableAddress[i] : +# 21| m21_2(int) = Uninitialized[i] : &:r21_1 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = StringConstant["int"] : +# 23| r23_3(char *) = Convert : r23_2 +# 23| r23_4(char *) = Convert : r23_3 +# 23| m23_5(char *) = Store[#return] : &:r23_1, r23_4 +# 19| r19_5(glval) = VariableAddress[#return] : +# 19| v19_6(void) = ReturnValue : &:r19_5, m23_5 +# 19| v19_7(void) = AliasedUse : m19_3 +# 19| v19_8(void) = ExitFunction : + +# 26| void c11_generic_test_test_with_cast(int) +# 26| Block 0 +# 26| v26_1(void) = EnterFunction : +# 26| m26_2(unknown) = AliasedDefinition : +# 26| m26_3(unknown) = InitializeNonLocal : +# 26| m26_4(unknown) = Chi : total:m26_2, partial:m26_3 +# 26| r26_5(glval) = VariableAddress[y] : +# 26| m26_6(int) = InitializeParameter[y] : &:r26_5 +# 27| r27_1(glval) = VariableAddress[r] : +# 27| m27_2(unsigned int) = Uninitialized[r] : &:r27_1 +# 28| r28_1(glval) = VariableAddress[y] : +# 28| r28_2(int) = Load[y] : &:r28_1, m26_6 +# 28| r28_3(unsigned int) = Convert : r28_2 +# 28| r28_4(glval) = VariableAddress[r] : +# 28| m28_5(unsigned int) = Store[r] : &:r28_4, r28_3 +# 29| v29_1(void) = NoOp : +# 26| v26_7(void) = ReturnVoid : +# 26| v26_8(void) = AliasedUse : m26_3 +# 26| v26_9(void) = ExitFunction : + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/generic.c b/cpp/ql/test/library-tests/ir/ir/generic.c index 3d669ba29fb..22c9fb3cd16 100644 --- a/cpp/ql/test/library-tests/ir/ir/generic.c +++ b/cpp/ql/test/library-tests/ir/ir/generic.c @@ -1,6 +1,31 @@ -void c11_generic_test(unsigned int x, int y) { +void c11_generic_test_with_load(unsigned int x, int y) { unsigned int r; r = _Generic(r, unsigned int: x, int: y) + 1; } -// // semmle-extractor-options: -std=c11 +#define describe(val) \ + _Generic((val), \ + int: "int", \ + default: "unknown" \ + ) + +const char *c11_generic_test_with_constant_and_macro() +{ + int i; + + return describe(i); +} + +const char *c11_generic_test_with_constant_and_no_macro() +{ + int i; + + return _Generic(i, int: "int", default: "unknown"); +} + +void c11_generic_test_test_with_cast(int y) { + unsigned int r; + r = _Generic(r, unsigned int: (unsigned int)y, int: y); +} + +// semmle-extractor-options: -std=c11 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 18f0d99ac67..01ebe0219f9 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2733,7 +2733,7 @@ destructors_for_temps.cpp: # 102| v102_8(void) = ExitFunction : generic.c: -# 1| void c11_generic_test(unsigned int, int) +# 1| void c11_generic_test_with_load(unsigned int, int) # 1| Block 0 # 1| v1_1(void) = EnterFunction : # 1| mu1_2(unknown) = AliasedDefinition : @@ -2755,6 +2755,59 @@ generic.c: # 1| v1_9(void) = AliasedUse : ~m? # 1| v1_10(void) = ExitFunction : +# 12| char const* c11_generic_test_with_constant_and_macro() +# 12| Block 0 +# 12| v12_1(void) = EnterFunction : +# 12| mu12_2(unknown) = AliasedDefinition : +# 12| mu12_3(unknown) = InitializeNonLocal : +# 14| r14_1(glval) = VariableAddress[i] : +# 14| mu14_2(int) = Uninitialized[i] : &:r14_1 +# 16| r16_1(glval) = VariableAddress[#return] : +# 16| r16_2(glval) = StringConstant[int] : +# 16| r16_3(char *) = Convert : r16_2 +# 16| r16_4(char *) = Convert : r16_3 +# 16| mu16_5(char *) = Store[#return] : &:r16_1, r16_4 +# 12| r12_4(glval) = VariableAddress[#return] : +# 12| v12_5(void) = ReturnValue : &:r12_4, ~m? +# 12| v12_6(void) = AliasedUse : ~m? +# 12| v12_7(void) = ExitFunction : + +# 19| char const* c11_generic_test_with_constant_and_no_macro() +# 19| Block 0 +# 19| v19_1(void) = EnterFunction : +# 19| mu19_2(unknown) = AliasedDefinition : +# 19| mu19_3(unknown) = InitializeNonLocal : +# 21| r21_1(glval) = VariableAddress[i] : +# 21| mu21_2(int) = Uninitialized[i] : &:r21_1 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = StringConstant["int"] : +# 23| r23_3(char *) = Convert : r23_2 +# 23| r23_4(char *) = Convert : r23_3 +# 23| mu23_5(char *) = Store[#return] : &:r23_1, r23_4 +# 19| r19_4(glval) = VariableAddress[#return] : +# 19| v19_5(void) = ReturnValue : &:r19_4, ~m? +# 19| v19_6(void) = AliasedUse : ~m? +# 19| v19_7(void) = ExitFunction : + +# 26| void c11_generic_test_test_with_cast(int) +# 26| Block 0 +# 26| v26_1(void) = EnterFunction : +# 26| mu26_2(unknown) = AliasedDefinition : +# 26| mu26_3(unknown) = InitializeNonLocal : +# 26| r26_4(glval) = VariableAddress[y] : +# 26| mu26_5(int) = InitializeParameter[y] : &:r26_4 +# 27| r27_1(glval) = VariableAddress[r] : +# 27| mu27_2(unsigned int) = Uninitialized[r] : &:r27_1 +# 28| r28_1(glval) = VariableAddress[y] : +# 28| r28_2(int) = Load[y] : &:r28_1, ~m? +# 28| r28_3(unsigned int) = Convert : r28_2 +# 28| r28_4(glval) = VariableAddress[r] : +# 28| mu28_5(unsigned int) = Store[r] : &:r28_4, r28_3 +# 29| v29_1(void) = NoOp : +# 26| v26_6(void) = ReturnVoid : +# 26| v26_7(void) = AliasedUse : ~m? +# 26| v26_8(void) = ExitFunction : + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 From a9b5faa6ab4b11364046bc0a95bbf135bf4552ef Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 30 Aug 2024 11:16:59 +0200 Subject: [PATCH 246/334] C#: Add SSA test for enums --- csharp/ql/test/library-tests/dataflow/ssa/Enum.cs | 14 ++++++++++++++ .../dataflow/ssa/ReadAdjacentRead.expected | 1 + .../library-tests/dataflow/ssa/SsaDef.expected | 1 + .../dataflow/ssa/SsaDefElement.expected | 1 + .../dataflow/ssa/SsaDefLastRead.expected | 1 + .../library-tests/dataflow/ssa/SsaRead.expected | 2 ++ .../dataflow/ssa/SsaUltimateDef.expected | 1 + 7 files changed, 21 insertions(+) create mode 100644 csharp/ql/test/library-tests/dataflow/ssa/Enum.cs diff --git a/csharp/ql/test/library-tests/dataflow/ssa/Enum.cs b/csharp/ql/test/library-tests/dataflow/ssa/Enum.cs new file mode 100644 index 00000000000..283b2800098 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/ssa/Enum.cs @@ -0,0 +1,14 @@ +enum E +{ + A +} + +class EnumTest +{ + void M() + { + // enums are modelled as fields; this test checks that we do not compute SSA for them + var e1 = E.A; + var e2 = E.A; + } +} diff --git a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected index 1b416d1b4f2..b1ad39e9793 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected @@ -19,6 +19,7 @@ | DefUse.cs:144:22:144:22 | x | DefUse.cs:146:17:146:17 | access to local variable x | DefUse.cs:147:17:147:17 | access to local variable x | | DefUse.cs:152:9:152:14 | Field4 | DefUse.cs:156:13:156:18 | access to field Field4 | DefUse.cs:157:13:157:18 | access to field Field4 | | DefUse.cs:152:9:152:14 | Field4 | DefUse.cs:162:13:162:18 | access to field Field4 | DefUse.cs:163:13:163:18 | access to field Field4 | +| Enum.cs:3:5:3:5 | A | Enum.cs:11:18:11:20 | access to constant A | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:4:9:4:13 | Field | Example.cs:14:13:14:22 | access to field Field | Example.cs:15:13:15:22 | access to field Field | | Example.cs:6:23:6:23 | i | Example.cs:8:22:8:22 | access to parameter i | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:10:13:10:13 | access to parameter i | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index 8d0e2b8261d..aa119e1e349 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -94,6 +94,7 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | +| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:11:13:11:30 | SSA def(this.Field) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 272db29e6f4..473eb6f6b4a 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -89,6 +89,7 @@ | DefUse.cs:186:9:190:9 | SSA def(a) | DefUse.cs:186:9:190:9 | ... = ... | | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | ... = ... | | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | delegate call | +| Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:8:10:8:10 | M | | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected index dd0e7c8d977..6125294cd16 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected @@ -83,6 +83,7 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:185:13:185:18 | access to field Field5 | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | +| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:12:18:12:18 | access to parameter i | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:9:13:9:22 | access to field Field | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index 9daa4269711..b5011431b4b 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -100,6 +100,8 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:185:13:185:18 | access to field Field5 | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | +| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:11:18:11:20 | access to constant A | +| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index d0e6b073f01..63411247676 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -100,6 +100,7 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | +| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:8:10:8:10 | SSA entry def(E.A) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | SSA def(this.Field) | From 4ef4ede0b13f23e16d4ff0616e0369a4a32b7641 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 30 Aug 2024 11:17:59 +0200 Subject: [PATCH 247/334] C#: Do not calculate field-based SSA for enums --- .../ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll | 6 +++++- .../library-tests/dataflow/ssa/ReadAdjacentRead.expected | 1 - csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected | 1 - .../test/library-tests/dataflow/ssa/SsaDefElement.expected | 1 - .../test/library-tests/dataflow/ssa/SsaDefLastRead.expected | 1 - csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected | 2 -- .../test/library-tests/dataflow/ssa/SsaUltimateDef.expected | 1 - 7 files changed, 5 insertions(+), 8 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 8fd12d90ae7..d4f0625be88 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -108,7 +108,11 @@ private module SourceVariableImpl { */ predicate isPlainFieldOrPropAccess(FieldOrPropAccess fpa, FieldOrProp fp, Callable c) { fieldOrPropAccessInCallable(fpa, fp, c) and - (ownFieldOrPropAccess(fpa) or fp.isStatic()) + ( + ownFieldOrPropAccess(fpa) + or + fp.isStatic() and not fp instanceof EnumConstant + ) } /** diff --git a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected index b1ad39e9793..1b416d1b4f2 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected @@ -19,7 +19,6 @@ | DefUse.cs:144:22:144:22 | x | DefUse.cs:146:17:146:17 | access to local variable x | DefUse.cs:147:17:147:17 | access to local variable x | | DefUse.cs:152:9:152:14 | Field4 | DefUse.cs:156:13:156:18 | access to field Field4 | DefUse.cs:157:13:157:18 | access to field Field4 | | DefUse.cs:152:9:152:14 | Field4 | DefUse.cs:162:13:162:18 | access to field Field4 | DefUse.cs:163:13:163:18 | access to field Field4 | -| Enum.cs:3:5:3:5 | A | Enum.cs:11:18:11:20 | access to constant A | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:4:9:4:13 | Field | Example.cs:14:13:14:22 | access to field Field | Example.cs:15:13:15:22 | access to field Field | | Example.cs:6:23:6:23 | i | Example.cs:8:22:8:22 | access to parameter i | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:10:13:10:13 | access to parameter i | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index aa119e1e349..8d0e2b8261d 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -94,7 +94,6 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | -| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:11:13:11:30 | SSA def(this.Field) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 473eb6f6b4a..272db29e6f4 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -89,7 +89,6 @@ | DefUse.cs:186:9:190:9 | SSA def(a) | DefUse.cs:186:9:190:9 | ... = ... | | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | ... = ... | | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | delegate call | -| Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:8:10:8:10 | M | | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected index 6125294cd16..dd0e7c8d977 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefLastRead.expected @@ -83,7 +83,6 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:185:13:185:18 | access to field Field5 | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | -| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:12:18:12:18 | access to parameter i | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:9:13:9:22 | access to field Field | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index b5011431b4b..9daa4269711 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -100,8 +100,6 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:185:13:185:18 | access to field Field5 | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | -| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:11:18:11:20 | access to constant A | -| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:12:18:12:20 | access to constant A | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index 63411247676..d0e6b073f01 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -100,7 +100,6 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | -| Enum.cs:11:18:11:20 | E.A | Enum.cs:8:10:8:10 | SSA entry def(E.A) | Enum.cs:8:10:8:10 | SSA entry def(E.A) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | SSA def(this.Field) | From 4945943732dc9f58b57c139bdf720addb44017cf Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 2 Aug 2024 22:41:44 +0200 Subject: [PATCH 248/334] C++: Support C11 `_Generic` expressions --- .../downgrades.ql | 32 + .../old.dbscheme | 2319 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2317 ++++++++++++++++ .../upgrade.properties | 4 + .../change-notes/2024-08-30-c11-generics.md | 4 + cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 24 + cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 100 + .../raw/internal/TranslatedElement.qll | 6 + .../raw/internal/TranslatedExpr.qll | 3 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 2 + cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 2246 ++++++++-------- .../old.dbscheme | 2317 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2319 +++++++++++++++++ .../upgrade.properties | 2 + .../c11_generic/PrintAST.expected | 458 ++++ .../library-tests/c11_generic/PrintAST.qlref | 1 + .../c11_generic/macro_invocation.expected | 8 + .../c11_generic/macro_invocation.ql | 5 + .../library-tests/ir/ir/PrintAST.expected | 83 +- .../library-tests/ir/ir/aliased_ir.expected | 4 +- .../test/library-tests/ir/ir/raw_ir.expected | 4 +- 21 files changed, 11125 insertions(+), 1133 deletions(-) create mode 100644 cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/downgrades.ql create mode 100644 cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme create mode 100644 cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties create mode 100644 cpp/ql/lib/change-notes/2024-08-30-c11-generics.md create mode 100644 cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties create mode 100644 cpp/ql/test/library-tests/c11_generic/PrintAST.expected create mode 100644 cpp/ql/test/library-tests/c11_generic/PrintAST.qlref create mode 100644 cpp/ql/test/library-tests/c11_generic/macro_invocation.expected create mode 100644 cpp/ql/test/library-tests/c11_generic/macro_invocation.ql diff --git a/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/downgrades.ql b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/downgrades.ql new file mode 100644 index 00000000000..3425ec2f672 --- /dev/null +++ b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/downgrades.ql @@ -0,0 +1,32 @@ +/* + * Approach: replace conversion expressions of kind 389 (= @c11_generic) by + * conversion expressions of kind 12 (= @parexpr), i.e., a `ParenthesisExpr`, + * and drop the relation which its child expressions, which are just syntactic + * sugar. Parenthesis expressions are equally benign as C11 _Generic expressions, + * and behave similarly in the context of the IR. + */ + +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location { + string toString() { none() } +} + +class ExprParent extends @exprparent { + string toString() { none() } +} + +query predicate new_exprs(Expr expr, int new_kind, Location loc) { + exists(int kind | exprs(expr, kind, loc) | if kind = 389 then new_kind = 12 else new_kind = kind) +} + +query predicate new_exprparents(Expr expr, int index, ExprParent expr_parent) { + exprparents(expr, index, expr_parent) and + ( + not expr_parent instanceof @expr + or + exists(int kind | exprs(expr_parent.(Expr), kind, _) | kind != 389) + ) +} diff --git a/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme new file mode 100644 index 00000000000..0fea0ee7026 --- /dev/null +++ b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme @@ -0,0 +1,2319 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..02a123a1a68 --- /dev/null +++ b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme @@ -0,0 +1,2317 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties new file mode 100644 index 00000000000..1f42059fd60 --- /dev/null +++ b/cpp/downgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties @@ -0,0 +1,4 @@ +description: Expose C11 _Generics +compatibility: partial +exprs.rel: run downgrades.ql new_exprs +exprparents.rel: run downgrades.ql new_exprparents diff --git a/cpp/ql/lib/change-notes/2024-08-30-c11-generics.md b/cpp/ql/lib/change-notes/2024-08-30-c11-generics.md new file mode 100644 index 00000000000..29f3579090b --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-08-30-c11-generics.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a class `C11GenericExpr` to represent C11 generic selection expressions. The generic selection is represented as a `Conversion` on the expression that will be selected. diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index b515a346bf3..ac043f47b0f 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -385,6 +385,21 @@ class CastNode extends ConversionNode { } } +/** + * A node representing a `C11GenericExpr`. + */ +class C11GenericNode extends ConversionNode { + C11GenericExpr generic; + + C11GenericNode() { generic = conv } + + override AstNode getChildInternal(int childIndex) { + result = super.getChildInternal(childIndex - count(generic.getAChild())) + or + result.getAst() = generic.getChild(childIndex) + } +} + /** * A node representing a `StmtExpr`. */ @@ -860,6 +875,15 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(BuiltInVarArgsStart).getLastNamedParameter() = ele and pred = "getLastNamedParameter()" or + expr.(C11GenericExpr).getControllingExpr() = ele and pred = "getControllingExpr()" + or + exists(int n | + expr.(C11GenericExpr).getAssociationType(n) = ele.(TypeName).getType() and + pred = "getAssociationType(" + n + ")" + or + expr.(C11GenericExpr).getAssociationExpr(n) = ele and pred = "getAssociationExpr(" + n + ")" + ) + or expr.(Call).getQualifier() = ele and pred = "getQualifier()" or exists(int n | expr.(Call).getArgument(n) = ele and pred = "getArgument(" + n.toString() + ")") diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index d85962b9fe7..78c64e22282 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -632,6 +632,104 @@ class ParenthesisExpr extends Conversion, @parexpr { override string getAPrimaryQlClass() { result = "ParenthesisExpr" } } +/** + * A node representing a C11 `_Generic` selection expression. + * + * For example: + * ``` + * _Generic(e, int: "int", default: "unknown") + * ``` + */ +class C11GenericExpr extends Conversion, @c11_generic { + int associationCount; + + C11GenericExpr() { associationCount = (count(this.getAChild()) - 1) / 2 } + + override string toString() { result = "_Generic" } + + override string getAPrimaryQlClass() { result = "C11GenericExpr" } + + /** + * Gets the controlling expression of the generic selection. + * + * For example, for + * ``` + * _Generic(e, int: "a", default: "b") + * ``` + * the result is `e`. + */ + Expr getControllingExpr() { result = this.getChild(0) } + + /** + * Gets the type of the `n`th element in the association list of the generic selection. + * + * For example, for + * ``` + * _Generic(e, int: "a", default: "b") + * ``` + * the type of the 0th element is `int`. In the case of the default element the + * type will an instance of `VoidType`. + */ + Type getAssociationType(int n) { + n in [0 .. associationCount - 1] and + result = this.getChild(n * 2 + 1).(TypeName).getType() + } + + /** + * Gets the type of an element in the association list of the generic selection. + */ + Type getAnAssociationType() { result = this.getAssociationType(_) } + + /** + * Gets the expression of the `n`th element in the association list of + * the generic selection. + * + * For example, for + * ``` + * _Generic(e, int: "a", default: "b") + * ``` + * the expression for 0th element is `"a"`, and the expression for the + * 1st element is `"b"`. For the selected expression, this predicate + * will yield a `ReuseExpr`, such that + * ``` + * this.getAssociationExpr(n).(ReuseExpr).getReusedExpr() = this.getExpr() + * ``` + */ + Expr getAssociationExpr(int n) { + n in [0 .. associationCount - 1] and + result = this.getChild(n * 2 + 2) + } + + /** + * Gets the expression of an element in the association list of the generic selection. + */ + Expr getAnAssociationExpr() { result = this.getAssociationExpr(_) } + + /** + * Holds if the `n`th element of the association list of the generic selection is the + * default element. + * + * For example, for + * ``` + * _Generic(e, int: "a", default: "b") + * ``` + * this holds for 1. + */ + predicate isDefaultAssociation(int n) { this.getAssociationType(n) instanceof VoidType } + + /** + * Holds if the `n`th element of the association list of the generic selection is the + * one whose expression was selected. + * + * For example, with `e` of type `int` and + * ``` + * _Generic(e, int: "a", default: "b") + * ``` + * this holds for 0. + */ + predicate isSelectedAssociation(int n) { this.getAssociationExpr(n) instanceof ReuseExpr } +} + /** * A C/C++ expression that could not be resolved, or that can no longer be * represented due to a database upgrade or downgrade. @@ -668,6 +766,8 @@ class AssumeExpr extends Expr, @assume { /** * A C/C++ comma expression. + * + * For example: * ``` * int c = compute1(), compute2(), resulting_value; * ``` 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 4d2b1a95d31..2d10b2e32a5 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 @@ -128,6 +128,9 @@ private predicate ignoreExprAndDescendants(Expr expr) { vaStartExpr.getLastNamedParameter().getFullyConverted() = expr ) or + // The children of C11 _Generic expressions are just surface syntax. + exists(C11GenericExpr generic | generic.getAChild() = expr) + or // Do not translate implicit destructor calls for unnamed temporary variables that are // conditionally constructed (until we have a mechanism for calling these only when the // temporary's constructor was run) @@ -432,6 +435,9 @@ predicate ignoreLoad(Expr expr) { // The load is duplicated from the right operand. isExtractorFrontendVersion65OrHigher() and expr instanceof CommaExpr or + // The load is duplicated from the chosen expression. + expr instanceof C11GenericExpr + or expr.(PointerDereferenceExpr).getOperand().getFullyConverted().getType().getUnspecifiedType() instanceof FunctionPointerType or 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 c2e216cc963..e7ccac24eb9 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 @@ -893,7 +893,8 @@ class TranslatedTransparentConversion extends TranslatedTransparentExpr { ( expr instanceof ParenthesisExpr or expr instanceof ReferenceDereferenceExpr or - expr instanceof ReferenceToExpr + expr instanceof ReferenceToExpr or + expr instanceof C11GenericExpr ) } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 02a123a1a68..0fea0ee7026 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1210,6 +1210,7 @@ conversionkinds( | @reference_to | @ref_indirect | @temp_init + | @c11_generic ; /* @@ -1792,6 +1793,7 @@ case @expr.kind of | 386 = @isscopedenum | 387 = @istriviallyrelocatable | 388 = @datasizeof +| 389 = @c11_generic ; @var_args_expr = @vastartexpr diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index d2d1f3a4e63..73e6d0bf972 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -18,27 +18,27 @@ @location_default - 29768335 + 29765023 @location_stmt 3819884 + + @location_expr + 13187951 + @diagnostic 4996 @file - 123268 + 123252 @folder - 16342 - - - @location_expr - 13187951 + 16340 @macro_expansion @@ -46,23 +46,23 @@ @other_macro_reference - 859141 + 859032 @function - 4179912 + 4179381 @fun_decl - 4544113 + 4543537 @var_decl - 8040448 + 8039427 @type_decl - 3283883 + 3283466 @namespace_decl @@ -70,7 +70,7 @@ @using_declaration - 363267 + 363221 @using_directive @@ -86,7 +86,7 @@ @parameter - 6191425 + 6190639 @membervariable @@ -98,7 +98,7 @@ @localvariable - 576952 + 576947 @enumconstant @@ -330,15 +330,15 @@ @pointer - 568247 + 568175 @type_with_specifiers - 852138 + 852029 @array - 110194 + 110180 @routineptr @@ -346,7 +346,7 @@ @reference - 1276572 + 1276410 @gnu_vector @@ -358,7 +358,7 @@ @rvalue_reference - 333384 + 333342 @block @@ -366,15 +366,15 @@ @decltype - 27081 + 27078 @usertype - 5234696 + 5234031 @mangledname - 6062554 + 6061784 @type_mention @@ -386,19 +386,39 @@ @ptrtomember - 37820 + 37816 @specifier - 24747 + 24743 + + + @gnuattribute + 553702 + + + @stdattribute + 253563 + + + @declspec + 239153 + + + @msattribute + 3 + + + @alignas + 4668 @attribute_arg_token - 25213 + 25210 @attribute_arg_constant_expr - 318442 + 318402 @attribute_arg_empty @@ -416,26 +436,6 @@ @attribute_arg_expr 3 - - @gnuattribute - 553773 - - - @stdattribute - 253563 - - - @declspec - 239153 - - - @msattribute - 3 - - - @alignas - 4669 - @derivation 391568 @@ -450,7 +450,7 @@ @namespace - 12140 + 12138 @specialnamequalifyingelement @@ -470,7 +470,7 @@ @lambdacapture - 28015 + 28011 @address_of @@ -586,11 +586,11 @@ @gtexpr - 104124 + 104111 @ltexpr - 101789 + 101776 @geexpr @@ -638,7 +638,7 @@ @assignorexpr - 23628 + 23627 @assignxorexpr @@ -666,7 +666,7 @@ @subscriptexpr - 364482 + 364478 @callexpr @@ -834,7 +834,7 @@ @sizeof_pack - 5603 + 5602 @hasassignexpr @@ -982,7 +982,7 @@ @lambdaexpr - 21478 + 21475 @param_ref @@ -1026,7 +1026,7 @@ @istriviallycopyableexpr - 3735 + 3734 @isliteraltypeexpr @@ -1356,6 +1356,10 @@ @datasizeof 10 + + @c11_generic + 8 + @stmt_expr 1486025 @@ -1410,7 +1414,7 @@ @stmt_empty - 192685 + 192683 @stmt_continue @@ -1442,7 +1446,7 @@ @stmt_range_based_for - 8404 + 8403 @stmt_handler @@ -1458,31 +1462,31 @@ @ppd_if - 667235 + 667151 @ppd_ifdef - 263345 + 263312 @ppd_ifndef - 266614 + 266580 @ppd_elif - 25213 + 25210 @ppd_else - 209182 + 209155 @ppd_endif - 1197195 + 1197043 @ppd_plain_include - 311438 + 311399 @ppd_define @@ -1490,7 +1494,7 @@ @ppd_undef - 258676 + 258643 @ppd_include_next @@ -1498,7 +1502,7 @@ @ppd_line - 27521 + 27520 @ppd_error @@ -2144,7 +2148,7 @@ seconds - 9628 + 9868 @@ -2233,44 +2237,39 @@ 319 - 5 - 8 + 6 + 7 159 - 8 - 9 - 79 + 7 + 10 + 159 10 11 - 199 + 79 11 - 17 + 14 159 - 17 + 16 18 - 39 - - - 18 - 19 159 - 21 - 53 + 19 + 27 159 - 95 - 96 - 39 + 41 + 88 + 119 @@ -2338,17 +2337,17 @@ 3 4 - 1398 + 1518 4 5 - 359 + 319 5 6 - 279 + 199 6 @@ -2358,23 +2357,23 @@ 7 8 - 79 + 119 8 - 9 - 239 - - - 9 - 20 + 10 279 - 24 - 92 + 10 + 28 279 + + 28 + 86 + 199 + @@ -2424,13 +2423,13 @@ 79 - 135 - 136 + 134 + 135 39 - 138 - 139 + 148 + 149 39 @@ -2447,27 +2446,27 @@ 1 2 - 4794 + 5033 2 3 - 2037 + 2556 3 4 - 1478 + 1438 4 - 5 - 878 + 16 + 759 - 5 - 47 - 439 + 27 + 46 + 79 @@ -2483,32 +2482,32 @@ 1 2 - 4394 + 4314 2 3 - 1717 + 2237 3 4 - 1757 + 1638 4 5 - 719 + 799 5 - 9 - 838 + 11 + 759 - 9 - 77 - 199 + 16 + 76 + 119 @@ -2524,12 +2523,12 @@ 1 2 - 8110 + 8230 2 3 - 1518 + 1638 @@ -2873,7 +2872,7 @@ cpu_seconds - 7100 + 7168 elapsed_seconds @@ -2923,16 +2922,16 @@ 1 2 - 5633 + 5779 2 3 - 925 + 846 3 - 17 + 18 541 @@ -2949,12 +2948,12 @@ 1 2 - 6344 + 6468 2 3 - 756 + 699 @@ -2968,15 +2967,20 @@ 12 - 2 - 3 - 33 + 1 + 2 + 22 4 5 11 + + 5 + 6 + 11 + 9 10 @@ -2985,36 +2989,26 @@ 12 13 + 22 + + + 51 + 52 11 - 17 - 18 + 153 + 154 11 - 47 - 48 - 11 + 177 + 178 + 22 - 165 - 166 - 11 - - - 174 - 175 - 11 - - - 187 - 188 - 11 - - - 242 - 243 + 261 + 262 11 @@ -3029,15 +3023,20 @@ 12 - 2 - 3 - 33 + 1 + 2 + 22 4 5 11 + + 5 + 6 + 11 + 9 10 @@ -3046,36 +3045,31 @@ 12 13 + 22 + + + 49 + 50 11 - 17 - 18 + 106 + 107 11 - 46 - 47 + 127 + 128 11 - 115 - 116 + 135 + 136 11 - 126 - 127 - 11 - - - 142 - 143 - 11 - - - 219 - 220 + 236 + 237 11 @@ -4848,31 +4842,31 @@ locations_default - 29768335 + 29765023 id - 29768335 + 29765023 container - 123268 + 123252 startLine - 2095559 + 2095293 startColumn - 36887 + 36882 endLine - 2099761 + 2099495 endColumn - 48093 + 48087 @@ -4886,7 +4880,7 @@ 1 2 - 29768335 + 29765023 @@ -4902,7 +4896,7 @@ 1 2 - 29768335 + 29765023 @@ -4918,7 +4912,7 @@ 1 2 - 29768335 + 29765023 @@ -4934,7 +4928,7 @@ 1 2 - 29768335 + 29765023 @@ -4950,7 +4944,7 @@ 1 2 - 29768335 + 29765023 @@ -4966,67 +4960,67 @@ 1 11 - 9805 + 9804 11 18 - 10272 + 10271 18 30 - 9338 + 9337 30 42 - 9805 + 9804 43 61 - 9805 + 9804 61 79 - 9338 + 9337 80 106 - 9805 + 9804 108 149 - 9338 + 9337 149 199 - 9338 + 9337 206 291 - 9338 + 9337 304 469 - 9338 + 9337 482 850 - 9338 + 9337 936 2380 - 8404 + 8403 @@ -5042,67 +5036,67 @@ 1 8 - 9338 + 9337 8 13 - 9338 + 9337 13 20 - 9805 + 9804 20 32 - 9338 + 9337 32 43 - 9805 + 9804 44 61 - 9338 + 9337 62 72 - 9338 + 9337 73 93 - 9338 + 9337 97 128 - 9338 + 9337 128 180 - 9338 + 9337 180 267 - 9338 + 9337 277 414 - 9338 + 9337 439 1465 - 9338 + 9337 1557 @@ -5123,67 +5117,67 @@ 1 4 - 8871 + 8870 4 5 - 7937 + 7936 5 6 - 7470 + 7469 6 8 - 11206 + 11204 8 10 - 9338 + 9337 10 15 - 10739 + 10737 15 23 - 9805 + 9804 23 28 - 11206 + 11204 28 34 - 9805 + 9804 34 44 - 9338 + 9337 44 55 - 9338 + 9337 55 66 - 9805 + 9804 66 77 - 8404 + 8403 @@ -5199,67 +5193,67 @@ 1 8 - 9338 + 9337 8 13 - 9338 + 9337 13 20 - 9805 + 9804 20 32 - 9338 + 9337 32 43 - 9805 + 9804 43 60 - 9338 + 9337 61 71 - 9338 + 9337 72 93 - 9338 + 9337 94 127 - 9338 + 9337 128 179 - 9338 + 9337 180 268 - 9338 + 9337 278 413 - 9338 + 9337 437 1465 - 9338 + 9337 1554 @@ -5280,67 +5274,67 @@ 1 9 - 9805 + 9804 9 13 - 9338 + 9337 13 18 - 9338 + 9337 18 26 - 10272 + 10271 27 33 - 9338 + 9337 33 39 - 9338 + 9337 39 47 - 10272 + 10271 47 53 - 9338 + 9337 53 60 - 10272 + 10271 60 66 - 9338 + 9337 66 74 - 9805 + 9804 74 78 - 9805 + 9804 78 90 - 7003 + 7002 @@ -5356,52 +5350,52 @@ 1 2 - 583189 + 583115 2 3 - 314240 + 314200 3 4 - 195641 + 195616 4 6 - 162022 + 162002 6 10 - 183034 + 183011 10 16 - 162956 + 162936 16 25 - 169026 + 169005 25 46 - 161089 + 161068 46 169 - 157353 + 157333 169 265 - 7003 + 7002 @@ -5417,42 +5411,42 @@ 1 2 - 871282 + 871171 2 3 - 273618 + 273583 3 5 - 193773 + 193749 5 8 - 173696 + 173674 8 13 - 188170 + 188146 13 20 - 161089 + 161068 20 51 - 159688 + 159668 51 265 - 74241 + 74231 @@ -5468,47 +5462,47 @@ 1 2 - 612138 + 612060 2 3 - 313306 + 313266 3 4 - 198443 + 198417 4 6 - 183034 + 183011 6 9 - 173229 + 173207 9 13 - 163423 + 163402 13 19 - 174629 + 174607 19 29 - 164824 + 164803 29 52 - 112528 + 112514 @@ -5524,22 +5518,22 @@ 1 2 - 1531980 + 1531786 2 3 - 348792 + 348748 3 5 - 162022 + 162002 5 16 - 52762 + 52755 @@ -5555,47 +5549,47 @@ 1 2 - 587858 + 587783 2 3 - 316108 + 316068 3 4 - 197509 + 197484 4 6 - 168559 + 168538 6 9 - 158287 + 158267 9 14 - 170894 + 170872 14 21 - 175096 + 175074 21 32 - 162489 + 162469 32 63 - 157820 + 157800 64 @@ -6011,52 +6005,52 @@ 1 2 - 593461 + 593386 2 3 - 306302 + 306263 3 4 - 198443 + 198417 4 6 - 159688 + 159668 6 10 - 182567 + 182544 10 16 - 162022 + 162002 16 25 - 171361 + 171339 25 46 - 158754 + 158734 46 161 - 158287 + 158267 162 265 - 8871 + 8870 @@ -6072,47 +6066,47 @@ 1 2 - 886690 + 886577 2 3 - 260077 + 260044 3 4 - 125135 + 125120 4 6 - 141011 + 140993 6 10 - 184902 + 184878 10 15 - 168559 + 168538 15 26 - 163423 + 163402 26 120 - 158287 + 158267 121 265 - 11673 + 11671 @@ -6128,22 +6122,22 @@ 1 2 - 1529646 + 1529452 2 3 - 341789 + 341745 3 5 - 170894 + 170872 5 10 - 57431 + 57424 @@ -6159,47 +6153,47 @@ 1 2 - 623344 + 623265 2 3 - 303501 + 303462 3 4 - 201711 + 201685 4 6 - 183968 + 183945 6 9 - 169960 + 169939 9 13 - 166692 + 166671 13 19 - 175096 + 175074 19 29 - 161089 + 161068 29 52 - 114396 + 114382 @@ -6215,52 +6209,52 @@ 1 2 - 599998 + 599922 2 3 - 306302 + 306263 3 4 - 197042 + 197017 4 6 - 169026 + 169005 6 9 - 156419 + 156400 9 14 - 169026 + 169005 14 21 - 177898 + 177875 21 32 - 162022 + 162002 32 60 - 158287 + 158267 60 65 - 3735 + 3734 @@ -6276,62 +6270,62 @@ 1 2 - 5136 + 5135 2 8 - 3735 + 3734 9 186 - 3735 + 3734 193 288 - 3735 + 3734 294 495 - 3735 + 3734 503 - 554 - 3735 + 555 + 3734 561 633 - 3735 + 3734 640 758 - 3735 + 3734 758 869 - 3735 + 3734 875 1074 - 3735 + 3734 1074 1281 - 3735 + 3734 1289 1590 - 3735 + 3734 1685 @@ -6352,62 +6346,62 @@ 1 2 - 5603 + 5602 2 5 - 3735 + 3734 5 65 - 3735 + 3734 70 100 - 3735 + 3734 100 111 - 3735 + 3734 112 122 - 4202 + 4201 122 140 - 3735 + 3734 143 153 - 3735 + 3734 153 161 - 4202 + 4201 161 173 - 4202 + 4201 173 178 - 3735 + 3734 188 265 - 3735 + 3734 @@ -6423,62 +6417,62 @@ 1 2 - 5603 + 5602 2 8 - 3735 + 3734 9 105 - 3735 + 3734 155 241 - 3735 + 3734 253 336 - 3735 + 3734 340 426 - 3735 + 3734 434 488 - 3735 + 3734 489 572 - 3735 + 3734 573 623 - 3735 + 3734 626 696 - 4202 + 4201 701 813 - 3735 + 3734 818 1095 - 3735 + 3734 1172 @@ -6499,37 +6493,37 @@ 1 2 - 6070 + 6069 2 4 - 3735 + 3734 4 8 - 4202 + 4201 8 15 - 3735 + 3734 15 23 - 3735 + 3734 23 29 - 3735 + 3734 29 35 - 4202 + 4201 35 @@ -6549,12 +6543,12 @@ 44 46 - 3735 + 3734 46 49 - 3735 + 3734 49 @@ -6575,62 +6569,62 @@ 1 2 - 5603 + 5602 2 8 - 3735 + 3734 9 156 - 3735 + 3734 159 240 - 3735 + 3734 251 335 - 3735 + 3734 342 430 - 3735 + 3734 432 490 - 3735 + 3734 490 573 - 3735 + 3734 574 622 - 3735 + 3734 626 698 - 3735 + 3734 700 798 - 3735 + 3734 811 987 - 3735 + 3734 1096 @@ -10559,23 +10553,23 @@ numlines - 1383965 + 1383789 element_id - 1376961 + 1376786 num_lines - 101789 + 101776 num_code - 84980 + 84969 num_comment - 59766 + 59758 @@ -10589,12 +10583,12 @@ 1 2 - 1369957 + 1369783 2 3 - 7003 + 7002 @@ -10610,12 +10604,12 @@ 1 2 - 1370891 + 1370717 2 3 - 6070 + 6069 @@ -10631,7 +10625,7 @@ 1 2 - 1376961 + 1376786 @@ -10647,27 +10641,27 @@ 1 2 - 68171 + 68162 2 3 - 12140 + 12138 3 4 - 7470 + 7469 4 21 - 7937 + 7936 29 921 - 6070 + 6069 @@ -10683,22 +10677,22 @@ 1 2 - 70505 + 70496 2 3 - 12140 + 12138 3 4 - 8404 + 8403 4 6 - 9338 + 9337 6 @@ -10719,17 +10713,17 @@ 1 2 - 69571 + 69562 2 3 - 14941 + 14939 3 4 - 10739 + 10737 4 @@ -10750,12 +10744,12 @@ 1 2 - 52762 + 52755 2 3 - 14474 + 14472 3 @@ -10770,7 +10764,7 @@ 44 922 - 4669 + 4668 @@ -10786,17 +10780,17 @@ 1 2 - 52762 + 52755 2 3 - 16809 + 16807 3 5 - 6070 + 6069 5 @@ -10822,22 +10816,22 @@ 1 2 - 53229 + 53222 2 3 - 15875 + 15873 3 5 - 7470 + 7469 5 7 - 5136 + 5135 7 @@ -10858,27 +10852,27 @@ 1 2 - 34552 + 34548 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 11 - 5136 + 5135 17 @@ -10899,27 +10893,27 @@ 1 2 - 34552 + 34548 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 8 - 4669 + 4668 10 @@ -10940,27 +10934,27 @@ 1 2 - 34552 + 34548 2 3 - 9338 + 9337 3 4 - 4202 + 4201 4 6 - 4669 + 4668 6 10 - 4669 + 4668 10 @@ -11607,15 +11601,15 @@ files - 123268 + 123252 id - 123268 + 123252 name - 123268 + 123252 @@ -11629,7 +11623,7 @@ 1 2 - 123268 + 123252 @@ -11645,7 +11639,7 @@ 1 2 - 123268 + 123252 @@ -11655,15 +11649,15 @@ folders - 16342 + 16340 id - 16342 + 16340 name - 16342 + 16340 @@ -11677,7 +11671,7 @@ 1 2 - 16342 + 16340 @@ -11693,7 +11687,7 @@ 1 2 - 16342 + 16340 @@ -11703,15 +11697,15 @@ containerparent - 138676 + 138659 parent - 16342 + 16340 child - 138676 + 138659 @@ -11725,7 +11719,7 @@ 1 2 - 7470 + 7469 2 @@ -11766,7 +11760,7 @@ 1 2 - 138676 + 138659 @@ -12425,7 +12419,7 @@ 2 3 - 544106 + 544108 3 @@ -12460,7 +12454,7 @@ 11 337 - 224848 + 224847 339 @@ -13567,15 +13561,15 @@ functions - 4179912 + 4179381 id - 4179912 + 4179381 name - 1895715 + 1895474 kind @@ -13593,7 +13587,7 @@ 1 2 - 4179912 + 4179381 @@ -13609,7 +13603,7 @@ 1 2 - 4179912 + 4179381 @@ -13625,22 +13619,22 @@ 1 2 - 1498362 + 1498172 2 3 - 153151 + 153131 3 5 - 142879 + 142860 5 952 - 101322 + 101309 @@ -13656,7 +13650,7 @@ 1 2 - 1895248 + 1895007 2 @@ -13811,15 +13805,15 @@ function_return_type - 4185048 + 4184517 id - 4179912 + 4179381 return_type - 818052 + 817948 @@ -13833,12 +13827,12 @@ 1 2 - 4174776 + 4174246 2 3 - 5136 + 5135 @@ -13854,22 +13848,22 @@ 1 2 - 506146 + 506082 2 3 - 211517 + 211490 3 7 - 66303 + 66294 7 2231 - 34085 + 34081 @@ -14232,33 +14226,33 @@ function_deleted - 96186 + 96174 id - 96186 + 96174 function_defaulted - 73774 + 73764 id - 73774 + 73764 function_prototyped - 4087928 + 4087409 id - 4087928 + 4087409 @@ -14411,27 +14405,27 @@ fun_decls - 4549250 + 4548672 id - 4544113 + 4543537 function - 4036099 + 4035587 type_id - 816651 + 816548 name - 1798128 + 1797899 location - 3371198 + 3370770 @@ -14445,7 +14439,7 @@ 1 2 - 4544113 + 4543537 @@ -14461,12 +14455,12 @@ 1 2 - 4538977 + 4538401 2 3 - 5136 + 5135 @@ -14482,7 +14476,7 @@ 1 2 - 4544113 + 4543537 @@ -14498,7 +14492,7 @@ 1 2 - 4544113 + 4543537 @@ -14514,17 +14508,17 @@ 1 2 - 3606995 + 3606537 2 3 - 356263 + 356218 3 7 - 72840 + 72831 @@ -14540,12 +14534,12 @@ 1 2 - 3996410 + 3995903 2 3 - 39688 + 39683 @@ -14561,7 +14555,7 @@ 1 2 - 4036099 + 4035587 @@ -14577,17 +14571,17 @@ 1 2 - 3663493 + 3663028 2 3 - 311905 + 311866 3 6 - 60700 + 60692 @@ -14603,22 +14597,22 @@ 1 2 - 431438 + 431383 2 3 - 274084 + 274050 3 6 - 63501 + 63493 6 2476 - 47626 + 47620 @@ -14634,22 +14628,22 @@ 1 2 - 515485 + 515419 2 3 - 203112 + 203086 3 7 - 63034 + 63026 7 2192 - 35019 + 35014 @@ -14665,17 +14659,17 @@ 1 2 - 690115 + 690027 2 4 - 67237 + 67228 4 773 - 59299 + 59291 @@ -14691,22 +14685,22 @@ 1 2 - 595329 + 595253 2 3 - 121400 + 121385 3 7 - 63501 + 63493 7 1959 - 36420 + 36415 @@ -14722,27 +14716,27 @@ 1 2 - 1228479 + 1228323 2 3 - 267081 + 267047 3 4 - 77976 + 77966 4 7 - 146147 + 146128 7 986 - 78443 + 78433 @@ -14758,22 +14752,22 @@ 1 2 - 1407778 + 1407600 2 3 - 152217 + 152198 3 5 - 136809 + 136791 5 936 - 101322 + 101309 @@ -14789,17 +14783,17 @@ 1 2 - 1579607 + 1579406 2 4 - 134941 + 134924 4 562 - 83579 + 83568 @@ -14815,27 +14809,27 @@ 1 2 - 1236417 + 1236260 2 3 - 293228 + 293191 3 4 - 78910 + 78900 4 8 - 137275 + 137258 8 542 - 52295 + 52288 @@ -14851,17 +14845,17 @@ 1 2 - 2966841 + 2966464 2 4 - 277820 + 277785 4 55 - 126536 + 126520 @@ -14877,17 +14871,17 @@ 1 2 - 3034078 + 3033693 2 7 - 244201 + 244170 7 55 - 92918 + 92906 @@ -14903,12 +14897,12 @@ 1 2 - 3207774 + 3207367 2 18 - 163423 + 163402 @@ -14924,12 +14918,12 @@ 1 2 - 3232988 + 3232578 2 13 - 138209 + 138192 @@ -14939,22 +14933,22 @@ fun_def - 1889178 + 1888938 id - 1889178 + 1888938 fun_specialized - 26147 + 26144 id - 26147 + 26144 @@ -14972,11 +14966,11 @@ fun_decl_specifiers - 2907074 + 2906705 id - 1689801 + 1689587 name @@ -14994,17 +14988,17 @@ 1 2 - 491205 + 491142 2 3 - 1179919 + 1179769 3 4 - 18676 + 18674 @@ -15176,11 +15170,11 @@ fun_decl_empty_throws - 1472214 + 1472027 fun_decl - 1472214 + 1472027 @@ -15240,11 +15234,11 @@ fun_decl_empty_noexcept - 863344 + 863234 fun_decl - 863344 + 863234 @@ -15349,19 +15343,19 @@ param_decl_bind - 6995937 + 6995048 id - 6995937 + 6995048 index - 7937 + 7936 fun_decl - 3835788 + 3835301 @@ -15375,7 +15369,7 @@ 1 2 - 6995937 + 6995048 @@ -15391,7 +15385,7 @@ 1 2 - 6995937 + 6995048 @@ -15569,27 +15563,27 @@ 1 2 - 1974158 + 1973908 2 3 - 1061787 + 1061652 3 4 - 502878 + 502814 4 8 - 290894 + 290857 8 18 - 6070 + 6069 @@ -15605,27 +15599,27 @@ 1 2 - 1974158 + 1973908 2 3 - 1061787 + 1061652 3 4 - 502878 + 502814 4 8 - 290894 + 290857 8 18 - 6070 + 6069 @@ -15635,27 +15629,27 @@ var_decls - 8111420 + 8110391 id - 8040448 + 8039427 variable - 7028154 + 7027262 type_id - 2043730 + 2043471 name - 667702 + 667617 location - 5312672 + 5311998 @@ -15669,7 +15663,7 @@ 1 2 - 8040448 + 8039427 @@ -15685,12 +15679,12 @@ 1 2 - 7972277 + 7971265 2 3 - 68171 + 68162 @@ -15706,7 +15700,7 @@ 1 2 - 8040448 + 8039427 @@ -15722,7 +15716,7 @@ 1 2 - 8037646 + 8036626 2 @@ -15743,17 +15737,17 @@ 1 2 - 6176016 + 6175232 2 3 - 698519 + 698431 3 7 - 153618 + 153598 @@ -15769,12 +15763,12 @@ 1 2 - 6856793 + 6855922 2 4 - 171361 + 171339 @@ -15790,12 +15784,12 @@ 1 2 - 6912824 + 6911946 2 3 - 115330 + 115315 @@ -15811,12 +15805,12 @@ 1 2 - 6482786 + 6481963 2 3 - 543033 + 542964 3 @@ -15837,27 +15831,27 @@ 1 2 - 1165911 + 1165763 2 3 - 477197 + 477136 3 4 - 94785 + 94773 4 7 - 184902 + 184878 7 762 - 120933 + 120918 @@ -15873,22 +15867,22 @@ 1 2 - 1299452 + 1299287 2 3 - 452450 + 452392 3 6 - 155952 + 155933 6 724 - 135875 + 135857 @@ -15904,17 +15898,17 @@ 1 2 - 1539451 + 1539256 2 3 - 383345 + 383296 3 128 - 120933 + 120918 @@ -15930,22 +15924,22 @@ 1 2 - 1365755 + 1365582 2 3 - 404357 + 404305 3 7 - 173229 + 173207 7 592 - 100388 + 100376 @@ -15961,37 +15955,37 @@ 1 2 - 341322 + 341278 2 3 - 86848 + 86837 3 4 - 48560 + 48554 4 6 - 51828 + 51822 6 12 - 52295 + 52288 12 33 - 50427 + 50421 34 2384 - 36420 + 36415 @@ -16007,37 +16001,37 @@ 1 2 - 368870 + 368823 2 3 - 77976 + 77966 3 4 - 45291 + 45285 4 6 - 49494 + 49487 6 14 - 53229 + 53222 14 56 - 50894 + 50888 56 2301 - 21945 + 21942 @@ -16053,27 +16047,27 @@ 1 2 - 457119 + 457061 2 3 - 93851 + 93840 3 5 - 46692 + 46686 5 19 - 50894 + 50888 19 1182 - 19143 + 19141 @@ -16089,32 +16083,32 @@ 1 2 - 379143 + 379094 2 3 - 90583 + 90571 3 5 - 59766 + 59758 5 9 - 51361 + 51355 9 21 - 50427 + 50421 21 1010 - 36420 + 36415 @@ -16130,17 +16124,17 @@ 1 2 - 4496954 + 4496383 2 3 - 531827 + 531760 3 896 - 283890 + 283854 @@ -16156,17 +16150,17 @@ 1 2 - 4886369 + 4885749 2 17 - 415563 + 415510 17 892 - 10739 + 10737 @@ -16182,12 +16176,12 @@ 1 2 - 4962478 + 4961848 2 759 - 350193 + 350149 @@ -16203,12 +16197,12 @@ 1 2 - 5303334 + 5302660 2 6 - 9338 + 9337 @@ -16218,22 +16212,22 @@ var_def - 3995477 + 3994969 id - 3995477 + 3994969 var_decl_specifiers - 378676 + 378628 id - 378676 + 378628 name @@ -16251,7 +16245,7 @@ 1 2 - 378676 + 378628 @@ -16303,19 +16297,19 @@ type_decls - 3283883 + 3283466 id - 3283883 + 3283466 type_id - 3233455 + 3233045 location - 3166685 + 3166283 @@ -16329,7 +16323,7 @@ 1 2 - 3283883 + 3283466 @@ -16345,7 +16339,7 @@ 1 2 - 3283883 + 3283466 @@ -16361,12 +16355,12 @@ 1 2 - 3191899 + 3191493 2 5 - 41556 + 41551 @@ -16382,12 +16376,12 @@ 1 2 - 3191899 + 3191493 2 5 - 41556 + 41551 @@ -16403,12 +16397,12 @@ 1 2 - 3114389 + 3113994 2 20 - 52295 + 52288 @@ -16424,12 +16418,12 @@ 1 2 - 3114389 + 3113994 2 20 - 52295 + 52288 @@ -16439,22 +16433,22 @@ type_def - 2642328 + 2641993 id - 2642328 + 2641993 type_decl_top - 743811 + 743717 type_decl - 743811 + 743717 @@ -16827,19 +16821,19 @@ usings - 369804 + 369757 id - 369804 + 369757 element_id - 315641 + 315601 location - 247937 + 247905 kind @@ -16857,7 +16851,7 @@ 1 2 - 369804 + 369757 @@ -16873,7 +16867,7 @@ 1 2 - 369804 + 369757 @@ -16889,7 +16883,7 @@ 1 2 - 369804 + 369757 @@ -16905,12 +16899,12 @@ 1 2 - 263345 + 263312 2 3 - 50894 + 50888 3 @@ -16931,12 +16925,12 @@ 1 2 - 263345 + 263312 2 3 - 50894 + 50888 3 @@ -16957,7 +16951,7 @@ 1 2 - 315641 + 315601 @@ -16973,17 +16967,17 @@ 1 2 - 202645 + 202619 2 4 - 10739 + 10737 4 5 - 31283 + 31280 5 @@ -17004,17 +16998,17 @@ 1 2 - 202645 + 202619 2 4 - 10739 + 10737 4 5 - 31283 + 31280 5 @@ -17035,7 +17029,7 @@ 1 2 - 247937 + 247905 @@ -17819,23 +17813,23 @@ params - 6355316 + 6354509 id - 6191425 + 6190639 function - 3492131 + 3491688 index - 7937 + 7936 type_id - 1846688 + 1846453 @@ -17849,7 +17843,7 @@ 1 2 - 6191425 + 6190639 @@ -17865,7 +17859,7 @@ 1 2 - 6191425 + 6190639 @@ -17881,12 +17875,12 @@ 1 2 - 6067690 + 6066919 2 4 - 123735 + 123719 @@ -17902,22 +17896,22 @@ 1 2 - 1867699 + 1867462 2 3 - 952993 + 952872 3 4 - 430037 + 429983 4 18 - 241400 + 241369 @@ -17933,22 +17927,22 @@ 1 2 - 1867699 + 1867462 2 3 - 952993 + 952872 3 4 - 430037 + 429983 4 18 - 241400 + 241369 @@ -17964,22 +17958,22 @@ 1 2 - 2166065 + 2165790 2 3 - 826924 + 826819 3 4 - 346458 + 346414 4 12 - 152684 + 152665 @@ -18233,22 +18227,22 @@ 1 2 - 1184121 + 1183971 2 3 - 406224 + 406173 3 7 - 154085 + 154065 7 518 - 102256 + 102243 @@ -18264,22 +18258,22 @@ 1 2 - 1404977 + 1404798 2 3 - 212450 + 212423 3 7 - 147548 + 147529 7 502 - 81711 + 81701 @@ -18295,17 +18289,17 @@ 1 2 - 1420385 + 1420205 2 3 - 347392 + 347348 3 13 - 78910 + 78900 @@ -18315,11 +18309,11 @@ overrides - 125735 + 125725 new - 122762 + 122753 old @@ -18337,7 +18331,7 @@ 1 2 - 119798 + 119788 2 @@ -18745,11 +18739,11 @@ localvariables - 576952 + 576947 id - 576952 + 576947 type_id @@ -18757,7 +18751,7 @@ name - 90549 + 90548 @@ -18771,7 +18765,7 @@ 1 2 - 576952 + 576947 @@ -18787,7 +18781,7 @@ 1 2 - 576952 + 576947 @@ -18808,7 +18802,7 @@ 2 3 - 5366 + 5362 3 @@ -18818,7 +18812,7 @@ 4 7 - 3376 + 3380 7 @@ -18844,7 +18838,7 @@ 1 2 - 26913 + 26908 2 @@ -18854,7 +18848,7 @@ 3 5 - 2914 + 2918 5 @@ -18880,7 +18874,7 @@ 1 2 - 57032 + 57031 2 @@ -18926,7 +18920,7 @@ 3 1486 - 6645 + 6644 @@ -19954,19 +19948,19 @@ builtintypes - 26147 + 26144 id - 26147 + 26144 name - 26147 + 26144 kind - 26147 + 26144 size @@ -19992,7 +19986,7 @@ 1 2 - 26147 + 26144 @@ -20008,7 +20002,7 @@ 1 2 - 26147 + 26144 @@ -20024,7 +20018,7 @@ 1 2 - 26147 + 26144 @@ -20040,7 +20034,7 @@ 1 2 - 26147 + 26144 @@ -20056,7 +20050,7 @@ 1 2 - 26147 + 26144 @@ -20072,7 +20066,7 @@ 1 2 - 26147 + 26144 @@ -20088,7 +20082,7 @@ 1 2 - 26147 + 26144 @@ -20104,7 +20098,7 @@ 1 2 - 26147 + 26144 @@ -20120,7 +20114,7 @@ 1 2 - 26147 + 26144 @@ -20136,7 +20130,7 @@ 1 2 - 26147 + 26144 @@ -20152,7 +20146,7 @@ 1 2 - 26147 + 26144 @@ -20168,7 +20162,7 @@ 1 2 - 26147 + 26144 @@ -20184,7 +20178,7 @@ 1 2 - 26147 + 26144 @@ -20200,7 +20194,7 @@ 1 2 - 26147 + 26144 @@ -20216,7 +20210,7 @@ 1 2 - 26147 + 26144 @@ -20661,15 +20655,15 @@ derivedtypes - 3670030 + 3669564 id - 3670030 + 3669564 name - 1552992 + 1552795 kind @@ -20677,7 +20671,7 @@ type_id - 2363107 + 2362807 @@ -20691,7 +20685,7 @@ 1 2 - 3670030 + 3669564 @@ -20707,7 +20701,7 @@ 1 2 - 3670030 + 3669564 @@ -20723,7 +20717,7 @@ 1 2 - 3670030 + 3669564 @@ -20739,17 +20733,17 @@ 1 2 - 1324199 + 1324031 2 4 - 120466 + 120451 4 1153 - 108326 + 108312 @@ -20765,7 +20759,7 @@ 1 2 - 1552058 + 1551861 2 @@ -20786,17 +20780,17 @@ 1 2 - 1324199 + 1324031 2 4 - 120466 + 120451 4 1135 - 108326 + 108312 @@ -20935,22 +20929,22 @@ 1 2 - 1515638 + 1515446 2 3 - 546302 + 546232 3 4 - 218520 + 218493 4 72 - 82645 + 82635 @@ -20966,22 +20960,22 @@ 1 2 - 1526844 + 1526650 2 3 - 538831 + 538763 3 4 - 215719 + 215691 4 72 - 81711 + 81701 @@ -20997,22 +20991,22 @@ 1 2 - 1519840 + 1519647 2 3 - 550037 + 549967 3 4 - 217587 + 217559 4 6 - 75641 + 75632 @@ -21022,11 +21016,11 @@ pointerishsize - 2707698 + 2707354 id - 2707698 + 2707354 size @@ -21048,7 +21042,7 @@ 1 2 - 2707698 + 2707354 @@ -21064,7 +21058,7 @@ 1 2 - 2707698 + 2707354 @@ -21138,19 +21132,19 @@ arraysizes - 88248 + 88237 id - 88248 + 88237 num_elements - 31750 + 31746 bytesize - 33151 + 33147 alignment @@ -21168,7 +21162,7 @@ 1 2 - 88248 + 88237 @@ -21184,7 +21178,7 @@ 1 2 - 88248 + 88237 @@ -21200,7 +21194,7 @@ 1 2 - 88248 + 88237 @@ -21221,7 +21215,7 @@ 2 3 - 23813 + 23810 3 @@ -21252,7 +21246,7 @@ 1 2 - 26614 + 26611 2 @@ -21278,7 +21272,7 @@ 1 2 - 26614 + 26611 2 @@ -21309,7 +21303,7 @@ 2 3 - 23813 + 23810 3 @@ -21340,12 +21334,12 @@ 1 2 - 27548 + 27545 2 3 - 3735 + 3734 3 @@ -21366,12 +21360,12 @@ 1 2 - 27548 + 27545 2 3 - 4669 + 4668 4 @@ -21823,19 +21817,19 @@ usertypes - 5234696 + 5234031 id - 5234696 + 5234031 name - 1352681 + 1352509 kind - 5136 + 5135 @@ -21849,7 +21843,7 @@ 1 2 - 5234696 + 5234031 @@ -21865,7 +21859,7 @@ 1 2 - 5234696 + 5234031 @@ -21881,27 +21875,27 @@ 1 2 - 983810 + 983686 2 3 - 153618 + 153598 3 7 - 104591 + 104577 7 61 - 101789 + 101776 65 874 - 8871 + 8870 @@ -21917,17 +21911,17 @@ 1 2 - 1212137 + 1211983 2 3 - 125602 + 125586 3 7 - 14941 + 14939 @@ -22069,15 +22063,15 @@ usertypesize - 1706610 + 1706394 id - 1706610 + 1706394 size - 13540 + 13539 alignment @@ -22095,7 +22089,7 @@ 1 2 - 1706610 + 1706394 @@ -22111,7 +22105,7 @@ 1 2 - 1706610 + 1706394 @@ -22132,7 +22126,7 @@ 2 3 - 4202 + 4201 3 @@ -22183,7 +22177,7 @@ 1 2 - 10272 + 10271 2 @@ -22339,15 +22333,15 @@ mangled_name - 9020523 + 9019378 id - 9020523 + 9019378 mangled_name - 6062554 + 6061784 is_complete @@ -22365,7 +22359,7 @@ 1 2 - 9020523 + 9019378 @@ -22381,7 +22375,7 @@ 1 2 - 9020523 + 9019378 @@ -22397,12 +22391,12 @@ 1 2 - 5789869 + 5789134 2 874 - 272684 + 272649 @@ -22418,7 +22412,7 @@ 1 2 - 6062554 + 6061784 @@ -22471,48 +22465,48 @@ is_standard_layout_class - 1254160 + 1254001 id - 1254160 + 1254001 is_complete - 1645910 + 1645701 id - 1645910 + 1645701 is_class_template - 398287 + 398236 id - 398287 + 398236 class_instantiation - 1089802 + 1089664 to - 1089802 + 1089664 from - 168559 + 168538 @@ -22526,7 +22520,7 @@ 1 2 - 1089802 + 1089664 @@ -22542,42 +22536,42 @@ 1 2 - 59766 + 59758 2 3 - 29416 + 29412 3 4 - 15875 + 15873 4 5 - 13073 + 13072 5 6 - 9805 + 9804 6 10 - 12606 + 12605 10 16 - 13073 + 13072 16 70 - 13540 + 13539 70 @@ -22833,11 +22827,11 @@ class_template_argument_value - 495407 + 495344 type_id - 304902 + 304863 index @@ -22845,7 +22839,7 @@ arg_value - 495407 + 495344 @@ -22859,12 +22853,12 @@ 1 2 - 249804 + 249773 2 3 - 53229 + 53222 3 @@ -22885,22 +22879,22 @@ 1 2 - 189571 + 189547 2 3 - 81244 + 81234 3 4 - 12140 + 12138 4 9 - 21945 + 21942 @@ -22978,7 +22972,7 @@ 1 2 - 495407 + 495344 @@ -22994,7 +22988,7 @@ 1 2 - 495407 + 495344 @@ -23004,15 +22998,15 @@ is_proxy_class_for - 62101 + 62093 id - 62101 + 62093 templ_param_id - 62101 + 62093 @@ -23026,7 +23020,7 @@ 1 2 - 62101 + 62093 @@ -23042,7 +23036,7 @@ 1 2 - 62101 + 62093 @@ -23348,11 +23342,11 @@ is_function_template - 1403109 + 1402931 id - 1403109 + 1402931 @@ -24483,19 +24477,19 @@ routinetypeargs - 983344 + 983219 routine - 423500 + 423447 index - 7937 + 7936 type_id - 226925 + 226896 @@ -24509,27 +24503,27 @@ 1 2 - 152684 + 152665 2 3 - 134007 + 133990 3 4 - 63501 + 63493 4 5 - 45758 + 45752 5 18 - 27548 + 27545 @@ -24545,27 +24539,27 @@ 1 2 - 182567 + 182544 2 3 - 133540 + 133523 3 4 - 58832 + 58825 4 5 - 33618 + 33614 5 11 - 14941 + 14939 @@ -24723,27 +24717,27 @@ 1 2 - 146614 + 146595 2 3 - 30817 + 30813 3 5 - 16809 + 16807 5 12 - 18210 + 18207 12 110 - 14474 + 14472 @@ -24759,22 +24753,22 @@ 1 2 - 172762 + 172740 2 3 - 30817 + 30813 3 6 - 18676 + 18674 6 14 - 4669 + 4668 @@ -24784,19 +24778,19 @@ ptrtomembers - 37820 + 37816 id - 37820 + 37816 type_id - 37820 + 37816 class_id - 15408 + 15406 @@ -24810,7 +24804,7 @@ 1 2 - 37820 + 37816 @@ -24826,7 +24820,7 @@ 1 2 - 37820 + 37816 @@ -24842,7 +24836,7 @@ 1 2 - 37820 + 37816 @@ -24858,7 +24852,7 @@ 1 2 - 37820 + 37816 @@ -24874,7 +24868,7 @@ 1 2 - 13540 + 13539 8 @@ -24900,7 +24894,7 @@ 1 2 - 13540 + 13539 8 @@ -24920,15 +24914,15 @@ specifiers - 24747 + 24743 id - 24747 + 24743 str - 24747 + 24743 @@ -24942,7 +24936,7 @@ 1 2 - 24747 + 24743 @@ -24958,7 +24952,7 @@ 1 2 - 24747 + 24743 @@ -24968,15 +24962,15 @@ typespecifiers - 1132293 + 1132149 type_id - 1114083 + 1113941 spec_id - 3735 + 3734 @@ -24990,12 +24984,12 @@ 1 2 - 1095872 + 1095733 2 3 - 18210 + 18207 @@ -25051,15 +25045,15 @@ funspecifiers - 10305968 + 10305126 func_id - 4068784 + 4068267 spec_id - 8404 + 8403 @@ -25073,27 +25067,27 @@ 1 2 - 1357817 + 1357645 2 3 - 641088 + 640539 3 4 - 985211 + 985553 4 5 - 780231 + 780132 5 8 - 304435 + 304396 @@ -25192,8 +25186,8 @@ 466 - 6434 - 6435 + 6435 + 6436 466 @@ -25204,15 +25198,15 @@ varspecifiers - 2246376 + 2246090 var_id - 1225211 + 1225055 spec_id - 3735 + 3734 @@ -25226,22 +25220,22 @@ 1 2 - 730270 + 730177 2 3 - 202645 + 202619 3 4 - 58365 + 58358 4 5 - 233929 + 233899 @@ -25350,11 +25344,11 @@ attributes - 561710 + 561639 id - 561710 + 561639 kind @@ -25362,7 +25356,7 @@ name - 11206 + 11204 name_space @@ -25370,7 +25364,7 @@ location - 481399 + 481338 @@ -25384,7 +25378,7 @@ 1 2 - 561710 + 561639 @@ -25400,7 +25394,7 @@ 1 2 - 561710 + 561639 @@ -25416,7 +25410,7 @@ 1 2 - 561710 + 561639 @@ -25432,7 +25426,7 @@ 1 2 - 561710 + 561639 @@ -25623,7 +25617,7 @@ 1 2 - 10272 + 10271 2 @@ -25644,7 +25638,7 @@ 1 2 - 11206 + 11204 @@ -25815,17 +25809,17 @@ 1 2 - 431905 + 431850 2 3 - 20077 + 20075 3 7 - 29416 + 29412 @@ -25841,7 +25835,7 @@ 1 2 - 481399 + 481338 @@ -25857,17 +25851,17 @@ 1 2 - 433306 + 433251 2 3 - 19610 + 19608 3 4 - 28482 + 28478 @@ -25883,7 +25877,7 @@ 1 2 - 481399 + 481338 @@ -25893,11 +25887,11 @@ attribute_args - 344123 + 344080 id - 344123 + 344080 kind @@ -25905,7 +25899,7 @@ attribute - 262878 + 262845 index @@ -25913,7 +25907,7 @@ location - 327781 + 327739 @@ -25927,7 +25921,7 @@ 1 2 - 344123 + 344080 @@ -25943,7 +25937,7 @@ 1 2 - 344123 + 344080 @@ -25959,7 +25953,7 @@ 1 2 - 344123 + 344080 @@ -25975,7 +25969,7 @@ 1 2 - 344123 + 344080 @@ -26090,17 +26084,17 @@ 1 2 - 197509 + 197484 2 3 - 49494 + 49487 3 4 - 15875 + 15873 @@ -26116,12 +26110,12 @@ 1 2 - 252606 + 252574 2 3 - 10272 + 10271 @@ -26137,17 +26131,17 @@ 1 2 - 197509 + 197484 2 3 - 49494 + 49487 3 4 - 15875 + 15873 @@ -26163,17 +26157,17 @@ 1 2 - 197509 + 197484 2 3 - 49494 + 49487 3 4 - 15875 + 15873 @@ -26288,12 +26282,12 @@ 1 2 - 313773 + 313733 2 7 - 14007 + 14005 @@ -26309,12 +26303,12 @@ 1 2 - 315174 + 315134 2 3 - 12606 + 12605 @@ -26330,12 +26324,12 @@ 1 2 - 313773 + 313733 2 7 - 14007 + 14005 @@ -26351,7 +26345,7 @@ 1 2 - 327781 + 327739 @@ -26361,15 +26355,15 @@ attribute_arg_value - 25213 + 25210 arg - 25213 + 25210 value - 15875 + 15873 @@ -26383,7 +26377,7 @@ 1 2 - 25213 + 25210 @@ -26399,7 +26393,7 @@ 1 2 - 14474 + 14472 2 @@ -26462,15 +26456,15 @@ attribute_arg_constant - 318442 + 318402 arg - 318442 + 318402 constant - 318442 + 318402 @@ -26484,7 +26478,7 @@ 1 2 - 318442 + 318402 @@ -26500,7 +26494,7 @@ 1 2 - 318442 + 318402 @@ -26674,15 +26668,15 @@ funcattributes - 630348 + 630268 func_id - 443578 + 443522 spec_id - 524823 + 524757 @@ -26696,17 +26690,17 @@ 1 2 - 338520 + 338477 2 3 - 64435 + 64427 3 6 - 39688 + 39683 6 @@ -26727,12 +26721,12 @@ 1 2 - 506146 + 506082 2 17 - 18676 + 18674 @@ -26868,15 +26862,15 @@ unspecifiedtype - 9489316 + 9488111 type_id - 9489316 + 9488111 unspecified_type_id - 6491191 + 6490367 @@ -26890,7 +26884,7 @@ 1 2 - 9489316 + 9488111 @@ -26906,17 +26900,17 @@ 1 2 - 4559522 + 4558943 2 3 - 1715949 + 1715731 3 145 - 215719 + 215691 @@ -26926,19 +26920,19 @@ member - 3881547 + 3881054 parent - 545835 + 545766 index - 92918 + 92906 child - 3810107 + 3809624 @@ -26952,47 +26946,47 @@ 1 2 - 129805 + 129788 2 3 - 64902 + 64894 3 4 - 73307 + 73297 4 5 - 75174 + 75165 5 6 - 40622 + 40617 6 8 - 46692 + 46686 8 14 - 45758 + 45752 14 30 - 41556 + 41551 30 200 - 28015 + 28011 @@ -27008,52 +27002,52 @@ 1 2 - 129805 + 129788 2 3 - 64902 + 64894 3 4 - 73307 + 73297 4 5 - 76108 + 76099 5 6 - 39688 + 39683 6 7 - 24280 + 24277 7 9 - 42023 + 42017 9 17 - 43890 + 43885 17 41 - 41556 + 41551 41 200 - 10272 + 10271 @@ -27069,57 +27063,57 @@ 1 2 - 26147 + 26144 2 3 - 7003 + 7002 3 4 - 3735 + 3734 4 5 - 7937 + 7936 5 6 - 5603 + 5602 6 7 - 5603 + 5602 7 9 - 7470 + 7469 9 16 - 7003 + 7002 16 52 - 7003 + 7002 52 107 - 7003 + 7002 108 577 - 7003 + 7002 737 @@ -27140,57 +27134,57 @@ 1 2 - 26147 + 26144 2 3 - 7003 + 7002 3 4 - 3735 + 3734 4 5 - 7937 + 7936 5 6 - 5603 + 5602 6 7 - 5603 + 5602 7 9 - 7470 + 7469 9 16 - 7003 + 7002 16 52 - 7003 + 7002 52 107 - 7003 + 7002 108 577 - 7003 + 7002 738 @@ -27211,7 +27205,7 @@ 1 2 - 3810107 + 3809624 @@ -27227,12 +27221,12 @@ 1 2 - 3738668 + 3738193 2 3 - 71439 + 71430 @@ -28762,15 +28756,15 @@ commentbinding - 3091510 + 3091117 id - 2445753 + 2445442 element - 3014934 + 3014551 @@ -28784,12 +28778,12 @@ 1 2 - 2368710 + 2368409 2 97 - 77042 + 77032 @@ -28805,12 +28799,12 @@ 1 2 - 2938358 + 2937985 2 3 - 76575 + 76565 @@ -29215,15 +29209,15 @@ namespaces - 12140 + 12138 id - 12140 + 12138 name - 9805 + 9804 @@ -29237,7 +29231,7 @@ 1 2 - 12140 + 12138 @@ -29253,7 +29247,7 @@ 1 2 - 8404 + 8403 2 @@ -29284,15 +29278,15 @@ namespacembrs - 2388321 + 2388018 parentid - 10272 + 10271 memberid - 2388321 + 2388018 @@ -29367,7 +29361,7 @@ 1 2 - 2388321 + 2388018 @@ -30288,7 +30282,7 @@ fun - 511344 + 511325 @@ -30323,12 +30317,12 @@ 1 2 - 315090 + 315052 2 3 - 77893 + 77912 3 @@ -33722,11 +33716,11 @@ lambdas - 21478 + 21475 expr - 21478 + 21475 default_capture @@ -33748,7 +33742,7 @@ 1 2 - 21478 + 21475 @@ -33764,7 +33758,7 @@ 1 2 - 21478 + 21475 @@ -33838,15 +33832,15 @@ lambda_capture - 28015 + 28011 id - 28015 + 28011 lambda - 20544 + 20542 index @@ -33854,7 +33848,7 @@ field - 28015 + 28011 captured_by_reference @@ -33880,7 +33874,7 @@ 1 2 - 28015 + 28011 @@ -33896,7 +33890,7 @@ 1 2 - 28015 + 28011 @@ -33912,7 +33906,7 @@ 1 2 - 28015 + 28011 @@ -33928,7 +33922,7 @@ 1 2 - 28015 + 28011 @@ -33944,7 +33938,7 @@ 1 2 - 28015 + 28011 @@ -33960,7 +33954,7 @@ 1 2 - 28015 + 28011 @@ -33976,12 +33970,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -33997,12 +33991,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -34018,12 +34012,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -34039,7 +34033,7 @@ 1 2 - 20544 + 20542 @@ -34055,7 +34049,7 @@ 1 2 - 20544 + 20542 @@ -34071,12 +34065,12 @@ 1 2 - 13073 + 13072 2 3 - 7470 + 7469 @@ -34208,7 +34202,7 @@ 1 2 - 28015 + 28011 @@ -34224,7 +34218,7 @@ 1 2 - 28015 + 28011 @@ -34240,7 +34234,7 @@ 1 2 - 28015 + 28011 @@ -34256,7 +34250,7 @@ 1 2 - 28015 + 28011 @@ -34272,7 +34266,7 @@ 1 2 - 28015 + 28011 @@ -34288,7 +34282,7 @@ 1 2 - 28015 + 28011 @@ -36334,11 +36328,11 @@ stmt_decl_bind - 580849 + 580844 stmt - 541067 + 541062 num @@ -36346,7 +36340,7 @@ decl - 580745 + 580740 @@ -36360,7 +36354,7 @@ 1 2 - 520378 + 520373 2 @@ -36381,7 +36375,7 @@ 1 2 - 520378 + 520373 2 @@ -36584,7 +36578,7 @@ 1 2 - 580708 + 580703 2 @@ -36605,7 +36599,7 @@ 1 2 - 580745 + 580740 @@ -36615,11 +36609,11 @@ stmt_decl_entry_bind - 580849 + 580844 stmt - 541067 + 541062 num @@ -36627,7 +36621,7 @@ decl_entry - 580791 + 580786 @@ -36641,7 +36635,7 @@ 1 2 - 520378 + 520373 2 @@ -36662,7 +36656,7 @@ 1 2 - 520378 + 520373 2 @@ -36865,7 +36859,7 @@ 1 2 - 580770 + 580765 3 @@ -36886,7 +36880,7 @@ 1 2 - 580791 + 580786 @@ -37135,19 +37129,19 @@ preprocdirects - 4191118 + 4190586 id - 4191118 + 4190586 kind - 5136 + 5135 location - 4150496 + 4149969 @@ -37161,7 +37155,7 @@ 1 2 - 4191118 + 4190586 @@ -37177,7 +37171,7 @@ 1 2 - 4191118 + 4190586 @@ -37325,7 +37319,7 @@ 1 2 - 4150029 + 4149502 88 @@ -37346,7 +37340,7 @@ 1 2 - 4150496 + 4149969 @@ -37356,15 +37350,15 @@ preprocpair - 1431592 + 1431410 begin - 1197195 + 1197043 elseelifend - 1431592 + 1431410 @@ -37378,17 +37372,17 @@ 1 2 - 978674 + 978550 2 3 - 208248 + 208222 3 11 - 10272 + 10271 @@ -37404,7 +37398,7 @@ 1 2 - 1431592 + 1431410 @@ -37414,22 +37408,22 @@ preproctrue - 767157 + 767060 branch - 767157 + 767060 preprocfalse - 331516 + 331474 branch - 331516 + 331474 @@ -37582,15 +37576,15 @@ includes - 313306 + 313266 id - 313306 + 313266 included - 117198 + 117183 @@ -37604,7 +37598,7 @@ 1 2 - 313306 + 313266 @@ -37620,27 +37614,27 @@ 1 2 - 61167 + 61159 2 3 - 21945 + 21942 3 4 - 12606 + 12605 4 6 - 10272 + 10271 6 14 - 8871 + 8870 14 diff --git a/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme new file mode 100644 index 00000000000..02a123a1a68 --- /dev/null +++ b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/old.dbscheme @@ -0,0 +1,2317 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..0fea0ee7026 --- /dev/null +++ b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/semmlecode.cpp.dbscheme @@ -0,0 +1,2319 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties new file mode 100644 index 00000000000..477f78902ed --- /dev/null +++ b/cpp/ql/lib/upgrades/02a123a1a681f98cf502f189a2a79b0dfb398e59/upgrade.properties @@ -0,0 +1,2 @@ +description: Expose C11 _Generics +compatibility: backwards diff --git a/cpp/ql/test/library-tests/c11_generic/PrintAST.expected b/cpp/ql/test/library-tests/c11_generic/PrintAST.expected new file mode 100644 index 00000000000..67583c896c6 --- /dev/null +++ b/cpp/ql/test/library-tests/c11_generic/PrintAST.expected @@ -0,0 +1,458 @@ +#-----| [CopyAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) +#-----| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const __va_list_tag & +#-----| [MoveAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag&&) +#-----| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] __va_list_tag && +generic.c: +# 3| [FormattingFunction,TopLevelFunction] int printf(char const*) +# 3| : +# 3| getParameter(0): [Parameter] format +# 3| Type = [PointerType] const char * +# 14| [TopLevelFunction] int main() +# 14| : +# 15| getEntryPoint(): [BlockStmt] { ... } +# 16| getStmt(0): [DeclStmt] declaration +# 16| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 16| Type = [IntType] int +# 17| getStmt(1): [DeclStmt] declaration +# 17| getDeclarationEntry(0): [VariableDeclarationEntry] definition of m +# 17| Type = [CTypedefType] MYINT +# 18| getStmt(2): [DeclStmt] declaration +# 18| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 18| Type = [PointerType] const char * +# 19| getStmt(3): [DeclStmt] declaration +# 19| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 19| Type = [PointerType] float *** +# 21| getStmt(4): [ExprStmt] ExprStmt +# 21| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 21| Type = [IntType] int +# 21| ValueCategory = prvalue +# 21| getArgument(0): i is %s\n +# 21| Type = [ArrayType] char[9] +# 21| Value = [StringLiteral] "i is %s\n" +# 21| ValueCategory = lvalue +# 21| getArgument(1): int +# 21| Type = [ArrayType] char[4] +# 21| Value = [StringLiteral] "int" +# 21| ValueCategory = lvalue +# 21| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 21| Conversion = [PointerConversion] pointer conversion +# 21| Type = [PointerType] const char * +# 21| ValueCategory = prvalue +# 21| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 21| Type = [CharPointerType] char * +# 21| ValueCategory = prvalue +# 21| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 21| Type = [CharPointerType] char * +# 21| ValueCategory = prvalue +# 21| getExpr(): [C11GenericExpr] _Generic +# 21| Type = [ArrayType] char[4] +# 21| Value = [C11GenericExpr] int +# 21| ValueCategory = lvalue +# 21| getControllingExpr(): [VariableAccess] i +# 21| Type = [IntType] int +# 21| ValueCategory = prvalue(load) +# 21| getAssociationType(0): [TypeName] int +# 21| Type = [IntType] int +# 21| ValueCategory = prvalue +# 21| getAssociationExpr(0): [ReuseExpr] reuse of int +# 21| Type = [ArrayType] char[4] +# 21| ValueCategory = lvalue +# 21| getAssociationType(1): [TypeName] const char * +# 21| Type = [PointerType] const char * +# 21| ValueCategory = prvalue +# 21| getAssociationExpr(1): string +# 21| Type = [ArrayType] char[7] +# 21| Value = [StringLiteral] "string" +# 21| ValueCategory = lvalue +# 21| getAssociationType(2): [TypeName] void +# 21| Type = [VoidType] void +# 21| ValueCategory = prvalue +# 21| getAssociationExpr(2): unknown +# 21| Type = [ArrayType] char[8] +# 21| Value = [StringLiteral] "unknown" +# 21| ValueCategory = lvalue +# 21| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 21| Type = [IntType] int +# 21| ValueCategory = prvalue(load) +# 22| getStmt(5): [ExprStmt] ExprStmt +# 22| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 22| Type = [IntType] int +# 22| ValueCategory = prvalue +# 22| getArgument(0): c is %s\n +# 22| Type = [ArrayType] char[9] +# 22| Value = [StringLiteral] "c is %s\n" +# 22| ValueCategory = lvalue +# 22| getArgument(1): int +# 22| Type = [ArrayType] char[4] +# 22| Value = [StringLiteral] "int" +# 22| ValueCategory = lvalue +# 22| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 22| Conversion = [PointerConversion] pointer conversion +# 22| Type = [PointerType] const char * +# 22| ValueCategory = prvalue +# 22| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 22| Type = [CharPointerType] char * +# 22| ValueCategory = prvalue +# 22| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 22| Type = [CharPointerType] char * +# 22| ValueCategory = prvalue +# 22| getExpr(): [C11GenericExpr] _Generic +# 22| Type = [ArrayType] char[4] +# 22| Value = [C11GenericExpr] int +# 22| ValueCategory = lvalue +# 22| getControllingExpr(): [VariableAccess] m +# 22| Type = [CTypedefType] MYINT +# 22| ValueCategory = prvalue(load) +# 22| getAssociationType(0): [TypeName] int +# 22| Type = [IntType] int +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(0): [ReuseExpr] reuse of int +# 22| Type = [ArrayType] char[4] +# 22| ValueCategory = lvalue +# 22| getAssociationType(1): [TypeName] const char * +# 22| Type = [PointerType] const char * +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(1): string +# 22| Type = [ArrayType] char[7] +# 22| Value = [StringLiteral] "string" +# 22| ValueCategory = lvalue +# 22| getAssociationType(2): [TypeName] void +# 22| Type = [VoidType] void +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(2): unknown +# 22| Type = [ArrayType] char[8] +# 22| Value = [StringLiteral] "unknown" +# 22| ValueCategory = lvalue +# 22| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 22| Type = [CTypedefType] MYINT +# 22| ValueCategory = prvalue(load) +# 23| getStmt(6): [ExprStmt] ExprStmt +# 23| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getArgument(0): s is %s\n +# 23| Type = [ArrayType] char[9] +# 23| Value = [StringLiteral] "s is %s\n" +# 23| ValueCategory = lvalue +# 23| getArgument(1): string +# 23| Type = [ArrayType] char[7] +# 23| Value = [StringLiteral] "string" +# 23| ValueCategory = lvalue +# 23| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 23| Conversion = [PointerConversion] pointer conversion +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 23| Type = [CharPointerType] char * +# 23| ValueCategory = prvalue +# 23| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 23| Type = [CharPointerType] char * +# 23| ValueCategory = prvalue +# 23| getExpr(): [C11GenericExpr] _Generic +# 23| Type = [ArrayType] char[7] +# 23| Value = [C11GenericExpr] string +# 23| ValueCategory = lvalue +# 23| getControllingExpr(): [VariableAccess] s +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue(load) +# 23| getAssociationType(0): [TypeName] int +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(0): int +# 23| Type = [ArrayType] char[4] +# 23| Value = [StringLiteral] "int" +# 23| ValueCategory = lvalue +# 23| getAssociationType(1): [TypeName] const char * +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(1): [ReuseExpr] reuse of string +# 23| Type = [ArrayType] char[7] +# 23| ValueCategory = lvalue +# 23| getAssociationType(2): [TypeName] void +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(2): unknown +# 23| Type = [ArrayType] char[8] +# 23| Value = [StringLiteral] "unknown" +# 23| ValueCategory = lvalue +# 23| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue(load) +# 24| getStmt(7): [ExprStmt] ExprStmt +# 24| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 24| Type = [IntType] int +# 24| ValueCategory = prvalue +# 24| getArgument(0): f is %s\n +# 24| Type = [ArrayType] char[9] +# 24| Value = [StringLiteral] "f is %s\n" +# 24| ValueCategory = lvalue +# 24| getArgument(1): unknown +# 24| Type = [ArrayType] char[8] +# 24| Value = [StringLiteral] "unknown" +# 24| ValueCategory = lvalue +# 24| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 24| Conversion = [PointerConversion] pointer conversion +# 24| Type = [PointerType] const char * +# 24| ValueCategory = prvalue +# 24| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 24| Type = [CharPointerType] char * +# 24| ValueCategory = prvalue +# 24| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 24| Type = [CharPointerType] char * +# 24| ValueCategory = prvalue +# 24| getExpr(): [C11GenericExpr] _Generic +# 24| Type = [ArrayType] char[8] +# 24| Value = [C11GenericExpr] unknown +# 24| ValueCategory = lvalue +# 24| getControllingExpr(): [VariableAccess] f +# 24| Type = [PointerType] float *** +# 24| ValueCategory = prvalue(load) +# 24| getAssociationType(0): [TypeName] int +# 24| Type = [IntType] int +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(0): int +# 24| Type = [ArrayType] char[4] +# 24| Value = [StringLiteral] "int" +# 24| ValueCategory = lvalue +# 24| getAssociationType(1): [TypeName] const char * +# 24| Type = [PointerType] const char * +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(1): string +# 24| Type = [ArrayType] char[7] +# 24| Value = [StringLiteral] "string" +# 24| ValueCategory = lvalue +# 24| getAssociationType(2): [TypeName] void +# 24| Type = [VoidType] void +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(2): [ReuseExpr] reuse of unknown +# 24| Type = [ArrayType] char[8] +# 24| ValueCategory = lvalue +# 24| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 24| Type = [PointerType] float *** +# 24| ValueCategory = prvalue(load) +# 25| getStmt(8): [ReturnStmt] return ... +#-----| getExpr(): [Literal] 0 +#-----| Type = [IntType] int +#-----| Value = [Literal] 0 +#-----| ValueCategory = prvalue +generic.cpp: +# 4| [FormattingFunction,TopLevelFunction] int printf(char const*) +# 4| : +# 4| getParameter(0): [Parameter] format +# 4| Type = [PointerType] const char * +# 15| [TopLevelFunction] int main() +# 15| : +# 16| getEntryPoint(): [BlockStmt] { ... } +# 17| getStmt(0): [DeclStmt] declaration +# 17| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 17| Type = [IntType] int +# 18| getStmt(1): [DeclStmt] declaration +# 18| getDeclarationEntry(0): [VariableDeclarationEntry] definition of m +# 18| Type = [CTypedefType] MYINT +# 19| getStmt(2): [DeclStmt] declaration +# 19| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 19| Type = [PointerType] const char * +# 20| getStmt(3): [DeclStmt] declaration +# 20| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 20| Type = [PointerType] float *** +# 22| getStmt(4): [ExprStmt] ExprStmt +# 22| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 22| Type = [IntType] int +# 22| ValueCategory = prvalue +# 22| getArgument(0): i is %s\n +# 22| Type = [ArrayType] const char[9] +# 22| Value = [StringLiteral] "i is %s\n" +# 22| ValueCategory = lvalue +# 22| getArgument(1): int +# 22| Type = [ArrayType] const char[4] +# 22| Value = [StringLiteral] "int" +# 22| ValueCategory = lvalue +# 22| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 22| Type = [PointerType] const char * +# 22| ValueCategory = prvalue +# 22| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 22| Type = [PointerType] const char * +# 22| ValueCategory = prvalue +# 22| getExpr(): [C11GenericExpr] _Generic +# 22| Type = [ArrayType] const char[4] +# 22| Value = [C11GenericExpr] int +# 22| ValueCategory = lvalue +# 22| getControllingExpr(): [VariableAccess] i +# 22| Type = [IntType] int +# 22| ValueCategory = lvalue +# 22| getAssociationType(0): [TypeName] int +# 22| Type = [IntType] int +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(0): [ReuseExpr] reuse of int +# 22| Type = [ArrayType] const char[4] +# 22| ValueCategory = lvalue +# 22| getAssociationType(1): [TypeName] const char * +# 22| Type = [PointerType] const char * +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(1): string +# 22| Type = [ArrayType] const char[7] +# 22| Value = [StringLiteral] "string" +# 22| ValueCategory = lvalue +# 22| getAssociationType(2): [TypeName] void +# 22| Type = [VoidType] void +# 22| ValueCategory = prvalue +# 22| getAssociationExpr(2): unknown +# 22| Type = [ArrayType] const char[8] +# 22| Value = [StringLiteral] "unknown" +# 22| ValueCategory = lvalue +# 22| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 22| Type = [IntType] int +# 22| ValueCategory = lvalue +# 23| getStmt(5): [ExprStmt] ExprStmt +# 23| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getArgument(0): c is %s\n +# 23| Type = [ArrayType] const char[9] +# 23| Value = [StringLiteral] "c is %s\n" +# 23| ValueCategory = lvalue +# 23| getArgument(1): int +# 23| Type = [ArrayType] const char[4] +# 23| Value = [StringLiteral] "int" +# 23| ValueCategory = lvalue +# 23| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getExpr(): [C11GenericExpr] _Generic +# 23| Type = [ArrayType] const char[4] +# 23| Value = [C11GenericExpr] int +# 23| ValueCategory = lvalue +# 23| getControllingExpr(): [VariableAccess] m +# 23| Type = [CTypedefType] MYINT +# 23| ValueCategory = lvalue +# 23| getAssociationType(0): [TypeName] int +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(0): [ReuseExpr] reuse of int +# 23| Type = [ArrayType] const char[4] +# 23| ValueCategory = lvalue +# 23| getAssociationType(1): [TypeName] const char * +# 23| Type = [PointerType] const char * +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(1): string +# 23| Type = [ArrayType] const char[7] +# 23| Value = [StringLiteral] "string" +# 23| ValueCategory = lvalue +# 23| getAssociationType(2): [TypeName] void +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(2): unknown +# 23| Type = [ArrayType] const char[8] +# 23| Value = [StringLiteral] "unknown" +# 23| ValueCategory = lvalue +# 23| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 23| Type = [CTypedefType] MYINT +# 23| ValueCategory = lvalue +# 24| getStmt(6): [ExprStmt] ExprStmt +# 24| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 24| Type = [IntType] int +# 24| ValueCategory = prvalue +# 24| getArgument(0): s is %s\n +# 24| Type = [ArrayType] const char[9] +# 24| Value = [StringLiteral] "s is %s\n" +# 24| ValueCategory = lvalue +# 24| getArgument(1): string +# 24| Type = [ArrayType] const char[7] +# 24| Value = [StringLiteral] "string" +# 24| ValueCategory = lvalue +# 24| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 24| Type = [PointerType] const char * +# 24| ValueCategory = prvalue +# 24| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 24| Type = [PointerType] const char * +# 24| ValueCategory = prvalue +# 24| getExpr(): [C11GenericExpr] _Generic +# 24| Type = [ArrayType] const char[7] +# 24| Value = [C11GenericExpr] string +# 24| ValueCategory = lvalue +# 24| getControllingExpr(): [VariableAccess] s +# 24| Type = [PointerType] const char * +# 24| ValueCategory = lvalue +# 24| getAssociationType(0): [TypeName] int +# 24| Type = [IntType] int +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(0): int +# 24| Type = [ArrayType] const char[4] +# 24| Value = [StringLiteral] "int" +# 24| ValueCategory = lvalue +# 24| getAssociationType(1): [TypeName] const char * +# 24| Type = [PointerType] const char * +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(1): [ReuseExpr] reuse of string +# 24| Type = [ArrayType] const char[7] +# 24| ValueCategory = lvalue +# 24| getAssociationType(2): [TypeName] void +# 24| Type = [VoidType] void +# 24| ValueCategory = prvalue +# 24| getAssociationExpr(2): unknown +# 24| Type = [ArrayType] const char[8] +# 24| Value = [StringLiteral] "unknown" +# 24| ValueCategory = lvalue +# 24| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 24| Type = [PointerType] const char * +# 24| ValueCategory = lvalue +# 25| getStmt(7): [ExprStmt] ExprStmt +# 25| getExpr(): [FormattingFunctionCall,FunctionCall] call to printf +# 25| Type = [IntType] int +# 25| ValueCategory = prvalue +# 25| getArgument(0): f is %s\n +# 25| Type = [ArrayType] const char[9] +# 25| Value = [StringLiteral] "f is %s\n" +# 25| ValueCategory = lvalue +# 25| getArgument(1): unknown +# 25| Type = [ArrayType] const char[8] +# 25| Value = [StringLiteral] "unknown" +# 25| ValueCategory = lvalue +# 25| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 25| Type = [PointerType] const char * +# 25| ValueCategory = prvalue +# 25| getArgument(1).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 25| Type = [PointerType] const char * +# 25| ValueCategory = prvalue +# 25| getExpr(): [C11GenericExpr] _Generic +# 25| Type = [ArrayType] const char[8] +# 25| Value = [C11GenericExpr] unknown +# 25| ValueCategory = lvalue +# 25| getControllingExpr(): [VariableAccess] f +# 25| Type = [PointerType] float *** +# 25| ValueCategory = lvalue +# 25| getAssociationType(0): [TypeName] int +# 25| Type = [IntType] int +# 25| ValueCategory = prvalue +# 25| getAssociationExpr(0): int +# 25| Type = [ArrayType] const char[4] +# 25| Value = [StringLiteral] "int" +# 25| ValueCategory = lvalue +# 25| getAssociationType(1): [TypeName] const char * +# 25| Type = [PointerType] const char * +# 25| ValueCategory = prvalue +# 25| getAssociationExpr(1): string +# 25| Type = [ArrayType] const char[7] +# 25| Value = [StringLiteral] "string" +# 25| ValueCategory = lvalue +# 25| getAssociationType(2): [TypeName] void +# 25| Type = [VoidType] void +# 25| ValueCategory = prvalue +# 25| getAssociationExpr(2): [ReuseExpr] reuse of unknown +# 25| Type = [ArrayType] const char[8] +# 25| ValueCategory = lvalue +# 25| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 25| Type = [PointerType] float *** +# 25| ValueCategory = lvalue +# 26| getStmt(8): [ReturnStmt] return ... +#-----| getExpr(): [Literal] 0 +#-----| Type = [IntType] int +#-----| Value = [Literal] 0 +#-----| ValueCategory = prvalue diff --git a/cpp/ql/test/library-tests/c11_generic/PrintAST.qlref b/cpp/ql/test/library-tests/c11_generic/PrintAST.qlref new file mode 100644 index 00000000000..6f85a6dbe69 --- /dev/null +++ b/cpp/ql/test/library-tests/c11_generic/PrintAST.qlref @@ -0,0 +1 @@ +semmle/code/cpp/PrintAST.ql diff --git a/cpp/ql/test/library-tests/c11_generic/macro_invocation.expected b/cpp/ql/test/library-tests/c11_generic/macro_invocation.expected new file mode 100644 index 00000000000..a022878b4ea --- /dev/null +++ b/cpp/ql/test/library-tests/c11_generic/macro_invocation.expected @@ -0,0 +1,8 @@ +| generic.c:21:22:21:32 | _Generic | generic.c:21:22:21:32 | describe(val) | +| generic.c:22:22:22:32 | _Generic | generic.c:22:22:22:32 | describe(val) | +| generic.c:23:22:23:32 | _Generic | generic.c:23:22:23:32 | describe(val) | +| generic.c:24:22:24:32 | _Generic | generic.c:24:22:24:32 | describe(val) | +| generic.cpp:22:22:22:32 | _Generic | generic.cpp:22:22:22:32 | describe(val) | +| generic.cpp:23:22:23:32 | _Generic | generic.cpp:23:22:23:32 | describe(val) | +| generic.cpp:24:22:24:32 | _Generic | generic.cpp:24:22:24:32 | describe(val) | +| generic.cpp:25:22:25:32 | _Generic | generic.cpp:25:22:25:32 | describe(val) | diff --git a/cpp/ql/test/library-tests/c11_generic/macro_invocation.ql b/cpp/ql/test/library-tests/c11_generic/macro_invocation.ql new file mode 100644 index 00000000000..c63e4c8114e --- /dev/null +++ b/cpp/ql/test/library-tests/c11_generic/macro_invocation.ql @@ -0,0 +1,5 @@ +import cpp + +from C11GenericExpr g, MacroInvocation m +where m.getAnExpandedElement() = g +select g, m diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 66606ff7056..f17680ebe2d 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4207,6 +4207,24 @@ generic.c: # 3| Type = [IntType] int # 3| Value = [Literal] 1 # 3| ValueCategory = prvalue +# 3| getLeftOperand().getFullyConverted(): [C11GenericExpr] _Generic +# 3| Type = [IntType] unsigned int +# 3| ValueCategory = prvalue(load) +# 3| getControllingExpr(): [VariableAccess] r +# 3| Type = [IntType] unsigned int +# 3| ValueCategory = prvalue(load) +# 3| getAssociationType(0): [TypeName] unsigned int +# 3| Type = [IntType] unsigned int +# 3| ValueCategory = prvalue +# 3| getAssociationExpr(0): [ReuseExpr] reuse of x +# 3| Type = [IntType] unsigned int +# 3| ValueCategory = lvalue +# 3| getAssociationType(1): [TypeName] int +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue +# 3| getAssociationExpr(1): [VariableAccess] y +# 3| Type = [IntType] int +# 3| ValueCategory = lvalue # 3| getRightOperand().getFullyConverted(): [CStyleCast] (unsigned int)... # 3| Conversion = [IntegralConversion] integral conversion # 3| Type = [IntType] unsigned int @@ -4231,6 +4249,29 @@ generic.c: # 16| getExpr(): [ArrayToPointerConversion] array to pointer conversion # 16| Type = [CharPointerType] char * # 16| ValueCategory = prvalue +# 16| getExpr(): [C11GenericExpr] _Generic +# 16| Type = [ArrayType] char[4] +# 16| Value = [C11GenericExpr] int +# 16| ValueCategory = lvalue +# 16| getControllingExpr(): [VariableAccess] i +# 16| Type = [IntType] int +# 16| ValueCategory = prvalue(load) +# 16| getAssociationType(0): [TypeName] int +# 16| Type = [IntType] int +# 16| ValueCategory = prvalue +# 16| getAssociationExpr(0): [ReuseExpr] reuse of int +# 16| Type = [ArrayType] char[4] +# 16| ValueCategory = lvalue +# 16| getAssociationType(1): [TypeName] void +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getAssociationExpr(1): unknown +# 16| Type = [ArrayType] char[8] +# 16| Value = [StringLiteral] "unknown" +# 16| ValueCategory = lvalue +# 16| getControllingExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 16| Type = [IntType] int +# 16| ValueCategory = prvalue(load) # 19| [TopLevelFunction] char const* c11_generic_test_with_constant_and_no_macro() # 19| : # 20| getEntryPoint(): [BlockStmt] { ... } @@ -4249,6 +4290,26 @@ generic.c: # 23| getExpr(): [ArrayToPointerConversion] array to pointer conversion # 23| Type = [CharPointerType] char * # 23| ValueCategory = prvalue +# 23| getExpr(): [C11GenericExpr] _Generic +# 23| Type = [ArrayType] char[4] +# 23| Value = [C11GenericExpr] int +# 23| ValueCategory = lvalue +# 23| getControllingExpr(): [VariableAccess] i +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue(load) +# 23| getAssociationType(0): [TypeName] int +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(0): [ReuseExpr] reuse of int +# 23| Type = [ArrayType] char[4] +# 23| ValueCategory = lvalue +# 23| getAssociationType(1): [TypeName] void +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getAssociationExpr(1): unknown +# 23| Type = [ArrayType] char[8] +# 23| Value = [StringLiteral] "unknown" +# 23| ValueCategory = lvalue # 26| [TopLevelFunction] void c11_generic_test_test_with_cast(int) # 26| : # 26| getParameter(0): [Parameter] y @@ -4267,10 +4328,28 @@ generic.c: # 28| getRValue(): [VariableAccess] y # 28| Type = [IntType] int # 28| ValueCategory = prvalue(load) -# 28| getRValue().getFullyConverted(): [CStyleCast] (unsigned int)... -# 28| Conversion = [IntegralConversion] integral conversion +# 28| getRValue().getFullyConverted(): [C11GenericExpr] _Generic # 28| Type = [IntType] unsigned int # 28| ValueCategory = prvalue +# 28| getControllingExpr(): [VariableAccess] r +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = prvalue(load) +# 28| getAssociationType(0): [TypeName] unsigned int +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = prvalue +# 28| getAssociationExpr(0): [ReuseExpr] reuse of y +# 28| Type = [IntType] int +# 28| ValueCategory = prvalue +# 28| getAssociationType(1): [TypeName] int +# 28| Type = [IntType] int +# 28| ValueCategory = prvalue +# 28| getAssociationExpr(1): [VariableAccess] y +# 28| Type = [IntType] int +# 28| ValueCategory = lvalue +# 28| getExpr(): [CStyleCast] (unsigned int)... +# 28| Conversion = [IntegralConversion] integral conversion +# 28| Type = [IntType] unsigned int +# 28| ValueCategory = prvalue # 29| getStmt(2): [ReturnStmt] return ... ir.c: # 5| [TopLevelFunction] int getX(MyCoords*) 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 ced441595d7..51d5c943c4c 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -2991,7 +2991,7 @@ generic.c: # 14| r14_1(glval) = VariableAddress[i] : # 14| m14_2(int) = Uninitialized[i] : &:r14_1 # 16| r16_1(glval) = VariableAddress[#return] : -# 16| r16_2(glval) = StringConstant[int] : +# 16| r16_2(glval) = Constant[int] : # 16| r16_3(char *) = Convert : r16_2 # 16| r16_4(char *) = Convert : r16_3 # 16| m16_5(char *) = Store[#return] : &:r16_1, r16_4 @@ -3009,7 +3009,7 @@ generic.c: # 21| r21_1(glval) = VariableAddress[i] : # 21| m21_2(int) = Uninitialized[i] : &:r21_1 # 23| r23_1(glval) = VariableAddress[#return] : -# 23| r23_2(glval) = StringConstant["int"] : +# 23| r23_2(glval) = Constant[int] : # 23| r23_3(char *) = Convert : r23_2 # 23| r23_4(char *) = Convert : r23_3 # 23| m23_5(char *) = Store[#return] : &:r23_1, r23_4 diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 01ebe0219f9..ab1336a268a 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2763,7 +2763,7 @@ generic.c: # 14| r14_1(glval) = VariableAddress[i] : # 14| mu14_2(int) = Uninitialized[i] : &:r14_1 # 16| r16_1(glval) = VariableAddress[#return] : -# 16| r16_2(glval) = StringConstant[int] : +# 16| r16_2(glval) = Constant[int] : # 16| r16_3(char *) = Convert : r16_2 # 16| r16_4(char *) = Convert : r16_3 # 16| mu16_5(char *) = Store[#return] : &:r16_1, r16_4 @@ -2780,7 +2780,7 @@ generic.c: # 21| r21_1(glval) = VariableAddress[i] : # 21| mu21_2(int) = Uninitialized[i] : &:r21_1 # 23| r23_1(glval) = VariableAddress[#return] : -# 23| r23_2(glval) = StringConstant["int"] : +# 23| r23_2(glval) = Constant[int] : # 23| r23_3(char *) = Convert : r23_2 # 23| r23_4(char *) = Convert : r23_3 # 23| mu23_5(char *) = Store[#return] : &:r23_1, r23_4 From 5360192a581d056e5a17f775917fc711bd1aadb1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 30 Aug 2024 13:25:59 +0100 Subject: [PATCH 249/334] Apply review suggestions - change = to in Co-authored-by: Rasmus Wriedt Larsen --- .../python/security/dataflow/CleartextLoggingCustomizations.qll | 2 +- .../python/security/dataflow/CleartextStorageCustomizations.qll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll index d794b024996..857cd81a330 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll @@ -41,7 +41,7 @@ module CleartextLogging { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() = + not SensitiveDataSource.super.getClassification() in [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] } diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll index ebe70bc1b59..e3a698bfd82 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll @@ -40,7 +40,7 @@ module CleartextStorage { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() = + not SensitiveDataSource.super.getClassification() in [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] } From ec7ad84cd14ee604a529e1ccf53fea90fab4a2b5 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 30 Aug 2024 13:51:33 +0100 Subject: [PATCH 250/334] Update formatting --- .../security/dataflow/CleartextLoggingCustomizations.qll | 5 +++-- .../security/dataflow/CleartextStorageCustomizations.qll | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll index 857cd81a330..c00106a1260 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextLoggingCustomizations.qll @@ -41,8 +41,9 @@ module CleartextLogging { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() in - [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] + not SensitiveDataSource.super.getClassification() in [ + SensitiveDataClassification::id(), SensitiveDataClassification::certificate() + ] } override SensitiveDataClassification getClassification() { diff --git a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll index e3a698bfd82..70a17acbe9a 100644 --- a/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/CleartextStorageCustomizations.qll @@ -40,8 +40,9 @@ module CleartextStorage { */ class SensitiveDataSourceAsSource extends Source, SensitiveDataSource { SensitiveDataSourceAsSource() { - not SensitiveDataSource.super.getClassification() in - [SensitiveDataClassification::id(), SensitiveDataClassification::certificate()] + not SensitiveDataSource.super.getClassification() in [ + SensitiveDataClassification::id(), SensitiveDataClassification::certificate() + ] } override SensitiveDataClassification getClassification() { From 0d343c5ce10971a3207cad5e7e2ac37fa401898c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 2 Sep 2024 11:10:46 +0200 Subject: [PATCH 251/334] C#: Add external flow tests for synthetic fields. --- .../dataflow/external-models/ExternalFlow.cs | 38 +++++++++++++++++++ .../external-models/ExternalFlow.expected | 8 ++++ .../external-models/ExternalFlow.ext.yml | 7 ++++ 3 files changed, 53 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs index 1090b61a884..aa26a5d4305 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs @@ -291,4 +291,42 @@ namespace My.Qltest static void Sink(object o) { } } + + // Test synthetic fields + public class K { + + public object MyField; + + public void SetMySyntheticField(object o) => throw null; + + public object GetMySyntheticField() => throw null; + + public void SetMyNestedSyntheticField(object o) => throw null; + + public object GetMyNestedSyntheticField() => throw null; + + public void SetMyFieldOnSyntheticField(object o) => throw null; + + public object GetMyFieldOnSyntheticField() => throw null; + + public void M1() { + var o = new object(); + SetMySyntheticField(o); + Sink(GetMySyntheticField()); + } + + public void M2() { + var o = new object(); + SetMyNestedSyntheticField(o); + Sink(GetMyNestedSyntheticField()); + } + + public void M3() { + var o = new object(); + SetMyFieldOnSyntheticField(o); + Sink(GetMyFieldOnSyntheticField()); + } + + static void Sink(object o) { } + } } diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index cad976516b3..10695e0c53e 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -243,6 +243,14 @@ nodes subpaths | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:35:84:35 | o : Object | ExternalFlow.cs:84:40:84:40 | access to parameter o : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | invalidModelRow +| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField1]" in summary model. | +| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField2]" in summary model. | +| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField]" in summary model. | +| Unrecognized input specification "SyntheticField[MySyntheticField1.MyNestedSyntheticField]" in summary model. | +| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField1]" in summary model. | +| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField2]" in summary model. | +| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField]" in summary model. | +| Unrecognized output specification "SyntheticField[MySyntheticField1.MyNestedSyntheticField]" in summary model. | #select | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | $@ | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | $@ | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | object creation of type Object : Object | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml index 6c877d06161..f2cf9972a73 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml @@ -37,6 +37,13 @@ extensions: - ["My.Qltest", "J", false, "SetProp1", "(System.Object)", "", "Argument[0]", "Argument[this]", "value", "manual"] - ["My.Qltest", "J", false, "get_Prop2", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["My.Qltest", "J", false, "SetProp2", "(System.Object)", "", "Argument[0]", "Argument[this]", "value", "manual"] + - ["My.Qltest", "K", false, "SetMySyntheticField", "(System.Object)", "", "Argument[0]", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField]", "value", "manual"] + - ["My.Qltest", "K", false, "GetMySyntheticField", "()", "", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField]", "ReturnValue", "value", "manual"] + - ["My.Qltest", "K", false, "SetMyNestedSyntheticField", "(System.Object)", "", "Argument[0]", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField1].SyntheticField[MySyntheticField1.MyNestedSyntheticField]", "value", "manual"] + - ["My.Qltest", "K", false, "GetMyNestedSyntheticField", "()", "", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField1].SyntheticField[MySyntheticField1.MyNestedSyntheticField]", "ReturnValue", "value", "manual"] + - ["My.Qltest", "K", false, "SetMyFieldOnSyntheticField", "(System.Object)", "", "Argument[0]", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField2].Field[My.Qltest.K.MyField]", "value", "manual"] + - ["My.Qltest", "K", false, "GetMyFieldOnSyntheticField", "()", "", "Argument[this].SyntheticField[My.Qltest.K.MySyntheticField2].Field[My.Qltest.K.MyField]", "ReturnValue", "value", "manual"] + - addsTo: pack: codeql/csharp-all extensible: neutralModel From 6e81d7455875471607a09d63e65fd10946583683 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 2 Sep 2024 11:07:11 +0200 Subject: [PATCH 252/334] C#: Add support for synthetic fields in MaD for C#. --- .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 1 + .../code/csharp/dataflow/internal/ExternalFlow.qll | 11 +++++++++++ 2 files changed, 12 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 7253d0581a5..1394f238de7 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -3075,6 +3075,7 @@ ContentApprox getContentApprox(Content c) { * ensuring that they are visible to the taint tracking / data flow library. */ private module SyntheticFields { + private import semmle.code.csharp.dataflow.internal.ExternalFlow private import semmle.code.csharp.frameworks.system.threading.Tasks private import semmle.code.csharp.frameworks.system.runtime.CompilerServices } 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 f1c299c2f25..c2d3da0607a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -431,6 +431,17 @@ Declaration interpretElement( ) } +private predicate parseSynthField(AccessPathToken c, string name) { + c.getName() = "SyntheticField" and name = c.getAnArgument() +} + +/** + * An adapter class for adding synthetic fields from MaD. + */ +private class SyntheticFieldAdapter extends SyntheticField { + SyntheticFieldAdapter() { parseSynthField(_, this) } +} + cached private module Cached { /** From 4f4c7bfbb9524d32e3c5952df6712067f686fc18 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 2 Sep 2024 11:11:55 +0200 Subject: [PATCH 253/334] C#: Update expected test output. --- .../external-models/ExternalFlow.expected | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index 10695e0c53e..0b80a70fbad 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -24,6 +24,12 @@ models | 23 | Summary: My.Qltest; I; false; GetFirst; (My.Qltest.MyInlineArray); ; Argument[0].Element; ReturnValue; value; manual | | 24 | Summary: My.Qltest; J; false; get_Prop1; (); ; Argument[this]; ReturnValue; value; manual | | 25 | Summary: My.Qltest; J; false; SetProp1; (System.Object); ; Argument[0]; Argument[this]; value; manual | +| 26 | Summary: My.Qltest; K; false; SetMySyntheticField; (System.Object); ; Argument[0]; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField]; value; manual | +| 27 | Summary: My.Qltest; K; false; GetMySyntheticField; (); ; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField]; ReturnValue; value; manual | +| 28 | Summary: My.Qltest; K; false; SetMyNestedSyntheticField; (System.Object); ; Argument[0]; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField1].SyntheticField[MySyntheticField1.MyNestedSyntheticField]; value; manual | +| 29 | Summary: My.Qltest; K; false; GetMyNestedSyntheticField; (); ; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField1].SyntheticField[MySyntheticField1.MyNestedSyntheticField]; ReturnValue; value; manual | +| 30 | Summary: My.Qltest; K; false; SetMyFieldOnSyntheticField; (System.Object); ; Argument[0]; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField2].Field[My.Qltest.K.MyField]; value; manual | +| 31 | Summary: My.Qltest; K; false; GetMyFieldOnSyntheticField; (); ; Argument[this].SyntheticField[My.Qltest.K.MySyntheticField2].Field[My.Qltest.K.MyField]; ReturnValue; value; manual | edges | ExternalFlow.cs:9:20:9:23 | access to local variable arg1 : Object | ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | provenance | | | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:9:20:9:23 | access to local variable arg1 : Object | provenance | | @@ -121,6 +127,21 @@ edges | ExternalFlow.cs:279:13:279:23 | [post] this access : J | ExternalFlow.cs:281:18:281:21 | this access : J | provenance | | | ExternalFlow.cs:279:22:279:22 | access to local variable j : Object | ExternalFlow.cs:279:13:279:23 | [post] this access : J | provenance | MaD:25 | | ExternalFlow.cs:281:18:281:21 | this access : J | ExternalFlow.cs:281:18:281:27 | access to property Prop1 | provenance | MaD:24 | +| ExternalFlow.cs:313:17:313:17 | access to local variable o : Object | ExternalFlow.cs:314:33:314:33 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:313:21:313:32 | object creation of type Object : Object | ExternalFlow.cs:313:17:313:17 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:314:13:314:34 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | ExternalFlow.cs:315:18:315:38 | this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | provenance | | +| ExternalFlow.cs:314:33:314:33 | access to local variable o : Object | ExternalFlow.cs:314:13:314:34 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | provenance | MaD:26 | +| ExternalFlow.cs:315:18:315:38 | this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | ExternalFlow.cs:315:18:315:38 | call to method GetMySyntheticField | provenance | MaD:27 | +| ExternalFlow.cs:319:17:319:17 | access to local variable o : Object | ExternalFlow.cs:320:39:320:39 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:319:21:319:32 | object creation of type Object : Object | ExternalFlow.cs:319:17:319:17 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:320:13:320:40 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | ExternalFlow.cs:321:18:321:44 | this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | provenance | | +| ExternalFlow.cs:320:39:320:39 | access to local variable o : Object | ExternalFlow.cs:320:13:320:40 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | provenance | MaD:28 | +| ExternalFlow.cs:321:18:321:44 | this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | ExternalFlow.cs:321:18:321:44 | call to method GetMyNestedSyntheticField | provenance | MaD:29 | +| ExternalFlow.cs:325:17:325:17 | access to local variable o : Object | ExternalFlow.cs:326:40:326:40 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:325:21:325:32 | object creation of type Object : Object | ExternalFlow.cs:325:17:325:17 | access to local variable o : Object | provenance | | +| ExternalFlow.cs:326:13:326:41 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | ExternalFlow.cs:327:18:327:45 | this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | provenance | | +| ExternalFlow.cs:326:40:326:40 | access to local variable o : Object | ExternalFlow.cs:326:13:326:41 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | provenance | MaD:30 | +| ExternalFlow.cs:327:18:327:45 | this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | ExternalFlow.cs:327:18:327:45 | call to method GetMyFieldOnSyntheticField | provenance | MaD:31 | nodes | ExternalFlow.cs:9:20:9:23 | access to local variable arg1 : Object | semmle.label | access to local variable arg1 : Object | | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | @@ -240,17 +261,27 @@ nodes | ExternalFlow.cs:279:22:279:22 | access to local variable j : Object | semmle.label | access to local variable j : Object | | ExternalFlow.cs:281:18:281:21 | this access : J | semmle.label | this access : J | | ExternalFlow.cs:281:18:281:27 | access to property Prop1 | semmle.label | access to property Prop1 | +| ExternalFlow.cs:313:17:313:17 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:313:21:313:32 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | +| ExternalFlow.cs:314:13:314:34 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | semmle.label | [post] this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | +| ExternalFlow.cs:314:33:314:33 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:315:18:315:38 | call to method GetMySyntheticField | semmle.label | call to method GetMySyntheticField | +| ExternalFlow.cs:315:18:315:38 | this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | semmle.label | this access : K [synthetic My.Qltest.K.MySyntheticField] : Object | +| ExternalFlow.cs:319:17:319:17 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:319:21:319:32 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | +| ExternalFlow.cs:320:13:320:40 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | semmle.label | [post] this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | +| ExternalFlow.cs:320:39:320:39 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:321:18:321:44 | call to method GetMyNestedSyntheticField | semmle.label | call to method GetMyNestedSyntheticField | +| ExternalFlow.cs:321:18:321:44 | this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | semmle.label | this access : K [synthetic My.Qltest.K.MySyntheticField1, synthetic MySyntheticField1.MyNestedSyntheticField] : Object | +| ExternalFlow.cs:325:17:325:17 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:325:21:325:32 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | +| ExternalFlow.cs:326:13:326:41 | [post] this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | semmle.label | [post] this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | +| ExternalFlow.cs:326:40:326:40 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| ExternalFlow.cs:327:18:327:45 | call to method GetMyFieldOnSyntheticField | semmle.label | call to method GetMyFieldOnSyntheticField | +| ExternalFlow.cs:327:18:327:45 | this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | semmle.label | this access : K [synthetic My.Qltest.K.MySyntheticField2, field MyField] : Object | subpaths | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:35:84:35 | o : Object | ExternalFlow.cs:84:40:84:40 | access to parameter o : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | invalidModelRow -| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField1]" in summary model. | -| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField2]" in summary model. | -| Unrecognized input specification "SyntheticField[My.Qltest.K.MySyntheticField]" in summary model. | -| Unrecognized input specification "SyntheticField[MySyntheticField1.MyNestedSyntheticField]" in summary model. | -| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField1]" in summary model. | -| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField2]" in summary model. | -| Unrecognized output specification "SyntheticField[My.Qltest.K.MySyntheticField]" in summary model. | -| Unrecognized output specification "SyntheticField[MySyntheticField1.MyNestedSyntheticField]" in summary model. | #select | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | $@ | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | $@ | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | object creation of type Object : Object | @@ -277,3 +308,6 @@ invalidModelRow | ExternalFlow.cs:240:18:240:18 | access to local variable o | ExternalFlow.cs:238:21:238:28 | object creation of type HC : HC | ExternalFlow.cs:240:18:240:18 | access to local variable o | $@ | ExternalFlow.cs:238:21:238:28 | object creation of type HC : HC | object creation of type HC : HC | | ExternalFlow.cs:258:18:258:18 | access to local variable b | ExternalFlow.cs:256:20:256:31 | object creation of type Object : Object | ExternalFlow.cs:258:18:258:18 | access to local variable b | $@ | ExternalFlow.cs:256:20:256:31 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:281:18:281:27 | access to property Prop1 | ExternalFlow.cs:278:21:278:32 | object creation of type Object : Object | ExternalFlow.cs:281:18:281:27 | access to property Prop1 | $@ | ExternalFlow.cs:278:21:278:32 | object creation of type Object : Object | object creation of type Object : Object | +| ExternalFlow.cs:315:18:315:38 | call to method GetMySyntheticField | ExternalFlow.cs:313:21:313:32 | object creation of type Object : Object | ExternalFlow.cs:315:18:315:38 | call to method GetMySyntheticField | $@ | ExternalFlow.cs:313:21:313:32 | object creation of type Object : Object | object creation of type Object : Object | +| ExternalFlow.cs:321:18:321:44 | call to method GetMyNestedSyntheticField | ExternalFlow.cs:319:21:319:32 | object creation of type Object : Object | ExternalFlow.cs:321:18:321:44 | call to method GetMyNestedSyntheticField | $@ | ExternalFlow.cs:319:21:319:32 | object creation of type Object : Object | object creation of type Object : Object | +| ExternalFlow.cs:327:18:327:45 | call to method GetMyFieldOnSyntheticField | ExternalFlow.cs:325:21:325:32 | object creation of type Object : Object | ExternalFlow.cs:327:18:327:45 | call to method GetMyFieldOnSyntheticField | $@ | ExternalFlow.cs:325:21:325:32 | object creation of type Object : Object | object creation of type Object : Object | From 660869e8344ad77c40c22ec9ac84c1d1b29d9b22 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 2 Sep 2024 13:25:02 +0200 Subject: [PATCH 254/334] C++: Add test for cpp/uninitialized-local and va_copy --- .../semmle/tests/UninitializedLocal.expected | 44 +++++++++---------- .../CWE/CWE-457/semmle/tests/test.cpp | 18 +++++--- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected index d27b2c996b3..a8b3c7782e7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected @@ -2,28 +2,28 @@ edges nodes | test.cpp:11:6:11:8 | definition of foo | semmle.label | definition of foo | | test.cpp:111:6:111:8 | definition of foo | semmle.label | definition of foo | -| test.cpp:218:7:218:7 | definition of x | semmle.label | definition of x | -| test.cpp:241:6:241:6 | definition of i | semmle.label | definition of i | -| test.cpp:333:7:333:7 | definition of a | semmle.label | definition of a | -| test.cpp:358:7:358:7 | definition of a | semmle.label | definition of a | -| test.cpp:359:6:359:8 | definition of val | semmle.label | definition of val | -| test.cpp:414:9:414:9 | definition of j | semmle.label | definition of j | -| test.cpp:431:9:431:9 | definition of j | semmle.label | definition of j | -| test.cpp:452:6:452:6 | definition of x | semmle.label | definition of x | -| test.cpp:458:6:458:6 | definition of x | semmle.label | definition of x | -| test.cpp:464:6:464:6 | definition of x | semmle.label | definition of x | -| test.cpp:471:6:471:6 | definition of x | semmle.label | definition of x | +| test.cpp:226:7:226:7 | definition of x | semmle.label | definition of x | +| test.cpp:249:6:249:6 | definition of i | semmle.label | definition of i | +| test.cpp:341:7:341:7 | definition of a | semmle.label | definition of a | +| test.cpp:366:7:366:7 | definition of a | semmle.label | definition of a | +| test.cpp:367:6:367:8 | definition of val | semmle.label | definition of val | +| test.cpp:422:9:422:9 | definition of j | semmle.label | definition of j | +| test.cpp:439:9:439:9 | definition of j | semmle.label | definition of j | +| test.cpp:460:6:460:6 | definition of x | semmle.label | definition of x | +| test.cpp:466:6:466:6 | definition of x | semmle.label | definition of x | +| test.cpp:472:6:472:6 | definition of x | semmle.label | definition of x | +| test.cpp:479:6:479:6 | definition of x | semmle.label | definition of x | #select | test.cpp:12:6:12:8 | foo | test.cpp:11:6:11:8 | definition of foo | test.cpp:11:6:11:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:11:6:11:8 | foo | foo | | test.cpp:113:6:113:8 | foo | test.cpp:111:6:111:8 | definition of foo | test.cpp:111:6:111:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:111:6:111:8 | foo | foo | -| test.cpp:219:3:219:3 | x | test.cpp:218:7:218:7 | definition of x | test.cpp:218:7:218:7 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:218:7:218:7 | x | x | -| test.cpp:243:13:243:13 | i | test.cpp:241:6:241:6 | definition of i | test.cpp:241:6:241:6 | definition of i | The variable $@ may not be initialized at this access. | test.cpp:241:6:241:6 | i | i | -| test.cpp:336:10:336:10 | a | test.cpp:333:7:333:7 | definition of a | test.cpp:333:7:333:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:333:7:333:7 | a | a | -| test.cpp:369:10:369:10 | a | test.cpp:358:7:358:7 | definition of a | test.cpp:358:7:358:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:358:7:358:7 | a | a | -| test.cpp:378:9:378:11 | val | test.cpp:359:6:359:8 | definition of val | test.cpp:359:6:359:8 | definition of val | The variable $@ may not be initialized at this access. | test.cpp:359:6:359:8 | val | val | -| test.cpp:417:10:417:10 | j | test.cpp:414:9:414:9 | definition of j | test.cpp:414:9:414:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:414:9:414:9 | j | j | -| test.cpp:436:9:436:9 | j | test.cpp:431:9:431:9 | definition of j | test.cpp:431:9:431:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:431:9:431:9 | j | j | -| test.cpp:454:2:454:2 | x | test.cpp:452:6:452:6 | definition of x | test.cpp:452:6:452:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:452:6:452:6 | x | x | -| test.cpp:460:7:460:7 | x | test.cpp:458:6:458:6 | definition of x | test.cpp:458:6:458:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:458:6:458:6 | x | x | -| test.cpp:467:2:467:2 | x | test.cpp:464:6:464:6 | definition of x | test.cpp:464:6:464:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:464:6:464:6 | x | x | -| test.cpp:474:7:474:7 | x | test.cpp:471:6:471:6 | definition of x | test.cpp:471:6:471:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:471:6:471:6 | x | x | +| test.cpp:227:3:227:3 | x | test.cpp:226:7:226:7 | definition of x | test.cpp:226:7:226:7 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:226:7:226:7 | x | x | +| test.cpp:251:13:251:13 | i | test.cpp:249:6:249:6 | definition of i | test.cpp:249:6:249:6 | definition of i | The variable $@ may not be initialized at this access. | test.cpp:249:6:249:6 | i | i | +| test.cpp:344:10:344:10 | a | test.cpp:341:7:341:7 | definition of a | test.cpp:341:7:341:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:341:7:341:7 | a | a | +| test.cpp:377:10:377:10 | a | test.cpp:366:7:366:7 | definition of a | test.cpp:366:7:366:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:366:7:366:7 | a | a | +| test.cpp:386:9:386:11 | val | test.cpp:367:6:367:8 | definition of val | test.cpp:367:6:367:8 | definition of val | The variable $@ may not be initialized at this access. | test.cpp:367:6:367:8 | val | val | +| test.cpp:425:10:425:10 | j | test.cpp:422:9:422:9 | definition of j | test.cpp:422:9:422:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:422:9:422:9 | j | j | +| test.cpp:444:9:444:9 | j | test.cpp:439:9:439:9 | definition of j | test.cpp:439:9:439:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:439:9:439:9 | j | j | +| test.cpp:462:2:462:2 | x | test.cpp:460:6:460:6 | definition of x | test.cpp:460:6:460:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:460:6:460:6 | x | x | +| test.cpp:468:7:468:7 | x | test.cpp:466:6:466:6 | definition of x | test.cpp:466:6:466:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:466:6:466:6 | x | x | +| test.cpp:475:2:475:2 | x | test.cpp:472:6:472:6 | definition of x | test.cpp:472:6:472:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:472:6:472:6 | x | x | +| test.cpp:482:7:482:7 | x | test.cpp:479:6:479:6 | definition of x | test.cpp:479:6:479:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:479:6:479:6 | x | x | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp index eab71b1aec5..14c00675545 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp @@ -156,11 +156,12 @@ int absCorrect2(int i) { return j; // correct: j always initialized before use } +typedef __builtin_va_list va_list; +#define va_start(v, l) __builtin_va_start(v,l) +#define va_end(v) __builtin_va_end(v) +#define va_arg(v, l) __builtin_va_arg(v,l) +#define va_copy(d, s) __builtin_va_copy(d,s) -typedef void *va_list; -#define va_start(ap, parmN) -#define va_end(ap) -#define va_arg(ap, type) ((type)0) #define NULL 0 // Variadic initialisation @@ -176,7 +177,7 @@ void init(int val, ...) { void test15() { int foo; init(42, &foo, NULL); - use(foo); //GOOD -- initialised by `init` + use(foo); // GOOD -- initialised by `init` } // Variadic non-initialisation @@ -192,6 +193,13 @@ void test16() { use(foo); // BAD (NOT REPORTED) } +void test_va_copy(va_list va) { + va_list va2; + va_copy(va2, va); // GOOD -- this is an initialization + use(va2); + va_end(va2); +} + bool test17(bool b) { int foo; int *p = nullptr; From 1057bb443faff1c151789d2effeaf980b2c2d45d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 2 Sep 2024 16:10:34 +0200 Subject: [PATCH 255/334] Data flow: Simplify `FwdFlowIn` interface --- .../codeql/dataflow/internal/DataFlowImpl.qll | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 86bdd2d105d..b003d3caf06 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -545,6 +545,8 @@ module MakeImpl Lang> { private module Stage1 implements StageSig { class Ap = Unit; + class ApNil = Ap; + private class Cc = boolean; /* Begin: Stage 1 logic. */ @@ -1297,6 +1299,8 @@ module MakeImpl Lang> { private signature module StageSig { class Ap; + class ApNil extends Ap; + predicate revFlow(NodeEx node); predicate revFlowAp(NodeEx node, Ap ap); @@ -1723,6 +1727,8 @@ module MakeImpl Lang> { DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp ); + private signature predicate flowThroughSig(); + /** * Exposes the inlined predicate `fwdFlowIn`, which is used to calculate both * flow in and flow through. @@ -1731,10 +1737,10 @@ module MakeImpl Lang> { * need to record the argument that flows into the parameter. * * For flow through, we do need to record the argument, however, we can restrict - * this to arguments that may actually flow through, using `callRestrictionSig`, + * this to arguments that may actually flow through, using `flowThroughSig`, * which reduces the argument-to-parameter fan-in significantly. */ - private module FwdFlowIn { + private module FwdFlowIn { pragma[nomagic] private predicate callEdgeArgParamRestricted( DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp, @@ -1742,11 +1748,27 @@ module MakeImpl Lang> { ) { exists(boolean allowsFieldFlow | PrevStage::callEdgeArgParam(call, c, arg, p, allowsFieldFlow, apa) and - callRestriction(call, c, p, apa, emptyAp) + if emptyAp = true then apa instanceof PrevStage::ApNil else any() | - allowsFieldFlow = true - or - emptyAp = true + if + PrevStage::callMayFlowThroughRev(call) and + PrevStage::parameterMayFlowThrough(p, apa) + then + emptyAp = true and + flowThrough() + or + emptyAp = false and + allowsFieldFlow = true and + if allowsFieldFlowThrough(call, c) then flowThrough() else not flowThrough() + else ( + not flowThrough() and + ( + emptyAp = true + or + emptyAp = false and + allowsFieldFlow = true + ) + ) ) } @@ -1876,21 +1898,9 @@ module MakeImpl Lang> { } } - bindingset[call, c, p, apa] - private predicate callRestrictionNoFlowThrough( - DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp - ) { - ( - if - PrevStage::callMayFlowThroughRev(call) and - PrevStage::parameterMayFlowThrough(p, apa) - then not allowsFieldFlowThrough(call, c) and emptyAp = false - else emptyAp = [false, true] - ) and - exists(c) - } + private predicate bottom() { none() } - private module FwdFlowInNoThrough = FwdFlowIn; + private module FwdFlowInNoThrough = FwdFlowIn; pragma[nomagic] private predicate fwdFlowInNoFlowThrough( @@ -1899,21 +1909,9 @@ module MakeImpl Lang> { FwdFlowInNoThrough::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, apa, _) } - bindingset[call, c, p, apa] - private predicate callRestrictionFlowThrough( - DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp - ) { - PrevStage::callMayFlowThroughRev(call) and - PrevStage::parameterMayFlowThrough(p, apa) and - ( - emptyAp = true - or - allowsFieldFlowThrough(call, c) and - emptyAp = false - ) - } + private predicate top() { any() } - private module FwdFlowInThrough = FwdFlowIn; + private module FwdFlowInThrough = FwdFlowIn; pragma[nomagic] private predicate fwdFlowInFlowThrough( From ae7bf6c97dffe6e414cd17c0874c42d83c989477 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 2 Sep 2024 21:17:55 +0200 Subject: [PATCH 256/334] C++: Update expected test results after #17347 --- .../semmle/tests/LoopConditionsConst.expected | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/LoopConditionsConst.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/LoopConditionsConst.expected index f0ada1ce16a..b3a0f5f2388 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/LoopConditionsConst.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/LoopConditionsConst.expected @@ -2,25 +2,25 @@ | test.cpp:43:2:45:2 | for(...;...;...) ... | test.cpp:43:18:43:26 | ... < ... | | i | { ... } | i | ExprStmt | | test.cpp:74:2:77:2 | while (...) ... | test.cpp:74:9:74:17 | ... > ... | 1 | count | { ... } | count | ExprStmt | | test.cpp:84:2:88:2 | while (...) ... | test.cpp:84:9:84:17 | ... > ... | | count | { ... } | count | if (...) ... | -| test.cpp:171:3:173:3 | while (...) ... | test.cpp:171:10:171:43 | ... != ... | 0 | | { ... } | 0 | return ... | -| test.cpp:251:2:255:2 | while (...) ... | test.cpp:251:9:251:12 | loop | 1 | loop | { ... } | loop | return ... | -| test.cpp:263:2:267:2 | while (...) ... | test.cpp:263:9:263:20 | ... && ... | 1 | 1 | { ... } | ... && ... | return ... | -| test.cpp:275:2:279:2 | while (...) ... | test.cpp:275:9:275:13 | ! ... | 1 | stop | { ... } | stop | return ... | -| test.cpp:287:2:291:2 | while (...) ... | test.cpp:287:9:287:20 | ... && ... | 1 | loop | { ... } | loop | return ... | -| test.cpp:299:2:303:2 | while (...) ... | test.cpp:299:9:299:20 | ... && ... | 1 | loop | { ... } | ... && ..., loop | return ... | -| test.cpp:311:2:315:2 | while (...) ... | test.cpp:311:9:311:21 | ... \|\| ... | 1 | ... \|\| ... | { ... } | 0 | return ... | -| test.cpp:323:2:328:2 | while (...) ... | test.cpp:323:9:323:17 | ... ? ... : ... | | b, c | { ... } | c | return ... | -| test.cpp:336:2:341:2 | while (...) ... | test.cpp:336:9:336:21 | ... \|\| ... | 1 | b, c | { ... } | c | return ... | -| test.cpp:348:2:351:17 | do (...) ... | test.cpp:351:11:351:15 | 0 | | { ... } | { ... } | { ... } | return ... | -| test.cpp:361:2:364:2 | while (...) ... | test.cpp:361:9:361:21 | ... \|\| ... | 1 | ... \|\| ... | { ... } | 0 | while (...) ... | -| test.cpp:365:2:368:2 | while (...) ... | test.cpp:365:9:365:13 | ! ... | 1 | stop | { ... } | stop | while (...) ... | -| test.cpp:369:2:373:2 | while (...) ... | test.cpp:369:9:369:21 | ... \|\| ... | 1 | b, c | { ... } | c | do (...) ... | -| test.cpp:374:2:376:17 | do (...) ... | test.cpp:376:11:376:15 | 0 | | do (...) ... | { ... } | { ... } | return ... | -| test.cpp:384:2:386:2 | while (...) ... | test.cpp:384:9:384:12 | 1 | 1 | 1 | { ... } | | return ... | -| test.cpp:394:2:396:2 | while (...) ... | test.cpp:394:9:394:21 | ... , ... | | { ... } | { ... } | | | -| test.cpp:404:3:408:3 | while (...) ... | test.cpp:404:10:404:13 | loop | 1 | loop | { ... } | | | -| test.cpp:416:2:418:2 | for(...;...;...) ... | test.cpp:416:18:416:23 | ... < ... | 1 | i | { ... } | i | return ... | -| test.cpp:424:2:425:2 | for(...;...;...) ... | test.cpp:424:18:424:23 | ... < ... | 1 | i | { ... } | i | return ... | -| test.cpp:433:2:434:2 | for(...;...;...) ... | test.cpp:433:18:433:22 | 0 | 0 | | { ... } | 0 | return ... | -| test.cpp:559:3:564:3 | while (...) ... | test.cpp:559:9:559:15 | call to getBool | | call to getBool | { ... } | call to getBool | ExprStmt | -| test.cpp:574:3:579:3 | while (...) ... | test.cpp:574:10:574:16 | call to getBool | | call to getBool | { ... } | call to getBool | ExprStmt | +| test.cpp:172:3:174:3 | while (...) ... | test.cpp:172:10:172:43 | ... != ... | | args | { ... } | args | return ... | +| test.cpp:259:2:263:2 | while (...) ... | test.cpp:259:9:259:12 | loop | 1 | loop | { ... } | loop | return ... | +| test.cpp:271:2:275:2 | while (...) ... | test.cpp:271:9:271:20 | ... && ... | 1 | 1 | { ... } | ... && ... | return ... | +| test.cpp:283:2:287:2 | while (...) ... | test.cpp:283:9:283:13 | ! ... | 1 | stop | { ... } | stop | return ... | +| test.cpp:295:2:299:2 | while (...) ... | test.cpp:295:9:295:20 | ... && ... | 1 | loop | { ... } | loop | return ... | +| test.cpp:307:2:311:2 | while (...) ... | test.cpp:307:9:307:20 | ... && ... | 1 | loop | { ... } | ... && ..., loop | return ... | +| test.cpp:319:2:323:2 | while (...) ... | test.cpp:319:9:319:21 | ... \|\| ... | 1 | ... \|\| ... | { ... } | 0 | return ... | +| test.cpp:331:2:336:2 | while (...) ... | test.cpp:331:9:331:17 | ... ? ... : ... | | b, c | { ... } | c | return ... | +| test.cpp:344:2:349:2 | while (...) ... | test.cpp:344:9:344:21 | ... \|\| ... | 1 | b, c | { ... } | c | return ... | +| test.cpp:356:2:359:17 | do (...) ... | test.cpp:359:11:359:15 | 0 | | { ... } | { ... } | { ... } | return ... | +| test.cpp:369:2:372:2 | while (...) ... | test.cpp:369:9:369:21 | ... \|\| ... | 1 | ... \|\| ... | { ... } | 0 | while (...) ... | +| test.cpp:373:2:376:2 | while (...) ... | test.cpp:373:9:373:13 | ! ... | 1 | stop | { ... } | stop | while (...) ... | +| test.cpp:377:2:381:2 | while (...) ... | test.cpp:377:9:377:21 | ... \|\| ... | 1 | b, c | { ... } | c | do (...) ... | +| test.cpp:382:2:384:17 | do (...) ... | test.cpp:384:11:384:15 | 0 | | do (...) ... | { ... } | { ... } | return ... | +| test.cpp:392:2:394:2 | while (...) ... | test.cpp:392:9:392:12 | 1 | 1 | 1 | { ... } | | return ... | +| test.cpp:402:2:404:2 | while (...) ... | test.cpp:402:9:402:21 | ... , ... | | { ... } | { ... } | | | +| test.cpp:412:3:416:3 | while (...) ... | test.cpp:412:10:412:13 | loop | 1 | loop | { ... } | | | +| test.cpp:424:2:426:2 | for(...;...;...) ... | test.cpp:424:18:424:23 | ... < ... | 1 | i | { ... } | i | return ... | +| test.cpp:432:2:433:2 | for(...;...;...) ... | test.cpp:432:18:432:23 | ... < ... | 1 | i | { ... } | i | return ... | +| test.cpp:441:2:442:2 | for(...;...;...) ... | test.cpp:441:18:441:22 | 0 | 0 | | { ... } | 0 | return ... | +| test.cpp:567:3:572:3 | while (...) ... | test.cpp:567:9:567:15 | call to getBool | | call to getBool | { ... } | call to getBool | ExprStmt | +| test.cpp:582:3:587:3 | while (...) ... | test.cpp:582:10:582:16 | call to getBool | | call to getBool | { ... } | call to getBool | ExprStmt | From f86570f6e7fe55d0a497eb4d935de7c05b85d6e2 Mon Sep 17 00:00:00 2001 From: Porcupiney Hairs Date: Mon, 24 Jun 2024 03:40:15 +0530 Subject: [PATCH 257/334] WIP: Python: CORS Bypass This PR adds a query to detect a Cross Origin Resource Sharing(CORS) policy bypass due to an incorrect check. This PR attempts to detect the vulnerability pattern found in CVE-2022-3457 ```python if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']: origin = request.headers.get('Origin', None) if origin and not origin.startswith(request.base): raise cherrypy.HTTPError(403, 'Unexpected Origin header') ``` In this case, a value obtained from a header is compared using `startswith` call. This comparision is easily bypassed resulting in a CORS bypass. Given that similar bugs have been found in other languages as well, I think this PR would be a great addition to the exisitng python query pack. The databases for CVE-2022-3457 can be downloaded from ``` https://filetransfer.io/data-package/i4Mfepls#link https://file.io/V67T4SSgmExF ``` --- .../experimental/Security/CWE-346/CorsBad.py | 9 ++ .../Security/CWE-346/CorsBypass.qhelp | 28 ++++++ .../Security/CWE-346/CorsBypass.ql | 97 +++++++++++++++++++ .../experimental/Security/CWE-346/CorsGood.py | 9 ++ .../query-tests/Security/CWE-346/Cors.py | 17 ++++ .../Security/CWE-346/CorsBypass.expected | 13 +++ .../Security/CWE-346/CorsBypass.qlref | 1 + 7 files changed, 174 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-346/CorsBad.py create mode 100644 python/ql/src/experimental/Security/CWE-346/CorsBypass.qhelp create mode 100644 python/ql/src/experimental/Security/CWE-346/CorsBypass.ql create mode 100644 python/ql/src/experimental/Security/CWE-346/CorsGood.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-346/Cors.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.qlref diff --git a/python/ql/src/experimental/Security/CWE-346/CorsBad.py b/python/ql/src/experimental/Security/CWE-346/CorsBad.py new file mode 100644 index 00000000000..74bd721b8ca --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-346/CorsBad.py @@ -0,0 +1,9 @@ +import cherrypy + +def bad(): + request = cherrypy.request + validCors = "domain.com" + if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']: + origin = request.headers.get('Origin', None) + if origin.startswith(validCors): + print("Origin Valid") \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-346/CorsBypass.qhelp b/python/ql/src/experimental/Security/CWE-346/CorsBypass.qhelp new file mode 100644 index 00000000000..5082fcc23aa --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-346/CorsBypass.qhelp @@ -0,0 +1,28 @@ + + + +

    Cross-origin resource sharing policy may be bypassed due to incorrect checks like the string.startswith call.

    +
    + +

    Use a more stronger check to test for CORS policy bypass.

    +
    + + +

    Most Python frameworks provide a mechanism for testing origins and performing CORS checks. + For example, consider the code snippet below, origin is compared using a + startswith call against a list of whitelisted origins. This check can be bypassed + easily by origin like domain.com.baddomain.com +

    + +

    This can be prevented by comparing the origin in a manner shown below. +

    + + +
    + + +
  • PortsSwigger : Cross-origin resource + sharing (CORS)
  • +
  • Related CVE: CVE-2022-3457.
  • +
    +
    \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-346/CorsBypass.ql b/python/ql/src/experimental/Security/CWE-346/CorsBypass.ql new file mode 100644 index 00000000000..4b79b97ff4a --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-346/CorsBypass.ql @@ -0,0 +1,97 @@ +/** + * @name Cross Origin Resource Sharing(CORS) Policy Bypass + * @description Checking user supplied origin headers using weak comparators like 'string.startswith' may lead to CORS policy bypass. + * @kind path-problem + * @problem.severity warning + * @id py/cors-bypass + * @tags security + * externa/cwe/CWE-346 + */ + +import python +import semmle.python.ApiGraphs +import semmle.python.dataflow.new.TaintTracking +import semmle.python.Flow +import semmle.python.dataflow.new.RemoteFlowSources + +/** + * Returns true if the control flow node may be useful in the current context. + * + * Ideally for more completeness, we should alert on every `startswith` call and every remote flow source which gets partailly checked. But, as this can lead to lots of FPs, we apply heuristics to filter some calls. This predicate provides logic for this filteration. + */ +private predicate maybeInteresting(ControlFlowNode c) { + // Check if the name of the variable which calls the function matches the heuristic. + // This would typically occur at the sink. + // This should deal with cases like + // `origin.startswith("bla")` + heuristics(c.(CallNode).getFunction().(AttrNode).getObject().(NameNode).getId()) + or + // Check if the name of the variable passed as an argument to the functions matches the heuristic. This would typically occur at the sink. + // This should deal with cases like + // `bla.startswith(origin)` + heuristics(c.(CallNode).getArg(0).(NameNode).getId()) + or + // Check if the value gets written to any interesting variable. This would typically occur at the source. + // This should deal with cases like + // `origin = request.headers.get('My-custom-header')` + exists(Variable v | heuristics(v.getId()) | c.getASuccessor*().getNode() = v.getAStore()) +} + +private class StringStartswithCall extends ControlFlowNode { + StringStartswithCall() { this.(CallNode).getFunction().(AttrNode).getName() = "startswith" } +} + +bindingset[s] +predicate heuristics(string s) { s.matches(["%origin%", "%cors%"]) } + +/** + * A member of the `cherrypy.request` class taken as a `RemoteFlowSource`. + */ +class CherryPyRequest extends RemoteFlowSource::Range { + CherryPyRequest() { + this = + API::moduleImport("cherrypy") + .getMember("request") + .getMember([ + "charset", "content_type", "filename", "fp", "name", "params", "headers", "length", + ]) + .asSource() + } + + override string getSourceType() { result = "cherrypy.request" } +} + +module CorsBypassConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node instanceof RemoteFlowSource } + + predicate isSink(DataFlow::Node node) { + exists(StringStartswithCall s | + node.asCfgNode() = s.(CallNode).getArg(0) or + node.asCfgNode() = s.(CallNode).getFunction().(AttrNode).getObject() + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(API::CallNode c, API::Node n | + n = API::moduleImport("cherrypy").getMember("request").getMember("headers") and + c = n.getMember("get").getACall() + | + c.getReturn().asSource() = node2 and n.asSource() = node1 + ) + } +} + +module CorsFlow = TaintTracking::Global; + +import CorsFlow::PathGraph + +from CorsFlow::PathNode source, CorsFlow::PathNode sink +where + CorsFlow::flowPath(source, sink) and + ( + maybeInteresting(source.getNode().asCfgNode()) + or + maybeInteresting(sink.getNode().asCfgNode()) + ) +select sink, source, sink, + "Potentially incorrect string comparison which could lead to a CORS bypass." diff --git a/python/ql/src/experimental/Security/CWE-346/CorsGood.py b/python/ql/src/experimental/Security/CWE-346/CorsGood.py new file mode 100644 index 00000000000..7cd4039c0c3 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-346/CorsGood.py @@ -0,0 +1,9 @@ +import cherrypy + +def good(): + request = cherrypy.request + validOrigin = "domain.com" + if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']: + origin = request.headers.get('Origin', None) + if origin == validOrigin: + print("Origin Valid") \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-346/Cors.py b/python/ql/test/experimental/query-tests/Security/CWE-346/Cors.py new file mode 100644 index 00000000000..cc12e1273fb --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-346/Cors.py @@ -0,0 +1,17 @@ +import cherrypy + +def bad(): + request = cherrypy.request + validCors = "domain.com" + if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']: + origin = request.headers.get('Origin', None) + if origin.startswith(validCors): + print("Origin Valid") + +def good(): + request = cherrypy.request + validOrigin = "domain.com" + if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']: + origin = request.headers.get('Origin', None) + if origin == validOrigin: + print("Origin Valid") \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.expected b/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.expected new file mode 100644 index 00000000000..32d807c6f6e --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.expected @@ -0,0 +1,13 @@ +edges +| Cors.py:7:9:7:14 | ControlFlowNode for origin | Cors.py:8:12:8:17 | ControlFlowNode for origin | provenance | | +| Cors.py:7:18:7:32 | ControlFlowNode for Attribute | Cors.py:7:18:7:52 | ControlFlowNode for Attribute() | provenance | Config | +| Cors.py:7:18:7:32 | ControlFlowNode for Attribute | Cors.py:7:18:7:52 | ControlFlowNode for Attribute() | provenance | dict.get | +| Cors.py:7:18:7:52 | ControlFlowNode for Attribute() | Cors.py:7:9:7:14 | ControlFlowNode for origin | provenance | | +nodes +| Cors.py:7:9:7:14 | ControlFlowNode for origin | semmle.label | ControlFlowNode for origin | +| Cors.py:7:18:7:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| Cors.py:7:18:7:52 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| Cors.py:8:12:8:17 | ControlFlowNode for origin | semmle.label | ControlFlowNode for origin | +subpaths +#select +| Cors.py:8:12:8:17 | ControlFlowNode for origin | Cors.py:7:18:7:32 | ControlFlowNode for Attribute | Cors.py:8:12:8:17 | ControlFlowNode for origin | Potentially incorrect string comparison which could lead to a CORS bypass. | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.qlref b/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.qlref new file mode 100644 index 00000000000..b652fd93088 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-346/CorsBypass.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-346/CorsBypass.ql \ No newline at end of file From 89e842b1475017da104eb3c5d7684138313132b6 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:12:13 +0200 Subject: [PATCH 258/334] finilize tests for zlib --- .../CWE/CWE-409/DecompressionBombs.ql | 2 +- .../Security/CWE/CWE-409/ZlibUncompress.qll | 2 +- .../Security/CWE/CWE-409/zlibTest.cpp | 24 ++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 05f39c47e13..659e92d8498 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -22,7 +22,7 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(FunctionCall fc, DecompressionFunction f | fc.getTarget() = f | - fc.getArgument(f.getArchiveParameterIndex()) = sink.asExpr() + fc.getArgument(f.getArchiveParameterIndex()) = [sink.asExpr(), sink.asIndirectExpr()] ) } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll index f69c71ec01c..60943495d45 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll @@ -13,5 +13,5 @@ import DecompressionBomb class UncompressFunction extends DecompressionFunction { UncompressFunction() { this.hasGlobalName(["uncompress", "uncompress2"]) } - override int getArchiveParameterIndex() { result = 0 } + override int getArchiveParameterIndex() { result = 2 } } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp index 07805f6c83f..9e23944e7ce 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp @@ -1,4 +1,3 @@ - #define Z_NULL 0 # define FAR typedef unsigned char Byte; @@ -145,9 +144,32 @@ int UnsafeGzgets(char *fileName) { return 0; } +typedef unsigned long uLong; +typedef long unsigned int size_t; +typedef uLong uLongf; +typedef unsigned char Bytef; +#define Z_OK 0 + +int uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen) { return 0; } + +bool InflateString(const unsigned char *input, const unsigned char *output, size_t output_length) { + uLong source_length; + source_length = (uLong) 500; + uLong destination_length; + destination_length = (uLong) output_length; + + int result = uncompress((Bytef *) output, &destination_length, + (Bytef *) input, source_length); + + return result == Z_OK; +} + int main(int argc, char **argv) { UnsafeGzfread(argv[2]); UnsafeGzgets(argv[2]); UnsafeInflate(argv[2]); UnsafeGzread(argv[2]); + const unsigned char *output; + InflateString(reinterpret_cast(argv[1]), output, 1024 * 1024 * 1024); } From 8c1c5371507ff5de495fc6252bfd652c8a4a219a Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:12:54 +0200 Subject: [PATCH 259/334] finilize tests for zlib --- .../CWE/CWE-409/DecompressionBombs.ql | 2 +- .../Security/CWE/CWE-409/ZlibUncompress.qll | 2 +- .../CWE/CWE-409/DecompressionBombs.expected | 93 +++++++++++++++++++ .../Security/CWE/CWE-409/zlibTest.cpp | 24 ++++- 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 05f39c47e13..659e92d8498 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -22,7 +22,7 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(FunctionCall fc, DecompressionFunction f | fc.getTarget() = f | - fc.getArgument(f.getArchiveParameterIndex()) = sink.asExpr() + fc.getArgument(f.getArchiveParameterIndex()) = [sink.asExpr(), sink.asIndirectExpr()] ) } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll index f69c71ec01c..60943495d45 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll @@ -13,5 +13,5 @@ import DecompressionBomb class UncompressFunction extends DecompressionFunction { UncompressFunction() { this.hasGlobalName(["uncompress", "uncompress2"]) } - override int getArchiveParameterIndex() { result = 0 } + override int getArchiveParameterIndex() { result = 2 } } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected new file mode 100644 index 00000000000..5354096aab6 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected @@ -0,0 +1,93 @@ +edges +| zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:63:25:63:35 | *a | provenance | | +| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:52:25:52:25 | *a | provenance | | +| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:69:17:69:26 | & ... | provenance | Config | +| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:70:13:70:22 | & ... | provenance | Config | +| zlibTest.cpp:69:17:69:26 | & ... | zlibTest.cpp:70:13:70:22 | & ... | provenance | | +| zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:94:29:94:36 | *fileName | provenance | | +| zlibTest.cpp:94:22:94:27 | call to gzopen | zlibTest.cpp:94:22:94:27 | call to gzopen | provenance | | +| zlibTest.cpp:94:22:94:27 | call to gzopen | zlibTest.cpp:101:32:101:38 | inFileZ | provenance | | +| zlibTest.cpp:94:29:94:36 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | provenance | | +| zlibTest.cpp:94:29:94:36 | *fileName | zlibTest.cpp:94:22:94:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:115:29:115:36 | *fileName | provenance | | +| zlibTest.cpp:115:22:115:27 | call to gzopen | zlibTest.cpp:115:22:115:27 | call to gzopen | provenance | | +| zlibTest.cpp:115:22:115:27 | call to gzopen | zlibTest.cpp:121:38:121:44 | inFileZ | provenance | | +| zlibTest.cpp:115:29:115:36 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | +| zlibTest.cpp:115:29:115:36 | *fileName | zlibTest.cpp:115:22:115:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:132:29:132:36 | *fileName | provenance | | +| zlibTest.cpp:132:22:132:27 | call to gzopen | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | | +| zlibTest.cpp:132:22:132:27 | call to gzopen | zlibTest.cpp:139:25:139:31 | inFileZ | provenance | | +| zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | +| zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:156:41:156:45 | *input | zlibTest.cpp:163:29:163:43 | *input | provenance | | +| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | +| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | +| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | +| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | provenance | | +| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | +| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | +| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | provenance | | +| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | provenance | | +| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | provenance | | +| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | provenance | | +| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | provenance | | +| zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | +nodes +| zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | +| zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | +| zlibTest.cpp:63:25:63:35 | *a | semmle.label | *a | +| zlibTest.cpp:69:17:69:26 | & ... | semmle.label | & ... | +| zlibTest.cpp:70:13:70:22 | & ... | semmle.label | & ... | +| zlibTest.cpp:93:24:93:31 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:93:24:93:31 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:94:22:94:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:94:22:94:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:94:29:94:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:101:32:101:38 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:114:25:114:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:114:25:114:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:115:22:115:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:115:22:115:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:115:29:115:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:121:38:121:44 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:131:24:131:31 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:131:24:131:31 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:132:22:132:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:132:22:132:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:132:29:132:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:139:25:139:31 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:156:41:156:45 | *input | semmle.label | *input | +| zlibTest.cpp:163:29:163:43 | *input | semmle.label | *input | +| zlibTest.cpp:168:27:168:30 | **argv | semmle.label | **argv | +| zlibTest.cpp:169:19:169:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | +| zlibTest.cpp:170:18:170:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | semmle.label | UnsafeGzgets output argument | +| zlibTest.cpp:171:19:171:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | semmle.label | UnsafeInflate output argument | +| zlibTest.cpp:172:18:172:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | +| zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | +subpaths +| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | +| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | +| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | +| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | +#select +| zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | +| zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | +| zlibTest.cpp:121:38:121:44 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | +| zlibTest.cpp:139:25:139:31 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:139:25:139:31 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | +| zlibTest.cpp:163:29:163:43 | *input | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:163:29:163:43 | *input | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp index 07805f6c83f..9e23944e7ce 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp @@ -1,4 +1,3 @@ - #define Z_NULL 0 # define FAR typedef unsigned char Byte; @@ -145,9 +144,32 @@ int UnsafeGzgets(char *fileName) { return 0; } +typedef unsigned long uLong; +typedef long unsigned int size_t; +typedef uLong uLongf; +typedef unsigned char Bytef; +#define Z_OK 0 + +int uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen) { return 0; } + +bool InflateString(const unsigned char *input, const unsigned char *output, size_t output_length) { + uLong source_length; + source_length = (uLong) 500; + uLong destination_length; + destination_length = (uLong) output_length; + + int result = uncompress((Bytef *) output, &destination_length, + (Bytef *) input, source_length); + + return result == Z_OK; +} + int main(int argc, char **argv) { UnsafeGzfread(argv[2]); UnsafeGzgets(argv[2]); UnsafeInflate(argv[2]); UnsafeGzread(argv[2]); + const unsigned char *output; + InflateString(reinterpret_cast(argv[1]), output, 1024 * 1024 * 1024); } From 4bdf21b02266484e6703e8ca3629d388627d0bd4 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 23 Aug 2024 10:08:15 +0200 Subject: [PATCH 260/334] Java: Add Content Flow module. --- .../semmle/code/java/dataflow/internal/ContentDataFlow.qll | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll new file mode 100644 index 00000000000..2c9b1217044 --- /dev/null +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll @@ -0,0 +1,7 @@ +private import java +private import DataFlowImplSpecific +private import codeql.dataflow.internal.ContentDataFlowImpl + +module ContentDataFlow { + import MakeImplContentDataFlow +} From 6365e5edff613e3269df4ce1b2cc6c22f9c19988 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 26 Aug 2024 14:58:56 +0200 Subject: [PATCH 261/334] Java: Initial implementation of content based model generation. --- .../CaptureContentSummaryModels.ql | 13 ++ .../modelgenerator/internal/CaptureModels.qll | 113 ++++++++++++++++-- .../internal/CaptureModelsSpecific.qll | 54 +++++++++ .../mad/modelgenerator/ModelPrinting.qll | 12 ++ 4 files changed, 183 insertions(+), 9 deletions(-) create mode 100644 java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql diff --git a/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql b/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql new file mode 100644 index 00000000000..0a2f5185533 --- /dev/null +++ b/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql @@ -0,0 +1,13 @@ +/** + * @name Capture field based summary models. + * @description Finds applicable field based summary models to be used by other queries. + * @kind diagnostic + * @id java/utils/modelgenerator/fieldbased-summary-models + * @tags modelgenerator + */ + +import internal.CaptureModels + +from DataFlowSummaryTargetApi api, string flow +where flow = captureContentFlow(api) +select flow order by flow diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 6fe39c78453..d476376d3cc 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -18,17 +18,35 @@ private class ReturnNodeExt extends DataFlow::Node { kind = DataFlowImplCommon::getParamReturnPosition(this, _).getKind() } - string getOutput() { - kind instanceof DataFlowImplCommon::ValueReturnKind and + /** + * Gets the kind of the return node. + */ + DataFlowImplCommon::ReturnKindExt getKind() { result = kind } +} + +bindingset[c] +private signature string printCallableParamSig(Callable c, ParameterPosition p); + +private module PrintReturnNodeExt { + string getOutput(ReturnNodeExt node) { + node.getKind() instanceof DataFlowImplCommon::ValueReturnKind and result = "ReturnValue" or exists(ParameterPosition pos | - pos = kind.(DataFlowImplCommon::ParamUpdateReturnKind).getPosition() and - result = paramReturnNodeAsOutput(returnNodeEnclosingCallable(this), pos) + pos = node.getKind().(DataFlowImplCommon::ParamUpdateReturnKind).getPosition() and + result = printCallableParam(returnNodeEnclosingCallable(node), pos) ) } } +string getOutput(ReturnNodeExt node) { + result = PrintReturnNodeExt::getOutput(node) +} + +string getContentOutput(ReturnNodeExt node) { + result = PrintReturnNodeExt::getOutput(node) +} + class DataFlowSummaryTargetApi extends SummaryTargetApi { DataFlowSummaryTargetApi() { not isUninterestingForDataFlowModels(this) } } @@ -71,7 +89,8 @@ private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2 * Holds if content `c` is either a field, a synthetic field or language specific * content of a relevant type or a container like content. */ -private predicate isRelevantContent(DataFlow::ContentSet c) { +pragma[nomagic] +private predicate isRelevantContent0(DataFlow::ContentSet c) { isRelevantTypeInContent(c) or containerContent(c) } @@ -85,6 +104,16 @@ string parameterNodeAsInput(DataFlow::ParameterNode p) { result = qualifierString() and p instanceof InstanceParameterNode } +/** + * Gets the MaD string representation of the parameter `p` + * when used in content flow. + */ +string parameterNodeAsContentInput(DataFlow::ParameterNode p) { + result = parameterContentAccess(p.asParameter()) + or + result = qualifierString() and p instanceof InstanceParameterNode +} + /** * Gets the MaD input string representation of `source`. */ @@ -170,7 +199,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { ) { exists(DataFlow::ContentSet c | DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and - isRelevantContent(c) and + isRelevantContent0(c) and ( state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 or @@ -180,7 +209,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { or exists(DataFlow::ContentSet c | DataFlowPrivate::readStep(node1, c, node2) and - isRelevantContent(c) and + isRelevantContent0(c) and state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() ) } @@ -196,6 +225,9 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { module PropagateFlow = TaintTracking::GlobalWithState; +/** + * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. + */ string captureThroughFlow0( DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt ) { @@ -203,7 +235,7 @@ string captureThroughFlow0( p.getEnclosingCallable() = api and returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and input = parameterNodeAsInput(p) and - output = returnNodeExt.getOutput() and + output = getOutput(returnNodeExt) and input != output and result = Printing::asTaintModel(api, input, output) ) @@ -219,6 +251,69 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) { ) } +private module PropagateContentFlowConfig implements ContentDataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof DataFlow::ParameterNode and + source.getEnclosingCallable() instanceof DataFlowSummaryTargetApi + } + + predicate isSink(DataFlow::Node sink) { + sink instanceof ReturnNodeExt and + sink.getEnclosingCallable() instanceof DataFlowSummaryTargetApi + } + + predicate isAdditionalFlowStep = isAdditionalContentFlowStep/2; + + predicate isBarrier(DataFlow::Node n) { + exists(Type t | t = n.getType() and not isRelevantType(t)) + } + + int accessPathLimit() { result = 2 } + + predicate isRelevantContent(DataFlow::ContentSet s) { isRelevantContent0(s) } + + DataFlow::FlowFeature getAFeature() { + result instanceof DataFlow::FeatureEqualSourceSinkCallContext + } +} + +private module PropagateContentFlow = ContentDataFlow::Global; + +private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { + not exists(ap.getHead()) and result = "" + or + exists(ContentSet head, PropagateContentFlow::AccessPath tail | + head = ap.getHead() and + tail = ap.getTail() and + result = "." + printContent(head) + printStoreAccessPath(tail) + ) +} + +private string printReadAccessPath(PropagateContentFlow::AccessPath ap) { + not exists(ap.getHead()) and result = "" + or + exists(ContentSet head, PropagateContentFlow::AccessPath tail | + head = ap.getHead() and + tail = ap.getTail() and + result = printReadAccessPath(tail) + "." + printContent(head) + ) +} + +string captureContentFlow(DataFlowSummaryTargetApi api) { + exists( + DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output, + PropagateContentFlow::AccessPath reads, PropagateContentFlow::AccessPath stores, + boolean preservesValue + | + PropagateContentFlow::flow(p, reads, returnNodeExt, stores, preservesValue) and + returnNodeExt.getEnclosingCallable() = api and + input = parameterNodeAsContentInput(p) + printReadAccessPath(reads) and + output = getContentOutput(returnNodeExt) + printStoreAccessPath(stores) and + input != output and + result = Printing::asModel(api, input, output, preservesValue) + ) +} + /** * A dataflow configuration used for finding new sources. * The sources are the already known existing sources and the sinks are the API return nodes. @@ -261,7 +356,7 @@ string captureSource(DataFlowSourceTargetApi api) { ExternalFlow::sourceNode(source, kind) and api = sink.getEnclosingCallable() and not irrelevantSourceSinkApi(source.getEnclosingCallable(), api) and - result = Printing::asSourceModel(api, sink.getOutput(), kind) + result = Printing::asSourceModel(api, getOutput(sink), kind) ) } diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index b881deb6e6a..2be162d5f9b 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -4,10 +4,12 @@ private import java as J private import semmle.code.java.dataflow.internal.DataFlowPrivate +private import semmle.code.java.dataflow.internal.DataFlowUtil as DataFlowUtil private import semmle.code.java.dataflow.internal.ContainerFlow as ContainerFlow private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.code.java.dataflow.internal.ModelExclusions private import semmle.code.java.dataflow.DataFlow as Df +private import semmle.code.java.dataflow.internal.ContentDataFlow as Cdf private import semmle.code.java.dataflow.SSA as Ssa private import semmle.code.java.dataflow.TaintTracking as Tt import semmle.code.java.dataflow.ExternalFlow as ExternalFlow @@ -17,6 +19,8 @@ import semmle.code.java.dataflow.internal.DataFlowDispatch as DataFlowDispatch module DataFlow = Df::DataFlow; +module ContentDataFlow = Cdf::ContentDataFlow; + module TaintTracking = Tt::TaintTracking; class Type = J::Type; @@ -25,6 +29,8 @@ class Unit = J::Unit; class Callable = J::Callable; +class ContentSet = DataFlowUtil::ContentSet; + private predicate isInfrequentlyUsed(J::CompilationUnit cu) { cu.getPackage().getName().matches("javax.swing%") or cu.getPackage().getName().matches("java.awt%") @@ -217,6 +223,12 @@ string parameterAccess(J::Parameter p) { else result = "Argument[" + p.getPosition() + "]" } +/** + * Gets the MaD string representation of the parameter `p` + * when used in content flow. + */ +string parameterContentAccess(J::Parameter p) { result = "Argument[" + p.getPosition() + "]" } + class InstanceParameterNode = DataFlow::InstanceParameterNode; class ParameterPosition = DataFlowDispatch::ParameterPosition; @@ -232,6 +244,17 @@ string paramReturnNodeAsOutput(Callable c, ParameterPosition pos) { result = qualifierString() and pos = -1 } +/** + * Gets the MaD string representation of return through parameter at position + * `pos` of callable `c` for content flow. + */ +bindingset[c] +string paramReturnNodeAsContentOutput(Callable c, ParameterPosition pos) { + result = parameterContentAccess(c.getParameter(pos)) + or + result = qualifierString() and pos = -1 +} + /** * Gets the enclosing callable of `ret`. */ @@ -305,3 +328,34 @@ bindingset[kind] predicate isRelevantSourceKind(string kind) { any() } predicate containerContent = DataFlowPrivate::containerContent/1; + +/** + * Holds if there is a taint step from `node1` to `node2` in content flow. + */ +predicate isAdditionalContentFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + TaintTracking::defaultAdditionalTaintStep(node1, node2, _) and + not exists(DataFlow::Content f | + DataFlowPrivate::readStep(node1, f, node2) and containerContent(f) + ) +} + +/** + * Gets the MaD string representation of the contentset `c`. + */ +string printContent(ContentSet c) { + exists(Field f, string name | + f = c.(DataFlowUtil::FieldContent).getField() and name = f.getQualifiedName() + | + if f.isPublic() then result = "Field[" + name + "]" else result = "SyntheticField[" + name + "]" + ) + or + result = "SyntheticField[" + c.(DataFlowUtil::SyntheticFieldContent).getField() + "]" + or + c instanceof DataFlowUtil::CollectionContent and result = "Element" + or + c instanceof DataFlowUtil::ArrayContent and result = "ArrayElement" + or + c instanceof DataFlowUtil::MapValueContent and result = "MapValue" + or + c instanceof DataFlowUtil::MapKeyContent and result = "MapKey" +} diff --git a/shared/mad/codeql/mad/modelgenerator/ModelPrinting.qll b/shared/mad/codeql/mad/modelgenerator/ModelPrinting.qll index 59d2b2216da..2867d927984 100644 --- a/shared/mad/codeql/mad/modelgenerator/ModelPrinting.qll +++ b/shared/mad/codeql/mad/modelgenerator/ModelPrinting.qll @@ -97,6 +97,18 @@ module ModelPrintingImpl { result = asSummaryModel(api, input, output, "taint") } + /** + * Gets the summary model for `api` with `input` and `output`. + */ + bindingset[input, output, preservesValue] + string asModel(Printing::SummaryApi api, string input, string output, boolean preservesValue) { + preservesValue = true and + result = asValueModel(api, input, output) + or + preservesValue = false and + result = asTaintModel(api, input, output) + } + /** * Gets the sink model for `api` with `input` and `kind`. */ From 07fcd81e7e46edd8744cb368866b3db04a34aaef Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 Sep 2024 10:13:09 +0200 Subject: [PATCH 262/334] Address review comments --- .../codeql/dataflow/internal/DataFlowImpl.qll | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index b003d3caf06..c8b56db0b34 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1722,11 +1722,6 @@ module MakeImpl Lang> { if ap instanceof ApNil then emptyAp = true else emptyAp = false } - bindingset[call, c, p, apa] - private signature predicate callRestrictionSig( - DataFlowCall call, DataFlowCallable c, ParamNodeEx p, ApApprox apa, boolean emptyAp - ); - private signature predicate flowThroughSig(); /** @@ -1737,8 +1732,8 @@ module MakeImpl Lang> { * need to record the argument that flows into the parameter. * * For flow through, we do need to record the argument, however, we can restrict - * this to arguments that may actually flow through, using `flowThroughSig`, - * which reduces the argument-to-parameter fan-in significantly. + * this to arguments that may actually flow through, which reduces the + * argument-to-parameter fan-in significantly. */ private module FwdFlowIn { pragma[nomagic] @@ -1747,14 +1742,14 @@ module MakeImpl Lang> { ApApprox apa ) { exists(boolean allowsFieldFlow | - PrevStage::callEdgeArgParam(call, c, arg, p, allowsFieldFlow, apa) and - if emptyAp = true then apa instanceof PrevStage::ApNil else any() + PrevStage::callEdgeArgParam(call, c, arg, p, allowsFieldFlow, apa) | if PrevStage::callMayFlowThroughRev(call) and PrevStage::parameterMayFlowThrough(p, apa) then emptyAp = true and + apa instanceof PrevStage::ApNil and flowThrough() or emptyAp = false and @@ -1763,7 +1758,8 @@ module MakeImpl Lang> { else ( not flowThrough() and ( - emptyAp = true + emptyAp = true and + apa instanceof PrevStage::ApNil or emptyAp = false and allowsFieldFlow = true From 59423c692f4f1d68a4e6d9d6b26c77dafa62b2b6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 3 Sep 2024 10:38:58 +0200 Subject: [PATCH 263/334] Swift: upgrade prebuilt toolchain to 5.10.1 --- swift/third_party/load.bzl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/swift/third_party/load.bzl b/swift/third_party/load.bzl index 8a16963f513..f9f46e5f410 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.10-RELEASE.322" +_swift_prebuilt_version = "swift-5.10.1-RELEASE.323" _swift_sha_map = { - "Linux-X64": "634497779e930a808489e5d472753b604c07085abf411356cae7921bde14130f", - "macOS-ARM64": "293df92da9a3cc79c595a28b1b4ec881a5fdb248ea7eac34c89943e94deff700", - "macOS-X64": "813c1746777701d30e716c130b0bb087a9c5b7ab025fd99afc695ec52cd432ad", + "Linux-X64": "29c7c53ab2f438e85daecdb4567173c78ac32afc45753d7277d744aed515229d", + "macOS-ARM64": "e697f423c8abcb8a942246489fd4f8ce71472119510b64b2073eaeaec86b771e", + "macOS-X64": "faef29334e8615e8a71263c7453ebc7e566d6f2928d827675f6faae233c544a6", } _swift_arch_map = { From 78068a488f6306eec0f358e178f6f7e2882d9307 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 3 Sep 2024 11:25:18 +0200 Subject: [PATCH 264/334] C++: Make realloc a data-flow function --- .../cpp/models/implementations/Allocation.qll | 6 +- .../dataflow/taint-tests/localTaint.expected | 71 ++++++++++--------- .../dataflow/taint-tests/taint.cpp | 9 +++ 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll index c07e840b811..df6d9491729 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll @@ -5,13 +5,13 @@ */ import semmle.code.cpp.models.interfaces.Allocation -import semmle.code.cpp.models.interfaces.Taint +import semmle.code.cpp.models.interfaces.DataFlow /** * An allocation function (such as `realloc`) that has an argument for the size * in bytes, and an argument for an existing pointer that is to be reallocated. */ -private class ReallocAllocationFunction extends AllocationFunction, TaintFunction { +private class ReallocAllocationFunction extends AllocationFunction, DataFlowFunction { int sizeArg; int reallocArg; @@ -44,7 +44,7 @@ private class ReallocAllocationFunction extends AllocationFunction, TaintFunctio override int getReallocPtrArg() { result = reallocArg } - override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input.isParameterDeref(this.getReallocPtrArg()) and output.isReturnValueDeref() } } 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 c6c5e86635d..b21e10ef25d 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6597,38 +6597,45 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | taint.cpp:729:27:729:32 | endptr | taint.cpp:729:26:729:32 | & ... | | | taint.cpp:731:7:731:12 | ref arg endptr | taint.cpp:732:8:732:13 | endptr | | | taint.cpp:732:8:732:13 | endptr | taint.cpp:732:7:732:13 | * ... | TAINT | -| taint.cpp:738:17:738:31 | call to indirect_source | taint.cpp:739:30:739:35 | source | | -| taint.cpp:739:22:739:28 | call to realloc | taint.cpp:740:7:740:10 | dest | | -| taint.cpp:739:30:739:35 | source | taint.cpp:739:22:739:28 | call to realloc | TAINT | -| taint.cpp:743:40:743:45 | buffer | taint.cpp:744:5:744:10 | buffer | | -| taint.cpp:743:40:743:45 | buffer | taint.cpp:745:27:745:32 | buffer | | -| taint.cpp:744:4:744:10 | * ... | taint.cpp:744:3:744:10 | * ... | TAINT | -| taint.cpp:744:5:744:10 | buffer | taint.cpp:744:4:744:10 | * ... | TAINT | -| taint.cpp:744:14:744:19 | call to source | taint.cpp:744:3:744:21 | ... = ... | | -| taint.cpp:745:19:745:25 | call to realloc | taint.cpp:743:40:743:45 | buffer | | -| taint.cpp:745:19:745:25 | call to realloc | taint.cpp:745:3:745:37 | ... = ... | | -| taint.cpp:745:19:745:25 | call to realloc | taint.cpp:746:10:746:15 | buffer | | -| taint.cpp:745:27:745:32 | buffer | taint.cpp:745:19:745:25 | call to realloc | TAINT | -| taint.cpp:746:9:746:15 | * ... | taint.cpp:746:8:746:15 | * ... | TAINT | -| taint.cpp:746:10:746:15 | buffer | taint.cpp:746:9:746:15 | * ... | TAINT | -| taint.cpp:751:31:751:34 | path | taint.cpp:751:31:751:34 | path | | -| taint.cpp:751:31:751:34 | path | taint.cpp:752:10:752:13 | path | | -| taint.cpp:751:31:751:34 | path | taint.cpp:753:10:753:13 | path | | -| taint.cpp:751:43:751:46 | data | taint.cpp:751:43:751:46 | data | | -| taint.cpp:751:43:751:46 | data | taint.cpp:753:22:753:25 | data | | -| taint.cpp:752:10:752:13 | ref arg path | taint.cpp:751:31:751:34 | path | | -| taint.cpp:752:10:752:13 | ref arg path | taint.cpp:753:10:753:13 | path | | -| taint.cpp:752:16:752:19 | %s | taint.cpp:752:10:752:13 | ref arg path | TAINT | -| taint.cpp:752:22:752:26 | abc | taint.cpp:752:10:752:13 | ref arg path | TAINT | -| taint.cpp:753:10:753:13 | ref arg path | taint.cpp:751:31:751:34 | path | | -| taint.cpp:753:16:753:19 | %s | taint.cpp:753:10:753:13 | ref arg path | TAINT | -| taint.cpp:753:22:753:25 | data | taint.cpp:753:10:753:13 | ref arg path | TAINT | -| taint.cpp:753:22:753:25 | ref arg data | taint.cpp:751:43:751:46 | data | | -| taint.cpp:757:7:757:10 | path | taint.cpp:758:21:758:24 | path | | -| 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 | | +| taint.cpp:739:17:739:31 | call to indirect_source | taint.cpp:740:30:740:35 | source | | +| taint.cpp:740:22:740:28 | call to realloc | taint.cpp:741:7:741:10 | dest | | +| taint.cpp:740:30:740:35 | source | taint.cpp:740:22:740:28 | call to realloc | TAINT | +| taint.cpp:744:40:744:45 | buffer | taint.cpp:745:5:745:10 | buffer | | +| taint.cpp:744:40:744:45 | buffer | taint.cpp:746:27:746:32 | buffer | | +| taint.cpp:745:4:745:10 | * ... | taint.cpp:745:3:745:10 | * ... | TAINT | +| taint.cpp:745:5:745:10 | buffer | taint.cpp:745:4:745:10 | * ... | TAINT | +| taint.cpp:745:14:745:19 | call to source | taint.cpp:745:3:745:21 | ... = ... | | +| taint.cpp:746:19:746:25 | call to realloc | taint.cpp:744:40:744:45 | buffer | | +| taint.cpp:746:19:746:25 | call to realloc | taint.cpp:746:3:746:37 | ... = ... | | +| taint.cpp:746:19:746:25 | call to realloc | taint.cpp:747:10:747:15 | buffer | | +| taint.cpp:746:27:746:32 | buffer | taint.cpp:746:19:746:25 | call to realloc | TAINT | +| taint.cpp:747:9:747:15 | * ... | taint.cpp:747:8:747:15 | * ... | TAINT | +| taint.cpp:747:10:747:15 | buffer | taint.cpp:747:9:747:15 | * ... | TAINT | +| taint.cpp:752:13:752:18 | call to malloc | taint.cpp:753:2:753:2 | a | | +| taint.cpp:752:13:752:18 | call to malloc | taint.cpp:754:22:754:22 | a | | +| taint.cpp:753:2:753:2 | a [post update] | taint.cpp:754:22:754:22 | a | | +| taint.cpp:753:2:753:16 | ... = ... | taint.cpp:753:5:753:5 | x [post update] | | +| taint.cpp:753:9:753:14 | call to source | taint.cpp:753:2:753:16 | ... = ... | | +| taint.cpp:754:14:754:20 | call to realloc | taint.cpp:755:7:755:8 | a2 | | +| taint.cpp:754:22:754:22 | a | taint.cpp:754:14:754:20 | call to realloc | TAINT | +| taint.cpp:760:31:760:34 | path | taint.cpp:760:31:760:34 | path | | +| taint.cpp:760:31:760:34 | path | taint.cpp:761:10:761:13 | path | | +| taint.cpp:760:31:760:34 | path | taint.cpp:762:10:762:13 | path | | +| taint.cpp:760:43:760:46 | data | taint.cpp:760:43:760:46 | data | | +| taint.cpp:760:43:760:46 | data | taint.cpp:762:22:762:25 | data | | +| taint.cpp:761:10:761:13 | ref arg path | taint.cpp:760:31:760:34 | path | | +| taint.cpp:761:10:761:13 | ref arg path | taint.cpp:762:10:762:13 | path | | +| taint.cpp:761:16:761:19 | %s | taint.cpp:761:10:761:13 | ref arg path | TAINT | +| taint.cpp:761:22:761:26 | abc | taint.cpp:761:10:761:13 | ref arg path | TAINT | +| taint.cpp:762:10:762:13 | ref arg path | taint.cpp:760:31:760:34 | path | | +| taint.cpp:762:16:762:19 | %s | taint.cpp:762:10:762:13 | ref arg path | TAINT | +| taint.cpp:762:22:762:25 | data | taint.cpp:762:10:762:13 | ref arg path | TAINT | +| taint.cpp:762:22:762:25 | ref arg data | taint.cpp:760:43:760:46 | data | | +| taint.cpp:766:7:766:10 | path | taint.cpp:767:21:767:24 | path | | +| taint.cpp:766:7:766:10 | path | taint.cpp:768:8:768:11 | path | | +| taint.cpp:767:21:767:24 | ref arg path | taint.cpp:768:8:768:11 | path | | +| taint.cpp:768:8:768:11 | path | taint.cpp:768:7:768:11 | * ... | | +| taint.cpp:778:37:778:42 | call to source | taint.cpp:779:7:779: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 8e6199d35bd..220265a3bb1 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -732,6 +732,7 @@ void test_strtol(char *source) { sink(*endptr); // $ ast,ir } +void *malloc(size_t); void *realloc(void *, size_t); void test_realloc() { @@ -746,6 +747,14 @@ void test_realloc_2_indirections(int **buffer) { sink(**buffer); // $ ir MISSING: ast } +void test_realloc_struct_field() { + struct A { int x; }; + A* a = (A*)malloc(sizeof(A)); + a->x = source(); + A* a2 = (A*)realloc(a, sizeof(A)); + sink(a2->x); // $ ir MISSING: ast +} + int sprintf(char *, const char *, ...); void call_sprintf_twice(char* path, char* data) { From e85ca79d770fbee433372c7bfd62d81879079171 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:28:06 +0200 Subject: [PATCH 265/334] add tests for brotli --- .../CWE/CWE-409/DecompressionBombs.expected | 7 ++++ .../Security/CWE/CWE-409/brotliTest.cpp | 41 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected index 5354096aab6..e17cd312ea2 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected @@ -1,4 +1,6 @@ edges +| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:63:25:63:35 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:52:25:52:25 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:69:17:69:26 | & ... | provenance | Config | @@ -45,6 +47,9 @@ edges | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | nodes +| brotliTest.cpp:29:32:29:35 | **argv | semmle.label | **argv | +| brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:63:25:63:35 | *a | semmle.label | *a | @@ -86,6 +91,8 @@ subpaths | zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | #select +| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:121:38:121:44 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp new file mode 100644 index 00000000000..34285afc464 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp @@ -0,0 +1,41 @@ +typedef long unsigned int size_t; +typedef unsigned char uint8_t; +typedef enum { +} BrotliDecoderResult; + +BrotliDecoderResult BrotliDecoderDecompress( + size_t encoded_size, + const uint8_t encoded_buffer[], + size_t *decoded_size, + uint8_t decoded_buffer[]) { return static_cast(0); }; + +struct { +} BrotliDecoderStateStruct; + +void strncpy(char *string, const char *string1, int i); + +typedef struct BrotliDecoderStateStruct BrotliDecoderState; + +BrotliDecoderResult BrotliDecoderDecompressStream( + BrotliDecoderState *state, size_t *available_in, const uint8_t **next_in, + size_t *available_out, uint8_t **next_out, size_t *total_out) { return static_cast(0); }; + +namespace std { + void strncpy(char *string, const char *string1, int i) { + + } +} + +int main(int argc, const char *argv[]) { + uint8_t *output = nullptr; + BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], + reinterpret_cast(1024 * 1024 * 1024), output); + uint8_t **output2 = nullptr; + const uint8_t **input2 = nullptr; + std::strncpy(reinterpret_cast(input2), argv[2], 32); + BrotliDecoderDecompressStream(0, reinterpret_cast(1024 * 1024), + input2, reinterpret_cast(1024 * 1024 * 1024), + output2, + reinterpret_cast(1024 * 1024 * 1024)); + return 0; +} From 5ddcb16cd6eb2c6f61797de86384cf3f50978f28 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 29 Aug 2024 14:43:14 +0200 Subject: [PATCH 266/334] Java: Add content based model generation test. --- .../modelgenerator/CaptureContentSummaryModels.ql | 6 +++--- .../dataflow/CaptureContentSummaryModels.expected | 2 ++ .../dataflow/CaptureContentSummaryModels.ql | 11 +++++++++++ .../test/utils/modelgenerator/dataflow/p/Factory.java | 5 ++++- .../utils/modelgenerator/dataflow/p/FinalClass.java | 1 + .../utils/modelgenerator/dataflow/p/FluentAPI.java | 1 + .../modelgenerator/dataflow/p/ImmutablePojo.java | 4 ++++ .../utils/modelgenerator/dataflow/p/Inheritance.java | 6 ++++++ .../utils/modelgenerator/dataflow/p/InnerClasses.java | 2 ++ .../utils/modelgenerator/dataflow/p/InnerHolder.java | 4 ++++ .../test/utils/modelgenerator/dataflow/p/Joiner.java | 11 +++++++++++ .../modelgenerator/dataflow/p/MultipleImpl2.java | 1 + .../modelgenerator/dataflow/p/MultipleImpls.java | 7 +++++++ .../utils/modelgenerator/dataflow/p/ParamFlow.java | 11 +++++++++++ .../ql/test/utils/modelgenerator/dataflow/p/Pojo.java | 9 ++++++++- .../dataflow/p/PrivateFlowViaPublicInterface.java | 6 ++++++ 16 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected create mode 100644 java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql diff --git a/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql b/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql index 0a2f5185533..e0e793348f5 100644 --- a/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql +++ b/java/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql @@ -1,8 +1,8 @@ /** - * @name Capture field based summary models. - * @description Finds applicable field based summary models to be used by other queries. + * @name Capture content based summary models. + * @description Finds applicable content based summary models to be used by other queries. * @kind diagnostic - * @id java/utils/modelgenerator/fieldbased-summary-models + * @id java/utils/modelgenerator/contentbased-summary-models * @tags modelgenerator */ diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected new file mode 100644 index 00000000000..cb6fc390349 --- /dev/null +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected @@ -0,0 +1,2 @@ +unexpectedModel +expectedModel diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql b/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql new file mode 100644 index 00000000000..3d2a2e07ac6 --- /dev/null +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql @@ -0,0 +1,11 @@ +import java +import utils.modelgenerator.internal.CaptureModels +import TestUtilities.InlineMadTest + +module InlineMadTestConfig implements InlineMadTestConfigSig { + string getCapturedModel(Callable c) { result = captureContentFlow(c) } + + string getKind() { result = "contentbased-summary" } +} + +import InlineMadTest diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/Factory.java b/java/ql/test/utils/modelgenerator/dataflow/p/Factory.java index 1887e0ca73e..23381486e5f 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/Factory.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/Factory.java @@ -2,16 +2,18 @@ package p; public final class Factory { - private String value; + public String value; private int intValue; // summary=p;Factory;false;create;(String,int);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Factory;false;create;(String,int);;Argument[0];ReturnValue.Field[p.Factory.value];value;df-generated public static Factory create(String value, int foo) { return new Factory(value, foo); } // summary=p;Factory;false;create;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Factory;false;create;(String);;Argument[0];ReturnValue.Field[p.Factory.value];value;df-generated public static Factory create(String value) { return new Factory(value, 0); } @@ -22,6 +24,7 @@ public final class Factory { } // summary=p;Factory;false;getValue;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Factory;false;getValue;();;Argument[this].Field[p.Factory.value];ReturnValue;value;df-generated public String getValue() { return value; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/FinalClass.java b/java/ql/test/utils/modelgenerator/dataflow/p/FinalClass.java index 2638f818854..b436a4ed650 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/FinalClass.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/FinalClass.java @@ -5,6 +5,7 @@ public final class FinalClass { private static final String C = "constant"; // summary=p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;value;df-generated public String returnsInput(String input) { return input; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/FluentAPI.java b/java/ql/test/utils/modelgenerator/dataflow/p/FluentAPI.java index b7793e30666..1799dc3ec4c 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/FluentAPI.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/FluentAPI.java @@ -3,6 +3,7 @@ package p; public final class FluentAPI { // summary=p;FluentAPI;false;returnsThis;(String);;Argument[this];ReturnValue;value;df-generated + // contentbased-summary=p;FluentAPI;false;returnsThis;(String);;Argument[this];ReturnValue;value;df-generated public FluentAPI returnsThis(String input) { return this; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/ImmutablePojo.java b/java/ql/test/utils/modelgenerator/dataflow/p/ImmutablePojo.java index 0a2cf2d7dbd..9d83f6bf842 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/ImmutablePojo.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/ImmutablePojo.java @@ -7,12 +7,14 @@ public final class ImmutablePojo { private final long x; // summary=p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[this].SyntheticField[p.ImmutablePojo.value];value;df-generated public ImmutablePojo(String value, int x) { this.value = value; this.x = x; } // summary=p;ImmutablePojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;ImmutablePojo;false;getValue;();;Argument[this].SyntheticField[p.ImmutablePojo.value];ReturnValue;value;df-generated public String getValue() { return value; } @@ -24,6 +26,8 @@ public final class ImmutablePojo { // summary=p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;taint;df-generated // summary=p;ImmutablePojo;false;or;(String);;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;value;df-generated + // contentbased-summary=p;ImmutablePojo;false;or;(String);;Argument[this].SyntheticField[p.ImmutablePojo.value];ReturnValue;value;df-generated public String or(String defaultValue) { return value != null ? value : defaultValue; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/Inheritance.java b/java/ql/test/utils/modelgenerator/dataflow/p/Inheritance.java index 8c083cd3972..d36cba1e099 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/Inheritance.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/Inheritance.java @@ -11,6 +11,7 @@ public class Inheritance { public class AImplBasePrivateImpl extends BasePrivate { // summary=p;Inheritance$AImplBasePrivateImpl;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$AImplBasePrivateImpl;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; @@ -19,6 +20,7 @@ public class Inheritance { public class AImplBasePublic extends BasePublic { // summary=p;Inheritance$BasePublic;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$BasePublic;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; @@ -59,6 +61,7 @@ public class Inheritance { public class BImpl extends B { // summary=p;Inheritance$IPublic1;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$IPublic1;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; @@ -67,6 +70,7 @@ public class Inheritance { public class CImpl extends C { // summary=p;Inheritance$C;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$C;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; @@ -75,6 +79,7 @@ public class Inheritance { public class DImpl extends D { // summary=p;Inheritance$IPublic2;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$IPublic2;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; @@ -83,6 +88,7 @@ public class Inheritance { public class EImpl extends E { // summary=p;Inheritance$EImpl;true;id;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;Inheritance$EImpl;true;id;(String);;Argument[0];ReturnValue;value;df-generated @Override public String id(String s) { return s; diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/InnerClasses.java b/java/ql/test/utils/modelgenerator/dataflow/p/InnerClasses.java index 5b6a8427a3f..8fef83143cb 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/InnerClasses.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/InnerClasses.java @@ -10,12 +10,14 @@ public class InnerClasses { public class CaptureMe { // summary=p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;value;df-generated public String yesCm(String input) { return input; } } // summary=p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;value;df-generated public String yes(String input) { return input; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/InnerHolder.java b/java/ql/test/utils/modelgenerator/dataflow/p/InnerHolder.java index e09680dad52..5e8a050a428 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/InnerHolder.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/InnerHolder.java @@ -19,21 +19,25 @@ public final class InnerHolder { private StringBuilder sb = new StringBuilder(); // summary=p;InnerHolder;false;setContext;(String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;InnerHolder;false;setContext;(String);;Argument[0];Argument[this].SyntheticField[p.InnerHolder.context].SyntheticField[p.InnerHolder$Context.value];value;df-generated public void setContext(String value) { context = new Context(value); } // summary=p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[this].SyntheticField[p.InnerHolder.context].SyntheticField[p.InnerHolder$Context.value];value;df-generated public void explicitSetContext(String value) { this.context = new Context(value); } // summary=p;InnerHolder;false;append;(String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;InnerHolder;false;append;(String);;Argument[0];Argument[this].SyntheticField[p.InnerHolder.sb];taint;df-generated public void append(String value) { sb.append(value); } // summary=p;InnerHolder;false;getValue;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;InnerHolder;false;getValue;();;Argument[this].SyntheticField[p.InnerHolder.context].SyntheticField[p.InnerHolder$Context.value];ReturnValue;value;df-generated public String getValue() { return context.getValue(); } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/Joiner.java b/java/ql/test/utils/modelgenerator/dataflow/p/Joiner.java index 10fc72c907f..cf7626eba61 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/Joiner.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/Joiner.java @@ -13,6 +13,7 @@ public final class Joiner { private String emptyValue; // summary=p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[this].SyntheticField[p.Joiner.delimiter];taint;df-generated public Joiner(CharSequence delimiter) { this(delimiter, "", ""); } @@ -20,6 +21,9 @@ public final class Joiner { // summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[this];taint;df-generated // summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[this];taint;df-generated // summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[this];taint;df-generated + // contentbased-summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[this].SyntheticField[p.Joiner.delimiter];taint;df-generated + // contentbased-summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[this].SyntheticField[p.Joiner.prefix];taint;df-generated + // contentbased-summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[this].SyntheticField[p.Joiner.suffix];taint;df-generated public Joiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) { Objects.requireNonNull(prefix, "The prefix must not be null"); Objects.requireNonNull(delimiter, "The delimiter must not be null"); @@ -32,6 +36,9 @@ public final class Joiner { // summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[this];taint;df-generated // summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[this];ReturnValue;value;df-generated + // contentbased-summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[this].SyntheticField[p.Joiner.emptyValue];taint;df-generated + // contentbased-summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];ReturnValue.SyntheticField[p.Joiner.emptyValue];taint;df-generated + // contentbased-summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[this];ReturnValue;value;df-generated public Joiner setEmptyValue(CharSequence emptyValue) { this.emptyValue = Objects.requireNonNull(emptyValue, "The empty value must not be null").toString(); @@ -71,6 +78,8 @@ public final class Joiner { } // summary=p;Joiner;false;add;(CharSequence);;Argument[this];ReturnValue;value;df-generated + // contentbased-summary=p;Joiner;false;add;(CharSequence);;Argument[this].SyntheticField[p.Joiner.elts].ArrayElement;ReturnValue.SyntheticField[p.Joiner.elts].ArrayElement;value;df-generated + // contentbased-summary=p;Joiner;false;add;(CharSequence);;Argument[this];ReturnValue;value;df-generated public Joiner add(CharSequence newElement) { final String elt = String.valueOf(newElement); if (elts == null) { @@ -94,6 +103,8 @@ public final class Joiner { } // summary=p;Joiner;false;merge;(Joiner);;Argument[this];ReturnValue;value;df-generated + // contentbased-summary=p;Joiner;false;merge;(Joiner);;Argument[this].SyntheticField[p.Joiner.elts].ArrayElement;ReturnValue.SyntheticField[p.Joiner.elts].ArrayElement;value;df-generated + // contentbased-summary=p;Joiner;false;merge;(Joiner);;Argument[this];ReturnValue;value;df-generated public Joiner merge(Joiner other) { Objects.requireNonNull(other); if (other.elts == null) { diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpl2.java b/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpl2.java index 3e5d9abd768..09984a4742f 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpl2.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpl2.java @@ -17,6 +17,7 @@ class MultipleImpl2 { public class Impl2 implements IInterface { // summary=p;MultipleImpl2$IInterface;true;m;(Object);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;MultipleImpl2$IInterface;true;m;(Object);;Argument[0];ReturnValue;value;df-generated public Object m(Object value) { return value; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpls.java b/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpls.java index 1bf73599588..164f55ae732 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpls.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/MultipleImpls.java @@ -10,6 +10,7 @@ public class MultipleImpls { public static class Strat1 implements Strategy { // summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;value;df-generated public String doSomething(String value) { return value; } @@ -29,12 +30,18 @@ public class MultipleImpls { private String foo; // summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[this];taint;df-generated + // A field based model should not be lifted if the field pertains to the concrete + // implementation. + // SPURIOUS-contentbased-summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[this].SyntheticField[p.MultipleImpls$Strat2.foo];value;df-generated public String doSomething(String value) { this.foo = value; return "none"; } // summary=p;MultipleImpls$Strat2;true;getValue;();;Argument[this];ReturnValue;taint;df-generated + // A field based model should not be lifted if the field pertains to the concrete + // implementation. + // SPURIOUS-contentbased-summary=p;MultipleImpls$Strat2;true;getValue;();;Argument[this].SyntheticField[p.MultipleImpls$Strat2.foo];ReturnValue;value;df-generated public String getValue() { return this.foo; } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/ParamFlow.java b/java/ql/test/utils/modelgenerator/dataflow/p/ParamFlow.java index d175ee9c71e..05614c392e4 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/ParamFlow.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/ParamFlow.java @@ -8,6 +8,7 @@ import java.util.List; public class ParamFlow { // summary=p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;value;df-generated public String returnsInput(String input) { return input; } @@ -19,6 +20,8 @@ public class ParamFlow { // summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;taint;df-generated // summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;value;df-generated + // contentbased-summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;value;df-generated public String returnMultipleParameters(String one, String two) { if (System.currentTimeMillis() > 100) { return two; @@ -27,26 +30,31 @@ public class ParamFlow { } // summary=p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;value;df-generated public String returnArrayElement(String[] input) { return input[0]; } // summary=p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;value;df-generated public String returnVarArgElement(String... input) { return input[0]; } // summary=p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;value;df-generated public String returnCollectionElement(List input) { return input.get(0); } // summary=p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;value;df-generated public String returnIteratorElement(Iterator input) { return input.next(); } // summary=p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;value;df-generated public String returnIterableElement(Iterable input) { return input.iterator().next(); } @@ -57,16 +65,19 @@ public class ParamFlow { } // summary=p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];taint;df-generated + // contentbased-summary=p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];taint;df-generated public void writeChunked(byte[] data, OutputStream output) throws IOException { output.write(data, 0, data.length); } // summary=p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];taint;df-generated + // contentbased-summary=p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];taint;df-generated public void writeChunked(char[] data, OutputStream output) throws IOException { output.write(String.valueOf(data).getBytes(), 0, data.length); } // summary=p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;taint;df-generated + // contentbased-summary=p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;value;df-generated public void addTo(String data, List target) { target.add(data); } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/Pojo.java b/java/ql/test/utils/modelgenerator/dataflow/p/Pojo.java index 9d5de0517e1..e6fb581aac2 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/Pojo.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/Pojo.java @@ -24,18 +24,20 @@ public final class Pojo { private int intValue = 2; - private byte[] byteArray = new byte[] {1, 2, 3}; + public byte[] byteArray = new byte[] {1, 2, 3}; private float[] floatArray = new float[] {1, 2, 3}; private char[] charArray = new char[] {'a', 'b', 'c'}; private List charList = Arrays.asList('a', 'b', 'c'); private Byte[] byteObjectArray = new Byte[] {1, 2, 3}; // summary=p;Pojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Pojo;false;getValue;();;Argument[this].SyntheticField[p.Pojo.value];ReturnValue;value;df-generated public String getValue() { return value; } // summary=p;Pojo;false;setValue;(String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=p;Pojo;false;setValue;(String);;Argument[0];Argument[this].SyntheticField[p.Pojo.value];value;df-generated public void setValue(String value) { this.value = value; } @@ -62,11 +64,13 @@ public final class Pojo { } // summary=p;Pojo;false;getCharArray;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Pojo;false;getCharArray;();;Argument[this].SyntheticField[p.Pojo.charArray];ReturnValue;value;df-generated public char[] getCharArray() { return charArray; } // summary=p;Pojo;false;getByteArray;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Pojo;false;getByteArray;();;Argument[this].Field[p.Pojo.byteArray];ReturnValue;value;df-generated public byte[] getByteArray() { return byteArray; } @@ -87,11 +91,13 @@ public final class Pojo { } // summary=p;Pojo;false;getBoxedChars;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Pojo;false;getBoxedChars;();;Argument[this].SyntheticField[p.Pojo.charList];ReturnValue;value;df-generated public List getBoxedChars() { return charList; } // summary=p;Pojo;false;getBoxedBytes;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=p;Pojo;false;getBoxedBytes;();;Argument[this].SyntheticField[p.Pojo.byteObjectArray];ReturnValue;value;df-generated public Byte[] getBoxedBytes() { return byteObjectArray; } @@ -107,6 +113,7 @@ public final class Pojo { } // summary=p;Pojo;false;fillIn;(List);;Argument[this];Argument[0].Element;taint;df-generated + // contentbased-summary=p;Pojo;false;fillIn;(List);;Argument[this].SyntheticField[p.Pojo.value];Argument[0].Element;value;df-generated public void fillIn(List target) { target.add(value); } diff --git a/java/ql/test/utils/modelgenerator/dataflow/p/PrivateFlowViaPublicInterface.java b/java/ql/test/utils/modelgenerator/dataflow/p/PrivateFlowViaPublicInterface.java index eeebabeb68c..b5a1de27d4a 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/p/PrivateFlowViaPublicInterface.java +++ b/java/ql/test/utils/modelgenerator/dataflow/p/PrivateFlowViaPublicInterface.java @@ -29,6 +29,9 @@ public class PrivateFlowViaPublicInterface { } // summary=p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated + // A field based model should not be lifted if the field pertains to the concrete + // implementation. + // SPURIOUS-contentbased-summary=p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this].SyntheticField[p.PrivateFlowViaPublicInterface$PrivateImplWithSink.file];ReturnValue;taint;df-generated @Override public OutputStream openStream() throws IOException { return new FileOutputStream(file); @@ -51,6 +54,9 @@ public class PrivateFlowViaPublicInterface { } // summary=p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint;df-generated + // A field based model should not be lifted if the field pertains to the concrete + // implementation. + // SPURIOUS-contentbased-summary=p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue.SyntheticField[p.PrivateFlowViaPublicInterface$PrivateImplWithSink.file];value;df-generated public static SPI createAnSPI(File file) { return new PrivateImplWithSink(file); } From 486246c82d825cb011bbb932f25d2eac7b2f39e0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 30 Aug 2024 14:03:45 +0200 Subject: [PATCH 267/334] C#: Sync changes and make C# implementation. --- .../modelgenerator/internal/CaptureModels.qll | 113 ++++++++++++++++-- .../internal/CaptureModelsSpecific.qll | 74 +++++++++++- 2 files changed, 174 insertions(+), 13 deletions(-) diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 6fe39c78453..d476376d3cc 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -18,17 +18,35 @@ private class ReturnNodeExt extends DataFlow::Node { kind = DataFlowImplCommon::getParamReturnPosition(this, _).getKind() } - string getOutput() { - kind instanceof DataFlowImplCommon::ValueReturnKind and + /** + * Gets the kind of the return node. + */ + DataFlowImplCommon::ReturnKindExt getKind() { result = kind } +} + +bindingset[c] +private signature string printCallableParamSig(Callable c, ParameterPosition p); + +private module PrintReturnNodeExt { + string getOutput(ReturnNodeExt node) { + node.getKind() instanceof DataFlowImplCommon::ValueReturnKind and result = "ReturnValue" or exists(ParameterPosition pos | - pos = kind.(DataFlowImplCommon::ParamUpdateReturnKind).getPosition() and - result = paramReturnNodeAsOutput(returnNodeEnclosingCallable(this), pos) + pos = node.getKind().(DataFlowImplCommon::ParamUpdateReturnKind).getPosition() and + result = printCallableParam(returnNodeEnclosingCallable(node), pos) ) } } +string getOutput(ReturnNodeExt node) { + result = PrintReturnNodeExt::getOutput(node) +} + +string getContentOutput(ReturnNodeExt node) { + result = PrintReturnNodeExt::getOutput(node) +} + class DataFlowSummaryTargetApi extends SummaryTargetApi { DataFlowSummaryTargetApi() { not isUninterestingForDataFlowModels(this) } } @@ -71,7 +89,8 @@ private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2 * Holds if content `c` is either a field, a synthetic field or language specific * content of a relevant type or a container like content. */ -private predicate isRelevantContent(DataFlow::ContentSet c) { +pragma[nomagic] +private predicate isRelevantContent0(DataFlow::ContentSet c) { isRelevantTypeInContent(c) or containerContent(c) } @@ -85,6 +104,16 @@ string parameterNodeAsInput(DataFlow::ParameterNode p) { result = qualifierString() and p instanceof InstanceParameterNode } +/** + * Gets the MaD string representation of the parameter `p` + * when used in content flow. + */ +string parameterNodeAsContentInput(DataFlow::ParameterNode p) { + result = parameterContentAccess(p.asParameter()) + or + result = qualifierString() and p instanceof InstanceParameterNode +} + /** * Gets the MaD input string representation of `source`. */ @@ -170,7 +199,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { ) { exists(DataFlow::ContentSet c | DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and - isRelevantContent(c) and + isRelevantContent0(c) and ( state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 or @@ -180,7 +209,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { or exists(DataFlow::ContentSet c | DataFlowPrivate::readStep(node1, c, node2) and - isRelevantContent(c) and + isRelevantContent0(c) and state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() ) } @@ -196,6 +225,9 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig { module PropagateFlow = TaintTracking::GlobalWithState; +/** + * Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter. + */ string captureThroughFlow0( DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt ) { @@ -203,7 +235,7 @@ string captureThroughFlow0( p.getEnclosingCallable() = api and returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and input = parameterNodeAsInput(p) and - output = returnNodeExt.getOutput() and + output = getOutput(returnNodeExt) and input != output and result = Printing::asTaintModel(api, input, output) ) @@ -219,6 +251,69 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) { ) } +private module PropagateContentFlowConfig implements ContentDataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof DataFlow::ParameterNode and + source.getEnclosingCallable() instanceof DataFlowSummaryTargetApi + } + + predicate isSink(DataFlow::Node sink) { + sink instanceof ReturnNodeExt and + sink.getEnclosingCallable() instanceof DataFlowSummaryTargetApi + } + + predicate isAdditionalFlowStep = isAdditionalContentFlowStep/2; + + predicate isBarrier(DataFlow::Node n) { + exists(Type t | t = n.getType() and not isRelevantType(t)) + } + + int accessPathLimit() { result = 2 } + + predicate isRelevantContent(DataFlow::ContentSet s) { isRelevantContent0(s) } + + DataFlow::FlowFeature getAFeature() { + result instanceof DataFlow::FeatureEqualSourceSinkCallContext + } +} + +private module PropagateContentFlow = ContentDataFlow::Global; + +private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { + not exists(ap.getHead()) and result = "" + or + exists(ContentSet head, PropagateContentFlow::AccessPath tail | + head = ap.getHead() and + tail = ap.getTail() and + result = "." + printContent(head) + printStoreAccessPath(tail) + ) +} + +private string printReadAccessPath(PropagateContentFlow::AccessPath ap) { + not exists(ap.getHead()) and result = "" + or + exists(ContentSet head, PropagateContentFlow::AccessPath tail | + head = ap.getHead() and + tail = ap.getTail() and + result = printReadAccessPath(tail) + "." + printContent(head) + ) +} + +string captureContentFlow(DataFlowSummaryTargetApi api) { + exists( + DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output, + PropagateContentFlow::AccessPath reads, PropagateContentFlow::AccessPath stores, + boolean preservesValue + | + PropagateContentFlow::flow(p, reads, returnNodeExt, stores, preservesValue) and + returnNodeExt.getEnclosingCallable() = api and + input = parameterNodeAsContentInput(p) + printReadAccessPath(reads) and + output = getContentOutput(returnNodeExt) + printStoreAccessPath(stores) and + input != output and + result = Printing::asModel(api, input, output, preservesValue) + ) +} + /** * A dataflow configuration used for finding new sources. * The sources are the already known existing sources and the sinks are the API return nodes. @@ -261,7 +356,7 @@ string captureSource(DataFlowSourceTargetApi api) { ExternalFlow::sourceNode(source, kind) and api = sink.getEnclosingCallable() and not irrelevantSourceSinkApi(source.getEnclosingCallable(), api) and - result = Printing::asSourceModel(api, sink.getOutput(), kind) + result = Printing::asSourceModel(api, getOutput(sink), kind) ) } diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index 89d721b300d..2f2a1ef2761 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -5,11 +5,14 @@ private import csharp as CS private import semmle.code.csharp.commons.Util as Util private import semmle.code.csharp.commons.Collections as Collections +private import semmle.code.csharp.commons.QualifiedName as QualifiedName private import semmle.code.csharp.dataflow.internal.DataFlowDispatch private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.frameworks.system.linq.Expressions private import semmle.code.csharp.frameworks.System +private import semmle.code.csharp.dataflow.internal.TaintTrackingPrivate as TaintTrackingPrivate import semmle.code.csharp.dataflow.internal.ExternalFlow as ExternalFlow +import semmle.code.csharp.dataflow.internal.ContentDataFlow as ContentDataFlow import semmle.code.csharp.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate import semmle.code.csharp.dataflow.internal.DataFlowDispatch as DataFlowDispatch @@ -22,6 +25,8 @@ class Type = CS::Type; class Callable = CS::Callable; +class ContentSet = DataFlow::ContentSet; + /** * Holds if any of the parameters of `api` are `System.Func<>`. */ @@ -241,20 +246,40 @@ string parameterAccess(CS::Parameter p) { else result = "Argument[" + p.getPosition() + "]" } +/** + * Gets the MaD string representation of the parameter `p` + * when used in content flow. + */ +string parameterContentAccess(CS::Parameter p) { result = "Argument[" + p.getPosition() + "]" } + class InstanceParameterNode = DataFlowPrivate::InstanceParameterNode; class ParameterPosition = DataFlowDispatch::ParameterPosition; +private signature string parameterAccessSig(Parameter p); + +module ParamReturnNodeAsOutput { + bindingset[c] + string paramReturnNodeAsOutput(CS::Callable c, ParameterPosition pos) { + result = getParamAccess(c.getParameter(pos.getPosition())) + or + pos.isThisParameter() and + result = qualifierString() + } +} + /** * Gets the MaD string representation of return through parameter at position * `pos` of callable `c`. */ bindingset[c] string paramReturnNodeAsOutput(CS::Callable c, ParameterPosition pos) { - result = parameterAccess(c.getParameter(pos.getPosition())) - or - pos.isThisParameter() and - result = qualifierString() + result = ParamReturnNodeAsOutput::paramReturnNodeAsOutput(c, pos) +} + +bindingset[c] +string paramReturnNodeAsContentOutput(Callable c, ParameterPosition pos) { + result = ParamReturnNodeAsOutput::paramReturnNodeAsOutput(c, pos) } /** @@ -344,3 +369,44 @@ predicate isRelevantSourceKind(string kind) { any() } * Holds if the the content `c` is a container. */ predicate containerContent(DataFlow::ContentSet c) { c.isElement() } + +/** + * Holds if there is a taint step from `node1` to `node2` in content flow. + */ +predicate isAdditionalContentFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + TaintTrackingPrivate::defaultAdditionalTaintStep(nodeFrom, nodeTo, _) and + not nodeTo.asExpr() instanceof CS::ElementAccess and + not exists(DataFlow::ContentSet c | + DataFlowPrivate::readStep(nodeFrom, c, nodeTo) and containerContent(c) + ) +} + +bindingset[d] +private string getFullyQualifiedName(Declaration d) { + exists(string qualifier, string name | + d.hasFullyQualifiedName(qualifier, name) and + result = QualifiedName::getQualifiedName(qualifier, name) + ) +} + +/** + * Gets the MaD string representation of the contentset `c`. + */ +string printContent(DataFlow::ContentSet c) { + exists(CS::Field f, string name | name = getFullyQualifiedName(f) | + c.isField(f) and + if f.isEffectivelyPublic() + then result = "Field[" + name + "]" + else result = "SyntheticField[" + name + "]" + ) + or + exists(CS::Property p, string name | name = getFullyQualifiedName(p) | + c.isProperty(p) and + if p.isEffectivelyPublic() + then result = "Property[" + name + "]" + else result = "SyntheticField[" + name + "]" + ) + or + c.isElement() and + result = "Element" +} From 41238763432c62811362b0a227970503a11cabf6 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 30 Aug 2024 14:07:15 +0200 Subject: [PATCH 268/334] C#: Add content based summary generation test. --- .../CaptureContentSummaryModels.expected | 2 + .../CaptureContentSummaryModels.ext.yml | 12 ++++ .../dataflow/CaptureContentSummaryModels.ql | 11 ++++ .../modelgenerator/dataflow/Summaries.cs | 57 +++++++++++++++++-- 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected create mode 100644 csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ext.yml create mode 100644 csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected new file mode 100644 index 00000000000..cb6fc390349 --- /dev/null +++ b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.expected @@ -0,0 +1,2 @@ +unexpectedModel +expectedModel diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ext.yml b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ext.yml new file mode 100644 index 00000000000..c995ec5aa50 --- /dev/null +++ b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ext.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/csharp-all + extensible: summaryModel + data: + - [ "Models", "ManuallyModelled", False, "HasSummary", "(System.Object)", "", "Argument[0]", "ReturnValue", "value", "manual"] + + - addsTo: + pack: codeql/csharp-all + extensible: neutralModel + data: + - [ "Models", "ManuallyModelled", "HasNeutralSummary", "(System.Object)", "summary", "manual"] diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql new file mode 100644 index 00000000000..f5d8593a32a --- /dev/null +++ b/csharp/ql/test/utils/modelgenerator/dataflow/CaptureContentSummaryModels.ql @@ -0,0 +1,11 @@ +import csharp +import utils.modelgenerator.internal.CaptureModels +import TestUtilities.InlineMadTest + +module InlineMadTestConfig implements InlineMadTestConfigSig { + string getCapturedModel(Callable c) { result = captureContentFlow(c) } + + string getKind() { result = "contentbased-summary" } +} + +import InlineMadTest diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs index 1b7dee8189b..092eef6d122 100644 --- a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs +++ b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs @@ -13,18 +13,21 @@ public class BasicFlow private string tainted; // summary=Models;BasicFlow;false;ReturnThis;(System.Object);;Argument[this];ReturnValue;value;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnThis;(System.Object);;Argument[this];ReturnValue;value;df-generated public BasicFlow ReturnThis(object input) { return this; } // summary=Models;BasicFlow;false;ReturnParam0;(System.String,System.Object);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnParam0;(System.String,System.Object);;Argument[0];ReturnValue;value;df-generated public string ReturnParam0(string input0, object input1) { return input0; } // summary=Models;BasicFlow;false;ReturnParam1;(System.String,System.Object);;Argument[1];ReturnValue;taint;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnParam1;(System.String,System.Object);;Argument[1];ReturnValue;value;df-generated public object ReturnParam1(string input0, object input1) { return input1; @@ -32,24 +35,29 @@ public class BasicFlow // summary=Models;BasicFlow;false;ReturnParamMultiple;(System.Object,System.Object);;Argument[0];ReturnValue;taint;df-generated // summary=Models;BasicFlow;false;ReturnParamMultiple;(System.Object,System.Object);;Argument[1];ReturnValue;taint;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnParamMultiple;(System.Object,System.Object);;Argument[0];ReturnValue;value;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnParamMultiple;(System.Object,System.Object);;Argument[1];ReturnValue;value;df-generated public object ReturnParamMultiple(object input0, object input1) { return (System.DateTime.Now.DayOfWeek == System.DayOfWeek.Monday) ? input0 : input1; } // summary=Models;BasicFlow;false;ReturnSubstring;(System.String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnSubstring;(System.String);;Argument[0];ReturnValue;taint;df-generated public string ReturnSubstring(string s) { return s.Substring(0, 1); } // summary=Models;BasicFlow;false;SetField;(System.String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=Models;BasicFlow;false;SetField;(System.String);;Argument[0];Argument[this].SyntheticField[Models.BasicFlow.tainted];value;df-generated public void SetField(string s) { tainted = s; } // summary=Models;BasicFlow;false;ReturnField;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;BasicFlow;false;ReturnField;();;Argument[this].SyntheticField[Models.BasicFlow.tainted];ReturnValue;value;df-generated public string ReturnField() { return tainted; @@ -61,72 +69,84 @@ public class CollectionFlow private string tainted; // summary=Models;CollectionFlow;false;ReturnArrayElement;(System.Object[]);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnArrayElement;(System.Object[]);;Argument[0].Element;ReturnValue;value;df-generated public object ReturnArrayElement(object[] input) { return input[0]; } // summary=Models;CollectionFlow;false;AssignToArray;(System.Object,System.Object[]);;Argument[0];Argument[1].Element;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;AssignToArray;(System.Object,System.Object[]);;Argument[0];Argument[1].Element;value;df-generated public void AssignToArray(object data, object[] target) { target[0] = data; } // summary=Models;CollectionFlow;false;AssignFieldToArray;(System.Object[]);;Argument[this];Argument[0].Element;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;AssignFieldToArray;(System.Object[]);;Argument[this].SyntheticField[Models.CollectionFlow.tainted];Argument[0].Element;value;df-generated public void AssignFieldToArray(object[] target) { target[0] = tainted; } // summary=Models;CollectionFlow;false;ReturnListElement;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnListElement;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;value;df-generated public object ReturnListElement(List input) { return input[0]; } // summary=Models;CollectionFlow;false;AddToList;(System.Collections.Generic.List,System.Object);;Argument[1];Argument[0].Element;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;AddToList;(System.Collections.Generic.List,System.Object);;Argument[1];Argument[0].Element;value;df-generated public void AddToList(List input, object data) { input.Add(data); } // summary=Models;CollectionFlow;false;AddFieldToList;(System.Collections.Generic.List);;Argument[this];Argument[0].Element;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;AddFieldToList;(System.Collections.Generic.List);;Argument[this].SyntheticField[Models.CollectionFlow.tainted];Argument[0].Element;value;df-generated public void AddFieldToList(List input) { input.Add(tainted); } // summary=Models;CollectionFlow;false;ReturnFieldInAList;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnFieldInAList;();;Argument[this].SyntheticField[Models.CollectionFlow.tainted];ReturnValue.Element;value;df-generated public List ReturnFieldInAList() { return new List { tainted }; } - // summary=Models;CollectionFlow;false;ReturnComplexTypeArray;(System.String[]);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;CollectionFlow;false;ReturnComplexTypeArray;(System.String[]);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnComplexTypeArray;(System.String[]);;Argument[0];ReturnValue;value;df-generated public string[] ReturnComplexTypeArray(string[] a) { return a; } - // summary=Models;CollectionFlow;false;ReturnBulkTypeList;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;CollectionFlow;false;ReturnBulkTypeList;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnBulkTypeList;(System.Collections.Generic.List);;Argument[0];ReturnValue;value;df-generated public List ReturnBulkTypeList(List a) { return a; } - // summary=Models;CollectionFlow;false;ReturnComplexTypeDictionary;(System.Collections.Generic.Dictionary);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;CollectionFlow;false;ReturnComplexTypeDictionary;(System.Collections.Generic.Dictionary);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnComplexTypeDictionary;(System.Collections.Generic.Dictionary);;Argument[0];ReturnValue;value;df-generated public Dictionary ReturnComplexTypeDictionary(Dictionary a) { return a; } - // summary=Models;CollectionFlow;false;ReturnUntypedArray;(System.Array);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;CollectionFlow;false;ReturnUntypedArray;(System.Array);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnUntypedArray;(System.Array);;Argument[0];ReturnValue;value;df-generated public Array ReturnUntypedArray(Array a) { return a; } - // summary=Models;CollectionFlow;false;ReturnUntypedList;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;CollectionFlow;false;ReturnUntypedList;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;CollectionFlow;false;ReturnUntypedList;(System.Collections.IList);;Argument[0];ReturnValue;value;df-generated public IList ReturnUntypedList(IList a) { return a; @@ -159,19 +179,22 @@ public class IEnumerableFlow { private string tainted; - // summary=Models;IEnumerableFlow;false;ReturnIEnumerable;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated + // SPURIOUS-summary=Models;IEnumerableFlow;false;ReturnIEnumerable;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;IEnumerableFlow;false;ReturnIEnumerable;(System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;value;df-generated public IEnumerable ReturnIEnumerable(IEnumerable input) { return input; } // summary=Models;IEnumerableFlow;false;ReturnIEnumerableElement;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;IEnumerableFlow;false;ReturnIEnumerableElement;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;df-generated public object ReturnIEnumerableElement(IEnumerable input) { return input.First(); } // summary=Models;IEnumerableFlow;false;ReturnFieldInIEnumerable;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;IEnumerableFlow;false;ReturnFieldInIEnumerable;();;Argument[this].SyntheticField[Models.IEnumerableFlow.tainted];ReturnValue.Element;value;df-generated public IEnumerable ReturnFieldInIEnumerable() { return new List { tainted }; @@ -183,42 +206,49 @@ public class GenericFlow private T tainted; // summary=Models;GenericFlow;false;SetGenericField;(T);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=Models;GenericFlow;false;SetGenericField;(T);;Argument[0];Argument[this].SyntheticField[Models.GenericFlow`1.tainted];value;df-generated public void SetGenericField(T t) { tainted = t; } // summary=Models;GenericFlow;false;ReturnGenericField;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;ReturnGenericField;();;Argument[this].SyntheticField[Models.GenericFlow`1.tainted];ReturnValue;value;df-generated public T ReturnGenericField() { return tainted; } // summary=Models;GenericFlow;false;AddFieldToGenericList;(System.Collections.Generic.List);;Argument[this];Argument[0].Element;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;AddFieldToGenericList;(System.Collections.Generic.List);;Argument[this].SyntheticField[Models.GenericFlow`1.tainted];Argument[0].Element;value;df-generated public void AddFieldToGenericList(List input) { input.Add(tainted); } // summary=Models;GenericFlow;false;ReturnFieldInGenericList;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;ReturnFieldInGenericList;();;Argument[this].SyntheticField[Models.GenericFlow`1.tainted];ReturnValue.Element;value;df-generated public List ReturnFieldInGenericList() { return new List { tainted }; } // summary=Models;GenericFlow;false;ReturnGenericParam;(S);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;ReturnGenericParam;(S);;Argument[0];ReturnValue;value;df-generated public S ReturnGenericParam(S input) { return input; } // summary=Models;GenericFlow;false;ReturnGenericElement;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;ReturnGenericElement;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;value;df-generated public S ReturnGenericElement(List input) { return input[0]; } // summary=Models;GenericFlow;false;AddToGenericList;(System.Collections.Generic.List,S);;Argument[1];Argument[0].Element;taint;df-generated + // contentbased-summary=Models;GenericFlow;false;AddToGenericList;(System.Collections.Generic.List,S);;Argument[1];Argument[0].Element;value;df-generated public void AddToGenericList(List input, S data) { input.Add(data); @@ -228,6 +258,7 @@ public class GenericFlow public abstract class BaseClassFlow { // summary=Models;BaseClassFlow;true;ReturnParam;(System.Object);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;BaseClassFlow;true;ReturnParam;(System.Object);;Argument[0];ReturnValue;value;df-generated public virtual object ReturnParam(object input) { return input; @@ -237,6 +268,7 @@ public abstract class BaseClassFlow public class DerivedClass1Flow : BaseClassFlow { // summary=Models;DerivedClass1Flow;false;ReturnParam1;(System.String,System.String);;Argument[1];ReturnValue;taint;df-generated + // contentbased-summary=Models;DerivedClass1Flow;false;ReturnParam1;(System.String,System.String);;Argument[1];ReturnValue;value;df-generated public string ReturnParam1(string input0, string input1) { return input1; @@ -246,12 +278,14 @@ public class DerivedClass1Flow : BaseClassFlow public class DerivedClass2Flow : BaseClassFlow { // summary=Models;BaseClassFlow;true;ReturnParam;(System.Object);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;BaseClassFlow;true;ReturnParam;(System.Object);;Argument[0];ReturnValue;value;df-generated public override object ReturnParam(object input) { return input; } // summary=Models;DerivedClass2Flow;false;ReturnParam0;(System.String,System.Int32);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;DerivedClass2Flow;false;ReturnParam0;(System.String,System.Int32);;Argument[0];ReturnValue;value;df-generated public string ReturnParam0(string input0, int input1) { return input0; @@ -263,6 +297,7 @@ public class OperatorFlow public readonly object Field; // summary=Models;OperatorFlow;false;OperatorFlow;(System.Object);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=Models;OperatorFlow;false;OperatorFlow;(System.Object);;Argument[0];Argument[this].Field[Models.OperatorFlow.Field];value;df-generated public OperatorFlow(object o) { Field = o; @@ -270,6 +305,7 @@ public class OperatorFlow // Flow Summary. // summary=Models;OperatorFlow;false;op_Addition;(Models.OperatorFlow,Models.OperatorFlow);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;OperatorFlow;false;op_Addition;(Models.OperatorFlow,Models.OperatorFlow);;Argument[0];ReturnValue;value;df-generated public static OperatorFlow operator +(OperatorFlow a, OperatorFlow b) { return a; @@ -310,6 +346,7 @@ public class EqualsGetHashCodeNoFlow } // summary=Models;EqualsGetHashCodeNoFlow;false;Equals;(System.String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;EqualsGetHashCodeNoFlow;false;Equals;(System.String);;Argument[0];ReturnValue;value;df-generated public string Equals(string s) { return s; @@ -327,12 +364,14 @@ public class Properties private string tainted; // summary=Models;Properties;false;get_Prop1;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;Properties;false;get_Prop1;();;Argument[this].SyntheticField[Models.Properties.tainted];ReturnValue;value;df-generated public string Prop1 { get { return tainted; } } // summary=Models;Properties;false;set_Prop2;(System.String);;Argument[0];Argument[this];taint;df-generated + // contentbased-summary=Models;Properties;false;set_Prop2;(System.String);;Argument[0];Argument[this].SyntheticField[Models.Properties.tainted];value;df-generated public string Prop2 { set { tainted = value; } @@ -513,6 +552,7 @@ public class Inheritance public class AImplBasePublic : BasePublic { // summary=Models;Inheritance+BasePublic;true;Id;(System.String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;Inheritance+BasePublic;true;Id;(System.String);;Argument[0];ReturnValue;value;df-generated public override string Id(string x) { return x; @@ -542,6 +582,7 @@ public class Inheritance public class BImpl : B { // summary=Models;Inheritance+IPublic1;true;Id;(System.String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;Inheritance+IPublic1;true;Id;(System.String);;Argument[0];ReturnValue;value;df-generated public override string Id(string x) { return x; @@ -551,6 +592,7 @@ public class Inheritance private class CImpl : C { // summary=Models;Inheritance+IPublic2;true;Id;(System.String);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;Inheritance+IPublic2;true;Id;(System.String);;Argument[0];ReturnValue;value;df-generated public override string Id(string x) { return x; @@ -572,6 +614,7 @@ public class Inheritance private string tainted; // summary=Models;Inheritance+IPublic3;true;get_Prop;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;Inheritance+IPublic3;true;get_Prop;();;Argument[this].SyntheticField[Models.Inheritance+DImpl.tainted];ReturnValue;value;df-generated public override string Prop { get { return tainted; } } } } @@ -586,12 +629,14 @@ public class MemberFlow } // summary=Models;MemberFlow;false;M1;(Models.MemberFlow+C);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;MemberFlow;false;M1;(Models.MemberFlow+C);;Argument[0].Property[Models.MemberFlow+C.Prop];ReturnValue;value;df-generated public string M1(C c) { return c.Prop; } // summary=Models;MemberFlow;false;M2;(Models.MemberFlow+C);;Argument[0];ReturnValue;taint;df-generated + // contentbased-summary=Models;MemberFlow;false;M2;(Models.MemberFlow+C);;Argument[0].Field[Models.MemberFlow+C.Field];ReturnValue;value;df-generated public string M2(C c) { return c.Field; From 6e8941ea9d2efabea43ea62e58c01419d56c7973 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 30 Aug 2024 15:11:36 +0200 Subject: [PATCH 269/334] C#: Add a couple more testcases. --- .../modelgenerator/dataflow/Summaries.cs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs index 092eef6d122..994eaf7c378 100644 --- a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs +++ b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs @@ -642,3 +642,41 @@ public class MemberFlow return c.Field; } } + +public class IDictionaryFlow +{ + // summary=Models;IDictionaryFlow;false;ReturnIDictionaryValue;(System.Collections.Generic.IDictionary,System.Object);;Argument[0].Element;ReturnValue;taint;df-generated + // contentbased-summary=Models;IDictionaryFlow;false;ReturnIDictionaryValue;(System.Collections.Generic.IDictionary,System.Object);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;df-generated + public object ReturnIDictionaryValue(IDictionary input, object key) + { + return input[key]; + } +} + +public class NestedFieldFlow +{ + public NestedFieldFlow FieldA; + public NestedFieldFlow FieldB; + + // summary=Models;NestedFieldFlow;false;Move;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;NestedFieldFlow;false;Move;();;Argument[this].Field[Models.NestedFieldFlow.FieldA];ReturnValue.Field[Models.NestedFieldFlow.FieldB];value;df-generated + public NestedFieldFlow Move() + { + return new NestedFieldFlow() { FieldB = this.FieldA }; + } + + // summary=Models;NestedFieldFlow;false;MoveNested;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;NestedFieldFlow;false;MoveNested;();;Argument[this].Field[Models.NestedFieldFlow.FieldB].Field[Models.NestedFieldFlow.FieldA];ReturnValue.Field[Models.NestedFieldFlow.FieldA].Field[Models.NestedFieldFlow.FieldB];value;df-generated + public NestedFieldFlow MoveNested() + { + return new NestedFieldFlow() { FieldA = FieldB.Move() }; + } + + // summary=Models;NestedFieldFlow;false;ReverseFields;();;Argument[this];ReturnValue;taint;df-generated + // contentbased-summary=Models;NestedFieldFlow;false;ReverseFields;();;Argument[this].Field[Models.NestedFieldFlow.FieldA].Field[Models.NestedFieldFlow.FieldB];ReturnValue.Field[Models.NestedFieldFlow.FieldA].Field[Models.NestedFieldFlow.FieldB];value;df-generated + public NestedFieldFlow ReverseFields() + { + var x = new NestedFieldFlow() { FieldB = this.FieldA.FieldB }; + return new NestedFieldFlow() { FieldA = x }; + } +} From 7bf7df2f994b8f9b63a992c68a960825640b09e3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 30 Aug 2024 15:37:00 +0200 Subject: [PATCH 270/334] C#/Java: Add model generator option for making content based summaries. --- .../models-as-data/generate_flow_model.py | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/misc/scripts/models-as-data/generate_flow_model.py b/misc/scripts/models-as-data/generate_flow_model.py index 7654713d280..4d440725298 100644 --- a/misc/scripts/models-as-data/generate_flow_model.py +++ b/misc/scripts/models-as-data/generate_flow_model.py @@ -33,6 +33,7 @@ class Generator: self.generateSources = False self.generateSummaries = False self.generateNeutrals = False + self.generateContentSummaries = False self.generateTypeBasedSummaries = False self.dryRun = False self.dirname = "modelgenerator" @@ -50,6 +51,7 @@ Which models are generated is controlled by the flags: --with-sources --with-summaries --with-neutrals + --with-content-summaries (Experimental). May not be used in conjunction with --with-summaries --with-typebased-summaries (Experimental) If none of these flags are specified, all models are generated except for the type based models. @@ -81,6 +83,10 @@ Requirements: `codeql` should both appear on your path. generator.printHelp() sys.exit(0) + if "--with-summaries" in sys.argv and "--with-content-summaries" in sys.argv: + generator.printHelp() + sys.exit(0) + if "--with-sinks" in sys.argv: sys.argv.remove("--with-sinks") generator.generateSinks = True @@ -97,6 +103,10 @@ Requirements: `codeql` should both appear on your path. sys.argv.remove("--with-neutrals") generator.generateNeutrals = True + if "--with-content-summaries" in sys.argv: + sys.argv.remove("--with-content-summaries") + generator.generateContentSummaries = True + if "--with-typebased-summaries" in sys.argv: sys.argv.remove("--with-typebased-summaries") generator.generateTypeBasedSummaries = True @@ -105,7 +115,7 @@ Requirements: `codeql` should both appear on your path. sys.argv.remove("--dry-run") generator.dryRun = True - if not generator.generateSinks and not generator.generateSources and not generator.generateSummaries and not generator.generateNeutrals and not generator.generateTypeBasedSummaries: + if not generator.generateSinks and not generator.generateSources and not generator.generateSummaries and not generator.generateNeutrals and not generator.generateTypeBasedSummaries and not generator.generateContentSummaries: generator.generateSinks = generator.generateSources = generator.generateSummaries = generator.generateNeutrals = True n = len(sys.argv) @@ -162,8 +172,13 @@ Requirements: `codeql` should both appear on your path. neutralAddsTo = self.getAddsTo("CaptureNeutralModels.ql", helpers.neutralModelPredicate) else: neutralAddsTo = { } - - return helpers.merge(summaryAddsTo, sinkAddsTo, sourceAddsTo, neutralAddsTo) + + if self.generateContentSummaries: + contentSummaryAddsTo = self.getAddsTo("CaptureContentSummaryModels.ql", helpers.summaryModelPredicate) + else: + contentSummaryAddsTo = { } + + return helpers.merge(summaryAddsTo, contentSummaryAddsTo, sinkAddsTo, sourceAddsTo, neutralAddsTo) def makeTypeBasedContent(self): if self.generateTypeBasedSummaries: From 9531701129e62e872d662d776fbd0594f5434118 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:08:00 +0200 Subject: [PATCH 271/334] delete miniz support because there is no good documents and i don't have enough time as the library is not popular enough. add tests for minizip lib --- .../CWE/CWE-409/DecompressionBomb.qll | 1 - .../Security/CWE/CWE-409/LibMiniz.qll | 80 ------------ .../Security/CWE/CWE-409/MiniZip.qll | 51 +++----- .../CWE/CWE-409/DecompressionBombs.expected | 75 +++++++++++ .../Security/CWE/CWE-409/minizipTest.cpp | 120 ++++++++++++++++++ 5 files changed, 211 insertions(+), 116 deletions(-) delete mode 100644 cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll index c17616d020d..ebc112f8f8b 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -5,7 +5,6 @@ import ZlibGzopen import ZlibInflator import ZlibUncompress import LibArchive -import LibMiniz import XZ import ZSTD import Bzip2 diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll deleted file mode 100644 index 0025ecca97d..00000000000 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibMiniz.qll +++ /dev/null @@ -1,80 +0,0 @@ -/** - * https://github.com/richgel999/miniz - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import DecompressionBomb - -/** - * The `mz_uncompress` functions are used in flow sink. - */ -class MzUncompress extends DecompressionFunction { - MzUncompress() { this.hasGlobalName(["uncompress", "mz_uncompress", "mz_uncompress2"]) } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * A `zip handle` is used in Flow source - */ -class MzZip extends DecompressionFunction { - MzZip() { - this.hasGlobalName([ - "mz_zip_reader_open", "mz_zip_reader_open_file", "mz_zip_reader_open_file_in_memory", - "mz_zip_reader_open_buffer", "mz_zip_reader_entry_open" - ]) - } - - override int getArchiveParameterIndex() { result = 1 } -} - -/** - * The `mz_inflate` functions are used in flow sink. - */ -class MzInflate extends DecompressionFunction { - MzInflate() { this.hasGlobalName(["mz_inflate", "inflate"]) } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * The `mz_zip_reader_extract_*` functions are used in flow sink. - */ -class MzZipReaderExtract extends DecompressionFunction { - MzZipReaderExtract() { - this.hasGlobalName([ - "mz_zip_reader_extract_file_to_heap", "mz_zip_reader_extract_to_heap", - "mz_zip_reader_extract_to_callback", "mz_zip_reader_extract_file_to_callback", - "mz_zip_reader_extract_to_mem", "mz_zip_reader_extract_file_to_mem", - "mz_zip_reader_extract_iter_read", "mz_zip_reader_extract_to_file", - "mz_zip_reader_extract_file_to_file" - ]) - } - - override int getArchiveParameterIndex() { result = 1 } -} - -/** - * The `tinfl_decompress_mem_*` functions are used in flow sink. - */ -class TinflDecompressMem extends DecompressionFunction { - TinflDecompressMem() { - this.hasGlobalName([ - "tinfl_decompress_mem_to_callback", "tinfl_decompress_mem_to_mem", - "tinfl_decompress_mem_to_heap" - ]) - } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * The `tinfl_decompress_*` functions are used in flow sink. - */ -class TinflDecompress extends DecompressionFunction { - TinflDecompress() { this.hasGlobalName(["tinfl_decompress"]) } - - override int getArchiveParameterIndex() { result = 1 } -} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll index a76abff8f6a..1ebb7b277dc 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll @@ -17,21 +17,6 @@ class Mz_zip_entry extends DecompressionFunction { override int getArchiveParameterIndex() { result = 1 } } -/** - * The `mz_zip_entry` function is used in flow steps. - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) - */ -class Mz_zip_entry_flow_steps extends DecompressionFlowStep { - Mz_zip_entry_flow_steps() { this.hasGlobalName("mz_zip_entry_read") } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - } -} - /** * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow source. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) @@ -44,34 +29,30 @@ class Mz_zip_reader_entry extends DecompressionFunction { ]) } - override int getArchiveParameterIndex() { result = 1 } + override int getArchiveParameterIndex() { result = 0 } } /** - * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow steps. - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) + * The `UnzOpen*` functions are used in flow sink. */ -class Mz_zip_reader_entry_flow_steps extends DecompressionFlowStep { - Mz_zip_reader_entry_flow_steps() { this instanceof Mz_zip_reader_entry } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc.getArgument(1) - ) - } -} - -/** - * The `UnzOpen` function as a flow source. - */ -class UnzOpenFunction extends DecompressionFlowStep { +class UnzOpenFunction extends DecompressionFunction { UnzOpenFunction() { this.hasGlobalName(["UnzOpen", "unzOpen64", "unzOpen2", "unzOpen2_64"]) } + override int getArchiveParameterIndex() { result = 0 } +} + +/** + * The `mz_zip_reader_open_file` and `mz_zip_reader_open_file_in_memory` functions as a flow source. + */ +class ReaderOpenFunction extends DecompressionFlowStep { + ReaderOpenFunction() { + this.hasGlobalName(["mz_zip_reader_open_file_in_memory", "mz_zip_reader_open_file"]) + } + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(FunctionCall fc | fc.getTarget() = this | - node1.asExpr() = fc.getArgument(0) and - node2.asExpr() = fc + node1.asIndirectExpr() = fc.getArgument(1) and + node2.asIndirectExpr() = fc.getArgument(0) ) } } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected index e17cd312ea2..1879cb98fc4 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected @@ -1,6 +1,37 @@ edges | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | provenance | | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| minizipTest.cpp:54:29:54:38 | **zip_reader | minizipTest.cpp:60:30:60:39 | **zip_reader | provenance | | +| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | provenance | | +| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:55:36:55:45 | *zip_reader | provenance | | +| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | +| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | provenance | | +| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | minizipTest.cpp:55:36:55:45 | *zip_reader | provenance | | +| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | +| minizipTest.cpp:54:41:54:47 | *access to array | minizipTest.cpp:54:29:54:38 | **zip_reader | provenance | Config | +| minizipTest.cpp:54:41:54:47 | *access to array | minizipTest.cpp:54:29:54:38 | *zip_reader | provenance | Config | +| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | provenance | | +| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | provenance | | +| minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | +| minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | provenance | | +| minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | provenance | | | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:63:25:63:35 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:52:25:52:25 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:69:17:69:26 | & ... | provenance | Config | @@ -50,6 +81,25 @@ nodes | brotliTest.cpp:29:32:29:35 | **argv | semmle.label | **argv | | brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | | brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | +| minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | +| minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | +| minizipTest.cpp:36:32:36:35 | **argv | semmle.label | **argv | +| minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | semmle.label | mz_zip_entry_read output argument | +| minizipTest.cpp:54:29:54:38 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:54:29:54:38 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | semmle.label | mz_zip_reader_open_file output argument | +| minizipTest.cpp:54:41:54:47 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:55:36:55:45 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | semmle.label | mz_zip_reader_goto_first_entry output argument | +| minizipTest.cpp:60:30:60:39 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:60:30:60:39 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:69:13:69:19 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | +| minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | +| minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | +| minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:63:25:63:35 | *a | semmle.label | *a | @@ -86,13 +136,38 @@ nodes | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | subpaths +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | +| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | +| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | | zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | #select | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:121:38:121:44 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp new file mode 100644 index 00000000000..f48b13d0488 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp @@ -0,0 +1,120 @@ +typedef signed int int32_t; + +void *mz_stream_os_create(); + +int32_t mz_zip_reader_open_file(void *handle, const char *path); + +int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path); + +void *mz_zip_reader_create(); + +int32_t mz_zip_reader_goto_first_entry(void *pVoid); + +int32_t mz_stream_os_open(void *pVoid, const char *path, int write); + +void mz_stream_os_close(void *pVoid); + +void mz_stream_os_delete(void **pVoid); + +void mz_zip_reader_close(void *pVoid); + +void mz_zip_reader_delete(void **pVoid); + +int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write); + + +void UnzOpen(const char *string); + +int32_t mz_zip_entry_read(void *pVoid, void *buf, int32_t i) { + return 0; +} + +void *mz_zip_create() { + return nullptr; +} + +int main(int argc, const char *argv[]) { + void *zip_handle = mz_zip_create(); + int32_t bytes_read; + int32_t err; + char buf[4096]; + do { + bytes_read = mz_zip_entry_read(zip_handle, (char *) argv[1], sizeof(buf)); + if (bytes_read < 0) { + err = bytes_read; + } + // Do something with buf bytes + } while (err == 1 && bytes_read > 0); + + + const char *entry_path = "c:\\entry.dat"; + + void *zip_reader = mz_zip_reader_create(); + + mz_zip_reader_open_file(zip_reader, argv[1]); + mz_zip_reader_goto_first_entry(zip_reader); + void *entry_stream = mz_stream_os_create(); + mz_stream_os_open(entry_stream, entry_path, 1); + int file_stream; + int mz_stream_os_write; + mz_zip_reader_entry_save(zip_reader, file_stream, mz_stream_os_write); + // the above sink is same as "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", + // "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" and "mz_zip_entry_read" functions + mz_stream_os_close(entry_stream); + mz_stream_os_delete(&entry_stream); + mz_zip_reader_close(zip_reader); + mz_zip_reader_delete(&zip_reader); + + + UnzOpen(argv[3]); + return 0; +} + +void UnzOpen(const char *path) { + +} + +int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write) { + return 0; +} + +void mz_zip_reader_delete(void **pVoid) { + +} + +void mz_zip_reader_close(void *pVoid) { + +} + +void mz_stream_os_delete(void **pVoid) { + +} + +void mz_stream_os_close(void *pVoid) { + +} + +int32_t mz_stream_os_open(void *pVoid, const char *path, int write) { + return 0; +} + +int32_t mz_zip_reader_goto_first_entry(void *pVoid) { + return 0; +} + +void *mz_zip_reader_create() { + return nullptr; +} + +int32_t mz_zip_reader_open_file(void *handle, const char *path) { + return 0; +} + +int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path) { + return 0; +} + +void *mz_stream_os_create() { + return nullptr; +} + From c05c1d508714b5cf357189307cdd5935b312518a Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 3 Sep 2024 12:36:15 +0100 Subject: [PATCH 272/334] Bazel: Bump rules_go to 0.50.0 --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index d2add26c88d..6026958de63 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -15,7 +15,7 @@ local_path_override( # see https://registry.bazel.build/ for a list of available packages bazel_dep(name = "platforms", version = "0.0.10") -bazel_dep(name = "rules_go", version = "0.49.0") +bazel_dep(name = "rules_go", version = "0.50.0") bazel_dep(name = "rules_pkg", version = "0.10.1") bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1") bazel_dep(name = "rules_python", version = "0.32.2") From 037912fd2d59c0d39ba5e0a56dd0f8473d03e33c Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 3 Sep 2024 13:20:17 +0200 Subject: [PATCH 273/334] C++: Add data-flow test for realloc --- .../dataflow-consistency.expected | 20 +++++++++---------- .../dataflow-tests/localFlow-ir.expected | 18 ++++++++--------- .../dataflow-tests/localFlow.expected | 14 ++++++------- .../dataflow-tests/test-source-sink.expected | 5 +++-- .../dataflow/dataflow-tests/test.cpp | 8 ++++++++ .../dataflow-tests/type-bugs.expected | 2 +- .../dataflow-tests/uninitialized.expected | 4 ++-- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index 109f5ffebd1..f1bf934b225 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -33,7 +33,7 @@ argHasPostUpdate | test.cpp:67:29:67:35 | source1 | ArgumentNode is missing PostUpdateNode. | | test.cpp:813:19:813:35 | * ... | ArgumentNode is missing PostUpdateNode. | | test.cpp:848:23:848:25 | rpx | ArgumentNode is missing PostUpdateNode. | -| test.cpp:1057:19:1057:21 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1065:19:1065:21 | * ... | ArgumentNode is missing PostUpdateNode. | postWithInFlow | BarrierGuard.cpp:49:6:49:6 | x [post update] | PostUpdateNode should not be the target of local flow. | | BarrierGuard.cpp:60:7:60:7 | x [post update] | PostUpdateNode should not be the target of local flow. | @@ -167,15 +167,15 @@ postWithInFlow | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | -| test.cpp:1051:5:1051:11 | content [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1052:9:1052:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1056:5:1056:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1056:6:1056:7 | pp [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1062:53:1062:53 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1072:3:1072:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1072:4:1072:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1073:3:1073:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1073:4:1073:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1059:5:1059:11 | content [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1060:9:1060:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1064:5:1064:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1064:6:1064:7 | pp [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1070:53:1070:53 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1080:3:1080:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1080:4:1080:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1081:3:1081:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1081:4:1081:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected index f6c8375660c..db5bf5cda15 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -202,12 +202,12 @@ | test.cpp:489:23:489:29 | *content | test.cpp:490:8:490:17 | * ... | | test.cpp:489:23:489:29 | content | test.cpp:489:23:489:29 | content | | test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | -| test.cpp:1050:12:1050:12 | definition of a | test.cpp:1051:3:1051:3 | *a | -| test.cpp:1051:3:1051:3 | *a | test.cpp:1052:8:1052:9 | *& ... | -| test.cpp:1051:3:1051:3 | *a [post update] | test.cpp:1052:8:1052:9 | *& ... | -| test.cpp:1051:3:1051:3 | a | test.cpp:1052:8:1052:9 | & ... | -| test.cpp:1051:3:1051:3 | a [post update] | test.cpp:1052:8:1052:9 | & ... | -| test.cpp:1051:15:1051:21 | 0 | test.cpp:1051:3:1051:21 | ... = ... | -| test.cpp:1051:15:1051:21 | *0 | test.cpp:1051:3:1051:21 | *... = ... | -| test.cpp:1052:9:1052:9 | *a | test.cpp:1052:8:1052:9 | *& ... | -| test.cpp:1052:9:1052:9 | a | test.cpp:1052:8:1052:9 | & ... | +| test.cpp:1058:12:1058:12 | definition of a | test.cpp:1059:3:1059:3 | *a | +| test.cpp:1059:3:1059:3 | *a | test.cpp:1060:8:1060:9 | *& ... | +| test.cpp:1059:3:1059:3 | *a [post update] | test.cpp:1060:8:1060:9 | *& ... | +| test.cpp:1059:3:1059:3 | a | test.cpp:1060:8:1060:9 | & ... | +| test.cpp:1059:3:1059:3 | a [post update] | test.cpp:1060:8:1060:9 | & ... | +| test.cpp:1059:15:1059:21 | 0 | test.cpp:1059:3:1059:21 | ... = ... | +| test.cpp:1059:15:1059:21 | *0 | test.cpp:1059:3:1059:21 | *... = ... | +| test.cpp:1060:9:1060:9 | *a | test.cpp:1060:8:1060:9 | *& ... | +| test.cpp:1060:9:1060:9 | a | test.cpp:1060:8:1060:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected index 2e0a1ce81ce..1296bab1637 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected @@ -81,10 +81,10 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (loc | test.cpp:488:21:488:21 | s [post update] | test.cpp:489:20:489:20 | s | | test.cpp:488:24:488:30 | ref arg content | test.cpp:489:23:489:29 | content | | test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | -| test.cpp:1050:12:1050:12 | a | test.cpp:1051:3:1051:3 | a | -| test.cpp:1050:12:1050:12 | a | test.cpp:1052:9:1052:9 | a | -| test.cpp:1051:3:1051:3 | a [post update] | test.cpp:1052:9:1052:9 | a | -| test.cpp:1051:3:1051:21 | ... = ... | test.cpp:1051:5:1051:11 | content [post update] | -| test.cpp:1051:15:1051:21 | 0 | test.cpp:1051:3:1051:21 | ... = ... | -| test.cpp:1052:8:1052:9 | ref arg & ... | test.cpp:1052:9:1052:9 | a [inner post update] | -| test.cpp:1052:9:1052:9 | a | test.cpp:1052:8:1052:9 | & ... | +| test.cpp:1058:12:1058:12 | a | test.cpp:1059:3:1059:3 | a | +| test.cpp:1058:12:1058:12 | a | test.cpp:1060:9:1060:9 | a | +| test.cpp:1059:3:1059:3 | a [post update] | test.cpp:1060:9:1060:9 | a | +| test.cpp:1059:3:1059:21 | ... = ... | test.cpp:1059:5:1059:11 | content [post update] | +| test.cpp:1059:15:1059:21 | 0 | test.cpp:1059:3:1059:21 | ... = ... | +| test.cpp:1060:8:1060:9 | ref arg & ... | test.cpp:1060:9:1060:9 | a [inner post update] | +| test.cpp:1060:9:1060:9 | a | test.cpp:1060:8:1060:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index ac26a0c76ec..633445773f6 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -127,7 +127,7 @@ astFlow | test.cpp:842:11:842:16 | call to source | test.cpp:844:8:844:8 | y | | test.cpp:846:13:846:27 | call to indirect_source | test.cpp:848:23:848:25 | rpx | | test.cpp:860:54:860:59 | call to source | test.cpp:861:10:861:37 | static_local_pointer_dynamic | -| test.cpp:1050:12:1050:12 | a | test.cpp:1052:8:1052:9 | & ... | +| test.cpp:1058:12:1058:12 | a | test.cpp:1060:8:1060:9 | & ... | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | | true_upon_entry.cpp:33:11:33:16 | call to source | true_upon_entry.cpp:39:8:39:8 | x | @@ -313,7 +313,8 @@ irFlow | test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1027:19:1027:28 | *translated | | test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated | | test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... | -| test.cpp:1081:27:1081:34 | call to source | test.cpp:1081:27:1081:34 | call to source | +| test.cpp:1052:13:1052:27 | *call to indirect_source | test.cpp:1054:7:1054:11 | * ... | +| test.cpp:1089:27:1089:34 | call to source | test.cpp:1089:27:1089:34 | call to source | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index ae6b76b88ca..a7600c64aa2 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1046,6 +1046,14 @@ void memset_test(char* buf) { // $ ast-def=buf ir-def=*buf sink(*buf); // $ ir MISSING: ast } +void *realloc(void *, size_t); + +void test_realloc() { + int *src = indirect_source(); + int *dest = (int*)realloc(src, sizeof(int)); + sink(*dest); // $ ir, MISSING: ast +} + void flow_out_of_address_with_local_flow() { MyStruct a; a.content = nullptr; diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index b79e7cd4271..f30404718c5 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -51,5 +51,5 @@ incorrectBaseType | test.cpp:848:23:848:25 | rpx | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | | test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:1062:52:1062:53 | *& ... | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:1070:52:1070:53 | *& ... | Expected 'Node.getType()' to be char, but it was char * | failures diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected index fc230b0ed20..b374cf37ecd 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected @@ -54,5 +54,5 @@ | test.cpp:796:12:796:12 | a | test.cpp:797:20:797:20 | a | | test.cpp:796:12:796:12 | a | test.cpp:797:31:797:31 | a | | test.cpp:796:12:796:12 | a | test.cpp:798:17:798:17 | a | -| test.cpp:1050:12:1050:12 | a | test.cpp:1051:3:1051:3 | a | -| test.cpp:1050:12:1050:12 | a | test.cpp:1052:9:1052:9 | a | +| test.cpp:1058:12:1058:12 | a | test.cpp:1059:3:1059:3 | a | +| test.cpp:1058:12:1058:12 | a | test.cpp:1060:9:1060:9 | a | From 6c97096642db311ffd669c24be1c7b81cbed8fd7 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:16:25 +0200 Subject: [PATCH 274/334] remove unused imports, add tests for libarchive --- .../Security/CWE/CWE-409/Brotli.qll | 1 - .../Security/CWE/CWE-409/Bzip2.qll | 4 +- .../Security/CWE/CWE-409/LibArchive.qll | 15 +- .../Security/CWE/CWE-409/MiniZip.qll | 5 +- .../query-tests/Security/CWE/CWE-409/XZ.qll | 1 - .../query-tests/Security/CWE/CWE-409/ZSTD.qll | 2 - .../Security/CWE/CWE-409/ZlibGzopen.qll | 1 - .../Security/CWE/CWE-409/ZlibInflator.qll | 1 - .../Security/CWE/CWE-409/ZlibUncompress.qll | 1 - .../CWE/CWE-409/DecompressionBombs.expected | 104 +++++++++++++ .../Security/CWE/CWE-409/libarchiveTests.cpp | 147 ++++++++++++++++++ 11 files changed, 268 insertions(+), 14 deletions(-) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll index 5c19e53df07..705f7a1f3b9 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import semmle.code.cpp.commons.File import DecompressionBomb diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll index 7f69aa494c6..5d198eff61a 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll @@ -4,12 +4,10 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File import DecompressionBomb /** - * The `BZ2_bzDecompress` function as a Flow source + * The `BZ2_bzDecompress` function is used in flow sink */ class BZ2BzDecompressFunction extends DecompressionFunction { BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll index e5124006504..f5e39ca2675 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** @@ -18,3 +17,17 @@ class Archive_read_data_block extends DecompressionFunction { override int getArchiveParameterIndex() { result = 0 } } + +/** + * The `archive_read_open_filename` function as a flow step. + */ +class ReadOpenFunction extends DecompressionFlowStep { + ReadOpenFunction() { this.hasGlobalName("archive_read_open_filename") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asIndirectExpr() = fc.getArgument(1) and + node2.asIndirectExpr() = fc.getArgument(0) + ) + } +} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll index 1ebb7b277dc..a0365778c21 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** @@ -18,7 +17,7 @@ class Mz_zip_entry extends DecompressionFunction { } /** - * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow source. + * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow sink. * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) */ class Mz_zip_reader_entry extends DecompressionFunction { @@ -42,7 +41,7 @@ class UnzOpenFunction extends DecompressionFunction { } /** - * The `mz_zip_reader_open_file` and `mz_zip_reader_open_file_in_memory` functions as a flow source. + * The `mz_zip_reader_open_file` and `mz_zip_reader_open_file_in_memory` functions as a flow step. */ class ReaderOpenFunction extends DecompressionFlowStep { ReaderOpenFunction() { diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll index a0b17388b93..7839f3b4e6a 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll index c34170df625..e5973d97b9a 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll @@ -4,8 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll index edb8ef7ff68..851500b2cee 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll index 464dce3ac45..6a5d4b8f1ec 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll index 60943495d45..656bd98655d 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.security.FlowSources import DecompressionBomb /** diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected index 1879cb98fc4..17b196d697a 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected @@ -1,13 +1,51 @@ edges | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | +| libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | +| libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | +| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | +| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | +| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | provenance | | +| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | +| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:86:38:86:39 | *ar [Return] | provenance | | +| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | +| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | +| libarchiveTests.cpp:105:33:105:40 | *filename | libarchiveTests.cpp:123:40:123:47 | *filename | provenance | | +| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | +| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | provenance | | +| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | +| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | +| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | +| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | +| libarchiveTests.cpp:123:40:123:47 | *filename | libarchiveTests.cpp:123:37:123:37 | *a | provenance | Config | +| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | +| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | provenance | | +| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | +| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | +| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | +| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | provenance | | +| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | +| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| libarchiveTests.cpp:145:13:145:19 | *access to array | libarchiveTests.cpp:105:33:105:40 | *filename | provenance | | | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | @@ -81,6 +119,28 @@ nodes | brotliTest.cpp:29:32:29:35 | **argv | semmle.label | **argv | | brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | | brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | +| libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | +| libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | +| libarchiveTests.cpp:38:48:38:55 | *pArchive | semmle.label | *pArchive | +| libarchiveTests.cpp:38:48:38:55 | *pArchive | semmle.label | *pArchive | +| libarchiveTests.cpp:57:45:57:52 | *pArchive | semmle.label | *pArchive | +| libarchiveTests.cpp:57:45:57:52 | *pArchive | semmle.label | *pArchive | +| libarchiveTests.cpp:86:38:86:39 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:86:38:86:39 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:86:38:86:39 | *ar [Return] | semmle.label | *ar [Return] | +| libarchiveTests.cpp:93:33:93:34 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:93:33:93:34 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | semmle.label | archive_read_data_block output argument | +| libarchiveTests.cpp:105:33:105:40 | *filename | semmle.label | *filename | +| libarchiveTests.cpp:123:37:123:37 | *a | semmle.label | *a | +| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | semmle.label | archive_read_open_filename output argument | +| libarchiveTests.cpp:123:40:123:47 | *filename | semmle.label | *filename | +| libarchiveTests.cpp:126:34:126:34 | *a | semmle.label | *a | +| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | semmle.label | archive_read_next_header output argument | +| libarchiveTests.cpp:129:23:129:23 | *a | semmle.label | *a | +| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | semmle.label | copy_data output argument | +| libarchiveTests.cpp:144:32:144:35 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:145:13:145:19 | *access to array | semmle.label | *access to array | | minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | | minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | | minizipTest.cpp:36:32:36:35 | **argv | semmle.label | **argv | @@ -136,6 +196,11 @@ nodes | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | subpaths +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | +| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | +| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | +| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | +| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar [Return] | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | | minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | | minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | @@ -145,28 +210,67 @@ subpaths | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | #select | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | | zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp new file mode 100644 index 00000000000..d20486a007b --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp @@ -0,0 +1,147 @@ +#define ARCHIVE_EXTRACT_TIME (0x0004) +#define ARCHIVE_EXTRACT_PERM (0x0002) +#define ARCHIVE_EXTRACT_ACL (0x0020) +#define ARCHIVE_EXTRACT_FFLAGS (0x0040) +#define ARCHIVE_EOF 1 /* Found end of archive. */ +#define ARCHIVE_OK 0 /* Operation was successful. */ +#define ARCHIVE_WARN (-20) /* Partial success. */ + + +int archive_read_next_header(struct archive *a, struct archive_entry **entry) { + return 1; +} + +static struct archive *archive_read_new() { + return nullptr; +} + +static archive *archive_write_disk_new() { + return nullptr; +} + +static void archive_read_support_format_all(archive *pArchive) { + +} + +static void archive_read_support_filter_all(archive *pArchive) { + +} + +static void archive_write_disk_set_options(archive *pArchive, int flags) { + +} + +static void archive_write_disk_set_standard_lookup(archive *pArchive) { + +} + +static int archive_read_open_filename(archive *pArchive, const char *filename, int i) {} + +static void archive_error_string(archive *pArchive) { + +} + +struct archive_entry { +}; + +static int archive_write_header(archive *pArchive, archive_entry *entry) { + return 0; +} + +static int archive_entry_size(archive_entry *pEntry) { +} + +typedef int size_t; +typedef int la_int64_t; + +static int archive_read_data_block(archive *pArchive, const void **pVoid, size_t *pInt, la_int64_t *pInt1) { + return 0; +} + +static int archive_write_data_block(archive *pArchive, const void *pVoid, size_t size, la_int64_t offset) { + return 0; +} + +static int archive_write_finish_entry(archive *pArchive) { + return 0; +} + +static void archive_read_close(archive *pArchive) { + +} + +static void archive_read_free(archive *pArchive) { + +} + +static void archive_write_close(archive *pArchive) { + +} + +static void archive_write_free(archive *pArchive) { + +} + + +static int copy_data(struct archive *ar, struct archive *aw) { + int r; + const void *buff; + size_t size; + la_int64_t offset; + + for (;;) { + archive_read_data_block(ar, &buff, &size, &offset); + if (r == ARCHIVE_EOF) + return (ARCHIVE_OK); + if (r < ARCHIVE_OK) + return (r); + archive_write_data_block(aw, buff, size, offset); + if (r < ARCHIVE_OK) { + return (r); + } + } +} + +static void extract(const char *filename) { + struct archive *a; + struct archive *ext; + struct archive_entry *entry; + int flags; + int r; + /* Select which attributes we want to restore. */ + flags = ARCHIVE_EXTRACT_TIME; + flags |= ARCHIVE_EXTRACT_PERM; + flags |= ARCHIVE_EXTRACT_ACL; + flags |= ARCHIVE_EXTRACT_FFLAGS; + + a = archive_read_new(); + archive_read_support_format_all(a); + archive_read_support_filter_all(a); + ext = archive_write_disk_new(); + archive_write_disk_set_options(ext, flags); + archive_write_disk_set_standard_lookup(ext); + if ((archive_read_open_filename(a, filename, 10240))) + return; + for (;;) { + archive_read_next_header(a, &entry); + archive_write_header(ext, entry); + if (archive_entry_size(entry) > 0) { + copy_data(a, ext); + if (r < ARCHIVE_WARN) + break; + } + archive_write_finish_entry(ext); + if (r < ARCHIVE_WARN) + break; + } + archive_read_close(a); + archive_read_free(a); + archive_write_close(ext); + archive_write_free(ext); +} + + +int main(int argc, const char *argv[]) { + extract(argv[1]); + return 0; +} From a0f0854fdbe3191bdb22759adc1b804810bb687f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 3 Sep 2024 14:26:02 +0200 Subject: [PATCH 275/334] Dataflow: Fix minor typo. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 7841c72811b..6e4921521b1 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -298,7 +298,7 @@ signature module InputSig { /** Extra data-flow steps needed for lambda flow analysis. */ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue); - predicate knownSourceModel(Node sink, string model); + predicate knownSourceModel(Node source, string model); predicate knownSinkModel(Node sink, string model); From 4fc971dbcbef86368edf4c9ed53ba8d356da3a3a Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:48:36 +0200 Subject: [PATCH 276/334] remove xz(lzma) --- .../CWE/CWE-409/DecompressionBomb.qll | 1 - .../query-tests/Security/CWE/CWE-409/XZ.qll | 25 ------------------- 2 files changed, 26 deletions(-) delete mode 100644 cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll index ebc112f8f8b..6a46eb4a778 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -5,7 +5,6 @@ import ZlibGzopen import ZlibInflator import ZlibUncompress import LibArchive -import XZ import ZSTD import Bzip2 import Brotli diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll deleted file mode 100644 index 7839f3b4e6a..00000000000 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/XZ.qll +++ /dev/null @@ -1,25 +0,0 @@ -/** - * https://github.com/tukaani-project/xz - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import DecompressionBomb - -/** - * The `lzma_code` function is used in flow sink. - */ -class LzmaCodeFunction extends DecompressionFunction { - LzmaCodeFunction() { this.hasGlobalName(["lzma_code"]) } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * The `lzma_stream_buffer_decode` function is used in flow sink. - */ -class LzmaStreamBufferDecodeFunction extends DecompressionFunction { - LzmaStreamBufferDecodeFunction() { this.hasGlobalName(["lzma_stream_buffer_decode"]) } - - override int getArchiveParameterIndex() { result = 1 } -} From 81283d59ab2faaefdeb43e18740977969a82fd2c Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:24:36 +0200 Subject: [PATCH 277/334] remove more unused imports, add tests for zstd, add flow steps for zstd zstd is not finilized --- .../Security/CWE/CWE-409/Brotli.qll | 1 - .../CWE/CWE-409/DecompressionBombs.ql | 1 - .../query-tests/Security/CWE/CWE-409/ZSTD.qll | 43 +++++-- .../CWE/CWE-409/DecompressionBombs.expected | 120 ++++++++++++++++++ .../Security/CWE/CWE-409/zstdTest.cpp | 118 +++++++++++++++++ 5 files changed, 269 insertions(+), 14 deletions(-) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll index 705f7a1f3b9..f6d06ef1335 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll @@ -4,7 +4,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.commons.File import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql index 659e92d8498..cdc86836025 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql @@ -14,7 +14,6 @@ import cpp import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.commons.File import DecompressionBomb module DecompressionTaintConfig implements DataFlow::ConfigSig { diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll index e5973d97b9a..2683f03f7c2 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll @@ -9,8 +9,8 @@ import DecompressionBomb /** * The `ZSTD_decompress` function is used in flow sink. */ -class ZSTDDecompressFunction extends DecompressionFunction { - ZSTDDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } +class ZstdDecompressFunction extends DecompressionFunction { + ZstdDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } override int getArchiveParameterIndex() { result = 2 } } @@ -18,8 +18,8 @@ class ZSTDDecompressFunction extends DecompressionFunction { /** * The `ZSTD_decompressDCtx` function is used in flow sink. */ -class ZSTDDecompressDCtxFunction extends DecompressionFunction { - ZSTDDecompressDCtxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } +class ZstdDecompressDctxFunction extends DecompressionFunction { + ZstdDecompressDctxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } override int getArchiveParameterIndex() { result = 3 } } @@ -27,8 +27,8 @@ class ZSTDDecompressDCtxFunction extends DecompressionFunction { /** * The `ZSTD_decompressStream` function is used in flow sink. */ -class ZSTDDecompressStreamFunction extends DecompressionFunction { - ZSTDDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } +class ZstdDecompressStreamFunction extends DecompressionFunction { + ZstdDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } override int getArchiveParameterIndex() { result = 2 } } @@ -36,17 +36,36 @@ class ZSTDDecompressStreamFunction extends DecompressionFunction { /** * The `ZSTD_decompress_usingDDict` function is used in flow sink. */ -class ZSTDDecompressUsingDictFunction extends DecompressionFunction { - ZSTDDecompressUsingDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +class ZstdDecompressUsingDdictFunction extends DecompressionFunction { + ZstdDecompressUsingDdictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } override int getArchiveParameterIndex() { result = 3 } } /** - * The `ZSTD_decompress_usingDDict` function is used in flow sink. + * The `fopen_orDie` function as a flow step. */ -class ZSTDDecompressUsingDDictFunction extends DecompressionFunction { - ZSTDDecompressUsingDDictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } +class FopenOrDieFunction extends DecompressionFlowStep { + FopenOrDieFunction() { this.hasGlobalName("fopen_orDie") } - override int getArchiveParameterIndex() { result = 3 } + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asIndirectExpr() = fc.getArgument(0) and + node2.asExpr() = fc + ) + } +} + +/** + * The `fread_orDie` function as a flow step. + */ +class FreadOrDieFunction extends DecompressionFlowStep { + FreadOrDieFunction() { this.hasGlobalName("fread_orDie") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(FunctionCall fc | fc.getTarget() = this | + node1.asIndirectExpr() = fc.getArgument(2) and + node2.asIndirectExpr() = fc.getArgument(0) + ) + } } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected index 17b196d697a..5bd0f6bcde2 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected @@ -1,11 +1,14 @@ edges | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | @@ -35,21 +38,27 @@ edges | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | | libarchiveTests.cpp:145:13:145:19 | *access to array | libarchiveTests.cpp:105:33:105:40 | *filename | provenance | | | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | provenance | | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | provenance | | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | @@ -115,9 +124,20 @@ edges | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | provenance | | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | +| zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | +| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | nodes | brotliTest.cpp:29:32:29:35 | **argv | semmle.label | **argv | | brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:31:42:31:60 | access to array | semmle.label | access to array | | brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | | libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | | libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | @@ -146,6 +166,7 @@ nodes | minizipTest.cpp:36:32:36:35 | **argv | semmle.label | **argv | | minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | | minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:42:52:42:67 | access to array | semmle.label | access to array | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | semmle.label | mz_zip_entry_read output argument | | minizipTest.cpp:54:29:54:38 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:54:29:54:38 | *zip_reader | semmle.label | *zip_reader | @@ -156,6 +177,7 @@ nodes | minizipTest.cpp:60:30:60:39 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:60:30:60:39 | *zip_reader | semmle.label | *zip_reader | | minizipTest.cpp:69:13:69:19 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:69:13:69:19 | access to array | semmle.label | access to array | | minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | | minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | | minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | @@ -195,6 +217,7 @@ nodes | zlibTest.cpp:172:18:172:24 | *access to array | semmle.label | *access to array | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | +| zstdTest.cpp:114:33:114:36 | **argv | semmle.label | **argv | subpaths | libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | | libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | @@ -212,66 +235,163 @@ subpaths | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | | minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | | zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | | zlibTest.cpp:121:38:121:44 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp new file mode 100644 index 00000000000..e04b85adfb7 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp @@ -0,0 +1,118 @@ +typedef struct _IO_FILE FILE; + +static FILE *fopen_orDie(const char *filename, const char *instruction) { + return nullptr; +} + +typedef long unsigned int size_t; + +static const size_t ZSTD_DStreamInSize() { + return 0; +} + +static void *const malloc_orDie(const size_t size) { + return nullptr; +} + +static const size_t ZSTD_DStreamOutSize() { + return 0; +} + +struct ZSTD_DCtx { +}; + +typedef struct ZSTD_inBuffer_s { + const void *src; + size_t size; + size_t pos; +} ZSTD_inBuffer; +typedef struct ZSTD_outBuffer_s { + void *dst; + size_t size; + size_t pos; +} ZSTD_outBuffer; + +static ZSTD_DCtx *const ZSTD_createDCtx() { + return nullptr; +} + +static void CHECK(bool b, const char *string) { + +} + +static size_t fread_orDie(void *const pVoid, const size_t read, FILE *const pFile) { +} + +static void CHECK_ZSTD(const size_t ret) { + +} + +static void fwrite_orDie(void *const pVoid, size_t pos, FILE *const pFile) { + +} + +static void exit(int i) { + +} + +static void fclose_orDie(FILE *const pFile) { + +} + +static void free(void *const pVoid) { + +} + +static const size_t ZSTD_decompressStream(ZSTD_DCtx *const pCtx, ZSTD_outBuffer *pS, ZSTD_inBuffer *pS1) { + +} + +static void ZSTD_freeDCtx(ZSTD_DCtx *const pCtx) { + +} + +static void decompressFile_orDie(const char *fname) { + FILE *const fin = fopen_orDie(fname, "rb"); + size_t const buffInSize = ZSTD_DStreamInSize(); + void *const buffIn = malloc_orDie(buffInSize); + FILE *stdout; + FILE *const fout = stdout; + size_t const buffOutSize = ZSTD_DStreamOutSize(); /* Guarantee to successfully flush at least one complete compressed block in all circumstances. */ + void *const buffOut = malloc_orDie(buffOutSize); + + ZSTD_DCtx *const dctx = ZSTD_createDCtx(); + CHECK(dctx != nullptr, "ZSTD_createDCtx() failed!"); + size_t const toRead = buffInSize; + size_t read; + size_t lastRet = 0; + int isEmpty = 1; + while ((read = fread_orDie(buffIn, toRead, fin))) { + isEmpty = 0; + ZSTD_inBuffer input = {buffIn, read, 0}; + while (input.pos < input.size) { + ZSTD_outBuffer output = {buffOut, buffOutSize, 0}; + size_t const ret = ZSTD_decompressStream(dctx, &output, &input); + CHECK_ZSTD(ret); + fwrite_orDie(buffOut, output.pos, fout); + lastRet = ret; + } + } + if (isEmpty) { + exit(1); + } + if (lastRet != 0) { + exit(1); + } + ZSTD_freeDCtx(dctx); + fclose_orDie(fin); + fclose_orDie(fout); + free(buffIn); + free(buffOut); +} + + +int main(int argc, const char **argv) { + const char *const inFilename = argv[1]; + decompressFile_orDie(inFilename); + return 0; +} \ No newline at end of file From 386e45a11e14e9a9c8ff838abdd21bb03aa5979f Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:33:14 +0200 Subject: [PATCH 278/334] delete bzip2 as it is not updated for more than three years so it is not in the priority --- .../Security/CWE/CWE-409/Bzip2.qll | 43 ------------------- .../CWE/CWE-409/DecompressionBomb.qll | 1 - 2 files changed, 44 deletions(-) delete mode 100644 cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll deleted file mode 100644 index 5d198eff61a..00000000000 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Bzip2.qll +++ /dev/null @@ -1,43 +0,0 @@ -/** - * https://www.sourceware.org/bzip2/manual/manual.html - */ - -import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking -import DecompressionBomb - -/** - * The `BZ2_bzDecompress` function is used in flow sink - */ -class BZ2BzDecompressFunction extends DecompressionFunction { - BZ2BzDecompressFunction() { this.hasGlobalName(["BZ2_bzDecompress"]) } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * The `BZ2_bzReadOpen` function - */ -class BZ2BzReadOpenFunction extends DecompressionFunction { - BZ2BzReadOpenFunction() { this.hasGlobalName(["BZ2_bzReadOpen"]) } - - override int getArchiveParameterIndex() { result = 0 } -} - -/** - * The `BZ2_bzRead` function is used in flow sink. - */ -class BZ2BzReadFunction extends DecompressionFunction { - BZ2BzReadFunction() { this.hasGlobalName("BZ2_bzRead") } - - override int getArchiveParameterIndex() { result = 1 } -} - -/** - * The `BZ2_bzBuffToBuffDecompress` function is used in flow sink. - */ -class BZ2BzBuffToBuffDecompressFunction extends DecompressionFunction { - BZ2BzBuffToBuffDecompressFunction() { this.hasGlobalName("BZ2_bzBuffToBuffDecompress") } - - override int getArchiveParameterIndex() { result = 2 } -} diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll index 6a46eb4a778..e330e244c38 100644 --- a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll @@ -6,7 +6,6 @@ import ZlibInflator import ZlibUncompress import LibArchive import ZSTD -import Bzip2 import Brotli /** From d5948d2d95f9b0f25416cfcf8428487533622e93 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 3 Sep 2024 16:15:05 +0200 Subject: [PATCH 279/334] C++: Add change-note note for realloc as data-flow function --- cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md diff --git a/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md b/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md new file mode 100644 index 00000000000..3da89a025a5 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added a data-flow model for `realloc` and related functions. Previously they was modeled as a taint functions. This improves the precision of queries using data-flow or taint-tracking when `realloc` is involved. From 52819432c0deb30efb9e33f9027b207f2fea76bd Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 3 Sep 2024 17:18:18 +0200 Subject: [PATCH 280/334] C++: Address review comment --- cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 4 +++- 1 file changed, 3 insertions(+), 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 78c64e22282..91b57049a54 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -727,7 +727,9 @@ class C11GenericExpr extends Conversion, @c11_generic { * ``` * this holds for 0. */ - predicate isSelectedAssociation(int n) { this.getAssociationExpr(n) instanceof ReuseExpr } + predicate isSelectedAssociation(int n) { + this.getAssociationExpr(n).(ReuseExpr).getReusedExpr() = this.getExpr() + } } /** From f5c195d83089dbe174564798efdac5142702860c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 3 Sep 2024 16:24:55 +0100 Subject: [PATCH 281/334] Remove change note from 1.15.md We will include this change note when there is documentation about how to use the functionality. --- ...024-09-03-local-threat-models-file-environment.md | 12 ++++++++++++ go/ql/lib/change-notes/released/1.1.5.md | 12 ------------ 2 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 go/ql/lib/change-notes/2024-09-03-local-threat-models-file-environment.md diff --git a/go/ql/lib/change-notes/2024-09-03-local-threat-models-file-environment.md b/go/ql/lib/change-notes/2024-09-03-local-threat-models-file-environment.md new file mode 100644 index 00000000000..5efdd8a369e --- /dev/null +++ b/go/ql/lib/change-notes/2024-09-03-local-threat-models-file-environment.md @@ -0,0 +1,12 @@ +--- +category: minorAnalysis +--- +* Local source models for reading and parsing environment variables have been added for the following libraries: + * os + * syscall + * github.com/caarlos0/env + * github.com/gobuffalo/envy + * github.com/hashicorp/go-envparse + * github.com/joho/godotenv + * github.com/kelseyhightower/envconfig +* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/change-notes/released/1.1.5.md b/go/ql/lib/change-notes/released/1.1.5.md index 6f2221304e9..ccec4d55ebb 100644 --- a/go/ql/lib/change-notes/released/1.1.5.md +++ b/go/ql/lib/change-notes/released/1.1.5.md @@ -1,17 +1,5 @@ ## 1.1.5 -### Minor Analysis Improvements - -* Local source models for reading and parsing environment variables have been added for the following libraries: - - os - - syscall - - github.com/caarlos0/env - - github.com/gobuffalo/envy - - github.com/hashicorp/go-envparse - - github.com/joho/godotenv - - github.com/kelseyhightower/envconfig -* Local source models have been added for the APIs which open files in the `io/fs`, `io/ioutil` and `os` packages in the Go standard library. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). - ### Bug Fixes * Fixed an issue where `io/ioutil.WriteFile`'s non-path arguments incorrectly generated `go/path-injection` alerts when untrusted data was written to a file, or controlled the file's mode. From 36c71a959294be446431e4166355c57967a96d85 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Tue, 3 Sep 2024 11:47:02 -0400 Subject: [PATCH 282/334] Include hidden files when uploading Ruby pack --- .github/workflows/ruby-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index cc0944e5909..4a3242ce604 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -140,6 +140,7 @@ jobs: path: | ${{ runner.temp }}/query-packs/* retention-days: 1 + include-hidden-files: true package: runs-on: ubuntu-latest @@ -176,6 +177,7 @@ jobs: name: codeql-ruby-pack path: ruby/codeql-ruby.zip retention-days: 1 + include-hidden-files: true - uses: actions/download-artifact@v3 with: name: codeql-ruby-queries @@ -193,6 +195,7 @@ jobs: name: codeql-ruby-bundle path: ruby/codeql-ruby-bundle.zip retention-days: 1 + include-hidden-files: true test: defaults: From 8ca52f278a72c01d608fdfea1427fddd4d7aaa77 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 30 Aug 2024 17:30:16 +0200 Subject: [PATCH 283/334] C++: Fix coroutine IR inconsistencies While here, remove some dead code related to fixed points from the database scheme. --- .../coroutine.ql | 18 + .../old.dbscheme | 2315 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2319 +++++++++++++++++ .../upgrade.properties | 4 + cpp/ql/lib/semmle/code/cpp/Variable.qll | 7 + cpp/ql/lib/semmlecode.cpp.dbscheme | 34 +- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 739 +++--- .../old.dbscheme | 2319 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2315 ++++++++++++++++ .../upgrade.properties | 4 + .../upgrades.ql | 19 + .../library-tests/ir/ir/aliased_ir.expected | 1080 ++++---- .../ir/ir/aliased_ssa_consistency.expected | 22 - .../aliased_ssa_consistency_unsound.expected | 22 - .../ir/ir/raw_consistency.expected | 28 - .../test/library-tests/ir/ir/raw_ir.expected | 660 ++--- .../ir/ir/unaliased_ssa_consistency.expected | 22 - ...unaliased_ssa_consistency_unsound.expected | 22 - 18 files changed, 10543 insertions(+), 1406 deletions(-) create mode 100644 cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql create mode 100644 cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme create mode 100644 cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrades.ql diff --git a/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql new file mode 100644 index 00000000000..293d18945b8 --- /dev/null +++ b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql @@ -0,0 +1,18 @@ + class Function extends @function { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +class Variable extends @variable { + string toString() { none() } +} + +from Function func, Type traits, Variable handle, Variable promise +where + coroutine(func, traits) and + coroutine_placeholder_variable(handle, 1, func) and + coroutine_placeholder_variable(promise, 2, func) +select func, traits, handle, promise diff --git a/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme new file mode 100644 index 00000000000..7ff6a6e53db --- /dev/null +++ b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme @@ -0,0 +1,2315 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..0fea0ee7026 --- /dev/null +++ b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme @@ -0,0 +1,2319 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties new file mode 100644 index 00000000000..cb2077596c3 --- /dev/null +++ b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties @@ -0,0 +1,4 @@ +description: Improve handling of coroutine placeholder variables +compatibility: full +coroutine.rel: run coroutine.qlo +coroutine_placeholder_variable.rel: delete diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index 8d78dbd2c71..96bfabb4de0 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -409,11 +409,18 @@ class LocalVariable extends LocalScopeVariable, @localvariable { exists(ConditionDeclExpr e | e.getVariable() = this and e.getEnclosingFunction() = result) or orphaned_variables(underlyingElement(this), unresolveElement(result)) + or + coroutine_placeholder_variable(underlyingElement(this), _, unresolveElement(result)) } override predicate isStatic() { super.isStatic() or orphaned_variables(underlyingElement(this), _) } + + override predicate isCompilerGenerated() { + super.isCompilerGenerated() or + coroutine_placeholder_variable(underlyingElement(this), _, _) + } } /** diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 0fea0ee7026..7ff6a6e53db 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -384,11 +384,23 @@ function_return_type( */ coroutine( unique int function: @function ref, - int traits: @type ref, - int handle: @variable ref, - int promise: @variable ref + int traits: @type ref ); +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + /** The `new` function used for allocating the coroutine state, if any. */ coroutine_new( unique int function: @function ref, @@ -829,22 +841,6 @@ variable_template_argument_value( 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 diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 73e6d0bf972..07045b0bd67 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -98,7 +98,7 @@ @localvariable - 576947 + 576946 @enumconstant @@ -370,7 +370,7 @@ @usertype - 5234031 + 5234965 @mangledname @@ -468,10 +468,6 @@ @initialiser 1710781 - - @lambdacapture - 28011 - @address_of 438815 @@ -482,11 +478,11 @@ @array_to_pointer - 1430839 + 1430838 @parexpr - 3587480 + 3587479 @arithnegexpr @@ -522,7 +518,7 @@ @conditionalexpr - 657238 + 657237 @addexpr @@ -1360,6 +1356,10 @@ @c11_generic 8 + + @lambdacapture + 28011 + @stmt_expr 1486025 @@ -2148,7 +2148,7 @@ seconds - 9868 + 9149 @@ -2229,47 +2229,47 @@ 3 4 - 679 + 759 4 5 - 319 + 239 - 6 - 7 + 5 + 8 159 - 7 + 8 10 - 159 + 119 10 11 - 79 + 159 11 - 14 + 15 159 - 16 - 18 + 17 + 19 159 - 19 - 27 + 20 + 44 159 - 41 - 88 - 119 + 50 + 92 + 79 @@ -2337,42 +2337,42 @@ 3 4 - 1518 + 1478 4 5 - 319 + 279 5 6 - 199 + 239 6 7 - 399 + 479 7 8 - 119 + 39 8 - 10 + 9 279 - 10 - 28 - 279 + 9 + 24 + 239 - 28 - 86 - 199 + 25 + 88 + 279 @@ -2420,16 +2420,21 @@ 3 4 - 79 - - - 134 - 135 39 - 148 - 149 + 4 + 5 + 39 + + + 124 + 125 + 39 + + + 129 + 130 39 @@ -2446,27 +2451,27 @@ 1 2 - 5033 + 4394 2 3 - 2556 + 1757 3 4 - 1438 + 1518 4 - 16 - 759 + 5 + 998 - 27 + 5 46 - 79 + 479 @@ -2482,17 +2487,17 @@ 1 2 - 4314 + 4115 2 3 - 2237 + 1478 3 4 - 1638 + 1478 4 @@ -2501,13 +2506,13 @@ 5 - 11 - 759 + 6 + 559 - 16 - 76 - 119 + 6 + 75 + 719 @@ -2523,12 +2528,12 @@ 1 2 - 8230 + 7910 2 3 - 1638 + 1238 @@ -2872,7 +2877,7 @@ cpu_seconds - 7168 + 7100 elapsed_seconds @@ -2922,17 +2927,22 @@ 1 2 - 5779 + 5655 2 3 - 846 + 857 3 - 18 - 541 + 7 + 553 + + + 11 + 13 + 33 @@ -2948,7 +2958,7 @@ 1 2 - 6468 + 6400 2 @@ -2967,9 +2977,9 @@ 12 - 1 - 2 - 22 + 2 + 3 + 33 4 @@ -2977,18 +2987,13 @@ 11 - 5 - 6 + 8 + 9 11 - 9 - 10 - 11 - - - 12 - 13 + 13 + 14 22 @@ -2997,18 +3002,23 @@ 11 - 153 - 154 + 159 + 160 11 177 178 - 22 + 11 - 261 - 262 + 185 + 186 + 11 + + + 247 + 248 11 @@ -3023,9 +3033,9 @@ 12 - 1 - 2 - 22 + 2 + 3 + 33 4 @@ -3033,19 +3043,19 @@ 11 - 5 - 6 - 11 - - - 9 - 10 + 8 + 9 11 12 13 - 22 + 11 + + + 13 + 14 + 11 49 @@ -3053,23 +3063,23 @@ 11 - 106 - 107 + 112 + 113 11 - 127 - 128 + 124 + 125 11 - 135 - 136 + 145 + 146 11 - 236 - 237 + 218 + 219 11 @@ -12346,15 +12356,15 @@ inmacroexpansion - 109779198 + 109779137 id - 18027369 + 18027366 inv - 2700171 + 2700175 @@ -12368,32 +12378,32 @@ 1 3 - 1581956 + 1581965 3 5 - 1077799 + 1077798 5 6 - 1184884 + 1184883 6 7 - 4819927 + 4819923 7 8 - 6385963 + 6385959 8 9 - 2605255 + 2605253 9 @@ -12414,12 +12424,12 @@ 1 2 - 378424 + 378428 2 3 - 544108 + 544105 3 @@ -12429,7 +12439,7 @@ 4 7 - 200659 + 200660 7 @@ -12449,12 +12459,12 @@ 10 11 - 325487 + 325486 11 337 - 224847 + 224849 339 @@ -12474,15 +12484,15 @@ affectedbymacroexpansion - 35689096 + 35689082 id - 5156743 + 5156745 inv - 2784774 + 2784776 @@ -12496,12 +12506,12 @@ 1 2 - 2815934 + 2815933 2 3 - 560129 + 560132 3 @@ -12542,7 +12552,7 @@ 1 4 - 229116 + 229120 4 @@ -12557,7 +12567,7 @@ 9 12 - 251088 + 251087 12 @@ -13883,14 +13893,6 @@ traits 3 - - handle - 6 - - - promise - 6 - @@ -13910,8 +13912,8 @@ - function - handle + traits + function 12 @@ -13919,6 +13921,116 @@ 1 2 + 1 + + + 2 + 3 + 1 + + + 3 + 4 + 1 + + + + + + + + + coroutine_placeholder_variable + 18 + + + placeholder_variable + 18 + + + kind + 3 + + + function + 6 + + + + + placeholder_variable + kind + + + 12 + + + 1 + 2 + 18 + + + + + + + placeholder_variable + function + + + 12 + + + 1 + 2 + 18 + + + + + + + kind + placeholder_variable + + + 12 + + + 6 + 7 + 3 + + + + + + + kind + function + + + 12 + + + 6 + 7 + 3 + + + + + + + function + placeholder_variable + + + 12 + + + 3 + 4 6 @@ -13927,188 +14039,14 @@ function - promise + kind 12 - - 1 - 2 - 6 - - - - - - - traits - function - - - 12 - - - 1 - 2 - 1 - - - 2 - 3 - 1 - 3 4 - 1 - - - - - - - traits - handle - - - 12 - - - 1 - 2 - 1 - - - 2 - 3 - 1 - - - 3 - 4 - 1 - - - - - - - traits - promise - - - 12 - - - 1 - 2 - 1 - - - 2 - 3 - 1 - - - 3 - 4 - 1 - - - - - - - handle - function - - - 12 - - - 1 - 2 - 6 - - - - - - - handle - traits - - - 12 - - - 1 - 2 - 6 - - - - - - - handle - promise - - - 12 - - - 1 - 2 - 6 - - - - - - - promise - function - - - 12 - - - 1 - 2 - 6 - - - - - - - promise - traits - - - 12 - - - 1 - 2 - 6 - - - - - - - promise - handle - - - 12 - - - 1 - 2 6 @@ -18313,7 +18251,7 @@ new - 122753 + 122752 old @@ -18739,11 +18677,11 @@ localvariables - 576947 + 576946 id - 576947 + 576946 type_id @@ -18765,7 +18703,7 @@ 1 2 - 576947 + 576946 @@ -18781,7 +18719,7 @@ 1 2 - 576947 + 576946 @@ -21817,11 +21755,11 @@ usertypes - 5234031 + 5234965 id - 5234031 + 5234965 name @@ -21843,7 +21781,7 @@ 1 2 - 5234031 + 5234965 @@ -21859,7 +21797,7 @@ 1 2 - 5234031 + 5234965 @@ -21916,12 +21854,12 @@ 2 3 - 125586 + 125120 3 7 - 14939 + 15406 @@ -21955,8 +21893,8 @@ 466 - 133 - 134 + 135 + 136 466 @@ -22021,8 +21959,8 @@ 466 - 41 - 42 + 43 + 44 466 @@ -22063,11 +22001,11 @@ usertypesize - 1706394 + 1707327 id - 1706394 + 1707327 size @@ -22089,7 +22027,7 @@ 1 2 - 1706394 + 1707327 @@ -22105,7 +22043,7 @@ 1 2 - 1706394 + 1707327 @@ -22160,7 +22098,7 @@ 740 - 2470 + 2472 933 @@ -22221,8 +22159,8 @@ 466 - 3209 - 3210 + 3211 + 3212 466 @@ -22333,11 +22271,11 @@ mangled_name - 9019378 + 9020312 id - 9019378 + 9020312 mangled_name @@ -22359,7 +22297,7 @@ 1 2 - 9019378 + 9020312 @@ -22375,7 +22313,7 @@ 1 2 - 9019378 + 9020312 @@ -22426,8 +22364,8 @@ 12 - 19319 - 19320 + 19321 + 19322 466 @@ -22465,22 +22403,22 @@ is_standard_layout_class - 1254001 + 1254935 id - 1254001 + 1254935 is_complete - 1645701 + 1646635 id - 1645701 + 1646635 @@ -22998,15 +22936,15 @@ is_proxy_class_for - 62093 + 63026 id - 62093 + 63026 templ_param_id - 62093 + 63026 @@ -23020,7 +22958,7 @@ 1 2 - 62093 + 63026 @@ -23036,7 +22974,7 @@ 1 2 - 62093 + 63026 @@ -24962,11 +24900,11 @@ typespecifiers - 1132149 + 1133083 type_id - 1113941 + 1114875 spec_id @@ -24984,7 +24922,7 @@ 1 2 - 1095733 + 1096667 2 @@ -25030,7 +24968,12 @@ 219 220 - 933 + 466 + + + 221 + 222 + 466 1701 @@ -25045,7 +24988,7 @@ funspecifiers - 10305126 + 10304659 func_id @@ -25072,12 +25015,12 @@ 2 3 - 640539 + 641006 3 4 - 985553 + 985086 4 @@ -25186,8 +25129,8 @@ 466 - 6435 - 6436 + 6434 + 6435 466 @@ -26862,15 +26805,15 @@ unspecifiedtype - 9488111 + 9489045 type_id - 9488111 + 9489045 unspecified_type_id - 6490367 + 6491300 @@ -26884,7 +26827,7 @@ 1 2 - 9488111 + 9489045 @@ -26900,7 +26843,7 @@ 1 2 - 4558943 + 4559877 2 @@ -28814,15 +28757,15 @@ exprconv - 7033025 + 7033022 converted - 7033025 + 7033022 conversion - 7033025 + 7033022 @@ -28836,7 +28779,7 @@ 1 2 - 7033025 + 7033022 @@ -28852,7 +28795,7 @@ 1 2 - 7033025 + 7033022 @@ -29857,7 +29800,7 @@ qualifyingelement - 97538 + 97519 location @@ -29971,7 +29914,7 @@ 1 2 - 58420 + 58401 2 @@ -30007,7 +29950,7 @@ 1 2 - 58420 + 58401 2 @@ -30043,7 +29986,7 @@ 1 2 - 63834 + 63815 2 @@ -30156,12 +30099,12 @@ 1 2 - 137055 + 137074 2 3 - 55703 + 55684 3 @@ -30282,7 +30225,7 @@ fun - 511325 + 511344 @@ -30317,12 +30260,12 @@ 1 2 - 315052 + 315090 2 3 - 77912 + 77893 3 @@ -30625,15 +30568,15 @@ expr_cond_guard - 657238 + 657237 cond - 657238 + 657237 guard - 657238 + 657237 @@ -30647,7 +30590,7 @@ 1 2 - 657238 + 657237 @@ -30663,7 +30606,7 @@ 1 2 - 657238 + 657237 @@ -30721,15 +30664,15 @@ expr_cond_false - 657238 + 657237 cond - 657238 + 657237 false - 657238 + 657237 @@ -30743,7 +30686,7 @@ 1 2 - 657238 + 657237 @@ -30759,7 +30702,7 @@ 1 2 - 657238 + 657237 @@ -36328,11 +36271,11 @@ stmt_decl_bind - 580844 + 580843 stmt - 541062 + 541061 num @@ -36340,7 +36283,7 @@ decl - 580740 + 580739 @@ -36354,7 +36297,7 @@ 1 2 - 520373 + 520372 2 @@ -36375,7 +36318,7 @@ 1 2 - 520373 + 520372 2 @@ -36578,7 +36521,7 @@ 1 2 - 580703 + 580702 2 @@ -36599,7 +36542,7 @@ 1 2 - 580740 + 580739 @@ -36609,11 +36552,11 @@ stmt_decl_entry_bind - 580844 + 580843 stmt - 541062 + 541061 num @@ -36621,7 +36564,7 @@ decl_entry - 580786 + 580785 @@ -36635,7 +36578,7 @@ 1 2 - 520373 + 520372 2 @@ -36656,7 +36599,7 @@ 1 2 - 520373 + 520372 2 @@ -36859,7 +36802,7 @@ 1 2 - 580765 + 580764 3 @@ -36880,7 +36823,7 @@ 1 2 - 580786 + 580785 diff --git a/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme new file mode 100644 index 00000000000..0fea0ee7026 --- /dev/null +++ b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/old.dbscheme @@ -0,0 +1,2319 @@ + +/** + * 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..7ff6a6e53db --- /dev/null +++ b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/semmlecode.cpp.dbscheme @@ -0,0 +1,2315 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @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 +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* 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 + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties new file mode 100644 index 00000000000..fcd771ec854 --- /dev/null +++ b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrade.properties @@ -0,0 +1,4 @@ +description: Improve handling of coroutine placeholder variables +compatibility: partial +coroutine.rel: run upgrades.qlo new_coroutine +coroutine_placeholder_variable.rel: run upgrades.qlo new_coroutine_placeholder_variable diff --git a/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrades.ql b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrades.ql new file mode 100644 index 00000000000..d34a7c787ae --- /dev/null +++ b/cpp/ql/lib/upgrades/0fea0ee7026c7c3f7d6faef4df4bf67847b67d71/upgrades.ql @@ -0,0 +1,19 @@ +class Function extends @function { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +class Variable extends @variable { + string toString() { none() } +} + +query predicate new_coroutine(Function func, Type traits) { coroutine(func, traits, _, _) } + +query predicate new_coroutine_placeholder_variable(Variable var, int kind, Function func) { + coroutine(func, _, var, _) and kind = 1 + or + coroutine(func, _, _, var) and kind = 2 +} 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 51d5c943c4c..dedc58394f9 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -785,66 +785,65 @@ coroutines.cpp: #-----| Block 1 #-----| m0_4(unknown) = Phi : from 0:~m87_34, from 2:~m87_61 #-----| r0_5(bool) = Constant[1] : -#-----| r0_6(glval) = VariableAddress : -#-----| m0_7(bool) = Store[?] : &:r0_6, r0_5 -#-----| m0_8(unknown) = Chi : total:m0_4, partial:m0_7 +#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_7(bool) = Store[(unnamed local variable)] : &:r0_6, r0_5 # 87| r87_36(suspend_always *) = CopyValue : r87_27 # 87| r87_37(glval) = CopyValue : r87_36 -#-----| r0_9(glval) = Convert : r87_37 +#-----| r0_8(glval) = Convert : r87_37 # 87| r87_38(glval) = FunctionAddress[await_resume] : -# 87| v87_39(void) = Call[await_resume] : func:r87_38, this:r0_9 -# 87| m87_40(unknown) = ^CallSideEffect : ~m0_8 -# 87| m87_41(unknown) = Chi : total:m0_8, partial:m87_40 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m87_41 -#-----| v0_11(void) = CopyValue : v87_39 -#-----| r0_12(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_13(glval) = FunctionAddress[return_void] : -#-----| v0_14(void) = Call[return_void] : func:r0_13, this:r0_12 -#-----| m0_15(unknown) = ^CallSideEffect : ~m87_41 -#-----| m0_16(unknown) = Chi : total:m87_41, partial:m0_15 -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m0_16 -#-----| m0_18(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_12 -#-----| m0_19(unknown) = Chi : total:m0_16, partial:m0_18 +# 87| v87_39(void) = Call[await_resume] : func:r87_38, this:r0_8 +# 87| m87_40(unknown) = ^CallSideEffect : ~m0_4 +# 87| m87_41(unknown) = Chi : total:m0_4, partial:m87_40 +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m87_41 +#-----| v0_10(void) = CopyValue : v87_39 +#-----| r0_11(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_12(glval) = FunctionAddress[return_void] : +#-----| v0_13(void) = Call[return_void] : func:r0_12, this:r0_11 +#-----| m0_14(unknown) = ^CallSideEffect : ~m87_41 +#-----| m0_15(unknown) = Chi : total:m87_41, partial:m0_14 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m0_15 +#-----| m0_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_11 +#-----| m0_18(unknown) = Chi : total:m0_15, partial:m0_17 # 88| v88_1(void) = NoOp : -#-----| v0_20(void) = NoOp : +#-----| v0_19(void) = NoOp : #-----| Goto (back edge) -> Block 3 # 87| Block 2 -# 87| r87_42(suspend_always *) = CopyValue : r87_27 -# 87| r87_43(glval) = CopyValue : r87_42 -#-----| r0_21(glval) = Convert : r87_43 -# 87| r87_44(glval) = FunctionAddress[await_suspend] : -# 87| r87_45(glval>) = VariableAddress[#temp87:20] : -# 87| m87_46(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_45 -# 87| m87_47(unknown) = Chi : total:m87_34, partial:m87_46 -# 87| r87_48(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_49(glval>) = VariableAddress : -# 87| r87_50(glval>) = Convert : r87_49 -# 87| r87_51(coroutine_handle &) = CopyValue : r87_50 -# 87| v87_52(void) = Call[coroutine_handle] : func:r87_48, this:r87_45, 0:r87_51 -# 87| m87_53(unknown) = ^CallSideEffect : ~m87_47 -# 87| m87_54(unknown) = Chi : total:m87_47, partial:m87_53 -# 87| v87_55(void) = ^BufferReadSideEffect[0] : &:r87_51, ~m87_54 -# 87| m87_56(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_45 -# 87| m87_57(unknown) = Chi : total:m87_54, partial:m87_56 -# 87| r87_58(coroutine_handle) = Load[#temp87:20] : &:r87_45, ~m87_57 -# 87| v87_59(void) = Call[await_suspend] : func:r87_44, this:r0_21, 0:r87_58 -# 87| m87_60(unknown) = ^CallSideEffect : ~m87_57 -# 87| m87_61(unknown) = Chi : total:m87_57, partial:m87_60 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m87_61 +# 87| r87_42(suspend_always *) = CopyValue : r87_27 +# 87| r87_43(glval) = CopyValue : r87_42 +#-----| r0_20(glval) = Convert : r87_43 +# 87| r87_44(glval) = FunctionAddress[await_suspend] : +# 87| r87_45(glval>) = VariableAddress[#temp87:20] : +# 87| m87_46(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_45 +# 87| m87_47(unknown) = Chi : total:m87_34, partial:m87_46 +# 87| r87_48(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_49(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_50(glval>) = Convert : r87_49 +# 87| r87_51(coroutine_handle &) = CopyValue : r87_50 +# 87| v87_52(void) = Call[coroutine_handle] : func:r87_48, this:r87_45, 0:r87_51 +# 87| m87_53(unknown) = ^CallSideEffect : ~m87_47 +# 87| m87_54(unknown) = Chi : total:m87_47, partial:m87_53 +# 87| v87_55(void) = ^BufferReadSideEffect[0] : &:r87_51, ~m87_54 +# 87| m87_56(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_45 +# 87| m87_57(unknown) = Chi : total:m87_54, partial:m87_56 +# 87| r87_58(coroutine_handle) = Load[#temp87:20] : &:r87_45, ~m87_57 +# 87| v87_59(void) = Call[await_suspend] : func:r87_44, this:r0_20, 0:r87_58 +# 87| m87_60(unknown) = ^CallSideEffect : ~m87_57 +# 87| m87_61(unknown) = Chi : total:m87_57, partial:m87_60 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m87_61 #-----| Goto -> Block 1 #-----| Block 3 -#-----| v0_23(void) = NoOp : +#-----| v0_22(void) = NoOp : # 87| r87_62(glval) = VariableAddress[(unnamed local variable)] : # 87| r87_63(glval) = FunctionAddress[final_suspend] : # 87| r87_64(suspend_always) = Call[final_suspend] : func:r87_63, this:r87_62 -# 87| m87_65(unknown) = ^CallSideEffect : ~m0_19 -# 87| m87_66(unknown) = Chi : total:m0_19, partial:m87_65 +# 87| m87_65(unknown) = ^CallSideEffect : ~m0_18 +# 87| m87_66(unknown) = Chi : total:m0_18, partial:m87_65 # 87| v87_67(void) = ^IndirectReadSideEffect[-1] : &:r87_62, ~m87_66 # 87| m87_68(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_62 # 87| m87_69(unknown) = Chi : total:m87_66, partial:m87_68 -#-----| r0_24(glval) = VariableAddress[#temp0:0] : +#-----| r0_23(glval) = VariableAddress[#temp0:0] : # 87| r87_70(glval) = VariableAddress[#temp87:20] : # 87| r87_71(glval) = VariableAddress[(unnamed local variable)] : # 87| r87_72(glval) = FunctionAddress[final_suspend] : @@ -857,16 +856,16 @@ coroutines.cpp: # 87| m87_79(suspend_always) = Store[#temp87:20] : &:r87_70, r87_73 # 87| m87_80(unknown) = Chi : total:m87_78, partial:m87_79 # 87| r87_81(suspend_always *) = CopyValue : r87_70 -# 87| m87_82(suspend_always *) = Store[#temp0:0] : &:r0_24, r87_81 -#-----| r0_25(suspend_always *) = Load[#temp0:0] : &:r0_24, m87_82 -# 87| r87_83(glval) = CopyValue : r0_25 +# 87| m87_82(suspend_always *) = Store[#temp0:0] : &:r0_23, r87_81 +#-----| r0_24(suspend_always *) = Load[#temp0:0] : &:r0_23, m87_82 +# 87| r87_83(glval) = CopyValue : r0_24 # 87| r87_84(glval) = Convert : r87_83 # 87| r87_85(glval) = FunctionAddress[await_ready] : # 87| r87_86(bool) = Call[await_ready] : func:r87_85, this:r87_84 # 87| m87_87(unknown) = ^CallSideEffect : ~m87_80 # 87| m87_88(unknown) = Chi : total:m87_80, partial:m87_87 # 87| v87_89(void) = ^IndirectReadSideEffect[-1] : &:r87_84, ~m87_88 -#-----| v0_26(void) = ConditionalBranch : r87_86 +#-----| v0_25(void) = ConditionalBranch : r87_86 #-----| False -> Block 5 #-----| True -> Block 4 @@ -874,40 +873,40 @@ coroutines.cpp: # 87| m87_90(unknown) = Phi : from 3:~m87_88, from 5:~m87_120 # 87| r87_91(suspend_always *) = CopyValue : r87_81 # 87| r87_92(glval) = CopyValue : r87_91 -#-----| r0_27(glval) = Convert : r87_92 +#-----| r0_26(glval) = Convert : r87_92 # 87| r87_93(glval) = FunctionAddress[await_resume] : -# 87| v87_94(void) = Call[await_resume] : func:r87_93, this:r0_27 +# 87| v87_94(void) = Call[await_resume] : func:r87_93, this:r0_26 # 87| m87_95(unknown) = ^CallSideEffect : ~m87_90 # 87| m87_96(unknown) = Chi : total:m87_90, partial:m87_95 -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m87_96 +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m87_96 # 87| r87_97(glval) = VariableAddress[#return] : # 87| v87_98(void) = ReturnValue : &:r87_97, ~m87_96 # 87| v87_99(void) = AliasedUse : ~m87_96 # 87| v87_100(void) = ExitFunction : # 87| Block 5 -# 87| r87_101(suspend_always *) = CopyValue : r87_81 -# 87| r87_102(glval) = CopyValue : r87_101 -#-----| r0_29(glval) = Convert : r87_102 -# 87| r87_103(glval) = FunctionAddress[await_suspend] : -# 87| r87_104(glval>) = VariableAddress[#temp87:20] : -# 87| m87_105(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_104 -# 87| m87_106(unknown) = Chi : total:m87_88, partial:m87_105 -# 87| r87_107(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_108(glval>) = VariableAddress : -# 87| r87_109(glval>) = Convert : r87_108 -# 87| r87_110(coroutine_handle &) = CopyValue : r87_109 -# 87| v87_111(void) = Call[coroutine_handle] : func:r87_107, this:r87_104, 0:r87_110 -# 87| m87_112(unknown) = ^CallSideEffect : ~m87_106 -# 87| m87_113(unknown) = Chi : total:m87_106, partial:m87_112 -# 87| v87_114(void) = ^BufferReadSideEffect[0] : &:r87_110, ~m87_113 -# 87| m87_115(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_104 -# 87| m87_116(unknown) = Chi : total:m87_113, partial:m87_115 -# 87| r87_117(coroutine_handle) = Load[#temp87:20] : &:r87_104, ~m87_116 -# 87| v87_118(void) = Call[await_suspend] : func:r87_103, this:r0_29, 0:r87_117 -# 87| m87_119(unknown) = ^CallSideEffect : ~m87_116 -# 87| m87_120(unknown) = Chi : total:m87_116, partial:m87_119 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m87_120 +# 87| r87_101(suspend_always *) = CopyValue : r87_81 +# 87| r87_102(glval) = CopyValue : r87_101 +#-----| r0_28(glval) = Convert : r87_102 +# 87| r87_103(glval) = FunctionAddress[await_suspend] : +# 87| r87_104(glval>) = VariableAddress[#temp87:20] : +# 87| m87_105(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_104 +# 87| m87_106(unknown) = Chi : total:m87_88, partial:m87_105 +# 87| r87_107(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_108(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_109(glval>) = Convert : r87_108 +# 87| r87_110(coroutine_handle &) = CopyValue : r87_109 +# 87| v87_111(void) = Call[coroutine_handle] : func:r87_107, this:r87_104, 0:r87_110 +# 87| m87_112(unknown) = ^CallSideEffect : ~m87_106 +# 87| m87_113(unknown) = Chi : total:m87_106, partial:m87_112 +# 87| v87_114(void) = ^BufferReadSideEffect[0] : &:r87_110, ~m87_113 +# 87| m87_115(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_104 +# 87| m87_116(unknown) = Chi : total:m87_113, partial:m87_115 +# 87| r87_117(coroutine_handle) = Load[#temp87:20] : &:r87_104, ~m87_116 +# 87| v87_118(void) = Call[await_suspend] : func:r87_103, this:r0_28, 0:r87_117 +# 87| m87_119(unknown) = ^CallSideEffect : ~m87_116 +# 87| m87_120(unknown) = Chi : total:m87_116, partial:m87_119 +#-----| v0_29(void) = ^IndirectReadSideEffect[-1] : &:r0_28, ~m87_120 #-----| Goto -> Block 4 # 91| co_returnable_value co_return_int(int) @@ -962,68 +961,67 @@ coroutines.cpp: #-----| Block 1 #-----| m0_8(unknown) = Phi : from 0:~m91_36, from 2:~m91_63 #-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 -#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 # 91| r91_38(suspend_always *) = CopyValue : r91_29 # 91| r91_39(glval) = CopyValue : r91_38 -#-----| r0_13(glval) = Convert : r91_39 +#-----| r0_12(glval) = Convert : r91_39 # 91| r91_40(glval) = FunctionAddress[await_resume] : -# 91| v91_41(void) = Call[await_resume] : func:r91_40, this:r0_13 -# 91| m91_42(unknown) = ^CallSideEffect : ~m0_12 -# 91| m91_43(unknown) = Chi : total:m0_12, partial:m91_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m91_43 -#-----| v0_15(void) = CopyValue : v91_41 -#-----| r0_16(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_17(glval) = FunctionAddress[return_value] : +# 91| v91_41(void) = Call[await_resume] : func:r91_40, this:r0_12 +# 91| m91_42(unknown) = ^CallSideEffect : ~m0_8 +# 91| m91_43(unknown) = Chi : total:m0_8, partial:m91_42 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m91_43 +#-----| v0_14(void) = CopyValue : v91_41 +#-----| r0_15(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_16(glval) = FunctionAddress[return_value] : # 92| r92_1(glval) = VariableAddress[i] : # 92| r92_2(int) = Load[i] : &:r92_1, m0_4 -#-----| v0_18(void) = Call[return_value] : func:r0_17, this:r0_16, 0:r92_2 -#-----| m0_19(unknown) = ^CallSideEffect : ~m91_43 -#-----| m0_20(unknown) = Chi : total:m91_43, partial:m0_19 -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m0_20 -#-----| m0_22(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_16 -#-----| m0_23(unknown) = Chi : total:m0_20, partial:m0_22 +#-----| v0_17(void) = Call[return_value] : func:r0_16, this:r0_15, 0:r92_2 +#-----| m0_18(unknown) = ^CallSideEffect : ~m91_43 +#-----| m0_19(unknown) = Chi : total:m91_43, partial:m0_18 +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m0_19 +#-----| m0_21(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_15 +#-----| m0_22(unknown) = Chi : total:m0_19, partial:m0_21 # 92| v92_3(void) = NoOp : -#-----| v0_24(void) = NoOp : +#-----| v0_23(void) = NoOp : #-----| Goto (back edge) -> Block 3 # 91| Block 2 -# 91| r91_44(suspend_always *) = CopyValue : r91_29 -# 91| r91_45(glval) = CopyValue : r91_44 -#-----| r0_25(glval) = Convert : r91_45 -# 91| r91_46(glval) = FunctionAddress[await_suspend] : -# 91| r91_47(glval>) = VariableAddress[#temp91:21] : -# 91| m91_48(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_47 -# 91| m91_49(unknown) = Chi : total:m91_36, partial:m91_48 -# 91| r91_50(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_51(glval>) = VariableAddress : -# 91| r91_52(glval>) = Convert : r91_51 -# 91| r91_53(coroutine_handle &) = CopyValue : r91_52 -# 91| v91_54(void) = Call[coroutine_handle] : func:r91_50, this:r91_47, 0:r91_53 -# 91| m91_55(unknown) = ^CallSideEffect : ~m91_49 -# 91| m91_56(unknown) = Chi : total:m91_49, partial:m91_55 -# 91| v91_57(void) = ^BufferReadSideEffect[0] : &:r91_53, ~m91_56 -# 91| m91_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_47 -# 91| m91_59(unknown) = Chi : total:m91_56, partial:m91_58 -# 91| r91_60(coroutine_handle) = Load[#temp91:21] : &:r91_47, ~m91_59 -# 91| v91_61(void) = Call[await_suspend] : func:r91_46, this:r0_25, 0:r91_60 -# 91| m91_62(unknown) = ^CallSideEffect : ~m91_59 -# 91| m91_63(unknown) = Chi : total:m91_59, partial:m91_62 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m91_63 +# 91| r91_44(suspend_always *) = CopyValue : r91_29 +# 91| r91_45(glval) = CopyValue : r91_44 +#-----| r0_24(glval) = Convert : r91_45 +# 91| r91_46(glval) = FunctionAddress[await_suspend] : +# 91| r91_47(glval>) = VariableAddress[#temp91:21] : +# 91| m91_48(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_47 +# 91| m91_49(unknown) = Chi : total:m91_36, partial:m91_48 +# 91| r91_50(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_51(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_52(glval>) = Convert : r91_51 +# 91| r91_53(coroutine_handle &) = CopyValue : r91_52 +# 91| v91_54(void) = Call[coroutine_handle] : func:r91_50, this:r91_47, 0:r91_53 +# 91| m91_55(unknown) = ^CallSideEffect : ~m91_49 +# 91| m91_56(unknown) = Chi : total:m91_49, partial:m91_55 +# 91| v91_57(void) = ^BufferReadSideEffect[0] : &:r91_53, ~m91_56 +# 91| m91_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_47 +# 91| m91_59(unknown) = Chi : total:m91_56, partial:m91_58 +# 91| r91_60(coroutine_handle) = Load[#temp91:21] : &:r91_47, ~m91_59 +# 91| v91_61(void) = Call[await_suspend] : func:r91_46, this:r0_24, 0:r91_60 +# 91| m91_62(unknown) = ^CallSideEffect : ~m91_59 +# 91| m91_63(unknown) = Chi : total:m91_59, partial:m91_62 +#-----| v0_25(void) = ^IndirectReadSideEffect[-1] : &:r0_24, ~m91_63 #-----| Goto -> Block 1 #-----| Block 3 -#-----| v0_27(void) = NoOp : +#-----| v0_26(void) = NoOp : # 91| r91_64(glval) = VariableAddress[(unnamed local variable)] : # 91| r91_65(glval) = FunctionAddress[final_suspend] : # 91| r91_66(suspend_always) = Call[final_suspend] : func:r91_65, this:r91_64 -# 91| m91_67(unknown) = ^CallSideEffect : ~m0_23 -# 91| m91_68(unknown) = Chi : total:m0_23, partial:m91_67 +# 91| m91_67(unknown) = ^CallSideEffect : ~m0_22 +# 91| m91_68(unknown) = Chi : total:m0_22, partial:m91_67 # 91| v91_69(void) = ^IndirectReadSideEffect[-1] : &:r91_64, ~m91_68 # 91| m91_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_64 # 91| m91_71(unknown) = Chi : total:m91_68, partial:m91_70 -#-----| r0_28(glval) = VariableAddress[#temp0:0] : +#-----| r0_27(glval) = VariableAddress[#temp0:0] : # 91| r91_72(glval) = VariableAddress[#temp91:21] : # 91| r91_73(glval) = VariableAddress[(unnamed local variable)] : # 91| r91_74(glval) = FunctionAddress[final_suspend] : @@ -1036,16 +1034,16 @@ coroutines.cpp: # 91| m91_81(suspend_always) = Store[#temp91:21] : &:r91_72, r91_75 # 91| m91_82(unknown) = Chi : total:m91_80, partial:m91_81 # 91| r91_83(suspend_always *) = CopyValue : r91_72 -# 91| m91_84(suspend_always *) = Store[#temp0:0] : &:r0_28, r91_83 -#-----| r0_29(suspend_always *) = Load[#temp0:0] : &:r0_28, m91_84 -# 91| r91_85(glval) = CopyValue : r0_29 +# 91| m91_84(suspend_always *) = Store[#temp0:0] : &:r0_27, r91_83 +#-----| r0_28(suspend_always *) = Load[#temp0:0] : &:r0_27, m91_84 +# 91| r91_85(glval) = CopyValue : r0_28 # 91| r91_86(glval) = Convert : r91_85 # 91| r91_87(glval) = FunctionAddress[await_ready] : # 91| r91_88(bool) = Call[await_ready] : func:r91_87, this:r91_86 # 91| m91_89(unknown) = ^CallSideEffect : ~m91_82 # 91| m91_90(unknown) = Chi : total:m91_82, partial:m91_89 # 91| v91_91(void) = ^IndirectReadSideEffect[-1] : &:r91_86, ~m91_90 -#-----| v0_30(void) = ConditionalBranch : r91_88 +#-----| v0_29(void) = ConditionalBranch : r91_88 #-----| False -> Block 5 #-----| True -> Block 4 @@ -1053,40 +1051,40 @@ coroutines.cpp: # 91| m91_92(unknown) = Phi : from 3:~m91_90, from 5:~m91_122 # 91| r91_93(suspend_always *) = CopyValue : r91_83 # 91| r91_94(glval) = CopyValue : r91_93 -#-----| r0_31(glval) = Convert : r91_94 +#-----| r0_30(glval) = Convert : r91_94 # 91| r91_95(glval) = FunctionAddress[await_resume] : -# 91| v91_96(void) = Call[await_resume] : func:r91_95, this:r0_31 +# 91| v91_96(void) = Call[await_resume] : func:r91_95, this:r0_30 # 91| m91_97(unknown) = ^CallSideEffect : ~m91_92 # 91| m91_98(unknown) = Chi : total:m91_92, partial:m91_97 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m91_98 +#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m91_98 # 91| r91_99(glval) = VariableAddress[#return] : # 91| v91_100(void) = ReturnValue : &:r91_99, ~m91_98 # 91| v91_101(void) = AliasedUse : ~m91_98 # 91| v91_102(void) = ExitFunction : # 91| Block 5 -# 91| r91_103(suspend_always *) = CopyValue : r91_83 -# 91| r91_104(glval) = CopyValue : r91_103 -#-----| r0_33(glval) = Convert : r91_104 -# 91| r91_105(glval) = FunctionAddress[await_suspend] : -# 91| r91_106(glval>) = VariableAddress[#temp91:21] : -# 91| m91_107(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_106 -# 91| m91_108(unknown) = Chi : total:m91_90, partial:m91_107 -# 91| r91_109(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_110(glval>) = VariableAddress : -# 91| r91_111(glval>) = Convert : r91_110 -# 91| r91_112(coroutine_handle &) = CopyValue : r91_111 -# 91| v91_113(void) = Call[coroutine_handle] : func:r91_109, this:r91_106, 0:r91_112 -# 91| m91_114(unknown) = ^CallSideEffect : ~m91_108 -# 91| m91_115(unknown) = Chi : total:m91_108, partial:m91_114 -# 91| v91_116(void) = ^BufferReadSideEffect[0] : &:r91_112, ~m91_115 -# 91| m91_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_106 -# 91| m91_118(unknown) = Chi : total:m91_115, partial:m91_117 -# 91| r91_119(coroutine_handle) = Load[#temp91:21] : &:r91_106, ~m91_118 -# 91| v91_120(void) = Call[await_suspend] : func:r91_105, this:r0_33, 0:r91_119 -# 91| m91_121(unknown) = ^CallSideEffect : ~m91_118 -# 91| m91_122(unknown) = Chi : total:m91_118, partial:m91_121 -#-----| v0_34(void) = ^IndirectReadSideEffect[-1] : &:r0_33, ~m91_122 +# 91| r91_103(suspend_always *) = CopyValue : r91_83 +# 91| r91_104(glval) = CopyValue : r91_103 +#-----| r0_32(glval) = Convert : r91_104 +# 91| r91_105(glval) = FunctionAddress[await_suspend] : +# 91| r91_106(glval>) = VariableAddress[#temp91:21] : +# 91| m91_107(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_106 +# 91| m91_108(unknown) = Chi : total:m91_90, partial:m91_107 +# 91| r91_109(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_110(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_111(glval>) = Convert : r91_110 +# 91| r91_112(coroutine_handle &) = CopyValue : r91_111 +# 91| v91_113(void) = Call[coroutine_handle] : func:r91_109, this:r91_106, 0:r91_112 +# 91| m91_114(unknown) = ^CallSideEffect : ~m91_108 +# 91| m91_115(unknown) = Chi : total:m91_108, partial:m91_114 +# 91| v91_116(void) = ^BufferReadSideEffect[0] : &:r91_112, ~m91_115 +# 91| m91_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_106 +# 91| m91_118(unknown) = Chi : total:m91_115, partial:m91_117 +# 91| r91_119(coroutine_handle) = Load[#temp91:21] : &:r91_106, ~m91_118 +# 91| v91_120(void) = Call[await_suspend] : func:r91_105, this:r0_32, 0:r91_119 +# 91| m91_121(unknown) = ^CallSideEffect : ~m91_118 +# 91| m91_122(unknown) = Chi : total:m91_118, partial:m91_121 +#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, ~m91_122 #-----| Goto -> Block 4 # 95| co_returnable_void co_yield_value_void(int) @@ -1141,18 +1139,17 @@ coroutines.cpp: #-----| Block 1 #-----| m0_8(unknown) = Phi : from 0:~m95_36, from 2:~m95_63 #-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 -#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 # 95| r95_38(suspend_always *) = CopyValue : r95_29 # 95| r95_39(glval) = CopyValue : r95_38 -#-----| r0_13(glval) = Convert : r95_39 +#-----| r0_12(glval) = Convert : r95_39 # 95| r95_40(glval) = FunctionAddress[await_resume] : -# 95| v95_41(void) = Call[await_resume] : func:r95_40, this:r0_13 -# 95| m95_42(unknown) = ^CallSideEffect : ~m0_12 -# 95| m95_43(unknown) = Chi : total:m0_12, partial:m95_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m95_43 -#-----| v0_15(void) = CopyValue : v95_41 +# 95| v95_41(void) = Call[await_resume] : func:r95_40, this:r0_12 +# 95| m95_42(unknown) = ^CallSideEffect : ~m0_8 +# 95| m95_43(unknown) = Chi : total:m0_8, partial:m95_42 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m95_43 +#-----| v0_14(void) = CopyValue : v95_41 # 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : # 96| r96_2(glval) = FunctionAddress[yield_value] : # 96| r96_3(glval) = VariableAddress[i] : @@ -1163,7 +1160,7 @@ coroutines.cpp: # 96| v96_8(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m96_7 # 96| m96_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 # 96| m96_10(unknown) = Chi : total:m96_7, partial:m96_9 -#-----| r0_16(glval) = VariableAddress[#temp0:0] : +#-----| r0_15(glval) = VariableAddress[#temp0:0] : # 96| r96_11(glval) = VariableAddress[#temp96:13] : # 96| r96_12(glval) = VariableAddress[(unnamed local variable)] : # 96| r96_13(glval) = FunctionAddress[yield_value] : @@ -1178,9 +1175,9 @@ coroutines.cpp: # 96| m96_22(suspend_always) = Store[#temp96:13] : &:r96_11, r96_16 # 96| m96_23(unknown) = Chi : total:m96_21, partial:m96_22 # 96| r96_24(suspend_always *) = CopyValue : r96_11 -# 96| m96_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r96_24 -#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m96_25 -# 96| r96_26(glval) = CopyValue : r0_17 +# 96| m96_25(suspend_always *) = Store[#temp0:0] : &:r0_15, r96_24 +#-----| r0_16(suspend_always *) = Load[#temp0:0] : &:r0_15, m96_25 +# 96| r96_26(glval) = CopyValue : r0_16 # 96| r96_27(glval) = Convert : r96_26 # 96| r96_28(glval) = FunctionAddress[await_ready] : # 96| r96_29(bool) = Call[await_ready] : func:r96_28, this:r96_27 @@ -1192,88 +1189,88 @@ coroutines.cpp: #-----| True -> Block 3 # 95| Block 2 -# 95| r95_44(suspend_always *) = CopyValue : r95_29 -# 95| r95_45(glval) = CopyValue : r95_44 -#-----| r0_18(glval) = Convert : r95_45 -# 95| r95_46(glval) = FunctionAddress[await_suspend] : -# 95| r95_47(glval>) = VariableAddress[#temp95:20] : -# 95| m95_48(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_47 -# 95| m95_49(unknown) = Chi : total:m95_36, partial:m95_48 -# 95| r95_50(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_51(glval>) = VariableAddress : -# 95| r95_52(glval>) = Convert : r95_51 -# 95| r95_53(coroutine_handle &) = CopyValue : r95_52 -# 95| v95_54(void) = Call[coroutine_handle] : func:r95_50, this:r95_47, 0:r95_53 -# 95| m95_55(unknown) = ^CallSideEffect : ~m95_49 -# 95| m95_56(unknown) = Chi : total:m95_49, partial:m95_55 -# 95| v95_57(void) = ^BufferReadSideEffect[0] : &:r95_53, ~m95_56 -# 95| m95_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_47 -# 95| m95_59(unknown) = Chi : total:m95_56, partial:m95_58 -# 95| r95_60(coroutine_handle) = Load[#temp95:20] : &:r95_47, ~m95_59 -# 95| v95_61(void) = Call[await_suspend] : func:r95_46, this:r0_18, 0:r95_60 -# 95| m95_62(unknown) = ^CallSideEffect : ~m95_59 -# 95| m95_63(unknown) = Chi : total:m95_59, partial:m95_62 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m95_63 +# 95| r95_44(suspend_always *) = CopyValue : r95_29 +# 95| r95_45(glval) = CopyValue : r95_44 +#-----| r0_17(glval) = Convert : r95_45 +# 95| r95_46(glval) = FunctionAddress[await_suspend] : +# 95| r95_47(glval>) = VariableAddress[#temp95:20] : +# 95| m95_48(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_47 +# 95| m95_49(unknown) = Chi : total:m95_36, partial:m95_48 +# 95| r95_50(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_51(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_52(glval>) = Convert : r95_51 +# 95| r95_53(coroutine_handle &) = CopyValue : r95_52 +# 95| v95_54(void) = Call[coroutine_handle] : func:r95_50, this:r95_47, 0:r95_53 +# 95| m95_55(unknown) = ^CallSideEffect : ~m95_49 +# 95| m95_56(unknown) = Chi : total:m95_49, partial:m95_55 +# 95| v95_57(void) = ^BufferReadSideEffect[0] : &:r95_53, ~m95_56 +# 95| m95_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_47 +# 95| m95_59(unknown) = Chi : total:m95_56, partial:m95_58 +# 95| r95_60(coroutine_handle) = Load[#temp95:20] : &:r95_47, ~m95_59 +# 95| v95_61(void) = Call[await_suspend] : func:r95_46, this:r0_17, 0:r95_60 +# 95| m95_62(unknown) = ^CallSideEffect : ~m95_59 +# 95| m95_63(unknown) = Chi : total:m95_59, partial:m95_62 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m95_63 #-----| Goto -> Block 1 # 96| Block 3 # 96| m96_34(unknown) = Phi : from 1:~m96_31, from 4:~m96_60 # 96| r96_35(suspend_always *) = CopyValue : r96_24 # 96| r96_36(glval) = CopyValue : r96_35 -#-----| r0_20(glval) = Convert : r96_36 +#-----| r0_19(glval) = Convert : r96_36 # 96| r96_37(glval) = FunctionAddress[await_resume] : -# 96| v96_38(void) = Call[await_resume] : func:r96_37, this:r0_20 +# 96| v96_38(void) = Call[await_resume] : func:r96_37, this:r0_19 # 96| m96_39(unknown) = ^CallSideEffect : ~m96_34 # 96| m96_40(unknown) = Chi : total:m96_34, partial:m96_39 -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m96_40 -#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_23(glval) = FunctionAddress[return_void] : -#-----| v0_24(void) = Call[return_void] : func:r0_23, this:r0_22 -#-----| m0_25(unknown) = ^CallSideEffect : ~m96_40 -#-----| m0_26(unknown) = Chi : total:m96_40, partial:m0_25 -#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 -#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 -#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m96_40 +#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_22(glval) = FunctionAddress[return_void] : +#-----| v0_23(void) = Call[return_void] : func:r0_22, this:r0_21 +#-----| m0_24(unknown) = ^CallSideEffect : ~m96_40 +#-----| m0_25(unknown) = Chi : total:m96_40, partial:m0_24 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 +#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 +#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 # 97| v97_1(void) = NoOp : -#-----| v0_30(void) = NoOp : +#-----| v0_29(void) = NoOp : #-----| Goto (back edge) -> Block 5 # 96| Block 4 -# 96| r96_41(suspend_always *) = CopyValue : r96_24 -# 96| r96_42(glval) = CopyValue : r96_41 -#-----| r0_31(glval) = Convert : r96_42 -# 96| r96_43(glval) = FunctionAddress[await_suspend] : -# 96| r96_44(glval>) = VariableAddress[#temp96:3] : -# 96| m96_45(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_44 -# 96| m96_46(unknown) = Chi : total:m96_31, partial:m96_45 -# 96| r96_47(glval) = FunctionAddress[coroutine_handle] : -# 96| r96_48(glval>) = VariableAddress : -# 96| r96_49(glval>) = Convert : r96_48 -# 96| r96_50(coroutine_handle &) = CopyValue : r96_49 -# 96| v96_51(void) = Call[coroutine_handle] : func:r96_47, this:r96_44, 0:r96_50 -# 96| m96_52(unknown) = ^CallSideEffect : ~m96_46 -# 96| m96_53(unknown) = Chi : total:m96_46, partial:m96_52 -# 96| v96_54(void) = ^BufferReadSideEffect[0] : &:r96_50, ~m96_53 -# 96| m96_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_44 -# 96| m96_56(unknown) = Chi : total:m96_53, partial:m96_55 -# 96| r96_57(coroutine_handle) = Load[#temp96:3] : &:r96_44, ~m96_56 -# 96| v96_58(void) = Call[await_suspend] : func:r96_43, this:r0_31, 0:r96_57 -# 96| m96_59(unknown) = ^CallSideEffect : ~m96_56 -# 96| m96_60(unknown) = Chi : total:m96_56, partial:m96_59 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m96_60 +# 96| r96_41(suspend_always *) = CopyValue : r96_24 +# 96| r96_42(glval) = CopyValue : r96_41 +#-----| r0_30(glval) = Convert : r96_42 +# 96| r96_43(glval) = FunctionAddress[await_suspend] : +# 96| r96_44(glval>) = VariableAddress[#temp96:3] : +# 96| m96_45(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_44 +# 96| m96_46(unknown) = Chi : total:m96_31, partial:m96_45 +# 96| r96_47(glval) = FunctionAddress[coroutine_handle] : +# 96| r96_48(glval>) = VariableAddress[(unnamed local variable)] : +# 96| r96_49(glval>) = Convert : r96_48 +# 96| r96_50(coroutine_handle &) = CopyValue : r96_49 +# 96| v96_51(void) = Call[coroutine_handle] : func:r96_47, this:r96_44, 0:r96_50 +# 96| m96_52(unknown) = ^CallSideEffect : ~m96_46 +# 96| m96_53(unknown) = Chi : total:m96_46, partial:m96_52 +# 96| v96_54(void) = ^BufferReadSideEffect[0] : &:r96_50, ~m96_53 +# 96| m96_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_44 +# 96| m96_56(unknown) = Chi : total:m96_53, partial:m96_55 +# 96| r96_57(coroutine_handle) = Load[#temp96:3] : &:r96_44, ~m96_56 +# 96| v96_58(void) = Call[await_suspend] : func:r96_43, this:r0_30, 0:r96_57 +# 96| m96_59(unknown) = ^CallSideEffect : ~m96_56 +# 96| m96_60(unknown) = Chi : total:m96_56, partial:m96_59 +#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m96_60 #-----| Goto -> Block 3 #-----| Block 5 -#-----| v0_33(void) = NoOp : +#-----| v0_32(void) = NoOp : # 95| r95_64(glval) = VariableAddress[(unnamed local variable)] : # 95| r95_65(glval) = FunctionAddress[final_suspend] : # 95| r95_66(suspend_always) = Call[final_suspend] : func:r95_65, this:r95_64 -# 95| m95_67(unknown) = ^CallSideEffect : ~m0_29 -# 95| m95_68(unknown) = Chi : total:m0_29, partial:m95_67 +# 95| m95_67(unknown) = ^CallSideEffect : ~m0_28 +# 95| m95_68(unknown) = Chi : total:m0_28, partial:m95_67 # 95| v95_69(void) = ^IndirectReadSideEffect[-1] : &:r95_64, ~m95_68 # 95| m95_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_64 # 95| m95_71(unknown) = Chi : total:m95_68, partial:m95_70 -#-----| r0_34(glval) = VariableAddress[#temp0:0] : +#-----| r0_33(glval) = VariableAddress[#temp0:0] : # 95| r95_72(glval) = VariableAddress[#temp95:20] : # 95| r95_73(glval) = VariableAddress[(unnamed local variable)] : # 95| r95_74(glval) = FunctionAddress[final_suspend] : @@ -1286,16 +1283,16 @@ coroutines.cpp: # 95| m95_81(suspend_always) = Store[#temp95:20] : &:r95_72, r95_75 # 95| m95_82(unknown) = Chi : total:m95_80, partial:m95_81 # 95| r95_83(suspend_always *) = CopyValue : r95_72 -# 95| m95_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r95_83 -#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m95_84 -# 95| r95_85(glval) = CopyValue : r0_35 +# 95| m95_84(suspend_always *) = Store[#temp0:0] : &:r0_33, r95_83 +#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_33, m95_84 +# 95| r95_85(glval) = CopyValue : r0_34 # 95| r95_86(glval) = Convert : r95_85 # 95| r95_87(glval) = FunctionAddress[await_ready] : # 95| r95_88(bool) = Call[await_ready] : func:r95_87, this:r95_86 # 95| m95_89(unknown) = ^CallSideEffect : ~m95_82 # 95| m95_90(unknown) = Chi : total:m95_82, partial:m95_89 # 95| v95_91(void) = ^IndirectReadSideEffect[-1] : &:r95_86, ~m95_90 -#-----| v0_36(void) = ConditionalBranch : r95_88 +#-----| v0_35(void) = ConditionalBranch : r95_88 #-----| False -> Block 7 #-----| True -> Block 6 @@ -1303,40 +1300,40 @@ coroutines.cpp: # 95| m95_92(unknown) = Phi : from 5:~m95_90, from 7:~m95_122 # 95| r95_93(suspend_always *) = CopyValue : r95_83 # 95| r95_94(glval) = CopyValue : r95_93 -#-----| r0_37(glval) = Convert : r95_94 +#-----| r0_36(glval) = Convert : r95_94 # 95| r95_95(glval) = FunctionAddress[await_resume] : -# 95| v95_96(void) = Call[await_resume] : func:r95_95, this:r0_37 +# 95| v95_96(void) = Call[await_resume] : func:r95_95, this:r0_36 # 95| m95_97(unknown) = ^CallSideEffect : ~m95_92 # 95| m95_98(unknown) = Chi : total:m95_92, partial:m95_97 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m95_98 +#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, ~m95_98 # 95| r95_99(glval) = VariableAddress[#return] : # 95| v95_100(void) = ReturnValue : &:r95_99, ~m95_98 # 95| v95_101(void) = AliasedUse : ~m95_98 # 95| v95_102(void) = ExitFunction : # 95| Block 7 -# 95| r95_103(suspend_always *) = CopyValue : r95_83 -# 95| r95_104(glval) = CopyValue : r95_103 -#-----| r0_39(glval) = Convert : r95_104 -# 95| r95_105(glval) = FunctionAddress[await_suspend] : -# 95| r95_106(glval>) = VariableAddress[#temp95:20] : -# 95| m95_107(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_106 -# 95| m95_108(unknown) = Chi : total:m95_90, partial:m95_107 -# 95| r95_109(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_110(glval>) = VariableAddress : -# 95| r95_111(glval>) = Convert : r95_110 -# 95| r95_112(coroutine_handle &) = CopyValue : r95_111 -# 95| v95_113(void) = Call[coroutine_handle] : func:r95_109, this:r95_106, 0:r95_112 -# 95| m95_114(unknown) = ^CallSideEffect : ~m95_108 -# 95| m95_115(unknown) = Chi : total:m95_108, partial:m95_114 -# 95| v95_116(void) = ^BufferReadSideEffect[0] : &:r95_112, ~m95_115 -# 95| m95_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_106 -# 95| m95_118(unknown) = Chi : total:m95_115, partial:m95_117 -# 95| r95_119(coroutine_handle) = Load[#temp95:20] : &:r95_106, ~m95_118 -# 95| v95_120(void) = Call[await_suspend] : func:r95_105, this:r0_39, 0:r95_119 -# 95| m95_121(unknown) = ^CallSideEffect : ~m95_118 -# 95| m95_122(unknown) = Chi : total:m95_118, partial:m95_121 -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m95_122 +# 95| r95_103(suspend_always *) = CopyValue : r95_83 +# 95| r95_104(glval) = CopyValue : r95_103 +#-----| r0_38(glval) = Convert : r95_104 +# 95| r95_105(glval) = FunctionAddress[await_suspend] : +# 95| r95_106(glval>) = VariableAddress[#temp95:20] : +# 95| m95_107(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_106 +# 95| m95_108(unknown) = Chi : total:m95_90, partial:m95_107 +# 95| r95_109(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_110(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_111(glval>) = Convert : r95_110 +# 95| r95_112(coroutine_handle &) = CopyValue : r95_111 +# 95| v95_113(void) = Call[coroutine_handle] : func:r95_109, this:r95_106, 0:r95_112 +# 95| m95_114(unknown) = ^CallSideEffect : ~m95_108 +# 95| m95_115(unknown) = Chi : total:m95_108, partial:m95_114 +# 95| v95_116(void) = ^BufferReadSideEffect[0] : &:r95_112, ~m95_115 +# 95| m95_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_106 +# 95| m95_118(unknown) = Chi : total:m95_115, partial:m95_117 +# 95| r95_119(coroutine_handle) = Load[#temp95:20] : &:r95_106, ~m95_118 +# 95| v95_120(void) = Call[await_suspend] : func:r95_105, this:r0_38, 0:r95_119 +# 95| m95_121(unknown) = ^CallSideEffect : ~m95_118 +# 95| m95_122(unknown) = Chi : total:m95_118, partial:m95_121 +#-----| v0_39(void) = ^IndirectReadSideEffect[-1] : &:r0_38, ~m95_122 #-----| Goto -> Block 6 # 99| co_returnable_value co_yield_value_value(int) @@ -1391,18 +1388,17 @@ coroutines.cpp: #-----| Block 1 #-----| m0_8(unknown) = Phi : from 0:~m99_36, from 2:~m99_63 #-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 -#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 # 99| r99_38(suspend_always *) = CopyValue : r99_29 # 99| r99_39(glval) = CopyValue : r99_38 -#-----| r0_13(glval) = Convert : r99_39 +#-----| r0_12(glval) = Convert : r99_39 # 99| r99_40(glval) = FunctionAddress[await_resume] : -# 99| v99_41(void) = Call[await_resume] : func:r99_40, this:r0_13 -# 99| m99_42(unknown) = ^CallSideEffect : ~m0_12 -# 99| m99_43(unknown) = Chi : total:m0_12, partial:m99_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m99_43 -#-----| v0_15(void) = CopyValue : v99_41 +# 99| v99_41(void) = Call[await_resume] : func:r99_40, this:r0_12 +# 99| m99_42(unknown) = ^CallSideEffect : ~m0_8 +# 99| m99_43(unknown) = Chi : total:m0_8, partial:m99_42 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m99_43 +#-----| v0_14(void) = CopyValue : v99_41 # 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : # 100| r100_2(glval) = FunctionAddress[yield_value] : # 100| r100_3(glval) = VariableAddress[i] : @@ -1413,7 +1409,7 @@ coroutines.cpp: # 100| v100_8(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m100_7 # 100| m100_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 # 100| m100_10(unknown) = Chi : total:m100_7, partial:m100_9 -#-----| r0_16(glval) = VariableAddress[#temp0:0] : +#-----| r0_15(glval) = VariableAddress[#temp0:0] : # 100| r100_11(glval) = VariableAddress[#temp100:13] : # 100| r100_12(glval) = VariableAddress[(unnamed local variable)] : # 100| r100_13(glval) = FunctionAddress[yield_value] : @@ -1428,9 +1424,9 @@ coroutines.cpp: # 100| m100_22(suspend_always) = Store[#temp100:13] : &:r100_11, r100_16 # 100| m100_23(unknown) = Chi : total:m100_21, partial:m100_22 # 100| r100_24(suspend_always *) = CopyValue : r100_11 -# 100| m100_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r100_24 -#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m100_25 -# 100| r100_26(glval) = CopyValue : r0_17 +# 100| m100_25(suspend_always *) = Store[#temp0:0] : &:r0_15, r100_24 +#-----| r0_16(suspend_always *) = Load[#temp0:0] : &:r0_15, m100_25 +# 100| r100_26(glval) = CopyValue : r0_16 # 100| r100_27(glval) = Convert : r100_26 # 100| r100_28(glval) = FunctionAddress[await_ready] : # 100| r100_29(bool) = Call[await_ready] : func:r100_28, this:r100_27 @@ -1442,41 +1438,41 @@ coroutines.cpp: #-----| True -> Block 3 # 99| Block 2 -# 99| r99_44(suspend_always *) = CopyValue : r99_29 -# 99| r99_45(glval) = CopyValue : r99_44 -#-----| r0_18(glval) = Convert : r99_45 -# 99| r99_46(glval) = FunctionAddress[await_suspend] : -# 99| r99_47(glval>) = VariableAddress[#temp99:21] : -# 99| m99_48(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_47 -# 99| m99_49(unknown) = Chi : total:m99_36, partial:m99_48 -# 99| r99_50(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_51(glval>) = VariableAddress : -# 99| r99_52(glval>) = Convert : r99_51 -# 99| r99_53(coroutine_handle &) = CopyValue : r99_52 -# 99| v99_54(void) = Call[coroutine_handle] : func:r99_50, this:r99_47, 0:r99_53 -# 99| m99_55(unknown) = ^CallSideEffect : ~m99_49 -# 99| m99_56(unknown) = Chi : total:m99_49, partial:m99_55 -# 99| v99_57(void) = ^BufferReadSideEffect[0] : &:r99_53, ~m99_56 -# 99| m99_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_47 -# 99| m99_59(unknown) = Chi : total:m99_56, partial:m99_58 -# 99| r99_60(coroutine_handle) = Load[#temp99:21] : &:r99_47, ~m99_59 -# 99| v99_61(void) = Call[await_suspend] : func:r99_46, this:r0_18, 0:r99_60 -# 99| m99_62(unknown) = ^CallSideEffect : ~m99_59 -# 99| m99_63(unknown) = Chi : total:m99_59, partial:m99_62 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m99_63 +# 99| r99_44(suspend_always *) = CopyValue : r99_29 +# 99| r99_45(glval) = CopyValue : r99_44 +#-----| r0_17(glval) = Convert : r99_45 +# 99| r99_46(glval) = FunctionAddress[await_suspend] : +# 99| r99_47(glval>) = VariableAddress[#temp99:21] : +# 99| m99_48(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_47 +# 99| m99_49(unknown) = Chi : total:m99_36, partial:m99_48 +# 99| r99_50(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_51(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_52(glval>) = Convert : r99_51 +# 99| r99_53(coroutine_handle &) = CopyValue : r99_52 +# 99| v99_54(void) = Call[coroutine_handle] : func:r99_50, this:r99_47, 0:r99_53 +# 99| m99_55(unknown) = ^CallSideEffect : ~m99_49 +# 99| m99_56(unknown) = Chi : total:m99_49, partial:m99_55 +# 99| v99_57(void) = ^BufferReadSideEffect[0] : &:r99_53, ~m99_56 +# 99| m99_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_47 +# 99| m99_59(unknown) = Chi : total:m99_56, partial:m99_58 +# 99| r99_60(coroutine_handle) = Load[#temp99:21] : &:r99_47, ~m99_59 +# 99| v99_61(void) = Call[await_suspend] : func:r99_46, this:r0_17, 0:r99_60 +# 99| m99_62(unknown) = ^CallSideEffect : ~m99_59 +# 99| m99_63(unknown) = Chi : total:m99_59, partial:m99_62 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m99_63 #-----| Goto -> Block 1 # 100| Block 3 # 100| m100_34(unknown) = Phi : from 1:~m100_31, from 4:~m100_60 # 100| r100_35(suspend_always *) = CopyValue : r100_24 # 100| r100_36(glval) = CopyValue : r100_35 -#-----| r0_20(glval) = Convert : r100_36 +#-----| r0_19(glval) = Convert : r100_36 # 100| r100_37(glval) = FunctionAddress[await_resume] : -# 100| v100_38(void) = Call[await_resume] : func:r100_37, this:r0_20 +# 100| v100_38(void) = Call[await_resume] : func:r100_37, this:r0_19 # 100| m100_39(unknown) = ^CallSideEffect : ~m100_34 # 100| m100_40(unknown) = Chi : total:m100_34, partial:m100_39 -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m100_40 -#-----| v0_22(void) = NoOp : +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m100_40 +#-----| v0_21(void) = NoOp : # 99| r99_64(glval) = VariableAddress[(unnamed local variable)] : # 99| r99_65(glval) = FunctionAddress[final_suspend] : # 99| r99_66(suspend_always) = Call[final_suspend] : func:r99_65, this:r99_64 @@ -1485,7 +1481,7 @@ coroutines.cpp: # 99| v99_69(void) = ^IndirectReadSideEffect[-1] : &:r99_64, ~m99_68 # 99| m99_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_64 # 99| m99_71(unknown) = Chi : total:m99_68, partial:m99_70 -#-----| r0_23(glval) = VariableAddress[#temp0:0] : +#-----| r0_22(glval) = VariableAddress[#temp0:0] : # 99| r99_72(glval) = VariableAddress[#temp99:21] : # 99| r99_73(glval) = VariableAddress[(unnamed local variable)] : # 99| r99_74(glval) = FunctionAddress[final_suspend] : @@ -1498,82 +1494,82 @@ coroutines.cpp: # 99| m99_81(suspend_always) = Store[#temp99:21] : &:r99_72, r99_75 # 99| m99_82(unknown) = Chi : total:m99_80, partial:m99_81 # 99| r99_83(suspend_always *) = CopyValue : r99_72 -# 99| m99_84(suspend_always *) = Store[#temp0:0] : &:r0_23, r99_83 -#-----| r0_24(suspend_always *) = Load[#temp0:0] : &:r0_23, m99_84 -# 99| r99_85(glval) = CopyValue : r0_24 +# 99| m99_84(suspend_always *) = Store[#temp0:0] : &:r0_22, r99_83 +#-----| r0_23(suspend_always *) = Load[#temp0:0] : &:r0_22, m99_84 +# 99| r99_85(glval) = CopyValue : r0_23 # 99| r99_86(glval) = Convert : r99_85 # 99| r99_87(glval) = FunctionAddress[await_ready] : # 99| r99_88(bool) = Call[await_ready] : func:r99_87, this:r99_86 # 99| m99_89(unknown) = ^CallSideEffect : ~m99_82 # 99| m99_90(unknown) = Chi : total:m99_82, partial:m99_89 # 99| v99_91(void) = ^IndirectReadSideEffect[-1] : &:r99_86, ~m99_90 -#-----| v0_25(void) = ConditionalBranch : r99_88 +#-----| v0_24(void) = ConditionalBranch : r99_88 #-----| False -> Block 6 #-----| True -> Block 5 # 100| Block 4 -# 100| r100_41(suspend_always *) = CopyValue : r100_24 -# 100| r100_42(glval) = CopyValue : r100_41 -#-----| r0_26(glval) = Convert : r100_42 -# 100| r100_43(glval) = FunctionAddress[await_suspend] : -# 100| r100_44(glval>) = VariableAddress[#temp100:3] : -# 100| m100_45(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_44 -# 100| m100_46(unknown) = Chi : total:m100_31, partial:m100_45 -# 100| r100_47(glval) = FunctionAddress[coroutine_handle] : -# 100| r100_48(glval>) = VariableAddress : -# 100| r100_49(glval>) = Convert : r100_48 -# 100| r100_50(coroutine_handle &) = CopyValue : r100_49 -# 100| v100_51(void) = Call[coroutine_handle] : func:r100_47, this:r100_44, 0:r100_50 -# 100| m100_52(unknown) = ^CallSideEffect : ~m100_46 -# 100| m100_53(unknown) = Chi : total:m100_46, partial:m100_52 -# 100| v100_54(void) = ^BufferReadSideEffect[0] : &:r100_50, ~m100_53 -# 100| m100_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_44 -# 100| m100_56(unknown) = Chi : total:m100_53, partial:m100_55 -# 100| r100_57(coroutine_handle) = Load[#temp100:3] : &:r100_44, ~m100_56 -# 100| v100_58(void) = Call[await_suspend] : func:r100_43, this:r0_26, 0:r100_57 -# 100| m100_59(unknown) = ^CallSideEffect : ~m100_56 -# 100| m100_60(unknown) = Chi : total:m100_56, partial:m100_59 -#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m100_60 +# 100| r100_41(suspend_always *) = CopyValue : r100_24 +# 100| r100_42(glval) = CopyValue : r100_41 +#-----| r0_25(glval) = Convert : r100_42 +# 100| r100_43(glval) = FunctionAddress[await_suspend] : +# 100| r100_44(glval>) = VariableAddress[#temp100:3] : +# 100| m100_45(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_44 +# 100| m100_46(unknown) = Chi : total:m100_31, partial:m100_45 +# 100| r100_47(glval) = FunctionAddress[coroutine_handle] : +# 100| r100_48(glval>) = VariableAddress[(unnamed local variable)] : +# 100| r100_49(glval>) = Convert : r100_48 +# 100| r100_50(coroutine_handle &) = CopyValue : r100_49 +# 100| v100_51(void) = Call[coroutine_handle] : func:r100_47, this:r100_44, 0:r100_50 +# 100| m100_52(unknown) = ^CallSideEffect : ~m100_46 +# 100| m100_53(unknown) = Chi : total:m100_46, partial:m100_52 +# 100| v100_54(void) = ^BufferReadSideEffect[0] : &:r100_50, ~m100_53 +# 100| m100_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_44 +# 100| m100_56(unknown) = Chi : total:m100_53, partial:m100_55 +# 100| r100_57(coroutine_handle) = Load[#temp100:3] : &:r100_44, ~m100_56 +# 100| v100_58(void) = Call[await_suspend] : func:r100_43, this:r0_25, 0:r100_57 +# 100| m100_59(unknown) = ^CallSideEffect : ~m100_56 +# 100| m100_60(unknown) = Chi : total:m100_56, partial:m100_59 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m100_60 #-----| Goto -> Block 3 # 99| Block 5 # 99| m99_92(unknown) = Phi : from 3:~m99_90, from 6:~m99_122 # 99| r99_93(suspend_always *) = CopyValue : r99_83 # 99| r99_94(glval) = CopyValue : r99_93 -#-----| r0_28(glval) = Convert : r99_94 +#-----| r0_27(glval) = Convert : r99_94 # 99| r99_95(glval) = FunctionAddress[await_resume] : -# 99| v99_96(void) = Call[await_resume] : func:r99_95, this:r0_28 +# 99| v99_96(void) = Call[await_resume] : func:r99_95, this:r0_27 # 99| m99_97(unknown) = ^CallSideEffect : ~m99_92 # 99| m99_98(unknown) = Chi : total:m99_92, partial:m99_97 -#-----| v0_29(void) = ^IndirectReadSideEffect[-1] : &:r0_28, ~m99_98 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m99_98 # 99| r99_99(glval) = VariableAddress[#return] : # 99| v99_100(void) = ReturnValue : &:r99_99, ~m99_98 # 99| v99_101(void) = AliasedUse : ~m99_98 # 99| v99_102(void) = ExitFunction : # 99| Block 6 -# 99| r99_103(suspend_always *) = CopyValue : r99_83 -# 99| r99_104(glval) = CopyValue : r99_103 -#-----| r0_30(glval) = Convert : r99_104 -# 99| r99_105(glval) = FunctionAddress[await_suspend] : -# 99| r99_106(glval>) = VariableAddress[#temp99:21] : -# 99| m99_107(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_106 -# 99| m99_108(unknown) = Chi : total:m99_90, partial:m99_107 -# 99| r99_109(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_110(glval>) = VariableAddress : -# 99| r99_111(glval>) = Convert : r99_110 -# 99| r99_112(coroutine_handle &) = CopyValue : r99_111 -# 99| v99_113(void) = Call[coroutine_handle] : func:r99_109, this:r99_106, 0:r99_112 -# 99| m99_114(unknown) = ^CallSideEffect : ~m99_108 -# 99| m99_115(unknown) = Chi : total:m99_108, partial:m99_114 -# 99| v99_116(void) = ^BufferReadSideEffect[0] : &:r99_112, ~m99_115 -# 99| m99_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_106 -# 99| m99_118(unknown) = Chi : total:m99_115, partial:m99_117 -# 99| r99_119(coroutine_handle) = Load[#temp99:21] : &:r99_106, ~m99_118 -# 99| v99_120(void) = Call[await_suspend] : func:r99_105, this:r0_30, 0:r99_119 -# 99| m99_121(unknown) = ^CallSideEffect : ~m99_118 -# 99| m99_122(unknown) = Chi : total:m99_118, partial:m99_121 -#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m99_122 +# 99| r99_103(suspend_always *) = CopyValue : r99_83 +# 99| r99_104(glval) = CopyValue : r99_103 +#-----| r0_29(glval) = Convert : r99_104 +# 99| r99_105(glval) = FunctionAddress[await_suspend] : +# 99| r99_106(glval>) = VariableAddress[#temp99:21] : +# 99| m99_107(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_106 +# 99| m99_108(unknown) = Chi : total:m99_90, partial:m99_107 +# 99| r99_109(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_110(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_111(glval>) = Convert : r99_110 +# 99| r99_112(coroutine_handle &) = CopyValue : r99_111 +# 99| v99_113(void) = Call[coroutine_handle] : func:r99_109, this:r99_106, 0:r99_112 +# 99| m99_114(unknown) = ^CallSideEffect : ~m99_108 +# 99| m99_115(unknown) = Chi : total:m99_108, partial:m99_114 +# 99| v99_116(void) = ^BufferReadSideEffect[0] : &:r99_112, ~m99_115 +# 99| m99_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_106 +# 99| m99_118(unknown) = Chi : total:m99_115, partial:m99_117 +# 99| r99_119(coroutine_handle) = Load[#temp99:21] : &:r99_106, ~m99_118 +# 99| v99_120(void) = Call[await_suspend] : func:r99_105, this:r0_29, 0:r99_119 +# 99| m99_121(unknown) = ^CallSideEffect : ~m99_118 +# 99| m99_122(unknown) = Chi : total:m99_118, partial:m99_121 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m99_122 #-----| Goto -> Block 5 # 103| co_returnable_void co_yield_and_return_void(int) @@ -1628,18 +1624,17 @@ coroutines.cpp: #-----| Block 1 #-----| m0_8(unknown) = Phi : from 0:~m103_36, from 2:~m103_63 #-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 -#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 # 103| r103_38(suspend_always *) = CopyValue : r103_29 # 103| r103_39(glval) = CopyValue : r103_38 -#-----| r0_13(glval) = Convert : r103_39 +#-----| r0_12(glval) = Convert : r103_39 # 103| r103_40(glval) = FunctionAddress[await_resume] : -# 103| v103_41(void) = Call[await_resume] : func:r103_40, this:r0_13 -# 103| m103_42(unknown) = ^CallSideEffect : ~m0_12 -# 103| m103_43(unknown) = Chi : total:m0_12, partial:m103_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m103_43 -#-----| v0_15(void) = CopyValue : v103_41 +# 103| v103_41(void) = Call[await_resume] : func:r103_40, this:r0_12 +# 103| m103_42(unknown) = ^CallSideEffect : ~m0_8 +# 103| m103_43(unknown) = Chi : total:m0_8, partial:m103_42 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m103_43 +#-----| v0_14(void) = CopyValue : v103_41 # 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : # 104| r104_2(glval) = FunctionAddress[yield_value] : # 104| r104_3(glval) = VariableAddress[i] : @@ -1650,7 +1645,7 @@ coroutines.cpp: # 104| v104_8(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m104_7 # 104| m104_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 # 104| m104_10(unknown) = Chi : total:m104_7, partial:m104_9 -#-----| r0_16(glval) = VariableAddress[#temp0:0] : +#-----| r0_15(glval) = VariableAddress[#temp0:0] : # 104| r104_11(glval) = VariableAddress[#temp104:13] : # 104| r104_12(glval) = VariableAddress[(unnamed local variable)] : # 104| r104_13(glval) = FunctionAddress[yield_value] : @@ -1665,9 +1660,9 @@ coroutines.cpp: # 104| m104_22(suspend_always) = Store[#temp104:13] : &:r104_11, r104_16 # 104| m104_23(unknown) = Chi : total:m104_21, partial:m104_22 # 104| r104_24(suspend_always *) = CopyValue : r104_11 -# 104| m104_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r104_24 -#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m104_25 -# 104| r104_26(glval) = CopyValue : r0_17 +# 104| m104_25(suspend_always *) = Store[#temp0:0] : &:r0_15, r104_24 +#-----| r0_16(suspend_always *) = Load[#temp0:0] : &:r0_15, m104_25 +# 104| r104_26(glval) = CopyValue : r0_16 # 104| r104_27(glval) = Convert : r104_26 # 104| r104_28(glval) = FunctionAddress[await_ready] : # 104| r104_29(bool) = Call[await_ready] : func:r104_28, this:r104_27 @@ -1679,88 +1674,88 @@ coroutines.cpp: #-----| True -> Block 3 # 103| Block 2 -# 103| r103_44(suspend_always *) = CopyValue : r103_29 -# 103| r103_45(glval) = CopyValue : r103_44 -#-----| r0_18(glval) = Convert : r103_45 -# 103| r103_46(glval) = FunctionAddress[await_suspend] : -# 103| r103_47(glval>) = VariableAddress[#temp103:20] : -# 103| m103_48(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_47 -# 103| m103_49(unknown) = Chi : total:m103_36, partial:m103_48 -# 103| r103_50(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_51(glval>) = VariableAddress : -# 103| r103_52(glval>) = Convert : r103_51 -# 103| r103_53(coroutine_handle &) = CopyValue : r103_52 -# 103| v103_54(void) = Call[coroutine_handle] : func:r103_50, this:r103_47, 0:r103_53 -# 103| m103_55(unknown) = ^CallSideEffect : ~m103_49 -# 103| m103_56(unknown) = Chi : total:m103_49, partial:m103_55 -# 103| v103_57(void) = ^BufferReadSideEffect[0] : &:r103_53, ~m103_56 -# 103| m103_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_47 -# 103| m103_59(unknown) = Chi : total:m103_56, partial:m103_58 -# 103| r103_60(coroutine_handle) = Load[#temp103:20] : &:r103_47, ~m103_59 -# 103| v103_61(void) = Call[await_suspend] : func:r103_46, this:r0_18, 0:r103_60 -# 103| m103_62(unknown) = ^CallSideEffect : ~m103_59 -# 103| m103_63(unknown) = Chi : total:m103_59, partial:m103_62 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m103_63 +# 103| r103_44(suspend_always *) = CopyValue : r103_29 +# 103| r103_45(glval) = CopyValue : r103_44 +#-----| r0_17(glval) = Convert : r103_45 +# 103| r103_46(glval) = FunctionAddress[await_suspend] : +# 103| r103_47(glval>) = VariableAddress[#temp103:20] : +# 103| m103_48(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_47 +# 103| m103_49(unknown) = Chi : total:m103_36, partial:m103_48 +# 103| r103_50(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_51(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_52(glval>) = Convert : r103_51 +# 103| r103_53(coroutine_handle &) = CopyValue : r103_52 +# 103| v103_54(void) = Call[coroutine_handle] : func:r103_50, this:r103_47, 0:r103_53 +# 103| m103_55(unknown) = ^CallSideEffect : ~m103_49 +# 103| m103_56(unknown) = Chi : total:m103_49, partial:m103_55 +# 103| v103_57(void) = ^BufferReadSideEffect[0] : &:r103_53, ~m103_56 +# 103| m103_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_47 +# 103| m103_59(unknown) = Chi : total:m103_56, partial:m103_58 +# 103| r103_60(coroutine_handle) = Load[#temp103:20] : &:r103_47, ~m103_59 +# 103| v103_61(void) = Call[await_suspend] : func:r103_46, this:r0_17, 0:r103_60 +# 103| m103_62(unknown) = ^CallSideEffect : ~m103_59 +# 103| m103_63(unknown) = Chi : total:m103_59, partial:m103_62 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m103_63 #-----| Goto -> Block 1 # 104| Block 3 # 104| m104_34(unknown) = Phi : from 1:~m104_31, from 4:~m104_60 # 104| r104_35(suspend_always *) = CopyValue : r104_24 # 104| r104_36(glval) = CopyValue : r104_35 -#-----| r0_20(glval) = Convert : r104_36 +#-----| r0_19(glval) = Convert : r104_36 # 104| r104_37(glval) = FunctionAddress[await_resume] : -# 104| v104_38(void) = Call[await_resume] : func:r104_37, this:r0_20 +# 104| v104_38(void) = Call[await_resume] : func:r104_37, this:r0_19 # 104| m104_39(unknown) = ^CallSideEffect : ~m104_34 # 104| m104_40(unknown) = Chi : total:m104_34, partial:m104_39 -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m104_40 -#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_23(glval) = FunctionAddress[return_void] : -#-----| v0_24(void) = Call[return_void] : func:r0_23, this:r0_22 -#-----| m0_25(unknown) = ^CallSideEffect : ~m104_40 -#-----| m0_26(unknown) = Chi : total:m104_40, partial:m0_25 -#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 -#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 -#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m104_40 +#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_22(glval) = FunctionAddress[return_void] : +#-----| v0_23(void) = Call[return_void] : func:r0_22, this:r0_21 +#-----| m0_24(unknown) = ^CallSideEffect : ~m104_40 +#-----| m0_25(unknown) = Chi : total:m104_40, partial:m0_24 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 +#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 +#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 # 105| v105_1(void) = NoOp : -#-----| v0_30(void) = NoOp : +#-----| v0_29(void) = NoOp : #-----| Goto (back edge) -> Block 5 # 104| Block 4 -# 104| r104_41(suspend_always *) = CopyValue : r104_24 -# 104| r104_42(glval) = CopyValue : r104_41 -#-----| r0_31(glval) = Convert : r104_42 -# 104| r104_43(glval) = FunctionAddress[await_suspend] : -# 104| r104_44(glval>) = VariableAddress[#temp104:3] : -# 104| m104_45(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_44 -# 104| m104_46(unknown) = Chi : total:m104_31, partial:m104_45 -# 104| r104_47(glval) = FunctionAddress[coroutine_handle] : -# 104| r104_48(glval>) = VariableAddress : -# 104| r104_49(glval>) = Convert : r104_48 -# 104| r104_50(coroutine_handle &) = CopyValue : r104_49 -# 104| v104_51(void) = Call[coroutine_handle] : func:r104_47, this:r104_44, 0:r104_50 -# 104| m104_52(unknown) = ^CallSideEffect : ~m104_46 -# 104| m104_53(unknown) = Chi : total:m104_46, partial:m104_52 -# 104| v104_54(void) = ^BufferReadSideEffect[0] : &:r104_50, ~m104_53 -# 104| m104_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_44 -# 104| m104_56(unknown) = Chi : total:m104_53, partial:m104_55 -# 104| r104_57(coroutine_handle) = Load[#temp104:3] : &:r104_44, ~m104_56 -# 104| v104_58(void) = Call[await_suspend] : func:r104_43, this:r0_31, 0:r104_57 -# 104| m104_59(unknown) = ^CallSideEffect : ~m104_56 -# 104| m104_60(unknown) = Chi : total:m104_56, partial:m104_59 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m104_60 +# 104| r104_41(suspend_always *) = CopyValue : r104_24 +# 104| r104_42(glval) = CopyValue : r104_41 +#-----| r0_30(glval) = Convert : r104_42 +# 104| r104_43(glval) = FunctionAddress[await_suspend] : +# 104| r104_44(glval>) = VariableAddress[#temp104:3] : +# 104| m104_45(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_44 +# 104| m104_46(unknown) = Chi : total:m104_31, partial:m104_45 +# 104| r104_47(glval) = FunctionAddress[coroutine_handle] : +# 104| r104_48(glval>) = VariableAddress[(unnamed local variable)] : +# 104| r104_49(glval>) = Convert : r104_48 +# 104| r104_50(coroutine_handle &) = CopyValue : r104_49 +# 104| v104_51(void) = Call[coroutine_handle] : func:r104_47, this:r104_44, 0:r104_50 +# 104| m104_52(unknown) = ^CallSideEffect : ~m104_46 +# 104| m104_53(unknown) = Chi : total:m104_46, partial:m104_52 +# 104| v104_54(void) = ^BufferReadSideEffect[0] : &:r104_50, ~m104_53 +# 104| m104_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_44 +# 104| m104_56(unknown) = Chi : total:m104_53, partial:m104_55 +# 104| r104_57(coroutine_handle) = Load[#temp104:3] : &:r104_44, ~m104_56 +# 104| v104_58(void) = Call[await_suspend] : func:r104_43, this:r0_30, 0:r104_57 +# 104| m104_59(unknown) = ^CallSideEffect : ~m104_56 +# 104| m104_60(unknown) = Chi : total:m104_56, partial:m104_59 +#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m104_60 #-----| Goto -> Block 3 #-----| Block 5 -#-----| v0_33(void) = NoOp : +#-----| v0_32(void) = NoOp : # 103| r103_64(glval) = VariableAddress[(unnamed local variable)] : # 103| r103_65(glval) = FunctionAddress[final_suspend] : # 103| r103_66(suspend_always) = Call[final_suspend] : func:r103_65, this:r103_64 -# 103| m103_67(unknown) = ^CallSideEffect : ~m0_29 -# 103| m103_68(unknown) = Chi : total:m0_29, partial:m103_67 +# 103| m103_67(unknown) = ^CallSideEffect : ~m0_28 +# 103| m103_68(unknown) = Chi : total:m0_28, partial:m103_67 # 103| v103_69(void) = ^IndirectReadSideEffect[-1] : &:r103_64, ~m103_68 # 103| m103_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_64 # 103| m103_71(unknown) = Chi : total:m103_68, partial:m103_70 -#-----| r0_34(glval) = VariableAddress[#temp0:0] : +#-----| r0_33(glval) = VariableAddress[#temp0:0] : # 103| r103_72(glval) = VariableAddress[#temp103:20] : # 103| r103_73(glval) = VariableAddress[(unnamed local variable)] : # 103| r103_74(glval) = FunctionAddress[final_suspend] : @@ -1773,16 +1768,16 @@ coroutines.cpp: # 103| m103_81(suspend_always) = Store[#temp103:20] : &:r103_72, r103_75 # 103| m103_82(unknown) = Chi : total:m103_80, partial:m103_81 # 103| r103_83(suspend_always *) = CopyValue : r103_72 -# 103| m103_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r103_83 -#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m103_84 -# 103| r103_85(glval) = CopyValue : r0_35 +# 103| m103_84(suspend_always *) = Store[#temp0:0] : &:r0_33, r103_83 +#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_33, m103_84 +# 103| r103_85(glval) = CopyValue : r0_34 # 103| r103_86(glval) = Convert : r103_85 # 103| r103_87(glval) = FunctionAddress[await_ready] : # 103| r103_88(bool) = Call[await_ready] : func:r103_87, this:r103_86 # 103| m103_89(unknown) = ^CallSideEffect : ~m103_82 # 103| m103_90(unknown) = Chi : total:m103_82, partial:m103_89 # 103| v103_91(void) = ^IndirectReadSideEffect[-1] : &:r103_86, ~m103_90 -#-----| v0_36(void) = ConditionalBranch : r103_88 +#-----| v0_35(void) = ConditionalBranch : r103_88 #-----| False -> Block 7 #-----| True -> Block 6 @@ -1790,40 +1785,40 @@ coroutines.cpp: # 103| m103_92(unknown) = Phi : from 5:~m103_90, from 7:~m103_122 # 103| r103_93(suspend_always *) = CopyValue : r103_83 # 103| r103_94(glval) = CopyValue : r103_93 -#-----| r0_37(glval) = Convert : r103_94 +#-----| r0_36(glval) = Convert : r103_94 # 103| r103_95(glval) = FunctionAddress[await_resume] : -# 103| v103_96(void) = Call[await_resume] : func:r103_95, this:r0_37 +# 103| v103_96(void) = Call[await_resume] : func:r103_95, this:r0_36 # 103| m103_97(unknown) = ^CallSideEffect : ~m103_92 # 103| m103_98(unknown) = Chi : total:m103_92, partial:m103_97 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m103_98 +#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, ~m103_98 # 103| r103_99(glval) = VariableAddress[#return] : # 103| v103_100(void) = ReturnValue : &:r103_99, ~m103_98 # 103| v103_101(void) = AliasedUse : ~m103_98 # 103| v103_102(void) = ExitFunction : # 103| Block 7 -# 103| r103_103(suspend_always *) = CopyValue : r103_83 -# 103| r103_104(glval) = CopyValue : r103_103 -#-----| r0_39(glval) = Convert : r103_104 -# 103| r103_105(glval) = FunctionAddress[await_suspend] : -# 103| r103_106(glval>) = VariableAddress[#temp103:20] : -# 103| m103_107(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_106 -# 103| m103_108(unknown) = Chi : total:m103_90, partial:m103_107 -# 103| r103_109(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_110(glval>) = VariableAddress : -# 103| r103_111(glval>) = Convert : r103_110 -# 103| r103_112(coroutine_handle &) = CopyValue : r103_111 -# 103| v103_113(void) = Call[coroutine_handle] : func:r103_109, this:r103_106, 0:r103_112 -# 103| m103_114(unknown) = ^CallSideEffect : ~m103_108 -# 103| m103_115(unknown) = Chi : total:m103_108, partial:m103_114 -# 103| v103_116(void) = ^BufferReadSideEffect[0] : &:r103_112, ~m103_115 -# 103| m103_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_106 -# 103| m103_118(unknown) = Chi : total:m103_115, partial:m103_117 -# 103| r103_119(coroutine_handle) = Load[#temp103:20] : &:r103_106, ~m103_118 -# 103| v103_120(void) = Call[await_suspend] : func:r103_105, this:r0_39, 0:r103_119 -# 103| m103_121(unknown) = ^CallSideEffect : ~m103_118 -# 103| m103_122(unknown) = Chi : total:m103_118, partial:m103_121 -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m103_122 +# 103| r103_103(suspend_always *) = CopyValue : r103_83 +# 103| r103_104(glval) = CopyValue : r103_103 +#-----| r0_38(glval) = Convert : r103_104 +# 103| r103_105(glval) = FunctionAddress[await_suspend] : +# 103| r103_106(glval>) = VariableAddress[#temp103:20] : +# 103| m103_107(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_106 +# 103| m103_108(unknown) = Chi : total:m103_90, partial:m103_107 +# 103| r103_109(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_110(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_111(glval>) = Convert : r103_110 +# 103| r103_112(coroutine_handle &) = CopyValue : r103_111 +# 103| v103_113(void) = Call[coroutine_handle] : func:r103_109, this:r103_106, 0:r103_112 +# 103| m103_114(unknown) = ^CallSideEffect : ~m103_108 +# 103| m103_115(unknown) = Chi : total:m103_108, partial:m103_114 +# 103| v103_116(void) = ^BufferReadSideEffect[0] : &:r103_112, ~m103_115 +# 103| m103_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_106 +# 103| m103_118(unknown) = Chi : total:m103_115, partial:m103_117 +# 103| r103_119(coroutine_handle) = Load[#temp103:20] : &:r103_106, ~m103_118 +# 103| v103_120(void) = Call[await_suspend] : func:r103_105, this:r0_38, 0:r103_119 +# 103| m103_121(unknown) = ^CallSideEffect : ~m103_118 +# 103| m103_122(unknown) = Chi : total:m103_118, partial:m103_121 +#-----| v0_39(void) = ^IndirectReadSideEffect[-1] : &:r0_38, ~m103_122 #-----| Goto -> Block 6 # 108| co_returnable_value co_yield_and_return_value(int) @@ -1878,18 +1873,17 @@ coroutines.cpp: #-----| Block 1 #-----| m0_8(unknown) = Phi : from 0:~m108_36, from 2:~m108_63 #-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 -#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| m0_11(bool) = Store[(unnamed local variable)] : &:r0_10, r0_9 # 108| r108_38(suspend_always *) = CopyValue : r108_29 # 108| r108_39(glval) = CopyValue : r108_38 -#-----| r0_13(glval) = Convert : r108_39 +#-----| r0_12(glval) = Convert : r108_39 # 108| r108_40(glval) = FunctionAddress[await_resume] : -# 108| v108_41(void) = Call[await_resume] : func:r108_40, this:r0_13 -# 108| m108_42(unknown) = ^CallSideEffect : ~m0_12 -# 108| m108_43(unknown) = Chi : total:m0_12, partial:m108_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m108_43 -#-----| v0_15(void) = CopyValue : v108_41 +# 108| v108_41(void) = Call[await_resume] : func:r108_40, this:r0_12 +# 108| m108_42(unknown) = ^CallSideEffect : ~m0_8 +# 108| m108_43(unknown) = Chi : total:m0_8, partial:m108_42 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m108_43 +#-----| v0_14(void) = CopyValue : v108_41 # 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : # 109| r109_2(glval) = FunctionAddress[yield_value] : # 109| r109_3(glval) = VariableAddress[i] : @@ -1900,7 +1894,7 @@ coroutines.cpp: # 109| v109_8(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m109_7 # 109| m109_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 # 109| m109_10(unknown) = Chi : total:m109_7, partial:m109_9 -#-----| r0_16(glval) = VariableAddress[#temp0:0] : +#-----| r0_15(glval) = VariableAddress[#temp0:0] : # 109| r109_11(glval) = VariableAddress[#temp109:13] : # 109| r109_12(glval) = VariableAddress[(unnamed local variable)] : # 109| r109_13(glval) = FunctionAddress[yield_value] : @@ -1915,9 +1909,9 @@ coroutines.cpp: # 109| m109_22(suspend_always) = Store[#temp109:13] : &:r109_11, r109_16 # 109| m109_23(unknown) = Chi : total:m109_21, partial:m109_22 # 109| r109_24(suspend_always *) = CopyValue : r109_11 -# 109| m109_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r109_24 -#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m109_25 -# 109| r109_26(glval) = CopyValue : r0_17 +# 109| m109_25(suspend_always *) = Store[#temp0:0] : &:r0_15, r109_24 +#-----| r0_16(suspend_always *) = Load[#temp0:0] : &:r0_15, m109_25 +# 109| r109_26(glval) = CopyValue : r0_16 # 109| r109_27(glval) = Convert : r109_26 # 109| r109_28(glval) = FunctionAddress[await_ready] : # 109| r109_29(bool) = Call[await_ready] : func:r109_28, this:r109_27 @@ -1929,92 +1923,92 @@ coroutines.cpp: #-----| True -> Block 3 # 108| Block 2 -# 108| r108_44(suspend_always *) = CopyValue : r108_29 -# 108| r108_45(glval) = CopyValue : r108_44 -#-----| r0_18(glval) = Convert : r108_45 -# 108| r108_46(glval) = FunctionAddress[await_suspend] : -# 108| r108_47(glval>) = VariableAddress[#temp108:21] : -# 108| m108_48(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_47 -# 108| m108_49(unknown) = Chi : total:m108_36, partial:m108_48 -# 108| r108_50(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_51(glval>) = VariableAddress : -# 108| r108_52(glval>) = Convert : r108_51 -# 108| r108_53(coroutine_handle &) = CopyValue : r108_52 -# 108| v108_54(void) = Call[coroutine_handle] : func:r108_50, this:r108_47, 0:r108_53 -# 108| m108_55(unknown) = ^CallSideEffect : ~m108_49 -# 108| m108_56(unknown) = Chi : total:m108_49, partial:m108_55 -# 108| v108_57(void) = ^BufferReadSideEffect[0] : &:r108_53, ~m108_56 -# 108| m108_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_47 -# 108| m108_59(unknown) = Chi : total:m108_56, partial:m108_58 -# 108| r108_60(coroutine_handle) = Load[#temp108:21] : &:r108_47, ~m108_59 -# 108| v108_61(void) = Call[await_suspend] : func:r108_46, this:r0_18, 0:r108_60 -# 108| m108_62(unknown) = ^CallSideEffect : ~m108_59 -# 108| m108_63(unknown) = Chi : total:m108_59, partial:m108_62 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m108_63 +# 108| r108_44(suspend_always *) = CopyValue : r108_29 +# 108| r108_45(glval) = CopyValue : r108_44 +#-----| r0_17(glval) = Convert : r108_45 +# 108| r108_46(glval) = FunctionAddress[await_suspend] : +# 108| r108_47(glval>) = VariableAddress[#temp108:21] : +# 108| m108_48(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_47 +# 108| m108_49(unknown) = Chi : total:m108_36, partial:m108_48 +# 108| r108_50(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_51(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_52(glval>) = Convert : r108_51 +# 108| r108_53(coroutine_handle &) = CopyValue : r108_52 +# 108| v108_54(void) = Call[coroutine_handle] : func:r108_50, this:r108_47, 0:r108_53 +# 108| m108_55(unknown) = ^CallSideEffect : ~m108_49 +# 108| m108_56(unknown) = Chi : total:m108_49, partial:m108_55 +# 108| v108_57(void) = ^BufferReadSideEffect[0] : &:r108_53, ~m108_56 +# 108| m108_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_47 +# 108| m108_59(unknown) = Chi : total:m108_56, partial:m108_58 +# 108| r108_60(coroutine_handle) = Load[#temp108:21] : &:r108_47, ~m108_59 +# 108| v108_61(void) = Call[await_suspend] : func:r108_46, this:r0_17, 0:r108_60 +# 108| m108_62(unknown) = ^CallSideEffect : ~m108_59 +# 108| m108_63(unknown) = Chi : total:m108_59, partial:m108_62 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m108_63 #-----| Goto -> Block 1 # 109| Block 3 # 109| m109_34(unknown) = Phi : from 1:~m109_31, from 4:~m109_60 # 109| r109_35(suspend_always *) = CopyValue : r109_24 # 109| r109_36(glval) = CopyValue : r109_35 -#-----| r0_20(glval) = Convert : r109_36 +#-----| r0_19(glval) = Convert : r109_36 # 109| r109_37(glval) = FunctionAddress[await_resume] : -# 109| v109_38(void) = Call[await_resume] : func:r109_37, this:r0_20 +# 109| v109_38(void) = Call[await_resume] : func:r109_37, this:r0_19 # 109| m109_39(unknown) = ^CallSideEffect : ~m109_34 # 109| m109_40(unknown) = Chi : total:m109_34, partial:m109_39 -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m109_40 -#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_23(glval) = FunctionAddress[return_value] : +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m109_40 +#-----| r0_21(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_22(glval) = FunctionAddress[return_value] : # 110| r110_1(glval) = VariableAddress[i] : # 110| r110_2(int) = Load[i] : &:r110_1, m0_4 # 110| r110_3(int) = Constant[1] : # 110| r110_4(int) = Add : r110_2, r110_3 -#-----| v0_24(void) = Call[return_value] : func:r0_23, this:r0_22, 0:r110_4 -#-----| m0_25(unknown) = ^CallSideEffect : ~m109_40 -#-----| m0_26(unknown) = Chi : total:m109_40, partial:m0_25 -#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 -#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 -#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +#-----| v0_23(void) = Call[return_value] : func:r0_22, this:r0_21, 0:r110_4 +#-----| m0_24(unknown) = ^CallSideEffect : ~m109_40 +#-----| m0_25(unknown) = Chi : total:m109_40, partial:m0_24 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m0_25 +#-----| m0_27(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_21 +#-----| m0_28(unknown) = Chi : total:m0_25, partial:m0_27 # 110| v110_5(void) = NoOp : -#-----| v0_30(void) = NoOp : +#-----| v0_29(void) = NoOp : #-----| Goto (back edge) -> Block 5 # 109| Block 4 -# 109| r109_41(suspend_always *) = CopyValue : r109_24 -# 109| r109_42(glval) = CopyValue : r109_41 -#-----| r0_31(glval) = Convert : r109_42 -# 109| r109_43(glval) = FunctionAddress[await_suspend] : -# 109| r109_44(glval>) = VariableAddress[#temp109:3] : -# 109| m109_45(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_44 -# 109| m109_46(unknown) = Chi : total:m109_31, partial:m109_45 -# 109| r109_47(glval) = FunctionAddress[coroutine_handle] : -# 109| r109_48(glval>) = VariableAddress : -# 109| r109_49(glval>) = Convert : r109_48 -# 109| r109_50(coroutine_handle &) = CopyValue : r109_49 -# 109| v109_51(void) = Call[coroutine_handle] : func:r109_47, this:r109_44, 0:r109_50 -# 109| m109_52(unknown) = ^CallSideEffect : ~m109_46 -# 109| m109_53(unknown) = Chi : total:m109_46, partial:m109_52 -# 109| v109_54(void) = ^BufferReadSideEffect[0] : &:r109_50, ~m109_53 -# 109| m109_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_44 -# 109| m109_56(unknown) = Chi : total:m109_53, partial:m109_55 -# 109| r109_57(coroutine_handle) = Load[#temp109:3] : &:r109_44, ~m109_56 -# 109| v109_58(void) = Call[await_suspend] : func:r109_43, this:r0_31, 0:r109_57 -# 109| m109_59(unknown) = ^CallSideEffect : ~m109_56 -# 109| m109_60(unknown) = Chi : total:m109_56, partial:m109_59 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m109_60 +# 109| r109_41(suspend_always *) = CopyValue : r109_24 +# 109| r109_42(glval) = CopyValue : r109_41 +#-----| r0_30(glval) = Convert : r109_42 +# 109| r109_43(glval) = FunctionAddress[await_suspend] : +# 109| r109_44(glval>) = VariableAddress[#temp109:3] : +# 109| m109_45(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_44 +# 109| m109_46(unknown) = Chi : total:m109_31, partial:m109_45 +# 109| r109_47(glval) = FunctionAddress[coroutine_handle] : +# 109| r109_48(glval>) = VariableAddress[(unnamed local variable)] : +# 109| r109_49(glval>) = Convert : r109_48 +# 109| r109_50(coroutine_handle &) = CopyValue : r109_49 +# 109| v109_51(void) = Call[coroutine_handle] : func:r109_47, this:r109_44, 0:r109_50 +# 109| m109_52(unknown) = ^CallSideEffect : ~m109_46 +# 109| m109_53(unknown) = Chi : total:m109_46, partial:m109_52 +# 109| v109_54(void) = ^BufferReadSideEffect[0] : &:r109_50, ~m109_53 +# 109| m109_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_44 +# 109| m109_56(unknown) = Chi : total:m109_53, partial:m109_55 +# 109| r109_57(coroutine_handle) = Load[#temp109:3] : &:r109_44, ~m109_56 +# 109| v109_58(void) = Call[await_suspend] : func:r109_43, this:r0_30, 0:r109_57 +# 109| m109_59(unknown) = ^CallSideEffect : ~m109_56 +# 109| m109_60(unknown) = Chi : total:m109_56, partial:m109_59 +#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m109_60 #-----| Goto -> Block 3 #-----| Block 5 -#-----| v0_33(void) = NoOp : +#-----| v0_32(void) = NoOp : # 108| r108_64(glval) = VariableAddress[(unnamed local variable)] : # 108| r108_65(glval) = FunctionAddress[final_suspend] : # 108| r108_66(suspend_always) = Call[final_suspend] : func:r108_65, this:r108_64 -# 108| m108_67(unknown) = ^CallSideEffect : ~m0_29 -# 108| m108_68(unknown) = Chi : total:m0_29, partial:m108_67 +# 108| m108_67(unknown) = ^CallSideEffect : ~m0_28 +# 108| m108_68(unknown) = Chi : total:m0_28, partial:m108_67 # 108| v108_69(void) = ^IndirectReadSideEffect[-1] : &:r108_64, ~m108_68 # 108| m108_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_64 # 108| m108_71(unknown) = Chi : total:m108_68, partial:m108_70 -#-----| r0_34(glval) = VariableAddress[#temp0:0] : +#-----| r0_33(glval) = VariableAddress[#temp0:0] : # 108| r108_72(glval) = VariableAddress[#temp108:21] : # 108| r108_73(glval) = VariableAddress[(unnamed local variable)] : # 108| r108_74(glval) = FunctionAddress[final_suspend] : @@ -2027,16 +2021,16 @@ coroutines.cpp: # 108| m108_81(suspend_always) = Store[#temp108:21] : &:r108_72, r108_75 # 108| m108_82(unknown) = Chi : total:m108_80, partial:m108_81 # 108| r108_83(suspend_always *) = CopyValue : r108_72 -# 108| m108_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r108_83 -#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m108_84 -# 108| r108_85(glval) = CopyValue : r0_35 +# 108| m108_84(suspend_always *) = Store[#temp0:0] : &:r0_33, r108_83 +#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_33, m108_84 +# 108| r108_85(glval) = CopyValue : r0_34 # 108| r108_86(glval) = Convert : r108_85 # 108| r108_87(glval) = FunctionAddress[await_ready] : # 108| r108_88(bool) = Call[await_ready] : func:r108_87, this:r108_86 # 108| m108_89(unknown) = ^CallSideEffect : ~m108_82 # 108| m108_90(unknown) = Chi : total:m108_82, partial:m108_89 # 108| v108_91(void) = ^IndirectReadSideEffect[-1] : &:r108_86, ~m108_90 -#-----| v0_36(void) = ConditionalBranch : r108_88 +#-----| v0_35(void) = ConditionalBranch : r108_88 #-----| False -> Block 7 #-----| True -> Block 6 @@ -2044,40 +2038,40 @@ coroutines.cpp: # 108| m108_92(unknown) = Phi : from 5:~m108_90, from 7:~m108_122 # 108| r108_93(suspend_always *) = CopyValue : r108_83 # 108| r108_94(glval) = CopyValue : r108_93 -#-----| r0_37(glval) = Convert : r108_94 +#-----| r0_36(glval) = Convert : r108_94 # 108| r108_95(glval) = FunctionAddress[await_resume] : -# 108| v108_96(void) = Call[await_resume] : func:r108_95, this:r0_37 +# 108| v108_96(void) = Call[await_resume] : func:r108_95, this:r0_36 # 108| m108_97(unknown) = ^CallSideEffect : ~m108_92 # 108| m108_98(unknown) = Chi : total:m108_92, partial:m108_97 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m108_98 +#-----| v0_37(void) = ^IndirectReadSideEffect[-1] : &:r0_36, ~m108_98 # 108| r108_99(glval) = VariableAddress[#return] : # 108| v108_100(void) = ReturnValue : &:r108_99, ~m108_98 # 108| v108_101(void) = AliasedUse : ~m108_98 # 108| v108_102(void) = ExitFunction : # 108| Block 7 -# 108| r108_103(suspend_always *) = CopyValue : r108_83 -# 108| r108_104(glval) = CopyValue : r108_103 -#-----| r0_39(glval) = Convert : r108_104 -# 108| r108_105(glval) = FunctionAddress[await_suspend] : -# 108| r108_106(glval>) = VariableAddress[#temp108:21] : -# 108| m108_107(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_106 -# 108| m108_108(unknown) = Chi : total:m108_90, partial:m108_107 -# 108| r108_109(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_110(glval>) = VariableAddress : -# 108| r108_111(glval>) = Convert : r108_110 -# 108| r108_112(coroutine_handle &) = CopyValue : r108_111 -# 108| v108_113(void) = Call[coroutine_handle] : func:r108_109, this:r108_106, 0:r108_112 -# 108| m108_114(unknown) = ^CallSideEffect : ~m108_108 -# 108| m108_115(unknown) = Chi : total:m108_108, partial:m108_114 -# 108| v108_116(void) = ^BufferReadSideEffect[0] : &:r108_112, ~m108_115 -# 108| m108_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_106 -# 108| m108_118(unknown) = Chi : total:m108_115, partial:m108_117 -# 108| r108_119(coroutine_handle) = Load[#temp108:21] : &:r108_106, ~m108_118 -# 108| v108_120(void) = Call[await_suspend] : func:r108_105, this:r0_39, 0:r108_119 -# 108| m108_121(unknown) = ^CallSideEffect : ~m108_118 -# 108| m108_122(unknown) = Chi : total:m108_118, partial:m108_121 -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m108_122 +# 108| r108_103(suspend_always *) = CopyValue : r108_83 +# 108| r108_104(glval) = CopyValue : r108_103 +#-----| r0_38(glval) = Convert : r108_104 +# 108| r108_105(glval) = FunctionAddress[await_suspend] : +# 108| r108_106(glval>) = VariableAddress[#temp108:21] : +# 108| m108_107(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_106 +# 108| m108_108(unknown) = Chi : total:m108_90, partial:m108_107 +# 108| r108_109(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_110(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_111(glval>) = Convert : r108_110 +# 108| r108_112(coroutine_handle &) = CopyValue : r108_111 +# 108| v108_113(void) = Call[coroutine_handle] : func:r108_109, this:r108_106, 0:r108_112 +# 108| m108_114(unknown) = ^CallSideEffect : ~m108_108 +# 108| m108_115(unknown) = Chi : total:m108_108, partial:m108_114 +# 108| v108_116(void) = ^BufferReadSideEffect[0] : &:r108_112, ~m108_115 +# 108| m108_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_106 +# 108| m108_118(unknown) = Chi : total:m108_115, partial:m108_117 +# 108| r108_119(coroutine_handle) = Load[#temp108:21] : &:r108_106, ~m108_118 +# 108| v108_120(void) = Call[await_suspend] : func:r108_105, this:r0_38, 0:r108_119 +# 108| m108_121(unknown) = ^CallSideEffect : ~m108_118 +# 108| m108_122(unknown) = Chi : total:m108_118, partial:m108_121 +#-----| v0_39(void) = ^IndirectReadSideEffect[-1] : &:r0_38, ~m108_122 #-----| Goto -> Block 6 destructors_for_temps.cpp: diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index 5a0234a4cc4..199d61f015d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -29,26 +29,4 @@ fieldAddressOnNonPointer thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index 5a0234a4cc4..199d61f015d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -29,26 +29,4 @@ fieldAddressOnNonPointer thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index ac1034bfc6c..26760a15730 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -38,32 +38,4 @@ fieldAddressOnNonPointer thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType 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 ab1336a268a..5e095f3b108 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -770,8 +770,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_4(bool) = Constant[1] : -#-----| r0_5(glval) = VariableAddress : -#-----| mu0_6(bool) = Store[?] : &:r0_5, r0_4 +#-----| r0_5(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_6(bool) = Store[(unnamed local variable)] : &:r0_5, r0_4 # 87| r87_31(suspend_always *) = CopyValue : r87_20 # 87| r87_32(glval) = CopyValue : r87_31 #-----| r0_7(glval) = Convert : r87_32 @@ -791,32 +791,32 @@ coroutines.cpp: #-----| Goto (back edge) -> Block 8 # 87| Block 4 -# 87| r87_36(suspend_always *) = CopyValue : r87_20 -# 87| r87_37(glval) = CopyValue : r87_36 -#-----| r0_17(glval) = Convert : r87_37 -# 87| r87_38(glval) = FunctionAddress[await_suspend] : -# 87| r87_39(glval>) = VariableAddress[#temp87:20] : -# 87| mu87_40(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_39 -# 87| r87_41(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_42(glval>) = VariableAddress : -# 87| r87_43(glval>) = Convert : r87_42 -# 87| r87_44(coroutine_handle &) = CopyValue : r87_43 -# 87| v87_45(void) = Call[coroutine_handle] : func:r87_41, this:r87_39, 0:r87_44 -# 87| mu87_46(unknown) = ^CallSideEffect : ~m? -# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_44, ~m? -# 87| mu87_48(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_39 -# 87| r87_49(coroutine_handle) = Load[#temp87:20] : &:r87_39, ~m? -# 87| v87_50(void) = Call[await_suspend] : func:r87_38, this:r0_17, 0:r87_49 -# 87| mu87_51(unknown) = ^CallSideEffect : ~m? -#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 87| r87_36(suspend_always *) = CopyValue : r87_20 +# 87| r87_37(glval) = CopyValue : r87_36 +#-----| r0_17(glval) = Convert : r87_37 +# 87| r87_38(glval) = FunctionAddress[await_suspend] : +# 87| r87_39(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_40(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_39 +# 87| r87_41(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_42(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_43(glval>) = Convert : r87_42 +# 87| r87_44(coroutine_handle &) = CopyValue : r87_43 +# 87| v87_45(void) = Call[coroutine_handle] : func:r87_41, this:r87_39, 0:r87_44 +# 87| mu87_46(unknown) = ^CallSideEffect : ~m? +# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_44, ~m? +# 87| mu87_48(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_39 +# 87| r87_49(coroutine_handle) = Load[#temp87:20] : &:r87_39, ~m? +# 87| v87_50(void) = Call[await_suspend] : func:r87_38, this:r0_17, 0:r87_49 +# 87| mu87_51(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? #-----| Goto -> Block 3 #-----| Block 5 -#-----| v0_19(void) = CatchAny : -#-----| r0_20(glval) = VariableAddress : -#-----| r0_21(bool) = Load[?] : &:r0_20, ~m? -#-----| r0_22(bool) = LogicalNot : r0_21 -#-----| v0_23(void) = ConditionalBranch : r0_22 +#-----| v0_19(void) = CatchAny : +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(bool) = Load[(unnamed local variable)] : &:r0_20, ~m? +#-----| r0_22(bool) = LogicalNot : r0_21 +#-----| v0_23(void) = ConditionalBranch : r0_22 #-----| False -> Block 7 #-----| True -> Block 6 @@ -876,24 +876,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 87| Block 10 -# 87| r87_87(suspend_always *) = CopyValue : r87_72 -# 87| r87_88(glval) = CopyValue : r87_87 -#-----| r0_31(glval) = Convert : r87_88 -# 87| r87_89(glval) = FunctionAddress[await_suspend] : -# 87| r87_90(glval>) = VariableAddress[#temp87:20] : -# 87| mu87_91(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_90 -# 87| r87_92(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_93(glval>) = VariableAddress : -# 87| r87_94(glval>) = Convert : r87_93 -# 87| r87_95(coroutine_handle &) = CopyValue : r87_94 -# 87| v87_96(void) = Call[coroutine_handle] : func:r87_92, this:r87_90, 0:r87_95 -# 87| mu87_97(unknown) = ^CallSideEffect : ~m? -# 87| v87_98(void) = ^BufferReadSideEffect[0] : &:r87_95, ~m? -# 87| mu87_99(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_90 -# 87| r87_100(coroutine_handle) = Load[#temp87:20] : &:r87_90, ~m? -# 87| v87_101(void) = Call[await_suspend] : func:r87_89, this:r0_31, 0:r87_100 -# 87| mu87_102(unknown) = ^CallSideEffect : ~m? -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 87| r87_87(suspend_always *) = CopyValue : r87_72 +# 87| r87_88(glval) = CopyValue : r87_87 +#-----| r0_31(glval) = Convert : r87_88 +# 87| r87_89(glval) = FunctionAddress[await_suspend] : +# 87| r87_90(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_91(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_90 +# 87| r87_92(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_93(glval>) = VariableAddress[(unnamed local variable)] : +# 87| r87_94(glval>) = Convert : r87_93 +# 87| r87_95(coroutine_handle &) = CopyValue : r87_94 +# 87| v87_96(void) = Call[coroutine_handle] : func:r87_92, this:r87_90, 0:r87_95 +# 87| mu87_97(unknown) = ^CallSideEffect : ~m? +# 87| v87_98(void) = ^BufferReadSideEffect[0] : &:r87_95, ~m? +# 87| mu87_99(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_90 +# 87| r87_100(coroutine_handle) = Load[#temp87:20] : &:r87_90, ~m? +# 87| v87_101(void) = Call[await_suspend] : func:r87_89, this:r0_31, 0:r87_100 +# 87| mu87_102(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? #-----| Goto -> Block 9 # 91| co_returnable_value co_return_int(int) @@ -947,8 +947,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_8(bool) = Constant[1] : -#-----| r0_9(glval) = VariableAddress : -#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 # 91| r91_33(suspend_always *) = CopyValue : r91_22 # 91| r91_34(glval) = CopyValue : r91_33 #-----| r0_11(glval) = Convert : r91_34 @@ -970,32 +970,32 @@ coroutines.cpp: #-----| Goto (back edge) -> Block 8 # 91| Block 4 -# 91| r91_38(suspend_always *) = CopyValue : r91_22 -# 91| r91_39(glval) = CopyValue : r91_38 -#-----| r0_21(glval) = Convert : r91_39 -# 91| r91_40(glval) = FunctionAddress[await_suspend] : -# 91| r91_41(glval>) = VariableAddress[#temp91:21] : -# 91| mu91_42(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_41 -# 91| r91_43(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_44(glval>) = VariableAddress : -# 91| r91_45(glval>) = Convert : r91_44 -# 91| r91_46(coroutine_handle &) = CopyValue : r91_45 -# 91| v91_47(void) = Call[coroutine_handle] : func:r91_43, this:r91_41, 0:r91_46 -# 91| mu91_48(unknown) = ^CallSideEffect : ~m? -# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_46, ~m? -# 91| mu91_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_41 -# 91| r91_51(coroutine_handle) = Load[#temp91:21] : &:r91_41, ~m? -# 91| v91_52(void) = Call[await_suspend] : func:r91_40, this:r0_21, 0:r91_51 -# 91| mu91_53(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 91| r91_38(suspend_always *) = CopyValue : r91_22 +# 91| r91_39(glval) = CopyValue : r91_38 +#-----| r0_21(glval) = Convert : r91_39 +# 91| r91_40(glval) = FunctionAddress[await_suspend] : +# 91| r91_41(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_42(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_41 +# 91| r91_43(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_44(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_45(glval>) = Convert : r91_44 +# 91| r91_46(coroutine_handle &) = CopyValue : r91_45 +# 91| v91_47(void) = Call[coroutine_handle] : func:r91_43, this:r91_41, 0:r91_46 +# 91| mu91_48(unknown) = ^CallSideEffect : ~m? +# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_46, ~m? +# 91| mu91_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_41 +# 91| r91_51(coroutine_handle) = Load[#temp91:21] : &:r91_41, ~m? +# 91| v91_52(void) = Call[await_suspend] : func:r91_40, this:r0_21, 0:r91_51 +# 91| mu91_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? #-----| Goto -> Block 3 #-----| Block 5 -#-----| v0_23(void) = CatchAny : -#-----| r0_24(glval) = VariableAddress : -#-----| r0_25(bool) = Load[?] : &:r0_24, ~m? -#-----| r0_26(bool) = LogicalNot : r0_25 -#-----| v0_27(void) = ConditionalBranch : r0_26 +#-----| v0_23(void) = CatchAny : +#-----| r0_24(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_25(bool) = Load[(unnamed local variable)] : &:r0_24, ~m? +#-----| r0_26(bool) = LogicalNot : r0_25 +#-----| v0_27(void) = ConditionalBranch : r0_26 #-----| False -> Block 7 #-----| True -> Block 6 @@ -1055,24 +1055,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 91| Block 10 -# 91| r91_89(suspend_always *) = CopyValue : r91_74 -# 91| r91_90(glval) = CopyValue : r91_89 -#-----| r0_35(glval) = Convert : r91_90 -# 91| r91_91(glval) = FunctionAddress[await_suspend] : -# 91| r91_92(glval>) = VariableAddress[#temp91:21] : -# 91| mu91_93(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_92 -# 91| r91_94(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_95(glval>) = VariableAddress : -# 91| r91_96(glval>) = Convert : r91_95 -# 91| r91_97(coroutine_handle &) = CopyValue : r91_96 -# 91| v91_98(void) = Call[coroutine_handle] : func:r91_94, this:r91_92, 0:r91_97 -# 91| mu91_99(unknown) = ^CallSideEffect : ~m? -# 91| v91_100(void) = ^BufferReadSideEffect[0] : &:r91_97, ~m? -# 91| mu91_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_92 -# 91| r91_102(coroutine_handle) = Load[#temp91:21] : &:r91_92, ~m? -# 91| v91_103(void) = Call[await_suspend] : func:r91_91, this:r0_35, 0:r91_102 -# 91| mu91_104(unknown) = ^CallSideEffect : ~m? -#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, ~m? +# 91| r91_89(suspend_always *) = CopyValue : r91_74 +# 91| r91_90(glval) = CopyValue : r91_89 +#-----| r0_35(glval) = Convert : r91_90 +# 91| r91_91(glval) = FunctionAddress[await_suspend] : +# 91| r91_92(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_93(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_92 +# 91| r91_94(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_95(glval>) = VariableAddress[(unnamed local variable)] : +# 91| r91_96(glval>) = Convert : r91_95 +# 91| r91_97(coroutine_handle &) = CopyValue : r91_96 +# 91| v91_98(void) = Call[coroutine_handle] : func:r91_94, this:r91_92, 0:r91_97 +# 91| mu91_99(unknown) = ^CallSideEffect : ~m? +# 91| v91_100(void) = ^BufferReadSideEffect[0] : &:r91_97, ~m? +# 91| mu91_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_92 +# 91| r91_102(coroutine_handle) = Load[#temp91:21] : &:r91_92, ~m? +# 91| v91_103(void) = Call[await_suspend] : func:r91_91, this:r0_35, 0:r91_102 +# 91| mu91_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, ~m? #-----| Goto -> Block 9 # 95| co_returnable_void co_yield_value_void(int) @@ -1126,8 +1126,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_8(bool) = Constant[1] : -#-----| r0_9(glval) = VariableAddress : -#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 # 95| r95_33(suspend_always *) = CopyValue : r95_22 # 95| r95_34(glval) = CopyValue : r95_33 #-----| r0_11(glval) = Convert : r95_34 @@ -1169,24 +1169,24 @@ coroutines.cpp: #-----| True -> Block 5 # 95| Block 4 -# 95| r95_38(suspend_always *) = CopyValue : r95_22 -# 95| r95_39(glval) = CopyValue : r95_38 -#-----| r0_16(glval) = Convert : r95_39 -# 95| r95_40(glval) = FunctionAddress[await_suspend] : -# 95| r95_41(glval>) = VariableAddress[#temp95:20] : -# 95| mu95_42(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_41 -# 95| r95_43(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_44(glval>) = VariableAddress : -# 95| r95_45(glval>) = Convert : r95_44 -# 95| r95_46(coroutine_handle &) = CopyValue : r95_45 -# 95| v95_47(void) = Call[coroutine_handle] : func:r95_43, this:r95_41, 0:r95_46 -# 95| mu95_48(unknown) = ^CallSideEffect : ~m? -# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_46, ~m? -# 95| mu95_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_41 -# 95| r95_51(coroutine_handle) = Load[#temp95:20] : &:r95_41, ~m? -# 95| v95_52(void) = Call[await_suspend] : func:r95_40, this:r0_16, 0:r95_51 -# 95| mu95_53(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +# 95| r95_38(suspend_always *) = CopyValue : r95_22 +# 95| r95_39(glval) = CopyValue : r95_38 +#-----| r0_16(glval) = Convert : r95_39 +# 95| r95_40(glval) = FunctionAddress[await_suspend] : +# 95| r95_41(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_42(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_41 +# 95| r95_43(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_44(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_45(glval>) = Convert : r95_44 +# 95| r95_46(coroutine_handle &) = CopyValue : r95_45 +# 95| v95_47(void) = Call[coroutine_handle] : func:r95_43, this:r95_41, 0:r95_46 +# 95| mu95_48(unknown) = ^CallSideEffect : ~m? +# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_46, ~m? +# 95| mu95_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_41 +# 95| r95_51(coroutine_handle) = Load[#temp95:20] : &:r95_41, ~m? +# 95| v95_52(void) = Call[await_suspend] : func:r95_40, this:r0_16, 0:r95_51 +# 95| mu95_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? #-----| Goto -> Block 3 # 96| Block 5 @@ -1208,32 +1208,32 @@ coroutines.cpp: #-----| Goto (back edge) -> Block 10 # 96| Block 6 -# 96| r96_33(suspend_always *) = CopyValue : r96_19 -# 96| r96_34(glval) = CopyValue : r96_33 -#-----| r0_27(glval) = Convert : r96_34 -# 96| r96_35(glval) = FunctionAddress[await_suspend] : -# 96| r96_36(glval>) = VariableAddress[#temp96:3] : -# 96| mu96_37(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_36 -# 96| r96_38(glval) = FunctionAddress[coroutine_handle] : -# 96| r96_39(glval>) = VariableAddress : -# 96| r96_40(glval>) = Convert : r96_39 -# 96| r96_41(coroutine_handle &) = CopyValue : r96_40 -# 96| v96_42(void) = Call[coroutine_handle] : func:r96_38, this:r96_36, 0:r96_41 -# 96| mu96_43(unknown) = ^CallSideEffect : ~m? -# 96| v96_44(void) = ^BufferReadSideEffect[0] : &:r96_41, ~m? -# 96| mu96_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_36 -# 96| r96_46(coroutine_handle) = Load[#temp96:3] : &:r96_36, ~m? -# 96| v96_47(void) = Call[await_suspend] : func:r96_35, this:r0_27, 0:r96_46 -# 96| mu96_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 96| r96_33(suspend_always *) = CopyValue : r96_19 +# 96| r96_34(glval) = CopyValue : r96_33 +#-----| r0_27(glval) = Convert : r96_34 +# 96| r96_35(glval) = FunctionAddress[await_suspend] : +# 96| r96_36(glval>) = VariableAddress[#temp96:3] : +# 96| mu96_37(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_36 +# 96| r96_38(glval) = FunctionAddress[coroutine_handle] : +# 96| r96_39(glval>) = VariableAddress[(unnamed local variable)] : +# 96| r96_40(glval>) = Convert : r96_39 +# 96| r96_41(coroutine_handle &) = CopyValue : r96_40 +# 96| v96_42(void) = Call[coroutine_handle] : func:r96_38, this:r96_36, 0:r96_41 +# 96| mu96_43(unknown) = ^CallSideEffect : ~m? +# 96| v96_44(void) = ^BufferReadSideEffect[0] : &:r96_41, ~m? +# 96| mu96_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_36 +# 96| r96_46(coroutine_handle) = Load[#temp96:3] : &:r96_36, ~m? +# 96| v96_47(void) = Call[await_suspend] : func:r96_35, this:r0_27, 0:r96_46 +# 96| mu96_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? #-----| Goto -> Block 5 #-----| Block 7 -#-----| v0_29(void) = CatchAny : -#-----| r0_30(glval) = VariableAddress : -#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? -#-----| r0_32(bool) = LogicalNot : r0_31 -#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 9 #-----| True -> Block 8 @@ -1293,24 +1293,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 95| Block 12 -# 95| r95_89(suspend_always *) = CopyValue : r95_74 -# 95| r95_90(glval) = CopyValue : r95_89 -#-----| r0_41(glval) = Convert : r95_90 -# 95| r95_91(glval) = FunctionAddress[await_suspend] : -# 95| r95_92(glval>) = VariableAddress[#temp95:20] : -# 95| mu95_93(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_92 -# 95| r95_94(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_95(glval>) = VariableAddress : -# 95| r95_96(glval>) = Convert : r95_95 -# 95| r95_97(coroutine_handle &) = CopyValue : r95_96 -# 95| v95_98(void) = Call[coroutine_handle] : func:r95_94, this:r95_92, 0:r95_97 -# 95| mu95_99(unknown) = ^CallSideEffect : ~m? -# 95| v95_100(void) = ^BufferReadSideEffect[0] : &:r95_97, ~m? -# 95| mu95_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_92 -# 95| r95_102(coroutine_handle) = Load[#temp95:20] : &:r95_92, ~m? -# 95| v95_103(void) = Call[await_suspend] : func:r95_91, this:r0_41, 0:r95_102 -# 95| mu95_104(unknown) = ^CallSideEffect : ~m? -#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +# 95| r95_89(suspend_always *) = CopyValue : r95_74 +# 95| r95_90(glval) = CopyValue : r95_89 +#-----| r0_41(glval) = Convert : r95_90 +# 95| r95_91(glval) = FunctionAddress[await_suspend] : +# 95| r95_92(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_93(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_92 +# 95| r95_94(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_95(glval>) = VariableAddress[(unnamed local variable)] : +# 95| r95_96(glval>) = Convert : r95_95 +# 95| r95_97(coroutine_handle &) = CopyValue : r95_96 +# 95| v95_98(void) = Call[coroutine_handle] : func:r95_94, this:r95_92, 0:r95_97 +# 95| mu95_99(unknown) = ^CallSideEffect : ~m? +# 95| v95_100(void) = ^BufferReadSideEffect[0] : &:r95_97, ~m? +# 95| mu95_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_92 +# 95| r95_102(coroutine_handle) = Load[#temp95:20] : &:r95_92, ~m? +# 95| v95_103(void) = Call[await_suspend] : func:r95_91, this:r0_41, 0:r95_102 +# 95| mu95_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? #-----| Goto -> Block 11 # 99| co_returnable_value co_yield_value_value(int) @@ -1364,8 +1364,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_8(bool) = Constant[1] : -#-----| r0_9(glval) = VariableAddress : -#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 # 99| r99_33(suspend_always *) = CopyValue : r99_22 # 99| r99_34(glval) = CopyValue : r99_33 #-----| r0_11(glval) = Convert : r99_34 @@ -1407,24 +1407,24 @@ coroutines.cpp: #-----| True -> Block 5 # 99| Block 4 -# 99| r99_38(suspend_always *) = CopyValue : r99_22 -# 99| r99_39(glval) = CopyValue : r99_38 -#-----| r0_16(glval) = Convert : r99_39 -# 99| r99_40(glval) = FunctionAddress[await_suspend] : -# 99| r99_41(glval>) = VariableAddress[#temp99:21] : -# 99| mu99_42(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_41 -# 99| r99_43(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_44(glval>) = VariableAddress : -# 99| r99_45(glval>) = Convert : r99_44 -# 99| r99_46(coroutine_handle &) = CopyValue : r99_45 -# 99| v99_47(void) = Call[coroutine_handle] : func:r99_43, this:r99_41, 0:r99_46 -# 99| mu99_48(unknown) = ^CallSideEffect : ~m? -# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_46, ~m? -# 99| mu99_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_41 -# 99| r99_51(coroutine_handle) = Load[#temp99:21] : &:r99_41, ~m? -# 99| v99_52(void) = Call[await_suspend] : func:r99_40, this:r0_16, 0:r99_51 -# 99| mu99_53(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +# 99| r99_38(suspend_always *) = CopyValue : r99_22 +# 99| r99_39(glval) = CopyValue : r99_38 +#-----| r0_16(glval) = Convert : r99_39 +# 99| r99_40(glval) = FunctionAddress[await_suspend] : +# 99| r99_41(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_42(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_41 +# 99| r99_43(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_44(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_45(glval>) = Convert : r99_44 +# 99| r99_46(coroutine_handle &) = CopyValue : r99_45 +# 99| v99_47(void) = Call[coroutine_handle] : func:r99_43, this:r99_41, 0:r99_46 +# 99| mu99_48(unknown) = ^CallSideEffect : ~m? +# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_46, ~m? +# 99| mu99_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_41 +# 99| r99_51(coroutine_handle) = Load[#temp99:21] : &:r99_41, ~m? +# 99| v99_52(void) = Call[await_suspend] : func:r99_40, this:r0_16, 0:r99_51 +# 99| mu99_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? #-----| Goto -> Block 3 # 100| Block 5 @@ -1438,32 +1438,32 @@ coroutines.cpp: #-----| Goto -> Block 10 # 100| Block 6 -# 100| r100_33(suspend_always *) = CopyValue : r100_19 -# 100| r100_34(glval) = CopyValue : r100_33 -#-----| r0_20(glval) = Convert : r100_34 -# 100| r100_35(glval) = FunctionAddress[await_suspend] : -# 100| r100_36(glval>) = VariableAddress[#temp100:3] : -# 100| mu100_37(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_36 -# 100| r100_38(glval) = FunctionAddress[coroutine_handle] : -# 100| r100_39(glval>) = VariableAddress : -# 100| r100_40(glval>) = Convert : r100_39 -# 100| r100_41(coroutine_handle &) = CopyValue : r100_40 -# 100| v100_42(void) = Call[coroutine_handle] : func:r100_38, this:r100_36, 0:r100_41 -# 100| mu100_43(unknown) = ^CallSideEffect : ~m? -# 100| v100_44(void) = ^BufferReadSideEffect[0] : &:r100_41, ~m? -# 100| mu100_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_36 -# 100| r100_46(coroutine_handle) = Load[#temp100:3] : &:r100_36, ~m? -# 100| v100_47(void) = Call[await_suspend] : func:r100_35, this:r0_20, 0:r100_46 -# 100| mu100_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +# 100| r100_33(suspend_always *) = CopyValue : r100_19 +# 100| r100_34(glval) = CopyValue : r100_33 +#-----| r0_20(glval) = Convert : r100_34 +# 100| r100_35(glval) = FunctionAddress[await_suspend] : +# 100| r100_36(glval>) = VariableAddress[#temp100:3] : +# 100| mu100_37(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_36 +# 100| r100_38(glval) = FunctionAddress[coroutine_handle] : +# 100| r100_39(glval>) = VariableAddress[(unnamed local variable)] : +# 100| r100_40(glval>) = Convert : r100_39 +# 100| r100_41(coroutine_handle &) = CopyValue : r100_40 +# 100| v100_42(void) = Call[coroutine_handle] : func:r100_38, this:r100_36, 0:r100_41 +# 100| mu100_43(unknown) = ^CallSideEffect : ~m? +# 100| v100_44(void) = ^BufferReadSideEffect[0] : &:r100_41, ~m? +# 100| mu100_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_36 +# 100| r100_46(coroutine_handle) = Load[#temp100:3] : &:r100_36, ~m? +# 100| v100_47(void) = Call[await_suspend] : func:r100_35, this:r0_20, 0:r100_46 +# 100| mu100_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? #-----| Goto -> Block 5 #-----| Block 7 -#-----| v0_22(void) = CatchAny : -#-----| r0_23(glval) = VariableAddress : -#-----| r0_24(bool) = Load[?] : &:r0_23, ~m? -#-----| r0_25(bool) = LogicalNot : r0_24 -#-----| v0_26(void) = ConditionalBranch : r0_25 +#-----| v0_22(void) = CatchAny : +#-----| r0_23(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_24(bool) = Load[(unnamed local variable)] : &:r0_23, ~m? +#-----| r0_25(bool) = LogicalNot : r0_24 +#-----| v0_26(void) = ConditionalBranch : r0_25 #-----| False -> Block 9 #-----| True -> Block 8 @@ -1523,24 +1523,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 99| Block 12 -# 99| r99_89(suspend_always *) = CopyValue : r99_74 -# 99| r99_90(glval) = CopyValue : r99_89 -#-----| r0_34(glval) = Convert : r99_90 -# 99| r99_91(glval) = FunctionAddress[await_suspend] : -# 99| r99_92(glval>) = VariableAddress[#temp99:21] : -# 99| mu99_93(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_92 -# 99| r99_94(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_95(glval>) = VariableAddress : -# 99| r99_96(glval>) = Convert : r99_95 -# 99| r99_97(coroutine_handle &) = CopyValue : r99_96 -# 99| v99_98(void) = Call[coroutine_handle] : func:r99_94, this:r99_92, 0:r99_97 -# 99| mu99_99(unknown) = ^CallSideEffect : ~m? -# 99| v99_100(void) = ^BufferReadSideEffect[0] : &:r99_97, ~m? -# 99| mu99_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_92 -# 99| r99_102(coroutine_handle) = Load[#temp99:21] : &:r99_92, ~m? -# 99| v99_103(void) = Call[await_suspend] : func:r99_91, this:r0_34, 0:r99_102 -# 99| mu99_104(unknown) = ^CallSideEffect : ~m? -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 99| r99_89(suspend_always *) = CopyValue : r99_74 +# 99| r99_90(glval) = CopyValue : r99_89 +#-----| r0_34(glval) = Convert : r99_90 +# 99| r99_91(glval) = FunctionAddress[await_suspend] : +# 99| r99_92(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_93(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_92 +# 99| r99_94(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_95(glval>) = VariableAddress[(unnamed local variable)] : +# 99| r99_96(glval>) = Convert : r99_95 +# 99| r99_97(coroutine_handle &) = CopyValue : r99_96 +# 99| v99_98(void) = Call[coroutine_handle] : func:r99_94, this:r99_92, 0:r99_97 +# 99| mu99_99(unknown) = ^CallSideEffect : ~m? +# 99| v99_100(void) = ^BufferReadSideEffect[0] : &:r99_97, ~m? +# 99| mu99_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_92 +# 99| r99_102(coroutine_handle) = Load[#temp99:21] : &:r99_92, ~m? +# 99| v99_103(void) = Call[await_suspend] : func:r99_91, this:r0_34, 0:r99_102 +# 99| mu99_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? #-----| Goto -> Block 11 # 103| co_returnable_void co_yield_and_return_void(int) @@ -1594,8 +1594,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_8(bool) = Constant[1] : -#-----| r0_9(glval) = VariableAddress : -#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 # 103| r103_33(suspend_always *) = CopyValue : r103_22 # 103| r103_34(glval) = CopyValue : r103_33 #-----| r0_11(glval) = Convert : r103_34 @@ -1637,24 +1637,24 @@ coroutines.cpp: #-----| True -> Block 5 # 103| Block 4 -# 103| r103_38(suspend_always *) = CopyValue : r103_22 -# 103| r103_39(glval) = CopyValue : r103_38 -#-----| r0_16(glval) = Convert : r103_39 -# 103| r103_40(glval) = FunctionAddress[await_suspend] : -# 103| r103_41(glval>) = VariableAddress[#temp103:20] : -# 103| mu103_42(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_41 -# 103| r103_43(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_44(glval>) = VariableAddress : -# 103| r103_45(glval>) = Convert : r103_44 -# 103| r103_46(coroutine_handle &) = CopyValue : r103_45 -# 103| v103_47(void) = Call[coroutine_handle] : func:r103_43, this:r103_41, 0:r103_46 -# 103| mu103_48(unknown) = ^CallSideEffect : ~m? -# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_46, ~m? -# 103| mu103_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_41 -# 103| r103_51(coroutine_handle) = Load[#temp103:20] : &:r103_41, ~m? -# 103| v103_52(void) = Call[await_suspend] : func:r103_40, this:r0_16, 0:r103_51 -# 103| mu103_53(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +# 103| r103_38(suspend_always *) = CopyValue : r103_22 +# 103| r103_39(glval) = CopyValue : r103_38 +#-----| r0_16(glval) = Convert : r103_39 +# 103| r103_40(glval) = FunctionAddress[await_suspend] : +# 103| r103_41(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_42(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_41 +# 103| r103_43(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_44(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_45(glval>) = Convert : r103_44 +# 103| r103_46(coroutine_handle &) = CopyValue : r103_45 +# 103| v103_47(void) = Call[coroutine_handle] : func:r103_43, this:r103_41, 0:r103_46 +# 103| mu103_48(unknown) = ^CallSideEffect : ~m? +# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_46, ~m? +# 103| mu103_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_41 +# 103| r103_51(coroutine_handle) = Load[#temp103:20] : &:r103_41, ~m? +# 103| v103_52(void) = Call[await_suspend] : func:r103_40, this:r0_16, 0:r103_51 +# 103| mu103_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? #-----| Goto -> Block 3 # 104| Block 5 @@ -1676,32 +1676,32 @@ coroutines.cpp: #-----| Goto (back edge) -> Block 10 # 104| Block 6 -# 104| r104_33(suspend_always *) = CopyValue : r104_19 -# 104| r104_34(glval) = CopyValue : r104_33 -#-----| r0_27(glval) = Convert : r104_34 -# 104| r104_35(glval) = FunctionAddress[await_suspend] : -# 104| r104_36(glval>) = VariableAddress[#temp104:3] : -# 104| mu104_37(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_36 -# 104| r104_38(glval) = FunctionAddress[coroutine_handle] : -# 104| r104_39(glval>) = VariableAddress : -# 104| r104_40(glval>) = Convert : r104_39 -# 104| r104_41(coroutine_handle &) = CopyValue : r104_40 -# 104| v104_42(void) = Call[coroutine_handle] : func:r104_38, this:r104_36, 0:r104_41 -# 104| mu104_43(unknown) = ^CallSideEffect : ~m? -# 104| v104_44(void) = ^BufferReadSideEffect[0] : &:r104_41, ~m? -# 104| mu104_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_36 -# 104| r104_46(coroutine_handle) = Load[#temp104:3] : &:r104_36, ~m? -# 104| v104_47(void) = Call[await_suspend] : func:r104_35, this:r0_27, 0:r104_46 -# 104| mu104_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 104| r104_33(suspend_always *) = CopyValue : r104_19 +# 104| r104_34(glval) = CopyValue : r104_33 +#-----| r0_27(glval) = Convert : r104_34 +# 104| r104_35(glval) = FunctionAddress[await_suspend] : +# 104| r104_36(glval>) = VariableAddress[#temp104:3] : +# 104| mu104_37(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_36 +# 104| r104_38(glval) = FunctionAddress[coroutine_handle] : +# 104| r104_39(glval>) = VariableAddress[(unnamed local variable)] : +# 104| r104_40(glval>) = Convert : r104_39 +# 104| r104_41(coroutine_handle &) = CopyValue : r104_40 +# 104| v104_42(void) = Call[coroutine_handle] : func:r104_38, this:r104_36, 0:r104_41 +# 104| mu104_43(unknown) = ^CallSideEffect : ~m? +# 104| v104_44(void) = ^BufferReadSideEffect[0] : &:r104_41, ~m? +# 104| mu104_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_36 +# 104| r104_46(coroutine_handle) = Load[#temp104:3] : &:r104_36, ~m? +# 104| v104_47(void) = Call[await_suspend] : func:r104_35, this:r0_27, 0:r104_46 +# 104| mu104_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? #-----| Goto -> Block 5 #-----| Block 7 -#-----| v0_29(void) = CatchAny : -#-----| r0_30(glval) = VariableAddress : -#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? -#-----| r0_32(bool) = LogicalNot : r0_31 -#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 9 #-----| True -> Block 8 @@ -1761,24 +1761,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 103| Block 12 -# 103| r103_89(suspend_always *) = CopyValue : r103_74 -# 103| r103_90(glval) = CopyValue : r103_89 -#-----| r0_41(glval) = Convert : r103_90 -# 103| r103_91(glval) = FunctionAddress[await_suspend] : -# 103| r103_92(glval>) = VariableAddress[#temp103:20] : -# 103| mu103_93(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_92 -# 103| r103_94(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_95(glval>) = VariableAddress : -# 103| r103_96(glval>) = Convert : r103_95 -# 103| r103_97(coroutine_handle &) = CopyValue : r103_96 -# 103| v103_98(void) = Call[coroutine_handle] : func:r103_94, this:r103_92, 0:r103_97 -# 103| mu103_99(unknown) = ^CallSideEffect : ~m? -# 103| v103_100(void) = ^BufferReadSideEffect[0] : &:r103_97, ~m? -# 103| mu103_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_92 -# 103| r103_102(coroutine_handle) = Load[#temp103:20] : &:r103_92, ~m? -# 103| v103_103(void) = Call[await_suspend] : func:r103_91, this:r0_41, 0:r103_102 -# 103| mu103_104(unknown) = ^CallSideEffect : ~m? -#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +# 103| r103_89(suspend_always *) = CopyValue : r103_74 +# 103| r103_90(glval) = CopyValue : r103_89 +#-----| r0_41(glval) = Convert : r103_90 +# 103| r103_91(glval) = FunctionAddress[await_suspend] : +# 103| r103_92(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_93(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_92 +# 103| r103_94(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_95(glval>) = VariableAddress[(unnamed local variable)] : +# 103| r103_96(glval>) = Convert : r103_95 +# 103| r103_97(coroutine_handle &) = CopyValue : r103_96 +# 103| v103_98(void) = Call[coroutine_handle] : func:r103_94, this:r103_92, 0:r103_97 +# 103| mu103_99(unknown) = ^CallSideEffect : ~m? +# 103| v103_100(void) = ^BufferReadSideEffect[0] : &:r103_97, ~m? +# 103| mu103_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_92 +# 103| r103_102(coroutine_handle) = Load[#temp103:20] : &:r103_92, ~m? +# 103| v103_103(void) = Call[await_suspend] : func:r103_91, this:r0_41, 0:r103_102 +# 103| mu103_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? #-----| Goto -> Block 11 # 108| co_returnable_value co_yield_and_return_value(int) @@ -1832,8 +1832,8 @@ coroutines.cpp: #-----| Block 3 #-----| r0_8(bool) = Constant[1] : -#-----| r0_9(glval) = VariableAddress : -#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +#-----| r0_9(glval) = VariableAddress[(unnamed local variable)] : +#-----| mu0_10(bool) = Store[(unnamed local variable)] : &:r0_9, r0_8 # 108| r108_33(suspend_always *) = CopyValue : r108_22 # 108| r108_34(glval) = CopyValue : r108_33 #-----| r0_11(glval) = Convert : r108_34 @@ -1875,24 +1875,24 @@ coroutines.cpp: #-----| True -> Block 5 # 108| Block 4 -# 108| r108_38(suspend_always *) = CopyValue : r108_22 -# 108| r108_39(glval) = CopyValue : r108_38 -#-----| r0_16(glval) = Convert : r108_39 -# 108| r108_40(glval) = FunctionAddress[await_suspend] : -# 108| r108_41(glval>) = VariableAddress[#temp108:21] : -# 108| mu108_42(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_41 -# 108| r108_43(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_44(glval>) = VariableAddress : -# 108| r108_45(glval>) = Convert : r108_44 -# 108| r108_46(coroutine_handle &) = CopyValue : r108_45 -# 108| v108_47(void) = Call[coroutine_handle] : func:r108_43, this:r108_41, 0:r108_46 -# 108| mu108_48(unknown) = ^CallSideEffect : ~m? -# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_46, ~m? -# 108| mu108_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_41 -# 108| r108_51(coroutine_handle) = Load[#temp108:21] : &:r108_41, ~m? -# 108| v108_52(void) = Call[await_suspend] : func:r108_40, this:r0_16, 0:r108_51 -# 108| mu108_53(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +# 108| r108_38(suspend_always *) = CopyValue : r108_22 +# 108| r108_39(glval) = CopyValue : r108_38 +#-----| r0_16(glval) = Convert : r108_39 +# 108| r108_40(glval) = FunctionAddress[await_suspend] : +# 108| r108_41(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_42(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_41 +# 108| r108_43(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_44(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_45(glval>) = Convert : r108_44 +# 108| r108_46(coroutine_handle &) = CopyValue : r108_45 +# 108| v108_47(void) = Call[coroutine_handle] : func:r108_43, this:r108_41, 0:r108_46 +# 108| mu108_48(unknown) = ^CallSideEffect : ~m? +# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_46, ~m? +# 108| mu108_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_41 +# 108| r108_51(coroutine_handle) = Load[#temp108:21] : &:r108_41, ~m? +# 108| v108_52(void) = Call[await_suspend] : func:r108_40, this:r0_16, 0:r108_51 +# 108| mu108_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? #-----| Goto -> Block 3 # 109| Block 5 @@ -1918,32 +1918,32 @@ coroutines.cpp: #-----| Goto (back edge) -> Block 10 # 109| Block 6 -# 109| r109_33(suspend_always *) = CopyValue : r109_19 -# 109| r109_34(glval) = CopyValue : r109_33 -#-----| r0_27(glval) = Convert : r109_34 -# 109| r109_35(glval) = FunctionAddress[await_suspend] : -# 109| r109_36(glval>) = VariableAddress[#temp109:3] : -# 109| mu109_37(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_36 -# 109| r109_38(glval) = FunctionAddress[coroutine_handle] : -# 109| r109_39(glval>) = VariableAddress : -# 109| r109_40(glval>) = Convert : r109_39 -# 109| r109_41(coroutine_handle &) = CopyValue : r109_40 -# 109| v109_42(void) = Call[coroutine_handle] : func:r109_38, this:r109_36, 0:r109_41 -# 109| mu109_43(unknown) = ^CallSideEffect : ~m? -# 109| v109_44(void) = ^BufferReadSideEffect[0] : &:r109_41, ~m? -# 109| mu109_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_36 -# 109| r109_46(coroutine_handle) = Load[#temp109:3] : &:r109_36, ~m? -# 109| v109_47(void) = Call[await_suspend] : func:r109_35, this:r0_27, 0:r109_46 -# 109| mu109_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 109| r109_33(suspend_always *) = CopyValue : r109_19 +# 109| r109_34(glval) = CopyValue : r109_33 +#-----| r0_27(glval) = Convert : r109_34 +# 109| r109_35(glval) = FunctionAddress[await_suspend] : +# 109| r109_36(glval>) = VariableAddress[#temp109:3] : +# 109| mu109_37(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_36 +# 109| r109_38(glval) = FunctionAddress[coroutine_handle] : +# 109| r109_39(glval>) = VariableAddress[(unnamed local variable)] : +# 109| r109_40(glval>) = Convert : r109_39 +# 109| r109_41(coroutine_handle &) = CopyValue : r109_40 +# 109| v109_42(void) = Call[coroutine_handle] : func:r109_38, this:r109_36, 0:r109_41 +# 109| mu109_43(unknown) = ^CallSideEffect : ~m? +# 109| v109_44(void) = ^BufferReadSideEffect[0] : &:r109_41, ~m? +# 109| mu109_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_36 +# 109| r109_46(coroutine_handle) = Load[#temp109:3] : &:r109_36, ~m? +# 109| v109_47(void) = Call[await_suspend] : func:r109_35, this:r0_27, 0:r109_46 +# 109| mu109_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? #-----| Goto -> Block 5 #-----| Block 7 -#-----| v0_29(void) = CatchAny : -#-----| r0_30(glval) = VariableAddress : -#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? -#-----| r0_32(bool) = LogicalNot : r0_31 -#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_31(bool) = Load[(unnamed local variable)] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 #-----| False -> Block 9 #-----| True -> Block 8 @@ -2003,24 +2003,24 @@ coroutines.cpp: #-----| Goto -> Block 1 # 108| Block 12 -# 108| r108_89(suspend_always *) = CopyValue : r108_74 -# 108| r108_90(glval) = CopyValue : r108_89 -#-----| r0_41(glval) = Convert : r108_90 -# 108| r108_91(glval) = FunctionAddress[await_suspend] : -# 108| r108_92(glval>) = VariableAddress[#temp108:21] : -# 108| mu108_93(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_92 -# 108| r108_94(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_95(glval>) = VariableAddress : -# 108| r108_96(glval>) = Convert : r108_95 -# 108| r108_97(coroutine_handle &) = CopyValue : r108_96 -# 108| v108_98(void) = Call[coroutine_handle] : func:r108_94, this:r108_92, 0:r108_97 -# 108| mu108_99(unknown) = ^CallSideEffect : ~m? -# 108| v108_100(void) = ^BufferReadSideEffect[0] : &:r108_97, ~m? -# 108| mu108_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_92 -# 108| r108_102(coroutine_handle) = Load[#temp108:21] : &:r108_92, ~m? -# 108| v108_103(void) = Call[await_suspend] : func:r108_91, this:r0_41, 0:r108_102 -# 108| mu108_104(unknown) = ^CallSideEffect : ~m? -#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +# 108| r108_89(suspend_always *) = CopyValue : r108_74 +# 108| r108_90(glval) = CopyValue : r108_89 +#-----| r0_41(glval) = Convert : r108_90 +# 108| r108_91(glval) = FunctionAddress[await_suspend] : +# 108| r108_92(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_93(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_92 +# 108| r108_94(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_95(glval>) = VariableAddress[(unnamed local variable)] : +# 108| r108_96(glval>) = Convert : r108_95 +# 108| r108_97(coroutine_handle &) = CopyValue : r108_96 +# 108| v108_98(void) = Call[coroutine_handle] : func:r108_94, this:r108_92, 0:r108_97 +# 108| mu108_99(unknown) = ^CallSideEffect : ~m? +# 108| v108_100(void) = ^BufferReadSideEffect[0] : &:r108_97, ~m? +# 108| mu108_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_92 +# 108| r108_102(coroutine_handle) = Load[#temp108:21] : &:r108_92, ~m? +# 108| v108_103(void) = Call[await_suspend] : func:r108_91, this:r0_41, 0:r108_102 +# 108| mu108_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? #-----| Goto -> Block 11 destructors_for_temps.cpp: diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 5a0234a4cc4..199d61f015d 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -29,26 +29,4 @@ fieldAddressOnNonPointer thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 5a0234a4cc4..199d61f015d 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -29,26 +29,4 @@ fieldAddressOnNonPointer thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType From 0fdd06fff5e58f1fdeba0b3c96934de7c7d8a4a3 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 3 Sep 2024 08:58:27 +0200 Subject: [PATCH 284/334] use my script to delete outdated deprecations --- .../cpp/security/PrivateCleartextWrite.qll | 10 -- cpp/ql/lib/semmle/code/cpp/Declaration.qll | 15 -- cpp/ql/lib/semmle/code/cpp/Function.qll | 40 ----- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 3 - cpp/ql/lib/semmle/code/cpp/commons/Alloc.qll | 9 - .../cpp/dataflow/internal/DataFlowImpl1.qll | 8 - .../cpp/dataflow/internal/DataFlowImpl2.qll | 8 - .../cpp/dataflow/internal/DataFlowImpl3.qll | 8 - .../cpp/dataflow/internal/DataFlowImpl4.qll | 8 - .../dataflow/internal/DataFlowImplLocal.qll | 8 - cpp/ql/lib/semmle/code/cpp/exprs/Literal.qll | 22 --- .../ir/dataflow/internal/DataFlowImpl1.qll | 8 - .../ir/dataflow/internal/DataFlowImpl2.qll | 8 - .../ir/dataflow/internal/DataFlowImpl3.qll | 8 - .../ir/dataflow/internal/DataFlowImpl4.qll | 8 - .../implementation/aliased_ssa/IRVariable.qll | 9 - .../aliased_ssa/internal/AliasedSSA.qll | 3 - .../cpp/ir/implementation/raw/IRVariable.qll | 9 - .../raw/internal/TranslatedCall.qll | 15 -- .../raw/internal/TranslatedCondition.qll | 3 - .../internal/TranslatedDeclarationEntry.qll | 9 - .../raw/internal/TranslatedElement.qll | 3 - .../raw/internal/TranslatedFunction.qll | 27 --- .../raw/internal/TranslatedInitialization.qll | 15 -- .../raw/internal/TranslatedStmt.qll | 3 - .../unaliased_ssa/IRVariable.qll | 9 - .../unaliased_ssa/internal/SimpleSSA.qll | 3 - .../cpp/security/boostorg/asio/protocols.qll | 136 --------------- cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll | 86 --------- .../Memory Management/NtohlArrayNoBound.qll | 18 -- .../CWE/CWE-020/ExternalAPIsSpecific.qll | 14 -- .../CWE/CWE-020/ir/ExternalAPIsSpecific.qll | 9 - .../library-tests/dataflow/fields/Nodes.qll | 6 - .../dataflow/internal/DataFlowImpl1.qll | 8 - .../dataflow/internal/DataFlowImpl2.qll | 8 - .../dataflow/internal/DataFlowImpl3.qll | 8 - .../dataflow/internal/DataFlowImpl4.qll | 8 - .../dataflow/internal/DataFlowImpl5.qll | 8 - .../EncryptionKeyDataFlowQuery.qll | 18 -- .../HardcodedSymmetricEncryptionKey.qll | 27 --- .../dataflow/CleartextStorageQuery.qll | 15 -- .../security/dataflow/CodeInjectionQuery.qll | 15 -- .../dataflow/CommandInjectionQuery.qll | 15 -- .../dataflow/ConditionalBypassQuery.qll | 15 -- .../ExposureOfPrivateInformationQuery.qll | 15 -- .../security/dataflow/ExternalAPIsQuery.qll | 13 -- .../dataflow/HardcodedCredentialsQuery.qll | 40 ----- .../security/dataflow/LDAPInjectionQuery.qll | 15 -- .../security/dataflow/LogForgingQuery.qll | 15 -- .../dataflow/MissingXMLValidationQuery.qll | 16 -- .../csharp/security/dataflow/ReDoSQuery.qll | 29 ---- .../security/dataflow/RegexInjectionQuery.qll | 15 -- .../dataflow/ResourceInjectionQuery.qll | 15 -- .../security/dataflow/SqlInjectionQuery.qll | 15 -- .../security/dataflow/TaintedPathQuery.qll | 15 -- .../dataflow/UnsafeDeserializationQuery.qll | 163 ------------------ .../security/dataflow/UrlRedirectQuery.qll | 15 -- .../dataflow/XMLEntityInjectionQuery.qll | 20 --- .../security/dataflow/XPathInjectionQuery.qll | 15 -- .../csharp/security/dataflow/XSSQuery.qll | 15 -- .../csharp/security/dataflow/ZipSlipQuery.qll | 15 -- .../CWE-099/TaintedWebClientLib.qll | 15 -- .../experimental/CWE-918/RequestForgery.qll | 33 ---- .../JsonWebTokenHandlerLib.qll | 21 --- .../dataflow/flowsources/AuthCookie.qll | 42 ----- .../go/dataflow/internal/DataFlowImpl1.qll | 8 - .../go/dataflow/internal/DataFlowImpl2.qll | 8 - .../go/security/AllocationSizeOverflow.qll | 48 ------ .../semmle/go/security/CommandInjection.qll | 43 ----- go/ql/lib/semmle/go/security/ExternalAPIs.qll | 26 --- go/ql/lib/semmle/go/security/LogInjection.qll | 15 -- java/ql/lib/semmle/code/java/JDK.qll | 33 ---- .../java/dataflow/internal/DataFlowImpl1.qll | 8 - .../java/dataflow/internal/DataFlowImpl2.qll | 8 - .../java/dataflow/internal/DataFlowImpl3.qll | 8 - .../java/dataflow/internal/DataFlowImpl4.qll | 8 - .../java/dataflow/internal/DataFlowImpl5.qll | 8 - .../java/dataflow/internal/DataFlowImpl6.qll | 8 - .../semmle/code/java/frameworks/JsonIo.qll | 28 --- .../java/frameworks/camel/CamelJavaDSL.qll | 3 - .../java/frameworks/spring/SpringCamel.qll | 3 - .../AndroidIntentRedirectionQuery.qll | 21 --- .../AndroidSensitiveCommunicationQuery.qll | 30 ---- .../code/java/security/CommandLineQuery.qll | 34 ---- .../java/security/ConditionalBypassQuery.qll | 17 -- .../code/java/security/ExternalAPIs.qll | 13 -- .../code/java/security/ExternalProcess.qll | 10 -- .../java/security/FragmentInjectionQuery.qll | 18 -- .../java/security/GroovyInjectionQuery.qll | 18 -- .../HardcodedCredentialsApiCallQuery.qll | 49 ------ .../HardcodedCredentialsSourceCallQuery.qll | 32 ---- .../code/java/security/HttpsUrlsQuery.qll | 21 --- .../security/ImplicitPendingIntentsQuery.qll | 49 ------ .../java/security/InsecureBasicAuthQuery.qll | 18 -- .../security/InsecureTrustManagerQuery.qll | 22 --- .../security/InsufficientKeySizeQuery.qll | 17 -- .../IntentUriPermissionManipulationQuery.qll | 23 --- .../code/java/security/JexlInjectionQuery.qll | 19 -- .../code/java/security/JndiInjectionQuery.qll | 22 --- .../code/java/security/LogInjectionQuery.qll | 19 -- .../MissingJWTSignatureCheckQuery.qll | 20 --- .../code/java/security/MvelInjectionQuery.qll | 22 --- .../code/java/security/OgnlInjectionQuery.qll | 21 --- .../security/PartialPathTraversalQuery.qll | 17 -- .../code/java/security/PathCreation.qll | 136 --------------- .../java/security/RequestForgeryConfig.qll | 25 --- .../java/security/RsaWithoutOaepQuery.qll | 22 --- .../java/security/SensitiveLoggingQuery.qll | 23 --- .../security/SensitiveResultReceiverQuery.qll | 34 ---- .../code/java/security/SpelInjectionQuery.qll | 18 -- .../code/java/security/SqlInjectionQuery.qll | 33 ---- .../StaticInitializationVectorQuery.qll | 15 -- .../java/security/TemplateInjectionQuery.qll | 36 ---- .../security/UnsafeAndroidAccessQuery.qll | 17 -- .../java/security/UnsafeCertTrustQuery.qll | 17 -- .../UnsafeContentUriResolutionQuery.qll | 21 --- .../security/UnsafeDeserializationQuery.qll | 84 --------- .../security/WebviewDebuggingEnabledQuery.qll | 26 --- .../security/WebviewDubuggingEnabledQuery.qll | 3 - .../semmle/code/java/security/XmlParsers.qll | 21 --- .../code/java/security/XsltInjectionQuery.qll | 21 --- .../code/java/security/XxeLocalQuery.qll | 19 -- .../code/java/security/XxeRemoteQuery.qll | 19 -- .../security/regexp/PolynomialReDoSQuery.qll | 32 ---- .../security/regexp/RegexInjectionQuery.qll | 15 -- javascript/ql/lib/semmle/javascript/JSX.qll | 6 - .../javascript/NodeModuleResolutionImpl.qll | 6 - .../ql/lib/semmle/javascript/SourceMaps.qll | 3 - javascript/ql/lib/semmle/javascript/Stmt.qll | 30 ---- javascript/ql/lib/semmle/javascript/YAML.qll | 9 - .../semmle/javascript/frameworks/Connect.qll | 6 - .../lib/semmle/javascript/frameworks/GWT.qll | 3 - .../lib/semmle/javascript/frameworks/Vue.qll | 8 - .../Validating RAML-based APIs/Osprey.qll | 3 - python/ql/lib/semmle/python/RegexTreeView.qll | 1 - .../dataflow/new/internal/DataFlowImpl1.qll | 8 - .../dataflow/new/internal/DataFlowImpl2.qll | 8 - .../dataflow/new/internal/DataFlowImpl3.qll | 8 - .../dataflow/new/internal/DataFlowImpl4.qll | 8 - .../python/dataflow/old/TaintTracking.qll | 8 - python/ql/lib/semmle/python/regex.qll | 5 - .../python/regexp/internal/ParseRegExp.qll | 5 - python/ql/lib/semmle/python/security/SQL.qll | 2 - .../experimental/semmle/python/Concepts.qll | 6 - ruby/ql/lib/codeql/ruby/Concepts.qll | 8 - .../ruby/controlflow/ControlFlowGraph.qll | 3 - .../ruby/dataflow/internal/DataFlowImpl1.qll | 8 - .../ruby/dataflow/internal/DataFlowImpl2.qll | 8 - .../ruby/dataflow/internal/DataFlowPublic.qll | 5 - ruby/ql/lib/codeql/ruby/frameworks/Rack.qll | 3 - .../ruby/frameworks/rack/internal/App.qll | 25 --- .../ruby/security/InsecureDownloadQuery.qll | 22 --- .../codeql/ruby/security/StoredXSSQuery.qll | 23 --- .../security/internal/CleartextSources.qll | 13 -- .../swift/dataflow/internal/DataFlowImpl1.qll | 8 - .../codeql/swift/elements/decl/TypeDecl.qll | 7 - 156 files changed, 2948 deletions(-) diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/security/PrivateCleartextWrite.qll b/cpp/ql/lib/experimental/semmle/code/cpp/security/PrivateCleartextWrite.qll index e733940bdc1..99cd8bfb7fd 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/security/PrivateCleartextWrite.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/security/PrivateCleartextWrite.qll @@ -36,16 +36,6 @@ module PrivateCleartextWrite { } } - deprecated class WriteConfig extends TaintTracking::Configuration { - WriteConfig() { this = "Write configuration" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } - } - private module WriteConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } diff --git a/cpp/ql/lib/semmle/code/cpp/Declaration.qll b/cpp/ql/lib/semmle/code/cpp/Declaration.qll index 7d7dee45aa9..61fe2018026 100644 --- a/cpp/ql/lib/semmle/code/cpp/Declaration.qll +++ b/cpp/ql/lib/semmle/code/cpp/Declaration.qll @@ -60,18 +60,6 @@ class Declaration extends Locatable, @declaration { */ string getQualifiedName() { result = underlyingElement(this).(Q::Declaration).getQualifiedName() } - /** - * DEPRECATED: Prefer `hasGlobalName` or the 2-argument or 3-argument - * `hasQualifiedName` predicates. To get the exact same results as this - * predicate in all edge cases, use `getQualifiedName()`. - * - * Holds if this declaration has the fully-qualified name `qualifiedName`. - * See `getQualifiedName`. - */ - deprecated predicate hasQualifiedName(string qualifiedName) { - this.getQualifiedName() = qualifiedName - } - /** * Holds if this declaration has a fully-qualified name with a name-space * component of `namespaceQualifier`, a declaring type of `typeQualifier`, @@ -185,9 +173,6 @@ class Declaration extends Locatable, @declaration { /** Holds if the declaration has a definition. */ predicate hasDefinition() { exists(this.getDefinition()) } - /** DEPRECATED: Use `hasDefinition` instead. */ - deprecated predicate isDefined() { this.hasDefinition() } - /** Gets the preferred location of this declaration, if any. */ override Location getLocation() { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index a2d8d078024..f23b04e19d6 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -30,46 +30,6 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { override string getName() { functions(underlyingElement(this), result, _) } - /** - * DEPRECATED: Use `getIdentityString(Declaration)` from `semmle.code.cpp.Print` instead. - * Gets the full signature of this function, including return type, parameter - * types, and template arguments. - * - * For example, in the following code: - * ``` - * template T min(T x, T y); - * int z = min(5, 7); - * ``` - * The full signature of the function called on the last line would be - * `min(int, int) -> int`, and the full signature of the uninstantiated - * template on the first line would be `min(T, T) -> T`. - */ - deprecated string getFullSignature() { - exists(string name, string templateArgs, string args | - result = name + templateArgs + args + " -> " + this.getType().toString() and - name = this.getQualifiedName() and - ( - if exists(this.getATemplateArgument()) - then - templateArgs = - "<" + - concat(int i | - exists(this.getTemplateArgument(i)) - | - this.getTemplateArgument(i).toString(), ", " order by i - ) + ">" - else templateArgs = "" - ) and - args = - "(" + - concat(int i | - exists(this.getParameter(i)) - | - this.getParameter(i).getType().toString(), ", " order by i - ) + ")" - ) - } - /** Gets a specifier of this function. */ override Specifier getASpecifier() { funspecifiers(underlyingElement(this), unresolveElement(result)) or diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index ac043f47b0f..6194710f0c5 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -286,9 +286,6 @@ abstract class BaseAstNode extends PrintAstNode { * Gets the AST represented by this node. */ final Locatable getAst() { result = ast } - - /** DEPRECATED: Alias for getAst */ - deprecated Locatable getAST() { result = this.getAst() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Alloc.qll b/cpp/ql/lib/semmle/code/cpp/commons/Alloc.qll index a6fb84d3227..386a0e85aac 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Alloc.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Alloc.qll @@ -7,15 +7,6 @@ import semmle.code.cpp.models.interfaces.Deallocation */ predicate freeFunction(Function f, int argNum) { argNum = f.(DeallocationFunction).getFreedArg() } -/** - * A call to a library routine that frees memory. - * - * DEPRECATED: Use `DeallocationExpr` instead (this also includes `delete` expressions). - */ -deprecated predicate freeCall(FunctionCall fc, Expr arg) { - arg = fc.(DeallocationExpr).getFreedExpr() -} - /** * Is e some kind of allocation or deallocation (`new`, `alloc`, `realloc`, `delete`, `free` etc)? */ diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Literal.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Literal.qll index 32e16747c22..a36758417bb 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Literal.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Literal.qll @@ -195,17 +195,6 @@ class ClassAggregateLiteral extends AggregateLiteral { */ Expr getAFieldExpr(Field field) { result = this.getFieldExpr(field, _) } - /** - * DEPRECATED: Use `getAFieldExpr` instead. - * - * Gets the expression within the aggregate literal that is used to initialize - * field `field`, if present. - * - * This predicate may have multiple results since a field can be initialized - * multiple times in the same initializer. - */ - deprecated Expr getFieldExpr(Field field) { result = this.getFieldExpr(field, _) } - /** * Gets the expression within the aggregate literal that is used to initialize * field `field`, if present. The expression is the `position`'th entry in the @@ -300,17 +289,6 @@ class ArrayOrVectorAggregateLiteral extends AggregateLiteral { */ Expr getAnElementExpr(int elementIndex) { result = this.getElementExpr(elementIndex, _) } - /** - * DEPRECATED: Use `getAnElementExpr` instead. - * - * Gets the expression within the aggregate literal that is used to initialize - * element `elementIndex`, if present. - * - * This predicate may have multiple results since an element can be initialized - * multiple times in the same initializer. - */ - deprecated Expr getElementExpr(int elementIndex) { result = this.getElementExpr(elementIndex, _) } - /** * Gets the expression within the aggregate literal that is used to initialize * element `elementIndex`, if present. The expression is the `position`'th entry diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 3b1439511d1..359fa71744b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll index 24135820ab8..43217ed4c60 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll @@ -50,9 +50,6 @@ abstract private class AbstractIRVariable extends TIRVariable { */ abstract Language::AST getAst(); - /** DEPRECATED: Alias for getAst */ - deprecated Language::AST getAST() { result = this.getAst() } - /** * Gets an identifier string for the variable. This identifier is unique * within the function. @@ -96,9 +93,6 @@ class IRUserVariable extends AbstractIRVariable, TIRUserVariable { final override Language::AST getAst() { result = var } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - final override string getUniqueId() { result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() } @@ -163,9 +157,6 @@ abstract private class AbstractIRGeneratedVariable extends AbstractIRVariable { final override Language::AST getAst() { result = ast } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - override string toString() { result = this.getBaseString() + this.getLocationString() } override string getUniqueId() { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 4db00eee608..b63a543d9ae 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -285,9 +285,6 @@ abstract private class MemoryLocation0 extends TMemoryLocation { predicate isAlwaysAllocatedOnStack() { none() } final predicate canReuseSsa() { none() } - - /** DEPRECATED: Alias for canReuseSsa */ - deprecated predicate canReuseSSA() { this.canReuseSsa() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll index 24135820ab8..43217ed4c60 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll @@ -50,9 +50,6 @@ abstract private class AbstractIRVariable extends TIRVariable { */ abstract Language::AST getAst(); - /** DEPRECATED: Alias for getAst */ - deprecated Language::AST getAST() { result = this.getAst() } - /** * Gets an identifier string for the variable. This identifier is unique * within the function. @@ -96,9 +93,6 @@ class IRUserVariable extends AbstractIRVariable, TIRUserVariable { final override Language::AST getAst() { result = var } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - final override string getUniqueId() { result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() } @@ -163,9 +157,6 @@ abstract private class AbstractIRGeneratedVariable extends AbstractIRVariable { final override Language::AST getAst() { result = ast } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - override string toString() { result = this.getBaseString() + this.getLocationString() } override string getUniqueId() { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCall.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCall.qll index 7e3dc3cd9e2..daa6bdaafcf 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCall.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCall.qll @@ -216,9 +216,6 @@ abstract class TranslatedSideEffects extends TranslatedElement { final override Locatable getAst() { result = this.getExpr() } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Declaration getFunction() { result = getEnclosingDeclaration(this.getExpr()) } final override TranslatedElement getChild(int i) { @@ -616,9 +613,6 @@ class TranslatedArgumentExprSideEffect extends TranslatedArgumentSideEffect, final override Locatable getAst() { result = arg } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Type getIndirectionType() { result = arg.getUnspecifiedType().(DerivedType).getBaseType() or @@ -651,9 +645,6 @@ class TranslatedStructorQualifierSideEffect extends TranslatedArgumentSideEffect final override Locatable getAst() { result = call } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Type getIndirectionType() { result = call.getTarget().getDeclaringType() } final override string getArgString() { result = "this" } @@ -675,9 +666,6 @@ class TranslatedCallSideEffect extends TranslatedSideEffect, TTranslatedCallSide override Locatable getAst() { result = expr } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override Expr getPrimaryExpr() { result = expr } override predicate sortOrder(int group, int indexInGroup) { @@ -716,9 +704,6 @@ class TranslatedAllocationSideEffect extends TranslatedSideEffect, TTranslatedAl override Locatable getAst() { result = expr } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override Expr getPrimaryExpr() { result = expr } override predicate sortOrder(int group, int indexInGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll index 77864969068..1616c9c434b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll @@ -29,9 +29,6 @@ abstract class TranslatedCondition extends TranslatedElement { final override Locatable getAst() { result = expr } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final ConditionContext getConditionContext() { result = this.getParent() } final Expr getExpr() { result = expr } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll index 55b5aa179f4..c0fe9cd2207 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll @@ -45,9 +45,6 @@ abstract class TranslatedDeclarationEntry extends TranslatedElement, TTranslated final override string toString() { result = entry.toString() } final override Locatable getAst() { result = entry.getAst() } - - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } } /** @@ -248,9 +245,6 @@ class TranslatedStaticLocalVariableInitialization extends TranslatedElement, final override Locatable getAst() { result = entry.getAst() } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override LocalVariable getVariable() { result = var } final override Declaration getFunction() { result = var.getFunction() } @@ -277,9 +271,6 @@ class TranslatedConditionDecl extends TranslatedLocalVariableDeclaration, TTrans override Locatable getAst() { result = conditionDeclExpr } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override Declaration getFunction() { result = getEnclosingFunction(conditionDeclExpr) } override LocalVariable getVariable() { result = conditionDeclExpr.getVariable() } 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 2d10b2e32a5..917626daa0c 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 @@ -926,9 +926,6 @@ abstract class TranslatedElement extends TTranslatedElement { */ abstract Locatable getAst(); - /** DEPRECATED: Alias for getAst */ - deprecated Locatable getAST() { result = this.getAst() } - /** Gets the location of this element. */ Location getLocation() { result = this.getAst().getLocation() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll index 3e4e83965e2..26fc341735b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll @@ -67,9 +67,6 @@ class TranslatedFunction extends TranslatedRootElement, TTranslatedFunction { final override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - /** * Gets the function being translated. */ @@ -483,9 +480,6 @@ class TranslatedThisParameter extends TranslatedParameter, TTranslatedThisParame final override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Function getFunction() { result = func } final override predicate hasIndirection() { any() } @@ -518,9 +512,6 @@ class TranslatedPositionalParameter extends TranslatedParameter, TTranslatedPara final override Locatable getAst() { result = param } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Function getFunction() { result = param.getFunction() or result = param.getCatchBlock().getEnclosingFunction() @@ -558,9 +549,6 @@ class TranslatedEllipsisParameter extends TranslatedParameter, TTranslatedEllips final override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Function getFunction() { result = func } final override predicate hasIndirection() { any() } @@ -597,9 +585,6 @@ class TranslatedConstructorInitList extends TranslatedElement, InitializationCon override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override TranslatedElement getChild(int id) { exists(ConstructorFieldInit fieldInit | fieldInit = func.(Constructor).getInitializer(id) and @@ -677,9 +662,6 @@ class TranslatedDestructorDestructionList extends TranslatedElement, override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override TranslatedElement getChild(int id) { exists(DestructorFieldDestruction fieldDestruction | fieldDestruction = func.(Destructor).getDestruction(id) and @@ -733,9 +715,6 @@ class TranslatedReadEffects extends TranslatedElement, TTranslatedReadEffects { override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override Function getFunction() { result = func } override string toString() { result = "read effects: " + func.toString() } @@ -839,9 +818,6 @@ class TranslatedThisReadEffect extends TranslatedReadEffect, TTranslatedThisRead override Locatable getAst() { result = func } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override Function getFunction() { result = func } override string toString() { result = "read effect: this" } @@ -865,9 +841,6 @@ class TranslatedParameterReadEffect extends TranslatedReadEffect, TTranslatedPar override Locatable getAst() { result = param } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - override string toString() { result = "read effect: " + param.toString() } override Function getFunction() { result = param.getFunction() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll index 9b6165d0782..06ce9193205 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll @@ -153,9 +153,6 @@ abstract class TranslatedInitialization extends TranslatedElement, TTranslatedIn final override Locatable getAst() { result = expr } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - /** * Gets the expression that is doing the initialization. */ @@ -528,9 +525,6 @@ abstract class TranslatedFieldInitialization extends TranslatedElement { final override Locatable getAst() { result = ast } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Declaration getFunction() { result = getEnclosingFunction(ast) or result = getEnclosingVariable(ast).(GlobalOrNamespaceVariable) or @@ -701,9 +695,6 @@ abstract class TranslatedElementInitialization extends TranslatedElement { final override Locatable getAst() { result = initList } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Declaration getFunction() { result = getEnclosingFunction(initList) or @@ -912,9 +903,6 @@ abstract class TranslatedStructorCallFromStructor extends TranslatedElement, Str final override Locatable getAst() { result = call } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override TranslatedElement getChild(int id) { id = 0 and result = this.getStructorCall() @@ -1058,9 +1046,6 @@ class TranslatedConstructorBareInit extends TranslatedElement, TTranslatedConstr override Locatable getAst() { result = init } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override string toString() { result = "construct base (no constructor)" } override Instruction getFirstInstruction(EdgeKind kind) { 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 ad17722477f..d04514c31aa 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 @@ -268,9 +268,6 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { final override Locatable getAst() { result = stmt } - /** DEPRECATED: Alias for getAst */ - deprecated override Locatable getAST() { result = this.getAst() } - final override Function getFunction() { result = stmt.getEnclosingFunction() } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll index 24135820ab8..43217ed4c60 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll @@ -50,9 +50,6 @@ abstract private class AbstractIRVariable extends TIRVariable { */ abstract Language::AST getAst(); - /** DEPRECATED: Alias for getAst */ - deprecated Language::AST getAST() { result = this.getAst() } - /** * Gets an identifier string for the variable. This identifier is unique * within the function. @@ -96,9 +93,6 @@ class IRUserVariable extends AbstractIRVariable, TIRUserVariable { final override Language::AST getAst() { result = var } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - final override string getUniqueId() { result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() } @@ -163,9 +157,6 @@ abstract private class AbstractIRGeneratedVariable extends AbstractIRVariable { final override Language::AST getAst() { result = ast } - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - override string toString() { result = this.getBaseString() + this.getLocationString() } override string getUniqueId() { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll index 648fa0e197b..8bee2bf86a7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll @@ -71,9 +71,6 @@ class MemoryLocation extends TMemoryLocation { final string getUniqueId() { result = var.getUniqueId() } final predicate canReuseSsa() { canReuseSsaForVariable(var) } - - /** DEPRECATED: Alias for canReuseSsa */ - deprecated predicate canReuseSSA() { this.canReuseSsa() } } predicate canReuseSsaForOldResult(Instruction instr) { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll index 8668ecf078c..559ebd444f3 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll @@ -353,22 +353,6 @@ module BoostorgAsio { } //////////////////////// Dataflow ///////////////////// - /** - * Abstract class for flows of protocol values to the first argument of a context - * constructor. - */ - abstract deprecated class SslContextCallAbstractConfig extends DataFlow::Configuration { - bindingset[this] - SslContextCallAbstractConfig() { any() } - - override predicate isSink(DataFlow::Node sink) { - exists(ConstructorCall cc, SslContextClass c, Expr e | e = sink.asExpr() | - c.getAContructorCall() = cc and - cc.getArgument(0) = e - ) - } - } - /** * Signature for flows of protocol values to the first argument of a context * constructor. @@ -402,20 +386,6 @@ module BoostorgAsio { import DataFlow::Global } - /** - * Any protocol value that flows to the first argument of a context constructor. - */ - deprecated class SslContextCallConfig extends SslContextCallAbstractConfig { - SslContextCallConfig() { this = "SslContextCallConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") - ) - } - } - /** * Any protocol value that flows to the first argument of a context constructor. */ @@ -430,21 +400,6 @@ module BoostorgAsio { module SslContextCallFlow = SslContextCallGlobal; - /** - * A banned protocol value that flows to the first argument of a context constructor. - */ - deprecated class SslContextCallBannedProtocolConfig extends SslContextCallAbstractConfig { - SslContextCallBannedProtocolConfig() { this = "SslContextCallBannedProtocolConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") and - isExprBannedBoostProtocol(e) - ) - } - } - /** * A banned protocol value that flows to the first argument of a context constructor. */ @@ -461,21 +416,6 @@ module BoostorgAsio { module SslContextCallBannedProtocolFlow = SslContextCallGlobal; - /** - * A TLS 1.2 protocol value that flows to the first argument of a context constructor. - */ - deprecated class SslContextCallTls12ProtocolConfig extends SslContextCallAbstractConfig { - SslContextCallTls12ProtocolConfig() { this = "SslContextCallTls12ProtocolConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") and - isExprTls12BoostProtocol(e) - ) - } - } - /** * A TLS 1.2 protocol value that flows to the first argument of a context constructor. */ @@ -491,21 +431,6 @@ module BoostorgAsio { module SslContextCallTls12ProtocolFlow = SslContextCallGlobal; - /** - * A TLS 1.3 protocol value that flows to the first argument of a context constructor. - */ - deprecated class SslContextCallTls13ProtocolConfig extends SslContextCallAbstractConfig { - SslContextCallTls13ProtocolConfig() { this = "SslContextCallTls12ProtocolConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") and - isExprTls13BoostProtocol(e) - ) - } - } - /** * A TLS 1.3 protocol value that flows to the first argument of a context constructor. */ @@ -521,21 +446,6 @@ module BoostorgAsio { module SslContextCallTls13ProtocolFlow = SslContextCallGlobal; - /** - * A generic TLS protocol value that flows to the first argument of a context constructor. - */ - deprecated class SslContextCallTlsProtocolConfig extends SslContextCallAbstractConfig { - SslContextCallTlsProtocolConfig() { this = "SslContextCallTlsProtocolConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") and - isExprTlsBoostProtocol(e) - ) - } - } - /** * A generic TLS protocol value that flows to the first argument of a context constructor. */ @@ -551,30 +461,6 @@ module BoostorgAsio { module SslContextCallTlsProtocolFlow = SslContextCallGlobal; - /** - * A context constructor call that flows to a call to `SetOptions()`. - */ - deprecated class SslContextFlowsToSetOptionConfig extends DataFlow::Configuration { - SslContextFlowsToSetOptionConfig() { this = "SslContextFlowsToSetOptionConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(SslContextClass c, ConstructorCall cc | - cc = source.asExpr() and - c.getAContructorCall() = cc - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc, SslSetOptionsFunction f, Variable v, VariableAccess va | - va = sink.asExpr() - | - f.getACallToThisFunction() = fc and - v.getAnAccess() = va and - va = fc.getQualifier() - ) - } - } - /** * A context constructor call that flows to a call to `SetOptions()`. */ @@ -599,28 +485,6 @@ module BoostorgAsio { module SslContextFlowsToSetOptionFlow = DataFlow::Global; - /** - * An option value that flows to the first parameter of a call to `SetOptions()`. - */ - deprecated class SslOptionConfig extends DataFlow::Configuration { - SslOptionConfig() { this = "SslOptionConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e | e = source.asExpr() | - e.fromSource() and - not e.getLocation().getFile().toString().matches("%/boost/asio/%") - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(SslSetOptionsFunction f, FunctionCall call | - sink.asExpr() = call.getArgument(0) and - f.getACallToThisFunction() = call and - not sink.getLocation().getFile().toString().matches("%/boost/asio/%") - ) - } - } - /** * An option value that flows to the first parameter of a call to `SetOptions()`. */ diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 038af4f1d88..3cff86412e4 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -205,20 +205,6 @@ class ChecksForLeapYearFunctionCall extends FunctionCall { ChecksForLeapYearFunctionCall() { this.getTarget() instanceof ChecksForLeapYearFunction } } -/** - * Data flow configuration for finding a variable access that would flow into - * a function call that includes an operation to check for leap year. - */ -deprecated class LeapYearCheckConfiguration extends DataFlow::Configuration { - LeapYearCheckConfiguration() { this = "LeapYearCheckConfiguration" } - - override predicate isSource(DataFlow::Node source) { source.asExpr() instanceof VariableAccess } - - override predicate isSink(DataFlow::Node sink) { - exists(ChecksForLeapYearFunctionCall fc | sink.asExpr() = fc.getAnArgument()) - } -} - /** * Data flow configuration for finding a variable access that would flow into * a function call that includes an operation to check for leap year. @@ -233,33 +219,6 @@ private module LeapYearCheckConfig implements DataFlow::ConfigSig { module LeapYearCheckFlow = DataFlow::Global; -/** - * Data flow configuration for finding an operation with hardcoded 365 that will flow into - * a `FILEINFO` field. - */ -deprecated class FiletimeYearArithmeticOperationCheckConfiguration extends DataFlow::Configuration { - FiletimeYearArithmeticOperationCheckConfiguration() { - this = "FiletimeYearArithmeticOperationCheckConfiguration" - } - - override predicate isSource(DataFlow::Node source) { - exists(Expr e, Operation op | e = source.asExpr() | - op.getAChild*().getValue().toInt() = 365 and - op.getAChild*() = e - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(StructLikeClass dds, FieldAccess fa, AssignExpr aexpr, Expr e | e = sink.asExpr() | - dds instanceof PackedTimeType and - fa.getQualifier().getUnderlyingType() = dds and - fa.isModified() and - aexpr.getAChild() = fa and - aexpr.getChild(1).getAChild*() = e - ) - } -} - /** * Data flow configuration for finding an operation with hardcoded 365 that will flow into * a `FILEINFO` field. @@ -286,51 +245,6 @@ private module FiletimeYearArithmeticOperationCheckConfig implements DataFlow::C module FiletimeYearArithmeticOperationCheckFlow = DataFlow::Global; -/** - * Taint configuration for finding an operation with hardcoded 365 that will flow into any known date/time field. - */ -deprecated class PossibleYearArithmeticOperationCheckConfiguration extends TaintTracking::Configuration -{ - PossibleYearArithmeticOperationCheckConfiguration() { - this = "PossibleYearArithmeticOperationCheckConfiguration" - } - - override predicate isSource(DataFlow::Node source) { - exists(Operation op | op = source.asExpr() | - op.getAChild*().getValue().toInt() = 365 and - ( - not op.getParent() instanceof Expr or - op.getParent() instanceof Assignment - ) - ) - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - // flow from anything on the RHS of an assignment to a time/date structure to that - // assignment. - exists(StructLikeClass dds, FieldAccess fa, Assignment aexpr, Expr e | - e = node1.asExpr() and - fa = node2.asExpr() - | - (dds instanceof PackedTimeType or dds instanceof UnpackedTimeType) and - fa.getQualifier().getUnderlyingType() = dds and - aexpr.getLValue() = fa and - aexpr.getRValue().getAChild*() = e - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(StructLikeClass dds, FieldAccess fa, AssignExpr aexpr | - aexpr.getRValue() = sink.asExpr() - | - (dds instanceof PackedTimeType or dds instanceof UnpackedTimeType) and - fa.getQualifier().getUnderlyingType() = dds and - fa.isModified() and - aexpr.getLValue() = fa - ) - } -} - /** * Taint configuration for finding an operation with hardcoded 365 that will flow into any known date/time field. */ diff --git a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll index 53ab3b4df93..ecb60d113d8 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll +++ b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll @@ -129,24 +129,6 @@ class NetworkFunctionCall extends FunctionCall { NetworkFunctionCall() { this.getTarget().hasName(["ntohd", "ntohf", "ntohl", "ntohll", "ntohs"]) } } -deprecated class NetworkToBufferSizeConfiguration extends DataFlow::Configuration { - NetworkToBufferSizeConfiguration() { this = "NetworkToBufferSizeConfiguration" } - - override predicate isSource(DataFlow::Node node) { node.asExpr() instanceof NetworkFunctionCall } - - override predicate isSink(DataFlow::Node node) { - node.asExpr() = any(BufferAccess ba).getAccessedLength() - } - - override predicate isBarrier(DataFlow::Node node) { - exists(GuardCondition gc, GVN gvn | - gc.getAChild*() = gvn.getAnExpr() and - globalValueNumber(node.asExpr()) = gvn and - gc.controls(node.asExpr().getBasicBlock(), _) - ) - } -} - private module NetworkToBufferSizeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { node.asExpr() instanceof NetworkFunctionCall } diff --git a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIsSpecific.qll b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIsSpecific.qll index 2d9502f2f43..f0876800874 100644 --- a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIsSpecific.qll +++ b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIsSpecific.qll @@ -41,20 +41,6 @@ class ExternalApiDataNode extends DataFlow::Node { string getFunctionDescription() { result = this.getExternalFunction().toString() } } -/** A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ -deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(RemoteFlowSourceFunction remoteFlow | - remoteFlow = source.asExpr().(Call).getTarget() and - remoteFlow.hasRemoteFlowSource(_, _) - ) - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } -} - /** A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ private module UntrustedDataToExternalApiConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { diff --git a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIsSpecific.qll b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIsSpecific.qll index 87e1d6bd7c5..d094439951f 100644 --- a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIsSpecific.qll +++ b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIsSpecific.qll @@ -41,15 +41,6 @@ class ExternalApiDataNode extends DataFlow::Node { string getFunctionDescription() { result = this.getExternalFunction().toString() } } -/** A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ -deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfigIR" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } -} - /** A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ private module UntrustedDataToExternalApiConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } diff --git a/cpp/ql/test/library-tests/dataflow/fields/Nodes.qll b/cpp/ql/test/library-tests/dataflow/fields/Nodes.qll index 8c4c547f4c8..f7d1065fd04 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/Nodes.qll +++ b/cpp/ql/test/library-tests/dataflow/fields/Nodes.qll @@ -13,9 +13,6 @@ class Node extends TNode { AST::DataFlow::Node asAst() { none() } - /** DEPRECATED: Alias for asAst */ - deprecated AST::DataFlow::Node asAST() { result = this.asAst() } - Location getLocation() { none() } } @@ -28,9 +25,6 @@ class AstNode extends Node, TAstNode { override AST::DataFlow::Node asAst() { result = n } - /** DEPRECATED: Alias for asAst */ - deprecated override AST::DataFlow::Node asAST() { result = this.asAst() } - override Location getLocation() { result = n.getLocation() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 3b1439511d1..359fa71744b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 3b1439511d1..359fa71744b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 3b1439511d1..359fa71744b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/csharp/ql/lib/semmle/code/csharp/security/cryptography/EncryptionKeyDataFlowQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/cryptography/EncryptionKeyDataFlowQuery.qll index 31670bce305..82bd0d30cab 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/cryptography/EncryptionKeyDataFlowQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/cryptography/EncryptionKeyDataFlowQuery.qll @@ -58,24 +58,6 @@ class SymmetricEncryptionCreateDecryptorSink extends SymmetricEncryptionKeySink override string getDescription() { result = "Decryptor(rgbKey, IV)" } } -/** - * DEPRECATED: Use `SymmetricKey` instead. - * - * Symmetric Key Data Flow configuration. - */ -deprecated class SymmetricKeyTaintTrackingConfiguration extends TaintTracking::Configuration { - SymmetricKeyTaintTrackingConfiguration() { this = "SymmetricKeyTaintTracking" } - - /** Holds if the node is a key source. */ - override predicate isSource(DataFlow::Node src) { src instanceof KeySource } - - /** Holds if the node is a symmetric encryption key sink. */ - override predicate isSink(DataFlow::Node sink) { sink instanceof SymmetricEncryptionKeySink } - - /** Holds if the node is a key sanitizer. */ - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof KeySanitizer } -} - /** * Symmetric Key Data Flow configuration. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/cryptography/HardcodedSymmetricEncryptionKey.qll b/csharp/ql/lib/semmle/code/csharp/security/cryptography/HardcodedSymmetricEncryptionKey.qll index 741635bb47f..2e387cc2da6 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/cryptography/HardcodedSymmetricEncryptionKey.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/cryptography/HardcodedSymmetricEncryptionKey.qll @@ -61,33 +61,6 @@ module HardcodedSymmetricEncryptionKey { } } - /** - * DEPRECATED: Use `HardCodedSymmetricEncryption` instead. - * - * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. - */ - deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "HardcodedSymmetricEncryptionKey" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } - - /** - * Since `CryptographicBuffer` uses native code inside, taint tracking doesn't pass through it. - * Need to create an additional custom step. - */ - override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { - exists(MethodCall mc, CryptographicBuffer c | - pred.asExpr() = mc.getAnArgument() and - mc.getTarget() = c.getAMethod() and - succ.asExpr() = mc - ) - } - } - /** * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CleartextStorageQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CleartextStorageQuery.qll index d0c46ba6448..cbb10146a6a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CleartextStorageQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CleartextStorageQuery.qll @@ -23,21 +23,6 @@ abstract class Sink extends DataFlow::ExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ClearTextStorage` instead. - * - * A taint-tracking configuration for cleartext storage of sensitive information. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "ClearTextStorage" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for cleartext storage of sensitive information. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll index e33c4e37d28..2b55697ebda 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll @@ -24,21 +24,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `CodeInjection` instead. - * - * A taint-tracking configuration for user input treated as code vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "CodeInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for user input treated as code vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll index d0b24125ba9..24c80c07f89 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll @@ -23,21 +23,6 @@ abstract class Sink extends DataFlow::ExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `CommandInjection` instead. - * - * A taint-tracking configuration for command injection vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "CommandInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for command injection vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll index cd7119a36af..2bc10dead22 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll @@ -30,21 +30,6 @@ abstract class Sink extends ApiSinkExprNode { */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ConditionalBypass` instead. - * - * A taint-tracking configuration for user-controlled bypass of sensitive method. - */ -deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "UserControlledBypassOfSensitiveMethodConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for user-controlled bypass of sensitive method. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll index 1e5f5ae8256..0726acb05ed 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll @@ -23,21 +23,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ExposureOfPrivateInformation` instead. - * - * A taint-tracking configuration for private information flowing unencrypted to an external location. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "ExposureOfPrivateInformation" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for private information flowing unencrypted to an external location. */ 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 41888fc2557..69a1823a455 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -73,19 +73,6 @@ class ExternalApiDataNode extends DataFlow::Node { } } -/** - * DEPRECATED: Use `RemoteSourceToExternalApi` instead. - * - * A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. - */ -deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } -} - /** A configuration for tracking flow from `ThreatModelFlowSource`s to `ExternalApiDataNode`s. */ private module RemoteSourceToExternalApiConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/HardcodedCredentialsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/HardcodedCredentialsQuery.qll index 63a0bb50732..72951df2f97 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/HardcodedCredentialsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/HardcodedCredentialsQuery.qll @@ -38,46 +38,6 @@ abstract class Sink extends ApiSinkExprNode { */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `HardcodedCredentials` instead. - * - * A taint-tracking configuration for hard coded credentials. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "HardcodedCredentials" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { - sink instanceof Sink and - // Ignore values that are ultimately returned by mocks, as they don't represent "real" - // credentials. - not any(ReturnedByMockObject mock).getAMemberInitializationValue() = sink.asExpr() and - not any(ReturnedByMockObject mock).getAnArgument() = sink.asExpr() - } - - override predicate hasFlowPath(DataFlow::PathNode source, DataFlow::PathNode sink) { - super.hasFlowPath(source, sink) and - // Exclude hard-coded credentials in tests if they only flow to calls to methods with a name - // like "Add*" "Create*" or "Update*". The rationale is that hard-coded credentials within - // tests that are only used for creating or setting values within tests are unlikely to - // represent credentials to some accessible system. - not ( - source.getNode().asExpr().getFile() instanceof TestFile and - exists(MethodCall createOrAddCall, string createOrAddMethodName | - createOrAddMethodName.matches("Update%") or - createOrAddMethodName.matches("Create%") or - createOrAddMethodName.matches("Add%") - | - createOrAddCall.getTarget().hasName(createOrAddMethodName) and - createOrAddCall.getAnArgument() = sink.getNode().asExpr() - ) - ) - } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for hard coded credentials. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll index 78800f39209..bdba76bfb5c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll @@ -26,21 +26,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `LdapInjection` instead. - * - * A taint-tracking configuration for unvalidated user input that is used to construct LDAP queries. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "LDAPInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for unvalidated user input that is used to construct LDAP queries. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index f0153fea2d4..7c4429bcbf8 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -26,21 +26,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `LogForging` instead. - * - * A taint-tracking configuration for untrusted user input used in log entries. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "LogForging" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input used in log entries. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll index 9333b5b37f2..4e14bed2c33 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll @@ -29,22 +29,6 @@ abstract class Sink extends ApiSinkExprNode { */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `MissingXxmlValidation` instead. - * - * A taint-tracking configuration for untrusted user input processed as XML without validation against a - * known schema. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "MissingXMLValidation" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input processed as XML without validation against a * known schema. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll index bf4fbd99323..f6225ce36bd 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll @@ -25,21 +25,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ReDoS` instead. - * - * A taint-tracking configuration for untrusted user input used in dangerous regular expression operations. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "ReDoS" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input used in dangerous regular expression operations. */ @@ -85,20 +70,6 @@ predicate isExponentialRegex(StringLiteral s) { s.getValue().regexpMatch(".*\\(\\([^()*+\\]]+\\]?\\)(\\*|\\+)\\.?\\)(\\*|\\+).*") } -/** - * DEPRECATED: Use `ExponentialRegexDataflow` instead. - * - * A data flow configuration for tracking exponential worst case time regular expression string - * literals to the pattern argument of a regex. - */ -deprecated class ExponentialRegexDataflow extends DataFlow2::Configuration { - ExponentialRegexDataflow() { this = "ExponentialRegex" } - - override predicate isSource(DataFlow::Node s) { isExponentialRegex(s.asExpr()) } - - override predicate isSink(DataFlow::Node s) { s.asExpr() = any(RegexOperation c).getPattern() } -} - /** * A data flow configuration for tracking exponential worst case time regular expression string * literals to the pattern argument of a regex. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll index 1a053c29f24..8affdb1e9dd 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll @@ -24,21 +24,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `RegexInjection` instead. - * - * A taint-tracking configuration for untrusted user input used to construct regular expressions. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "RegexInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input used to construct regular expressions. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll index fb016dcddae..dd1c088042d 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll @@ -23,21 +23,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ResourceInjection` instead. - * - * A taint-tracking configuration for untrusted user input used in resource descriptors. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "ResourceInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input used in resource descriptors. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll index 6473aa58e1c..5a900461af7 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll @@ -24,21 +24,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `SqlInjection` instead. - * - * A taint-tracking configuration for SQL injection vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "SqlInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for SQL injection vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll index ca2b13439ce..21c3cbdf942 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll @@ -26,21 +26,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `TaintedPath` instead. - * - * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "TaintedPath" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll index a5341aca42f..51aef35272f 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll @@ -51,21 +51,6 @@ abstract class Sanitizer extends DataFlow::Node { } private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } -/** - * DEPRECATED: Use `TaintToObjectMethodTracking` instead. - * - * User input to object method call deserialization flow tracking. - */ -deprecated class TaintToObjectMethodTrackingConfig extends TaintTracking::Configuration { - TaintToObjectMethodTrackingConfig() { this = "TaintToObjectMethodTrackingConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof InstanceMethodSink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * User input to object method call deserialization flow tracking configuration. */ @@ -82,23 +67,6 @@ private module TaintToObjectMethodTrackingConfig implements DataFlow::ConfigSig */ module TaintToObjectMethodTracking = TaintTracking::Global; -/** - * DEPRECATED: Use `JsonConvertTracking` instead. - * - * User input to `JsonConvert` call deserialization flow tracking. - */ -deprecated class JsonConvertTrackingConfig extends TaintTracking::Configuration { - JsonConvertTrackingConfig() { this = "JsonConvertTrackingConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { - sink instanceof NewtonsoftJsonConvertDeserializeObjectMethodSink - } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * User input to `JsonConvert` call deserialization flow tracking configuration. */ @@ -117,61 +85,6 @@ private module JsonConvertTrackingConfig implements DataFlow::ConfigSig { */ module JsonConvertTracking = TaintTracking::Global; -/** - * DEPRECATED: Use `TypeNameTracking` instead. - * - * Tracks unsafe `TypeNameHandling` setting to `JsonConvert` call - */ -deprecated class TypeNameTrackingConfig extends DataFlow::Configuration { - TypeNameTrackingConfig() { this = "TypeNameTrackingConfig" } - - override predicate isSource(DataFlow::Node source) { - ( - source.asExpr() instanceof MemberConstantAccess and - source.getType() instanceof TypeNameHandlingEnum - or - source.asExpr() instanceof IntegerLiteral - ) and - source.asExpr().hasValue() and - not source.asExpr().getValue() = "0" - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall mc, Method m, Expr expr | - m = mc.getTarget() and - ( - not mc.getArgument(0).hasValue() and - m instanceof NewtonsoftJsonConvertClassDeserializeObjectMethod - ) and - expr = mc.getAnArgument() and - sink.asExpr() = expr and - expr.getType() instanceof JsonSerializerSettingsClass - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - node1.asExpr() instanceof IntegerLiteral and - node2.asExpr().(CastExpr).getExpr() = node1.asExpr() - or - node1.getType() instanceof TypeNameHandlingEnum and - exists(PropertyWrite pw, Property p, Assignment a | - a.getLValue() = pw and - pw.getProperty() = p and - p.getDeclaringType() instanceof JsonSerializerSettingsClass and - p.hasName("TypeNameHandling") and - ( - node1.asExpr() = a.getRValue() and - node2.asExpr() = pw.getQualifier() - or - exists(ObjectInitializer oi | - node1.asExpr() = oi.getAMemberInitializer().getRValue() and - node2.asExpr() = oi - ) - ) - ) - } -} - /** * Configuration module for tracking unsafe `TypeNameHandling` setting to `JsonConvert` calls. */ @@ -228,24 +141,6 @@ private module TypeNameTrackingConfig implements DataFlow::ConfigSig { */ module TypeNameTracking = DataFlow::Global; -/** - * DEPRECATED: Use `TaintToConstructorOrStaticMethodTracking` instead. - * - * User input to static method or constructor call deserialization flow tracking. - */ -deprecated class TaintToConstructorOrStaticMethodTrackingConfig extends TaintTracking::Configuration -{ - TaintToConstructorOrStaticMethodTrackingConfig() { - this = "TaintToConstructorOrStaticMethodTrackingConfig" - } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ConstructorOrStaticMethodSink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * User input to static method or constructor call deserialization flow tracking configuration. */ @@ -263,41 +158,6 @@ private module TaintToConstructorOrStaticMethodTrackingConfig implements DataFlo module TaintToConstructorOrStaticMethodTracking = TaintTracking::Global; -/** - * DEPRECATED: Use `TaintToObjectTypeTracking` instead. - * - * User input to instance type flow tracking. - */ -deprecated class TaintToObjectTypeTrackingConfig extends TaintTracking2::Configuration { - TaintToObjectTypeTrackingConfig() { this = "TaintToObjectTypeTrackingConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall mc | - mc.getTarget() instanceof UnsafeDeserializer and - sink.asExpr() = mc.getQualifier() - ) - } - - override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodCall mc, Method m | - m = mc.getTarget() and - m.getDeclaringType().hasFullyQualifiedName("System", "Type") and - m.hasName("GetType") and - m.isStatic() and - n1.asExpr() = mc.getArgument(0) and - n2.asExpr() = mc - ) - or - exists(ObjectCreation oc | - n1.asExpr() = oc.getAnArgument() and - n2.asExpr() = oc and - oc.getObjectType() instanceof StrongTypeDeserializer - ) - } -} - /** * User input to instance type flow tracking config. */ @@ -334,29 +194,6 @@ private module TaintToObjectTypeTrackingConfig implements DataFlow::ConfigSig { */ module TaintToObjectTypeTracking = TaintTracking::Global; -/** - * DEPRECATED: Use `WeakTypeCreationToUsageTracking` instead. - * - * Unsafe deserializer creation to usage tracking config. - */ -deprecated class WeakTypeCreationToUsageTrackingConfig extends TaintTracking2::Configuration { - WeakTypeCreationToUsageTrackingConfig() { this = "DeserializerCreationToUsageTrackingConfig" } - - override predicate isSource(DataFlow::Node source) { - exists(ObjectCreation oc | - oc.getObjectType() instanceof WeakTypeDeserializer and - source.asExpr() = oc - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall mc | - mc.getTarget() instanceof UnsafeDeserializer and - sink.asExpr() = mc.getQualifier() - ) - } -} - /** * Unsafe deserializer creation to usage tracking config. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index b21d5846bf5..09f6130985f 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -28,21 +28,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `UrlRedirect` instead. - * - * A taint-tracking configuration for reasoning about unvalidated URL redirect vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "UrlRedirect" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for reasoning about unvalidated URL redirect vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll index 0bb842adf79..4efeadb3c7e 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll @@ -44,26 +44,6 @@ private class InsecureXmlSink extends Sink { */ abstract class Sanitizer extends DataFlow::Node { } -/** - * DEPRECATED: Use `XmlEntityInjection` instead. - * - * A taint-tracking configuration for untrusted user input used in XML processing. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "XMLInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } - - override predicate hasFlowPath(DataFlow::PathNode source, DataFlow::PathNode sink) { - super.hasFlowPath(source, sink) and - exists(sink.getNode().(Sink).getReason()) - } -} - /** * A taint-tracking configuration for untrusted user input used in XML processing. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll index c471a432425..0e8e41c9773 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll @@ -24,21 +24,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `XpathInjection` instead. - * - * A taint-tracking configuration for untrusted user input used in XPath expression. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "XPathInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for untrusted user input used in XPath expression. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll index b9fd47689f9..4ea9e562bb5 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll @@ -141,21 +141,6 @@ abstract class Source extends DataFlow::Node { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `XssTracking` instead. - * - * A taint-tracking configuration for cross-site scripting (XSS) vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking2::Configuration { - TaintTrackingConfiguration() { this = "XSSDataFlowConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for cross-site scripting (XSS) vulnerabilities. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll index 93e7b601585..fad3917553d 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll @@ -21,21 +21,6 @@ abstract class Sink extends ApiSinkExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `ZipSlip` instead. - * - * A taint tracking configuration for Zip Slip. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "ZipSlipTaintTracking" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint tracking configuration for Zip Slip. */ diff --git a/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll b/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll index e3459dfb1ac..eea18ae3b6e 100644 --- a/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll +++ b/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll @@ -37,21 +37,6 @@ abstract class Sink extends DataFlow::ExprNode { } */ abstract class Sanitizer extends DataFlow::ExprNode { } -/** - * DEPRECATED: Use `TaintedWebClient` instead. - * - * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. - */ -deprecated class TaintTrackingConfiguration extends TaintTracking::Configuration { - TaintTrackingConfiguration() { this = "TaintedWebClientLib" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } -} - /** * A taint-tracking configuration for uncontrolled data in path expression vulnerabilities. */ diff --git a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll index e1c6875d952..dac68adfcc1 100644 --- a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll +++ b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll @@ -23,39 +23,6 @@ module RequestForgery { */ abstract private class Barrier extends DataFlow::Node { } - /** - * DEPRECATED: Use `RequestForgeryFlow` instead. - * - * A data flow configuration for detecting server side request forgery vulnerabilities. - */ - deprecated class RequestForgeryConfiguration extends DataFlow::Configuration { - RequestForgeryConfiguration() { this = "Server Side Request forgery" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { - interpolatedStringFlowStep(prev, succ) - or - stringReplaceStep(prev, succ) - or - uriCreationStep(prev, succ) - or - formatConvertStep(prev, succ) - or - toStringStep(prev, succ) - or - stringConcatStep(prev, succ) - or - stringFormatStep(prev, succ) - or - pathCombineStep(prev, succ) - } - - override predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } - } - /** * A data flow configuration for detecting server side request forgery vulnerabilities. */ diff --git a/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/JsonWebTokenHandlerLib.qll b/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/JsonWebTokenHandlerLib.qll index 6f86497b41e..476b17e4c69 100644 --- a/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/JsonWebTokenHandlerLib.qll +++ b/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/JsonWebTokenHandlerLib.qll @@ -18,27 +18,6 @@ class TokenValidationParametersPropertySensitiveValidation extends Property { } } -/** - * DEPRECATED: Use `FalseValueFlowsToTokenValidationParametersPropertyWriteToBypassValidation` instead. - * - * A dataflow from a `false` value to a write sensitive property for `TokenValidationParameters`. - */ -deprecated class FalseValueFlowsToTokenValidationParametersPropertyWriteToBypassValidation extends DataFlow::Configuration -{ - FalseValueFlowsToTokenValidationParametersPropertyWriteToBypassValidation() { - this = "FalseValueFlowsToTokenValidationParametersPropertyWriteToBypassValidation" - } - - override predicate isSource(DataFlow::Node source) { - source.asExpr().getValue() = "false" and - source.asExpr().getType() instanceof BoolType - } - - override predicate isSink(DataFlow::Node sink) { - sink.asExpr() = any(TokenValidationParametersPropertySensitiveValidation p).getAnAssignedValue() - } -} - /** * A dataflow configuration from a `false` value to a write sensitive property for `TokenValidationParameters`. */ diff --git a/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll b/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll index b61bd86ec4e..928cf3bdc4f 100644 --- a/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll +++ b/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll @@ -40,26 +40,6 @@ private module AuthCookieNameConfig implements DataFlow::ConfigSig { */ private module AuthCookieName = DataFlow::Global; -/** - * DEPRECATED: Use `CookieOptionsTracking` instead. - * - * Tracks creation of `CookieOptions` to `IResponseCookies.Append(String, String, CookieOptions)` call as a third parameter. - */ -deprecated class CookieOptionsTrackingConfiguration extends DataFlow::Configuration { - CookieOptionsTrackingConfiguration() { this = "CookieOptionsTrackingConfiguration" } - - override predicate isSource(DataFlow::Node source) { - source.asExpr().(ObjectCreation).getType() instanceof MicrosoftAspNetCoreHttpCookieOptions - } - - override predicate isSink(DataFlow::Node sink) { - exists(MicrosoftAspNetCoreHttpResponseCookies iResponse, MethodCall mc | - iResponse.getAppendMethod() = mc.getTarget() and - mc.getArgument(2) = sink.asExpr() - ) - } -} - /** * Configuration module tracking creation of `CookieOptions` to `IResponseCookies.Append(String, String, CookieOptions)` * calls as a third parameter. @@ -134,28 +114,6 @@ Expr getAValueForProp(ObjectCreation create, Assignment a, string prop) { */ predicate isPropertySet(ObjectCreation oc, string prop) { exists(getAValueForProp(oc, _, prop)) } -/** - * DEPRECATED: Use `OnAppendCookieSecureTracking` instead. - * - * Tracks if a callback used in `OnAppendCookie` sets `Secure` to `true`. - */ -deprecated class OnAppendCookieSecureTrackingConfig extends OnAppendCookieTrackingConfig { - OnAppendCookieSecureTrackingConfig() { this = "OnAppendCookieSecureTrackingConfig" } - - override string propertyName() { result = "Secure" } -} - -/** - * DEPRECATED: Use `OnAppendCookieHttpOnlyTracking` instead. - * - * Tracks if a callback used in `OnAppendCookie` sets `HttpOnly` to `true`. - */ -deprecated class OnAppendCookieHttpOnlyTrackingConfig extends OnAppendCookieTrackingConfig { - OnAppendCookieHttpOnlyTrackingConfig() { this = "OnAppendCookieHttpOnlyTrackingConfig" } - - override string propertyName() { result = "HttpOnly" } -} - /** * Tracks if a callback used in `OnAppendCookie` sets a cookie property to `true`. */ diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll index 8d01d8b8163..9531e279812 100644 --- a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll +++ b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll @@ -13,21 +13,6 @@ import go module AllocationSizeOverflow { import AllocationSizeOverflowCustomizations::AllocationSizeOverflow - /** - * DEPRECATED: Use copies of `FindLargeLensConfig` and `FindLargeLensFlow` instead. - * - * A taint-tracking configuration for identifying `len(...)` calls whose argument may be large. - */ - deprecated class FindLargeLensConfiguration extends TaintTracking2::Configuration { - FindLargeLensConfiguration() { this = "AllocationSizeOverflow::FindLargeLens" } - - override predicate isSource(DataFlow::Node nd) { nd instanceof Source } - - override predicate isSink(DataFlow::Node nd) { nd = Builtin::len().getACall().getArgument(0) } - - override predicate isSanitizer(DataFlow::Node nd) { nd instanceof Sanitizer } - } - private module FindLargeLensConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node nd) { nd instanceof Source } @@ -47,39 +32,6 @@ module AllocationSizeOverflow { ) } - /** - * DEPRECATED: Use `Flow` instead. - * - * A taint-tracking configuration for identifying allocation-size overflows. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "AllocationSizeOverflow" } - - override predicate isSource(DataFlow::Node nd) { nd instanceof Source } - - /** - * Holds if `nd` is at a position where overflow might occur, and its result is used to compute - * allocation size `allocsz`. - */ - predicate isSinkWithAllocationSize(DataFlow::Node nd, DataFlow::Node allocsz) { - nd.(Sink).getAllocationSize() = allocsz - } - - override predicate isSink(DataFlow::Node nd) { this.isSinkWithAllocationSize(nd, _) } - - override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { - additionalStep(pred, succ) - or - exists(DataFlow::CallNode c | - c = getALargeLenCall() and - pred = c.getArgument(0) and - succ = c - ) - } - - override predicate isSanitizer(DataFlow::Node nd) { nd instanceof Sanitizer } - } - /** * Holds if `nd` is at a position where overflow might occur, and its result is used to compute * allocation size `allocsz`. diff --git a/go/ql/lib/semmle/go/security/CommandInjection.qll b/go/ql/lib/semmle/go/security/CommandInjection.qll index bde5a443503..7dc6f3991fc 100644 --- a/go/ql/lib/semmle/go/security/CommandInjection.qll +++ b/go/ql/lib/semmle/go/security/CommandInjection.qll @@ -16,27 +16,6 @@ import go module CommandInjection { import CommandInjectionCustomizations::CommandInjection - /** - * DEPRECATED: Use `Flow` instead. - * - * A taint-tracking configuration for reasoning about command-injection vulnerabilities - * with sinks which are not sanitized by `--`. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "CommandInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { - exists(Sink s | sink = s | not s.doubleDashIsSanitizing()) - } - - override predicate isSanitizer(DataFlow::Node node) { - super.isSanitizer(node) or - node instanceof Sanitizer - } - } - private module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } @@ -92,28 +71,6 @@ module CommandInjection { } } - /** - * DEPRECATED: Use `DoubleDashSanitizingFlow` instead. - * - * A taint-tracking configuration for reasoning about command-injection vulnerabilities - * with sinks which are sanitized by `--`. - */ - deprecated class DoubleDashSanitizingConfiguration extends TaintTracking::Configuration { - DoubleDashSanitizingConfiguration() { this = "CommandInjectionWithDoubleDashSanitizer" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { - exists(Sink s | sink = s | s.doubleDashIsSanitizing()) - } - - override predicate isSanitizer(DataFlow::Node node) { - super.isSanitizer(node) or - node instanceof Sanitizer or - node = any(ArgumentArrayWithDoubleDash array).getASanitizedElement() - } - } - private module DoubleDashSanitizingConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } diff --git a/go/ql/lib/semmle/go/security/ExternalAPIs.qll b/go/ql/lib/semmle/go/security/ExternalAPIs.qll index 76d396f2b64..5eb41dd2579 100644 --- a/go/ql/lib/semmle/go/security/ExternalAPIs.qll +++ b/go/ql/lib/semmle/go/security/ExternalAPIs.qll @@ -182,19 +182,6 @@ class UnknownExternalApiDataNode extends ExternalApiDataNode { } } -/** - * DEPRECATED: Use `UntrustedDataToExternalApiFlow` instead. - * - * A configuration for tracking flow from `ThreatModelFlowSource`s to `ExternalApiDataNode`s. - */ -deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } -} - private module UntrustedDataConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } @@ -206,19 +193,6 @@ private module UntrustedDataConfig implements DataFlow::ConfigSig { */ module UntrustedDataToExternalApiFlow = DataFlow::Global; -/** - * DEPRECATED: Use `UntrustedDataToUnknownExternalApiFlow` instead. - * - * A configuration for tracking flow from `ThreatModelFlowSource`s to `UnknownExternalApiDataNode`s. - */ -deprecated class UntrustedDataToUnknownExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToUnknownExternalApiConfig() { this = "UntrustedDataToUnknownExternalAPIConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UnknownExternalApiDataNode } -} - private module UntrustedDataToUnknownExternalApiConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } diff --git a/go/ql/lib/semmle/go/security/LogInjection.qll b/go/ql/lib/semmle/go/security/LogInjection.qll index cb454716a8f..d8bc586ed91 100644 --- a/go/ql/lib/semmle/go/security/LogInjection.qll +++ b/go/ql/lib/semmle/go/security/LogInjection.qll @@ -14,21 +14,6 @@ import go module LogInjection { import LogInjectionCustomizations::LogInjection - /** - * DEPRECATED: Use `Flow` instead. - * - * A taint-tracking configuration for reasoning about log injection vulnerabilities. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "LogInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof Sanitizer } - } - /** Config for reasoning about log injection vulnerabilities. */ module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } diff --git a/java/ql/lib/semmle/code/java/JDK.qll b/java/ql/lib/semmle/code/java/JDK.qll index 55d420dbcae..ee86cf0a191 100644 --- a/java/ql/lib/semmle/code/java/JDK.qll +++ b/java/ql/lib/semmle/code/java/JDK.qll @@ -210,39 +210,6 @@ class TypeFile extends Class { } // --- Standard methods --- -/** - * DEPRECATED: Any constructor of class `java.lang.ProcessBuilder`. - */ -deprecated class ProcessBuilderConstructor extends Constructor, ExecCallable { - ProcessBuilderConstructor() { this.getDeclaringType() instanceof TypeProcessBuilder } - - override int getAnExecutedArgument() { result = 0 } -} - -/** - * DEPRECATED: Any of the methods named `command` on class `java.lang.ProcessBuilder`. - */ -deprecated class MethodProcessBuilderCommand extends Method, ExecCallable { - MethodProcessBuilderCommand() { - this.hasName("command") and - this.getDeclaringType() instanceof TypeProcessBuilder - } - - override int getAnExecutedArgument() { result = 0 } -} - -/** - * DEPRECATED: Any method named `exec` on class `java.lang.Runtime`. - */ -deprecated class MethodRuntimeExec extends Method, ExecCallable { - MethodRuntimeExec() { - this.hasName("exec") and - this.getDeclaringType() instanceof TypeRuntime - } - - override int getAnExecutedArgument() { result = 0 } -} - /** * Any method named `getenv` on class `java.lang.System`. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 3b1439511d1..359fa71744b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll b/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll index 9dc6510c5e7..d40e7ebf81e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll @@ -43,34 +43,6 @@ class JsonIoUseMapsSetter extends MethodCall { } } -/** - * DEPRECATED: Use `SafeJsonIoFlow` instead. - * - * A data flow configuration tracing flow from JsonIo safe settings. - */ -deprecated class SafeJsonIoConfig extends DataFlow2::Configuration { - SafeJsonIoConfig() { this = "UnsafeDeserialization::SafeJsonIoConfig" } - - override predicate isSource(DataFlow::Node src) { - exists(MethodCall ma | - ma instanceof JsonIoUseMapsSetter and - src.asExpr() = ma.getQualifier() - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall ma | - ma.getMethod() instanceof JsonIoJsonToJavaMethod and - sink.asExpr() = ma.getArgument(1) - ) - or - exists(ClassInstanceExpr cie | - cie.getConstructor().getDeclaringType() instanceof JsonIoJsonReader and - sink.asExpr() = cie.getArgument(1) - ) - } -} - /** * A data flow configuration tracing flow from JsonIo safe settings. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll index 79c476cdf20..ed09baf8ead 100644 --- a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll +++ b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll @@ -42,9 +42,6 @@ class CamelJavaDslToDecl extends ProcessorDefinitionElement { * Gets the URI specified by this `to` declaration. */ string getUri() { result = this.getArgument(0).(CompileTimeConstantExpr).getStringValue() } - - /** DEPRECATED: Alias for getUri */ - deprecated string getURI() { result = this.getUri() } } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll index 985565255b6..6fec620ccd5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll @@ -97,9 +97,6 @@ class SpringCamelXmlToElement extends SpringCamelXmlRouteElement { * Gets the URI attribute for this `` element. */ string getUri() { result = this.getAttribute("uri").getValue() } - - /** DEPRECATED: Alias for getUri */ - deprecated string getURI() { result = this.getUri() } } /** diff --git a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirectionQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirectionQuery.qll index 42d420a76b3..b179a4f92e0 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirectionQuery.qll @@ -7,27 +7,6 @@ import semmle.code.java.dataflow.TaintTracking deprecated import semmle.code.java.dataflow.TaintTracking3 import semmle.code.java.security.AndroidIntentRedirection -/** - * DEPRECATED: Use `IntentRedirectionFlow` instead. - * - * A taint tracking configuration for tainted Intents being used to start Android components. - */ -deprecated class IntentRedirectionConfiguration extends TaintTracking::Configuration { - IntentRedirectionConfiguration() { this = "IntentRedirectionConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof IntentRedirectionSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof IntentRedirectionSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(IntentRedirectionAdditionalTaintStep c).step(node1, node2) - } -} - /** A taint tracking configuration for tainted Intents being used to start Android components. */ module IntentRedirectionConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } diff --git a/java/ql/lib/semmle/code/java/security/AndroidSensitiveCommunicationQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidSensitiveCommunicationQuery.qll index a4f9713ac30..2ba13c06feb 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidSensitiveCommunicationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidSensitiveCommunicationQuery.qll @@ -122,36 +122,6 @@ private predicate isStartActivityOrServiceSink(DataFlow::Node arg) { ) } -/** - * DEPRECATED: Use `SensitiveCommunicationFlow` instead. - * - * Taint configuration tracking flow from variables containing sensitive information to broadcast Intents. - */ -deprecated class SensitiveCommunicationConfig extends TaintTracking::Configuration { - SensitiveCommunicationConfig() { this = "Sensitive Communication Configuration" } - - override predicate isSource(DataFlow::Node source) { - source.asExpr() instanceof SensitiveInfoExpr - } - - override predicate isSink(DataFlow::Node sink) { - isSensitiveBroadcastSink(sink) - or - isStartActivityOrServiceSink(sink) - } - - /** - * Holds if broadcast doesn't specify receiving package name of the 3rd party app - */ - override predicate isSanitizer(DataFlow::Node node) { node instanceof ExplicitIntentSanitizer } - - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { - super.allowImplicitRead(node, c) - or - this.isSink(node) - } -} - /** * A sensitive communication sink node. */ diff --git a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll index 903dae5d67e..692bdfc1a70 100644 --- a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll @@ -109,37 +109,3 @@ predicate execIsTainted( InputToArgumentToExecFlow::flowPath(source, sink) and argumentToExec(execArg, sink.getNode()) } - -/** - * DEPRECATED: Use `execIsTainted` instead. - * - * Implementation of `ExecTainted.ql`. It is extracted to a QLL - * so that it can be excluded from `ExecUnescaped.ql` to avoid - * reporting overlapping results. - */ -deprecated predicate execTainted(DataFlow::PathNode source, DataFlow::PathNode sink, Expr execArg) { - exists(RemoteUserInputToArgumentToExecFlowConfig conf | - conf.hasFlowPath(source, sink) and argumentToExec(execArg, sink.getNode()) - ) -} - -/** - * DEPRECATED: Use `RemoteUserInputToArgumentToExecFlow` instead. - * - * A taint-tracking configuration for unvalidated user input that is used to run an external process. - */ -deprecated class RemoteUserInputToArgumentToExecFlowConfig extends TaintTracking::Configuration { - RemoteUserInputToArgumentToExecFlowConfig() { - this = "ExecCommon::RemoteUserInputToArgumentToExecFlowConfig" - } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof CommandInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof CommandInjectionSanitizer } - - override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { - any(CommandInjectionAdditionalTaintStep s).step(n1, n2) - } -} diff --git a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll index 63a93134512..96d3c5a528c 100644 --- a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll @@ -36,23 +36,6 @@ private predicate endsWithStep(DataFlow::Node node1, DataFlow::Node node2) { ) } -/** - * DEPRECATED: Use `ConditionalBypassFlow` instead. - * - * A taint tracking configuration for untrusted data flowing to sensitive conditions. - */ -deprecated class ConditionalBypassFlowConfig extends TaintTracking::Configuration { - ConditionalBypassFlowConfig() { this = "ConditionalBypassFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { conditionControlsMethod(_, sink.asExpr()) } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - endsWithStep(node1, node2) - } -} - /** * A taint tracking configuration for untrusted data flowing to sensitive conditions. */ diff --git a/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll b/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll index f27b677722f..6838555179a 100644 --- a/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll +++ b/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll @@ -92,19 +92,6 @@ class ExternalApiDataNode extends DataFlow::Node { string getMethodDescription() { result = this.getMethod().getQualifiedName() } } -/** - * DEPRECATED: Use `UntrustedDataToExternalApiFlow` instead. - * - * A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. - */ -deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { - UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } -} - /** * Taint tracking configuration for flow from `ThreatModelFlowSource`s to `ExternalApiDataNode`s. */ diff --git a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll index 385d2f6c548..58f7457e9e3 100644 --- a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll +++ b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll @@ -4,16 +4,6 @@ import semmle.code.java.Member private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.security.CommandLineQuery -/** - * DEPRECATED: A callable that executes a command. - */ -abstract deprecated class ExecCallable extends Callable { - /** - * Gets the index of an argument that will be part of the command that is executed. - */ - abstract int getAnExecutedArgument(); -} - /** * An expression used as an argument to a call that executes an external command. For calls to * varargs method calls, this only includes the first argument, which will be the command diff --git a/java/ql/lib/semmle/code/java/security/FragmentInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/FragmentInjectionQuery.qll index 97ad1d7a564..f625807470d 100644 --- a/java/ql/lib/semmle/code/java/security/FragmentInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/FragmentInjectionQuery.qll @@ -5,24 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.FragmentInjection -/** - * DEPRECATED: Use `FragmentInjectionFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to create Android fragments dynamically. - */ -deprecated class FragmentInjectionTaintConf extends TaintTracking::Configuration { - FragmentInjectionTaintConf() { this = "FragmentInjectionTaintConf" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof FragmentInjectionSink } - - override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { - any(FragmentInjectionAdditionalTaintStep c).step(n1, n2) - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to create Android fragments dynamically. diff --git a/java/ql/lib/semmle/code/java/security/GroovyInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/GroovyInjectionQuery.qll index aecd634b541..3af836cac97 100644 --- a/java/ql/lib/semmle/code/java/security/GroovyInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/GroovyInjectionQuery.qll @@ -5,24 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.GroovyInjection -/** - * DEPRECATED: Use `GroovyInjectionFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to evaluate a Groovy expression. - */ -deprecated class GroovyInjectionConfig extends TaintTracking::Configuration { - GroovyInjectionConfig() { this = "GroovyInjectionConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof GroovyInjectionSink } - - override predicate isAdditionalTaintStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - any(GroovyInjectionAdditionalTaintStep c).step(fromNode, toNode) - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to evaluate a Groovy expression. diff --git a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsApiCallQuery.qll b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsApiCallQuery.qll index 92d4f2a22aa..f623973a657 100644 --- a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsApiCallQuery.qll +++ b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsApiCallQuery.qll @@ -6,55 +6,6 @@ import java import semmle.code.java.dataflow.DataFlow import HardcodedCredentials -/** - * DEPRECATED: Use `HardcodedCredentialApiCallFlow` instead. - * - * A data-flow configuration that tracks flow from a hard-coded credential in a call to a sensitive Java API which may compromise security. - */ -deprecated class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { - HardcodedCredentialApiCallConfiguration() { this = "HardcodedCredentialApiCallConfiguration" } - - override predicate isSource(DataFlow::Node n) { - n.asExpr() instanceof HardcodedExpr and - not n.asExpr().getEnclosingCallable() instanceof ToStringMethod - } - - override predicate isSink(DataFlow::Node n) { n.asExpr() instanceof CredentialsApiSink } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - node1.asExpr().getType() instanceof TypeString and - ( - exists(MethodCall ma | ma.getMethod().hasName(["getBytes", "toCharArray"]) | - node2.asExpr() = ma and - ma.getQualifier() = node1.asExpr() - ) - or - // These base64 routines are usually taint propagators, and this is not a general - // TaintTracking::Configuration, so we must specifically include them here - // as a common transform applied to a constant before passing to a remote API. - exists(MethodCall ma | - ma.getMethod() - .hasQualifiedName([ - "java.util", "cn.hutool.core.codec", "org.apache.shiro.codec", - "apache.commons.codec.binary", "org.springframework.util" - ], ["Base64$Encoder", "Base64$Decoder", "Base64", "Base64Utils"], - [ - "encode", "encodeToString", "decode", "decodeBase64", "encodeBase64", - "encodeBase64Chunked", "encodeBase64String", "encodeBase64URLSafe", - "encodeBase64URLSafeString" - ]) - | - node1.asExpr() = ma.getArgument(0) and - node2.asExpr() = ma - ) - ) - } - - override predicate isBarrier(DataFlow::Node n) { - n.asExpr().(MethodCall).getMethod() instanceof MethodSystemGetenv - } -} - /** * A data-flow configuration that tracks flow from a hard-coded credential in a call to a sensitive Java API which may compromise security. */ diff --git a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsSourceCallQuery.qll b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsSourceCallQuery.qll index 67383877d7e..2192c5c70de 100644 --- a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsSourceCallQuery.qll +++ b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsSourceCallQuery.qll @@ -8,22 +8,6 @@ deprecated import semmle.code.java.dataflow.DataFlow2 private import semmle.code.java.dataflow.DataFlow2 import HardcodedCredentials -/** - * DEPRECATED: Use `HardcodedCredentialSourceCallFlow` instead. - * - * A data-flow configuration that tracks hardcoded expressions flowing to a parameter whose name suggests - * it may be a credential, excluding those which flow on to other such insecure usage sites. - */ -deprecated class HardcodedCredentialSourceCallConfiguration extends DataFlow::Configuration { - HardcodedCredentialSourceCallConfiguration() { - this = "HardcodedCredentialSourceCallConfiguration" - } - - override predicate isSource(DataFlow::Node n) { n.asExpr() instanceof HardcodedExpr } - - override predicate isSink(DataFlow::Node n) { n.asExpr() instanceof FinalCredentialsSourceSink } -} - /** * A data-flow configuration that tracks hardcoded expressions flowing to a parameter whose name suggests * it may be a credential, excluding those which flow on to other such insecure usage sites. @@ -40,22 +24,6 @@ module HardcodedCredentialSourceCallConfig implements DataFlow::ConfigSig { */ module HardcodedCredentialSourceCallFlow = DataFlow::Global; -/** - * DEPRECATED: Use `HardcodedCredentialParameterSourceCallFlow` instead. - * - * A data-flow configuration that tracks flow from an argument whose corresponding parameter name suggests - * a credential, to an argument to a sensitive call. - */ -deprecated class HardcodedCredentialSourceCallConfiguration2 extends DataFlow2::Configuration { - HardcodedCredentialSourceCallConfiguration2() { - this = "HardcodedCredentialSourceCallConfiguration2" - } - - override predicate isSource(DataFlow::Node n) { n.asExpr() instanceof CredentialsSourceSink } - - override predicate isSink(DataFlow::Node n) { n.asExpr() instanceof CredentialsSink } -} - /** * A data-flow configuration that tracks flow from an argument whose corresponding parameter name suggests * a credential, to an argument to a sensitive call. diff --git a/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll b/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll index ae9d3d6201e..031066d506e 100644 --- a/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll +++ b/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll @@ -6,27 +6,6 @@ import semmle.code.java.frameworks.Networking import semmle.code.java.security.HttpsUrls private import semmle.code.java.security.Sanitizers -/** - * DEPRECATED: Use `HttpsStringToUrlOpenMethodFlow` instead. - * - * A taint tracking configuration for HTTP connections. - */ -deprecated class HttpStringToUrlOpenMethodFlowConfig extends TaintTracking::Configuration { - HttpStringToUrlOpenMethodFlowConfig() { this = "HttpStringToUrlOpenMethodFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof HttpStringLiteral } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UrlOpenSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(HttpUrlsAdditionalTaintStep c).step(node1, node2) - } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } -} - /** * A taint tracking configuration for HTTP connections. */ diff --git a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll index 402dacb2e9a..0a8e0686549 100644 --- a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll @@ -6,55 +6,6 @@ import semmle.code.java.frameworks.android.Intent import semmle.code.java.frameworks.android.PendingIntent import semmle.code.java.security.ImplicitPendingIntents -/** - * DEPRECATED: Use `ImplicitPendingIntentStartFlow` instead. - * - * A taint tracking configuration for implicit `PendingIntent`s - * being wrapped in another implicit `Intent` that gets started. - */ -deprecated class ImplicitPendingIntentStartConf extends TaintTracking::Configuration { - ImplicitPendingIntentStartConf() { this = "ImplicitPendingIntentStartConf" } - - override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - source.(ImplicitPendingIntentSource).hasState(state) - } - - override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - sink.(ImplicitPendingIntentSink).hasState(state) - } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof ExplicitIntentSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(ImplicitPendingIntentAdditionalTaintStep c).step(node1, node2) - } - - override predicate isAdditionalTaintStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - any(ImplicitPendingIntentAdditionalTaintStep c).step(node1, state1, node2, state2) - } - - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { - super.allowImplicitRead(node, c) - or - this.isSink(node, _) and - allowIntentExtrasImplicitRead(node, c) - or - this.isAdditionalTaintStep(node, _) and - c.(DataFlow::FieldContent).getType() instanceof PendingIntent - or - // Allow implicit reads of Intent arrays for steps like getActivities - // or sinks like startActivities - (this.isSink(node, _) or this.isAdditionalFlowStep(node, _, _, _)) and - node.getType().(Array).getElementType() instanceof TypeIntent and - c instanceof DataFlow::ArrayContent - } -} - /** * A taint tracking configuration for implicit `PendingIntent`s * being wrapped in another implicit `Intent` that gets started. diff --git a/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll b/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll index 60e16662d9a..9e69308e458 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll @@ -5,24 +5,6 @@ import semmle.code.java.security.HttpsUrls import semmle.code.java.security.InsecureBasicAuth import semmle.code.java.dataflow.TaintTracking -/** - * DEPRECATED: Use `InsecureBasicAuthFlow` instead. - * - * A taint tracking configuration for the Basic authentication scheme - * being used in HTTP connections. - */ -deprecated class BasicAuthFlowConfig extends TaintTracking::Configuration { - BasicAuthFlowConfig() { this = "InsecureBasicAuth::BasicAuthFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(HttpUrlsAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint tracking configuration for the Basic authentication scheme * being used in HTTP connections. diff --git a/java/ql/lib/semmle/code/java/security/InsecureTrustManagerQuery.qll b/java/ql/lib/semmle/code/java/security/InsecureTrustManagerQuery.qll index a7514ceff96..d732716ec2e 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureTrustManagerQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureTrustManagerQuery.qll @@ -4,28 +4,6 @@ import java import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.InsecureTrustManager -/** - * DEPRECATED: Use `InsecureTrustManagerFlow` instead. - * - * A configuration to model the flow of an insecure `TrustManager` - * to the initialization of an SSL context. - */ -deprecated class InsecureTrustManagerConfiguration extends DataFlow::Configuration { - InsecureTrustManagerConfiguration() { this = "InsecureTrustManagerConfiguration" } - - override predicate isSource(DataFlow::Node source) { - source instanceof InsecureTrustManagerSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureTrustManagerSink } - - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { - (this.isSink(node) or this.isAdditionalFlowStep(node, _)) and - node.getType() instanceof Array and - c instanceof DataFlow::ArrayContent - } -} - /** * A configuration to model the flow of an insecure `TrustManager` * to the initialization of an SSL context. diff --git a/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll b/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll index 67678d72a28..e08cd50cdb3 100644 --- a/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll @@ -3,23 +3,6 @@ import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.InsufficientKeySize -/** - * DEPRECATED: Use `KeySizeFlow` instead. - * - * A data flow configuration for tracking key sizes used in cryptographic algorithms. - */ -deprecated class KeySizeConfiguration extends DataFlow::Configuration { - KeySizeConfiguration() { this = "KeySizeConfiguration" } - - override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - exists(KeySizeState s | source.(InsufficientKeySizeSource).hasState(s) and state = s.toString()) - } - - override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - exists(KeySizeState s | sink.(InsufficientKeySizeSink).hasState(s) and state = s.toString()) - } -} - /** * A data flow configuration for tracking key sizes used in cryptographic algorithms. */ diff --git a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulationQuery.qll b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulationQuery.qll index b9fc3f42eb7..740ce24bf62 100644 --- a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulationQuery.qll @@ -8,29 +8,6 @@ private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.DataFlow private import IntentUriPermissionManipulation -/** - * DEPRECATED: Use `IntentUriPermissionManipulationFlow` instead. - * - * A taint tracking configuration for user-provided Intents being returned to third party apps. - */ -deprecated class IntentUriPermissionManipulationConf extends TaintTracking::Configuration { - IntentUriPermissionManipulationConf() { this = "UriPermissionManipulationConf" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { - sink instanceof IntentUriPermissionManipulationSink - } - - override predicate isSanitizer(DataFlow::Node barrier) { - barrier instanceof IntentUriPermissionManipulationSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(IntentUriPermissionManipulationAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint tracking configuration for user-provided Intents being returned to third party apps. */ diff --git a/java/ql/lib/semmle/code/java/security/JexlInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/JexlInjectionQuery.qll index 6f3a7ad00af..de49560e779 100644 --- a/java/ql/lib/semmle/code/java/security/JexlInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/JexlInjectionQuery.qll @@ -38,25 +38,6 @@ private class DefaultJexlInjectionAdditionalTaintStep extends JexlInjectionAddit } } -/** - * DEPRECATED: Use `JexlInjectionFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to construct and evaluate a JEXL expression. - * It supports both JEXL 2 and 3. - */ -deprecated class JexlInjectionConfig extends TaintTracking::Configuration { - JexlInjectionConfig() { this = "JexlInjectionConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof JexlEvaluationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(JexlInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a JEXL expression. diff --git a/java/ql/lib/semmle/code/java/security/JndiInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/JndiInjectionQuery.qll index c7343172016..3c1f4b8e68e 100644 --- a/java/ql/lib/semmle/code/java/security/JndiInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/JndiInjectionQuery.qll @@ -7,28 +7,6 @@ import semmle.code.java.frameworks.SpringLdap import semmle.code.java.security.JndiInjection private import semmle.code.java.security.Sanitizers -/** - * DEPRECATED: Use `JndiInjectionFlow` instead. - * - * A taint-tracking configuration for unvalidated user input that is used in JNDI lookup. - */ -deprecated class JndiInjectionFlowConfig extends TaintTracking::Configuration { - JndiInjectionFlowConfig() { this = "JndiInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof JndiInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node instanceof SimpleTypeSanitizer or - node instanceof JndiInjectionSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(JndiInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unvalidated user input that is used in JNDI lookup. */ diff --git a/java/ql/lib/semmle/code/java/security/LogInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/LogInjectionQuery.qll index f66ae7f5808..cebc807cc47 100644 --- a/java/ql/lib/semmle/code/java/security/LogInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/LogInjectionQuery.qll @@ -4,25 +4,6 @@ import java import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.LogInjection -/** - * DEPRECATED: Use `LogInjectionFlow` instead. - * - * A taint-tracking configuration for tracking untrusted user input used in log entries. - */ -deprecated class LogInjectionConfiguration extends TaintTracking::Configuration { - LogInjectionConfiguration() { this = "LogInjectionConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof LogInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof LogInjectionSanitizer } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(LogInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for tracking untrusted user input used in log entries. */ diff --git a/java/ql/lib/semmle/code/java/security/MissingJWTSignatureCheckQuery.qll b/java/ql/lib/semmle/code/java/security/MissingJWTSignatureCheckQuery.qll index c316da2f965..eaa4c6320c1 100644 --- a/java/ql/lib/semmle/code/java/security/MissingJWTSignatureCheckQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MissingJWTSignatureCheckQuery.qll @@ -4,26 +4,6 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.JWT -/** - * DEPRECATED: Use `MissingJwtSignatureCheckFlow` instead. - * - * Models flow from signing keys assignments to qualifiers of JWT insecure parsers. - * This is used to determine whether a `JwtParser` performing unsafe parsing has a signing key set. - */ -deprecated class MissingJwtSignatureCheckConf extends DataFlow::Configuration { - MissingJwtSignatureCheckConf() { this = "SigningToExprDataFlow" } - - override predicate isSource(DataFlow::Node source) { - source instanceof JwtParserWithInsecureParseSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof JwtParserWithInsecureParseSink } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - any(JwtParserWithInsecureParseAdditionalFlowStep c).step(node1, node2) - } -} - /** * Models flow from signing keys assignments to qualifiers of JWT insecure parsers. * This is used to determine whether a `JwtParser` performing unsafe parsing has a signing key set. diff --git a/java/ql/lib/semmle/code/java/security/MvelInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/MvelInjectionQuery.qll index c2697861d7c..4bf81804f82 100644 --- a/java/ql/lib/semmle/code/java/security/MvelInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MvelInjectionQuery.qll @@ -5,28 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.MvelInjection -/** - * DEPRECATED: Use `MvelInjectionFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to construct and evaluate a MVEL expression. - */ -deprecated class MvelInjectionFlowConfig extends TaintTracking::Configuration { - MvelInjectionFlowConfig() { this = "MvelInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof MvelEvaluationSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof MvelInjectionSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(MvelInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a MVEL expression. diff --git a/java/ql/lib/semmle/code/java/security/OgnlInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/OgnlInjectionQuery.qll index 259f344205e..3acf18c453c 100644 --- a/java/ql/lib/semmle/code/java/security/OgnlInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/OgnlInjectionQuery.qll @@ -5,27 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.OgnlInjection private import semmle.code.java.security.Sanitizers -/** - * DEPRECATED: Use `OgnlInjectionFlow` instead. - * - * A taint-tracking configuration for unvalidated user input that is used in OGNL EL evaluation. - */ -deprecated class OgnlInjectionFlowConfig extends TaintTracking::Configuration { - OgnlInjectionFlowConfig() { this = "OgnlInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof OgnlInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(OgnlInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unvalidated user input that is used in OGNL EL evaluation. */ diff --git a/java/ql/lib/semmle/code/java/security/PartialPathTraversalQuery.qll b/java/ql/lib/semmle/code/java/security/PartialPathTraversalQuery.qll index 442af520f5d..c4c3e6b093c 100644 --- a/java/ql/lib/semmle/code/java/security/PartialPathTraversalQuery.qll +++ b/java/ql/lib/semmle/code/java/security/PartialPathTraversalQuery.qll @@ -6,23 +6,6 @@ import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.FlowSources -/** - * DEPRECATED: Use `PartialPathTraversalFromRemoteFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to validate against path traversal, but is insufficient - * and remains vulnerable to Partial Path Traversal. - */ -deprecated class PartialPathTraversalFromRemoteConfig extends TaintTracking::Configuration { - PartialPathTraversalFromRemoteConfig() { this = "PartialPathTraversalFromRemoteConfig" } - - override predicate isSource(DataFlow::Node node) { node instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node node) { - any(PartialPathTraversalMethodCall ma).getQualifier() = node.asExpr() - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to validate against path traversal, but is insufficient diff --git a/java/ql/lib/semmle/code/java/security/PathCreation.qll b/java/ql/lib/semmle/code/java/security/PathCreation.qll index 3d40a1d4fdb..cbca3ce74de 100644 --- a/java/ql/lib/semmle/code/java/security/PathCreation.qll +++ b/java/ql/lib/semmle/code/java/security/PathCreation.qll @@ -5,139 +5,3 @@ */ import java - -/** DEPRECATED: Models the creation of a path. */ -abstract deprecated class PathCreation extends Expr { - /** - * Gets an input that is used in the creation of this path. - * This excludes inputs of type `File` and `Path`. - */ - abstract Expr getAnInput(); -} - -/** Models the `java.nio.file.Paths.get` method. */ -deprecated private class PathsGet extends PathCreation, MethodCall { - PathsGet() { - exists(Method m | m = this.getMethod() | - m.getDeclaringType() instanceof TypePaths and - m.getName() = "get" - ) - } - - override Expr getAnInput() { result = this.getAnArgument() } -} - -/** Models the `java.nio.file.FileSystem.getPath` method. */ -deprecated private class FileSystemGetPath extends PathCreation, MethodCall { - FileSystemGetPath() { - exists(Method m | m = this.getMethod() | - m.getDeclaringType() instanceof TypeFileSystem and - m.getName() = "getPath" - ) - } - - override Expr getAnInput() { result = this.getAnArgument() } -} - -/** Models the `new java.io.File(...)` constructor. */ -deprecated private class FileCreation extends PathCreation, ClassInstanceExpr { - FileCreation() { this.getConstructedType() instanceof TypeFile } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments include those that are not a `File`. - not result.getType() instanceof TypeFile - } -} - -/** Models the `java.nio.file.Path.resolveSibling` method. */ -deprecated private class PathResolveSiblingCreation extends PathCreation, MethodCall { - PathResolveSiblingCreation() { - exists(Method m | m = this.getMethod() | - m.getDeclaringType() instanceof TypePath and - m.getName() = "resolveSibling" - ) - } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} - -/** Models the `java.nio.file.Path.resolve` method. */ -deprecated private class PathResolveCreation extends PathCreation, MethodCall { - PathResolveCreation() { - exists(Method m | m = this.getMethod() | - m.getDeclaringType() instanceof TypePath and - m.getName() = "resolve" - ) - } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} - -/** Models the `java.nio.file.Path.of` method. */ -deprecated private class PathOfCreation extends PathCreation, MethodCall { - PathOfCreation() { - exists(Method m | m = this.getMethod() | - m.getDeclaringType() instanceof TypePath and - m.getName() = "of" - ) - } - - override Expr getAnInput() { result = this.getAnArgument() } -} - -/** Models the `new java.io.FileWriter(...)` constructor. */ -deprecated private class FileWriterCreation extends PathCreation, ClassInstanceExpr { - FileWriterCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileWriter") } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} - -/** Models the `new java.io.FileReader(...)` constructor. */ -deprecated private class FileReaderCreation extends PathCreation, ClassInstanceExpr { - FileReaderCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileReader") } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} - -/** Models the `new java.io.FileInputStream(...)` constructor. */ -deprecated private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { - FileInputStreamCreation() { - this.getConstructedType().hasQualifiedName("java.io", "FileInputStream") - } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} - -/** Models the `new java.io.FileOutputStream(...)` constructor. */ -deprecated private class FileOutputStreamCreation extends PathCreation, ClassInstanceExpr { - FileOutputStreamCreation() { - this.getConstructedType().hasQualifiedName("java.io", "FileOutputStream") - } - - override Expr getAnInput() { - result = this.getAnArgument() and - // Relevant arguments are those of type `String`. - result.getType() instanceof TypeString - } -} diff --git a/java/ql/lib/semmle/code/java/security/RequestForgeryConfig.qll b/java/ql/lib/semmle/code/java/security/RequestForgeryConfig.qll index a26245ae9cf..e8415cc1978 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgeryConfig.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgeryConfig.qll @@ -7,31 +7,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.RequestForgery -/** - * DEPRECATED: Use `RequestForgeryConfiguration` module instead. - * - * A taint-tracking configuration characterising request-forgery risks. - */ -deprecated class RequestForgeryConfiguration extends TaintTracking::Configuration { - RequestForgeryConfiguration() { this = "Server-Side Request Forgery" } - - override predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource and - // Exclude results of remote HTTP requests: fetching something else based on that result - // is no worse than following a redirect returned by the remote server, and typically - // we're requesting a resource via https which we trust to only send us to safe URLs. - not source.asExpr().(MethodCall).getCallee() instanceof UrlConnectionGetInputStreamMethod - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof RequestForgerySink } - - override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { - any(RequestForgeryAdditionalTaintStep r).propagatesTaint(pred, succ) - } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof RequestForgerySanitizer } -} - /** * A taint-tracking configuration characterising request-forgery risks. */ diff --git a/java/ql/lib/semmle/code/java/security/RsaWithoutOaepQuery.qll b/java/ql/lib/semmle/code/java/security/RsaWithoutOaepQuery.qll index 848a1c2b990..66e4a0537d2 100644 --- a/java/ql/lib/semmle/code/java/security/RsaWithoutOaepQuery.qll +++ b/java/ql/lib/semmle/code/java/security/RsaWithoutOaepQuery.qll @@ -4,28 +4,6 @@ import java import Encryption import semmle.code.java.dataflow.DataFlow -/** - * DEPRECATED: Use `RsaWithoutOaepFlow` instead. - * - * A configuration for finding RSA ciphers initialized without using OAEP padding. - */ -deprecated class RsaWithoutOaepConfig extends DataFlow::Configuration { - RsaWithoutOaepConfig() { this = "RsaWithoutOaepConfig" } - - override predicate isSource(DataFlow::Node src) { - exists(CompileTimeConstantExpr specExpr, string spec | - specExpr.getStringValue() = spec and - specExpr = src.asExpr() and - spec.matches("RSA/%") and - not spec.matches("%OAEP%") - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(CryptoAlgoSpec cr | sink.asExpr() = cr.getAlgoSpec()) - } -} - /** * A configuration for finding RSA ciphers initialized without using OAEP padding. */ diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index f7232f045b3..201b347e014 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -40,29 +40,6 @@ private class TypeType extends RefType { } } -/** - * DEPRECATED: Use `SensitiveLoggerConfiguration` module instead. - * - * A data-flow configuration for identifying potentially-sensitive data flowing to a log output. - */ -deprecated class SensitiveLoggerConfiguration extends TaintTracking::Configuration { - SensitiveLoggerConfiguration() { this = "SensitiveLoggerConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof SensitiveLoggerSource } - - override predicate isSink(DataFlow::Node sink) { sinkNode(sink, "log-injection") } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer.asExpr() instanceof LiveLiteral or - sanitizer.getType() instanceof PrimitiveType or - sanitizer.getType() instanceof BoxedType or - sanitizer.getType() instanceof NumberType or - sanitizer.getType() instanceof TypeType - } - - override predicate isSanitizerIn(DataFlow::Node node) { this.isSource(node) } -} - /** A data-flow configuration for identifying potentially-sensitive data flowing to a log output. */ module SensitiveLoggerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof SensitiveLoggerSource } diff --git a/java/ql/lib/semmle/code/java/security/SensitiveResultReceiverQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveResultReceiverQuery.qll index 8269a42c5c2..e22dcef1211 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveResultReceiverQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveResultReceiverQuery.qll @@ -32,25 +32,6 @@ private predicate untrustedResultReceiverSend(DataFlow::Node src, ResultReceiver UntrustedResultReceiverFlow::flow(src, DataFlow::exprNode(call.getReceiver())) } -deprecated private class SensitiveResultReceiverConf extends TaintTracking::Configuration { - SensitiveResultReceiverConf() { this = "SensitiveResultReceiverConf" } - - override predicate isSource(DataFlow::Node node) { node.asExpr() instanceof SensitiveExpr } - - override predicate isSink(DataFlow::Node node) { - exists(ResultReceiverSendCall call | - untrustedResultReceiverSend(_, call) and - node.asExpr() = call.getSentData() - ) - } - - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { - super.allowImplicitRead(node, c) - or - this.isSink(node) - } -} - /** * A sensitive result receiver sink node. */ @@ -74,21 +55,6 @@ private module SensitiveResultReceiverConfig implements DataFlow::ConfigSig { /** Taint tracking flow for sensitive expressions flowing to untrusted result receivers. */ module SensitiveResultReceiverFlow = TaintTracking::Global; -/** - * DEPRECATED: Use `isSensitiveResultReceiver` instead. - * - * Holds if there is a path from sensitive data at `src` to a result receiver at `sink`, and the receiver was obtained from an untrusted source `recSrc`. - */ -deprecated predicate sensitiveResultReceiver( - DataFlow::PathNode src, DataFlow::PathNode sink, DataFlow::Node recSrc -) { - exists(ResultReceiverSendCall call | - any(SensitiveResultReceiverConf c).hasFlowPath(src, sink) and - sink.getNode().asExpr() = call.getSentData() and - untrustedResultReceiverSend(recSrc, call) - ) -} - /** * Holds if there is a path from sensitive data at `src` to a result receiver at `sink`, and the receiver was obtained from an untrusted source `recSrc`. */ diff --git a/java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll index cbd79c65d25..848aae8da30 100644 --- a/java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll @@ -6,24 +6,6 @@ private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.frameworks.spring.SpringExpression private import semmle.code.java.security.SpelInjection -/** - * DEPRECATED: Use `SpelInjectionFlow` instead. - * - * A taint-tracking configuration for unsafe user input - * that is used to construct and evaluate a SpEL expression. - */ -deprecated class SpelInjectionConfig extends TaintTracking::Configuration { - SpelInjectionConfig() { this = "SpelInjectionConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a SpEL expression. diff --git a/java/ql/lib/semmle/code/java/security/SqlInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/SqlInjectionQuery.qll index 4e21af71332..c4638538a63 100644 --- a/java/ql/lib/semmle/code/java/security/SqlInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SqlInjectionQuery.qll @@ -11,29 +11,6 @@ import semmle.code.java.dataflow.FlowSources private import semmle.code.java.security.Sanitizers import semmle.code.java.security.QueryInjection -/** - * DEPRECATED: Use `QueryInjectionFlow` instead. - * - * A taint-tracking configuration for unvalidated user input that is used in SQL queries. - */ -deprecated class QueryInjectionFlowConfig extends TaintTracking::Configuration { - QueryInjectionFlowConfig() { this = "SqlInjectionLib::QueryInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof QueryInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or - node.getType() instanceof BoxedType or - node.getType() instanceof NumberType - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(AdditionalQueryInjectionTaintStep s).step(node1, node2) - } -} - /** * A taint-tracking configuration for unvalidated user input that is used in SQL queries. */ @@ -52,16 +29,6 @@ module QueryInjectionFlowConfig implements DataFlow::ConfigSig { /** Tracks flow of unvalidated user input that is used in SQL queries. */ module QueryInjectionFlow = TaintTracking::Global; -/** - * Implementation of `SqlTainted.ql`. This is extracted to a QLL so that it - * can be excluded from `SqlConcatenated.ql` to avoid overlapping results. - */ -deprecated predicate queryTaintedBy( - QueryInjectionSink query, DataFlow::PathNode source, DataFlow::PathNode sink -) { - any(QueryInjectionFlowConfig c).hasFlowPath(source, sink) and sink.getNode() = query -} - /** * Implementation of `SqlTainted.ql`. This is extracted to a QLL so that it * can be excluded from `SqlConcatenated.ql` to avoid overlapping results. diff --git a/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll b/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll index 14a8789d4f9..9ba848d1e0d 100644 --- a/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll +++ b/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll @@ -119,21 +119,6 @@ private class EncryptionInitializationSink extends DataFlow::Node { EncryptionInitializationSink() { sinkNode(this, "encryption-iv") } } -/** - * DEPRECATED: Use `StaticInitializationVectorFlow` instead. - * - * A config that tracks dataflow to initializing a cipher with a static initialization vector. - */ -deprecated class StaticInitializationVectorConfig extends TaintTracking::Configuration { - StaticInitializationVectorConfig() { this = "StaticInitializationVectorConfig" } - - override predicate isSource(DataFlow::Node source) { - source instanceof StaticInitializationVectorSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof EncryptionInitializationSink } -} - /** * A config that tracks dataflow to initializing a cipher with a static initialization vector. */ diff --git a/java/ql/lib/semmle/code/java/security/TemplateInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/TemplateInjectionQuery.qll index 07150b554aa..a9595b0f6f1 100644 --- a/java/ql/lib/semmle/code/java/security/TemplateInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TemplateInjectionQuery.qll @@ -5,42 +5,6 @@ import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.TemplateInjection -/** - * DEPRECATED: Use `TemplateInjectionFlow` instead. - * - * A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities - */ -deprecated class TemplateInjectionFlowConfig extends TaintTracking::Configuration { - TemplateInjectionFlowConfig() { this = "TemplateInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - source.(TemplateInjectionSource).hasState(state) - } - - override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { - sink.(TemplateInjectionSink).hasState(state) - } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof TemplateInjectionSanitizer - } - - override predicate isSanitizer(DataFlow::Node sanitizer, DataFlow::FlowState state) { - sanitizer.(TemplateInjectionSanitizerWithState).hasState(state) - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, node2) - } - - override predicate isAdditionalTaintStep( - DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2, - DataFlow::FlowState state2 - ) { - any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, state1, node2, state2) - } -} - /** A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities */ module TemplateInjectionFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof TemplateInjectionSource } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccessQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccessQuery.qll index bf25cd3117e..3239b387d8e 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccessQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccessQuery.qll @@ -6,23 +6,6 @@ import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.RequestForgery import semmle.code.java.security.UnsafeAndroidAccess -/** - * DEPRECATED: Use `FetchUntrustedResourceFlow` instead. - * - * A taint configuration tracking flow from untrusted inputs to a resource fetching call. - */ -deprecated class FetchUntrustedResourceConfiguration extends TaintTracking::Configuration { - FetchUntrustedResourceConfiguration() { this = "FetchUntrustedResourceConfiguration" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UrlResourceSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof RequestForgerySanitizer - } -} - /** * A taint configuration tracking flow from untrusted inputs to a resource fetching call. */ diff --git a/java/ql/lib/semmle/code/java/security/UnsafeCertTrustQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeCertTrustQuery.qll index 39a55118ec4..803e3836ab0 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeCertTrustQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeCertTrustQuery.qll @@ -5,23 +5,6 @@ import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.UnsafeCertTrust import semmle.code.java.security.Encryption -/** - * DEPRECATED: Use `SslEndpointIdentificationFlow` instead. - * - * A taint flow configuration for SSL connections created without a proper certificate trust configuration. - */ -deprecated class SslEndpointIdentificationFlowConfig extends TaintTracking::Configuration { - SslEndpointIdentificationFlowConfig() { this = "SslEndpointIdentificationFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof SslConnectionInit } - - override predicate isSink(DataFlow::Node sink) { sink instanceof SslConnectionCreation } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof SslUnsafeCertTrustSanitizer - } -} - /** * A taint flow configuration for SSL connections created without a proper certificate trust configuration. */ diff --git a/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolutionQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolutionQuery.qll index a43864f8b53..db629143d5c 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolutionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolutionQuery.qll @@ -5,27 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.UnsafeContentUriResolution -/** - * DEPRECATED: Use `UnsafeContentUriResolutionFlow` instead. - * - * A taint-tracking configuration to find paths from remote sources to content URI resolutions. - */ -deprecated class UnsafeContentResolutionConf extends TaintTracking::Configuration { - UnsafeContentResolutionConf() { this = "UnsafeContentResolutionConf" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ContentUriResolutionSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { - sanitizer instanceof ContentUriResolutionSanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(ContentUriResolutionAdditionalTaintStep s).step(node1, node2) - } -} - /** * A taint-tracking configuration to find paths from remote sources to content URI resolutions. */ diff --git a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll index 734ad4c89fe..739b2713780 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll @@ -314,25 +314,6 @@ private predicate isUnsafeDeserializationTaintStep(DataFlow::Node pred, DataFlow intentFlowsToParcel(pred, succ) } -/** - * DEPRECATED: Use `UnsafeDeserializationFlow` instead. - * - * Tracks flows from remote user input to a deserialization sink. - */ -deprecated class UnsafeDeserializationConfig extends TaintTracking::Configuration { - UnsafeDeserializationConfig() { this = "UnsafeDeserializationConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeDeserializationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { - isUnsafeDeserializationTaintStep(pred, succ) - } - - override predicate isSanitizer(DataFlow::Node node) { isUnsafeDeserializationSanitizer(node) } -} - /** Tracks flows from remote user input to a deserialization sink. */ private module UnsafeDeserializationConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } @@ -428,30 +409,6 @@ private predicate isUnsafeTypeAdditionalTaintStep(DataFlow::Node fromNode, DataF intentFlowsToParcel(fromNode, toNode) } -/** - * DEPRECATED: Use `UnsafeTypeFlow` instead. - * - * Tracks flow from a remote source to a type descriptor (e.g. a `java.lang.Class` instance) - * passed to a deserialization method. - * - * If this is user-controlled, arbitrary code could be executed while instantiating the user-specified type. - */ -deprecated class UnsafeTypeConfig extends TaintTracking2::Configuration { - UnsafeTypeConfig() { this = "UnsafeTypeConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeTypeSink } - - /** - * Holds if `fromNode` to `toNode` is a dataflow step that resolves a class - * or at least looks like resolving a class. - */ - override predicate isAdditionalTaintStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - isUnsafeTypeAdditionalTaintStep(fromNode, toNode) - } -} - /** * Tracks flow from a remote source to a type descriptor (e.g. a `java.lang.Class` instance) * passed to a deserialization method. @@ -480,21 +437,6 @@ module UnsafeTypeConfig implements DataFlow::ConfigSig { */ module UnsafeTypeFlow = TaintTracking::Global; -/** - * DEPRECATED: Use `EnableJacksonDefaultTypingFlow` instead. - * - * Tracks flow from `enableDefaultTyping` calls to a subsequent Jackson deserialization method call. - */ -deprecated class EnableJacksonDefaultTypingConfig extends DataFlow2::Configuration { - EnableJacksonDefaultTypingConfig() { this = "EnableJacksonDefaultTypingConfig" } - - override predicate isSource(DataFlow::Node src) { - any(EnableJacksonDefaultTyping ma).getQualifier() = src.asExpr() - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ObjectMapperReadQualifier } -} - private module EnableJacksonDefaultTypingConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { any(EnableJacksonDefaultTyping ma).getQualifier() = src.asExpr() @@ -523,32 +465,6 @@ private predicate isObjectMapperBuilderAdditionalFlowStep( ) } -/** - * DEPRECATED: Use `SafeObjectMapperFlow` instead. - * - * Tracks flow from calls that set a type validator to a subsequent Jackson deserialization method call, - * including across builder method calls. - * - * Such a Jackson deserialization method call is safe because validation will likely prevent instantiating unexpected types. - */ -deprecated class SafeObjectMapperConfig extends DataFlow2::Configuration { - SafeObjectMapperConfig() { this = "SafeObjectMapperConfig" } - - override predicate isSource(DataFlow::Node src) { - src instanceof SetPolymorphicTypeValidatorSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ObjectMapperReadQualifier } - - /** - * Holds if `fromNode` to `toNode` is a dataflow step - * that configures or creates an `ObjectMapper` via a builder. - */ - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - isObjectMapperBuilderAdditionalFlowStep(fromNode, toNode) - } -} - /** * Tracks flow from calls that set a type validator to a subsequent Jackson deserialization method call, * including across builder method calls. diff --git a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll index f10b0132b5a..8e5b177268d 100644 --- a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll @@ -19,32 +19,6 @@ private predicate isDebugCheck(Expr ex) { ) } -/** - * DEPRECATED: Use `WebviewDebugEnabledFlow` instead. - * - * A configuration to find instances of `setWebContentDebuggingEnabled` called with `true` values. - */ -deprecated class WebviewDebugEnabledConfig extends DataFlow::Configuration { - WebviewDebugEnabledConfig() { this = "WebviewDebugEnabledConfig" } - - override predicate isSource(DataFlow::Node node) { - node.asExpr().(BooleanLiteral).getBooleanValue() = true - } - - override predicate isSink(DataFlow::Node node) { - exists(MethodCall ma | - ma.getMethod().hasQualifiedName("android.webkit", "WebView", "setWebContentsDebuggingEnabled") and - node.asExpr() = ma.getArgument(0) - ) - } - - override predicate isBarrier(DataFlow::Node node) { - exists(Guard debug | isDebugCheck(debug) and debug.controls(node.asExpr().getBasicBlock(), _)) - or - node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass - } -} - /** * A webview debug sink node. */ diff --git a/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll b/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll index f315c55291e..dafc0ed50e1 100644 --- a/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll @@ -6,6 +6,3 @@ import java private import semmle.code.java.security.WebviewDebuggingEnabledQuery as WebviewDebuggingEnabledQuery - -deprecated class WebviewDebugEnabledConfig = - WebviewDebuggingEnabledQuery::WebviewDebugEnabledConfig; diff --git a/java/ql/lib/semmle/code/java/security/XmlParsers.qll b/java/ql/lib/semmle/code/java/security/XmlParsers.qll index 565efb4f59a..4a5b7121e60 100644 --- a/java/ql/lib/semmle/code/java/security/XmlParsers.qll +++ b/java/ql/lib/semmle/code/java/security/XmlParsers.qll @@ -833,27 +833,6 @@ class TransformerFactoryConfig extends TransformerConfig { } } -/** - * DEPRECATED. - * - * A dataflow configuration that identifies `TransformerFactory` and `SAXTransformerFactory` - * instances that have been safely configured. - */ -deprecated class SafeTransformerFactoryFlowConfig extends DataFlow3::Configuration { - SafeTransformerFactoryFlowConfig() { this = "XmlParsers::SafeTransformerFactoryFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SafeTransformerFactory } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall ma | - sink.asExpr() = ma.getQualifier() and - ma.getMethod().getDeclaringType() instanceof TransformerFactory - ) - } - - override int fieldFlowBranchLimit() { result = 0 } -} - /** * DEPRECATED. * diff --git a/java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll index 028ef4863d3..d437ca860d5 100644 --- a/java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll @@ -7,27 +7,6 @@ import semmle.code.java.security.XmlParsers import semmle.code.java.security.XsltInjection private import semmle.code.java.security.Sanitizers -/** - * DEPRECATED: Use `XsltInjectionFlow` instead. - * - * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. - */ -deprecated class XsltInjectionFlowConfig extends TaintTracking::Configuration { - XsltInjectionFlowConfig() { this = "XsltInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(XsltInjectionAdditionalTaintStep c).step(node1, node2) - } -} - /** * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. */ diff --git a/java/ql/lib/semmle/code/java/security/XxeLocalQuery.qll b/java/ql/lib/semmle/code/java/security/XxeLocalQuery.qll index f6bfa8850b2..f485137fc78 100644 --- a/java/ql/lib/semmle/code/java/security/XxeLocalQuery.qll +++ b/java/ql/lib/semmle/code/java/security/XxeLocalQuery.qll @@ -5,25 +5,6 @@ private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.security.XxeQuery -/** - * DEPRECATED: Use `XxeLocalFlow` instead. - * - * A taint-tracking configuration for unvalidated local user input that is used in XML external entity expansion. - */ -deprecated class XxeLocalConfig extends TaintTracking::Configuration { - XxeLocalConfig() { this = "XxeLocalConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof LocalUserInput } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XxeSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof XxeSanitizer } - - override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { - any(XxeAdditionalTaintStep s).step(n1, n2) - } -} - /** * A taint-tracking configuration for unvalidated local user input that is used in XML external entity expansion. */ diff --git a/java/ql/lib/semmle/code/java/security/XxeRemoteQuery.qll b/java/ql/lib/semmle/code/java/security/XxeRemoteQuery.qll index 9236a7185c3..58b1e5bfed1 100644 --- a/java/ql/lib/semmle/code/java/security/XxeRemoteQuery.qll +++ b/java/ql/lib/semmle/code/java/security/XxeRemoteQuery.qll @@ -5,25 +5,6 @@ private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.security.XxeQuery -/** - * DEPRECATED: Use `XxeFlow` instead. - * - * A taint-tracking configuration for unvalidated remote user input that is used in XML external entity expansion. - */ -deprecated class XxeConfig extends TaintTracking::Configuration { - XxeConfig() { this = "XxeConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XxeSink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof XxeSanitizer } - - override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { - any(XxeAdditionalTaintStep s).step(n1, n2) - } -} - /** * A taint-tracking configuration for unvalidated remote user input that is used in XML external entity expansion. */ diff --git a/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll b/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll index d08374e0318..55c1a043230 100644 --- a/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll +++ b/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll @@ -33,38 +33,6 @@ private class LengthRestrictedMethod extends Method { } } -/** - * DEPRECATED: Use `PolynomialRedosFlow` instead. - * - * A configuration for Polynomial ReDoS queries. - */ -deprecated class PolynomialRedosConfig extends TaintTracking::Configuration { - PolynomialRedosConfig() { this = "PolynomialRedosConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or - node.getType() instanceof BoxedType or - node.asExpr().(MethodCall).getMethod() instanceof LengthRestrictedMethod - } -} - -/** - * DEPRECATED: Use `PolynomialRedosFlow` instead. - * - * Holds if there is flow from `source` to `sink` that is matched against the regexp term `regexp` that is vulnerable to Polynomial ReDoS. - */ -deprecated predicate hasPolynomialReDoSResult( - DataFlow::PathNode source, DataFlow::PathNode sink, - SuperlinearBackTracking::PolynomialBackTrackingTerm regexp -) { - any(PolynomialRedosConfig config).hasFlowPath(source, sink) and - regexp.getRootTerm() = sink.getNode().(PolynomialRedosSink).getRegExp() -} - /** A configuration for Polynomial ReDoS queries. */ module PolynomialRedosConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { src instanceof ThreatModelFlowSource } diff --git a/java/ql/lib/semmle/code/java/security/regexp/RegexInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/regexp/RegexInjectionQuery.qll index 5d44139e02e..88710061819 100644 --- a/java/ql/lib/semmle/code/java/security/regexp/RegexInjectionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/regexp/RegexInjectionQuery.qll @@ -5,21 +5,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.regexp.RegexInjection -/** - * DEPRECATED: Use `RegexInjectionFlow` instead. - * - * A taint-tracking configuration for untrusted user input used to construct regular expressions. - */ -deprecated class RegexInjectionConfiguration extends TaintTracking::Configuration { - RegexInjectionConfiguration() { this = "RegexInjection" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof RegexInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof RegexInjectionSanitizer } -} - /** * A taint-tracking configuration for untrusted user input used to construct regular expressions. */ diff --git a/javascript/ql/lib/semmle/javascript/JSX.qll b/javascript/ql/lib/semmle/javascript/JSX.qll index 6fd7c775d4e..ed8a7b097a6 100644 --- a/javascript/ql/lib/semmle/javascript/JSX.qll +++ b/javascript/ql/lib/semmle/javascript/JSX.qll @@ -73,9 +73,6 @@ class JsxElement extends JsxNode { * That is, the name starts with a lowercase letter. */ predicate isHtmlElement() { this.getName().regexpMatch("[a-z].*") } - - /** DEPRECATED: Alias for isHtmlElement */ - deprecated predicate isHTMLElement() { this.isHtmlElement() } } /** @@ -256,7 +253,4 @@ class JsxPragma extends JSDocTag { * the result is `React.DOM`. */ string getDomName() { result = this.getDescription().trim() } - - /** DEPRECATED: Alias for getDomName */ - deprecated string getDOMName() { result = this.getDomName() } } diff --git a/javascript/ql/lib/semmle/javascript/NodeModuleResolutionImpl.qll b/javascript/ql/lib/semmle/javascript/NodeModuleResolutionImpl.qll index 7231143ed55..03b5bf93fb0 100644 --- a/javascript/ql/lib/semmle/javascript/NodeModuleResolutionImpl.qll +++ b/javascript/ql/lib/semmle/javascript/NodeModuleResolutionImpl.qll @@ -197,9 +197,6 @@ class MainModulePath extends PathExpr, @json_string { not exists(getExportRelativePath(this)) and result = "." } - /** DEPRECATED: Alias for getPackageJson */ - deprecated PackageJson getPackageJSON() { result = this.getPackageJson() } - override string getValue() { result = this.(JsonString).getValue() } override Folder getAdditionalSearchRoot(int priority) { @@ -258,9 +255,6 @@ private class FilesPath extends PathExpr, @json_string { /** Gets the `package.json` file in which this path occurs. */ PackageJson getPackageJson() { result = pkg } - /** DEPRECATED: Alias for getPackageJson */ - deprecated PackageJson getPackageJSON() { result = this.getPackageJson() } - override string getValue() { result = this.(JsonString).getValue() } override Folder getAdditionalSearchRoot(int priority) { diff --git a/javascript/ql/lib/semmle/javascript/SourceMaps.qll b/javascript/ql/lib/semmle/javascript/SourceMaps.qll index 17dbbd8ccdf..21fa7112132 100644 --- a/javascript/ql/lib/semmle/javascript/SourceMaps.qll +++ b/javascript/ql/lib/semmle/javascript/SourceMaps.qll @@ -23,7 +23,4 @@ class SourceMappingComment extends Comment { /** Gets the URL of the source map referenced by this comment. */ string getSourceMappingUrl() { result = url } - - /** DEPRECATED: Alias for getSourceMappingUrl */ - deprecated string getSourceMappingURL() { result = this.getSourceMappingUrl() } } diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index 9adfece36a0..93eb1d1dea0 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -434,36 +434,6 @@ module Directive { } } -/** DEPRECATED. Use `Directive::KnownDirective` instead. */ -deprecated class KnownDirective = Directive::KnownDirective; - -/** DEPRECATED. Use `Directive::StrictModeDecl` instead. */ -deprecated class StrictModeDecl = Directive::StrictModeDecl; - -/** DEPRECATED. Use `Directive::AsmJSDirective` instead. */ -deprecated class AsmJSDirective = Directive::AsmJSDirective; - -/** DEPRECATED. Use `Directive::BabelDirective` instead. */ -deprecated class BabelDirective = Directive::BabelDirective; - -/** 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/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index 1ab562b9524..24486b729c0 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -54,12 +54,3 @@ private class MyYmlNode extends Locatable instanceof YamlNode { override string toString() { result = YamlNode.super.toString() } } - -/** DEPRECATED: Alias for YamlNode */ -deprecated class YAMLNode = YamlNode; - -/** DEPRECATED: Alias for YamlValue */ -deprecated class YAMLValue = YamlValue; - -/** DEPRECATED: Alias for YamlScalar */ -deprecated class YAMLScalar = YamlScalar; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Connect.qll b/javascript/ql/lib/semmle/javascript/frameworks/Connect.qll index dbcbc0635db..f6ac5854f4d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Connect.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Connect.qll @@ -88,12 +88,6 @@ module Connect { override DataFlow::Node getServer() { result = server } - /** - * DEPRECATED: Use `getARouteHandlerNode` instead. - * Gets an argument that represents a route handler being registered. - */ - deprecated Expr getARouteHandlerExpr() { result = this.getARouteHandlerNode().asExpr() } - /** * Gets an argument that represents a route handler being registered. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/GWT.qll b/javascript/ql/lib/semmle/javascript/frameworks/GWT.qll index 345873719a6..7fa72c9a9f0 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/GWT.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/GWT.qll @@ -28,9 +28,6 @@ class GwtHeader extends InlineScript { result = e.getStringValue() ) } - - /** DEPRECATED: Alias for getGwtVersion */ - deprecated string getGWTVersion() { result = this.getGwtVersion() } } /** diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll index 096877900c9..ebfe042f4d0 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll @@ -183,14 +183,6 @@ module Vue { result = this.getAsClassComponent().getDecoratorOptions() } - /** - * DEPRECATED. Use `getOwnOptions().getASink()`. - * - * Gets the options passed to the Vue object, such as the object literal `{...}` in `new Vue{{...})` - * or the default export of a single-file component. - */ - deprecated DataFlow::Node getOwnOptionsObject() { result = this.getOwnOptions().asSink() } - /** * Gets the class implementing this Vue component, if any. * diff --git a/javascript/ql/test/tutorials/Validating RAML-based APIs/Osprey.qll b/javascript/ql/test/tutorials/Validating RAML-based APIs/Osprey.qll index 140bf59c4e6..c799d4f135f 100644 --- a/javascript/ql/test/tutorials/Validating RAML-based APIs/Osprey.qll +++ b/javascript/ql/test/tutorials/Validating RAML-based APIs/Osprey.qll @@ -47,9 +47,6 @@ class OspreyMethodDefinition extends MethodCallExpr { /** Get the API to which this method belongs. */ OspreyApi getApi() { this.getReceiver() = result.getAnAccess() } - /** DEPRECATED: Alias for getApi */ - deprecated OspreyApi getAPI() { result = this.getApi() } - /** Get the verb which this method implements. */ string getVerb() { result = this.getMethodName() } diff --git a/python/ql/lib/semmle/python/RegexTreeView.qll b/python/ql/lib/semmle/python/RegexTreeView.qll index 84cfaa3a4c7..daa7970ccd0 100644 --- a/python/ql/lib/semmle/python/RegexTreeView.qll +++ b/python/ql/lib/semmle/python/RegexTreeView.qll @@ -2,5 +2,4 @@ * Deprecated. Use `semmle.python.regexp.RegexTreeView` instead. */ -deprecated import regexp.RegexTreeView as Dep import Dep diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 3b1439511d1..359fa71744b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 3b1439511d1..359fa71744b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll index d0293522404..0ce4bc27790 100644 --- a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll @@ -664,14 +664,6 @@ module DataFlow { } } -deprecated private class DataFlowType extends TaintKind { - // this only exists to avoid an empty recursion error in the type checker - DataFlowType() { - this = "Data flow" and - 1 = 2 - } -} - pragma[noinline] private predicate dict_construct(ControlFlowNode itemnode, ControlFlowNode dictnode) { dictnode.(DictNode).getAValue() = itemnode diff --git a/python/ql/lib/semmle/python/regex.qll b/python/ql/lib/semmle/python/regex.qll index 0c96e504946..4a5a35d5b63 100644 --- a/python/ql/lib/semmle/python/regex.qll +++ b/python/ql/lib/semmle/python/regex.qll @@ -14,8 +14,3 @@ RegExpTerm getTermForExecution(Concepts::RegexExecution exec) { result.isRootTerm() ) } - -/** A StringLiteral used as a regular expression */ -deprecated class RegexString extends Regex { - RegexString() { this = RegExpTracking::regExpSource(_).asExpr() } -} diff --git a/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll b/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll index 6ac12e00e81..7e23554e058 100644 --- a/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll +++ b/python/ql/lib/semmle/python/regexp/internal/ParseRegExp.qll @@ -100,11 +100,6 @@ private module FindRegexMode { private string mode_from_node(DataFlow::Node node) { node = re_flag_tracker(result) } } -/** - * DEPRECATED: Use `RegExp` instead. - */ -deprecated class Regex = RegExp; - /** A StringLiteral used as a regular expression */ class RegExp extends Expr instanceof StringLiteral { DataFlow::Node use; diff --git a/python/ql/lib/semmle/python/security/SQL.qll b/python/ql/lib/semmle/python/security/SQL.qll index 6485402b78a..c77d82f3013 100644 --- a/python/ql/lib/semmle/python/security/SQL.qll +++ b/python/ql/lib/semmle/python/security/SQL.qll @@ -1,4 +1,2 @@ import python import semmle.python.dataflow.TaintTracking - -abstract deprecated class SqlInjectionSink extends TaintSink { } diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index d9bb9797c63..0e4bd6441e9 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -188,9 +188,6 @@ module LdapBind { * Holds if the binding process use SSL. */ abstract predicate useSsl(); - - /** DEPRECATED: Alias for useSsl */ - deprecated predicate useSSL() { this.useSsl() } } } @@ -215,9 +212,6 @@ class LdapBind extends DataFlow::Node instanceof LdapBind::Range { * Holds if the binding process use SSL. */ predicate useSsl() { super.useSsl() } - - /** DEPRECATED: Alias for useSsl */ - deprecated predicate useSSL() { this.useSsl() } } /** Provides classes for modeling SQL sanitization libraries. */ diff --git a/ruby/ql/lib/codeql/ruby/Concepts.qll b/ruby/ql/lib/codeql/ruby/Concepts.qll index 68a9eee8ff1..bd6faaacd69 100644 --- a/ruby/ql/lib/codeql/ruby/Concepts.qll +++ b/ruby/ql/lib/codeql/ruby/Concepts.qll @@ -693,14 +693,6 @@ module Http { class Request extends SC::Request instanceof Request::Range { /** Gets a node which returns the body of the response */ DataFlow::Node getResponseBody() { result = super.getResponseBody() } - - /** - * DEPRECATED: Use `getAUrlPart` instead. - * - * Gets a node that contributes to the URL of the request. - * Depending on the framework, a request may have multiple nodes which contribute to the URL. - */ - deprecated DataFlow::Node getURL() { result = Request::Range.super.getAUrlPart() } } /** Provides a class for modeling new HTTP requests. */ diff --git a/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll b/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll index 67f0f655794..dee31d8e901 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll @@ -40,9 +40,6 @@ class CfgNode extends CfgImpl::Node { /** Gets the file of this control flow node. */ final File getFile() { result = this.getLocation().getFile() } - /** DEPRECATED: Use `getAstNode` instead. */ - deprecated AstNode getNode() { result = this.getAstNode() } - /** Gets a successor node of a given type, if any. */ final CfgNode getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 3b1439511d1..359fa71744b 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index ee3105c3be7..c56501bad3e 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -1323,11 +1323,6 @@ class CallableNode extends StmtSequenceNode { * Gets a data flow node whose value is about to be returned by this callable. */ Node getAReturnNode() { result = getAReturnNode(callable) } - - /** - * DEPRECATED. Use `getAReturnNode` instead. - */ - deprecated Node getAReturningNode() { result = this.getAReturnNode() } } /** diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll b/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll index 928a9f60a5f..27d30950ad7 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll @@ -10,7 +10,4 @@ module Rack { import rack.internal.Request import rack.internal.Response::Public as Response import rack.internal.Utils - - /** DEPRECATED: Alias for App::AppCandidate */ - deprecated class AppCandidate = App::AppCandidate; } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll index 94c4a6fb037..fbb33ecd64b 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll @@ -39,31 +39,6 @@ private RP::PotentialResponseNode trackRackResponse(PotentialRequestHandler call * Provides modeling for Rack applications. */ module App { - /** - * DEPRECATED: Use `RequestHandler` instead. - * A class that may be a rack application. - * This is a class that has a `call` method that takes a single argument - * (traditionally called `env`) and returns a rack-compatible response. - */ - deprecated class AppCandidate extends DataFlow::ClassNode { - private RequestHandler call; - private RP::PotentialResponseNode resp; - - AppCandidate() { - call = this.getInstanceMethod("call") and - call.getNumberOfParameters() = 1 and - resp = trackRackResponse(call) - } - - /** - * Gets the environment of the request, which is the lone parameter to the `call` method. - */ - DataFlow::ParameterNode getEnv() { result = call.getParameter(0) } - - /** Gets the response returned from a request to this application. */ - RP::PotentialResponseNode getResponse() { result = resp } - } - /** * A callable node that looks like it implements the rack specification. */ diff --git a/ruby/ql/lib/codeql/ruby/security/InsecureDownloadQuery.qll b/ruby/ql/lib/codeql/ruby/security/InsecureDownloadQuery.qll index 69fae550194..9e813209b53 100644 --- a/ruby/ql/lib/codeql/ruby/security/InsecureDownloadQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/InsecureDownloadQuery.qll @@ -10,28 +10,6 @@ private import codeql.ruby.AST private import codeql.ruby.DataFlow import InsecureDownloadCustomizations::InsecureDownload -/** - * A taint tracking configuration for download of sensitive file through insecure connection. - * - * DEPRECATED: Use `InsecureDownloadFlow`. - */ -deprecated class Configuration extends DataFlow::Configuration { - Configuration() { this = "InsecureDownload" } - - override predicate isSource(DataFlow::Node source, DataFlow::FlowState label) { - source.(Source).getALabel() = label - } - - override predicate isSink(DataFlow::Node sink, DataFlow::FlowState label) { - sink.(Sink).getALabel() = label - } - - override predicate isBarrier(DataFlow::Node node) { - super.isBarrier(node) or - node instanceof Sanitizer - } -} - private module InsecureDownloadConfig implements DataFlow::StateConfigSig { class FlowState = Label::State; diff --git a/ruby/ql/lib/codeql/ruby/security/StoredXSSQuery.qll b/ruby/ql/lib/codeql/ruby/security/StoredXSSQuery.qll index 7254d12b8fe..b6520fedf4f 100644 --- a/ruby/ql/lib/codeql/ruby/security/StoredXSSQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/StoredXSSQuery.qll @@ -17,29 +17,6 @@ import codeql.ruby.TaintTracking */ deprecated module StoredXss { import XSS::StoredXss - - /** - * DEPRECATED. - * - * A taint-tracking configuration for reasoning about Stored XSS. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "StoredXss" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { - super.isSanitizer(node) or - node instanceof Sanitizer - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - isAdditionalXssTaintStep(node1, node2) - } - } - import TaintTracking::Global } diff --git a/ruby/ql/lib/codeql/ruby/security/internal/CleartextSources.qll b/ruby/ql/lib/codeql/ruby/security/internal/CleartextSources.qll index dc31b7f49ee..3338bbf65f7 100644 --- a/ruby/ql/lib/codeql/ruby/security/internal/CleartextSources.qll +++ b/ruby/ql/lib/codeql/ruby/security/internal/CleartextSources.qll @@ -289,17 +289,4 @@ module CleartextSources { override string describe() { result = "a call to " + name } } - - /** Holds if `nodeFrom` taints `nodeTo`. */ - deprecated predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(string name, ElementReference ref, LocalVariable hashVar | - // from `hsh[password] = "changeme"` to a `hsh[password]` read - nodeFrom.(HashKeyWriteSensitiveSource).getName() = name and - nodeTo.asExpr().getExpr() = ref and - ref.getArgument(0).getConstantValue().getStringlikeValue() = name and - nodeFrom.(HashKeyWriteSensitiveSource).getVariable() = hashVar and - ref.getReceiver().(VariableReadAccess).getVariable() = hashVar and - nodeFrom.asExpr().getASuccessor*() = nodeTo.asExpr() - ) - } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll index 3b1439511d1..359fa71744b 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll @@ -168,14 +168,6 @@ abstract deprecated class Configuration extends string { */ predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } - /** - * DEPRECATED: Use `FlowExploration` instead. - * - * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` - * measured in approximate number of interprocedural steps. - */ - deprecated int explorationLimit() { none() } - /** * Holds if hidden nodes should be included in the data flow graph. * diff --git a/swift/ql/lib/codeql/swift/elements/decl/TypeDecl.qll b/swift/ql/lib/codeql/swift/elements/decl/TypeDecl.qll index 9055f29d6ca..15c6bd1609c 100644 --- a/swift/ql/lib/codeql/swift/elements/decl/TypeDecl.qll +++ b/swift/ql/lib/codeql/swift/elements/decl/TypeDecl.qll @@ -75,13 +75,6 @@ class TypeDecl extends Generated::TypeDecl { */ TypeDecl getABaseTypeDecl() { result = this.getABaseType().(AnyGenericType).getDeclaration() } - /** - * Gets a declaration that has this type as its `index`th base type. - * - * DEPRECATED: The index is not very meaningful here. Use `getADerivedTypeDecl` or `getABaseTypeDecl`. - */ - deprecated TypeDecl getDerivedTypeDecl(int i) { result.getBaseTypeDecl(i) = this } - /** * Gets the declaration of any type derived from this type declaration. Expands protocols * added in extensions and expands type aliases. For example in the following code, `B` From 20dfdc966137d91ff3a6a746001da559f08b96b2 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 3 Sep 2024 08:58:50 +0200 Subject: [PATCH 285/334] delete some deprecated files --- java/ql/lib/semmle/code/java/security/PathCreation.qll | 7 ------- .../code/java/security/WebviewDubuggingEnabledQuery.qll | 8 -------- python/ql/lib/semmle/python/RegexTreeView.qll | 5 ----- python/ql/lib/semmle/python/security/SQL.qll | 2 -- 4 files changed, 22 deletions(-) delete mode 100644 java/ql/lib/semmle/code/java/security/PathCreation.qll delete mode 100644 java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll delete mode 100644 python/ql/lib/semmle/python/RegexTreeView.qll delete mode 100644 python/ql/lib/semmle/python/security/SQL.qll diff --git a/java/ql/lib/semmle/code/java/security/PathCreation.qll b/java/ql/lib/semmle/code/java/security/PathCreation.qll deleted file mode 100644 index cbca3ce74de..00000000000 --- a/java/ql/lib/semmle/code/java/security/PathCreation.qll +++ /dev/null @@ -1,7 +0,0 @@ -/** - * DEPRECATED. - * - * Models the different ways to create paths. Either by using `java.io.File`-related APIs or `java.nio.file.Path`-related APIs. - */ - -import java diff --git a/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll b/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll deleted file mode 100644 index dafc0ed50e1..00000000000 --- a/java/ql/lib/semmle/code/java/security/WebviewDubuggingEnabledQuery.qll +++ /dev/null @@ -1,8 +0,0 @@ -/** - * DEPRECATED: Use `semmle.code.java.security.WebviewDebuggingEnabledQuery` instead. - * - * Definitions for the Android Webview Debugging Enabled query - */ - -import java -private import semmle.code.java.security.WebviewDebuggingEnabledQuery as WebviewDebuggingEnabledQuery diff --git a/python/ql/lib/semmle/python/RegexTreeView.qll b/python/ql/lib/semmle/python/RegexTreeView.qll deleted file mode 100644 index daa7970ccd0..00000000000 --- a/python/ql/lib/semmle/python/RegexTreeView.qll +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Deprecated. Use `semmle.python.regexp.RegexTreeView` instead. - */ - -import Dep diff --git a/python/ql/lib/semmle/python/security/SQL.qll b/python/ql/lib/semmle/python/security/SQL.qll deleted file mode 100644 index c77d82f3013..00000000000 --- a/python/ql/lib/semmle/python/security/SQL.qll +++ /dev/null @@ -1,2 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking From 846882d22c664eccaa6e46785597b3e815ec20e3 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 3 Sep 2024 09:05:39 +0200 Subject: [PATCH 286/334] delete imports to a deleted file --- .../ql/automodel/src/AutomodelApplicationModeCharacteristics.qll | 1 - java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll | 1 - java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll | 1 - java/ql/src/Security/CWE/CWE-022/TaintedPath.ql | 1 - 4 files changed, 4 deletions(-) diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index 13fbbe5d36f..8c8ad1a2df4 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -6,7 +6,6 @@ private import java private import semmle.code.Location as Location private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.TaintTracking -private import semmle.code.java.security.PathCreation private import semmle.code.java.dataflow.ExternalFlow as ExternalFlow private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.code.java.security.ExternalAPIs as ExternalAPIs diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index 357b3a7573c..8985e6022eb 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -6,7 +6,6 @@ private import java private import semmle.code.Location as Location private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.TaintTracking -private import semmle.code.java.security.PathCreation private import semmle.code.java.dataflow.ExternalFlow as ExternalFlow private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.code.java.security.ExternalAPIs as ExternalAPIs diff --git a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll index 08a58bfa6e9..0055670d895 100644 --- a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll @@ -5,7 +5,6 @@ import semmle.code.java.dataflow.TaintTracking 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.security.PathCreation private import semmle.code.java.security.Sanitizers /** diff --git a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql index 3963442d648..9410a5f7c87 100644 --- a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql +++ b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql @@ -14,7 +14,6 @@ */ import java -import semmle.code.java.security.PathCreation import semmle.code.java.security.TaintedPathQuery import TaintedPathFlow::PathGraph From e76dcf9df9947e2f3f7b484de8bb03542695db85 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 3 Sep 2024 09:30:39 +0200 Subject: [PATCH 287/334] delete a test for a deleted file --- .../pathcreation/PathCreation.expected | 26 ------- .../pathcreation/PathCreation.java | 71 ------------------- .../pathcreation/PathCreation.ql | 5 -- 3 files changed, 102 deletions(-) delete mode 100644 java/ql/test/library-tests/pathcreation/PathCreation.expected delete mode 100644 java/ql/test/library-tests/pathcreation/PathCreation.java delete mode 100644 java/ql/test/library-tests/pathcreation/PathCreation.ql diff --git a/java/ql/test/library-tests/pathcreation/PathCreation.expected b/java/ql/test/library-tests/pathcreation/PathCreation.expected deleted file mode 100644 index 3ea0481c5f3..00000000000 --- a/java/ql/test/library-tests/pathcreation/PathCreation.expected +++ /dev/null @@ -1,26 +0,0 @@ -WARNING: type 'PathCreation' has been deprecated and may be removed in future (PathCreation.ql:4,6-18) -| PathCreation.java:13:18:13:32 | new File(...) | PathCreation.java:13:27:13:31 | "dir" | -| PathCreation.java:14:19:14:40 | new File(...) | PathCreation.java:14:28:14:32 | "dir" | -| PathCreation.java:14:19:14:40 | new File(...) | PathCreation.java:14:35:14:39 | "sub" | -| PathCreation.java:18:18:18:49 | new File(...) | PathCreation.java:18:44:18:48 | "sub" | -| PathCreation.java:18:27:18:41 | new File(...) | PathCreation.java:18:36:18:40 | "dir" | -| PathCreation.java:22:18:22:41 | new File(...) | PathCreation.java:22:27:22:40 | new URI(...) | -| PathCreation.java:26:18:26:31 | of(...) | PathCreation.java:26:26:26:30 | "dir" | -| PathCreation.java:27:19:27:39 | of(...) | PathCreation.java:27:27:27:31 | "dir" | -| PathCreation.java:27:19:27:39 | of(...) | PathCreation.java:27:34:27:38 | "sub" | -| PathCreation.java:31:18:31:40 | of(...) | PathCreation.java:31:26:31:39 | new URI(...) | -| PathCreation.java:35:18:35:33 | get(...) | PathCreation.java:35:28:35:32 | "dir" | -| PathCreation.java:36:19:36:41 | get(...) | PathCreation.java:36:29:36:33 | "dir" | -| PathCreation.java:36:19:36:41 | get(...) | PathCreation.java:36:36:36:40 | "sub" | -| PathCreation.java:40:18:40:42 | get(...) | PathCreation.java:40:28:40:41 | new URI(...) | -| PathCreation.java:44:18:44:56 | getPath(...) | PathCreation.java:44:51:44:55 | "dir" | -| PathCreation.java:45:19:45:64 | getPath(...) | PathCreation.java:45:52:45:56 | "dir" | -| PathCreation.java:45:19:45:64 | getPath(...) | PathCreation.java:45:59:45:63 | "sub" | -| PathCreation.java:49:18:49:31 | of(...) | PathCreation.java:49:26:49:30 | "dir" | -| PathCreation.java:49:18:49:53 | resolveSibling(...) | PathCreation.java:49:48:49:52 | "sub" | -| PathCreation.java:53:18:53:31 | of(...) | PathCreation.java:53:26:53:30 | "dir" | -| PathCreation.java:53:18:53:46 | resolve(...) | PathCreation.java:53:41:53:45 | "sub" | -| PathCreation.java:57:25:57:45 | new FileWriter(...) | PathCreation.java:57:40:57:44 | "dir" | -| PathCreation.java:61:25:61:45 | new FileReader(...) | PathCreation.java:61:40:61:44 | "dir" | -| PathCreation.java:65:32:65:58 | new FileOutputStream(...) | PathCreation.java:65:53:65:57 | "dir" | -| PathCreation.java:69:31:69:56 | new FileInputStream(...) | PathCreation.java:69:51:69:55 | "dir" | diff --git a/java/ql/test/library-tests/pathcreation/PathCreation.java b/java/ql/test/library-tests/pathcreation/PathCreation.java deleted file mode 100644 index fcd1eed3e28..00000000000 --- a/java/ql/test/library-tests/pathcreation/PathCreation.java +++ /dev/null @@ -1,71 +0,0 @@ -import java.io.File; -import java.io.FileWriter; -import java.io.FileReader; -import java.io.FileOutputStream; -import java.io.FileInputStream; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.FileSystems; -import java.net.URI; - -class PathCreation { - public void testNewFileWithString() { - File f = new File("dir"); - File f2 = new File("dir", "sub"); - } - - public void testNewFileWithFileString() { - File f = new File(new File("dir"), "sub"); - } - - public void testNewFileWithURI() throws java.net.URISyntaxException { - File f = new File(new URI("dir")); - } - - public void testPathOfWithString() { - Path p = Path.of("dir"); - Path p2 = Path.of("dir", "sub"); - } - - public void testPathOfWithURI() throws java.net.URISyntaxException { - Path p = Path.of(new URI("dir")); - } - - public void testPathsGetWithString() { - Path p = Paths.get("dir"); - Path p2 = Paths.get("dir", "sub"); - } - - public void testPathsGetWithURI() throws java.net.URISyntaxException { - Path p = Paths.get(new URI("dir")); - } - - public void testFileSystemGetPathWithString() { - Path p = FileSystems.getDefault().getPath("dir"); - Path p2 = FileSystems.getDefault().getPath("dir", "sub"); - } - - public void testPathResolveSiblingWithString() { - Path p = Path.of("dir").resolveSibling("sub"); - } - - public void testPathResolveWithString() { - Path p = Path.of("dir").resolve("sub"); - } - - public void testNewFileWriterWithString() throws java.io.IOException { - FileWriter fw = new FileWriter("dir"); - } - - public void testNewFileReaderWithString() throws java.io.FileNotFoundException { - FileReader fr = new FileReader("dir"); - } - - public void testNewFileOutputStreamWithString() throws java.io.FileNotFoundException { - FileOutputStream fos = new FileOutputStream("dir"); - } - - public void testNewFileInputStreamWithString() throws java.io.FileNotFoundException { - FileInputStream fis = new FileInputStream("dir"); - } -} diff --git a/java/ql/test/library-tests/pathcreation/PathCreation.ql b/java/ql/test/library-tests/pathcreation/PathCreation.ql deleted file mode 100644 index fb27c538319..00000000000 --- a/java/ql/test/library-tests/pathcreation/PathCreation.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java -import semmle.code.java.security.PathCreation - -from PathCreation path -select path, path.getAnInput() From e2b16bd8f911e11f42a1c99aaeb580c6272b0c5c Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 3 Sep 2024 22:06:07 +0200 Subject: [PATCH 288/334] add some change-notes --- .../change-notes/2024-09-03-outdated-deprecations.md | 11 +++++++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 6 ++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 5 +++++ .../change-notes/2024-09-03-outdated-deprecations.md | 11 +++++++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 10 ++++++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 9 +++++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 8 ++++++++ .../change-notes/2024-09-03-outdated-deprecations.md | 5 +++++ 8 files changed, 65 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 csharp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 go/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 java/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 javascript/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 ruby/ql/lib/change-notes/2024-09-03-outdated-deprecations.md create mode 100644 swift/ql/lib/change-notes/2024-09-03-outdated-deprecations.md diff --git a/cpp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/cpp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..9db308c5d62 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,11 @@ +--- +category: breaking +--- +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted the deprecated `hasQualifiedName` and `isDefined` predicates from the `Declaration` class, use `hasGlobalName` and `hasDefinition` respectively instead. +* Deleted the `getFullSignature` predicate from the `Function` class, use `getIdentityString(Declaration)` from `semmle.code.cpp.Print` instead. +* Deleted the deprecated `freeCall` predicate from `Alloc.qll`. Use `DeallocationExpr` instead. +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. +* Deleted the deprecated `getFieldExpr` predicate from `ClassAggregateLiteral`, use `getAFieldExpr` instead. +* Deleted the deprecated `getElementExpr` predicate from `ArrayOrVectorAggregateLiteral`, use `getAnElementExpr` instead. diff --git a/csharp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/csharp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..40571b3273e --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,6 @@ +--- +category: breaking +--- +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. diff --git a/go/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/go/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..4826864fcc2 --- /dev/null +++ b/go/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,5 @@ +--- +category: breaking +--- +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. diff --git a/java/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/java/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..a1477ef25ce --- /dev/null +++ b/java/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,11 @@ +--- +category: breaking +--- +* Deleted the deprecated `ProcessBuilderConstructor`, `MethodProcessBuilderCommand`, and `MethodRuntimeExec` from `JDK.qll`. +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted the deprecated `getURI` predicate from `CamelJavaDslToDecl` and `SpringCamelXmlToElement`, use `getUri` instead. +* Deleted the deprecated `ExecCallable` class from `ExternalProcess.qll`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted the deprecated `PathCreation.qll` file. +* Deleted the deprecated `WebviewDubuggingEnabledQuery.qll` file. diff --git a/javascript/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/javascript/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..cb356514160 --- /dev/null +++ b/javascript/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,10 @@ +--- +category: breaking +--- +* Deleted the deprecated `isHTMLElement` and `getDOMName` predicates from the JSX library, use `isHtmlElement` and `getDomName` respectively instead. +* Deleted the deprecated `getPackageJSON` predicate from the `SourceMappingComment` class, use `SourceMappingComment` instead. +* Deleted many deprecated directives from the `Stmt.qll` file, use the `Directive::` module instead. +* Deleted the deprecated `YAMLNode`, `YAMLValue`, and `YAMLScalar` classes from the YAML libraries, use `YamlNode`, `YamlValue`, and `YamlScalar` respectively instead. +* Deleted the deprecated `getARouteHandlerExpr` predicate from `Connect.qll`, use `getARouteHandlerNode` instead. +* Deleted the deprecated `getGWTVersion` predicate from `GWT.qll`, use `getGwtVersion` instead. +* Deleted the deprecated `getOwnOptionsObject` predicate from `Vue.qll`, use `getOwnOptions().getASink()` instead. diff --git a/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..cb738633302 --- /dev/null +++ b/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,9 @@ +--- +category: breaking +--- +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. +* Deleted the deprecated `semmle.python.RegexTreeView` module, use `semmle.python.regexp.RegexTreeView` instead. +* Deleted the deprecated `RegexString` class from `regex.qll`. +* Deleted the deprecated `Regex` class, use `Regex` instead. +* Deleted the deprecated `semmle/python/security/SQL.qll` file. +* Deleted the deprecated `useSSL` predicates from the LDAP libraries, use `useSsl` instead. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/ruby/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..7f7c3258fb8 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,8 @@ +--- +category: breaking +--- +* Deleted the deprecated `getURL` predicate the `Http::Request` class, use `getAUrlPart` instead. +* Deleted the deprecated `getNode` predicate from the `CfgNode` class, use `getAstNode` instead. +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. diff --git a/swift/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/swift/ql/lib/change-notes/2024-09-03-outdated-deprecations.md new file mode 100644 index 00000000000..2970b481c50 --- /dev/null +++ b/swift/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -0,0 +1,5 @@ +--- +category: breaking +--- +* Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. +* Deleted the deprecated `getDerivedTypeDecl` predicate from the `TypeDecl` class, use `getADerivedTypeDecl` or `getABaseTypeDecl` instead. \ No newline at end of file From 3f5a146a1c4c6ab24898dd7b784210a063ac78d7 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Tue, 3 Sep 2024 15:25:43 -0700 Subject: [PATCH 289/334] Reformulate bullet points --- .github/pull_request_template.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index ef7e5b92ebb..89d6d3d66e2 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,12 +2,12 @@ #### All query authors -- [ ] Add a change note if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md) in this repository. +- [ ] A change note is added if necessary. See [the documentation](https://github.com/github/codeql/blob/main/docs/change-notes.md) in this repository. - [ ] All new queries have appropriate `.qhelp`. See [the documentation](https://github.com/github/codeql/blob/main/docs/query-help-style-guide.md) in this repository. - [ ] QL tests are added if necessary. See [Testing custom queries](https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/testing-custom-queries) in the GitHub documentation. - [ ] New and changed queries have correct query metadata. See [the documentation](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md) in this repository. #### Internal query authors only -- [ ] If this PR makes significant changes to `.ql`, `.qll`, or `.qhelp` files, make sure that autofixes generated based on these changes are valid. See [the documentation](https://github.com/github/codeql-team/blob/main/docs/best-practices/validating-autofix-for-query-changes.md) (internal access required). -- [ ] Test your changes [at scale](https://github.com/github/codeql-dca/) (internal access required). +- [ ] Autofixes generated based on these changes are valid, only needed if this PR makes significant changes to `.ql`, `.qll`, or `.qhelp` files. See [the documentation](https://github.com/github/codeql-team/blob/main/docs/best-practices/validating-autofix-for-query-changes.md) (internal access required). +- [ ] Changes are validated [at scale](https://github.com/github/codeql-dca/) (internal access required). From 3eeb79c59926fa7cef697ea7929889e53ae77d89 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 00:19:10 +0000 Subject: [PATCH 290/334] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 287 ++++++++---------- .../library-coverage/coverage.rst | 20 +- .../library-coverage/coverage.csv | 11 +- .../library-coverage/coverage.rst | 8 +- 4 files changed, 145 insertions(+), 181 deletions(-) diff --git a/go/documentation/library-coverage/coverage.csv b/go/documentation/library-coverage/coverage.csv index 093aa1ec57e..364e17aa94b 100644 --- a/go/documentation/library-coverage/coverage.csv +++ b/go/documentation/library-coverage/coverage.csv @@ -1,166 +1,121 @@ -package,sink,source,summary,sink:command-injection,sink:credentials-key,sink:jwt,sink:log-injection,sink:path-injection,sink:regex-use[0],sink:regex-use[1],sink:regex-use[c],sink:request-forgery,sink:request-forgery[TCP Addr + Port],sink:url-redirection,sink:url-redirection[0],sink:url-redirection[receiver],sink:xpath-injection,source:remote,summary:taint,summary:value -,,,8,,,,,,,,,,,,,,,,3,5 -archive/tar,,,5,,,,,,,,,,,,,,,,5, -archive/zip,,,6,,,,,,,,,,,,,,,,6, -bufio,,,17,,,,,,,,,,,,,,,,17, -bytes,,,43,,,,,,,,,,,,,,,,43, -clevergo.tech/clevergo,1,,,,,,,,,,,,,,,1,,,, -compress/bzip2,,,1,,,,,,,,,,,,,,,,1, -compress/flate,,,4,,,,,,,,,,,,,,,,4, -compress/gzip,,,3,,,,,,,,,,,,,,,,3, -compress/lzw,,,1,,,,,,,,,,,,,,,,1, -compress/zlib,,,4,,,,,,,,,,,,,,,,4, -container/heap,,,5,,,,,,,,,,,,,,,,5, -container/list,,,20,,,,,,,,,,,,,,,,20, -container/ring,,,5,,,,,,,,,,,,,,,,5, -context,,,5,,,,,,,,,,,,,,,,5, -crypto,,,1,,,,,,,,,,,,,,,,1, -crypto/cipher,,,3,,,,,,,,,,,,,,,,3, -crypto/rsa,,,2,,,,,,,,,,,,,,,,2, -crypto/tls,,,3,,,,,,,,,,,,,,,,3, -crypto/x509,,,1,,,,,,,,,,,,,,,,1, -database/sql,,,7,,,,,,,,,,,,,,,,7, -database/sql/driver,,,4,,,,,,,,,,,,,,,,4, -encoding,,,4,,,,,,,,,,,,,,,,4, -encoding/ascii85,,,2,,,,,,,,,,,,,,,,2, -encoding/asn1,,,8,,,,,,,,,,,,,,,,8, -encoding/base32,,,3,,,,,,,,,,,,,,,,3, -encoding/base64,,,3,,,,,,,,,,,,,,,,3, -encoding/binary,,,2,,,,,,,,,,,,,,,,2, -encoding/csv,,,5,,,,,,,,,,,,,,,,5, -encoding/gob,,,7,,,,,,,,,,,,,,,,7, -encoding/hex,,,3,,,,,,,,,,,,,,,,3, -encoding/json,,,14,,,,,,,,,,,,,,,,14, -encoding/pem,,,3,,,,,,,,,,,,,,,,3, -encoding/xml,,,23,,,,,,,,,,,,,,,,23, -errors,,,3,,,,,,,,,,,,,,,,3, -expvar,,,6,,,,,,,,,,,,,,,,6, -fmt,3,,16,,,,3,,,,,,,,,,,,16, -github.com/ChrisTrenkamp/goxpath,3,,,,,,,,,,,,,,,,3,,, -github.com/Sirupsen/logrus,118,,,,,,118,,,,,,,,,,,,, -github.com/antchfx/htmlquery,4,,,,,,,,,,,,,,,,4,,, -github.com/antchfx/jsonquery,4,,,,,,,,,,,,,,,,4,,, -github.com/antchfx/xmlquery,8,,,,,,,,,,,,,,,,8,,, -github.com/antchfx/xpath,4,,,,,,,,,,,,,,,,4,,, -github.com/appleboy/gin-jwt,1,,,,1,,,,,,,,,,,,,,, -github.com/astaxie/beego,16,6,7,,,,11,4,,,,,,1,,,,6,7, -github.com/astaxie/beego/context,2,15,1,,,,,1,,,,,,1,,,,15,1, -github.com/astaxie/beego/logs,22,,,,,,22,,,,,,,,,,,,, -github.com/astaxie/beego/utils,1,,13,,,,1,,,,,,,,,,,,13, -github.com/beego/beego,16,6,7,,,,11,4,,,,,,1,,,,6,7, -github.com/beego/beego/context,2,15,1,,,,,1,,,,,,1,,,,15,1, -github.com/beego/beego/core/logs,22,,,,,,22,,,,,,,,,,,,, -github.com/beego/beego/core/utils,1,,13,,,,1,,,,,,,,,,,,13, -github.com/beego/beego/logs,22,,,,,,22,,,,,,,,,,,,, -github.com/beego/beego/server/web,16,6,7,,,,11,4,,,,,,1,,,,6,7, -github.com/beego/beego/server/web/context,2,15,1,,,,,1,,,,,,1,,,,15,1, -github.com/beego/beego/utils,1,,13,,,,1,,,,,,,,,,,,13, -github.com/clevergo/clevergo,1,,,,,,,,,,,,,,,1,,,, -github.com/codeskyblue/go-sh,4,,,4,,,,,,,,,,,,,,,, -github.com/couchbase/gocb,,,18,,,,,,,,,,,,,,,,18, -github.com/couchbaselabs/gocb,,,18,,,,,,,,,,,,,,,,18, -github.com/crankycoder/xmlpath,2,,,,,,,,,,,,,,,,2,,, -github.com/cristalhq/jwt,1,,,,1,,,,,,,,,,,,,,, -github.com/davecgh/go-spew/spew,9,,,,,,9,,,,,,,,,,,,, -github.com/dgrijalva/jwt-go,3,,9,,2,1,,,,,,,,,,,,,9, -github.com/elazarl/goproxy,2,2,2,,,,2,,,,,,,,,,,2,2, -github.com/emicklei/go-restful,,7,,,,,,,,,,,,,,,,7,, -github.com/evanphx/json-patch,,,12,,,,,,,,,,,,,,,,12, -github.com/form3tech-oss/jwt-go,2,,,,2,,,,,,,,,,,,,,, -github.com/gin-gonic/gin,3,46,2,,,,,3,,,,,,,,,,46,2, -github.com/go-chi/chi,,3,,,,,,,,,,,,,,,,3,, -github.com/go-chi/jwtauth,1,,,,1,,,,,,,,,,,,,,, -github.com/go-jose/go-jose,2,,,,2,,,,,,,,,,,,,,, -github.com/go-jose/go-jose/jwt,1,,4,,,1,,,,,,,,,,,,,4, -github.com/go-kit/kit/auth/jwt,1,,,,1,,,,,,,,,,,,,,, -github.com/go-pg/pg/orm,,,6,,,,,,,,,,,,,,,,6, -github.com/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,2,,, -github.com/gobwas/ws,,2,,,,,,,,,,,,,,,,2,, -github.com/gofiber/fiber,5,,,,,,,4,,,,,,,,1,,,, -github.com/gogf/gf-jwt,1,,,,1,,,,,,,,,,,,,,, -github.com/going/toolkit/xmlpath,2,,,,,,,,,,,,,,,,2,,, -github.com/golang-jwt/jwt,3,,11,,2,1,,,,,,,,,,,,,11, -github.com/golang/glog,90,,,,,,90,,,,,,,,,,,,, -github.com/golang/protobuf/proto,,,4,,,,,,,,,,,,,,,,4, -github.com/gorilla/mux,,1,,,,,,,,,,,,,,,,1,, -github.com/gorilla/websocket,,3,,,,,,,,,,,,,,,,3,, -github.com/jbowtie/gokogiri/xml,4,,,,,,,,,,,,,,,,4,,, -github.com/jbowtie/gokogiri/xpath,1,,,,,,,,,,,,,,,,1,,, -github.com/json-iterator/go,,,4,,,,,,,,,,,,,,,,4, -github.com/kataras/iris/context,6,,,,,,,6,,,,,,,,,,,, -github.com/kataras/iris/middleware/jwt,2,,,,2,,,,,,,,,,,,,,, -github.com/kataras/iris/server/web/context,6,,,,,,,6,,,,,,,,,,,, -github.com/kataras/jwt,5,,,,5,,,,,,,,,,,,,,, -github.com/labstack/echo,3,12,2,,,,,2,,,,,,1,,,,12,2, -github.com/lestrrat-go/jwx,1,,,,1,,,,,,,,,,,,,,, -github.com/lestrrat-go/jwx/jwk,1,,,,1,,,,,,,,,,,,,,, -github.com/lestrrat-go/libxml2/parser,3,,,,,,,,,,,,,,,,3,,, -github.com/lestrrat/go-jwx/jwk,1,,,,1,,,,,,,,,,,,,,, -github.com/masterzen/xmlpath,2,,,,,,,,,,,,,,,,2,,, -github.com/moovweb/gokogiri/xml,4,,,,,,,,,,,,,,,,4,,, -github.com/moovweb/gokogiri/xpath,1,,,,,,,,,,,,,,,,1,,, -github.com/ory/fosite/token/jwt,2,,,,2,,,,,,,,,,,,,,, -github.com/revel/revel,2,23,10,,,,,1,,,,,,1,,,,23,10, -github.com/robfig/revel,2,23,10,,,,,1,,,,,,1,,,,23,10, -github.com/santhosh-tekuri/xpathparser,2,,,,,,,,,,,,,,,,2,,, -github.com/sendgrid/sendgrid-go/helpers/mail,,,1,,,,,,,,,,,,,,,,1, -github.com/sirupsen/logrus,118,,,,,,118,,,,,,,,,,,,, -github.com/spf13/afero,34,,,,,,,34,,,,,,,,,,,, -github.com/square/go-jose,2,,,,2,,,,,,,,,,,,,,, -github.com/square/go-jose/jwt,1,,4,,,1,,,,,,,,,,,,,4, -github.com/valyala/fasthttp,35,50,5,,,,,8,,,,17,8,2,,,,50,5, -go.uber.org/zap,33,,11,,,,33,,,,,,,,,,,,11, -golang.org/x/crypto/ssh,4,,,4,,,,,,,,,,,,,,,, -golang.org/x/net/context,,,5,,,,,,,,,,,,,,,,5, -golang.org/x/net/html,,,16,,,,,,,,,,,,,,,,16, -golang.org/x/net/websocket,,2,,,,,,,,,,,,,,,,2,, -google.golang.org/protobuf/internal/encoding/text,,,1,,,,,,,,,,,,,,,,1, -google.golang.org/protobuf/internal/impl,,,2,,,,,,,,,,,,,,,,2, -google.golang.org/protobuf/proto,,,8,,,,,,,,,,,,,,,,8, -google.golang.org/protobuf/reflect/protoreflect,,,1,,,,,,,,,,,,,,,,1, -gopkg.in/couchbase/gocb,,,18,,,,,,,,,,,,,,,,18, -gopkg.in/glog,90,,,,,,90,,,,,,,,,,,,, -gopkg.in/go-jose/go-jose,2,,,,2,,,,,,,,,,,,,,, -gopkg.in/go-jose/go-jose/jwt,1,,4,,,1,,,,,,,,,,,,,4, -gopkg.in/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,2,,, -gopkg.in/macaron,1,12,1,,,,,,,,,,,,,1,,12,1, -gopkg.in/square/go-jose,2,,,,2,,,,,,,,,,,,,,, -gopkg.in/square/go-jose/jwt,1,,4,,,1,,,,,,,,,,,,,4, -gopkg.in/xmlpath,2,,,,,,,,,,,,,,,,2,,, -gopkg.in/yaml,,,9,,,,,,,,,,,,,,,,9, -html,,,2,,,,,,,,,,,,,,,,2, -html/template,,,6,,,,,,,,,,,,,,,,6, -io,,,19,,,,,,,,,,,,,,,,19, -io/fs,,,12,,,,,,,,,,,,,,,,12, -io/ioutil,5,,2,,,,,5,,,,,,,,,,,2, -k8s.io/api/core,,,10,,,,,,,,,,,,,,,,10, -k8s.io/apimachinery/pkg/runtime,,,47,,,,,,,,,,,,,,,,47, -k8s.io/klog,90,,,,,,90,,,,,,,,,,,,, -launchpad.net/xmlpath,2,,,,,,,,,,,,,,,,2,,, -log,20,,3,,,,20,,,,,,,,,,,,3, -math/big,,,1,,,,,,,,,,,,,,,,1, -mime,,,5,,,,,,,,,,,,,,,,5, -mime/multipart,,,8,,,,,,,,,,,,,,,,8, -mime/quotedprintable,,,1,,,,,,,,,,,,,,,,1, -net,,,20,,,,,,,,,,,,,,,,20, -net/http,2,16,22,,,,,1,,,,,,,1,,,16,22, -net/http/httputil,,,10,,,,,,,,,,,,,,,,10, -net/mail,,,6,,,,,,,,,,,,,,,,6, -net/textproto,,,19,,,,,,,,,,,,,,,,19, -net/url,,,23,,,,,,,,,,,,,,,,23, -nhooyr.io/websocket,,2,,,,,,,,,,,,,,,,2,, -os,27,,4,1,,,,26,,,,,,,,,,,4, -os/exec,2,,,2,,,,,,,,,,,,,,,, -path,,,5,,,,,,,,,,,,,,,,5, -path/filepath,,,13,,,,,,,,,,,,,,,,13, -reflect,,,37,,,,,,,,,,,,,,,,37, -regexp,10,,20,,,,,,3,3,4,,,,,,,,20, -sort,,,1,,,,,,,,,,,,,,,,1, -strconv,,,9,,,,,,,,,,,,,,,,9, -strings,,,34,,,,,,,,,,,,,,,,34, -sync,,,10,,,,,,,,,,,,,,,,10, -sync/atomic,,,24,,,,,,,,,,,,,,,,24, -syscall,5,,8,5,,,,,,,,,,,,,,,8, -text/scanner,,,3,,,,,,,,,,,,,,,,3, -text/tabwriter,,,1,,,,,,,,,,,,,,,,1, -text/template,,,6,,,,,,,,,,,,,,,,6, +package,sink,source,summary,sink:command-injection,sink:credentials-key,sink:jwt,sink:path-injection,sink:regex-use[0],sink:regex-use[1],sink:regex-use[c],sink:request-forgery,sink:request-forgery[TCP Addr + Port],sink:url-redirection,sink:url-redirection[0],sink:url-redirection[receiver],sink:xpath-injection,source:environment,source:file,source:remote,summary:taint,summary:value +,,,8,,,,,,,,,,,,,,,,,3,5 +archive/tar,,,5,,,,,,,,,,,,,,,,,5, +archive/zip,,,6,,,,,,,,,,,,,,,,,6, +bufio,,,17,,,,,,,,,,,,,,,,,17, +bytes,,,43,,,,,,,,,,,,,,,,,43, +clevergo.tech/clevergo,1,,,,,,,,,,,,,,1,,,,,, +compress/bzip2,,,1,,,,,,,,,,,,,,,,,1, +compress/flate,,,4,,,,,,,,,,,,,,,,,4, +compress/gzip,,,3,,,,,,,,,,,,,,,,,3, +compress/lzw,,,1,,,,,,,,,,,,,,,,,1, +compress/zlib,,,4,,,,,,,,,,,,,,,,,4, +container/heap,,,5,,,,,,,,,,,,,,,,,5, +container/list,,,20,,,,,,,,,,,,,,,,,20, +container/ring,,,5,,,,,,,,,,,,,,,,,5, +context,,,5,,,,,,,,,,,,,,,,,5, +crypto,,,10,,,,,,,,,,,,,,,,,10, +database/sql,,,11,,,,,,,,,,,,,,,,,11, +encoding,,,77,,,,,,,,,,,,,,,,,77, +errors,,,3,,,,,,,,,,,,,,,,,3, +expvar,,,6,,,,,,,,,,,,,,,,,6, +fmt,,,16,,,,,,,,,,,,,,,,,16, +github.com/ChrisTrenkamp/goxpath,3,,,,,,,,,,,,,,,3,,,,, +github.com/antchfx/htmlquery,4,,,,,,,,,,,,,,,4,,,,, +github.com/antchfx/jsonquery,4,,,,,,,,,,,,,,,4,,,,, +github.com/antchfx/xmlquery,8,,,,,,,,,,,,,,,8,,,,, +github.com/antchfx/xpath,4,,,,,,,,,,,,,,,4,,,,, +github.com/appleboy/gin-jwt,1,,,,1,,,,,,,,,,,,,,,, +github.com/astaxie/beego,7,21,21,,,,5,,,,,,2,,,,,,21,21, +github.com/beego/beego,14,42,42,,,,10,,,,,,4,,,,,,42,42, +github.com/caarlos0/env,,5,2,,,,,,,,,,,,,,5,,,1,1 +github.com/clevergo/clevergo,1,,,,,,,,,,,,,,1,,,,,, +github.com/codeskyblue/go-sh,4,,,4,,,,,,,,,,,,,,,,, +github.com/couchbase/gocb,,,18,,,,,,,,,,,,,,,,,18, +github.com/couchbaselabs/gocb,,,18,,,,,,,,,,,,,,,,,18, +github.com/crankycoder/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +github.com/cristalhq/jwt,1,,,,1,,,,,,,,,,,,,,,, +github.com/dgrijalva/jwt-go,3,,9,,2,1,,,,,,,,,,,,,,9, +github.com/elazarl/goproxy,,2,2,,,,,,,,,,,,,,,,2,2, +github.com/emicklei/go-restful,,7,,,,,,,,,,,,,,,,,7,, +github.com/evanphx/json-patch,,,12,,,,,,,,,,,,,,,,,12, +github.com/form3tech-oss/jwt-go,2,,,,2,,,,,,,,,,,,,,,, +github.com/gin-gonic/gin,3,46,2,,,,3,,,,,,,,,,,,46,2, +github.com/go-chi/chi,,3,,,,,,,,,,,,,,,,,3,, +github.com/go-chi/jwtauth,1,,,,1,,,,,,,,,,,,,,,, +github.com/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,4, +github.com/go-kit/kit/auth/jwt,1,,,,1,,,,,,,,,,,,,,,, +github.com/go-pg/pg/orm,,,6,,,,,,,,,,,,,,,,,6, +github.com/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +github.com/gobuffalo/envy,,7,,,,,,,,,,,,,,,7,,,, +github.com/gobwas/ws,,2,,,,,,,,,,,,,,,,,2,, +github.com/gofiber/fiber,5,,,,,,4,,,,,,,,1,,,,,, +github.com/gogf/gf-jwt,1,,,,1,,,,,,,,,,,,,,,, +github.com/going/toolkit/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +github.com/golang-jwt/jwt,3,,11,,2,1,,,,,,,,,,,,,,11, +github.com/golang/protobuf/proto,,,4,,,,,,,,,,,,,,,,,4, +github.com/gorilla/mux,,1,,,,,,,,,,,,,,,,,1,, +github.com/gorilla/websocket,,3,,,,,,,,,,,,,,,,,3,, +github.com/hashicorp/go-envparse,,1,,,,,,,,,,,,,,,1,,,, +github.com/jbowtie/gokogiri/xml,4,,,,,,,,,,,,,,,4,,,,, +github.com/jbowtie/gokogiri/xpath,1,,,,,,,,,,,,,,,1,,,,, +github.com/joho/godotenv,,4,,,,,,,,,,,,,,,4,,,, +github.com/json-iterator/go,,,4,,,,,,,,,,,,,,,,,4, +github.com/kataras/iris/context,6,,,,,,6,,,,,,,,,,,,,, +github.com/kataras/iris/middleware/jwt,2,,,,2,,,,,,,,,,,,,,,, +github.com/kataras/iris/server/web/context,6,,,,,,6,,,,,,,,,,,,,, +github.com/kataras/jwt,5,,,,5,,,,,,,,,,,,,,,, +github.com/kelseyhightower/envconfig,,6,,,,,,,,,,,,,,,6,,,, +github.com/labstack/echo,3,12,2,,,,2,,,,,,1,,,,,,12,2, +github.com/lestrrat-go/jwx,2,,,,2,,,,,,,,,,,,,,,, +github.com/lestrrat-go/libxml2/parser,3,,,,,,,,,,,,,,,3,,,,, +github.com/lestrrat/go-jwx/jwk,1,,,,1,,,,,,,,,,,,,,,, +github.com/masterzen/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +github.com/moovweb/gokogiri/xml,4,,,,,,,,,,,,,,,4,,,,, +github.com/moovweb/gokogiri/xpath,1,,,,,,,,,,,,,,,1,,,,, +github.com/ory/fosite/token/jwt,2,,,,2,,,,,,,,,,,,,,,, +github.com/revel/revel,2,23,10,,,,1,,,,,,1,,,,,,23,10, +github.com/robfig/revel,2,23,10,,,,1,,,,,,1,,,,,,23,10, +github.com/santhosh-tekuri/xpathparser,2,,,,,,,,,,,,,,,2,,,,, +github.com/sendgrid/sendgrid-go/helpers/mail,,,1,,,,,,,,,,,,,,,,,1, +github.com/spf13/afero,34,,,,,,34,,,,,,,,,,,,,, +github.com/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,4, +github.com/valyala/fasthttp,35,50,5,,,,8,,,,17,8,2,,,,,,50,5, +go.uber.org/zap,,,11,,,,,,,,,,,,,,,,,11, +golang.org/x/crypto/ssh,4,,,4,,,,,,,,,,,,,,,,, +golang.org/x/net/context,,,5,,,,,,,,,,,,,,,,,5, +golang.org/x/net/html,,,16,,,,,,,,,,,,,,,,,16, +golang.org/x/net/websocket,,2,,,,,,,,,,,,,,,,,2,, +google.golang.org/protobuf/internal/encoding/text,,,1,,,,,,,,,,,,,,,,,1, +google.golang.org/protobuf/internal/impl,,,2,,,,,,,,,,,,,,,,,2, +google.golang.org/protobuf/proto,,,8,,,,,,,,,,,,,,,,,8, +google.golang.org/protobuf/reflect/protoreflect,,,1,,,,,,,,,,,,,,,,,1, +gopkg.in/couchbase/gocb,,,18,,,,,,,,,,,,,,,,,18, +gopkg.in/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,4, +gopkg.in/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +gopkg.in/macaron,1,12,1,,,,,,,,,,,,1,,,,12,1, +gopkg.in/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,4, +gopkg.in/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +gopkg.in/yaml,,,9,,,,,,,,,,,,,,,,,9, +html,,,8,,,,,,,,,,,,,,,,,8, +io,5,4,34,,,,5,,,,,,,,,,,4,,34, +k8s.io/api/core,,,10,,,,,,,,,,,,,,,,,10, +k8s.io/apimachinery/pkg/runtime,,,47,,,,,,,,,,,,,,,,,47, +launchpad.net/xmlpath,2,,,,,,,,,,,,,,,2,,,,, +log,,,3,,,,,,,,,,,,,,,,,3, +math/big,,,1,,,,,,,,,,,,,,,,,1, +mime,,,14,,,,,,,,,,,,,,,,,14, +net,2,16,100,,,,1,,,,,,,1,,,,,16,100, +nhooyr.io/websocket,,2,,,,,,,,,,,,,,,,,2,, +os,29,10,6,3,,,26,,,,,,,,,,7,3,,6, +path,,,18,,,,,,,,,,,,,,,,,18, +reflect,,,37,,,,,,,,,,,,,,,,,37, +regexp,10,,20,,,,,3,3,4,,,,,,,,,,20, +sort,,,1,,,,,,,,,,,,,,,,,1, +strconv,,,9,,,,,,,,,,,,,,,,,9, +strings,,,34,,,,,,,,,,,,,,,,,34, +sync,,,34,,,,,,,,,,,,,,,,,34, +syscall,5,2,8,5,,,,,,,,,,,,,2,,,8, +text/scanner,,,3,,,,,,,,,,,,,,,,,3, +text/tabwriter,,,1,,,,,,,,,,,,,,,,,1, +text/template,,,6,,,,,,,,,,,,,,,,,6, diff --git a/go/documentation/library-coverage/coverage.rst b/go/documentation/library-coverage/coverage.rst index 3030f7da828..848d989d2d5 100644 --- a/go/documentation/library-coverage/coverage.rst +++ b/go/documentation/library-coverage/coverage.rst @@ -7,31 +7,39 @@ Go framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total) + `Afero `_,``github.com/spf13/afero*``,,,34 + `CleverGo `_,"``clevergo.tech/clevergo*``, ``github.com/clevergo/clevergo*``",,,2 `Couchbase official client(gocb) `_,"``github.com/couchbase/gocb*``, ``gopkg.in/couchbase/gocb*``",,36, `Couchbase unofficial client `_,``github.com/couchbaselabs/gocb*``,,18, `Echo `_,``github.com/labstack/echo*``,12,2,3 + `Fiber `_,``github.com/gofiber/fiber*``,,,5 `Fosite `_,``github.com/ory/fosite*``,,,2 `Gin `_,``github.com/gin-gonic/gin*``,46,2,3 + `Glog `_,"``github.com/golang/glog*``, ``gopkg.in/glog*``, ``k8s.io/klog*``",,, `Go JOSE `_,"``github.com/go-jose/go-jose*``, ``github.com/square/go-jose*``, ``gopkg.in/square/go-jose*``, ``gopkg.in/go-jose/go-jose*``",,16,12 `Go kit `_,``github.com/go-kit/kit*``,,,1 + `Go-spew `_,``github.com/davecgh/go-spew/spew*``,,, `Gokogiri `_,"``github.com/jbowtie/gokogiri*``, ``github.com/moovweb/gokogiri*``",,,10 `Iris `_,``github.com/kataras/iris*``,,,14 `Kubernetes `_,"``k8s.io/api*``, ``k8s.io/apimachinery*``",,57, + `Logrus `_,"``github.com/Sirupsen/logrus*``, ``github.com/sirupsen/logrus*``",,, `Macaron `_,``gopkg.in/macaron*``,12,1,1 `Revel `_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",46,20,4 `SendGrid `_,``github.com/sendgrid/sendgrid-go*``,,1, - `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",16,584,74 + `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",32,587,51 `XPath `_,``github.com/antchfx/xpath*``,,,4 `appleboy/gin-jwt `_,``github.com/appleboy/gin-jwt*``,,,1 - `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",63,63,123 + `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",63,63,21 `chi `_,``github.com/go-chi/chi*``,3,, `cristalhq/jwt `_,``github.com/cristalhq/jwt*``,,,1 `fasthttp `_,``github.com/valyala/fasthttp*``,50,5,35 `gf-jwt `_,``github.com/gogf/gf-jwt*``,,,1 `go-pg `_,``github.com/go-pg/pg*``,,6, `go-restful `_,``github.com/emicklei/go-restful*``,7,, + `go-sh `_,``github.com/codeskyblue/go-sh*``,,,4 + `golang.org/x/crypto/ssh `_,``golang.org/x/crypto/ssh*``,,,4 `golang.org/x/net `_,``golang.org/x/net*``,2,21, - `goproxy `_,``github.com/elazarl/goproxy*``,2,2,2 + `goproxy `_,``github.com/elazarl/goproxy*``,2,2, `gorilla/mux `_,``github.com/gorilla/mux*``,1,, `gorilla/websocket `_,``github.com/gorilla/websocket*``,3,, `goxpath `_,``github.com/ChrisTrenkamp/goxpath*``,,,3 @@ -51,7 +59,7 @@ Go framework & library support `xmlquery `_,``github.com/antchfx/xmlquery*``,,,8 `xpathparser `_,``github.com/santhosh-tekuri/xpathparser*``,,,2 `yaml `_,``gopkg.in/yaml*``,,9, - `zap `_,``go.uber.org/zap*``,,11,33 - Others,"``clevergo.tech/clevergo``, ``github.com/Sirupsen/logrus``, ``github.com/clevergo/clevergo``, ``github.com/codeskyblue/go-sh``, ``github.com/davecgh/go-spew/spew``, ``github.com/gofiber/fiber``, ``github.com/golang/glog``, ``github.com/sirupsen/logrus``, ``github.com/spf13/afero``, ``golang.org/x/crypto/ssh``, ``gopkg.in/glog``, ``k8s.io/klog``",,,564 - Totals,,267,906,943 + `zap `_,``go.uber.org/zap*``,,11, + Others,"``github.com/caarlos0/env``, ``github.com/gobuffalo/envy``, ``github.com/hashicorp/go-envparse``, ``github.com/joho/godotenv``, ``github.com/kelseyhightower/envconfig``",23,2, + Totals,,306,911,268 diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 7239329e51b..d9c920f443c 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -82,14 +82,14 @@ java.beans,,,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,193, java.io,66,1,256,,,,,,,,,22,,,,,,,,,,,,,,,44,,,,,,,,,,,,,,,,,,,,,,1,,249,7 java.lang,38,3,756,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,681,75 java.math,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9 -java.net,23,3,278,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,274,4 -java.nio,47,,361,,,,,,,,,5,,,,,,,,,,,,,,,41,,,,,,,,,1,,,,,,,,,,,,,,,259,102 +java.net,23,3,279,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,275,4 +java.nio,47,,373,,,,,,,,,5,,,,,,,,,,,,,,,41,,,,,,,,,1,,,,,,,,,,,,,,,267,106 java.rmi,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71, -java.security,21,,543,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,539,4 +java.security,21,,547,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,543,4 java.sql,15,1,303,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,,1,,,,303, java.text,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134, java.time,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,88 -java.util,48,2,1218,,,,,,,,,1,,,,,,,,,,,34,,,,3,,,,5,2,,1,2,,,,,,,,,,,,,2,,,704,514 +java.util,48,2,1221,,,,,,,,,1,,,,,,,,,,,34,,,,3,,,,5,2,,1,2,,,,,,,,,,,,,2,,,705,516 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, javax.accessibility,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,7, @@ -102,7 +102,7 @@ javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 javax.lang.model.element,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17, javax.lang.model.type,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9, javax.lang.model.util,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68, -javax.management,2,,799,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,798,1 +javax.management,2,,802,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,801,1 javax.naming,7,,324,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,6 javax.net,4,,86,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,86, javax.portlet,1,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,61, @@ -192,6 +192,7 @@ 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.authc,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, org.apache.shiro.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 8fa6813991f..cea3d438ee2 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,4264,259,99,,9,,,26 - Java extensions,"``javax.*``, ``jakarta.*``",69,3257,90,10,4,2,1,1,4 + Java Standard Library,``java.*``,10,4284,259,99,,9,,,26 + Java extensions,"``javax.*``, ``jakarta.*``",69,3260,90,10,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,486,143,26,,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``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.lingala.zip4j``, ``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.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.lastaflute.web``, ``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.w3c.dom``, ``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``, ``software.amazon.awssdk.transfer.s3.model``, ``sun.awt``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.management.spi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.nio.ch``, ``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``, ``sun.util.logging.internal``",132,10603,908,140,6,22,18,,208 - Totals,,311,25147,2635,404,16,128,33,1,409 + 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``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.lingala.zip4j``, ``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.authc``, ``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.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.lastaflute.web``, ``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.w3c.dom``, ``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``, ``software.amazon.awssdk.transfer.s3.model``, ``sun.awt``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.management.spi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.nio.ch``, ``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``, ``sun.util.logging.internal``",133,10603,908,140,6,22,18,,208 + Totals,,312,25170,2635,404,16,128,33,1,409 From 75643043bc74ea6dc96108cb552ad5a254e1d2c3 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 4 Sep 2024 07:38:49 +0200 Subject: [PATCH 291/334] Update change note for realloc Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md b/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md index 3da89a025a5..9245894c97e 100644 --- a/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md +++ b/cpp/ql/lib/change-notes/2024-09-03-realloc-data-flow.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added a data-flow model for `realloc` and related functions. Previously they was modeled as a taint functions. This improves the precision of queries using data-flow or taint-tracking when `realloc` is involved. +* Added a data flow model for `realloc`-like functions, which were previously modeled as a taint tracking functions. This change improves the precision of queries where flow through `realloc`-like functions might affect the results. From 50d9e773399d3272069af76ad12cc581787f6e3b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 09:33:27 +0200 Subject: [PATCH 292/334] C++: Move experimental files into the correct locations --- .../{query-tests => }/Security/CWE/CWE-409/Brotli.qll | 0 .../Security/CWE/CWE-409/DecompressionBomb.qhelp | 0 .../{query-tests => }/Security/CWE/CWE-409/DecompressionBomb.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/DecompressionBombs.ql | 0 .../{query-tests => }/Security/CWE/CWE-409/LibArchive.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/MiniZip.qll | 0 .../experimental/{query-tests => }/Security/CWE/CWE-409/ZSTD.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/ZlibGzopen.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/ZlibInflator.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/ZlibUncompress.qll | 0 .../{query-tests => }/Security/CWE/CWE-409/example_bad.cpp | 0 .../{query-tests => }/Security/CWE/CWE-409/example_good.cpp | 0 .../query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref | 1 - .../CWE-409/{ => DecompressionBombs}/DecompressionBombs.expected | 0 .../CWE/CWE-409/DecompressionBombs/DecompressionBombs.qlref | 1 + .../Security/CWE/CWE-409/{ => DecompressionBombs}/brotliTest.cpp | 0 .../CWE/CWE-409/{ => DecompressionBombs}/libarchiveTests.cpp | 0 .../CWE/CWE-409/{ => DecompressionBombs}/minizipTest.cpp | 0 .../Security/CWE/CWE-409/{ => DecompressionBombs}/zlibTest.cpp | 0 .../Security/CWE/CWE-409/{ => DecompressionBombs}/zstdTest.cpp | 0 20 files changed, 1 insertion(+), 1 deletion(-) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/Brotli.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/DecompressionBomb.qhelp (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/DecompressionBomb.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/DecompressionBombs.ql (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/LibArchive.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/MiniZip.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/ZSTD.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/ZlibGzopen.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/ZlibInflator.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/ZlibUncompress.qll (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/example_bad.cpp (100%) rename cpp/ql/src/experimental/{query-tests => }/Security/CWE/CWE-409/example_good.cpp (100%) delete mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/DecompressionBombs.expected (100%) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.qlref rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/brotliTest.cpp (100%) rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/libarchiveTests.cpp (100%) rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/minizipTest.cpp (100%) rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/zlibTest.cpp (100%) rename cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/{ => DecompressionBombs}/zstdTest.cpp (100%) diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/Brotli.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qhelp similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qhelp rename to cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qhelp diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBomb.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql rename to cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/LibArchive.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/MiniZip.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZSTD.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibGzopen.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibInflator.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/ZlibUncompress.qll rename to cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_bad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_bad.cpp rename to cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp diff --git a/cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_good.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp similarity index 100% rename from cpp/ql/src/experimental/query-tests/Security/CWE/CWE-409/example_good.cpp rename to cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref deleted file mode 100644 index b3f71c4891a..00000000000 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.ql \ No newline at end of file diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs.expected rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.qlref new file mode 100644 index 00000000000..3dcbc9db9ff --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-409/DecompressionBombs.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/brotliTest.cpp rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/libarchiveTests.cpp rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/minizipTest.cpp rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zlibTest.cpp rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp similarity index 100% rename from cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/zstdTest.cpp rename to cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp From eb1b2a5594ebcf7e47606de1a76c4e549a4b71b7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 Sep 2024 09:00:37 +0200 Subject: [PATCH 293/334] Bump `tree-sitter` to `0.23.0` --- ql/Cargo.lock | Bin 34070 -> 34593 bytes ql/buramu/Cargo.toml | 2 +- ql/buramu/tree-sitter-blame/Cargo.toml | 8 +- ql/buramu/tree-sitter-blame/binding.gyp | 23 ++++-- .../bindings/node/binding.cc | 36 ++++----- .../tree-sitter-blame/bindings/node/index.js | 18 +---- .../tree-sitter-blame/bindings/rust/build.rs | 3 + .../tree-sitter-blame/bindings/rust/lib.rs | 41 +++++----- ql/buramu/tree-sitter-blame/package.json | 39 +++++++-- ql/buramu/tree-sitter-blame/src/grammar.json | 1 - ql/buramu/tree-sitter-blame/src/parser.c | 76 ++++++++---------- .../src/tree_sitter/parser.h | 68 +++++++++++++--- ql/extractor/Cargo.toml | 11 +-- ql/extractor/src/extractor.rs | 8 +- ruby/extractor/Cargo.lock | Bin 26217 -> 26721 bytes ruby/extractor/Cargo.toml | 11 +-- .../codeql-extractor-fake-crate/Cargo.toml | 4 +- ruby/extractor/src/extractor.rs | 4 +- shared/tree-sitter-extractor/Cargo.toml | 4 +- .../tests/integration_test.rs | 2 +- .../tests/multiple_languages.rs | 4 +- 21 files changed, 205 insertions(+), 158 deletions(-) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index ed04a4a8553336790a296df19d65b08edbfa26b7..67a3f78fb41bd2db8f83abf2be2f79968abd186f 100644 GIT binary patch delta 991 zcma)*&1x1#6o&aiCE;t3R@10xFeC+oG-2k<%sDfQG>K4+w$MZ=ZW7~}Gc#!*X!B!; z8$))b+Ja1}TfG5^eDngkD7}U*TzCP!0~ei?tSm~H-OLN~KF^u??WevMzw{kk8T?33 zX;=T~|8~YvL+(k7Dn$iI0re9hQMetd+!u$63q4Kcf%*PzF*I~ zb#CN*@1MaxeFy8S@r5rzheTE|BC$bdIh2^A*l2ag02(l9lb{%}tSDzC5p^jPm;&nB zxj$TQU;U;6|4>+jdj*1LSGH+Ah{=VewZ zq@pdH1(YWAK|2<0nLx)@sepkkvR zW>rZHrKqI5RXRkrslgXRT7pZyByy6C11mWQA!?3*L-^+>f5D(`s@7Zb9U^D z?&#R|X3mpaYunp-b8?;Utv=w@`s(&beRQW=FD=h~_Tj|i<)MzL&zEm3`dCu5rnFkg zD;J}dtbze$q)24;Ie|FR=&mum0%MQhYHHJJ87AlSo{nowZ!TRH!Q~#k%FKw((t*&j)Z04P5AtOeM z4-!?IUM>zx_E9vo;gA^2DrQtPe%#>us0Qo7P`CcPakun)9R3ea(q|TEwQ7l<#qef@Z*=QYsQmU}i2ANyHsRiM;78KTWZBV}+ z_3GWcTtBT1|InY@Uu%2W`Z|qoj~+Zc*?v?Wk0n_$ZTiO0E&6r>3n2x{++quyl4C+H zZfj9t?F2v>}KVRzC)3n -#include "nan.h" +#include -using namespace v8; +typedef struct TSLanguage TSLanguage; -extern "C" TSLanguage * tree_sitter_blame(); +extern "C" TSLanguage *tree_sitter_blame(); -namespace { +// "tree-sitter", "language" hashed with BLAKE2 +const napi_type_tag LANGUAGE_TYPE_TAG = { + 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 +}; -NAN_METHOD(New) {} - -void Init(Local exports, Local module) { - Local tpl = Nan::New(New); - tpl->SetClassName(Nan::New("Language").ToLocalChecked()); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); - Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); - Nan::SetInternalFieldPointer(instance, 0, tree_sitter_blame()); - - Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("blame").ToLocalChecked()); - Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +Napi::Object Init(Napi::Env env, Napi::Object exports) { + exports["name"] = Napi::String::New(env, "blame"); + auto language = Napi::External::New(env, tree_sitter_blame()); + language.TypeTag(&LANGUAGE_TYPE_TAG); + exports["language"] = language; + return exports; } -NODE_MODULE(tree_sitter_blame_binding, Init) - -} // namespace +NODE_API_MODULE(tree_sitter_blame_binding, Init) diff --git a/ql/buramu/tree-sitter-blame/bindings/node/index.js b/ql/buramu/tree-sitter-blame/bindings/node/index.js index 23af3bb321c..6657bcf42de 100644 --- a/ql/buramu/tree-sitter-blame/bindings/node/index.js +++ b/ql/buramu/tree-sitter-blame/bindings/node/index.js @@ -1,18 +1,6 @@ -try { - module.exports = require("../../build/Release/tree_sitter_blame_binding"); -} catch (error1) { - if (error1.code !== 'MODULE_NOT_FOUND') { - throw error1; - } - try { - module.exports = require("../../build/Debug/tree_sitter_blame_binding"); - } catch (error2) { - if (error2.code !== 'MODULE_NOT_FOUND') { - throw error2; - } - throw error1 - } -} +const root = require("path").join(__dirname, "..", ".."); + +module.exports = require("node-gyp-build")(root); try { module.exports.nodeTypeInfo = require("../../src/node-types.json"); diff --git a/ql/buramu/tree-sitter-blame/bindings/rust/build.rs b/ql/buramu/tree-sitter-blame/bindings/rust/build.rs index c6061f09953..4cc26f5e0f8 100644 --- a/ql/buramu/tree-sitter-blame/bindings/rust/build.rs +++ b/ql/buramu/tree-sitter-blame/bindings/rust/build.rs @@ -7,6 +7,9 @@ fn main() { .flag_if_supported("-Wno-unused-parameter") .flag_if_supported("-Wno-unused-but-set-variable") .flag_if_supported("-Wno-trigraphs"); + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); + let parser_path = src_dir.join("parser.c"); c_config.file(&parser_path); diff --git a/ql/buramu/tree-sitter-blame/bindings/rust/lib.rs b/ql/buramu/tree-sitter-blame/bindings/rust/lib.rs index 268243b164f..6a0362de7d7 100644 --- a/ql/buramu/tree-sitter-blame/bindings/rust/lib.rs +++ b/ql/buramu/tree-sitter-blame/bindings/rust/lib.rs @@ -1,13 +1,18 @@ -//! This crate provides blame language support for the [tree-sitter][] parsing library. +//! This crate provides Blame language support for the [tree-sitter][] parsing library. //! //! Typically, you will use the [language][language func] function to add this language to a //! tree-sitter [Parser][], and then use the parser to parse some code: //! -//! ``` -//! let code = ""; +//! ```ignore +//! let code = r#" +//! "#; //! let mut parser = tree_sitter::Parser::new(); -//! parser.set_language(tree_sitter_blame::language()).expect("Error loading blame grammar"); +//! let language = tree_sitter_blame::LANGUAGE; +//! parser +//! .set_language(&language.into()) +//! .expect("Error loading Blame parser"); // fails for some reason, so code block is ignored for now //! let tree = parser.parse(code, None).unwrap(); +//! assert!(!tree.root_node().has_error()); //! ``` //! //! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html @@ -15,30 +20,26 @@ //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html //! [tree-sitter]: https://tree-sitter.github.io/ -use tree_sitter::Language; +use tree_sitter_language::LanguageFn; extern "C" { - fn tree_sitter_blame() -> Language; + fn tree_sitter_blame() -> *const (); } -/// Get the tree-sitter [Language][] for this grammar. -/// -/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -pub fn language() -> Language { - unsafe { tree_sitter_blame() } -} +/// The tree-sitter [`LanguageFn`] for this grammar. +pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_blame) }; /// The content of the [`node-types.json`][] file for this grammar. /// /// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types -pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json"); +pub const NODE_TYPES: &str = include_str!("../../src/node-types.json"); -// Uncomment these to include any queries that this grammar contains +// NOTE: uncomment these to include any queries that this grammar contains: -// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm"); -// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm"); -// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm"); -// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm"); +// pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm"); +// pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm"); +// pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm"); +// pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm"); #[cfg(test)] mod tests { @@ -46,7 +47,7 @@ mod tests { fn test_can_load_grammar() { let mut parser = tree_sitter::Parser::new(); parser - .set_language(super::language()) - .expect("Error loading blame language"); + .set_language(&super::LANGUAGE.into()) + .expect("Error loading Blame parser"); } } diff --git a/ql/buramu/tree-sitter-blame/package.json b/ql/buramu/tree-sitter-blame/package.json index f9517c74da5..ace46ffbf7c 100644 --- a/ql/buramu/tree-sitter-blame/package.json +++ b/ql/buramu/tree-sitter-blame/package.json @@ -3,17 +3,46 @@ "version": "0.0.1", "description": "blame grammar for tree-sitter", "main": "bindings/node", + "types": "bindings/node", "keywords": [ "parsing", "incremental" ], + "files": [ + "grammar.js", + "binding.gyp", + "prebuilds/**", + "bindings/node/*", + "queries/*", + "src/**", + "*.wasm" + ], "dependencies": { - "nan": "^2.12.1" + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.1" + }, + "peerDependencies": { + "tree-sitter": "^0.23.0" + }, + "peerDependenciesMeta": { + "tree_sitter": { + "optional": true + } }, "devDependencies": { - "tree-sitter-cli": "^0.20.7" + "tree-sitter-cli": "^0.23.0", + "prebuildify": "^6.0.1" }, "scripts": { - "test": "tree-sitter test" - } -} + "install": "node-gyp-build", + "prestart": "tree-sitter build --wasm", + "start": "tree-sitter playground", + "test": "node --test bindings/node/*_test.js" + }, + "tree-sitter": [ + { + "scope": "source.blame", + "injection-regex": "^blame$" + } + ] +} \ No newline at end of file diff --git a/ql/buramu/tree-sitter-blame/src/grammar.json b/ql/buramu/tree-sitter-blame/src/grammar.json index 9001554fd16..d1a31f01200 100644 --- a/ql/buramu/tree-sitter-blame/src/grammar.json +++ b/ql/buramu/tree-sitter-blame/src/grammar.json @@ -123,4 +123,3 @@ "inline": [], "supertypes": [] } - diff --git a/ql/buramu/tree-sitter-blame/src/parser.c b/ql/buramu/tree-sitter-blame/src/parser.c index 4803597f566..364bc16c8b3 100644 --- a/ql/buramu/tree-sitter-blame/src/parser.c +++ b/ql/buramu/tree-sitter-blame/src/parser.c @@ -1,7 +1,6 @@ -#include +#include "tree_sitter/parser.h" #if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif @@ -16,7 +15,7 @@ #define MAX_ALIAS_SEQUENCE_LENGTH 4 #define PRODUCTION_ID_COUNT 14 -enum { +enum ts_symbol_identifiers { anon_sym_today_COLON = 1, anon_sym_file_COLON = 2, anon_sym_LF = 3, @@ -132,7 +131,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { }, }; -enum { +enum ts_field_identifiers { field_blame_entry = 1, field_date = 2, field_file_entry = 3, @@ -242,26 +241,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'f') ADVANCE(18); if (lookahead == 'l') ADVANCE(10); if (lookahead == 't') ADVANCE(23); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(0) + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(0); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(48); END_STATE(); case 1: if (lookahead == '\n') ADVANCE(40); - if (lookahead == '\t' || - lookahead == '\r' || - lookahead == ' ') SKIP(1) + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(1); END_STATE(); case 2: if (lookahead == ' ') ADVANCE(39); END_STATE(); case 3: if (lookahead == ' ') ADVANCE(43); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r') SKIP(3) + if (('\t' <= lookahead && lookahead <= '\r')) SKIP(3); if (('-' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || @@ -340,10 +334,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'y') ADVANCE(7); END_STATE(); case 28: - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(28) + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(28); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(35); END_STATE(); case 29: @@ -371,10 +363,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (eof) ADVANCE(37); if (lookahead == 'f') ADVANCE(18); if (lookahead == 'l') ADVANCE(10); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(36) + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(36); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(49); END_STATE(); case 37: @@ -623,25 +613,25 @@ static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_entry, 3, .production_id = 6), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_entry, 3, 0, 6), [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [9] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_entry, 4, .production_id = 8), - [11] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_entry, 2, .production_id = 9), + [9] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_entry, 4, 0, 8), + [11] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_entry, 2, 0, 9), [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 2, .production_id = 10), - [17] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 2, .production_id = 10), SHIFT_REPEAT(19), - [20] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_entry, 3, .production_id = 12), - [22] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 2, .production_id = 13), - [24] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 2, .production_id = 13), SHIFT_REPEAT(11), - [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_info, 1, .production_id = 1), + [15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 2, 0, 10), + [17] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 2, 0, 10), SHIFT_REPEAT(19), + [20] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_entry, 3, 0, 12), + [22] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 2, 0, 13), + [24] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 2, 0, 13), SHIFT_REPEAT(11), + [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_info, 1, 0, 1), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_info, 2, .production_id = 4), - [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 2, .production_id = 5), - [35] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 2, .production_id = 5), SHIFT_REPEAT(17), - [38] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 1, .production_id = 11), - [40] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 1, .production_id = 7), - [42] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__today, 2, .production_id = 2), - [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 1, .production_id = 3), + [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_blame_info, 2, 0, 4), + [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 2, 0, 5), + [35] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 2, 0, 5), SHIFT_REPEAT(17), + [38] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_entry_repeat1, 1, 0, 11), + [40] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_file_entry_repeat1, 1, 0, 7), + [42] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__today, 2, 0, 2), + [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_blame_info_repeat1, 1, 0, 3), [46] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), [48] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), [50] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), @@ -652,11 +642,15 @@ static const TSParseActionEntry ts_parse_actions[] = { #ifdef __cplusplus extern "C" { #endif -#ifdef _WIN32 -#define extern __declspec(dllexport) +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) #endif -extern const TSLanguage *tree_sitter_blame(void) { +TS_PUBLIC const TSLanguage *tree_sitter_blame(void) { static const TSLanguage language = { .version = LANGUAGE_VERSION, .symbol_count = SYMBOL_COUNT, diff --git a/ql/buramu/tree-sitter-blame/src/tree_sitter/parser.h b/ql/buramu/tree-sitter-blame/src/tree_sitter/parser.h index 2b14ac1046b..799f599bd4e 100644 --- a/ql/buramu/tree-sitter-blame/src/tree_sitter/parser.h +++ b/ql/buramu/tree-sitter-blame/src/tree_sitter/parser.h @@ -13,9 +13,8 @@ extern "C" { #define ts_builtin_sym_end 0 #define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 -typedef uint16_t TSStateId; - #ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; typedef uint16_t TSSymbol; typedef uint16_t TSFieldId; typedef struct TSLanguage TSLanguage; @@ -48,6 +47,7 @@ struct TSLexer { uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); + void (*log)(const TSLexer *, const char *, ...); }; typedef enum { @@ -87,6 +87,11 @@ typedef union { } entry; } TSParseActionEntry; +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + struct TSLanguage { uint32_t version; uint32_t symbol_count; @@ -126,13 +131,38 @@ struct TSLanguage { const TSStateId *primary_state_ids; }; +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + /* * Lexer Macros */ +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif + #define START_LEXER() \ bool result = false; \ bool skip = false; \ + UNUSED \ bool eof = false; \ int32_t lookahead; \ goto start; \ @@ -148,6 +178,17 @@ struct TSLanguage { goto next_state; \ } +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + #define SKIP(state_value) \ { \ skip = true; \ @@ -166,7 +207,7 @@ struct TSLanguage { * Parse Table Macros */ -#define SMALL_STATE(id) id - LARGE_STATE_COUNT +#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT) #define STATE(id) id @@ -176,7 +217,7 @@ struct TSLanguage { {{ \ .shift = { \ .type = TSParseActionTypeShift, \ - .state = state_value \ + .state = (state_value) \ } \ }} @@ -184,7 +225,7 @@ struct TSLanguage { {{ \ .shift = { \ .type = TSParseActionTypeShift, \ - .state = state_value, \ + .state = (state_value), \ .repetition = true \ } \ }} @@ -197,14 +238,15 @@ struct TSLanguage { } \ }} -#define REDUCE(symbol_val, child_count_val, ...) \ - {{ \ - .reduce = { \ - .type = TSParseActionTypeReduce, \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ }} #define RECOVER() \ diff --git a/ql/extractor/Cargo.toml b/ql/extractor/Cargo.toml index 6f0e6e11f08..637a4bf5f3b 100644 --- a/ql/extractor/Cargo.toml +++ b/ql/extractor/Cargo.toml @@ -7,17 +7,14 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tree-sitter = ">= 0.22.6" -tree-sitter-ql = { git = "https://github.com/tree-sitter/tree-sitter-ql.git", rev = "fa5c3821dd2161f5c8528a8cbdb258daa6dc4de6"} -tree-sitter-ql-dbscheme = { git = "https://github.com/tree-sitter/tree-sitter-ql-dbscheme.git", rev = "5f770f57fa415607ff50e3d237d47c8f11440eb3"} +tree-sitter = ">= 0.23.0" +tree-sitter-ql = { git = "https://github.com/tree-sitter/tree-sitter-ql.git", rev = "c73c31c89cb0019ef56fe8bc1723e7c36e0be607"} +tree-sitter-ql-dbscheme = { git = "https://github.com/tree-sitter/tree-sitter-ql-dbscheme.git", rev = "1980b4b6998a1138d326f863e6168f0f2c0c544d"} tree-sitter-blame = {path = "../buramu/tree-sitter-blame"} -tree-sitter-json = {git = "https://github.com/tree-sitter/tree-sitter-json.git", rev = "94f5c527b2965465956c2000ed6134dd24daf2a7"} +tree-sitter-json = {git = "https://github.com/tree-sitter/tree-sitter-json.git", rev = "8bfdb43f47ad805bb1ce093203cfcbaa8ed2c571"} 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.4" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } - -[patch.crates-io] -tree-sitter = {git = "https://github.com/redsun82/tree-sitter.git", rev = "1f5c1112ceaa8fc6aff61d1852690407670d2a96"} diff --git a/ql/extractor/src/extractor.rs b/ql/extractor/src/extractor.rs index b50cae32a01..8383d8424ee 100644 --- a/ql/extractor/src/extractor.rs +++ b/ql/extractor/src/extractor.rs @@ -27,25 +27,25 @@ pub fn run(options: Options) -> std::io::Result<()> { languages: vec![ simple::LanguageSpec { prefix: "ql", - ts_language: tree_sitter_ql::language(), + ts_language: tree_sitter_ql::LANGUAGE.into(), node_types: tree_sitter_ql::NODE_TYPES, file_globs: vec!["*.ql".into(), "*.qll".into()], }, simple::LanguageSpec { prefix: "dbscheme", - ts_language: tree_sitter_ql_dbscheme::language(), + ts_language: tree_sitter_ql_dbscheme::LANGUAGE.into(), node_types: tree_sitter_ql_dbscheme::NODE_TYPES, file_globs: vec!["*.dbscheme".into()], }, simple::LanguageSpec { prefix: "json", - ts_language: tree_sitter_json::language(), + ts_language: tree_sitter_json::LANGUAGE.into(), node_types: tree_sitter_json::NODE_TYPES, file_globs: vec!["*.json".into(), "*.jsonl".into(), "*.jsonc".into()], }, simple::LanguageSpec { prefix: "blame", - ts_language: tree_sitter_blame::language(), + ts_language: tree_sitter_blame::LANGUAGE.into(), node_types: tree_sitter_blame::NODE_TYPES, file_globs: vec!["*.blame".into()], }, diff --git a/ruby/extractor/Cargo.lock b/ruby/extractor/Cargo.lock index 95f32d9b6103b0d7ae369c3d863a77314f23a09c..d32d1bd6981169267418b7872fae8a4d663681df 100644 GIT binary patch delta 1006 zcma))J#XAa5XSXSV#&l<$T5i#rf_1RfMg%DZ!^0}$R$!*@Es)*LbJ0who#8H`GTCU zk^KUsNKd$$Z$Oa-ffSmQX;RWfVq*~(fg;*wwL6-5p5Ht#ejA=Y9e%#FcHWFkyShCY z2g=Bn0<%rv$U~7xg~13~@cm$p(by1dO=N6hbd_Taz=i~C8!ld1IsV~ZJ!y~Dx0k=J zz1kXl8_s>a{C#(_HDG%Jld(0akQdBI>@avvnrjxHy-C$tW3d=ltUB=wR4YhEqe_V> zp-Jt@_T_f8yV0KA2!mg4+<%iCQQ~ zb-{XZlA~q}jvZL1=&Y;g+nsN=mY?4Jdv$Pax;MRTLA?}*-ijyg^n&dWsYE33>MM&S zn=mPwj1hAwPO0m(mN~O(n@&IR^E#_1*Y+;%Tsyt(A3r!+@W~F0;>e#qFXpxGA0I9j zb-sU(k7oCI)`peshhMEV-P~-eUw?4kji9|exY1^t8{dv*hl}yN{`e)@42;!>1i(}} zd2u}hDd=l-3@KsE9PIA97IwMUSKpTK{=wz5@!ub;T#s2x_D(yH5+USlq(X8QoTy~x zSc{cF?dtlKb~w58cE9)D^snvC9^baX2k@Po@#G2%_WUA-Bw_>h-3h4n4XMN&JqHwT zy>k>Tp_2A7ePgdd{dutYugY7W2{~~_Vv-C!1yuuTjadx!C3i+xAy)+YU%Nj|&g_0S wzn>qR(e7Cdl$4;LhOVka!vXusz@VFQDba=^r2d0|`tf^Z)<= delta 817 zcma))yK9tD5XJd4L2)h2YIb8l4Eq&|ka!<+U&M7|VX4`yg@qv8$4m&Q=W`DQ(_PKiBY|O9~XY=>Q`Wo;k3`3)U zB_kAS<)a}U1Q$Nqh!ULPP76pTL?Y+NqCl_~Z6qcszdE}x*=roME19bki<2L9zg@xM z>d3iCAyGmXtz_026}0Cz8BUUp_1l`2>K%Aw z%Tj_86g6_=K)S?9=}z{#J=yJzW+^KO|dNx6vVy``u-h8CA4F}j5aI@?{qz7W3JA$^4lx3r*%KgFIvDT&j{GnDi zKkd(6bx<-YVS;d4fmTlGC>UdyG?$Q4`HsTXoB!7AY@9C;Re`vA?b)LmM8KFd*>ZD_ zwz%e&y!0XPpot^|rG(`9YqR~2n>T|aHxGx~;pH)TMueaYm9O%l+!%-(Nl7yFQfUi? T1qsDvJ#FLP{wJ^ReYx-(^w09e diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 39310785ec3..89e0d3cf9db 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -7,20 +7,17 @@ authors = ["GitHub"] edition = "2021" [dependencies] -tree-sitter = ">= 0.22.6" -tree-sitter-embedded-template = { git = "https://github.com/tree-sitter/tree-sitter-embedded-template.git", rev = "38d5004a797298dc42c85e7706c5ceac46a3f29f" } -tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "0ffe457fb6aabf064f173fd30ea356845cef2513" } +tree-sitter = ">= 0.23.0" +tree-sitter-embedded-template = { git = "https://github.com/tree-sitter/tree-sitter-embedded-template.git", rev = "62b0a6e45900a7dff7c37da95fec20a09968ba52" } +tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "a66579f70d6f50ffd81a16fc3d3358e2ac173c88" } clap = { version = "4.2", features = ["derive"] } tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } rayon = "1.5.0" regex = "1.7.1" encoding = "0.2" -lazy_static = "1.4.0" +lazy_static = "1.4.0" # Ideally, we'd like to pull this in via a relative path. # However, our bazel/rust tooling chokes on this, c.f. https://github.com/bazelbuild/rules_rust/issues/1525 # Therefore, we have a pretty bad hack in place instead, see README.md in the codeql-extractor-fake-crate directory. codeql-extractor = { path = "codeql-extractor-fake-crate" } - -[patch.crates-io] -tree-sitter = { git = "https://github.com/redsun82/tree-sitter.git", rev = "1f5c1112ceaa8fc6aff61d1852690407670d2a96" } diff --git a/ruby/extractor/codeql-extractor-fake-crate/Cargo.toml b/ruby/extractor/codeql-extractor-fake-crate/Cargo.toml index d51d64a3349..d7d1e0f37ab 100644 --- a/ruby/extractor/codeql-extractor-fake-crate/Cargo.toml +++ b/ruby/extractor/codeql-extractor-fake-crate/Cargo.toml @@ -7,7 +7,7 @@ authors = ["GitHub"] [dependencies] flate2 = "1.0" globset = "0.4" -tree-sitter = ">= 0.22.6" +tree-sitter = ">= 0.23.0" tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } rayon = "1.5.0" @@ -24,5 +24,3 @@ tree-sitter-ql = { git = "https://github.com/tree-sitter/tree-sitter-ql" } tree-sitter-json = {git = "https://github.com/tree-sitter/tree-sitter-json" } rand = "0.8.5" -[patch.crates-io] -tree-sitter = {git = "https://github.com/redsun82/tree-sitter.git", rev = "1f5c1112ceaa8fc6aff61d1852690407670d2a96"} diff --git a/ruby/extractor/src/extractor.rs b/ruby/extractor/src/extractor.rs index b32e2d58194..f1c272f1792 100644 --- a/ruby/extractor/src/extractor.rs +++ b/ruby/extractor/src/extractor.rs @@ -78,8 +78,8 @@ pub fn run(options: Options) -> std::io::Result<()> { let file_list = fs::File::open(file_paths::path_from_string(&options.file_list))?; - let language = tree_sitter_ruby::language(); - let erb = tree_sitter_embedded_template::language(); + let language: Language = tree_sitter_ruby::LANGUAGE.into(); + let erb: Language = tree_sitter_embedded_template::LANGUAGE.into(); // Look up tree-sitter kind ids now, to avoid string comparisons when scanning ERB files. let erb_directive_id = erb.id_for_node_kind("directive", true); let erb_output_directive_id = erb.id_for_node_kind("output_directive", true); diff --git a/shared/tree-sitter-extractor/Cargo.toml b/shared/tree-sitter-extractor/Cargo.toml index d51d64a3349..d7d1e0f37ab 100644 --- a/shared/tree-sitter-extractor/Cargo.toml +++ b/shared/tree-sitter-extractor/Cargo.toml @@ -7,7 +7,7 @@ authors = ["GitHub"] [dependencies] flate2 = "1.0" globset = "0.4" -tree-sitter = ">= 0.22.6" +tree-sitter = ">= 0.23.0" tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } rayon = "1.5.0" @@ -24,5 +24,3 @@ tree-sitter-ql = { git = "https://github.com/tree-sitter/tree-sitter-ql" } tree-sitter-json = {git = "https://github.com/tree-sitter/tree-sitter-json" } rand = "0.8.5" -[patch.crates-io] -tree-sitter = {git = "https://github.com/redsun82/tree-sitter.git", rev = "1f5c1112ceaa8fc6aff61d1852690407670d2a96"} diff --git a/shared/tree-sitter-extractor/tests/integration_test.rs b/shared/tree-sitter-extractor/tests/integration_test.rs index 29058016764..cc453eeef74 100644 --- a/shared/tree-sitter-extractor/tests/integration_test.rs +++ b/shared/tree-sitter-extractor/tests/integration_test.rs @@ -13,7 +13,7 @@ use common::{create_source_dir, expect_trap_file, SourceArchive}; fn simple_extractor() { let language = simple::LanguageSpec { prefix: "ql", - ts_language: tree_sitter_ql::language(), + ts_language: tree_sitter_ql::LANGUAGE.into(), node_types: tree_sitter_ql::NODE_TYPES, file_globs: vec!["*.qll".into()], }; diff --git a/shared/tree-sitter-extractor/tests/multiple_languages.rs b/shared/tree-sitter-extractor/tests/multiple_languages.rs index 12a505f0170..f14100f6e0c 100644 --- a/shared/tree-sitter-extractor/tests/multiple_languages.rs +++ b/shared/tree-sitter-extractor/tests/multiple_languages.rs @@ -12,13 +12,13 @@ use common::{create_source_dir, expect_trap_file, SourceArchive}; fn multiple_language_extractor() { let lang_ql = simple::LanguageSpec { prefix: "ql", - ts_language: tree_sitter_ql::language(), + ts_language: tree_sitter_ql::LANGUAGE.into(), node_types: tree_sitter_ql::NODE_TYPES, file_globs: vec!["*.qll".into()], }; let lang_json = simple::LanguageSpec { prefix: "json", - ts_language: tree_sitter_json::language(), + ts_language: tree_sitter_json::LANGUAGE.into(), node_types: tree_sitter_json::NODE_TYPES, file_globs: vec!["*.json".into(), "*Jsonfile".into()], }; From d526f1d0811d7568c7d1ae2bb5217b3f98394f0b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 09:51:03 +0200 Subject: [PATCH 294/334] C++: Disentangle confusing test results by declaring only a single `main` --- .../DecompressionBombs.expected | 304 +++++------------- .../CWE-409/DecompressionBombs/brotliTest.cpp | 2 +- .../DecompressionBombs/libarchiveTests.cpp | 2 +- .../CWE/CWE-409/DecompressionBombs/main.cpp | 14 + .../DecompressionBombs/minizipTest.cpp | 2 +- .../CWE-409/DecompressionBombs/zlibTest.cpp | 2 +- .../CWE-409/DecompressionBombs/zstdTest.cpp | 4 +- 7 files changed, 106 insertions(+), 224 deletions(-) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index 5bd0f6bcde2..f971c0e90bb 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -1,14 +1,7 @@ edges -| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | -| brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | +| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:29:40:29:43 | **argv | provenance | | +| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | +| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | @@ -37,30 +30,40 @@ edges | libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | provenance | | | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | -| libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | +| libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | provenance | | +| libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | | libarchiveTests.cpp:145:13:145:19 | *access to array | libarchiveTests.cpp:105:33:105:40 | *filename | provenance | | +| main.cpp:7:33:7:36 | **argv | main.cpp:8:23:8:26 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:29:40:29:43 | **argv | provenance | | +| main.cpp:8:23:8:26 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | provenance | | +| main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | +| main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | +| main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | provenance | | +| main.cpp:9:27:9:30 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | provenance | | +| main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | +| main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | +| main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | provenance | | +| main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | *argv | provenance | | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:168:32:168:35 | **argv | provenance | | +| main.cpp:11:21:11:24 | *argv | zlibTest.cpp:168:32:168:35 | **argv | provenance | | +| main.cpp:11:21:11:24 | *argv | zlibTest.cpp:168:32:168:35 | *argv | provenance | | | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | -| minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | +| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv | provenance | | +| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | +| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | +| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | provenance | | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:36:41:36:44 | **argv | provenance | | +| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:36:41:36:44 | **argv [Return] | provenance | | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | @@ -100,11 +103,18 @@ edges | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | Config | | zlibTest.cpp:156:41:156:45 | *input | zlibTest.cpp:163:29:163:43 | *input | provenance | | -| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | -| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | -| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:156:41:156:45 | input | zlibTest.cpp:163:29:163:43 | input | provenance | | +| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:174:19:174:66 | access to array | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | provenance | | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | @@ -124,20 +134,11 @@ edges | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | provenance | | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | -| zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | provenance | | +| zlibTest.cpp:174:19:174:66 | access to array | zlibTest.cpp:156:41:156:45 | input | provenance | | nodes -| brotliTest.cpp:29:32:29:35 | **argv | semmle.label | **argv | +| brotliTest.cpp:29:40:29:43 | **argv | semmle.label | **argv | +| brotliTest.cpp:29:40:29:43 | **argv | semmle.label | **argv | | brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | -| brotliTest.cpp:31:42:31:60 | access to array | semmle.label | access to array | | brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | | libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | | libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | @@ -159,14 +160,26 @@ nodes | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | semmle.label | archive_read_next_header output argument | | libarchiveTests.cpp:129:23:129:23 | *a | semmle.label | *a | | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | semmle.label | copy_data output argument | -| libarchiveTests.cpp:144:32:144:35 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:144:44:144:47 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:144:44:144:47 | **argv | semmle.label | **argv | | libarchiveTests.cpp:145:13:145:19 | *access to array | semmle.label | *access to array | +| main.cpp:7:33:7:36 | **argv | semmle.label | **argv | +| main.cpp:8:23:8:26 | **argv | semmle.label | **argv | +| main.cpp:8:23:8:26 | brotli_test output argument | semmle.label | brotli_test output argument | +| main.cpp:9:27:9:30 | **argv | semmle.label | **argv | +| main.cpp:9:27:9:30 | libarchive_test output argument | semmle.label | libarchive_test output argument | +| main.cpp:10:24:10:27 | **argv | semmle.label | **argv | +| main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | +| main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | +| main.cpp:11:21:11:24 | **argv | semmle.label | **argv | +| main.cpp:11:21:11:24 | *argv | semmle.label | *argv | | minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | | minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | -| minizipTest.cpp:36:32:36:35 | **argv | semmle.label | **argv | +| minizipTest.cpp:36:41:36:44 | **argv | semmle.label | **argv | +| minizipTest.cpp:36:41:36:44 | **argv | semmle.label | **argv | +| minizipTest.cpp:36:41:36:44 | **argv [Return] | semmle.label | **argv [Return] | | minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | | minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:42:52:42:67 | access to array | semmle.label | access to array | | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | semmle.label | mz_zip_entry_read output argument | | minizipTest.cpp:54:29:54:38 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:54:29:54:38 | *zip_reader | semmle.label | *zip_reader | @@ -177,7 +190,6 @@ nodes | minizipTest.cpp:60:30:60:39 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:60:30:60:39 | *zip_reader | semmle.label | *zip_reader | | minizipTest.cpp:69:13:69:19 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:69:13:69:19 | access to array | semmle.label | access to array | | minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | | minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | | minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | @@ -206,8 +218,11 @@ nodes | zlibTest.cpp:132:29:132:36 | *fileName | semmle.label | *fileName | | zlibTest.cpp:139:25:139:31 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:156:41:156:45 | *input | semmle.label | *input | +| zlibTest.cpp:156:41:156:45 | input | semmle.label | input | | zlibTest.cpp:163:29:163:43 | *input | semmle.label | *input | -| zlibTest.cpp:168:27:168:30 | **argv | semmle.label | **argv | +| zlibTest.cpp:163:29:163:43 | input | semmle.label | input | +| zlibTest.cpp:168:32:168:35 | **argv | semmle.label | **argv | +| zlibTest.cpp:168:32:168:35 | *argv | semmle.label | *argv | | zlibTest.cpp:169:19:169:25 | *access to array | semmle.label | *access to array | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | semmle.label | *access to array | @@ -217,13 +232,18 @@ nodes | zlibTest.cpp:172:18:172:24 | *access to array | semmle.label | *access to array | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | -| zstdTest.cpp:114:33:114:36 | **argv | semmle.label | **argv | +| zlibTest.cpp:174:19:174:66 | access to array | semmle.label | access to array | subpaths | libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | | libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | | libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | | libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | | libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar [Return] | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:29:40:29:43 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv [Return] | main.cpp:10:24:10:27 | minizip_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv [Return] | main.cpp:10:24:10:27 | minizip_test output argument | | minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | | minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | | minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | @@ -232,168 +252,16 @@ subpaths | zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | #select -| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:31:42:31:60 | access to array | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:31:42:31:60 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | brotliTest.cpp:29:32:29:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | libarchiveTests.cpp:144:32:144:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | minizipTest.cpp:36:32:36:35 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | zstdTest.cpp:114:33:114:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | brotliTest.cpp:29:32:29:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:144:32:144:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | minizipTest.cpp:36:32:36:35 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | zstdTest.cpp:114:33:114:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:42:52:42:67 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | brotliTest.cpp:29:32:29:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | libarchiveTests.cpp:144:32:144:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | minizipTest.cpp:36:32:36:35 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | brotliTest.cpp:29:32:29:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | libarchiveTests.cpp:144:32:144:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | minizipTest.cpp:36:32:36:35 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | access to array | zstdTest.cpp:114:33:114:36 | **argv | minizipTest.cpp:69:13:69:19 | access to array | This Decompression output $@. | zstdTest.cpp:114:33:114:36 | **argv | is not limited | -| zlibTest.cpp:70:13:70:22 | & ... | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | -| zlibTest.cpp:101:32:101:38 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | -| zlibTest.cpp:121:38:121:44 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | -| zlibTest.cpp:139:25:139:31 | inFileZ | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:139:25:139:31 | inFileZ | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | -| zlibTest.cpp:163:29:163:43 | *input | zlibTest.cpp:168:27:168:30 | **argv | zlibTest.cpp:163:29:163:43 | *input | This Decompression output $@. | zlibTest.cpp:168:27:168:30 | **argv | is not limited | +| brotliTest.cpp:31:42:31:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:37:35:37:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| libarchiveTests.cpp:93:33:93:34 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:42:52:42:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:60:30:60:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:69:13:69:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:70:13:70:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:101:32:101:38 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:121:38:121:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:139:25:139:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:139:25:139:31 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:163:29:163:43 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:163:29:163:43 | *input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:163:29:163:43 | input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:163:29:163:43 | input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp index 34285afc464..f56b5b78948 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp @@ -26,7 +26,7 @@ namespace std { } } -int main(int argc, const char *argv[]) { +int brotli_test(int argc, const char **argv) { uint8_t *output = nullptr; BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], reinterpret_cast(1024 * 1024 * 1024), output); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp index d20486a007b..58ed97b9369 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp @@ -141,7 +141,7 @@ static void extract(const char *filename) { } -int main(int argc, const char *argv[]) { +int libarchive_test(int argc, const char **argv) { extract(argv[1]); return 0; } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp new file mode 100644 index 00000000000..4417099e949 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp @@ -0,0 +1,14 @@ +int brotli_test(int argc, const char **argv); +int libarchive_test(int argc, const char **argv); +int minizip_test(int argc, const char **argv); +int zlib_test(int argc, const char **argv); +int zstd_test(int argc, const char **argv); + +int main(int argc, const char **argv) { + brotli_test(argc, argv); + libarchive_test(argc, argv); + minizip_test(argc, argv); + zlib_test(argc, argv); + zstd_test(argc, argv); + return 0; +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp index f48b13d0488..76747b837ac 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp @@ -33,7 +33,7 @@ void *mz_zip_create() { return nullptr; } -int main(int argc, const char *argv[]) { +int minizip_test(int argc, const char **argv) { void *zip_handle = mz_zip_create(); int32_t bytes_read; int32_t err; diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp index 9e23944e7ce..92e7b09b090 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp @@ -165,7 +165,7 @@ bool InflateString(const unsigned char *input, const unsigned char *output, size return result == Z_OK; } -int main(int argc, char **argv) { +int zlib_test(int argc, char **argv) { UnsafeGzfread(argv[2]); UnsafeGzgets(argv[2]); UnsafeInflate(argv[2]); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp index e04b85adfb7..a8c39a76251 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp @@ -111,8 +111,8 @@ static void decompressFile_orDie(const char *fname) { } -int main(int argc, const char **argv) { +int zstd_test(int argc, const char **argv) { const char *const inFilename = argv[1]; decompressFile_orDie(inFilename); return 0; -} \ No newline at end of file +} From 751e7e6bfbe844b178eaad72f49e63a17dacd4e1 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 10:03:19 +0200 Subject: [PATCH 295/334] C++: Remove useless function bodies from tests --- .../DecompressionBombs.expected | 212 +++++------------- .../CWE-409/DecompressionBombs/brotliTest.cpp | 3 - .../DecompressionBombs/libarchiveTests.cpp | 73 ++---- .../DecompressionBombs/minizipTest.cpp | 53 ++--- .../CWE-409/DecompressionBombs/zstdTest.cpp | 58 ++--- 5 files changed, 106 insertions(+), 293 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index f971c0e90bb..cf83e5726bf 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -1,87 +1,43 @@ edges -| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:29:40:29:43 | **argv | provenance | | -| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | provenance | | -| brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | provenance | TaintFunction | -| libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | -| libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | -| libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | -| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | -| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | -| libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | provenance | | -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | provenance | | -| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | -| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:86:38:86:39 | *ar [Return] | provenance | | -| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | -| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | libarchiveTests.cpp:93:33:93:34 | *ar | provenance | | -| libarchiveTests.cpp:105:33:105:40 | *filename | libarchiveTests.cpp:123:40:123:47 | *filename | provenance | | -| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | provenance | | -| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | provenance | | -| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | -| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | -| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | -| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | -| libarchiveTests.cpp:123:40:123:47 | *filename | libarchiveTests.cpp:123:37:123:37 | *a | provenance | Config | -| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:10:46:10:46 | *a | provenance | | -| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | provenance | | -| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | -| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | -| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | provenance | | -| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | provenance | | -| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:126:34:126:34 | *a | provenance | | -| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | libarchiveTests.cpp:129:23:129:23 | *a | provenance | | -| libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | provenance | | -| libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:145:13:145:19 | *access to array | provenance | | -| libarchiveTests.cpp:145:13:145:19 | *access to array | libarchiveTests.cpp:105:33:105:40 | *filename | provenance | | +| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:26:40:26:43 | **argv | provenance | | +| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | provenance | | +| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | provenance | TaintFunction | +| libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | +| libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:56:33:56:34 | *ar | provenance | | +| libarchiveTests.cpp:68:33:68:40 | *filename | libarchiveTests.cpp:86:40:86:47 | *filename | provenance | | +| libarchiveTests.cpp:86:37:86:37 | *a | libarchiveTests.cpp:92:23:92:23 | *a | provenance | | +| libarchiveTests.cpp:86:40:86:47 | *filename | libarchiveTests.cpp:86:37:86:37 | *a | provenance | Config | +| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | +| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | provenance | | +| libarchiveTests.cpp:92:23:92:23 | copy_data output argument | libarchiveTests.cpp:92:23:92:23 | *a | provenance | | +| libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | provenance | | +| libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:108:13:108:19 | *access to array | provenance | | +| libarchiveTests.cpp:108:13:108:19 | *access to array | libarchiveTests.cpp:68:33:68:40 | *filename | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:8:23:8:26 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:29:40:29:43 | **argv | provenance | | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:40:26:43 | **argv | provenance | | | main.cpp:8:23:8:26 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | provenance | | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | provenance | | | main.cpp:9:27:9:30 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | | main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | -| main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | provenance | | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:41:34:44 | **argv | provenance | | | main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | *argv | provenance | | | main.cpp:11:21:11:24 | **argv | zlibTest.cpp:168:32:168:35 | **argv | provenance | | -| main.cpp:11:21:11:24 | *argv | zlibTest.cpp:168:32:168:35 | **argv | provenance | | -| main.cpp:11:21:11:24 | *argv | zlibTest.cpp:168:32:168:35 | *argv | provenance | | -| minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | provenance | | -| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv | provenance | | -| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | provenance | | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:36:41:36:44 | **argv | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:36:41:36:44 | **argv [Return] | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:42:52:42:67 | *access to array | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:54:41:54:47 | *access to array | provenance | | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | minizipTest.cpp:69:13:69:19 | *access to array | provenance | | -| minizipTest.cpp:54:29:54:38 | **zip_reader | minizipTest.cpp:60:30:60:39 | **zip_reader | provenance | | -| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | provenance | | -| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:55:36:55:45 | *zip_reader | provenance | | -| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | -| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | provenance | | -| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | minizipTest.cpp:55:36:55:45 | *zip_reader | provenance | | -| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | -| minizipTest.cpp:54:41:54:47 | *access to array | minizipTest.cpp:54:29:54:38 | **zip_reader | provenance | Config | -| minizipTest.cpp:54:41:54:47 | *access to array | minizipTest.cpp:54:29:54:38 | *zip_reader | provenance | Config | -| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | provenance | | -| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | provenance | | -| minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | minizipTest.cpp:60:30:60:39 | *zip_reader | provenance | | -| minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | provenance | | -| minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | provenance | | +| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:34:41:34:44 | **argv | provenance | | +| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | provenance | | +| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:52:41:52:47 | *access to array | provenance | | +| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | provenance | | +| minizipTest.cpp:52:29:52:38 | **zip_reader | minizipTest.cpp:58:30:58:39 | **zip_reader | provenance | | +| minizipTest.cpp:52:29:52:38 | *zip_reader | minizipTest.cpp:58:30:58:39 | *zip_reader | provenance | | +| minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | **zip_reader | provenance | Config | +| minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | *zip_reader | provenance | Config | | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:63:25:63:35 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:52:25:52:25 | *a | provenance | | | zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:69:17:69:26 | & ... | provenance | Config | @@ -103,18 +59,11 @@ edges | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | Config | | zlibTest.cpp:156:41:156:45 | *input | zlibTest.cpp:163:29:163:43 | *input | provenance | | -| zlibTest.cpp:156:41:156:45 | input | zlibTest.cpp:163:29:163:43 | input | provenance | | | zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | | zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | | zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | | zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | | zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | *argv | zlibTest.cpp:174:19:174:66 | access to array | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | provenance | | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | @@ -134,35 +83,22 @@ edges | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | provenance | | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | -| zlibTest.cpp:174:19:174:66 | access to array | zlibTest.cpp:156:41:156:45 | input | provenance | | nodes -| brotliTest.cpp:29:40:29:43 | **argv | semmle.label | **argv | -| brotliTest.cpp:29:40:29:43 | **argv | semmle.label | **argv | -| brotliTest.cpp:31:42:31:60 | *access to array | semmle.label | *access to array | -| brotliTest.cpp:37:35:37:40 | *input2 | semmle.label | *input2 | -| libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | -| libarchiveTests.cpp:10:46:10:46 | *a | semmle.label | *a | -| libarchiveTests.cpp:38:48:38:55 | *pArchive | semmle.label | *pArchive | -| libarchiveTests.cpp:38:48:38:55 | *pArchive | semmle.label | *pArchive | -| libarchiveTests.cpp:57:45:57:52 | *pArchive | semmle.label | *pArchive | -| libarchiveTests.cpp:57:45:57:52 | *pArchive | semmle.label | *pArchive | -| libarchiveTests.cpp:86:38:86:39 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:86:38:86:39 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:86:38:86:39 | *ar [Return] | semmle.label | *ar [Return] | -| libarchiveTests.cpp:93:33:93:34 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:93:33:93:34 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | semmle.label | archive_read_data_block output argument | -| libarchiveTests.cpp:105:33:105:40 | *filename | semmle.label | *filename | -| libarchiveTests.cpp:123:37:123:37 | *a | semmle.label | *a | -| libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | semmle.label | archive_read_open_filename output argument | -| libarchiveTests.cpp:123:40:123:47 | *filename | semmle.label | *filename | -| libarchiveTests.cpp:126:34:126:34 | *a | semmle.label | *a | -| libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | semmle.label | archive_read_next_header output argument | -| libarchiveTests.cpp:129:23:129:23 | *a | semmle.label | *a | -| libarchiveTests.cpp:129:23:129:23 | copy_data output argument | semmle.label | copy_data output argument | -| libarchiveTests.cpp:144:44:144:47 | **argv | semmle.label | **argv | -| libarchiveTests.cpp:144:44:144:47 | **argv | semmle.label | **argv | -| libarchiveTests.cpp:145:13:145:19 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:26:40:26:43 | **argv | semmle.label | **argv | +| brotliTest.cpp:26:40:26:43 | **argv | semmle.label | **argv | +| brotliTest.cpp:28:42:28:60 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:34:35:34:40 | *input2 | semmle.label | *input2 | +| libarchiveTests.cpp:49:38:49:39 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:49:38:49:39 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:56:33:56:34 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:68:33:68:40 | *filename | semmle.label | *filename | +| libarchiveTests.cpp:86:37:86:37 | *a | semmle.label | *a | +| libarchiveTests.cpp:86:40:86:47 | *filename | semmle.label | *filename | +| libarchiveTests.cpp:92:23:92:23 | *a | semmle.label | *a | +| libarchiveTests.cpp:92:23:92:23 | copy_data output argument | semmle.label | copy_data output argument | +| libarchiveTests.cpp:107:44:107:47 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:107:44:107:47 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:108:13:108:19 | *access to array | semmle.label | *access to array | | main.cpp:7:33:7:36 | **argv | semmle.label | **argv | | main.cpp:8:23:8:26 | **argv | semmle.label | **argv | | main.cpp:8:23:8:26 | brotli_test output argument | semmle.label | brotli_test output argument | @@ -170,30 +106,16 @@ nodes | main.cpp:9:27:9:30 | libarchive_test output argument | semmle.label | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | semmle.label | **argv | | main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | -| main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | | main.cpp:11:21:11:24 | **argv | semmle.label | **argv | -| main.cpp:11:21:11:24 | *argv | semmle.label | *argv | -| minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | -| minizipTest.cpp:28:46:28:48 | *buf | semmle.label | *buf | -| minizipTest.cpp:36:41:36:44 | **argv | semmle.label | **argv | -| minizipTest.cpp:36:41:36:44 | **argv | semmle.label | **argv | -| minizipTest.cpp:36:41:36:44 | **argv [Return] | semmle.label | **argv [Return] | -| minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:42:52:42:67 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | semmle.label | mz_zip_entry_read output argument | -| minizipTest.cpp:54:29:54:38 | **zip_reader | semmle.label | **zip_reader | -| minizipTest.cpp:54:29:54:38 | *zip_reader | semmle.label | *zip_reader | -| minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | semmle.label | mz_zip_reader_open_file output argument | -| minizipTest.cpp:54:41:54:47 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:55:36:55:45 | *zip_reader | semmle.label | *zip_reader | -| minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | semmle.label | mz_zip_reader_goto_first_entry output argument | -| minizipTest.cpp:60:30:60:39 | **zip_reader | semmle.label | **zip_reader | -| minizipTest.cpp:60:30:60:39 | *zip_reader | semmle.label | *zip_reader | -| minizipTest.cpp:69:13:69:19 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | -| minizipTest.cpp:101:46:101:50 | *pVoid | semmle.label | *pVoid | -| minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | -| minizipTest.cpp:109:39:109:44 | *handle | semmle.label | *handle | +| minizipTest.cpp:34:41:34:44 | **argv | semmle.label | **argv | +| minizipTest.cpp:34:41:34:44 | **argv | semmle.label | **argv | +| minizipTest.cpp:40:52:40:67 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:52:29:52:38 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:52:29:52:38 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:52:41:52:47 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:58:30:58:39 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:58:30:58:39 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:67:13:67:19 | *access to array | semmle.label | *access to array | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | | zlibTest.cpp:63:25:63:35 | *a | semmle.label | *a | @@ -218,11 +140,8 @@ nodes | zlibTest.cpp:132:29:132:36 | *fileName | semmle.label | *fileName | | zlibTest.cpp:139:25:139:31 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:156:41:156:45 | *input | semmle.label | *input | -| zlibTest.cpp:156:41:156:45 | input | semmle.label | input | | zlibTest.cpp:163:29:163:43 | *input | semmle.label | *input | -| zlibTest.cpp:163:29:163:43 | input | semmle.label | input | | zlibTest.cpp:168:32:168:35 | **argv | semmle.label | **argv | -| zlibTest.cpp:168:32:168:35 | *argv | semmle.label | *argv | | zlibTest.cpp:169:19:169:25 | *access to array | semmle.label | *access to array | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | semmle.label | *access to array | @@ -232,36 +151,25 @@ nodes | zlibTest.cpp:172:18:172:24 | *access to array | semmle.label | *access to array | | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:174:19:174:66 | access to array | semmle.label | access to array | subpaths -| libarchiveTests.cpp:93:33:93:34 | *ar | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:57:45:57:52 | *pArchive | libarchiveTests.cpp:93:33:93:34 | archive_read_data_block output argument | -| libarchiveTests.cpp:123:37:123:37 | *a | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:38:48:38:55 | *pArchive | libarchiveTests.cpp:123:37:123:37 | archive_read_open_filename output argument | -| libarchiveTests.cpp:126:34:126:34 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:10:46:10:46 | *a | libarchiveTests.cpp:126:34:126:34 | archive_read_next_header output argument | -| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | -| libarchiveTests.cpp:129:23:129:23 | *a | libarchiveTests.cpp:86:38:86:39 | *ar | libarchiveTests.cpp:86:38:86:39 | *ar [Return] | libarchiveTests.cpp:129:23:129:23 | copy_data output argument | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:29:40:29:43 | **argv | brotliTest.cpp:29:40:29:43 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | libarchiveTests.cpp:144:44:144:47 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv [Return] | main.cpp:10:24:10:27 | minizip_test output argument | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:36:41:36:44 | **argv | minizipTest.cpp:36:41:36:44 | **argv [Return] | main.cpp:10:24:10:27 | minizip_test output argument | -| minizipTest.cpp:42:52:42:67 | *access to array | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:28:46:28:48 | *buf | minizipTest.cpp:42:52:42:67 | mz_zip_entry_read output argument | -| minizipTest.cpp:54:29:54:38 | *zip_reader | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:109:39:109:44 | *handle | minizipTest.cpp:54:29:54:38 | mz_zip_reader_open_file output argument | -| minizipTest.cpp:55:36:55:45 | *zip_reader | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:101:46:101:50 | *pVoid | minizipTest.cpp:55:36:55:45 | mz_zip_reader_goto_first_entry output argument | +| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:26:40:26:43 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:34:41:34:44 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | | zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | | zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | #select -| brotliTest.cpp:31:42:31:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:31:42:31:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| brotliTest.cpp:37:35:37:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:37:35:37:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| libarchiveTests.cpp:93:33:93:34 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:93:33:93:34 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:42:52:42:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:42:52:42:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:60:30:60:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:60:30:60:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:60:30:60:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:69:13:69:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:69:13:69:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:28:42:28:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:34:35:34:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| libarchiveTests.cpp:56:33:56:34 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:56:33:56:34 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:40:52:40:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:58:30:58:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:58:30:58:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:67:13:67:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:70:13:70:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:101:32:101:38 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:121:38:121:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:139:25:139:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:139:25:139:31 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:163:29:163:43 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:163:29:163:43 | *input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:163:29:163:43 | input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:163:29:163:43 | input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp index f56b5b78948..4ff9713a0c2 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp @@ -9,9 +9,6 @@ BrotliDecoderResult BrotliDecoderDecompress( size_t *decoded_size, uint8_t decoded_buffer[]) { return static_cast(0); }; -struct { -} BrotliDecoderStateStruct; - void strncpy(char *string, const char *string1, int i); typedef struct BrotliDecoderStateStruct BrotliDecoderState; diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp index 58ed97b9369..b169416d3a3 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp @@ -7,81 +7,44 @@ #define ARCHIVE_WARN (-20) /* Partial success. */ -int archive_read_next_header(struct archive *a, struct archive_entry **entry) { - return 1; -} +int archive_read_next_header(struct archive *a, struct archive_entry **entry); -static struct archive *archive_read_new() { - return nullptr; -} +struct archive *archive_read_new(); -static archive *archive_write_disk_new() { - return nullptr; -} +archive *archive_write_disk_new(); -static void archive_read_support_format_all(archive *pArchive) { +void archive_read_support_format_all(archive *pArchive); -} +void archive_read_support_filter_all(archive *pArchive); -static void archive_read_support_filter_all(archive *pArchive) { +void archive_write_disk_set_options(archive *pArchive, int flags); -} +void archive_write_disk_set_standard_lookup(archive *pArchive); -static void archive_write_disk_set_options(archive *pArchive, int flags) { +int archive_read_open_filename(archive *pArchive, const char *filename, int i); -} +struct archive_entry; -static void archive_write_disk_set_standard_lookup(archive *pArchive) { +int archive_write_header(archive *pArchive, archive_entry *entry); -} - -static int archive_read_open_filename(archive *pArchive, const char *filename, int i) {} - -static void archive_error_string(archive *pArchive) { - -} - -struct archive_entry { -}; - -static int archive_write_header(archive *pArchive, archive_entry *entry) { - return 0; -} - -static int archive_entry_size(archive_entry *pEntry) { -} +int archive_entry_size(archive_entry *pEntry); typedef int size_t; typedef int la_int64_t; -static int archive_read_data_block(archive *pArchive, const void **pVoid, size_t *pInt, la_int64_t *pInt1) { - return 0; -} +int archive_read_data_block(archive *pArchive, const void **pVoid, size_t *pInt, la_int64_t *pInt1); -static int archive_write_data_block(archive *pArchive, const void *pVoid, size_t size, la_int64_t offset) { - return 0; -} +int archive_write_data_block(archive *pArchive, const void *pVoid, size_t size, la_int64_t offset); -static int archive_write_finish_entry(archive *pArchive) { - return 0; -} +int archive_write_finish_entry(archive *pArchive); -static void archive_read_close(archive *pArchive) { +void archive_read_close(archive *pArchive); -} +void archive_read_free(archive *pArchive); -static void archive_read_free(archive *pArchive) { - -} - -static void archive_write_close(archive *pArchive) { - -} - -static void archive_write_free(archive *pArchive) { - -} +void archive_write_close(archive *pArchive); +void archive_write_free(archive *pArchive); static int copy_data(struct archive *ar, struct archive *aw) { int r; diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp index 76747b837ac..62368ceb475 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp @@ -25,9 +25,7 @@ int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write); void UnzOpen(const char *string); -int32_t mz_zip_entry_read(void *pVoid, void *buf, int32_t i) { - return 0; -} +int32_t mz_zip_entry_read(void *pVoid, void *buf, int32_t i); void *mz_zip_create() { return nullptr; @@ -70,51 +68,26 @@ int minizip_test(int argc, const char **argv) { return 0; } -void UnzOpen(const char *path) { +void UnzOpen(const char *path); -} +int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write); -int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write) { - return 0; -} +void mz_zip_reader_delete(void **pVoid); -void mz_zip_reader_delete(void **pVoid) { +void mz_zip_reader_close(void *pVoid); -} +void mz_stream_os_delete(void **pVoid); -void mz_zip_reader_close(void *pVoid) { +void mz_stream_os_close(void *pVoid); -} +int32_t mz_stream_os_open(void *pVoid, const char *path, int write); -void mz_stream_os_delete(void **pVoid) { +int32_t mz_zip_reader_goto_first_entry(void *pVoid); -} +void *mz_zip_reader_create(); -void mz_stream_os_close(void *pVoid) { +int32_t mz_zip_reader_open_file(void *handle, const char *path); -} - -int32_t mz_stream_os_open(void *pVoid, const char *path, int write) { - return 0; -} - -int32_t mz_zip_reader_goto_first_entry(void *pVoid) { - return 0; -} - -void *mz_zip_reader_create() { - return nullptr; -} - -int32_t mz_zip_reader_open_file(void *handle, const char *path) { - return 0; -} - -int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path) { - return 0; -} - -void *mz_stream_os_create() { - return nullptr; -} +int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path); +void *mz_stream_os_create(); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp index a8c39a76251..510a10c5c7a 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp @@ -1,25 +1,16 @@ typedef struct _IO_FILE FILE; -static FILE *fopen_orDie(const char *filename, const char *instruction) { - return nullptr; -} +FILE *fopen_orDie(const char *filename, const char *instruction); typedef long unsigned int size_t; -static const size_t ZSTD_DStreamInSize() { - return 0; -} +const size_t ZSTD_DStreamInSize(); -static void *const malloc_orDie(const size_t size) { - return nullptr; -} +void *const malloc_orDie(const size_t size); -static const size_t ZSTD_DStreamOutSize() { - return 0; -} +const size_t ZSTD_DStreamOutSize(); -struct ZSTD_DCtx { -}; +struct ZSTD_DCtx; typedef struct ZSTD_inBuffer_s { const void *src; @@ -32,44 +23,25 @@ typedef struct ZSTD_outBuffer_s { size_t pos; } ZSTD_outBuffer; -static ZSTD_DCtx *const ZSTD_createDCtx() { - return nullptr; -} +ZSTD_DCtx *const ZSTD_createDCtx(); -static void CHECK(bool b, const char *string) { +void CHECK(bool b, const char *string); -} +size_t fread_orDie(void *const pVoid, const size_t read, FILE *const pFile); -static size_t fread_orDie(void *const pVoid, const size_t read, FILE *const pFile) { -} +void CHECK_ZSTD(const size_t ret); -static void CHECK_ZSTD(const size_t ret) { +void fwrite_orDie(void *const pVoid, size_t pos, FILE *const pFile); -} +void exit(int i); -static void fwrite_orDie(void *const pVoid, size_t pos, FILE *const pFile) { +void fclose_orDie(FILE *const pFile); -} +void free(void *const pVoid); -static void exit(int i) { +const size_t ZSTD_decompressStream(ZSTD_DCtx *const pCtx, ZSTD_outBuffer *pS, ZSTD_inBuffer *pS1); -} - -static void fclose_orDie(FILE *const pFile) { - -} - -static void free(void *const pVoid) { - -} - -static const size_t ZSTD_decompressStream(ZSTD_DCtx *const pCtx, ZSTD_outBuffer *pS, ZSTD_inBuffer *pS1) { - -} - -static void ZSTD_freeDCtx(ZSTD_DCtx *const pCtx) { - -} +void ZSTD_freeDCtx(ZSTD_DCtx *const pCtx); static void decompressFile_orDie(const char *fname) { FILE *const fin = fopen_orDie(fname, "rb"); From d8a70d8d58c729d91960b90be360a3d8edf109d7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 10:23:51 +0200 Subject: [PATCH 296/334] C++: Add test annotations --- .../CWE/CWE-409/DecompressionBombs/brotliTest.cpp | 4 ++-- .../CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp | 2 +- .../CWE/CWE-409/DecompressionBombs/minizipTest.cpp | 6 +++--- .../CWE/CWE-409/DecompressionBombs/zlibTest.cpp | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp index 4ff9713a0c2..3444c6c3c1c 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp @@ -25,13 +25,13 @@ namespace std { int brotli_test(int argc, const char **argv) { uint8_t *output = nullptr; - BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], + BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], // BAD reinterpret_cast(1024 * 1024 * 1024), output); uint8_t **output2 = nullptr; const uint8_t **input2 = nullptr; std::strncpy(reinterpret_cast(input2), argv[2], 32); BrotliDecoderDecompressStream(0, reinterpret_cast(1024 * 1024), - input2, reinterpret_cast(1024 * 1024 * 1024), + input2, reinterpret_cast(1024 * 1024 * 1024), // BAD output2, reinterpret_cast(1024 * 1024 * 1024)); return 0; diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp index b169416d3a3..b6103fe54ea 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp @@ -53,7 +53,7 @@ static int copy_data(struct archive *ar, struct archive *aw) { la_int64_t offset; for (;;) { - archive_read_data_block(ar, &buff, &size, &offset); + archive_read_data_block(ar, &buff, &size, &offset); // BAD if (r == ARCHIVE_EOF) return (ARCHIVE_OK); if (r < ARCHIVE_OK) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp index 62368ceb475..cc5dd387fe9 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp @@ -37,7 +37,7 @@ int minizip_test(int argc, const char **argv) { int32_t err; char buf[4096]; do { - bytes_read = mz_zip_entry_read(zip_handle, (char *) argv[1], sizeof(buf)); + bytes_read = mz_zip_entry_read(zip_handle, (char *) argv[1], sizeof(buf)); // BAD if (bytes_read < 0) { err = bytes_read; } @@ -55,7 +55,7 @@ int minizip_test(int argc, const char **argv) { mz_stream_os_open(entry_stream, entry_path, 1); int file_stream; int mz_stream_os_write; - mz_zip_reader_entry_save(zip_reader, file_stream, mz_stream_os_write); + mz_zip_reader_entry_save(zip_reader, file_stream, mz_stream_os_write); // BAD // the above sink is same as "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", // "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" and "mz_zip_entry_read" functions mz_stream_os_close(entry_stream); @@ -64,7 +64,7 @@ int minizip_test(int argc, const char **argv) { mz_zip_reader_delete(&zip_reader); - UnzOpen(argv[3]); + UnzOpen(argv[3]); // BAD return 0; } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp index 92e7b09b090..0c12c60c14a 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp @@ -67,7 +67,7 @@ int UnsafeInflate(char *a) { // uLong total_out; /* total number of bytes output so far */ // the actual DE-compression work. inflateInit(&infstream); - inflate(&infstream, Z_NO_FLUSH); + inflate(&infstream, Z_NO_FLUSH); // BAD inflateEnd(&infstream); @@ -98,7 +98,7 @@ int UnsafeGzread(char *fileName) { unsigned char unzipBuffer[8192]; unsigned int unzippedBytes; while (true) { - unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); + unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); // BAD if (unzippedBytes > 0) { std::cout << unzippedBytes; } else { @@ -118,7 +118,7 @@ int UnsafeGzfread(char *fileName) { } while (true) { char buffer[1000]; - if (!gzfread(buffer, 999, 1, inFileZ)) { + if (!gzfread(buffer, 999, 1, inFileZ)) { // BAD break; } } @@ -136,7 +136,7 @@ int UnsafeGzgets(char *fileName) { char *buffer = new char[4000000000]; char *result; while (true) { - result = gzgets(inFileZ, buffer, 1000000000); + result = gzgets(inFileZ, buffer, 1000000000); // BAD if (result == nullptr) { break; } @@ -160,7 +160,7 @@ bool InflateString(const unsigned char *input, const unsigned char *output, size destination_length = (uLong) output_length; int result = uncompress((Bytef *) output, &destination_length, - (Bytef *) input, source_length); + (Bytef *) input, source_length); // BAD return result == Z_OK; } From ad3605c5950c2af222e0a9faf557aca2cb8b0b4b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 10:26:53 +0200 Subject: [PATCH 297/334] C++: Minor test clean up --- .../DecompressionBombs.expected | 56 +++++++++---------- .../CWE-409/DecompressionBombs/brotliTest.cpp | 3 +- .../DecompressionBombs/libarchiveTests.cpp | 3 +- .../CWE/CWE-409/DecompressionBombs/main.cpp | 10 ++-- .../DecompressionBombs/minizipTest.cpp | 27 +-------- .../CWE-409/DecompressionBombs/zlibTest.cpp | 4 +- .../CWE-409/DecompressionBombs/zstdTest.cpp | 3 +- 7 files changed, 39 insertions(+), 67 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index cf83e5726bf..38098f2d3a9 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -1,7 +1,7 @@ edges -| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:26:40:26:43 | **argv | provenance | | -| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | provenance | | -| brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | provenance | TaintFunction | +| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | provenance | | +| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | provenance | | +| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | provenance | TaintFunction | | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:56:33:56:34 | *ar | provenance | | | libarchiveTests.cpp:68:33:68:40 | *filename | libarchiveTests.cpp:86:40:86:47 | *filename | provenance | | @@ -10,30 +10,30 @@ edges | libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | | libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | provenance | | | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | libarchiveTests.cpp:92:23:92:23 | *a | provenance | | -| libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | provenance | | -| libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:108:13:108:19 | *access to array | provenance | | +| libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | provenance | | +| libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:108:13:108:19 | *access to array | provenance | | | libarchiveTests.cpp:108:13:108:19 | *access to array | libarchiveTests.cpp:68:33:68:40 | *filename | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:8:23:8:26 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:40:26:43 | **argv | provenance | | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | provenance | | | main.cpp:8:23:8:26 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | provenance | | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | provenance | | | main.cpp:9:27:9:30 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | | main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:41:34:44 | **argv | provenance | | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | | main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:168:32:168:35 | **argv | provenance | | -| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:34:41:34:44 | **argv | provenance | | -| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | provenance | | -| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:52:41:52:47 | *access to array | provenance | | -| minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | provenance | | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:168:33:168:36 | **argv | provenance | | +| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | +| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | provenance | | +| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:52:41:52:47 | *access to array | provenance | | +| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | provenance | | | minizipTest.cpp:52:29:52:38 | **zip_reader | minizipTest.cpp:58:30:58:39 | **zip_reader | provenance | | | minizipTest.cpp:52:29:52:38 | *zip_reader | minizipTest.cpp:58:30:58:39 | *zip_reader | provenance | | | minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | **zip_reader | provenance | Config | @@ -59,11 +59,11 @@ edges | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | | zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | Config | | zlibTest.cpp:156:41:156:45 | *input | zlibTest.cpp:163:29:163:43 | *input | provenance | | -| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:168:32:168:35 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | +| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | +| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | +| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | +| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | +| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | provenance | | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | @@ -84,8 +84,8 @@ edges | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | | zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | nodes -| brotliTest.cpp:26:40:26:43 | **argv | semmle.label | **argv | -| brotliTest.cpp:26:40:26:43 | **argv | semmle.label | **argv | +| brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | +| brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | | brotliTest.cpp:28:42:28:60 | *access to array | semmle.label | *access to array | | brotliTest.cpp:34:35:34:40 | *input2 | semmle.label | *input2 | | libarchiveTests.cpp:49:38:49:39 | *ar | semmle.label | *ar | @@ -96,8 +96,8 @@ nodes | libarchiveTests.cpp:86:40:86:47 | *filename | semmle.label | *filename | | libarchiveTests.cpp:92:23:92:23 | *a | semmle.label | *a | | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | semmle.label | copy_data output argument | -| libarchiveTests.cpp:107:44:107:47 | **argv | semmle.label | **argv | -| libarchiveTests.cpp:107:44:107:47 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:107:45:107:48 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:107:45:107:48 | **argv | semmle.label | **argv | | libarchiveTests.cpp:108:13:108:19 | *access to array | semmle.label | *access to array | | main.cpp:7:33:7:36 | **argv | semmle.label | **argv | | main.cpp:8:23:8:26 | **argv | semmle.label | **argv | @@ -107,8 +107,8 @@ nodes | main.cpp:10:24:10:27 | **argv | semmle.label | **argv | | main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | | main.cpp:11:21:11:24 | **argv | semmle.label | **argv | -| minizipTest.cpp:34:41:34:44 | **argv | semmle.label | **argv | -| minizipTest.cpp:34:41:34:44 | **argv | semmle.label | **argv | +| minizipTest.cpp:34:42:34:45 | **argv | semmle.label | **argv | +| minizipTest.cpp:34:42:34:45 | **argv | semmle.label | **argv | | minizipTest.cpp:40:52:40:67 | *access to array | semmle.label | *access to array | | minizipTest.cpp:52:29:52:38 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:52:29:52:38 | *zip_reader | semmle.label | *zip_reader | @@ -141,7 +141,7 @@ nodes | zlibTest.cpp:139:25:139:31 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:156:41:156:45 | *input | semmle.label | *input | | zlibTest.cpp:163:29:163:43 | *input | semmle.label | *input | -| zlibTest.cpp:168:32:168:35 | **argv | semmle.label | **argv | +| zlibTest.cpp:168:33:168:36 | **argv | semmle.label | **argv | | zlibTest.cpp:169:19:169:25 | *access to array | semmle.label | *access to array | | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | semmle.label | *access to array | @@ -153,9 +153,9 @@ nodes | zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | subpaths | libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:40:26:43 | **argv | brotliTest.cpp:26:40:26:43 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | libarchiveTests.cpp:107:44:107:47 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:41:34:44 | **argv | minizipTest.cpp:34:41:34:44 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | | zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | | zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp index 3444c6c3c1c..ec802ae326e 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp @@ -23,7 +23,7 @@ namespace std { } } -int brotli_test(int argc, const char **argv) { +void brotli_test(int argc, const char **argv) { uint8_t *output = nullptr; BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], // BAD reinterpret_cast(1024 * 1024 * 1024), output); @@ -34,5 +34,4 @@ int brotli_test(int argc, const char **argv) { input2, reinterpret_cast(1024 * 1024 * 1024), // BAD output2, reinterpret_cast(1024 * 1024 * 1024)); - return 0; } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp index b6103fe54ea..70ff6cef17f 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp @@ -104,7 +104,6 @@ static void extract(const char *filename) { } -int libarchive_test(int argc, const char **argv) { +void libarchive_test(int argc, const char **argv) { extract(argv[1]); - return 0; } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp index 4417099e949..47f76ff079b 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/main.cpp @@ -1,8 +1,8 @@ -int brotli_test(int argc, const char **argv); -int libarchive_test(int argc, const char **argv); -int minizip_test(int argc, const char **argv); -int zlib_test(int argc, const char **argv); -int zstd_test(int argc, const char **argv); +void brotli_test(int argc, const char **argv); +void libarchive_test(int argc, const char **argv); +void minizip_test(int argc, const char **argv); +void zlib_test(int argc, const char **argv); +void zstd_test(int argc, const char **argv); int main(int argc, const char **argv) { brotli_test(argc, argv); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp index cc5dd387fe9..f89e8698108 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp @@ -31,7 +31,7 @@ void *mz_zip_create() { return nullptr; } -int minizip_test(int argc, const char **argv) { +void minizip_test(int argc, const char **argv) { void *zip_handle = mz_zip_create(); int32_t bytes_read; int32_t err; @@ -65,29 +65,4 @@ int minizip_test(int argc, const char **argv) { UnzOpen(argv[3]); // BAD - return 0; } - -void UnzOpen(const char *path); - -int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write); - -void mz_zip_reader_delete(void **pVoid); - -void mz_zip_reader_close(void *pVoid); - -void mz_stream_os_delete(void **pVoid); - -void mz_stream_os_close(void *pVoid); - -int32_t mz_stream_os_open(void *pVoid, const char *path, int write); - -int32_t mz_zip_reader_goto_first_entry(void *pVoid); - -void *mz_zip_reader_create(); - -int32_t mz_zip_reader_open_file(void *handle, const char *path); - -int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path); - -void *mz_stream_os_create(); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp index 0c12c60c14a..697500f139b 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp @@ -151,7 +151,7 @@ typedef unsigned char Bytef; #define Z_OK 0 int uncompress(Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen) { return 0; } + const Bytef *source, uLong sourceLen); bool InflateString(const unsigned char *input, const unsigned char *output, size_t output_length) { uLong source_length; @@ -165,7 +165,7 @@ bool InflateString(const unsigned char *input, const unsigned char *output, size return result == Z_OK; } -int zlib_test(int argc, char **argv) { +void zlib_test(int argc, char **argv) { UnsafeGzfread(argv[2]); UnsafeGzgets(argv[2]); UnsafeInflate(argv[2]); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp index 510a10c5c7a..e19f2d4c675 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp @@ -83,8 +83,7 @@ static void decompressFile_orDie(const char *fname) { } -int zstd_test(int argc, const char **argv) { +void zstd_test(int argc, const char **argv) { const char *const inFilename = argv[1]; decompressFile_orDie(inFilename); - return 0; } From 078e63524c7697a03856e00566cec22d35e00d78 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 10:48:25 +0200 Subject: [PATCH 298/334] C++: Remove code that is irrelevant for the zlib test --- .../DecompressionBombs.expected | 180 +++++++++--------- .../CWE-409/DecompressionBombs/zlibTest.cpp | 141 +++----------- 2 files changed, 116 insertions(+), 205 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index 38098f2d3a9..75b842c270a 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -29,7 +29,7 @@ edges | main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | | main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:168:33:168:36 | **argv | provenance | | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | provenance | | | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | provenance | | | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:52:41:52:47 | *access to array | provenance | | @@ -38,51 +38,51 @@ edges | minizipTest.cpp:52:29:52:38 | *zip_reader | minizipTest.cpp:58:30:58:39 | *zip_reader | provenance | | | minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | **zip_reader | provenance | Config | | minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | *zip_reader | provenance | Config | -| zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:63:25:63:35 | *a | provenance | | -| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:52:25:52:25 | *a | provenance | | -| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:69:17:69:26 | & ... | provenance | Config | -| zlibTest.cpp:63:25:63:35 | *a | zlibTest.cpp:70:13:70:22 | & ... | provenance | Config | -| zlibTest.cpp:69:17:69:26 | & ... | zlibTest.cpp:70:13:70:22 | & ... | provenance | | -| zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:94:29:94:36 | *fileName | provenance | | -| zlibTest.cpp:94:22:94:27 | call to gzopen | zlibTest.cpp:94:22:94:27 | call to gzopen | provenance | | -| zlibTest.cpp:94:22:94:27 | call to gzopen | zlibTest.cpp:101:32:101:38 | inFileZ | provenance | | -| zlibTest.cpp:94:29:94:36 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | provenance | | -| zlibTest.cpp:94:29:94:36 | *fileName | zlibTest.cpp:94:22:94:27 | call to gzopen | provenance | Config | -| zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:115:29:115:36 | *fileName | provenance | | -| zlibTest.cpp:115:22:115:27 | call to gzopen | zlibTest.cpp:115:22:115:27 | call to gzopen | provenance | | -| zlibTest.cpp:115:22:115:27 | call to gzopen | zlibTest.cpp:121:38:121:44 | inFileZ | provenance | | -| zlibTest.cpp:115:29:115:36 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | -| zlibTest.cpp:115:29:115:36 | *fileName | zlibTest.cpp:115:22:115:27 | call to gzopen | provenance | Config | -| zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:132:29:132:36 | *fileName | provenance | | -| zlibTest.cpp:132:22:132:27 | call to gzopen | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | | -| zlibTest.cpp:132:22:132:27 | call to gzopen | zlibTest.cpp:139:25:139:31 | inFileZ | provenance | | -| zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | -| zlibTest.cpp:132:29:132:36 | *fileName | zlibTest.cpp:132:22:132:27 | call to gzopen | provenance | Config | -| zlibTest.cpp:156:41:156:45 | *input | zlibTest.cpp:163:29:163:43 | *input | provenance | | -| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:169:19:169:25 | *access to array | provenance | | -| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | -| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:168:33:168:36 | **argv | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | provenance | | -| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | provenance | | -| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:170:18:170:24 | *access to array | provenance | | -| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | provenance | | -| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | provenance | | -| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:171:19:171:25 | *access to array | provenance | | -| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | provenance | | -| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | provenance | | -| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | zlibTest.cpp:172:18:172:24 | *access to array | provenance | | -| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | provenance | | -| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | provenance | | -| zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | zlibTest.cpp:174:19:174:66 | *access to array | provenance | | -| zlibTest.cpp:174:19:174:66 | *access to array | zlibTest.cpp:156:41:156:45 | *input | provenance | | +| zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:20:25:20:39 | *input | provenance | | +| zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:16:26:16:30 | *input | provenance | | +| zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:24:17:24:26 | & ... | provenance | Config | +| zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:25:13:25:22 | & ... | provenance | Config | +| zlibTest.cpp:24:17:24:26 | & ... | zlibTest.cpp:25:13:25:22 | & ... | provenance | | +| zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:38:29:38:36 | *fileName | provenance | | +| zlibTest.cpp:38:22:38:27 | call to gzopen | zlibTest.cpp:38:22:38:27 | call to gzopen | provenance | | +| zlibTest.cpp:38:22:38:27 | call to gzopen | zlibTest.cpp:41:20:41:26 | inFileZ | provenance | | +| zlibTest.cpp:38:29:38:36 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | provenance | | +| zlibTest.cpp:38:29:38:36 | *fileName | zlibTest.cpp:38:22:38:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:48:29:48:36 | *fileName | provenance | | +| zlibTest.cpp:48:22:48:27 | call to gzopen | zlibTest.cpp:48:22:48:27 | call to gzopen | provenance | | +| zlibTest.cpp:48:22:48:27 | call to gzopen | zlibTest.cpp:51:38:51:44 | inFileZ | provenance | | +| zlibTest.cpp:48:29:48:36 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | provenance | | +| zlibTest.cpp:48:29:48:36 | *fileName | zlibTest.cpp:48:22:48:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:58:29:58:36 | *fileName | provenance | | +| zlibTest.cpp:58:22:58:27 | call to gzopen | zlibTest.cpp:58:22:58:27 | call to gzopen | provenance | | +| zlibTest.cpp:58:22:58:27 | call to gzopen | zlibTest.cpp:62:25:62:31 | inFileZ | provenance | | +| zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | +| zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:58:22:58:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:77:45:77:59 | *input | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:81:19:81:25 | *access to array | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:82:18:82:24 | *access to array | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | provenance | | +| zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:82:18:82:24 | *access to array | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | provenance | | nodes | brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | | brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | @@ -116,50 +116,50 @@ nodes | minizipTest.cpp:58:30:58:39 | **zip_reader | semmle.label | **zip_reader | | minizipTest.cpp:58:30:58:39 | *zip_reader | semmle.label | *zip_reader | | minizipTest.cpp:67:13:67:19 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | -| zlibTest.cpp:52:25:52:25 | *a | semmle.label | *a | -| zlibTest.cpp:63:25:63:35 | *a | semmle.label | *a | -| zlibTest.cpp:69:17:69:26 | & ... | semmle.label | & ... | -| zlibTest.cpp:70:13:70:22 | & ... | semmle.label | & ... | -| zlibTest.cpp:93:24:93:31 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:93:24:93:31 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:94:22:94:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:94:22:94:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:94:29:94:36 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:101:32:101:38 | inFileZ | semmle.label | inFileZ | -| zlibTest.cpp:114:25:114:32 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:114:25:114:32 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:115:22:115:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:115:22:115:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:115:29:115:36 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:121:38:121:44 | inFileZ | semmle.label | inFileZ | -| zlibTest.cpp:131:24:131:31 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:131:24:131:31 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:132:22:132:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:132:22:132:27 | call to gzopen | semmle.label | call to gzopen | -| zlibTest.cpp:132:29:132:36 | *fileName | semmle.label | *fileName | -| zlibTest.cpp:139:25:139:31 | inFileZ | semmle.label | inFileZ | -| zlibTest.cpp:156:41:156:45 | *input | semmle.label | *input | -| zlibTest.cpp:163:29:163:43 | *input | semmle.label | *input | -| zlibTest.cpp:168:33:168:36 | **argv | semmle.label | **argv | -| zlibTest.cpp:169:19:169:25 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | -| zlibTest.cpp:170:18:170:24 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | semmle.label | UnsafeGzgets output argument | -| zlibTest.cpp:171:19:171:25 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | semmle.label | UnsafeInflate output argument | -| zlibTest.cpp:172:18:172:24 | *access to array | semmle.label | *access to array | -| zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | -| zlibTest.cpp:174:19:174:66 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | +| zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | +| zlibTest.cpp:20:25:20:39 | *input | semmle.label | *input | +| zlibTest.cpp:24:17:24:26 | & ... | semmle.label | & ... | +| zlibTest.cpp:25:13:25:22 | & ... | semmle.label | & ... | +| zlibTest.cpp:37:25:37:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:37:25:37:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:38:22:38:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:38:22:38:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:38:29:38:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:41:20:41:26 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:47:26:47:33 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:47:26:47:33 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:48:22:48:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:48:22:48:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:48:29:48:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:51:38:51:44 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:57:25:57:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:57:25:57:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:58:22:58:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:58:22:58:27 | call to gzopen | semmle.label | call to gzopen | +| zlibTest.cpp:58:29:58:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:62:25:62:31 | inFileZ | semmle.label | inFileZ | +| zlibTest.cpp:71:26:71:30 | *input | semmle.label | *input | +| zlibTest.cpp:77:45:77:59 | *input | semmle.label | *input | +| zlibTest.cpp:80:33:80:36 | **argv | semmle.label | **argv | +| zlibTest.cpp:81:19:81:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | +| zlibTest.cpp:82:18:82:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | semmle.label | UnsafeGzgets output argument | +| zlibTest.cpp:83:19:83:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | semmle.label | UnsafeInflate output argument | +| zlibTest.cpp:84:18:84:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | +| zlibTest.cpp:85:19:85:25 | *access to array | semmle.label | *access to array | subpaths | libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | | main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | -| zlibTest.cpp:169:19:169:25 | *access to array | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:114:25:114:32 | *fileName | zlibTest.cpp:169:19:169:25 | UnsafeGzfread output argument | -| zlibTest.cpp:170:18:170:24 | *access to array | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:131:24:131:31 | *fileName | zlibTest.cpp:170:18:170:24 | UnsafeGzgets output argument | -| zlibTest.cpp:171:19:171:25 | *access to array | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:52:25:52:25 | *a | zlibTest.cpp:171:19:171:25 | UnsafeInflate output argument | -| zlibTest.cpp:172:18:172:24 | *access to array | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:93:24:93:31 | *fileName | zlibTest.cpp:172:18:172:24 | UnsafeGzread output argument | +| zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | +| zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | +| zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | +| zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | #select | brotliTest.cpp:28:42:28:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | brotliTest.cpp:34:35:34:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | @@ -168,8 +168,8 @@ subpaths | minizipTest.cpp:58:30:58:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:58:30:58:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:67:13:67:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:70:13:70:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:70:13:70:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:101:32:101:38 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:101:32:101:38 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:121:38:121:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:121:38:121:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:139:25:139:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:139:25:139:31 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:163:29:163:43 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:163:29:163:43 | *input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:25:13:25:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:25:13:25:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:41:20:41:26 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:41:20:41:26 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:51:38:51:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:51:38:51:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:62:25:62:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:62:25:62:31 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| zlibTest.cpp:77:45:77:59 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:77:45:77:59 | *input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp index 697500f139b..7643a607407 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zlibTest.cpp @@ -1,138 +1,61 @@ -#define Z_NULL 0 -# define FAR -typedef unsigned char Byte; -typedef Byte FAR Bytef; +typedef unsigned char Bytef; +typedef unsigned long uLong; +typedef uLong uLongf; typedef unsigned int uInt; -#define Z_BEST_COMPRESSION 9 -#define Z_FINISH 4 -#define Z_NO_FLUSH 0 - -typedef struct { - int *zalloc; - int *zfree; +struct z_stream { Bytef *next_in; Bytef *next_out; - int *opaque; uInt avail_out; - uInt avail_in; -} z_stream; - - -void deflateInit(z_stream *defstream, int i); - -void deflate(z_stream *defstream, int i); - -void deflateEnd(z_stream *defstream); +}; void inflateInit(z_stream *infstream); - void inflate(z_stream *infstream, int i); - void inflateEnd(z_stream *infstream); -namespace std { - template - struct char_traits; - - template > - class basic_ostream { - public: - typedef charT char_type; - }; - - template - basic_ostream &operator<<(basic_ostream &, const charT *); - - typedef basic_ostream ostream; - - extern ostream cout; -} - -int UnsafeInflate(char *a) { - // placeholder for the Uncompressed (inflated) version of "a" - char c[1024000]; +void UnsafeInflate(char *input) { + unsigned char output[1024]; z_stream infstream; - infstream.zalloc = Z_NULL; - infstream.zfree = Z_NULL; - infstream.opaque = Z_NULL; - // setup "b" as the input and "c" as the compressed output - // TOTHINK: Here we can add additional step from Right operand to z_stream variable access - infstream.avail_in = (uInt) (1000); // size of input - infstream.next_in = (Bytef *) a; // input char array - infstream.avail_out = (uInt) sizeof(c); // size of output - infstream.next_out = (Bytef *) c; // output char array + infstream.next_in = (Bytef *) input; // input char array + infstream.avail_out = sizeof(output); // size of output + infstream.next_out = output; // output char array - // uLong total_out; /* total number of bytes output so far */ - // the actual DE-compression work. inflateInit(&infstream); - inflate(&infstream, Z_NO_FLUSH); // BAD - inflateEnd(&infstream); - - - return 0; + inflate(&infstream, 0); // BAD } -typedef struct { -} gzFile; +struct gzFile { +}; gzFile gzopen(char *str, const char *rb); - - -void exit(int i); - unsigned int gzread(gzFile gz_file, unsigned char *str, int i); +bool gzfread(char *str, int i, int i1, gzFile gz_file); +char *gzgets(gzFile gz_file, char *buffer, int i); -void gzclose(gzFile gz_file); - -std::ostream operator<<(const std::ostream &lhs, unsigned char rhs); - - -int UnsafeGzread(char *fileName) { +void UnsafeGzread(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); - if (&inFileZ == nullptr) { - exit(0); - } unsigned char unzipBuffer[8192]; - unsigned int unzippedBytes; while (true) { - unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); // BAD - if (unzippedBytes > 0) { - std::cout << unzippedBytes; - } else { + if (gzread(inFileZ, unzipBuffer, 8192) <= 0) { // BAD break; } } - gzclose(inFileZ); - return 0; } -bool gzfread(char *str, int i, int i1, gzFile gz_file); - -int UnsafeGzfread(char *fileName) { +void UnsafeGzfread(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); - if (&inFileZ == nullptr) { - exit(0); - } while (true) { char buffer[1000]; if (!gzfread(buffer, 999, 1, inFileZ)) { // BAD break; } } - gzclose(inFileZ); - return 0; } -char *gzgets(gzFile gz_file, char *buffer, int i); - -int UnsafeGzgets(char *fileName) { +void UnsafeGzgets(char *fileName) { gzFile inFileZ = gzopen(fileName, "rb"); - if (&inFileZ == nullptr) { - exit(0); - } char *buffer = new char[4000000000]; char *result; while (true) { @@ -141,28 +64,17 @@ int UnsafeGzgets(char *fileName) { break; } } - return 0; } -typedef unsigned long uLong; -typedef long unsigned int size_t; -typedef uLong uLongf; -typedef unsigned char Bytef; -#define Z_OK 0 +int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); -int uncompress(Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen); +void InflateString(char *input) { + unsigned char output[1024]; -bool InflateString(const unsigned char *input, const unsigned char *output, size_t output_length) { - uLong source_length; - source_length = (uLong) 500; - uLong destination_length; - destination_length = (uLong) output_length; + uLong source_length = 500; + uLong destination_length = sizeof(output); - int result = uncompress((Bytef *) output, &destination_length, - (Bytef *) input, source_length); // BAD - - return result == Z_OK; + uncompress(output, &destination_length, (Bytef *) input, source_length); // BAD } void zlib_test(int argc, char **argv) { @@ -170,6 +82,5 @@ void zlib_test(int argc, char **argv) { UnsafeGzgets(argv[2]); UnsafeInflate(argv[2]); UnsafeGzread(argv[2]); - const unsigned char *output; - InflateString(reinterpret_cast(argv[1]), output, 1024 * 1024 * 1024); + InflateString(argv[2]); } From 09f6576e6b0a2c2f15fab044842332f0ef37de69 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 11:04:21 +0200 Subject: [PATCH 299/334] C++: Simplify libarchive test --- .../DecompressionBombs.expected | 48 ++++--- .../DecompressionBombs/libarchiveTests.cpp | 121 ++++-------------- 2 files changed, 49 insertions(+), 120 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index 75b842c270a..d260d7e0b36 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -2,17 +2,15 @@ edges | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | provenance | | | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | provenance | | | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | provenance | TaintFunction | -| libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | -| libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:56:33:56:34 | *ar | provenance | | -| libarchiveTests.cpp:68:33:68:40 | *filename | libarchiveTests.cpp:86:40:86:47 | *filename | provenance | | -| libarchiveTests.cpp:86:37:86:37 | *a | libarchiveTests.cpp:92:23:92:23 | *a | provenance | | -| libarchiveTests.cpp:86:40:86:47 | *filename | libarchiveTests.cpp:86:37:86:37 | *a | provenance | Config | -| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | provenance | | -| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | provenance | | -| libarchiveTests.cpp:92:23:92:23 | copy_data output argument | libarchiveTests.cpp:92:23:92:23 | *a | provenance | | -| libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | provenance | | -| libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:108:13:108:19 | *access to array | provenance | | -| libarchiveTests.cpp:108:13:108:19 | *access to array | libarchiveTests.cpp:68:33:68:40 | *filename | provenance | | +| libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | provenance | | +| libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:22:41:22:42 | *ar | provenance | | +| libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | provenance | | +| libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:34:35:34:41 | *access to array | provenance | | +| libarchiveTests.cpp:34:32:34:32 | *a | libarchiveTests.cpp:38:27:38:27 | *a | provenance | | +| libarchiveTests.cpp:34:35:34:41 | *access to array | libarchiveTests.cpp:34:32:34:32 | *a | provenance | Config | +| libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:16:31:16:32 | *ar | provenance | | +| libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:38:27:38:27 | read_data output argument | provenance | | +| libarchiveTests.cpp:38:27:38:27 | read_data output argument | libarchiveTests.cpp:38:27:38:27 | *a | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:8:23:8:26 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | @@ -22,7 +20,7 @@ edges | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | provenance | | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | provenance | | | main.cpp:9:27:9:30 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | @@ -88,17 +86,15 @@ nodes | brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | | brotliTest.cpp:28:42:28:60 | *access to array | semmle.label | *access to array | | brotliTest.cpp:34:35:34:40 | *input2 | semmle.label | *input2 | -| libarchiveTests.cpp:49:38:49:39 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:49:38:49:39 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:56:33:56:34 | *ar | semmle.label | *ar | -| libarchiveTests.cpp:68:33:68:40 | *filename | semmle.label | *filename | -| libarchiveTests.cpp:86:37:86:37 | *a | semmle.label | *a | -| libarchiveTests.cpp:86:40:86:47 | *filename | semmle.label | *filename | -| libarchiveTests.cpp:92:23:92:23 | *a | semmle.label | *a | -| libarchiveTests.cpp:92:23:92:23 | copy_data output argument | semmle.label | copy_data output argument | -| libarchiveTests.cpp:107:45:107:48 | **argv | semmle.label | **argv | -| libarchiveTests.cpp:107:45:107:48 | **argv | semmle.label | **argv | -| libarchiveTests.cpp:108:13:108:19 | *access to array | semmle.label | *access to array | +| libarchiveTests.cpp:16:31:16:32 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:16:31:16:32 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:22:41:22:42 | *ar | semmle.label | *ar | +| libarchiveTests.cpp:30:45:30:48 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:30:45:30:48 | **argv | semmle.label | **argv | +| libarchiveTests.cpp:34:32:34:32 | *a | semmle.label | *a | +| libarchiveTests.cpp:34:35:34:41 | *access to array | semmle.label | *access to array | +| libarchiveTests.cpp:38:27:38:27 | *a | semmle.label | *a | +| libarchiveTests.cpp:38:27:38:27 | read_data output argument | semmle.label | read_data output argument | | main.cpp:7:33:7:36 | **argv | semmle.label | **argv | | main.cpp:8:23:8:26 | **argv | semmle.label | **argv | | main.cpp:8:23:8:26 | brotli_test output argument | semmle.label | brotli_test output argument | @@ -152,9 +148,9 @@ nodes | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:85:19:85:25 | *access to array | semmle.label | *access to array | subpaths -| libarchiveTests.cpp:92:23:92:23 | *a | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:49:38:49:39 | *ar | libarchiveTests.cpp:92:23:92:23 | copy_data output argument | +| libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:38:27:38:27 | read_data output argument | | main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | -| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | libarchiveTests.cpp:107:45:107:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | +| main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | @@ -163,7 +159,7 @@ subpaths #select | brotliTest.cpp:28:42:28:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | brotliTest.cpp:34:35:34:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| libarchiveTests.cpp:56:33:56:34 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:56:33:56:34 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| libarchiveTests.cpp:22:41:22:42 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:22:41:22:42 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:40:52:40:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:58:30:58:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:58:30:58:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp index 70ff6cef17f..5988c9d0fc5 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/libarchiveTests.cpp @@ -1,109 +1,42 @@ -#define ARCHIVE_EXTRACT_TIME (0x0004) -#define ARCHIVE_EXTRACT_PERM (0x0002) -#define ARCHIVE_EXTRACT_ACL (0x0020) -#define ARCHIVE_EXTRACT_FFLAGS (0x0040) -#define ARCHIVE_EOF 1 /* Found end of archive. */ -#define ARCHIVE_OK 0 /* Operation was successful. */ -#define ARCHIVE_WARN (-20) /* Partial success. */ - - -int archive_read_next_header(struct archive *a, struct archive_entry **entry); - -struct archive *archive_read_new(); - -archive *archive_write_disk_new(); - -void archive_read_support_format_all(archive *pArchive); - -void archive_read_support_filter_all(archive *pArchive); - -void archive_write_disk_set_options(archive *pArchive, int flags); - -void archive_write_disk_set_standard_lookup(archive *pArchive); - -int archive_read_open_filename(archive *pArchive, const char *filename, int i); +#define ARCHIVE_EOF 1 +#define ARCHIVE_OK 0 +#define ARCHIVE_WARN (-20) +struct archive; struct archive_entry; - -int archive_write_header(archive *pArchive, archive_entry *entry); - -int archive_entry_size(archive_entry *pEntry); - typedef int size_t; typedef int la_int64_t; +archive *archive_read_new(); +int archive_read_open_filename(archive *pArchive, const char *filename, int i); +int archive_read_next_header(archive *a, archive_entry **entry); +int archive_entry_size(archive_entry *pEntry); int archive_read_data_block(archive *pArchive, const void **pVoid, size_t *pInt, la_int64_t *pInt1); -int archive_write_data_block(archive *pArchive, const void *pVoid, size_t size, la_int64_t offset); - -int archive_write_finish_entry(archive *pArchive); - -void archive_read_close(archive *pArchive); - -void archive_read_free(archive *pArchive); - -void archive_write_close(archive *pArchive); - -void archive_write_free(archive *pArchive); - -static int copy_data(struct archive *ar, struct archive *aw) { - int r; - const void *buff; - size_t size; - la_int64_t offset; - +static int read_data(archive *ar) { for (;;) { - archive_read_data_block(ar, &buff, &size, &offset); // BAD + const void *buff; + size_t size; + la_int64_t offset; + + int r = archive_read_data_block(ar, &buff, &size, &offset); // BAD if (r == ARCHIVE_EOF) - return (ARCHIVE_OK); + return ARCHIVE_OK; if (r < ARCHIVE_OK) - return (r); - archive_write_data_block(aw, buff, size, offset); - if (r < ARCHIVE_OK) { - return (r); - } + return r; } } -static void extract(const char *filename) { - struct archive *a; - struct archive *ext; - struct archive_entry *entry; - int flags; - int r; - /* Select which attributes we want to restore. */ - flags = ARCHIVE_EXTRACT_TIME; - flags |= ARCHIVE_EXTRACT_PERM; - flags |= ARCHIVE_EXTRACT_ACL; - flags |= ARCHIVE_EXTRACT_FFLAGS; - - a = archive_read_new(); - archive_read_support_format_all(a); - archive_read_support_filter_all(a); - ext = archive_write_disk_new(); - archive_write_disk_set_options(ext, flags); - archive_write_disk_set_standard_lookup(ext); - if ((archive_read_open_filename(a, filename, 10240))) - return; - for (;;) { - archive_read_next_header(a, &entry); - archive_write_header(ext, entry); - if (archive_entry_size(entry) > 0) { - copy_data(a, ext); - if (r < ARCHIVE_WARN) - break; - } - archive_write_finish_entry(ext); - if (r < ARCHIVE_WARN) - break; - } - archive_read_close(a); - archive_read_free(a); - archive_write_close(ext); - archive_write_free(ext); -} - - void libarchive_test(int argc, const char **argv) { - extract(argv[1]); + archive *a = archive_read_new(); + archive_entry *entry; + + archive_read_open_filename(a, argv[1], 10240); + for (;;) { + archive_read_next_header(a, &entry); + if (archive_entry_size(entry) > 0) { + if (read_data(a) < ARCHIVE_WARN) + break; + } + } } From 0f98e292ed75e37701cfe38fc9215025591ac90b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 11:19:22 +0200 Subject: [PATCH 300/334] C++: Cleanup minizip test --- .../DecompressionBombs.expected | 46 ++++++++-------- .../DecompressionBombs/minizipTest.cpp | 55 +++---------------- 2 files changed, 31 insertions(+), 70 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index d260d7e0b36..c58726e19a6 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -25,17 +25,17 @@ edges | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | | main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | provenance | | | main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | | main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | provenance | | -| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | provenance | | -| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:52:41:52:47 | *access to array | provenance | | -| minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | provenance | | -| minizipTest.cpp:52:29:52:38 | **zip_reader | minizipTest.cpp:58:30:58:39 | **zip_reader | provenance | | -| minizipTest.cpp:52:29:52:38 | *zip_reader | minizipTest.cpp:58:30:58:39 | *zip_reader | provenance | | -| minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | **zip_reader | provenance | Config | -| minizipTest.cpp:52:41:52:47 | *access to array | minizipTest.cpp:52:29:52:38 | *zip_reader | provenance | Config | +| minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | provenance | | +| minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | provenance | | +| minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:24:41:24:47 | *access to array | provenance | | +| minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:28:13:28:19 | *access to array | provenance | | +| minizipTest.cpp:24:29:24:38 | **zip_reader | minizipTest.cpp:26:30:26:39 | **zip_reader | provenance | | +| minizipTest.cpp:24:29:24:38 | *zip_reader | minizipTest.cpp:26:30:26:39 | *zip_reader | provenance | | +| minizipTest.cpp:24:41:24:47 | *access to array | minizipTest.cpp:24:29:24:38 | **zip_reader | provenance | Config | +| minizipTest.cpp:24:41:24:47 | *access to array | minizipTest.cpp:24:29:24:38 | *zip_reader | provenance | Config | | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:20:25:20:39 | *input | provenance | | | zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:16:26:16:30 | *input | provenance | | | zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:24:17:24:26 | & ... | provenance | Config | @@ -103,15 +103,15 @@ nodes | main.cpp:10:24:10:27 | **argv | semmle.label | **argv | | main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | | main.cpp:11:21:11:24 | **argv | semmle.label | **argv | -| minizipTest.cpp:34:42:34:45 | **argv | semmle.label | **argv | -| minizipTest.cpp:34:42:34:45 | **argv | semmle.label | **argv | -| minizipTest.cpp:40:52:40:67 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:52:29:52:38 | **zip_reader | semmle.label | **zip_reader | -| minizipTest.cpp:52:29:52:38 | *zip_reader | semmle.label | *zip_reader | -| minizipTest.cpp:52:41:52:47 | *access to array | semmle.label | *access to array | -| minizipTest.cpp:58:30:58:39 | **zip_reader | semmle.label | **zip_reader | -| minizipTest.cpp:58:30:58:39 | *zip_reader | semmle.label | *zip_reader | -| minizipTest.cpp:67:13:67:19 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:12:42:12:45 | **argv | semmle.label | **argv | +| minizipTest.cpp:12:42:12:45 | **argv | semmle.label | **argv | +| minizipTest.cpp:17:52:17:67 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:24:29:24:38 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:24:29:24:38 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:24:41:24:47 | *access to array | semmle.label | *access to array | +| minizipTest.cpp:26:30:26:39 | **zip_reader | semmle.label | **zip_reader | +| minizipTest.cpp:26:30:26:39 | *zip_reader | semmle.label | *zip_reader | +| minizipTest.cpp:28:13:28:19 | *access to array | semmle.label | *access to array | | zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | | zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | | zlibTest.cpp:20:25:20:39 | *input | semmle.label | *input | @@ -151,7 +151,7 @@ subpaths | libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:38:27:38:27 | read_data output argument | | main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | -| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:34:42:34:45 | **argv | minizipTest.cpp:34:42:34:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | +| main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | @@ -160,10 +160,10 @@ subpaths | brotliTest.cpp:28:42:28:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | brotliTest.cpp:34:35:34:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | libarchiveTests.cpp:22:41:22:42 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:22:41:22:42 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:40:52:40:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:40:52:40:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:58:30:58:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:58:30:58:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:58:30:58:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:67:13:67:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:67:13:67:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:17:52:17:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:26:30:26:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:26:30:26:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| minizipTest.cpp:28:13:28:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:28:13:28:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:25:13:25:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:25:13:25:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:41:20:41:26 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:41:20:41:26 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | zlibTest.cpp:51:38:51:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:51:38:51:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp index f89e8698108..636f579feea 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/minizipTest.cpp @@ -1,68 +1,29 @@ typedef signed int int32_t; -void *mz_stream_os_create(); - -int32_t mz_zip_reader_open_file(void *handle, const char *path); - -int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path); - void *mz_zip_reader_create(); - +int32_t mz_zip_reader_open_file(void *handle, const char *path); int32_t mz_zip_reader_goto_first_entry(void *pVoid); - -int32_t mz_stream_os_open(void *pVoid, const char *path, int write); - -void mz_stream_os_close(void *pVoid); - -void mz_stream_os_delete(void **pVoid); - -void mz_zip_reader_close(void *pVoid); - -void mz_zip_reader_delete(void **pVoid); - int32_t mz_zip_reader_entry_save(void *pVoid, int stream, int write); - - +int32_t mz_zip_entry_read(void *pVoid, void *buf, int32_t i); void UnzOpen(const char *string); -int32_t mz_zip_entry_read(void *pVoid, void *buf, int32_t i); - -void *mz_zip_create() { - return nullptr; -} +void *mz_zip_create(); void minizip_test(int argc, const char **argv) { void *zip_handle = mz_zip_create(); int32_t bytes_read; - int32_t err; char buf[4096]; - do { + while(true) { bytes_read = mz_zip_entry_read(zip_handle, (char *) argv[1], sizeof(buf)); // BAD - if (bytes_read < 0) { - err = bytes_read; + if (bytes_read <= 0) { + break; } - // Do something with buf bytes - } while (err == 1 && bytes_read > 0); - - - const char *entry_path = "c:\\entry.dat"; + } void *zip_reader = mz_zip_reader_create(); - mz_zip_reader_open_file(zip_reader, argv[1]); mz_zip_reader_goto_first_entry(zip_reader); - void *entry_stream = mz_stream_os_create(); - mz_stream_os_open(entry_stream, entry_path, 1); - int file_stream; - int mz_stream_os_write; - mz_zip_reader_entry_save(zip_reader, file_stream, mz_stream_os_write); // BAD - // the above sink is same as "mz_zip_reader_entry_save", "mz_zip_reader_entry_read", "mz_zip_reader_entry_save_process", - // "mz_zip_reader_entry_save_file", "mz_zip_reader_entry_save_buffer", "mz_zip_reader_save_all" and "mz_zip_entry_read" functions - mz_stream_os_close(entry_stream); - mz_stream_os_delete(&entry_stream); - mz_zip_reader_close(zip_reader); - mz_zip_reader_delete(&zip_reader); - + mz_zip_reader_entry_save(zip_reader, 0, 0); // BAD UnzOpen(argv[3]); // BAD } From c048401ca746a3b6d51148656edda32a9e9df85c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 11:40:32 +0200 Subject: [PATCH 301/334] C++: Clean up Brotli test --- .../DecompressionBombs.expected | 24 ++++++----- .../CWE-409/DecompressionBombs/brotliTest.cpp | 43 +++++++------------ 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index c58726e19a6..40f9d704981 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -1,7 +1,8 @@ edges -| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | provenance | | -| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | provenance | | -| brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | provenance | TaintFunction | +| brotliTest.cpp:15:41:15:44 | **argv | brotliTest.cpp:15:41:15:44 | **argv | provenance | | +| brotliTest.cpp:15:41:15:44 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | provenance | | +| brotliTest.cpp:15:41:15:44 | **argv | brotliTest.cpp:21:30:21:52 | *access to array | provenance | | +| brotliTest.cpp:21:30:21:52 | *access to array | brotliTest.cpp:24:51:24:58 | **& ... | provenance | | | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | provenance | | | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:22:41:22:42 | *ar | provenance | | | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | provenance | | @@ -15,7 +16,7 @@ edges | main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:11:21:11:24 | **argv | provenance | | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | provenance | | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:15:41:15:44 | **argv | provenance | | | main.cpp:8:23:8:26 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | @@ -82,10 +83,11 @@ edges | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | provenance | | nodes -| brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | -| brotliTest.cpp:26:41:26:44 | **argv | semmle.label | **argv | -| brotliTest.cpp:28:42:28:60 | *access to array | semmle.label | *access to array | -| brotliTest.cpp:34:35:34:40 | *input2 | semmle.label | *input2 | +| brotliTest.cpp:15:41:15:44 | **argv | semmle.label | **argv | +| brotliTest.cpp:15:41:15:44 | **argv | semmle.label | **argv | +| brotliTest.cpp:18:35:18:53 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:21:30:21:52 | *access to array | semmle.label | *access to array | +| brotliTest.cpp:24:51:24:58 | **& ... | semmle.label | **& ... | | libarchiveTests.cpp:16:31:16:32 | *ar | semmle.label | *ar | | libarchiveTests.cpp:16:31:16:32 | *ar | semmle.label | *ar | | libarchiveTests.cpp:22:41:22:42 | *ar | semmle.label | *ar | @@ -149,7 +151,7 @@ nodes | zlibTest.cpp:85:19:85:25 | *access to array | semmle.label | *access to array | subpaths | libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:38:27:38:27 | read_data output argument | -| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:26:41:26:44 | **argv | brotliTest.cpp:26:41:26:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | +| main.cpp:8:23:8:26 | **argv | brotliTest.cpp:15:41:15:44 | **argv | brotliTest.cpp:15:41:15:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | @@ -157,8 +159,8 @@ subpaths | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | #select -| brotliTest.cpp:28:42:28:60 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:28:42:28:60 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| brotliTest.cpp:34:35:34:40 | *input2 | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:34:35:34:40 | *input2 | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:18:35:18:53 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:24:51:24:58 | **& ... | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:24:51:24:58 | **& ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | libarchiveTests.cpp:22:41:22:42 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:22:41:22:42 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:17:52:17:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | | minizipTest.cpp:26:30:26:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp index ec802ae326e..90274943473 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/brotliTest.cpp @@ -1,37 +1,26 @@ typedef long unsigned int size_t; typedef unsigned char uint8_t; -typedef enum { -} BrotliDecoderResult; + +enum BrotliDecoderResult {}; +struct BrotliDecoderState; BrotliDecoderResult BrotliDecoderDecompress( - size_t encoded_size, - const uint8_t encoded_buffer[], - size_t *decoded_size, - uint8_t decoded_buffer[]) { return static_cast(0); }; - -void strncpy(char *string, const char *string1, int i); - -typedef struct BrotliDecoderStateStruct BrotliDecoderState; + size_t encoded_size, const uint8_t encoded_buffer[], + size_t *decoded_size, uint8_t decoded_buffer[]); BrotliDecoderResult BrotliDecoderDecompressStream( BrotliDecoderState *state, size_t *available_in, const uint8_t **next_in, - size_t *available_out, uint8_t **next_out, size_t *total_out) { return static_cast(0); }; - -namespace std { - void strncpy(char *string, const char *string1, int i) { - - } -} + size_t *available_out, uint8_t **next_out, size_t *total_out); void brotli_test(int argc, const char **argv) { - uint8_t *output = nullptr; - BrotliDecoderDecompress(1024 * 1024, (uint8_t *) argv[2], // BAD - reinterpret_cast(1024 * 1024 * 1024), output); - uint8_t **output2 = nullptr; - const uint8_t **input2 = nullptr; - std::strncpy(reinterpret_cast(input2), argv[2], 32); - BrotliDecoderDecompressStream(0, reinterpret_cast(1024 * 1024), - input2, reinterpret_cast(1024 * 1024 * 1024), // BAD - output2, - reinterpret_cast(1024 * 1024 * 1024)); + uint8_t output[1024]; + size_t output_size = sizeof(output); + BrotliDecoderDecompress(1024, (uint8_t *) argv[2], &output_size, output); // BAD + + size_t input_size = 1024; + const uint8_t *input_p = (const uint8_t*)argv[2]; + uint8_t *output_p = output; + size_t out_size; + BrotliDecoderDecompressStream(0, &input_size, &input_p, &output_size, // BAD + &output_p, &out_size); } From 084dbc4e122f299c37c8aeb8595d50c88edd380c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 11:48:42 +0200 Subject: [PATCH 302/334] C++: Rename qhelp file to match ql file --- .../CWE-409/{DecompressionBomb.qhelp => DecompressionBombs.qhelp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/src/experimental/Security/CWE/CWE-409/{DecompressionBomb.qhelp => DecompressionBombs.qhelp} (100%) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp similarity index 100% rename from cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qhelp rename to cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp From 65fafbf4df9c67ad61d0b906a668766e1fca0f8e Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 11:57:10 +0200 Subject: [PATCH 303/334] C++: Fix QL-for-QL warnings --- cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll | 5 ++--- .../src/experimental/Security/CWE/CWE-409/LibArchive.qll | 1 - cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll | 1 - cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll | 9 ++++----- .../src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll | 1 - .../experimental/Security/CWE/CWE-409/ZlibInflator.qll | 1 - .../experimental/Security/CWE/CWE-409/ZlibUncompress.qll | 1 - 7 files changed, 6 insertions(+), 13 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll index f6d06ef1335..9dcea044a5a 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll @@ -3,14 +3,13 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** * The `BrotliDecoderDecompress` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#af68 */ class BrotliDecoderDecompressFunction extends DecompressionFunction { - BrotliDecoderDecompressFunction() { this.hasGlobalName(["BrotliDecoderDecompress"]) } + BrotliDecoderDecompressFunction() { this.hasGlobalName("BrotliDecoderDecompress") } override int getArchiveParameterIndex() { result = 1 } } @@ -19,7 +18,7 @@ class BrotliDecoderDecompressFunction extends DecompressionFunction { * The `BrotliDecoderDecompressStream` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#a234 */ class BrotliDecoderDecompressStreamFunction extends DecompressionFunction { - BrotliDecoderDecompressStreamFunction() { this.hasGlobalName(["BrotliDecoderDecompressStream"]) } + BrotliDecoderDecompressStreamFunction() { this.hasGlobalName("BrotliDecoderDecompressStream") } override int getArchiveParameterIndex() { result = 2 } } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll index f5e39ca2675..00ff667b387 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll @@ -3,7 +3,6 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll index a0365778c21..ac90ffced53 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll @@ -3,7 +3,6 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll index 2683f03f7c2..dbdb729dd8c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll @@ -3,14 +3,13 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** * The `ZSTD_decompress` function is used in flow sink. */ class ZstdDecompressFunction extends DecompressionFunction { - ZstdDecompressFunction() { this.hasGlobalName(["ZSTD_decompress"]) } + ZstdDecompressFunction() { this.hasGlobalName("ZSTD_decompress") } override int getArchiveParameterIndex() { result = 2 } } @@ -19,7 +18,7 @@ class ZstdDecompressFunction extends DecompressionFunction { * The `ZSTD_decompressDCtx` function is used in flow sink. */ class ZstdDecompressDctxFunction extends DecompressionFunction { - ZstdDecompressDctxFunction() { this.hasGlobalName(["ZSTD_decompressDCtx"]) } + ZstdDecompressDctxFunction() { this.hasGlobalName("ZSTD_decompressDCtx") } override int getArchiveParameterIndex() { result = 3 } } @@ -28,7 +27,7 @@ class ZstdDecompressDctxFunction extends DecompressionFunction { * The `ZSTD_decompressStream` function is used in flow sink. */ class ZstdDecompressStreamFunction extends DecompressionFunction { - ZstdDecompressStreamFunction() { this.hasGlobalName(["ZSTD_decompressStream"]) } + ZstdDecompressStreamFunction() { this.hasGlobalName("ZSTD_decompressStream") } override int getArchiveParameterIndex() { result = 2 } } @@ -37,7 +36,7 @@ class ZstdDecompressStreamFunction extends DecompressionFunction { * The `ZSTD_decompress_usingDDict` function is used in flow sink. */ class ZstdDecompressUsingDdictFunction extends DecompressionFunction { - ZstdDecompressUsingDdictFunction() { this.hasGlobalName(["ZSTD_decompress_usingDDict"]) } + ZstdDecompressUsingDdictFunction() { this.hasGlobalName("ZSTD_decompress_usingDDict") } override int getArchiveParameterIndex() { result = 3 } } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll index 851500b2cee..e8ea7e7fc8c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll @@ -3,7 +3,6 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll index 6a5d4b8f1ec..c82d29fa7f0 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll @@ -3,7 +3,6 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll index 656bd98655d..1617b8e3068 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibUncompress.qll @@ -3,7 +3,6 @@ */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import DecompressionBomb /** From b253b4ff49bd1fe2c0a3f56c42f3fb10e34576eb Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 4 Sep 2024 12:39:30 +0200 Subject: [PATCH 304/334] C#: Delete jobs that moved to the internal repo. All jobs that are deleted have been moved to the internal repo. The unit tests are also run internally through bazel, but keeping them here also tests the msbuild build. --- .github/workflows/csharp-qltest.yml | 41 +---------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index 66326539e6e..ca57d0291c0 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -29,45 +29,6 @@ permissions: contents: read jobs: - qlupgrade: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/fetch-codeql - - name: Check DB upgrade scripts - run: | - echo >empty.trap - codeql dataset import -S ql/lib/upgrades/initial/semmlecode.csharp.dbscheme testdb empty.trap - codeql dataset upgrade testdb --additional-packs ql/lib - diff -q testdb/semmlecode.csharp.dbscheme ql/lib/semmlecode.csharp.dbscheme - - name: Check DB downgrade scripts - run: | - echo >empty.trap - rm -rf testdb; codeql dataset import -S ql/lib/semmlecode.csharp.dbscheme testdb empty.trap - codeql resolve upgrades --format=lines --allow-downgrades --additional-packs downgrades \ - --dbscheme=ql/lib/semmlecode.csharp.dbscheme --target-dbscheme=downgrades/initial/semmlecode.csharp.dbscheme | - xargs codeql execute upgrades testdb - diff -q testdb/semmlecode.csharp.dbscheme downgrades/initial/semmlecode.csharp.dbscheme - qltest: - if: github.repository_owner == 'github' - runs-on: ubuntu-latest-xl - strategy: - fail-fast: false - matrix: - slice: ["1/2", "2/2"] - steps: - - uses: actions/checkout@v4 - - uses: ./csharp/actions/create-extractor-pack - - name: Cache compilation cache - id: query-cache - uses: ./.github/actions/cache-query-compilation - with: - key: csharp-qltest-${{ matrix.slice }} - - name: Run QL tests - run: | - codeql test run --threads=0 --ram 50000 --slice ${{ matrix.slice }} --search-path "${{ github.workspace }}" --check-databases --check-undefined-labels --check-repeated-labels --check-redefined-labels --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" - env: - GITHUB_TOKEN: ${{ github.token }} unit-tests: strategy: matrix: @@ -75,7 +36,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - name: Setup dotnet + - name: Setup dotnetg uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.101 From 49aaf65f3f31a6549fb994d3652fcfb3558d6cc5 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 4 Sep 2024 12:43:01 +0200 Subject: [PATCH 305/334] fix mistake in the Python change-note Co-authored-by: Taus --- python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md b/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md index cb738633302..cb8f4c3fbbc 100644 --- a/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md +++ b/python/ql/lib/change-notes/2024-09-03-outdated-deprecations.md @@ -4,6 +4,6 @@ category: breaking * Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. * Deleted the deprecated `semmle.python.RegexTreeView` module, use `semmle.python.regexp.RegexTreeView` instead. * Deleted the deprecated `RegexString` class from `regex.qll`. -* Deleted the deprecated `Regex` class, use `Regex` instead. +* Deleted the deprecated `Regex` class, use `RegExp` instead. * Deleted the deprecated `semmle/python/security/SQL.qll` file. * Deleted the deprecated `useSSL` predicates from the LDAP libraries, use `useSsl` instead. \ No newline at end of file From 8d22d147b8131536a4f93f6521310a52018ce825 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 13:16:56 +0200 Subject: [PATCH 306/334] C++: Clean up QLDoc --- cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll | 6 ++++-- .../experimental/Security/CWE/CWE-409/DecompressionBombs.ql | 4 +--- cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll | 2 +- cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll index 9dcea044a5a..5b2c2d6cfc9 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/Brotli.qll @@ -6,7 +6,8 @@ import cpp import DecompressionBomb /** - * The `BrotliDecoderDecompress` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#af68 + * The `BrotliDecoderDecompress` function is used in flow sink. + * See https://www.brotli.org/decode.html. */ class BrotliDecoderDecompressFunction extends DecompressionFunction { BrotliDecoderDecompressFunction() { this.hasGlobalName("BrotliDecoderDecompress") } @@ -15,7 +16,8 @@ class BrotliDecoderDecompressFunction extends DecompressionFunction { } /** - * The `BrotliDecoderDecompressStream` function is used in flow sink. * Ref: https://www.brotli.org/decode.html#a234 + * The `BrotliDecoderDecompressStream` function is used in flow sink. + * See https://www.brotli.org/decode.html. */ class BrotliDecoderDecompressStreamFunction extends DecompressionFunction { BrotliDecoderDecompressStreamFunction() { this.hasGlobalName("BrotliDecoderDecompressStream") } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql index cdc86836025..b54652f1044 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql @@ -3,16 +3,14 @@ * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous * @kind path-problem * @problem.severity error - * @security-severity 7.8 * @precision high - * @id cpp/data-decompression + * @id cpp/data-decompression-bomb * @tags security * experimental * external/cwe/cwe-409 */ import cpp -import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.security.FlowSources import DecompressionBomb diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll index 00ff667b387..7ea1a9fdb66 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll @@ -7,7 +7,7 @@ import DecompressionBomb /** * The `archive_read_data*` functions are used in flow sink. - * [Examples](https://github.com/libarchive/libarchive/wiki/Examples) + * See https://github.com/libarchive/libarchive/wiki/Examples. */ class Archive_read_data_block extends DecompressionFunction { Archive_read_data_block() { diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll index ac90ffced53..27c6b230aa8 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll @@ -7,7 +7,7 @@ import DecompressionBomb /** * The `mz_zip_entry` function is used in flow sink. - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md) + * See https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip.md. */ class Mz_zip_entry extends DecompressionFunction { Mz_zip_entry() { this.hasGlobalName("mz_zip_entry_read") } @@ -17,7 +17,7 @@ class Mz_zip_entry extends DecompressionFunction { /** * The `mz_zip_reader_entry_*` and `mz_zip_reader_save_all` functions are used in flow sink. - * [docuemnt](https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md) + * See https://github.com/zlib-ng/minizip-ng/blob/master/doc/mz_zip_rw.md. */ class Mz_zip_reader_entry extends DecompressionFunction { Mz_zip_reader_entry() { From 8fe0d0a045dc1660d529a445f70231afee5ea4ab Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 13:18:41 +0200 Subject: [PATCH 307/334] C++: Improve query output --- .../CWE/CWE-409/DecompressionBombs.ql | 20 +++++++++------- .../DecompressionBombs.expected | 24 +++++++++---------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql index b54652f1044..c90aec08307 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql @@ -14,14 +14,16 @@ import cpp import semmle.code.cpp.security.FlowSources import DecompressionBomb +predicate isSink(FunctionCall fc, DataFlow::Node sink) { + exists(DecompressionFunction f | fc.getTarget() = f | + fc.getArgument(f.getArchiveParameterIndex()) = [sink.asExpr(), sink.asIndirectExpr()] + ) +} + module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof FlowSource } - predicate isSink(DataFlow::Node sink) { - exists(FunctionCall fc, DecompressionFunction f | fc.getTarget() = f | - fc.getArgument(f.getArchiveParameterIndex()) = [sink.asExpr(), sink.asIndirectExpr()] - ) - } + predicate isSink(DataFlow::Node sink) { isSink(_, sink) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(DecompressionFlowStep f).isAdditionalFlowStep(node1, node2) or @@ -33,7 +35,7 @@ module DecompressionTaint = TaintTracking::Global; import DecompressionTaint::PathGraph -from DecompressionTaint::PathNode source, DecompressionTaint::PathNode sink -where DecompressionTaint::flowPath(source, sink) -select sink.getNode(), source, sink, "This Decompression output $@.", source.getNode(), - "is not limited" +from DecompressionTaint::PathNode source, DecompressionTaint::PathNode sink, FunctionCall fc +where DecompressionTaint::flowPath(source, sink) and isSink(fc, sink.getNode()) +select sink.getNode(), source, sink, "The decompression output of $@ is not limited", fc, + fc.getTarget().getName() diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index 40f9d704981..d7be5cf4068 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -159,15 +159,15 @@ subpaths | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | #select -| brotliTest.cpp:18:35:18:53 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| brotliTest.cpp:24:51:24:58 | **& ... | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:24:51:24:58 | **& ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| libarchiveTests.cpp:22:41:22:42 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:22:41:22:42 | *ar | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:17:52:17:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:26:30:26:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | **zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:26:30:26:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | *zip_reader | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| minizipTest.cpp:28:13:28:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:28:13:28:19 | *access to array | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:25:13:25:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:25:13:25:22 | & ... | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:41:20:41:26 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:41:20:41:26 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:51:38:51:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:51:38:51:44 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:62:25:62:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:62:25:62:31 | inFileZ | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | -| zlibTest.cpp:77:45:77:59 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:77:45:77:59 | *input | This Decompression output $@. | main.cpp:7:33:7:36 | **argv | is not limited | +| brotliTest.cpp:18:35:18:53 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | The decompression output of $@ is not limited | brotliTest.cpp:18:5:18:27 | call to BrotliDecoderDecompress | BrotliDecoderDecompress | +| brotliTest.cpp:24:51:24:58 | **& ... | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:24:51:24:58 | **& ... | The decompression output of $@ is not limited | brotliTest.cpp:24:5:24:33 | call to BrotliDecoderDecompressStream | BrotliDecoderDecompressStream | +| libarchiveTests.cpp:22:41:22:42 | *ar | main.cpp:7:33:7:36 | **argv | libarchiveTests.cpp:22:41:22:42 | *ar | The decompression output of $@ is not limited | libarchiveTests.cpp:22:17:22:39 | call to archive_read_data_block | archive_read_data_block | +| minizipTest.cpp:17:52:17:67 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | The decompression output of $@ is not limited | minizipTest.cpp:17:22:17:38 | call to mz_zip_entry_read | mz_zip_entry_read | +| minizipTest.cpp:26:30:26:39 | **zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | **zip_reader | The decompression output of $@ is not limited | minizipTest.cpp:26:5:26:28 | call to mz_zip_reader_entry_save | mz_zip_reader_entry_save | +| minizipTest.cpp:26:30:26:39 | *zip_reader | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:26:30:26:39 | *zip_reader | The decompression output of $@ is not limited | minizipTest.cpp:26:5:26:28 | call to mz_zip_reader_entry_save | mz_zip_reader_entry_save | +| minizipTest.cpp:28:13:28:19 | *access to array | main.cpp:7:33:7:36 | **argv | minizipTest.cpp:28:13:28:19 | *access to array | The decompression output of $@ is not limited | minizipTest.cpp:28:5:28:11 | call to UnzOpen | UnzOpen | +| zlibTest.cpp:25:13:25:22 | & ... | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:25:13:25:22 | & ... | The decompression output of $@ is not limited | zlibTest.cpp:25:5:25:11 | call to inflate | inflate | +| zlibTest.cpp:41:20:41:26 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:41:20:41:26 | inFileZ | The decompression output of $@ is not limited | zlibTest.cpp:41:13:41:18 | call to gzread | gzread | +| zlibTest.cpp:51:38:51:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:51:38:51:44 | inFileZ | The decompression output of $@ is not limited | zlibTest.cpp:51:14:51:20 | call to gzfread | gzfread | +| zlibTest.cpp:62:25:62:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:62:25:62:31 | inFileZ | The decompression output of $@ is not limited | zlibTest.cpp:62:18:62:23 | call to gzgets | gzgets | +| zlibTest.cpp:77:45:77:59 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:77:45:77:59 | *input | The decompression output of $@ is not limited | zlibTest.cpp:77:5:77:14 | call to uncompress | uncompress | From db72bd4f96e7547f6acae26f43cfde42609b3ae8 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 4 Sep 2024 12:21:48 +0100 Subject: [PATCH 308/334] Go: Add `getParent` and `getIndex` for `TypeParamType` --- go/ql/lib/semmle/go/Scopes.qll | 7 +- go/ql/lib/semmle/go/Types.qll | 6 + .../semmle/go/Function/TypeParamType.expected | 191 +++++++++++++++--- .../semmle/go/Function/TypeParamType.ql | 5 +- 4 files changed, 175 insertions(+), 34 deletions(-) diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 04cb65fa987..7386b81868f 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -197,8 +197,11 @@ class PackageEntity extends Entity, @pkgobject { } /** A built-in or declared named type. */ class TypeEntity extends Entity, @typeobject { } +/** The parent of a type parameter type, either a declared type or a declared function. */ +class TypeParamParentEntity extends Entity, @typeparamparentobject { } + /** A declared named type. */ -class DeclaredType extends TypeEntity, DeclaredEntity, @decltypeobject { +class DeclaredType extends TypeEntity, DeclaredEntity, TypeParamParentEntity, @decltypeobject { /** Gets the declaration specifier declaring this type. */ TypeSpec getSpec() { result.getNameExpr() = this.getDeclaration() } } @@ -598,7 +601,7 @@ class PromotedMethod extends Method { } /** A declared function. */ -class DeclaredFunction extends Function, DeclaredEntity, @declfunctionobject { +class DeclaredFunction extends Function, DeclaredEntity, TypeParamParentEntity, @declfunctionobject { override FuncDecl getFuncDecl() { result.getNameExpr() = this.getDeclaration() } override predicate mayHaveSideEffects() { diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index 026b009aa3f..645f0e3fe67 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -381,6 +381,12 @@ class TypeParamType extends @typeparamtype, CompositeType { override InterfaceType getUnderlyingType() { result = this.getConstraint().getUnderlyingType() } + /** Gets the parent object of this type parameter type. */ + TypeParamParentEntity getParent() { typeparam(this, _, _, result, _) } + + /** Gets the index of this type parameter type. */ + int getIndex() { typeparam(this, _, _, _, result) } + override string pp() { result = this.getParamName() } /** diff --git a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected index bb614a4b41c..49a00ade7ab 100644 --- a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected +++ b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected @@ -1,30 +1,161 @@ -| E | Ordered | -| E | comparable | -| E | interface { } | -| E1 | interface { } | -| E2 | interface { } | -| Edge | EdgeConstraint | -| Edge | interface { } | -| F | floaty | -| K | comparable | -| Node | NodeConstraint | -| Node | interface { } | -| S | interface { } | -| S | interface { ~[]E } | -| S1 | interface { ~[]E1 } | -| S2 | interface { ~[]E2 } | -| SF2 | interface { } | -| SG2 | interface { } | -| T | Ordered | -| T | comparable | -| T | interface { string \| []uint8 } | -| T | interface { } | -| T1 | interface { } | -| T2 | interface { } | -| TF1 | interface { } | -| TF2 | interface { } | -| TG1 | interface { } | -| TG2 | interface { } | -| U | interface { } | -| V | interface { int64 \| float64 } | -| bytes | interface { []uint8 \| string } | +| cmp.Compare | 0 | T | Ordered | +| cmp.Less | 0 | T | Ordered | +| cmp.Or | 0 | T | comparable | +| cmp.isNaN | 0 | T | Ordered | +| codeql-go-tests/function.EdgeConstraint | 0 | Node | interface { } | +| codeql-go-tests/function.Element | 0 | S | interface { } | +| codeql-go-tests/function.GenericFunctionInAnotherFile | 0 | T | interface { } | +| codeql-go-tests/function.GenericFunctionOneTypeParam | 0 | T | interface { } | +| codeql-go-tests/function.GenericFunctionTwoTypeParams | 0 | K | comparable | +| codeql-go-tests/function.GenericFunctionTwoTypeParams | 1 | V | interface { int64 \| float64 } | +| codeql-go-tests/function.GenericStruct1 | 0 | T | interface { } | +| codeql-go-tests/function.GenericStruct1.f1 | 0 | TF1 | interface { } | +| codeql-go-tests/function.GenericStruct1.g1 | 0 | TG1 | interface { } | +| codeql-go-tests/function.GenericStruct2 | 0 | S | interface { } | +| codeql-go-tests/function.GenericStruct2 | 1 | T | interface { } | +| codeql-go-tests/function.GenericStruct2.f2 | 0 | SF2 | interface { } | +| codeql-go-tests/function.GenericStruct2.f2 | 1 | TF2 | interface { } | +| codeql-go-tests/function.GenericStruct2.g2 | 0 | SG2 | interface { } | +| codeql-go-tests/function.GenericStruct2.g2 | 1 | TG2 | interface { } | +| codeql-go-tests/function.Graph | 0 | Node | NodeConstraint | +| codeql-go-tests/function.Graph | 1 | Edge | EdgeConstraint | +| codeql-go-tests/function.Graph.ShortestPath | 0 | Node | NodeConstraint | +| codeql-go-tests/function.Graph.ShortestPath | 1 | Edge | EdgeConstraint | +| codeql-go-tests/function.List | 0 | T | interface { } | +| codeql-go-tests/function.List.MyLen | 0 | U | interface { } | +| codeql-go-tests/function.New | 0 | Node | NodeConstraint | +| codeql-go-tests/function.New | 1 | Edge | EdgeConstraint | +| codeql-go-tests/function.NodeConstraint | 0 | Edge | interface { } | +| github.com/anotherpkg.GenericFunctionInAnotherPackage | 0 | T | interface { } | +| internal/bytealg.HashStr | 0 | T | interface { string \| []uint8 } | +| internal/bytealg.HashStrRev | 0 | T | interface { string \| []uint8 } | +| internal/bytealg.IndexRabinKarp | 0 | T | interface { string \| []uint8 } | +| internal/bytealg.LastIndexRabinKarp | 0 | T | interface { string \| []uint8 } | +| runtime.fandbits | 0 | F | floaty | +| runtime.fmax | 0 | F | floaty | +| runtime.fmin | 0 | F | floaty | +| runtime.forbits | 0 | F | floaty | +| runtime.noEscapePtr | 0 | T | interface { } | +| runtime/internal/atomic.Pointer.CompareAndSwap | 0 | T | interface { } | +| runtime/internal/atomic.Pointer.CompareAndSwapNoWB | 0 | T | interface { } | +| runtime/internal/atomic.Pointer.Load | 0 | T | interface { } | +| runtime/internal/atomic.Pointer.Store | 0 | T | interface { } | +| runtime/internal/atomic.Pointer.StoreNoWB | 0 | T | interface { } | +| slices.BinarySearch | 0 | S | interface { ~[]E } | +| slices.BinarySearch | 1 | E | Ordered | +| slices.BinarySearchFunc | 0 | S | interface { ~[]E } | +| slices.BinarySearchFunc | 1 | E | interface { } | +| slices.BinarySearchFunc | 2 | T | interface { } | +| slices.Clip | 0 | S | interface { ~[]E } | +| slices.Clip | 1 | E | interface { } | +| slices.Clone | 0 | S | interface { ~[]E } | +| slices.Clone | 1 | E | interface { } | +| slices.Compact | 0 | S | interface { ~[]E } | +| slices.Compact | 1 | E | comparable | +| slices.CompactFunc | 0 | S | interface { ~[]E } | +| slices.CompactFunc | 1 | E | interface { } | +| slices.Compare | 0 | S | interface { ~[]E } | +| slices.Compare | 1 | E | Ordered | +| slices.CompareFunc | 0 | S1 | interface { ~[]E1 } | +| slices.CompareFunc | 1 | S2 | interface { ~[]E2 } | +| slices.CompareFunc | 2 | E1 | interface { } | +| slices.CompareFunc | 3 | E2 | interface { } | +| slices.Concat | 0 | S | interface { ~[]E } | +| slices.Concat | 1 | E | interface { } | +| slices.Contains | 0 | S | interface { ~[]E } | +| slices.Contains | 1 | E | comparable | +| slices.ContainsFunc | 0 | S | interface { ~[]E } | +| slices.ContainsFunc | 1 | E | interface { } | +| slices.Delete | 0 | S | interface { ~[]E } | +| slices.Delete | 1 | E | interface { } | +| slices.DeleteFunc | 0 | S | interface { ~[]E } | +| slices.DeleteFunc | 1 | E | interface { } | +| slices.Equal | 0 | S | interface { ~[]E } | +| slices.Equal | 1 | E | comparable | +| slices.EqualFunc | 0 | S1 | interface { ~[]E1 } | +| slices.EqualFunc | 1 | S2 | interface { ~[]E2 } | +| slices.EqualFunc | 2 | E1 | interface { } | +| slices.EqualFunc | 3 | E2 | interface { } | +| slices.Grow | 0 | S | interface { ~[]E } | +| slices.Grow | 1 | E | interface { } | +| slices.Index | 0 | S | interface { ~[]E } | +| slices.Index | 1 | E | comparable | +| slices.IndexFunc | 0 | S | interface { ~[]E } | +| slices.IndexFunc | 1 | E | interface { } | +| slices.Insert | 0 | S | interface { ~[]E } | +| slices.Insert | 1 | E | interface { } | +| slices.IsSorted | 0 | S | interface { ~[]E } | +| slices.IsSorted | 1 | E | Ordered | +| slices.IsSortedFunc | 0 | S | interface { ~[]E } | +| slices.IsSortedFunc | 1 | E | interface { } | +| slices.Max | 0 | S | interface { ~[]E } | +| slices.Max | 1 | E | Ordered | +| slices.MaxFunc | 0 | S | interface { ~[]E } | +| slices.MaxFunc | 1 | E | interface { } | +| slices.Min | 0 | S | interface { ~[]E } | +| slices.Min | 1 | E | Ordered | +| slices.MinFunc | 0 | S | interface { ~[]E } | +| slices.MinFunc | 1 | E | interface { } | +| slices.Replace | 0 | S | interface { ~[]E } | +| slices.Replace | 1 | E | interface { } | +| slices.Reverse | 0 | S | interface { ~[]E } | +| slices.Reverse | 1 | E | interface { } | +| slices.Sort | 0 | S | interface { ~[]E } | +| slices.Sort | 1 | E | Ordered | +| slices.SortFunc | 0 | S | interface { ~[]E } | +| slices.SortFunc | 1 | E | interface { } | +| slices.SortStableFunc | 0 | S | interface { ~[]E } | +| slices.SortStableFunc | 1 | E | interface { } | +| slices.breakPatternsCmpFunc | 0 | E | interface { } | +| slices.breakPatternsOrdered | 0 | E | Ordered | +| slices.choosePivotCmpFunc | 0 | E | interface { } | +| slices.choosePivotOrdered | 0 | E | Ordered | +| slices.heapSortCmpFunc | 0 | E | interface { } | +| slices.heapSortOrdered | 0 | E | Ordered | +| slices.insertionSortCmpFunc | 0 | E | interface { } | +| slices.insertionSortOrdered | 0 | E | Ordered | +| slices.isNaN | 0 | T | Ordered | +| slices.medianAdjacentCmpFunc | 0 | E | interface { } | +| slices.medianAdjacentOrdered | 0 | E | Ordered | +| slices.medianCmpFunc | 0 | E | interface { } | +| slices.medianOrdered | 0 | E | Ordered | +| slices.order2CmpFunc | 0 | E | interface { } | +| slices.order2Ordered | 0 | E | Ordered | +| slices.overlaps | 0 | E | interface { } | +| slices.partialInsertionSortCmpFunc | 0 | E | interface { } | +| slices.partialInsertionSortOrdered | 0 | E | Ordered | +| slices.partitionCmpFunc | 0 | E | interface { } | +| slices.partitionEqualCmpFunc | 0 | E | interface { } | +| slices.partitionEqualOrdered | 0 | E | Ordered | +| slices.partitionOrdered | 0 | E | Ordered | +| slices.pdqsortCmpFunc | 0 | E | interface { } | +| slices.pdqsortOrdered | 0 | E | Ordered | +| slices.reverseRangeCmpFunc | 0 | E | interface { } | +| slices.reverseRangeOrdered | 0 | E | Ordered | +| slices.rotateCmpFunc | 0 | E | interface { } | +| slices.rotateLeft | 0 | E | interface { } | +| slices.rotateOrdered | 0 | E | Ordered | +| slices.rotateRight | 0 | E | interface { } | +| slices.siftDownCmpFunc | 0 | E | interface { } | +| slices.siftDownOrdered | 0 | E | Ordered | +| slices.stableCmpFunc | 0 | E | interface { } | +| slices.stableOrdered | 0 | E | Ordered | +| slices.startIdx | 0 | E | interface { } | +| slices.swap | 0 | E | interface { } | +| slices.swapRangeCmpFunc | 0 | E | interface { } | +| slices.swapRangeOrdered | 0 | E | Ordered | +| slices.symMergeCmpFunc | 0 | E | interface { } | +| slices.symMergeOrdered | 0 | E | Ordered | +| sync.OnceValue | 0 | T | interface { } | +| sync.OnceValues | 0 | T1 | interface { } | +| sync.OnceValues | 1 | T2 | interface { } | +| sync/atomic.Pointer | 0 | T | interface { } | +| sync/atomic.Pointer.CompareAndSwap | 0 | T | interface { } | +| sync/atomic.Pointer.Load | 0 | T | interface { } | +| sync/atomic.Pointer.Store | 0 | T | interface { } | +| sync/atomic.Pointer.Swap | 0 | T | interface { } | +| time.atoi | 0 | bytes | interface { []uint8 \| string } | +| time.isDigit | 0 | bytes | interface { []uint8 \| string } | +| time.leadingInt | 0 | bytes | interface { []uint8 \| string } | +| time.parseNanoseconds | 0 | bytes | interface { []uint8 \| string } | +| time.parseRFC3339 | 0 | bytes | interface { []uint8 \| string } | diff --git a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.ql b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.ql index a4167f8d702..9170c0d35ed 100644 --- a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.ql +++ b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.ql @@ -1,4 +1,5 @@ import go -from TypeParamType tpt -select tpt.getParamName(), tpt.getConstraint().pp() +from TypeParamType tpt, TypeParamParentEntity ty +where ty = tpt.getParent() +select ty.getQualifiedName(), tpt.getIndex(), tpt.getParamName(), tpt.getConstraint().pp() From 2369b18ca65a4c8f3f808855368421d71c1bb02b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 13:43:03 +0200 Subject: [PATCH 309/334] C++: Make additional flow steps more uniform --- .../CWE/CWE-409/DecompressionBomb.qll | 5 +++- .../CWE/CWE-409/DecompressionBombs.ql | 3 +-- .../Security/CWE/CWE-409/LibArchive.qll | 6 ++--- .../Security/CWE/CWE-409/MiniZip.qll | 10 +++---- .../Security/CWE/CWE-409/ZSTD.qll | 12 ++++----- .../Security/CWE/CWE-409/ZlibGzopen.qll | 12 ++++----- .../Security/CWE/CWE-409/ZlibInflator.qll | 27 +++++++++++-------- 7 files changed, 41 insertions(+), 34 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll index e330e244c38..73698d79314 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBomb.qll @@ -18,6 +18,9 @@ abstract class DecompressionFunction extends Function { /** * The Decompression Flow Steps, extend this class to define new decompression sinks. */ -abstract class DecompressionFlowStep extends Function { +abstract class DecompressionFlowStep extends string { + bindingset[this] + DecompressionFlowStep() { any() } + abstract predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2); } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql index c90aec08307..0bee2775552 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql @@ -26,8 +26,7 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { isSink(_, sink) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - any(DecompressionFlowStep f).isAdditionalFlowStep(node1, node2) or - nextInAdditionalFlowStep(node1, node2) + any(DecompressionFlowStep s).isAdditionalFlowStep(node1, node2) } } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll index 7ea1a9fdb66..aa1d835b70d 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll @@ -20,11 +20,11 @@ class Archive_read_data_block extends DecompressionFunction { /** * The `archive_read_open_filename` function as a flow step. */ -class ReadOpenFunction extends DecompressionFlowStep { - ReadOpenFunction() { this.hasGlobalName("archive_read_open_filename") } +class ReadOpenFunctionStep extends DecompressionFlowStep { + ReadOpenFunctionStep() { this = "ReadOpenFunction"} override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | fc.getTarget().hasGlobalName("archive_read_open_filename") | node1.asIndirectExpr() = fc.getArgument(1) and node2.asIndirectExpr() = fc.getArgument(0) ) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll index 27c6b230aa8..b7cb9df013a 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/MiniZip.qll @@ -42,13 +42,13 @@ class UnzOpenFunction extends DecompressionFunction { /** * The `mz_zip_reader_open_file` and `mz_zip_reader_open_file_in_memory` functions as a flow step. */ -class ReaderOpenFunction extends DecompressionFlowStep { - ReaderOpenFunction() { - this.hasGlobalName(["mz_zip_reader_open_file_in_memory", "mz_zip_reader_open_file"]) - } +class ReaderOpenFunctionStep extends DecompressionFlowStep { + ReaderOpenFunctionStep() { this = "ReaderOpenFunctionStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | + fc.getTarget().hasGlobalName(["mz_zip_reader_open_file_in_memory", "mz_zip_reader_open_file"]) + | node1.asIndirectExpr() = fc.getArgument(1) and node2.asIndirectExpr() = fc.getArgument(0) ) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll index dbdb729dd8c..e39ad4ee8a0 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll @@ -44,11 +44,11 @@ class ZstdDecompressUsingDdictFunction extends DecompressionFunction { /** * The `fopen_orDie` function as a flow step. */ -class FopenOrDieFunction extends DecompressionFlowStep { - FopenOrDieFunction() { this.hasGlobalName("fopen_orDie") } +class FopenOrDieFunctionStep extends DecompressionFlowStep { + FopenOrDieFunctionStep() { this = "FopenOrDieFunctionStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | fc.getTarget().hasGlobalName("fopen_orDie") | node1.asIndirectExpr() = fc.getArgument(0) and node2.asExpr() = fc ) @@ -58,11 +58,11 @@ class FopenOrDieFunction extends DecompressionFlowStep { /** * The `fread_orDie` function as a flow step. */ -class FreadOrDieFunction extends DecompressionFlowStep { - FreadOrDieFunction() { this.hasGlobalName("fread_orDie") } +class FreadOrDieFunctionStep extends DecompressionFlowStep { + FreadOrDieFunctionStep() { this = "FreadOrDieFunctionStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | fc.getTarget().hasGlobalName("fread_orDie") | node1.asIndirectExpr() = fc.getArgument(2) and node2.asIndirectExpr() = fc.getArgument(0) ) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll index e8ea7e7fc8c..172f8e7a7b6 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibGzopen.qll @@ -43,11 +43,11 @@ class GzReadFunction extends DecompressionFunction { * * `gzdopen(int fd, const char *mode)` */ -class GzdopenFunction extends DecompressionFlowStep { - GzdopenFunction() { this.hasGlobalName("gzdopen") } +class GzdopenFunctionStep extends DecompressionFlowStep { + GzdopenFunctionStep() { this = "GzdopenFunctionStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | fc.getTarget().hasGlobalName("gzdopen") | node1.asExpr() = fc.getArgument(0) and node2.asExpr() = fc ) @@ -59,11 +59,11 @@ class GzdopenFunction extends DecompressionFlowStep { * * `gzopen(const char *path, const char *mode)` */ -class GzopenFunction extends DecompressionFlowStep { - GzopenFunction() { this.hasGlobalName("gzopen") } +class GzopenFunctionStep extends DecompressionFlowStep { + GzopenFunctionStep() { this = "GzopenFunctionStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(FunctionCall fc | fc.getTarget() = this | + exists(FunctionCall fc | fc.getTarget().hasGlobalName("gzopen") | node1.asIndirectExpr() = fc.getArgument(0) and node2.asExpr() = fc ) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll index c82d29fa7f0..6c3cb6062c5 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll @@ -19,16 +19,21 @@ class InflateFunction extends DecompressionFunction { } /** - * The `next_in` member of a `z_stream` variable is used in flow steps. + * The `next_in` member of a `z_stream` variable is used in a flow steps. */ -predicate nextInAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(Variable nextInVar, VariableAccess zStreamAccess | - nextInVar.getDeclaringType().hasName("z_stream") and - nextInVar.hasName("next_in") and - zStreamAccess.getType().hasName("z_stream") - | - nextInVar.getAnAccess().getQualifier().(VariableAccess).getTarget() = zStreamAccess.getTarget() and - node1.asIndirectExpr() = nextInVar.getAnAssignedValue() and - node2.asExpr() = zStreamAccess - ) +class NextInMemberStep extends DecompressionFlowStep { + NextInMemberStep() { this = "NextInMemberStep" } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(Variable nextInVar, VariableAccess zStreamAccess | + nextInVar.getDeclaringType().hasName("z_stream") and + nextInVar.hasName("next_in") and + zStreamAccess.getType().hasName("z_stream") + | + nextInVar.getAnAccess().getQualifier().(VariableAccess).getTarget() = + zStreamAccess.getTarget() and + node1.asIndirectExpr() = nextInVar.getAnAssignedValue() and + node2.asExpr() = zStreamAccess + ) + } } From f066f21751845bb1160ea3987278bbd95dacc32d Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 3 Sep 2024 09:46:58 +0200 Subject: [PATCH 310/334] C++: Make swap member functions data-flow functions --- .../change-notes/2024-09-04-swap-data-flow.md | 4 ++ .../code/cpp/models/implementations/Swap.qll | 4 +- .../dataflow-consistency.expected | 22 ++++---- .../dataflow-ir-consistency.expected | 4 ++ .../dataflow-tests/localFlow-ir.expected | 18 +++--- .../dataflow-tests/localFlow.expected | 14 ++--- .../dataflow-tests/test-source-sink.expected | 12 +++- .../dataflow/dataflow-tests/test.cpp | 28 ++++++++++ .../dataflow-tests/type-bugs.expected | 2 +- .../dataflow-tests/uninitialized.expected | 4 +- .../dataflow/taint-tests/localTaint.expected | 56 ------------------- .../dataflow/taint-tests/map.cpp | 16 +++--- .../dataflow/taint-tests/set.cpp | 8 +-- .../dataflow/taint-tests/string.cpp | 4 +- .../dataflow/taint-tests/stringstream.cpp | 4 +- .../dataflow/taint-tests/vector.cpp | 4 +- 16 files changed, 97 insertions(+), 107 deletions(-) create mode 100644 cpp/ql/lib/change-notes/2024-09-04-swap-data-flow.md diff --git a/cpp/ql/lib/change-notes/2024-09-04-swap-data-flow.md b/cpp/ql/lib/change-notes/2024-09-04-swap-data-flow.md new file mode 100644 index 00000000000..22acd48ee32 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-09-04-swap-data-flow.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added a data flow model for `swap` member functions, which were previously modeled as taint tracking functions. This change improves the precision of queries where flow through `swap` member functions might affect the results. diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll index 446e659fac5..2e8e7ef6e90 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Swap.qll @@ -26,7 +26,7 @@ private class Swap extends DataFlowFunction { * obj1.swap(obj2) * ``` */ -private class MemberSwap extends TaintFunction, MemberFunction, AliasFunction { +private class MemberSwap extends DataFlowFunction, MemberFunction, AliasFunction { MemberSwap() { this.hasName("swap") and this.getNumberOfParameters() = 1 and @@ -34,7 +34,7 @@ private class MemberSwap extends TaintFunction, MemberFunction, AliasFunction { this.getDeclaringType() } - override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input.isQualifierObject() and output.isParameterDeref(0) or diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index f1bf934b225..d97abde482e 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -33,7 +33,7 @@ argHasPostUpdate | test.cpp:67:29:67:35 | source1 | ArgumentNode is missing PostUpdateNode. | | test.cpp:813:19:813:35 | * ... | ArgumentNode is missing PostUpdateNode. | | test.cpp:848:23:848:25 | rpx | ArgumentNode is missing PostUpdateNode. | -| test.cpp:1065:19:1065:21 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1093:19:1093:21 | * ... | ArgumentNode is missing PostUpdateNode. | postWithInFlow | BarrierGuard.cpp:49:6:49:6 | x [post update] | PostUpdateNode should not be the target of local flow. | | BarrierGuard.cpp:60:7:60:7 | x [post update] | PostUpdateNode should not be the target of local flow. | @@ -167,15 +167,17 @@ postWithInFlow | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | -| test.cpp:1059:5:1059:11 | content [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1060:9:1060:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1064:5:1064:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1064:6:1064:7 | pp [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1070:53:1070:53 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1080:3:1080:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1080:4:1080:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1081:3:1081:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1081:4:1081:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1066:5:1066:5 | i [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1069:5:1069:5 | i [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1087:5:1087:11 | content [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1088:9:1088:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1092:5:1092:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1092:6:1092:7 | pp [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1098:53:1098:53 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1108:3:1108:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1108:4:1108:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1109:3:1109:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1109:4:1109:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected index cc0903c1efb..064a53e8d12 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected @@ -26,6 +26,10 @@ postWithInFlow | test.cpp:400:10:400:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:407:10:407:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:1045:9:1045:11 | memset output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1076:2:1076:3 | swap output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1076:10:1076:11 | swap output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1077:2:1077:3 | swap output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1077:10:1077:11 | swap output argument | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected index db5bf5cda15..c1dedd454b6 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -202,12 +202,12 @@ | test.cpp:489:23:489:29 | *content | test.cpp:490:8:490:17 | * ... | | test.cpp:489:23:489:29 | content | test.cpp:489:23:489:29 | content | | test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | -| test.cpp:1058:12:1058:12 | definition of a | test.cpp:1059:3:1059:3 | *a | -| test.cpp:1059:3:1059:3 | *a | test.cpp:1060:8:1060:9 | *& ... | -| test.cpp:1059:3:1059:3 | *a [post update] | test.cpp:1060:8:1060:9 | *& ... | -| test.cpp:1059:3:1059:3 | a | test.cpp:1060:8:1060:9 | & ... | -| test.cpp:1059:3:1059:3 | a [post update] | test.cpp:1060:8:1060:9 | & ... | -| test.cpp:1059:15:1059:21 | 0 | test.cpp:1059:3:1059:21 | ... = ... | -| test.cpp:1059:15:1059:21 | *0 | test.cpp:1059:3:1059:21 | *... = ... | -| test.cpp:1060:9:1060:9 | *a | test.cpp:1060:8:1060:9 | *& ... | -| test.cpp:1060:9:1060:9 | a | test.cpp:1060:8:1060:9 | & ... | +| test.cpp:1086:12:1086:12 | definition of a | test.cpp:1087:3:1087:3 | *a | +| test.cpp:1087:3:1087:3 | *a | test.cpp:1088:8:1088:9 | *& ... | +| test.cpp:1087:3:1087:3 | *a [post update] | test.cpp:1088:8:1088:9 | *& ... | +| test.cpp:1087:3:1087:3 | a | test.cpp:1088:8:1088:9 | & ... | +| test.cpp:1087:3:1087:3 | a [post update] | test.cpp:1088:8:1088:9 | & ... | +| test.cpp:1087:15:1087:21 | 0 | test.cpp:1087:3:1087:21 | ... = ... | +| test.cpp:1087:15:1087:21 | *0 | test.cpp:1087:3:1087:21 | *... = ... | +| test.cpp:1088:9:1088:9 | *a | test.cpp:1088:8:1088:9 | *& ... | +| test.cpp:1088:9:1088:9 | a | test.cpp:1088:8:1088:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected index 1296bab1637..311b2d7f61c 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected @@ -81,10 +81,10 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (loc | test.cpp:488:21:488:21 | s [post update] | test.cpp:489:20:489:20 | s | | test.cpp:488:24:488:30 | ref arg content | test.cpp:489:23:489:29 | content | | test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | -| test.cpp:1058:12:1058:12 | a | test.cpp:1059:3:1059:3 | a | -| test.cpp:1058:12:1058:12 | a | test.cpp:1060:9:1060:9 | a | -| test.cpp:1059:3:1059:3 | a [post update] | test.cpp:1060:9:1060:9 | a | -| test.cpp:1059:3:1059:21 | ... = ... | test.cpp:1059:5:1059:11 | content [post update] | -| test.cpp:1059:15:1059:21 | 0 | test.cpp:1059:3:1059:21 | ... = ... | -| test.cpp:1060:8:1060:9 | ref arg & ... | test.cpp:1060:9:1060:9 | a [inner post update] | -| test.cpp:1060:9:1060:9 | a | test.cpp:1060:8:1060:9 | & ... | +| test.cpp:1086:12:1086:12 | a | test.cpp:1087:3:1087:3 | a | +| test.cpp:1086:12:1086:12 | a | test.cpp:1088:9:1088:9 | a | +| test.cpp:1087:3:1087:3 | a [post update] | test.cpp:1088:9:1088:9 | a | +| test.cpp:1087:3:1087:21 | ... = ... | test.cpp:1087:5:1087:11 | content [post update] | +| test.cpp:1087:15:1087:21 | 0 | test.cpp:1087:3:1087:21 | ... = ... | +| test.cpp:1088:8:1088:9 | ref arg & ... | test.cpp:1088:9:1088:9 | a [inner post update] | +| test.cpp:1088:9:1088:9 | a | test.cpp:1088:8:1088:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 633445773f6..90f797429c9 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -127,7 +127,11 @@ astFlow | test.cpp:842:11:842:16 | call to source | test.cpp:844:8:844:8 | y | | test.cpp:846:13:846:27 | call to indirect_source | test.cpp:848:23:848:25 | rpx | | test.cpp:860:54:860:59 | call to source | test.cpp:861:10:861:37 | static_local_pointer_dynamic | -| test.cpp:1058:12:1058:12 | a | test.cpp:1060:8:1060:9 | & ... | +| test.cpp:1066:9:1066:14 | call to source | test.cpp:1072:10:1072:10 | i | +| test.cpp:1066:9:1066:14 | call to source | test.cpp:1080:10:1080:10 | i | +| test.cpp:1069:9:1069:14 | call to source | test.cpp:1074:10:1074:10 | i | +| test.cpp:1069:9:1069:14 | call to source | test.cpp:1082:10:1082:10 | i | +| test.cpp:1086:12:1086:12 | a | test.cpp:1088:8:1088:9 | & ... | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | | true_upon_entry.cpp:33:11:33:16 | call to source | true_upon_entry.cpp:39:8:39:8 | x | @@ -314,7 +318,11 @@ irFlow | test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated | | test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... | | test.cpp:1052:13:1052:27 | *call to indirect_source | test.cpp:1054:7:1054:11 | * ... | -| test.cpp:1089:27:1089:34 | call to source | test.cpp:1089:27:1089:34 | call to source | +| test.cpp:1066:9:1066:14 | call to source | test.cpp:1072:10:1072:10 | i | +| test.cpp:1066:9:1066:14 | call to source | test.cpp:1079:10:1079:10 | i | +| test.cpp:1069:9:1069:14 | call to source | test.cpp:1074:10:1074:10 | i | +| test.cpp:1069:9:1069:14 | call to source | test.cpp:1081:10:1081:10 | i | +| test.cpp:1117:27:1117:34 | call to source | test.cpp:1117:27:1117:34 | call to source | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index a7600c64aa2..3a6ffe9b716 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1054,6 +1054,34 @@ void test_realloc() { sink(*dest); // $ ir, MISSING: ast } +struct MyInt { + int i; + MyInt(); + void swap(MyInt &j); +}; + +void test_member_swap() { + MyInt s1; + MyInt s2; + s2.i = source(); + MyInt s3; + MyInt s4; + s4.i = source(); + + sink(s1.i); + sink(s2.i); // $ ast,ir + sink(s3.i); + sink(s4.i); // $ ast,ir + + s1.swap(s2); + s4.swap(s3); + + sink(s1.i); // $ ir + sink(s2.i); // $ SPURIOUS: ast + sink(s3.i); // $ ir + sink(s4.i); // $ SPURIOUS: ast +} + void flow_out_of_address_with_local_flow() { MyStruct a; a.content = nullptr; diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index f30404718c5..02f5544fe14 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -51,5 +51,5 @@ incorrectBaseType | test.cpp:848:23:848:25 | rpx | Expected 'Node.getType()' to be int, but it was int * | | test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | | test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | -| test.cpp:1070:52:1070:53 | *& ... | Expected 'Node.getType()' to be char, but it was char * | +| test.cpp:1098:52:1098:53 | *& ... | Expected 'Node.getType()' to be char, but it was char * | failures diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected index b374cf37ecd..16f0b799d0a 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected @@ -54,5 +54,5 @@ | test.cpp:796:12:796:12 | a | test.cpp:797:20:797:20 | a | | test.cpp:796:12:796:12 | a | test.cpp:797:31:797:31 | a | | test.cpp:796:12:796:12 | a | test.cpp:798:17:798:17 | a | -| test.cpp:1058:12:1058:12 | a | test.cpp:1059:3:1059:3 | a | -| test.cpp:1058:12:1058:12 | a | test.cpp:1060:9:1060:9 | a | +| test.cpp:1086:12:1086:12 | a | test.cpp:1087:3:1087:3 | a | +| test.cpp:1086:12:1086:12 | a | test.cpp:1088:9:1088:9 | a | 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 b21e10ef25d..80541c16115 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -554,19 +554,15 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | map.cpp:67:30:67:42 | call to pair | map.cpp:80:7:80:7 | l | | | map.cpp:67:30:67:42 | call to pair | map.cpp:81:7:81:7 | l | | | map.cpp:67:37:67:41 | 456 | map.cpp:67:30:67:42 | call to pair | TAINT | -| map.cpp:68:3:68:3 | i | map.cpp:68:10:68:10 | ref arg j | TAINT | | map.cpp:68:3:68:3 | ref arg i | map.cpp:70:7:70:7 | i | | | map.cpp:68:3:68:3 | ref arg i | map.cpp:71:7:71:7 | i | | | map.cpp:68:3:68:3 | ref arg i | map.cpp:72:7:72:7 | i | | -| map.cpp:68:10:68:10 | j | map.cpp:68:3:68:3 | ref arg i | TAINT | | map.cpp:68:10:68:10 | ref arg j | map.cpp:73:7:73:7 | j | | | map.cpp:68:10:68:10 | ref arg j | map.cpp:74:7:74:7 | j | | | map.cpp:68:10:68:10 | ref arg j | map.cpp:75:7:75:7 | j | | -| map.cpp:69:2:69:2 | k | map.cpp:69:9:69:9 | ref arg l | TAINT | | map.cpp:69:2:69:2 | ref arg k | map.cpp:76:7:76:7 | k | | | map.cpp:69:2:69:2 | ref arg k | map.cpp:77:7:77:7 | k | | | map.cpp:69:2:69:2 | ref arg k | map.cpp:78:7:78:7 | k | | -| map.cpp:69:9:69:9 | l | map.cpp:69:2:69:2 | ref arg k | TAINT | | map.cpp:69:9:69:9 | ref arg l | map.cpp:79:7:79:7 | l | | | map.cpp:69:9:69:9 | ref arg l | map.cpp:80:7:80:7 | l | | | map.cpp:69:9:69:9 | ref arg l | map.cpp:81:7:81:7 | l | | @@ -1065,16 +1061,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | map.cpp:194:7:194:9 | m16 | map.cpp:194:7:194:9 | call to map | | | map.cpp:195:7:195:9 | m17 | map.cpp:195:7:195:9 | call to map | | | map.cpp:196:7:196:9 | m18 | map.cpp:196:7:196:9 | call to map | | -| map.cpp:197:2:197:4 | m15 | map.cpp:197:11:197:13 | ref arg m16 | TAINT | | map.cpp:197:2:197:4 | ref arg m15 | map.cpp:199:7:199:9 | m15 | | | map.cpp:197:2:197:4 | ref arg m15 | map.cpp:252:1:252:1 | m15 | | -| map.cpp:197:11:197:13 | m16 | map.cpp:197:2:197:4 | ref arg m15 | TAINT | | map.cpp:197:11:197:13 | ref arg m16 | map.cpp:200:7:200:9 | m16 | | | map.cpp:197:11:197:13 | ref arg m16 | map.cpp:252:1:252:1 | m16 | | -| map.cpp:198:2:198:4 | m17 | map.cpp:198:11:198:13 | ref arg m18 | TAINT | | map.cpp:198:2:198:4 | ref arg m17 | map.cpp:201:7:201:9 | m17 | | | map.cpp:198:2:198:4 | ref arg m17 | map.cpp:252:1:252:1 | m17 | | -| map.cpp:198:11:198:13 | m18 | map.cpp:198:2:198:4 | ref arg m17 | TAINT | | map.cpp:198:11:198:13 | ref arg m18 | map.cpp:202:7:202:9 | m18 | | | map.cpp:198:11:198:13 | ref arg m18 | map.cpp:252:1:252:1 | m18 | | | map.cpp:199:7:199:9 | m15 | map.cpp:199:7:199:9 | call to map | | @@ -1747,16 +1739,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | map.cpp:343:7:343:9 | m16 | map.cpp:343:7:343:9 | call to unordered_map | | | map.cpp:344:7:344:9 | m17 | map.cpp:344:7:344:9 | call to unordered_map | | | map.cpp:345:7:345:9 | m18 | map.cpp:345:7:345:9 | call to unordered_map | | -| map.cpp:346:2:346:4 | m15 | map.cpp:346:11:346:13 | ref arg m16 | TAINT | | map.cpp:346:2:346:4 | ref arg m15 | map.cpp:348:7:348:9 | m15 | | | map.cpp:346:2:346:4 | ref arg m15 | map.cpp:438:1:438:1 | m15 | | -| map.cpp:346:11:346:13 | m16 | map.cpp:346:2:346:4 | ref arg m15 | TAINT | | map.cpp:346:11:346:13 | ref arg m16 | map.cpp:349:7:349:9 | m16 | | | map.cpp:346:11:346:13 | ref arg m16 | map.cpp:438:1:438:1 | m16 | | -| map.cpp:347:2:347:4 | m17 | map.cpp:347:11:347:13 | ref arg m18 | TAINT | | map.cpp:347:2:347:4 | ref arg m17 | map.cpp:350:7:350:9 | m17 | | | map.cpp:347:2:347:4 | ref arg m17 | map.cpp:438:1:438:1 | m17 | | -| map.cpp:347:11:347:13 | m18 | map.cpp:347:2:347:4 | ref arg m17 | TAINT | | map.cpp:347:11:347:13 | ref arg m18 | map.cpp:351:7:351:9 | m18 | | | map.cpp:347:11:347:13 | ref arg m18 | map.cpp:438:1:438:1 | m18 | | | map.cpp:348:7:348:9 | m15 | map.cpp:348:7:348:9 | call to unordered_map | | @@ -2579,16 +2567,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | set.cpp:81:7:81:9 | s15 | set.cpp:81:7:81:9 | call to set | | | set.cpp:82:2:82:4 | ref arg s12 | set.cpp:84:7:84:9 | s12 | | | set.cpp:82:2:82:4 | ref arg s12 | set.cpp:126:1:126:1 | s12 | | -| set.cpp:82:2:82:4 | s12 | set.cpp:82:11:82:13 | ref arg s13 | TAINT | | set.cpp:82:11:82:13 | ref arg s13 | set.cpp:85:7:85:9 | s13 | | | set.cpp:82:11:82:13 | ref arg s13 | set.cpp:126:1:126:1 | s13 | | -| set.cpp:82:11:82:13 | s13 | set.cpp:82:2:82:4 | ref arg s12 | TAINT | | set.cpp:83:2:83:4 | ref arg s14 | set.cpp:86:7:86:9 | s14 | | | set.cpp:83:2:83:4 | ref arg s14 | set.cpp:126:1:126:1 | s14 | | -| set.cpp:83:2:83:4 | s14 | set.cpp:83:11:83:13 | ref arg s15 | TAINT | | set.cpp:83:11:83:13 | ref arg s15 | set.cpp:87:7:87:9 | s15 | | | set.cpp:83:11:83:13 | ref arg s15 | set.cpp:126:1:126:1 | s15 | | -| set.cpp:83:11:83:13 | s15 | set.cpp:83:2:83:4 | ref arg s14 | TAINT | | set.cpp:84:7:84:9 | s12 | set.cpp:84:7:84:9 | call to set | | | set.cpp:85:7:85:9 | s13 | set.cpp:85:7:85:9 | call to set | | | set.cpp:86:7:86:9 | s14 | set.cpp:86:7:86:9 | call to set | | @@ -3066,16 +3050,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | set.cpp:193:7:193:9 | s15 | set.cpp:193:7:193:9 | call to unordered_set | | | set.cpp:194:2:194:4 | ref arg s12 | set.cpp:196:7:196:9 | s12 | | | set.cpp:194:2:194:4 | ref arg s12 | set.cpp:238:1:238:1 | s12 | | -| set.cpp:194:2:194:4 | s12 | set.cpp:194:11:194:13 | ref arg s13 | TAINT | | set.cpp:194:11:194:13 | ref arg s13 | set.cpp:197:7:197:9 | s13 | | | set.cpp:194:11:194:13 | ref arg s13 | set.cpp:238:1:238:1 | s13 | | -| set.cpp:194:11:194:13 | s13 | set.cpp:194:2:194:4 | ref arg s12 | TAINT | | set.cpp:195:2:195:4 | ref arg s14 | set.cpp:198:7:198:9 | s14 | | | set.cpp:195:2:195:4 | ref arg s14 | set.cpp:238:1:238:1 | s14 | | -| set.cpp:195:2:195:4 | s14 | set.cpp:195:11:195:13 | ref arg s15 | TAINT | | set.cpp:195:11:195:13 | ref arg s15 | set.cpp:199:7:199:9 | s15 | | | set.cpp:195:11:195:13 | ref arg s15 | set.cpp:238:1:238:1 | s15 | | -| set.cpp:195:11:195:13 | s15 | set.cpp:195:2:195:4 | ref arg s14 | TAINT | | set.cpp:196:7:196:9 | s12 | set.cpp:196:7:196:9 | call to unordered_set | | | set.cpp:197:7:197:9 | s13 | set.cpp:197:7:197:9 | call to unordered_set | | | set.cpp:198:7:198:9 | s14 | set.cpp:198:7:198:9 | call to unordered_set | | @@ -4047,13 +4027,9 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:272:17:272:25 | call to basic_string | string.cpp:280:2:280:3 | s4 | | | string.cpp:272:17:272:25 | call to basic_string | string.cpp:285:7:285:8 | s4 | | | string.cpp:279:2:279:3 | ref arg s1 | string.cpp:282:7:282:8 | s1 | | -| string.cpp:279:2:279:3 | s1 | string.cpp:279:10:279:11 | ref arg s2 | TAINT | | string.cpp:279:10:279:11 | ref arg s2 | string.cpp:283:7:283:8 | s2 | | -| string.cpp:279:10:279:11 | s2 | string.cpp:279:2:279:3 | ref arg s1 | TAINT | | string.cpp:280:2:280:3 | ref arg s4 | string.cpp:285:7:285:8 | s4 | | -| string.cpp:280:2:280:3 | s4 | string.cpp:280:10:280:11 | ref arg s3 | TAINT | | string.cpp:280:10:280:11 | ref arg s3 | string.cpp:284:7:284:8 | s3 | | -| string.cpp:280:10:280:11 | s3 | string.cpp:280:2:280:3 | ref arg s4 | TAINT | | string.cpp:289:17:289:22 | call to source | string.cpp:289:17:289:25 | call to basic_string | TAINT | | string.cpp:289:17:289:25 | call to basic_string | string.cpp:293:7:293:8 | s1 | | | string.cpp:289:17:289:25 | call to basic_string | string.cpp:297:2:297:3 | s1 | | @@ -4839,13 +4815,9 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | stringstream.cpp:115:24:115:32 | call to basic_stringstream | stringstream.cpp:118:2:118:4 | ss4 | | | stringstream.cpp:115:24:115:32 | call to basic_stringstream | stringstream.cpp:123:7:123:9 | ss4 | | | stringstream.cpp:117:2:117:4 | ref arg ss1 | stringstream.cpp:120:7:120:9 | ss1 | | -| stringstream.cpp:117:2:117:4 | ss1 | stringstream.cpp:117:11:117:13 | ref arg ss2 | TAINT | | stringstream.cpp:117:11:117:13 | ref arg ss2 | stringstream.cpp:121:7:121:9 | ss2 | | -| stringstream.cpp:117:11:117:13 | ss2 | stringstream.cpp:117:2:117:4 | ref arg ss1 | TAINT | | stringstream.cpp:118:2:118:4 | ref arg ss4 | stringstream.cpp:123:7:123:9 | ss4 | | -| stringstream.cpp:118:2:118:4 | ss4 | stringstream.cpp:118:11:118:13 | ref arg ss3 | TAINT | | stringstream.cpp:118:11:118:13 | ref arg ss3 | stringstream.cpp:122:7:122:9 | ss3 | | -| stringstream.cpp:118:11:118:13 | ss3 | stringstream.cpp:118:2:118:4 | ref arg ss4 | TAINT | | stringstream.cpp:128:20:128:22 | call to basic_stringstream | stringstream.cpp:142:7:142:9 | ss1 | | | stringstream.cpp:128:20:128:22 | call to basic_stringstream | stringstream.cpp:145:7:145:9 | ss1 | | | stringstream.cpp:128:20:128:22 | call to basic_stringstream | stringstream.cpp:153:7:153:9 | ss1 | | @@ -5413,9 +5385,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap1.cpp:24:9:24:13 | this | swap1.cpp:24:31:24:34 | this | | | swap1.cpp:24:23:24:26 | that | swap1.cpp:24:23:24:26 | that | | | swap1.cpp:24:23:24:26 | that | swap1.cpp:24:36:24:39 | that | | -| swap1.cpp:24:31:24:34 | this | swap1.cpp:24:36:24:39 | ref arg that | TAINT | | swap1.cpp:24:36:24:39 | ref arg that | swap1.cpp:24:23:24:26 | that | | -| swap1.cpp:24:36:24:39 | that | swap1.cpp:24:31:24:34 | ref arg this | TAINT | | swap1.cpp:25:9:25:13 | this | swap1.cpp:25:36:25:52 | constructor init of field data1 [pre-this] | | | swap1.cpp:25:28:25:31 | that | swap1.cpp:25:42:25:45 | that | | | swap1.cpp:25:47:25:51 | data1 | swap1.cpp:25:36:25:52 | constructor init of field data1 | TAINT | @@ -5425,36 +5395,28 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap1.cpp:29:23:29:27 | call to Class | swap1.cpp:30:18:30:20 | tmp | | | swap1.cpp:29:24:29:27 | that | swap1.cpp:29:23:29:27 | call to Class | | | swap1.cpp:30:13:30:16 | ref arg this | swap1.cpp:31:21:31:24 | this | | -| swap1.cpp:30:13:30:16 | this | swap1.cpp:30:18:30:20 | ref arg tmp | TAINT | | swap1.cpp:30:13:30:16 | this | swap1.cpp:31:21:31:24 | this | | -| swap1.cpp:30:18:30:20 | tmp | swap1.cpp:30:13:30:16 | ref arg this | TAINT | | swap1.cpp:31:21:31:24 | this | swap1.cpp:31:20:31:24 | * ... | TAINT | | swap1.cpp:34:16:34:24 | this | swap1.cpp:36:13:36:16 | this | | | swap1.cpp:34:34:34:37 | that | swap1.cpp:34:34:34:37 | that | | | swap1.cpp:34:34:34:37 | that | swap1.cpp:36:18:36:21 | that | | | swap1.cpp:36:13:36:16 | ref arg this | swap1.cpp:37:21:37:24 | this | | -| swap1.cpp:36:13:36:16 | this | swap1.cpp:36:18:36:21 | ref arg that | TAINT | | swap1.cpp:36:13:36:16 | this | swap1.cpp:37:21:37:24 | this | | | swap1.cpp:36:18:36:21 | ref arg that | swap1.cpp:34:34:34:37 | that | | -| swap1.cpp:36:18:36:21 | that | swap1.cpp:36:13:36:16 | ref arg this | TAINT | | swap1.cpp:37:21:37:24 | this | swap1.cpp:37:20:37:24 | * ... | TAINT | | swap1.cpp:40:16:40:26 | this | swap1.cpp:43:13:43:16 | this | | | swap1.cpp:40:41:40:44 | that | swap1.cpp:42:24:42:27 | that | | | swap1.cpp:42:23:42:27 | call to Class | swap1.cpp:43:18:43:20 | tmp | | | swap1.cpp:42:24:42:27 | that | swap1.cpp:42:23:42:27 | call to Class | | | swap1.cpp:43:13:43:16 | ref arg this | swap1.cpp:44:21:44:24 | this | | -| swap1.cpp:43:13:43:16 | this | swap1.cpp:43:18:43:20 | ref arg tmp | TAINT | | swap1.cpp:43:13:43:16 | this | swap1.cpp:44:21:44:24 | this | | -| swap1.cpp:43:18:43:20 | tmp | swap1.cpp:43:13:43:16 | ref arg this | TAINT | | swap1.cpp:44:21:44:24 | this | swap1.cpp:44:20:44:24 | * ... | TAINT | | swap1.cpp:47:16:47:26 | this | swap1.cpp:49:13:49:16 | this | | | swap1.cpp:47:36:47:39 | that | swap1.cpp:47:36:47:39 | that | | | swap1.cpp:47:36:47:39 | that | swap1.cpp:49:18:49:21 | that | | | swap1.cpp:49:13:49:16 | ref arg this | swap1.cpp:50:21:50:24 | this | | -| swap1.cpp:49:13:49:16 | this | swap1.cpp:49:18:49:21 | ref arg that | TAINT | | swap1.cpp:49:13:49:16 | this | swap1.cpp:50:21:50:24 | this | | | swap1.cpp:49:18:49:21 | ref arg that | swap1.cpp:47:36:47:39 | that | | -| swap1.cpp:49:18:49:21 | that | swap1.cpp:49:13:49:16 | ref arg this | TAINT | | swap1.cpp:50:21:50:24 | this | swap1.cpp:50:20:50:24 | * ... | TAINT | | swap1.cpp:53:14:53:17 | this | swap1.cpp:56:18:56:22 | this | | | swap1.cpp:53:26:53:29 | that | swap1.cpp:53:26:53:29 | that | | @@ -5468,9 +5430,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap1.cpp:61:32:61:32 | y | swap1.cpp:61:32:61:32 | y | | | swap1.cpp:61:32:61:32 | y | swap1.cpp:63:16:63:16 | y | | | swap1.cpp:63:9:63:9 | ref arg x | swap1.cpp:61:22:61:22 | x | | -| swap1.cpp:63:9:63:9 | x | swap1.cpp:63:16:63:16 | ref arg y | TAINT | | swap1.cpp:63:16:63:16 | ref arg y | swap1.cpp:61:32:61:32 | y | | -| swap1.cpp:63:16:63:16 | y | swap1.cpp:63:9:63:9 | ref arg x | TAINT | | swap1.cpp:69:23:69:23 | x | swap1.cpp:71:5:71:5 | x | | | swap1.cpp:69:23:69:23 | x | swap1.cpp:73:10:73:10 | x | | | swap1.cpp:69:23:69:23 | x | swap1.cpp:76:9:76:9 | x | | @@ -5579,9 +5539,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap2.cpp:24:9:24:13 | this | swap2.cpp:24:31:24:34 | this | | | swap2.cpp:24:23:24:26 | that | swap2.cpp:24:23:24:26 | that | | | swap2.cpp:24:23:24:26 | that | swap2.cpp:24:36:24:39 | that | | -| swap2.cpp:24:31:24:34 | this | swap2.cpp:24:36:24:39 | ref arg that | TAINT | | swap2.cpp:24:36:24:39 | ref arg that | swap2.cpp:24:23:24:26 | that | | -| swap2.cpp:24:36:24:39 | that | swap2.cpp:24:31:24:34 | ref arg this | TAINT | | swap2.cpp:25:9:25:13 | this | swap2.cpp:25:36:25:52 | constructor init of field data1 [pre-this] | | | swap2.cpp:25:28:25:31 | that | swap2.cpp:25:42:25:45 | that | | | swap2.cpp:25:28:25:31 | that | swap2.cpp:25:61:25:64 | that | | @@ -5596,36 +5554,28 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap2.cpp:29:23:29:27 | call to Class | swap2.cpp:30:18:30:20 | tmp | | | swap2.cpp:29:24:29:27 | that | swap2.cpp:29:23:29:27 | call to Class | | | swap2.cpp:30:13:30:16 | ref arg this | swap2.cpp:31:21:31:24 | this | | -| swap2.cpp:30:13:30:16 | this | swap2.cpp:30:18:30:20 | ref arg tmp | TAINT | | swap2.cpp:30:13:30:16 | this | swap2.cpp:31:21:31:24 | this | | -| swap2.cpp:30:18:30:20 | tmp | swap2.cpp:30:13:30:16 | ref arg this | TAINT | | swap2.cpp:31:21:31:24 | this | swap2.cpp:31:20:31:24 | * ... | TAINT | | swap2.cpp:34:16:34:24 | this | swap2.cpp:36:13:36:16 | this | | | swap2.cpp:34:34:34:37 | that | swap2.cpp:34:34:34:37 | that | | | swap2.cpp:34:34:34:37 | that | swap2.cpp:36:18:36:21 | that | | | swap2.cpp:36:13:36:16 | ref arg this | swap2.cpp:37:21:37:24 | this | | -| swap2.cpp:36:13:36:16 | this | swap2.cpp:36:18:36:21 | ref arg that | TAINT | | swap2.cpp:36:13:36:16 | this | swap2.cpp:37:21:37:24 | this | | | swap2.cpp:36:18:36:21 | ref arg that | swap2.cpp:34:34:34:37 | that | | -| swap2.cpp:36:18:36:21 | that | swap2.cpp:36:13:36:16 | ref arg this | TAINT | | swap2.cpp:37:21:37:24 | this | swap2.cpp:37:20:37:24 | * ... | TAINT | | swap2.cpp:40:16:40:26 | this | swap2.cpp:43:13:43:16 | this | | | swap2.cpp:40:41:40:44 | that | swap2.cpp:42:24:42:27 | that | | | swap2.cpp:42:23:42:27 | call to Class | swap2.cpp:43:18:43:20 | tmp | | | swap2.cpp:42:24:42:27 | that | swap2.cpp:42:23:42:27 | call to Class | | | swap2.cpp:43:13:43:16 | ref arg this | swap2.cpp:44:21:44:24 | this | | -| swap2.cpp:43:13:43:16 | this | swap2.cpp:43:18:43:20 | ref arg tmp | TAINT | | swap2.cpp:43:13:43:16 | this | swap2.cpp:44:21:44:24 | this | | -| swap2.cpp:43:18:43:20 | tmp | swap2.cpp:43:13:43:16 | ref arg this | TAINT | | swap2.cpp:44:21:44:24 | this | swap2.cpp:44:20:44:24 | * ... | TAINT | | swap2.cpp:47:16:47:26 | this | swap2.cpp:49:13:49:16 | this | | | swap2.cpp:47:36:47:39 | that | swap2.cpp:47:36:47:39 | that | | | swap2.cpp:47:36:47:39 | that | swap2.cpp:49:18:49:21 | that | | | swap2.cpp:49:13:49:16 | ref arg this | swap2.cpp:50:21:50:24 | this | | -| swap2.cpp:49:13:49:16 | this | swap2.cpp:49:18:49:21 | ref arg that | TAINT | | swap2.cpp:49:13:49:16 | this | swap2.cpp:50:21:50:24 | this | | | swap2.cpp:49:18:49:21 | ref arg that | swap2.cpp:47:36:47:39 | that | | -| swap2.cpp:49:18:49:21 | that | swap2.cpp:49:13:49:16 | ref arg this | TAINT | | swap2.cpp:50:21:50:24 | this | swap2.cpp:50:20:50:24 | * ... | TAINT | | swap2.cpp:53:14:53:17 | this | swap2.cpp:56:18:56:22 | this | | | swap2.cpp:53:26:53:29 | that | swap2.cpp:53:26:53:29 | that | | @@ -5647,9 +5597,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | swap2.cpp:61:32:61:32 | y | swap2.cpp:61:32:61:32 | y | | | swap2.cpp:61:32:61:32 | y | swap2.cpp:63:16:63:16 | y | | | swap2.cpp:63:9:63:9 | ref arg x | swap2.cpp:61:22:61:22 | x | | -| swap2.cpp:63:9:63:9 | x | swap2.cpp:63:16:63:16 | ref arg y | TAINT | | swap2.cpp:63:16:63:16 | ref arg y | swap2.cpp:61:32:61:32 | y | | -| swap2.cpp:63:16:63:16 | y | swap2.cpp:63:9:63:9 | ref arg x | TAINT | | swap2.cpp:69:23:69:23 | x | swap2.cpp:71:5:71:5 | x | | | swap2.cpp:69:23:69:23 | x | swap2.cpp:73:10:73:10 | x | | | swap2.cpp:69:23:69:23 | x | swap2.cpp:76:9:76:9 | x | | @@ -7012,16 +6960,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | vector.cpp:112:7:112:8 | ref arg v4 | vector.cpp:121:1:121:1 | v4 | | | vector.cpp:114:2:114:3 | ref arg v1 | vector.cpp:117:7:117:8 | v1 | | | vector.cpp:114:2:114:3 | ref arg v1 | vector.cpp:121:1:121:1 | v1 | | -| vector.cpp:114:2:114:3 | v1 | vector.cpp:114:10:114:11 | ref arg v2 | TAINT | | vector.cpp:114:10:114:11 | ref arg v2 | vector.cpp:118:7:118:8 | v2 | | | vector.cpp:114:10:114:11 | ref arg v2 | vector.cpp:121:1:121:1 | v2 | | -| vector.cpp:114:10:114:11 | v2 | vector.cpp:114:2:114:3 | ref arg v1 | TAINT | | vector.cpp:115:2:115:3 | ref arg v3 | vector.cpp:119:7:119:8 | v3 | | | vector.cpp:115:2:115:3 | ref arg v3 | vector.cpp:121:1:121:1 | v3 | | -| vector.cpp:115:2:115:3 | v3 | vector.cpp:115:10:115:11 | ref arg v4 | TAINT | | vector.cpp:115:10:115:11 | ref arg v4 | vector.cpp:120:7:120:8 | v4 | | | vector.cpp:115:10:115:11 | ref arg v4 | vector.cpp:121:1:121:1 | v4 | | -| vector.cpp:115:10:115:11 | v4 | vector.cpp:115:2:115:3 | ref arg v3 | TAINT | | vector.cpp:117:7:117:8 | ref arg v1 | vector.cpp:121:1:121:1 | v1 | | | vector.cpp:118:7:118:8 | ref arg v2 | vector.cpp:121:1:121:1 | v2 | | | vector.cpp:119:7:119:8 | ref arg v3 | vector.cpp:121:1:121:1 | v3 | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp index 555f39779bf..0c6bcedc88b 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp @@ -68,8 +68,8 @@ void test_pair() i.swap(j); k.swap(l); sink(i.first); - sink(i.second); // $ MISSING: ast,ir - sink(i); // $ ast,ir + sink(i.second); // $ ir, MISSING: ast + sink(i); // $ ir sink(j.first); sink(j.second); // $ SPURIOUS: ast sink(j); // $ SPURIOUS: ast @@ -77,8 +77,8 @@ void test_pair() sink(k.second); // $ SPURIOUS: ast sink(k); // $ SPURIOUS: ast sink(l.first); - sink(l.second); // $ MISSING: ast,ir - sink(l); // $ ast,ir + sink(l.second); // $ ir, MISSING: ast + sink(l); // $ ir sink(make_pair("123", "456")); sink(make_pair("123", "456").first); @@ -197,8 +197,8 @@ void test_map() m15.swap(m16); m17.swap(m18); sink(m15); // $ SPURIOUS: ast - sink(m16); // $ ast,ir - sink(m17); // $ ast,ir + sink(m16); // $ ir + sink(m17); // $ ir sink(m18); // $ SPURIOUS: ast // merge @@ -346,8 +346,8 @@ void test_unordered_map() m15.swap(m16); m17.swap(m18); sink(m15); // $ SPURIOUS: ast - sink(m16); // $ ast,ir - sink(m17); // $ ast,ir + sink(m16); // $ ir + sink(m17); // $ ir sink(m18); // $ SPURIOUS: ast // merge diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp index 7c906fb72d2..f2838ac6a82 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/set.cpp @@ -82,8 +82,8 @@ void test_set() s12.swap(s13); s14.swap(s15); sink(s12); // $ SPURIOUS: ast - sink(s13); // $ ast,ir - sink(s14); // $ ast,ir + sink(s13); // $ ir + sink(s14); // $ ir sink(s15); // $ SPURIOUS: ast // merge @@ -194,8 +194,8 @@ void test_unordered_set() s12.swap(s13); s14.swap(s15); sink(s12); // $ SPURIOUS: ast - sink(s13); // $ ast,ir - sink(s14); // $ ast,ir + sink(s13); // $ ir + sink(s14); // $ ir sink(s15); // $ SPURIOUS: ast // merge diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp index dc92a0664be..4da4d3f3fe7 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp @@ -279,9 +279,9 @@ void test_string_swap() { s1.swap(s2); s4.swap(s3); - sink(s1); // $ ast,ir + sink(s1); // $ ir sink(s2); // $ SPURIOUS: ast - sink(s3); // $ ast,ir + sink(s3); // $ ir sink(s4); // $ SPURIOUS: ast } diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp index ca17fb4b3e7..7147e313544 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp @@ -117,9 +117,9 @@ void test_stringstream_swap() ss1.swap(ss2); ss4.swap(ss3); - sink(ss1); // $ ast,ir + sink(ss1); // $ ir sink(ss2); // $ SPURIOUS: ast - sink(ss3); // $ ast,ir + sink(ss3); // $ ir sink(ss4); // $ SPURIOUS: ast } diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp index 7f4d3f22d8e..31c84367d4b 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp @@ -115,8 +115,8 @@ void test_vector_swap() { v3.swap(v4); sink(v1); - sink(v2); // $ MISSING:ir ast - sink(v3); // $ MISSING:ir ast + sink(v2); // $ ir MISSING: ast + sink(v3); // $ ir MISSING: ast sink(v4); } From 92c6170a7634b82f47464f87c12ba9cf02196f99 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 14:06:12 +0200 Subject: [PATCH 311/334] C++: Simplify QLhelp One good and one bad example suffices to get the point across, and makes the help more readable. The examples also do not have to be complete. --- .../CWE/CWE-409/DecompressionBombs.qhelp | 12 +- .../Security/CWE/CWE-409/example_bad.cpp | 126 +----------------- .../Security/CWE/CWE-409/example_good.cpp | 79 ++--------- 3 files changed, 24 insertions(+), 193 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp index cdadabbf207..c263f4db625 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.qhelp @@ -3,8 +3,8 @@ "qhelp.dtd"> -

    Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

    -

    Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

    +

    Extracting Compressed files with any compression algorithm like gzip can cause denial of service attacks.

    +

    Attackers can compress a huge file consisting of repeated similiar bytes into a small compressed file.

    @@ -14,12 +14,12 @@

    -Reading uncompressed Gzip file within a loop and check for a threshold size in each cycle. +Reading an uncompressed Gzip file within a loop and check for a threshold size in each cycle.

    -An Unsafe Approach can be this example which we don't check for uncompressed size. +The following example is unsafe, as we do not check the uncompressed size.

    @@ -28,11 +28,11 @@ An Unsafe Approach can be this example which we don't check for uncompressed siz
  • -Zlib Documentation +Zlib documentation
  • -A great research to gain more impact by this kind of attacks +An explanation of the attack
  • diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp index af513817386..eaf2fe22817 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_bad.cpp @@ -1,129 +1,15 @@ -#include -#include #include "zlib.h" -#include -#include -int UnsafeInflate(int argc, char *argv[]) { - // original string len = 36 - char a[50] = "Hello Hello Hello Hello Hello Hello!"; - // placeholder for the compressed (deflated) version of "a" - char b[50]; - // placeholder for the Uncompressed (inflated) version of "b" - char c[50]; - printf("Uncompressed size is: %lu\n", strlen(a)); - printf("Uncompressed string is: %s\n", a); - printf("\n----------\n\n"); - - // STEP 1. - // zlib struct - z_stream defstream; - defstream.zalloc = Z_NULL; - defstream.zfree = Z_NULL; - defstream.opaque = Z_NULL; - // setup "a" as the input and "b" as the compressed output - defstream.avail_in = (uInt) strlen(a) + 1; // size of input, string + terminator - defstream.next_in = (Bytef *) a; // input char array - defstream.avail_out = (uInt) sizeof(b); // size of output - defstream.next_out = (Bytef *) b; // output char array - - // the actual compression work. - deflateInit(&defstream, Z_BEST_COMPRESSION); - deflate(&defstream, Z_FINISH); - deflateEnd(&defstream); - - // This is one way of getting the size of the output - printf("Compressed size is: %lu\n", strlen(b)); - printf("Compressed string is: %s\n", b); - printf("\n----------\n\n"); - // STEP 2. - // inflate b into c - // zlib struct - z_stream infstream; - infstream.zalloc = Z_NULL; - infstream.zfree = Z_NULL; - infstream.opaque = Z_NULL; - // setup "b" as the input and "c" as the compressed output - // TOTHINK: Here we can add additional step from Right operand to z_stream variable access - infstream.avail_in = (uInt) ((char *) defstream.next_out - b); // size of input - infstream.next_in = (Bytef *) b; // input char array - infstream.avail_out = (uInt) sizeof(c); // size of output - infstream.next_out = (Bytef *) c; // output char array - - // uLong total_out; /* total number of bytes output so far */ - // the actual DE-compression work. - inflateInit(&infstream); - std::cout << infstream.total_out << std::endl; - inflate(&infstream, Z_NO_FLUSH); - std::cout << infstream.total_out << std::endl; - inflateEnd(&infstream); - - printf("Uncompressed size is: %lu\n", strlen(c)); - printf("Uncompressed string is: %s\n", c); - return 0; -} - -int UnsafeGzread() { - std::cout << "enter compressed file name!\n" << std::endl; - char fileName[100]; - std::cin >> fileName; - gzFile inFileZ = gzopen(fileName, "rb"); - if (inFileZ == nullptr) { - printf("Error: Failed to gzopen %s\n", fileName); - exit(0); - } - unsigned char unzipBuffer[8192]; +void UnsafeGzread(gzFile inFileZ) { + const int BUFFER_SIZE = 8192; + unsigned char unzipBuffer[BUFFER_SIZE]; unsigned int unzippedBytes; - std::vector unzippedData; while (true) { - unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); - if (unzippedBytes > 0) { - unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); - } else { + unzippedBytes = gzread(inFileZ, unzipBuffer, BUFFER_SIZE); + if (unzippedBytes <= 0) { break; } - } - for (auto &&i: unzippedData) - std::cout << i; - gzclose(inFileZ); - return 0; -} -int UnsafeGzfread() { - std::cout << "enter compressed file name!\n" << std::endl; - char fileName[100]; - std::cin >> fileName; - gzFile inFileZ = gzopen(fileName, "rb"); - if (inFileZ == nullptr) { - printf("Error: Failed to gzopen %s\n", fileName); - exit(0); + // process buffer } - while (true) { - char buffer[1000]; - if (!gzfread(buffer, 999, 1, inFileZ)) { - break; - } - } - gzclose(inFileZ); - return 0; -} - -int UnsafeGzgets() { - std::cout << "enter compressed file name!\n" << std::endl; - char fileName[100]; - std::cin >> fileName; - gzFile inFileZ = gzopen(fileName, "rb"); - if (inFileZ == nullptr) { - printf("Error: Failed to gzopen %s\n", fileName); - exit(0); - } - char *buffer = new char[4000000000]; - char *result = gzgets(inFileZ, buffer, 1000000000); - while (true) { - result = gzgets(inFileZ, buffer, 1000000000); - if (result == nullptr) { - break; - } - } - return 0; } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp index 7ad34658367..f28ed41026d 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/example_good.cpp @@ -1,78 +1,23 @@ -#include -#include #include "zlib.h" -#include -#include -int SafeGzread() { - std::cout << "enter compressed file name!\n" << std::endl; - char fileName[100]; - std::cin >> fileName; - gzFile inFileZ = gzopen(fileName, "rb"); - if (inFileZ == nullptr) { - printf("Error: Failed to gzopen %s\n", fileName); - exit(0); - } - unsigned char unzipBuffer[8192]; - unsigned int unzippedBytes; - uint totalRead = 0; - std::vector unzippedData; - while (true) { - unzippedBytes = gzread(inFileZ, unzipBuffer, 8192); - totalRead += unzippedBytes; - if (unzippedBytes > 0) { - unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); - if (totalRead > 1024 * 1024 * 4) { - std::cout << "Bombs!" << totalRead; - exit(1); - } else { - std::cout << "not Bomb yet!!" << totalRead << std::endl; - } - } else { - break; - } - } - - for (auto &&i: unzippedData) - std::cout << i; - gzclose(inFileZ); - - return 0; -} - -int SafeGzread2() { - std::cout << "enter compressed file name!\n" << std::endl; - char fileName[100]; - std::cin >> fileName; - gzFile inFileZ = gzopen(fileName, "rb"); - if (inFileZ == nullptr) { - printf("Error: Failed to gzopen %s\n", fileName); - exit(0); - } +void SafeGzread(gzFile inFileZ) { + const int MAX_READ = 1024 * 1024 * 4; const int BUFFER_SIZE = 8192; unsigned char unzipBuffer[BUFFER_SIZE]; unsigned int unzippedBytes; - uint totalRead = 0; - std::vector unzippedData; + unsigned int totalRead = 0; while (true) { unzippedBytes = gzread(inFileZ, unzipBuffer, BUFFER_SIZE); - totalRead += BUFFER_SIZE; - if (unzippedBytes > 0) { - unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes); - if (totalRead > 1024 * 1024 * 4) { - std::cout << "Bombs!" << totalRead; - exit(1); - } else { - std::cout << "not Bomb yet!!" << totalRead << std::endl; - } - } else { + totalRead += unzippedBytes; + if (unzippedBytes <= 0) { break; } + + if (totalRead > MAX_READ) { + // Possible decompression bomb, stop processing. + break; + } else { + // process buffer + } } - - for (auto &&i: unzippedData) - std::cout << i; - gzclose(inFileZ); - - return 0; } From 238895e677b8cb72e41329860410c83599ae879c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 14:10:24 +0200 Subject: [PATCH 312/334] C++: Fix formatting --- cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll index aa1d835b70d..b14e02e1e82 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/LibArchive.qll @@ -21,7 +21,7 @@ class Archive_read_data_block extends DecompressionFunction { * The `archive_read_open_filename` function as a flow step. */ class ReadOpenFunctionStep extends DecompressionFlowStep { - ReadOpenFunctionStep() { this = "ReadOpenFunction"} + ReadOpenFunctionStep() { this = "ReadOpenFunction" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(FunctionCall fc | fc.getTarget().hasGlobalName("archive_read_open_filename") | From 9b905d5e84adcffff125a3e6989dbe0d8075e40d Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 14:13:43 +0200 Subject: [PATCH 313/334] C++: Set precision to low There are no barriers, so the query as is will flag up any use of the identified functions. --- .../src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql index 0bee2775552..bfa11e65b06 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql @@ -3,7 +3,7 @@ * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous * @kind path-problem * @problem.severity error - * @precision high + * @precision low * @id cpp/data-decompression-bomb * @tags security * experimental From 351c50afc194c1d9b8ec4529e2a787ac77264df0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 4 Sep 2024 14:00:54 +0100 Subject: [PATCH 314/334] Fix QLDoc for ResultVariableDecl --- go/ql/lib/semmle/go/Decls.qll | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index 8c59c3bf8dd..b6e611cb2d9 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -649,17 +649,23 @@ class ReceiverDecl extends FieldBase, Documentable, ExprParent { * Examples: * * ```go + * int + * string * error * r io.Reader + * output string + * err error * x, y int * ``` * * as in the following code: * * ```go - * func f(error) { return nil } - * func g(r io.Reader) { return nil } - * func h(x, y int) { return } + * func f1() int { return 0 } + * func f2(input string) (string, error) { return "", nil } + * func f3(a int) (r io.Reader) { return nil } + * func f4(input string) (output string, err error) { return} + * func f5(e error) (x, y int) { return } * ``` */ class ResultVariableDecl extends ParameterOrResultDecl { From fd9a5ee453b41ba164842d744b069a54da1e65a4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:45:33 +0200 Subject: [PATCH 315/334] Update cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql index 293d18945b8..bb9ca91c04d 100644 --- a/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql +++ b/cpp/downgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/coroutine.ql @@ -1,4 +1,4 @@ - class Function extends @function { +class Function extends @function { string toString() { none() } } From 627c533e9855fb86be437f928f907d34f8255c73 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Wed, 4 Sep 2024 19:27:00 +0200 Subject: [PATCH 316/334] Fix typo. --- .github/workflows/csharp-qltest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index ca57d0291c0..35bbcf0896a 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -36,7 +36,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - name: Setup dotnetg + - name: Setup dotnet uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.101 From 3aa68b34bb7a6f8338872cd2d1b0a257d323ada1 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 4 Sep 2024 22:25:44 +0200 Subject: [PATCH 317/334] C++: Fix zstd and clean up test --- .../Security/CWE/CWE-409/ZSTD.qll | 20 +++++- .../DecompressionBombs.expected | 67 +++++++++++++++++++ .../CWE-409/DecompressionBombs/zstdTest.cpp | 66 +++--------------- 3 files changed, 96 insertions(+), 57 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll index e39ad4ee8a0..8b7dd8cfc8f 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZSTD.qll @@ -63,8 +63,26 @@ class FreadOrDieFunctionStep extends DecompressionFlowStep { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(FunctionCall fc | fc.getTarget().hasGlobalName("fread_orDie") | - node1.asIndirectExpr() = fc.getArgument(2) and + node1.asExpr() = fc.getArgument(2) and node2.asIndirectExpr() = fc.getArgument(0) ) } } + +/** + * The `src` member of a `ZSTD_inBuffer` variable is used in a flow steps. + */ +class SrcMember extends DecompressionFlowStep { + SrcMember() { this = "SrcMember" } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(VariableAccess inBufferAccess, Field srcField, ClassAggregateLiteral c | + inBufferAccess.getType().hasName("ZSTD_inBuffer") and + srcField.hasName("src") + | + node2.asExpr() = inBufferAccess and + inBufferAccess.getTarget().getInitializer().getExpr() = c and + node1.asIndirectExpr() = c.getFieldExpr(srcField, _) + ) + } +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index d7be5cf4068..0b85890c415 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -16,19 +16,30 @@ edges | main.cpp:7:33:7:36 | **argv | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:7:33:7:36 | **argv | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | main.cpp:12:21:12:24 | **argv | provenance | | | main.cpp:8:23:8:26 | **argv | brotliTest.cpp:15:41:15:44 | **argv | provenance | | | main.cpp:8:23:8:26 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:9:27:9:30 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:8:23:8:26 | brotli_test output argument | main.cpp:12:21:12:24 | **argv | provenance | | | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | provenance | | | main.cpp:9:27:9:30 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:10:24:10:27 | **argv | provenance | | | main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:9:27:9:30 | libarchive_test output argument | main.cpp:12:21:12:24 | **argv | provenance | | | main.cpp:10:24:10:27 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | provenance | | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | provenance | | | main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:11:21:11:24 | **argv | provenance | | +| main.cpp:10:24:10:27 | minizip_test output argument | main.cpp:12:21:12:24 | **argv | provenance | | +| main.cpp:11:21:11:24 | **argv | main.cpp:11:21:11:24 | zlib_test output argument | provenance | | +| main.cpp:11:21:11:24 | **argv | main.cpp:11:21:11:24 | zlib_test output argument | provenance | | | main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| main.cpp:11:21:11:24 | zlib_test output argument | main.cpp:12:21:12:24 | **argv | provenance | | +| main.cpp:11:21:11:24 | zlib_test output argument | main.cpp:12:21:12:24 | *argv | provenance | | +| main.cpp:12:21:12:24 | **argv | zstdTest.cpp:26:39:26:42 | **argv | provenance | | +| main.cpp:12:21:12:24 | *argv | zstdTest.cpp:26:39:26:42 | **argv | provenance | | +| main.cpp:12:21:12:24 | *argv | zstdTest.cpp:26:39:26:42 | *argv | provenance | | | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | provenance | | | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:17:52:17:67 | *access to array | provenance | | | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:24:41:24:47 | *access to array | provenance | | @@ -57,7 +68,9 @@ edges | zlibTest.cpp:58:22:58:27 | call to gzopen | zlibTest.cpp:62:25:62:31 | inFileZ | provenance | | | zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | | zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:58:22:58:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:71:26:71:30 | *input | provenance | | | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:77:45:77:59 | *input | provenance | | +| zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv | provenance | | | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:81:19:81:25 | *access to array | provenance | | | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:82:18:82:24 | *access to array | provenance | | | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | @@ -65,23 +78,52 @@ edges | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | provenance | | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:82:18:82:24 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | provenance | | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | provenance | | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | provenance | | +| zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:85:19:85:25 | InflateString output argument | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zstdTest.cpp:26:39:26:42 | **argv | zstdTest.cpp:27:35:27:41 | *access to array | provenance | | +| zstdTest.cpp:26:39:26:42 | *argv | zstdTest.cpp:27:35:27:41 | *access to array | provenance | | +| zstdTest.cpp:27:23:27:33 | call to fopen_orDie | zstdTest.cpp:27:23:27:33 | call to fopen_orDie | provenance | | +| zstdTest.cpp:27:23:27:33 | call to fopen_orDie | zstdTest.cpp:35:52:35:54 | fin | provenance | | +| zstdTest.cpp:27:35:27:41 | *access to array | zstdTest.cpp:27:23:27:33 | call to fopen_orDie | provenance | Config | +| zstdTest.cpp:35:32:35:37 | **buffIn | zstdTest.cpp:36:32:36:37 | **buffIn | provenance | | +| zstdTest.cpp:35:32:35:37 | *buffIn | zstdTest.cpp:36:32:36:37 | *buffIn | provenance | | +| zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:32:35:37 | **buffIn | provenance | Config | +| zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:32:35:37 | *buffIn | provenance | Config | +| zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:52:35:54 | fin | provenance | | +| zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:35:32:35:37 | **buffIn | provenance | | +| zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | +| zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | +| zstdTest.cpp:36:32:36:37 | *buffIn | zstdTest.cpp:35:32:35:37 | *buffIn | provenance | | +| zstdTest.cpp:36:32:36:37 | *buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | +| zstdTest.cpp:36:32:36:37 | *buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | +| zstdTest.cpp:39:69:39:74 | & ... | zstdTest.cpp:39:69:39:74 | & ... | provenance | | +| zstdTest.cpp:39:69:39:74 | & ... | zstdTest.cpp:39:69:39:74 | & ... | provenance | | nodes | brotliTest.cpp:15:41:15:44 | **argv | semmle.label | **argv | | brotliTest.cpp:15:41:15:44 | **argv | semmle.label | **argv | @@ -105,6 +147,10 @@ nodes | main.cpp:10:24:10:27 | **argv | semmle.label | **argv | | main.cpp:10:24:10:27 | minizip_test output argument | semmle.label | minizip_test output argument | | main.cpp:11:21:11:24 | **argv | semmle.label | **argv | +| main.cpp:11:21:11:24 | zlib_test output argument | semmle.label | zlib_test output argument | +| main.cpp:11:21:11:24 | zlib_test output argument | semmle.label | zlib_test output argument | +| main.cpp:12:21:12:24 | **argv | semmle.label | **argv | +| main.cpp:12:21:12:24 | *argv | semmle.label | *argv | | minizipTest.cpp:12:42:12:45 | **argv | semmle.label | **argv | | minizipTest.cpp:12:42:12:45 | **argv | semmle.label | **argv | | minizipTest.cpp:17:52:17:67 | *access to array | semmle.label | *access to array | @@ -138,8 +184,11 @@ nodes | zlibTest.cpp:58:29:58:36 | *fileName | semmle.label | *fileName | | zlibTest.cpp:62:25:62:31 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:71:26:71:30 | *input | semmle.label | *input | +| zlibTest.cpp:71:26:71:30 | *input | semmle.label | *input | | zlibTest.cpp:77:45:77:59 | *input | semmle.label | *input | | zlibTest.cpp:80:33:80:36 | **argv | semmle.label | **argv | +| zlibTest.cpp:80:33:80:36 | **argv | semmle.label | **argv | +| zlibTest.cpp:80:33:80:36 | **argv [Return] | semmle.label | **argv [Return] | | zlibTest.cpp:81:19:81:25 | *access to array | semmle.label | *access to array | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | | zlibTest.cpp:82:18:82:24 | *access to array | semmle.label | *access to array | @@ -149,15 +198,32 @@ nodes | zlibTest.cpp:84:18:84:24 | *access to array | semmle.label | *access to array | | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | | zlibTest.cpp:85:19:85:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | semmle.label | InflateString output argument | +| zstdTest.cpp:26:39:26:42 | **argv | semmle.label | **argv | +| zstdTest.cpp:26:39:26:42 | *argv | semmle.label | *argv | +| zstdTest.cpp:27:23:27:33 | call to fopen_orDie | semmle.label | call to fopen_orDie | +| zstdTest.cpp:27:23:27:33 | call to fopen_orDie | semmle.label | call to fopen_orDie | +| zstdTest.cpp:27:35:27:41 | *access to array | semmle.label | *access to array | +| zstdTest.cpp:35:32:35:37 | **buffIn | semmle.label | **buffIn | +| zstdTest.cpp:35:32:35:37 | *buffIn | semmle.label | *buffIn | +| zstdTest.cpp:35:52:35:54 | fin | semmle.label | fin | +| zstdTest.cpp:36:32:36:37 | **buffIn | semmle.label | **buffIn | +| zstdTest.cpp:36:32:36:37 | *buffIn | semmle.label | *buffIn | +| zstdTest.cpp:39:69:39:74 | & ... | semmle.label | & ... | +| zstdTest.cpp:39:69:39:74 | & ... | semmle.label | & ... | subpaths | libarchiveTests.cpp:38:27:38:27 | *a | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:16:31:16:32 | *ar | libarchiveTests.cpp:38:27:38:27 | read_data output argument | | main.cpp:8:23:8:26 | **argv | brotliTest.cpp:15:41:15:44 | **argv | brotliTest.cpp:15:41:15:44 | **argv | main.cpp:8:23:8:26 | brotli_test output argument | | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv | main.cpp:11:21:11:24 | zlib_test output argument | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Return] | main.cpp:11:21:11:24 | zlib_test output argument | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Return] | main.cpp:11:21:11:24 | zlib_test output argument | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | +| zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:85:19:85:25 | InflateString output argument | #select | brotliTest.cpp:18:35:18:53 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | The decompression output of $@ is not limited | brotliTest.cpp:18:5:18:27 | call to BrotliDecoderDecompress | BrotliDecoderDecompress | | brotliTest.cpp:24:51:24:58 | **& ... | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:24:51:24:58 | **& ... | The decompression output of $@ is not limited | brotliTest.cpp:24:5:24:33 | call to BrotliDecoderDecompressStream | BrotliDecoderDecompressStream | @@ -171,3 +237,4 @@ subpaths | zlibTest.cpp:51:38:51:44 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:51:38:51:44 | inFileZ | The decompression output of $@ is not limited | zlibTest.cpp:51:14:51:20 | call to gzfread | gzfread | | zlibTest.cpp:62:25:62:31 | inFileZ | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:62:25:62:31 | inFileZ | The decompression output of $@ is not limited | zlibTest.cpp:62:18:62:23 | call to gzgets | gzgets | | zlibTest.cpp:77:45:77:59 | *input | main.cpp:7:33:7:36 | **argv | zlibTest.cpp:77:45:77:59 | *input | The decompression output of $@ is not limited | zlibTest.cpp:77:5:77:14 | call to uncompress | uncompress | +| zstdTest.cpp:39:69:39:74 | & ... | main.cpp:7:33:7:36 | **argv | zstdTest.cpp:39:69:39:74 | & ... | The decompression output of $@ is not limited | zstdTest.cpp:39:32:39:52 | call to ZSTD_decompressStream | ZSTD_decompressStream | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp index e19f2d4c675..058a4204ce7 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp @@ -1,17 +1,11 @@ -typedef struct _IO_FILE FILE; +typedef long unsigned int size_t; +struct FILE; FILE *fopen_orDie(const char *filename, const char *instruction); - -typedef long unsigned int size_t; - -const size_t ZSTD_DStreamInSize(); - +size_t fread_orDie(void *const pVoid, const size_t read, FILE *const pFile); void *const malloc_orDie(const size_t size); -const size_t ZSTD_DStreamOutSize(); - struct ZSTD_DCtx; - typedef struct ZSTD_inBuffer_s { const void *src; size_t size; @@ -23,67 +17,27 @@ typedef struct ZSTD_outBuffer_s { size_t pos; } ZSTD_outBuffer; +const size_t ZSTD_DStreamInSize(); +const size_t ZSTD_DStreamOutSize(); ZSTD_DCtx *const ZSTD_createDCtx(); - -void CHECK(bool b, const char *string); - -size_t fread_orDie(void *const pVoid, const size_t read, FILE *const pFile); - +const size_t ZSTD_decompressStream(ZSTD_DCtx *const pCtx, ZSTD_outBuffer *pS, ZSTD_inBuffer *pS1); void CHECK_ZSTD(const size_t ret); -void fwrite_orDie(void *const pVoid, size_t pos, FILE *const pFile); - -void exit(int i); - -void fclose_orDie(FILE *const pFile); - -void free(void *const pVoid); - -const size_t ZSTD_decompressStream(ZSTD_DCtx *const pCtx, ZSTD_outBuffer *pS, ZSTD_inBuffer *pS1); - -void ZSTD_freeDCtx(ZSTD_DCtx *const pCtx); - -static void decompressFile_orDie(const char *fname) { - FILE *const fin = fopen_orDie(fname, "rb"); +void zstd_test(int argc, const char **argv) { + FILE *const fin = fopen_orDie(argv[1], "rb"); size_t const buffInSize = ZSTD_DStreamInSize(); void *const buffIn = malloc_orDie(buffInSize); - FILE *stdout; - FILE *const fout = stdout; - size_t const buffOutSize = ZSTD_DStreamOutSize(); /* Guarantee to successfully flush at least one complete compressed block in all circumstances. */ + size_t const buffOutSize = ZSTD_DStreamOutSize(); void *const buffOut = malloc_orDie(buffOutSize); ZSTD_DCtx *const dctx = ZSTD_createDCtx(); - CHECK(dctx != nullptr, "ZSTD_createDCtx() failed!"); - size_t const toRead = buffInSize; size_t read; - size_t lastRet = 0; - int isEmpty = 1; - while ((read = fread_orDie(buffIn, toRead, fin))) { - isEmpty = 0; + while ((read = fread_orDie(buffIn, buffInSize, fin))) { ZSTD_inBuffer input = {buffIn, read, 0}; while (input.pos < input.size) { ZSTD_outBuffer output = {buffOut, buffOutSize, 0}; size_t const ret = ZSTD_decompressStream(dctx, &output, &input); CHECK_ZSTD(ret); - fwrite_orDie(buffOut, output.pos, fout); - lastRet = ret; } } - if (isEmpty) { - exit(1); - } - if (lastRet != 0) { - exit(1); - } - ZSTD_freeDCtx(dctx); - fclose_orDie(fin); - fclose_orDie(fout); - free(buffIn); - free(buffOut); -} - - -void zstd_test(int argc, const char **argv) { - const char *const inFilename = argv[1]; - decompressFile_orDie(inFilename); } From 913a9263d21f9a47a138f301e32837aa5815761d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Sep 2024 08:16:28 +0200 Subject: [PATCH 318/334] Bazel: stub internal repo parts needed for building rust binaries This is another shot at https://github.com/github/codeql/pull/17382, using a different and more lightweight approach. This allows building the ruby and python (and in the future also rust) packs from within the codeql repository. This will: * skip defining the glibc symbols checking, which only makes sense when building the release from the internal repository * stub out our `universal_binary` rule, which we only need when building the release. --- misc/bazel/rust.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/bazel/rust.bzl b/misc/bazel/rust.bzl index b858f6b0a80..97afee4ba1c 100644 --- a/misc/bazel/rust.bzl +++ b/misc/bazel/rust.bzl @@ -8,7 +8,7 @@ def codeql_rust_binary( visibility = None, symbols_test = True, **kwargs): - rust_label_name = name + "_single_arch" + rust_label_name = "single_arch/" + name universal_binary( name = name, dep = ":" + rust_label_name, From 7c80b33a63682c16509b71581310cc2e9d118971 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Sep 2024 08:26:41 +0200 Subject: [PATCH 319/334] Bazel: add forgotten files --- misc/bazel/semmle_code_stub/buildutils-internal/BUILD.bazel | 0 .../buildutils-internal/glibc_symbols_check.bzl | 4 ++++ misc/bazel/semmle_code_stub/buildutils-internal/lipo.bzl | 5 +++++ 3 files changed, 9 insertions(+) create mode 100644 misc/bazel/semmle_code_stub/buildutils-internal/BUILD.bazel create mode 100644 misc/bazel/semmle_code_stub/buildutils-internal/glibc_symbols_check.bzl create mode 100644 misc/bazel/semmle_code_stub/buildutils-internal/lipo.bzl diff --git a/misc/bazel/semmle_code_stub/buildutils-internal/BUILD.bazel b/misc/bazel/semmle_code_stub/buildutils-internal/BUILD.bazel new file mode 100644 index 00000000000..e69de29bb2d diff --git a/misc/bazel/semmle_code_stub/buildutils-internal/glibc_symbols_check.bzl b/misc/bazel/semmle_code_stub/buildutils-internal/glibc_symbols_check.bzl new file mode 100644 index 00000000000..a9091008ba8 --- /dev/null +++ b/misc/bazel/semmle_code_stub/buildutils-internal/glibc_symbols_check.bzl @@ -0,0 +1,4 @@ +# This check only makes sense when building from the internal repository + +def glibc_symbols_check(**kwargs): + pass diff --git a/misc/bazel/semmle_code_stub/buildutils-internal/lipo.bzl b/misc/bazel/semmle_code_stub/buildutils-internal/lipo.bzl new file mode 100644 index 00000000000..733e15703de --- /dev/null +++ b/misc/bazel/semmle_code_stub/buildutils-internal/lipo.bzl @@ -0,0 +1,5 @@ +# we only need to build universal binaries when building releases from the internal repo +# when building from the codeql repo, we can stub this rule with an alias + +def universal_binary(*, name, dep, **kwargs): + native.alias(name = name, actual = dep, **kwargs) From 5bafa8ace2fa7eb17f272a15371152ce5a80c405 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:27:11 +0100 Subject: [PATCH 320/334] Add comment about `x, y int` being a single ResultVariableDecl --- go/ql/lib/semmle/go/Decls.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index b6e611cb2d9..26e1d6aff57 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -667,6 +667,10 @@ class ReceiverDecl extends FieldBase, Documentable, ExprParent { * func f4(input string) (output string, err error) { return} * func f5(e error) (x, y int) { return } * ``` + * + * Note: `x, y int` is a single `ResultVariableDecl` even though it declares + * two different result variables. Use the member predicate `getTypeExpr()` to + * get `int`, `getNameExpr(0)` to get `x` and `getNameExpr(1)` to get `y`. */ class ResultVariableDecl extends ParameterOrResultDecl { ResultVariableDecl() { rawIndex < 0 } From f76a190ed172ed51ee852ccacda3556c2f82491c Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 5 Sep 2024 11:39:38 +0200 Subject: [PATCH 321/334] CI: Upgrade bazel rules. --- MODULE.bazel | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 6026958de63..bba060ec962 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -16,9 +16,9 @@ local_path_override( bazel_dep(name = "platforms", version = "0.0.10") bazel_dep(name = "rules_go", version = "0.50.0") -bazel_dep(name = "rules_pkg", version = "0.10.1") +bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1") -bazel_dep(name = "rules_python", version = "0.32.2") +bazel_dep(name = "rules_python", version = "0.35.0") bazel_dep(name = "bazel_skylib", version = "1.6.1") bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") @@ -27,7 +27,7 @@ bazel_dep(name = "rules_kotlin", version = "1.9.4-codeql.1") bazel_dep(name = "gazelle", version = "0.38.0") bazel_dep(name = "rules_dotnet", version = "0.15.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") -bazel_dep(name = "rules_rust", version = "0.49.1") +bazel_dep(name = "rules_rust", version = "0.49.3") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) From 9786934d9a2bd7372c9c932f18cbcadbc5f90d46 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:27:20 +0100 Subject: [PATCH 322/334] Remove errant space at end of line --- go/ql/lib/semmle/go/Decls.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index 26e1d6aff57..8e3df22cc80 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -667,7 +667,7 @@ class ReceiverDecl extends FieldBase, Documentable, ExprParent { * func f4(input string) (output string, err error) { return} * func f5(e error) (x, y int) { return } * ``` - * + * * Note: `x, y int` is a single `ResultVariableDecl` even though it declares * two different result variables. Use the member predicate `getTypeExpr()` to * get `int`, `getNameExpr(0)` to get `x` and `getNameExpr(1)` to get `y`. From 5b65f98e2c834e826e147770d46c345245895dd7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 3 Sep 2024 23:23:37 +0200 Subject: [PATCH 323/334] C++: Update expected test results after extractor changes The updated test results look more correct, as the documentation of `#include_next` [1] that it should start looking in the next directory in the search path. Before this update, the frontend was actually looking in the current directory first, which is incorrect. [1] https://gcc.gnu.org/onlinedocs/cpp/Wrapper-Headers.html --- .../header-variant-tests/multi-target-includes/includes.expected | 1 - .../test/library-tests/includes/include_next/includes.expected | 1 - 2 files changed, 2 deletions(-) diff --git a/cpp/ql/test/header-variant-tests/multi-target-includes/includes.expected b/cpp/ql/test/header-variant-tests/multi-target-includes/includes.expected index 209af4b8ec4..2bffb736d98 100644 --- a/cpp/ql/test/header-variant-tests/multi-target-includes/includes.expected +++ b/cpp/ql/test/header-variant-tests/multi-target-includes/includes.expected @@ -5,6 +5,5 @@ | main1.cpp:7:1:7:26 | #include "defines_issue.h" | Include | defines_issue.h | 1 | | main2.cpp:3:1:3:19 | #include "common.h" | Include | common.h | 1 | | main2.cpp:7:1:7:26 | #include "defines_issue.h" | Include | defines_issue.h | 1 | -| nameclash.h:3:1:3:27 | #include_next "nameclash.h" | IncludeNext | nameclash.h | 1 | | nameclash.h:3:1:3:27 | #include_next "nameclash.h" | IncludeNext | subdir1/nameclash.h | 1 | | nameclash.h:3:1:3:27 | #include_next "nameclash.h" | IncludeNext | subdir2/nameclash.h | 1 | diff --git a/cpp/ql/test/library-tests/includes/include_next/includes.expected b/cpp/ql/test/library-tests/includes/include_next/includes.expected index ce4e44acc75..759933be982 100644 --- a/cpp/ql/test/library-tests/includes/include_next/includes.expected +++ b/cpp/ql/test/library-tests/includes/include_next/includes.expected @@ -1,4 +1,3 @@ -| a/test.h:2:1:2:22 | #include_next | a/test.h:0:0:0:0 | a/test.h | | a/test.h:2:1:2:22 | #include_next | b/test.h:0:0:0:0 | b/test.h | | b/loop.h:2:1:2:22 | #include_next | a/test.h:0:0:0:0 | a/test.h | | b/test.h:4:1:4:17 | #include "loop.h" | b/loop.h:0:0:0:0 | b/loop.h | From faef6359dd66c910a3baa380848db8ad78a24dac Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:05:21 +0200 Subject: [PATCH 324/334] add '// BAD' comment for the zstd sink --- .../Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp index 058a4204ce7..42455185823 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/zstdTest.cpp @@ -36,7 +36,7 @@ void zstd_test(int argc, const char **argv) { ZSTD_inBuffer input = {buffIn, read, 0}; while (input.pos < input.size) { ZSTD_outBuffer output = {buffOut, buffOutSize, 0}; - size_t const ret = ZSTD_decompressStream(dctx, &output, &input); + size_t const ret = ZSTD_decompressStream(dctx, &output, &input); // BAD CHECK_ZSTD(ret); } } From 401bb24fde7ceddab74749755ee3b7c27e147d90 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:09:26 +0200 Subject: [PATCH 325/334] remove redundent `zStreamAccess` in flow steps --- .../experimental/Security/CWE/CWE-409/ZlibInflator.qll | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll index 6c3cb6062c5..834f587952a 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/ZlibInflator.qll @@ -25,15 +25,13 @@ class NextInMemberStep extends DecompressionFlowStep { NextInMemberStep() { this = "NextInMemberStep" } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(Variable nextInVar, VariableAccess zStreamAccess | + exists(Variable nextInVar | nextInVar.getDeclaringType().hasName("z_stream") and - nextInVar.hasName("next_in") and - zStreamAccess.getType().hasName("z_stream") + nextInVar.hasName("next_in") | - nextInVar.getAnAccess().getQualifier().(VariableAccess).getTarget() = - zStreamAccess.getTarget() and node1.asIndirectExpr() = nextInVar.getAnAssignedValue() and - node2.asExpr() = zStreamAccess + node2.asExpr() = + nextInVar.getAnAccess().getQualifier().(VariableAccess).getTarget().getAnAccess() ) } } From e891c5a882061da6aeae9bc3fbd10c529859db75 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 5 Sep 2024 17:48:11 +0200 Subject: [PATCH 326/334] C++: Fix expected test results --- .../CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index 0b85890c415..b372493c5ba 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -115,7 +115,6 @@ edges | zstdTest.cpp:35:32:35:37 | *buffIn | zstdTest.cpp:36:32:36:37 | *buffIn | provenance | | | zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:32:35:37 | **buffIn | provenance | Config | | zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:32:35:37 | *buffIn | provenance | Config | -| zstdTest.cpp:35:52:35:54 | fin | zstdTest.cpp:35:52:35:54 | fin | provenance | | | zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:35:32:35:37 | **buffIn | provenance | | | zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | | zstdTest.cpp:36:32:36:37 | **buffIn | zstdTest.cpp:39:69:39:74 | & ... | provenance | Config | From e1048cf8ea6f7d3afa2169adfb8a03fc7c1111f0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 Sep 2024 19:22:31 +0200 Subject: [PATCH 327/334] Java/C#: Address review comments. --- .../modelgenerator/internal/CaptureModels.qll | 24 +++++++++---------- .../modelgenerator/internal/CaptureModels.qll | 24 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index d476376d3cc..0f24bab005e 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -279,24 +279,24 @@ private module PropagateContentFlowConfig implements ContentDataFlow::ConfigSig private module PropagateContentFlow = ContentDataFlow::Global; -private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { - not exists(ap.getHead()) and result = "" - or +private string getContent(PropagateContentFlow::AccessPath ap, int i) { exists(ContentSet head, PropagateContentFlow::AccessPath tail | head = ap.getHead() and - tail = ap.getTail() and - result = "." + printContent(head) + printStoreAccessPath(tail) + tail = ap.getTail() + | + i = 0 and + result = "." + printContent(head) + or + i > 0 and result = getContent(tail, i - 1) ) } +private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { + result = concat(int i | | getContent(ap, i), "" order by i) +} + private string printReadAccessPath(PropagateContentFlow::AccessPath ap) { - not exists(ap.getHead()) and result = "" - or - exists(ContentSet head, PropagateContentFlow::AccessPath tail | - head = ap.getHead() and - tail = ap.getTail() and - result = printReadAccessPath(tail) + "." + printContent(head) - ) + result = concat(int i | | getContent(ap, i), "" order by i desc) } string captureContentFlow(DataFlowSummaryTargetApi api) { diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index d476376d3cc..0f24bab005e 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -279,24 +279,24 @@ private module PropagateContentFlowConfig implements ContentDataFlow::ConfigSig private module PropagateContentFlow = ContentDataFlow::Global; -private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { - not exists(ap.getHead()) and result = "" - or +private string getContent(PropagateContentFlow::AccessPath ap, int i) { exists(ContentSet head, PropagateContentFlow::AccessPath tail | head = ap.getHead() and - tail = ap.getTail() and - result = "." + printContent(head) + printStoreAccessPath(tail) + tail = ap.getTail() + | + i = 0 and + result = "." + printContent(head) + or + i > 0 and result = getContent(tail, i - 1) ) } +private string printStoreAccessPath(PropagateContentFlow::AccessPath ap) { + result = concat(int i | | getContent(ap, i), "" order by i) +} + private string printReadAccessPath(PropagateContentFlow::AccessPath ap) { - not exists(ap.getHead()) and result = "" - or - exists(ContentSet head, PropagateContentFlow::AccessPath tail | - head = ap.getHead() and - tail = ap.getTail() and - result = printReadAccessPath(tail) + "." + printContent(head) - ) + result = concat(int i | | getContent(ap, i), "" order by i desc) } string captureContentFlow(DataFlowSummaryTargetApi api) { From 25d7f17efc6bc6be82208fa161199a2618134d03 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 5 Sep 2024 19:32:53 +0100 Subject: [PATCH 328/334] C++: Add testcase with IR inconsistencies. --- .../library-tests/ir/ir/PrintAST.expected | 27 +++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 47 +++++++++++++++++++ .../ir/ir/aliased_ssa_consistency.expected | 19 ++++++++ .../aliased_ssa_consistency_unsound.expected | 19 ++++++++ cpp/ql/test/library-tests/ir/ir/ir.c | 12 +++++ .../ir/ir/raw_consistency.expected | 18 +++++++ .../test/library-tests/ir/ir/raw_ir.expected | 46 ++++++++++++++++++ .../ir/ir/unaliased_ssa_consistency.expected | 17 +++++++ ...unaliased_ssa_consistency_unsound.expected | 17 +++++++ 9 files changed, 222 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index f17680ebe2d..dceab82ba4f 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4474,6 +4474,33 @@ ir.c: # 29| Type = [IntType] int # 29| Value = [Literal] 0 # 29| ValueCategory = prvalue +# 32| [TopLevelFunction] void unexplained_loop_regression() +# 32| : +# 33| getEntryPoint(): [BlockStmt] { ... } +# 34| getStmt(0): [MicrosoftTryExceptStmt] __try { ... } __except( ... ) { ... } +# 35| getStmt(): [BlockStmt] { ... } +# 36| getStmt(0): [ExprStmt] ExprStmt +# 36| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 36| Type = [VoidType] void +# 36| ValueCategory = prvalue +# 36| getArgument(0): [Literal] 0 +# 36| Type = [IntType] int +# 36| Value = [Literal] 0 +# 36| ValueCategory = prvalue +# 38| getCondition(): [Literal] 1 +# 38| Type = [IntType] int +# 38| Value = [Literal] 1 +# 38| ValueCategory = prvalue +# 39| getExcept(): [BlockStmt] { ... } +# 40| getStmt(0): [ExprStmt] ExprStmt +# 40| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 40| Type = [VoidType] void +# 40| ValueCategory = prvalue +# 40| getArgument(0): [Literal] 1 +# 40| Type = [IntType] int +# 40| Value = [Literal] 1 +# 40| ValueCategory = prvalue +# 42| getStmt(1): [ReturnStmt] return ... ir.cpp: # 1| [TopLevelFunction] void Constants() # 1| : 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 dedc58394f9..ad50412abc8 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3156,6 +3156,53 @@ ir.c: # 21| Block 5 # 21| v21_11(void) = Unreached : +# 32| void unexplained_loop_regression() +# 32| Block 0 +# 32| v32_1(void) = EnterFunction : +# 32| m32_2(unknown) = AliasedDefinition : +# 32| m32_3(unknown) = InitializeNonLocal : +# 32| m32_4(unknown) = Chi : total:m32_2, partial:m32_3 +# 36| r36_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 36| r36_2(int) = Constant[0] : +# 36| v36_3(void) = Call[ExRaiseAccessViolation] : func:r36_1, 0:r36_2 +# 36| m36_4(unknown) = ^CallSideEffect : ~m32_4 +# 36| m36_5(unknown) = Chi : total:m32_4, partial:m36_4 +#-----| Exception -> Block 3 + +# 39| Block 1 +# 39| r39_1(int) = Constant[0] : +# 39| r39_2(bool) = CompareEQ : r38_2, r39_1 +# 39| v39_3(void) = ConditionalBranch : r39_2 +#-----| False (back edge) -> Block 2 +#-----| True -> Block 5 + +# 39| Block 2 +# 39| r39_4(int) = Constant[1] : +# 39| r39_5(bool) = CompareEQ : r38_2, r39_4 +# 39| v39_6(void) = ConditionalBranch : r39_5 +#-----| False -> Block 5 +#-----| True (back edge) -> Block 4 + +# 38| Block 3 +# 38| m38_1(unknown) = Phi : from 0:~m36_5, from 4:~m40_5 +# 38| r38_2(int) = Constant[1] : +# 39| r39_7(int) = Constant[-1] : +# 39| r39_8(bool) = CompareEQ : r38_2, r39_7 +# 39| v39_9(void) = ConditionalBranch : r39_8 +#-----| False (back edge) -> Block 1 +#-----| True -> Block 5 + +# 40| Block 4 +# 40| r40_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 40| r40_2(int) = Constant[1] : +# 40| v40_3(void) = Call[ExRaiseAccessViolation] : func:r40_1, 0:r40_2 +# 40| m40_4(unknown) = ^CallSideEffect : ~m38_1 +# 40| m40_5(unknown) = Chi : total:m38_1, partial:m40_4 +#-----| Exception (back edge) -> Block 3 + +# 32| Block 5 +# 32| v32_5(void) = Unreached : + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index 199d61f015d..d04272f4319 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -8,6 +8,22 @@ sideEffectWithoutPrimary instructionWithoutSuccessor ambiguousSuccessors unexplainedLoop +| ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:38:13:38:37 | Phi: 1 | Instruction 'Phi: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Call: call to ExRaiseAccessViolation | Instruction 'Call: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Instruction 'FunctionAddress: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:28:40:28 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions @@ -18,6 +34,9 @@ containsLoopOfForwardEdges missingIRType multipleIRTypes lostReachability +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Block 'FunctionAddress: call to ExRaiseAccessViolation' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | backEdgeCountMismatch useNotDominatedByDefinition switchInstructionWithoutDefaultEdge diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index 199d61f015d..d04272f4319 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -8,6 +8,22 @@ sideEffectWithoutPrimary instructionWithoutSuccessor ambiguousSuccessors unexplainedLoop +| ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:38:13:38:37 | Phi: 1 | Instruction 'Phi: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Call: call to ExRaiseAccessViolation | Instruction 'Call: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Instruction 'FunctionAddress: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:28:40:28 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions @@ -18,6 +34,9 @@ containsLoopOfForwardEdges missingIRType multipleIRTypes lostReachability +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Block 'FunctionAddress: call to ExRaiseAccessViolation' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | backEdgeCountMismatch useNotDominatedByDefinition switchInstructionWithoutDefaultEdge diff --git a/cpp/ql/test/library-tests/ir/ir/ir.c b/cpp/ql/test/library-tests/ir/ir/ir.c index c5c2c79bb51..0b12a36dc16 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.c +++ b/cpp/ql/test/library-tests/ir/ir/ir.c @@ -29,4 +29,16 @@ int TryExceptTest(int x) { return 0; } +void unexplained_loop_regression() +{ + __try + { + ExRaiseAccessViolation(0); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + ExRaiseAccessViolation(1); + } +} + // semmle-extractor-options: --microsoft diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 26760a15730..1181ba9b213 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -8,6 +8,20 @@ sideEffectWithoutPrimary instructionWithoutSuccessor ambiguousSuccessors unexplainedLoop +| ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Call: call to ExRaiseAccessViolation | Instruction 'Call: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Instruction 'FunctionAddress: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:28:40:28 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions @@ -18,6 +32,10 @@ containsLoopOfForwardEdges missingIRType multipleIRTypes lostReachability +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Unwind: { ... } | Block 'Unwind: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Block 'FunctionAddress: call to ExRaiseAccessViolation' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | backEdgeCountMismatch useNotDominatedByDefinition | ir.cpp:1535:8:1535:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1535:8:1535:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | 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 5e095f3b108..b5f1c4c4e63 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2926,6 +2926,52 @@ ir.c: # 27| mu27_3(int) = Store[#return] : &:r27_1, r27_2 #-----| Goto -> Block 1 +# 32| void unexplained_loop_regression() +# 32| Block 0 +# 32| v32_1(void) = EnterFunction : +# 32| mu32_2(unknown) = AliasedDefinition : +# 32| mu32_3(unknown) = InitializeNonLocal : +# 36| r36_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 36| r36_2(int) = Constant[0] : +# 36| v36_3(void) = Call[ExRaiseAccessViolation] : func:r36_1, 0:r36_2 +# 36| mu36_4(unknown) = ^CallSideEffect : ~m? +#-----| Exception -> Block 4 + +# 39| Block 1 +# 39| r39_1(int) = Constant[0] : +# 39| r39_2(bool) = CompareEQ : r38_1, r39_1 +# 39| v39_3(void) = ConditionalBranch : r39_2 +#-----| False (back edge) -> Block 2 +#-----| True (back edge) -> Block 3 + +# 39| Block 2 +# 39| r39_4(int) = Constant[1] : +# 39| r39_5(bool) = CompareEQ : r38_1, r39_4 +# 39| v39_6(void) = ConditionalBranch : r39_5 +#-----| True (back edge) -> Block 5 + +# 39| Block 3 +# 39| v39_7(void) = Unwind : +# 42| v42_1(void) = NoOp : +# 32| v32_4(void) = ReturnVoid : +# 32| v32_5(void) = AliasedUse : ~m? +# 32| v32_6(void) = ExitFunction : + +# 38| Block 4 +# 38| r38_1(int) = Constant[1] : +# 39| r39_8(int) = Constant[-1] : +# 39| r39_9(bool) = CompareEQ : r38_1, r39_8 +# 39| v39_10(void) = ConditionalBranch : r39_9 +#-----| False (back edge) -> Block 1 +#-----| True (back edge) -> Block 3 + +# 40| Block 5 +# 40| r40_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 40| r40_2(int) = Constant[1] : +# 40| v40_3(void) = Call[ExRaiseAccessViolation] : func:r40_1, 0:r40_2 +# 40| mu40_4(unknown) = ^CallSideEffect : ~m? +#-----| Exception (back edge) -> Block 4 + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 199d61f015d..9951220d616 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -8,6 +8,20 @@ sideEffectWithoutPrimary instructionWithoutSuccessor ambiguousSuccessors unexplainedLoop +| ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Call: call to ExRaiseAccessViolation | Instruction 'Call: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Instruction 'FunctionAddress: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:28:40:28 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions @@ -18,6 +32,9 @@ containsLoopOfForwardEdges missingIRType multipleIRTypes lostReachability +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Block 'FunctionAddress: call to ExRaiseAccessViolation' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | backEdgeCountMismatch useNotDominatedByDefinition switchInstructionWithoutDefaultEdge diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 199d61f015d..9951220d616 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -8,6 +8,20 @@ sideEffectWithoutPrimary instructionWithoutSuccessor ambiguousSuccessors unexplainedLoop +| ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | CompareEQ: { ... } | Instruction 'CompareEQ: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | ConditionalBranch: { ... } | Instruction 'ConditionalBranch: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Instruction 'Constant: { ... }' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | Call: call to ExRaiseAccessViolation | Instruction 'Call: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Instruction 'FunctionAddress: call to ExRaiseAccessViolation' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:28:40:28 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions @@ -18,6 +32,9 @@ containsLoopOfForwardEdges missingIRType multipleIRTypes lostReachability +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:39:3:41:3 | Constant: { ... } | Block 'Constant: { ... }' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | +| ir.c:40:5:40:26 | FunctionAddress: call to ExRaiseAccessViolation | Block 'FunctionAddress: call to ExRaiseAccessViolation' is not reachable by traversing only forward edges in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | backEdgeCountMismatch useNotDominatedByDefinition switchInstructionWithoutDefaultEdge From 3c1e3b66ecdc95d020e2df1f73fe6f5e32d5102d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 03:21:50 +0000 Subject: [PATCH 329/334] Bump golang.org/x/mod Bumps the extractor-dependencies group in /go/extractor with 1 update: [golang.org/x/mod](https://github.com/golang/mod). Updates `golang.org/x/mod` from 0.20.0 to 0.21.0 - [Commits](https://github.com/golang/mod/compare/v0.20.0...v0.21.0) --- updated-dependencies: - dependency-name: golang.org/x/mod dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies ... Signed-off-by: dependabot[bot] --- go/extractor/go.mod | 2 +- go/extractor/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index 42366f17286..5be2d02e7b3 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -7,7 +7,7 @@ go 1.22.0 // when adding or removing dependencies, run // bazel mod tidy require ( - golang.org/x/mod v0.20.0 + golang.org/x/mod v0.21.0 golang.org/x/tools v0.24.0 ) diff --git a/go/extractor/go.sum b/go/extractor/go.sum index c48959824cd..c062882a5a6 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -1,5 +1,5 @@ -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= From 915d24c62fd1ff782e6a3de1f13092f428f63043 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 6 Sep 2024 17:38:29 +0200 Subject: [PATCH 330/334] C++: Re-introduce the original version of the `many_defs_per_use` IR test See: 28cff2ea20de576905cf32a4c8898407ae7fb618 --- .../library-tests/ir/ir/PrintAST.expected | 49178 ++++++++-------- .../library-tests/ir/ir/aliased_ir.expected | 30772 +++++----- .../library-tests/ir/ir/many-defs-per-use.cpp | 3093 +- .../test/library-tests/ir/ir/raw_ir.expected | 30770 +++++----- 4 files changed, 55378 insertions(+), 58435 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index dceab82ba4f..8f80e9d7e34 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -23459,142 +23459,142 @@ ir.cpp: # 2686| ValueCategory = prvalue # 2687| getStmt(1): [ReturnStmt] return ... many-defs-per-use.cpp: -# 17| [TopLevelFunction] void many_defs_per_use() -# 17| : -# 17| getEntryPoint(): [BlockStmt] { ... } -# 18| getStmt(0): [DoStmt] do (...) ... -# 20| getCondition(): [Literal] 0 -# 20| Type = [IntType] int -# 20| Value = [Literal] 0 -# 20| ValueCategory = prvalue -# 18| getStmt(): [BlockStmt] { ... } -# 19| getStmt(0): [DeclStmt] declaration -# 19| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 -# 19| Type = [Struct] String -# 19| getVariable().getInitializer(): [Initializer] initializer for x0 -# 19| getExpr(): [ConstructorCall] call to String -# 19| Type = [VoidType] void -# 19| ValueCategory = prvalue -# 20| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 20| Type = [VoidType] void -# 20| ValueCategory = prvalue -# 20| getQualifier(): [VariableAccess] x0 -# 20| Type = [Struct] String -# 20| ValueCategory = lvalue -# 20| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 20| Conversion = [BoolConversion] conversion to bool -# 20| Type = [BoolType] bool -# 20| Value = [CStyleCast] 0 -# 20| ValueCategory = prvalue -# 21| getStmt(1): [DoStmt] do (...) ... -# 23| getCondition(): [Literal] 0 -# 23| Type = [IntType] int -# 23| Value = [Literal] 0 -# 23| ValueCategory = prvalue -# 21| getStmt(): [BlockStmt] { ... } -# 22| getStmt(0): [DeclStmt] declaration -# 22| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 -# 22| Type = [Struct] String -# 22| getVariable().getInitializer(): [Initializer] initializer for x1 -# 22| getExpr(): [ConstructorCall] call to String -# 22| Type = [VoidType] void -# 22| ValueCategory = prvalue -# 23| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 23| Type = [VoidType] void -# 23| ValueCategory = prvalue -# 23| getQualifier(): [VariableAccess] x1 -# 23| Type = [Struct] String -# 23| ValueCategory = lvalue -# 23| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 23| Conversion = [BoolConversion] conversion to bool -# 23| Type = [BoolType] bool -# 23| Value = [CStyleCast] 0 -# 23| ValueCategory = prvalue -# 24| getStmt(2): [DoStmt] do (...) ... -# 26| getCondition(): [Literal] 0 -# 26| Type = [IntType] int -# 26| Value = [Literal] 0 -# 26| ValueCategory = prvalue -# 24| getStmt(): [BlockStmt] { ... } -# 25| getStmt(0): [DeclStmt] declaration -# 25| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x2 -# 25| Type = [Struct] String -# 25| getVariable().getInitializer(): [Initializer] initializer for x2 -# 25| getExpr(): [ConstructorCall] call to String -# 25| Type = [VoidType] void -# 25| ValueCategory = prvalue -# 26| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 26| Type = [VoidType] void -# 26| ValueCategory = prvalue -# 26| getQualifier(): [VariableAccess] x2 -# 26| Type = [Struct] String -# 26| ValueCategory = lvalue -# 26| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 26| Conversion = [BoolConversion] conversion to bool -# 26| Type = [BoolType] bool -# 26| Value = [CStyleCast] 0 -# 26| ValueCategory = prvalue -# 27| getStmt(3): [DoStmt] do (...) ... -# 29| getCondition(): [Literal] 0 -# 29| Type = [IntType] int -# 29| Value = [Literal] 0 -# 29| ValueCategory = prvalue -# 27| getStmt(): [BlockStmt] { ... } -# 28| getStmt(0): [DeclStmt] declaration -# 28| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x3 -# 28| Type = [Struct] String -# 28| getVariable().getInitializer(): [Initializer] initializer for x3 -# 28| getExpr(): [ConstructorCall] call to String -# 28| Type = [VoidType] void -# 28| ValueCategory = prvalue -# 29| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 29| Type = [VoidType] void -# 29| ValueCategory = prvalue -# 29| getQualifier(): [VariableAccess] x3 -# 29| Type = [Struct] String -# 29| ValueCategory = lvalue -# 29| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 29| Conversion = [BoolConversion] conversion to bool -# 29| Type = [BoolType] bool -# 29| Value = [CStyleCast] 0 -# 29| ValueCategory = prvalue -# 30| getStmt(4): [DoStmt] do (...) ... -# 32| getCondition(): [Literal] 0 -# 32| Type = [IntType] int -# 32| Value = [Literal] 0 -# 32| ValueCategory = prvalue -# 30| getStmt(): [BlockStmt] { ... } -# 31| getStmt(0): [DeclStmt] declaration -# 31| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x4 -# 31| Type = [Struct] String -# 31| getVariable().getInitializer(): [Initializer] initializer for x4 -# 31| getExpr(): [ConstructorCall] call to String -# 31| Type = [VoidType] void -# 31| ValueCategory = prvalue -# 32| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 32| Type = [VoidType] void -# 32| ValueCategory = prvalue -# 32| getQualifier(): [VariableAccess] x4 -# 32| Type = [Struct] String -# 32| ValueCategory = lvalue -# 32| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 32| Conversion = [BoolConversion] conversion to bool -# 32| Type = [BoolType] bool -# 32| Value = [CStyleCast] 0 -# 32| ValueCategory = prvalue -# 33| getStmt(5): [DoStmt] do (...) ... +# 34| [TopLevelFunction] void many_defs_per_use() +# 34| : +# 34| getEntryPoint(): [BlockStmt] { ... } +# 35| getStmt(0): [DoStmt] do (...) ... # 35| getCondition(): [Literal] 0 # 35| Type = [IntType] int # 35| Value = [Literal] 0 # 35| ValueCategory = prvalue -# 33| getStmt(): [BlockStmt] { ... } -# 34| getStmt(0): [DeclStmt] declaration -# 34| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x5 -# 34| Type = [Struct] String -# 34| getVariable().getInitializer(): [Initializer] initializer for x5 -# 34| getExpr(): [ConstructorCall] call to String -# 34| Type = [VoidType] void -# 34| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x0 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x0 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(2): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x2 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x2 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x2 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(3): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x3 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x3 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x3 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(4): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x4 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x4 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x4 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(5): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x5 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x5 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue # 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String # 35| Type = [VoidType] void # 35| ValueCategory = prvalue @@ -23606,24463 +23606,24463 @@ many-defs-per-use.cpp: # 35| Type = [BoolType] bool # 35| Value = [CStyleCast] 0 # 35| ValueCategory = prvalue -# 36| getStmt(6): [DoStmt] do (...) ... -# 38| getCondition(): [Literal] 0 -# 38| Type = [IntType] int -# 38| Value = [Literal] 0 -# 38| ValueCategory = prvalue -# 36| getStmt(): [BlockStmt] { ... } -# 37| getStmt(0): [DeclStmt] declaration -# 37| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x6 -# 37| Type = [Struct] String -# 37| getVariable().getInitializer(): [Initializer] initializer for x6 -# 37| getExpr(): [ConstructorCall] call to String -# 37| Type = [VoidType] void -# 37| ValueCategory = prvalue -# 38| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 38| Type = [VoidType] void -# 38| ValueCategory = prvalue -# 38| getQualifier(): [VariableAccess] x6 -# 38| Type = [Struct] String -# 38| ValueCategory = lvalue -# 38| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 38| Conversion = [BoolConversion] conversion to bool -# 38| Type = [BoolType] bool -# 38| Value = [CStyleCast] 0 -# 38| ValueCategory = prvalue -# 39| getStmt(7): [DoStmt] do (...) ... -# 41| getCondition(): [Literal] 0 -# 41| Type = [IntType] int -# 41| Value = [Literal] 0 -# 41| ValueCategory = prvalue -# 39| getStmt(): [BlockStmt] { ... } -# 40| getStmt(0): [DeclStmt] declaration -# 40| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x7 -# 40| Type = [Struct] String -# 40| getVariable().getInitializer(): [Initializer] initializer for x7 -# 40| getExpr(): [ConstructorCall] call to String -# 40| Type = [VoidType] void -# 40| ValueCategory = prvalue -# 41| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 41| Type = [VoidType] void -# 41| ValueCategory = prvalue -# 41| getQualifier(): [VariableAccess] x7 -# 41| Type = [Struct] String -# 41| ValueCategory = lvalue -# 41| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 41| Conversion = [BoolConversion] conversion to bool -# 41| Type = [BoolType] bool -# 41| Value = [CStyleCast] 0 -# 41| ValueCategory = prvalue -# 42| getStmt(8): [DoStmt] do (...) ... -# 44| getCondition(): [Literal] 0 -# 44| Type = [IntType] int -# 44| Value = [Literal] 0 -# 44| ValueCategory = prvalue -# 42| getStmt(): [BlockStmt] { ... } -# 43| getStmt(0): [DeclStmt] declaration -# 43| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x8 -# 43| Type = [Struct] String -# 43| getVariable().getInitializer(): [Initializer] initializer for x8 -# 43| getExpr(): [ConstructorCall] call to String -# 43| Type = [VoidType] void -# 43| ValueCategory = prvalue -# 44| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 44| Type = [VoidType] void -# 44| ValueCategory = prvalue -# 44| getQualifier(): [VariableAccess] x8 -# 44| Type = [Struct] String -# 44| ValueCategory = lvalue -# 44| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 44| Conversion = [BoolConversion] conversion to bool -# 44| Type = [BoolType] bool -# 44| Value = [CStyleCast] 0 -# 44| ValueCategory = prvalue -# 45| getStmt(9): [DoStmt] do (...) ... -# 47| getCondition(): [Literal] 0 -# 47| Type = [IntType] int -# 47| Value = [Literal] 0 -# 47| ValueCategory = prvalue -# 45| getStmt(): [BlockStmt] { ... } -# 46| getStmt(0): [DeclStmt] declaration -# 46| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x9 -# 46| Type = [Struct] String -# 46| getVariable().getInitializer(): [Initializer] initializer for x9 -# 46| getExpr(): [ConstructorCall] call to String -# 46| Type = [VoidType] void -# 46| ValueCategory = prvalue -# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 47| Type = [VoidType] void -# 47| ValueCategory = prvalue -# 47| getQualifier(): [VariableAccess] x9 -# 47| Type = [Struct] String -# 47| ValueCategory = lvalue -# 47| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 47| Conversion = [BoolConversion] conversion to bool -# 47| Type = [BoolType] bool -# 47| Value = [CStyleCast] 0 -# 47| ValueCategory = prvalue -# 48| getStmt(10): [DoStmt] do (...) ... -# 50| getCondition(): [Literal] 0 -# 50| Type = [IntType] int -# 50| Value = [Literal] 0 -# 50| ValueCategory = prvalue -# 48| getStmt(): [BlockStmt] { ... } -# 49| getStmt(0): [DeclStmt] declaration -# 49| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x10 -# 49| Type = [Struct] String -# 49| getVariable().getInitializer(): [Initializer] initializer for x10 -# 49| getExpr(): [ConstructorCall] call to String -# 49| Type = [VoidType] void -# 49| ValueCategory = prvalue -# 50| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 50| Type = [VoidType] void -# 50| ValueCategory = prvalue -# 50| getQualifier(): [VariableAccess] x10 -# 50| Type = [Struct] String -# 50| ValueCategory = lvalue -# 50| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 50| Conversion = [BoolConversion] conversion to bool -# 50| Type = [BoolType] bool -# 50| Value = [CStyleCast] 0 -# 50| ValueCategory = prvalue -# 51| getStmt(11): [DoStmt] do (...) ... -# 53| getCondition(): [Literal] 0 -# 53| Type = [IntType] int -# 53| Value = [Literal] 0 -# 53| ValueCategory = prvalue -# 51| getStmt(): [BlockStmt] { ... } -# 52| getStmt(0): [DeclStmt] declaration -# 52| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x11 -# 52| Type = [Struct] String -# 52| getVariable().getInitializer(): [Initializer] initializer for x11 -# 52| getExpr(): [ConstructorCall] call to String -# 52| Type = [VoidType] void -# 52| ValueCategory = prvalue -# 53| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 53| Type = [VoidType] void -# 53| ValueCategory = prvalue -# 53| getQualifier(): [VariableAccess] x11 -# 53| Type = [Struct] String -# 53| ValueCategory = lvalue -# 53| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 53| Conversion = [BoolConversion] conversion to bool -# 53| Type = [BoolType] bool -# 53| Value = [CStyleCast] 0 -# 53| ValueCategory = prvalue -# 54| getStmt(12): [DoStmt] do (...) ... -# 56| getCondition(): [Literal] 0 -# 56| Type = [IntType] int -# 56| Value = [Literal] 0 -# 56| ValueCategory = prvalue -# 54| getStmt(): [BlockStmt] { ... } -# 55| getStmt(0): [DeclStmt] declaration -# 55| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x12 -# 55| Type = [Struct] String -# 55| getVariable().getInitializer(): [Initializer] initializer for x12 -# 55| getExpr(): [ConstructorCall] call to String -# 55| Type = [VoidType] void -# 55| ValueCategory = prvalue -# 56| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 56| Type = [VoidType] void -# 56| ValueCategory = prvalue -# 56| getQualifier(): [VariableAccess] x12 -# 56| Type = [Struct] String -# 56| ValueCategory = lvalue -# 56| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 56| Conversion = [BoolConversion] conversion to bool -# 56| Type = [BoolType] bool -# 56| Value = [CStyleCast] 0 -# 56| ValueCategory = prvalue -# 57| getStmt(13): [DoStmt] do (...) ... -# 59| getCondition(): [Literal] 0 -# 59| Type = [IntType] int -# 59| Value = [Literal] 0 -# 59| ValueCategory = prvalue -# 57| getStmt(): [BlockStmt] { ... } -# 58| getStmt(0): [DeclStmt] declaration -# 58| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x13 -# 58| Type = [Struct] String -# 58| getVariable().getInitializer(): [Initializer] initializer for x13 -# 58| getExpr(): [ConstructorCall] call to String -# 58| Type = [VoidType] void -# 58| ValueCategory = prvalue -# 59| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 59| Type = [VoidType] void -# 59| ValueCategory = prvalue -# 59| getQualifier(): [VariableAccess] x13 -# 59| Type = [Struct] String -# 59| ValueCategory = lvalue -# 59| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 59| Conversion = [BoolConversion] conversion to bool -# 59| Type = [BoolType] bool -# 59| Value = [CStyleCast] 0 -# 59| ValueCategory = prvalue -# 60| getStmt(14): [DoStmt] do (...) ... -# 62| getCondition(): [Literal] 0 -# 62| Type = [IntType] int -# 62| Value = [Literal] 0 -# 62| ValueCategory = prvalue -# 60| getStmt(): [BlockStmt] { ... } -# 61| getStmt(0): [DeclStmt] declaration -# 61| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x14 -# 61| Type = [Struct] String -# 61| getVariable().getInitializer(): [Initializer] initializer for x14 -# 61| getExpr(): [ConstructorCall] call to String -# 61| Type = [VoidType] void -# 61| ValueCategory = prvalue -# 62| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 62| Type = [VoidType] void -# 62| ValueCategory = prvalue -# 62| getQualifier(): [VariableAccess] x14 -# 62| Type = [Struct] String -# 62| ValueCategory = lvalue -# 62| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 62| Conversion = [BoolConversion] conversion to bool -# 62| Type = [BoolType] bool -# 62| Value = [CStyleCast] 0 -# 62| ValueCategory = prvalue -# 63| getStmt(15): [DoStmt] do (...) ... -# 65| getCondition(): [Literal] 0 -# 65| Type = [IntType] int -# 65| Value = [Literal] 0 -# 65| ValueCategory = prvalue -# 63| getStmt(): [BlockStmt] { ... } -# 64| getStmt(0): [DeclStmt] declaration -# 64| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x15 -# 64| Type = [Struct] String -# 64| getVariable().getInitializer(): [Initializer] initializer for x15 -# 64| getExpr(): [ConstructorCall] call to String -# 64| Type = [VoidType] void -# 64| ValueCategory = prvalue -# 65| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 65| Type = [VoidType] void -# 65| ValueCategory = prvalue -# 65| getQualifier(): [VariableAccess] x15 -# 65| Type = [Struct] String -# 65| ValueCategory = lvalue -# 65| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 65| Conversion = [BoolConversion] conversion to bool -# 65| Type = [BoolType] bool -# 65| Value = [CStyleCast] 0 -# 65| ValueCategory = prvalue -# 66| getStmt(16): [DoStmt] do (...) ... -# 68| getCondition(): [Literal] 0 -# 68| Type = [IntType] int -# 68| Value = [Literal] 0 -# 68| ValueCategory = prvalue -# 66| getStmt(): [BlockStmt] { ... } -# 67| getStmt(0): [DeclStmt] declaration -# 67| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x16 -# 67| Type = [Struct] String -# 67| getVariable().getInitializer(): [Initializer] initializer for x16 -# 67| getExpr(): [ConstructorCall] call to String -# 67| Type = [VoidType] void -# 67| ValueCategory = prvalue -# 68| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 68| Type = [VoidType] void -# 68| ValueCategory = prvalue -# 68| getQualifier(): [VariableAccess] x16 -# 68| Type = [Struct] String -# 68| ValueCategory = lvalue -# 68| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 68| Conversion = [BoolConversion] conversion to bool -# 68| Type = [BoolType] bool -# 68| Value = [CStyleCast] 0 -# 68| ValueCategory = prvalue -# 69| getStmt(17): [DoStmt] do (...) ... -# 71| getCondition(): [Literal] 0 -# 71| Type = [IntType] int -# 71| Value = [Literal] 0 -# 71| ValueCategory = prvalue -# 69| getStmt(): [BlockStmt] { ... } -# 70| getStmt(0): [DeclStmt] declaration -# 70| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x17 -# 70| Type = [Struct] String -# 70| getVariable().getInitializer(): [Initializer] initializer for x17 -# 70| getExpr(): [ConstructorCall] call to String -# 70| Type = [VoidType] void -# 70| ValueCategory = prvalue -# 71| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 71| Type = [VoidType] void -# 71| ValueCategory = prvalue -# 71| getQualifier(): [VariableAccess] x17 -# 71| Type = [Struct] String -# 71| ValueCategory = lvalue -# 71| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 71| Conversion = [BoolConversion] conversion to bool -# 71| Type = [BoolType] bool -# 71| Value = [CStyleCast] 0 -# 71| ValueCategory = prvalue -# 72| getStmt(18): [DoStmt] do (...) ... -# 74| getCondition(): [Literal] 0 -# 74| Type = [IntType] int -# 74| Value = [Literal] 0 -# 74| ValueCategory = prvalue -# 72| getStmt(): [BlockStmt] { ... } -# 73| getStmt(0): [DeclStmt] declaration -# 73| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x18 -# 73| Type = [Struct] String -# 73| getVariable().getInitializer(): [Initializer] initializer for x18 -# 73| getExpr(): [ConstructorCall] call to String -# 73| Type = [VoidType] void -# 73| ValueCategory = prvalue -# 74| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 74| Type = [VoidType] void -# 74| ValueCategory = prvalue -# 74| getQualifier(): [VariableAccess] x18 -# 74| Type = [Struct] String -# 74| ValueCategory = lvalue -# 74| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 74| Conversion = [BoolConversion] conversion to bool -# 74| Type = [BoolType] bool -# 74| Value = [CStyleCast] 0 -# 74| ValueCategory = prvalue -# 75| getStmt(19): [DoStmt] do (...) ... -# 77| getCondition(): [Literal] 0 -# 77| Type = [IntType] int -# 77| Value = [Literal] 0 -# 77| ValueCategory = prvalue -# 75| getStmt(): [BlockStmt] { ... } -# 76| getStmt(0): [DeclStmt] declaration -# 76| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x19 -# 76| Type = [Struct] String -# 76| getVariable().getInitializer(): [Initializer] initializer for x19 -# 76| getExpr(): [ConstructorCall] call to String -# 76| Type = [VoidType] void -# 76| ValueCategory = prvalue -# 77| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 77| Type = [VoidType] void -# 77| ValueCategory = prvalue -# 77| getQualifier(): [VariableAccess] x19 -# 77| Type = [Struct] String -# 77| ValueCategory = lvalue -# 77| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 77| Conversion = [BoolConversion] conversion to bool -# 77| Type = [BoolType] bool -# 77| Value = [CStyleCast] 0 -# 77| ValueCategory = prvalue -# 78| getStmt(20): [DoStmt] do (...) ... -# 80| getCondition(): [Literal] 0 -# 80| Type = [IntType] int -# 80| Value = [Literal] 0 -# 80| ValueCategory = prvalue -# 78| getStmt(): [BlockStmt] { ... } -# 79| getStmt(0): [DeclStmt] declaration -# 79| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x20 -# 79| Type = [Struct] String -# 79| getVariable().getInitializer(): [Initializer] initializer for x20 -# 79| getExpr(): [ConstructorCall] call to String -# 79| Type = [VoidType] void -# 79| ValueCategory = prvalue -# 80| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 80| Type = [VoidType] void -# 80| ValueCategory = prvalue -# 80| getQualifier(): [VariableAccess] x20 -# 80| Type = [Struct] String -# 80| ValueCategory = lvalue -# 80| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 80| Conversion = [BoolConversion] conversion to bool -# 80| Type = [BoolType] bool -# 80| Value = [CStyleCast] 0 -# 80| ValueCategory = prvalue -# 81| getStmt(21): [DoStmt] do (...) ... -# 83| getCondition(): [Literal] 0 -# 83| Type = [IntType] int -# 83| Value = [Literal] 0 -# 83| ValueCategory = prvalue -# 81| getStmt(): [BlockStmt] { ... } -# 82| getStmt(0): [DeclStmt] declaration -# 82| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x21 -# 82| Type = [Struct] String -# 82| getVariable().getInitializer(): [Initializer] initializer for x21 -# 82| getExpr(): [ConstructorCall] call to String -# 82| Type = [VoidType] void -# 82| ValueCategory = prvalue -# 83| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 83| Type = [VoidType] void -# 83| ValueCategory = prvalue -# 83| getQualifier(): [VariableAccess] x21 -# 83| Type = [Struct] String -# 83| ValueCategory = lvalue -# 83| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 83| Conversion = [BoolConversion] conversion to bool -# 83| Type = [BoolType] bool -# 83| Value = [CStyleCast] 0 -# 83| ValueCategory = prvalue -# 84| getStmt(22): [DoStmt] do (...) ... -# 86| getCondition(): [Literal] 0 -# 86| Type = [IntType] int -# 86| Value = [Literal] 0 -# 86| ValueCategory = prvalue -# 84| getStmt(): [BlockStmt] { ... } -# 85| getStmt(0): [DeclStmt] declaration -# 85| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x22 -# 85| Type = [Struct] String -# 85| getVariable().getInitializer(): [Initializer] initializer for x22 -# 85| getExpr(): [ConstructorCall] call to String -# 85| Type = [VoidType] void -# 85| ValueCategory = prvalue -# 86| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 86| Type = [VoidType] void -# 86| ValueCategory = prvalue -# 86| getQualifier(): [VariableAccess] x22 -# 86| Type = [Struct] String -# 86| ValueCategory = lvalue -# 86| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 86| Conversion = [BoolConversion] conversion to bool -# 86| Type = [BoolType] bool -# 86| Value = [CStyleCast] 0 -# 86| ValueCategory = prvalue -# 87| getStmt(23): [DoStmt] do (...) ... -# 89| getCondition(): [Literal] 0 -# 89| Type = [IntType] int -# 89| Value = [Literal] 0 -# 89| ValueCategory = prvalue -# 87| getStmt(): [BlockStmt] { ... } -# 88| getStmt(0): [DeclStmt] declaration -# 88| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x23 -# 88| Type = [Struct] String -# 88| getVariable().getInitializer(): [Initializer] initializer for x23 -# 88| getExpr(): [ConstructorCall] call to String -# 88| Type = [VoidType] void -# 88| ValueCategory = prvalue -# 89| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 89| Type = [VoidType] void -# 89| ValueCategory = prvalue -# 89| getQualifier(): [VariableAccess] x23 -# 89| Type = [Struct] String -# 89| ValueCategory = lvalue -# 89| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 89| Conversion = [BoolConversion] conversion to bool -# 89| Type = [BoolType] bool -# 89| Value = [CStyleCast] 0 -# 89| ValueCategory = prvalue -# 90| getStmt(24): [DoStmt] do (...) ... -# 92| getCondition(): [Literal] 0 -# 92| Type = [IntType] int -# 92| Value = [Literal] 0 -# 92| ValueCategory = prvalue -# 90| getStmt(): [BlockStmt] { ... } -# 91| getStmt(0): [DeclStmt] declaration -# 91| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x24 -# 91| Type = [Struct] String -# 91| getVariable().getInitializer(): [Initializer] initializer for x24 -# 91| getExpr(): [ConstructorCall] call to String -# 91| Type = [VoidType] void -# 91| ValueCategory = prvalue -# 92| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 92| Type = [VoidType] void -# 92| ValueCategory = prvalue -# 92| getQualifier(): [VariableAccess] x24 -# 92| Type = [Struct] String -# 92| ValueCategory = lvalue -# 92| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 92| Conversion = [BoolConversion] conversion to bool -# 92| Type = [BoolType] bool -# 92| Value = [CStyleCast] 0 -# 92| ValueCategory = prvalue -# 93| getStmt(25): [DoStmt] do (...) ... -# 95| getCondition(): [Literal] 0 -# 95| Type = [IntType] int -# 95| Value = [Literal] 0 -# 95| ValueCategory = prvalue -# 93| getStmt(): [BlockStmt] { ... } -# 94| getStmt(0): [DeclStmt] declaration -# 94| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x25 -# 94| Type = [Struct] String -# 94| getVariable().getInitializer(): [Initializer] initializer for x25 -# 94| getExpr(): [ConstructorCall] call to String -# 94| Type = [VoidType] void -# 94| ValueCategory = prvalue -# 95| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 95| Type = [VoidType] void -# 95| ValueCategory = prvalue -# 95| getQualifier(): [VariableAccess] x25 -# 95| Type = [Struct] String -# 95| ValueCategory = lvalue -# 95| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 95| Conversion = [BoolConversion] conversion to bool -# 95| Type = [BoolType] bool -# 95| Value = [CStyleCast] 0 -# 95| ValueCategory = prvalue -# 96| getStmt(26): [DoStmt] do (...) ... -# 98| getCondition(): [Literal] 0 -# 98| Type = [IntType] int -# 98| Value = [Literal] 0 -# 98| ValueCategory = prvalue -# 96| getStmt(): [BlockStmt] { ... } -# 97| getStmt(0): [DeclStmt] declaration -# 97| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x26 -# 97| Type = [Struct] String -# 97| getVariable().getInitializer(): [Initializer] initializer for x26 -# 97| getExpr(): [ConstructorCall] call to String -# 97| Type = [VoidType] void -# 97| ValueCategory = prvalue -# 98| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 98| Type = [VoidType] void -# 98| ValueCategory = prvalue -# 98| getQualifier(): [VariableAccess] x26 -# 98| Type = [Struct] String -# 98| ValueCategory = lvalue -# 98| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 98| Conversion = [BoolConversion] conversion to bool -# 98| Type = [BoolType] bool -# 98| Value = [CStyleCast] 0 -# 98| ValueCategory = prvalue -# 99| getStmt(27): [DoStmt] do (...) ... -# 101| getCondition(): [Literal] 0 -# 101| Type = [IntType] int -# 101| Value = [Literal] 0 -# 101| ValueCategory = prvalue -# 99| getStmt(): [BlockStmt] { ... } -# 100| getStmt(0): [DeclStmt] declaration -# 100| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x27 -# 100| Type = [Struct] String -# 100| getVariable().getInitializer(): [Initializer] initializer for x27 -# 100| getExpr(): [ConstructorCall] call to String -# 100| Type = [VoidType] void -# 100| ValueCategory = prvalue -# 101| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 101| Type = [VoidType] void -# 101| ValueCategory = prvalue -# 101| getQualifier(): [VariableAccess] x27 -# 101| Type = [Struct] String -# 101| ValueCategory = lvalue -# 101| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 101| Conversion = [BoolConversion] conversion to bool -# 101| Type = [BoolType] bool -# 101| Value = [CStyleCast] 0 -# 101| ValueCategory = prvalue -# 102| getStmt(28): [DoStmt] do (...) ... -# 104| getCondition(): [Literal] 0 -# 104| Type = [IntType] int -# 104| Value = [Literal] 0 -# 104| ValueCategory = prvalue -# 102| getStmt(): [BlockStmt] { ... } -# 103| getStmt(0): [DeclStmt] declaration -# 103| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x28 -# 103| Type = [Struct] String -# 103| getVariable().getInitializer(): [Initializer] initializer for x28 -# 103| getExpr(): [ConstructorCall] call to String -# 103| Type = [VoidType] void -# 103| ValueCategory = prvalue -# 104| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 104| Type = [VoidType] void -# 104| ValueCategory = prvalue -# 104| getQualifier(): [VariableAccess] x28 -# 104| Type = [Struct] String -# 104| ValueCategory = lvalue -# 104| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 104| Conversion = [BoolConversion] conversion to bool -# 104| Type = [BoolType] bool -# 104| Value = [CStyleCast] 0 -# 104| ValueCategory = prvalue -# 105| getStmt(29): [DoStmt] do (...) ... -# 107| getCondition(): [Literal] 0 -# 107| Type = [IntType] int -# 107| Value = [Literal] 0 -# 107| ValueCategory = prvalue -# 105| getStmt(): [BlockStmt] { ... } -# 106| getStmt(0): [DeclStmt] declaration -# 106| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x29 -# 106| Type = [Struct] String -# 106| getVariable().getInitializer(): [Initializer] initializer for x29 -# 106| getExpr(): [ConstructorCall] call to String -# 106| Type = [VoidType] void -# 106| ValueCategory = prvalue -# 107| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 107| Type = [VoidType] void -# 107| ValueCategory = prvalue -# 107| getQualifier(): [VariableAccess] x29 -# 107| Type = [Struct] String -# 107| ValueCategory = lvalue -# 107| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 107| Conversion = [BoolConversion] conversion to bool -# 107| Type = [BoolType] bool -# 107| Value = [CStyleCast] 0 -# 107| ValueCategory = prvalue -# 108| getStmt(30): [DoStmt] do (...) ... -# 110| getCondition(): [Literal] 0 -# 110| Type = [IntType] int -# 110| Value = [Literal] 0 -# 110| ValueCategory = prvalue -# 108| getStmt(): [BlockStmt] { ... } -# 109| getStmt(0): [DeclStmt] declaration -# 109| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x30 -# 109| Type = [Struct] String -# 109| getVariable().getInitializer(): [Initializer] initializer for x30 -# 109| getExpr(): [ConstructorCall] call to String -# 109| Type = [VoidType] void -# 109| ValueCategory = prvalue -# 110| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 110| Type = [VoidType] void -# 110| ValueCategory = prvalue -# 110| getQualifier(): [VariableAccess] x30 -# 110| Type = [Struct] String -# 110| ValueCategory = lvalue -# 110| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 110| Conversion = [BoolConversion] conversion to bool -# 110| Type = [BoolType] bool -# 110| Value = [CStyleCast] 0 -# 110| ValueCategory = prvalue -# 111| getStmt(31): [DoStmt] do (...) ... -# 113| getCondition(): [Literal] 0 -# 113| Type = [IntType] int -# 113| Value = [Literal] 0 -# 113| ValueCategory = prvalue -# 111| getStmt(): [BlockStmt] { ... } -# 112| getStmt(0): [DeclStmt] declaration -# 112| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x31 -# 112| Type = [Struct] String -# 112| getVariable().getInitializer(): [Initializer] initializer for x31 -# 112| getExpr(): [ConstructorCall] call to String -# 112| Type = [VoidType] void -# 112| ValueCategory = prvalue -# 113| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 113| Type = [VoidType] void -# 113| ValueCategory = prvalue -# 113| getQualifier(): [VariableAccess] x31 -# 113| Type = [Struct] String -# 113| ValueCategory = lvalue -# 113| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 113| Conversion = [BoolConversion] conversion to bool -# 113| Type = [BoolType] bool -# 113| Value = [CStyleCast] 0 -# 113| ValueCategory = prvalue -# 114| getStmt(32): [DoStmt] do (...) ... -# 116| getCondition(): [Literal] 0 -# 116| Type = [IntType] int -# 116| Value = [Literal] 0 -# 116| ValueCategory = prvalue -# 114| getStmt(): [BlockStmt] { ... } -# 115| getStmt(0): [DeclStmt] declaration -# 115| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x32 -# 115| Type = [Struct] String -# 115| getVariable().getInitializer(): [Initializer] initializer for x32 -# 115| getExpr(): [ConstructorCall] call to String -# 115| Type = [VoidType] void -# 115| ValueCategory = prvalue -# 116| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 116| Type = [VoidType] void -# 116| ValueCategory = prvalue -# 116| getQualifier(): [VariableAccess] x32 -# 116| Type = [Struct] String -# 116| ValueCategory = lvalue -# 116| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 116| Conversion = [BoolConversion] conversion to bool -# 116| Type = [BoolType] bool -# 116| Value = [CStyleCast] 0 -# 116| ValueCategory = prvalue -# 117| getStmt(33): [DoStmt] do (...) ... -# 119| getCondition(): [Literal] 0 -# 119| Type = [IntType] int -# 119| Value = [Literal] 0 -# 119| ValueCategory = prvalue -# 117| getStmt(): [BlockStmt] { ... } -# 118| getStmt(0): [DeclStmt] declaration -# 118| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x33 -# 118| Type = [Struct] String -# 118| getVariable().getInitializer(): [Initializer] initializer for x33 -# 118| getExpr(): [ConstructorCall] call to String -# 118| Type = [VoidType] void -# 118| ValueCategory = prvalue -# 119| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 119| Type = [VoidType] void -# 119| ValueCategory = prvalue -# 119| getQualifier(): [VariableAccess] x33 -# 119| Type = [Struct] String -# 119| ValueCategory = lvalue -# 119| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 119| Conversion = [BoolConversion] conversion to bool -# 119| Type = [BoolType] bool -# 119| Value = [CStyleCast] 0 -# 119| ValueCategory = prvalue -# 120| getStmt(34): [DoStmt] do (...) ... -# 122| getCondition(): [Literal] 0 -# 122| Type = [IntType] int -# 122| Value = [Literal] 0 -# 122| ValueCategory = prvalue -# 120| getStmt(): [BlockStmt] { ... } -# 121| getStmt(0): [DeclStmt] declaration -# 121| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x34 -# 121| Type = [Struct] String -# 121| getVariable().getInitializer(): [Initializer] initializer for x34 -# 121| getExpr(): [ConstructorCall] call to String -# 121| Type = [VoidType] void -# 121| ValueCategory = prvalue -# 122| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 122| Type = [VoidType] void -# 122| ValueCategory = prvalue -# 122| getQualifier(): [VariableAccess] x34 -# 122| Type = [Struct] String -# 122| ValueCategory = lvalue -# 122| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 122| Conversion = [BoolConversion] conversion to bool -# 122| Type = [BoolType] bool -# 122| Value = [CStyleCast] 0 -# 122| ValueCategory = prvalue -# 123| getStmt(35): [DoStmt] do (...) ... -# 125| getCondition(): [Literal] 0 -# 125| Type = [IntType] int -# 125| Value = [Literal] 0 -# 125| ValueCategory = prvalue -# 123| getStmt(): [BlockStmt] { ... } -# 124| getStmt(0): [DeclStmt] declaration -# 124| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x35 -# 124| Type = [Struct] String -# 124| getVariable().getInitializer(): [Initializer] initializer for x35 -# 124| getExpr(): [ConstructorCall] call to String -# 124| Type = [VoidType] void -# 124| ValueCategory = prvalue -# 125| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 125| Type = [VoidType] void -# 125| ValueCategory = prvalue -# 125| getQualifier(): [VariableAccess] x35 -# 125| Type = [Struct] String -# 125| ValueCategory = lvalue -# 125| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 125| Conversion = [BoolConversion] conversion to bool -# 125| Type = [BoolType] bool -# 125| Value = [CStyleCast] 0 -# 125| ValueCategory = prvalue -# 126| getStmt(36): [DoStmt] do (...) ... -# 128| getCondition(): [Literal] 0 -# 128| Type = [IntType] int -# 128| Value = [Literal] 0 -# 128| ValueCategory = prvalue -# 126| getStmt(): [BlockStmt] { ... } -# 127| getStmt(0): [DeclStmt] declaration -# 127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x36 -# 127| Type = [Struct] String -# 127| getVariable().getInitializer(): [Initializer] initializer for x36 -# 127| getExpr(): [ConstructorCall] call to String -# 127| Type = [VoidType] void -# 127| ValueCategory = prvalue -# 128| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 128| Type = [VoidType] void -# 128| ValueCategory = prvalue -# 128| getQualifier(): [VariableAccess] x36 -# 128| Type = [Struct] String -# 128| ValueCategory = lvalue -# 128| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 128| Conversion = [BoolConversion] conversion to bool -# 128| Type = [BoolType] bool -# 128| Value = [CStyleCast] 0 -# 128| ValueCategory = prvalue -# 129| getStmt(37): [DoStmt] do (...) ... -# 131| getCondition(): [Literal] 0 -# 131| Type = [IntType] int -# 131| Value = [Literal] 0 -# 131| ValueCategory = prvalue -# 129| getStmt(): [BlockStmt] { ... } -# 130| getStmt(0): [DeclStmt] declaration -# 130| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x37 -# 130| Type = [Struct] String -# 130| getVariable().getInitializer(): [Initializer] initializer for x37 -# 130| getExpr(): [ConstructorCall] call to String -# 130| Type = [VoidType] void -# 130| ValueCategory = prvalue -# 131| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 131| Type = [VoidType] void -# 131| ValueCategory = prvalue -# 131| getQualifier(): [VariableAccess] x37 -# 131| Type = [Struct] String -# 131| ValueCategory = lvalue -# 131| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 131| Conversion = [BoolConversion] conversion to bool -# 131| Type = [BoolType] bool -# 131| Value = [CStyleCast] 0 -# 131| ValueCategory = prvalue -# 132| getStmt(38): [DoStmt] do (...) ... -# 134| getCondition(): [Literal] 0 -# 134| Type = [IntType] int -# 134| Value = [Literal] 0 -# 134| ValueCategory = prvalue -# 132| getStmt(): [BlockStmt] { ... } -# 133| getStmt(0): [DeclStmt] declaration -# 133| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x38 -# 133| Type = [Struct] String -# 133| getVariable().getInitializer(): [Initializer] initializer for x38 -# 133| getExpr(): [ConstructorCall] call to String -# 133| Type = [VoidType] void -# 133| ValueCategory = prvalue -# 134| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 134| Type = [VoidType] void -# 134| ValueCategory = prvalue -# 134| getQualifier(): [VariableAccess] x38 -# 134| Type = [Struct] String -# 134| ValueCategory = lvalue -# 134| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 134| Conversion = [BoolConversion] conversion to bool -# 134| Type = [BoolType] bool -# 134| Value = [CStyleCast] 0 -# 134| ValueCategory = prvalue -# 135| getStmt(39): [DoStmt] do (...) ... -# 137| getCondition(): [Literal] 0 -# 137| Type = [IntType] int -# 137| Value = [Literal] 0 -# 137| ValueCategory = prvalue -# 135| getStmt(): [BlockStmt] { ... } -# 136| getStmt(0): [DeclStmt] declaration -# 136| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x39 -# 136| Type = [Struct] String -# 136| getVariable().getInitializer(): [Initializer] initializer for x39 -# 136| getExpr(): [ConstructorCall] call to String -# 136| Type = [VoidType] void -# 136| ValueCategory = prvalue -# 137| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 137| Type = [VoidType] void -# 137| ValueCategory = prvalue -# 137| getQualifier(): [VariableAccess] x39 -# 137| Type = [Struct] String -# 137| ValueCategory = lvalue -# 137| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 137| Conversion = [BoolConversion] conversion to bool -# 137| Type = [BoolType] bool -# 137| Value = [CStyleCast] 0 -# 137| ValueCategory = prvalue -# 138| getStmt(40): [DoStmt] do (...) ... -# 140| getCondition(): [Literal] 0 -# 140| Type = [IntType] int -# 140| Value = [Literal] 0 -# 140| ValueCategory = prvalue -# 138| getStmt(): [BlockStmt] { ... } -# 139| getStmt(0): [DeclStmt] declaration -# 139| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x40 -# 139| Type = [Struct] String -# 139| getVariable().getInitializer(): [Initializer] initializer for x40 -# 139| getExpr(): [ConstructorCall] call to String -# 139| Type = [VoidType] void -# 139| ValueCategory = prvalue -# 140| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 140| Type = [VoidType] void -# 140| ValueCategory = prvalue -# 140| getQualifier(): [VariableAccess] x40 -# 140| Type = [Struct] String -# 140| ValueCategory = lvalue -# 140| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 140| Conversion = [BoolConversion] conversion to bool -# 140| Type = [BoolType] bool -# 140| Value = [CStyleCast] 0 -# 140| ValueCategory = prvalue -# 141| getStmt(41): [DoStmt] do (...) ... -# 143| getCondition(): [Literal] 0 -# 143| Type = [IntType] int -# 143| Value = [Literal] 0 -# 143| ValueCategory = prvalue -# 141| getStmt(): [BlockStmt] { ... } -# 142| getStmt(0): [DeclStmt] declaration -# 142| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x41 -# 142| Type = [Struct] String -# 142| getVariable().getInitializer(): [Initializer] initializer for x41 -# 142| getExpr(): [ConstructorCall] call to String -# 142| Type = [VoidType] void -# 142| ValueCategory = prvalue -# 143| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 143| Type = [VoidType] void -# 143| ValueCategory = prvalue -# 143| getQualifier(): [VariableAccess] x41 -# 143| Type = [Struct] String -# 143| ValueCategory = lvalue -# 143| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 143| Conversion = [BoolConversion] conversion to bool -# 143| Type = [BoolType] bool -# 143| Value = [CStyleCast] 0 -# 143| ValueCategory = prvalue -# 144| getStmt(42): [DoStmt] do (...) ... -# 146| getCondition(): [Literal] 0 -# 146| Type = [IntType] int -# 146| Value = [Literal] 0 -# 146| ValueCategory = prvalue -# 144| getStmt(): [BlockStmt] { ... } -# 145| getStmt(0): [DeclStmt] declaration -# 145| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x42 -# 145| Type = [Struct] String -# 145| getVariable().getInitializer(): [Initializer] initializer for x42 -# 145| getExpr(): [ConstructorCall] call to String -# 145| Type = [VoidType] void -# 145| ValueCategory = prvalue -# 146| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 146| Type = [VoidType] void -# 146| ValueCategory = prvalue -# 146| getQualifier(): [VariableAccess] x42 -# 146| Type = [Struct] String -# 146| ValueCategory = lvalue -# 146| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 146| Conversion = [BoolConversion] conversion to bool -# 146| Type = [BoolType] bool -# 146| Value = [CStyleCast] 0 -# 146| ValueCategory = prvalue -# 147| getStmt(43): [DoStmt] do (...) ... -# 149| getCondition(): [Literal] 0 -# 149| Type = [IntType] int -# 149| Value = [Literal] 0 -# 149| ValueCategory = prvalue -# 147| getStmt(): [BlockStmt] { ... } -# 148| getStmt(0): [DeclStmt] declaration -# 148| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x43 -# 148| Type = [Struct] String -# 148| getVariable().getInitializer(): [Initializer] initializer for x43 -# 148| getExpr(): [ConstructorCall] call to String -# 148| Type = [VoidType] void -# 148| ValueCategory = prvalue -# 149| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 149| Type = [VoidType] void -# 149| ValueCategory = prvalue -# 149| getQualifier(): [VariableAccess] x43 -# 149| Type = [Struct] String -# 149| ValueCategory = lvalue -# 149| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 149| Conversion = [BoolConversion] conversion to bool -# 149| Type = [BoolType] bool -# 149| Value = [CStyleCast] 0 -# 149| ValueCategory = prvalue -# 150| getStmt(44): [DoStmt] do (...) ... -# 152| getCondition(): [Literal] 0 -# 152| Type = [IntType] int -# 152| Value = [Literal] 0 -# 152| ValueCategory = prvalue -# 150| getStmt(): [BlockStmt] { ... } -# 151| getStmt(0): [DeclStmt] declaration -# 151| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x44 -# 151| Type = [Struct] String -# 151| getVariable().getInitializer(): [Initializer] initializer for x44 -# 151| getExpr(): [ConstructorCall] call to String -# 151| Type = [VoidType] void -# 151| ValueCategory = prvalue -# 152| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 152| Type = [VoidType] void -# 152| ValueCategory = prvalue -# 152| getQualifier(): [VariableAccess] x44 -# 152| Type = [Struct] String -# 152| ValueCategory = lvalue -# 152| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 152| Conversion = [BoolConversion] conversion to bool -# 152| Type = [BoolType] bool -# 152| Value = [CStyleCast] 0 -# 152| ValueCategory = prvalue -# 153| getStmt(45): [DoStmt] do (...) ... -# 155| getCondition(): [Literal] 0 -# 155| Type = [IntType] int -# 155| Value = [Literal] 0 -# 155| ValueCategory = prvalue -# 153| getStmt(): [BlockStmt] { ... } -# 154| getStmt(0): [DeclStmt] declaration -# 154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x45 -# 154| Type = [Struct] String -# 154| getVariable().getInitializer(): [Initializer] initializer for x45 -# 154| getExpr(): [ConstructorCall] call to String -# 154| Type = [VoidType] void -# 154| ValueCategory = prvalue -# 155| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 155| Type = [VoidType] void -# 155| ValueCategory = prvalue -# 155| getQualifier(): [VariableAccess] x45 -# 155| Type = [Struct] String -# 155| ValueCategory = lvalue -# 155| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 155| Conversion = [BoolConversion] conversion to bool -# 155| Type = [BoolType] bool -# 155| Value = [CStyleCast] 0 -# 155| ValueCategory = prvalue -# 156| getStmt(46): [DoStmt] do (...) ... -# 158| getCondition(): [Literal] 0 -# 158| Type = [IntType] int -# 158| Value = [Literal] 0 -# 158| ValueCategory = prvalue -# 156| getStmt(): [BlockStmt] { ... } -# 157| getStmt(0): [DeclStmt] declaration -# 157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x46 -# 157| Type = [Struct] String -# 157| getVariable().getInitializer(): [Initializer] initializer for x46 -# 157| getExpr(): [ConstructorCall] call to String -# 157| Type = [VoidType] void -# 157| ValueCategory = prvalue -# 158| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 158| Type = [VoidType] void -# 158| ValueCategory = prvalue -# 158| getQualifier(): [VariableAccess] x46 -# 158| Type = [Struct] String -# 158| ValueCategory = lvalue -# 158| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 158| Conversion = [BoolConversion] conversion to bool -# 158| Type = [BoolType] bool -# 158| Value = [CStyleCast] 0 -# 158| ValueCategory = prvalue -# 159| getStmt(47): [DoStmt] do (...) ... -# 161| getCondition(): [Literal] 0 -# 161| Type = [IntType] int -# 161| Value = [Literal] 0 -# 161| ValueCategory = prvalue -# 159| getStmt(): [BlockStmt] { ... } -# 160| getStmt(0): [DeclStmt] declaration -# 160| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x47 -# 160| Type = [Struct] String -# 160| getVariable().getInitializer(): [Initializer] initializer for x47 -# 160| getExpr(): [ConstructorCall] call to String -# 160| Type = [VoidType] void -# 160| ValueCategory = prvalue -# 161| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 161| Type = [VoidType] void -# 161| ValueCategory = prvalue -# 161| getQualifier(): [VariableAccess] x47 -# 161| Type = [Struct] String -# 161| ValueCategory = lvalue -# 161| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 161| Conversion = [BoolConversion] conversion to bool -# 161| Type = [BoolType] bool -# 161| Value = [CStyleCast] 0 -# 161| ValueCategory = prvalue -# 162| getStmt(48): [DoStmt] do (...) ... -# 164| getCondition(): [Literal] 0 -# 164| Type = [IntType] int -# 164| Value = [Literal] 0 -# 164| ValueCategory = prvalue -# 162| getStmt(): [BlockStmt] { ... } -# 163| getStmt(0): [DeclStmt] declaration -# 163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x48 -# 163| Type = [Struct] String -# 163| getVariable().getInitializer(): [Initializer] initializer for x48 -# 163| getExpr(): [ConstructorCall] call to String -# 163| Type = [VoidType] void -# 163| ValueCategory = prvalue -# 164| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 164| Type = [VoidType] void -# 164| ValueCategory = prvalue -# 164| getQualifier(): [VariableAccess] x48 -# 164| Type = [Struct] String -# 164| ValueCategory = lvalue -# 164| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 164| Conversion = [BoolConversion] conversion to bool -# 164| Type = [BoolType] bool -# 164| Value = [CStyleCast] 0 -# 164| ValueCategory = prvalue -# 165| getStmt(49): [DoStmt] do (...) ... -# 167| getCondition(): [Literal] 0 -# 167| Type = [IntType] int -# 167| Value = [Literal] 0 -# 167| ValueCategory = prvalue -# 165| getStmt(): [BlockStmt] { ... } -# 166| getStmt(0): [DeclStmt] declaration -# 166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x49 -# 166| Type = [Struct] String -# 166| getVariable().getInitializer(): [Initializer] initializer for x49 -# 166| getExpr(): [ConstructorCall] call to String -# 166| Type = [VoidType] void -# 166| ValueCategory = prvalue -# 167| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 167| Type = [VoidType] void -# 167| ValueCategory = prvalue -# 167| getQualifier(): [VariableAccess] x49 -# 167| Type = [Struct] String -# 167| ValueCategory = lvalue -# 167| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 167| Conversion = [BoolConversion] conversion to bool -# 167| Type = [BoolType] bool -# 167| Value = [CStyleCast] 0 -# 167| ValueCategory = prvalue -# 168| getStmt(50): [DoStmt] do (...) ... -# 170| getCondition(): [Literal] 0 -# 170| Type = [IntType] int -# 170| Value = [Literal] 0 -# 170| ValueCategory = prvalue -# 168| getStmt(): [BlockStmt] { ... } -# 169| getStmt(0): [DeclStmt] declaration -# 169| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x50 -# 169| Type = [Struct] String -# 169| getVariable().getInitializer(): [Initializer] initializer for x50 -# 169| getExpr(): [ConstructorCall] call to String -# 169| Type = [VoidType] void -# 169| ValueCategory = prvalue -# 170| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 170| Type = [VoidType] void -# 170| ValueCategory = prvalue -# 170| getQualifier(): [VariableAccess] x50 -# 170| Type = [Struct] String -# 170| ValueCategory = lvalue -# 170| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 170| Conversion = [BoolConversion] conversion to bool -# 170| Type = [BoolType] bool -# 170| Value = [CStyleCast] 0 -# 170| ValueCategory = prvalue -# 171| getStmt(51): [DoStmt] do (...) ... -# 173| getCondition(): [Literal] 0 -# 173| Type = [IntType] int -# 173| Value = [Literal] 0 -# 173| ValueCategory = prvalue -# 171| getStmt(): [BlockStmt] { ... } -# 172| getStmt(0): [DeclStmt] declaration -# 172| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x51 -# 172| Type = [Struct] String -# 172| getVariable().getInitializer(): [Initializer] initializer for x51 -# 172| getExpr(): [ConstructorCall] call to String -# 172| Type = [VoidType] void -# 172| ValueCategory = prvalue -# 173| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 173| Type = [VoidType] void -# 173| ValueCategory = prvalue -# 173| getQualifier(): [VariableAccess] x51 -# 173| Type = [Struct] String -# 173| ValueCategory = lvalue -# 173| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 173| Conversion = [BoolConversion] conversion to bool -# 173| Type = [BoolType] bool -# 173| Value = [CStyleCast] 0 -# 173| ValueCategory = prvalue -# 174| getStmt(52): [DoStmt] do (...) ... -# 176| getCondition(): [Literal] 0 -# 176| Type = [IntType] int -# 176| Value = [Literal] 0 -# 176| ValueCategory = prvalue -# 174| getStmt(): [BlockStmt] { ... } -# 175| getStmt(0): [DeclStmt] declaration -# 175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x52 -# 175| Type = [Struct] String -# 175| getVariable().getInitializer(): [Initializer] initializer for x52 -# 175| getExpr(): [ConstructorCall] call to String -# 175| Type = [VoidType] void -# 175| ValueCategory = prvalue -# 176| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 176| Type = [VoidType] void -# 176| ValueCategory = prvalue -# 176| getQualifier(): [VariableAccess] x52 -# 176| Type = [Struct] String -# 176| ValueCategory = lvalue -# 176| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 176| Conversion = [BoolConversion] conversion to bool -# 176| Type = [BoolType] bool -# 176| Value = [CStyleCast] 0 -# 176| ValueCategory = prvalue -# 177| getStmt(53): [DoStmt] do (...) ... -# 179| getCondition(): [Literal] 0 -# 179| Type = [IntType] int -# 179| Value = [Literal] 0 -# 179| ValueCategory = prvalue -# 177| getStmt(): [BlockStmt] { ... } -# 178| getStmt(0): [DeclStmt] declaration -# 178| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x53 -# 178| Type = [Struct] String -# 178| getVariable().getInitializer(): [Initializer] initializer for x53 -# 178| getExpr(): [ConstructorCall] call to String -# 178| Type = [VoidType] void -# 178| ValueCategory = prvalue -# 179| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 179| Type = [VoidType] void -# 179| ValueCategory = prvalue -# 179| getQualifier(): [VariableAccess] x53 -# 179| Type = [Struct] String -# 179| ValueCategory = lvalue -# 179| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 179| Conversion = [BoolConversion] conversion to bool -# 179| Type = [BoolType] bool -# 179| Value = [CStyleCast] 0 -# 179| ValueCategory = prvalue -# 180| getStmt(54): [DoStmt] do (...) ... -# 182| getCondition(): [Literal] 0 -# 182| Type = [IntType] int -# 182| Value = [Literal] 0 -# 182| ValueCategory = prvalue -# 180| getStmt(): [BlockStmt] { ... } -# 181| getStmt(0): [DeclStmt] declaration -# 181| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x54 -# 181| Type = [Struct] String -# 181| getVariable().getInitializer(): [Initializer] initializer for x54 -# 181| getExpr(): [ConstructorCall] call to String -# 181| Type = [VoidType] void -# 181| ValueCategory = prvalue -# 182| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 182| Type = [VoidType] void -# 182| ValueCategory = prvalue -# 182| getQualifier(): [VariableAccess] x54 -# 182| Type = [Struct] String -# 182| ValueCategory = lvalue -# 182| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 182| Conversion = [BoolConversion] conversion to bool -# 182| Type = [BoolType] bool -# 182| Value = [CStyleCast] 0 -# 182| ValueCategory = prvalue -# 183| getStmt(55): [DoStmt] do (...) ... -# 185| getCondition(): [Literal] 0 -# 185| Type = [IntType] int -# 185| Value = [Literal] 0 -# 185| ValueCategory = prvalue -# 183| getStmt(): [BlockStmt] { ... } -# 184| getStmt(0): [DeclStmt] declaration -# 184| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x55 -# 184| Type = [Struct] String -# 184| getVariable().getInitializer(): [Initializer] initializer for x55 -# 184| getExpr(): [ConstructorCall] call to String -# 184| Type = [VoidType] void -# 184| ValueCategory = prvalue -# 185| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 185| Type = [VoidType] void -# 185| ValueCategory = prvalue -# 185| getQualifier(): [VariableAccess] x55 -# 185| Type = [Struct] String -# 185| ValueCategory = lvalue -# 185| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 185| Conversion = [BoolConversion] conversion to bool -# 185| Type = [BoolType] bool -# 185| Value = [CStyleCast] 0 -# 185| ValueCategory = prvalue -# 186| getStmt(56): [DoStmt] do (...) ... -# 188| getCondition(): [Literal] 0 -# 188| Type = [IntType] int -# 188| Value = [Literal] 0 -# 188| ValueCategory = prvalue -# 186| getStmt(): [BlockStmt] { ... } -# 187| getStmt(0): [DeclStmt] declaration -# 187| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x56 -# 187| Type = [Struct] String -# 187| getVariable().getInitializer(): [Initializer] initializer for x56 -# 187| getExpr(): [ConstructorCall] call to String -# 187| Type = [VoidType] void -# 187| ValueCategory = prvalue -# 188| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 188| Type = [VoidType] void -# 188| ValueCategory = prvalue -# 188| getQualifier(): [VariableAccess] x56 -# 188| Type = [Struct] String -# 188| ValueCategory = lvalue -# 188| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 188| Conversion = [BoolConversion] conversion to bool -# 188| Type = [BoolType] bool -# 188| Value = [CStyleCast] 0 -# 188| ValueCategory = prvalue -# 189| getStmt(57): [DoStmt] do (...) ... -# 191| getCondition(): [Literal] 0 -# 191| Type = [IntType] int -# 191| Value = [Literal] 0 -# 191| ValueCategory = prvalue -# 189| getStmt(): [BlockStmt] { ... } -# 190| getStmt(0): [DeclStmt] declaration -# 190| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x57 -# 190| Type = [Struct] String -# 190| getVariable().getInitializer(): [Initializer] initializer for x57 -# 190| getExpr(): [ConstructorCall] call to String -# 190| Type = [VoidType] void -# 190| ValueCategory = prvalue -# 191| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 191| Type = [VoidType] void -# 191| ValueCategory = prvalue -# 191| getQualifier(): [VariableAccess] x57 -# 191| Type = [Struct] String -# 191| ValueCategory = lvalue -# 191| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 191| Conversion = [BoolConversion] conversion to bool -# 191| Type = [BoolType] bool -# 191| Value = [CStyleCast] 0 -# 191| ValueCategory = prvalue -# 192| getStmt(58): [DoStmt] do (...) ... -# 194| getCondition(): [Literal] 0 -# 194| Type = [IntType] int -# 194| Value = [Literal] 0 -# 194| ValueCategory = prvalue -# 192| getStmt(): [BlockStmt] { ... } -# 193| getStmt(0): [DeclStmt] declaration -# 193| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x58 -# 193| Type = [Struct] String -# 193| getVariable().getInitializer(): [Initializer] initializer for x58 -# 193| getExpr(): [ConstructorCall] call to String -# 193| Type = [VoidType] void -# 193| ValueCategory = prvalue -# 194| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 194| Type = [VoidType] void -# 194| ValueCategory = prvalue -# 194| getQualifier(): [VariableAccess] x58 -# 194| Type = [Struct] String -# 194| ValueCategory = lvalue -# 194| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 194| Conversion = [BoolConversion] conversion to bool -# 194| Type = [BoolType] bool -# 194| Value = [CStyleCast] 0 -# 194| ValueCategory = prvalue -# 195| getStmt(59): [DoStmt] do (...) ... -# 197| getCondition(): [Literal] 0 -# 197| Type = [IntType] int -# 197| Value = [Literal] 0 -# 197| ValueCategory = prvalue -# 195| getStmt(): [BlockStmt] { ... } -# 196| getStmt(0): [DeclStmt] declaration -# 196| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x59 -# 196| Type = [Struct] String -# 196| getVariable().getInitializer(): [Initializer] initializer for x59 -# 196| getExpr(): [ConstructorCall] call to String -# 196| Type = [VoidType] void -# 196| ValueCategory = prvalue -# 197| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 197| Type = [VoidType] void -# 197| ValueCategory = prvalue -# 197| getQualifier(): [VariableAccess] x59 -# 197| Type = [Struct] String -# 197| ValueCategory = lvalue -# 197| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 197| Conversion = [BoolConversion] conversion to bool -# 197| Type = [BoolType] bool -# 197| Value = [CStyleCast] 0 -# 197| ValueCategory = prvalue -# 198| getStmt(60): [DoStmt] do (...) ... -# 200| getCondition(): [Literal] 0 -# 200| Type = [IntType] int -# 200| Value = [Literal] 0 -# 200| ValueCategory = prvalue -# 198| getStmt(): [BlockStmt] { ... } -# 199| getStmt(0): [DeclStmt] declaration -# 199| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x60 -# 199| Type = [Struct] String -# 199| getVariable().getInitializer(): [Initializer] initializer for x60 -# 199| getExpr(): [ConstructorCall] call to String -# 199| Type = [VoidType] void -# 199| ValueCategory = prvalue -# 200| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 200| Type = [VoidType] void -# 200| ValueCategory = prvalue -# 200| getQualifier(): [VariableAccess] x60 -# 200| Type = [Struct] String -# 200| ValueCategory = lvalue -# 200| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 200| Conversion = [BoolConversion] conversion to bool -# 200| Type = [BoolType] bool -# 200| Value = [CStyleCast] 0 -# 200| ValueCategory = prvalue -# 201| getStmt(61): [DoStmt] do (...) ... -# 203| getCondition(): [Literal] 0 -# 203| Type = [IntType] int -# 203| Value = [Literal] 0 -# 203| ValueCategory = prvalue -# 201| getStmt(): [BlockStmt] { ... } -# 202| getStmt(0): [DeclStmt] declaration -# 202| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x61 -# 202| Type = [Struct] String -# 202| getVariable().getInitializer(): [Initializer] initializer for x61 -# 202| getExpr(): [ConstructorCall] call to String -# 202| Type = [VoidType] void -# 202| ValueCategory = prvalue -# 203| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 203| Type = [VoidType] void -# 203| ValueCategory = prvalue -# 203| getQualifier(): [VariableAccess] x61 -# 203| Type = [Struct] String -# 203| ValueCategory = lvalue -# 203| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 203| Conversion = [BoolConversion] conversion to bool -# 203| Type = [BoolType] bool -# 203| Value = [CStyleCast] 0 -# 203| ValueCategory = prvalue -# 204| getStmt(62): [DoStmt] do (...) ... -# 206| getCondition(): [Literal] 0 -# 206| Type = [IntType] int -# 206| Value = [Literal] 0 -# 206| ValueCategory = prvalue -# 204| getStmt(): [BlockStmt] { ... } -# 205| getStmt(0): [DeclStmt] declaration -# 205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x62 -# 205| Type = [Struct] String -# 205| getVariable().getInitializer(): [Initializer] initializer for x62 -# 205| getExpr(): [ConstructorCall] call to String -# 205| Type = [VoidType] void -# 205| ValueCategory = prvalue -# 206| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 206| Type = [VoidType] void -# 206| ValueCategory = prvalue -# 206| getQualifier(): [VariableAccess] x62 -# 206| Type = [Struct] String -# 206| ValueCategory = lvalue -# 206| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 206| Conversion = [BoolConversion] conversion to bool -# 206| Type = [BoolType] bool -# 206| Value = [CStyleCast] 0 -# 206| ValueCategory = prvalue -# 207| getStmt(63): [DoStmt] do (...) ... -# 209| getCondition(): [Literal] 0 -# 209| Type = [IntType] int -# 209| Value = [Literal] 0 -# 209| ValueCategory = prvalue -# 207| getStmt(): [BlockStmt] { ... } -# 208| getStmt(0): [DeclStmt] declaration -# 208| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x63 -# 208| Type = [Struct] String -# 208| getVariable().getInitializer(): [Initializer] initializer for x63 -# 208| getExpr(): [ConstructorCall] call to String -# 208| Type = [VoidType] void -# 208| ValueCategory = prvalue -# 209| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 209| Type = [VoidType] void -# 209| ValueCategory = prvalue -# 209| getQualifier(): [VariableAccess] x63 -# 209| Type = [Struct] String -# 209| ValueCategory = lvalue -# 209| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 209| Conversion = [BoolConversion] conversion to bool -# 209| Type = [BoolType] bool -# 209| Value = [CStyleCast] 0 -# 209| ValueCategory = prvalue -# 210| getStmt(64): [DoStmt] do (...) ... -# 212| getCondition(): [Literal] 0 -# 212| Type = [IntType] int -# 212| Value = [Literal] 0 -# 212| ValueCategory = prvalue -# 210| getStmt(): [BlockStmt] { ... } -# 211| getStmt(0): [DeclStmt] declaration -# 211| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x64 -# 211| Type = [Struct] String -# 211| getVariable().getInitializer(): [Initializer] initializer for x64 -# 211| getExpr(): [ConstructorCall] call to String -# 211| Type = [VoidType] void -# 211| ValueCategory = prvalue -# 212| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 212| Type = [VoidType] void -# 212| ValueCategory = prvalue -# 212| getQualifier(): [VariableAccess] x64 -# 212| Type = [Struct] String -# 212| ValueCategory = lvalue -# 212| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 212| Conversion = [BoolConversion] conversion to bool -# 212| Type = [BoolType] bool -# 212| Value = [CStyleCast] 0 -# 212| ValueCategory = prvalue -# 213| getStmt(65): [DoStmt] do (...) ... -# 215| getCondition(): [Literal] 0 -# 215| Type = [IntType] int -# 215| Value = [Literal] 0 -# 215| ValueCategory = prvalue -# 213| getStmt(): [BlockStmt] { ... } -# 214| getStmt(0): [DeclStmt] declaration -# 214| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x65 -# 214| Type = [Struct] String -# 214| getVariable().getInitializer(): [Initializer] initializer for x65 -# 214| getExpr(): [ConstructorCall] call to String -# 214| Type = [VoidType] void -# 214| ValueCategory = prvalue -# 215| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 215| Type = [VoidType] void -# 215| ValueCategory = prvalue -# 215| getQualifier(): [VariableAccess] x65 -# 215| Type = [Struct] String -# 215| ValueCategory = lvalue -# 215| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 215| Conversion = [BoolConversion] conversion to bool -# 215| Type = [BoolType] bool -# 215| Value = [CStyleCast] 0 -# 215| ValueCategory = prvalue -# 216| getStmt(66): [DoStmt] do (...) ... -# 218| getCondition(): [Literal] 0 -# 218| Type = [IntType] int -# 218| Value = [Literal] 0 -# 218| ValueCategory = prvalue -# 216| getStmt(): [BlockStmt] { ... } -# 217| getStmt(0): [DeclStmt] declaration -# 217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x66 -# 217| Type = [Struct] String -# 217| getVariable().getInitializer(): [Initializer] initializer for x66 -# 217| getExpr(): [ConstructorCall] call to String -# 217| Type = [VoidType] void -# 217| ValueCategory = prvalue -# 218| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 218| Type = [VoidType] void -# 218| ValueCategory = prvalue -# 218| getQualifier(): [VariableAccess] x66 -# 218| Type = [Struct] String -# 218| ValueCategory = lvalue -# 218| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 218| Conversion = [BoolConversion] conversion to bool -# 218| Type = [BoolType] bool -# 218| Value = [CStyleCast] 0 -# 218| ValueCategory = prvalue -# 219| getStmt(67): [DoStmt] do (...) ... -# 221| getCondition(): [Literal] 0 -# 221| Type = [IntType] int -# 221| Value = [Literal] 0 -# 221| ValueCategory = prvalue -# 219| getStmt(): [BlockStmt] { ... } -# 220| getStmt(0): [DeclStmt] declaration -# 220| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x67 -# 220| Type = [Struct] String -# 220| getVariable().getInitializer(): [Initializer] initializer for x67 -# 220| getExpr(): [ConstructorCall] call to String -# 220| Type = [VoidType] void -# 220| ValueCategory = prvalue -# 221| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 221| Type = [VoidType] void -# 221| ValueCategory = prvalue -# 221| getQualifier(): [VariableAccess] x67 -# 221| Type = [Struct] String -# 221| ValueCategory = lvalue -# 221| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 221| Conversion = [BoolConversion] conversion to bool -# 221| Type = [BoolType] bool -# 221| Value = [CStyleCast] 0 -# 221| ValueCategory = prvalue -# 222| getStmt(68): [DoStmt] do (...) ... -# 224| getCondition(): [Literal] 0 -# 224| Type = [IntType] int -# 224| Value = [Literal] 0 -# 224| ValueCategory = prvalue -# 222| getStmt(): [BlockStmt] { ... } -# 223| getStmt(0): [DeclStmt] declaration -# 223| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x68 -# 223| Type = [Struct] String -# 223| getVariable().getInitializer(): [Initializer] initializer for x68 -# 223| getExpr(): [ConstructorCall] call to String -# 223| Type = [VoidType] void -# 223| ValueCategory = prvalue -# 224| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 224| Type = [VoidType] void -# 224| ValueCategory = prvalue -# 224| getQualifier(): [VariableAccess] x68 -# 224| Type = [Struct] String -# 224| ValueCategory = lvalue -# 224| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 224| Conversion = [BoolConversion] conversion to bool -# 224| Type = [BoolType] bool -# 224| Value = [CStyleCast] 0 -# 224| ValueCategory = prvalue -# 225| getStmt(69): [DoStmt] do (...) ... -# 227| getCondition(): [Literal] 0 -# 227| Type = [IntType] int -# 227| Value = [Literal] 0 -# 227| ValueCategory = prvalue -# 225| getStmt(): [BlockStmt] { ... } -# 226| getStmt(0): [DeclStmt] declaration -# 226| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x69 -# 226| Type = [Struct] String -# 226| getVariable().getInitializer(): [Initializer] initializer for x69 -# 226| getExpr(): [ConstructorCall] call to String -# 226| Type = [VoidType] void -# 226| ValueCategory = prvalue -# 227| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 227| Type = [VoidType] void -# 227| ValueCategory = prvalue -# 227| getQualifier(): [VariableAccess] x69 -# 227| Type = [Struct] String -# 227| ValueCategory = lvalue -# 227| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 227| Conversion = [BoolConversion] conversion to bool -# 227| Type = [BoolType] bool -# 227| Value = [CStyleCast] 0 -# 227| ValueCategory = prvalue -# 228| getStmt(70): [DoStmt] do (...) ... -# 230| getCondition(): [Literal] 0 -# 230| Type = [IntType] int -# 230| Value = [Literal] 0 -# 230| ValueCategory = prvalue -# 228| getStmt(): [BlockStmt] { ... } -# 229| getStmt(0): [DeclStmt] declaration -# 229| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x70 -# 229| Type = [Struct] String -# 229| getVariable().getInitializer(): [Initializer] initializer for x70 -# 229| getExpr(): [ConstructorCall] call to String -# 229| Type = [VoidType] void -# 229| ValueCategory = prvalue -# 230| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 230| Type = [VoidType] void -# 230| ValueCategory = prvalue -# 230| getQualifier(): [VariableAccess] x70 -# 230| Type = [Struct] String -# 230| ValueCategory = lvalue -# 230| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 230| Conversion = [BoolConversion] conversion to bool -# 230| Type = [BoolType] bool -# 230| Value = [CStyleCast] 0 -# 230| ValueCategory = prvalue -# 231| getStmt(71): [DoStmt] do (...) ... -# 233| getCondition(): [Literal] 0 -# 233| Type = [IntType] int -# 233| Value = [Literal] 0 -# 233| ValueCategory = prvalue -# 231| getStmt(): [BlockStmt] { ... } -# 232| getStmt(0): [DeclStmt] declaration -# 232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x71 -# 232| Type = [Struct] String -# 232| getVariable().getInitializer(): [Initializer] initializer for x71 -# 232| getExpr(): [ConstructorCall] call to String -# 232| Type = [VoidType] void -# 232| ValueCategory = prvalue -# 233| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 233| Type = [VoidType] void -# 233| ValueCategory = prvalue -# 233| getQualifier(): [VariableAccess] x71 -# 233| Type = [Struct] String -# 233| ValueCategory = lvalue -# 233| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 233| Conversion = [BoolConversion] conversion to bool -# 233| Type = [BoolType] bool -# 233| Value = [CStyleCast] 0 -# 233| ValueCategory = prvalue -# 234| getStmt(72): [DoStmt] do (...) ... -# 236| getCondition(): [Literal] 0 -# 236| Type = [IntType] int -# 236| Value = [Literal] 0 -# 236| ValueCategory = prvalue -# 234| getStmt(): [BlockStmt] { ... } -# 235| getStmt(0): [DeclStmt] declaration -# 235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x72 -# 235| Type = [Struct] String -# 235| getVariable().getInitializer(): [Initializer] initializer for x72 -# 235| getExpr(): [ConstructorCall] call to String -# 235| Type = [VoidType] void -# 235| ValueCategory = prvalue -# 236| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 236| Type = [VoidType] void -# 236| ValueCategory = prvalue -# 236| getQualifier(): [VariableAccess] x72 -# 236| Type = [Struct] String -# 236| ValueCategory = lvalue -# 236| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 236| Conversion = [BoolConversion] conversion to bool -# 236| Type = [BoolType] bool -# 236| Value = [CStyleCast] 0 -# 236| ValueCategory = prvalue -# 237| getStmt(73): [DoStmt] do (...) ... -# 239| getCondition(): [Literal] 0 -# 239| Type = [IntType] int -# 239| Value = [Literal] 0 -# 239| ValueCategory = prvalue -# 237| getStmt(): [BlockStmt] { ... } -# 238| getStmt(0): [DeclStmt] declaration -# 238| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x73 -# 238| Type = [Struct] String -# 238| getVariable().getInitializer(): [Initializer] initializer for x73 -# 238| getExpr(): [ConstructorCall] call to String -# 238| Type = [VoidType] void -# 238| ValueCategory = prvalue -# 239| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 239| Type = [VoidType] void -# 239| ValueCategory = prvalue -# 239| getQualifier(): [VariableAccess] x73 -# 239| Type = [Struct] String -# 239| ValueCategory = lvalue -# 239| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 239| Conversion = [BoolConversion] conversion to bool -# 239| Type = [BoolType] bool -# 239| Value = [CStyleCast] 0 -# 239| ValueCategory = prvalue -# 240| getStmt(74): [DoStmt] do (...) ... -# 242| getCondition(): [Literal] 0 -# 242| Type = [IntType] int -# 242| Value = [Literal] 0 -# 242| ValueCategory = prvalue -# 240| getStmt(): [BlockStmt] { ... } -# 241| getStmt(0): [DeclStmt] declaration -# 241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x74 -# 241| Type = [Struct] String -# 241| getVariable().getInitializer(): [Initializer] initializer for x74 -# 241| getExpr(): [ConstructorCall] call to String -# 241| Type = [VoidType] void -# 241| ValueCategory = prvalue -# 242| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 242| Type = [VoidType] void -# 242| ValueCategory = prvalue -# 242| getQualifier(): [VariableAccess] x74 -# 242| Type = [Struct] String -# 242| ValueCategory = lvalue -# 242| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 242| Conversion = [BoolConversion] conversion to bool -# 242| Type = [BoolType] bool -# 242| Value = [CStyleCast] 0 -# 242| ValueCategory = prvalue -# 243| getStmt(75): [DoStmt] do (...) ... -# 245| getCondition(): [Literal] 0 -# 245| Type = [IntType] int -# 245| Value = [Literal] 0 -# 245| ValueCategory = prvalue -# 243| getStmt(): [BlockStmt] { ... } -# 244| getStmt(0): [DeclStmt] declaration -# 244| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x75 -# 244| Type = [Struct] String -# 244| getVariable().getInitializer(): [Initializer] initializer for x75 -# 244| getExpr(): [ConstructorCall] call to String -# 244| Type = [VoidType] void -# 244| ValueCategory = prvalue -# 245| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 245| Type = [VoidType] void -# 245| ValueCategory = prvalue -# 245| getQualifier(): [VariableAccess] x75 -# 245| Type = [Struct] String -# 245| ValueCategory = lvalue -# 245| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 245| Conversion = [BoolConversion] conversion to bool -# 245| Type = [BoolType] bool -# 245| Value = [CStyleCast] 0 -# 245| ValueCategory = prvalue -# 246| getStmt(76): [DoStmt] do (...) ... -# 248| getCondition(): [Literal] 0 -# 248| Type = [IntType] int -# 248| Value = [Literal] 0 -# 248| ValueCategory = prvalue -# 246| getStmt(): [BlockStmt] { ... } -# 247| getStmt(0): [DeclStmt] declaration -# 247| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x76 -# 247| Type = [Struct] String -# 247| getVariable().getInitializer(): [Initializer] initializer for x76 -# 247| getExpr(): [ConstructorCall] call to String -# 247| Type = [VoidType] void -# 247| ValueCategory = prvalue -# 248| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 248| Type = [VoidType] void -# 248| ValueCategory = prvalue -# 248| getQualifier(): [VariableAccess] x76 -# 248| Type = [Struct] String -# 248| ValueCategory = lvalue -# 248| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 248| Conversion = [BoolConversion] conversion to bool -# 248| Type = [BoolType] bool -# 248| Value = [CStyleCast] 0 -# 248| ValueCategory = prvalue -# 249| getStmt(77): [DoStmt] do (...) ... -# 251| getCondition(): [Literal] 0 -# 251| Type = [IntType] int -# 251| Value = [Literal] 0 -# 251| ValueCategory = prvalue -# 249| getStmt(): [BlockStmt] { ... } -# 250| getStmt(0): [DeclStmt] declaration -# 250| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x77 -# 250| Type = [Struct] String -# 250| getVariable().getInitializer(): [Initializer] initializer for x77 -# 250| getExpr(): [ConstructorCall] call to String -# 250| Type = [VoidType] void -# 250| ValueCategory = prvalue -# 251| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 251| Type = [VoidType] void -# 251| ValueCategory = prvalue -# 251| getQualifier(): [VariableAccess] x77 -# 251| Type = [Struct] String -# 251| ValueCategory = lvalue -# 251| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 251| Conversion = [BoolConversion] conversion to bool -# 251| Type = [BoolType] bool -# 251| Value = [CStyleCast] 0 -# 251| ValueCategory = prvalue -# 252| getStmt(78): [DoStmt] do (...) ... -# 254| getCondition(): [Literal] 0 -# 254| Type = [IntType] int -# 254| Value = [Literal] 0 -# 254| ValueCategory = prvalue -# 252| getStmt(): [BlockStmt] { ... } -# 253| getStmt(0): [DeclStmt] declaration -# 253| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x78 -# 253| Type = [Struct] String -# 253| getVariable().getInitializer(): [Initializer] initializer for x78 -# 253| getExpr(): [ConstructorCall] call to String -# 253| Type = [VoidType] void -# 253| ValueCategory = prvalue -# 254| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 254| Type = [VoidType] void -# 254| ValueCategory = prvalue -# 254| getQualifier(): [VariableAccess] x78 -# 254| Type = [Struct] String -# 254| ValueCategory = lvalue -# 254| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 254| Conversion = [BoolConversion] conversion to bool -# 254| Type = [BoolType] bool -# 254| Value = [CStyleCast] 0 -# 254| ValueCategory = prvalue -# 255| getStmt(79): [DoStmt] do (...) ... -# 257| getCondition(): [Literal] 0 -# 257| Type = [IntType] int -# 257| Value = [Literal] 0 -# 257| ValueCategory = prvalue -# 255| getStmt(): [BlockStmt] { ... } -# 256| getStmt(0): [DeclStmt] declaration -# 256| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x79 -# 256| Type = [Struct] String -# 256| getVariable().getInitializer(): [Initializer] initializer for x79 -# 256| getExpr(): [ConstructorCall] call to String -# 256| Type = [VoidType] void -# 256| ValueCategory = prvalue -# 257| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 257| Type = [VoidType] void -# 257| ValueCategory = prvalue -# 257| getQualifier(): [VariableAccess] x79 -# 257| Type = [Struct] String -# 257| ValueCategory = lvalue -# 257| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 257| Conversion = [BoolConversion] conversion to bool -# 257| Type = [BoolType] bool -# 257| Value = [CStyleCast] 0 -# 257| ValueCategory = prvalue -# 258| getStmt(80): [DoStmt] do (...) ... -# 260| getCondition(): [Literal] 0 -# 260| Type = [IntType] int -# 260| Value = [Literal] 0 -# 260| ValueCategory = prvalue -# 258| getStmt(): [BlockStmt] { ... } -# 259| getStmt(0): [DeclStmt] declaration -# 259| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x80 -# 259| Type = [Struct] String -# 259| getVariable().getInitializer(): [Initializer] initializer for x80 -# 259| getExpr(): [ConstructorCall] call to String -# 259| Type = [VoidType] void -# 259| ValueCategory = prvalue -# 260| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 260| Type = [VoidType] void -# 260| ValueCategory = prvalue -# 260| getQualifier(): [VariableAccess] x80 -# 260| Type = [Struct] String -# 260| ValueCategory = lvalue -# 260| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 260| Conversion = [BoolConversion] conversion to bool -# 260| Type = [BoolType] bool -# 260| Value = [CStyleCast] 0 -# 260| ValueCategory = prvalue -# 261| getStmt(81): [DoStmt] do (...) ... -# 263| getCondition(): [Literal] 0 -# 263| Type = [IntType] int -# 263| Value = [Literal] 0 -# 263| ValueCategory = prvalue -# 261| getStmt(): [BlockStmt] { ... } -# 262| getStmt(0): [DeclStmt] declaration -# 262| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x81 -# 262| Type = [Struct] String -# 262| getVariable().getInitializer(): [Initializer] initializer for x81 -# 262| getExpr(): [ConstructorCall] call to String -# 262| Type = [VoidType] void -# 262| ValueCategory = prvalue -# 263| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 263| Type = [VoidType] void -# 263| ValueCategory = prvalue -# 263| getQualifier(): [VariableAccess] x81 -# 263| Type = [Struct] String -# 263| ValueCategory = lvalue -# 263| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 263| Conversion = [BoolConversion] conversion to bool -# 263| Type = [BoolType] bool -# 263| Value = [CStyleCast] 0 -# 263| ValueCategory = prvalue -# 264| getStmt(82): [DoStmt] do (...) ... -# 266| getCondition(): [Literal] 0 -# 266| Type = [IntType] int -# 266| Value = [Literal] 0 -# 266| ValueCategory = prvalue -# 264| getStmt(): [BlockStmt] { ... } -# 265| getStmt(0): [DeclStmt] declaration -# 265| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x82 -# 265| Type = [Struct] String -# 265| getVariable().getInitializer(): [Initializer] initializer for x82 -# 265| getExpr(): [ConstructorCall] call to String -# 265| Type = [VoidType] void -# 265| ValueCategory = prvalue -# 266| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 266| Type = [VoidType] void -# 266| ValueCategory = prvalue -# 266| getQualifier(): [VariableAccess] x82 -# 266| Type = [Struct] String -# 266| ValueCategory = lvalue -# 266| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 266| Conversion = [BoolConversion] conversion to bool -# 266| Type = [BoolType] bool -# 266| Value = [CStyleCast] 0 -# 266| ValueCategory = prvalue -# 267| getStmt(83): [DoStmt] do (...) ... -# 269| getCondition(): [Literal] 0 -# 269| Type = [IntType] int -# 269| Value = [Literal] 0 -# 269| ValueCategory = prvalue -# 267| getStmt(): [BlockStmt] { ... } -# 268| getStmt(0): [DeclStmt] declaration -# 268| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x83 -# 268| Type = [Struct] String -# 268| getVariable().getInitializer(): [Initializer] initializer for x83 -# 268| getExpr(): [ConstructorCall] call to String -# 268| Type = [VoidType] void -# 268| ValueCategory = prvalue -# 269| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 269| Type = [VoidType] void -# 269| ValueCategory = prvalue -# 269| getQualifier(): [VariableAccess] x83 -# 269| Type = [Struct] String -# 269| ValueCategory = lvalue -# 269| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 269| Conversion = [BoolConversion] conversion to bool -# 269| Type = [BoolType] bool -# 269| Value = [CStyleCast] 0 -# 269| ValueCategory = prvalue -# 270| getStmt(84): [DoStmt] do (...) ... -# 272| getCondition(): [Literal] 0 -# 272| Type = [IntType] int -# 272| Value = [Literal] 0 -# 272| ValueCategory = prvalue -# 270| getStmt(): [BlockStmt] { ... } -# 271| getStmt(0): [DeclStmt] declaration -# 271| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x84 -# 271| Type = [Struct] String -# 271| getVariable().getInitializer(): [Initializer] initializer for x84 -# 271| getExpr(): [ConstructorCall] call to String -# 271| Type = [VoidType] void -# 271| ValueCategory = prvalue -# 272| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 272| Type = [VoidType] void -# 272| ValueCategory = prvalue -# 272| getQualifier(): [VariableAccess] x84 -# 272| Type = [Struct] String -# 272| ValueCategory = lvalue -# 272| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 272| Conversion = [BoolConversion] conversion to bool -# 272| Type = [BoolType] bool -# 272| Value = [CStyleCast] 0 -# 272| ValueCategory = prvalue -# 273| getStmt(85): [DoStmt] do (...) ... -# 275| getCondition(): [Literal] 0 -# 275| Type = [IntType] int -# 275| Value = [Literal] 0 -# 275| ValueCategory = prvalue -# 273| getStmt(): [BlockStmt] { ... } -# 274| getStmt(0): [DeclStmt] declaration -# 274| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x85 -# 274| Type = [Struct] String -# 274| getVariable().getInitializer(): [Initializer] initializer for x85 -# 274| getExpr(): [ConstructorCall] call to String -# 274| Type = [VoidType] void -# 274| ValueCategory = prvalue -# 275| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 275| Type = [VoidType] void -# 275| ValueCategory = prvalue -# 275| getQualifier(): [VariableAccess] x85 -# 275| Type = [Struct] String -# 275| ValueCategory = lvalue -# 275| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 275| Conversion = [BoolConversion] conversion to bool -# 275| Type = [BoolType] bool -# 275| Value = [CStyleCast] 0 -# 275| ValueCategory = prvalue -# 276| getStmt(86): [DoStmt] do (...) ... -# 278| getCondition(): [Literal] 0 -# 278| Type = [IntType] int -# 278| Value = [Literal] 0 -# 278| ValueCategory = prvalue -# 276| getStmt(): [BlockStmt] { ... } -# 277| getStmt(0): [DeclStmt] declaration -# 277| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x86 -# 277| Type = [Struct] String -# 277| getVariable().getInitializer(): [Initializer] initializer for x86 -# 277| getExpr(): [ConstructorCall] call to String -# 277| Type = [VoidType] void -# 277| ValueCategory = prvalue -# 278| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 278| Type = [VoidType] void -# 278| ValueCategory = prvalue -# 278| getQualifier(): [VariableAccess] x86 -# 278| Type = [Struct] String -# 278| ValueCategory = lvalue -# 278| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 278| Conversion = [BoolConversion] conversion to bool -# 278| Type = [BoolType] bool -# 278| Value = [CStyleCast] 0 -# 278| ValueCategory = prvalue -# 279| getStmt(87): [DoStmt] do (...) ... -# 281| getCondition(): [Literal] 0 -# 281| Type = [IntType] int -# 281| Value = [Literal] 0 -# 281| ValueCategory = prvalue -# 279| getStmt(): [BlockStmt] { ... } -# 280| getStmt(0): [DeclStmt] declaration -# 280| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x87 -# 280| Type = [Struct] String -# 280| getVariable().getInitializer(): [Initializer] initializer for x87 -# 280| getExpr(): [ConstructorCall] call to String -# 280| Type = [VoidType] void -# 280| ValueCategory = prvalue -# 281| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 281| Type = [VoidType] void -# 281| ValueCategory = prvalue -# 281| getQualifier(): [VariableAccess] x87 -# 281| Type = [Struct] String -# 281| ValueCategory = lvalue -# 281| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 281| Conversion = [BoolConversion] conversion to bool -# 281| Type = [BoolType] bool -# 281| Value = [CStyleCast] 0 -# 281| ValueCategory = prvalue -# 282| getStmt(88): [DoStmt] do (...) ... -# 284| getCondition(): [Literal] 0 -# 284| Type = [IntType] int -# 284| Value = [Literal] 0 -# 284| ValueCategory = prvalue -# 282| getStmt(): [BlockStmt] { ... } -# 283| getStmt(0): [DeclStmt] declaration -# 283| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x88 -# 283| Type = [Struct] String -# 283| getVariable().getInitializer(): [Initializer] initializer for x88 -# 283| getExpr(): [ConstructorCall] call to String -# 283| Type = [VoidType] void -# 283| ValueCategory = prvalue -# 284| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 284| Type = [VoidType] void -# 284| ValueCategory = prvalue -# 284| getQualifier(): [VariableAccess] x88 -# 284| Type = [Struct] String -# 284| ValueCategory = lvalue -# 284| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 284| Conversion = [BoolConversion] conversion to bool -# 284| Type = [BoolType] bool -# 284| Value = [CStyleCast] 0 -# 284| ValueCategory = prvalue -# 285| getStmt(89): [DoStmt] do (...) ... -# 287| getCondition(): [Literal] 0 -# 287| Type = [IntType] int -# 287| Value = [Literal] 0 -# 287| ValueCategory = prvalue -# 285| getStmt(): [BlockStmt] { ... } -# 286| getStmt(0): [DeclStmt] declaration -# 286| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x89 -# 286| Type = [Struct] String -# 286| getVariable().getInitializer(): [Initializer] initializer for x89 -# 286| getExpr(): [ConstructorCall] call to String -# 286| Type = [VoidType] void -# 286| ValueCategory = prvalue -# 287| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 287| Type = [VoidType] void -# 287| ValueCategory = prvalue -# 287| getQualifier(): [VariableAccess] x89 -# 287| Type = [Struct] String -# 287| ValueCategory = lvalue -# 287| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 287| Conversion = [BoolConversion] conversion to bool -# 287| Type = [BoolType] bool -# 287| Value = [CStyleCast] 0 -# 287| ValueCategory = prvalue -# 288| getStmt(90): [DoStmt] do (...) ... -# 290| getCondition(): [Literal] 0 -# 290| Type = [IntType] int -# 290| Value = [Literal] 0 -# 290| ValueCategory = prvalue -# 288| getStmt(): [BlockStmt] { ... } -# 289| getStmt(0): [DeclStmt] declaration -# 289| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x90 -# 289| Type = [Struct] String -# 289| getVariable().getInitializer(): [Initializer] initializer for x90 -# 289| getExpr(): [ConstructorCall] call to String -# 289| Type = [VoidType] void -# 289| ValueCategory = prvalue -# 290| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 290| Type = [VoidType] void -# 290| ValueCategory = prvalue -# 290| getQualifier(): [VariableAccess] x90 -# 290| Type = [Struct] String -# 290| ValueCategory = lvalue -# 290| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 290| Conversion = [BoolConversion] conversion to bool -# 290| Type = [BoolType] bool -# 290| Value = [CStyleCast] 0 -# 290| ValueCategory = prvalue -# 291| getStmt(91): [DoStmt] do (...) ... -# 293| getCondition(): [Literal] 0 -# 293| Type = [IntType] int -# 293| Value = [Literal] 0 -# 293| ValueCategory = prvalue -# 291| getStmt(): [BlockStmt] { ... } -# 292| getStmt(0): [DeclStmt] declaration -# 292| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x91 -# 292| Type = [Struct] String -# 292| getVariable().getInitializer(): [Initializer] initializer for x91 -# 292| getExpr(): [ConstructorCall] call to String -# 292| Type = [VoidType] void -# 292| ValueCategory = prvalue -# 293| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 293| Type = [VoidType] void -# 293| ValueCategory = prvalue -# 293| getQualifier(): [VariableAccess] x91 -# 293| Type = [Struct] String -# 293| ValueCategory = lvalue -# 293| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 293| Conversion = [BoolConversion] conversion to bool -# 293| Type = [BoolType] bool -# 293| Value = [CStyleCast] 0 -# 293| ValueCategory = prvalue -# 294| getStmt(92): [DoStmt] do (...) ... -# 296| getCondition(): [Literal] 0 -# 296| Type = [IntType] int -# 296| Value = [Literal] 0 -# 296| ValueCategory = prvalue -# 294| getStmt(): [BlockStmt] { ... } -# 295| getStmt(0): [DeclStmt] declaration -# 295| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x92 -# 295| Type = [Struct] String -# 295| getVariable().getInitializer(): [Initializer] initializer for x92 -# 295| getExpr(): [ConstructorCall] call to String -# 295| Type = [VoidType] void -# 295| ValueCategory = prvalue -# 296| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 296| Type = [VoidType] void -# 296| ValueCategory = prvalue -# 296| getQualifier(): [VariableAccess] x92 -# 296| Type = [Struct] String -# 296| ValueCategory = lvalue -# 296| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 296| Conversion = [BoolConversion] conversion to bool -# 296| Type = [BoolType] bool -# 296| Value = [CStyleCast] 0 -# 296| ValueCategory = prvalue -# 297| getStmt(93): [DoStmt] do (...) ... -# 299| getCondition(): [Literal] 0 -# 299| Type = [IntType] int -# 299| Value = [Literal] 0 -# 299| ValueCategory = prvalue -# 297| getStmt(): [BlockStmt] { ... } -# 298| getStmt(0): [DeclStmt] declaration -# 298| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x93 -# 298| Type = [Struct] String -# 298| getVariable().getInitializer(): [Initializer] initializer for x93 -# 298| getExpr(): [ConstructorCall] call to String -# 298| Type = [VoidType] void -# 298| ValueCategory = prvalue -# 299| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 299| Type = [VoidType] void -# 299| ValueCategory = prvalue -# 299| getQualifier(): [VariableAccess] x93 -# 299| Type = [Struct] String -# 299| ValueCategory = lvalue -# 299| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 299| Conversion = [BoolConversion] conversion to bool -# 299| Type = [BoolType] bool -# 299| Value = [CStyleCast] 0 -# 299| ValueCategory = prvalue -# 300| getStmt(94): [DoStmt] do (...) ... -# 302| getCondition(): [Literal] 0 -# 302| Type = [IntType] int -# 302| Value = [Literal] 0 -# 302| ValueCategory = prvalue -# 300| getStmt(): [BlockStmt] { ... } -# 301| getStmt(0): [DeclStmt] declaration -# 301| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x94 -# 301| Type = [Struct] String -# 301| getVariable().getInitializer(): [Initializer] initializer for x94 -# 301| getExpr(): [ConstructorCall] call to String -# 301| Type = [VoidType] void -# 301| ValueCategory = prvalue -# 302| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 302| Type = [VoidType] void -# 302| ValueCategory = prvalue -# 302| getQualifier(): [VariableAccess] x94 -# 302| Type = [Struct] String -# 302| ValueCategory = lvalue -# 302| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 302| Conversion = [BoolConversion] conversion to bool -# 302| Type = [BoolType] bool -# 302| Value = [CStyleCast] 0 -# 302| ValueCategory = prvalue -# 303| getStmt(95): [DoStmt] do (...) ... -# 305| getCondition(): [Literal] 0 -# 305| Type = [IntType] int -# 305| Value = [Literal] 0 -# 305| ValueCategory = prvalue -# 303| getStmt(): [BlockStmt] { ... } -# 304| getStmt(0): [DeclStmt] declaration -# 304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x95 -# 304| Type = [Struct] String -# 304| getVariable().getInitializer(): [Initializer] initializer for x95 -# 304| getExpr(): [ConstructorCall] call to String -# 304| Type = [VoidType] void -# 304| ValueCategory = prvalue -# 305| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 305| Type = [VoidType] void -# 305| ValueCategory = prvalue -# 305| getQualifier(): [VariableAccess] x95 -# 305| Type = [Struct] String -# 305| ValueCategory = lvalue -# 305| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 305| Conversion = [BoolConversion] conversion to bool -# 305| Type = [BoolType] bool -# 305| Value = [CStyleCast] 0 -# 305| ValueCategory = prvalue -# 306| getStmt(96): [DoStmt] do (...) ... -# 308| getCondition(): [Literal] 0 -# 308| Type = [IntType] int -# 308| Value = [Literal] 0 -# 308| ValueCategory = prvalue -# 306| getStmt(): [BlockStmt] { ... } -# 307| getStmt(0): [DeclStmt] declaration -# 307| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x96 -# 307| Type = [Struct] String -# 307| getVariable().getInitializer(): [Initializer] initializer for x96 -# 307| getExpr(): [ConstructorCall] call to String -# 307| Type = [VoidType] void -# 307| ValueCategory = prvalue -# 308| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 308| Type = [VoidType] void -# 308| ValueCategory = prvalue -# 308| getQualifier(): [VariableAccess] x96 -# 308| Type = [Struct] String -# 308| ValueCategory = lvalue -# 308| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 308| Conversion = [BoolConversion] conversion to bool -# 308| Type = [BoolType] bool -# 308| Value = [CStyleCast] 0 -# 308| ValueCategory = prvalue -# 309| getStmt(97): [DoStmt] do (...) ... -# 311| getCondition(): [Literal] 0 -# 311| Type = [IntType] int -# 311| Value = [Literal] 0 -# 311| ValueCategory = prvalue -# 309| getStmt(): [BlockStmt] { ... } -# 310| getStmt(0): [DeclStmt] declaration -# 310| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x97 -# 310| Type = [Struct] String -# 310| getVariable().getInitializer(): [Initializer] initializer for x97 -# 310| getExpr(): [ConstructorCall] call to String -# 310| Type = [VoidType] void -# 310| ValueCategory = prvalue -# 311| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 311| Type = [VoidType] void -# 311| ValueCategory = prvalue -# 311| getQualifier(): [VariableAccess] x97 -# 311| Type = [Struct] String -# 311| ValueCategory = lvalue -# 311| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 311| Conversion = [BoolConversion] conversion to bool -# 311| Type = [BoolType] bool -# 311| Value = [CStyleCast] 0 -# 311| ValueCategory = prvalue -# 312| getStmt(98): [DoStmt] do (...) ... -# 314| getCondition(): [Literal] 0 -# 314| Type = [IntType] int -# 314| Value = [Literal] 0 -# 314| ValueCategory = prvalue -# 312| getStmt(): [BlockStmt] { ... } -# 313| getStmt(0): [DeclStmt] declaration -# 313| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x98 -# 313| Type = [Struct] String -# 313| getVariable().getInitializer(): [Initializer] initializer for x98 -# 313| getExpr(): [ConstructorCall] call to String -# 313| Type = [VoidType] void -# 313| ValueCategory = prvalue -# 314| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 314| Type = [VoidType] void -# 314| ValueCategory = prvalue -# 314| getQualifier(): [VariableAccess] x98 -# 314| Type = [Struct] String -# 314| ValueCategory = lvalue -# 314| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 314| Conversion = [BoolConversion] conversion to bool -# 314| Type = [BoolType] bool -# 314| Value = [CStyleCast] 0 -# 314| ValueCategory = prvalue -# 315| getStmt(99): [DoStmt] do (...) ... -# 317| getCondition(): [Literal] 0 -# 317| Type = [IntType] int -# 317| Value = [Literal] 0 -# 317| ValueCategory = prvalue -# 315| getStmt(): [BlockStmt] { ... } -# 316| getStmt(0): [DeclStmt] declaration -# 316| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x99 -# 316| Type = [Struct] String -# 316| getVariable().getInitializer(): [Initializer] initializer for x99 -# 316| getExpr(): [ConstructorCall] call to String -# 316| Type = [VoidType] void -# 316| ValueCategory = prvalue -# 317| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 317| Type = [VoidType] void -# 317| ValueCategory = prvalue -# 317| getQualifier(): [VariableAccess] x99 -# 317| Type = [Struct] String -# 317| ValueCategory = lvalue -# 317| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 317| Conversion = [BoolConversion] conversion to bool -# 317| Type = [BoolType] bool -# 317| Value = [CStyleCast] 0 -# 317| ValueCategory = prvalue -# 318| getStmt(100): [DoStmt] do (...) ... -# 320| getCondition(): [Literal] 0 -# 320| Type = [IntType] int -# 320| Value = [Literal] 0 -# 320| ValueCategory = prvalue -# 318| getStmt(): [BlockStmt] { ... } -# 319| getStmt(0): [DeclStmt] declaration -# 319| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x100 -# 319| Type = [Struct] String -# 319| getVariable().getInitializer(): [Initializer] initializer for x100 -# 319| getExpr(): [ConstructorCall] call to String -# 319| Type = [VoidType] void -# 319| ValueCategory = prvalue -# 320| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 320| Type = [VoidType] void -# 320| ValueCategory = prvalue -# 320| getQualifier(): [VariableAccess] x100 -# 320| Type = [Struct] String -# 320| ValueCategory = lvalue -# 320| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 320| Conversion = [BoolConversion] conversion to bool -# 320| Type = [BoolType] bool -# 320| Value = [CStyleCast] 0 -# 320| ValueCategory = prvalue -# 321| getStmt(101): [DoStmt] do (...) ... -# 323| getCondition(): [Literal] 0 -# 323| Type = [IntType] int -# 323| Value = [Literal] 0 -# 323| ValueCategory = prvalue -# 321| getStmt(): [BlockStmt] { ... } -# 322| getStmt(0): [DeclStmt] declaration -# 322| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x101 -# 322| Type = [Struct] String -# 322| getVariable().getInitializer(): [Initializer] initializer for x101 -# 322| getExpr(): [ConstructorCall] call to String -# 322| Type = [VoidType] void -# 322| ValueCategory = prvalue -# 323| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 323| Type = [VoidType] void -# 323| ValueCategory = prvalue -# 323| getQualifier(): [VariableAccess] x101 -# 323| Type = [Struct] String -# 323| ValueCategory = lvalue -# 323| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 323| Conversion = [BoolConversion] conversion to bool -# 323| Type = [BoolType] bool -# 323| Value = [CStyleCast] 0 -# 323| ValueCategory = prvalue -# 324| getStmt(102): [DoStmt] do (...) ... -# 326| getCondition(): [Literal] 0 -# 326| Type = [IntType] int -# 326| Value = [Literal] 0 -# 326| ValueCategory = prvalue -# 324| getStmt(): [BlockStmt] { ... } -# 325| getStmt(0): [DeclStmt] declaration -# 325| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x102 -# 325| Type = [Struct] String -# 325| getVariable().getInitializer(): [Initializer] initializer for x102 -# 325| getExpr(): [ConstructorCall] call to String -# 325| Type = [VoidType] void -# 325| ValueCategory = prvalue -# 326| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 326| Type = [VoidType] void -# 326| ValueCategory = prvalue -# 326| getQualifier(): [VariableAccess] x102 -# 326| Type = [Struct] String -# 326| ValueCategory = lvalue -# 326| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 326| Conversion = [BoolConversion] conversion to bool -# 326| Type = [BoolType] bool -# 326| Value = [CStyleCast] 0 -# 326| ValueCategory = prvalue -# 327| getStmt(103): [DoStmt] do (...) ... -# 329| getCondition(): [Literal] 0 -# 329| Type = [IntType] int -# 329| Value = [Literal] 0 -# 329| ValueCategory = prvalue -# 327| getStmt(): [BlockStmt] { ... } -# 328| getStmt(0): [DeclStmt] declaration -# 328| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x103 -# 328| Type = [Struct] String -# 328| getVariable().getInitializer(): [Initializer] initializer for x103 -# 328| getExpr(): [ConstructorCall] call to String -# 328| Type = [VoidType] void -# 328| ValueCategory = prvalue -# 329| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 329| Type = [VoidType] void -# 329| ValueCategory = prvalue -# 329| getQualifier(): [VariableAccess] x103 -# 329| Type = [Struct] String -# 329| ValueCategory = lvalue -# 329| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 329| Conversion = [BoolConversion] conversion to bool -# 329| Type = [BoolType] bool -# 329| Value = [CStyleCast] 0 -# 329| ValueCategory = prvalue -# 330| getStmt(104): [DoStmt] do (...) ... -# 332| getCondition(): [Literal] 0 -# 332| Type = [IntType] int -# 332| Value = [Literal] 0 -# 332| ValueCategory = prvalue -# 330| getStmt(): [BlockStmt] { ... } -# 331| getStmt(0): [DeclStmt] declaration -# 331| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x104 -# 331| Type = [Struct] String -# 331| getVariable().getInitializer(): [Initializer] initializer for x104 -# 331| getExpr(): [ConstructorCall] call to String -# 331| Type = [VoidType] void -# 331| ValueCategory = prvalue -# 332| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 332| Type = [VoidType] void -# 332| ValueCategory = prvalue -# 332| getQualifier(): [VariableAccess] x104 -# 332| Type = [Struct] String -# 332| ValueCategory = lvalue -# 332| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 332| Conversion = [BoolConversion] conversion to bool -# 332| Type = [BoolType] bool -# 332| Value = [CStyleCast] 0 -# 332| ValueCategory = prvalue -# 333| getStmt(105): [DoStmt] do (...) ... -# 335| getCondition(): [Literal] 0 -# 335| Type = [IntType] int -# 335| Value = [Literal] 0 -# 335| ValueCategory = prvalue -# 333| getStmt(): [BlockStmt] { ... } -# 334| getStmt(0): [DeclStmt] declaration -# 334| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x105 -# 334| Type = [Struct] String -# 334| getVariable().getInitializer(): [Initializer] initializer for x105 -# 334| getExpr(): [ConstructorCall] call to String -# 334| Type = [VoidType] void -# 334| ValueCategory = prvalue -# 335| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 335| Type = [VoidType] void -# 335| ValueCategory = prvalue -# 335| getQualifier(): [VariableAccess] x105 -# 335| Type = [Struct] String -# 335| ValueCategory = lvalue -# 335| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 335| Conversion = [BoolConversion] conversion to bool -# 335| Type = [BoolType] bool -# 335| Value = [CStyleCast] 0 -# 335| ValueCategory = prvalue -# 336| getStmt(106): [DoStmt] do (...) ... -# 338| getCondition(): [Literal] 0 -# 338| Type = [IntType] int -# 338| Value = [Literal] 0 -# 338| ValueCategory = prvalue -# 336| getStmt(): [BlockStmt] { ... } -# 337| getStmt(0): [DeclStmt] declaration -# 337| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x106 -# 337| Type = [Struct] String -# 337| getVariable().getInitializer(): [Initializer] initializer for x106 -# 337| getExpr(): [ConstructorCall] call to String -# 337| Type = [VoidType] void -# 337| ValueCategory = prvalue -# 338| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 338| Type = [VoidType] void -# 338| ValueCategory = prvalue -# 338| getQualifier(): [VariableAccess] x106 -# 338| Type = [Struct] String -# 338| ValueCategory = lvalue -# 338| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 338| Conversion = [BoolConversion] conversion to bool -# 338| Type = [BoolType] bool -# 338| Value = [CStyleCast] 0 -# 338| ValueCategory = prvalue -# 339| getStmt(107): [DoStmt] do (...) ... -# 341| getCondition(): [Literal] 0 -# 341| Type = [IntType] int -# 341| Value = [Literal] 0 -# 341| ValueCategory = prvalue -# 339| getStmt(): [BlockStmt] { ... } -# 340| getStmt(0): [DeclStmt] declaration -# 340| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x107 -# 340| Type = [Struct] String -# 340| getVariable().getInitializer(): [Initializer] initializer for x107 -# 340| getExpr(): [ConstructorCall] call to String -# 340| Type = [VoidType] void -# 340| ValueCategory = prvalue -# 341| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 341| Type = [VoidType] void -# 341| ValueCategory = prvalue -# 341| getQualifier(): [VariableAccess] x107 -# 341| Type = [Struct] String -# 341| ValueCategory = lvalue -# 341| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 341| Conversion = [BoolConversion] conversion to bool -# 341| Type = [BoolType] bool -# 341| Value = [CStyleCast] 0 -# 341| ValueCategory = prvalue -# 342| getStmt(108): [DoStmt] do (...) ... -# 344| getCondition(): [Literal] 0 -# 344| Type = [IntType] int -# 344| Value = [Literal] 0 -# 344| ValueCategory = prvalue -# 342| getStmt(): [BlockStmt] { ... } -# 343| getStmt(0): [DeclStmt] declaration -# 343| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x108 -# 343| Type = [Struct] String -# 343| getVariable().getInitializer(): [Initializer] initializer for x108 -# 343| getExpr(): [ConstructorCall] call to String -# 343| Type = [VoidType] void -# 343| ValueCategory = prvalue -# 344| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 344| Type = [VoidType] void -# 344| ValueCategory = prvalue -# 344| getQualifier(): [VariableAccess] x108 -# 344| Type = [Struct] String -# 344| ValueCategory = lvalue -# 344| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 344| Conversion = [BoolConversion] conversion to bool -# 344| Type = [BoolType] bool -# 344| Value = [CStyleCast] 0 -# 344| ValueCategory = prvalue -# 345| getStmt(109): [DoStmt] do (...) ... -# 347| getCondition(): [Literal] 0 -# 347| Type = [IntType] int -# 347| Value = [Literal] 0 -# 347| ValueCategory = prvalue -# 345| getStmt(): [BlockStmt] { ... } -# 346| getStmt(0): [DeclStmt] declaration -# 346| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x109 -# 346| Type = [Struct] String -# 346| getVariable().getInitializer(): [Initializer] initializer for x109 -# 346| getExpr(): [ConstructorCall] call to String -# 346| Type = [VoidType] void -# 346| ValueCategory = prvalue -# 347| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 347| Type = [VoidType] void -# 347| ValueCategory = prvalue -# 347| getQualifier(): [VariableAccess] x109 -# 347| Type = [Struct] String -# 347| ValueCategory = lvalue -# 347| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 347| Conversion = [BoolConversion] conversion to bool -# 347| Type = [BoolType] bool -# 347| Value = [CStyleCast] 0 -# 347| ValueCategory = prvalue -# 348| getStmt(110): [DoStmt] do (...) ... -# 350| getCondition(): [Literal] 0 -# 350| Type = [IntType] int -# 350| Value = [Literal] 0 -# 350| ValueCategory = prvalue -# 348| getStmt(): [BlockStmt] { ... } -# 349| getStmt(0): [DeclStmt] declaration -# 349| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x110 -# 349| Type = [Struct] String -# 349| getVariable().getInitializer(): [Initializer] initializer for x110 -# 349| getExpr(): [ConstructorCall] call to String -# 349| Type = [VoidType] void -# 349| ValueCategory = prvalue -# 350| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 350| Type = [VoidType] void -# 350| ValueCategory = prvalue -# 350| getQualifier(): [VariableAccess] x110 -# 350| Type = [Struct] String -# 350| ValueCategory = lvalue -# 350| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 350| Conversion = [BoolConversion] conversion to bool -# 350| Type = [BoolType] bool -# 350| Value = [CStyleCast] 0 -# 350| ValueCategory = prvalue -# 351| getStmt(111): [DoStmt] do (...) ... -# 353| getCondition(): [Literal] 0 -# 353| Type = [IntType] int -# 353| Value = [Literal] 0 -# 353| ValueCategory = prvalue -# 351| getStmt(): [BlockStmt] { ... } -# 352| getStmt(0): [DeclStmt] declaration -# 352| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x111 -# 352| Type = [Struct] String -# 352| getVariable().getInitializer(): [Initializer] initializer for x111 -# 352| getExpr(): [ConstructorCall] call to String -# 352| Type = [VoidType] void -# 352| ValueCategory = prvalue -# 353| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 353| Type = [VoidType] void -# 353| ValueCategory = prvalue -# 353| getQualifier(): [VariableAccess] x111 -# 353| Type = [Struct] String -# 353| ValueCategory = lvalue -# 353| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 353| Conversion = [BoolConversion] conversion to bool -# 353| Type = [BoolType] bool -# 353| Value = [CStyleCast] 0 -# 353| ValueCategory = prvalue -# 354| getStmt(112): [DoStmt] do (...) ... -# 356| getCondition(): [Literal] 0 -# 356| Type = [IntType] int -# 356| Value = [Literal] 0 -# 356| ValueCategory = prvalue -# 354| getStmt(): [BlockStmt] { ... } -# 355| getStmt(0): [DeclStmt] declaration -# 355| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x112 -# 355| Type = [Struct] String -# 355| getVariable().getInitializer(): [Initializer] initializer for x112 -# 355| getExpr(): [ConstructorCall] call to String -# 355| Type = [VoidType] void -# 355| ValueCategory = prvalue -# 356| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 356| Type = [VoidType] void -# 356| ValueCategory = prvalue -# 356| getQualifier(): [VariableAccess] x112 -# 356| Type = [Struct] String -# 356| ValueCategory = lvalue -# 356| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 356| Conversion = [BoolConversion] conversion to bool -# 356| Type = [BoolType] bool -# 356| Value = [CStyleCast] 0 -# 356| ValueCategory = prvalue -# 357| getStmt(113): [DoStmt] do (...) ... -# 359| getCondition(): [Literal] 0 -# 359| Type = [IntType] int -# 359| Value = [Literal] 0 -# 359| ValueCategory = prvalue -# 357| getStmt(): [BlockStmt] { ... } -# 358| getStmt(0): [DeclStmt] declaration -# 358| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x113 -# 358| Type = [Struct] String -# 358| getVariable().getInitializer(): [Initializer] initializer for x113 -# 358| getExpr(): [ConstructorCall] call to String -# 358| Type = [VoidType] void -# 358| ValueCategory = prvalue -# 359| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 359| Type = [VoidType] void -# 359| ValueCategory = prvalue -# 359| getQualifier(): [VariableAccess] x113 -# 359| Type = [Struct] String -# 359| ValueCategory = lvalue -# 359| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 359| Conversion = [BoolConversion] conversion to bool -# 359| Type = [BoolType] bool -# 359| Value = [CStyleCast] 0 -# 359| ValueCategory = prvalue -# 360| getStmt(114): [DoStmt] do (...) ... -# 362| getCondition(): [Literal] 0 -# 362| Type = [IntType] int -# 362| Value = [Literal] 0 -# 362| ValueCategory = prvalue -# 360| getStmt(): [BlockStmt] { ... } -# 361| getStmt(0): [DeclStmt] declaration -# 361| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x114 -# 361| Type = [Struct] String -# 361| getVariable().getInitializer(): [Initializer] initializer for x114 -# 361| getExpr(): [ConstructorCall] call to String -# 361| Type = [VoidType] void -# 361| ValueCategory = prvalue -# 362| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 362| Type = [VoidType] void -# 362| ValueCategory = prvalue -# 362| getQualifier(): [VariableAccess] x114 -# 362| Type = [Struct] String -# 362| ValueCategory = lvalue -# 362| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 362| Conversion = [BoolConversion] conversion to bool -# 362| Type = [BoolType] bool -# 362| Value = [CStyleCast] 0 -# 362| ValueCategory = prvalue -# 363| getStmt(115): [DoStmt] do (...) ... -# 365| getCondition(): [Literal] 0 -# 365| Type = [IntType] int -# 365| Value = [Literal] 0 -# 365| ValueCategory = prvalue -# 363| getStmt(): [BlockStmt] { ... } -# 364| getStmt(0): [DeclStmt] declaration -# 364| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x115 -# 364| Type = [Struct] String -# 364| getVariable().getInitializer(): [Initializer] initializer for x115 -# 364| getExpr(): [ConstructorCall] call to String -# 364| Type = [VoidType] void -# 364| ValueCategory = prvalue -# 365| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 365| Type = [VoidType] void -# 365| ValueCategory = prvalue -# 365| getQualifier(): [VariableAccess] x115 -# 365| Type = [Struct] String -# 365| ValueCategory = lvalue -# 365| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 365| Conversion = [BoolConversion] conversion to bool -# 365| Type = [BoolType] bool -# 365| Value = [CStyleCast] 0 -# 365| ValueCategory = prvalue -# 366| getStmt(116): [DoStmt] do (...) ... -# 368| getCondition(): [Literal] 0 -# 368| Type = [IntType] int -# 368| Value = [Literal] 0 -# 368| ValueCategory = prvalue -# 366| getStmt(): [BlockStmt] { ... } -# 367| getStmt(0): [DeclStmt] declaration -# 367| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x116 -# 367| Type = [Struct] String -# 367| getVariable().getInitializer(): [Initializer] initializer for x116 -# 367| getExpr(): [ConstructorCall] call to String -# 367| Type = [VoidType] void -# 367| ValueCategory = prvalue -# 368| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 368| Type = [VoidType] void -# 368| ValueCategory = prvalue -# 368| getQualifier(): [VariableAccess] x116 -# 368| Type = [Struct] String -# 368| ValueCategory = lvalue -# 368| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 368| Conversion = [BoolConversion] conversion to bool -# 368| Type = [BoolType] bool -# 368| Value = [CStyleCast] 0 -# 368| ValueCategory = prvalue -# 369| getStmt(117): [DoStmt] do (...) ... -# 371| getCondition(): [Literal] 0 -# 371| Type = [IntType] int -# 371| Value = [Literal] 0 -# 371| ValueCategory = prvalue -# 369| getStmt(): [BlockStmt] { ... } -# 370| getStmt(0): [DeclStmt] declaration -# 370| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x117 -# 370| Type = [Struct] String -# 370| getVariable().getInitializer(): [Initializer] initializer for x117 -# 370| getExpr(): [ConstructorCall] call to String -# 370| Type = [VoidType] void -# 370| ValueCategory = prvalue -# 371| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 371| Type = [VoidType] void -# 371| ValueCategory = prvalue -# 371| getQualifier(): [VariableAccess] x117 -# 371| Type = [Struct] String -# 371| ValueCategory = lvalue -# 371| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 371| Conversion = [BoolConversion] conversion to bool -# 371| Type = [BoolType] bool -# 371| Value = [CStyleCast] 0 -# 371| ValueCategory = prvalue -# 372| getStmt(118): [DoStmt] do (...) ... -# 374| getCondition(): [Literal] 0 -# 374| Type = [IntType] int -# 374| Value = [Literal] 0 -# 374| ValueCategory = prvalue -# 372| getStmt(): [BlockStmt] { ... } -# 373| getStmt(0): [DeclStmt] declaration -# 373| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x118 -# 373| Type = [Struct] String -# 373| getVariable().getInitializer(): [Initializer] initializer for x118 -# 373| getExpr(): [ConstructorCall] call to String -# 373| Type = [VoidType] void -# 373| ValueCategory = prvalue -# 374| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 374| Type = [VoidType] void -# 374| ValueCategory = prvalue -# 374| getQualifier(): [VariableAccess] x118 -# 374| Type = [Struct] String -# 374| ValueCategory = lvalue -# 374| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 374| Conversion = [BoolConversion] conversion to bool -# 374| Type = [BoolType] bool -# 374| Value = [CStyleCast] 0 -# 374| ValueCategory = prvalue -# 375| getStmt(119): [DoStmt] do (...) ... -# 377| getCondition(): [Literal] 0 -# 377| Type = [IntType] int -# 377| Value = [Literal] 0 -# 377| ValueCategory = prvalue -# 375| getStmt(): [BlockStmt] { ... } -# 376| getStmt(0): [DeclStmt] declaration -# 376| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x119 -# 376| Type = [Struct] String -# 376| getVariable().getInitializer(): [Initializer] initializer for x119 -# 376| getExpr(): [ConstructorCall] call to String -# 376| Type = [VoidType] void -# 376| ValueCategory = prvalue -# 377| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 377| Type = [VoidType] void -# 377| ValueCategory = prvalue -# 377| getQualifier(): [VariableAccess] x119 -# 377| Type = [Struct] String -# 377| ValueCategory = lvalue -# 377| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 377| Conversion = [BoolConversion] conversion to bool -# 377| Type = [BoolType] bool -# 377| Value = [CStyleCast] 0 -# 377| ValueCategory = prvalue -# 378| getStmt(120): [DoStmt] do (...) ... -# 380| getCondition(): [Literal] 0 -# 380| Type = [IntType] int -# 380| Value = [Literal] 0 -# 380| ValueCategory = prvalue -# 378| getStmt(): [BlockStmt] { ... } -# 379| getStmt(0): [DeclStmt] declaration -# 379| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x120 -# 379| Type = [Struct] String -# 379| getVariable().getInitializer(): [Initializer] initializer for x120 -# 379| getExpr(): [ConstructorCall] call to String -# 379| Type = [VoidType] void -# 379| ValueCategory = prvalue -# 380| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 380| Type = [VoidType] void -# 380| ValueCategory = prvalue -# 380| getQualifier(): [VariableAccess] x120 -# 380| Type = [Struct] String -# 380| ValueCategory = lvalue -# 380| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 380| Conversion = [BoolConversion] conversion to bool -# 380| Type = [BoolType] bool -# 380| Value = [CStyleCast] 0 -# 380| ValueCategory = prvalue -# 381| getStmt(121): [DoStmt] do (...) ... -# 383| getCondition(): [Literal] 0 -# 383| Type = [IntType] int -# 383| Value = [Literal] 0 -# 383| ValueCategory = prvalue -# 381| getStmt(): [BlockStmt] { ... } -# 382| getStmt(0): [DeclStmt] declaration -# 382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x121 -# 382| Type = [Struct] String -# 382| getVariable().getInitializer(): [Initializer] initializer for x121 -# 382| getExpr(): [ConstructorCall] call to String -# 382| Type = [VoidType] void -# 382| ValueCategory = prvalue -# 383| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 383| Type = [VoidType] void -# 383| ValueCategory = prvalue -# 383| getQualifier(): [VariableAccess] x121 -# 383| Type = [Struct] String -# 383| ValueCategory = lvalue -# 383| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 383| Conversion = [BoolConversion] conversion to bool -# 383| Type = [BoolType] bool -# 383| Value = [CStyleCast] 0 -# 383| ValueCategory = prvalue -# 384| getStmt(122): [DoStmt] do (...) ... -# 386| getCondition(): [Literal] 0 -# 386| Type = [IntType] int -# 386| Value = [Literal] 0 -# 386| ValueCategory = prvalue -# 384| getStmt(): [BlockStmt] { ... } -# 385| getStmt(0): [DeclStmt] declaration -# 385| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x122 -# 385| Type = [Struct] String -# 385| getVariable().getInitializer(): [Initializer] initializer for x122 -# 385| getExpr(): [ConstructorCall] call to String -# 385| Type = [VoidType] void -# 385| ValueCategory = prvalue -# 386| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 386| Type = [VoidType] void -# 386| ValueCategory = prvalue -# 386| getQualifier(): [VariableAccess] x122 -# 386| Type = [Struct] String -# 386| ValueCategory = lvalue -# 386| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 386| Conversion = [BoolConversion] conversion to bool -# 386| Type = [BoolType] bool -# 386| Value = [CStyleCast] 0 -# 386| ValueCategory = prvalue -# 387| getStmt(123): [DoStmt] do (...) ... -# 389| getCondition(): [Literal] 0 -# 389| Type = [IntType] int -# 389| Value = [Literal] 0 -# 389| ValueCategory = prvalue -# 387| getStmt(): [BlockStmt] { ... } -# 388| getStmt(0): [DeclStmt] declaration -# 388| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x123 -# 388| Type = [Struct] String -# 388| getVariable().getInitializer(): [Initializer] initializer for x123 -# 388| getExpr(): [ConstructorCall] call to String -# 388| Type = [VoidType] void -# 388| ValueCategory = prvalue -# 389| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 389| Type = [VoidType] void -# 389| ValueCategory = prvalue -# 389| getQualifier(): [VariableAccess] x123 -# 389| Type = [Struct] String -# 389| ValueCategory = lvalue -# 389| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 389| Conversion = [BoolConversion] conversion to bool -# 389| Type = [BoolType] bool -# 389| Value = [CStyleCast] 0 -# 389| ValueCategory = prvalue -# 390| getStmt(124): [DoStmt] do (...) ... -# 392| getCondition(): [Literal] 0 -# 392| Type = [IntType] int -# 392| Value = [Literal] 0 -# 392| ValueCategory = prvalue -# 390| getStmt(): [BlockStmt] { ... } -# 391| getStmt(0): [DeclStmt] declaration -# 391| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x124 -# 391| Type = [Struct] String -# 391| getVariable().getInitializer(): [Initializer] initializer for x124 -# 391| getExpr(): [ConstructorCall] call to String -# 391| Type = [VoidType] void -# 391| ValueCategory = prvalue -# 392| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 392| Type = [VoidType] void -# 392| ValueCategory = prvalue -# 392| getQualifier(): [VariableAccess] x124 -# 392| Type = [Struct] String -# 392| ValueCategory = lvalue -# 392| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 392| Conversion = [BoolConversion] conversion to bool -# 392| Type = [BoolType] bool -# 392| Value = [CStyleCast] 0 -# 392| ValueCategory = prvalue -# 393| getStmt(125): [DoStmt] do (...) ... -# 395| getCondition(): [Literal] 0 -# 395| Type = [IntType] int -# 395| Value = [Literal] 0 -# 395| ValueCategory = prvalue -# 393| getStmt(): [BlockStmt] { ... } -# 394| getStmt(0): [DeclStmt] declaration -# 394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x125 -# 394| Type = [Struct] String -# 394| getVariable().getInitializer(): [Initializer] initializer for x125 -# 394| getExpr(): [ConstructorCall] call to String -# 394| Type = [VoidType] void -# 394| ValueCategory = prvalue -# 395| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 395| Type = [VoidType] void -# 395| ValueCategory = prvalue -# 395| getQualifier(): [VariableAccess] x125 -# 395| Type = [Struct] String -# 395| ValueCategory = lvalue -# 395| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 395| Conversion = [BoolConversion] conversion to bool -# 395| Type = [BoolType] bool -# 395| Value = [CStyleCast] 0 -# 395| ValueCategory = prvalue -# 396| getStmt(126): [DoStmt] do (...) ... -# 398| getCondition(): [Literal] 0 -# 398| Type = [IntType] int -# 398| Value = [Literal] 0 -# 398| ValueCategory = prvalue -# 396| getStmt(): [BlockStmt] { ... } -# 397| getStmt(0): [DeclStmt] declaration -# 397| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x126 -# 397| Type = [Struct] String -# 397| getVariable().getInitializer(): [Initializer] initializer for x126 -# 397| getExpr(): [ConstructorCall] call to String -# 397| Type = [VoidType] void -# 397| ValueCategory = prvalue -# 398| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 398| Type = [VoidType] void -# 398| ValueCategory = prvalue -# 398| getQualifier(): [VariableAccess] x126 -# 398| Type = [Struct] String -# 398| ValueCategory = lvalue -# 398| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 398| Conversion = [BoolConversion] conversion to bool -# 398| Type = [BoolType] bool -# 398| Value = [CStyleCast] 0 -# 398| ValueCategory = prvalue -# 399| getStmt(127): [DoStmt] do (...) ... -# 401| getCondition(): [Literal] 0 -# 401| Type = [IntType] int -# 401| Value = [Literal] 0 -# 401| ValueCategory = prvalue -# 399| getStmt(): [BlockStmt] { ... } -# 400| getStmt(0): [DeclStmt] declaration -# 400| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x127 -# 400| Type = [Struct] String -# 400| getVariable().getInitializer(): [Initializer] initializer for x127 -# 400| getExpr(): [ConstructorCall] call to String -# 400| Type = [VoidType] void -# 400| ValueCategory = prvalue -# 401| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 401| Type = [VoidType] void -# 401| ValueCategory = prvalue -# 401| getQualifier(): [VariableAccess] x127 -# 401| Type = [Struct] String -# 401| ValueCategory = lvalue -# 401| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 401| Conversion = [BoolConversion] conversion to bool -# 401| Type = [BoolType] bool -# 401| Value = [CStyleCast] 0 -# 401| ValueCategory = prvalue -# 402| getStmt(128): [DoStmt] do (...) ... -# 404| getCondition(): [Literal] 0 -# 404| Type = [IntType] int -# 404| Value = [Literal] 0 -# 404| ValueCategory = prvalue -# 402| getStmt(): [BlockStmt] { ... } -# 403| getStmt(0): [DeclStmt] declaration -# 403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x128 -# 403| Type = [Struct] String -# 403| getVariable().getInitializer(): [Initializer] initializer for x128 -# 403| getExpr(): [ConstructorCall] call to String -# 403| Type = [VoidType] void -# 403| ValueCategory = prvalue -# 404| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 404| Type = [VoidType] void -# 404| ValueCategory = prvalue -# 404| getQualifier(): [VariableAccess] x128 -# 404| Type = [Struct] String -# 404| ValueCategory = lvalue -# 404| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 404| Conversion = [BoolConversion] conversion to bool -# 404| Type = [BoolType] bool -# 404| Value = [CStyleCast] 0 -# 404| ValueCategory = prvalue -# 405| getStmt(129): [DoStmt] do (...) ... -# 407| getCondition(): [Literal] 0 -# 407| Type = [IntType] int -# 407| Value = [Literal] 0 -# 407| ValueCategory = prvalue -# 405| getStmt(): [BlockStmt] { ... } -# 406| getStmt(0): [DeclStmt] declaration -# 406| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x129 -# 406| Type = [Struct] String -# 406| getVariable().getInitializer(): [Initializer] initializer for x129 -# 406| getExpr(): [ConstructorCall] call to String -# 406| Type = [VoidType] void -# 406| ValueCategory = prvalue -# 407| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 407| Type = [VoidType] void -# 407| ValueCategory = prvalue -# 407| getQualifier(): [VariableAccess] x129 -# 407| Type = [Struct] String -# 407| ValueCategory = lvalue -# 407| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 407| Conversion = [BoolConversion] conversion to bool -# 407| Type = [BoolType] bool -# 407| Value = [CStyleCast] 0 -# 407| ValueCategory = prvalue -# 408| getStmt(130): [DoStmt] do (...) ... -# 410| getCondition(): [Literal] 0 -# 410| Type = [IntType] int -# 410| Value = [Literal] 0 -# 410| ValueCategory = prvalue -# 408| getStmt(): [BlockStmt] { ... } -# 409| getStmt(0): [DeclStmt] declaration -# 409| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x130 -# 409| Type = [Struct] String -# 409| getVariable().getInitializer(): [Initializer] initializer for x130 -# 409| getExpr(): [ConstructorCall] call to String -# 409| Type = [VoidType] void -# 409| ValueCategory = prvalue -# 410| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 410| Type = [VoidType] void -# 410| ValueCategory = prvalue -# 410| getQualifier(): [VariableAccess] x130 -# 410| Type = [Struct] String -# 410| ValueCategory = lvalue -# 410| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 410| Conversion = [BoolConversion] conversion to bool -# 410| Type = [BoolType] bool -# 410| Value = [CStyleCast] 0 -# 410| ValueCategory = prvalue -# 411| getStmt(131): [DoStmt] do (...) ... -# 413| getCondition(): [Literal] 0 -# 413| Type = [IntType] int -# 413| Value = [Literal] 0 -# 413| ValueCategory = prvalue -# 411| getStmt(): [BlockStmt] { ... } -# 412| getStmt(0): [DeclStmt] declaration -# 412| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x131 -# 412| Type = [Struct] String -# 412| getVariable().getInitializer(): [Initializer] initializer for x131 -# 412| getExpr(): [ConstructorCall] call to String -# 412| Type = [VoidType] void -# 412| ValueCategory = prvalue -# 413| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 413| Type = [VoidType] void -# 413| ValueCategory = prvalue -# 413| getQualifier(): [VariableAccess] x131 -# 413| Type = [Struct] String -# 413| ValueCategory = lvalue -# 413| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 413| Conversion = [BoolConversion] conversion to bool -# 413| Type = [BoolType] bool -# 413| Value = [CStyleCast] 0 -# 413| ValueCategory = prvalue -# 414| getStmt(132): [DoStmt] do (...) ... -# 416| getCondition(): [Literal] 0 -# 416| Type = [IntType] int -# 416| Value = [Literal] 0 -# 416| ValueCategory = prvalue -# 414| getStmt(): [BlockStmt] { ... } -# 415| getStmt(0): [DeclStmt] declaration -# 415| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x132 -# 415| Type = [Struct] String -# 415| getVariable().getInitializer(): [Initializer] initializer for x132 -# 415| getExpr(): [ConstructorCall] call to String -# 415| Type = [VoidType] void -# 415| ValueCategory = prvalue -# 416| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 416| Type = [VoidType] void -# 416| ValueCategory = prvalue -# 416| getQualifier(): [VariableAccess] x132 -# 416| Type = [Struct] String -# 416| ValueCategory = lvalue -# 416| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 416| Conversion = [BoolConversion] conversion to bool -# 416| Type = [BoolType] bool -# 416| Value = [CStyleCast] 0 -# 416| ValueCategory = prvalue -# 417| getStmt(133): [DoStmt] do (...) ... -# 419| getCondition(): [Literal] 0 -# 419| Type = [IntType] int -# 419| Value = [Literal] 0 -# 419| ValueCategory = prvalue -# 417| getStmt(): [BlockStmt] { ... } -# 418| getStmt(0): [DeclStmt] declaration -# 418| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x133 -# 418| Type = [Struct] String -# 418| getVariable().getInitializer(): [Initializer] initializer for x133 -# 418| getExpr(): [ConstructorCall] call to String -# 418| Type = [VoidType] void -# 418| ValueCategory = prvalue -# 419| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 419| Type = [VoidType] void -# 419| ValueCategory = prvalue -# 419| getQualifier(): [VariableAccess] x133 -# 419| Type = [Struct] String -# 419| ValueCategory = lvalue -# 419| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 419| Conversion = [BoolConversion] conversion to bool -# 419| Type = [BoolType] bool -# 419| Value = [CStyleCast] 0 -# 419| ValueCategory = prvalue -# 420| getStmt(134): [DoStmt] do (...) ... -# 422| getCondition(): [Literal] 0 -# 422| Type = [IntType] int -# 422| Value = [Literal] 0 -# 422| ValueCategory = prvalue -# 420| getStmt(): [BlockStmt] { ... } -# 421| getStmt(0): [DeclStmt] declaration -# 421| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x134 -# 421| Type = [Struct] String -# 421| getVariable().getInitializer(): [Initializer] initializer for x134 -# 421| getExpr(): [ConstructorCall] call to String -# 421| Type = [VoidType] void -# 421| ValueCategory = prvalue -# 422| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 422| Type = [VoidType] void -# 422| ValueCategory = prvalue -# 422| getQualifier(): [VariableAccess] x134 -# 422| Type = [Struct] String -# 422| ValueCategory = lvalue -# 422| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 422| Conversion = [BoolConversion] conversion to bool -# 422| Type = [BoolType] bool -# 422| Value = [CStyleCast] 0 -# 422| ValueCategory = prvalue -# 423| getStmt(135): [DoStmt] do (...) ... -# 425| getCondition(): [Literal] 0 -# 425| Type = [IntType] int -# 425| Value = [Literal] 0 -# 425| ValueCategory = prvalue -# 423| getStmt(): [BlockStmt] { ... } -# 424| getStmt(0): [DeclStmt] declaration -# 424| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x135 -# 424| Type = [Struct] String -# 424| getVariable().getInitializer(): [Initializer] initializer for x135 -# 424| getExpr(): [ConstructorCall] call to String -# 424| Type = [VoidType] void -# 424| ValueCategory = prvalue -# 425| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 425| Type = [VoidType] void -# 425| ValueCategory = prvalue -# 425| getQualifier(): [VariableAccess] x135 -# 425| Type = [Struct] String -# 425| ValueCategory = lvalue -# 425| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 425| Conversion = [BoolConversion] conversion to bool -# 425| Type = [BoolType] bool -# 425| Value = [CStyleCast] 0 -# 425| ValueCategory = prvalue -# 426| getStmt(136): [DoStmt] do (...) ... -# 428| getCondition(): [Literal] 0 -# 428| Type = [IntType] int -# 428| Value = [Literal] 0 -# 428| ValueCategory = prvalue -# 426| getStmt(): [BlockStmt] { ... } -# 427| getStmt(0): [DeclStmt] declaration -# 427| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x136 -# 427| Type = [Struct] String -# 427| getVariable().getInitializer(): [Initializer] initializer for x136 -# 427| getExpr(): [ConstructorCall] call to String -# 427| Type = [VoidType] void -# 427| ValueCategory = prvalue -# 428| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 428| Type = [VoidType] void -# 428| ValueCategory = prvalue -# 428| getQualifier(): [VariableAccess] x136 -# 428| Type = [Struct] String -# 428| ValueCategory = lvalue -# 428| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 428| Conversion = [BoolConversion] conversion to bool -# 428| Type = [BoolType] bool -# 428| Value = [CStyleCast] 0 -# 428| ValueCategory = prvalue -# 429| getStmt(137): [DoStmt] do (...) ... -# 431| getCondition(): [Literal] 0 -# 431| Type = [IntType] int -# 431| Value = [Literal] 0 -# 431| ValueCategory = prvalue -# 429| getStmt(): [BlockStmt] { ... } -# 430| getStmt(0): [DeclStmt] declaration -# 430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x137 -# 430| Type = [Struct] String -# 430| getVariable().getInitializer(): [Initializer] initializer for x137 -# 430| getExpr(): [ConstructorCall] call to String -# 430| Type = [VoidType] void -# 430| ValueCategory = prvalue -# 431| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 431| Type = [VoidType] void -# 431| ValueCategory = prvalue -# 431| getQualifier(): [VariableAccess] x137 -# 431| Type = [Struct] String -# 431| ValueCategory = lvalue -# 431| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 431| Conversion = [BoolConversion] conversion to bool -# 431| Type = [BoolType] bool -# 431| Value = [CStyleCast] 0 -# 431| ValueCategory = prvalue -# 432| getStmt(138): [DoStmt] do (...) ... -# 434| getCondition(): [Literal] 0 -# 434| Type = [IntType] int -# 434| Value = [Literal] 0 -# 434| ValueCategory = prvalue -# 432| getStmt(): [BlockStmt] { ... } -# 433| getStmt(0): [DeclStmt] declaration -# 433| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x138 -# 433| Type = [Struct] String -# 433| getVariable().getInitializer(): [Initializer] initializer for x138 -# 433| getExpr(): [ConstructorCall] call to String -# 433| Type = [VoidType] void -# 433| ValueCategory = prvalue -# 434| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 434| Type = [VoidType] void -# 434| ValueCategory = prvalue -# 434| getQualifier(): [VariableAccess] x138 -# 434| Type = [Struct] String -# 434| ValueCategory = lvalue -# 434| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 434| Conversion = [BoolConversion] conversion to bool -# 434| Type = [BoolType] bool -# 434| Value = [CStyleCast] 0 -# 434| ValueCategory = prvalue -# 435| getStmt(139): [DoStmt] do (...) ... -# 437| getCondition(): [Literal] 0 -# 437| Type = [IntType] int -# 437| Value = [Literal] 0 -# 437| ValueCategory = prvalue -# 435| getStmt(): [BlockStmt] { ... } -# 436| getStmt(0): [DeclStmt] declaration -# 436| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x139 -# 436| Type = [Struct] String -# 436| getVariable().getInitializer(): [Initializer] initializer for x139 -# 436| getExpr(): [ConstructorCall] call to String -# 436| Type = [VoidType] void -# 436| ValueCategory = prvalue -# 437| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 437| Type = [VoidType] void -# 437| ValueCategory = prvalue -# 437| getQualifier(): [VariableAccess] x139 -# 437| Type = [Struct] String -# 437| ValueCategory = lvalue -# 437| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 437| Conversion = [BoolConversion] conversion to bool -# 437| Type = [BoolType] bool -# 437| Value = [CStyleCast] 0 -# 437| ValueCategory = prvalue -# 438| getStmt(140): [DoStmt] do (...) ... -# 440| getCondition(): [Literal] 0 -# 440| Type = [IntType] int -# 440| Value = [Literal] 0 -# 440| ValueCategory = prvalue -# 438| getStmt(): [BlockStmt] { ... } -# 439| getStmt(0): [DeclStmt] declaration -# 439| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x140 -# 439| Type = [Struct] String -# 439| getVariable().getInitializer(): [Initializer] initializer for x140 -# 439| getExpr(): [ConstructorCall] call to String -# 439| Type = [VoidType] void -# 439| ValueCategory = prvalue -# 440| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 440| Type = [VoidType] void -# 440| ValueCategory = prvalue -# 440| getQualifier(): [VariableAccess] x140 -# 440| Type = [Struct] String -# 440| ValueCategory = lvalue -# 440| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 440| Conversion = [BoolConversion] conversion to bool -# 440| Type = [BoolType] bool -# 440| Value = [CStyleCast] 0 -# 440| ValueCategory = prvalue -# 441| getStmt(141): [DoStmt] do (...) ... -# 443| getCondition(): [Literal] 0 -# 443| Type = [IntType] int -# 443| Value = [Literal] 0 -# 443| ValueCategory = prvalue -# 441| getStmt(): [BlockStmt] { ... } -# 442| getStmt(0): [DeclStmt] declaration -# 442| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x141 -# 442| Type = [Struct] String -# 442| getVariable().getInitializer(): [Initializer] initializer for x141 -# 442| getExpr(): [ConstructorCall] call to String -# 442| Type = [VoidType] void -# 442| ValueCategory = prvalue -# 443| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 443| Type = [VoidType] void -# 443| ValueCategory = prvalue -# 443| getQualifier(): [VariableAccess] x141 -# 443| Type = [Struct] String -# 443| ValueCategory = lvalue -# 443| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 443| Conversion = [BoolConversion] conversion to bool -# 443| Type = [BoolType] bool -# 443| Value = [CStyleCast] 0 -# 443| ValueCategory = prvalue -# 444| getStmt(142): [DoStmt] do (...) ... -# 446| getCondition(): [Literal] 0 -# 446| Type = [IntType] int -# 446| Value = [Literal] 0 -# 446| ValueCategory = prvalue -# 444| getStmt(): [BlockStmt] { ... } -# 445| getStmt(0): [DeclStmt] declaration -# 445| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x142 -# 445| Type = [Struct] String -# 445| getVariable().getInitializer(): [Initializer] initializer for x142 -# 445| getExpr(): [ConstructorCall] call to String -# 445| Type = [VoidType] void -# 445| ValueCategory = prvalue -# 446| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 446| Type = [VoidType] void -# 446| ValueCategory = prvalue -# 446| getQualifier(): [VariableAccess] x142 -# 446| Type = [Struct] String -# 446| ValueCategory = lvalue -# 446| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 446| Conversion = [BoolConversion] conversion to bool -# 446| Type = [BoolType] bool -# 446| Value = [CStyleCast] 0 -# 446| ValueCategory = prvalue -# 447| getStmt(143): [DoStmt] do (...) ... -# 449| getCondition(): [Literal] 0 -# 449| Type = [IntType] int -# 449| Value = [Literal] 0 -# 449| ValueCategory = prvalue -# 447| getStmt(): [BlockStmt] { ... } -# 448| getStmt(0): [DeclStmt] declaration -# 448| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x143 -# 448| Type = [Struct] String -# 448| getVariable().getInitializer(): [Initializer] initializer for x143 -# 448| getExpr(): [ConstructorCall] call to String -# 448| Type = [VoidType] void -# 448| ValueCategory = prvalue -# 449| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 449| Type = [VoidType] void -# 449| ValueCategory = prvalue -# 449| getQualifier(): [VariableAccess] x143 -# 449| Type = [Struct] String -# 449| ValueCategory = lvalue -# 449| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 449| Conversion = [BoolConversion] conversion to bool -# 449| Type = [BoolType] bool -# 449| Value = [CStyleCast] 0 -# 449| ValueCategory = prvalue -# 450| getStmt(144): [DoStmt] do (...) ... -# 452| getCondition(): [Literal] 0 -# 452| Type = [IntType] int -# 452| Value = [Literal] 0 -# 452| ValueCategory = prvalue -# 450| getStmt(): [BlockStmt] { ... } -# 451| getStmt(0): [DeclStmt] declaration -# 451| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x144 -# 451| Type = [Struct] String -# 451| getVariable().getInitializer(): [Initializer] initializer for x144 -# 451| getExpr(): [ConstructorCall] call to String -# 451| Type = [VoidType] void -# 451| ValueCategory = prvalue -# 452| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 452| Type = [VoidType] void -# 452| ValueCategory = prvalue -# 452| getQualifier(): [VariableAccess] x144 -# 452| Type = [Struct] String -# 452| ValueCategory = lvalue -# 452| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 452| Conversion = [BoolConversion] conversion to bool -# 452| Type = [BoolType] bool -# 452| Value = [CStyleCast] 0 -# 452| ValueCategory = prvalue -# 453| getStmt(145): [DoStmt] do (...) ... -# 455| getCondition(): [Literal] 0 -# 455| Type = [IntType] int -# 455| Value = [Literal] 0 -# 455| ValueCategory = prvalue -# 453| getStmt(): [BlockStmt] { ... } -# 454| getStmt(0): [DeclStmt] declaration -# 454| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x145 -# 454| Type = [Struct] String -# 454| getVariable().getInitializer(): [Initializer] initializer for x145 -# 454| getExpr(): [ConstructorCall] call to String -# 454| Type = [VoidType] void -# 454| ValueCategory = prvalue -# 455| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 455| Type = [VoidType] void -# 455| ValueCategory = prvalue -# 455| getQualifier(): [VariableAccess] x145 -# 455| Type = [Struct] String -# 455| ValueCategory = lvalue -# 455| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 455| Conversion = [BoolConversion] conversion to bool -# 455| Type = [BoolType] bool -# 455| Value = [CStyleCast] 0 -# 455| ValueCategory = prvalue -# 456| getStmt(146): [DoStmt] do (...) ... -# 458| getCondition(): [Literal] 0 -# 458| Type = [IntType] int -# 458| Value = [Literal] 0 -# 458| ValueCategory = prvalue -# 456| getStmt(): [BlockStmt] { ... } -# 457| getStmt(0): [DeclStmt] declaration -# 457| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x146 -# 457| Type = [Struct] String -# 457| getVariable().getInitializer(): [Initializer] initializer for x146 -# 457| getExpr(): [ConstructorCall] call to String -# 457| Type = [VoidType] void -# 457| ValueCategory = prvalue -# 458| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 458| Type = [VoidType] void -# 458| ValueCategory = prvalue -# 458| getQualifier(): [VariableAccess] x146 -# 458| Type = [Struct] String -# 458| ValueCategory = lvalue -# 458| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 458| Conversion = [BoolConversion] conversion to bool -# 458| Type = [BoolType] bool -# 458| Value = [CStyleCast] 0 -# 458| ValueCategory = prvalue -# 459| getStmt(147): [DoStmt] do (...) ... -# 461| getCondition(): [Literal] 0 -# 461| Type = [IntType] int -# 461| Value = [Literal] 0 -# 461| ValueCategory = prvalue -# 459| getStmt(): [BlockStmt] { ... } -# 460| getStmt(0): [DeclStmt] declaration -# 460| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x147 -# 460| Type = [Struct] String -# 460| getVariable().getInitializer(): [Initializer] initializer for x147 -# 460| getExpr(): [ConstructorCall] call to String -# 460| Type = [VoidType] void -# 460| ValueCategory = prvalue -# 461| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 461| Type = [VoidType] void -# 461| ValueCategory = prvalue -# 461| getQualifier(): [VariableAccess] x147 -# 461| Type = [Struct] String -# 461| ValueCategory = lvalue -# 461| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 461| Conversion = [BoolConversion] conversion to bool -# 461| Type = [BoolType] bool -# 461| Value = [CStyleCast] 0 -# 461| ValueCategory = prvalue -# 462| getStmt(148): [DoStmt] do (...) ... -# 464| getCondition(): [Literal] 0 -# 464| Type = [IntType] int -# 464| Value = [Literal] 0 -# 464| ValueCategory = prvalue -# 462| getStmt(): [BlockStmt] { ... } -# 463| getStmt(0): [DeclStmt] declaration -# 463| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x148 -# 463| Type = [Struct] String -# 463| getVariable().getInitializer(): [Initializer] initializer for x148 -# 463| getExpr(): [ConstructorCall] call to String -# 463| Type = [VoidType] void -# 463| ValueCategory = prvalue -# 464| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 464| Type = [VoidType] void -# 464| ValueCategory = prvalue -# 464| getQualifier(): [VariableAccess] x148 -# 464| Type = [Struct] String -# 464| ValueCategory = lvalue -# 464| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 464| Conversion = [BoolConversion] conversion to bool -# 464| Type = [BoolType] bool -# 464| Value = [CStyleCast] 0 -# 464| ValueCategory = prvalue -# 465| getStmt(149): [DoStmt] do (...) ... -# 467| getCondition(): [Literal] 0 -# 467| Type = [IntType] int -# 467| Value = [Literal] 0 -# 467| ValueCategory = prvalue -# 465| getStmt(): [BlockStmt] { ... } -# 466| getStmt(0): [DeclStmt] declaration -# 466| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x149 -# 466| Type = [Struct] String -# 466| getVariable().getInitializer(): [Initializer] initializer for x149 -# 466| getExpr(): [ConstructorCall] call to String -# 466| Type = [VoidType] void -# 466| ValueCategory = prvalue -# 467| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 467| Type = [VoidType] void -# 467| ValueCategory = prvalue -# 467| getQualifier(): [VariableAccess] x149 -# 467| Type = [Struct] String -# 467| ValueCategory = lvalue -# 467| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 467| Conversion = [BoolConversion] conversion to bool -# 467| Type = [BoolType] bool -# 467| Value = [CStyleCast] 0 -# 467| ValueCategory = prvalue -# 468| getStmt(150): [DoStmt] do (...) ... -# 470| getCondition(): [Literal] 0 -# 470| Type = [IntType] int -# 470| Value = [Literal] 0 -# 470| ValueCategory = prvalue -# 468| getStmt(): [BlockStmt] { ... } -# 469| getStmt(0): [DeclStmt] declaration -# 469| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x150 -# 469| Type = [Struct] String -# 469| getVariable().getInitializer(): [Initializer] initializer for x150 -# 469| getExpr(): [ConstructorCall] call to String -# 469| Type = [VoidType] void -# 469| ValueCategory = prvalue -# 470| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 470| Type = [VoidType] void -# 470| ValueCategory = prvalue -# 470| getQualifier(): [VariableAccess] x150 -# 470| Type = [Struct] String -# 470| ValueCategory = lvalue -# 470| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 470| Conversion = [BoolConversion] conversion to bool -# 470| Type = [BoolType] bool -# 470| Value = [CStyleCast] 0 -# 470| ValueCategory = prvalue -# 471| getStmt(151): [DoStmt] do (...) ... -# 473| getCondition(): [Literal] 0 -# 473| Type = [IntType] int -# 473| Value = [Literal] 0 -# 473| ValueCategory = prvalue -# 471| getStmt(): [BlockStmt] { ... } -# 472| getStmt(0): [DeclStmt] declaration -# 472| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x151 -# 472| Type = [Struct] String -# 472| getVariable().getInitializer(): [Initializer] initializer for x151 -# 472| getExpr(): [ConstructorCall] call to String -# 472| Type = [VoidType] void -# 472| ValueCategory = prvalue -# 473| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 473| Type = [VoidType] void -# 473| ValueCategory = prvalue -# 473| getQualifier(): [VariableAccess] x151 -# 473| Type = [Struct] String -# 473| ValueCategory = lvalue -# 473| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 473| Conversion = [BoolConversion] conversion to bool -# 473| Type = [BoolType] bool -# 473| Value = [CStyleCast] 0 -# 473| ValueCategory = prvalue -# 474| getStmt(152): [DoStmt] do (...) ... -# 476| getCondition(): [Literal] 0 -# 476| Type = [IntType] int -# 476| Value = [Literal] 0 -# 476| ValueCategory = prvalue -# 474| getStmt(): [BlockStmt] { ... } -# 475| getStmt(0): [DeclStmt] declaration -# 475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x152 -# 475| Type = [Struct] String -# 475| getVariable().getInitializer(): [Initializer] initializer for x152 -# 475| getExpr(): [ConstructorCall] call to String -# 475| Type = [VoidType] void -# 475| ValueCategory = prvalue -# 476| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 476| Type = [VoidType] void -# 476| ValueCategory = prvalue -# 476| getQualifier(): [VariableAccess] x152 -# 476| Type = [Struct] String -# 476| ValueCategory = lvalue -# 476| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 476| Conversion = [BoolConversion] conversion to bool -# 476| Type = [BoolType] bool -# 476| Value = [CStyleCast] 0 -# 476| ValueCategory = prvalue -# 477| getStmt(153): [DoStmt] do (...) ... -# 479| getCondition(): [Literal] 0 -# 479| Type = [IntType] int -# 479| Value = [Literal] 0 -# 479| ValueCategory = prvalue -# 477| getStmt(): [BlockStmt] { ... } -# 478| getStmt(0): [DeclStmt] declaration -# 478| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x153 -# 478| Type = [Struct] String -# 478| getVariable().getInitializer(): [Initializer] initializer for x153 -# 478| getExpr(): [ConstructorCall] call to String -# 478| Type = [VoidType] void -# 478| ValueCategory = prvalue -# 479| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 479| Type = [VoidType] void -# 479| ValueCategory = prvalue -# 479| getQualifier(): [VariableAccess] x153 -# 479| Type = [Struct] String -# 479| ValueCategory = lvalue -# 479| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 479| Conversion = [BoolConversion] conversion to bool -# 479| Type = [BoolType] bool -# 479| Value = [CStyleCast] 0 -# 479| ValueCategory = prvalue -# 480| getStmt(154): [DoStmt] do (...) ... -# 482| getCondition(): [Literal] 0 -# 482| Type = [IntType] int -# 482| Value = [Literal] 0 -# 482| ValueCategory = prvalue -# 480| getStmt(): [BlockStmt] { ... } -# 481| getStmt(0): [DeclStmt] declaration -# 481| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x154 -# 481| Type = [Struct] String -# 481| getVariable().getInitializer(): [Initializer] initializer for x154 -# 481| getExpr(): [ConstructorCall] call to String -# 481| Type = [VoidType] void -# 481| ValueCategory = prvalue -# 482| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 482| Type = [VoidType] void -# 482| ValueCategory = prvalue -# 482| getQualifier(): [VariableAccess] x154 -# 482| Type = [Struct] String -# 482| ValueCategory = lvalue -# 482| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 482| Conversion = [BoolConversion] conversion to bool -# 482| Type = [BoolType] bool -# 482| Value = [CStyleCast] 0 -# 482| ValueCategory = prvalue -# 483| getStmt(155): [DoStmt] do (...) ... -# 485| getCondition(): [Literal] 0 -# 485| Type = [IntType] int -# 485| Value = [Literal] 0 -# 485| ValueCategory = prvalue -# 483| getStmt(): [BlockStmt] { ... } -# 484| getStmt(0): [DeclStmt] declaration -# 484| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x155 -# 484| Type = [Struct] String -# 484| getVariable().getInitializer(): [Initializer] initializer for x155 -# 484| getExpr(): [ConstructorCall] call to String -# 484| Type = [VoidType] void -# 484| ValueCategory = prvalue -# 485| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 485| Type = [VoidType] void -# 485| ValueCategory = prvalue -# 485| getQualifier(): [VariableAccess] x155 -# 485| Type = [Struct] String -# 485| ValueCategory = lvalue -# 485| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 485| Conversion = [BoolConversion] conversion to bool -# 485| Type = [BoolType] bool -# 485| Value = [CStyleCast] 0 -# 485| ValueCategory = prvalue -# 486| getStmt(156): [DoStmt] do (...) ... -# 488| getCondition(): [Literal] 0 -# 488| Type = [IntType] int -# 488| Value = [Literal] 0 -# 488| ValueCategory = prvalue -# 486| getStmt(): [BlockStmt] { ... } -# 487| getStmt(0): [DeclStmt] declaration -# 487| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x156 -# 487| Type = [Struct] String -# 487| getVariable().getInitializer(): [Initializer] initializer for x156 -# 487| getExpr(): [ConstructorCall] call to String -# 487| Type = [VoidType] void -# 487| ValueCategory = prvalue -# 488| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 488| Type = [VoidType] void -# 488| ValueCategory = prvalue -# 488| getQualifier(): [VariableAccess] x156 -# 488| Type = [Struct] String -# 488| ValueCategory = lvalue -# 488| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 488| Conversion = [BoolConversion] conversion to bool -# 488| Type = [BoolType] bool -# 488| Value = [CStyleCast] 0 -# 488| ValueCategory = prvalue -# 489| getStmt(157): [DoStmt] do (...) ... -# 491| getCondition(): [Literal] 0 -# 491| Type = [IntType] int -# 491| Value = [Literal] 0 -# 491| ValueCategory = prvalue -# 489| getStmt(): [BlockStmt] { ... } -# 490| getStmt(0): [DeclStmt] declaration -# 490| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x157 -# 490| Type = [Struct] String -# 490| getVariable().getInitializer(): [Initializer] initializer for x157 -# 490| getExpr(): [ConstructorCall] call to String -# 490| Type = [VoidType] void -# 490| ValueCategory = prvalue -# 491| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 491| Type = [VoidType] void -# 491| ValueCategory = prvalue -# 491| getQualifier(): [VariableAccess] x157 -# 491| Type = [Struct] String -# 491| ValueCategory = lvalue -# 491| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 491| Conversion = [BoolConversion] conversion to bool -# 491| Type = [BoolType] bool -# 491| Value = [CStyleCast] 0 -# 491| ValueCategory = prvalue -# 492| getStmt(158): [DoStmt] do (...) ... -# 494| getCondition(): [Literal] 0 -# 494| Type = [IntType] int -# 494| Value = [Literal] 0 -# 494| ValueCategory = prvalue -# 492| getStmt(): [BlockStmt] { ... } -# 493| getStmt(0): [DeclStmt] declaration -# 493| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x158 -# 493| Type = [Struct] String -# 493| getVariable().getInitializer(): [Initializer] initializer for x158 -# 493| getExpr(): [ConstructorCall] call to String -# 493| Type = [VoidType] void -# 493| ValueCategory = prvalue -# 494| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 494| Type = [VoidType] void -# 494| ValueCategory = prvalue -# 494| getQualifier(): [VariableAccess] x158 -# 494| Type = [Struct] String -# 494| ValueCategory = lvalue -# 494| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 494| Conversion = [BoolConversion] conversion to bool -# 494| Type = [BoolType] bool -# 494| Value = [CStyleCast] 0 -# 494| ValueCategory = prvalue -# 495| getStmt(159): [DoStmt] do (...) ... -# 497| getCondition(): [Literal] 0 -# 497| Type = [IntType] int -# 497| Value = [Literal] 0 -# 497| ValueCategory = prvalue -# 495| getStmt(): [BlockStmt] { ... } -# 496| getStmt(0): [DeclStmt] declaration -# 496| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x159 -# 496| Type = [Struct] String -# 496| getVariable().getInitializer(): [Initializer] initializer for x159 -# 496| getExpr(): [ConstructorCall] call to String -# 496| Type = [VoidType] void -# 496| ValueCategory = prvalue -# 497| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 497| Type = [VoidType] void -# 497| ValueCategory = prvalue -# 497| getQualifier(): [VariableAccess] x159 -# 497| Type = [Struct] String -# 497| ValueCategory = lvalue -# 497| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 497| Conversion = [BoolConversion] conversion to bool -# 497| Type = [BoolType] bool -# 497| Value = [CStyleCast] 0 -# 497| ValueCategory = prvalue -# 498| getStmt(160): [DoStmt] do (...) ... -# 500| getCondition(): [Literal] 0 -# 500| Type = [IntType] int -# 500| Value = [Literal] 0 -# 500| ValueCategory = prvalue -# 498| getStmt(): [BlockStmt] { ... } -# 499| getStmt(0): [DeclStmt] declaration -# 499| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x160 -# 499| Type = [Struct] String -# 499| getVariable().getInitializer(): [Initializer] initializer for x160 -# 499| getExpr(): [ConstructorCall] call to String -# 499| Type = [VoidType] void -# 499| ValueCategory = prvalue -# 500| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 500| Type = [VoidType] void -# 500| ValueCategory = prvalue -# 500| getQualifier(): [VariableAccess] x160 -# 500| Type = [Struct] String -# 500| ValueCategory = lvalue -# 500| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 500| Conversion = [BoolConversion] conversion to bool -# 500| Type = [BoolType] bool -# 500| Value = [CStyleCast] 0 -# 500| ValueCategory = prvalue -# 501| getStmt(161): [DoStmt] do (...) ... -# 503| getCondition(): [Literal] 0 -# 503| Type = [IntType] int -# 503| Value = [Literal] 0 -# 503| ValueCategory = prvalue -# 501| getStmt(): [BlockStmt] { ... } -# 502| getStmt(0): [DeclStmt] declaration -# 502| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x161 -# 502| Type = [Struct] String -# 502| getVariable().getInitializer(): [Initializer] initializer for x161 -# 502| getExpr(): [ConstructorCall] call to String -# 502| Type = [VoidType] void -# 502| ValueCategory = prvalue -# 503| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 503| Type = [VoidType] void -# 503| ValueCategory = prvalue -# 503| getQualifier(): [VariableAccess] x161 -# 503| Type = [Struct] String -# 503| ValueCategory = lvalue -# 503| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 503| Conversion = [BoolConversion] conversion to bool -# 503| Type = [BoolType] bool -# 503| Value = [CStyleCast] 0 -# 503| ValueCategory = prvalue -# 504| getStmt(162): [DoStmt] do (...) ... -# 506| getCondition(): [Literal] 0 -# 506| Type = [IntType] int -# 506| Value = [Literal] 0 -# 506| ValueCategory = prvalue -# 504| getStmt(): [BlockStmt] { ... } -# 505| getStmt(0): [DeclStmt] declaration -# 505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x162 -# 505| Type = [Struct] String -# 505| getVariable().getInitializer(): [Initializer] initializer for x162 -# 505| getExpr(): [ConstructorCall] call to String -# 505| Type = [VoidType] void -# 505| ValueCategory = prvalue -# 506| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 506| Type = [VoidType] void -# 506| ValueCategory = prvalue -# 506| getQualifier(): [VariableAccess] x162 -# 506| Type = [Struct] String -# 506| ValueCategory = lvalue -# 506| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 506| Conversion = [BoolConversion] conversion to bool -# 506| Type = [BoolType] bool -# 506| Value = [CStyleCast] 0 -# 506| ValueCategory = prvalue -# 507| getStmt(163): [DoStmt] do (...) ... -# 509| getCondition(): [Literal] 0 -# 509| Type = [IntType] int -# 509| Value = [Literal] 0 -# 509| ValueCategory = prvalue -# 507| getStmt(): [BlockStmt] { ... } -# 508| getStmt(0): [DeclStmt] declaration -# 508| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x163 -# 508| Type = [Struct] String -# 508| getVariable().getInitializer(): [Initializer] initializer for x163 -# 508| getExpr(): [ConstructorCall] call to String -# 508| Type = [VoidType] void -# 508| ValueCategory = prvalue -# 509| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 509| Type = [VoidType] void -# 509| ValueCategory = prvalue -# 509| getQualifier(): [VariableAccess] x163 -# 509| Type = [Struct] String -# 509| ValueCategory = lvalue -# 509| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 509| Conversion = [BoolConversion] conversion to bool -# 509| Type = [BoolType] bool -# 509| Value = [CStyleCast] 0 -# 509| ValueCategory = prvalue -# 510| getStmt(164): [DoStmt] do (...) ... -# 512| getCondition(): [Literal] 0 -# 512| Type = [IntType] int -# 512| Value = [Literal] 0 -# 512| ValueCategory = prvalue -# 510| getStmt(): [BlockStmt] { ... } -# 511| getStmt(0): [DeclStmt] declaration -# 511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x164 -# 511| Type = [Struct] String -# 511| getVariable().getInitializer(): [Initializer] initializer for x164 -# 511| getExpr(): [ConstructorCall] call to String -# 511| Type = [VoidType] void -# 511| ValueCategory = prvalue -# 512| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 512| Type = [VoidType] void -# 512| ValueCategory = prvalue -# 512| getQualifier(): [VariableAccess] x164 -# 512| Type = [Struct] String -# 512| ValueCategory = lvalue -# 512| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 512| Conversion = [BoolConversion] conversion to bool -# 512| Type = [BoolType] bool -# 512| Value = [CStyleCast] 0 -# 512| ValueCategory = prvalue -# 513| getStmt(165): [DoStmt] do (...) ... -# 515| getCondition(): [Literal] 0 -# 515| Type = [IntType] int -# 515| Value = [Literal] 0 -# 515| ValueCategory = prvalue -# 513| getStmt(): [BlockStmt] { ... } -# 514| getStmt(0): [DeclStmt] declaration -# 514| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x165 -# 514| Type = [Struct] String -# 514| getVariable().getInitializer(): [Initializer] initializer for x165 -# 514| getExpr(): [ConstructorCall] call to String -# 514| Type = [VoidType] void -# 514| ValueCategory = prvalue -# 515| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 515| Type = [VoidType] void -# 515| ValueCategory = prvalue -# 515| getQualifier(): [VariableAccess] x165 -# 515| Type = [Struct] String -# 515| ValueCategory = lvalue -# 515| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 515| Conversion = [BoolConversion] conversion to bool -# 515| Type = [BoolType] bool -# 515| Value = [CStyleCast] 0 -# 515| ValueCategory = prvalue -# 516| getStmt(166): [DoStmt] do (...) ... -# 518| getCondition(): [Literal] 0 -# 518| Type = [IntType] int -# 518| Value = [Literal] 0 -# 518| ValueCategory = prvalue -# 516| getStmt(): [BlockStmt] { ... } -# 517| getStmt(0): [DeclStmt] declaration -# 517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x166 -# 517| Type = [Struct] String -# 517| getVariable().getInitializer(): [Initializer] initializer for x166 -# 517| getExpr(): [ConstructorCall] call to String -# 517| Type = [VoidType] void -# 517| ValueCategory = prvalue -# 518| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 518| Type = [VoidType] void -# 518| ValueCategory = prvalue -# 518| getQualifier(): [VariableAccess] x166 -# 518| Type = [Struct] String -# 518| ValueCategory = lvalue -# 518| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 518| Conversion = [BoolConversion] conversion to bool -# 518| Type = [BoolType] bool -# 518| Value = [CStyleCast] 0 -# 518| ValueCategory = prvalue -# 519| getStmt(167): [DoStmt] do (...) ... -# 521| getCondition(): [Literal] 0 -# 521| Type = [IntType] int -# 521| Value = [Literal] 0 -# 521| ValueCategory = prvalue -# 519| getStmt(): [BlockStmt] { ... } -# 520| getStmt(0): [DeclStmt] declaration -# 520| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x167 -# 520| Type = [Struct] String -# 520| getVariable().getInitializer(): [Initializer] initializer for x167 -# 520| getExpr(): [ConstructorCall] call to String -# 520| Type = [VoidType] void -# 520| ValueCategory = prvalue -# 521| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 521| Type = [VoidType] void -# 521| ValueCategory = prvalue -# 521| getQualifier(): [VariableAccess] x167 -# 521| Type = [Struct] String -# 521| ValueCategory = lvalue -# 521| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 521| Conversion = [BoolConversion] conversion to bool -# 521| Type = [BoolType] bool -# 521| Value = [CStyleCast] 0 -# 521| ValueCategory = prvalue -# 522| getStmt(168): [DoStmt] do (...) ... -# 524| getCondition(): [Literal] 0 -# 524| Type = [IntType] int -# 524| Value = [Literal] 0 -# 524| ValueCategory = prvalue -# 522| getStmt(): [BlockStmt] { ... } -# 523| getStmt(0): [DeclStmt] declaration -# 523| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x168 -# 523| Type = [Struct] String -# 523| getVariable().getInitializer(): [Initializer] initializer for x168 -# 523| getExpr(): [ConstructorCall] call to String -# 523| Type = [VoidType] void -# 523| ValueCategory = prvalue -# 524| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 524| Type = [VoidType] void -# 524| ValueCategory = prvalue -# 524| getQualifier(): [VariableAccess] x168 -# 524| Type = [Struct] String -# 524| ValueCategory = lvalue -# 524| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 524| Conversion = [BoolConversion] conversion to bool -# 524| Type = [BoolType] bool -# 524| Value = [CStyleCast] 0 -# 524| ValueCategory = prvalue -# 525| getStmt(169): [DoStmt] do (...) ... -# 527| getCondition(): [Literal] 0 -# 527| Type = [IntType] int -# 527| Value = [Literal] 0 -# 527| ValueCategory = prvalue -# 525| getStmt(): [BlockStmt] { ... } -# 526| getStmt(0): [DeclStmt] declaration -# 526| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x169 -# 526| Type = [Struct] String -# 526| getVariable().getInitializer(): [Initializer] initializer for x169 -# 526| getExpr(): [ConstructorCall] call to String -# 526| Type = [VoidType] void -# 526| ValueCategory = prvalue -# 527| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 527| Type = [VoidType] void -# 527| ValueCategory = prvalue -# 527| getQualifier(): [VariableAccess] x169 -# 527| Type = [Struct] String -# 527| ValueCategory = lvalue -# 527| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 527| Conversion = [BoolConversion] conversion to bool -# 527| Type = [BoolType] bool -# 527| Value = [CStyleCast] 0 -# 527| ValueCategory = prvalue -# 528| getStmt(170): [DoStmt] do (...) ... -# 530| getCondition(): [Literal] 0 -# 530| Type = [IntType] int -# 530| Value = [Literal] 0 -# 530| ValueCategory = prvalue -# 528| getStmt(): [BlockStmt] { ... } -# 529| getStmt(0): [DeclStmt] declaration -# 529| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x170 -# 529| Type = [Struct] String -# 529| getVariable().getInitializer(): [Initializer] initializer for x170 -# 529| getExpr(): [ConstructorCall] call to String -# 529| Type = [VoidType] void -# 529| ValueCategory = prvalue -# 530| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 530| Type = [VoidType] void -# 530| ValueCategory = prvalue -# 530| getQualifier(): [VariableAccess] x170 -# 530| Type = [Struct] String -# 530| ValueCategory = lvalue -# 530| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 530| Conversion = [BoolConversion] conversion to bool -# 530| Type = [BoolType] bool -# 530| Value = [CStyleCast] 0 -# 530| ValueCategory = prvalue -# 531| getStmt(171): [DoStmt] do (...) ... -# 533| getCondition(): [Literal] 0 -# 533| Type = [IntType] int -# 533| Value = [Literal] 0 -# 533| ValueCategory = prvalue -# 531| getStmt(): [BlockStmt] { ... } -# 532| getStmt(0): [DeclStmt] declaration -# 532| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x171 -# 532| Type = [Struct] String -# 532| getVariable().getInitializer(): [Initializer] initializer for x171 -# 532| getExpr(): [ConstructorCall] call to String -# 532| Type = [VoidType] void -# 532| ValueCategory = prvalue -# 533| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 533| Type = [VoidType] void -# 533| ValueCategory = prvalue -# 533| getQualifier(): [VariableAccess] x171 -# 533| Type = [Struct] String -# 533| ValueCategory = lvalue -# 533| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 533| Conversion = [BoolConversion] conversion to bool -# 533| Type = [BoolType] bool -# 533| Value = [CStyleCast] 0 -# 533| ValueCategory = prvalue -# 534| getStmt(172): [DoStmt] do (...) ... -# 536| getCondition(): [Literal] 0 -# 536| Type = [IntType] int -# 536| Value = [Literal] 0 -# 536| ValueCategory = prvalue -# 534| getStmt(): [BlockStmt] { ... } -# 535| getStmt(0): [DeclStmt] declaration -# 535| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x172 -# 535| Type = [Struct] String -# 535| getVariable().getInitializer(): [Initializer] initializer for x172 -# 535| getExpr(): [ConstructorCall] call to String -# 535| Type = [VoidType] void -# 535| ValueCategory = prvalue -# 536| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 536| Type = [VoidType] void -# 536| ValueCategory = prvalue -# 536| getQualifier(): [VariableAccess] x172 -# 536| Type = [Struct] String -# 536| ValueCategory = lvalue -# 536| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 536| Conversion = [BoolConversion] conversion to bool -# 536| Type = [BoolType] bool -# 536| Value = [CStyleCast] 0 -# 536| ValueCategory = prvalue -# 537| getStmt(173): [DoStmt] do (...) ... -# 539| getCondition(): [Literal] 0 -# 539| Type = [IntType] int -# 539| Value = [Literal] 0 -# 539| ValueCategory = prvalue -# 537| getStmt(): [BlockStmt] { ... } -# 538| getStmt(0): [DeclStmt] declaration -# 538| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x173 -# 538| Type = [Struct] String -# 538| getVariable().getInitializer(): [Initializer] initializer for x173 -# 538| getExpr(): [ConstructorCall] call to String -# 538| Type = [VoidType] void -# 538| ValueCategory = prvalue -# 539| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 539| Type = [VoidType] void -# 539| ValueCategory = prvalue -# 539| getQualifier(): [VariableAccess] x173 -# 539| Type = [Struct] String -# 539| ValueCategory = lvalue -# 539| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 539| Conversion = [BoolConversion] conversion to bool -# 539| Type = [BoolType] bool -# 539| Value = [CStyleCast] 0 -# 539| ValueCategory = prvalue -# 540| getStmt(174): [DoStmt] do (...) ... -# 542| getCondition(): [Literal] 0 -# 542| Type = [IntType] int -# 542| Value = [Literal] 0 -# 542| ValueCategory = prvalue -# 540| getStmt(): [BlockStmt] { ... } -# 541| getStmt(0): [DeclStmt] declaration -# 541| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x174 -# 541| Type = [Struct] String -# 541| getVariable().getInitializer(): [Initializer] initializer for x174 -# 541| getExpr(): [ConstructorCall] call to String -# 541| Type = [VoidType] void -# 541| ValueCategory = prvalue -# 542| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 542| Type = [VoidType] void -# 542| ValueCategory = prvalue -# 542| getQualifier(): [VariableAccess] x174 -# 542| Type = [Struct] String -# 542| ValueCategory = lvalue -# 542| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 542| Conversion = [BoolConversion] conversion to bool -# 542| Type = [BoolType] bool -# 542| Value = [CStyleCast] 0 -# 542| ValueCategory = prvalue -# 543| getStmt(175): [DoStmt] do (...) ... -# 545| getCondition(): [Literal] 0 -# 545| Type = [IntType] int -# 545| Value = [Literal] 0 -# 545| ValueCategory = prvalue -# 543| getStmt(): [BlockStmt] { ... } -# 544| getStmt(0): [DeclStmt] declaration -# 544| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x175 -# 544| Type = [Struct] String -# 544| getVariable().getInitializer(): [Initializer] initializer for x175 -# 544| getExpr(): [ConstructorCall] call to String -# 544| Type = [VoidType] void -# 544| ValueCategory = prvalue -# 545| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 545| Type = [VoidType] void -# 545| ValueCategory = prvalue -# 545| getQualifier(): [VariableAccess] x175 -# 545| Type = [Struct] String -# 545| ValueCategory = lvalue -# 545| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 545| Conversion = [BoolConversion] conversion to bool -# 545| Type = [BoolType] bool -# 545| Value = [CStyleCast] 0 -# 545| ValueCategory = prvalue -# 546| getStmt(176): [DoStmt] do (...) ... -# 548| getCondition(): [Literal] 0 -# 548| Type = [IntType] int -# 548| Value = [Literal] 0 -# 548| ValueCategory = prvalue -# 546| getStmt(): [BlockStmt] { ... } -# 547| getStmt(0): [DeclStmt] declaration -# 547| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x176 -# 547| Type = [Struct] String -# 547| getVariable().getInitializer(): [Initializer] initializer for x176 -# 547| getExpr(): [ConstructorCall] call to String -# 547| Type = [VoidType] void -# 547| ValueCategory = prvalue -# 548| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 548| Type = [VoidType] void -# 548| ValueCategory = prvalue -# 548| getQualifier(): [VariableAccess] x176 -# 548| Type = [Struct] String -# 548| ValueCategory = lvalue -# 548| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 548| Conversion = [BoolConversion] conversion to bool -# 548| Type = [BoolType] bool -# 548| Value = [CStyleCast] 0 -# 548| ValueCategory = prvalue -# 549| getStmt(177): [DoStmt] do (...) ... -# 551| getCondition(): [Literal] 0 -# 551| Type = [IntType] int -# 551| Value = [Literal] 0 -# 551| ValueCategory = prvalue -# 549| getStmt(): [BlockStmt] { ... } -# 550| getStmt(0): [DeclStmt] declaration -# 550| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x177 -# 550| Type = [Struct] String -# 550| getVariable().getInitializer(): [Initializer] initializer for x177 -# 550| getExpr(): [ConstructorCall] call to String -# 550| Type = [VoidType] void -# 550| ValueCategory = prvalue -# 551| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 551| Type = [VoidType] void -# 551| ValueCategory = prvalue -# 551| getQualifier(): [VariableAccess] x177 -# 551| Type = [Struct] String -# 551| ValueCategory = lvalue -# 551| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 551| Conversion = [BoolConversion] conversion to bool -# 551| Type = [BoolType] bool -# 551| Value = [CStyleCast] 0 -# 551| ValueCategory = prvalue -# 552| getStmt(178): [DoStmt] do (...) ... -# 554| getCondition(): [Literal] 0 -# 554| Type = [IntType] int -# 554| Value = [Literal] 0 -# 554| ValueCategory = prvalue -# 552| getStmt(): [BlockStmt] { ... } -# 553| getStmt(0): [DeclStmt] declaration -# 553| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x178 -# 553| Type = [Struct] String -# 553| getVariable().getInitializer(): [Initializer] initializer for x178 -# 553| getExpr(): [ConstructorCall] call to String -# 553| Type = [VoidType] void -# 553| ValueCategory = prvalue -# 554| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 554| Type = [VoidType] void -# 554| ValueCategory = prvalue -# 554| getQualifier(): [VariableAccess] x178 -# 554| Type = [Struct] String -# 554| ValueCategory = lvalue -# 554| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 554| Conversion = [BoolConversion] conversion to bool -# 554| Type = [BoolType] bool -# 554| Value = [CStyleCast] 0 -# 554| ValueCategory = prvalue -# 555| getStmt(179): [DoStmt] do (...) ... -# 557| getCondition(): [Literal] 0 -# 557| Type = [IntType] int -# 557| Value = [Literal] 0 -# 557| ValueCategory = prvalue -# 555| getStmt(): [BlockStmt] { ... } -# 556| getStmt(0): [DeclStmt] declaration -# 556| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x179 -# 556| Type = [Struct] String -# 556| getVariable().getInitializer(): [Initializer] initializer for x179 -# 556| getExpr(): [ConstructorCall] call to String -# 556| Type = [VoidType] void -# 556| ValueCategory = prvalue -# 557| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 557| Type = [VoidType] void -# 557| ValueCategory = prvalue -# 557| getQualifier(): [VariableAccess] x179 -# 557| Type = [Struct] String -# 557| ValueCategory = lvalue -# 557| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 557| Conversion = [BoolConversion] conversion to bool -# 557| Type = [BoolType] bool -# 557| Value = [CStyleCast] 0 -# 557| ValueCategory = prvalue -# 558| getStmt(180): [DoStmt] do (...) ... -# 560| getCondition(): [Literal] 0 -# 560| Type = [IntType] int -# 560| Value = [Literal] 0 -# 560| ValueCategory = prvalue -# 558| getStmt(): [BlockStmt] { ... } -# 559| getStmt(0): [DeclStmt] declaration -# 559| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x180 -# 559| Type = [Struct] String -# 559| getVariable().getInitializer(): [Initializer] initializer for x180 -# 559| getExpr(): [ConstructorCall] call to String -# 559| Type = [VoidType] void -# 559| ValueCategory = prvalue -# 560| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 560| Type = [VoidType] void -# 560| ValueCategory = prvalue -# 560| getQualifier(): [VariableAccess] x180 -# 560| Type = [Struct] String -# 560| ValueCategory = lvalue -# 560| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 560| Conversion = [BoolConversion] conversion to bool -# 560| Type = [BoolType] bool -# 560| Value = [CStyleCast] 0 -# 560| ValueCategory = prvalue -# 561| getStmt(181): [DoStmt] do (...) ... -# 563| getCondition(): [Literal] 0 -# 563| Type = [IntType] int -# 563| Value = [Literal] 0 -# 563| ValueCategory = prvalue -# 561| getStmt(): [BlockStmt] { ... } -# 562| getStmt(0): [DeclStmt] declaration -# 562| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x181 -# 562| Type = [Struct] String -# 562| getVariable().getInitializer(): [Initializer] initializer for x181 -# 562| getExpr(): [ConstructorCall] call to String -# 562| Type = [VoidType] void -# 562| ValueCategory = prvalue -# 563| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 563| Type = [VoidType] void -# 563| ValueCategory = prvalue -# 563| getQualifier(): [VariableAccess] x181 -# 563| Type = [Struct] String -# 563| ValueCategory = lvalue -# 563| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 563| Conversion = [BoolConversion] conversion to bool -# 563| Type = [BoolType] bool -# 563| Value = [CStyleCast] 0 -# 563| ValueCategory = prvalue -# 564| getStmt(182): [DoStmt] do (...) ... -# 566| getCondition(): [Literal] 0 -# 566| Type = [IntType] int -# 566| Value = [Literal] 0 -# 566| ValueCategory = prvalue -# 564| getStmt(): [BlockStmt] { ... } -# 565| getStmt(0): [DeclStmt] declaration -# 565| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x182 -# 565| Type = [Struct] String -# 565| getVariable().getInitializer(): [Initializer] initializer for x182 -# 565| getExpr(): [ConstructorCall] call to String -# 565| Type = [VoidType] void -# 565| ValueCategory = prvalue -# 566| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 566| Type = [VoidType] void -# 566| ValueCategory = prvalue -# 566| getQualifier(): [VariableAccess] x182 -# 566| Type = [Struct] String -# 566| ValueCategory = lvalue -# 566| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 566| Conversion = [BoolConversion] conversion to bool -# 566| Type = [BoolType] bool -# 566| Value = [CStyleCast] 0 -# 566| ValueCategory = prvalue -# 567| getStmt(183): [DoStmt] do (...) ... -# 569| getCondition(): [Literal] 0 -# 569| Type = [IntType] int -# 569| Value = [Literal] 0 -# 569| ValueCategory = prvalue -# 567| getStmt(): [BlockStmt] { ... } -# 568| getStmt(0): [DeclStmt] declaration -# 568| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x183 -# 568| Type = [Struct] String -# 568| getVariable().getInitializer(): [Initializer] initializer for x183 -# 568| getExpr(): [ConstructorCall] call to String -# 568| Type = [VoidType] void -# 568| ValueCategory = prvalue -# 569| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 569| Type = [VoidType] void -# 569| ValueCategory = prvalue -# 569| getQualifier(): [VariableAccess] x183 -# 569| Type = [Struct] String -# 569| ValueCategory = lvalue -# 569| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 569| Conversion = [BoolConversion] conversion to bool -# 569| Type = [BoolType] bool -# 569| Value = [CStyleCast] 0 -# 569| ValueCategory = prvalue -# 570| getStmt(184): [DoStmt] do (...) ... -# 572| getCondition(): [Literal] 0 -# 572| Type = [IntType] int -# 572| Value = [Literal] 0 -# 572| ValueCategory = prvalue -# 570| getStmt(): [BlockStmt] { ... } -# 571| getStmt(0): [DeclStmt] declaration -# 571| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x184 -# 571| Type = [Struct] String -# 571| getVariable().getInitializer(): [Initializer] initializer for x184 -# 571| getExpr(): [ConstructorCall] call to String -# 571| Type = [VoidType] void -# 571| ValueCategory = prvalue -# 572| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 572| Type = [VoidType] void -# 572| ValueCategory = prvalue -# 572| getQualifier(): [VariableAccess] x184 -# 572| Type = [Struct] String -# 572| ValueCategory = lvalue -# 572| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 572| Conversion = [BoolConversion] conversion to bool -# 572| Type = [BoolType] bool -# 572| Value = [CStyleCast] 0 -# 572| ValueCategory = prvalue -# 573| getStmt(185): [DoStmt] do (...) ... -# 575| getCondition(): [Literal] 0 -# 575| Type = [IntType] int -# 575| Value = [Literal] 0 -# 575| ValueCategory = prvalue -# 573| getStmt(): [BlockStmt] { ... } -# 574| getStmt(0): [DeclStmt] declaration -# 574| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x185 -# 574| Type = [Struct] String -# 574| getVariable().getInitializer(): [Initializer] initializer for x185 -# 574| getExpr(): [ConstructorCall] call to String -# 574| Type = [VoidType] void -# 574| ValueCategory = prvalue -# 575| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 575| Type = [VoidType] void -# 575| ValueCategory = prvalue -# 575| getQualifier(): [VariableAccess] x185 -# 575| Type = [Struct] String -# 575| ValueCategory = lvalue -# 575| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 575| Conversion = [BoolConversion] conversion to bool -# 575| Type = [BoolType] bool -# 575| Value = [CStyleCast] 0 -# 575| ValueCategory = prvalue -# 576| getStmt(186): [DoStmt] do (...) ... -# 578| getCondition(): [Literal] 0 -# 578| Type = [IntType] int -# 578| Value = [Literal] 0 -# 578| ValueCategory = prvalue -# 576| getStmt(): [BlockStmt] { ... } -# 577| getStmt(0): [DeclStmt] declaration -# 577| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x186 -# 577| Type = [Struct] String -# 577| getVariable().getInitializer(): [Initializer] initializer for x186 -# 577| getExpr(): [ConstructorCall] call to String -# 577| Type = [VoidType] void -# 577| ValueCategory = prvalue -# 578| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 578| Type = [VoidType] void -# 578| ValueCategory = prvalue -# 578| getQualifier(): [VariableAccess] x186 -# 578| Type = [Struct] String -# 578| ValueCategory = lvalue -# 578| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 578| Conversion = [BoolConversion] conversion to bool -# 578| Type = [BoolType] bool -# 578| Value = [CStyleCast] 0 -# 578| ValueCategory = prvalue -# 579| getStmt(187): [DoStmt] do (...) ... -# 581| getCondition(): [Literal] 0 -# 581| Type = [IntType] int -# 581| Value = [Literal] 0 -# 581| ValueCategory = prvalue -# 579| getStmt(): [BlockStmt] { ... } -# 580| getStmt(0): [DeclStmt] declaration -# 580| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x187 -# 580| Type = [Struct] String -# 580| getVariable().getInitializer(): [Initializer] initializer for x187 -# 580| getExpr(): [ConstructorCall] call to String -# 580| Type = [VoidType] void -# 580| ValueCategory = prvalue -# 581| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 581| Type = [VoidType] void -# 581| ValueCategory = prvalue -# 581| getQualifier(): [VariableAccess] x187 -# 581| Type = [Struct] String -# 581| ValueCategory = lvalue -# 581| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 581| Conversion = [BoolConversion] conversion to bool -# 581| Type = [BoolType] bool -# 581| Value = [CStyleCast] 0 -# 581| ValueCategory = prvalue -# 582| getStmt(188): [DoStmt] do (...) ... -# 584| getCondition(): [Literal] 0 -# 584| Type = [IntType] int -# 584| Value = [Literal] 0 -# 584| ValueCategory = prvalue -# 582| getStmt(): [BlockStmt] { ... } -# 583| getStmt(0): [DeclStmt] declaration -# 583| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x188 -# 583| Type = [Struct] String -# 583| getVariable().getInitializer(): [Initializer] initializer for x188 -# 583| getExpr(): [ConstructorCall] call to String -# 583| Type = [VoidType] void -# 583| ValueCategory = prvalue -# 584| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 584| Type = [VoidType] void -# 584| ValueCategory = prvalue -# 584| getQualifier(): [VariableAccess] x188 -# 584| Type = [Struct] String -# 584| ValueCategory = lvalue -# 584| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 584| Conversion = [BoolConversion] conversion to bool -# 584| Type = [BoolType] bool -# 584| Value = [CStyleCast] 0 -# 584| ValueCategory = prvalue -# 585| getStmt(189): [DoStmt] do (...) ... -# 587| getCondition(): [Literal] 0 -# 587| Type = [IntType] int -# 587| Value = [Literal] 0 -# 587| ValueCategory = prvalue -# 585| getStmt(): [BlockStmt] { ... } -# 586| getStmt(0): [DeclStmt] declaration -# 586| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x189 -# 586| Type = [Struct] String -# 586| getVariable().getInitializer(): [Initializer] initializer for x189 -# 586| getExpr(): [ConstructorCall] call to String -# 586| Type = [VoidType] void -# 586| ValueCategory = prvalue -# 587| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 587| Type = [VoidType] void -# 587| ValueCategory = prvalue -# 587| getQualifier(): [VariableAccess] x189 -# 587| Type = [Struct] String -# 587| ValueCategory = lvalue -# 587| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 587| Conversion = [BoolConversion] conversion to bool -# 587| Type = [BoolType] bool -# 587| Value = [CStyleCast] 0 -# 587| ValueCategory = prvalue -# 588| getStmt(190): [DoStmt] do (...) ... -# 590| getCondition(): [Literal] 0 -# 590| Type = [IntType] int -# 590| Value = [Literal] 0 -# 590| ValueCategory = prvalue -# 588| getStmt(): [BlockStmt] { ... } -# 589| getStmt(0): [DeclStmt] declaration -# 589| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x190 -# 589| Type = [Struct] String -# 589| getVariable().getInitializer(): [Initializer] initializer for x190 -# 589| getExpr(): [ConstructorCall] call to String -# 589| Type = [VoidType] void -# 589| ValueCategory = prvalue -# 590| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 590| Type = [VoidType] void -# 590| ValueCategory = prvalue -# 590| getQualifier(): [VariableAccess] x190 -# 590| Type = [Struct] String -# 590| ValueCategory = lvalue -# 590| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 590| Conversion = [BoolConversion] conversion to bool -# 590| Type = [BoolType] bool -# 590| Value = [CStyleCast] 0 -# 590| ValueCategory = prvalue -# 591| getStmt(191): [DoStmt] do (...) ... -# 593| getCondition(): [Literal] 0 -# 593| Type = [IntType] int -# 593| Value = [Literal] 0 -# 593| ValueCategory = prvalue -# 591| getStmt(): [BlockStmt] { ... } -# 592| getStmt(0): [DeclStmt] declaration -# 592| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x191 -# 592| Type = [Struct] String -# 592| getVariable().getInitializer(): [Initializer] initializer for x191 -# 592| getExpr(): [ConstructorCall] call to String -# 592| Type = [VoidType] void -# 592| ValueCategory = prvalue -# 593| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 593| Type = [VoidType] void -# 593| ValueCategory = prvalue -# 593| getQualifier(): [VariableAccess] x191 -# 593| Type = [Struct] String -# 593| ValueCategory = lvalue -# 593| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 593| Conversion = [BoolConversion] conversion to bool -# 593| Type = [BoolType] bool -# 593| Value = [CStyleCast] 0 -# 593| ValueCategory = prvalue -# 594| getStmt(192): [DoStmt] do (...) ... -# 596| getCondition(): [Literal] 0 -# 596| Type = [IntType] int -# 596| Value = [Literal] 0 -# 596| ValueCategory = prvalue -# 594| getStmt(): [BlockStmt] { ... } -# 595| getStmt(0): [DeclStmt] declaration -# 595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x192 -# 595| Type = [Struct] String -# 595| getVariable().getInitializer(): [Initializer] initializer for x192 -# 595| getExpr(): [ConstructorCall] call to String -# 595| Type = [VoidType] void -# 595| ValueCategory = prvalue -# 596| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 596| Type = [VoidType] void -# 596| ValueCategory = prvalue -# 596| getQualifier(): [VariableAccess] x192 -# 596| Type = [Struct] String -# 596| ValueCategory = lvalue -# 596| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 596| Conversion = [BoolConversion] conversion to bool -# 596| Type = [BoolType] bool -# 596| Value = [CStyleCast] 0 -# 596| ValueCategory = prvalue -# 597| getStmt(193): [DoStmt] do (...) ... -# 599| getCondition(): [Literal] 0 -# 599| Type = [IntType] int -# 599| Value = [Literal] 0 -# 599| ValueCategory = prvalue -# 597| getStmt(): [BlockStmt] { ... } -# 598| getStmt(0): [DeclStmt] declaration -# 598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x193 -# 598| Type = [Struct] String -# 598| getVariable().getInitializer(): [Initializer] initializer for x193 -# 598| getExpr(): [ConstructorCall] call to String -# 598| Type = [VoidType] void -# 598| ValueCategory = prvalue -# 599| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 599| Type = [VoidType] void -# 599| ValueCategory = prvalue -# 599| getQualifier(): [VariableAccess] x193 -# 599| Type = [Struct] String -# 599| ValueCategory = lvalue -# 599| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 599| Conversion = [BoolConversion] conversion to bool -# 599| Type = [BoolType] bool -# 599| Value = [CStyleCast] 0 -# 599| ValueCategory = prvalue -# 600| getStmt(194): [DoStmt] do (...) ... -# 602| getCondition(): [Literal] 0 -# 602| Type = [IntType] int -# 602| Value = [Literal] 0 -# 602| ValueCategory = prvalue -# 600| getStmt(): [BlockStmt] { ... } -# 601| getStmt(0): [DeclStmt] declaration -# 601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x194 -# 601| Type = [Struct] String -# 601| getVariable().getInitializer(): [Initializer] initializer for x194 -# 601| getExpr(): [ConstructorCall] call to String -# 601| Type = [VoidType] void -# 601| ValueCategory = prvalue -# 602| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 602| Type = [VoidType] void -# 602| ValueCategory = prvalue -# 602| getQualifier(): [VariableAccess] x194 -# 602| Type = [Struct] String -# 602| ValueCategory = lvalue -# 602| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 602| Conversion = [BoolConversion] conversion to bool -# 602| Type = [BoolType] bool -# 602| Value = [CStyleCast] 0 -# 602| ValueCategory = prvalue -# 603| getStmt(195): [DoStmt] do (...) ... -# 605| getCondition(): [Literal] 0 -# 605| Type = [IntType] int -# 605| Value = [Literal] 0 -# 605| ValueCategory = prvalue -# 603| getStmt(): [BlockStmt] { ... } -# 604| getStmt(0): [DeclStmt] declaration -# 604| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x195 -# 604| Type = [Struct] String -# 604| getVariable().getInitializer(): [Initializer] initializer for x195 -# 604| getExpr(): [ConstructorCall] call to String -# 604| Type = [VoidType] void -# 604| ValueCategory = prvalue -# 605| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 605| Type = [VoidType] void -# 605| ValueCategory = prvalue -# 605| getQualifier(): [VariableAccess] x195 -# 605| Type = [Struct] String -# 605| ValueCategory = lvalue -# 605| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 605| Conversion = [BoolConversion] conversion to bool -# 605| Type = [BoolType] bool -# 605| Value = [CStyleCast] 0 -# 605| ValueCategory = prvalue -# 606| getStmt(196): [DoStmt] do (...) ... -# 608| getCondition(): [Literal] 0 -# 608| Type = [IntType] int -# 608| Value = [Literal] 0 -# 608| ValueCategory = prvalue -# 606| getStmt(): [BlockStmt] { ... } -# 607| getStmt(0): [DeclStmt] declaration -# 607| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x196 -# 607| Type = [Struct] String -# 607| getVariable().getInitializer(): [Initializer] initializer for x196 -# 607| getExpr(): [ConstructorCall] call to String -# 607| Type = [VoidType] void -# 607| ValueCategory = prvalue -# 608| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 608| Type = [VoidType] void -# 608| ValueCategory = prvalue -# 608| getQualifier(): [VariableAccess] x196 -# 608| Type = [Struct] String -# 608| ValueCategory = lvalue -# 608| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 608| Conversion = [BoolConversion] conversion to bool -# 608| Type = [BoolType] bool -# 608| Value = [CStyleCast] 0 -# 608| ValueCategory = prvalue -# 609| getStmt(197): [DoStmt] do (...) ... -# 611| getCondition(): [Literal] 0 -# 611| Type = [IntType] int -# 611| Value = [Literal] 0 -# 611| ValueCategory = prvalue -# 609| getStmt(): [BlockStmt] { ... } -# 610| getStmt(0): [DeclStmt] declaration -# 610| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x197 -# 610| Type = [Struct] String -# 610| getVariable().getInitializer(): [Initializer] initializer for x197 -# 610| getExpr(): [ConstructorCall] call to String -# 610| Type = [VoidType] void -# 610| ValueCategory = prvalue -# 611| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 611| Type = [VoidType] void -# 611| ValueCategory = prvalue -# 611| getQualifier(): [VariableAccess] x197 -# 611| Type = [Struct] String -# 611| ValueCategory = lvalue -# 611| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 611| Conversion = [BoolConversion] conversion to bool -# 611| Type = [BoolType] bool -# 611| Value = [CStyleCast] 0 -# 611| ValueCategory = prvalue -# 612| getStmt(198): [DoStmt] do (...) ... -# 614| getCondition(): [Literal] 0 -# 614| Type = [IntType] int -# 614| Value = [Literal] 0 -# 614| ValueCategory = prvalue -# 612| getStmt(): [BlockStmt] { ... } -# 613| getStmt(0): [DeclStmt] declaration -# 613| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x198 -# 613| Type = [Struct] String -# 613| getVariable().getInitializer(): [Initializer] initializer for x198 -# 613| getExpr(): [ConstructorCall] call to String -# 613| Type = [VoidType] void -# 613| ValueCategory = prvalue -# 614| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 614| Type = [VoidType] void -# 614| ValueCategory = prvalue -# 614| getQualifier(): [VariableAccess] x198 -# 614| Type = [Struct] String -# 614| ValueCategory = lvalue -# 614| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 614| Conversion = [BoolConversion] conversion to bool -# 614| Type = [BoolType] bool -# 614| Value = [CStyleCast] 0 -# 614| ValueCategory = prvalue -# 615| getStmt(199): [DoStmt] do (...) ... -# 617| getCondition(): [Literal] 0 -# 617| Type = [IntType] int -# 617| Value = [Literal] 0 -# 617| ValueCategory = prvalue -# 615| getStmt(): [BlockStmt] { ... } -# 616| getStmt(0): [DeclStmt] declaration -# 616| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x199 -# 616| Type = [Struct] String -# 616| getVariable().getInitializer(): [Initializer] initializer for x199 -# 616| getExpr(): [ConstructorCall] call to String -# 616| Type = [VoidType] void -# 616| ValueCategory = prvalue -# 617| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 617| Type = [VoidType] void -# 617| ValueCategory = prvalue -# 617| getQualifier(): [VariableAccess] x199 -# 617| Type = [Struct] String -# 617| ValueCategory = lvalue -# 617| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 617| Conversion = [BoolConversion] conversion to bool -# 617| Type = [BoolType] bool -# 617| Value = [CStyleCast] 0 -# 617| ValueCategory = prvalue -# 618| getStmt(200): [DoStmt] do (...) ... -# 620| getCondition(): [Literal] 0 -# 620| Type = [IntType] int -# 620| Value = [Literal] 0 -# 620| ValueCategory = prvalue -# 618| getStmt(): [BlockStmt] { ... } -# 619| getStmt(0): [DeclStmt] declaration -# 619| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x200 -# 619| Type = [Struct] String -# 619| getVariable().getInitializer(): [Initializer] initializer for x200 -# 619| getExpr(): [ConstructorCall] call to String -# 619| Type = [VoidType] void -# 619| ValueCategory = prvalue -# 620| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 620| Type = [VoidType] void -# 620| ValueCategory = prvalue -# 620| getQualifier(): [VariableAccess] x200 -# 620| Type = [Struct] String -# 620| ValueCategory = lvalue -# 620| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 620| Conversion = [BoolConversion] conversion to bool -# 620| Type = [BoolType] bool -# 620| Value = [CStyleCast] 0 -# 620| ValueCategory = prvalue -# 621| getStmt(201): [DoStmt] do (...) ... -# 623| getCondition(): [Literal] 0 -# 623| Type = [IntType] int -# 623| Value = [Literal] 0 -# 623| ValueCategory = prvalue -# 621| getStmt(): [BlockStmt] { ... } -# 622| getStmt(0): [DeclStmt] declaration -# 622| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x201 -# 622| Type = [Struct] String -# 622| getVariable().getInitializer(): [Initializer] initializer for x201 -# 622| getExpr(): [ConstructorCall] call to String -# 622| Type = [VoidType] void -# 622| ValueCategory = prvalue -# 623| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 623| Type = [VoidType] void -# 623| ValueCategory = prvalue -# 623| getQualifier(): [VariableAccess] x201 -# 623| Type = [Struct] String -# 623| ValueCategory = lvalue -# 623| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 623| Conversion = [BoolConversion] conversion to bool -# 623| Type = [BoolType] bool -# 623| Value = [CStyleCast] 0 -# 623| ValueCategory = prvalue -# 624| getStmt(202): [DoStmt] do (...) ... -# 626| getCondition(): [Literal] 0 -# 626| Type = [IntType] int -# 626| Value = [Literal] 0 -# 626| ValueCategory = prvalue -# 624| getStmt(): [BlockStmt] { ... } -# 625| getStmt(0): [DeclStmt] declaration -# 625| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x202 -# 625| Type = [Struct] String -# 625| getVariable().getInitializer(): [Initializer] initializer for x202 -# 625| getExpr(): [ConstructorCall] call to String -# 625| Type = [VoidType] void -# 625| ValueCategory = prvalue -# 626| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 626| Type = [VoidType] void -# 626| ValueCategory = prvalue -# 626| getQualifier(): [VariableAccess] x202 -# 626| Type = [Struct] String -# 626| ValueCategory = lvalue -# 626| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 626| Conversion = [BoolConversion] conversion to bool -# 626| Type = [BoolType] bool -# 626| Value = [CStyleCast] 0 -# 626| ValueCategory = prvalue -# 627| getStmt(203): [DoStmt] do (...) ... -# 629| getCondition(): [Literal] 0 -# 629| Type = [IntType] int -# 629| Value = [Literal] 0 -# 629| ValueCategory = prvalue -# 627| getStmt(): [BlockStmt] { ... } -# 628| getStmt(0): [DeclStmt] declaration -# 628| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x203 -# 628| Type = [Struct] String -# 628| getVariable().getInitializer(): [Initializer] initializer for x203 -# 628| getExpr(): [ConstructorCall] call to String -# 628| Type = [VoidType] void -# 628| ValueCategory = prvalue -# 629| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 629| Type = [VoidType] void -# 629| ValueCategory = prvalue -# 629| getQualifier(): [VariableAccess] x203 -# 629| Type = [Struct] String -# 629| ValueCategory = lvalue -# 629| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 629| Conversion = [BoolConversion] conversion to bool -# 629| Type = [BoolType] bool -# 629| Value = [CStyleCast] 0 -# 629| ValueCategory = prvalue -# 630| getStmt(204): [DoStmt] do (...) ... -# 632| getCondition(): [Literal] 0 -# 632| Type = [IntType] int -# 632| Value = [Literal] 0 -# 632| ValueCategory = prvalue -# 630| getStmt(): [BlockStmt] { ... } -# 631| getStmt(0): [DeclStmt] declaration -# 631| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x204 -# 631| Type = [Struct] String -# 631| getVariable().getInitializer(): [Initializer] initializer for x204 -# 631| getExpr(): [ConstructorCall] call to String -# 631| Type = [VoidType] void -# 631| ValueCategory = prvalue -# 632| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 632| Type = [VoidType] void -# 632| ValueCategory = prvalue -# 632| getQualifier(): [VariableAccess] x204 -# 632| Type = [Struct] String -# 632| ValueCategory = lvalue -# 632| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 632| Conversion = [BoolConversion] conversion to bool -# 632| Type = [BoolType] bool -# 632| Value = [CStyleCast] 0 -# 632| ValueCategory = prvalue -# 633| getStmt(205): [DoStmt] do (...) ... -# 635| getCondition(): [Literal] 0 -# 635| Type = [IntType] int -# 635| Value = [Literal] 0 -# 635| ValueCategory = prvalue -# 633| getStmt(): [BlockStmt] { ... } -# 634| getStmt(0): [DeclStmt] declaration -# 634| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x205 -# 634| Type = [Struct] String -# 634| getVariable().getInitializer(): [Initializer] initializer for x205 -# 634| getExpr(): [ConstructorCall] call to String -# 634| Type = [VoidType] void -# 634| ValueCategory = prvalue -# 635| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 635| Type = [VoidType] void -# 635| ValueCategory = prvalue -# 635| getQualifier(): [VariableAccess] x205 -# 635| Type = [Struct] String -# 635| ValueCategory = lvalue -# 635| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 635| Conversion = [BoolConversion] conversion to bool -# 635| Type = [BoolType] bool -# 635| Value = [CStyleCast] 0 -# 635| ValueCategory = prvalue -# 636| getStmt(206): [DoStmt] do (...) ... -# 638| getCondition(): [Literal] 0 -# 638| Type = [IntType] int -# 638| Value = [Literal] 0 -# 638| ValueCategory = prvalue -# 636| getStmt(): [BlockStmt] { ... } -# 637| getStmt(0): [DeclStmt] declaration -# 637| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x206 -# 637| Type = [Struct] String -# 637| getVariable().getInitializer(): [Initializer] initializer for x206 -# 637| getExpr(): [ConstructorCall] call to String -# 637| Type = [VoidType] void -# 637| ValueCategory = prvalue -# 638| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 638| Type = [VoidType] void -# 638| ValueCategory = prvalue -# 638| getQualifier(): [VariableAccess] x206 -# 638| Type = [Struct] String -# 638| ValueCategory = lvalue -# 638| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 638| Conversion = [BoolConversion] conversion to bool -# 638| Type = [BoolType] bool -# 638| Value = [CStyleCast] 0 -# 638| ValueCategory = prvalue -# 639| getStmt(207): [DoStmt] do (...) ... -# 641| getCondition(): [Literal] 0 -# 641| Type = [IntType] int -# 641| Value = [Literal] 0 -# 641| ValueCategory = prvalue -# 639| getStmt(): [BlockStmt] { ... } -# 640| getStmt(0): [DeclStmt] declaration -# 640| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x207 -# 640| Type = [Struct] String -# 640| getVariable().getInitializer(): [Initializer] initializer for x207 -# 640| getExpr(): [ConstructorCall] call to String -# 640| Type = [VoidType] void -# 640| ValueCategory = prvalue -# 641| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 641| Type = [VoidType] void -# 641| ValueCategory = prvalue -# 641| getQualifier(): [VariableAccess] x207 -# 641| Type = [Struct] String -# 641| ValueCategory = lvalue -# 641| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 641| Conversion = [BoolConversion] conversion to bool -# 641| Type = [BoolType] bool -# 641| Value = [CStyleCast] 0 -# 641| ValueCategory = prvalue -# 642| getStmt(208): [DoStmt] do (...) ... -# 644| getCondition(): [Literal] 0 -# 644| Type = [IntType] int -# 644| Value = [Literal] 0 -# 644| ValueCategory = prvalue -# 642| getStmt(): [BlockStmt] { ... } -# 643| getStmt(0): [DeclStmt] declaration -# 643| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x208 -# 643| Type = [Struct] String -# 643| getVariable().getInitializer(): [Initializer] initializer for x208 -# 643| getExpr(): [ConstructorCall] call to String -# 643| Type = [VoidType] void -# 643| ValueCategory = prvalue -# 644| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 644| Type = [VoidType] void -# 644| ValueCategory = prvalue -# 644| getQualifier(): [VariableAccess] x208 -# 644| Type = [Struct] String -# 644| ValueCategory = lvalue -# 644| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 644| Conversion = [BoolConversion] conversion to bool -# 644| Type = [BoolType] bool -# 644| Value = [CStyleCast] 0 -# 644| ValueCategory = prvalue -# 645| getStmt(209): [DoStmt] do (...) ... -# 647| getCondition(): [Literal] 0 -# 647| Type = [IntType] int -# 647| Value = [Literal] 0 -# 647| ValueCategory = prvalue -# 645| getStmt(): [BlockStmt] { ... } -# 646| getStmt(0): [DeclStmt] declaration -# 646| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x209 -# 646| Type = [Struct] String -# 646| getVariable().getInitializer(): [Initializer] initializer for x209 -# 646| getExpr(): [ConstructorCall] call to String -# 646| Type = [VoidType] void -# 646| ValueCategory = prvalue -# 647| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 647| Type = [VoidType] void -# 647| ValueCategory = prvalue -# 647| getQualifier(): [VariableAccess] x209 -# 647| Type = [Struct] String -# 647| ValueCategory = lvalue -# 647| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 647| Conversion = [BoolConversion] conversion to bool -# 647| Type = [BoolType] bool -# 647| Value = [CStyleCast] 0 -# 647| ValueCategory = prvalue -# 648| getStmt(210): [DoStmt] do (...) ... -# 650| getCondition(): [Literal] 0 -# 650| Type = [IntType] int -# 650| Value = [Literal] 0 -# 650| ValueCategory = prvalue -# 648| getStmt(): [BlockStmt] { ... } -# 649| getStmt(0): [DeclStmt] declaration -# 649| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x210 -# 649| Type = [Struct] String -# 649| getVariable().getInitializer(): [Initializer] initializer for x210 -# 649| getExpr(): [ConstructorCall] call to String -# 649| Type = [VoidType] void -# 649| ValueCategory = prvalue -# 650| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 650| Type = [VoidType] void -# 650| ValueCategory = prvalue -# 650| getQualifier(): [VariableAccess] x210 -# 650| Type = [Struct] String -# 650| ValueCategory = lvalue -# 650| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 650| Conversion = [BoolConversion] conversion to bool -# 650| Type = [BoolType] bool -# 650| Value = [CStyleCast] 0 -# 650| ValueCategory = prvalue -# 651| getStmt(211): [DoStmt] do (...) ... -# 653| getCondition(): [Literal] 0 -# 653| Type = [IntType] int -# 653| Value = [Literal] 0 -# 653| ValueCategory = prvalue -# 651| getStmt(): [BlockStmt] { ... } -# 652| getStmt(0): [DeclStmt] declaration -# 652| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x211 -# 652| Type = [Struct] String -# 652| getVariable().getInitializer(): [Initializer] initializer for x211 -# 652| getExpr(): [ConstructorCall] call to String -# 652| Type = [VoidType] void -# 652| ValueCategory = prvalue -# 653| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 653| Type = [VoidType] void -# 653| ValueCategory = prvalue -# 653| getQualifier(): [VariableAccess] x211 -# 653| Type = [Struct] String -# 653| ValueCategory = lvalue -# 653| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 653| Conversion = [BoolConversion] conversion to bool -# 653| Type = [BoolType] bool -# 653| Value = [CStyleCast] 0 -# 653| ValueCategory = prvalue -# 654| getStmt(212): [DoStmt] do (...) ... -# 656| getCondition(): [Literal] 0 -# 656| Type = [IntType] int -# 656| Value = [Literal] 0 -# 656| ValueCategory = prvalue -# 654| getStmt(): [BlockStmt] { ... } -# 655| getStmt(0): [DeclStmt] declaration -# 655| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x212 -# 655| Type = [Struct] String -# 655| getVariable().getInitializer(): [Initializer] initializer for x212 -# 655| getExpr(): [ConstructorCall] call to String -# 655| Type = [VoidType] void -# 655| ValueCategory = prvalue -# 656| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 656| Type = [VoidType] void -# 656| ValueCategory = prvalue -# 656| getQualifier(): [VariableAccess] x212 -# 656| Type = [Struct] String -# 656| ValueCategory = lvalue -# 656| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 656| Conversion = [BoolConversion] conversion to bool -# 656| Type = [BoolType] bool -# 656| Value = [CStyleCast] 0 -# 656| ValueCategory = prvalue -# 657| getStmt(213): [DoStmt] do (...) ... -# 659| getCondition(): [Literal] 0 -# 659| Type = [IntType] int -# 659| Value = [Literal] 0 -# 659| ValueCategory = prvalue -# 657| getStmt(): [BlockStmt] { ... } -# 658| getStmt(0): [DeclStmt] declaration -# 658| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x213 -# 658| Type = [Struct] String -# 658| getVariable().getInitializer(): [Initializer] initializer for x213 -# 658| getExpr(): [ConstructorCall] call to String -# 658| Type = [VoidType] void -# 658| ValueCategory = prvalue -# 659| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 659| Type = [VoidType] void -# 659| ValueCategory = prvalue -# 659| getQualifier(): [VariableAccess] x213 -# 659| Type = [Struct] String -# 659| ValueCategory = lvalue -# 659| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 659| Conversion = [BoolConversion] conversion to bool -# 659| Type = [BoolType] bool -# 659| Value = [CStyleCast] 0 -# 659| ValueCategory = prvalue -# 660| getStmt(214): [DoStmt] do (...) ... -# 662| getCondition(): [Literal] 0 -# 662| Type = [IntType] int -# 662| Value = [Literal] 0 -# 662| ValueCategory = prvalue -# 660| getStmt(): [BlockStmt] { ... } -# 661| getStmt(0): [DeclStmt] declaration -# 661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x214 -# 661| Type = [Struct] String -# 661| getVariable().getInitializer(): [Initializer] initializer for x214 -# 661| getExpr(): [ConstructorCall] call to String -# 661| Type = [VoidType] void -# 661| ValueCategory = prvalue -# 662| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 662| Type = [VoidType] void -# 662| ValueCategory = prvalue -# 662| getQualifier(): [VariableAccess] x214 -# 662| Type = [Struct] String -# 662| ValueCategory = lvalue -# 662| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 662| Conversion = [BoolConversion] conversion to bool -# 662| Type = [BoolType] bool -# 662| Value = [CStyleCast] 0 -# 662| ValueCategory = prvalue -# 663| getStmt(215): [DoStmt] do (...) ... -# 665| getCondition(): [Literal] 0 -# 665| Type = [IntType] int -# 665| Value = [Literal] 0 -# 665| ValueCategory = prvalue -# 663| getStmt(): [BlockStmt] { ... } -# 664| getStmt(0): [DeclStmt] declaration -# 664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x215 -# 664| Type = [Struct] String -# 664| getVariable().getInitializer(): [Initializer] initializer for x215 -# 664| getExpr(): [ConstructorCall] call to String -# 664| Type = [VoidType] void -# 664| ValueCategory = prvalue -# 665| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 665| Type = [VoidType] void -# 665| ValueCategory = prvalue -# 665| getQualifier(): [VariableAccess] x215 -# 665| Type = [Struct] String -# 665| ValueCategory = lvalue -# 665| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 665| Conversion = [BoolConversion] conversion to bool -# 665| Type = [BoolType] bool -# 665| Value = [CStyleCast] 0 -# 665| ValueCategory = prvalue -# 666| getStmt(216): [DoStmt] do (...) ... -# 668| getCondition(): [Literal] 0 -# 668| Type = [IntType] int -# 668| Value = [Literal] 0 -# 668| ValueCategory = prvalue -# 666| getStmt(): [BlockStmt] { ... } -# 667| getStmt(0): [DeclStmt] declaration -# 667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x216 -# 667| Type = [Struct] String -# 667| getVariable().getInitializer(): [Initializer] initializer for x216 -# 667| getExpr(): [ConstructorCall] call to String -# 667| Type = [VoidType] void -# 667| ValueCategory = prvalue -# 668| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 668| Type = [VoidType] void -# 668| ValueCategory = prvalue -# 668| getQualifier(): [VariableAccess] x216 -# 668| Type = [Struct] String -# 668| ValueCategory = lvalue -# 668| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 668| Conversion = [BoolConversion] conversion to bool -# 668| Type = [BoolType] bool -# 668| Value = [CStyleCast] 0 -# 668| ValueCategory = prvalue -# 669| getStmt(217): [DoStmt] do (...) ... -# 671| getCondition(): [Literal] 0 -# 671| Type = [IntType] int -# 671| Value = [Literal] 0 -# 671| ValueCategory = prvalue -# 669| getStmt(): [BlockStmt] { ... } -# 670| getStmt(0): [DeclStmt] declaration -# 670| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x217 -# 670| Type = [Struct] String -# 670| getVariable().getInitializer(): [Initializer] initializer for x217 -# 670| getExpr(): [ConstructorCall] call to String -# 670| Type = [VoidType] void -# 670| ValueCategory = prvalue -# 671| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 671| Type = [VoidType] void -# 671| ValueCategory = prvalue -# 671| getQualifier(): [VariableAccess] x217 -# 671| Type = [Struct] String -# 671| ValueCategory = lvalue -# 671| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 671| Conversion = [BoolConversion] conversion to bool -# 671| Type = [BoolType] bool -# 671| Value = [CStyleCast] 0 -# 671| ValueCategory = prvalue -# 672| getStmt(218): [DoStmt] do (...) ... -# 674| getCondition(): [Literal] 0 -# 674| Type = [IntType] int -# 674| Value = [Literal] 0 -# 674| ValueCategory = prvalue -# 672| getStmt(): [BlockStmt] { ... } -# 673| getStmt(0): [DeclStmt] declaration -# 673| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x218 -# 673| Type = [Struct] String -# 673| getVariable().getInitializer(): [Initializer] initializer for x218 -# 673| getExpr(): [ConstructorCall] call to String -# 673| Type = [VoidType] void -# 673| ValueCategory = prvalue -# 674| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 674| Type = [VoidType] void -# 674| ValueCategory = prvalue -# 674| getQualifier(): [VariableAccess] x218 -# 674| Type = [Struct] String -# 674| ValueCategory = lvalue -# 674| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 674| Conversion = [BoolConversion] conversion to bool -# 674| Type = [BoolType] bool -# 674| Value = [CStyleCast] 0 -# 674| ValueCategory = prvalue -# 675| getStmt(219): [DoStmt] do (...) ... -# 677| getCondition(): [Literal] 0 -# 677| Type = [IntType] int -# 677| Value = [Literal] 0 -# 677| ValueCategory = prvalue -# 675| getStmt(): [BlockStmt] { ... } -# 676| getStmt(0): [DeclStmt] declaration -# 676| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x219 -# 676| Type = [Struct] String -# 676| getVariable().getInitializer(): [Initializer] initializer for x219 -# 676| getExpr(): [ConstructorCall] call to String -# 676| Type = [VoidType] void -# 676| ValueCategory = prvalue -# 677| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 677| Type = [VoidType] void -# 677| ValueCategory = prvalue -# 677| getQualifier(): [VariableAccess] x219 -# 677| Type = [Struct] String -# 677| ValueCategory = lvalue -# 677| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 677| Conversion = [BoolConversion] conversion to bool -# 677| Type = [BoolType] bool -# 677| Value = [CStyleCast] 0 -# 677| ValueCategory = prvalue -# 678| getStmt(220): [DoStmt] do (...) ... -# 680| getCondition(): [Literal] 0 -# 680| Type = [IntType] int -# 680| Value = [Literal] 0 -# 680| ValueCategory = prvalue -# 678| getStmt(): [BlockStmt] { ... } -# 679| getStmt(0): [DeclStmt] declaration -# 679| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x220 -# 679| Type = [Struct] String -# 679| getVariable().getInitializer(): [Initializer] initializer for x220 -# 679| getExpr(): [ConstructorCall] call to String -# 679| Type = [VoidType] void -# 679| ValueCategory = prvalue -# 680| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 680| Type = [VoidType] void -# 680| ValueCategory = prvalue -# 680| getQualifier(): [VariableAccess] x220 -# 680| Type = [Struct] String -# 680| ValueCategory = lvalue -# 680| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 680| Conversion = [BoolConversion] conversion to bool -# 680| Type = [BoolType] bool -# 680| Value = [CStyleCast] 0 -# 680| ValueCategory = prvalue -# 681| getStmt(221): [DoStmt] do (...) ... -# 683| getCondition(): [Literal] 0 -# 683| Type = [IntType] int -# 683| Value = [Literal] 0 -# 683| ValueCategory = prvalue -# 681| getStmt(): [BlockStmt] { ... } -# 682| getStmt(0): [DeclStmt] declaration -# 682| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x221 -# 682| Type = [Struct] String -# 682| getVariable().getInitializer(): [Initializer] initializer for x221 -# 682| getExpr(): [ConstructorCall] call to String -# 682| Type = [VoidType] void -# 682| ValueCategory = prvalue -# 683| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 683| Type = [VoidType] void -# 683| ValueCategory = prvalue -# 683| getQualifier(): [VariableAccess] x221 -# 683| Type = [Struct] String -# 683| ValueCategory = lvalue -# 683| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 683| Conversion = [BoolConversion] conversion to bool -# 683| Type = [BoolType] bool -# 683| Value = [CStyleCast] 0 -# 683| ValueCategory = prvalue -# 684| getStmt(222): [DoStmt] do (...) ... -# 686| getCondition(): [Literal] 0 -# 686| Type = [IntType] int -# 686| Value = [Literal] 0 -# 686| ValueCategory = prvalue -# 684| getStmt(): [BlockStmt] { ... } -# 685| getStmt(0): [DeclStmt] declaration -# 685| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x222 -# 685| Type = [Struct] String -# 685| getVariable().getInitializer(): [Initializer] initializer for x222 -# 685| getExpr(): [ConstructorCall] call to String -# 685| Type = [VoidType] void -# 685| ValueCategory = prvalue -# 686| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 686| Type = [VoidType] void -# 686| ValueCategory = prvalue -# 686| getQualifier(): [VariableAccess] x222 -# 686| Type = [Struct] String -# 686| ValueCategory = lvalue -# 686| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 686| Conversion = [BoolConversion] conversion to bool -# 686| Type = [BoolType] bool -# 686| Value = [CStyleCast] 0 -# 686| ValueCategory = prvalue -# 687| getStmt(223): [DoStmt] do (...) ... -# 689| getCondition(): [Literal] 0 -# 689| Type = [IntType] int -# 689| Value = [Literal] 0 -# 689| ValueCategory = prvalue -# 687| getStmt(): [BlockStmt] { ... } -# 688| getStmt(0): [DeclStmt] declaration -# 688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x223 -# 688| Type = [Struct] String -# 688| getVariable().getInitializer(): [Initializer] initializer for x223 -# 688| getExpr(): [ConstructorCall] call to String -# 688| Type = [VoidType] void -# 688| ValueCategory = prvalue -# 689| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 689| Type = [VoidType] void -# 689| ValueCategory = prvalue -# 689| getQualifier(): [VariableAccess] x223 -# 689| Type = [Struct] String -# 689| ValueCategory = lvalue -# 689| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 689| Conversion = [BoolConversion] conversion to bool -# 689| Type = [BoolType] bool -# 689| Value = [CStyleCast] 0 -# 689| ValueCategory = prvalue -# 690| getStmt(224): [DoStmt] do (...) ... -# 692| getCondition(): [Literal] 0 -# 692| Type = [IntType] int -# 692| Value = [Literal] 0 -# 692| ValueCategory = prvalue -# 690| getStmt(): [BlockStmt] { ... } -# 691| getStmt(0): [DeclStmt] declaration -# 691| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x224 -# 691| Type = [Struct] String -# 691| getVariable().getInitializer(): [Initializer] initializer for x224 -# 691| getExpr(): [ConstructorCall] call to String -# 691| Type = [VoidType] void -# 691| ValueCategory = prvalue -# 692| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 692| Type = [VoidType] void -# 692| ValueCategory = prvalue -# 692| getQualifier(): [VariableAccess] x224 -# 692| Type = [Struct] String -# 692| ValueCategory = lvalue -# 692| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 692| Conversion = [BoolConversion] conversion to bool -# 692| Type = [BoolType] bool -# 692| Value = [CStyleCast] 0 -# 692| ValueCategory = prvalue -# 693| getStmt(225): [DoStmt] do (...) ... -# 695| getCondition(): [Literal] 0 -# 695| Type = [IntType] int -# 695| Value = [Literal] 0 -# 695| ValueCategory = prvalue -# 693| getStmt(): [BlockStmt] { ... } -# 694| getStmt(0): [DeclStmt] declaration -# 694| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x225 -# 694| Type = [Struct] String -# 694| getVariable().getInitializer(): [Initializer] initializer for x225 -# 694| getExpr(): [ConstructorCall] call to String -# 694| Type = [VoidType] void -# 694| ValueCategory = prvalue -# 695| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 695| Type = [VoidType] void -# 695| ValueCategory = prvalue -# 695| getQualifier(): [VariableAccess] x225 -# 695| Type = [Struct] String -# 695| ValueCategory = lvalue -# 695| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 695| Conversion = [BoolConversion] conversion to bool -# 695| Type = [BoolType] bool -# 695| Value = [CStyleCast] 0 -# 695| ValueCategory = prvalue -# 696| getStmt(226): [DoStmt] do (...) ... -# 698| getCondition(): [Literal] 0 -# 698| Type = [IntType] int -# 698| Value = [Literal] 0 -# 698| ValueCategory = prvalue -# 696| getStmt(): [BlockStmt] { ... } -# 697| getStmt(0): [DeclStmt] declaration -# 697| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x226 -# 697| Type = [Struct] String -# 697| getVariable().getInitializer(): [Initializer] initializer for x226 -# 697| getExpr(): [ConstructorCall] call to String -# 697| Type = [VoidType] void -# 697| ValueCategory = prvalue -# 698| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 698| Type = [VoidType] void -# 698| ValueCategory = prvalue -# 698| getQualifier(): [VariableAccess] x226 -# 698| Type = [Struct] String -# 698| ValueCategory = lvalue -# 698| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 698| Conversion = [BoolConversion] conversion to bool -# 698| Type = [BoolType] bool -# 698| Value = [CStyleCast] 0 -# 698| ValueCategory = prvalue -# 699| getStmt(227): [DoStmt] do (...) ... -# 701| getCondition(): [Literal] 0 -# 701| Type = [IntType] int -# 701| Value = [Literal] 0 -# 701| ValueCategory = prvalue -# 699| getStmt(): [BlockStmt] { ... } -# 700| getStmt(0): [DeclStmt] declaration -# 700| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x227 -# 700| Type = [Struct] String -# 700| getVariable().getInitializer(): [Initializer] initializer for x227 -# 700| getExpr(): [ConstructorCall] call to String -# 700| Type = [VoidType] void -# 700| ValueCategory = prvalue -# 701| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 701| Type = [VoidType] void -# 701| ValueCategory = prvalue -# 701| getQualifier(): [VariableAccess] x227 -# 701| Type = [Struct] String -# 701| ValueCategory = lvalue -# 701| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 701| Conversion = [BoolConversion] conversion to bool -# 701| Type = [BoolType] bool -# 701| Value = [CStyleCast] 0 -# 701| ValueCategory = prvalue -# 702| getStmt(228): [DoStmt] do (...) ... -# 704| getCondition(): [Literal] 0 -# 704| Type = [IntType] int -# 704| Value = [Literal] 0 -# 704| ValueCategory = prvalue -# 702| getStmt(): [BlockStmt] { ... } -# 703| getStmt(0): [DeclStmt] declaration -# 703| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x228 -# 703| Type = [Struct] String -# 703| getVariable().getInitializer(): [Initializer] initializer for x228 -# 703| getExpr(): [ConstructorCall] call to String -# 703| Type = [VoidType] void -# 703| ValueCategory = prvalue -# 704| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 704| Type = [VoidType] void -# 704| ValueCategory = prvalue -# 704| getQualifier(): [VariableAccess] x228 -# 704| Type = [Struct] String -# 704| ValueCategory = lvalue -# 704| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 704| Conversion = [BoolConversion] conversion to bool -# 704| Type = [BoolType] bool -# 704| Value = [CStyleCast] 0 -# 704| ValueCategory = prvalue -# 705| getStmt(229): [DoStmt] do (...) ... -# 707| getCondition(): [Literal] 0 -# 707| Type = [IntType] int -# 707| Value = [Literal] 0 -# 707| ValueCategory = prvalue -# 705| getStmt(): [BlockStmt] { ... } -# 706| getStmt(0): [DeclStmt] declaration -# 706| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x229 -# 706| Type = [Struct] String -# 706| getVariable().getInitializer(): [Initializer] initializer for x229 -# 706| getExpr(): [ConstructorCall] call to String -# 706| Type = [VoidType] void -# 706| ValueCategory = prvalue -# 707| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 707| Type = [VoidType] void -# 707| ValueCategory = prvalue -# 707| getQualifier(): [VariableAccess] x229 -# 707| Type = [Struct] String -# 707| ValueCategory = lvalue -# 707| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 707| Conversion = [BoolConversion] conversion to bool -# 707| Type = [BoolType] bool -# 707| Value = [CStyleCast] 0 -# 707| ValueCategory = prvalue -# 708| getStmt(230): [DoStmt] do (...) ... -# 710| getCondition(): [Literal] 0 -# 710| Type = [IntType] int -# 710| Value = [Literal] 0 -# 710| ValueCategory = prvalue -# 708| getStmt(): [BlockStmt] { ... } -# 709| getStmt(0): [DeclStmt] declaration -# 709| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x230 -# 709| Type = [Struct] String -# 709| getVariable().getInitializer(): [Initializer] initializer for x230 -# 709| getExpr(): [ConstructorCall] call to String -# 709| Type = [VoidType] void -# 709| ValueCategory = prvalue -# 710| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 710| Type = [VoidType] void -# 710| ValueCategory = prvalue -# 710| getQualifier(): [VariableAccess] x230 -# 710| Type = [Struct] String -# 710| ValueCategory = lvalue -# 710| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 710| Conversion = [BoolConversion] conversion to bool -# 710| Type = [BoolType] bool -# 710| Value = [CStyleCast] 0 -# 710| ValueCategory = prvalue -# 711| getStmt(231): [DoStmt] do (...) ... -# 713| getCondition(): [Literal] 0 -# 713| Type = [IntType] int -# 713| Value = [Literal] 0 -# 713| ValueCategory = prvalue -# 711| getStmt(): [BlockStmt] { ... } -# 712| getStmt(0): [DeclStmt] declaration -# 712| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x231 -# 712| Type = [Struct] String -# 712| getVariable().getInitializer(): [Initializer] initializer for x231 -# 712| getExpr(): [ConstructorCall] call to String -# 712| Type = [VoidType] void -# 712| ValueCategory = prvalue -# 713| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 713| Type = [VoidType] void -# 713| ValueCategory = prvalue -# 713| getQualifier(): [VariableAccess] x231 -# 713| Type = [Struct] String -# 713| ValueCategory = lvalue -# 713| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 713| Conversion = [BoolConversion] conversion to bool -# 713| Type = [BoolType] bool -# 713| Value = [CStyleCast] 0 -# 713| ValueCategory = prvalue -# 714| getStmt(232): [DoStmt] do (...) ... -# 716| getCondition(): [Literal] 0 -# 716| Type = [IntType] int -# 716| Value = [Literal] 0 -# 716| ValueCategory = prvalue -# 714| getStmt(): [BlockStmt] { ... } -# 715| getStmt(0): [DeclStmt] declaration -# 715| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x232 -# 715| Type = [Struct] String -# 715| getVariable().getInitializer(): [Initializer] initializer for x232 -# 715| getExpr(): [ConstructorCall] call to String -# 715| Type = [VoidType] void -# 715| ValueCategory = prvalue -# 716| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 716| Type = [VoidType] void -# 716| ValueCategory = prvalue -# 716| getQualifier(): [VariableAccess] x232 -# 716| Type = [Struct] String -# 716| ValueCategory = lvalue -# 716| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 716| Conversion = [BoolConversion] conversion to bool -# 716| Type = [BoolType] bool -# 716| Value = [CStyleCast] 0 -# 716| ValueCategory = prvalue -# 717| getStmt(233): [DoStmt] do (...) ... -# 719| getCondition(): [Literal] 0 -# 719| Type = [IntType] int -# 719| Value = [Literal] 0 -# 719| ValueCategory = prvalue -# 717| getStmt(): [BlockStmt] { ... } -# 718| getStmt(0): [DeclStmt] declaration -# 718| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x233 -# 718| Type = [Struct] String -# 718| getVariable().getInitializer(): [Initializer] initializer for x233 -# 718| getExpr(): [ConstructorCall] call to String -# 718| Type = [VoidType] void -# 718| ValueCategory = prvalue -# 719| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 719| Type = [VoidType] void -# 719| ValueCategory = prvalue -# 719| getQualifier(): [VariableAccess] x233 -# 719| Type = [Struct] String -# 719| ValueCategory = lvalue -# 719| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 719| Conversion = [BoolConversion] conversion to bool -# 719| Type = [BoolType] bool -# 719| Value = [CStyleCast] 0 -# 719| ValueCategory = prvalue -# 720| getStmt(234): [DoStmt] do (...) ... -# 722| getCondition(): [Literal] 0 -# 722| Type = [IntType] int -# 722| Value = [Literal] 0 -# 722| ValueCategory = prvalue -# 720| getStmt(): [BlockStmt] { ... } -# 721| getStmt(0): [DeclStmt] declaration -# 721| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x234 -# 721| Type = [Struct] String -# 721| getVariable().getInitializer(): [Initializer] initializer for x234 -# 721| getExpr(): [ConstructorCall] call to String -# 721| Type = [VoidType] void -# 721| ValueCategory = prvalue -# 722| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 722| Type = [VoidType] void -# 722| ValueCategory = prvalue -# 722| getQualifier(): [VariableAccess] x234 -# 722| Type = [Struct] String -# 722| ValueCategory = lvalue -# 722| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 722| Conversion = [BoolConversion] conversion to bool -# 722| Type = [BoolType] bool -# 722| Value = [CStyleCast] 0 -# 722| ValueCategory = prvalue -# 723| getStmt(235): [DoStmt] do (...) ... -# 725| getCondition(): [Literal] 0 -# 725| Type = [IntType] int -# 725| Value = [Literal] 0 -# 725| ValueCategory = prvalue -# 723| getStmt(): [BlockStmt] { ... } -# 724| getStmt(0): [DeclStmt] declaration -# 724| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x235 -# 724| Type = [Struct] String -# 724| getVariable().getInitializer(): [Initializer] initializer for x235 -# 724| getExpr(): [ConstructorCall] call to String -# 724| Type = [VoidType] void -# 724| ValueCategory = prvalue -# 725| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 725| Type = [VoidType] void -# 725| ValueCategory = prvalue -# 725| getQualifier(): [VariableAccess] x235 -# 725| Type = [Struct] String -# 725| ValueCategory = lvalue -# 725| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 725| Conversion = [BoolConversion] conversion to bool -# 725| Type = [BoolType] bool -# 725| Value = [CStyleCast] 0 -# 725| ValueCategory = prvalue -# 726| getStmt(236): [DoStmt] do (...) ... -# 728| getCondition(): [Literal] 0 -# 728| Type = [IntType] int -# 728| Value = [Literal] 0 -# 728| ValueCategory = prvalue -# 726| getStmt(): [BlockStmt] { ... } -# 727| getStmt(0): [DeclStmt] declaration -# 727| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x236 -# 727| Type = [Struct] String -# 727| getVariable().getInitializer(): [Initializer] initializer for x236 -# 727| getExpr(): [ConstructorCall] call to String -# 727| Type = [VoidType] void -# 727| ValueCategory = prvalue -# 728| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 728| Type = [VoidType] void -# 728| ValueCategory = prvalue -# 728| getQualifier(): [VariableAccess] x236 -# 728| Type = [Struct] String -# 728| ValueCategory = lvalue -# 728| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 728| Conversion = [BoolConversion] conversion to bool -# 728| Type = [BoolType] bool -# 728| Value = [CStyleCast] 0 -# 728| ValueCategory = prvalue -# 729| getStmt(237): [DoStmt] do (...) ... -# 731| getCondition(): [Literal] 0 -# 731| Type = [IntType] int -# 731| Value = [Literal] 0 -# 731| ValueCategory = prvalue -# 729| getStmt(): [BlockStmt] { ... } -# 730| getStmt(0): [DeclStmt] declaration -# 730| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x237 -# 730| Type = [Struct] String -# 730| getVariable().getInitializer(): [Initializer] initializer for x237 -# 730| getExpr(): [ConstructorCall] call to String -# 730| Type = [VoidType] void -# 730| ValueCategory = prvalue -# 731| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 731| Type = [VoidType] void -# 731| ValueCategory = prvalue -# 731| getQualifier(): [VariableAccess] x237 -# 731| Type = [Struct] String -# 731| ValueCategory = lvalue -# 731| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 731| Conversion = [BoolConversion] conversion to bool -# 731| Type = [BoolType] bool -# 731| Value = [CStyleCast] 0 -# 731| ValueCategory = prvalue -# 732| getStmt(238): [DoStmt] do (...) ... -# 734| getCondition(): [Literal] 0 -# 734| Type = [IntType] int -# 734| Value = [Literal] 0 -# 734| ValueCategory = prvalue -# 732| getStmt(): [BlockStmt] { ... } -# 733| getStmt(0): [DeclStmt] declaration -# 733| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x238 -# 733| Type = [Struct] String -# 733| getVariable().getInitializer(): [Initializer] initializer for x238 -# 733| getExpr(): [ConstructorCall] call to String -# 733| Type = [VoidType] void -# 733| ValueCategory = prvalue -# 734| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 734| Type = [VoidType] void -# 734| ValueCategory = prvalue -# 734| getQualifier(): [VariableAccess] x238 -# 734| Type = [Struct] String -# 734| ValueCategory = lvalue -# 734| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 734| Conversion = [BoolConversion] conversion to bool -# 734| Type = [BoolType] bool -# 734| Value = [CStyleCast] 0 -# 734| ValueCategory = prvalue -# 735| getStmt(239): [DoStmt] do (...) ... -# 737| getCondition(): [Literal] 0 -# 737| Type = [IntType] int -# 737| Value = [Literal] 0 -# 737| ValueCategory = prvalue -# 735| getStmt(): [BlockStmt] { ... } -# 736| getStmt(0): [DeclStmt] declaration -# 736| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x239 -# 736| Type = [Struct] String -# 736| getVariable().getInitializer(): [Initializer] initializer for x239 -# 736| getExpr(): [ConstructorCall] call to String -# 736| Type = [VoidType] void -# 736| ValueCategory = prvalue -# 737| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 737| Type = [VoidType] void -# 737| ValueCategory = prvalue -# 737| getQualifier(): [VariableAccess] x239 -# 737| Type = [Struct] String -# 737| ValueCategory = lvalue -# 737| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 737| Conversion = [BoolConversion] conversion to bool -# 737| Type = [BoolType] bool -# 737| Value = [CStyleCast] 0 -# 737| ValueCategory = prvalue -# 738| getStmt(240): [DoStmt] do (...) ... -# 740| getCondition(): [Literal] 0 -# 740| Type = [IntType] int -# 740| Value = [Literal] 0 -# 740| ValueCategory = prvalue -# 738| getStmt(): [BlockStmt] { ... } -# 739| getStmt(0): [DeclStmt] declaration -# 739| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x240 -# 739| Type = [Struct] String -# 739| getVariable().getInitializer(): [Initializer] initializer for x240 -# 739| getExpr(): [ConstructorCall] call to String -# 739| Type = [VoidType] void -# 739| ValueCategory = prvalue -# 740| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 740| Type = [VoidType] void -# 740| ValueCategory = prvalue -# 740| getQualifier(): [VariableAccess] x240 -# 740| Type = [Struct] String -# 740| ValueCategory = lvalue -# 740| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 740| Conversion = [BoolConversion] conversion to bool -# 740| Type = [BoolType] bool -# 740| Value = [CStyleCast] 0 -# 740| ValueCategory = prvalue -# 741| getStmt(241): [DoStmt] do (...) ... -# 743| getCondition(): [Literal] 0 -# 743| Type = [IntType] int -# 743| Value = [Literal] 0 -# 743| ValueCategory = prvalue -# 741| getStmt(): [BlockStmt] { ... } -# 742| getStmt(0): [DeclStmt] declaration -# 742| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x241 -# 742| Type = [Struct] String -# 742| getVariable().getInitializer(): [Initializer] initializer for x241 -# 742| getExpr(): [ConstructorCall] call to String -# 742| Type = [VoidType] void -# 742| ValueCategory = prvalue -# 743| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 743| Type = [VoidType] void -# 743| ValueCategory = prvalue -# 743| getQualifier(): [VariableAccess] x241 -# 743| Type = [Struct] String -# 743| ValueCategory = lvalue -# 743| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 743| Conversion = [BoolConversion] conversion to bool -# 743| Type = [BoolType] bool -# 743| Value = [CStyleCast] 0 -# 743| ValueCategory = prvalue -# 744| getStmt(242): [DoStmt] do (...) ... -# 746| getCondition(): [Literal] 0 -# 746| Type = [IntType] int -# 746| Value = [Literal] 0 -# 746| ValueCategory = prvalue -# 744| getStmt(): [BlockStmt] { ... } -# 745| getStmt(0): [DeclStmt] declaration -# 745| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x242 -# 745| Type = [Struct] String -# 745| getVariable().getInitializer(): [Initializer] initializer for x242 -# 745| getExpr(): [ConstructorCall] call to String -# 745| Type = [VoidType] void -# 745| ValueCategory = prvalue -# 746| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 746| Type = [VoidType] void -# 746| ValueCategory = prvalue -# 746| getQualifier(): [VariableAccess] x242 -# 746| Type = [Struct] String -# 746| ValueCategory = lvalue -# 746| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 746| Conversion = [BoolConversion] conversion to bool -# 746| Type = [BoolType] bool -# 746| Value = [CStyleCast] 0 -# 746| ValueCategory = prvalue -# 747| getStmt(243): [DoStmt] do (...) ... -# 749| getCondition(): [Literal] 0 -# 749| Type = [IntType] int -# 749| Value = [Literal] 0 -# 749| ValueCategory = prvalue -# 747| getStmt(): [BlockStmt] { ... } -# 748| getStmt(0): [DeclStmt] declaration -# 748| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x243 -# 748| Type = [Struct] String -# 748| getVariable().getInitializer(): [Initializer] initializer for x243 -# 748| getExpr(): [ConstructorCall] call to String -# 748| Type = [VoidType] void -# 748| ValueCategory = prvalue -# 749| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 749| Type = [VoidType] void -# 749| ValueCategory = prvalue -# 749| getQualifier(): [VariableAccess] x243 -# 749| Type = [Struct] String -# 749| ValueCategory = lvalue -# 749| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 749| Conversion = [BoolConversion] conversion to bool -# 749| Type = [BoolType] bool -# 749| Value = [CStyleCast] 0 -# 749| ValueCategory = prvalue -# 750| getStmt(244): [DoStmt] do (...) ... -# 752| getCondition(): [Literal] 0 -# 752| Type = [IntType] int -# 752| Value = [Literal] 0 -# 752| ValueCategory = prvalue -# 750| getStmt(): [BlockStmt] { ... } -# 751| getStmt(0): [DeclStmt] declaration -# 751| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x244 -# 751| Type = [Struct] String -# 751| getVariable().getInitializer(): [Initializer] initializer for x244 -# 751| getExpr(): [ConstructorCall] call to String -# 751| Type = [VoidType] void -# 751| ValueCategory = prvalue -# 752| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 752| Type = [VoidType] void -# 752| ValueCategory = prvalue -# 752| getQualifier(): [VariableAccess] x244 -# 752| Type = [Struct] String -# 752| ValueCategory = lvalue -# 752| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 752| Conversion = [BoolConversion] conversion to bool -# 752| Type = [BoolType] bool -# 752| Value = [CStyleCast] 0 -# 752| ValueCategory = prvalue -# 753| getStmt(245): [DoStmt] do (...) ... -# 755| getCondition(): [Literal] 0 -# 755| Type = [IntType] int -# 755| Value = [Literal] 0 -# 755| ValueCategory = prvalue -# 753| getStmt(): [BlockStmt] { ... } -# 754| getStmt(0): [DeclStmt] declaration -# 754| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x245 -# 754| Type = [Struct] String -# 754| getVariable().getInitializer(): [Initializer] initializer for x245 -# 754| getExpr(): [ConstructorCall] call to String -# 754| Type = [VoidType] void -# 754| ValueCategory = prvalue -# 755| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 755| Type = [VoidType] void -# 755| ValueCategory = prvalue -# 755| getQualifier(): [VariableAccess] x245 -# 755| Type = [Struct] String -# 755| ValueCategory = lvalue -# 755| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 755| Conversion = [BoolConversion] conversion to bool -# 755| Type = [BoolType] bool -# 755| Value = [CStyleCast] 0 -# 755| ValueCategory = prvalue -# 756| getStmt(246): [DoStmt] do (...) ... -# 758| getCondition(): [Literal] 0 -# 758| Type = [IntType] int -# 758| Value = [Literal] 0 -# 758| ValueCategory = prvalue -# 756| getStmt(): [BlockStmt] { ... } -# 757| getStmt(0): [DeclStmt] declaration -# 757| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x246 -# 757| Type = [Struct] String -# 757| getVariable().getInitializer(): [Initializer] initializer for x246 -# 757| getExpr(): [ConstructorCall] call to String -# 757| Type = [VoidType] void -# 757| ValueCategory = prvalue -# 758| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 758| Type = [VoidType] void -# 758| ValueCategory = prvalue -# 758| getQualifier(): [VariableAccess] x246 -# 758| Type = [Struct] String -# 758| ValueCategory = lvalue -# 758| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 758| Conversion = [BoolConversion] conversion to bool -# 758| Type = [BoolType] bool -# 758| Value = [CStyleCast] 0 -# 758| ValueCategory = prvalue -# 759| getStmt(247): [DoStmt] do (...) ... -# 761| getCondition(): [Literal] 0 -# 761| Type = [IntType] int -# 761| Value = [Literal] 0 -# 761| ValueCategory = prvalue -# 759| getStmt(): [BlockStmt] { ... } -# 760| getStmt(0): [DeclStmt] declaration -# 760| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x247 -# 760| Type = [Struct] String -# 760| getVariable().getInitializer(): [Initializer] initializer for x247 -# 760| getExpr(): [ConstructorCall] call to String -# 760| Type = [VoidType] void -# 760| ValueCategory = prvalue -# 761| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 761| Type = [VoidType] void -# 761| ValueCategory = prvalue -# 761| getQualifier(): [VariableAccess] x247 -# 761| Type = [Struct] String -# 761| ValueCategory = lvalue -# 761| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 761| Conversion = [BoolConversion] conversion to bool -# 761| Type = [BoolType] bool -# 761| Value = [CStyleCast] 0 -# 761| ValueCategory = prvalue -# 762| getStmt(248): [DoStmt] do (...) ... -# 764| getCondition(): [Literal] 0 -# 764| Type = [IntType] int -# 764| Value = [Literal] 0 -# 764| ValueCategory = prvalue -# 762| getStmt(): [BlockStmt] { ... } -# 763| getStmt(0): [DeclStmt] declaration -# 763| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x248 -# 763| Type = [Struct] String -# 763| getVariable().getInitializer(): [Initializer] initializer for x248 -# 763| getExpr(): [ConstructorCall] call to String -# 763| Type = [VoidType] void -# 763| ValueCategory = prvalue -# 764| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 764| Type = [VoidType] void -# 764| ValueCategory = prvalue -# 764| getQualifier(): [VariableAccess] x248 -# 764| Type = [Struct] String -# 764| ValueCategory = lvalue -# 764| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 764| Conversion = [BoolConversion] conversion to bool -# 764| Type = [BoolType] bool -# 764| Value = [CStyleCast] 0 -# 764| ValueCategory = prvalue -# 765| getStmt(249): [DoStmt] do (...) ... -# 767| getCondition(): [Literal] 0 -# 767| Type = [IntType] int -# 767| Value = [Literal] 0 -# 767| ValueCategory = prvalue -# 765| getStmt(): [BlockStmt] { ... } -# 766| getStmt(0): [DeclStmt] declaration -# 766| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x249 -# 766| Type = [Struct] String -# 766| getVariable().getInitializer(): [Initializer] initializer for x249 -# 766| getExpr(): [ConstructorCall] call to String -# 766| Type = [VoidType] void -# 766| ValueCategory = prvalue -# 767| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 767| Type = [VoidType] void -# 767| ValueCategory = prvalue -# 767| getQualifier(): [VariableAccess] x249 -# 767| Type = [Struct] String -# 767| ValueCategory = lvalue -# 767| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 767| Conversion = [BoolConversion] conversion to bool -# 767| Type = [BoolType] bool -# 767| Value = [CStyleCast] 0 -# 767| ValueCategory = prvalue -# 768| getStmt(250): [DoStmt] do (...) ... -# 770| getCondition(): [Literal] 0 -# 770| Type = [IntType] int -# 770| Value = [Literal] 0 -# 770| ValueCategory = prvalue -# 768| getStmt(): [BlockStmt] { ... } -# 769| getStmt(0): [DeclStmt] declaration -# 769| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x250 -# 769| Type = [Struct] String -# 769| getVariable().getInitializer(): [Initializer] initializer for x250 -# 769| getExpr(): [ConstructorCall] call to String -# 769| Type = [VoidType] void -# 769| ValueCategory = prvalue -# 770| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 770| Type = [VoidType] void -# 770| ValueCategory = prvalue -# 770| getQualifier(): [VariableAccess] x250 -# 770| Type = [Struct] String -# 770| ValueCategory = lvalue -# 770| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 770| Conversion = [BoolConversion] conversion to bool -# 770| Type = [BoolType] bool -# 770| Value = [CStyleCast] 0 -# 770| ValueCategory = prvalue -# 771| getStmt(251): [DoStmt] do (...) ... -# 773| getCondition(): [Literal] 0 -# 773| Type = [IntType] int -# 773| Value = [Literal] 0 -# 773| ValueCategory = prvalue -# 771| getStmt(): [BlockStmt] { ... } -# 772| getStmt(0): [DeclStmt] declaration -# 772| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x251 -# 772| Type = [Struct] String -# 772| getVariable().getInitializer(): [Initializer] initializer for x251 -# 772| getExpr(): [ConstructorCall] call to String -# 772| Type = [VoidType] void -# 772| ValueCategory = prvalue -# 773| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 773| Type = [VoidType] void -# 773| ValueCategory = prvalue -# 773| getQualifier(): [VariableAccess] x251 -# 773| Type = [Struct] String -# 773| ValueCategory = lvalue -# 773| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 773| Conversion = [BoolConversion] conversion to bool -# 773| Type = [BoolType] bool -# 773| Value = [CStyleCast] 0 -# 773| ValueCategory = prvalue -# 774| getStmt(252): [DoStmt] do (...) ... -# 776| getCondition(): [Literal] 0 -# 776| Type = [IntType] int -# 776| Value = [Literal] 0 -# 776| ValueCategory = prvalue -# 774| getStmt(): [BlockStmt] { ... } -# 775| getStmt(0): [DeclStmt] declaration -# 775| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x252 -# 775| Type = [Struct] String -# 775| getVariable().getInitializer(): [Initializer] initializer for x252 -# 775| getExpr(): [ConstructorCall] call to String -# 775| Type = [VoidType] void -# 775| ValueCategory = prvalue -# 776| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 776| Type = [VoidType] void -# 776| ValueCategory = prvalue -# 776| getQualifier(): [VariableAccess] x252 -# 776| Type = [Struct] String -# 776| ValueCategory = lvalue -# 776| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 776| Conversion = [BoolConversion] conversion to bool -# 776| Type = [BoolType] bool -# 776| Value = [CStyleCast] 0 -# 776| ValueCategory = prvalue -# 777| getStmt(253): [DoStmt] do (...) ... -# 779| getCondition(): [Literal] 0 -# 779| Type = [IntType] int -# 779| Value = [Literal] 0 -# 779| ValueCategory = prvalue -# 777| getStmt(): [BlockStmt] { ... } -# 778| getStmt(0): [DeclStmt] declaration -# 778| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x253 -# 778| Type = [Struct] String -# 778| getVariable().getInitializer(): [Initializer] initializer for x253 -# 778| getExpr(): [ConstructorCall] call to String -# 778| Type = [VoidType] void -# 778| ValueCategory = prvalue -# 779| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 779| Type = [VoidType] void -# 779| ValueCategory = prvalue -# 779| getQualifier(): [VariableAccess] x253 -# 779| Type = [Struct] String -# 779| ValueCategory = lvalue -# 779| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 779| Conversion = [BoolConversion] conversion to bool -# 779| Type = [BoolType] bool -# 779| Value = [CStyleCast] 0 -# 779| ValueCategory = prvalue -# 780| getStmt(254): [DoStmt] do (...) ... -# 782| getCondition(): [Literal] 0 -# 782| Type = [IntType] int -# 782| Value = [Literal] 0 -# 782| ValueCategory = prvalue -# 780| getStmt(): [BlockStmt] { ... } -# 781| getStmt(0): [DeclStmt] declaration -# 781| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x254 -# 781| Type = [Struct] String -# 781| getVariable().getInitializer(): [Initializer] initializer for x254 -# 781| getExpr(): [ConstructorCall] call to String -# 781| Type = [VoidType] void -# 781| ValueCategory = prvalue -# 782| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 782| Type = [VoidType] void -# 782| ValueCategory = prvalue -# 782| getQualifier(): [VariableAccess] x254 -# 782| Type = [Struct] String -# 782| ValueCategory = lvalue -# 782| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 782| Conversion = [BoolConversion] conversion to bool -# 782| Type = [BoolType] bool -# 782| Value = [CStyleCast] 0 -# 782| ValueCategory = prvalue -# 783| getStmt(255): [DoStmt] do (...) ... -# 785| getCondition(): [Literal] 0 -# 785| Type = [IntType] int -# 785| Value = [Literal] 0 -# 785| ValueCategory = prvalue -# 783| getStmt(): [BlockStmt] { ... } -# 784| getStmt(0): [DeclStmt] declaration -# 784| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x255 -# 784| Type = [Struct] String -# 784| getVariable().getInitializer(): [Initializer] initializer for x255 -# 784| getExpr(): [ConstructorCall] call to String -# 784| Type = [VoidType] void -# 784| ValueCategory = prvalue -# 785| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 785| Type = [VoidType] void -# 785| ValueCategory = prvalue -# 785| getQualifier(): [VariableAccess] x255 -# 785| Type = [Struct] String -# 785| ValueCategory = lvalue -# 785| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 785| Conversion = [BoolConversion] conversion to bool -# 785| Type = [BoolType] bool -# 785| Value = [CStyleCast] 0 -# 785| ValueCategory = prvalue -# 786| getStmt(256): [DoStmt] do (...) ... -# 788| getCondition(): [Literal] 0 -# 788| Type = [IntType] int -# 788| Value = [Literal] 0 -# 788| ValueCategory = prvalue -# 786| getStmt(): [BlockStmt] { ... } -# 787| getStmt(0): [DeclStmt] declaration -# 787| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x256 -# 787| Type = [Struct] String -# 787| getVariable().getInitializer(): [Initializer] initializer for x256 -# 787| getExpr(): [ConstructorCall] call to String -# 787| Type = [VoidType] void -# 787| ValueCategory = prvalue -# 788| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 788| Type = [VoidType] void -# 788| ValueCategory = prvalue -# 788| getQualifier(): [VariableAccess] x256 -# 788| Type = [Struct] String -# 788| ValueCategory = lvalue -# 788| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 788| Conversion = [BoolConversion] conversion to bool -# 788| Type = [BoolType] bool -# 788| Value = [CStyleCast] 0 -# 788| ValueCategory = prvalue -# 789| getStmt(257): [DoStmt] do (...) ... -# 791| getCondition(): [Literal] 0 -# 791| Type = [IntType] int -# 791| Value = [Literal] 0 -# 791| ValueCategory = prvalue -# 789| getStmt(): [BlockStmt] { ... } -# 790| getStmt(0): [DeclStmt] declaration -# 790| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x257 -# 790| Type = [Struct] String -# 790| getVariable().getInitializer(): [Initializer] initializer for x257 -# 790| getExpr(): [ConstructorCall] call to String -# 790| Type = [VoidType] void -# 790| ValueCategory = prvalue -# 791| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 791| Type = [VoidType] void -# 791| ValueCategory = prvalue -# 791| getQualifier(): [VariableAccess] x257 -# 791| Type = [Struct] String -# 791| ValueCategory = lvalue -# 791| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 791| Conversion = [BoolConversion] conversion to bool -# 791| Type = [BoolType] bool -# 791| Value = [CStyleCast] 0 -# 791| ValueCategory = prvalue -# 792| getStmt(258): [DoStmt] do (...) ... -# 794| getCondition(): [Literal] 0 -# 794| Type = [IntType] int -# 794| Value = [Literal] 0 -# 794| ValueCategory = prvalue -# 792| getStmt(): [BlockStmt] { ... } -# 793| getStmt(0): [DeclStmt] declaration -# 793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x258 -# 793| Type = [Struct] String -# 793| getVariable().getInitializer(): [Initializer] initializer for x258 -# 793| getExpr(): [ConstructorCall] call to String -# 793| Type = [VoidType] void -# 793| ValueCategory = prvalue -# 794| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 794| Type = [VoidType] void -# 794| ValueCategory = prvalue -# 794| getQualifier(): [VariableAccess] x258 -# 794| Type = [Struct] String -# 794| ValueCategory = lvalue -# 794| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 794| Conversion = [BoolConversion] conversion to bool -# 794| Type = [BoolType] bool -# 794| Value = [CStyleCast] 0 -# 794| ValueCategory = prvalue -# 795| getStmt(259): [DoStmt] do (...) ... -# 797| getCondition(): [Literal] 0 -# 797| Type = [IntType] int -# 797| Value = [Literal] 0 -# 797| ValueCategory = prvalue -# 795| getStmt(): [BlockStmt] { ... } -# 796| getStmt(0): [DeclStmt] declaration -# 796| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x259 -# 796| Type = [Struct] String -# 796| getVariable().getInitializer(): [Initializer] initializer for x259 -# 796| getExpr(): [ConstructorCall] call to String -# 796| Type = [VoidType] void -# 796| ValueCategory = prvalue -# 797| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 797| Type = [VoidType] void -# 797| ValueCategory = prvalue -# 797| getQualifier(): [VariableAccess] x259 -# 797| Type = [Struct] String -# 797| ValueCategory = lvalue -# 797| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 797| Conversion = [BoolConversion] conversion to bool -# 797| Type = [BoolType] bool -# 797| Value = [CStyleCast] 0 -# 797| ValueCategory = prvalue -# 798| getStmt(260): [DoStmt] do (...) ... -# 800| getCondition(): [Literal] 0 -# 800| Type = [IntType] int -# 800| Value = [Literal] 0 -# 800| ValueCategory = prvalue -# 798| getStmt(): [BlockStmt] { ... } -# 799| getStmt(0): [DeclStmt] declaration -# 799| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x260 -# 799| Type = [Struct] String -# 799| getVariable().getInitializer(): [Initializer] initializer for x260 -# 799| getExpr(): [ConstructorCall] call to String -# 799| Type = [VoidType] void -# 799| ValueCategory = prvalue -# 800| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 800| Type = [VoidType] void -# 800| ValueCategory = prvalue -# 800| getQualifier(): [VariableAccess] x260 -# 800| Type = [Struct] String -# 800| ValueCategory = lvalue -# 800| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 800| Conversion = [BoolConversion] conversion to bool -# 800| Type = [BoolType] bool -# 800| Value = [CStyleCast] 0 -# 800| ValueCategory = prvalue -# 801| getStmt(261): [DoStmt] do (...) ... -# 803| getCondition(): [Literal] 0 -# 803| Type = [IntType] int -# 803| Value = [Literal] 0 -# 803| ValueCategory = prvalue -# 801| getStmt(): [BlockStmt] { ... } -# 802| getStmt(0): [DeclStmt] declaration -# 802| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x261 -# 802| Type = [Struct] String -# 802| getVariable().getInitializer(): [Initializer] initializer for x261 -# 802| getExpr(): [ConstructorCall] call to String -# 802| Type = [VoidType] void -# 802| ValueCategory = prvalue -# 803| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 803| Type = [VoidType] void -# 803| ValueCategory = prvalue -# 803| getQualifier(): [VariableAccess] x261 -# 803| Type = [Struct] String -# 803| ValueCategory = lvalue -# 803| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 803| Conversion = [BoolConversion] conversion to bool -# 803| Type = [BoolType] bool -# 803| Value = [CStyleCast] 0 -# 803| ValueCategory = prvalue -# 804| getStmt(262): [DoStmt] do (...) ... -# 806| getCondition(): [Literal] 0 -# 806| Type = [IntType] int -# 806| Value = [Literal] 0 -# 806| ValueCategory = prvalue -# 804| getStmt(): [BlockStmt] { ... } -# 805| getStmt(0): [DeclStmt] declaration -# 805| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x262 -# 805| Type = [Struct] String -# 805| getVariable().getInitializer(): [Initializer] initializer for x262 -# 805| getExpr(): [ConstructorCall] call to String -# 805| Type = [VoidType] void -# 805| ValueCategory = prvalue -# 806| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 806| Type = [VoidType] void -# 806| ValueCategory = prvalue -# 806| getQualifier(): [VariableAccess] x262 -# 806| Type = [Struct] String -# 806| ValueCategory = lvalue -# 806| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 806| Conversion = [BoolConversion] conversion to bool -# 806| Type = [BoolType] bool -# 806| Value = [CStyleCast] 0 -# 806| ValueCategory = prvalue -# 807| getStmt(263): [DoStmt] do (...) ... -# 809| getCondition(): [Literal] 0 -# 809| Type = [IntType] int -# 809| Value = [Literal] 0 -# 809| ValueCategory = prvalue -# 807| getStmt(): [BlockStmt] { ... } -# 808| getStmt(0): [DeclStmt] declaration -# 808| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x263 -# 808| Type = [Struct] String -# 808| getVariable().getInitializer(): [Initializer] initializer for x263 -# 808| getExpr(): [ConstructorCall] call to String -# 808| Type = [VoidType] void -# 808| ValueCategory = prvalue -# 809| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 809| Type = [VoidType] void -# 809| ValueCategory = prvalue -# 809| getQualifier(): [VariableAccess] x263 -# 809| Type = [Struct] String -# 809| ValueCategory = lvalue -# 809| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 809| Conversion = [BoolConversion] conversion to bool -# 809| Type = [BoolType] bool -# 809| Value = [CStyleCast] 0 -# 809| ValueCategory = prvalue -# 810| getStmt(264): [DoStmt] do (...) ... -# 812| getCondition(): [Literal] 0 -# 812| Type = [IntType] int -# 812| Value = [Literal] 0 -# 812| ValueCategory = prvalue -# 810| getStmt(): [BlockStmt] { ... } -# 811| getStmt(0): [DeclStmt] declaration -# 811| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x264 -# 811| Type = [Struct] String -# 811| getVariable().getInitializer(): [Initializer] initializer for x264 -# 811| getExpr(): [ConstructorCall] call to String -# 811| Type = [VoidType] void -# 811| ValueCategory = prvalue -# 812| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 812| Type = [VoidType] void -# 812| ValueCategory = prvalue -# 812| getQualifier(): [VariableAccess] x264 -# 812| Type = [Struct] String -# 812| ValueCategory = lvalue -# 812| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 812| Conversion = [BoolConversion] conversion to bool -# 812| Type = [BoolType] bool -# 812| Value = [CStyleCast] 0 -# 812| ValueCategory = prvalue -# 813| getStmt(265): [DoStmt] do (...) ... -# 815| getCondition(): [Literal] 0 -# 815| Type = [IntType] int -# 815| Value = [Literal] 0 -# 815| ValueCategory = prvalue -# 813| getStmt(): [BlockStmt] { ... } -# 814| getStmt(0): [DeclStmt] declaration -# 814| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x265 -# 814| Type = [Struct] String -# 814| getVariable().getInitializer(): [Initializer] initializer for x265 -# 814| getExpr(): [ConstructorCall] call to String -# 814| Type = [VoidType] void -# 814| ValueCategory = prvalue -# 815| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 815| Type = [VoidType] void -# 815| ValueCategory = prvalue -# 815| getQualifier(): [VariableAccess] x265 -# 815| Type = [Struct] String -# 815| ValueCategory = lvalue -# 815| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 815| Conversion = [BoolConversion] conversion to bool -# 815| Type = [BoolType] bool -# 815| Value = [CStyleCast] 0 -# 815| ValueCategory = prvalue -# 816| getStmt(266): [DoStmt] do (...) ... -# 818| getCondition(): [Literal] 0 -# 818| Type = [IntType] int -# 818| Value = [Literal] 0 -# 818| ValueCategory = prvalue -# 816| getStmt(): [BlockStmt] { ... } -# 817| getStmt(0): [DeclStmt] declaration -# 817| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x266 -# 817| Type = [Struct] String -# 817| getVariable().getInitializer(): [Initializer] initializer for x266 -# 817| getExpr(): [ConstructorCall] call to String -# 817| Type = [VoidType] void -# 817| ValueCategory = prvalue -# 818| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 818| Type = [VoidType] void -# 818| ValueCategory = prvalue -# 818| getQualifier(): [VariableAccess] x266 -# 818| Type = [Struct] String -# 818| ValueCategory = lvalue -# 818| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 818| Conversion = [BoolConversion] conversion to bool -# 818| Type = [BoolType] bool -# 818| Value = [CStyleCast] 0 -# 818| ValueCategory = prvalue -# 819| getStmt(267): [DoStmt] do (...) ... -# 821| getCondition(): [Literal] 0 -# 821| Type = [IntType] int -# 821| Value = [Literal] 0 -# 821| ValueCategory = prvalue -# 819| getStmt(): [BlockStmt] { ... } -# 820| getStmt(0): [DeclStmt] declaration -# 820| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x267 -# 820| Type = [Struct] String -# 820| getVariable().getInitializer(): [Initializer] initializer for x267 -# 820| getExpr(): [ConstructorCall] call to String -# 820| Type = [VoidType] void -# 820| ValueCategory = prvalue -# 821| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 821| Type = [VoidType] void -# 821| ValueCategory = prvalue -# 821| getQualifier(): [VariableAccess] x267 -# 821| Type = [Struct] String -# 821| ValueCategory = lvalue -# 821| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 821| Conversion = [BoolConversion] conversion to bool -# 821| Type = [BoolType] bool -# 821| Value = [CStyleCast] 0 -# 821| ValueCategory = prvalue -# 822| getStmt(268): [DoStmt] do (...) ... -# 824| getCondition(): [Literal] 0 -# 824| Type = [IntType] int -# 824| Value = [Literal] 0 -# 824| ValueCategory = prvalue -# 822| getStmt(): [BlockStmt] { ... } -# 823| getStmt(0): [DeclStmt] declaration -# 823| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x268 -# 823| Type = [Struct] String -# 823| getVariable().getInitializer(): [Initializer] initializer for x268 -# 823| getExpr(): [ConstructorCall] call to String -# 823| Type = [VoidType] void -# 823| ValueCategory = prvalue -# 824| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 824| Type = [VoidType] void -# 824| ValueCategory = prvalue -# 824| getQualifier(): [VariableAccess] x268 -# 824| Type = [Struct] String -# 824| ValueCategory = lvalue -# 824| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 824| Conversion = [BoolConversion] conversion to bool -# 824| Type = [BoolType] bool -# 824| Value = [CStyleCast] 0 -# 824| ValueCategory = prvalue -# 825| getStmt(269): [DoStmt] do (...) ... -# 827| getCondition(): [Literal] 0 -# 827| Type = [IntType] int -# 827| Value = [Literal] 0 -# 827| ValueCategory = prvalue -# 825| getStmt(): [BlockStmt] { ... } -# 826| getStmt(0): [DeclStmt] declaration -# 826| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x269 -# 826| Type = [Struct] String -# 826| getVariable().getInitializer(): [Initializer] initializer for x269 -# 826| getExpr(): [ConstructorCall] call to String -# 826| Type = [VoidType] void -# 826| ValueCategory = prvalue -# 827| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 827| Type = [VoidType] void -# 827| ValueCategory = prvalue -# 827| getQualifier(): [VariableAccess] x269 -# 827| Type = [Struct] String -# 827| ValueCategory = lvalue -# 827| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 827| Conversion = [BoolConversion] conversion to bool -# 827| Type = [BoolType] bool -# 827| Value = [CStyleCast] 0 -# 827| ValueCategory = prvalue -# 828| getStmt(270): [DoStmt] do (...) ... -# 830| getCondition(): [Literal] 0 -# 830| Type = [IntType] int -# 830| Value = [Literal] 0 -# 830| ValueCategory = prvalue -# 828| getStmt(): [BlockStmt] { ... } -# 829| getStmt(0): [DeclStmt] declaration -# 829| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x270 -# 829| Type = [Struct] String -# 829| getVariable().getInitializer(): [Initializer] initializer for x270 -# 829| getExpr(): [ConstructorCall] call to String -# 829| Type = [VoidType] void -# 829| ValueCategory = prvalue -# 830| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 830| Type = [VoidType] void -# 830| ValueCategory = prvalue -# 830| getQualifier(): [VariableAccess] x270 -# 830| Type = [Struct] String -# 830| ValueCategory = lvalue -# 830| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 830| Conversion = [BoolConversion] conversion to bool -# 830| Type = [BoolType] bool -# 830| Value = [CStyleCast] 0 -# 830| ValueCategory = prvalue -# 831| getStmt(271): [DoStmt] do (...) ... -# 833| getCondition(): [Literal] 0 -# 833| Type = [IntType] int -# 833| Value = [Literal] 0 -# 833| ValueCategory = prvalue -# 831| getStmt(): [BlockStmt] { ... } -# 832| getStmt(0): [DeclStmt] declaration -# 832| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x271 -# 832| Type = [Struct] String -# 832| getVariable().getInitializer(): [Initializer] initializer for x271 -# 832| getExpr(): [ConstructorCall] call to String -# 832| Type = [VoidType] void -# 832| ValueCategory = prvalue -# 833| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 833| Type = [VoidType] void -# 833| ValueCategory = prvalue -# 833| getQualifier(): [VariableAccess] x271 -# 833| Type = [Struct] String -# 833| ValueCategory = lvalue -# 833| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 833| Conversion = [BoolConversion] conversion to bool -# 833| Type = [BoolType] bool -# 833| Value = [CStyleCast] 0 -# 833| ValueCategory = prvalue -# 834| getStmt(272): [DoStmt] do (...) ... -# 836| getCondition(): [Literal] 0 -# 836| Type = [IntType] int -# 836| Value = [Literal] 0 -# 836| ValueCategory = prvalue -# 834| getStmt(): [BlockStmt] { ... } -# 835| getStmt(0): [DeclStmt] declaration -# 835| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x272 -# 835| Type = [Struct] String -# 835| getVariable().getInitializer(): [Initializer] initializer for x272 -# 835| getExpr(): [ConstructorCall] call to String -# 835| Type = [VoidType] void -# 835| ValueCategory = prvalue -# 836| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 836| Type = [VoidType] void -# 836| ValueCategory = prvalue -# 836| getQualifier(): [VariableAccess] x272 -# 836| Type = [Struct] String -# 836| ValueCategory = lvalue -# 836| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 836| Conversion = [BoolConversion] conversion to bool -# 836| Type = [BoolType] bool -# 836| Value = [CStyleCast] 0 -# 836| ValueCategory = prvalue -# 837| getStmt(273): [DoStmt] do (...) ... -# 839| getCondition(): [Literal] 0 -# 839| Type = [IntType] int -# 839| Value = [Literal] 0 -# 839| ValueCategory = prvalue -# 837| getStmt(): [BlockStmt] { ... } -# 838| getStmt(0): [DeclStmt] declaration -# 838| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x273 -# 838| Type = [Struct] String -# 838| getVariable().getInitializer(): [Initializer] initializer for x273 -# 838| getExpr(): [ConstructorCall] call to String -# 838| Type = [VoidType] void -# 838| ValueCategory = prvalue -# 839| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 839| Type = [VoidType] void -# 839| ValueCategory = prvalue -# 839| getQualifier(): [VariableAccess] x273 -# 839| Type = [Struct] String -# 839| ValueCategory = lvalue -# 839| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 839| Conversion = [BoolConversion] conversion to bool -# 839| Type = [BoolType] bool -# 839| Value = [CStyleCast] 0 -# 839| ValueCategory = prvalue -# 840| getStmt(274): [DoStmt] do (...) ... -# 842| getCondition(): [Literal] 0 -# 842| Type = [IntType] int -# 842| Value = [Literal] 0 -# 842| ValueCategory = prvalue -# 840| getStmt(): [BlockStmt] { ... } -# 841| getStmt(0): [DeclStmt] declaration -# 841| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x274 -# 841| Type = [Struct] String -# 841| getVariable().getInitializer(): [Initializer] initializer for x274 -# 841| getExpr(): [ConstructorCall] call to String -# 841| Type = [VoidType] void -# 841| ValueCategory = prvalue -# 842| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 842| Type = [VoidType] void -# 842| ValueCategory = prvalue -# 842| getQualifier(): [VariableAccess] x274 -# 842| Type = [Struct] String -# 842| ValueCategory = lvalue -# 842| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 842| Conversion = [BoolConversion] conversion to bool -# 842| Type = [BoolType] bool -# 842| Value = [CStyleCast] 0 -# 842| ValueCategory = prvalue -# 843| getStmt(275): [DoStmt] do (...) ... -# 845| getCondition(): [Literal] 0 -# 845| Type = [IntType] int -# 845| Value = [Literal] 0 -# 845| ValueCategory = prvalue -# 843| getStmt(): [BlockStmt] { ... } -# 844| getStmt(0): [DeclStmt] declaration -# 844| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x275 -# 844| Type = [Struct] String -# 844| getVariable().getInitializer(): [Initializer] initializer for x275 -# 844| getExpr(): [ConstructorCall] call to String -# 844| Type = [VoidType] void -# 844| ValueCategory = prvalue -# 845| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 845| Type = [VoidType] void -# 845| ValueCategory = prvalue -# 845| getQualifier(): [VariableAccess] x275 -# 845| Type = [Struct] String -# 845| ValueCategory = lvalue -# 845| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 845| Conversion = [BoolConversion] conversion to bool -# 845| Type = [BoolType] bool -# 845| Value = [CStyleCast] 0 -# 845| ValueCategory = prvalue -# 846| getStmt(276): [DoStmt] do (...) ... -# 848| getCondition(): [Literal] 0 -# 848| Type = [IntType] int -# 848| Value = [Literal] 0 -# 848| ValueCategory = prvalue -# 846| getStmt(): [BlockStmt] { ... } -# 847| getStmt(0): [DeclStmt] declaration -# 847| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x276 -# 847| Type = [Struct] String -# 847| getVariable().getInitializer(): [Initializer] initializer for x276 -# 847| getExpr(): [ConstructorCall] call to String -# 847| Type = [VoidType] void -# 847| ValueCategory = prvalue -# 848| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 848| Type = [VoidType] void -# 848| ValueCategory = prvalue -# 848| getQualifier(): [VariableAccess] x276 -# 848| Type = [Struct] String -# 848| ValueCategory = lvalue -# 848| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 848| Conversion = [BoolConversion] conversion to bool -# 848| Type = [BoolType] bool -# 848| Value = [CStyleCast] 0 -# 848| ValueCategory = prvalue -# 849| getStmt(277): [DoStmt] do (...) ... -# 851| getCondition(): [Literal] 0 -# 851| Type = [IntType] int -# 851| Value = [Literal] 0 -# 851| ValueCategory = prvalue -# 849| getStmt(): [BlockStmt] { ... } -# 850| getStmt(0): [DeclStmt] declaration -# 850| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x277 -# 850| Type = [Struct] String -# 850| getVariable().getInitializer(): [Initializer] initializer for x277 -# 850| getExpr(): [ConstructorCall] call to String -# 850| Type = [VoidType] void -# 850| ValueCategory = prvalue -# 851| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 851| Type = [VoidType] void -# 851| ValueCategory = prvalue -# 851| getQualifier(): [VariableAccess] x277 -# 851| Type = [Struct] String -# 851| ValueCategory = lvalue -# 851| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 851| Conversion = [BoolConversion] conversion to bool -# 851| Type = [BoolType] bool -# 851| Value = [CStyleCast] 0 -# 851| ValueCategory = prvalue -# 852| getStmt(278): [DoStmt] do (...) ... -# 854| getCondition(): [Literal] 0 -# 854| Type = [IntType] int -# 854| Value = [Literal] 0 -# 854| ValueCategory = prvalue -# 852| getStmt(): [BlockStmt] { ... } -# 853| getStmt(0): [DeclStmt] declaration -# 853| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x278 -# 853| Type = [Struct] String -# 853| getVariable().getInitializer(): [Initializer] initializer for x278 -# 853| getExpr(): [ConstructorCall] call to String -# 853| Type = [VoidType] void -# 853| ValueCategory = prvalue -# 854| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 854| Type = [VoidType] void -# 854| ValueCategory = prvalue -# 854| getQualifier(): [VariableAccess] x278 -# 854| Type = [Struct] String -# 854| ValueCategory = lvalue -# 854| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 854| Conversion = [BoolConversion] conversion to bool -# 854| Type = [BoolType] bool -# 854| Value = [CStyleCast] 0 -# 854| ValueCategory = prvalue -# 855| getStmt(279): [DoStmt] do (...) ... -# 857| getCondition(): [Literal] 0 -# 857| Type = [IntType] int -# 857| Value = [Literal] 0 -# 857| ValueCategory = prvalue -# 855| getStmt(): [BlockStmt] { ... } -# 856| getStmt(0): [DeclStmt] declaration -# 856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x279 -# 856| Type = [Struct] String -# 856| getVariable().getInitializer(): [Initializer] initializer for x279 -# 856| getExpr(): [ConstructorCall] call to String -# 856| Type = [VoidType] void -# 856| ValueCategory = prvalue -# 857| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 857| Type = [VoidType] void -# 857| ValueCategory = prvalue -# 857| getQualifier(): [VariableAccess] x279 -# 857| Type = [Struct] String -# 857| ValueCategory = lvalue -# 857| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 857| Conversion = [BoolConversion] conversion to bool -# 857| Type = [BoolType] bool -# 857| Value = [CStyleCast] 0 -# 857| ValueCategory = prvalue -# 858| getStmt(280): [DoStmt] do (...) ... -# 860| getCondition(): [Literal] 0 -# 860| Type = [IntType] int -# 860| Value = [Literal] 0 -# 860| ValueCategory = prvalue -# 858| getStmt(): [BlockStmt] { ... } -# 859| getStmt(0): [DeclStmt] declaration -# 859| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x280 -# 859| Type = [Struct] String -# 859| getVariable().getInitializer(): [Initializer] initializer for x280 -# 859| getExpr(): [ConstructorCall] call to String -# 859| Type = [VoidType] void -# 859| ValueCategory = prvalue -# 860| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 860| Type = [VoidType] void -# 860| ValueCategory = prvalue -# 860| getQualifier(): [VariableAccess] x280 -# 860| Type = [Struct] String -# 860| ValueCategory = lvalue -# 860| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 860| Conversion = [BoolConversion] conversion to bool -# 860| Type = [BoolType] bool -# 860| Value = [CStyleCast] 0 -# 860| ValueCategory = prvalue -# 861| getStmt(281): [DoStmt] do (...) ... -# 863| getCondition(): [Literal] 0 -# 863| Type = [IntType] int -# 863| Value = [Literal] 0 -# 863| ValueCategory = prvalue -# 861| getStmt(): [BlockStmt] { ... } -# 862| getStmt(0): [DeclStmt] declaration -# 862| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x281 -# 862| Type = [Struct] String -# 862| getVariable().getInitializer(): [Initializer] initializer for x281 -# 862| getExpr(): [ConstructorCall] call to String -# 862| Type = [VoidType] void -# 862| ValueCategory = prvalue -# 863| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 863| Type = [VoidType] void -# 863| ValueCategory = prvalue -# 863| getQualifier(): [VariableAccess] x281 -# 863| Type = [Struct] String -# 863| ValueCategory = lvalue -# 863| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 863| Conversion = [BoolConversion] conversion to bool -# 863| Type = [BoolType] bool -# 863| Value = [CStyleCast] 0 -# 863| ValueCategory = prvalue -# 864| getStmt(282): [DoStmt] do (...) ... -# 866| getCondition(): [Literal] 0 -# 866| Type = [IntType] int -# 866| Value = [Literal] 0 -# 866| ValueCategory = prvalue -# 864| getStmt(): [BlockStmt] { ... } -# 865| getStmt(0): [DeclStmt] declaration -# 865| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x282 -# 865| Type = [Struct] String -# 865| getVariable().getInitializer(): [Initializer] initializer for x282 -# 865| getExpr(): [ConstructorCall] call to String -# 865| Type = [VoidType] void -# 865| ValueCategory = prvalue -# 866| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 866| Type = [VoidType] void -# 866| ValueCategory = prvalue -# 866| getQualifier(): [VariableAccess] x282 -# 866| Type = [Struct] String -# 866| ValueCategory = lvalue -# 866| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 866| Conversion = [BoolConversion] conversion to bool -# 866| Type = [BoolType] bool -# 866| Value = [CStyleCast] 0 -# 866| ValueCategory = prvalue -# 867| getStmt(283): [DoStmt] do (...) ... -# 869| getCondition(): [Literal] 0 -# 869| Type = [IntType] int -# 869| Value = [Literal] 0 -# 869| ValueCategory = prvalue -# 867| getStmt(): [BlockStmt] { ... } -# 868| getStmt(0): [DeclStmt] declaration -# 868| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x283 -# 868| Type = [Struct] String -# 868| getVariable().getInitializer(): [Initializer] initializer for x283 -# 868| getExpr(): [ConstructorCall] call to String -# 868| Type = [VoidType] void -# 868| ValueCategory = prvalue -# 869| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 869| Type = [VoidType] void -# 869| ValueCategory = prvalue -# 869| getQualifier(): [VariableAccess] x283 -# 869| Type = [Struct] String -# 869| ValueCategory = lvalue -# 869| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 869| Conversion = [BoolConversion] conversion to bool -# 869| Type = [BoolType] bool -# 869| Value = [CStyleCast] 0 -# 869| ValueCategory = prvalue -# 870| getStmt(284): [DoStmt] do (...) ... -# 872| getCondition(): [Literal] 0 -# 872| Type = [IntType] int -# 872| Value = [Literal] 0 -# 872| ValueCategory = prvalue -# 870| getStmt(): [BlockStmt] { ... } -# 871| getStmt(0): [DeclStmt] declaration -# 871| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x284 -# 871| Type = [Struct] String -# 871| getVariable().getInitializer(): [Initializer] initializer for x284 -# 871| getExpr(): [ConstructorCall] call to String -# 871| Type = [VoidType] void -# 871| ValueCategory = prvalue -# 872| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 872| Type = [VoidType] void -# 872| ValueCategory = prvalue -# 872| getQualifier(): [VariableAccess] x284 -# 872| Type = [Struct] String -# 872| ValueCategory = lvalue -# 872| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 872| Conversion = [BoolConversion] conversion to bool -# 872| Type = [BoolType] bool -# 872| Value = [CStyleCast] 0 -# 872| ValueCategory = prvalue -# 873| getStmt(285): [DoStmt] do (...) ... -# 875| getCondition(): [Literal] 0 -# 875| Type = [IntType] int -# 875| Value = [Literal] 0 -# 875| ValueCategory = prvalue -# 873| getStmt(): [BlockStmt] { ... } -# 874| getStmt(0): [DeclStmt] declaration -# 874| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x285 -# 874| Type = [Struct] String -# 874| getVariable().getInitializer(): [Initializer] initializer for x285 -# 874| getExpr(): [ConstructorCall] call to String -# 874| Type = [VoidType] void -# 874| ValueCategory = prvalue -# 875| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 875| Type = [VoidType] void -# 875| ValueCategory = prvalue -# 875| getQualifier(): [VariableAccess] x285 -# 875| Type = [Struct] String -# 875| ValueCategory = lvalue -# 875| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 875| Conversion = [BoolConversion] conversion to bool -# 875| Type = [BoolType] bool -# 875| Value = [CStyleCast] 0 -# 875| ValueCategory = prvalue -# 876| getStmt(286): [DoStmt] do (...) ... -# 878| getCondition(): [Literal] 0 -# 878| Type = [IntType] int -# 878| Value = [Literal] 0 -# 878| ValueCategory = prvalue -# 876| getStmt(): [BlockStmt] { ... } -# 877| getStmt(0): [DeclStmt] declaration -# 877| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x286 -# 877| Type = [Struct] String -# 877| getVariable().getInitializer(): [Initializer] initializer for x286 -# 877| getExpr(): [ConstructorCall] call to String -# 877| Type = [VoidType] void -# 877| ValueCategory = prvalue -# 878| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 878| Type = [VoidType] void -# 878| ValueCategory = prvalue -# 878| getQualifier(): [VariableAccess] x286 -# 878| Type = [Struct] String -# 878| ValueCategory = lvalue -# 878| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 878| Conversion = [BoolConversion] conversion to bool -# 878| Type = [BoolType] bool -# 878| Value = [CStyleCast] 0 -# 878| ValueCategory = prvalue -# 879| getStmt(287): [DoStmt] do (...) ... -# 881| getCondition(): [Literal] 0 -# 881| Type = [IntType] int -# 881| Value = [Literal] 0 -# 881| ValueCategory = prvalue -# 879| getStmt(): [BlockStmt] { ... } -# 880| getStmt(0): [DeclStmt] declaration -# 880| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x287 -# 880| Type = [Struct] String -# 880| getVariable().getInitializer(): [Initializer] initializer for x287 -# 880| getExpr(): [ConstructorCall] call to String -# 880| Type = [VoidType] void -# 880| ValueCategory = prvalue -# 881| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 881| Type = [VoidType] void -# 881| ValueCategory = prvalue -# 881| getQualifier(): [VariableAccess] x287 -# 881| Type = [Struct] String -# 881| ValueCategory = lvalue -# 881| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 881| Conversion = [BoolConversion] conversion to bool -# 881| Type = [BoolType] bool -# 881| Value = [CStyleCast] 0 -# 881| ValueCategory = prvalue -# 882| getStmt(288): [DoStmt] do (...) ... -# 884| getCondition(): [Literal] 0 -# 884| Type = [IntType] int -# 884| Value = [Literal] 0 -# 884| ValueCategory = prvalue -# 882| getStmt(): [BlockStmt] { ... } -# 883| getStmt(0): [DeclStmt] declaration -# 883| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x288 -# 883| Type = [Struct] String -# 883| getVariable().getInitializer(): [Initializer] initializer for x288 -# 883| getExpr(): [ConstructorCall] call to String -# 883| Type = [VoidType] void -# 883| ValueCategory = prvalue -# 884| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 884| Type = [VoidType] void -# 884| ValueCategory = prvalue -# 884| getQualifier(): [VariableAccess] x288 -# 884| Type = [Struct] String -# 884| ValueCategory = lvalue -# 884| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 884| Conversion = [BoolConversion] conversion to bool -# 884| Type = [BoolType] bool -# 884| Value = [CStyleCast] 0 -# 884| ValueCategory = prvalue -# 885| getStmt(289): [DoStmt] do (...) ... -# 887| getCondition(): [Literal] 0 -# 887| Type = [IntType] int -# 887| Value = [Literal] 0 -# 887| ValueCategory = prvalue -# 885| getStmt(): [BlockStmt] { ... } -# 886| getStmt(0): [DeclStmt] declaration -# 886| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x289 -# 886| Type = [Struct] String -# 886| getVariable().getInitializer(): [Initializer] initializer for x289 -# 886| getExpr(): [ConstructorCall] call to String -# 886| Type = [VoidType] void -# 886| ValueCategory = prvalue -# 887| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 887| Type = [VoidType] void -# 887| ValueCategory = prvalue -# 887| getQualifier(): [VariableAccess] x289 -# 887| Type = [Struct] String -# 887| ValueCategory = lvalue -# 887| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 887| Conversion = [BoolConversion] conversion to bool -# 887| Type = [BoolType] bool -# 887| Value = [CStyleCast] 0 -# 887| ValueCategory = prvalue -# 888| getStmt(290): [DoStmt] do (...) ... -# 890| getCondition(): [Literal] 0 -# 890| Type = [IntType] int -# 890| Value = [Literal] 0 -# 890| ValueCategory = prvalue -# 888| getStmt(): [BlockStmt] { ... } -# 889| getStmt(0): [DeclStmt] declaration -# 889| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x290 -# 889| Type = [Struct] String -# 889| getVariable().getInitializer(): [Initializer] initializer for x290 -# 889| getExpr(): [ConstructorCall] call to String -# 889| Type = [VoidType] void -# 889| ValueCategory = prvalue -# 890| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 890| Type = [VoidType] void -# 890| ValueCategory = prvalue -# 890| getQualifier(): [VariableAccess] x290 -# 890| Type = [Struct] String -# 890| ValueCategory = lvalue -# 890| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 890| Conversion = [BoolConversion] conversion to bool -# 890| Type = [BoolType] bool -# 890| Value = [CStyleCast] 0 -# 890| ValueCategory = prvalue -# 891| getStmt(291): [DoStmt] do (...) ... -# 893| getCondition(): [Literal] 0 -# 893| Type = [IntType] int -# 893| Value = [Literal] 0 -# 893| ValueCategory = prvalue -# 891| getStmt(): [BlockStmt] { ... } -# 892| getStmt(0): [DeclStmt] declaration -# 892| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x291 -# 892| Type = [Struct] String -# 892| getVariable().getInitializer(): [Initializer] initializer for x291 -# 892| getExpr(): [ConstructorCall] call to String -# 892| Type = [VoidType] void -# 892| ValueCategory = prvalue -# 893| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 893| Type = [VoidType] void -# 893| ValueCategory = prvalue -# 893| getQualifier(): [VariableAccess] x291 -# 893| Type = [Struct] String -# 893| ValueCategory = lvalue -# 893| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 893| Conversion = [BoolConversion] conversion to bool -# 893| Type = [BoolType] bool -# 893| Value = [CStyleCast] 0 -# 893| ValueCategory = prvalue -# 894| getStmt(292): [DoStmt] do (...) ... -# 896| getCondition(): [Literal] 0 -# 896| Type = [IntType] int -# 896| Value = [Literal] 0 -# 896| ValueCategory = prvalue -# 894| getStmt(): [BlockStmt] { ... } -# 895| getStmt(0): [DeclStmt] declaration -# 895| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x292 -# 895| Type = [Struct] String -# 895| getVariable().getInitializer(): [Initializer] initializer for x292 -# 895| getExpr(): [ConstructorCall] call to String -# 895| Type = [VoidType] void -# 895| ValueCategory = prvalue -# 896| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 896| Type = [VoidType] void -# 896| ValueCategory = prvalue -# 896| getQualifier(): [VariableAccess] x292 -# 896| Type = [Struct] String -# 896| ValueCategory = lvalue -# 896| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 896| Conversion = [BoolConversion] conversion to bool -# 896| Type = [BoolType] bool -# 896| Value = [CStyleCast] 0 -# 896| ValueCategory = prvalue -# 897| getStmt(293): [DoStmt] do (...) ... -# 899| getCondition(): [Literal] 0 -# 899| Type = [IntType] int -# 899| Value = [Literal] 0 -# 899| ValueCategory = prvalue -# 897| getStmt(): [BlockStmt] { ... } -# 898| getStmt(0): [DeclStmt] declaration -# 898| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x293 -# 898| Type = [Struct] String -# 898| getVariable().getInitializer(): [Initializer] initializer for x293 -# 898| getExpr(): [ConstructorCall] call to String -# 898| Type = [VoidType] void -# 898| ValueCategory = prvalue -# 899| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 899| Type = [VoidType] void -# 899| ValueCategory = prvalue -# 899| getQualifier(): [VariableAccess] x293 -# 899| Type = [Struct] String -# 899| ValueCategory = lvalue -# 899| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 899| Conversion = [BoolConversion] conversion to bool -# 899| Type = [BoolType] bool -# 899| Value = [CStyleCast] 0 -# 899| ValueCategory = prvalue -# 900| getStmt(294): [DoStmt] do (...) ... -# 902| getCondition(): [Literal] 0 -# 902| Type = [IntType] int -# 902| Value = [Literal] 0 -# 902| ValueCategory = prvalue -# 900| getStmt(): [BlockStmt] { ... } -# 901| getStmt(0): [DeclStmt] declaration -# 901| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x294 -# 901| Type = [Struct] String -# 901| getVariable().getInitializer(): [Initializer] initializer for x294 -# 901| getExpr(): [ConstructorCall] call to String -# 901| Type = [VoidType] void -# 901| ValueCategory = prvalue -# 902| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 902| Type = [VoidType] void -# 902| ValueCategory = prvalue -# 902| getQualifier(): [VariableAccess] x294 -# 902| Type = [Struct] String -# 902| ValueCategory = lvalue -# 902| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 902| Conversion = [BoolConversion] conversion to bool -# 902| Type = [BoolType] bool -# 902| Value = [CStyleCast] 0 -# 902| ValueCategory = prvalue -# 903| getStmt(295): [DoStmt] do (...) ... -# 905| getCondition(): [Literal] 0 -# 905| Type = [IntType] int -# 905| Value = [Literal] 0 -# 905| ValueCategory = prvalue -# 903| getStmt(): [BlockStmt] { ... } -# 904| getStmt(0): [DeclStmt] declaration -# 904| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x295 -# 904| Type = [Struct] String -# 904| getVariable().getInitializer(): [Initializer] initializer for x295 -# 904| getExpr(): [ConstructorCall] call to String -# 904| Type = [VoidType] void -# 904| ValueCategory = prvalue -# 905| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 905| Type = [VoidType] void -# 905| ValueCategory = prvalue -# 905| getQualifier(): [VariableAccess] x295 -# 905| Type = [Struct] String -# 905| ValueCategory = lvalue -# 905| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 905| Conversion = [BoolConversion] conversion to bool -# 905| Type = [BoolType] bool -# 905| Value = [CStyleCast] 0 -# 905| ValueCategory = prvalue -# 906| getStmt(296): [DoStmt] do (...) ... -# 908| getCondition(): [Literal] 0 -# 908| Type = [IntType] int -# 908| Value = [Literal] 0 -# 908| ValueCategory = prvalue -# 906| getStmt(): [BlockStmt] { ... } -# 907| getStmt(0): [DeclStmt] declaration -# 907| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x296 -# 907| Type = [Struct] String -# 907| getVariable().getInitializer(): [Initializer] initializer for x296 -# 907| getExpr(): [ConstructorCall] call to String -# 907| Type = [VoidType] void -# 907| ValueCategory = prvalue -# 908| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 908| Type = [VoidType] void -# 908| ValueCategory = prvalue -# 908| getQualifier(): [VariableAccess] x296 -# 908| Type = [Struct] String -# 908| ValueCategory = lvalue -# 908| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 908| Conversion = [BoolConversion] conversion to bool -# 908| Type = [BoolType] bool -# 908| Value = [CStyleCast] 0 -# 908| ValueCategory = prvalue -# 909| getStmt(297): [DoStmt] do (...) ... -# 911| getCondition(): [Literal] 0 -# 911| Type = [IntType] int -# 911| Value = [Literal] 0 -# 911| ValueCategory = prvalue -# 909| getStmt(): [BlockStmt] { ... } -# 910| getStmt(0): [DeclStmt] declaration -# 910| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x297 -# 910| Type = [Struct] String -# 910| getVariable().getInitializer(): [Initializer] initializer for x297 -# 910| getExpr(): [ConstructorCall] call to String -# 910| Type = [VoidType] void -# 910| ValueCategory = prvalue -# 911| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 911| Type = [VoidType] void -# 911| ValueCategory = prvalue -# 911| getQualifier(): [VariableAccess] x297 -# 911| Type = [Struct] String -# 911| ValueCategory = lvalue -# 911| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 911| Conversion = [BoolConversion] conversion to bool -# 911| Type = [BoolType] bool -# 911| Value = [CStyleCast] 0 -# 911| ValueCategory = prvalue -# 912| getStmt(298): [DoStmt] do (...) ... -# 914| getCondition(): [Literal] 0 -# 914| Type = [IntType] int -# 914| Value = [Literal] 0 -# 914| ValueCategory = prvalue -# 912| getStmt(): [BlockStmt] { ... } -# 913| getStmt(0): [DeclStmt] declaration -# 913| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x298 -# 913| Type = [Struct] String -# 913| getVariable().getInitializer(): [Initializer] initializer for x298 -# 913| getExpr(): [ConstructorCall] call to String -# 913| Type = [VoidType] void -# 913| ValueCategory = prvalue -# 914| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 914| Type = [VoidType] void -# 914| ValueCategory = prvalue -# 914| getQualifier(): [VariableAccess] x298 -# 914| Type = [Struct] String -# 914| ValueCategory = lvalue -# 914| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 914| Conversion = [BoolConversion] conversion to bool -# 914| Type = [BoolType] bool -# 914| Value = [CStyleCast] 0 -# 914| ValueCategory = prvalue -# 915| getStmt(299): [DoStmt] do (...) ... -# 917| getCondition(): [Literal] 0 -# 917| Type = [IntType] int -# 917| Value = [Literal] 0 -# 917| ValueCategory = prvalue -# 915| getStmt(): [BlockStmt] { ... } -# 916| getStmt(0): [DeclStmt] declaration -# 916| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x299 -# 916| Type = [Struct] String -# 916| getVariable().getInitializer(): [Initializer] initializer for x299 -# 916| getExpr(): [ConstructorCall] call to String -# 916| Type = [VoidType] void -# 916| ValueCategory = prvalue -# 917| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 917| Type = [VoidType] void -# 917| ValueCategory = prvalue -# 917| getQualifier(): [VariableAccess] x299 -# 917| Type = [Struct] String -# 917| ValueCategory = lvalue -# 917| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 917| Conversion = [BoolConversion] conversion to bool -# 917| Type = [BoolType] bool -# 917| Value = [CStyleCast] 0 -# 917| ValueCategory = prvalue -# 918| getStmt(300): [DoStmt] do (...) ... -# 920| getCondition(): [Literal] 0 -# 920| Type = [IntType] int -# 920| Value = [Literal] 0 -# 920| ValueCategory = prvalue -# 918| getStmt(): [BlockStmt] { ... } -# 919| getStmt(0): [DeclStmt] declaration -# 919| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x300 -# 919| Type = [Struct] String -# 919| getVariable().getInitializer(): [Initializer] initializer for x300 -# 919| getExpr(): [ConstructorCall] call to String -# 919| Type = [VoidType] void -# 919| ValueCategory = prvalue -# 920| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 920| Type = [VoidType] void -# 920| ValueCategory = prvalue -# 920| getQualifier(): [VariableAccess] x300 -# 920| Type = [Struct] String -# 920| ValueCategory = lvalue -# 920| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 920| Conversion = [BoolConversion] conversion to bool -# 920| Type = [BoolType] bool -# 920| Value = [CStyleCast] 0 -# 920| ValueCategory = prvalue -# 921| getStmt(301): [DoStmt] do (...) ... -# 923| getCondition(): [Literal] 0 -# 923| Type = [IntType] int -# 923| Value = [Literal] 0 -# 923| ValueCategory = prvalue -# 921| getStmt(): [BlockStmt] { ... } -# 922| getStmt(0): [DeclStmt] declaration -# 922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x301 -# 922| Type = [Struct] String -# 922| getVariable().getInitializer(): [Initializer] initializer for x301 -# 922| getExpr(): [ConstructorCall] call to String -# 922| Type = [VoidType] void -# 922| ValueCategory = prvalue -# 923| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 923| Type = [VoidType] void -# 923| ValueCategory = prvalue -# 923| getQualifier(): [VariableAccess] x301 -# 923| Type = [Struct] String -# 923| ValueCategory = lvalue -# 923| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 923| Conversion = [BoolConversion] conversion to bool -# 923| Type = [BoolType] bool -# 923| Value = [CStyleCast] 0 -# 923| ValueCategory = prvalue -# 924| getStmt(302): [DoStmt] do (...) ... -# 926| getCondition(): [Literal] 0 -# 926| Type = [IntType] int -# 926| Value = [Literal] 0 -# 926| ValueCategory = prvalue -# 924| getStmt(): [BlockStmt] { ... } -# 925| getStmt(0): [DeclStmt] declaration -# 925| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x302 -# 925| Type = [Struct] String -# 925| getVariable().getInitializer(): [Initializer] initializer for x302 -# 925| getExpr(): [ConstructorCall] call to String -# 925| Type = [VoidType] void -# 925| ValueCategory = prvalue -# 926| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 926| Type = [VoidType] void -# 926| ValueCategory = prvalue -# 926| getQualifier(): [VariableAccess] x302 -# 926| Type = [Struct] String -# 926| ValueCategory = lvalue -# 926| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 926| Conversion = [BoolConversion] conversion to bool -# 926| Type = [BoolType] bool -# 926| Value = [CStyleCast] 0 -# 926| ValueCategory = prvalue -# 927| getStmt(303): [DoStmt] do (...) ... -# 929| getCondition(): [Literal] 0 -# 929| Type = [IntType] int -# 929| Value = [Literal] 0 -# 929| ValueCategory = prvalue -# 927| getStmt(): [BlockStmt] { ... } -# 928| getStmt(0): [DeclStmt] declaration -# 928| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x303 -# 928| Type = [Struct] String -# 928| getVariable().getInitializer(): [Initializer] initializer for x303 -# 928| getExpr(): [ConstructorCall] call to String -# 928| Type = [VoidType] void -# 928| ValueCategory = prvalue -# 929| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 929| Type = [VoidType] void -# 929| ValueCategory = prvalue -# 929| getQualifier(): [VariableAccess] x303 -# 929| Type = [Struct] String -# 929| ValueCategory = lvalue -# 929| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 929| Conversion = [BoolConversion] conversion to bool -# 929| Type = [BoolType] bool -# 929| Value = [CStyleCast] 0 -# 929| ValueCategory = prvalue -# 930| getStmt(304): [DoStmt] do (...) ... -# 932| getCondition(): [Literal] 0 -# 932| Type = [IntType] int -# 932| Value = [Literal] 0 -# 932| ValueCategory = prvalue -# 930| getStmt(): [BlockStmt] { ... } -# 931| getStmt(0): [DeclStmt] declaration -# 931| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x304 -# 931| Type = [Struct] String -# 931| getVariable().getInitializer(): [Initializer] initializer for x304 -# 931| getExpr(): [ConstructorCall] call to String -# 931| Type = [VoidType] void -# 931| ValueCategory = prvalue -# 932| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 932| Type = [VoidType] void -# 932| ValueCategory = prvalue -# 932| getQualifier(): [VariableAccess] x304 -# 932| Type = [Struct] String -# 932| ValueCategory = lvalue -# 932| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 932| Conversion = [BoolConversion] conversion to bool -# 932| Type = [BoolType] bool -# 932| Value = [CStyleCast] 0 -# 932| ValueCategory = prvalue -# 933| getStmt(305): [DoStmt] do (...) ... -# 935| getCondition(): [Literal] 0 -# 935| Type = [IntType] int -# 935| Value = [Literal] 0 -# 935| ValueCategory = prvalue -# 933| getStmt(): [BlockStmt] { ... } -# 934| getStmt(0): [DeclStmt] declaration -# 934| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x305 -# 934| Type = [Struct] String -# 934| getVariable().getInitializer(): [Initializer] initializer for x305 -# 934| getExpr(): [ConstructorCall] call to String -# 934| Type = [VoidType] void -# 934| ValueCategory = prvalue -# 935| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 935| Type = [VoidType] void -# 935| ValueCategory = prvalue -# 935| getQualifier(): [VariableAccess] x305 -# 935| Type = [Struct] String -# 935| ValueCategory = lvalue -# 935| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 935| Conversion = [BoolConversion] conversion to bool -# 935| Type = [BoolType] bool -# 935| Value = [CStyleCast] 0 -# 935| ValueCategory = prvalue -# 936| getStmt(306): [DoStmt] do (...) ... -# 938| getCondition(): [Literal] 0 -# 938| Type = [IntType] int -# 938| Value = [Literal] 0 -# 938| ValueCategory = prvalue -# 936| getStmt(): [BlockStmt] { ... } -# 937| getStmt(0): [DeclStmt] declaration -# 937| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x306 -# 937| Type = [Struct] String -# 937| getVariable().getInitializer(): [Initializer] initializer for x306 -# 937| getExpr(): [ConstructorCall] call to String -# 937| Type = [VoidType] void -# 937| ValueCategory = prvalue -# 938| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 938| Type = [VoidType] void -# 938| ValueCategory = prvalue -# 938| getQualifier(): [VariableAccess] x306 -# 938| Type = [Struct] String -# 938| ValueCategory = lvalue -# 938| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 938| Conversion = [BoolConversion] conversion to bool -# 938| Type = [BoolType] bool -# 938| Value = [CStyleCast] 0 -# 938| ValueCategory = prvalue -# 939| getStmt(307): [DoStmt] do (...) ... -# 941| getCondition(): [Literal] 0 -# 941| Type = [IntType] int -# 941| Value = [Literal] 0 -# 941| ValueCategory = prvalue -# 939| getStmt(): [BlockStmt] { ... } -# 940| getStmt(0): [DeclStmt] declaration -# 940| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x307 -# 940| Type = [Struct] String -# 940| getVariable().getInitializer(): [Initializer] initializer for x307 -# 940| getExpr(): [ConstructorCall] call to String -# 940| Type = [VoidType] void -# 940| ValueCategory = prvalue -# 941| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 941| Type = [VoidType] void -# 941| ValueCategory = prvalue -# 941| getQualifier(): [VariableAccess] x307 -# 941| Type = [Struct] String -# 941| ValueCategory = lvalue -# 941| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 941| Conversion = [BoolConversion] conversion to bool -# 941| Type = [BoolType] bool -# 941| Value = [CStyleCast] 0 -# 941| ValueCategory = prvalue -# 942| getStmt(308): [DoStmt] do (...) ... -# 944| getCondition(): [Literal] 0 -# 944| Type = [IntType] int -# 944| Value = [Literal] 0 -# 944| ValueCategory = prvalue -# 942| getStmt(): [BlockStmt] { ... } -# 943| getStmt(0): [DeclStmt] declaration -# 943| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x308 -# 943| Type = [Struct] String -# 943| getVariable().getInitializer(): [Initializer] initializer for x308 -# 943| getExpr(): [ConstructorCall] call to String -# 943| Type = [VoidType] void -# 943| ValueCategory = prvalue -# 944| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 944| Type = [VoidType] void -# 944| ValueCategory = prvalue -# 944| getQualifier(): [VariableAccess] x308 -# 944| Type = [Struct] String -# 944| ValueCategory = lvalue -# 944| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 944| Conversion = [BoolConversion] conversion to bool -# 944| Type = [BoolType] bool -# 944| Value = [CStyleCast] 0 -# 944| ValueCategory = prvalue -# 945| getStmt(309): [DoStmt] do (...) ... -# 947| getCondition(): [Literal] 0 -# 947| Type = [IntType] int -# 947| Value = [Literal] 0 -# 947| ValueCategory = prvalue -# 945| getStmt(): [BlockStmt] { ... } -# 946| getStmt(0): [DeclStmt] declaration -# 946| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x309 -# 946| Type = [Struct] String -# 946| getVariable().getInitializer(): [Initializer] initializer for x309 -# 946| getExpr(): [ConstructorCall] call to String -# 946| Type = [VoidType] void -# 946| ValueCategory = prvalue -# 947| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 947| Type = [VoidType] void -# 947| ValueCategory = prvalue -# 947| getQualifier(): [VariableAccess] x309 -# 947| Type = [Struct] String -# 947| ValueCategory = lvalue -# 947| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 947| Conversion = [BoolConversion] conversion to bool -# 947| Type = [BoolType] bool -# 947| Value = [CStyleCast] 0 -# 947| ValueCategory = prvalue -# 948| getStmt(310): [DoStmt] do (...) ... -# 950| getCondition(): [Literal] 0 -# 950| Type = [IntType] int -# 950| Value = [Literal] 0 -# 950| ValueCategory = prvalue -# 948| getStmt(): [BlockStmt] { ... } -# 949| getStmt(0): [DeclStmt] declaration -# 949| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x310 -# 949| Type = [Struct] String -# 949| getVariable().getInitializer(): [Initializer] initializer for x310 -# 949| getExpr(): [ConstructorCall] call to String -# 949| Type = [VoidType] void -# 949| ValueCategory = prvalue -# 950| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 950| Type = [VoidType] void -# 950| ValueCategory = prvalue -# 950| getQualifier(): [VariableAccess] x310 -# 950| Type = [Struct] String -# 950| ValueCategory = lvalue -# 950| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 950| Conversion = [BoolConversion] conversion to bool -# 950| Type = [BoolType] bool -# 950| Value = [CStyleCast] 0 -# 950| ValueCategory = prvalue -# 951| getStmt(311): [DoStmt] do (...) ... -# 953| getCondition(): [Literal] 0 -# 953| Type = [IntType] int -# 953| Value = [Literal] 0 -# 953| ValueCategory = prvalue -# 951| getStmt(): [BlockStmt] { ... } -# 952| getStmt(0): [DeclStmt] declaration -# 952| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x311 -# 952| Type = [Struct] String -# 952| getVariable().getInitializer(): [Initializer] initializer for x311 -# 952| getExpr(): [ConstructorCall] call to String -# 952| Type = [VoidType] void -# 952| ValueCategory = prvalue -# 953| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 953| Type = [VoidType] void -# 953| ValueCategory = prvalue -# 953| getQualifier(): [VariableAccess] x311 -# 953| Type = [Struct] String -# 953| ValueCategory = lvalue -# 953| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 953| Conversion = [BoolConversion] conversion to bool -# 953| Type = [BoolType] bool -# 953| Value = [CStyleCast] 0 -# 953| ValueCategory = prvalue -# 954| getStmt(312): [DoStmt] do (...) ... -# 956| getCondition(): [Literal] 0 -# 956| Type = [IntType] int -# 956| Value = [Literal] 0 -# 956| ValueCategory = prvalue -# 954| getStmt(): [BlockStmt] { ... } -# 955| getStmt(0): [DeclStmt] declaration -# 955| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x312 -# 955| Type = [Struct] String -# 955| getVariable().getInitializer(): [Initializer] initializer for x312 -# 955| getExpr(): [ConstructorCall] call to String -# 955| Type = [VoidType] void -# 955| ValueCategory = prvalue -# 956| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 956| Type = [VoidType] void -# 956| ValueCategory = prvalue -# 956| getQualifier(): [VariableAccess] x312 -# 956| Type = [Struct] String -# 956| ValueCategory = lvalue -# 956| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 956| Conversion = [BoolConversion] conversion to bool -# 956| Type = [BoolType] bool -# 956| Value = [CStyleCast] 0 -# 956| ValueCategory = prvalue -# 957| getStmt(313): [DoStmt] do (...) ... -# 959| getCondition(): [Literal] 0 -# 959| Type = [IntType] int -# 959| Value = [Literal] 0 -# 959| ValueCategory = prvalue -# 957| getStmt(): [BlockStmt] { ... } -# 958| getStmt(0): [DeclStmt] declaration -# 958| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x313 -# 958| Type = [Struct] String -# 958| getVariable().getInitializer(): [Initializer] initializer for x313 -# 958| getExpr(): [ConstructorCall] call to String -# 958| Type = [VoidType] void -# 958| ValueCategory = prvalue -# 959| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 959| Type = [VoidType] void -# 959| ValueCategory = prvalue -# 959| getQualifier(): [VariableAccess] x313 -# 959| Type = [Struct] String -# 959| ValueCategory = lvalue -# 959| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 959| Conversion = [BoolConversion] conversion to bool -# 959| Type = [BoolType] bool -# 959| Value = [CStyleCast] 0 -# 959| ValueCategory = prvalue -# 960| getStmt(314): [DoStmt] do (...) ... -# 962| getCondition(): [Literal] 0 -# 962| Type = [IntType] int -# 962| Value = [Literal] 0 -# 962| ValueCategory = prvalue -# 960| getStmt(): [BlockStmt] { ... } -# 961| getStmt(0): [DeclStmt] declaration -# 961| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x314 -# 961| Type = [Struct] String -# 961| getVariable().getInitializer(): [Initializer] initializer for x314 -# 961| getExpr(): [ConstructorCall] call to String -# 961| Type = [VoidType] void -# 961| ValueCategory = prvalue -# 962| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 962| Type = [VoidType] void -# 962| ValueCategory = prvalue -# 962| getQualifier(): [VariableAccess] x314 -# 962| Type = [Struct] String -# 962| ValueCategory = lvalue -# 962| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 962| Conversion = [BoolConversion] conversion to bool -# 962| Type = [BoolType] bool -# 962| Value = [CStyleCast] 0 -# 962| ValueCategory = prvalue -# 963| getStmt(315): [DoStmt] do (...) ... -# 965| getCondition(): [Literal] 0 -# 965| Type = [IntType] int -# 965| Value = [Literal] 0 -# 965| ValueCategory = prvalue -# 963| getStmt(): [BlockStmt] { ... } -# 964| getStmt(0): [DeclStmt] declaration -# 964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x315 -# 964| Type = [Struct] String -# 964| getVariable().getInitializer(): [Initializer] initializer for x315 -# 964| getExpr(): [ConstructorCall] call to String -# 964| Type = [VoidType] void -# 964| ValueCategory = prvalue -# 965| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 965| Type = [VoidType] void -# 965| ValueCategory = prvalue -# 965| getQualifier(): [VariableAccess] x315 -# 965| Type = [Struct] String -# 965| ValueCategory = lvalue -# 965| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 965| Conversion = [BoolConversion] conversion to bool -# 965| Type = [BoolType] bool -# 965| Value = [CStyleCast] 0 -# 965| ValueCategory = prvalue -# 966| getStmt(316): [DoStmt] do (...) ... -# 968| getCondition(): [Literal] 0 -# 968| Type = [IntType] int -# 968| Value = [Literal] 0 -# 968| ValueCategory = prvalue -# 966| getStmt(): [BlockStmt] { ... } -# 967| getStmt(0): [DeclStmt] declaration -# 967| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x316 -# 967| Type = [Struct] String -# 967| getVariable().getInitializer(): [Initializer] initializer for x316 -# 967| getExpr(): [ConstructorCall] call to String -# 967| Type = [VoidType] void -# 967| ValueCategory = prvalue -# 968| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 968| Type = [VoidType] void -# 968| ValueCategory = prvalue -# 968| getQualifier(): [VariableAccess] x316 -# 968| Type = [Struct] String -# 968| ValueCategory = lvalue -# 968| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 968| Conversion = [BoolConversion] conversion to bool -# 968| Type = [BoolType] bool -# 968| Value = [CStyleCast] 0 -# 968| ValueCategory = prvalue -# 969| getStmt(317): [DoStmt] do (...) ... -# 971| getCondition(): [Literal] 0 -# 971| Type = [IntType] int -# 971| Value = [Literal] 0 -# 971| ValueCategory = prvalue -# 969| getStmt(): [BlockStmt] { ... } -# 970| getStmt(0): [DeclStmt] declaration -# 970| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x317 -# 970| Type = [Struct] String -# 970| getVariable().getInitializer(): [Initializer] initializer for x317 -# 970| getExpr(): [ConstructorCall] call to String -# 970| Type = [VoidType] void -# 970| ValueCategory = prvalue -# 971| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 971| Type = [VoidType] void -# 971| ValueCategory = prvalue -# 971| getQualifier(): [VariableAccess] x317 -# 971| Type = [Struct] String -# 971| ValueCategory = lvalue -# 971| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 971| Conversion = [BoolConversion] conversion to bool -# 971| Type = [BoolType] bool -# 971| Value = [CStyleCast] 0 -# 971| ValueCategory = prvalue -# 972| getStmt(318): [DoStmt] do (...) ... -# 974| getCondition(): [Literal] 0 -# 974| Type = [IntType] int -# 974| Value = [Literal] 0 -# 974| ValueCategory = prvalue -# 972| getStmt(): [BlockStmt] { ... } -# 973| getStmt(0): [DeclStmt] declaration -# 973| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x318 -# 973| Type = [Struct] String -# 973| getVariable().getInitializer(): [Initializer] initializer for x318 -# 973| getExpr(): [ConstructorCall] call to String -# 973| Type = [VoidType] void -# 973| ValueCategory = prvalue -# 974| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 974| Type = [VoidType] void -# 974| ValueCategory = prvalue -# 974| getQualifier(): [VariableAccess] x318 -# 974| Type = [Struct] String -# 974| ValueCategory = lvalue -# 974| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 974| Conversion = [BoolConversion] conversion to bool -# 974| Type = [BoolType] bool -# 974| Value = [CStyleCast] 0 -# 974| ValueCategory = prvalue -# 975| getStmt(319): [DoStmt] do (...) ... -# 977| getCondition(): [Literal] 0 -# 977| Type = [IntType] int -# 977| Value = [Literal] 0 -# 977| ValueCategory = prvalue -# 975| getStmt(): [BlockStmt] { ... } -# 976| getStmt(0): [DeclStmt] declaration -# 976| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x319 -# 976| Type = [Struct] String -# 976| getVariable().getInitializer(): [Initializer] initializer for x319 -# 976| getExpr(): [ConstructorCall] call to String -# 976| Type = [VoidType] void -# 976| ValueCategory = prvalue -# 977| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 977| Type = [VoidType] void -# 977| ValueCategory = prvalue -# 977| getQualifier(): [VariableAccess] x319 -# 977| Type = [Struct] String -# 977| ValueCategory = lvalue -# 977| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 977| Conversion = [BoolConversion] conversion to bool -# 977| Type = [BoolType] bool -# 977| Value = [CStyleCast] 0 -# 977| ValueCategory = prvalue -# 978| getStmt(320): [DoStmt] do (...) ... -# 980| getCondition(): [Literal] 0 -# 980| Type = [IntType] int -# 980| Value = [Literal] 0 -# 980| ValueCategory = prvalue -# 978| getStmt(): [BlockStmt] { ... } -# 979| getStmt(0): [DeclStmt] declaration -# 979| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x320 -# 979| Type = [Struct] String -# 979| getVariable().getInitializer(): [Initializer] initializer for x320 -# 979| getExpr(): [ConstructorCall] call to String -# 979| Type = [VoidType] void -# 979| ValueCategory = prvalue -# 980| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 980| Type = [VoidType] void -# 980| ValueCategory = prvalue -# 980| getQualifier(): [VariableAccess] x320 -# 980| Type = [Struct] String -# 980| ValueCategory = lvalue -# 980| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 980| Conversion = [BoolConversion] conversion to bool -# 980| Type = [BoolType] bool -# 980| Value = [CStyleCast] 0 -# 980| ValueCategory = prvalue -# 981| getStmt(321): [DoStmt] do (...) ... -# 983| getCondition(): [Literal] 0 -# 983| Type = [IntType] int -# 983| Value = [Literal] 0 -# 983| ValueCategory = prvalue -# 981| getStmt(): [BlockStmt] { ... } -# 982| getStmt(0): [DeclStmt] declaration -# 982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x321 -# 982| Type = [Struct] String -# 982| getVariable().getInitializer(): [Initializer] initializer for x321 -# 982| getExpr(): [ConstructorCall] call to String -# 982| Type = [VoidType] void -# 982| ValueCategory = prvalue -# 983| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 983| Type = [VoidType] void -# 983| ValueCategory = prvalue -# 983| getQualifier(): [VariableAccess] x321 -# 983| Type = [Struct] String -# 983| ValueCategory = lvalue -# 983| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 983| Conversion = [BoolConversion] conversion to bool -# 983| Type = [BoolType] bool -# 983| Value = [CStyleCast] 0 -# 983| ValueCategory = prvalue -# 984| getStmt(322): [DoStmt] do (...) ... -# 986| getCondition(): [Literal] 0 -# 986| Type = [IntType] int -# 986| Value = [Literal] 0 -# 986| ValueCategory = prvalue -# 984| getStmt(): [BlockStmt] { ... } -# 985| getStmt(0): [DeclStmt] declaration -# 985| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x322 -# 985| Type = [Struct] String -# 985| getVariable().getInitializer(): [Initializer] initializer for x322 -# 985| getExpr(): [ConstructorCall] call to String -# 985| Type = [VoidType] void -# 985| ValueCategory = prvalue -# 986| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 986| Type = [VoidType] void -# 986| ValueCategory = prvalue -# 986| getQualifier(): [VariableAccess] x322 -# 986| Type = [Struct] String -# 986| ValueCategory = lvalue -# 986| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 986| Conversion = [BoolConversion] conversion to bool -# 986| Type = [BoolType] bool -# 986| Value = [CStyleCast] 0 -# 986| ValueCategory = prvalue -# 987| getStmt(323): [DoStmt] do (...) ... -# 989| getCondition(): [Literal] 0 -# 989| Type = [IntType] int -# 989| Value = [Literal] 0 -# 989| ValueCategory = prvalue -# 987| getStmt(): [BlockStmt] { ... } -# 988| getStmt(0): [DeclStmt] declaration -# 988| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x323 -# 988| Type = [Struct] String -# 988| getVariable().getInitializer(): [Initializer] initializer for x323 -# 988| getExpr(): [ConstructorCall] call to String -# 988| Type = [VoidType] void -# 988| ValueCategory = prvalue -# 989| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 989| Type = [VoidType] void -# 989| ValueCategory = prvalue -# 989| getQualifier(): [VariableAccess] x323 -# 989| Type = [Struct] String -# 989| ValueCategory = lvalue -# 989| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 989| Conversion = [BoolConversion] conversion to bool -# 989| Type = [BoolType] bool -# 989| Value = [CStyleCast] 0 -# 989| ValueCategory = prvalue -# 990| getStmt(324): [DoStmt] do (...) ... -# 992| getCondition(): [Literal] 0 -# 992| Type = [IntType] int -# 992| Value = [Literal] 0 -# 992| ValueCategory = prvalue -# 990| getStmt(): [BlockStmt] { ... } -# 991| getStmt(0): [DeclStmt] declaration -# 991| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x324 -# 991| Type = [Struct] String -# 991| getVariable().getInitializer(): [Initializer] initializer for x324 -# 991| getExpr(): [ConstructorCall] call to String -# 991| Type = [VoidType] void -# 991| ValueCategory = prvalue -# 992| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 992| Type = [VoidType] void -# 992| ValueCategory = prvalue -# 992| getQualifier(): [VariableAccess] x324 -# 992| Type = [Struct] String -# 992| ValueCategory = lvalue -# 992| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 992| Conversion = [BoolConversion] conversion to bool -# 992| Type = [BoolType] bool -# 992| Value = [CStyleCast] 0 -# 992| ValueCategory = prvalue -# 993| getStmt(325): [DoStmt] do (...) ... -# 995| getCondition(): [Literal] 0 -# 995| Type = [IntType] int -# 995| Value = [Literal] 0 -# 995| ValueCategory = prvalue -# 993| getStmt(): [BlockStmt] { ... } -# 994| getStmt(0): [DeclStmt] declaration -# 994| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x325 -# 994| Type = [Struct] String -# 994| getVariable().getInitializer(): [Initializer] initializer for x325 -# 994| getExpr(): [ConstructorCall] call to String -# 994| Type = [VoidType] void -# 994| ValueCategory = prvalue -# 995| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 995| Type = [VoidType] void -# 995| ValueCategory = prvalue -# 995| getQualifier(): [VariableAccess] x325 -# 995| Type = [Struct] String -# 995| ValueCategory = lvalue -# 995| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 995| Conversion = [BoolConversion] conversion to bool -# 995| Type = [BoolType] bool -# 995| Value = [CStyleCast] 0 -# 995| ValueCategory = prvalue -# 996| getStmt(326): [DoStmt] do (...) ... -# 998| getCondition(): [Literal] 0 -# 998| Type = [IntType] int -# 998| Value = [Literal] 0 -# 998| ValueCategory = prvalue -# 996| getStmt(): [BlockStmt] { ... } -# 997| getStmt(0): [DeclStmt] declaration -# 997| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x326 -# 997| Type = [Struct] String -# 997| getVariable().getInitializer(): [Initializer] initializer for x326 -# 997| getExpr(): [ConstructorCall] call to String -# 997| Type = [VoidType] void -# 997| ValueCategory = prvalue -# 998| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 998| Type = [VoidType] void -# 998| ValueCategory = prvalue -# 998| getQualifier(): [VariableAccess] x326 -# 998| Type = [Struct] String -# 998| ValueCategory = lvalue -# 998| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 998| Conversion = [BoolConversion] conversion to bool -# 998| Type = [BoolType] bool -# 998| Value = [CStyleCast] 0 -# 998| ValueCategory = prvalue -# 999| getStmt(327): [DoStmt] do (...) ... -# 1001| getCondition(): [Literal] 0 -# 1001| Type = [IntType] int -# 1001| Value = [Literal] 0 -# 1001| ValueCategory = prvalue -# 999| getStmt(): [BlockStmt] { ... } -# 1000| getStmt(0): [DeclStmt] declaration -# 1000| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x327 -# 1000| Type = [Struct] String -# 1000| getVariable().getInitializer(): [Initializer] initializer for x327 -# 1000| getExpr(): [ConstructorCall] call to String -# 1000| Type = [VoidType] void -# 1000| ValueCategory = prvalue -# 1001| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1001| Type = [VoidType] void -# 1001| ValueCategory = prvalue -# 1001| getQualifier(): [VariableAccess] x327 -# 1001| Type = [Struct] String -# 1001| ValueCategory = lvalue -# 1001| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1001| Conversion = [BoolConversion] conversion to bool -# 1001| Type = [BoolType] bool -# 1001| Value = [CStyleCast] 0 -# 1001| ValueCategory = prvalue -# 1002| getStmt(328): [DoStmt] do (...) ... -# 1004| getCondition(): [Literal] 0 -# 1004| Type = [IntType] int -# 1004| Value = [Literal] 0 -# 1004| ValueCategory = prvalue -# 1002| getStmt(): [BlockStmt] { ... } -# 1003| getStmt(0): [DeclStmt] declaration -# 1003| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x328 -# 1003| Type = [Struct] String -# 1003| getVariable().getInitializer(): [Initializer] initializer for x328 -# 1003| getExpr(): [ConstructorCall] call to String -# 1003| Type = [VoidType] void -# 1003| ValueCategory = prvalue -# 1004| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1004| Type = [VoidType] void -# 1004| ValueCategory = prvalue -# 1004| getQualifier(): [VariableAccess] x328 -# 1004| Type = [Struct] String -# 1004| ValueCategory = lvalue -# 1004| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1004| Conversion = [BoolConversion] conversion to bool -# 1004| Type = [BoolType] bool -# 1004| Value = [CStyleCast] 0 -# 1004| ValueCategory = prvalue -# 1005| getStmt(329): [DoStmt] do (...) ... -# 1007| getCondition(): [Literal] 0 -# 1007| Type = [IntType] int -# 1007| Value = [Literal] 0 -# 1007| ValueCategory = prvalue -# 1005| getStmt(): [BlockStmt] { ... } -# 1006| getStmt(0): [DeclStmt] declaration -# 1006| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x329 -# 1006| Type = [Struct] String -# 1006| getVariable().getInitializer(): [Initializer] initializer for x329 -# 1006| getExpr(): [ConstructorCall] call to String -# 1006| Type = [VoidType] void -# 1006| ValueCategory = prvalue -# 1007| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1007| Type = [VoidType] void -# 1007| ValueCategory = prvalue -# 1007| getQualifier(): [VariableAccess] x329 -# 1007| Type = [Struct] String -# 1007| ValueCategory = lvalue -# 1007| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1007| Conversion = [BoolConversion] conversion to bool -# 1007| Type = [BoolType] bool -# 1007| Value = [CStyleCast] 0 -# 1007| ValueCategory = prvalue -# 1008| getStmt(330): [DoStmt] do (...) ... -# 1010| getCondition(): [Literal] 0 -# 1010| Type = [IntType] int -# 1010| Value = [Literal] 0 -# 1010| ValueCategory = prvalue -# 1008| getStmt(): [BlockStmt] { ... } -# 1009| getStmt(0): [DeclStmt] declaration -# 1009| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x330 -# 1009| Type = [Struct] String -# 1009| getVariable().getInitializer(): [Initializer] initializer for x330 -# 1009| getExpr(): [ConstructorCall] call to String -# 1009| Type = [VoidType] void -# 1009| ValueCategory = prvalue -# 1010| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1010| Type = [VoidType] void -# 1010| ValueCategory = prvalue -# 1010| getQualifier(): [VariableAccess] x330 -# 1010| Type = [Struct] String -# 1010| ValueCategory = lvalue -# 1010| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1010| Conversion = [BoolConversion] conversion to bool -# 1010| Type = [BoolType] bool -# 1010| Value = [CStyleCast] 0 -# 1010| ValueCategory = prvalue -# 1011| getStmt(331): [DoStmt] do (...) ... -# 1013| getCondition(): [Literal] 0 -# 1013| Type = [IntType] int -# 1013| Value = [Literal] 0 -# 1013| ValueCategory = prvalue -# 1011| getStmt(): [BlockStmt] { ... } -# 1012| getStmt(0): [DeclStmt] declaration -# 1012| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x331 -# 1012| Type = [Struct] String -# 1012| getVariable().getInitializer(): [Initializer] initializer for x331 -# 1012| getExpr(): [ConstructorCall] call to String -# 1012| Type = [VoidType] void -# 1012| ValueCategory = prvalue -# 1013| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1013| Type = [VoidType] void -# 1013| ValueCategory = prvalue -# 1013| getQualifier(): [VariableAccess] x331 -# 1013| Type = [Struct] String -# 1013| ValueCategory = lvalue -# 1013| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1013| Conversion = [BoolConversion] conversion to bool -# 1013| Type = [BoolType] bool -# 1013| Value = [CStyleCast] 0 -# 1013| ValueCategory = prvalue -# 1014| getStmt(332): [DoStmt] do (...) ... -# 1016| getCondition(): [Literal] 0 -# 1016| Type = [IntType] int -# 1016| Value = [Literal] 0 -# 1016| ValueCategory = prvalue -# 1014| getStmt(): [BlockStmt] { ... } -# 1015| getStmt(0): [DeclStmt] declaration -# 1015| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x332 -# 1015| Type = [Struct] String -# 1015| getVariable().getInitializer(): [Initializer] initializer for x332 -# 1015| getExpr(): [ConstructorCall] call to String -# 1015| Type = [VoidType] void -# 1015| ValueCategory = prvalue -# 1016| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1016| Type = [VoidType] void -# 1016| ValueCategory = prvalue -# 1016| getQualifier(): [VariableAccess] x332 -# 1016| Type = [Struct] String -# 1016| ValueCategory = lvalue -# 1016| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1016| Conversion = [BoolConversion] conversion to bool -# 1016| Type = [BoolType] bool -# 1016| Value = [CStyleCast] 0 -# 1016| ValueCategory = prvalue -# 1017| getStmt(333): [DoStmt] do (...) ... -# 1019| getCondition(): [Literal] 0 -# 1019| Type = [IntType] int -# 1019| Value = [Literal] 0 -# 1019| ValueCategory = prvalue -# 1017| getStmt(): [BlockStmt] { ... } -# 1018| getStmt(0): [DeclStmt] declaration -# 1018| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x333 -# 1018| Type = [Struct] String -# 1018| getVariable().getInitializer(): [Initializer] initializer for x333 -# 1018| getExpr(): [ConstructorCall] call to String -# 1018| Type = [VoidType] void -# 1018| ValueCategory = prvalue -# 1019| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1019| Type = [VoidType] void -# 1019| ValueCategory = prvalue -# 1019| getQualifier(): [VariableAccess] x333 -# 1019| Type = [Struct] String -# 1019| ValueCategory = lvalue -# 1019| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1019| Conversion = [BoolConversion] conversion to bool -# 1019| Type = [BoolType] bool -# 1019| Value = [CStyleCast] 0 -# 1019| ValueCategory = prvalue -# 1020| getStmt(334): [DoStmt] do (...) ... -# 1022| getCondition(): [Literal] 0 -# 1022| Type = [IntType] int -# 1022| Value = [Literal] 0 -# 1022| ValueCategory = prvalue -# 1020| getStmt(): [BlockStmt] { ... } -# 1021| getStmt(0): [DeclStmt] declaration -# 1021| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x334 -# 1021| Type = [Struct] String -# 1021| getVariable().getInitializer(): [Initializer] initializer for x334 -# 1021| getExpr(): [ConstructorCall] call to String -# 1021| Type = [VoidType] void -# 1021| ValueCategory = prvalue -# 1022| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1022| Type = [VoidType] void -# 1022| ValueCategory = prvalue -# 1022| getQualifier(): [VariableAccess] x334 -# 1022| Type = [Struct] String -# 1022| ValueCategory = lvalue -# 1022| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1022| Conversion = [BoolConversion] conversion to bool -# 1022| Type = [BoolType] bool -# 1022| Value = [CStyleCast] 0 -# 1022| ValueCategory = prvalue -# 1023| getStmt(335): [DoStmt] do (...) ... -# 1025| getCondition(): [Literal] 0 -# 1025| Type = [IntType] int -# 1025| Value = [Literal] 0 -# 1025| ValueCategory = prvalue -# 1023| getStmt(): [BlockStmt] { ... } -# 1024| getStmt(0): [DeclStmt] declaration -# 1024| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x335 -# 1024| Type = [Struct] String -# 1024| getVariable().getInitializer(): [Initializer] initializer for x335 -# 1024| getExpr(): [ConstructorCall] call to String -# 1024| Type = [VoidType] void -# 1024| ValueCategory = prvalue -# 1025| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1025| Type = [VoidType] void -# 1025| ValueCategory = prvalue -# 1025| getQualifier(): [VariableAccess] x335 -# 1025| Type = [Struct] String -# 1025| ValueCategory = lvalue -# 1025| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1025| Conversion = [BoolConversion] conversion to bool -# 1025| Type = [BoolType] bool -# 1025| Value = [CStyleCast] 0 -# 1025| ValueCategory = prvalue -# 1026| getStmt(336): [DoStmt] do (...) ... -# 1028| getCondition(): [Literal] 0 -# 1028| Type = [IntType] int -# 1028| Value = [Literal] 0 -# 1028| ValueCategory = prvalue -# 1026| getStmt(): [BlockStmt] { ... } -# 1027| getStmt(0): [DeclStmt] declaration -# 1027| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x336 -# 1027| Type = [Struct] String -# 1027| getVariable().getInitializer(): [Initializer] initializer for x336 -# 1027| getExpr(): [ConstructorCall] call to String -# 1027| Type = [VoidType] void -# 1027| ValueCategory = prvalue -# 1028| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1028| Type = [VoidType] void -# 1028| ValueCategory = prvalue -# 1028| getQualifier(): [VariableAccess] x336 -# 1028| Type = [Struct] String -# 1028| ValueCategory = lvalue -# 1028| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1028| Conversion = [BoolConversion] conversion to bool -# 1028| Type = [BoolType] bool -# 1028| Value = [CStyleCast] 0 -# 1028| ValueCategory = prvalue -# 1029| getStmt(337): [DoStmt] do (...) ... -# 1031| getCondition(): [Literal] 0 -# 1031| Type = [IntType] int -# 1031| Value = [Literal] 0 -# 1031| ValueCategory = prvalue -# 1029| getStmt(): [BlockStmt] { ... } -# 1030| getStmt(0): [DeclStmt] declaration -# 1030| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x337 -# 1030| Type = [Struct] String -# 1030| getVariable().getInitializer(): [Initializer] initializer for x337 -# 1030| getExpr(): [ConstructorCall] call to String -# 1030| Type = [VoidType] void -# 1030| ValueCategory = prvalue -# 1031| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1031| Type = [VoidType] void -# 1031| ValueCategory = prvalue -# 1031| getQualifier(): [VariableAccess] x337 -# 1031| Type = [Struct] String -# 1031| ValueCategory = lvalue -# 1031| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1031| Conversion = [BoolConversion] conversion to bool -# 1031| Type = [BoolType] bool -# 1031| Value = [CStyleCast] 0 -# 1031| ValueCategory = prvalue -# 1032| getStmt(338): [DoStmt] do (...) ... -# 1034| getCondition(): [Literal] 0 -# 1034| Type = [IntType] int -# 1034| Value = [Literal] 0 -# 1034| ValueCategory = prvalue -# 1032| getStmt(): [BlockStmt] { ... } -# 1033| getStmt(0): [DeclStmt] declaration -# 1033| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x338 -# 1033| Type = [Struct] String -# 1033| getVariable().getInitializer(): [Initializer] initializer for x338 -# 1033| getExpr(): [ConstructorCall] call to String -# 1033| Type = [VoidType] void -# 1033| ValueCategory = prvalue -# 1034| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1034| Type = [VoidType] void -# 1034| ValueCategory = prvalue -# 1034| getQualifier(): [VariableAccess] x338 -# 1034| Type = [Struct] String -# 1034| ValueCategory = lvalue -# 1034| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1034| Conversion = [BoolConversion] conversion to bool -# 1034| Type = [BoolType] bool -# 1034| Value = [CStyleCast] 0 -# 1034| ValueCategory = prvalue -# 1035| getStmt(339): [DoStmt] do (...) ... -# 1037| getCondition(): [Literal] 0 -# 1037| Type = [IntType] int -# 1037| Value = [Literal] 0 -# 1037| ValueCategory = prvalue -# 1035| getStmt(): [BlockStmt] { ... } -# 1036| getStmt(0): [DeclStmt] declaration -# 1036| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x339 -# 1036| Type = [Struct] String -# 1036| getVariable().getInitializer(): [Initializer] initializer for x339 -# 1036| getExpr(): [ConstructorCall] call to String -# 1036| Type = [VoidType] void -# 1036| ValueCategory = prvalue -# 1037| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1037| Type = [VoidType] void -# 1037| ValueCategory = prvalue -# 1037| getQualifier(): [VariableAccess] x339 -# 1037| Type = [Struct] String -# 1037| ValueCategory = lvalue -# 1037| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1037| Conversion = [BoolConversion] conversion to bool -# 1037| Type = [BoolType] bool -# 1037| Value = [CStyleCast] 0 -# 1037| ValueCategory = prvalue -# 1038| getStmt(340): [DoStmt] do (...) ... -# 1040| getCondition(): [Literal] 0 -# 1040| Type = [IntType] int -# 1040| Value = [Literal] 0 -# 1040| ValueCategory = prvalue -# 1038| getStmt(): [BlockStmt] { ... } -# 1039| getStmt(0): [DeclStmt] declaration -# 1039| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x340 -# 1039| Type = [Struct] String -# 1039| getVariable().getInitializer(): [Initializer] initializer for x340 -# 1039| getExpr(): [ConstructorCall] call to String -# 1039| Type = [VoidType] void -# 1039| ValueCategory = prvalue -# 1040| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1040| Type = [VoidType] void -# 1040| ValueCategory = prvalue -# 1040| getQualifier(): [VariableAccess] x340 -# 1040| Type = [Struct] String -# 1040| ValueCategory = lvalue -# 1040| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1040| Conversion = [BoolConversion] conversion to bool -# 1040| Type = [BoolType] bool -# 1040| Value = [CStyleCast] 0 -# 1040| ValueCategory = prvalue -# 1041| getStmt(341): [DoStmt] do (...) ... -# 1043| getCondition(): [Literal] 0 -# 1043| Type = [IntType] int -# 1043| Value = [Literal] 0 -# 1043| ValueCategory = prvalue -# 1041| getStmt(): [BlockStmt] { ... } -# 1042| getStmt(0): [DeclStmt] declaration -# 1042| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x341 -# 1042| Type = [Struct] String -# 1042| getVariable().getInitializer(): [Initializer] initializer for x341 -# 1042| getExpr(): [ConstructorCall] call to String -# 1042| Type = [VoidType] void -# 1042| ValueCategory = prvalue -# 1043| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1043| Type = [VoidType] void -# 1043| ValueCategory = prvalue -# 1043| getQualifier(): [VariableAccess] x341 -# 1043| Type = [Struct] String -# 1043| ValueCategory = lvalue -# 1043| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1043| Conversion = [BoolConversion] conversion to bool -# 1043| Type = [BoolType] bool -# 1043| Value = [CStyleCast] 0 -# 1043| ValueCategory = prvalue -# 1044| getStmt(342): [DoStmt] do (...) ... -# 1046| getCondition(): [Literal] 0 -# 1046| Type = [IntType] int -# 1046| Value = [Literal] 0 -# 1046| ValueCategory = prvalue -# 1044| getStmt(): [BlockStmt] { ... } -# 1045| getStmt(0): [DeclStmt] declaration -# 1045| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x342 -# 1045| Type = [Struct] String -# 1045| getVariable().getInitializer(): [Initializer] initializer for x342 -# 1045| getExpr(): [ConstructorCall] call to String -# 1045| Type = [VoidType] void -# 1045| ValueCategory = prvalue -# 1046| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1046| Type = [VoidType] void -# 1046| ValueCategory = prvalue -# 1046| getQualifier(): [VariableAccess] x342 -# 1046| Type = [Struct] String -# 1046| ValueCategory = lvalue -# 1046| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1046| Conversion = [BoolConversion] conversion to bool -# 1046| Type = [BoolType] bool -# 1046| Value = [CStyleCast] 0 -# 1046| ValueCategory = prvalue -# 1047| getStmt(343): [DoStmt] do (...) ... -# 1049| getCondition(): [Literal] 0 -# 1049| Type = [IntType] int -# 1049| Value = [Literal] 0 -# 1049| ValueCategory = prvalue -# 1047| getStmt(): [BlockStmt] { ... } -# 1048| getStmt(0): [DeclStmt] declaration -# 1048| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x343 -# 1048| Type = [Struct] String -# 1048| getVariable().getInitializer(): [Initializer] initializer for x343 -# 1048| getExpr(): [ConstructorCall] call to String -# 1048| Type = [VoidType] void -# 1048| ValueCategory = prvalue -# 1049| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1049| Type = [VoidType] void -# 1049| ValueCategory = prvalue -# 1049| getQualifier(): [VariableAccess] x343 -# 1049| Type = [Struct] String -# 1049| ValueCategory = lvalue -# 1049| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1049| Conversion = [BoolConversion] conversion to bool -# 1049| Type = [BoolType] bool -# 1049| Value = [CStyleCast] 0 -# 1049| ValueCategory = prvalue -# 1050| getStmt(344): [DoStmt] do (...) ... -# 1052| getCondition(): [Literal] 0 -# 1052| Type = [IntType] int -# 1052| Value = [Literal] 0 -# 1052| ValueCategory = prvalue -# 1050| getStmt(): [BlockStmt] { ... } -# 1051| getStmt(0): [DeclStmt] declaration -# 1051| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x344 -# 1051| Type = [Struct] String -# 1051| getVariable().getInitializer(): [Initializer] initializer for x344 -# 1051| getExpr(): [ConstructorCall] call to String -# 1051| Type = [VoidType] void -# 1051| ValueCategory = prvalue -# 1052| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1052| Type = [VoidType] void -# 1052| ValueCategory = prvalue -# 1052| getQualifier(): [VariableAccess] x344 -# 1052| Type = [Struct] String -# 1052| ValueCategory = lvalue -# 1052| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1052| Conversion = [BoolConversion] conversion to bool -# 1052| Type = [BoolType] bool -# 1052| Value = [CStyleCast] 0 -# 1052| ValueCategory = prvalue -# 1053| getStmt(345): [DoStmt] do (...) ... -# 1055| getCondition(): [Literal] 0 -# 1055| Type = [IntType] int -# 1055| Value = [Literal] 0 -# 1055| ValueCategory = prvalue -# 1053| getStmt(): [BlockStmt] { ... } -# 1054| getStmt(0): [DeclStmt] declaration -# 1054| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x345 -# 1054| Type = [Struct] String -# 1054| getVariable().getInitializer(): [Initializer] initializer for x345 -# 1054| getExpr(): [ConstructorCall] call to String -# 1054| Type = [VoidType] void -# 1054| ValueCategory = prvalue -# 1055| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1055| Type = [VoidType] void -# 1055| ValueCategory = prvalue -# 1055| getQualifier(): [VariableAccess] x345 -# 1055| Type = [Struct] String -# 1055| ValueCategory = lvalue -# 1055| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1055| Conversion = [BoolConversion] conversion to bool -# 1055| Type = [BoolType] bool -# 1055| Value = [CStyleCast] 0 -# 1055| ValueCategory = prvalue -# 1056| getStmt(346): [DoStmt] do (...) ... -# 1058| getCondition(): [Literal] 0 -# 1058| Type = [IntType] int -# 1058| Value = [Literal] 0 -# 1058| ValueCategory = prvalue -# 1056| getStmt(): [BlockStmt] { ... } -# 1057| getStmt(0): [DeclStmt] declaration -# 1057| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x346 -# 1057| Type = [Struct] String -# 1057| getVariable().getInitializer(): [Initializer] initializer for x346 -# 1057| getExpr(): [ConstructorCall] call to String -# 1057| Type = [VoidType] void -# 1057| ValueCategory = prvalue -# 1058| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1058| Type = [VoidType] void -# 1058| ValueCategory = prvalue -# 1058| getQualifier(): [VariableAccess] x346 -# 1058| Type = [Struct] String -# 1058| ValueCategory = lvalue -# 1058| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1058| Conversion = [BoolConversion] conversion to bool -# 1058| Type = [BoolType] bool -# 1058| Value = [CStyleCast] 0 -# 1058| ValueCategory = prvalue -# 1059| getStmt(347): [DoStmt] do (...) ... -# 1061| getCondition(): [Literal] 0 -# 1061| Type = [IntType] int -# 1061| Value = [Literal] 0 -# 1061| ValueCategory = prvalue -# 1059| getStmt(): [BlockStmt] { ... } -# 1060| getStmt(0): [DeclStmt] declaration -# 1060| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x347 -# 1060| Type = [Struct] String -# 1060| getVariable().getInitializer(): [Initializer] initializer for x347 -# 1060| getExpr(): [ConstructorCall] call to String -# 1060| Type = [VoidType] void -# 1060| ValueCategory = prvalue -# 1061| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1061| Type = [VoidType] void -# 1061| ValueCategory = prvalue -# 1061| getQualifier(): [VariableAccess] x347 -# 1061| Type = [Struct] String -# 1061| ValueCategory = lvalue -# 1061| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1061| Conversion = [BoolConversion] conversion to bool -# 1061| Type = [BoolType] bool -# 1061| Value = [CStyleCast] 0 -# 1061| ValueCategory = prvalue -# 1062| getStmt(348): [DoStmt] do (...) ... -# 1064| getCondition(): [Literal] 0 -# 1064| Type = [IntType] int -# 1064| Value = [Literal] 0 -# 1064| ValueCategory = prvalue -# 1062| getStmt(): [BlockStmt] { ... } -# 1063| getStmt(0): [DeclStmt] declaration -# 1063| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x348 -# 1063| Type = [Struct] String -# 1063| getVariable().getInitializer(): [Initializer] initializer for x348 -# 1063| getExpr(): [ConstructorCall] call to String -# 1063| Type = [VoidType] void -# 1063| ValueCategory = prvalue -# 1064| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1064| Type = [VoidType] void -# 1064| ValueCategory = prvalue -# 1064| getQualifier(): [VariableAccess] x348 -# 1064| Type = [Struct] String -# 1064| ValueCategory = lvalue -# 1064| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1064| Conversion = [BoolConversion] conversion to bool -# 1064| Type = [BoolType] bool -# 1064| Value = [CStyleCast] 0 -# 1064| ValueCategory = prvalue -# 1065| getStmt(349): [DoStmt] do (...) ... -# 1067| getCondition(): [Literal] 0 -# 1067| Type = [IntType] int -# 1067| Value = [Literal] 0 -# 1067| ValueCategory = prvalue -# 1065| getStmt(): [BlockStmt] { ... } -# 1066| getStmt(0): [DeclStmt] declaration -# 1066| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x349 -# 1066| Type = [Struct] String -# 1066| getVariable().getInitializer(): [Initializer] initializer for x349 -# 1066| getExpr(): [ConstructorCall] call to String -# 1066| Type = [VoidType] void -# 1066| ValueCategory = prvalue -# 1067| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1067| Type = [VoidType] void -# 1067| ValueCategory = prvalue -# 1067| getQualifier(): [VariableAccess] x349 -# 1067| Type = [Struct] String -# 1067| ValueCategory = lvalue -# 1067| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1067| Conversion = [BoolConversion] conversion to bool -# 1067| Type = [BoolType] bool -# 1067| Value = [CStyleCast] 0 -# 1067| ValueCategory = prvalue -# 1068| getStmt(350): [DoStmt] do (...) ... -# 1070| getCondition(): [Literal] 0 -# 1070| Type = [IntType] int -# 1070| Value = [Literal] 0 -# 1070| ValueCategory = prvalue -# 1068| getStmt(): [BlockStmt] { ... } -# 1069| getStmt(0): [DeclStmt] declaration -# 1069| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x350 -# 1069| Type = [Struct] String -# 1069| getVariable().getInitializer(): [Initializer] initializer for x350 -# 1069| getExpr(): [ConstructorCall] call to String -# 1069| Type = [VoidType] void -# 1069| ValueCategory = prvalue -# 1070| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1070| Type = [VoidType] void -# 1070| ValueCategory = prvalue -# 1070| getQualifier(): [VariableAccess] x350 -# 1070| Type = [Struct] String -# 1070| ValueCategory = lvalue -# 1070| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1070| Conversion = [BoolConversion] conversion to bool -# 1070| Type = [BoolType] bool -# 1070| Value = [CStyleCast] 0 -# 1070| ValueCategory = prvalue -# 1071| getStmt(351): [DoStmt] do (...) ... -# 1073| getCondition(): [Literal] 0 -# 1073| Type = [IntType] int -# 1073| Value = [Literal] 0 -# 1073| ValueCategory = prvalue -# 1071| getStmt(): [BlockStmt] { ... } -# 1072| getStmt(0): [DeclStmt] declaration -# 1072| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x351 -# 1072| Type = [Struct] String -# 1072| getVariable().getInitializer(): [Initializer] initializer for x351 -# 1072| getExpr(): [ConstructorCall] call to String -# 1072| Type = [VoidType] void -# 1072| ValueCategory = prvalue -# 1073| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1073| Type = [VoidType] void -# 1073| ValueCategory = prvalue -# 1073| getQualifier(): [VariableAccess] x351 -# 1073| Type = [Struct] String -# 1073| ValueCategory = lvalue -# 1073| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1073| Conversion = [BoolConversion] conversion to bool -# 1073| Type = [BoolType] bool -# 1073| Value = [CStyleCast] 0 -# 1073| ValueCategory = prvalue -# 1074| getStmt(352): [DoStmt] do (...) ... -# 1076| getCondition(): [Literal] 0 -# 1076| Type = [IntType] int -# 1076| Value = [Literal] 0 -# 1076| ValueCategory = prvalue -# 1074| getStmt(): [BlockStmt] { ... } -# 1075| getStmt(0): [DeclStmt] declaration -# 1075| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x352 -# 1075| Type = [Struct] String -# 1075| getVariable().getInitializer(): [Initializer] initializer for x352 -# 1075| getExpr(): [ConstructorCall] call to String -# 1075| Type = [VoidType] void -# 1075| ValueCategory = prvalue -# 1076| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1076| Type = [VoidType] void -# 1076| ValueCategory = prvalue -# 1076| getQualifier(): [VariableAccess] x352 -# 1076| Type = [Struct] String -# 1076| ValueCategory = lvalue -# 1076| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1076| Conversion = [BoolConversion] conversion to bool -# 1076| Type = [BoolType] bool -# 1076| Value = [CStyleCast] 0 -# 1076| ValueCategory = prvalue -# 1077| getStmt(353): [DoStmt] do (...) ... -# 1079| getCondition(): [Literal] 0 -# 1079| Type = [IntType] int -# 1079| Value = [Literal] 0 -# 1079| ValueCategory = prvalue -# 1077| getStmt(): [BlockStmt] { ... } -# 1078| getStmt(0): [DeclStmt] declaration -# 1078| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x353 -# 1078| Type = [Struct] String -# 1078| getVariable().getInitializer(): [Initializer] initializer for x353 -# 1078| getExpr(): [ConstructorCall] call to String -# 1078| Type = [VoidType] void -# 1078| ValueCategory = prvalue -# 1079| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1079| Type = [VoidType] void -# 1079| ValueCategory = prvalue -# 1079| getQualifier(): [VariableAccess] x353 -# 1079| Type = [Struct] String -# 1079| ValueCategory = lvalue -# 1079| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1079| Conversion = [BoolConversion] conversion to bool -# 1079| Type = [BoolType] bool -# 1079| Value = [CStyleCast] 0 -# 1079| ValueCategory = prvalue -# 1080| getStmt(354): [DoStmt] do (...) ... -# 1082| getCondition(): [Literal] 0 -# 1082| Type = [IntType] int -# 1082| Value = [Literal] 0 -# 1082| ValueCategory = prvalue -# 1080| getStmt(): [BlockStmt] { ... } -# 1081| getStmt(0): [DeclStmt] declaration -# 1081| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x354 -# 1081| Type = [Struct] String -# 1081| getVariable().getInitializer(): [Initializer] initializer for x354 -# 1081| getExpr(): [ConstructorCall] call to String -# 1081| Type = [VoidType] void -# 1081| ValueCategory = prvalue -# 1082| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1082| Type = [VoidType] void -# 1082| ValueCategory = prvalue -# 1082| getQualifier(): [VariableAccess] x354 -# 1082| Type = [Struct] String -# 1082| ValueCategory = lvalue -# 1082| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1082| Conversion = [BoolConversion] conversion to bool -# 1082| Type = [BoolType] bool -# 1082| Value = [CStyleCast] 0 -# 1082| ValueCategory = prvalue -# 1083| getStmt(355): [DoStmt] do (...) ... -# 1085| getCondition(): [Literal] 0 -# 1085| Type = [IntType] int -# 1085| Value = [Literal] 0 -# 1085| ValueCategory = prvalue -# 1083| getStmt(): [BlockStmt] { ... } -# 1084| getStmt(0): [DeclStmt] declaration -# 1084| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x355 -# 1084| Type = [Struct] String -# 1084| getVariable().getInitializer(): [Initializer] initializer for x355 -# 1084| getExpr(): [ConstructorCall] call to String -# 1084| Type = [VoidType] void -# 1084| ValueCategory = prvalue -# 1085| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1085| Type = [VoidType] void -# 1085| ValueCategory = prvalue -# 1085| getQualifier(): [VariableAccess] x355 -# 1085| Type = [Struct] String -# 1085| ValueCategory = lvalue -# 1085| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1085| Conversion = [BoolConversion] conversion to bool -# 1085| Type = [BoolType] bool -# 1085| Value = [CStyleCast] 0 -# 1085| ValueCategory = prvalue -# 1086| getStmt(356): [DoStmt] do (...) ... -# 1088| getCondition(): [Literal] 0 -# 1088| Type = [IntType] int -# 1088| Value = [Literal] 0 -# 1088| ValueCategory = prvalue -# 1086| getStmt(): [BlockStmt] { ... } -# 1087| getStmt(0): [DeclStmt] declaration -# 1087| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x356 -# 1087| Type = [Struct] String -# 1087| getVariable().getInitializer(): [Initializer] initializer for x356 -# 1087| getExpr(): [ConstructorCall] call to String -# 1087| Type = [VoidType] void -# 1087| ValueCategory = prvalue -# 1088| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1088| Type = [VoidType] void -# 1088| ValueCategory = prvalue -# 1088| getQualifier(): [VariableAccess] x356 -# 1088| Type = [Struct] String -# 1088| ValueCategory = lvalue -# 1088| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1088| Conversion = [BoolConversion] conversion to bool -# 1088| Type = [BoolType] bool -# 1088| Value = [CStyleCast] 0 -# 1088| ValueCategory = prvalue -# 1089| getStmt(357): [DoStmt] do (...) ... -# 1091| getCondition(): [Literal] 0 -# 1091| Type = [IntType] int -# 1091| Value = [Literal] 0 -# 1091| ValueCategory = prvalue -# 1089| getStmt(): [BlockStmt] { ... } -# 1090| getStmt(0): [DeclStmt] declaration -# 1090| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x357 -# 1090| Type = [Struct] String -# 1090| getVariable().getInitializer(): [Initializer] initializer for x357 -# 1090| getExpr(): [ConstructorCall] call to String -# 1090| Type = [VoidType] void -# 1090| ValueCategory = prvalue -# 1091| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1091| Type = [VoidType] void -# 1091| ValueCategory = prvalue -# 1091| getQualifier(): [VariableAccess] x357 -# 1091| Type = [Struct] String -# 1091| ValueCategory = lvalue -# 1091| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1091| Conversion = [BoolConversion] conversion to bool -# 1091| Type = [BoolType] bool -# 1091| Value = [CStyleCast] 0 -# 1091| ValueCategory = prvalue -# 1092| getStmt(358): [DoStmt] do (...) ... -# 1094| getCondition(): [Literal] 0 -# 1094| Type = [IntType] int -# 1094| Value = [Literal] 0 -# 1094| ValueCategory = prvalue -# 1092| getStmt(): [BlockStmt] { ... } -# 1093| getStmt(0): [DeclStmt] declaration -# 1093| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x358 -# 1093| Type = [Struct] String -# 1093| getVariable().getInitializer(): [Initializer] initializer for x358 -# 1093| getExpr(): [ConstructorCall] call to String -# 1093| Type = [VoidType] void -# 1093| ValueCategory = prvalue -# 1094| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1094| Type = [VoidType] void -# 1094| ValueCategory = prvalue -# 1094| getQualifier(): [VariableAccess] x358 -# 1094| Type = [Struct] String -# 1094| ValueCategory = lvalue -# 1094| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1094| Conversion = [BoolConversion] conversion to bool -# 1094| Type = [BoolType] bool -# 1094| Value = [CStyleCast] 0 -# 1094| ValueCategory = prvalue -# 1095| getStmt(359): [DoStmt] do (...) ... -# 1097| getCondition(): [Literal] 0 -# 1097| Type = [IntType] int -# 1097| Value = [Literal] 0 -# 1097| ValueCategory = prvalue -# 1095| getStmt(): [BlockStmt] { ... } -# 1096| getStmt(0): [DeclStmt] declaration -# 1096| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x359 -# 1096| Type = [Struct] String -# 1096| getVariable().getInitializer(): [Initializer] initializer for x359 -# 1096| getExpr(): [ConstructorCall] call to String -# 1096| Type = [VoidType] void -# 1096| ValueCategory = prvalue -# 1097| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1097| Type = [VoidType] void -# 1097| ValueCategory = prvalue -# 1097| getQualifier(): [VariableAccess] x359 -# 1097| Type = [Struct] String -# 1097| ValueCategory = lvalue -# 1097| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1097| Conversion = [BoolConversion] conversion to bool -# 1097| Type = [BoolType] bool -# 1097| Value = [CStyleCast] 0 -# 1097| ValueCategory = prvalue -# 1098| getStmt(360): [DoStmt] do (...) ... -# 1100| getCondition(): [Literal] 0 -# 1100| Type = [IntType] int -# 1100| Value = [Literal] 0 -# 1100| ValueCategory = prvalue -# 1098| getStmt(): [BlockStmt] { ... } -# 1099| getStmt(0): [DeclStmt] declaration -# 1099| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x360 -# 1099| Type = [Struct] String -# 1099| getVariable().getInitializer(): [Initializer] initializer for x360 -# 1099| getExpr(): [ConstructorCall] call to String -# 1099| Type = [VoidType] void -# 1099| ValueCategory = prvalue -# 1100| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1100| Type = [VoidType] void -# 1100| ValueCategory = prvalue -# 1100| getQualifier(): [VariableAccess] x360 -# 1100| Type = [Struct] String -# 1100| ValueCategory = lvalue -# 1100| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1100| Conversion = [BoolConversion] conversion to bool -# 1100| Type = [BoolType] bool -# 1100| Value = [CStyleCast] 0 -# 1100| ValueCategory = prvalue -# 1101| getStmt(361): [DoStmt] do (...) ... -# 1103| getCondition(): [Literal] 0 -# 1103| Type = [IntType] int -# 1103| Value = [Literal] 0 -# 1103| ValueCategory = prvalue -# 1101| getStmt(): [BlockStmt] { ... } -# 1102| getStmt(0): [DeclStmt] declaration -# 1102| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x361 -# 1102| Type = [Struct] String -# 1102| getVariable().getInitializer(): [Initializer] initializer for x361 -# 1102| getExpr(): [ConstructorCall] call to String -# 1102| Type = [VoidType] void -# 1102| ValueCategory = prvalue -# 1103| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1103| Type = [VoidType] void -# 1103| ValueCategory = prvalue -# 1103| getQualifier(): [VariableAccess] x361 -# 1103| Type = [Struct] String -# 1103| ValueCategory = lvalue -# 1103| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1103| Conversion = [BoolConversion] conversion to bool -# 1103| Type = [BoolType] bool -# 1103| Value = [CStyleCast] 0 -# 1103| ValueCategory = prvalue -# 1104| getStmt(362): [DoStmt] do (...) ... -# 1106| getCondition(): [Literal] 0 -# 1106| Type = [IntType] int -# 1106| Value = [Literal] 0 -# 1106| ValueCategory = prvalue -# 1104| getStmt(): [BlockStmt] { ... } -# 1105| getStmt(0): [DeclStmt] declaration -# 1105| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x362 -# 1105| Type = [Struct] String -# 1105| getVariable().getInitializer(): [Initializer] initializer for x362 -# 1105| getExpr(): [ConstructorCall] call to String -# 1105| Type = [VoidType] void -# 1105| ValueCategory = prvalue -# 1106| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1106| Type = [VoidType] void -# 1106| ValueCategory = prvalue -# 1106| getQualifier(): [VariableAccess] x362 -# 1106| Type = [Struct] String -# 1106| ValueCategory = lvalue -# 1106| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1106| Conversion = [BoolConversion] conversion to bool -# 1106| Type = [BoolType] bool -# 1106| Value = [CStyleCast] 0 -# 1106| ValueCategory = prvalue -# 1107| getStmt(363): [DoStmt] do (...) ... -# 1109| getCondition(): [Literal] 0 -# 1109| Type = [IntType] int -# 1109| Value = [Literal] 0 -# 1109| ValueCategory = prvalue -# 1107| getStmt(): [BlockStmt] { ... } -# 1108| getStmt(0): [DeclStmt] declaration -# 1108| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x363 -# 1108| Type = [Struct] String -# 1108| getVariable().getInitializer(): [Initializer] initializer for x363 -# 1108| getExpr(): [ConstructorCall] call to String -# 1108| Type = [VoidType] void -# 1108| ValueCategory = prvalue -# 1109| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1109| Type = [VoidType] void -# 1109| ValueCategory = prvalue -# 1109| getQualifier(): [VariableAccess] x363 -# 1109| Type = [Struct] String -# 1109| ValueCategory = lvalue -# 1109| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1109| Conversion = [BoolConversion] conversion to bool -# 1109| Type = [BoolType] bool -# 1109| Value = [CStyleCast] 0 -# 1109| ValueCategory = prvalue -# 1110| getStmt(364): [DoStmt] do (...) ... -# 1112| getCondition(): [Literal] 0 -# 1112| Type = [IntType] int -# 1112| Value = [Literal] 0 -# 1112| ValueCategory = prvalue -# 1110| getStmt(): [BlockStmt] { ... } -# 1111| getStmt(0): [DeclStmt] declaration -# 1111| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x364 -# 1111| Type = [Struct] String -# 1111| getVariable().getInitializer(): [Initializer] initializer for x364 -# 1111| getExpr(): [ConstructorCall] call to String -# 1111| Type = [VoidType] void -# 1111| ValueCategory = prvalue -# 1112| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1112| Type = [VoidType] void -# 1112| ValueCategory = prvalue -# 1112| getQualifier(): [VariableAccess] x364 -# 1112| Type = [Struct] String -# 1112| ValueCategory = lvalue -# 1112| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1112| Conversion = [BoolConversion] conversion to bool -# 1112| Type = [BoolType] bool -# 1112| Value = [CStyleCast] 0 -# 1112| ValueCategory = prvalue -# 1113| getStmt(365): [DoStmt] do (...) ... -# 1115| getCondition(): [Literal] 0 -# 1115| Type = [IntType] int -# 1115| Value = [Literal] 0 -# 1115| ValueCategory = prvalue -# 1113| getStmt(): [BlockStmt] { ... } -# 1114| getStmt(0): [DeclStmt] declaration -# 1114| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x365 -# 1114| Type = [Struct] String -# 1114| getVariable().getInitializer(): [Initializer] initializer for x365 -# 1114| getExpr(): [ConstructorCall] call to String -# 1114| Type = [VoidType] void -# 1114| ValueCategory = prvalue -# 1115| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1115| Type = [VoidType] void -# 1115| ValueCategory = prvalue -# 1115| getQualifier(): [VariableAccess] x365 -# 1115| Type = [Struct] String -# 1115| ValueCategory = lvalue -# 1115| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1115| Conversion = [BoolConversion] conversion to bool -# 1115| Type = [BoolType] bool -# 1115| Value = [CStyleCast] 0 -# 1115| ValueCategory = prvalue -# 1116| getStmt(366): [DoStmt] do (...) ... -# 1118| getCondition(): [Literal] 0 -# 1118| Type = [IntType] int -# 1118| Value = [Literal] 0 -# 1118| ValueCategory = prvalue -# 1116| getStmt(): [BlockStmt] { ... } -# 1117| getStmt(0): [DeclStmt] declaration -# 1117| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x366 -# 1117| Type = [Struct] String -# 1117| getVariable().getInitializer(): [Initializer] initializer for x366 -# 1117| getExpr(): [ConstructorCall] call to String -# 1117| Type = [VoidType] void -# 1117| ValueCategory = prvalue -# 1118| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1118| Type = [VoidType] void -# 1118| ValueCategory = prvalue -# 1118| getQualifier(): [VariableAccess] x366 -# 1118| Type = [Struct] String -# 1118| ValueCategory = lvalue -# 1118| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1118| Conversion = [BoolConversion] conversion to bool -# 1118| Type = [BoolType] bool -# 1118| Value = [CStyleCast] 0 -# 1118| ValueCategory = prvalue -# 1119| getStmt(367): [DoStmt] do (...) ... -# 1121| getCondition(): [Literal] 0 -# 1121| Type = [IntType] int -# 1121| Value = [Literal] 0 -# 1121| ValueCategory = prvalue -# 1119| getStmt(): [BlockStmt] { ... } -# 1120| getStmt(0): [DeclStmt] declaration -# 1120| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x367 -# 1120| Type = [Struct] String -# 1120| getVariable().getInitializer(): [Initializer] initializer for x367 -# 1120| getExpr(): [ConstructorCall] call to String -# 1120| Type = [VoidType] void -# 1120| ValueCategory = prvalue -# 1121| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1121| Type = [VoidType] void -# 1121| ValueCategory = prvalue -# 1121| getQualifier(): [VariableAccess] x367 -# 1121| Type = [Struct] String -# 1121| ValueCategory = lvalue -# 1121| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1121| Conversion = [BoolConversion] conversion to bool -# 1121| Type = [BoolType] bool -# 1121| Value = [CStyleCast] 0 -# 1121| ValueCategory = prvalue -# 1122| getStmt(368): [DoStmt] do (...) ... -# 1124| getCondition(): [Literal] 0 -# 1124| Type = [IntType] int -# 1124| Value = [Literal] 0 -# 1124| ValueCategory = prvalue -# 1122| getStmt(): [BlockStmt] { ... } -# 1123| getStmt(0): [DeclStmt] declaration -# 1123| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x368 -# 1123| Type = [Struct] String -# 1123| getVariable().getInitializer(): [Initializer] initializer for x368 -# 1123| getExpr(): [ConstructorCall] call to String -# 1123| Type = [VoidType] void -# 1123| ValueCategory = prvalue -# 1124| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1124| Type = [VoidType] void -# 1124| ValueCategory = prvalue -# 1124| getQualifier(): [VariableAccess] x368 -# 1124| Type = [Struct] String -# 1124| ValueCategory = lvalue -# 1124| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1124| Conversion = [BoolConversion] conversion to bool -# 1124| Type = [BoolType] bool -# 1124| Value = [CStyleCast] 0 -# 1124| ValueCategory = prvalue -# 1125| getStmt(369): [DoStmt] do (...) ... -# 1127| getCondition(): [Literal] 0 -# 1127| Type = [IntType] int -# 1127| Value = [Literal] 0 -# 1127| ValueCategory = prvalue -# 1125| getStmt(): [BlockStmt] { ... } -# 1126| getStmt(0): [DeclStmt] declaration -# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x369 -# 1126| Type = [Struct] String -# 1126| getVariable().getInitializer(): [Initializer] initializer for x369 -# 1126| getExpr(): [ConstructorCall] call to String -# 1126| Type = [VoidType] void -# 1126| ValueCategory = prvalue -# 1127| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1127| Type = [VoidType] void -# 1127| ValueCategory = prvalue -# 1127| getQualifier(): [VariableAccess] x369 -# 1127| Type = [Struct] String -# 1127| ValueCategory = lvalue -# 1127| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1127| Conversion = [BoolConversion] conversion to bool -# 1127| Type = [BoolType] bool -# 1127| Value = [CStyleCast] 0 -# 1127| ValueCategory = prvalue -# 1128| getStmt(370): [DoStmt] do (...) ... -# 1130| getCondition(): [Literal] 0 -# 1130| Type = [IntType] int -# 1130| Value = [Literal] 0 -# 1130| ValueCategory = prvalue -# 1128| getStmt(): [BlockStmt] { ... } -# 1129| getStmt(0): [DeclStmt] declaration -# 1129| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x370 -# 1129| Type = [Struct] String -# 1129| getVariable().getInitializer(): [Initializer] initializer for x370 -# 1129| getExpr(): [ConstructorCall] call to String -# 1129| Type = [VoidType] void -# 1129| ValueCategory = prvalue -# 1130| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1130| Type = [VoidType] void -# 1130| ValueCategory = prvalue -# 1130| getQualifier(): [VariableAccess] x370 -# 1130| Type = [Struct] String -# 1130| ValueCategory = lvalue -# 1130| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1130| Conversion = [BoolConversion] conversion to bool -# 1130| Type = [BoolType] bool -# 1130| Value = [CStyleCast] 0 -# 1130| ValueCategory = prvalue -# 1131| getStmt(371): [DoStmt] do (...) ... -# 1133| getCondition(): [Literal] 0 -# 1133| Type = [IntType] int -# 1133| Value = [Literal] 0 -# 1133| ValueCategory = prvalue -# 1131| getStmt(): [BlockStmt] { ... } -# 1132| getStmt(0): [DeclStmt] declaration -# 1132| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x371 -# 1132| Type = [Struct] String -# 1132| getVariable().getInitializer(): [Initializer] initializer for x371 -# 1132| getExpr(): [ConstructorCall] call to String -# 1132| Type = [VoidType] void -# 1132| ValueCategory = prvalue -# 1133| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1133| Type = [VoidType] void -# 1133| ValueCategory = prvalue -# 1133| getQualifier(): [VariableAccess] x371 -# 1133| Type = [Struct] String -# 1133| ValueCategory = lvalue -# 1133| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1133| Conversion = [BoolConversion] conversion to bool -# 1133| Type = [BoolType] bool -# 1133| Value = [CStyleCast] 0 -# 1133| ValueCategory = prvalue -# 1134| getStmt(372): [DoStmt] do (...) ... -# 1136| getCondition(): [Literal] 0 -# 1136| Type = [IntType] int -# 1136| Value = [Literal] 0 -# 1136| ValueCategory = prvalue -# 1134| getStmt(): [BlockStmt] { ... } -# 1135| getStmt(0): [DeclStmt] declaration -# 1135| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x372 -# 1135| Type = [Struct] String -# 1135| getVariable().getInitializer(): [Initializer] initializer for x372 -# 1135| getExpr(): [ConstructorCall] call to String -# 1135| Type = [VoidType] void -# 1135| ValueCategory = prvalue -# 1136| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1136| Type = [VoidType] void -# 1136| ValueCategory = prvalue -# 1136| getQualifier(): [VariableAccess] x372 -# 1136| Type = [Struct] String -# 1136| ValueCategory = lvalue -# 1136| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1136| Conversion = [BoolConversion] conversion to bool -# 1136| Type = [BoolType] bool -# 1136| Value = [CStyleCast] 0 -# 1136| ValueCategory = prvalue -# 1137| getStmt(373): [DoStmt] do (...) ... -# 1139| getCondition(): [Literal] 0 -# 1139| Type = [IntType] int -# 1139| Value = [Literal] 0 -# 1139| ValueCategory = prvalue -# 1137| getStmt(): [BlockStmt] { ... } -# 1138| getStmt(0): [DeclStmt] declaration -# 1138| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x373 -# 1138| Type = [Struct] String -# 1138| getVariable().getInitializer(): [Initializer] initializer for x373 -# 1138| getExpr(): [ConstructorCall] call to String -# 1138| Type = [VoidType] void -# 1138| ValueCategory = prvalue -# 1139| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1139| Type = [VoidType] void -# 1139| ValueCategory = prvalue -# 1139| getQualifier(): [VariableAccess] x373 -# 1139| Type = [Struct] String -# 1139| ValueCategory = lvalue -# 1139| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1139| Conversion = [BoolConversion] conversion to bool -# 1139| Type = [BoolType] bool -# 1139| Value = [CStyleCast] 0 -# 1139| ValueCategory = prvalue -# 1140| getStmt(374): [DoStmt] do (...) ... -# 1142| getCondition(): [Literal] 0 -# 1142| Type = [IntType] int -# 1142| Value = [Literal] 0 -# 1142| ValueCategory = prvalue -# 1140| getStmt(): [BlockStmt] { ... } -# 1141| getStmt(0): [DeclStmt] declaration -# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x374 -# 1141| Type = [Struct] String -# 1141| getVariable().getInitializer(): [Initializer] initializer for x374 -# 1141| getExpr(): [ConstructorCall] call to String -# 1141| Type = [VoidType] void -# 1141| ValueCategory = prvalue -# 1142| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1142| Type = [VoidType] void -# 1142| ValueCategory = prvalue -# 1142| getQualifier(): [VariableAccess] x374 -# 1142| Type = [Struct] String -# 1142| ValueCategory = lvalue -# 1142| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1142| Conversion = [BoolConversion] conversion to bool -# 1142| Type = [BoolType] bool -# 1142| Value = [CStyleCast] 0 -# 1142| ValueCategory = prvalue -# 1143| getStmt(375): [DoStmt] do (...) ... -# 1145| getCondition(): [Literal] 0 -# 1145| Type = [IntType] int -# 1145| Value = [Literal] 0 -# 1145| ValueCategory = prvalue -# 1143| getStmt(): [BlockStmt] { ... } -# 1144| getStmt(0): [DeclStmt] declaration -# 1144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x375 -# 1144| Type = [Struct] String -# 1144| getVariable().getInitializer(): [Initializer] initializer for x375 -# 1144| getExpr(): [ConstructorCall] call to String -# 1144| Type = [VoidType] void -# 1144| ValueCategory = prvalue -# 1145| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1145| Type = [VoidType] void -# 1145| ValueCategory = prvalue -# 1145| getQualifier(): [VariableAccess] x375 -# 1145| Type = [Struct] String -# 1145| ValueCategory = lvalue -# 1145| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1145| Conversion = [BoolConversion] conversion to bool -# 1145| Type = [BoolType] bool -# 1145| Value = [CStyleCast] 0 -# 1145| ValueCategory = prvalue -# 1146| getStmt(376): [DoStmt] do (...) ... -# 1148| getCondition(): [Literal] 0 -# 1148| Type = [IntType] int -# 1148| Value = [Literal] 0 -# 1148| ValueCategory = prvalue -# 1146| getStmt(): [BlockStmt] { ... } -# 1147| getStmt(0): [DeclStmt] declaration -# 1147| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x376 -# 1147| Type = [Struct] String -# 1147| getVariable().getInitializer(): [Initializer] initializer for x376 -# 1147| getExpr(): [ConstructorCall] call to String -# 1147| Type = [VoidType] void -# 1147| ValueCategory = prvalue -# 1148| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1148| Type = [VoidType] void -# 1148| ValueCategory = prvalue -# 1148| getQualifier(): [VariableAccess] x376 -# 1148| Type = [Struct] String -# 1148| ValueCategory = lvalue -# 1148| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1148| Conversion = [BoolConversion] conversion to bool -# 1148| Type = [BoolType] bool -# 1148| Value = [CStyleCast] 0 -# 1148| ValueCategory = prvalue -# 1149| getStmt(377): [DoStmt] do (...) ... -# 1151| getCondition(): [Literal] 0 -# 1151| Type = [IntType] int -# 1151| Value = [Literal] 0 -# 1151| ValueCategory = prvalue -# 1149| getStmt(): [BlockStmt] { ... } -# 1150| getStmt(0): [DeclStmt] declaration -# 1150| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x377 -# 1150| Type = [Struct] String -# 1150| getVariable().getInitializer(): [Initializer] initializer for x377 -# 1150| getExpr(): [ConstructorCall] call to String -# 1150| Type = [VoidType] void -# 1150| ValueCategory = prvalue -# 1151| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1151| Type = [VoidType] void -# 1151| ValueCategory = prvalue -# 1151| getQualifier(): [VariableAccess] x377 -# 1151| Type = [Struct] String -# 1151| ValueCategory = lvalue -# 1151| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1151| Conversion = [BoolConversion] conversion to bool -# 1151| Type = [BoolType] bool -# 1151| Value = [CStyleCast] 0 -# 1151| ValueCategory = prvalue -# 1152| getStmt(378): [DoStmt] do (...) ... -# 1154| getCondition(): [Literal] 0 -# 1154| Type = [IntType] int -# 1154| Value = [Literal] 0 -# 1154| ValueCategory = prvalue -# 1152| getStmt(): [BlockStmt] { ... } -# 1153| getStmt(0): [DeclStmt] declaration -# 1153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x378 -# 1153| Type = [Struct] String -# 1153| getVariable().getInitializer(): [Initializer] initializer for x378 -# 1153| getExpr(): [ConstructorCall] call to String -# 1153| Type = [VoidType] void -# 1153| ValueCategory = prvalue -# 1154| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1154| Type = [VoidType] void -# 1154| ValueCategory = prvalue -# 1154| getQualifier(): [VariableAccess] x378 -# 1154| Type = [Struct] String -# 1154| ValueCategory = lvalue -# 1154| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1154| Conversion = [BoolConversion] conversion to bool -# 1154| Type = [BoolType] bool -# 1154| Value = [CStyleCast] 0 -# 1154| ValueCategory = prvalue -# 1155| getStmt(379): [DoStmt] do (...) ... -# 1157| getCondition(): [Literal] 0 -# 1157| Type = [IntType] int -# 1157| Value = [Literal] 0 -# 1157| ValueCategory = prvalue -# 1155| getStmt(): [BlockStmt] { ... } -# 1156| getStmt(0): [DeclStmt] declaration -# 1156| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x379 -# 1156| Type = [Struct] String -# 1156| getVariable().getInitializer(): [Initializer] initializer for x379 -# 1156| getExpr(): [ConstructorCall] call to String -# 1156| Type = [VoidType] void -# 1156| ValueCategory = prvalue -# 1157| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1157| Type = [VoidType] void -# 1157| ValueCategory = prvalue -# 1157| getQualifier(): [VariableAccess] x379 -# 1157| Type = [Struct] String -# 1157| ValueCategory = lvalue -# 1157| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1157| Conversion = [BoolConversion] conversion to bool -# 1157| Type = [BoolType] bool -# 1157| Value = [CStyleCast] 0 -# 1157| ValueCategory = prvalue -# 1158| getStmt(380): [DoStmt] do (...) ... -# 1160| getCondition(): [Literal] 0 -# 1160| Type = [IntType] int -# 1160| Value = [Literal] 0 -# 1160| ValueCategory = prvalue -# 1158| getStmt(): [BlockStmt] { ... } -# 1159| getStmt(0): [DeclStmt] declaration -# 1159| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x380 -# 1159| Type = [Struct] String -# 1159| getVariable().getInitializer(): [Initializer] initializer for x380 -# 1159| getExpr(): [ConstructorCall] call to String -# 1159| Type = [VoidType] void -# 1159| ValueCategory = prvalue -# 1160| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1160| Type = [VoidType] void -# 1160| ValueCategory = prvalue -# 1160| getQualifier(): [VariableAccess] x380 -# 1160| Type = [Struct] String -# 1160| ValueCategory = lvalue -# 1160| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1160| Conversion = [BoolConversion] conversion to bool -# 1160| Type = [BoolType] bool -# 1160| Value = [CStyleCast] 0 -# 1160| ValueCategory = prvalue -# 1161| getStmt(381): [DoStmt] do (...) ... -# 1163| getCondition(): [Literal] 0 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 0 -# 1163| ValueCategory = prvalue -# 1161| getStmt(): [BlockStmt] { ... } -# 1162| getStmt(0): [DeclStmt] declaration -# 1162| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x381 -# 1162| Type = [Struct] String -# 1162| getVariable().getInitializer(): [Initializer] initializer for x381 -# 1162| getExpr(): [ConstructorCall] call to String -# 1162| Type = [VoidType] void -# 1162| ValueCategory = prvalue -# 1163| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1163| Type = [VoidType] void -# 1163| ValueCategory = prvalue -# 1163| getQualifier(): [VariableAccess] x381 -# 1163| Type = [Struct] String -# 1163| ValueCategory = lvalue -# 1163| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1163| Conversion = [BoolConversion] conversion to bool -# 1163| Type = [BoolType] bool -# 1163| Value = [CStyleCast] 0 -# 1163| ValueCategory = prvalue -# 1164| getStmt(382): [DoStmt] do (...) ... -# 1166| getCondition(): [Literal] 0 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 0 -# 1166| ValueCategory = prvalue -# 1164| getStmt(): [BlockStmt] { ... } -# 1165| getStmt(0): [DeclStmt] declaration -# 1165| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x382 -# 1165| Type = [Struct] String -# 1165| getVariable().getInitializer(): [Initializer] initializer for x382 -# 1165| getExpr(): [ConstructorCall] call to String -# 1165| Type = [VoidType] void -# 1165| ValueCategory = prvalue -# 1166| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1166| Type = [VoidType] void -# 1166| ValueCategory = prvalue -# 1166| getQualifier(): [VariableAccess] x382 -# 1166| Type = [Struct] String -# 1166| ValueCategory = lvalue -# 1166| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1166| Conversion = [BoolConversion] conversion to bool -# 1166| Type = [BoolType] bool -# 1166| Value = [CStyleCast] 0 -# 1166| ValueCategory = prvalue -# 1167| getStmt(383): [DoStmt] do (...) ... -# 1169| getCondition(): [Literal] 0 -# 1169| Type = [IntType] int -# 1169| Value = [Literal] 0 -# 1169| ValueCategory = prvalue -# 1167| getStmt(): [BlockStmt] { ... } -# 1168| getStmt(0): [DeclStmt] declaration -# 1168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x383 -# 1168| Type = [Struct] String -# 1168| getVariable().getInitializer(): [Initializer] initializer for x383 -# 1168| getExpr(): [ConstructorCall] call to String -# 1168| Type = [VoidType] void -# 1168| ValueCategory = prvalue -# 1169| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1169| Type = [VoidType] void -# 1169| ValueCategory = prvalue -# 1169| getQualifier(): [VariableAccess] x383 -# 1169| Type = [Struct] String -# 1169| ValueCategory = lvalue -# 1169| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1169| Conversion = [BoolConversion] conversion to bool -# 1169| Type = [BoolType] bool -# 1169| Value = [CStyleCast] 0 -# 1169| ValueCategory = prvalue -# 1170| getStmt(384): [DoStmt] do (...) ... -# 1172| getCondition(): [Literal] 0 -# 1172| Type = [IntType] int -# 1172| Value = [Literal] 0 -# 1172| ValueCategory = prvalue -# 1170| getStmt(): [BlockStmt] { ... } -# 1171| getStmt(0): [DeclStmt] declaration -# 1171| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x384 -# 1171| Type = [Struct] String -# 1171| getVariable().getInitializer(): [Initializer] initializer for x384 -# 1171| getExpr(): [ConstructorCall] call to String -# 1171| Type = [VoidType] void -# 1171| ValueCategory = prvalue -# 1172| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1172| Type = [VoidType] void -# 1172| ValueCategory = prvalue -# 1172| getQualifier(): [VariableAccess] x384 -# 1172| Type = [Struct] String -# 1172| ValueCategory = lvalue -# 1172| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1172| Conversion = [BoolConversion] conversion to bool -# 1172| Type = [BoolType] bool -# 1172| Value = [CStyleCast] 0 -# 1172| ValueCategory = prvalue -# 1173| getStmt(385): [DoStmt] do (...) ... -# 1175| getCondition(): [Literal] 0 -# 1175| Type = [IntType] int -# 1175| Value = [Literal] 0 -# 1175| ValueCategory = prvalue -# 1173| getStmt(): [BlockStmt] { ... } -# 1174| getStmt(0): [DeclStmt] declaration -# 1174| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x385 -# 1174| Type = [Struct] String -# 1174| getVariable().getInitializer(): [Initializer] initializer for x385 -# 1174| getExpr(): [ConstructorCall] call to String -# 1174| Type = [VoidType] void -# 1174| ValueCategory = prvalue -# 1175| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1175| Type = [VoidType] void -# 1175| ValueCategory = prvalue -# 1175| getQualifier(): [VariableAccess] x385 -# 1175| Type = [Struct] String -# 1175| ValueCategory = lvalue -# 1175| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1175| Conversion = [BoolConversion] conversion to bool -# 1175| Type = [BoolType] bool -# 1175| Value = [CStyleCast] 0 -# 1175| ValueCategory = prvalue -# 1176| getStmt(386): [DoStmt] do (...) ... -# 1178| getCondition(): [Literal] 0 -# 1178| Type = [IntType] int -# 1178| Value = [Literal] 0 -# 1178| ValueCategory = prvalue -# 1176| getStmt(): [BlockStmt] { ... } -# 1177| getStmt(0): [DeclStmt] declaration -# 1177| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x386 -# 1177| Type = [Struct] String -# 1177| getVariable().getInitializer(): [Initializer] initializer for x386 -# 1177| getExpr(): [ConstructorCall] call to String -# 1177| Type = [VoidType] void -# 1177| ValueCategory = prvalue -# 1178| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1178| Type = [VoidType] void -# 1178| ValueCategory = prvalue -# 1178| getQualifier(): [VariableAccess] x386 -# 1178| Type = [Struct] String -# 1178| ValueCategory = lvalue -# 1178| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1178| Conversion = [BoolConversion] conversion to bool -# 1178| Type = [BoolType] bool -# 1178| Value = [CStyleCast] 0 -# 1178| ValueCategory = prvalue -# 1179| getStmt(387): [DoStmt] do (...) ... -# 1181| getCondition(): [Literal] 0 -# 1181| Type = [IntType] int -# 1181| Value = [Literal] 0 -# 1181| ValueCategory = prvalue -# 1179| getStmt(): [BlockStmt] { ... } -# 1180| getStmt(0): [DeclStmt] declaration -# 1180| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x387 -# 1180| Type = [Struct] String -# 1180| getVariable().getInitializer(): [Initializer] initializer for x387 -# 1180| getExpr(): [ConstructorCall] call to String -# 1180| Type = [VoidType] void -# 1180| ValueCategory = prvalue -# 1181| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1181| Type = [VoidType] void -# 1181| ValueCategory = prvalue -# 1181| getQualifier(): [VariableAccess] x387 -# 1181| Type = [Struct] String -# 1181| ValueCategory = lvalue -# 1181| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1181| Conversion = [BoolConversion] conversion to bool -# 1181| Type = [BoolType] bool -# 1181| Value = [CStyleCast] 0 -# 1181| ValueCategory = prvalue -# 1182| getStmt(388): [DoStmt] do (...) ... -# 1184| getCondition(): [Literal] 0 -# 1184| Type = [IntType] int -# 1184| Value = [Literal] 0 -# 1184| ValueCategory = prvalue -# 1182| getStmt(): [BlockStmt] { ... } -# 1183| getStmt(0): [DeclStmt] declaration -# 1183| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x388 -# 1183| Type = [Struct] String -# 1183| getVariable().getInitializer(): [Initializer] initializer for x388 -# 1183| getExpr(): [ConstructorCall] call to String -# 1183| Type = [VoidType] void -# 1183| ValueCategory = prvalue -# 1184| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1184| Type = [VoidType] void -# 1184| ValueCategory = prvalue -# 1184| getQualifier(): [VariableAccess] x388 -# 1184| Type = [Struct] String -# 1184| ValueCategory = lvalue -# 1184| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1184| Conversion = [BoolConversion] conversion to bool -# 1184| Type = [BoolType] bool -# 1184| Value = [CStyleCast] 0 -# 1184| ValueCategory = prvalue -# 1185| getStmt(389): [DoStmt] do (...) ... -# 1187| getCondition(): [Literal] 0 -# 1187| Type = [IntType] int -# 1187| Value = [Literal] 0 -# 1187| ValueCategory = prvalue -# 1185| getStmt(): [BlockStmt] { ... } -# 1186| getStmt(0): [DeclStmt] declaration -# 1186| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x389 -# 1186| Type = [Struct] String -# 1186| getVariable().getInitializer(): [Initializer] initializer for x389 -# 1186| getExpr(): [ConstructorCall] call to String -# 1186| Type = [VoidType] void -# 1186| ValueCategory = prvalue -# 1187| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1187| Type = [VoidType] void -# 1187| ValueCategory = prvalue -# 1187| getQualifier(): [VariableAccess] x389 -# 1187| Type = [Struct] String -# 1187| ValueCategory = lvalue -# 1187| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1187| Conversion = [BoolConversion] conversion to bool -# 1187| Type = [BoolType] bool -# 1187| Value = [CStyleCast] 0 -# 1187| ValueCategory = prvalue -# 1188| getStmt(390): [DoStmt] do (...) ... -# 1190| getCondition(): [Literal] 0 -# 1190| Type = [IntType] int -# 1190| Value = [Literal] 0 -# 1190| ValueCategory = prvalue -# 1188| getStmt(): [BlockStmt] { ... } -# 1189| getStmt(0): [DeclStmt] declaration -# 1189| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x390 -# 1189| Type = [Struct] String -# 1189| getVariable().getInitializer(): [Initializer] initializer for x390 -# 1189| getExpr(): [ConstructorCall] call to String -# 1189| Type = [VoidType] void -# 1189| ValueCategory = prvalue -# 1190| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1190| Type = [VoidType] void -# 1190| ValueCategory = prvalue -# 1190| getQualifier(): [VariableAccess] x390 -# 1190| Type = [Struct] String -# 1190| ValueCategory = lvalue -# 1190| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1190| Conversion = [BoolConversion] conversion to bool -# 1190| Type = [BoolType] bool -# 1190| Value = [CStyleCast] 0 -# 1190| ValueCategory = prvalue -# 1191| getStmt(391): [DoStmt] do (...) ... -# 1193| getCondition(): [Literal] 0 -# 1193| Type = [IntType] int -# 1193| Value = [Literal] 0 -# 1193| ValueCategory = prvalue -# 1191| getStmt(): [BlockStmt] { ... } -# 1192| getStmt(0): [DeclStmt] declaration -# 1192| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x391 -# 1192| Type = [Struct] String -# 1192| getVariable().getInitializer(): [Initializer] initializer for x391 -# 1192| getExpr(): [ConstructorCall] call to String -# 1192| Type = [VoidType] void -# 1192| ValueCategory = prvalue -# 1193| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1193| Type = [VoidType] void -# 1193| ValueCategory = prvalue -# 1193| getQualifier(): [VariableAccess] x391 -# 1193| Type = [Struct] String -# 1193| ValueCategory = lvalue -# 1193| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1193| Conversion = [BoolConversion] conversion to bool -# 1193| Type = [BoolType] bool -# 1193| Value = [CStyleCast] 0 -# 1193| ValueCategory = prvalue -# 1194| getStmt(392): [DoStmt] do (...) ... -# 1196| getCondition(): [Literal] 0 -# 1196| Type = [IntType] int -# 1196| Value = [Literal] 0 -# 1196| ValueCategory = prvalue -# 1194| getStmt(): [BlockStmt] { ... } -# 1195| getStmt(0): [DeclStmt] declaration -# 1195| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x392 -# 1195| Type = [Struct] String -# 1195| getVariable().getInitializer(): [Initializer] initializer for x392 -# 1195| getExpr(): [ConstructorCall] call to String -# 1195| Type = [VoidType] void -# 1195| ValueCategory = prvalue -# 1196| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1196| Type = [VoidType] void -# 1196| ValueCategory = prvalue -# 1196| getQualifier(): [VariableAccess] x392 -# 1196| Type = [Struct] String -# 1196| ValueCategory = lvalue -# 1196| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1196| Conversion = [BoolConversion] conversion to bool -# 1196| Type = [BoolType] bool -# 1196| Value = [CStyleCast] 0 -# 1196| ValueCategory = prvalue -# 1197| getStmt(393): [DoStmt] do (...) ... -# 1199| getCondition(): [Literal] 0 -# 1199| Type = [IntType] int -# 1199| Value = [Literal] 0 -# 1199| ValueCategory = prvalue -# 1197| getStmt(): [BlockStmt] { ... } -# 1198| getStmt(0): [DeclStmt] declaration -# 1198| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x393 -# 1198| Type = [Struct] String -# 1198| getVariable().getInitializer(): [Initializer] initializer for x393 -# 1198| getExpr(): [ConstructorCall] call to String -# 1198| Type = [VoidType] void -# 1198| ValueCategory = prvalue -# 1199| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1199| Type = [VoidType] void -# 1199| ValueCategory = prvalue -# 1199| getQualifier(): [VariableAccess] x393 -# 1199| Type = [Struct] String -# 1199| ValueCategory = lvalue -# 1199| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1199| Conversion = [BoolConversion] conversion to bool -# 1199| Type = [BoolType] bool -# 1199| Value = [CStyleCast] 0 -# 1199| ValueCategory = prvalue -# 1200| getStmt(394): [DoStmt] do (...) ... -# 1202| getCondition(): [Literal] 0 -# 1202| Type = [IntType] int -# 1202| Value = [Literal] 0 -# 1202| ValueCategory = prvalue -# 1200| getStmt(): [BlockStmt] { ... } -# 1201| getStmt(0): [DeclStmt] declaration -# 1201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x394 -# 1201| Type = [Struct] String -# 1201| getVariable().getInitializer(): [Initializer] initializer for x394 -# 1201| getExpr(): [ConstructorCall] call to String -# 1201| Type = [VoidType] void -# 1201| ValueCategory = prvalue -# 1202| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1202| Type = [VoidType] void -# 1202| ValueCategory = prvalue -# 1202| getQualifier(): [VariableAccess] x394 -# 1202| Type = [Struct] String -# 1202| ValueCategory = lvalue -# 1202| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1202| Conversion = [BoolConversion] conversion to bool -# 1202| Type = [BoolType] bool -# 1202| Value = [CStyleCast] 0 -# 1202| ValueCategory = prvalue -# 1203| getStmt(395): [DoStmt] do (...) ... -# 1205| getCondition(): [Literal] 0 -# 1205| Type = [IntType] int -# 1205| Value = [Literal] 0 -# 1205| ValueCategory = prvalue -# 1203| getStmt(): [BlockStmt] { ... } -# 1204| getStmt(0): [DeclStmt] declaration -# 1204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x395 -# 1204| Type = [Struct] String -# 1204| getVariable().getInitializer(): [Initializer] initializer for x395 -# 1204| getExpr(): [ConstructorCall] call to String -# 1204| Type = [VoidType] void -# 1204| ValueCategory = prvalue -# 1205| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1205| Type = [VoidType] void -# 1205| ValueCategory = prvalue -# 1205| getQualifier(): [VariableAccess] x395 -# 1205| Type = [Struct] String -# 1205| ValueCategory = lvalue -# 1205| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1205| Conversion = [BoolConversion] conversion to bool -# 1205| Type = [BoolType] bool -# 1205| Value = [CStyleCast] 0 -# 1205| ValueCategory = prvalue -# 1206| getStmt(396): [DoStmt] do (...) ... -# 1208| getCondition(): [Literal] 0 -# 1208| Type = [IntType] int -# 1208| Value = [Literal] 0 -# 1208| ValueCategory = prvalue -# 1206| getStmt(): [BlockStmt] { ... } -# 1207| getStmt(0): [DeclStmt] declaration -# 1207| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x396 -# 1207| Type = [Struct] String -# 1207| getVariable().getInitializer(): [Initializer] initializer for x396 -# 1207| getExpr(): [ConstructorCall] call to String -# 1207| Type = [VoidType] void -# 1207| ValueCategory = prvalue -# 1208| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1208| Type = [VoidType] void -# 1208| ValueCategory = prvalue -# 1208| getQualifier(): [VariableAccess] x396 -# 1208| Type = [Struct] String -# 1208| ValueCategory = lvalue -# 1208| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1208| Conversion = [BoolConversion] conversion to bool -# 1208| Type = [BoolType] bool -# 1208| Value = [CStyleCast] 0 -# 1208| ValueCategory = prvalue -# 1209| getStmt(397): [DoStmt] do (...) ... -# 1211| getCondition(): [Literal] 0 -# 1211| Type = [IntType] int -# 1211| Value = [Literal] 0 -# 1211| ValueCategory = prvalue -# 1209| getStmt(): [BlockStmt] { ... } -# 1210| getStmt(0): [DeclStmt] declaration -# 1210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x397 -# 1210| Type = [Struct] String -# 1210| getVariable().getInitializer(): [Initializer] initializer for x397 -# 1210| getExpr(): [ConstructorCall] call to String -# 1210| Type = [VoidType] void -# 1210| ValueCategory = prvalue -# 1211| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1211| Type = [VoidType] void -# 1211| ValueCategory = prvalue -# 1211| getQualifier(): [VariableAccess] x397 -# 1211| Type = [Struct] String -# 1211| ValueCategory = lvalue -# 1211| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1211| Conversion = [BoolConversion] conversion to bool -# 1211| Type = [BoolType] bool -# 1211| Value = [CStyleCast] 0 -# 1211| ValueCategory = prvalue -# 1212| getStmt(398): [DoStmt] do (...) ... -# 1214| getCondition(): [Literal] 0 -# 1214| Type = [IntType] int -# 1214| Value = [Literal] 0 -# 1214| ValueCategory = prvalue -# 1212| getStmt(): [BlockStmt] { ... } -# 1213| getStmt(0): [DeclStmt] declaration -# 1213| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x398 -# 1213| Type = [Struct] String -# 1213| getVariable().getInitializer(): [Initializer] initializer for x398 -# 1213| getExpr(): [ConstructorCall] call to String -# 1213| Type = [VoidType] void -# 1213| ValueCategory = prvalue -# 1214| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1214| Type = [VoidType] void -# 1214| ValueCategory = prvalue -# 1214| getQualifier(): [VariableAccess] x398 -# 1214| Type = [Struct] String -# 1214| ValueCategory = lvalue -# 1214| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1214| Conversion = [BoolConversion] conversion to bool -# 1214| Type = [BoolType] bool -# 1214| Value = [CStyleCast] 0 -# 1214| ValueCategory = prvalue -# 1215| getStmt(399): [DoStmt] do (...) ... -# 1217| getCondition(): [Literal] 0 -# 1217| Type = [IntType] int -# 1217| Value = [Literal] 0 -# 1217| ValueCategory = prvalue -# 1215| getStmt(): [BlockStmt] { ... } -# 1216| getStmt(0): [DeclStmt] declaration -# 1216| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x399 -# 1216| Type = [Struct] String -# 1216| getVariable().getInitializer(): [Initializer] initializer for x399 -# 1216| getExpr(): [ConstructorCall] call to String -# 1216| Type = [VoidType] void -# 1216| ValueCategory = prvalue -# 1217| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1217| Type = [VoidType] void -# 1217| ValueCategory = prvalue -# 1217| getQualifier(): [VariableAccess] x399 -# 1217| Type = [Struct] String -# 1217| ValueCategory = lvalue -# 1217| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1217| Conversion = [BoolConversion] conversion to bool -# 1217| Type = [BoolType] bool -# 1217| Value = [CStyleCast] 0 -# 1217| ValueCategory = prvalue -# 1218| getStmt(400): [DoStmt] do (...) ... -# 1220| getCondition(): [Literal] 0 -# 1220| Type = [IntType] int -# 1220| Value = [Literal] 0 -# 1220| ValueCategory = prvalue -# 1218| getStmt(): [BlockStmt] { ... } -# 1219| getStmt(0): [DeclStmt] declaration -# 1219| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x400 -# 1219| Type = [Struct] String -# 1219| getVariable().getInitializer(): [Initializer] initializer for x400 -# 1219| getExpr(): [ConstructorCall] call to String -# 1219| Type = [VoidType] void -# 1219| ValueCategory = prvalue -# 1220| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1220| Type = [VoidType] void -# 1220| ValueCategory = prvalue -# 1220| getQualifier(): [VariableAccess] x400 -# 1220| Type = [Struct] String -# 1220| ValueCategory = lvalue -# 1220| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1220| Conversion = [BoolConversion] conversion to bool -# 1220| Type = [BoolType] bool -# 1220| Value = [CStyleCast] 0 -# 1220| ValueCategory = prvalue -# 1221| getStmt(401): [DoStmt] do (...) ... -# 1223| getCondition(): [Literal] 0 -# 1223| Type = [IntType] int -# 1223| Value = [Literal] 0 -# 1223| ValueCategory = prvalue -# 1221| getStmt(): [BlockStmt] { ... } -# 1222| getStmt(0): [DeclStmt] declaration -# 1222| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x401 -# 1222| Type = [Struct] String -# 1222| getVariable().getInitializer(): [Initializer] initializer for x401 -# 1222| getExpr(): [ConstructorCall] call to String -# 1222| Type = [VoidType] void -# 1222| ValueCategory = prvalue -# 1223| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1223| Type = [VoidType] void -# 1223| ValueCategory = prvalue -# 1223| getQualifier(): [VariableAccess] x401 -# 1223| Type = [Struct] String -# 1223| ValueCategory = lvalue -# 1223| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1223| Conversion = [BoolConversion] conversion to bool -# 1223| Type = [BoolType] bool -# 1223| Value = [CStyleCast] 0 -# 1223| ValueCategory = prvalue -# 1224| getStmt(402): [DoStmt] do (...) ... -# 1226| getCondition(): [Literal] 0 -# 1226| Type = [IntType] int -# 1226| Value = [Literal] 0 -# 1226| ValueCategory = prvalue -# 1224| getStmt(): [BlockStmt] { ... } -# 1225| getStmt(0): [DeclStmt] declaration -# 1225| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x402 -# 1225| Type = [Struct] String -# 1225| getVariable().getInitializer(): [Initializer] initializer for x402 -# 1225| getExpr(): [ConstructorCall] call to String -# 1225| Type = [VoidType] void -# 1225| ValueCategory = prvalue -# 1226| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1226| Type = [VoidType] void -# 1226| ValueCategory = prvalue -# 1226| getQualifier(): [VariableAccess] x402 -# 1226| Type = [Struct] String -# 1226| ValueCategory = lvalue -# 1226| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1226| Conversion = [BoolConversion] conversion to bool -# 1226| Type = [BoolType] bool -# 1226| Value = [CStyleCast] 0 -# 1226| ValueCategory = prvalue -# 1227| getStmt(403): [DoStmt] do (...) ... -# 1229| getCondition(): [Literal] 0 -# 1229| Type = [IntType] int -# 1229| Value = [Literal] 0 -# 1229| ValueCategory = prvalue -# 1227| getStmt(): [BlockStmt] { ... } -# 1228| getStmt(0): [DeclStmt] declaration -# 1228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x403 -# 1228| Type = [Struct] String -# 1228| getVariable().getInitializer(): [Initializer] initializer for x403 -# 1228| getExpr(): [ConstructorCall] call to String -# 1228| Type = [VoidType] void -# 1228| ValueCategory = prvalue -# 1229| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1229| Type = [VoidType] void -# 1229| ValueCategory = prvalue -# 1229| getQualifier(): [VariableAccess] x403 -# 1229| Type = [Struct] String -# 1229| ValueCategory = lvalue -# 1229| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1229| Conversion = [BoolConversion] conversion to bool -# 1229| Type = [BoolType] bool -# 1229| Value = [CStyleCast] 0 -# 1229| ValueCategory = prvalue -# 1230| getStmt(404): [DoStmt] do (...) ... -# 1232| getCondition(): [Literal] 0 -# 1232| Type = [IntType] int -# 1232| Value = [Literal] 0 -# 1232| ValueCategory = prvalue -# 1230| getStmt(): [BlockStmt] { ... } -# 1231| getStmt(0): [DeclStmt] declaration -# 1231| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x404 -# 1231| Type = [Struct] String -# 1231| getVariable().getInitializer(): [Initializer] initializer for x404 -# 1231| getExpr(): [ConstructorCall] call to String -# 1231| Type = [VoidType] void -# 1231| ValueCategory = prvalue -# 1232| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1232| Type = [VoidType] void -# 1232| ValueCategory = prvalue -# 1232| getQualifier(): [VariableAccess] x404 -# 1232| Type = [Struct] String -# 1232| ValueCategory = lvalue -# 1232| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1232| Conversion = [BoolConversion] conversion to bool -# 1232| Type = [BoolType] bool -# 1232| Value = [CStyleCast] 0 -# 1232| ValueCategory = prvalue -# 1233| getStmt(405): [DoStmt] do (...) ... -# 1235| getCondition(): [Literal] 0 -# 1235| Type = [IntType] int -# 1235| Value = [Literal] 0 -# 1235| ValueCategory = prvalue -# 1233| getStmt(): [BlockStmt] { ... } -# 1234| getStmt(0): [DeclStmt] declaration -# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x405 -# 1234| Type = [Struct] String -# 1234| getVariable().getInitializer(): [Initializer] initializer for x405 -# 1234| getExpr(): [ConstructorCall] call to String -# 1234| Type = [VoidType] void -# 1234| ValueCategory = prvalue -# 1235| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1235| Type = [VoidType] void -# 1235| ValueCategory = prvalue -# 1235| getQualifier(): [VariableAccess] x405 -# 1235| Type = [Struct] String -# 1235| ValueCategory = lvalue -# 1235| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1235| Conversion = [BoolConversion] conversion to bool -# 1235| Type = [BoolType] bool -# 1235| Value = [CStyleCast] 0 -# 1235| ValueCategory = prvalue -# 1236| getStmt(406): [DoStmt] do (...) ... -# 1238| getCondition(): [Literal] 0 -# 1238| Type = [IntType] int -# 1238| Value = [Literal] 0 -# 1238| ValueCategory = prvalue -# 1236| getStmt(): [BlockStmt] { ... } -# 1237| getStmt(0): [DeclStmt] declaration -# 1237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x406 -# 1237| Type = [Struct] String -# 1237| getVariable().getInitializer(): [Initializer] initializer for x406 -# 1237| getExpr(): [ConstructorCall] call to String -# 1237| Type = [VoidType] void -# 1237| ValueCategory = prvalue -# 1238| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1238| Type = [VoidType] void -# 1238| ValueCategory = prvalue -# 1238| getQualifier(): [VariableAccess] x406 -# 1238| Type = [Struct] String -# 1238| ValueCategory = lvalue -# 1238| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1238| Conversion = [BoolConversion] conversion to bool -# 1238| Type = [BoolType] bool -# 1238| Value = [CStyleCast] 0 -# 1238| ValueCategory = prvalue -# 1239| getStmt(407): [DoStmt] do (...) ... -# 1241| getCondition(): [Literal] 0 -# 1241| Type = [IntType] int -# 1241| Value = [Literal] 0 -# 1241| ValueCategory = prvalue -# 1239| getStmt(): [BlockStmt] { ... } -# 1240| getStmt(0): [DeclStmt] declaration -# 1240| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x407 -# 1240| Type = [Struct] String -# 1240| getVariable().getInitializer(): [Initializer] initializer for x407 -# 1240| getExpr(): [ConstructorCall] call to String -# 1240| Type = [VoidType] void -# 1240| ValueCategory = prvalue -# 1241| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1241| Type = [VoidType] void -# 1241| ValueCategory = prvalue -# 1241| getQualifier(): [VariableAccess] x407 -# 1241| Type = [Struct] String -# 1241| ValueCategory = lvalue -# 1241| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1241| Conversion = [BoolConversion] conversion to bool -# 1241| Type = [BoolType] bool -# 1241| Value = [CStyleCast] 0 -# 1241| ValueCategory = prvalue -# 1242| getStmt(408): [DoStmt] do (...) ... -# 1244| getCondition(): [Literal] 0 -# 1244| Type = [IntType] int -# 1244| Value = [Literal] 0 -# 1244| ValueCategory = prvalue -# 1242| getStmt(): [BlockStmt] { ... } -# 1243| getStmt(0): [DeclStmt] declaration -# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x408 -# 1243| Type = [Struct] String -# 1243| getVariable().getInitializer(): [Initializer] initializer for x408 -# 1243| getExpr(): [ConstructorCall] call to String -# 1243| Type = [VoidType] void -# 1243| ValueCategory = prvalue -# 1244| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] x408 -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1244| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1244| Conversion = [BoolConversion] conversion to bool -# 1244| Type = [BoolType] bool -# 1244| Value = [CStyleCast] 0 -# 1244| ValueCategory = prvalue -# 1245| getStmt(409): [DoStmt] do (...) ... -# 1247| getCondition(): [Literal] 0 -# 1247| Type = [IntType] int -# 1247| Value = [Literal] 0 -# 1247| ValueCategory = prvalue -# 1245| getStmt(): [BlockStmt] { ... } -# 1246| getStmt(0): [DeclStmt] declaration -# 1246| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x409 -# 1246| Type = [Struct] String -# 1246| getVariable().getInitializer(): [Initializer] initializer for x409 -# 1246| getExpr(): [ConstructorCall] call to String -# 1246| Type = [VoidType] void -# 1246| ValueCategory = prvalue -# 1247| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1247| Type = [VoidType] void -# 1247| ValueCategory = prvalue -# 1247| getQualifier(): [VariableAccess] x409 -# 1247| Type = [Struct] String -# 1247| ValueCategory = lvalue -# 1247| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1247| Conversion = [BoolConversion] conversion to bool -# 1247| Type = [BoolType] bool -# 1247| Value = [CStyleCast] 0 -# 1247| ValueCategory = prvalue -# 1248| getStmt(410): [DoStmt] do (...) ... -# 1250| getCondition(): [Literal] 0 -# 1250| Type = [IntType] int -# 1250| Value = [Literal] 0 -# 1250| ValueCategory = prvalue -# 1248| getStmt(): [BlockStmt] { ... } -# 1249| getStmt(0): [DeclStmt] declaration -# 1249| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x410 -# 1249| Type = [Struct] String -# 1249| getVariable().getInitializer(): [Initializer] initializer for x410 -# 1249| getExpr(): [ConstructorCall] call to String -# 1249| Type = [VoidType] void -# 1249| ValueCategory = prvalue -# 1250| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1250| Type = [VoidType] void -# 1250| ValueCategory = prvalue -# 1250| getQualifier(): [VariableAccess] x410 -# 1250| Type = [Struct] String -# 1250| ValueCategory = lvalue -# 1250| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1250| Conversion = [BoolConversion] conversion to bool -# 1250| Type = [BoolType] bool -# 1250| Value = [CStyleCast] 0 -# 1250| ValueCategory = prvalue -# 1251| getStmt(411): [DoStmt] do (...) ... -# 1253| getCondition(): [Literal] 0 -# 1253| Type = [IntType] int -# 1253| Value = [Literal] 0 -# 1253| ValueCategory = prvalue -# 1251| getStmt(): [BlockStmt] { ... } -# 1252| getStmt(0): [DeclStmt] declaration -# 1252| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x411 -# 1252| Type = [Struct] String -# 1252| getVariable().getInitializer(): [Initializer] initializer for x411 -# 1252| getExpr(): [ConstructorCall] call to String -# 1252| Type = [VoidType] void -# 1252| ValueCategory = prvalue -# 1253| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1253| Type = [VoidType] void -# 1253| ValueCategory = prvalue -# 1253| getQualifier(): [VariableAccess] x411 -# 1253| Type = [Struct] String -# 1253| ValueCategory = lvalue -# 1253| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1253| Conversion = [BoolConversion] conversion to bool -# 1253| Type = [BoolType] bool -# 1253| Value = [CStyleCast] 0 -# 1253| ValueCategory = prvalue -# 1254| getStmt(412): [DoStmt] do (...) ... -# 1256| getCondition(): [Literal] 0 -# 1256| Type = [IntType] int -# 1256| Value = [Literal] 0 -# 1256| ValueCategory = prvalue -# 1254| getStmt(): [BlockStmt] { ... } -# 1255| getStmt(0): [DeclStmt] declaration -# 1255| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x412 -# 1255| Type = [Struct] String -# 1255| getVariable().getInitializer(): [Initializer] initializer for x412 -# 1255| getExpr(): [ConstructorCall] call to String -# 1255| Type = [VoidType] void -# 1255| ValueCategory = prvalue -# 1256| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1256| Type = [VoidType] void -# 1256| ValueCategory = prvalue -# 1256| getQualifier(): [VariableAccess] x412 -# 1256| Type = [Struct] String -# 1256| ValueCategory = lvalue -# 1256| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1256| Conversion = [BoolConversion] conversion to bool -# 1256| Type = [BoolType] bool -# 1256| Value = [CStyleCast] 0 -# 1256| ValueCategory = prvalue -# 1257| getStmt(413): [DoStmt] do (...) ... -# 1259| getCondition(): [Literal] 0 -# 1259| Type = [IntType] int -# 1259| Value = [Literal] 0 -# 1259| ValueCategory = prvalue -# 1257| getStmt(): [BlockStmt] { ... } -# 1258| getStmt(0): [DeclStmt] declaration -# 1258| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x413 -# 1258| Type = [Struct] String -# 1258| getVariable().getInitializer(): [Initializer] initializer for x413 -# 1258| getExpr(): [ConstructorCall] call to String -# 1258| Type = [VoidType] void -# 1258| ValueCategory = prvalue -# 1259| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1259| Type = [VoidType] void -# 1259| ValueCategory = prvalue -# 1259| getQualifier(): [VariableAccess] x413 -# 1259| Type = [Struct] String -# 1259| ValueCategory = lvalue -# 1259| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1259| Conversion = [BoolConversion] conversion to bool -# 1259| Type = [BoolType] bool -# 1259| Value = [CStyleCast] 0 -# 1259| ValueCategory = prvalue -# 1260| getStmt(414): [DoStmt] do (...) ... -# 1262| getCondition(): [Literal] 0 -# 1262| Type = [IntType] int -# 1262| Value = [Literal] 0 -# 1262| ValueCategory = prvalue -# 1260| getStmt(): [BlockStmt] { ... } -# 1261| getStmt(0): [DeclStmt] declaration -# 1261| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x414 -# 1261| Type = [Struct] String -# 1261| getVariable().getInitializer(): [Initializer] initializer for x414 -# 1261| getExpr(): [ConstructorCall] call to String -# 1261| Type = [VoidType] void -# 1261| ValueCategory = prvalue -# 1262| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1262| Type = [VoidType] void -# 1262| ValueCategory = prvalue -# 1262| getQualifier(): [VariableAccess] x414 -# 1262| Type = [Struct] String -# 1262| ValueCategory = lvalue -# 1262| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1262| Conversion = [BoolConversion] conversion to bool -# 1262| Type = [BoolType] bool -# 1262| Value = [CStyleCast] 0 -# 1262| ValueCategory = prvalue -# 1263| getStmt(415): [DoStmt] do (...) ... -# 1265| getCondition(): [Literal] 0 -# 1265| Type = [IntType] int -# 1265| Value = [Literal] 0 -# 1265| ValueCategory = prvalue -# 1263| getStmt(): [BlockStmt] { ... } -# 1264| getStmt(0): [DeclStmt] declaration -# 1264| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x415 -# 1264| Type = [Struct] String -# 1264| getVariable().getInitializer(): [Initializer] initializer for x415 -# 1264| getExpr(): [ConstructorCall] call to String -# 1264| Type = [VoidType] void -# 1264| ValueCategory = prvalue -# 1265| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1265| Type = [VoidType] void -# 1265| ValueCategory = prvalue -# 1265| getQualifier(): [VariableAccess] x415 -# 1265| Type = [Struct] String -# 1265| ValueCategory = lvalue -# 1265| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1265| Conversion = [BoolConversion] conversion to bool -# 1265| Type = [BoolType] bool -# 1265| Value = [CStyleCast] 0 -# 1265| ValueCategory = prvalue -# 1266| getStmt(416): [DoStmt] do (...) ... -# 1268| getCondition(): [Literal] 0 -# 1268| Type = [IntType] int -# 1268| Value = [Literal] 0 -# 1268| ValueCategory = prvalue -# 1266| getStmt(): [BlockStmt] { ... } -# 1267| getStmt(0): [DeclStmt] declaration -# 1267| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x416 -# 1267| Type = [Struct] String -# 1267| getVariable().getInitializer(): [Initializer] initializer for x416 -# 1267| getExpr(): [ConstructorCall] call to String -# 1267| Type = [VoidType] void -# 1267| ValueCategory = prvalue -# 1268| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1268| Type = [VoidType] void -# 1268| ValueCategory = prvalue -# 1268| getQualifier(): [VariableAccess] x416 -# 1268| Type = [Struct] String -# 1268| ValueCategory = lvalue -# 1268| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1268| Conversion = [BoolConversion] conversion to bool -# 1268| Type = [BoolType] bool -# 1268| Value = [CStyleCast] 0 -# 1268| ValueCategory = prvalue -# 1269| getStmt(417): [DoStmt] do (...) ... -# 1271| getCondition(): [Literal] 0 -# 1271| Type = [IntType] int -# 1271| Value = [Literal] 0 -# 1271| ValueCategory = prvalue -# 1269| getStmt(): [BlockStmt] { ... } -# 1270| getStmt(0): [DeclStmt] declaration -# 1270| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x417 -# 1270| Type = [Struct] String -# 1270| getVariable().getInitializer(): [Initializer] initializer for x417 -# 1270| getExpr(): [ConstructorCall] call to String -# 1270| Type = [VoidType] void -# 1270| ValueCategory = prvalue -# 1271| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1271| Type = [VoidType] void -# 1271| ValueCategory = prvalue -# 1271| getQualifier(): [VariableAccess] x417 -# 1271| Type = [Struct] String -# 1271| ValueCategory = lvalue -# 1271| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1271| Conversion = [BoolConversion] conversion to bool -# 1271| Type = [BoolType] bool -# 1271| Value = [CStyleCast] 0 -# 1271| ValueCategory = prvalue -# 1272| getStmt(418): [DoStmt] do (...) ... -# 1274| getCondition(): [Literal] 0 -# 1274| Type = [IntType] int -# 1274| Value = [Literal] 0 -# 1274| ValueCategory = prvalue -# 1272| getStmt(): [BlockStmt] { ... } -# 1273| getStmt(0): [DeclStmt] declaration -# 1273| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x418 -# 1273| Type = [Struct] String -# 1273| getVariable().getInitializer(): [Initializer] initializer for x418 -# 1273| getExpr(): [ConstructorCall] call to String -# 1273| Type = [VoidType] void -# 1273| ValueCategory = prvalue -# 1274| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1274| Type = [VoidType] void -# 1274| ValueCategory = prvalue -# 1274| getQualifier(): [VariableAccess] x418 -# 1274| Type = [Struct] String -# 1274| ValueCategory = lvalue -# 1274| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1274| Conversion = [BoolConversion] conversion to bool -# 1274| Type = [BoolType] bool -# 1274| Value = [CStyleCast] 0 -# 1274| ValueCategory = prvalue -# 1275| getStmt(419): [DoStmt] do (...) ... -# 1277| getCondition(): [Literal] 0 -# 1277| Type = [IntType] int -# 1277| Value = [Literal] 0 -# 1277| ValueCategory = prvalue -# 1275| getStmt(): [BlockStmt] { ... } -# 1276| getStmt(0): [DeclStmt] declaration -# 1276| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x419 -# 1276| Type = [Struct] String -# 1276| getVariable().getInitializer(): [Initializer] initializer for x419 -# 1276| getExpr(): [ConstructorCall] call to String -# 1276| Type = [VoidType] void -# 1276| ValueCategory = prvalue -# 1277| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1277| Type = [VoidType] void -# 1277| ValueCategory = prvalue -# 1277| getQualifier(): [VariableAccess] x419 -# 1277| Type = [Struct] String -# 1277| ValueCategory = lvalue -# 1277| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1277| Conversion = [BoolConversion] conversion to bool -# 1277| Type = [BoolType] bool -# 1277| Value = [CStyleCast] 0 -# 1277| ValueCategory = prvalue -# 1278| getStmt(420): [DoStmt] do (...) ... -# 1280| getCondition(): [Literal] 0 -# 1280| Type = [IntType] int -# 1280| Value = [Literal] 0 -# 1280| ValueCategory = prvalue -# 1278| getStmt(): [BlockStmt] { ... } -# 1279| getStmt(0): [DeclStmt] declaration -# 1279| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x420 -# 1279| Type = [Struct] String -# 1279| getVariable().getInitializer(): [Initializer] initializer for x420 -# 1279| getExpr(): [ConstructorCall] call to String -# 1279| Type = [VoidType] void -# 1279| ValueCategory = prvalue -# 1280| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1280| Type = [VoidType] void -# 1280| ValueCategory = prvalue -# 1280| getQualifier(): [VariableAccess] x420 -# 1280| Type = [Struct] String -# 1280| ValueCategory = lvalue -# 1280| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1280| Conversion = [BoolConversion] conversion to bool -# 1280| Type = [BoolType] bool -# 1280| Value = [CStyleCast] 0 -# 1280| ValueCategory = prvalue -# 1281| getStmt(421): [DoStmt] do (...) ... -# 1283| getCondition(): [Literal] 0 -# 1283| Type = [IntType] int -# 1283| Value = [Literal] 0 -# 1283| ValueCategory = prvalue -# 1281| getStmt(): [BlockStmt] { ... } -# 1282| getStmt(0): [DeclStmt] declaration -# 1282| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x421 -# 1282| Type = [Struct] String -# 1282| getVariable().getInitializer(): [Initializer] initializer for x421 -# 1282| getExpr(): [ConstructorCall] call to String -# 1282| Type = [VoidType] void -# 1282| ValueCategory = prvalue -# 1283| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1283| Type = [VoidType] void -# 1283| ValueCategory = prvalue -# 1283| getQualifier(): [VariableAccess] x421 -# 1283| Type = [Struct] String -# 1283| ValueCategory = lvalue -# 1283| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1283| Conversion = [BoolConversion] conversion to bool -# 1283| Type = [BoolType] bool -# 1283| Value = [CStyleCast] 0 -# 1283| ValueCategory = prvalue -# 1284| getStmt(422): [DoStmt] do (...) ... -# 1286| getCondition(): [Literal] 0 -# 1286| Type = [IntType] int -# 1286| Value = [Literal] 0 -# 1286| ValueCategory = prvalue -# 1284| getStmt(): [BlockStmt] { ... } -# 1285| getStmt(0): [DeclStmt] declaration -# 1285| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x422 -# 1285| Type = [Struct] String -# 1285| getVariable().getInitializer(): [Initializer] initializer for x422 -# 1285| getExpr(): [ConstructorCall] call to String -# 1285| Type = [VoidType] void -# 1285| ValueCategory = prvalue -# 1286| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1286| Type = [VoidType] void -# 1286| ValueCategory = prvalue -# 1286| getQualifier(): [VariableAccess] x422 -# 1286| Type = [Struct] String -# 1286| ValueCategory = lvalue -# 1286| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1286| Conversion = [BoolConversion] conversion to bool -# 1286| Type = [BoolType] bool -# 1286| Value = [CStyleCast] 0 -# 1286| ValueCategory = prvalue -# 1287| getStmt(423): [DoStmt] do (...) ... -# 1289| getCondition(): [Literal] 0 -# 1289| Type = [IntType] int -# 1289| Value = [Literal] 0 -# 1289| ValueCategory = prvalue -# 1287| getStmt(): [BlockStmt] { ... } -# 1288| getStmt(0): [DeclStmt] declaration -# 1288| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x423 -# 1288| Type = [Struct] String -# 1288| getVariable().getInitializer(): [Initializer] initializer for x423 -# 1288| getExpr(): [ConstructorCall] call to String -# 1288| Type = [VoidType] void -# 1288| ValueCategory = prvalue -# 1289| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1289| Type = [VoidType] void -# 1289| ValueCategory = prvalue -# 1289| getQualifier(): [VariableAccess] x423 -# 1289| Type = [Struct] String -# 1289| ValueCategory = lvalue -# 1289| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1289| Conversion = [BoolConversion] conversion to bool -# 1289| Type = [BoolType] bool -# 1289| Value = [CStyleCast] 0 -# 1289| ValueCategory = prvalue -# 1290| getStmt(424): [DoStmt] do (...) ... -# 1292| getCondition(): [Literal] 0 -# 1292| Type = [IntType] int -# 1292| Value = [Literal] 0 -# 1292| ValueCategory = prvalue -# 1290| getStmt(): [BlockStmt] { ... } -# 1291| getStmt(0): [DeclStmt] declaration -# 1291| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x424 -# 1291| Type = [Struct] String -# 1291| getVariable().getInitializer(): [Initializer] initializer for x424 -# 1291| getExpr(): [ConstructorCall] call to String -# 1291| Type = [VoidType] void -# 1291| ValueCategory = prvalue -# 1292| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1292| Type = [VoidType] void -# 1292| ValueCategory = prvalue -# 1292| getQualifier(): [VariableAccess] x424 -# 1292| Type = [Struct] String -# 1292| ValueCategory = lvalue -# 1292| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1292| Conversion = [BoolConversion] conversion to bool -# 1292| Type = [BoolType] bool -# 1292| Value = [CStyleCast] 0 -# 1292| ValueCategory = prvalue -# 1293| getStmt(425): [DoStmt] do (...) ... -# 1295| getCondition(): [Literal] 0 -# 1295| Type = [IntType] int -# 1295| Value = [Literal] 0 -# 1295| ValueCategory = prvalue -# 1293| getStmt(): [BlockStmt] { ... } -# 1294| getStmt(0): [DeclStmt] declaration -# 1294| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x425 -# 1294| Type = [Struct] String -# 1294| getVariable().getInitializer(): [Initializer] initializer for x425 -# 1294| getExpr(): [ConstructorCall] call to String -# 1294| Type = [VoidType] void -# 1294| ValueCategory = prvalue -# 1295| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1295| Type = [VoidType] void -# 1295| ValueCategory = prvalue -# 1295| getQualifier(): [VariableAccess] x425 -# 1295| Type = [Struct] String -# 1295| ValueCategory = lvalue -# 1295| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1295| Conversion = [BoolConversion] conversion to bool -# 1295| Type = [BoolType] bool -# 1295| Value = [CStyleCast] 0 -# 1295| ValueCategory = prvalue -# 1296| getStmt(426): [DoStmt] do (...) ... -# 1298| getCondition(): [Literal] 0 -# 1298| Type = [IntType] int -# 1298| Value = [Literal] 0 -# 1298| ValueCategory = prvalue -# 1296| getStmt(): [BlockStmt] { ... } -# 1297| getStmt(0): [DeclStmt] declaration -# 1297| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x426 -# 1297| Type = [Struct] String -# 1297| getVariable().getInitializer(): [Initializer] initializer for x426 -# 1297| getExpr(): [ConstructorCall] call to String -# 1297| Type = [VoidType] void -# 1297| ValueCategory = prvalue -# 1298| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1298| Type = [VoidType] void -# 1298| ValueCategory = prvalue -# 1298| getQualifier(): [VariableAccess] x426 -# 1298| Type = [Struct] String -# 1298| ValueCategory = lvalue -# 1298| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1298| Conversion = [BoolConversion] conversion to bool -# 1298| Type = [BoolType] bool -# 1298| Value = [CStyleCast] 0 -# 1298| ValueCategory = prvalue -# 1299| getStmt(427): [DoStmt] do (...) ... -# 1301| getCondition(): [Literal] 0 -# 1301| Type = [IntType] int -# 1301| Value = [Literal] 0 -# 1301| ValueCategory = prvalue -# 1299| getStmt(): [BlockStmt] { ... } -# 1300| getStmt(0): [DeclStmt] declaration -# 1300| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x427 -# 1300| Type = [Struct] String -# 1300| getVariable().getInitializer(): [Initializer] initializer for x427 -# 1300| getExpr(): [ConstructorCall] call to String -# 1300| Type = [VoidType] void -# 1300| ValueCategory = prvalue -# 1301| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1301| Type = [VoidType] void -# 1301| ValueCategory = prvalue -# 1301| getQualifier(): [VariableAccess] x427 -# 1301| Type = [Struct] String -# 1301| ValueCategory = lvalue -# 1301| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1301| Conversion = [BoolConversion] conversion to bool -# 1301| Type = [BoolType] bool -# 1301| Value = [CStyleCast] 0 -# 1301| ValueCategory = prvalue -# 1302| getStmt(428): [DoStmt] do (...) ... -# 1304| getCondition(): [Literal] 0 -# 1304| Type = [IntType] int -# 1304| Value = [Literal] 0 -# 1304| ValueCategory = prvalue -# 1302| getStmt(): [BlockStmt] { ... } -# 1303| getStmt(0): [DeclStmt] declaration -# 1303| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x428 -# 1303| Type = [Struct] String -# 1303| getVariable().getInitializer(): [Initializer] initializer for x428 -# 1303| getExpr(): [ConstructorCall] call to String -# 1303| Type = [VoidType] void -# 1303| ValueCategory = prvalue -# 1304| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1304| Type = [VoidType] void -# 1304| ValueCategory = prvalue -# 1304| getQualifier(): [VariableAccess] x428 -# 1304| Type = [Struct] String -# 1304| ValueCategory = lvalue -# 1304| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1304| Conversion = [BoolConversion] conversion to bool -# 1304| Type = [BoolType] bool -# 1304| Value = [CStyleCast] 0 -# 1304| ValueCategory = prvalue -# 1305| getStmt(429): [DoStmt] do (...) ... -# 1307| getCondition(): [Literal] 0 -# 1307| Type = [IntType] int -# 1307| Value = [Literal] 0 -# 1307| ValueCategory = prvalue -# 1305| getStmt(): [BlockStmt] { ... } -# 1306| getStmt(0): [DeclStmt] declaration -# 1306| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x429 -# 1306| Type = [Struct] String -# 1306| getVariable().getInitializer(): [Initializer] initializer for x429 -# 1306| getExpr(): [ConstructorCall] call to String -# 1306| Type = [VoidType] void -# 1306| ValueCategory = prvalue -# 1307| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1307| Type = [VoidType] void -# 1307| ValueCategory = prvalue -# 1307| getQualifier(): [VariableAccess] x429 -# 1307| Type = [Struct] String -# 1307| ValueCategory = lvalue -# 1307| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1307| Conversion = [BoolConversion] conversion to bool -# 1307| Type = [BoolType] bool -# 1307| Value = [CStyleCast] 0 -# 1307| ValueCategory = prvalue -# 1308| getStmt(430): [DoStmt] do (...) ... -# 1310| getCondition(): [Literal] 0 -# 1310| Type = [IntType] int -# 1310| Value = [Literal] 0 -# 1310| ValueCategory = prvalue -# 1308| getStmt(): [BlockStmt] { ... } -# 1309| getStmt(0): [DeclStmt] declaration -# 1309| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x430 -# 1309| Type = [Struct] String -# 1309| getVariable().getInitializer(): [Initializer] initializer for x430 -# 1309| getExpr(): [ConstructorCall] call to String -# 1309| Type = [VoidType] void -# 1309| ValueCategory = prvalue -# 1310| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1310| Type = [VoidType] void -# 1310| ValueCategory = prvalue -# 1310| getQualifier(): [VariableAccess] x430 -# 1310| Type = [Struct] String -# 1310| ValueCategory = lvalue -# 1310| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1310| Conversion = [BoolConversion] conversion to bool -# 1310| Type = [BoolType] bool -# 1310| Value = [CStyleCast] 0 -# 1310| ValueCategory = prvalue -# 1311| getStmt(431): [DoStmt] do (...) ... -# 1313| getCondition(): [Literal] 0 -# 1313| Type = [IntType] int -# 1313| Value = [Literal] 0 -# 1313| ValueCategory = prvalue -# 1311| getStmt(): [BlockStmt] { ... } -# 1312| getStmt(0): [DeclStmt] declaration -# 1312| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x431 -# 1312| Type = [Struct] String -# 1312| getVariable().getInitializer(): [Initializer] initializer for x431 -# 1312| getExpr(): [ConstructorCall] call to String -# 1312| Type = [VoidType] void -# 1312| ValueCategory = prvalue -# 1313| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1313| Type = [VoidType] void -# 1313| ValueCategory = prvalue -# 1313| getQualifier(): [VariableAccess] x431 -# 1313| Type = [Struct] String -# 1313| ValueCategory = lvalue -# 1313| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1313| Conversion = [BoolConversion] conversion to bool -# 1313| Type = [BoolType] bool -# 1313| Value = [CStyleCast] 0 -# 1313| ValueCategory = prvalue -# 1314| getStmt(432): [DoStmt] do (...) ... -# 1316| getCondition(): [Literal] 0 -# 1316| Type = [IntType] int -# 1316| Value = [Literal] 0 -# 1316| ValueCategory = prvalue -# 1314| getStmt(): [BlockStmt] { ... } -# 1315| getStmt(0): [DeclStmt] declaration -# 1315| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x432 -# 1315| Type = [Struct] String -# 1315| getVariable().getInitializer(): [Initializer] initializer for x432 -# 1315| getExpr(): [ConstructorCall] call to String -# 1315| Type = [VoidType] void -# 1315| ValueCategory = prvalue -# 1316| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1316| Type = [VoidType] void -# 1316| ValueCategory = prvalue -# 1316| getQualifier(): [VariableAccess] x432 -# 1316| Type = [Struct] String -# 1316| ValueCategory = lvalue -# 1316| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1316| Conversion = [BoolConversion] conversion to bool -# 1316| Type = [BoolType] bool -# 1316| Value = [CStyleCast] 0 -# 1316| ValueCategory = prvalue -# 1317| getStmt(433): [DoStmt] do (...) ... -# 1319| getCondition(): [Literal] 0 -# 1319| Type = [IntType] int -# 1319| Value = [Literal] 0 -# 1319| ValueCategory = prvalue -# 1317| getStmt(): [BlockStmt] { ... } -# 1318| getStmt(0): [DeclStmt] declaration -# 1318| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x433 -# 1318| Type = [Struct] String -# 1318| getVariable().getInitializer(): [Initializer] initializer for x433 -# 1318| getExpr(): [ConstructorCall] call to String -# 1318| Type = [VoidType] void -# 1318| ValueCategory = prvalue -# 1319| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1319| Type = [VoidType] void -# 1319| ValueCategory = prvalue -# 1319| getQualifier(): [VariableAccess] x433 -# 1319| Type = [Struct] String -# 1319| ValueCategory = lvalue -# 1319| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1319| Conversion = [BoolConversion] conversion to bool -# 1319| Type = [BoolType] bool -# 1319| Value = [CStyleCast] 0 -# 1319| ValueCategory = prvalue -# 1320| getStmt(434): [DoStmt] do (...) ... -# 1322| getCondition(): [Literal] 0 -# 1322| Type = [IntType] int -# 1322| Value = [Literal] 0 -# 1322| ValueCategory = prvalue -# 1320| getStmt(): [BlockStmt] { ... } -# 1321| getStmt(0): [DeclStmt] declaration -# 1321| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x434 -# 1321| Type = [Struct] String -# 1321| getVariable().getInitializer(): [Initializer] initializer for x434 -# 1321| getExpr(): [ConstructorCall] call to String -# 1321| Type = [VoidType] void -# 1321| ValueCategory = prvalue -# 1322| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1322| Type = [VoidType] void -# 1322| ValueCategory = prvalue -# 1322| getQualifier(): [VariableAccess] x434 -# 1322| Type = [Struct] String -# 1322| ValueCategory = lvalue -# 1322| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1322| Conversion = [BoolConversion] conversion to bool -# 1322| Type = [BoolType] bool -# 1322| Value = [CStyleCast] 0 -# 1322| ValueCategory = prvalue -# 1323| getStmt(435): [DoStmt] do (...) ... -# 1325| getCondition(): [Literal] 0 -# 1325| Type = [IntType] int -# 1325| Value = [Literal] 0 -# 1325| ValueCategory = prvalue -# 1323| getStmt(): [BlockStmt] { ... } -# 1324| getStmt(0): [DeclStmt] declaration -# 1324| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x435 -# 1324| Type = [Struct] String -# 1324| getVariable().getInitializer(): [Initializer] initializer for x435 -# 1324| getExpr(): [ConstructorCall] call to String -# 1324| Type = [VoidType] void -# 1324| ValueCategory = prvalue -# 1325| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1325| Type = [VoidType] void -# 1325| ValueCategory = prvalue -# 1325| getQualifier(): [VariableAccess] x435 -# 1325| Type = [Struct] String -# 1325| ValueCategory = lvalue -# 1325| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1325| Conversion = [BoolConversion] conversion to bool -# 1325| Type = [BoolType] bool -# 1325| Value = [CStyleCast] 0 -# 1325| ValueCategory = prvalue -# 1326| getStmt(436): [DoStmt] do (...) ... -# 1328| getCondition(): [Literal] 0 -# 1328| Type = [IntType] int -# 1328| Value = [Literal] 0 -# 1328| ValueCategory = prvalue -# 1326| getStmt(): [BlockStmt] { ... } -# 1327| getStmt(0): [DeclStmt] declaration -# 1327| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x436 -# 1327| Type = [Struct] String -# 1327| getVariable().getInitializer(): [Initializer] initializer for x436 -# 1327| getExpr(): [ConstructorCall] call to String -# 1327| Type = [VoidType] void -# 1327| ValueCategory = prvalue -# 1328| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1328| Type = [VoidType] void -# 1328| ValueCategory = prvalue -# 1328| getQualifier(): [VariableAccess] x436 -# 1328| Type = [Struct] String -# 1328| ValueCategory = lvalue -# 1328| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1328| Conversion = [BoolConversion] conversion to bool -# 1328| Type = [BoolType] bool -# 1328| Value = [CStyleCast] 0 -# 1328| ValueCategory = prvalue -# 1329| getStmt(437): [DoStmt] do (...) ... -# 1331| getCondition(): [Literal] 0 -# 1331| Type = [IntType] int -# 1331| Value = [Literal] 0 -# 1331| ValueCategory = prvalue -# 1329| getStmt(): [BlockStmt] { ... } -# 1330| getStmt(0): [DeclStmt] declaration -# 1330| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x437 -# 1330| Type = [Struct] String -# 1330| getVariable().getInitializer(): [Initializer] initializer for x437 -# 1330| getExpr(): [ConstructorCall] call to String -# 1330| Type = [VoidType] void -# 1330| ValueCategory = prvalue -# 1331| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1331| Type = [VoidType] void -# 1331| ValueCategory = prvalue -# 1331| getQualifier(): [VariableAccess] x437 -# 1331| Type = [Struct] String -# 1331| ValueCategory = lvalue -# 1331| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1331| Conversion = [BoolConversion] conversion to bool -# 1331| Type = [BoolType] bool -# 1331| Value = [CStyleCast] 0 -# 1331| ValueCategory = prvalue -# 1332| getStmt(438): [DoStmt] do (...) ... -# 1334| getCondition(): [Literal] 0 -# 1334| Type = [IntType] int -# 1334| Value = [Literal] 0 -# 1334| ValueCategory = prvalue -# 1332| getStmt(): [BlockStmt] { ... } -# 1333| getStmt(0): [DeclStmt] declaration -# 1333| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x438 -# 1333| Type = [Struct] String -# 1333| getVariable().getInitializer(): [Initializer] initializer for x438 -# 1333| getExpr(): [ConstructorCall] call to String -# 1333| Type = [VoidType] void -# 1333| ValueCategory = prvalue -# 1334| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1334| Type = [VoidType] void -# 1334| ValueCategory = prvalue -# 1334| getQualifier(): [VariableAccess] x438 -# 1334| Type = [Struct] String -# 1334| ValueCategory = lvalue -# 1334| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1334| Conversion = [BoolConversion] conversion to bool -# 1334| Type = [BoolType] bool -# 1334| Value = [CStyleCast] 0 -# 1334| ValueCategory = prvalue -# 1335| getStmt(439): [DoStmt] do (...) ... -# 1337| getCondition(): [Literal] 0 -# 1337| Type = [IntType] int -# 1337| Value = [Literal] 0 -# 1337| ValueCategory = prvalue -# 1335| getStmt(): [BlockStmt] { ... } -# 1336| getStmt(0): [DeclStmt] declaration -# 1336| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x439 -# 1336| Type = [Struct] String -# 1336| getVariable().getInitializer(): [Initializer] initializer for x439 -# 1336| getExpr(): [ConstructorCall] call to String -# 1336| Type = [VoidType] void -# 1336| ValueCategory = prvalue -# 1337| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1337| Type = [VoidType] void -# 1337| ValueCategory = prvalue -# 1337| getQualifier(): [VariableAccess] x439 -# 1337| Type = [Struct] String -# 1337| ValueCategory = lvalue -# 1337| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1337| Conversion = [BoolConversion] conversion to bool -# 1337| Type = [BoolType] bool -# 1337| Value = [CStyleCast] 0 -# 1337| ValueCategory = prvalue -# 1338| getStmt(440): [DoStmt] do (...) ... -# 1340| getCondition(): [Literal] 0 -# 1340| Type = [IntType] int -# 1340| Value = [Literal] 0 -# 1340| ValueCategory = prvalue -# 1338| getStmt(): [BlockStmt] { ... } -# 1339| getStmt(0): [DeclStmt] declaration -# 1339| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x440 -# 1339| Type = [Struct] String -# 1339| getVariable().getInitializer(): [Initializer] initializer for x440 -# 1339| getExpr(): [ConstructorCall] call to String -# 1339| Type = [VoidType] void -# 1339| ValueCategory = prvalue -# 1340| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1340| Type = [VoidType] void -# 1340| ValueCategory = prvalue -# 1340| getQualifier(): [VariableAccess] x440 -# 1340| Type = [Struct] String -# 1340| ValueCategory = lvalue -# 1340| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1340| Conversion = [BoolConversion] conversion to bool -# 1340| Type = [BoolType] bool -# 1340| Value = [CStyleCast] 0 -# 1340| ValueCategory = prvalue -# 1341| getStmt(441): [DoStmt] do (...) ... -# 1343| getCondition(): [Literal] 0 -# 1343| Type = [IntType] int -# 1343| Value = [Literal] 0 -# 1343| ValueCategory = prvalue -# 1341| getStmt(): [BlockStmt] { ... } -# 1342| getStmt(0): [DeclStmt] declaration -# 1342| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x441 -# 1342| Type = [Struct] String -# 1342| getVariable().getInitializer(): [Initializer] initializer for x441 -# 1342| getExpr(): [ConstructorCall] call to String -# 1342| Type = [VoidType] void -# 1342| ValueCategory = prvalue -# 1343| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1343| Type = [VoidType] void -# 1343| ValueCategory = prvalue -# 1343| getQualifier(): [VariableAccess] x441 -# 1343| Type = [Struct] String -# 1343| ValueCategory = lvalue -# 1343| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1343| Conversion = [BoolConversion] conversion to bool -# 1343| Type = [BoolType] bool -# 1343| Value = [CStyleCast] 0 -# 1343| ValueCategory = prvalue -# 1344| getStmt(442): [DoStmt] do (...) ... -# 1346| getCondition(): [Literal] 0 -# 1346| Type = [IntType] int -# 1346| Value = [Literal] 0 -# 1346| ValueCategory = prvalue -# 1344| getStmt(): [BlockStmt] { ... } -# 1345| getStmt(0): [DeclStmt] declaration -# 1345| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x442 -# 1345| Type = [Struct] String -# 1345| getVariable().getInitializer(): [Initializer] initializer for x442 -# 1345| getExpr(): [ConstructorCall] call to String -# 1345| Type = [VoidType] void -# 1345| ValueCategory = prvalue -# 1346| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1346| Type = [VoidType] void -# 1346| ValueCategory = prvalue -# 1346| getQualifier(): [VariableAccess] x442 -# 1346| Type = [Struct] String -# 1346| ValueCategory = lvalue -# 1346| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1346| Conversion = [BoolConversion] conversion to bool -# 1346| Type = [BoolType] bool -# 1346| Value = [CStyleCast] 0 -# 1346| ValueCategory = prvalue -# 1347| getStmt(443): [DoStmt] do (...) ... -# 1349| getCondition(): [Literal] 0 -# 1349| Type = [IntType] int -# 1349| Value = [Literal] 0 -# 1349| ValueCategory = prvalue -# 1347| getStmt(): [BlockStmt] { ... } -# 1348| getStmt(0): [DeclStmt] declaration -# 1348| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x443 -# 1348| Type = [Struct] String -# 1348| getVariable().getInitializer(): [Initializer] initializer for x443 -# 1348| getExpr(): [ConstructorCall] call to String -# 1348| Type = [VoidType] void -# 1348| ValueCategory = prvalue -# 1349| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1349| Type = [VoidType] void -# 1349| ValueCategory = prvalue -# 1349| getQualifier(): [VariableAccess] x443 -# 1349| Type = [Struct] String -# 1349| ValueCategory = lvalue -# 1349| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1349| Conversion = [BoolConversion] conversion to bool -# 1349| Type = [BoolType] bool -# 1349| Value = [CStyleCast] 0 -# 1349| ValueCategory = prvalue -# 1350| getStmt(444): [DoStmt] do (...) ... -# 1352| getCondition(): [Literal] 0 -# 1352| Type = [IntType] int -# 1352| Value = [Literal] 0 -# 1352| ValueCategory = prvalue -# 1350| getStmt(): [BlockStmt] { ... } -# 1351| getStmt(0): [DeclStmt] declaration -# 1351| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x444 -# 1351| Type = [Struct] String -# 1351| getVariable().getInitializer(): [Initializer] initializer for x444 -# 1351| getExpr(): [ConstructorCall] call to String -# 1351| Type = [VoidType] void -# 1351| ValueCategory = prvalue -# 1352| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1352| Type = [VoidType] void -# 1352| ValueCategory = prvalue -# 1352| getQualifier(): [VariableAccess] x444 -# 1352| Type = [Struct] String -# 1352| ValueCategory = lvalue -# 1352| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1352| Conversion = [BoolConversion] conversion to bool -# 1352| Type = [BoolType] bool -# 1352| Value = [CStyleCast] 0 -# 1352| ValueCategory = prvalue -# 1353| getStmt(445): [DoStmt] do (...) ... -# 1355| getCondition(): [Literal] 0 -# 1355| Type = [IntType] int -# 1355| Value = [Literal] 0 -# 1355| ValueCategory = prvalue -# 1353| getStmt(): [BlockStmt] { ... } -# 1354| getStmt(0): [DeclStmt] declaration -# 1354| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x445 -# 1354| Type = [Struct] String -# 1354| getVariable().getInitializer(): [Initializer] initializer for x445 -# 1354| getExpr(): [ConstructorCall] call to String -# 1354| Type = [VoidType] void -# 1354| ValueCategory = prvalue -# 1355| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1355| Type = [VoidType] void -# 1355| ValueCategory = prvalue -# 1355| getQualifier(): [VariableAccess] x445 -# 1355| Type = [Struct] String -# 1355| ValueCategory = lvalue -# 1355| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1355| Conversion = [BoolConversion] conversion to bool -# 1355| Type = [BoolType] bool -# 1355| Value = [CStyleCast] 0 -# 1355| ValueCategory = prvalue -# 1356| getStmt(446): [DoStmt] do (...) ... -# 1358| getCondition(): [Literal] 0 -# 1358| Type = [IntType] int -# 1358| Value = [Literal] 0 -# 1358| ValueCategory = prvalue -# 1356| getStmt(): [BlockStmt] { ... } -# 1357| getStmt(0): [DeclStmt] declaration -# 1357| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x446 -# 1357| Type = [Struct] String -# 1357| getVariable().getInitializer(): [Initializer] initializer for x446 -# 1357| getExpr(): [ConstructorCall] call to String -# 1357| Type = [VoidType] void -# 1357| ValueCategory = prvalue -# 1358| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1358| Type = [VoidType] void -# 1358| ValueCategory = prvalue -# 1358| getQualifier(): [VariableAccess] x446 -# 1358| Type = [Struct] String -# 1358| ValueCategory = lvalue -# 1358| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1358| Conversion = [BoolConversion] conversion to bool -# 1358| Type = [BoolType] bool -# 1358| Value = [CStyleCast] 0 -# 1358| ValueCategory = prvalue -# 1359| getStmt(447): [DoStmt] do (...) ... -# 1361| getCondition(): [Literal] 0 -# 1361| Type = [IntType] int -# 1361| Value = [Literal] 0 -# 1361| ValueCategory = prvalue -# 1359| getStmt(): [BlockStmt] { ... } -# 1360| getStmt(0): [DeclStmt] declaration -# 1360| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x447 -# 1360| Type = [Struct] String -# 1360| getVariable().getInitializer(): [Initializer] initializer for x447 -# 1360| getExpr(): [ConstructorCall] call to String -# 1360| Type = [VoidType] void -# 1360| ValueCategory = prvalue -# 1361| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1361| Type = [VoidType] void -# 1361| ValueCategory = prvalue -# 1361| getQualifier(): [VariableAccess] x447 -# 1361| Type = [Struct] String -# 1361| ValueCategory = lvalue -# 1361| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1361| Conversion = [BoolConversion] conversion to bool -# 1361| Type = [BoolType] bool -# 1361| Value = [CStyleCast] 0 -# 1361| ValueCategory = prvalue -# 1362| getStmt(448): [DoStmt] do (...) ... -# 1364| getCondition(): [Literal] 0 -# 1364| Type = [IntType] int -# 1364| Value = [Literal] 0 -# 1364| ValueCategory = prvalue -# 1362| getStmt(): [BlockStmt] { ... } -# 1363| getStmt(0): [DeclStmt] declaration -# 1363| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x448 -# 1363| Type = [Struct] String -# 1363| getVariable().getInitializer(): [Initializer] initializer for x448 -# 1363| getExpr(): [ConstructorCall] call to String -# 1363| Type = [VoidType] void -# 1363| ValueCategory = prvalue -# 1364| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1364| Type = [VoidType] void -# 1364| ValueCategory = prvalue -# 1364| getQualifier(): [VariableAccess] x448 -# 1364| Type = [Struct] String -# 1364| ValueCategory = lvalue -# 1364| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1364| Conversion = [BoolConversion] conversion to bool -# 1364| Type = [BoolType] bool -# 1364| Value = [CStyleCast] 0 -# 1364| ValueCategory = prvalue -# 1365| getStmt(449): [DoStmt] do (...) ... -# 1367| getCondition(): [Literal] 0 -# 1367| Type = [IntType] int -# 1367| Value = [Literal] 0 -# 1367| ValueCategory = prvalue -# 1365| getStmt(): [BlockStmt] { ... } -# 1366| getStmt(0): [DeclStmt] declaration -# 1366| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x449 -# 1366| Type = [Struct] String -# 1366| getVariable().getInitializer(): [Initializer] initializer for x449 -# 1366| getExpr(): [ConstructorCall] call to String -# 1366| Type = [VoidType] void -# 1366| ValueCategory = prvalue -# 1367| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1367| Type = [VoidType] void -# 1367| ValueCategory = prvalue -# 1367| getQualifier(): [VariableAccess] x449 -# 1367| Type = [Struct] String -# 1367| ValueCategory = lvalue -# 1367| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1367| Conversion = [BoolConversion] conversion to bool -# 1367| Type = [BoolType] bool -# 1367| Value = [CStyleCast] 0 -# 1367| ValueCategory = prvalue -# 1368| getStmt(450): [DoStmt] do (...) ... -# 1370| getCondition(): [Literal] 0 -# 1370| Type = [IntType] int -# 1370| Value = [Literal] 0 -# 1370| ValueCategory = prvalue -# 1368| getStmt(): [BlockStmt] { ... } -# 1369| getStmt(0): [DeclStmt] declaration -# 1369| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x450 -# 1369| Type = [Struct] String -# 1369| getVariable().getInitializer(): [Initializer] initializer for x450 -# 1369| getExpr(): [ConstructorCall] call to String -# 1369| Type = [VoidType] void -# 1369| ValueCategory = prvalue -# 1370| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1370| Type = [VoidType] void -# 1370| ValueCategory = prvalue -# 1370| getQualifier(): [VariableAccess] x450 -# 1370| Type = [Struct] String -# 1370| ValueCategory = lvalue -# 1370| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1370| Conversion = [BoolConversion] conversion to bool -# 1370| Type = [BoolType] bool -# 1370| Value = [CStyleCast] 0 -# 1370| ValueCategory = prvalue -# 1371| getStmt(451): [DoStmt] do (...) ... -# 1373| getCondition(): [Literal] 0 -# 1373| Type = [IntType] int -# 1373| Value = [Literal] 0 -# 1373| ValueCategory = prvalue -# 1371| getStmt(): [BlockStmt] { ... } -# 1372| getStmt(0): [DeclStmt] declaration -# 1372| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x451 -# 1372| Type = [Struct] String -# 1372| getVariable().getInitializer(): [Initializer] initializer for x451 -# 1372| getExpr(): [ConstructorCall] call to String -# 1372| Type = [VoidType] void -# 1372| ValueCategory = prvalue -# 1373| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1373| Type = [VoidType] void -# 1373| ValueCategory = prvalue -# 1373| getQualifier(): [VariableAccess] x451 -# 1373| Type = [Struct] String -# 1373| ValueCategory = lvalue -# 1373| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1373| Conversion = [BoolConversion] conversion to bool -# 1373| Type = [BoolType] bool -# 1373| Value = [CStyleCast] 0 -# 1373| ValueCategory = prvalue -# 1374| getStmt(452): [DoStmt] do (...) ... -# 1376| getCondition(): [Literal] 0 -# 1376| Type = [IntType] int -# 1376| Value = [Literal] 0 -# 1376| ValueCategory = prvalue -# 1374| getStmt(): [BlockStmt] { ... } -# 1375| getStmt(0): [DeclStmt] declaration -# 1375| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x452 -# 1375| Type = [Struct] String -# 1375| getVariable().getInitializer(): [Initializer] initializer for x452 -# 1375| getExpr(): [ConstructorCall] call to String -# 1375| Type = [VoidType] void -# 1375| ValueCategory = prvalue -# 1376| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1376| Type = [VoidType] void -# 1376| ValueCategory = prvalue -# 1376| getQualifier(): [VariableAccess] x452 -# 1376| Type = [Struct] String -# 1376| ValueCategory = lvalue -# 1376| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1376| Conversion = [BoolConversion] conversion to bool -# 1376| Type = [BoolType] bool -# 1376| Value = [CStyleCast] 0 -# 1376| ValueCategory = prvalue -# 1377| getStmt(453): [DoStmt] do (...) ... -# 1379| getCondition(): [Literal] 0 -# 1379| Type = [IntType] int -# 1379| Value = [Literal] 0 -# 1379| ValueCategory = prvalue -# 1377| getStmt(): [BlockStmt] { ... } -# 1378| getStmt(0): [DeclStmt] declaration -# 1378| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x453 -# 1378| Type = [Struct] String -# 1378| getVariable().getInitializer(): [Initializer] initializer for x453 -# 1378| getExpr(): [ConstructorCall] call to String -# 1378| Type = [VoidType] void -# 1378| ValueCategory = prvalue -# 1379| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1379| Type = [VoidType] void -# 1379| ValueCategory = prvalue -# 1379| getQualifier(): [VariableAccess] x453 -# 1379| Type = [Struct] String -# 1379| ValueCategory = lvalue -# 1379| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1379| Conversion = [BoolConversion] conversion to bool -# 1379| Type = [BoolType] bool -# 1379| Value = [CStyleCast] 0 -# 1379| ValueCategory = prvalue -# 1380| getStmt(454): [DoStmt] do (...) ... -# 1382| getCondition(): [Literal] 0 -# 1382| Type = [IntType] int -# 1382| Value = [Literal] 0 -# 1382| ValueCategory = prvalue -# 1380| getStmt(): [BlockStmt] { ... } -# 1381| getStmt(0): [DeclStmt] declaration -# 1381| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x454 -# 1381| Type = [Struct] String -# 1381| getVariable().getInitializer(): [Initializer] initializer for x454 -# 1381| getExpr(): [ConstructorCall] call to String -# 1381| Type = [VoidType] void -# 1381| ValueCategory = prvalue -# 1382| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1382| Type = [VoidType] void -# 1382| ValueCategory = prvalue -# 1382| getQualifier(): [VariableAccess] x454 -# 1382| Type = [Struct] String -# 1382| ValueCategory = lvalue -# 1382| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1382| Conversion = [BoolConversion] conversion to bool -# 1382| Type = [BoolType] bool -# 1382| Value = [CStyleCast] 0 -# 1382| ValueCategory = prvalue -# 1383| getStmt(455): [DoStmt] do (...) ... -# 1385| getCondition(): [Literal] 0 -# 1385| Type = [IntType] int -# 1385| Value = [Literal] 0 -# 1385| ValueCategory = prvalue -# 1383| getStmt(): [BlockStmt] { ... } -# 1384| getStmt(0): [DeclStmt] declaration -# 1384| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x455 -# 1384| Type = [Struct] String -# 1384| getVariable().getInitializer(): [Initializer] initializer for x455 -# 1384| getExpr(): [ConstructorCall] call to String -# 1384| Type = [VoidType] void -# 1384| ValueCategory = prvalue -# 1385| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1385| Type = [VoidType] void -# 1385| ValueCategory = prvalue -# 1385| getQualifier(): [VariableAccess] x455 -# 1385| Type = [Struct] String -# 1385| ValueCategory = lvalue -# 1385| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1385| Conversion = [BoolConversion] conversion to bool -# 1385| Type = [BoolType] bool -# 1385| Value = [CStyleCast] 0 -# 1385| ValueCategory = prvalue -# 1386| getStmt(456): [DoStmt] do (...) ... -# 1388| getCondition(): [Literal] 0 -# 1388| Type = [IntType] int -# 1388| Value = [Literal] 0 -# 1388| ValueCategory = prvalue -# 1386| getStmt(): [BlockStmt] { ... } -# 1387| getStmt(0): [DeclStmt] declaration -# 1387| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x456 -# 1387| Type = [Struct] String -# 1387| getVariable().getInitializer(): [Initializer] initializer for x456 -# 1387| getExpr(): [ConstructorCall] call to String -# 1387| Type = [VoidType] void -# 1387| ValueCategory = prvalue -# 1388| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1388| Type = [VoidType] void -# 1388| ValueCategory = prvalue -# 1388| getQualifier(): [VariableAccess] x456 -# 1388| Type = [Struct] String -# 1388| ValueCategory = lvalue -# 1388| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1388| Conversion = [BoolConversion] conversion to bool -# 1388| Type = [BoolType] bool -# 1388| Value = [CStyleCast] 0 -# 1388| ValueCategory = prvalue -# 1389| getStmt(457): [DoStmt] do (...) ... -# 1391| getCondition(): [Literal] 0 -# 1391| Type = [IntType] int -# 1391| Value = [Literal] 0 -# 1391| ValueCategory = prvalue -# 1389| getStmt(): [BlockStmt] { ... } -# 1390| getStmt(0): [DeclStmt] declaration -# 1390| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x457 -# 1390| Type = [Struct] String -# 1390| getVariable().getInitializer(): [Initializer] initializer for x457 -# 1390| getExpr(): [ConstructorCall] call to String -# 1390| Type = [VoidType] void -# 1390| ValueCategory = prvalue -# 1391| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1391| Type = [VoidType] void -# 1391| ValueCategory = prvalue -# 1391| getQualifier(): [VariableAccess] x457 -# 1391| Type = [Struct] String -# 1391| ValueCategory = lvalue -# 1391| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1391| Conversion = [BoolConversion] conversion to bool -# 1391| Type = [BoolType] bool -# 1391| Value = [CStyleCast] 0 -# 1391| ValueCategory = prvalue -# 1392| getStmt(458): [DoStmt] do (...) ... -# 1394| getCondition(): [Literal] 0 -# 1394| Type = [IntType] int -# 1394| Value = [Literal] 0 -# 1394| ValueCategory = prvalue -# 1392| getStmt(): [BlockStmt] { ... } -# 1393| getStmt(0): [DeclStmt] declaration -# 1393| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x458 -# 1393| Type = [Struct] String -# 1393| getVariable().getInitializer(): [Initializer] initializer for x458 -# 1393| getExpr(): [ConstructorCall] call to String -# 1393| Type = [VoidType] void -# 1393| ValueCategory = prvalue -# 1394| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1394| Type = [VoidType] void -# 1394| ValueCategory = prvalue -# 1394| getQualifier(): [VariableAccess] x458 -# 1394| Type = [Struct] String -# 1394| ValueCategory = lvalue -# 1394| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1394| Conversion = [BoolConversion] conversion to bool -# 1394| Type = [BoolType] bool -# 1394| Value = [CStyleCast] 0 -# 1394| ValueCategory = prvalue -# 1395| getStmt(459): [DoStmt] do (...) ... -# 1397| getCondition(): [Literal] 0 -# 1397| Type = [IntType] int -# 1397| Value = [Literal] 0 -# 1397| ValueCategory = prvalue -# 1395| getStmt(): [BlockStmt] { ... } -# 1396| getStmt(0): [DeclStmt] declaration -# 1396| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x459 -# 1396| Type = [Struct] String -# 1396| getVariable().getInitializer(): [Initializer] initializer for x459 -# 1396| getExpr(): [ConstructorCall] call to String -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1397| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1397| Type = [VoidType] void -# 1397| ValueCategory = prvalue -# 1397| getQualifier(): [VariableAccess] x459 -# 1397| Type = [Struct] String -# 1397| ValueCategory = lvalue -# 1397| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1397| Conversion = [BoolConversion] conversion to bool -# 1397| Type = [BoolType] bool -# 1397| Value = [CStyleCast] 0 -# 1397| ValueCategory = prvalue -# 1398| getStmt(460): [DoStmt] do (...) ... -# 1400| getCondition(): [Literal] 0 -# 1400| Type = [IntType] int -# 1400| Value = [Literal] 0 -# 1400| ValueCategory = prvalue -# 1398| getStmt(): [BlockStmt] { ... } -# 1399| getStmt(0): [DeclStmt] declaration -# 1399| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x460 -# 1399| Type = [Struct] String -# 1399| getVariable().getInitializer(): [Initializer] initializer for x460 -# 1399| getExpr(): [ConstructorCall] call to String -# 1399| Type = [VoidType] void -# 1399| ValueCategory = prvalue -# 1400| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1400| Type = [VoidType] void -# 1400| ValueCategory = prvalue -# 1400| getQualifier(): [VariableAccess] x460 -# 1400| Type = [Struct] String -# 1400| ValueCategory = lvalue -# 1400| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1400| Conversion = [BoolConversion] conversion to bool -# 1400| Type = [BoolType] bool -# 1400| Value = [CStyleCast] 0 -# 1400| ValueCategory = prvalue -# 1401| getStmt(461): [DoStmt] do (...) ... -# 1403| getCondition(): [Literal] 0 -# 1403| Type = [IntType] int -# 1403| Value = [Literal] 0 -# 1403| ValueCategory = prvalue -# 1401| getStmt(): [BlockStmt] { ... } -# 1402| getStmt(0): [DeclStmt] declaration -# 1402| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x461 -# 1402| Type = [Struct] String -# 1402| getVariable().getInitializer(): [Initializer] initializer for x461 -# 1402| getExpr(): [ConstructorCall] call to String -# 1402| Type = [VoidType] void -# 1402| ValueCategory = prvalue -# 1403| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1403| Type = [VoidType] void -# 1403| ValueCategory = prvalue -# 1403| getQualifier(): [VariableAccess] x461 -# 1403| Type = [Struct] String -# 1403| ValueCategory = lvalue -# 1403| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1403| Conversion = [BoolConversion] conversion to bool -# 1403| Type = [BoolType] bool -# 1403| Value = [CStyleCast] 0 -# 1403| ValueCategory = prvalue -# 1404| getStmt(462): [DoStmt] do (...) ... -# 1406| getCondition(): [Literal] 0 -# 1406| Type = [IntType] int -# 1406| Value = [Literal] 0 -# 1406| ValueCategory = prvalue -# 1404| getStmt(): [BlockStmt] { ... } -# 1405| getStmt(0): [DeclStmt] declaration -# 1405| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x462 -# 1405| Type = [Struct] String -# 1405| getVariable().getInitializer(): [Initializer] initializer for x462 -# 1405| getExpr(): [ConstructorCall] call to String -# 1405| Type = [VoidType] void -# 1405| ValueCategory = prvalue -# 1406| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1406| Type = [VoidType] void -# 1406| ValueCategory = prvalue -# 1406| getQualifier(): [VariableAccess] x462 -# 1406| Type = [Struct] String -# 1406| ValueCategory = lvalue -# 1406| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1406| Conversion = [BoolConversion] conversion to bool -# 1406| Type = [BoolType] bool -# 1406| Value = [CStyleCast] 0 -# 1406| ValueCategory = prvalue -# 1407| getStmt(463): [DoStmt] do (...) ... -# 1409| getCondition(): [Literal] 0 -# 1409| Type = [IntType] int -# 1409| Value = [Literal] 0 -# 1409| ValueCategory = prvalue -# 1407| getStmt(): [BlockStmt] { ... } -# 1408| getStmt(0): [DeclStmt] declaration -# 1408| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x463 -# 1408| Type = [Struct] String -# 1408| getVariable().getInitializer(): [Initializer] initializer for x463 -# 1408| getExpr(): [ConstructorCall] call to String -# 1408| Type = [VoidType] void -# 1408| ValueCategory = prvalue -# 1409| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1409| Type = [VoidType] void -# 1409| ValueCategory = prvalue -# 1409| getQualifier(): [VariableAccess] x463 -# 1409| Type = [Struct] String -# 1409| ValueCategory = lvalue -# 1409| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1409| Conversion = [BoolConversion] conversion to bool -# 1409| Type = [BoolType] bool -# 1409| Value = [CStyleCast] 0 -# 1409| ValueCategory = prvalue -# 1410| getStmt(464): [DoStmt] do (...) ... -# 1412| getCondition(): [Literal] 0 -# 1412| Type = [IntType] int -# 1412| Value = [Literal] 0 -# 1412| ValueCategory = prvalue -# 1410| getStmt(): [BlockStmt] { ... } -# 1411| getStmt(0): [DeclStmt] declaration -# 1411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x464 -# 1411| Type = [Struct] String -# 1411| getVariable().getInitializer(): [Initializer] initializer for x464 -# 1411| getExpr(): [ConstructorCall] call to String -# 1411| Type = [VoidType] void -# 1411| ValueCategory = prvalue -# 1412| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1412| Type = [VoidType] void -# 1412| ValueCategory = prvalue -# 1412| getQualifier(): [VariableAccess] x464 -# 1412| Type = [Struct] String -# 1412| ValueCategory = lvalue -# 1412| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1412| Conversion = [BoolConversion] conversion to bool -# 1412| Type = [BoolType] bool -# 1412| Value = [CStyleCast] 0 -# 1412| ValueCategory = prvalue -# 1413| getStmt(465): [DoStmt] do (...) ... -# 1415| getCondition(): [Literal] 0 -# 1415| Type = [IntType] int -# 1415| Value = [Literal] 0 -# 1415| ValueCategory = prvalue -# 1413| getStmt(): [BlockStmt] { ... } -# 1414| getStmt(0): [DeclStmt] declaration -# 1414| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x465 -# 1414| Type = [Struct] String -# 1414| getVariable().getInitializer(): [Initializer] initializer for x465 -# 1414| getExpr(): [ConstructorCall] call to String -# 1414| Type = [VoidType] void -# 1414| ValueCategory = prvalue -# 1415| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1415| Type = [VoidType] void -# 1415| ValueCategory = prvalue -# 1415| getQualifier(): [VariableAccess] x465 -# 1415| Type = [Struct] String -# 1415| ValueCategory = lvalue -# 1415| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1415| Conversion = [BoolConversion] conversion to bool -# 1415| Type = [BoolType] bool -# 1415| Value = [CStyleCast] 0 -# 1415| ValueCategory = prvalue -# 1416| getStmt(466): [DoStmt] do (...) ... -# 1418| getCondition(): [Literal] 0 -# 1418| Type = [IntType] int -# 1418| Value = [Literal] 0 -# 1418| ValueCategory = prvalue -# 1416| getStmt(): [BlockStmt] { ... } -# 1417| getStmt(0): [DeclStmt] declaration -# 1417| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x466 -# 1417| Type = [Struct] String -# 1417| getVariable().getInitializer(): [Initializer] initializer for x466 -# 1417| getExpr(): [ConstructorCall] call to String -# 1417| Type = [VoidType] void -# 1417| ValueCategory = prvalue -# 1418| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1418| Type = [VoidType] void -# 1418| ValueCategory = prvalue -# 1418| getQualifier(): [VariableAccess] x466 -# 1418| Type = [Struct] String -# 1418| ValueCategory = lvalue -# 1418| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1418| Conversion = [BoolConversion] conversion to bool -# 1418| Type = [BoolType] bool -# 1418| Value = [CStyleCast] 0 -# 1418| ValueCategory = prvalue -# 1419| getStmt(467): [DoStmt] do (...) ... -# 1421| getCondition(): [Literal] 0 -# 1421| Type = [IntType] int -# 1421| Value = [Literal] 0 -# 1421| ValueCategory = prvalue -# 1419| getStmt(): [BlockStmt] { ... } -# 1420| getStmt(0): [DeclStmt] declaration -# 1420| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x467 -# 1420| Type = [Struct] String -# 1420| getVariable().getInitializer(): [Initializer] initializer for x467 -# 1420| getExpr(): [ConstructorCall] call to String -# 1420| Type = [VoidType] void -# 1420| ValueCategory = prvalue -# 1421| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1421| Type = [VoidType] void -# 1421| ValueCategory = prvalue -# 1421| getQualifier(): [VariableAccess] x467 -# 1421| Type = [Struct] String -# 1421| ValueCategory = lvalue -# 1421| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1421| Conversion = [BoolConversion] conversion to bool -# 1421| Type = [BoolType] bool -# 1421| Value = [CStyleCast] 0 -# 1421| ValueCategory = prvalue -# 1422| getStmt(468): [DoStmt] do (...) ... -# 1424| getCondition(): [Literal] 0 -# 1424| Type = [IntType] int -# 1424| Value = [Literal] 0 -# 1424| ValueCategory = prvalue -# 1422| getStmt(): [BlockStmt] { ... } -# 1423| getStmt(0): [DeclStmt] declaration -# 1423| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x468 -# 1423| Type = [Struct] String -# 1423| getVariable().getInitializer(): [Initializer] initializer for x468 -# 1423| getExpr(): [ConstructorCall] call to String -# 1423| Type = [VoidType] void -# 1423| ValueCategory = prvalue -# 1424| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1424| Type = [VoidType] void -# 1424| ValueCategory = prvalue -# 1424| getQualifier(): [VariableAccess] x468 -# 1424| Type = [Struct] String -# 1424| ValueCategory = lvalue -# 1424| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1424| Conversion = [BoolConversion] conversion to bool -# 1424| Type = [BoolType] bool -# 1424| Value = [CStyleCast] 0 -# 1424| ValueCategory = prvalue -# 1425| getStmt(469): [DoStmt] do (...) ... -# 1427| getCondition(): [Literal] 0 -# 1427| Type = [IntType] int -# 1427| Value = [Literal] 0 -# 1427| ValueCategory = prvalue -# 1425| getStmt(): [BlockStmt] { ... } -# 1426| getStmt(0): [DeclStmt] declaration -# 1426| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x469 -# 1426| Type = [Struct] String -# 1426| getVariable().getInitializer(): [Initializer] initializer for x469 -# 1426| getExpr(): [ConstructorCall] call to String -# 1426| Type = [VoidType] void -# 1426| ValueCategory = prvalue -# 1427| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1427| Type = [VoidType] void -# 1427| ValueCategory = prvalue -# 1427| getQualifier(): [VariableAccess] x469 -# 1427| Type = [Struct] String -# 1427| ValueCategory = lvalue -# 1427| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1427| Conversion = [BoolConversion] conversion to bool -# 1427| Type = [BoolType] bool -# 1427| Value = [CStyleCast] 0 -# 1427| ValueCategory = prvalue -# 1428| getStmt(470): [DoStmt] do (...) ... -# 1430| getCondition(): [Literal] 0 -# 1430| Type = [IntType] int -# 1430| Value = [Literal] 0 -# 1430| ValueCategory = prvalue -# 1428| getStmt(): [BlockStmt] { ... } -# 1429| getStmt(0): [DeclStmt] declaration -# 1429| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x470 -# 1429| Type = [Struct] String -# 1429| getVariable().getInitializer(): [Initializer] initializer for x470 -# 1429| getExpr(): [ConstructorCall] call to String -# 1429| Type = [VoidType] void -# 1429| ValueCategory = prvalue -# 1430| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1430| Type = [VoidType] void -# 1430| ValueCategory = prvalue -# 1430| getQualifier(): [VariableAccess] x470 -# 1430| Type = [Struct] String -# 1430| ValueCategory = lvalue -# 1430| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1430| Conversion = [BoolConversion] conversion to bool -# 1430| Type = [BoolType] bool -# 1430| Value = [CStyleCast] 0 -# 1430| ValueCategory = prvalue -# 1431| getStmt(471): [DoStmt] do (...) ... -# 1433| getCondition(): [Literal] 0 -# 1433| Type = [IntType] int -# 1433| Value = [Literal] 0 -# 1433| ValueCategory = prvalue -# 1431| getStmt(): [BlockStmt] { ... } -# 1432| getStmt(0): [DeclStmt] declaration -# 1432| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x471 -# 1432| Type = [Struct] String -# 1432| getVariable().getInitializer(): [Initializer] initializer for x471 -# 1432| getExpr(): [ConstructorCall] call to String -# 1432| Type = [VoidType] void -# 1432| ValueCategory = prvalue -# 1433| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1433| Type = [VoidType] void -# 1433| ValueCategory = prvalue -# 1433| getQualifier(): [VariableAccess] x471 -# 1433| Type = [Struct] String -# 1433| ValueCategory = lvalue -# 1433| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1433| Conversion = [BoolConversion] conversion to bool -# 1433| Type = [BoolType] bool -# 1433| Value = [CStyleCast] 0 -# 1433| ValueCategory = prvalue -# 1434| getStmt(472): [DoStmt] do (...) ... -# 1436| getCondition(): [Literal] 0 -# 1436| Type = [IntType] int -# 1436| Value = [Literal] 0 -# 1436| ValueCategory = prvalue -# 1434| getStmt(): [BlockStmt] { ... } -# 1435| getStmt(0): [DeclStmt] declaration -# 1435| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x472 -# 1435| Type = [Struct] String -# 1435| getVariable().getInitializer(): [Initializer] initializer for x472 -# 1435| getExpr(): [ConstructorCall] call to String -# 1435| Type = [VoidType] void -# 1435| ValueCategory = prvalue -# 1436| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1436| Type = [VoidType] void -# 1436| ValueCategory = prvalue -# 1436| getQualifier(): [VariableAccess] x472 -# 1436| Type = [Struct] String -# 1436| ValueCategory = lvalue -# 1436| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1436| Conversion = [BoolConversion] conversion to bool -# 1436| Type = [BoolType] bool -# 1436| Value = [CStyleCast] 0 -# 1436| ValueCategory = prvalue -# 1437| getStmt(473): [DoStmt] do (...) ... -# 1439| getCondition(): [Literal] 0 -# 1439| Type = [IntType] int -# 1439| Value = [Literal] 0 -# 1439| ValueCategory = prvalue -# 1437| getStmt(): [BlockStmt] { ... } -# 1438| getStmt(0): [DeclStmt] declaration -# 1438| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x473 -# 1438| Type = [Struct] String -# 1438| getVariable().getInitializer(): [Initializer] initializer for x473 -# 1438| getExpr(): [ConstructorCall] call to String -# 1438| Type = [VoidType] void -# 1438| ValueCategory = prvalue -# 1439| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1439| Type = [VoidType] void -# 1439| ValueCategory = prvalue -# 1439| getQualifier(): [VariableAccess] x473 -# 1439| Type = [Struct] String -# 1439| ValueCategory = lvalue -# 1439| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1439| Conversion = [BoolConversion] conversion to bool -# 1439| Type = [BoolType] bool -# 1439| Value = [CStyleCast] 0 -# 1439| ValueCategory = prvalue -# 1440| getStmt(474): [DoStmt] do (...) ... -# 1442| getCondition(): [Literal] 0 -# 1442| Type = [IntType] int -# 1442| Value = [Literal] 0 -# 1442| ValueCategory = prvalue -# 1440| getStmt(): [BlockStmt] { ... } -# 1441| getStmt(0): [DeclStmt] declaration -# 1441| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x474 -# 1441| Type = [Struct] String -# 1441| getVariable().getInitializer(): [Initializer] initializer for x474 -# 1441| getExpr(): [ConstructorCall] call to String -# 1441| Type = [VoidType] void -# 1441| ValueCategory = prvalue -# 1442| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1442| Type = [VoidType] void -# 1442| ValueCategory = prvalue -# 1442| getQualifier(): [VariableAccess] x474 -# 1442| Type = [Struct] String -# 1442| ValueCategory = lvalue -# 1442| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1442| Conversion = [BoolConversion] conversion to bool -# 1442| Type = [BoolType] bool -# 1442| Value = [CStyleCast] 0 -# 1442| ValueCategory = prvalue -# 1443| getStmt(475): [DoStmt] do (...) ... -# 1445| getCondition(): [Literal] 0 -# 1445| Type = [IntType] int -# 1445| Value = [Literal] 0 -# 1445| ValueCategory = prvalue -# 1443| getStmt(): [BlockStmt] { ... } -# 1444| getStmt(0): [DeclStmt] declaration -# 1444| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x475 -# 1444| Type = [Struct] String -# 1444| getVariable().getInitializer(): [Initializer] initializer for x475 -# 1444| getExpr(): [ConstructorCall] call to String -# 1444| Type = [VoidType] void -# 1444| ValueCategory = prvalue -# 1445| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1445| Type = [VoidType] void -# 1445| ValueCategory = prvalue -# 1445| getQualifier(): [VariableAccess] x475 -# 1445| Type = [Struct] String -# 1445| ValueCategory = lvalue -# 1445| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1445| Conversion = [BoolConversion] conversion to bool -# 1445| Type = [BoolType] bool -# 1445| Value = [CStyleCast] 0 -# 1445| ValueCategory = prvalue -# 1446| getStmt(476): [DoStmt] do (...) ... -# 1448| getCondition(): [Literal] 0 -# 1448| Type = [IntType] int -# 1448| Value = [Literal] 0 -# 1448| ValueCategory = prvalue -# 1446| getStmt(): [BlockStmt] { ... } -# 1447| getStmt(0): [DeclStmt] declaration -# 1447| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x476 -# 1447| Type = [Struct] String -# 1447| getVariable().getInitializer(): [Initializer] initializer for x476 -# 1447| getExpr(): [ConstructorCall] call to String -# 1447| Type = [VoidType] void -# 1447| ValueCategory = prvalue -# 1448| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1448| Type = [VoidType] void -# 1448| ValueCategory = prvalue -# 1448| getQualifier(): [VariableAccess] x476 -# 1448| Type = [Struct] String -# 1448| ValueCategory = lvalue -# 1448| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1448| Conversion = [BoolConversion] conversion to bool -# 1448| Type = [BoolType] bool -# 1448| Value = [CStyleCast] 0 -# 1448| ValueCategory = prvalue -# 1449| getStmt(477): [DoStmt] do (...) ... -# 1451| getCondition(): [Literal] 0 -# 1451| Type = [IntType] int -# 1451| Value = [Literal] 0 -# 1451| ValueCategory = prvalue -# 1449| getStmt(): [BlockStmt] { ... } -# 1450| getStmt(0): [DeclStmt] declaration -# 1450| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x477 -# 1450| Type = [Struct] String -# 1450| getVariable().getInitializer(): [Initializer] initializer for x477 -# 1450| getExpr(): [ConstructorCall] call to String -# 1450| Type = [VoidType] void -# 1450| ValueCategory = prvalue -# 1451| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1451| Type = [VoidType] void -# 1451| ValueCategory = prvalue -# 1451| getQualifier(): [VariableAccess] x477 -# 1451| Type = [Struct] String -# 1451| ValueCategory = lvalue -# 1451| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1451| Conversion = [BoolConversion] conversion to bool -# 1451| Type = [BoolType] bool -# 1451| Value = [CStyleCast] 0 -# 1451| ValueCategory = prvalue -# 1452| getStmt(478): [DoStmt] do (...) ... -# 1454| getCondition(): [Literal] 0 -# 1454| Type = [IntType] int -# 1454| Value = [Literal] 0 -# 1454| ValueCategory = prvalue -# 1452| getStmt(): [BlockStmt] { ... } -# 1453| getStmt(0): [DeclStmt] declaration -# 1453| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x478 -# 1453| Type = [Struct] String -# 1453| getVariable().getInitializer(): [Initializer] initializer for x478 -# 1453| getExpr(): [ConstructorCall] call to String -# 1453| Type = [VoidType] void -# 1453| ValueCategory = prvalue -# 1454| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1454| Type = [VoidType] void -# 1454| ValueCategory = prvalue -# 1454| getQualifier(): [VariableAccess] x478 -# 1454| Type = [Struct] String -# 1454| ValueCategory = lvalue -# 1454| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1454| Conversion = [BoolConversion] conversion to bool -# 1454| Type = [BoolType] bool -# 1454| Value = [CStyleCast] 0 -# 1454| ValueCategory = prvalue -# 1455| getStmt(479): [DoStmt] do (...) ... -# 1457| getCondition(): [Literal] 0 -# 1457| Type = [IntType] int -# 1457| Value = [Literal] 0 -# 1457| ValueCategory = prvalue -# 1455| getStmt(): [BlockStmt] { ... } -# 1456| getStmt(0): [DeclStmt] declaration -# 1456| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x479 -# 1456| Type = [Struct] String -# 1456| getVariable().getInitializer(): [Initializer] initializer for x479 -# 1456| getExpr(): [ConstructorCall] call to String -# 1456| Type = [VoidType] void -# 1456| ValueCategory = prvalue -# 1457| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1457| Type = [VoidType] void -# 1457| ValueCategory = prvalue -# 1457| getQualifier(): [VariableAccess] x479 -# 1457| Type = [Struct] String -# 1457| ValueCategory = lvalue -# 1457| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1457| Conversion = [BoolConversion] conversion to bool -# 1457| Type = [BoolType] bool -# 1457| Value = [CStyleCast] 0 -# 1457| ValueCategory = prvalue -# 1458| getStmt(480): [DoStmt] do (...) ... -# 1460| getCondition(): [Literal] 0 -# 1460| Type = [IntType] int -# 1460| Value = [Literal] 0 -# 1460| ValueCategory = prvalue -# 1458| getStmt(): [BlockStmt] { ... } -# 1459| getStmt(0): [DeclStmt] declaration -# 1459| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x480 -# 1459| Type = [Struct] String -# 1459| getVariable().getInitializer(): [Initializer] initializer for x480 -# 1459| getExpr(): [ConstructorCall] call to String -# 1459| Type = [VoidType] void -# 1459| ValueCategory = prvalue -# 1460| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1460| Type = [VoidType] void -# 1460| ValueCategory = prvalue -# 1460| getQualifier(): [VariableAccess] x480 -# 1460| Type = [Struct] String -# 1460| ValueCategory = lvalue -# 1460| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1460| Conversion = [BoolConversion] conversion to bool -# 1460| Type = [BoolType] bool -# 1460| Value = [CStyleCast] 0 -# 1460| ValueCategory = prvalue -# 1461| getStmt(481): [DoStmt] do (...) ... -# 1463| getCondition(): [Literal] 0 -# 1463| Type = [IntType] int -# 1463| Value = [Literal] 0 -# 1463| ValueCategory = prvalue -# 1461| getStmt(): [BlockStmt] { ... } -# 1462| getStmt(0): [DeclStmt] declaration -# 1462| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x481 -# 1462| Type = [Struct] String -# 1462| getVariable().getInitializer(): [Initializer] initializer for x481 -# 1462| getExpr(): [ConstructorCall] call to String -# 1462| Type = [VoidType] void -# 1462| ValueCategory = prvalue -# 1463| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1463| Type = [VoidType] void -# 1463| ValueCategory = prvalue -# 1463| getQualifier(): [VariableAccess] x481 -# 1463| Type = [Struct] String -# 1463| ValueCategory = lvalue -# 1463| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1463| Conversion = [BoolConversion] conversion to bool -# 1463| Type = [BoolType] bool -# 1463| Value = [CStyleCast] 0 -# 1463| ValueCategory = prvalue -# 1464| getStmt(482): [DoStmt] do (...) ... -# 1466| getCondition(): [Literal] 0 -# 1466| Type = [IntType] int -# 1466| Value = [Literal] 0 -# 1466| ValueCategory = prvalue -# 1464| getStmt(): [BlockStmt] { ... } -# 1465| getStmt(0): [DeclStmt] declaration -# 1465| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x482 -# 1465| Type = [Struct] String -# 1465| getVariable().getInitializer(): [Initializer] initializer for x482 -# 1465| getExpr(): [ConstructorCall] call to String -# 1465| Type = [VoidType] void -# 1465| ValueCategory = prvalue -# 1466| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1466| Type = [VoidType] void -# 1466| ValueCategory = prvalue -# 1466| getQualifier(): [VariableAccess] x482 -# 1466| Type = [Struct] String -# 1466| ValueCategory = lvalue -# 1466| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1466| Conversion = [BoolConversion] conversion to bool -# 1466| Type = [BoolType] bool -# 1466| Value = [CStyleCast] 0 -# 1466| ValueCategory = prvalue -# 1467| getStmt(483): [DoStmt] do (...) ... -# 1469| getCondition(): [Literal] 0 -# 1469| Type = [IntType] int -# 1469| Value = [Literal] 0 -# 1469| ValueCategory = prvalue -# 1467| getStmt(): [BlockStmt] { ... } -# 1468| getStmt(0): [DeclStmt] declaration -# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x483 -# 1468| Type = [Struct] String -# 1468| getVariable().getInitializer(): [Initializer] initializer for x483 -# 1468| getExpr(): [ConstructorCall] call to String -# 1468| Type = [VoidType] void -# 1468| ValueCategory = prvalue -# 1469| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1469| Type = [VoidType] void -# 1469| ValueCategory = prvalue -# 1469| getQualifier(): [VariableAccess] x483 -# 1469| Type = [Struct] String -# 1469| ValueCategory = lvalue -# 1469| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1469| Conversion = [BoolConversion] conversion to bool -# 1469| Type = [BoolType] bool -# 1469| Value = [CStyleCast] 0 -# 1469| ValueCategory = prvalue -# 1470| getStmt(484): [DoStmt] do (...) ... -# 1472| getCondition(): [Literal] 0 -# 1472| Type = [IntType] int -# 1472| Value = [Literal] 0 -# 1472| ValueCategory = prvalue -# 1470| getStmt(): [BlockStmt] { ... } -# 1471| getStmt(0): [DeclStmt] declaration -# 1471| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x484 -# 1471| Type = [Struct] String -# 1471| getVariable().getInitializer(): [Initializer] initializer for x484 -# 1471| getExpr(): [ConstructorCall] call to String -# 1471| Type = [VoidType] void -# 1471| ValueCategory = prvalue -# 1472| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1472| Type = [VoidType] void -# 1472| ValueCategory = prvalue -# 1472| getQualifier(): [VariableAccess] x484 -# 1472| Type = [Struct] String -# 1472| ValueCategory = lvalue -# 1472| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1472| Conversion = [BoolConversion] conversion to bool -# 1472| Type = [BoolType] bool -# 1472| Value = [CStyleCast] 0 -# 1472| ValueCategory = prvalue -# 1473| getStmt(485): [DoStmt] do (...) ... -# 1475| getCondition(): [Literal] 0 -# 1475| Type = [IntType] int -# 1475| Value = [Literal] 0 -# 1475| ValueCategory = prvalue -# 1473| getStmt(): [BlockStmt] { ... } -# 1474| getStmt(0): [DeclStmt] declaration -# 1474| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x485 -# 1474| Type = [Struct] String -# 1474| getVariable().getInitializer(): [Initializer] initializer for x485 -# 1474| getExpr(): [ConstructorCall] call to String -# 1474| Type = [VoidType] void -# 1474| ValueCategory = prvalue -# 1475| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1475| Type = [VoidType] void -# 1475| ValueCategory = prvalue -# 1475| getQualifier(): [VariableAccess] x485 -# 1475| Type = [Struct] String -# 1475| ValueCategory = lvalue -# 1475| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1475| Conversion = [BoolConversion] conversion to bool -# 1475| Type = [BoolType] bool -# 1475| Value = [CStyleCast] 0 -# 1475| ValueCategory = prvalue -# 1476| getStmt(486): [DoStmt] do (...) ... -# 1478| getCondition(): [Literal] 0 -# 1478| Type = [IntType] int -# 1478| Value = [Literal] 0 -# 1478| ValueCategory = prvalue -# 1476| getStmt(): [BlockStmt] { ... } -# 1477| getStmt(0): [DeclStmt] declaration -# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x486 -# 1477| Type = [Struct] String -# 1477| getVariable().getInitializer(): [Initializer] initializer for x486 -# 1477| getExpr(): [ConstructorCall] call to String -# 1477| Type = [VoidType] void -# 1477| ValueCategory = prvalue -# 1478| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1478| Type = [VoidType] void -# 1478| ValueCategory = prvalue -# 1478| getQualifier(): [VariableAccess] x486 -# 1478| Type = [Struct] String -# 1478| ValueCategory = lvalue -# 1478| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1478| Conversion = [BoolConversion] conversion to bool -# 1478| Type = [BoolType] bool -# 1478| Value = [CStyleCast] 0 -# 1478| ValueCategory = prvalue -# 1479| getStmt(487): [DoStmt] do (...) ... -# 1481| getCondition(): [Literal] 0 -# 1481| Type = [IntType] int -# 1481| Value = [Literal] 0 -# 1481| ValueCategory = prvalue -# 1479| getStmt(): [BlockStmt] { ... } -# 1480| getStmt(0): [DeclStmt] declaration -# 1480| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x487 -# 1480| Type = [Struct] String -# 1480| getVariable().getInitializer(): [Initializer] initializer for x487 -# 1480| getExpr(): [ConstructorCall] call to String -# 1480| Type = [VoidType] void -# 1480| ValueCategory = prvalue -# 1481| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1481| Type = [VoidType] void -# 1481| ValueCategory = prvalue -# 1481| getQualifier(): [VariableAccess] x487 -# 1481| Type = [Struct] String -# 1481| ValueCategory = lvalue -# 1481| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1481| Conversion = [BoolConversion] conversion to bool -# 1481| Type = [BoolType] bool -# 1481| Value = [CStyleCast] 0 -# 1481| ValueCategory = prvalue -# 1482| getStmt(488): [DoStmt] do (...) ... -# 1484| getCondition(): [Literal] 0 -# 1484| Type = [IntType] int -# 1484| Value = [Literal] 0 -# 1484| ValueCategory = prvalue -# 1482| getStmt(): [BlockStmt] { ... } -# 1483| getStmt(0): [DeclStmt] declaration -# 1483| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x488 -# 1483| Type = [Struct] String -# 1483| getVariable().getInitializer(): [Initializer] initializer for x488 -# 1483| getExpr(): [ConstructorCall] call to String -# 1483| Type = [VoidType] void -# 1483| ValueCategory = prvalue -# 1484| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1484| Type = [VoidType] void -# 1484| ValueCategory = prvalue -# 1484| getQualifier(): [VariableAccess] x488 -# 1484| Type = [Struct] String -# 1484| ValueCategory = lvalue -# 1484| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1484| Conversion = [BoolConversion] conversion to bool -# 1484| Type = [BoolType] bool -# 1484| Value = [CStyleCast] 0 -# 1484| ValueCategory = prvalue -# 1485| getStmt(489): [DoStmt] do (...) ... -# 1487| getCondition(): [Literal] 0 -# 1487| Type = [IntType] int -# 1487| Value = [Literal] 0 -# 1487| ValueCategory = prvalue -# 1485| getStmt(): [BlockStmt] { ... } -# 1486| getStmt(0): [DeclStmt] declaration -# 1486| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x489 -# 1486| Type = [Struct] String -# 1486| getVariable().getInitializer(): [Initializer] initializer for x489 -# 1486| getExpr(): [ConstructorCall] call to String -# 1486| Type = [VoidType] void -# 1486| ValueCategory = prvalue -# 1487| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1487| Type = [VoidType] void -# 1487| ValueCategory = prvalue -# 1487| getQualifier(): [VariableAccess] x489 -# 1487| Type = [Struct] String -# 1487| ValueCategory = lvalue -# 1487| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1487| Conversion = [BoolConversion] conversion to bool -# 1487| Type = [BoolType] bool -# 1487| Value = [CStyleCast] 0 -# 1487| ValueCategory = prvalue -# 1488| getStmt(490): [DoStmt] do (...) ... -# 1490| getCondition(): [Literal] 0 -# 1490| Type = [IntType] int -# 1490| Value = [Literal] 0 -# 1490| ValueCategory = prvalue -# 1488| getStmt(): [BlockStmt] { ... } -# 1489| getStmt(0): [DeclStmt] declaration -# 1489| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x490 -# 1489| Type = [Struct] String -# 1489| getVariable().getInitializer(): [Initializer] initializer for x490 -# 1489| getExpr(): [ConstructorCall] call to String -# 1489| Type = [VoidType] void -# 1489| ValueCategory = prvalue -# 1490| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1490| Type = [VoidType] void -# 1490| ValueCategory = prvalue -# 1490| getQualifier(): [VariableAccess] x490 -# 1490| Type = [Struct] String -# 1490| ValueCategory = lvalue -# 1490| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1490| Conversion = [BoolConversion] conversion to bool -# 1490| Type = [BoolType] bool -# 1490| Value = [CStyleCast] 0 -# 1490| ValueCategory = prvalue -# 1491| getStmt(491): [DoStmt] do (...) ... -# 1493| getCondition(): [Literal] 0 -# 1493| Type = [IntType] int -# 1493| Value = [Literal] 0 -# 1493| ValueCategory = prvalue -# 1491| getStmt(): [BlockStmt] { ... } -# 1492| getStmt(0): [DeclStmt] declaration -# 1492| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x491 -# 1492| Type = [Struct] String -# 1492| getVariable().getInitializer(): [Initializer] initializer for x491 -# 1492| getExpr(): [ConstructorCall] call to String -# 1492| Type = [VoidType] void -# 1492| ValueCategory = prvalue -# 1493| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1493| Type = [VoidType] void -# 1493| ValueCategory = prvalue -# 1493| getQualifier(): [VariableAccess] x491 -# 1493| Type = [Struct] String -# 1493| ValueCategory = lvalue -# 1493| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1493| Conversion = [BoolConversion] conversion to bool -# 1493| Type = [BoolType] bool -# 1493| Value = [CStyleCast] 0 -# 1493| ValueCategory = prvalue -# 1494| getStmt(492): [DoStmt] do (...) ... -# 1496| getCondition(): [Literal] 0 -# 1496| Type = [IntType] int -# 1496| Value = [Literal] 0 -# 1496| ValueCategory = prvalue -# 1494| getStmt(): [BlockStmt] { ... } -# 1495| getStmt(0): [DeclStmt] declaration -# 1495| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x492 -# 1495| Type = [Struct] String -# 1495| getVariable().getInitializer(): [Initializer] initializer for x492 -# 1495| getExpr(): [ConstructorCall] call to String -# 1495| Type = [VoidType] void -# 1495| ValueCategory = prvalue -# 1496| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1496| Type = [VoidType] void -# 1496| ValueCategory = prvalue -# 1496| getQualifier(): [VariableAccess] x492 -# 1496| Type = [Struct] String -# 1496| ValueCategory = lvalue -# 1496| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1496| Conversion = [BoolConversion] conversion to bool -# 1496| Type = [BoolType] bool -# 1496| Value = [CStyleCast] 0 -# 1496| ValueCategory = prvalue -# 1497| getStmt(493): [DoStmt] do (...) ... -# 1499| getCondition(): [Literal] 0 -# 1499| Type = [IntType] int -# 1499| Value = [Literal] 0 -# 1499| ValueCategory = prvalue -# 1497| getStmt(): [BlockStmt] { ... } -# 1498| getStmt(0): [DeclStmt] declaration -# 1498| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x493 -# 1498| Type = [Struct] String -# 1498| getVariable().getInitializer(): [Initializer] initializer for x493 -# 1498| getExpr(): [ConstructorCall] call to String -# 1498| Type = [VoidType] void -# 1498| ValueCategory = prvalue -# 1499| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1499| Type = [VoidType] void -# 1499| ValueCategory = prvalue -# 1499| getQualifier(): [VariableAccess] x493 -# 1499| Type = [Struct] String -# 1499| ValueCategory = lvalue -# 1499| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1499| Conversion = [BoolConversion] conversion to bool -# 1499| Type = [BoolType] bool -# 1499| Value = [CStyleCast] 0 -# 1499| ValueCategory = prvalue -# 1500| getStmt(494): [DoStmt] do (...) ... -# 1502| getCondition(): [Literal] 0 -# 1502| Type = [IntType] int -# 1502| Value = [Literal] 0 -# 1502| ValueCategory = prvalue -# 1500| getStmt(): [BlockStmt] { ... } -# 1501| getStmt(0): [DeclStmt] declaration -# 1501| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x494 -# 1501| Type = [Struct] String -# 1501| getVariable().getInitializer(): [Initializer] initializer for x494 -# 1501| getExpr(): [ConstructorCall] call to String -# 1501| Type = [VoidType] void -# 1501| ValueCategory = prvalue -# 1502| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1502| Type = [VoidType] void -# 1502| ValueCategory = prvalue -# 1502| getQualifier(): [VariableAccess] x494 -# 1502| Type = [Struct] String -# 1502| ValueCategory = lvalue -# 1502| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1502| Conversion = [BoolConversion] conversion to bool -# 1502| Type = [BoolType] bool -# 1502| Value = [CStyleCast] 0 -# 1502| ValueCategory = prvalue -# 1503| getStmt(495): [DoStmt] do (...) ... -# 1505| getCondition(): [Literal] 0 -# 1505| Type = [IntType] int -# 1505| Value = [Literal] 0 -# 1505| ValueCategory = prvalue -# 1503| getStmt(): [BlockStmt] { ... } -# 1504| getStmt(0): [DeclStmt] declaration -# 1504| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x495 -# 1504| Type = [Struct] String -# 1504| getVariable().getInitializer(): [Initializer] initializer for x495 -# 1504| getExpr(): [ConstructorCall] call to String -# 1504| Type = [VoidType] void -# 1504| ValueCategory = prvalue -# 1505| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1505| Type = [VoidType] void -# 1505| ValueCategory = prvalue -# 1505| getQualifier(): [VariableAccess] x495 -# 1505| Type = [Struct] String -# 1505| ValueCategory = lvalue -# 1505| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1505| Conversion = [BoolConversion] conversion to bool -# 1505| Type = [BoolType] bool -# 1505| Value = [CStyleCast] 0 -# 1505| ValueCategory = prvalue -# 1506| getStmt(496): [DoStmt] do (...) ... -# 1508| getCondition(): [Literal] 0 -# 1508| Type = [IntType] int -# 1508| Value = [Literal] 0 -# 1508| ValueCategory = prvalue -# 1506| getStmt(): [BlockStmt] { ... } -# 1507| getStmt(0): [DeclStmt] declaration -# 1507| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x496 -# 1507| Type = [Struct] String -# 1507| getVariable().getInitializer(): [Initializer] initializer for x496 -# 1507| getExpr(): [ConstructorCall] call to String -# 1507| Type = [VoidType] void -# 1507| ValueCategory = prvalue -# 1508| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1508| Type = [VoidType] void -# 1508| ValueCategory = prvalue -# 1508| getQualifier(): [VariableAccess] x496 -# 1508| Type = [Struct] String -# 1508| ValueCategory = lvalue -# 1508| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1508| Conversion = [BoolConversion] conversion to bool -# 1508| Type = [BoolType] bool -# 1508| Value = [CStyleCast] 0 -# 1508| ValueCategory = prvalue -# 1509| getStmt(497): [DoStmt] do (...) ... -# 1511| getCondition(): [Literal] 0 -# 1511| Type = [IntType] int -# 1511| Value = [Literal] 0 -# 1511| ValueCategory = prvalue -# 1509| getStmt(): [BlockStmt] { ... } -# 1510| getStmt(0): [DeclStmt] declaration -# 1510| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x497 -# 1510| Type = [Struct] String -# 1510| getVariable().getInitializer(): [Initializer] initializer for x497 -# 1510| getExpr(): [ConstructorCall] call to String -# 1510| Type = [VoidType] void -# 1510| ValueCategory = prvalue -# 1511| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1511| Type = [VoidType] void -# 1511| ValueCategory = prvalue -# 1511| getQualifier(): [VariableAccess] x497 -# 1511| Type = [Struct] String -# 1511| ValueCategory = lvalue -# 1511| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1511| Conversion = [BoolConversion] conversion to bool -# 1511| Type = [BoolType] bool -# 1511| Value = [CStyleCast] 0 -# 1511| ValueCategory = prvalue -# 1512| getStmt(498): [DoStmt] do (...) ... -# 1514| getCondition(): [Literal] 0 -# 1514| Type = [IntType] int -# 1514| Value = [Literal] 0 -# 1514| ValueCategory = prvalue -# 1512| getStmt(): [BlockStmt] { ... } -# 1513| getStmt(0): [DeclStmt] declaration -# 1513| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x498 -# 1513| Type = [Struct] String -# 1513| getVariable().getInitializer(): [Initializer] initializer for x498 -# 1513| getExpr(): [ConstructorCall] call to String -# 1513| Type = [VoidType] void -# 1513| ValueCategory = prvalue -# 1514| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1514| Type = [VoidType] void -# 1514| ValueCategory = prvalue -# 1514| getQualifier(): [VariableAccess] x498 -# 1514| Type = [Struct] String -# 1514| ValueCategory = lvalue -# 1514| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1514| Conversion = [BoolConversion] conversion to bool -# 1514| Type = [BoolType] bool -# 1514| Value = [CStyleCast] 0 -# 1514| ValueCategory = prvalue -# 1515| getStmt(499): [DoStmt] do (...) ... -# 1517| getCondition(): [Literal] 0 -# 1517| Type = [IntType] int -# 1517| Value = [Literal] 0 -# 1517| ValueCategory = prvalue -# 1515| getStmt(): [BlockStmt] { ... } -# 1516| getStmt(0): [DeclStmt] declaration -# 1516| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x499 -# 1516| Type = [Struct] String -# 1516| getVariable().getInitializer(): [Initializer] initializer for x499 -# 1516| getExpr(): [ConstructorCall] call to String -# 1516| Type = [VoidType] void -# 1516| ValueCategory = prvalue -# 1517| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1517| Type = [VoidType] void -# 1517| ValueCategory = prvalue -# 1517| getQualifier(): [VariableAccess] x499 -# 1517| Type = [Struct] String -# 1517| ValueCategory = lvalue -# 1517| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1517| Conversion = [BoolConversion] conversion to bool -# 1517| Type = [BoolType] bool -# 1517| Value = [CStyleCast] 0 -# 1517| ValueCategory = prvalue -# 1518| getStmt(500): [DoStmt] do (...) ... -# 1520| getCondition(): [Literal] 0 -# 1520| Type = [IntType] int -# 1520| Value = [Literal] 0 -# 1520| ValueCategory = prvalue -# 1518| getStmt(): [BlockStmt] { ... } -# 1519| getStmt(0): [DeclStmt] declaration -# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x500 -# 1519| Type = [Struct] String -# 1519| getVariable().getInitializer(): [Initializer] initializer for x500 -# 1519| getExpr(): [ConstructorCall] call to String -# 1519| Type = [VoidType] void -# 1519| ValueCategory = prvalue -# 1520| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1520| Type = [VoidType] void -# 1520| ValueCategory = prvalue -# 1520| getQualifier(): [VariableAccess] x500 -# 1520| Type = [Struct] String -# 1520| ValueCategory = lvalue -# 1520| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1520| Conversion = [BoolConversion] conversion to bool -# 1520| Type = [BoolType] bool -# 1520| Value = [CStyleCast] 0 -# 1520| ValueCategory = prvalue -# 1521| getStmt(501): [DoStmt] do (...) ... -# 1523| getCondition(): [Literal] 0 -# 1523| Type = [IntType] int -# 1523| Value = [Literal] 0 -# 1523| ValueCategory = prvalue -# 1521| getStmt(): [BlockStmt] { ... } -# 1522| getStmt(0): [DeclStmt] declaration -# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x501 -# 1522| Type = [Struct] String -# 1522| getVariable().getInitializer(): [Initializer] initializer for x501 -# 1522| getExpr(): [ConstructorCall] call to String -# 1522| Type = [VoidType] void -# 1522| ValueCategory = prvalue -# 1523| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1523| Type = [VoidType] void -# 1523| ValueCategory = prvalue -# 1523| getQualifier(): [VariableAccess] x501 -# 1523| Type = [Struct] String -# 1523| ValueCategory = lvalue -# 1523| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1523| Conversion = [BoolConversion] conversion to bool -# 1523| Type = [BoolType] bool -# 1523| Value = [CStyleCast] 0 -# 1523| ValueCategory = prvalue -# 1524| getStmt(502): [DoStmt] do (...) ... -# 1526| getCondition(): [Literal] 0 -# 1526| Type = [IntType] int -# 1526| Value = [Literal] 0 -# 1526| ValueCategory = prvalue -# 1524| getStmt(): [BlockStmt] { ... } -# 1525| getStmt(0): [DeclStmt] declaration -# 1525| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x502 -# 1525| Type = [Struct] String -# 1525| getVariable().getInitializer(): [Initializer] initializer for x502 -# 1525| getExpr(): [ConstructorCall] call to String -# 1525| Type = [VoidType] void -# 1525| ValueCategory = prvalue -# 1526| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1526| Type = [VoidType] void -# 1526| ValueCategory = prvalue -# 1526| getQualifier(): [VariableAccess] x502 -# 1526| Type = [Struct] String -# 1526| ValueCategory = lvalue -# 1526| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1526| Conversion = [BoolConversion] conversion to bool -# 1526| Type = [BoolType] bool -# 1526| Value = [CStyleCast] 0 -# 1526| ValueCategory = prvalue -# 1527| getStmt(503): [DoStmt] do (...) ... -# 1529| getCondition(): [Literal] 0 -# 1529| Type = [IntType] int -# 1529| Value = [Literal] 0 -# 1529| ValueCategory = prvalue -# 1527| getStmt(): [BlockStmt] { ... } -# 1528| getStmt(0): [DeclStmt] declaration -# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x503 -# 1528| Type = [Struct] String -# 1528| getVariable().getInitializer(): [Initializer] initializer for x503 -# 1528| getExpr(): [ConstructorCall] call to String -# 1528| Type = [VoidType] void -# 1528| ValueCategory = prvalue -# 1529| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1529| Type = [VoidType] void -# 1529| ValueCategory = prvalue -# 1529| getQualifier(): [VariableAccess] x503 -# 1529| Type = [Struct] String -# 1529| ValueCategory = lvalue -# 1529| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1529| Conversion = [BoolConversion] conversion to bool -# 1529| Type = [BoolType] bool -# 1529| Value = [CStyleCast] 0 -# 1529| ValueCategory = prvalue -# 1530| getStmt(504): [DoStmt] do (...) ... -# 1532| getCondition(): [Literal] 0 -# 1532| Type = [IntType] int -# 1532| Value = [Literal] 0 -# 1532| ValueCategory = prvalue -# 1530| getStmt(): [BlockStmt] { ... } -# 1531| getStmt(0): [DeclStmt] declaration -# 1531| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x504 -# 1531| Type = [Struct] String -# 1531| getVariable().getInitializer(): [Initializer] initializer for x504 -# 1531| getExpr(): [ConstructorCall] call to String -# 1531| Type = [VoidType] void -# 1531| ValueCategory = prvalue -# 1532| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1532| Type = [VoidType] void -# 1532| ValueCategory = prvalue -# 1532| getQualifier(): [VariableAccess] x504 -# 1532| Type = [Struct] String -# 1532| ValueCategory = lvalue -# 1532| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1532| Conversion = [BoolConversion] conversion to bool -# 1532| Type = [BoolType] bool -# 1532| Value = [CStyleCast] 0 -# 1532| ValueCategory = prvalue -# 1533| getStmt(505): [DoStmt] do (...) ... -# 1535| getCondition(): [Literal] 0 -# 1535| Type = [IntType] int -# 1535| Value = [Literal] 0 -# 1535| ValueCategory = prvalue -# 1533| getStmt(): [BlockStmt] { ... } -# 1534| getStmt(0): [DeclStmt] declaration -# 1534| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x505 -# 1534| Type = [Struct] String -# 1534| getVariable().getInitializer(): [Initializer] initializer for x505 -# 1534| getExpr(): [ConstructorCall] call to String -# 1534| Type = [VoidType] void -# 1534| ValueCategory = prvalue -# 1535| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1535| Type = [VoidType] void -# 1535| ValueCategory = prvalue -# 1535| getQualifier(): [VariableAccess] x505 -# 1535| Type = [Struct] String -# 1535| ValueCategory = lvalue -# 1535| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1535| Conversion = [BoolConversion] conversion to bool -# 1535| Type = [BoolType] bool -# 1535| Value = [CStyleCast] 0 -# 1535| ValueCategory = prvalue -# 1536| getStmt(506): [DoStmt] do (...) ... -# 1538| getCondition(): [Literal] 0 -# 1538| Type = [IntType] int -# 1538| Value = [Literal] 0 -# 1538| ValueCategory = prvalue -# 1536| getStmt(): [BlockStmt] { ... } -# 1537| getStmt(0): [DeclStmt] declaration -# 1537| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x506 -# 1537| Type = [Struct] String -# 1537| getVariable().getInitializer(): [Initializer] initializer for x506 -# 1537| getExpr(): [ConstructorCall] call to String -# 1537| Type = [VoidType] void -# 1537| ValueCategory = prvalue -# 1538| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1538| Type = [VoidType] void -# 1538| ValueCategory = prvalue -# 1538| getQualifier(): [VariableAccess] x506 -# 1538| Type = [Struct] String -# 1538| ValueCategory = lvalue -# 1538| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1538| Conversion = [BoolConversion] conversion to bool -# 1538| Type = [BoolType] bool -# 1538| Value = [CStyleCast] 0 -# 1538| ValueCategory = prvalue -# 1539| getStmt(507): [DoStmt] do (...) ... -# 1541| getCondition(): [Literal] 0 -# 1541| Type = [IntType] int -# 1541| Value = [Literal] 0 -# 1541| ValueCategory = prvalue -# 1539| getStmt(): [BlockStmt] { ... } -# 1540| getStmt(0): [DeclStmt] declaration -# 1540| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x507 -# 1540| Type = [Struct] String -# 1540| getVariable().getInitializer(): [Initializer] initializer for x507 -# 1540| getExpr(): [ConstructorCall] call to String -# 1540| Type = [VoidType] void -# 1540| ValueCategory = prvalue -# 1541| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1541| Type = [VoidType] void -# 1541| ValueCategory = prvalue -# 1541| getQualifier(): [VariableAccess] x507 -# 1541| Type = [Struct] String -# 1541| ValueCategory = lvalue -# 1541| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1541| Conversion = [BoolConversion] conversion to bool -# 1541| Type = [BoolType] bool -# 1541| Value = [CStyleCast] 0 -# 1541| ValueCategory = prvalue -# 1542| getStmt(508): [DoStmt] do (...) ... -# 1544| getCondition(): [Literal] 0 -# 1544| Type = [IntType] int -# 1544| Value = [Literal] 0 -# 1544| ValueCategory = prvalue -# 1542| getStmt(): [BlockStmt] { ... } -# 1543| getStmt(0): [DeclStmt] declaration -# 1543| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x508 -# 1543| Type = [Struct] String -# 1543| getVariable().getInitializer(): [Initializer] initializer for x508 -# 1543| getExpr(): [ConstructorCall] call to String -# 1543| Type = [VoidType] void -# 1543| ValueCategory = prvalue -# 1544| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1544| Type = [VoidType] void -# 1544| ValueCategory = prvalue -# 1544| getQualifier(): [VariableAccess] x508 -# 1544| Type = [Struct] String -# 1544| ValueCategory = lvalue -# 1544| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1544| Conversion = [BoolConversion] conversion to bool -# 1544| Type = [BoolType] bool -# 1544| Value = [CStyleCast] 0 -# 1544| ValueCategory = prvalue -# 1545| getStmt(509): [DoStmt] do (...) ... -# 1547| getCondition(): [Literal] 0 -# 1547| Type = [IntType] int -# 1547| Value = [Literal] 0 -# 1547| ValueCategory = prvalue -# 1545| getStmt(): [BlockStmt] { ... } -# 1546| getStmt(0): [DeclStmt] declaration -# 1546| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x509 -# 1546| Type = [Struct] String -# 1546| getVariable().getInitializer(): [Initializer] initializer for x509 -# 1546| getExpr(): [ConstructorCall] call to String -# 1546| Type = [VoidType] void -# 1546| ValueCategory = prvalue -# 1547| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1547| Type = [VoidType] void -# 1547| ValueCategory = prvalue -# 1547| getQualifier(): [VariableAccess] x509 -# 1547| Type = [Struct] String -# 1547| ValueCategory = lvalue -# 1547| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1547| Conversion = [BoolConversion] conversion to bool -# 1547| Type = [BoolType] bool -# 1547| Value = [CStyleCast] 0 -# 1547| ValueCategory = prvalue -# 1548| getStmt(510): [DoStmt] do (...) ... -# 1550| getCondition(): [Literal] 0 -# 1550| Type = [IntType] int -# 1550| Value = [Literal] 0 -# 1550| ValueCategory = prvalue -# 1548| getStmt(): [BlockStmt] { ... } -# 1549| getStmt(0): [DeclStmt] declaration -# 1549| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x510 -# 1549| Type = [Struct] String -# 1549| getVariable().getInitializer(): [Initializer] initializer for x510 -# 1549| getExpr(): [ConstructorCall] call to String -# 1549| Type = [VoidType] void -# 1549| ValueCategory = prvalue -# 1550| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1550| Type = [VoidType] void -# 1550| ValueCategory = prvalue -# 1550| getQualifier(): [VariableAccess] x510 -# 1550| Type = [Struct] String -# 1550| ValueCategory = lvalue -# 1550| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1550| Conversion = [BoolConversion] conversion to bool -# 1550| Type = [BoolType] bool -# 1550| Value = [CStyleCast] 0 -# 1550| ValueCategory = prvalue -# 1551| getStmt(511): [DoStmt] do (...) ... -# 1553| getCondition(): [Literal] 0 -# 1553| Type = [IntType] int -# 1553| Value = [Literal] 0 -# 1553| ValueCategory = prvalue -# 1551| getStmt(): [BlockStmt] { ... } -# 1552| getStmt(0): [DeclStmt] declaration -# 1552| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x511 -# 1552| Type = [Struct] String -# 1552| getVariable().getInitializer(): [Initializer] initializer for x511 -# 1552| getExpr(): [ConstructorCall] call to String -# 1552| Type = [VoidType] void -# 1552| ValueCategory = prvalue -# 1553| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1553| Type = [VoidType] void -# 1553| ValueCategory = prvalue -# 1553| getQualifier(): [VariableAccess] x511 -# 1553| Type = [Struct] String -# 1553| ValueCategory = lvalue -# 1553| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1553| Conversion = [BoolConversion] conversion to bool -# 1553| Type = [BoolType] bool -# 1553| Value = [CStyleCast] 0 -# 1553| ValueCategory = prvalue -# 1554| getStmt(512): [DoStmt] do (...) ... -# 1556| getCondition(): [Literal] 0 -# 1556| Type = [IntType] int -# 1556| Value = [Literal] 0 -# 1556| ValueCategory = prvalue -# 1554| getStmt(): [BlockStmt] { ... } -# 1555| getStmt(0): [DeclStmt] declaration -# 1555| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x512 -# 1555| Type = [Struct] String -# 1555| getVariable().getInitializer(): [Initializer] initializer for x512 -# 1555| getExpr(): [ConstructorCall] call to String -# 1555| Type = [VoidType] void -# 1555| ValueCategory = prvalue -# 1556| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1556| Type = [VoidType] void -# 1556| ValueCategory = prvalue -# 1556| getQualifier(): [VariableAccess] x512 -# 1556| Type = [Struct] String -# 1556| ValueCategory = lvalue -# 1556| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1556| Conversion = [BoolConversion] conversion to bool -# 1556| Type = [BoolType] bool -# 1556| Value = [CStyleCast] 0 -# 1556| ValueCategory = prvalue -# 1557| getStmt(513): [DoStmt] do (...) ... -# 1559| getCondition(): [Literal] 0 -# 1559| Type = [IntType] int -# 1559| Value = [Literal] 0 -# 1559| ValueCategory = prvalue -# 1557| getStmt(): [BlockStmt] { ... } -# 1558| getStmt(0): [DeclStmt] declaration -# 1558| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x513 -# 1558| Type = [Struct] String -# 1558| getVariable().getInitializer(): [Initializer] initializer for x513 -# 1558| getExpr(): [ConstructorCall] call to String -# 1558| Type = [VoidType] void -# 1558| ValueCategory = prvalue -# 1559| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1559| Type = [VoidType] void -# 1559| ValueCategory = prvalue -# 1559| getQualifier(): [VariableAccess] x513 -# 1559| Type = [Struct] String -# 1559| ValueCategory = lvalue -# 1559| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1559| Conversion = [BoolConversion] conversion to bool -# 1559| Type = [BoolType] bool -# 1559| Value = [CStyleCast] 0 -# 1559| ValueCategory = prvalue -# 1560| getStmt(514): [DoStmt] do (...) ... -# 1562| getCondition(): [Literal] 0 -# 1562| Type = [IntType] int -# 1562| Value = [Literal] 0 -# 1562| ValueCategory = prvalue -# 1560| getStmt(): [BlockStmt] { ... } -# 1561| getStmt(0): [DeclStmt] declaration -# 1561| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x514 -# 1561| Type = [Struct] String -# 1561| getVariable().getInitializer(): [Initializer] initializer for x514 -# 1561| getExpr(): [ConstructorCall] call to String -# 1561| Type = [VoidType] void -# 1561| ValueCategory = prvalue -# 1562| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1562| Type = [VoidType] void -# 1562| ValueCategory = prvalue -# 1562| getQualifier(): [VariableAccess] x514 -# 1562| Type = [Struct] String -# 1562| ValueCategory = lvalue -# 1562| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1562| Conversion = [BoolConversion] conversion to bool -# 1562| Type = [BoolType] bool -# 1562| Value = [CStyleCast] 0 -# 1562| ValueCategory = prvalue -# 1563| getStmt(515): [DoStmt] do (...) ... -# 1565| getCondition(): [Literal] 0 -# 1565| Type = [IntType] int -# 1565| Value = [Literal] 0 -# 1565| ValueCategory = prvalue -# 1563| getStmt(): [BlockStmt] { ... } -# 1564| getStmt(0): [DeclStmt] declaration -# 1564| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x515 -# 1564| Type = [Struct] String -# 1564| getVariable().getInitializer(): [Initializer] initializer for x515 -# 1564| getExpr(): [ConstructorCall] call to String -# 1564| Type = [VoidType] void -# 1564| ValueCategory = prvalue -# 1565| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1565| Type = [VoidType] void -# 1565| ValueCategory = prvalue -# 1565| getQualifier(): [VariableAccess] x515 -# 1565| Type = [Struct] String -# 1565| ValueCategory = lvalue -# 1565| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1565| Conversion = [BoolConversion] conversion to bool -# 1565| Type = [BoolType] bool -# 1565| Value = [CStyleCast] 0 -# 1565| ValueCategory = prvalue -# 1566| getStmt(516): [DoStmt] do (...) ... -# 1568| getCondition(): [Literal] 0 -# 1568| Type = [IntType] int -# 1568| Value = [Literal] 0 -# 1568| ValueCategory = prvalue -# 1566| getStmt(): [BlockStmt] { ... } -# 1567| getStmt(0): [DeclStmt] declaration -# 1567| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x516 -# 1567| Type = [Struct] String -# 1567| getVariable().getInitializer(): [Initializer] initializer for x516 -# 1567| getExpr(): [ConstructorCall] call to String -# 1567| Type = [VoidType] void -# 1567| ValueCategory = prvalue -# 1568| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1568| Type = [VoidType] void -# 1568| ValueCategory = prvalue -# 1568| getQualifier(): [VariableAccess] x516 -# 1568| Type = [Struct] String -# 1568| ValueCategory = lvalue -# 1568| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1568| Conversion = [BoolConversion] conversion to bool -# 1568| Type = [BoolType] bool -# 1568| Value = [CStyleCast] 0 -# 1568| ValueCategory = prvalue -# 1569| getStmt(517): [DoStmt] do (...) ... -# 1571| getCondition(): [Literal] 0 -# 1571| Type = [IntType] int -# 1571| Value = [Literal] 0 -# 1571| ValueCategory = prvalue -# 1569| getStmt(): [BlockStmt] { ... } -# 1570| getStmt(0): [DeclStmt] declaration -# 1570| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x517 -# 1570| Type = [Struct] String -# 1570| getVariable().getInitializer(): [Initializer] initializer for x517 -# 1570| getExpr(): [ConstructorCall] call to String -# 1570| Type = [VoidType] void -# 1570| ValueCategory = prvalue -# 1571| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1571| Type = [VoidType] void -# 1571| ValueCategory = prvalue -# 1571| getQualifier(): [VariableAccess] x517 -# 1571| Type = [Struct] String -# 1571| ValueCategory = lvalue -# 1571| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1571| Conversion = [BoolConversion] conversion to bool -# 1571| Type = [BoolType] bool -# 1571| Value = [CStyleCast] 0 -# 1571| ValueCategory = prvalue -# 1572| getStmt(518): [DoStmt] do (...) ... -# 1574| getCondition(): [Literal] 0 -# 1574| Type = [IntType] int -# 1574| Value = [Literal] 0 -# 1574| ValueCategory = prvalue -# 1572| getStmt(): [BlockStmt] { ... } -# 1573| getStmt(0): [DeclStmt] declaration -# 1573| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x518 -# 1573| Type = [Struct] String -# 1573| getVariable().getInitializer(): [Initializer] initializer for x518 -# 1573| getExpr(): [ConstructorCall] call to String -# 1573| Type = [VoidType] void -# 1573| ValueCategory = prvalue -# 1574| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1574| Type = [VoidType] void -# 1574| ValueCategory = prvalue -# 1574| getQualifier(): [VariableAccess] x518 -# 1574| Type = [Struct] String -# 1574| ValueCategory = lvalue -# 1574| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1574| Conversion = [BoolConversion] conversion to bool -# 1574| Type = [BoolType] bool -# 1574| Value = [CStyleCast] 0 -# 1574| ValueCategory = prvalue -# 1575| getStmt(519): [DoStmt] do (...) ... -# 1577| getCondition(): [Literal] 0 -# 1577| Type = [IntType] int -# 1577| Value = [Literal] 0 -# 1577| ValueCategory = prvalue -# 1575| getStmt(): [BlockStmt] { ... } -# 1576| getStmt(0): [DeclStmt] declaration -# 1576| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x519 -# 1576| Type = [Struct] String -# 1576| getVariable().getInitializer(): [Initializer] initializer for x519 -# 1576| getExpr(): [ConstructorCall] call to String -# 1576| Type = [VoidType] void -# 1576| ValueCategory = prvalue -# 1577| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1577| Type = [VoidType] void -# 1577| ValueCategory = prvalue -# 1577| getQualifier(): [VariableAccess] x519 -# 1577| Type = [Struct] String -# 1577| ValueCategory = lvalue -# 1577| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1577| Conversion = [BoolConversion] conversion to bool -# 1577| Type = [BoolType] bool -# 1577| Value = [CStyleCast] 0 -# 1577| ValueCategory = prvalue -# 1578| getStmt(520): [DoStmt] do (...) ... -# 1580| getCondition(): [Literal] 0 -# 1580| Type = [IntType] int -# 1580| Value = [Literal] 0 -# 1580| ValueCategory = prvalue -# 1578| getStmt(): [BlockStmt] { ... } -# 1579| getStmt(0): [DeclStmt] declaration -# 1579| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x520 -# 1579| Type = [Struct] String -# 1579| getVariable().getInitializer(): [Initializer] initializer for x520 -# 1579| getExpr(): [ConstructorCall] call to String -# 1579| Type = [VoidType] void -# 1579| ValueCategory = prvalue -# 1580| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1580| Type = [VoidType] void -# 1580| ValueCategory = prvalue -# 1580| getQualifier(): [VariableAccess] x520 -# 1580| Type = [Struct] String -# 1580| ValueCategory = lvalue -# 1580| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1580| Conversion = [BoolConversion] conversion to bool -# 1580| Type = [BoolType] bool -# 1580| Value = [CStyleCast] 0 -# 1580| ValueCategory = prvalue -# 1581| getStmt(521): [DoStmt] do (...) ... -# 1583| getCondition(): [Literal] 0 -# 1583| Type = [IntType] int -# 1583| Value = [Literal] 0 -# 1583| ValueCategory = prvalue -# 1581| getStmt(): [BlockStmt] { ... } -# 1582| getStmt(0): [DeclStmt] declaration -# 1582| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x521 -# 1582| Type = [Struct] String -# 1582| getVariable().getInitializer(): [Initializer] initializer for x521 -# 1582| getExpr(): [ConstructorCall] call to String -# 1582| Type = [VoidType] void -# 1582| ValueCategory = prvalue -# 1583| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1583| Type = [VoidType] void -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] x521 -# 1583| Type = [Struct] String -# 1583| ValueCategory = lvalue -# 1583| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1583| Conversion = [BoolConversion] conversion to bool -# 1583| Type = [BoolType] bool -# 1583| Value = [CStyleCast] 0 -# 1583| ValueCategory = prvalue -# 1584| getStmt(522): [DoStmt] do (...) ... -# 1586| getCondition(): [Literal] 0 -# 1586| Type = [IntType] int -# 1586| Value = [Literal] 0 -# 1586| ValueCategory = prvalue -# 1584| getStmt(): [BlockStmt] { ... } -# 1585| getStmt(0): [DeclStmt] declaration -# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x522 -# 1585| Type = [Struct] String -# 1585| getVariable().getInitializer(): [Initializer] initializer for x522 -# 1585| getExpr(): [ConstructorCall] call to String -# 1585| Type = [VoidType] void -# 1585| ValueCategory = prvalue -# 1586| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1586| Type = [VoidType] void -# 1586| ValueCategory = prvalue -# 1586| getQualifier(): [VariableAccess] x522 -# 1586| Type = [Struct] String -# 1586| ValueCategory = lvalue -# 1586| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1586| Conversion = [BoolConversion] conversion to bool -# 1586| Type = [BoolType] bool -# 1586| Value = [CStyleCast] 0 -# 1586| ValueCategory = prvalue -# 1587| getStmt(523): [DoStmt] do (...) ... -# 1589| getCondition(): [Literal] 0 -# 1589| Type = [IntType] int -# 1589| Value = [Literal] 0 -# 1589| ValueCategory = prvalue -# 1587| getStmt(): [BlockStmt] { ... } -# 1588| getStmt(0): [DeclStmt] declaration -# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x523 -# 1588| Type = [Struct] String -# 1588| getVariable().getInitializer(): [Initializer] initializer for x523 -# 1588| getExpr(): [ConstructorCall] call to String -# 1588| Type = [VoidType] void -# 1588| ValueCategory = prvalue -# 1589| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1589| Type = [VoidType] void -# 1589| ValueCategory = prvalue -# 1589| getQualifier(): [VariableAccess] x523 -# 1589| Type = [Struct] String -# 1589| ValueCategory = lvalue -# 1589| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1589| Conversion = [BoolConversion] conversion to bool -# 1589| Type = [BoolType] bool -# 1589| Value = [CStyleCast] 0 -# 1589| ValueCategory = prvalue -# 1590| getStmt(524): [DoStmt] do (...) ... -# 1592| getCondition(): [Literal] 0 -# 1592| Type = [IntType] int -# 1592| Value = [Literal] 0 -# 1592| ValueCategory = prvalue -# 1590| getStmt(): [BlockStmt] { ... } -# 1591| getStmt(0): [DeclStmt] declaration -# 1591| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x524 -# 1591| Type = [Struct] String -# 1591| getVariable().getInitializer(): [Initializer] initializer for x524 -# 1591| getExpr(): [ConstructorCall] call to String -# 1591| Type = [VoidType] void -# 1591| ValueCategory = prvalue -# 1592| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1592| Type = [VoidType] void -# 1592| ValueCategory = prvalue -# 1592| getQualifier(): [VariableAccess] x524 -# 1592| Type = [Struct] String -# 1592| ValueCategory = lvalue -# 1592| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1592| Conversion = [BoolConversion] conversion to bool -# 1592| Type = [BoolType] bool -# 1592| Value = [CStyleCast] 0 -# 1592| ValueCategory = prvalue -# 1593| getStmt(525): [DoStmt] do (...) ... -# 1595| getCondition(): [Literal] 0 -# 1595| Type = [IntType] int -# 1595| Value = [Literal] 0 -# 1595| ValueCategory = prvalue -# 1593| getStmt(): [BlockStmt] { ... } -# 1594| getStmt(0): [DeclStmt] declaration -# 1594| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x525 -# 1594| Type = [Struct] String -# 1594| getVariable().getInitializer(): [Initializer] initializer for x525 -# 1594| getExpr(): [ConstructorCall] call to String -# 1594| Type = [VoidType] void -# 1594| ValueCategory = prvalue -# 1595| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1595| Type = [VoidType] void -# 1595| ValueCategory = prvalue -# 1595| getQualifier(): [VariableAccess] x525 -# 1595| Type = [Struct] String -# 1595| ValueCategory = lvalue -# 1595| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1595| Conversion = [BoolConversion] conversion to bool -# 1595| Type = [BoolType] bool -# 1595| Value = [CStyleCast] 0 -# 1595| ValueCategory = prvalue -# 1596| getStmt(526): [DoStmt] do (...) ... -# 1598| getCondition(): [Literal] 0 -# 1598| Type = [IntType] int -# 1598| Value = [Literal] 0 -# 1598| ValueCategory = prvalue -# 1596| getStmt(): [BlockStmt] { ... } -# 1597| getStmt(0): [DeclStmt] declaration -# 1597| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x526 -# 1597| Type = [Struct] String -# 1597| getVariable().getInitializer(): [Initializer] initializer for x526 -# 1597| getExpr(): [ConstructorCall] call to String -# 1597| Type = [VoidType] void -# 1597| ValueCategory = prvalue -# 1598| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1598| Type = [VoidType] void -# 1598| ValueCategory = prvalue -# 1598| getQualifier(): [VariableAccess] x526 -# 1598| Type = [Struct] String -# 1598| ValueCategory = lvalue -# 1598| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1598| Conversion = [BoolConversion] conversion to bool -# 1598| Type = [BoolType] bool -# 1598| Value = [CStyleCast] 0 -# 1598| ValueCategory = prvalue -# 1599| getStmt(527): [DoStmt] do (...) ... -# 1601| getCondition(): [Literal] 0 -# 1601| Type = [IntType] int -# 1601| Value = [Literal] 0 -# 1601| ValueCategory = prvalue -# 1599| getStmt(): [BlockStmt] { ... } -# 1600| getStmt(0): [DeclStmt] declaration -# 1600| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x527 -# 1600| Type = [Struct] String -# 1600| getVariable().getInitializer(): [Initializer] initializer for x527 -# 1600| getExpr(): [ConstructorCall] call to String -# 1600| Type = [VoidType] void -# 1600| ValueCategory = prvalue -# 1601| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1601| Type = [VoidType] void -# 1601| ValueCategory = prvalue -# 1601| getQualifier(): [VariableAccess] x527 -# 1601| Type = [Struct] String -# 1601| ValueCategory = lvalue -# 1601| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1601| Conversion = [BoolConversion] conversion to bool -# 1601| Type = [BoolType] bool -# 1601| Value = [CStyleCast] 0 -# 1601| ValueCategory = prvalue -# 1602| getStmt(528): [DoStmt] do (...) ... -# 1604| getCondition(): [Literal] 0 -# 1604| Type = [IntType] int -# 1604| Value = [Literal] 0 -# 1604| ValueCategory = prvalue -# 1602| getStmt(): [BlockStmt] { ... } -# 1603| getStmt(0): [DeclStmt] declaration -# 1603| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x528 -# 1603| Type = [Struct] String -# 1603| getVariable().getInitializer(): [Initializer] initializer for x528 -# 1603| getExpr(): [ConstructorCall] call to String -# 1603| Type = [VoidType] void -# 1603| ValueCategory = prvalue -# 1604| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1604| Type = [VoidType] void -# 1604| ValueCategory = prvalue -# 1604| getQualifier(): [VariableAccess] x528 -# 1604| Type = [Struct] String -# 1604| ValueCategory = lvalue -# 1604| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1604| Conversion = [BoolConversion] conversion to bool -# 1604| Type = [BoolType] bool -# 1604| Value = [CStyleCast] 0 -# 1604| ValueCategory = prvalue -# 1605| getStmt(529): [DoStmt] do (...) ... -# 1607| getCondition(): [Literal] 0 -# 1607| Type = [IntType] int -# 1607| Value = [Literal] 0 -# 1607| ValueCategory = prvalue -# 1605| getStmt(): [BlockStmt] { ... } -# 1606| getStmt(0): [DeclStmt] declaration -# 1606| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x529 -# 1606| Type = [Struct] String -# 1606| getVariable().getInitializer(): [Initializer] initializer for x529 -# 1606| getExpr(): [ConstructorCall] call to String -# 1606| Type = [VoidType] void -# 1606| ValueCategory = prvalue -# 1607| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1607| Type = [VoidType] void -# 1607| ValueCategory = prvalue -# 1607| getQualifier(): [VariableAccess] x529 -# 1607| Type = [Struct] String -# 1607| ValueCategory = lvalue -# 1607| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1607| Conversion = [BoolConversion] conversion to bool -# 1607| Type = [BoolType] bool -# 1607| Value = [CStyleCast] 0 -# 1607| ValueCategory = prvalue -# 1608| getStmt(530): [DoStmt] do (...) ... -# 1610| getCondition(): [Literal] 0 -# 1610| Type = [IntType] int -# 1610| Value = [Literal] 0 -# 1610| ValueCategory = prvalue -# 1608| getStmt(): [BlockStmt] { ... } -# 1609| getStmt(0): [DeclStmt] declaration -# 1609| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x530 -# 1609| Type = [Struct] String -# 1609| getVariable().getInitializer(): [Initializer] initializer for x530 -# 1609| getExpr(): [ConstructorCall] call to String -# 1609| Type = [VoidType] void -# 1609| ValueCategory = prvalue -# 1610| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1610| Type = [VoidType] void -# 1610| ValueCategory = prvalue -# 1610| getQualifier(): [VariableAccess] x530 -# 1610| Type = [Struct] String -# 1610| ValueCategory = lvalue -# 1610| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1610| Conversion = [BoolConversion] conversion to bool -# 1610| Type = [BoolType] bool -# 1610| Value = [CStyleCast] 0 -# 1610| ValueCategory = prvalue -# 1611| getStmt(531): [DoStmt] do (...) ... -# 1613| getCondition(): [Literal] 0 -# 1613| Type = [IntType] int -# 1613| Value = [Literal] 0 -# 1613| ValueCategory = prvalue -# 1611| getStmt(): [BlockStmt] { ... } -# 1612| getStmt(0): [DeclStmt] declaration -# 1612| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x531 -# 1612| Type = [Struct] String -# 1612| getVariable().getInitializer(): [Initializer] initializer for x531 -# 1612| getExpr(): [ConstructorCall] call to String -# 1612| Type = [VoidType] void -# 1612| ValueCategory = prvalue -# 1613| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1613| Type = [VoidType] void -# 1613| ValueCategory = prvalue -# 1613| getQualifier(): [VariableAccess] x531 -# 1613| Type = [Struct] String -# 1613| ValueCategory = lvalue -# 1613| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1613| Conversion = [BoolConversion] conversion to bool -# 1613| Type = [BoolType] bool -# 1613| Value = [CStyleCast] 0 -# 1613| ValueCategory = prvalue -# 1614| getStmt(532): [DoStmt] do (...) ... -# 1616| getCondition(): [Literal] 0 -# 1616| Type = [IntType] int -# 1616| Value = [Literal] 0 -# 1616| ValueCategory = prvalue -# 1614| getStmt(): [BlockStmt] { ... } -# 1615| getStmt(0): [DeclStmt] declaration -# 1615| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x532 -# 1615| Type = [Struct] String -# 1615| getVariable().getInitializer(): [Initializer] initializer for x532 -# 1615| getExpr(): [ConstructorCall] call to String -# 1615| Type = [VoidType] void -# 1615| ValueCategory = prvalue -# 1616| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1616| Type = [VoidType] void -# 1616| ValueCategory = prvalue -# 1616| getQualifier(): [VariableAccess] x532 -# 1616| Type = [Struct] String -# 1616| ValueCategory = lvalue -# 1616| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1616| Conversion = [BoolConversion] conversion to bool -# 1616| Type = [BoolType] bool -# 1616| Value = [CStyleCast] 0 -# 1616| ValueCategory = prvalue -# 1617| getStmt(533): [DoStmt] do (...) ... -# 1619| getCondition(): [Literal] 0 -# 1619| Type = [IntType] int -# 1619| Value = [Literal] 0 -# 1619| ValueCategory = prvalue -# 1617| getStmt(): [BlockStmt] { ... } -# 1618| getStmt(0): [DeclStmt] declaration -# 1618| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x533 -# 1618| Type = [Struct] String -# 1618| getVariable().getInitializer(): [Initializer] initializer for x533 -# 1618| getExpr(): [ConstructorCall] call to String -# 1618| Type = [VoidType] void -# 1618| ValueCategory = prvalue -# 1619| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1619| Type = [VoidType] void -# 1619| ValueCategory = prvalue -# 1619| getQualifier(): [VariableAccess] x533 -# 1619| Type = [Struct] String -# 1619| ValueCategory = lvalue -# 1619| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1619| Conversion = [BoolConversion] conversion to bool -# 1619| Type = [BoolType] bool -# 1619| Value = [CStyleCast] 0 -# 1619| ValueCategory = prvalue -# 1620| getStmt(534): [DoStmt] do (...) ... -# 1622| getCondition(): [Literal] 0 -# 1622| Type = [IntType] int -# 1622| Value = [Literal] 0 -# 1622| ValueCategory = prvalue -# 1620| getStmt(): [BlockStmt] { ... } -# 1621| getStmt(0): [DeclStmt] declaration -# 1621| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x534 -# 1621| Type = [Struct] String -# 1621| getVariable().getInitializer(): [Initializer] initializer for x534 -# 1621| getExpr(): [ConstructorCall] call to String -# 1621| Type = [VoidType] void -# 1621| ValueCategory = prvalue -# 1622| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1622| Type = [VoidType] void -# 1622| ValueCategory = prvalue -# 1622| getQualifier(): [VariableAccess] x534 -# 1622| Type = [Struct] String -# 1622| ValueCategory = lvalue -# 1622| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1622| Conversion = [BoolConversion] conversion to bool -# 1622| Type = [BoolType] bool -# 1622| Value = [CStyleCast] 0 -# 1622| ValueCategory = prvalue -# 1623| getStmt(535): [DoStmt] do (...) ... -# 1625| getCondition(): [Literal] 0 -# 1625| Type = [IntType] int -# 1625| Value = [Literal] 0 -# 1625| ValueCategory = prvalue -# 1623| getStmt(): [BlockStmt] { ... } -# 1624| getStmt(0): [DeclStmt] declaration -# 1624| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x535 -# 1624| Type = [Struct] String -# 1624| getVariable().getInitializer(): [Initializer] initializer for x535 -# 1624| getExpr(): [ConstructorCall] call to String -# 1624| Type = [VoidType] void -# 1624| ValueCategory = prvalue -# 1625| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1625| Type = [VoidType] void -# 1625| ValueCategory = prvalue -# 1625| getQualifier(): [VariableAccess] x535 -# 1625| Type = [Struct] String -# 1625| ValueCategory = lvalue -# 1625| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1625| Conversion = [BoolConversion] conversion to bool -# 1625| Type = [BoolType] bool -# 1625| Value = [CStyleCast] 0 -# 1625| ValueCategory = prvalue -# 1626| getStmt(536): [DoStmt] do (...) ... -# 1628| getCondition(): [Literal] 0 -# 1628| Type = [IntType] int -# 1628| Value = [Literal] 0 -# 1628| ValueCategory = prvalue -# 1626| getStmt(): [BlockStmt] { ... } -# 1627| getStmt(0): [DeclStmt] declaration -# 1627| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x536 -# 1627| Type = [Struct] String -# 1627| getVariable().getInitializer(): [Initializer] initializer for x536 -# 1627| getExpr(): [ConstructorCall] call to String -# 1627| Type = [VoidType] void -# 1627| ValueCategory = prvalue -# 1628| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1628| Type = [VoidType] void -# 1628| ValueCategory = prvalue -# 1628| getQualifier(): [VariableAccess] x536 -# 1628| Type = [Struct] String -# 1628| ValueCategory = lvalue -# 1628| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1628| Conversion = [BoolConversion] conversion to bool -# 1628| Type = [BoolType] bool -# 1628| Value = [CStyleCast] 0 -# 1628| ValueCategory = prvalue -# 1629| getStmt(537): [DoStmt] do (...) ... -# 1631| getCondition(): [Literal] 0 -# 1631| Type = [IntType] int -# 1631| Value = [Literal] 0 -# 1631| ValueCategory = prvalue -# 1629| getStmt(): [BlockStmt] { ... } -# 1630| getStmt(0): [DeclStmt] declaration -# 1630| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x537 -# 1630| Type = [Struct] String -# 1630| getVariable().getInitializer(): [Initializer] initializer for x537 -# 1630| getExpr(): [ConstructorCall] call to String -# 1630| Type = [VoidType] void -# 1630| ValueCategory = prvalue -# 1631| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1631| Type = [VoidType] void -# 1631| ValueCategory = prvalue -# 1631| getQualifier(): [VariableAccess] x537 -# 1631| Type = [Struct] String -# 1631| ValueCategory = lvalue -# 1631| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1631| Conversion = [BoolConversion] conversion to bool -# 1631| Type = [BoolType] bool -# 1631| Value = [CStyleCast] 0 -# 1631| ValueCategory = prvalue -# 1632| getStmt(538): [DoStmt] do (...) ... -# 1634| getCondition(): [Literal] 0 -# 1634| Type = [IntType] int -# 1634| Value = [Literal] 0 -# 1634| ValueCategory = prvalue -# 1632| getStmt(): [BlockStmt] { ... } -# 1633| getStmt(0): [DeclStmt] declaration -# 1633| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x538 -# 1633| Type = [Struct] String -# 1633| getVariable().getInitializer(): [Initializer] initializer for x538 -# 1633| getExpr(): [ConstructorCall] call to String -# 1633| Type = [VoidType] void -# 1633| ValueCategory = prvalue -# 1634| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1634| Type = [VoidType] void -# 1634| ValueCategory = prvalue -# 1634| getQualifier(): [VariableAccess] x538 -# 1634| Type = [Struct] String -# 1634| ValueCategory = lvalue -# 1634| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1634| Conversion = [BoolConversion] conversion to bool -# 1634| Type = [BoolType] bool -# 1634| Value = [CStyleCast] 0 -# 1634| ValueCategory = prvalue -# 1635| getStmt(539): [DoStmt] do (...) ... -# 1637| getCondition(): [Literal] 0 -# 1637| Type = [IntType] int -# 1637| Value = [Literal] 0 -# 1637| ValueCategory = prvalue -# 1635| getStmt(): [BlockStmt] { ... } -# 1636| getStmt(0): [DeclStmt] declaration -# 1636| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x539 -# 1636| Type = [Struct] String -# 1636| getVariable().getInitializer(): [Initializer] initializer for x539 -# 1636| getExpr(): [ConstructorCall] call to String -# 1636| Type = [VoidType] void -# 1636| ValueCategory = prvalue -# 1637| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1637| Type = [VoidType] void -# 1637| ValueCategory = prvalue -# 1637| getQualifier(): [VariableAccess] x539 -# 1637| Type = [Struct] String -# 1637| ValueCategory = lvalue -# 1637| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1637| Conversion = [BoolConversion] conversion to bool -# 1637| Type = [BoolType] bool -# 1637| Value = [CStyleCast] 0 -# 1637| ValueCategory = prvalue -# 1638| getStmt(540): [DoStmt] do (...) ... -# 1640| getCondition(): [Literal] 0 -# 1640| Type = [IntType] int -# 1640| Value = [Literal] 0 -# 1640| ValueCategory = prvalue -# 1638| getStmt(): [BlockStmt] { ... } -# 1639| getStmt(0): [DeclStmt] declaration -# 1639| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x540 -# 1639| Type = [Struct] String -# 1639| getVariable().getInitializer(): [Initializer] initializer for x540 -# 1639| getExpr(): [ConstructorCall] call to String -# 1639| Type = [VoidType] void -# 1639| ValueCategory = prvalue -# 1640| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1640| Type = [VoidType] void -# 1640| ValueCategory = prvalue -# 1640| getQualifier(): [VariableAccess] x540 -# 1640| Type = [Struct] String -# 1640| ValueCategory = lvalue -# 1640| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1640| Conversion = [BoolConversion] conversion to bool -# 1640| Type = [BoolType] bool -# 1640| Value = [CStyleCast] 0 -# 1640| ValueCategory = prvalue -# 1641| getStmt(541): [DoStmt] do (...) ... -# 1643| getCondition(): [Literal] 0 -# 1643| Type = [IntType] int -# 1643| Value = [Literal] 0 -# 1643| ValueCategory = prvalue -# 1641| getStmt(): [BlockStmt] { ... } -# 1642| getStmt(0): [DeclStmt] declaration -# 1642| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x541 -# 1642| Type = [Struct] String -# 1642| getVariable().getInitializer(): [Initializer] initializer for x541 -# 1642| getExpr(): [ConstructorCall] call to String -# 1642| Type = [VoidType] void -# 1642| ValueCategory = prvalue -# 1643| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1643| Type = [VoidType] void -# 1643| ValueCategory = prvalue -# 1643| getQualifier(): [VariableAccess] x541 -# 1643| Type = [Struct] String -# 1643| ValueCategory = lvalue -# 1643| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1643| Conversion = [BoolConversion] conversion to bool -# 1643| Type = [BoolType] bool -# 1643| Value = [CStyleCast] 0 -# 1643| ValueCategory = prvalue -# 1644| getStmt(542): [DoStmt] do (...) ... -# 1646| getCondition(): [Literal] 0 -# 1646| Type = [IntType] int -# 1646| Value = [Literal] 0 -# 1646| ValueCategory = prvalue -# 1644| getStmt(): [BlockStmt] { ... } -# 1645| getStmt(0): [DeclStmt] declaration -# 1645| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x542 -# 1645| Type = [Struct] String -# 1645| getVariable().getInitializer(): [Initializer] initializer for x542 -# 1645| getExpr(): [ConstructorCall] call to String -# 1645| Type = [VoidType] void -# 1645| ValueCategory = prvalue -# 1646| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1646| Type = [VoidType] void -# 1646| ValueCategory = prvalue -# 1646| getQualifier(): [VariableAccess] x542 -# 1646| Type = [Struct] String -# 1646| ValueCategory = lvalue -# 1646| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1646| Conversion = [BoolConversion] conversion to bool -# 1646| Type = [BoolType] bool -# 1646| Value = [CStyleCast] 0 -# 1646| ValueCategory = prvalue -# 1647| getStmt(543): [DoStmt] do (...) ... -# 1649| getCondition(): [Literal] 0 -# 1649| Type = [IntType] int -# 1649| Value = [Literal] 0 -# 1649| ValueCategory = prvalue -# 1647| getStmt(): [BlockStmt] { ... } -# 1648| getStmt(0): [DeclStmt] declaration -# 1648| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x543 -# 1648| Type = [Struct] String -# 1648| getVariable().getInitializer(): [Initializer] initializer for x543 -# 1648| getExpr(): [ConstructorCall] call to String -# 1648| Type = [VoidType] void -# 1648| ValueCategory = prvalue -# 1649| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1649| Type = [VoidType] void -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] x543 -# 1649| Type = [Struct] String -# 1649| ValueCategory = lvalue -# 1649| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1649| Conversion = [BoolConversion] conversion to bool -# 1649| Type = [BoolType] bool -# 1649| Value = [CStyleCast] 0 -# 1649| ValueCategory = prvalue -# 1650| getStmt(544): [DoStmt] do (...) ... -# 1652| getCondition(): [Literal] 0 -# 1652| Type = [IntType] int -# 1652| Value = [Literal] 0 -# 1652| ValueCategory = prvalue -# 1650| getStmt(): [BlockStmt] { ... } -# 1651| getStmt(0): [DeclStmt] declaration -# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x544 -# 1651| Type = [Struct] String -# 1651| getVariable().getInitializer(): [Initializer] initializer for x544 -# 1651| getExpr(): [ConstructorCall] call to String -# 1651| Type = [VoidType] void -# 1651| ValueCategory = prvalue -# 1652| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1652| Type = [VoidType] void -# 1652| ValueCategory = prvalue -# 1652| getQualifier(): [VariableAccess] x544 -# 1652| Type = [Struct] String -# 1652| ValueCategory = lvalue -# 1652| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1652| Conversion = [BoolConversion] conversion to bool -# 1652| Type = [BoolType] bool -# 1652| Value = [CStyleCast] 0 -# 1652| ValueCategory = prvalue -# 1653| getStmt(545): [DoStmt] do (...) ... -# 1655| getCondition(): [Literal] 0 -# 1655| Type = [IntType] int -# 1655| Value = [Literal] 0 -# 1655| ValueCategory = prvalue -# 1653| getStmt(): [BlockStmt] { ... } -# 1654| getStmt(0): [DeclStmt] declaration -# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x545 -# 1654| Type = [Struct] String -# 1654| getVariable().getInitializer(): [Initializer] initializer for x545 -# 1654| getExpr(): [ConstructorCall] call to String -# 1654| Type = [VoidType] void -# 1654| ValueCategory = prvalue -# 1655| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1655| Type = [VoidType] void -# 1655| ValueCategory = prvalue -# 1655| getQualifier(): [VariableAccess] x545 -# 1655| Type = [Struct] String -# 1655| ValueCategory = lvalue -# 1655| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1655| Conversion = [BoolConversion] conversion to bool -# 1655| Type = [BoolType] bool -# 1655| Value = [CStyleCast] 0 -# 1655| ValueCategory = prvalue -# 1656| getStmt(546): [DoStmt] do (...) ... -# 1658| getCondition(): [Literal] 0 -# 1658| Type = [IntType] int -# 1658| Value = [Literal] 0 -# 1658| ValueCategory = prvalue -# 1656| getStmt(): [BlockStmt] { ... } -# 1657| getStmt(0): [DeclStmt] declaration -# 1657| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x546 -# 1657| Type = [Struct] String -# 1657| getVariable().getInitializer(): [Initializer] initializer for x546 -# 1657| getExpr(): [ConstructorCall] call to String -# 1657| Type = [VoidType] void -# 1657| ValueCategory = prvalue -# 1658| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1658| Type = [VoidType] void -# 1658| ValueCategory = prvalue -# 1658| getQualifier(): [VariableAccess] x546 -# 1658| Type = [Struct] String -# 1658| ValueCategory = lvalue -# 1658| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1658| Conversion = [BoolConversion] conversion to bool -# 1658| Type = [BoolType] bool -# 1658| Value = [CStyleCast] 0 -# 1658| ValueCategory = prvalue -# 1659| getStmt(547): [DoStmt] do (...) ... -# 1661| getCondition(): [Literal] 0 -# 1661| Type = [IntType] int -# 1661| Value = [Literal] 0 -# 1661| ValueCategory = prvalue -# 1659| getStmt(): [BlockStmt] { ... } -# 1660| getStmt(0): [DeclStmt] declaration -# 1660| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x547 -# 1660| Type = [Struct] String -# 1660| getVariable().getInitializer(): [Initializer] initializer for x547 -# 1660| getExpr(): [ConstructorCall] call to String -# 1660| Type = [VoidType] void -# 1660| ValueCategory = prvalue -# 1661| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1661| Type = [VoidType] void -# 1661| ValueCategory = prvalue -# 1661| getQualifier(): [VariableAccess] x547 -# 1661| Type = [Struct] String -# 1661| ValueCategory = lvalue -# 1661| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1661| Conversion = [BoolConversion] conversion to bool -# 1661| Type = [BoolType] bool -# 1661| Value = [CStyleCast] 0 -# 1661| ValueCategory = prvalue -# 1662| getStmt(548): [DoStmt] do (...) ... -# 1664| getCondition(): [Literal] 0 -# 1664| Type = [IntType] int -# 1664| Value = [Literal] 0 -# 1664| ValueCategory = prvalue -# 1662| getStmt(): [BlockStmt] { ... } -# 1663| getStmt(0): [DeclStmt] declaration -# 1663| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x548 -# 1663| Type = [Struct] String -# 1663| getVariable().getInitializer(): [Initializer] initializer for x548 -# 1663| getExpr(): [ConstructorCall] call to String -# 1663| Type = [VoidType] void -# 1663| ValueCategory = prvalue -# 1664| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1664| Type = [VoidType] void -# 1664| ValueCategory = prvalue -# 1664| getQualifier(): [VariableAccess] x548 -# 1664| Type = [Struct] String -# 1664| ValueCategory = lvalue -# 1664| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1664| Conversion = [BoolConversion] conversion to bool -# 1664| Type = [BoolType] bool -# 1664| Value = [CStyleCast] 0 -# 1664| ValueCategory = prvalue -# 1665| getStmt(549): [DoStmt] do (...) ... -# 1667| getCondition(): [Literal] 0 -# 1667| Type = [IntType] int -# 1667| Value = [Literal] 0 -# 1667| ValueCategory = prvalue -# 1665| getStmt(): [BlockStmt] { ... } -# 1666| getStmt(0): [DeclStmt] declaration -# 1666| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x549 -# 1666| Type = [Struct] String -# 1666| getVariable().getInitializer(): [Initializer] initializer for x549 -# 1666| getExpr(): [ConstructorCall] call to String -# 1666| Type = [VoidType] void -# 1666| ValueCategory = prvalue -# 1667| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1667| Type = [VoidType] void -# 1667| ValueCategory = prvalue -# 1667| getQualifier(): [VariableAccess] x549 -# 1667| Type = [Struct] String -# 1667| ValueCategory = lvalue -# 1667| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1667| Conversion = [BoolConversion] conversion to bool -# 1667| Type = [BoolType] bool -# 1667| Value = [CStyleCast] 0 -# 1667| ValueCategory = prvalue -# 1668| getStmt(550): [DoStmt] do (...) ... -# 1670| getCondition(): [Literal] 0 -# 1670| Type = [IntType] int -# 1670| Value = [Literal] 0 -# 1670| ValueCategory = prvalue -# 1668| getStmt(): [BlockStmt] { ... } -# 1669| getStmt(0): [DeclStmt] declaration -# 1669| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x550 -# 1669| Type = [Struct] String -# 1669| getVariable().getInitializer(): [Initializer] initializer for x550 -# 1669| getExpr(): [ConstructorCall] call to String -# 1669| Type = [VoidType] void -# 1669| ValueCategory = prvalue -# 1670| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1670| Type = [VoidType] void -# 1670| ValueCategory = prvalue -# 1670| getQualifier(): [VariableAccess] x550 -# 1670| Type = [Struct] String -# 1670| ValueCategory = lvalue -# 1670| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1670| Conversion = [BoolConversion] conversion to bool -# 1670| Type = [BoolType] bool -# 1670| Value = [CStyleCast] 0 -# 1670| ValueCategory = prvalue -# 1671| getStmt(551): [DoStmt] do (...) ... -# 1673| getCondition(): [Literal] 0 -# 1673| Type = [IntType] int -# 1673| Value = [Literal] 0 -# 1673| ValueCategory = prvalue -# 1671| getStmt(): [BlockStmt] { ... } -# 1672| getStmt(0): [DeclStmt] declaration -# 1672| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x551 -# 1672| Type = [Struct] String -# 1672| getVariable().getInitializer(): [Initializer] initializer for x551 -# 1672| getExpr(): [ConstructorCall] call to String -# 1672| Type = [VoidType] void -# 1672| ValueCategory = prvalue -# 1673| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1673| Type = [VoidType] void -# 1673| ValueCategory = prvalue -# 1673| getQualifier(): [VariableAccess] x551 -# 1673| Type = [Struct] String -# 1673| ValueCategory = lvalue -# 1673| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1673| Conversion = [BoolConversion] conversion to bool -# 1673| Type = [BoolType] bool -# 1673| Value = [CStyleCast] 0 -# 1673| ValueCategory = prvalue -# 1674| getStmt(552): [DoStmt] do (...) ... -# 1676| getCondition(): [Literal] 0 -# 1676| Type = [IntType] int -# 1676| Value = [Literal] 0 -# 1676| ValueCategory = prvalue -# 1674| getStmt(): [BlockStmt] { ... } -# 1675| getStmt(0): [DeclStmt] declaration -# 1675| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x552 -# 1675| Type = [Struct] String -# 1675| getVariable().getInitializer(): [Initializer] initializer for x552 -# 1675| getExpr(): [ConstructorCall] call to String -# 1675| Type = [VoidType] void -# 1675| ValueCategory = prvalue -# 1676| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1676| Type = [VoidType] void -# 1676| ValueCategory = prvalue -# 1676| getQualifier(): [VariableAccess] x552 -# 1676| Type = [Struct] String -# 1676| ValueCategory = lvalue -# 1676| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1676| Conversion = [BoolConversion] conversion to bool -# 1676| Type = [BoolType] bool -# 1676| Value = [CStyleCast] 0 -# 1676| ValueCategory = prvalue -# 1677| getStmt(553): [DoStmt] do (...) ... -# 1679| getCondition(): [Literal] 0 -# 1679| Type = [IntType] int -# 1679| Value = [Literal] 0 -# 1679| ValueCategory = prvalue -# 1677| getStmt(): [BlockStmt] { ... } -# 1678| getStmt(0): [DeclStmt] declaration -# 1678| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x553 -# 1678| Type = [Struct] String -# 1678| getVariable().getInitializer(): [Initializer] initializer for x553 -# 1678| getExpr(): [ConstructorCall] call to String -# 1678| Type = [VoidType] void -# 1678| ValueCategory = prvalue -# 1679| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1679| Type = [VoidType] void -# 1679| ValueCategory = prvalue -# 1679| getQualifier(): [VariableAccess] x553 -# 1679| Type = [Struct] String -# 1679| ValueCategory = lvalue -# 1679| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1679| Conversion = [BoolConversion] conversion to bool -# 1679| Type = [BoolType] bool -# 1679| Value = [CStyleCast] 0 -# 1679| ValueCategory = prvalue -# 1680| getStmt(554): [DoStmt] do (...) ... -# 1682| getCondition(): [Literal] 0 -# 1682| Type = [IntType] int -# 1682| Value = [Literal] 0 -# 1682| ValueCategory = prvalue -# 1680| getStmt(): [BlockStmt] { ... } -# 1681| getStmt(0): [DeclStmt] declaration -# 1681| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x554 -# 1681| Type = [Struct] String -# 1681| getVariable().getInitializer(): [Initializer] initializer for x554 -# 1681| getExpr(): [ConstructorCall] call to String -# 1681| Type = [VoidType] void -# 1681| ValueCategory = prvalue -# 1682| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1682| Type = [VoidType] void -# 1682| ValueCategory = prvalue -# 1682| getQualifier(): [VariableAccess] x554 -# 1682| Type = [Struct] String -# 1682| ValueCategory = lvalue -# 1682| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1682| Conversion = [BoolConversion] conversion to bool -# 1682| Type = [BoolType] bool -# 1682| Value = [CStyleCast] 0 -# 1682| ValueCategory = prvalue -# 1683| getStmt(555): [DoStmt] do (...) ... -# 1685| getCondition(): [Literal] 0 -# 1685| Type = [IntType] int -# 1685| Value = [Literal] 0 -# 1685| ValueCategory = prvalue -# 1683| getStmt(): [BlockStmt] { ... } -# 1684| getStmt(0): [DeclStmt] declaration -# 1684| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x555 -# 1684| Type = [Struct] String -# 1684| getVariable().getInitializer(): [Initializer] initializer for x555 -# 1684| getExpr(): [ConstructorCall] call to String -# 1684| Type = [VoidType] void -# 1684| ValueCategory = prvalue -# 1685| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1685| Type = [VoidType] void -# 1685| ValueCategory = prvalue -# 1685| getQualifier(): [VariableAccess] x555 -# 1685| Type = [Struct] String -# 1685| ValueCategory = lvalue -# 1685| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1685| Conversion = [BoolConversion] conversion to bool -# 1685| Type = [BoolType] bool -# 1685| Value = [CStyleCast] 0 -# 1685| ValueCategory = prvalue -# 1686| getStmt(556): [DoStmt] do (...) ... -# 1688| getCondition(): [Literal] 0 -# 1688| Type = [IntType] int -# 1688| Value = [Literal] 0 -# 1688| ValueCategory = prvalue -# 1686| getStmt(): [BlockStmt] { ... } -# 1687| getStmt(0): [DeclStmt] declaration -# 1687| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x556 -# 1687| Type = [Struct] String -# 1687| getVariable().getInitializer(): [Initializer] initializer for x556 -# 1687| getExpr(): [ConstructorCall] call to String -# 1687| Type = [VoidType] void -# 1687| ValueCategory = prvalue -# 1688| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1688| Type = [VoidType] void -# 1688| ValueCategory = prvalue -# 1688| getQualifier(): [VariableAccess] x556 -# 1688| Type = [Struct] String -# 1688| ValueCategory = lvalue -# 1688| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1688| Conversion = [BoolConversion] conversion to bool -# 1688| Type = [BoolType] bool -# 1688| Value = [CStyleCast] 0 -# 1688| ValueCategory = prvalue -# 1689| getStmt(557): [DoStmt] do (...) ... -# 1691| getCondition(): [Literal] 0 -# 1691| Type = [IntType] int -# 1691| Value = [Literal] 0 -# 1691| ValueCategory = prvalue -# 1689| getStmt(): [BlockStmt] { ... } -# 1690| getStmt(0): [DeclStmt] declaration -# 1690| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x557 -# 1690| Type = [Struct] String -# 1690| getVariable().getInitializer(): [Initializer] initializer for x557 -# 1690| getExpr(): [ConstructorCall] call to String -# 1690| Type = [VoidType] void -# 1690| ValueCategory = prvalue -# 1691| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1691| Type = [VoidType] void -# 1691| ValueCategory = prvalue -# 1691| getQualifier(): [VariableAccess] x557 -# 1691| Type = [Struct] String -# 1691| ValueCategory = lvalue -# 1691| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1691| Conversion = [BoolConversion] conversion to bool -# 1691| Type = [BoolType] bool -# 1691| Value = [CStyleCast] 0 -# 1691| ValueCategory = prvalue -# 1692| getStmt(558): [DoStmt] do (...) ... -# 1694| getCondition(): [Literal] 0 -# 1694| Type = [IntType] int -# 1694| Value = [Literal] 0 -# 1694| ValueCategory = prvalue -# 1692| getStmt(): [BlockStmt] { ... } -# 1693| getStmt(0): [DeclStmt] declaration -# 1693| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x558 -# 1693| Type = [Struct] String -# 1693| getVariable().getInitializer(): [Initializer] initializer for x558 -# 1693| getExpr(): [ConstructorCall] call to String -# 1693| Type = [VoidType] void -# 1693| ValueCategory = prvalue -# 1694| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1694| Type = [VoidType] void -# 1694| ValueCategory = prvalue -# 1694| getQualifier(): [VariableAccess] x558 -# 1694| Type = [Struct] String -# 1694| ValueCategory = lvalue -# 1694| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1694| Conversion = [BoolConversion] conversion to bool -# 1694| Type = [BoolType] bool -# 1694| Value = [CStyleCast] 0 -# 1694| ValueCategory = prvalue -# 1695| getStmt(559): [DoStmt] do (...) ... -# 1697| getCondition(): [Literal] 0 -# 1697| Type = [IntType] int -# 1697| Value = [Literal] 0 -# 1697| ValueCategory = prvalue -# 1695| getStmt(): [BlockStmt] { ... } -# 1696| getStmt(0): [DeclStmt] declaration -# 1696| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x559 -# 1696| Type = [Struct] String -# 1696| getVariable().getInitializer(): [Initializer] initializer for x559 -# 1696| getExpr(): [ConstructorCall] call to String -# 1696| Type = [VoidType] void -# 1696| ValueCategory = prvalue -# 1697| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1697| Type = [VoidType] void -# 1697| ValueCategory = prvalue -# 1697| getQualifier(): [VariableAccess] x559 -# 1697| Type = [Struct] String -# 1697| ValueCategory = lvalue -# 1697| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1697| Conversion = [BoolConversion] conversion to bool -# 1697| Type = [BoolType] bool -# 1697| Value = [CStyleCast] 0 -# 1697| ValueCategory = prvalue -# 1698| getStmt(560): [DoStmt] do (...) ... -# 1700| getCondition(): [Literal] 0 -# 1700| Type = [IntType] int -# 1700| Value = [Literal] 0 -# 1700| ValueCategory = prvalue -# 1698| getStmt(): [BlockStmt] { ... } -# 1699| getStmt(0): [DeclStmt] declaration -# 1699| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x560 -# 1699| Type = [Struct] String -# 1699| getVariable().getInitializer(): [Initializer] initializer for x560 -# 1699| getExpr(): [ConstructorCall] call to String -# 1699| Type = [VoidType] void -# 1699| ValueCategory = prvalue -# 1700| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1700| Type = [VoidType] void -# 1700| ValueCategory = prvalue -# 1700| getQualifier(): [VariableAccess] x560 -# 1700| Type = [Struct] String -# 1700| ValueCategory = lvalue -# 1700| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1700| Conversion = [BoolConversion] conversion to bool -# 1700| Type = [BoolType] bool -# 1700| Value = [CStyleCast] 0 -# 1700| ValueCategory = prvalue -# 1701| getStmt(561): [DoStmt] do (...) ... -# 1703| getCondition(): [Literal] 0 -# 1703| Type = [IntType] int -# 1703| Value = [Literal] 0 -# 1703| ValueCategory = prvalue -# 1701| getStmt(): [BlockStmt] { ... } -# 1702| getStmt(0): [DeclStmt] declaration -# 1702| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x561 -# 1702| Type = [Struct] String -# 1702| getVariable().getInitializer(): [Initializer] initializer for x561 -# 1702| getExpr(): [ConstructorCall] call to String -# 1702| Type = [VoidType] void -# 1702| ValueCategory = prvalue -# 1703| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1703| Type = [VoidType] void -# 1703| ValueCategory = prvalue -# 1703| getQualifier(): [VariableAccess] x561 -# 1703| Type = [Struct] String -# 1703| ValueCategory = lvalue -# 1703| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1703| Conversion = [BoolConversion] conversion to bool -# 1703| Type = [BoolType] bool -# 1703| Value = [CStyleCast] 0 -# 1703| ValueCategory = prvalue -# 1704| getStmt(562): [DoStmt] do (...) ... -# 1706| getCondition(): [Literal] 0 -# 1706| Type = [IntType] int -# 1706| Value = [Literal] 0 -# 1706| ValueCategory = prvalue -# 1704| getStmt(): [BlockStmt] { ... } -# 1705| getStmt(0): [DeclStmt] declaration -# 1705| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x562 -# 1705| Type = [Struct] String -# 1705| getVariable().getInitializer(): [Initializer] initializer for x562 -# 1705| getExpr(): [ConstructorCall] call to String -# 1705| Type = [VoidType] void -# 1705| ValueCategory = prvalue -# 1706| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1706| Type = [VoidType] void -# 1706| ValueCategory = prvalue -# 1706| getQualifier(): [VariableAccess] x562 -# 1706| Type = [Struct] String -# 1706| ValueCategory = lvalue -# 1706| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1706| Conversion = [BoolConversion] conversion to bool -# 1706| Type = [BoolType] bool -# 1706| Value = [CStyleCast] 0 -# 1706| ValueCategory = prvalue -# 1707| getStmt(563): [DoStmt] do (...) ... -# 1709| getCondition(): [Literal] 0 -# 1709| Type = [IntType] int -# 1709| Value = [Literal] 0 -# 1709| ValueCategory = prvalue -# 1707| getStmt(): [BlockStmt] { ... } -# 1708| getStmt(0): [DeclStmt] declaration -# 1708| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x563 -# 1708| Type = [Struct] String -# 1708| getVariable().getInitializer(): [Initializer] initializer for x563 -# 1708| getExpr(): [ConstructorCall] call to String -# 1708| Type = [VoidType] void -# 1708| ValueCategory = prvalue -# 1709| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1709| Type = [VoidType] void -# 1709| ValueCategory = prvalue -# 1709| getQualifier(): [VariableAccess] x563 -# 1709| Type = [Struct] String -# 1709| ValueCategory = lvalue -# 1709| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1709| Conversion = [BoolConversion] conversion to bool -# 1709| Type = [BoolType] bool -# 1709| Value = [CStyleCast] 0 -# 1709| ValueCategory = prvalue -# 1710| getStmt(564): [DoStmt] do (...) ... -# 1712| getCondition(): [Literal] 0 -# 1712| Type = [IntType] int -# 1712| Value = [Literal] 0 -# 1712| ValueCategory = prvalue -# 1710| getStmt(): [BlockStmt] { ... } -# 1711| getStmt(0): [DeclStmt] declaration -# 1711| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x564 -# 1711| Type = [Struct] String -# 1711| getVariable().getInitializer(): [Initializer] initializer for x564 -# 1711| getExpr(): [ConstructorCall] call to String -# 1711| Type = [VoidType] void -# 1711| ValueCategory = prvalue -# 1712| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1712| Type = [VoidType] void -# 1712| ValueCategory = prvalue -# 1712| getQualifier(): [VariableAccess] x564 -# 1712| Type = [Struct] String -# 1712| ValueCategory = lvalue -# 1712| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1712| Conversion = [BoolConversion] conversion to bool -# 1712| Type = [BoolType] bool -# 1712| Value = [CStyleCast] 0 -# 1712| ValueCategory = prvalue -# 1713| getStmt(565): [DoStmt] do (...) ... -# 1715| getCondition(): [Literal] 0 -# 1715| Type = [IntType] int -# 1715| Value = [Literal] 0 -# 1715| ValueCategory = prvalue -# 1713| getStmt(): [BlockStmt] { ... } -# 1714| getStmt(0): [DeclStmt] declaration -# 1714| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x565 -# 1714| Type = [Struct] String -# 1714| getVariable().getInitializer(): [Initializer] initializer for x565 -# 1714| getExpr(): [ConstructorCall] call to String -# 1714| Type = [VoidType] void -# 1714| ValueCategory = prvalue -# 1715| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1715| Type = [VoidType] void -# 1715| ValueCategory = prvalue -# 1715| getQualifier(): [VariableAccess] x565 -# 1715| Type = [Struct] String -# 1715| ValueCategory = lvalue -# 1715| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1715| Conversion = [BoolConversion] conversion to bool -# 1715| Type = [BoolType] bool -# 1715| Value = [CStyleCast] 0 -# 1715| ValueCategory = prvalue -# 1716| getStmt(566): [DoStmt] do (...) ... -# 1718| getCondition(): [Literal] 0 -# 1718| Type = [IntType] int -# 1718| Value = [Literal] 0 -# 1718| ValueCategory = prvalue -# 1716| getStmt(): [BlockStmt] { ... } -# 1717| getStmt(0): [DeclStmt] declaration -# 1717| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x566 -# 1717| Type = [Struct] String -# 1717| getVariable().getInitializer(): [Initializer] initializer for x566 -# 1717| getExpr(): [ConstructorCall] call to String -# 1717| Type = [VoidType] void -# 1717| ValueCategory = prvalue -# 1718| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1718| Type = [VoidType] void -# 1718| ValueCategory = prvalue -# 1718| getQualifier(): [VariableAccess] x566 -# 1718| Type = [Struct] String -# 1718| ValueCategory = lvalue -# 1718| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1718| Conversion = [BoolConversion] conversion to bool -# 1718| Type = [BoolType] bool -# 1718| Value = [CStyleCast] 0 -# 1718| ValueCategory = prvalue -# 1719| getStmt(567): [DoStmt] do (...) ... -# 1721| getCondition(): [Literal] 0 -# 1721| Type = [IntType] int -# 1721| Value = [Literal] 0 -# 1721| ValueCategory = prvalue -# 1719| getStmt(): [BlockStmt] { ... } -# 1720| getStmt(0): [DeclStmt] declaration -# 1720| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x567 -# 1720| Type = [Struct] String -# 1720| getVariable().getInitializer(): [Initializer] initializer for x567 -# 1720| getExpr(): [ConstructorCall] call to String -# 1720| Type = [VoidType] void -# 1720| ValueCategory = prvalue -# 1721| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1721| Type = [VoidType] void -# 1721| ValueCategory = prvalue -# 1721| getQualifier(): [VariableAccess] x567 -# 1721| Type = [Struct] String -# 1721| ValueCategory = lvalue -# 1721| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1721| Conversion = [BoolConversion] conversion to bool -# 1721| Type = [BoolType] bool -# 1721| Value = [CStyleCast] 0 -# 1721| ValueCategory = prvalue -# 1722| getStmt(568): [DoStmt] do (...) ... -# 1724| getCondition(): [Literal] 0 -# 1724| Type = [IntType] int -# 1724| Value = [Literal] 0 -# 1724| ValueCategory = prvalue -# 1722| getStmt(): [BlockStmt] { ... } -# 1723| getStmt(0): [DeclStmt] declaration -# 1723| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x568 -# 1723| Type = [Struct] String -# 1723| getVariable().getInitializer(): [Initializer] initializer for x568 -# 1723| getExpr(): [ConstructorCall] call to String -# 1723| Type = [VoidType] void -# 1723| ValueCategory = prvalue -# 1724| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1724| Type = [VoidType] void -# 1724| ValueCategory = prvalue -# 1724| getQualifier(): [VariableAccess] x568 -# 1724| Type = [Struct] String -# 1724| ValueCategory = lvalue -# 1724| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1724| Conversion = [BoolConversion] conversion to bool -# 1724| Type = [BoolType] bool -# 1724| Value = [CStyleCast] 0 -# 1724| ValueCategory = prvalue -# 1725| getStmt(569): [DoStmt] do (...) ... -# 1727| getCondition(): [Literal] 0 -# 1727| Type = [IntType] int -# 1727| Value = [Literal] 0 -# 1727| ValueCategory = prvalue -# 1725| getStmt(): [BlockStmt] { ... } -# 1726| getStmt(0): [DeclStmt] declaration -# 1726| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x569 -# 1726| Type = [Struct] String -# 1726| getVariable().getInitializer(): [Initializer] initializer for x569 -# 1726| getExpr(): [ConstructorCall] call to String -# 1726| Type = [VoidType] void -# 1726| ValueCategory = prvalue -# 1727| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1727| Type = [VoidType] void -# 1727| ValueCategory = prvalue -# 1727| getQualifier(): [VariableAccess] x569 -# 1727| Type = [Struct] String -# 1727| ValueCategory = lvalue -# 1727| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1727| Conversion = [BoolConversion] conversion to bool -# 1727| Type = [BoolType] bool -# 1727| Value = [CStyleCast] 0 -# 1727| ValueCategory = prvalue -# 1728| getStmt(570): [DoStmt] do (...) ... -# 1730| getCondition(): [Literal] 0 -# 1730| Type = [IntType] int -# 1730| Value = [Literal] 0 -# 1730| ValueCategory = prvalue -# 1728| getStmt(): [BlockStmt] { ... } -# 1729| getStmt(0): [DeclStmt] declaration -# 1729| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x570 -# 1729| Type = [Struct] String -# 1729| getVariable().getInitializer(): [Initializer] initializer for x570 -# 1729| getExpr(): [ConstructorCall] call to String -# 1729| Type = [VoidType] void -# 1729| ValueCategory = prvalue -# 1730| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1730| Type = [VoidType] void -# 1730| ValueCategory = prvalue -# 1730| getQualifier(): [VariableAccess] x570 -# 1730| Type = [Struct] String -# 1730| ValueCategory = lvalue -# 1730| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1730| Conversion = [BoolConversion] conversion to bool -# 1730| Type = [BoolType] bool -# 1730| Value = [CStyleCast] 0 -# 1730| ValueCategory = prvalue -# 1731| getStmt(571): [DoStmt] do (...) ... -# 1733| getCondition(): [Literal] 0 -# 1733| Type = [IntType] int -# 1733| Value = [Literal] 0 -# 1733| ValueCategory = prvalue -# 1731| getStmt(): [BlockStmt] { ... } -# 1732| getStmt(0): [DeclStmt] declaration -# 1732| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x571 -# 1732| Type = [Struct] String -# 1732| getVariable().getInitializer(): [Initializer] initializer for x571 -# 1732| getExpr(): [ConstructorCall] call to String -# 1732| Type = [VoidType] void -# 1732| ValueCategory = prvalue -# 1733| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1733| Type = [VoidType] void -# 1733| ValueCategory = prvalue -# 1733| getQualifier(): [VariableAccess] x571 -# 1733| Type = [Struct] String -# 1733| ValueCategory = lvalue -# 1733| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1733| Conversion = [BoolConversion] conversion to bool -# 1733| Type = [BoolType] bool -# 1733| Value = [CStyleCast] 0 -# 1733| ValueCategory = prvalue -# 1734| getStmt(572): [DoStmt] do (...) ... -# 1736| getCondition(): [Literal] 0 -# 1736| Type = [IntType] int -# 1736| Value = [Literal] 0 -# 1736| ValueCategory = prvalue -# 1734| getStmt(): [BlockStmt] { ... } -# 1735| getStmt(0): [DeclStmt] declaration -# 1735| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x572 -# 1735| Type = [Struct] String -# 1735| getVariable().getInitializer(): [Initializer] initializer for x572 -# 1735| getExpr(): [ConstructorCall] call to String -# 1735| Type = [VoidType] void -# 1735| ValueCategory = prvalue -# 1736| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1736| Type = [VoidType] void -# 1736| ValueCategory = prvalue -# 1736| getQualifier(): [VariableAccess] x572 -# 1736| Type = [Struct] String -# 1736| ValueCategory = lvalue -# 1736| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1736| Conversion = [BoolConversion] conversion to bool -# 1736| Type = [BoolType] bool -# 1736| Value = [CStyleCast] 0 -# 1736| ValueCategory = prvalue -# 1737| getStmt(573): [DoStmt] do (...) ... -# 1739| getCondition(): [Literal] 0 -# 1739| Type = [IntType] int -# 1739| Value = [Literal] 0 -# 1739| ValueCategory = prvalue -# 1737| getStmt(): [BlockStmt] { ... } -# 1738| getStmt(0): [DeclStmt] declaration -# 1738| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x573 -# 1738| Type = [Struct] String -# 1738| getVariable().getInitializer(): [Initializer] initializer for x573 -# 1738| getExpr(): [ConstructorCall] call to String -# 1738| Type = [VoidType] void -# 1738| ValueCategory = prvalue -# 1739| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1739| Type = [VoidType] void -# 1739| ValueCategory = prvalue -# 1739| getQualifier(): [VariableAccess] x573 -# 1739| Type = [Struct] String -# 1739| ValueCategory = lvalue -# 1739| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1739| Conversion = [BoolConversion] conversion to bool -# 1739| Type = [BoolType] bool -# 1739| Value = [CStyleCast] 0 -# 1739| ValueCategory = prvalue -# 1740| getStmt(574): [DoStmt] do (...) ... -# 1742| getCondition(): [Literal] 0 -# 1742| Type = [IntType] int -# 1742| Value = [Literal] 0 -# 1742| ValueCategory = prvalue -# 1740| getStmt(): [BlockStmt] { ... } -# 1741| getStmt(0): [DeclStmt] declaration -# 1741| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x574 -# 1741| Type = [Struct] String -# 1741| getVariable().getInitializer(): [Initializer] initializer for x574 -# 1741| getExpr(): [ConstructorCall] call to String -# 1741| Type = [VoidType] void -# 1741| ValueCategory = prvalue -# 1742| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1742| Type = [VoidType] void -# 1742| ValueCategory = prvalue -# 1742| getQualifier(): [VariableAccess] x574 -# 1742| Type = [Struct] String -# 1742| ValueCategory = lvalue -# 1742| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1742| Conversion = [BoolConversion] conversion to bool -# 1742| Type = [BoolType] bool -# 1742| Value = [CStyleCast] 0 -# 1742| ValueCategory = prvalue -# 1743| getStmt(575): [DoStmt] do (...) ... -# 1745| getCondition(): [Literal] 0 -# 1745| Type = [IntType] int -# 1745| Value = [Literal] 0 -# 1745| ValueCategory = prvalue -# 1743| getStmt(): [BlockStmt] { ... } -# 1744| getStmt(0): [DeclStmt] declaration -# 1744| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x575 -# 1744| Type = [Struct] String -# 1744| getVariable().getInitializer(): [Initializer] initializer for x575 -# 1744| getExpr(): [ConstructorCall] call to String -# 1744| Type = [VoidType] void -# 1744| ValueCategory = prvalue -# 1745| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1745| Type = [VoidType] void -# 1745| ValueCategory = prvalue -# 1745| getQualifier(): [VariableAccess] x575 -# 1745| Type = [Struct] String -# 1745| ValueCategory = lvalue -# 1745| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1745| Conversion = [BoolConversion] conversion to bool -# 1745| Type = [BoolType] bool -# 1745| Value = [CStyleCast] 0 -# 1745| ValueCategory = prvalue -# 1746| getStmt(576): [DoStmt] do (...) ... -# 1748| getCondition(): [Literal] 0 -# 1748| Type = [IntType] int -# 1748| Value = [Literal] 0 -# 1748| ValueCategory = prvalue -# 1746| getStmt(): [BlockStmt] { ... } -# 1747| getStmt(0): [DeclStmt] declaration -# 1747| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x576 -# 1747| Type = [Struct] String -# 1747| getVariable().getInitializer(): [Initializer] initializer for x576 -# 1747| getExpr(): [ConstructorCall] call to String -# 1747| Type = [VoidType] void -# 1747| ValueCategory = prvalue -# 1748| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1748| Type = [VoidType] void -# 1748| ValueCategory = prvalue -# 1748| getQualifier(): [VariableAccess] x576 -# 1748| Type = [Struct] String -# 1748| ValueCategory = lvalue -# 1748| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1748| Conversion = [BoolConversion] conversion to bool -# 1748| Type = [BoolType] bool -# 1748| Value = [CStyleCast] 0 -# 1748| ValueCategory = prvalue -# 1749| getStmt(577): [DoStmt] do (...) ... -# 1751| getCondition(): [Literal] 0 -# 1751| Type = [IntType] int -# 1751| Value = [Literal] 0 -# 1751| ValueCategory = prvalue -# 1749| getStmt(): [BlockStmt] { ... } -# 1750| getStmt(0): [DeclStmt] declaration -# 1750| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x577 -# 1750| Type = [Struct] String -# 1750| getVariable().getInitializer(): [Initializer] initializer for x577 -# 1750| getExpr(): [ConstructorCall] call to String -# 1750| Type = [VoidType] void -# 1750| ValueCategory = prvalue -# 1751| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1751| Type = [VoidType] void -# 1751| ValueCategory = prvalue -# 1751| getQualifier(): [VariableAccess] x577 -# 1751| Type = [Struct] String -# 1751| ValueCategory = lvalue -# 1751| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1751| Conversion = [BoolConversion] conversion to bool -# 1751| Type = [BoolType] bool -# 1751| Value = [CStyleCast] 0 -# 1751| ValueCategory = prvalue -# 1752| getStmt(578): [DoStmt] do (...) ... -# 1754| getCondition(): [Literal] 0 -# 1754| Type = [IntType] int -# 1754| Value = [Literal] 0 -# 1754| ValueCategory = prvalue -# 1752| getStmt(): [BlockStmt] { ... } -# 1753| getStmt(0): [DeclStmt] declaration -# 1753| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x578 -# 1753| Type = [Struct] String -# 1753| getVariable().getInitializer(): [Initializer] initializer for x578 -# 1753| getExpr(): [ConstructorCall] call to String -# 1753| Type = [VoidType] void -# 1753| ValueCategory = prvalue -# 1754| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1754| Type = [VoidType] void -# 1754| ValueCategory = prvalue -# 1754| getQualifier(): [VariableAccess] x578 -# 1754| Type = [Struct] String -# 1754| ValueCategory = lvalue -# 1754| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1754| Conversion = [BoolConversion] conversion to bool -# 1754| Type = [BoolType] bool -# 1754| Value = [CStyleCast] 0 -# 1754| ValueCategory = prvalue -# 1755| getStmt(579): [DoStmt] do (...) ... -# 1757| getCondition(): [Literal] 0 -# 1757| Type = [IntType] int -# 1757| Value = [Literal] 0 -# 1757| ValueCategory = prvalue -# 1755| getStmt(): [BlockStmt] { ... } -# 1756| getStmt(0): [DeclStmt] declaration -# 1756| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x579 -# 1756| Type = [Struct] String -# 1756| getVariable().getInitializer(): [Initializer] initializer for x579 -# 1756| getExpr(): [ConstructorCall] call to String -# 1756| Type = [VoidType] void -# 1756| ValueCategory = prvalue -# 1757| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1757| Type = [VoidType] void -# 1757| ValueCategory = prvalue -# 1757| getQualifier(): [VariableAccess] x579 -# 1757| Type = [Struct] String -# 1757| ValueCategory = lvalue -# 1757| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1757| Conversion = [BoolConversion] conversion to bool -# 1757| Type = [BoolType] bool -# 1757| Value = [CStyleCast] 0 -# 1757| ValueCategory = prvalue -# 1758| getStmt(580): [DoStmt] do (...) ... -# 1760| getCondition(): [Literal] 0 -# 1760| Type = [IntType] int -# 1760| Value = [Literal] 0 -# 1760| ValueCategory = prvalue -# 1758| getStmt(): [BlockStmt] { ... } -# 1759| getStmt(0): [DeclStmt] declaration -# 1759| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x580 -# 1759| Type = [Struct] String -# 1759| getVariable().getInitializer(): [Initializer] initializer for x580 -# 1759| getExpr(): [ConstructorCall] call to String -# 1759| Type = [VoidType] void -# 1759| ValueCategory = prvalue -# 1760| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1760| Type = [VoidType] void -# 1760| ValueCategory = prvalue -# 1760| getQualifier(): [VariableAccess] x580 -# 1760| Type = [Struct] String -# 1760| ValueCategory = lvalue -# 1760| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1760| Conversion = [BoolConversion] conversion to bool -# 1760| Type = [BoolType] bool -# 1760| Value = [CStyleCast] 0 -# 1760| ValueCategory = prvalue -# 1761| getStmt(581): [DoStmt] do (...) ... -# 1763| getCondition(): [Literal] 0 -# 1763| Type = [IntType] int -# 1763| Value = [Literal] 0 -# 1763| ValueCategory = prvalue -# 1761| getStmt(): [BlockStmt] { ... } -# 1762| getStmt(0): [DeclStmt] declaration -# 1762| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x581 -# 1762| Type = [Struct] String -# 1762| getVariable().getInitializer(): [Initializer] initializer for x581 -# 1762| getExpr(): [ConstructorCall] call to String -# 1762| Type = [VoidType] void -# 1762| ValueCategory = prvalue -# 1763| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1763| Type = [VoidType] void -# 1763| ValueCategory = prvalue -# 1763| getQualifier(): [VariableAccess] x581 -# 1763| Type = [Struct] String -# 1763| ValueCategory = lvalue -# 1763| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1763| Conversion = [BoolConversion] conversion to bool -# 1763| Type = [BoolType] bool -# 1763| Value = [CStyleCast] 0 -# 1763| ValueCategory = prvalue -# 1764| getStmt(582): [DoStmt] do (...) ... -# 1766| getCondition(): [Literal] 0 -# 1766| Type = [IntType] int -# 1766| Value = [Literal] 0 -# 1766| ValueCategory = prvalue -# 1764| getStmt(): [BlockStmt] { ... } -# 1765| getStmt(0): [DeclStmt] declaration -# 1765| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x582 -# 1765| Type = [Struct] String -# 1765| getVariable().getInitializer(): [Initializer] initializer for x582 -# 1765| getExpr(): [ConstructorCall] call to String -# 1765| Type = [VoidType] void -# 1765| ValueCategory = prvalue -# 1766| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1766| Type = [VoidType] void -# 1766| ValueCategory = prvalue -# 1766| getQualifier(): [VariableAccess] x582 -# 1766| Type = [Struct] String -# 1766| ValueCategory = lvalue -# 1766| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1766| Conversion = [BoolConversion] conversion to bool -# 1766| Type = [BoolType] bool -# 1766| Value = [CStyleCast] 0 -# 1766| ValueCategory = prvalue -# 1767| getStmt(583): [DoStmt] do (...) ... -# 1769| getCondition(): [Literal] 0 -# 1769| Type = [IntType] int -# 1769| Value = [Literal] 0 -# 1769| ValueCategory = prvalue -# 1767| getStmt(): [BlockStmt] { ... } -# 1768| getStmt(0): [DeclStmt] declaration -# 1768| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x583 -# 1768| Type = [Struct] String -# 1768| getVariable().getInitializer(): [Initializer] initializer for x583 -# 1768| getExpr(): [ConstructorCall] call to String -# 1768| Type = [VoidType] void -# 1768| ValueCategory = prvalue -# 1769| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1769| Type = [VoidType] void -# 1769| ValueCategory = prvalue -# 1769| getQualifier(): [VariableAccess] x583 -# 1769| Type = [Struct] String -# 1769| ValueCategory = lvalue -# 1769| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1769| Conversion = [BoolConversion] conversion to bool -# 1769| Type = [BoolType] bool -# 1769| Value = [CStyleCast] 0 -# 1769| ValueCategory = prvalue -# 1770| getStmt(584): [DoStmt] do (...) ... -# 1772| getCondition(): [Literal] 0 -# 1772| Type = [IntType] int -# 1772| Value = [Literal] 0 -# 1772| ValueCategory = prvalue -# 1770| getStmt(): [BlockStmt] { ... } -# 1771| getStmt(0): [DeclStmt] declaration -# 1771| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x584 -# 1771| Type = [Struct] String -# 1771| getVariable().getInitializer(): [Initializer] initializer for x584 -# 1771| getExpr(): [ConstructorCall] call to String -# 1771| Type = [VoidType] void -# 1771| ValueCategory = prvalue -# 1772| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1772| Type = [VoidType] void -# 1772| ValueCategory = prvalue -# 1772| getQualifier(): [VariableAccess] x584 -# 1772| Type = [Struct] String -# 1772| ValueCategory = lvalue -# 1772| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1772| Conversion = [BoolConversion] conversion to bool -# 1772| Type = [BoolType] bool -# 1772| Value = [CStyleCast] 0 -# 1772| ValueCategory = prvalue -# 1773| getStmt(585): [DoStmt] do (...) ... -# 1775| getCondition(): [Literal] 0 -# 1775| Type = [IntType] int -# 1775| Value = [Literal] 0 -# 1775| ValueCategory = prvalue -# 1773| getStmt(): [BlockStmt] { ... } -# 1774| getStmt(0): [DeclStmt] declaration -# 1774| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x585 -# 1774| Type = [Struct] String -# 1774| getVariable().getInitializer(): [Initializer] initializer for x585 -# 1774| getExpr(): [ConstructorCall] call to String -# 1774| Type = [VoidType] void -# 1774| ValueCategory = prvalue -# 1775| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1775| Type = [VoidType] void -# 1775| ValueCategory = prvalue -# 1775| getQualifier(): [VariableAccess] x585 -# 1775| Type = [Struct] String -# 1775| ValueCategory = lvalue -# 1775| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1775| Conversion = [BoolConversion] conversion to bool -# 1775| Type = [BoolType] bool -# 1775| Value = [CStyleCast] 0 -# 1775| ValueCategory = prvalue -# 1776| getStmt(586): [DoStmt] do (...) ... -# 1778| getCondition(): [Literal] 0 -# 1778| Type = [IntType] int -# 1778| Value = [Literal] 0 -# 1778| ValueCategory = prvalue -# 1776| getStmt(): [BlockStmt] { ... } -# 1777| getStmt(0): [DeclStmt] declaration -# 1777| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x586 -# 1777| Type = [Struct] String -# 1777| getVariable().getInitializer(): [Initializer] initializer for x586 -# 1777| getExpr(): [ConstructorCall] call to String -# 1777| Type = [VoidType] void -# 1777| ValueCategory = prvalue -# 1778| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1778| Type = [VoidType] void -# 1778| ValueCategory = prvalue -# 1778| getQualifier(): [VariableAccess] x586 -# 1778| Type = [Struct] String -# 1778| ValueCategory = lvalue -# 1778| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1778| Conversion = [BoolConversion] conversion to bool -# 1778| Type = [BoolType] bool -# 1778| Value = [CStyleCast] 0 -# 1778| ValueCategory = prvalue -# 1779| getStmt(587): [DoStmt] do (...) ... -# 1781| getCondition(): [Literal] 0 -# 1781| Type = [IntType] int -# 1781| Value = [Literal] 0 -# 1781| ValueCategory = prvalue -# 1779| getStmt(): [BlockStmt] { ... } -# 1780| getStmt(0): [DeclStmt] declaration -# 1780| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x587 -# 1780| Type = [Struct] String -# 1780| getVariable().getInitializer(): [Initializer] initializer for x587 -# 1780| getExpr(): [ConstructorCall] call to String -# 1780| Type = [VoidType] void -# 1780| ValueCategory = prvalue -# 1781| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1781| Type = [VoidType] void -# 1781| ValueCategory = prvalue -# 1781| getQualifier(): [VariableAccess] x587 -# 1781| Type = [Struct] String -# 1781| ValueCategory = lvalue -# 1781| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1781| Conversion = [BoolConversion] conversion to bool -# 1781| Type = [BoolType] bool -# 1781| Value = [CStyleCast] 0 -# 1781| ValueCategory = prvalue -# 1782| getStmt(588): [DoStmt] do (...) ... -# 1784| getCondition(): [Literal] 0 -# 1784| Type = [IntType] int -# 1784| Value = [Literal] 0 -# 1784| ValueCategory = prvalue -# 1782| getStmt(): [BlockStmt] { ... } -# 1783| getStmt(0): [DeclStmt] declaration -# 1783| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x588 -# 1783| Type = [Struct] String -# 1783| getVariable().getInitializer(): [Initializer] initializer for x588 -# 1783| getExpr(): [ConstructorCall] call to String -# 1783| Type = [VoidType] void -# 1783| ValueCategory = prvalue -# 1784| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1784| Type = [VoidType] void -# 1784| ValueCategory = prvalue -# 1784| getQualifier(): [VariableAccess] x588 -# 1784| Type = [Struct] String -# 1784| ValueCategory = lvalue -# 1784| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1784| Conversion = [BoolConversion] conversion to bool -# 1784| Type = [BoolType] bool -# 1784| Value = [CStyleCast] 0 -# 1784| ValueCategory = prvalue -# 1785| getStmt(589): [DoStmt] do (...) ... -# 1787| getCondition(): [Literal] 0 -# 1787| Type = [IntType] int -# 1787| Value = [Literal] 0 -# 1787| ValueCategory = prvalue -# 1785| getStmt(): [BlockStmt] { ... } -# 1786| getStmt(0): [DeclStmt] declaration -# 1786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x589 -# 1786| Type = [Struct] String -# 1786| getVariable().getInitializer(): [Initializer] initializer for x589 -# 1786| getExpr(): [ConstructorCall] call to String -# 1786| Type = [VoidType] void -# 1786| ValueCategory = prvalue -# 1787| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1787| Type = [VoidType] void -# 1787| ValueCategory = prvalue -# 1787| getQualifier(): [VariableAccess] x589 -# 1787| Type = [Struct] String -# 1787| ValueCategory = lvalue -# 1787| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1787| Conversion = [BoolConversion] conversion to bool -# 1787| Type = [BoolType] bool -# 1787| Value = [CStyleCast] 0 -# 1787| ValueCategory = prvalue -# 1788| getStmt(590): [DoStmt] do (...) ... -# 1790| getCondition(): [Literal] 0 -# 1790| Type = [IntType] int -# 1790| Value = [Literal] 0 -# 1790| ValueCategory = prvalue -# 1788| getStmt(): [BlockStmt] { ... } -# 1789| getStmt(0): [DeclStmt] declaration -# 1789| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x590 -# 1789| Type = [Struct] String -# 1789| getVariable().getInitializer(): [Initializer] initializer for x590 -# 1789| getExpr(): [ConstructorCall] call to String -# 1789| Type = [VoidType] void -# 1789| ValueCategory = prvalue -# 1790| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1790| Type = [VoidType] void -# 1790| ValueCategory = prvalue -# 1790| getQualifier(): [VariableAccess] x590 -# 1790| Type = [Struct] String -# 1790| ValueCategory = lvalue -# 1790| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1790| Conversion = [BoolConversion] conversion to bool -# 1790| Type = [BoolType] bool -# 1790| Value = [CStyleCast] 0 -# 1790| ValueCategory = prvalue -# 1791| getStmt(591): [DoStmt] do (...) ... -# 1793| getCondition(): [Literal] 0 -# 1793| Type = [IntType] int -# 1793| Value = [Literal] 0 -# 1793| ValueCategory = prvalue -# 1791| getStmt(): [BlockStmt] { ... } -# 1792| getStmt(0): [DeclStmt] declaration -# 1792| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x591 -# 1792| Type = [Struct] String -# 1792| getVariable().getInitializer(): [Initializer] initializer for x591 -# 1792| getExpr(): [ConstructorCall] call to String -# 1792| Type = [VoidType] void -# 1792| ValueCategory = prvalue -# 1793| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1793| Type = [VoidType] void -# 1793| ValueCategory = prvalue -# 1793| getQualifier(): [VariableAccess] x591 -# 1793| Type = [Struct] String -# 1793| ValueCategory = lvalue -# 1793| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1793| Conversion = [BoolConversion] conversion to bool -# 1793| Type = [BoolType] bool -# 1793| Value = [CStyleCast] 0 -# 1793| ValueCategory = prvalue -# 1794| getStmt(592): [DoStmt] do (...) ... -# 1796| getCondition(): [Literal] 0 -# 1796| Type = [IntType] int -# 1796| Value = [Literal] 0 -# 1796| ValueCategory = prvalue -# 1794| getStmt(): [BlockStmt] { ... } -# 1795| getStmt(0): [DeclStmt] declaration -# 1795| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x592 -# 1795| Type = [Struct] String -# 1795| getVariable().getInitializer(): [Initializer] initializer for x592 -# 1795| getExpr(): [ConstructorCall] call to String -# 1795| Type = [VoidType] void -# 1795| ValueCategory = prvalue -# 1796| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1796| Type = [VoidType] void -# 1796| ValueCategory = prvalue -# 1796| getQualifier(): [VariableAccess] x592 -# 1796| Type = [Struct] String -# 1796| ValueCategory = lvalue -# 1796| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1796| Conversion = [BoolConversion] conversion to bool -# 1796| Type = [BoolType] bool -# 1796| Value = [CStyleCast] 0 -# 1796| ValueCategory = prvalue -# 1797| getStmt(593): [DoStmt] do (...) ... -# 1799| getCondition(): [Literal] 0 -# 1799| Type = [IntType] int -# 1799| Value = [Literal] 0 -# 1799| ValueCategory = prvalue -# 1797| getStmt(): [BlockStmt] { ... } -# 1798| getStmt(0): [DeclStmt] declaration -# 1798| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x593 -# 1798| Type = [Struct] String -# 1798| getVariable().getInitializer(): [Initializer] initializer for x593 -# 1798| getExpr(): [ConstructorCall] call to String -# 1798| Type = [VoidType] void -# 1798| ValueCategory = prvalue -# 1799| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1799| Type = [VoidType] void -# 1799| ValueCategory = prvalue -# 1799| getQualifier(): [VariableAccess] x593 -# 1799| Type = [Struct] String -# 1799| ValueCategory = lvalue -# 1799| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1799| Conversion = [BoolConversion] conversion to bool -# 1799| Type = [BoolType] bool -# 1799| Value = [CStyleCast] 0 -# 1799| ValueCategory = prvalue -# 1800| getStmt(594): [DoStmt] do (...) ... -# 1802| getCondition(): [Literal] 0 -# 1802| Type = [IntType] int -# 1802| Value = [Literal] 0 -# 1802| ValueCategory = prvalue -# 1800| getStmt(): [BlockStmt] { ... } -# 1801| getStmt(0): [DeclStmt] declaration -# 1801| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x594 -# 1801| Type = [Struct] String -# 1801| getVariable().getInitializer(): [Initializer] initializer for x594 -# 1801| getExpr(): [ConstructorCall] call to String -# 1801| Type = [VoidType] void -# 1801| ValueCategory = prvalue -# 1802| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1802| Type = [VoidType] void -# 1802| ValueCategory = prvalue -# 1802| getQualifier(): [VariableAccess] x594 -# 1802| Type = [Struct] String -# 1802| ValueCategory = lvalue -# 1802| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1802| Conversion = [BoolConversion] conversion to bool -# 1802| Type = [BoolType] bool -# 1802| Value = [CStyleCast] 0 -# 1802| ValueCategory = prvalue -# 1803| getStmt(595): [DoStmt] do (...) ... -# 1805| getCondition(): [Literal] 0 -# 1805| Type = [IntType] int -# 1805| Value = [Literal] 0 -# 1805| ValueCategory = prvalue -# 1803| getStmt(): [BlockStmt] { ... } -# 1804| getStmt(0): [DeclStmt] declaration -# 1804| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x595 -# 1804| Type = [Struct] String -# 1804| getVariable().getInitializer(): [Initializer] initializer for x595 -# 1804| getExpr(): [ConstructorCall] call to String -# 1804| Type = [VoidType] void -# 1804| ValueCategory = prvalue -# 1805| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1805| Type = [VoidType] void -# 1805| ValueCategory = prvalue -# 1805| getQualifier(): [VariableAccess] x595 -# 1805| Type = [Struct] String -# 1805| ValueCategory = lvalue -# 1805| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1805| Conversion = [BoolConversion] conversion to bool -# 1805| Type = [BoolType] bool -# 1805| Value = [CStyleCast] 0 -# 1805| ValueCategory = prvalue -# 1806| getStmt(596): [DoStmt] do (...) ... -# 1808| getCondition(): [Literal] 0 -# 1808| Type = [IntType] int -# 1808| Value = [Literal] 0 -# 1808| ValueCategory = prvalue -# 1806| getStmt(): [BlockStmt] { ... } -# 1807| getStmt(0): [DeclStmt] declaration -# 1807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x596 -# 1807| Type = [Struct] String -# 1807| getVariable().getInitializer(): [Initializer] initializer for x596 -# 1807| getExpr(): [ConstructorCall] call to String -# 1807| Type = [VoidType] void -# 1807| ValueCategory = prvalue -# 1808| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1808| Type = [VoidType] void -# 1808| ValueCategory = prvalue -# 1808| getQualifier(): [VariableAccess] x596 -# 1808| Type = [Struct] String -# 1808| ValueCategory = lvalue -# 1808| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1808| Conversion = [BoolConversion] conversion to bool -# 1808| Type = [BoolType] bool -# 1808| Value = [CStyleCast] 0 -# 1808| ValueCategory = prvalue -# 1809| getStmt(597): [DoStmt] do (...) ... -# 1811| getCondition(): [Literal] 0 -# 1811| Type = [IntType] int -# 1811| Value = [Literal] 0 -# 1811| ValueCategory = prvalue -# 1809| getStmt(): [BlockStmt] { ... } -# 1810| getStmt(0): [DeclStmt] declaration -# 1810| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x597 -# 1810| Type = [Struct] String -# 1810| getVariable().getInitializer(): [Initializer] initializer for x597 -# 1810| getExpr(): [ConstructorCall] call to String -# 1810| Type = [VoidType] void -# 1810| ValueCategory = prvalue -# 1811| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1811| Type = [VoidType] void -# 1811| ValueCategory = prvalue -# 1811| getQualifier(): [VariableAccess] x597 -# 1811| Type = [Struct] String -# 1811| ValueCategory = lvalue -# 1811| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1811| Conversion = [BoolConversion] conversion to bool -# 1811| Type = [BoolType] bool -# 1811| Value = [CStyleCast] 0 -# 1811| ValueCategory = prvalue -# 1812| getStmt(598): [DoStmt] do (...) ... -# 1814| getCondition(): [Literal] 0 -# 1814| Type = [IntType] int -# 1814| Value = [Literal] 0 -# 1814| ValueCategory = prvalue -# 1812| getStmt(): [BlockStmt] { ... } -# 1813| getStmt(0): [DeclStmt] declaration -# 1813| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x598 -# 1813| Type = [Struct] String -# 1813| getVariable().getInitializer(): [Initializer] initializer for x598 -# 1813| getExpr(): [ConstructorCall] call to String -# 1813| Type = [VoidType] void -# 1813| ValueCategory = prvalue -# 1814| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1814| Type = [VoidType] void -# 1814| ValueCategory = prvalue -# 1814| getQualifier(): [VariableAccess] x598 -# 1814| Type = [Struct] String -# 1814| ValueCategory = lvalue -# 1814| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1814| Conversion = [BoolConversion] conversion to bool -# 1814| Type = [BoolType] bool -# 1814| Value = [CStyleCast] 0 -# 1814| ValueCategory = prvalue -# 1815| getStmt(599): [DoStmt] do (...) ... -# 1817| getCondition(): [Literal] 0 -# 1817| Type = [IntType] int -# 1817| Value = [Literal] 0 -# 1817| ValueCategory = prvalue -# 1815| getStmt(): [BlockStmt] { ... } -# 1816| getStmt(0): [DeclStmt] declaration -# 1816| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x599 -# 1816| Type = [Struct] String -# 1816| getVariable().getInitializer(): [Initializer] initializer for x599 -# 1816| getExpr(): [ConstructorCall] call to String -# 1816| Type = [VoidType] void -# 1816| ValueCategory = prvalue -# 1817| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1817| Type = [VoidType] void -# 1817| ValueCategory = prvalue -# 1817| getQualifier(): [VariableAccess] x599 -# 1817| Type = [Struct] String -# 1817| ValueCategory = lvalue -# 1817| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1817| Conversion = [BoolConversion] conversion to bool -# 1817| Type = [BoolType] bool -# 1817| Value = [CStyleCast] 0 -# 1817| ValueCategory = prvalue -# 1818| getStmt(600): [DoStmt] do (...) ... -# 1820| getCondition(): [Literal] 0 -# 1820| Type = [IntType] int -# 1820| Value = [Literal] 0 -# 1820| ValueCategory = prvalue -# 1818| getStmt(): [BlockStmt] { ... } -# 1819| getStmt(0): [DeclStmt] declaration -# 1819| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x600 -# 1819| Type = [Struct] String -# 1819| getVariable().getInitializer(): [Initializer] initializer for x600 -# 1819| getExpr(): [ConstructorCall] call to String -# 1819| Type = [VoidType] void -# 1819| ValueCategory = prvalue -# 1820| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1820| Type = [VoidType] void -# 1820| ValueCategory = prvalue -# 1820| getQualifier(): [VariableAccess] x600 -# 1820| Type = [Struct] String -# 1820| ValueCategory = lvalue -# 1820| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1820| Conversion = [BoolConversion] conversion to bool -# 1820| Type = [BoolType] bool -# 1820| Value = [CStyleCast] 0 -# 1820| ValueCategory = prvalue -# 1821| getStmt(601): [DoStmt] do (...) ... -# 1823| getCondition(): [Literal] 0 -# 1823| Type = [IntType] int -# 1823| Value = [Literal] 0 -# 1823| ValueCategory = prvalue -# 1821| getStmt(): [BlockStmt] { ... } -# 1822| getStmt(0): [DeclStmt] declaration -# 1822| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x601 -# 1822| Type = [Struct] String -# 1822| getVariable().getInitializer(): [Initializer] initializer for x601 -# 1822| getExpr(): [ConstructorCall] call to String -# 1822| Type = [VoidType] void -# 1822| ValueCategory = prvalue -# 1823| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1823| Type = [VoidType] void -# 1823| ValueCategory = prvalue -# 1823| getQualifier(): [VariableAccess] x601 -# 1823| Type = [Struct] String -# 1823| ValueCategory = lvalue -# 1823| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1823| Conversion = [BoolConversion] conversion to bool -# 1823| Type = [BoolType] bool -# 1823| Value = [CStyleCast] 0 -# 1823| ValueCategory = prvalue -# 1824| getStmt(602): [DoStmt] do (...) ... -# 1826| getCondition(): [Literal] 0 -# 1826| Type = [IntType] int -# 1826| Value = [Literal] 0 -# 1826| ValueCategory = prvalue -# 1824| getStmt(): [BlockStmt] { ... } -# 1825| getStmt(0): [DeclStmt] declaration -# 1825| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x602 -# 1825| Type = [Struct] String -# 1825| getVariable().getInitializer(): [Initializer] initializer for x602 -# 1825| getExpr(): [ConstructorCall] call to String -# 1825| Type = [VoidType] void -# 1825| ValueCategory = prvalue -# 1826| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1826| Type = [VoidType] void -# 1826| ValueCategory = prvalue -# 1826| getQualifier(): [VariableAccess] x602 -# 1826| Type = [Struct] String -# 1826| ValueCategory = lvalue -# 1826| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1826| Conversion = [BoolConversion] conversion to bool -# 1826| Type = [BoolType] bool -# 1826| Value = [CStyleCast] 0 -# 1826| ValueCategory = prvalue -# 1827| getStmt(603): [DoStmt] do (...) ... -# 1829| getCondition(): [Literal] 0 -# 1829| Type = [IntType] int -# 1829| Value = [Literal] 0 -# 1829| ValueCategory = prvalue -# 1827| getStmt(): [BlockStmt] { ... } -# 1828| getStmt(0): [DeclStmt] declaration -# 1828| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x603 -# 1828| Type = [Struct] String -# 1828| getVariable().getInitializer(): [Initializer] initializer for x603 -# 1828| getExpr(): [ConstructorCall] call to String -# 1828| Type = [VoidType] void -# 1828| ValueCategory = prvalue -# 1829| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1829| Type = [VoidType] void -# 1829| ValueCategory = prvalue -# 1829| getQualifier(): [VariableAccess] x603 -# 1829| Type = [Struct] String -# 1829| ValueCategory = lvalue -# 1829| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1829| Conversion = [BoolConversion] conversion to bool -# 1829| Type = [BoolType] bool -# 1829| Value = [CStyleCast] 0 -# 1829| ValueCategory = prvalue -# 1830| getStmt(604): [DoStmt] do (...) ... -# 1832| getCondition(): [Literal] 0 -# 1832| Type = [IntType] int -# 1832| Value = [Literal] 0 -# 1832| ValueCategory = prvalue -# 1830| getStmt(): [BlockStmt] { ... } -# 1831| getStmt(0): [DeclStmt] declaration -# 1831| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x604 -# 1831| Type = [Struct] String -# 1831| getVariable().getInitializer(): [Initializer] initializer for x604 -# 1831| getExpr(): [ConstructorCall] call to String -# 1831| Type = [VoidType] void -# 1831| ValueCategory = prvalue -# 1832| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1832| Type = [VoidType] void -# 1832| ValueCategory = prvalue -# 1832| getQualifier(): [VariableAccess] x604 -# 1832| Type = [Struct] String -# 1832| ValueCategory = lvalue -# 1832| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1832| Conversion = [BoolConversion] conversion to bool -# 1832| Type = [BoolType] bool -# 1832| Value = [CStyleCast] 0 -# 1832| ValueCategory = prvalue -# 1833| getStmt(605): [DoStmt] do (...) ... -# 1835| getCondition(): [Literal] 0 -# 1835| Type = [IntType] int -# 1835| Value = [Literal] 0 -# 1835| ValueCategory = prvalue -# 1833| getStmt(): [BlockStmt] { ... } -# 1834| getStmt(0): [DeclStmt] declaration -# 1834| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x605 -# 1834| Type = [Struct] String -# 1834| getVariable().getInitializer(): [Initializer] initializer for x605 -# 1834| getExpr(): [ConstructorCall] call to String -# 1834| Type = [VoidType] void -# 1834| ValueCategory = prvalue -# 1835| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1835| Type = [VoidType] void -# 1835| ValueCategory = prvalue -# 1835| getQualifier(): [VariableAccess] x605 -# 1835| Type = [Struct] String -# 1835| ValueCategory = lvalue -# 1835| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1835| Conversion = [BoolConversion] conversion to bool -# 1835| Type = [BoolType] bool -# 1835| Value = [CStyleCast] 0 -# 1835| ValueCategory = prvalue -# 1836| getStmt(606): [DoStmt] do (...) ... -# 1838| getCondition(): [Literal] 0 -# 1838| Type = [IntType] int -# 1838| Value = [Literal] 0 -# 1838| ValueCategory = prvalue -# 1836| getStmt(): [BlockStmt] { ... } -# 1837| getStmt(0): [DeclStmt] declaration -# 1837| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x606 -# 1837| Type = [Struct] String -# 1837| getVariable().getInitializer(): [Initializer] initializer for x606 -# 1837| getExpr(): [ConstructorCall] call to String -# 1837| Type = [VoidType] void -# 1837| ValueCategory = prvalue -# 1838| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1838| Type = [VoidType] void -# 1838| ValueCategory = prvalue -# 1838| getQualifier(): [VariableAccess] x606 -# 1838| Type = [Struct] String -# 1838| ValueCategory = lvalue -# 1838| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1838| Conversion = [BoolConversion] conversion to bool -# 1838| Type = [BoolType] bool -# 1838| Value = [CStyleCast] 0 -# 1838| ValueCategory = prvalue -# 1839| getStmt(607): [DoStmt] do (...) ... -# 1841| getCondition(): [Literal] 0 -# 1841| Type = [IntType] int -# 1841| Value = [Literal] 0 -# 1841| ValueCategory = prvalue -# 1839| getStmt(): [BlockStmt] { ... } -# 1840| getStmt(0): [DeclStmt] declaration -# 1840| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x607 -# 1840| Type = [Struct] String -# 1840| getVariable().getInitializer(): [Initializer] initializer for x607 -# 1840| getExpr(): [ConstructorCall] call to String -# 1840| Type = [VoidType] void -# 1840| ValueCategory = prvalue -# 1841| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1841| Type = [VoidType] void -# 1841| ValueCategory = prvalue -# 1841| getQualifier(): [VariableAccess] x607 -# 1841| Type = [Struct] String -# 1841| ValueCategory = lvalue -# 1841| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1841| Conversion = [BoolConversion] conversion to bool -# 1841| Type = [BoolType] bool -# 1841| Value = [CStyleCast] 0 -# 1841| ValueCategory = prvalue -# 1842| getStmt(608): [DoStmt] do (...) ... -# 1844| getCondition(): [Literal] 0 -# 1844| Type = [IntType] int -# 1844| Value = [Literal] 0 -# 1844| ValueCategory = prvalue -# 1842| getStmt(): [BlockStmt] { ... } -# 1843| getStmt(0): [DeclStmt] declaration -# 1843| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x608 -# 1843| Type = [Struct] String -# 1843| getVariable().getInitializer(): [Initializer] initializer for x608 -# 1843| getExpr(): [ConstructorCall] call to String -# 1843| Type = [VoidType] void -# 1843| ValueCategory = prvalue -# 1844| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1844| Type = [VoidType] void -# 1844| ValueCategory = prvalue -# 1844| getQualifier(): [VariableAccess] x608 -# 1844| Type = [Struct] String -# 1844| ValueCategory = lvalue -# 1844| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1844| Conversion = [BoolConversion] conversion to bool -# 1844| Type = [BoolType] bool -# 1844| Value = [CStyleCast] 0 -# 1844| ValueCategory = prvalue -# 1845| getStmt(609): [DoStmt] do (...) ... -# 1847| getCondition(): [Literal] 0 -# 1847| Type = [IntType] int -# 1847| Value = [Literal] 0 -# 1847| ValueCategory = prvalue -# 1845| getStmt(): [BlockStmt] { ... } -# 1846| getStmt(0): [DeclStmt] declaration -# 1846| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x609 -# 1846| Type = [Struct] String -# 1846| getVariable().getInitializer(): [Initializer] initializer for x609 -# 1846| getExpr(): [ConstructorCall] call to String -# 1846| Type = [VoidType] void -# 1846| ValueCategory = prvalue -# 1847| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1847| Type = [VoidType] void -# 1847| ValueCategory = prvalue -# 1847| getQualifier(): [VariableAccess] x609 -# 1847| Type = [Struct] String -# 1847| ValueCategory = lvalue -# 1847| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1847| Conversion = [BoolConversion] conversion to bool -# 1847| Type = [BoolType] bool -# 1847| Value = [CStyleCast] 0 -# 1847| ValueCategory = prvalue -# 1848| getStmt(610): [DoStmt] do (...) ... -# 1850| getCondition(): [Literal] 0 -# 1850| Type = [IntType] int -# 1850| Value = [Literal] 0 -# 1850| ValueCategory = prvalue -# 1848| getStmt(): [BlockStmt] { ... } -# 1849| getStmt(0): [DeclStmt] declaration -# 1849| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x610 -# 1849| Type = [Struct] String -# 1849| getVariable().getInitializer(): [Initializer] initializer for x610 -# 1849| getExpr(): [ConstructorCall] call to String -# 1849| Type = [VoidType] void -# 1849| ValueCategory = prvalue -# 1850| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1850| Type = [VoidType] void -# 1850| ValueCategory = prvalue -# 1850| getQualifier(): [VariableAccess] x610 -# 1850| Type = [Struct] String -# 1850| ValueCategory = lvalue -# 1850| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1850| Conversion = [BoolConversion] conversion to bool -# 1850| Type = [BoolType] bool -# 1850| Value = [CStyleCast] 0 -# 1850| ValueCategory = prvalue -# 1851| getStmt(611): [DoStmt] do (...) ... -# 1853| getCondition(): [Literal] 0 -# 1853| Type = [IntType] int -# 1853| Value = [Literal] 0 -# 1853| ValueCategory = prvalue -# 1851| getStmt(): [BlockStmt] { ... } -# 1852| getStmt(0): [DeclStmt] declaration -# 1852| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x611 -# 1852| Type = [Struct] String -# 1852| getVariable().getInitializer(): [Initializer] initializer for x611 -# 1852| getExpr(): [ConstructorCall] call to String -# 1852| Type = [VoidType] void -# 1852| ValueCategory = prvalue -# 1853| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1853| Type = [VoidType] void -# 1853| ValueCategory = prvalue -# 1853| getQualifier(): [VariableAccess] x611 -# 1853| Type = [Struct] String -# 1853| ValueCategory = lvalue -# 1853| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1853| Conversion = [BoolConversion] conversion to bool -# 1853| Type = [BoolType] bool -# 1853| Value = [CStyleCast] 0 -# 1853| ValueCategory = prvalue -# 1854| getStmt(612): [DoStmt] do (...) ... -# 1856| getCondition(): [Literal] 0 -# 1856| Type = [IntType] int -# 1856| Value = [Literal] 0 -# 1856| ValueCategory = prvalue -# 1854| getStmt(): [BlockStmt] { ... } -# 1855| getStmt(0): [DeclStmt] declaration -# 1855| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x612 -# 1855| Type = [Struct] String -# 1855| getVariable().getInitializer(): [Initializer] initializer for x612 -# 1855| getExpr(): [ConstructorCall] call to String -# 1855| Type = [VoidType] void -# 1855| ValueCategory = prvalue -# 1856| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1856| Type = [VoidType] void -# 1856| ValueCategory = prvalue -# 1856| getQualifier(): [VariableAccess] x612 -# 1856| Type = [Struct] String -# 1856| ValueCategory = lvalue -# 1856| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1856| Conversion = [BoolConversion] conversion to bool -# 1856| Type = [BoolType] bool -# 1856| Value = [CStyleCast] 0 -# 1856| ValueCategory = prvalue -# 1857| getStmt(613): [DoStmt] do (...) ... -# 1859| getCondition(): [Literal] 0 -# 1859| Type = [IntType] int -# 1859| Value = [Literal] 0 -# 1859| ValueCategory = prvalue -# 1857| getStmt(): [BlockStmt] { ... } -# 1858| getStmt(0): [DeclStmt] declaration -# 1858| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x613 -# 1858| Type = [Struct] String -# 1858| getVariable().getInitializer(): [Initializer] initializer for x613 -# 1858| getExpr(): [ConstructorCall] call to String -# 1858| Type = [VoidType] void -# 1858| ValueCategory = prvalue -# 1859| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1859| Type = [VoidType] void -# 1859| ValueCategory = prvalue -# 1859| getQualifier(): [VariableAccess] x613 -# 1859| Type = [Struct] String -# 1859| ValueCategory = lvalue -# 1859| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1859| Conversion = [BoolConversion] conversion to bool -# 1859| Type = [BoolType] bool -# 1859| Value = [CStyleCast] 0 -# 1859| ValueCategory = prvalue -# 1860| getStmt(614): [DoStmt] do (...) ... -# 1862| getCondition(): [Literal] 0 -# 1862| Type = [IntType] int -# 1862| Value = [Literal] 0 -# 1862| ValueCategory = prvalue -# 1860| getStmt(): [BlockStmt] { ... } -# 1861| getStmt(0): [DeclStmt] declaration -# 1861| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x614 -# 1861| Type = [Struct] String -# 1861| getVariable().getInitializer(): [Initializer] initializer for x614 -# 1861| getExpr(): [ConstructorCall] call to String -# 1861| Type = [VoidType] void -# 1861| ValueCategory = prvalue -# 1862| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1862| Type = [VoidType] void -# 1862| ValueCategory = prvalue -# 1862| getQualifier(): [VariableAccess] x614 -# 1862| Type = [Struct] String -# 1862| ValueCategory = lvalue -# 1862| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1862| Conversion = [BoolConversion] conversion to bool -# 1862| Type = [BoolType] bool -# 1862| Value = [CStyleCast] 0 -# 1862| ValueCategory = prvalue -# 1863| getStmt(615): [DoStmt] do (...) ... -# 1865| getCondition(): [Literal] 0 -# 1865| Type = [IntType] int -# 1865| Value = [Literal] 0 -# 1865| ValueCategory = prvalue -# 1863| getStmt(): [BlockStmt] { ... } -# 1864| getStmt(0): [DeclStmt] declaration -# 1864| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x615 -# 1864| Type = [Struct] String -# 1864| getVariable().getInitializer(): [Initializer] initializer for x615 -# 1864| getExpr(): [ConstructorCall] call to String -# 1864| Type = [VoidType] void -# 1864| ValueCategory = prvalue -# 1865| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1865| Type = [VoidType] void -# 1865| ValueCategory = prvalue -# 1865| getQualifier(): [VariableAccess] x615 -# 1865| Type = [Struct] String -# 1865| ValueCategory = lvalue -# 1865| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1865| Conversion = [BoolConversion] conversion to bool -# 1865| Type = [BoolType] bool -# 1865| Value = [CStyleCast] 0 -# 1865| ValueCategory = prvalue -# 1866| getStmt(616): [DoStmt] do (...) ... -# 1868| getCondition(): [Literal] 0 -# 1868| Type = [IntType] int -# 1868| Value = [Literal] 0 -# 1868| ValueCategory = prvalue -# 1866| getStmt(): [BlockStmt] { ... } -# 1867| getStmt(0): [DeclStmt] declaration -# 1867| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x616 -# 1867| Type = [Struct] String -# 1867| getVariable().getInitializer(): [Initializer] initializer for x616 -# 1867| getExpr(): [ConstructorCall] call to String -# 1867| Type = [VoidType] void -# 1867| ValueCategory = prvalue -# 1868| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1868| Type = [VoidType] void -# 1868| ValueCategory = prvalue -# 1868| getQualifier(): [VariableAccess] x616 -# 1868| Type = [Struct] String -# 1868| ValueCategory = lvalue -# 1868| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1868| Conversion = [BoolConversion] conversion to bool -# 1868| Type = [BoolType] bool -# 1868| Value = [CStyleCast] 0 -# 1868| ValueCategory = prvalue -# 1869| getStmt(617): [DoStmt] do (...) ... -# 1871| getCondition(): [Literal] 0 -# 1871| Type = [IntType] int -# 1871| Value = [Literal] 0 -# 1871| ValueCategory = prvalue -# 1869| getStmt(): [BlockStmt] { ... } -# 1870| getStmt(0): [DeclStmt] declaration -# 1870| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x617 -# 1870| Type = [Struct] String -# 1870| getVariable().getInitializer(): [Initializer] initializer for x617 -# 1870| getExpr(): [ConstructorCall] call to String -# 1870| Type = [VoidType] void -# 1870| ValueCategory = prvalue -# 1871| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1871| Type = [VoidType] void -# 1871| ValueCategory = prvalue -# 1871| getQualifier(): [VariableAccess] x617 -# 1871| Type = [Struct] String -# 1871| ValueCategory = lvalue -# 1871| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1871| Conversion = [BoolConversion] conversion to bool -# 1871| Type = [BoolType] bool -# 1871| Value = [CStyleCast] 0 -# 1871| ValueCategory = prvalue -# 1872| getStmt(618): [DoStmt] do (...) ... -# 1874| getCondition(): [Literal] 0 -# 1874| Type = [IntType] int -# 1874| Value = [Literal] 0 -# 1874| ValueCategory = prvalue -# 1872| getStmt(): [BlockStmt] { ... } -# 1873| getStmt(0): [DeclStmt] declaration -# 1873| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x618 -# 1873| Type = [Struct] String -# 1873| getVariable().getInitializer(): [Initializer] initializer for x618 -# 1873| getExpr(): [ConstructorCall] call to String -# 1873| Type = [VoidType] void -# 1873| ValueCategory = prvalue -# 1874| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1874| Type = [VoidType] void -# 1874| ValueCategory = prvalue -# 1874| getQualifier(): [VariableAccess] x618 -# 1874| Type = [Struct] String -# 1874| ValueCategory = lvalue -# 1874| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1874| Conversion = [BoolConversion] conversion to bool -# 1874| Type = [BoolType] bool -# 1874| Value = [CStyleCast] 0 -# 1874| ValueCategory = prvalue -# 1875| getStmt(619): [DoStmt] do (...) ... -# 1877| getCondition(): [Literal] 0 -# 1877| Type = [IntType] int -# 1877| Value = [Literal] 0 -# 1877| ValueCategory = prvalue -# 1875| getStmt(): [BlockStmt] { ... } -# 1876| getStmt(0): [DeclStmt] declaration -# 1876| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x619 -# 1876| Type = [Struct] String -# 1876| getVariable().getInitializer(): [Initializer] initializer for x619 -# 1876| getExpr(): [ConstructorCall] call to String -# 1876| Type = [VoidType] void -# 1876| ValueCategory = prvalue -# 1877| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1877| Type = [VoidType] void -# 1877| ValueCategory = prvalue -# 1877| getQualifier(): [VariableAccess] x619 -# 1877| Type = [Struct] String -# 1877| ValueCategory = lvalue -# 1877| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1877| Conversion = [BoolConversion] conversion to bool -# 1877| Type = [BoolType] bool -# 1877| Value = [CStyleCast] 0 -# 1877| ValueCategory = prvalue -# 1878| getStmt(620): [DoStmt] do (...) ... -# 1880| getCondition(): [Literal] 0 -# 1880| Type = [IntType] int -# 1880| Value = [Literal] 0 -# 1880| ValueCategory = prvalue -# 1878| getStmt(): [BlockStmt] { ... } -# 1879| getStmt(0): [DeclStmt] declaration -# 1879| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x620 -# 1879| Type = [Struct] String -# 1879| getVariable().getInitializer(): [Initializer] initializer for x620 -# 1879| getExpr(): [ConstructorCall] call to String -# 1879| Type = [VoidType] void -# 1879| ValueCategory = prvalue -# 1880| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1880| Type = [VoidType] void -# 1880| ValueCategory = prvalue -# 1880| getQualifier(): [VariableAccess] x620 -# 1880| Type = [Struct] String -# 1880| ValueCategory = lvalue -# 1880| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1880| Conversion = [BoolConversion] conversion to bool -# 1880| Type = [BoolType] bool -# 1880| Value = [CStyleCast] 0 -# 1880| ValueCategory = prvalue -# 1881| getStmt(621): [DoStmt] do (...) ... -# 1883| getCondition(): [Literal] 0 -# 1883| Type = [IntType] int -# 1883| Value = [Literal] 0 -# 1883| ValueCategory = prvalue -# 1881| getStmt(): [BlockStmt] { ... } -# 1882| getStmt(0): [DeclStmt] declaration -# 1882| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x621 -# 1882| Type = [Struct] String -# 1882| getVariable().getInitializer(): [Initializer] initializer for x621 -# 1882| getExpr(): [ConstructorCall] call to String -# 1882| Type = [VoidType] void -# 1882| ValueCategory = prvalue -# 1883| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1883| Type = [VoidType] void -# 1883| ValueCategory = prvalue -# 1883| getQualifier(): [VariableAccess] x621 -# 1883| Type = [Struct] String -# 1883| ValueCategory = lvalue -# 1883| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1883| Conversion = [BoolConversion] conversion to bool -# 1883| Type = [BoolType] bool -# 1883| Value = [CStyleCast] 0 -# 1883| ValueCategory = prvalue -# 1884| getStmt(622): [DoStmt] do (...) ... -# 1886| getCondition(): [Literal] 0 -# 1886| Type = [IntType] int -# 1886| Value = [Literal] 0 -# 1886| ValueCategory = prvalue -# 1884| getStmt(): [BlockStmt] { ... } -# 1885| getStmt(0): [DeclStmt] declaration -# 1885| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x622 -# 1885| Type = [Struct] String -# 1885| getVariable().getInitializer(): [Initializer] initializer for x622 -# 1885| getExpr(): [ConstructorCall] call to String -# 1885| Type = [VoidType] void -# 1885| ValueCategory = prvalue -# 1886| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1886| Type = [VoidType] void -# 1886| ValueCategory = prvalue -# 1886| getQualifier(): [VariableAccess] x622 -# 1886| Type = [Struct] String -# 1886| ValueCategory = lvalue -# 1886| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1886| Conversion = [BoolConversion] conversion to bool -# 1886| Type = [BoolType] bool -# 1886| Value = [CStyleCast] 0 -# 1886| ValueCategory = prvalue -# 1887| getStmt(623): [DoStmt] do (...) ... -# 1889| getCondition(): [Literal] 0 -# 1889| Type = [IntType] int -# 1889| Value = [Literal] 0 -# 1889| ValueCategory = prvalue -# 1887| getStmt(): [BlockStmt] { ... } -# 1888| getStmt(0): [DeclStmt] declaration -# 1888| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x623 -# 1888| Type = [Struct] String -# 1888| getVariable().getInitializer(): [Initializer] initializer for x623 -# 1888| getExpr(): [ConstructorCall] call to String -# 1888| Type = [VoidType] void -# 1888| ValueCategory = prvalue -# 1889| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1889| Type = [VoidType] void -# 1889| ValueCategory = prvalue -# 1889| getQualifier(): [VariableAccess] x623 -# 1889| Type = [Struct] String -# 1889| ValueCategory = lvalue -# 1889| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1889| Conversion = [BoolConversion] conversion to bool -# 1889| Type = [BoolType] bool -# 1889| Value = [CStyleCast] 0 -# 1889| ValueCategory = prvalue -# 1890| getStmt(624): [DoStmt] do (...) ... -# 1892| getCondition(): [Literal] 0 -# 1892| Type = [IntType] int -# 1892| Value = [Literal] 0 -# 1892| ValueCategory = prvalue -# 1890| getStmt(): [BlockStmt] { ... } -# 1891| getStmt(0): [DeclStmt] declaration -# 1891| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x624 -# 1891| Type = [Struct] String -# 1891| getVariable().getInitializer(): [Initializer] initializer for x624 -# 1891| getExpr(): [ConstructorCall] call to String -# 1891| Type = [VoidType] void -# 1891| ValueCategory = prvalue -# 1892| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1892| Type = [VoidType] void -# 1892| ValueCategory = prvalue -# 1892| getQualifier(): [VariableAccess] x624 -# 1892| Type = [Struct] String -# 1892| ValueCategory = lvalue -# 1892| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1892| Conversion = [BoolConversion] conversion to bool -# 1892| Type = [BoolType] bool -# 1892| Value = [CStyleCast] 0 -# 1892| ValueCategory = prvalue -# 1893| getStmt(625): [DoStmt] do (...) ... -# 1895| getCondition(): [Literal] 0 -# 1895| Type = [IntType] int -# 1895| Value = [Literal] 0 -# 1895| ValueCategory = prvalue -# 1893| getStmt(): [BlockStmt] { ... } -# 1894| getStmt(0): [DeclStmt] declaration -# 1894| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x625 -# 1894| Type = [Struct] String -# 1894| getVariable().getInitializer(): [Initializer] initializer for x625 -# 1894| getExpr(): [ConstructorCall] call to String -# 1894| Type = [VoidType] void -# 1894| ValueCategory = prvalue -# 1895| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1895| Type = [VoidType] void -# 1895| ValueCategory = prvalue -# 1895| getQualifier(): [VariableAccess] x625 -# 1895| Type = [Struct] String -# 1895| ValueCategory = lvalue -# 1895| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1895| Conversion = [BoolConversion] conversion to bool -# 1895| Type = [BoolType] bool -# 1895| Value = [CStyleCast] 0 -# 1895| ValueCategory = prvalue -# 1896| getStmt(626): [DoStmt] do (...) ... -# 1898| getCondition(): [Literal] 0 -# 1898| Type = [IntType] int -# 1898| Value = [Literal] 0 -# 1898| ValueCategory = prvalue -# 1896| getStmt(): [BlockStmt] { ... } -# 1897| getStmt(0): [DeclStmt] declaration -# 1897| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x626 -# 1897| Type = [Struct] String -# 1897| getVariable().getInitializer(): [Initializer] initializer for x626 -# 1897| getExpr(): [ConstructorCall] call to String -# 1897| Type = [VoidType] void -# 1897| ValueCategory = prvalue -# 1898| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1898| Type = [VoidType] void -# 1898| ValueCategory = prvalue -# 1898| getQualifier(): [VariableAccess] x626 -# 1898| Type = [Struct] String -# 1898| ValueCategory = lvalue -# 1898| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1898| Conversion = [BoolConversion] conversion to bool -# 1898| Type = [BoolType] bool -# 1898| Value = [CStyleCast] 0 -# 1898| ValueCategory = prvalue -# 1899| getStmt(627): [DoStmt] do (...) ... -# 1901| getCondition(): [Literal] 0 -# 1901| Type = [IntType] int -# 1901| Value = [Literal] 0 -# 1901| ValueCategory = prvalue -# 1899| getStmt(): [BlockStmt] { ... } -# 1900| getStmt(0): [DeclStmt] declaration -# 1900| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x627 -# 1900| Type = [Struct] String -# 1900| getVariable().getInitializer(): [Initializer] initializer for x627 -# 1900| getExpr(): [ConstructorCall] call to String -# 1900| Type = [VoidType] void -# 1900| ValueCategory = prvalue -# 1901| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1901| Type = [VoidType] void -# 1901| ValueCategory = prvalue -# 1901| getQualifier(): [VariableAccess] x627 -# 1901| Type = [Struct] String -# 1901| ValueCategory = lvalue -# 1901| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1901| Conversion = [BoolConversion] conversion to bool -# 1901| Type = [BoolType] bool -# 1901| Value = [CStyleCast] 0 -# 1901| ValueCategory = prvalue -# 1902| getStmt(628): [DoStmt] do (...) ... -# 1904| getCondition(): [Literal] 0 -# 1904| Type = [IntType] int -# 1904| Value = [Literal] 0 -# 1904| ValueCategory = prvalue -# 1902| getStmt(): [BlockStmt] { ... } -# 1903| getStmt(0): [DeclStmt] declaration -# 1903| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x628 -# 1903| Type = [Struct] String -# 1903| getVariable().getInitializer(): [Initializer] initializer for x628 -# 1903| getExpr(): [ConstructorCall] call to String -# 1903| Type = [VoidType] void -# 1903| ValueCategory = prvalue -# 1904| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1904| Type = [VoidType] void -# 1904| ValueCategory = prvalue -# 1904| getQualifier(): [VariableAccess] x628 -# 1904| Type = [Struct] String -# 1904| ValueCategory = lvalue -# 1904| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1904| Conversion = [BoolConversion] conversion to bool -# 1904| Type = [BoolType] bool -# 1904| Value = [CStyleCast] 0 -# 1904| ValueCategory = prvalue -# 1905| getStmt(629): [DoStmt] do (...) ... -# 1907| getCondition(): [Literal] 0 -# 1907| Type = [IntType] int -# 1907| Value = [Literal] 0 -# 1907| ValueCategory = prvalue -# 1905| getStmt(): [BlockStmt] { ... } -# 1906| getStmt(0): [DeclStmt] declaration -# 1906| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x629 -# 1906| Type = [Struct] String -# 1906| getVariable().getInitializer(): [Initializer] initializer for x629 -# 1906| getExpr(): [ConstructorCall] call to String -# 1906| Type = [VoidType] void -# 1906| ValueCategory = prvalue -# 1907| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1907| Type = [VoidType] void -# 1907| ValueCategory = prvalue -# 1907| getQualifier(): [VariableAccess] x629 -# 1907| Type = [Struct] String -# 1907| ValueCategory = lvalue -# 1907| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1907| Conversion = [BoolConversion] conversion to bool -# 1907| Type = [BoolType] bool -# 1907| Value = [CStyleCast] 0 -# 1907| ValueCategory = prvalue -# 1908| getStmt(630): [DoStmt] do (...) ... -# 1910| getCondition(): [Literal] 0 -# 1910| Type = [IntType] int -# 1910| Value = [Literal] 0 -# 1910| ValueCategory = prvalue -# 1908| getStmt(): [BlockStmt] { ... } -# 1909| getStmt(0): [DeclStmt] declaration -# 1909| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x630 -# 1909| Type = [Struct] String -# 1909| getVariable().getInitializer(): [Initializer] initializer for x630 -# 1909| getExpr(): [ConstructorCall] call to String -# 1909| Type = [VoidType] void -# 1909| ValueCategory = prvalue -# 1910| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1910| Type = [VoidType] void -# 1910| ValueCategory = prvalue -# 1910| getQualifier(): [VariableAccess] x630 -# 1910| Type = [Struct] String -# 1910| ValueCategory = lvalue -# 1910| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1910| Conversion = [BoolConversion] conversion to bool -# 1910| Type = [BoolType] bool -# 1910| Value = [CStyleCast] 0 -# 1910| ValueCategory = prvalue -# 1911| getStmt(631): [DoStmt] do (...) ... -# 1913| getCondition(): [Literal] 0 -# 1913| Type = [IntType] int -# 1913| Value = [Literal] 0 -# 1913| ValueCategory = prvalue -# 1911| getStmt(): [BlockStmt] { ... } -# 1912| getStmt(0): [DeclStmt] declaration -# 1912| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x631 -# 1912| Type = [Struct] String -# 1912| getVariable().getInitializer(): [Initializer] initializer for x631 -# 1912| getExpr(): [ConstructorCall] call to String -# 1912| Type = [VoidType] void -# 1912| ValueCategory = prvalue -# 1913| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1913| Type = [VoidType] void -# 1913| ValueCategory = prvalue -# 1913| getQualifier(): [VariableAccess] x631 -# 1913| Type = [Struct] String -# 1913| ValueCategory = lvalue -# 1913| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1913| Conversion = [BoolConversion] conversion to bool -# 1913| Type = [BoolType] bool -# 1913| Value = [CStyleCast] 0 -# 1913| ValueCategory = prvalue -# 1914| getStmt(632): [DoStmt] do (...) ... -# 1916| getCondition(): [Literal] 0 -# 1916| Type = [IntType] int -# 1916| Value = [Literal] 0 -# 1916| ValueCategory = prvalue -# 1914| getStmt(): [BlockStmt] { ... } -# 1915| getStmt(0): [DeclStmt] declaration -# 1915| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x632 -# 1915| Type = [Struct] String -# 1915| getVariable().getInitializer(): [Initializer] initializer for x632 -# 1915| getExpr(): [ConstructorCall] call to String -# 1915| Type = [VoidType] void -# 1915| ValueCategory = prvalue -# 1916| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1916| Type = [VoidType] void -# 1916| ValueCategory = prvalue -# 1916| getQualifier(): [VariableAccess] x632 -# 1916| Type = [Struct] String -# 1916| ValueCategory = lvalue -# 1916| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1916| Conversion = [BoolConversion] conversion to bool -# 1916| Type = [BoolType] bool -# 1916| Value = [CStyleCast] 0 -# 1916| ValueCategory = prvalue -# 1917| getStmt(633): [DoStmt] do (...) ... -# 1919| getCondition(): [Literal] 0 -# 1919| Type = [IntType] int -# 1919| Value = [Literal] 0 -# 1919| ValueCategory = prvalue -# 1917| getStmt(): [BlockStmt] { ... } -# 1918| getStmt(0): [DeclStmt] declaration -# 1918| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x633 -# 1918| Type = [Struct] String -# 1918| getVariable().getInitializer(): [Initializer] initializer for x633 -# 1918| getExpr(): [ConstructorCall] call to String -# 1918| Type = [VoidType] void -# 1918| ValueCategory = prvalue -# 1919| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1919| Type = [VoidType] void -# 1919| ValueCategory = prvalue -# 1919| getQualifier(): [VariableAccess] x633 -# 1919| Type = [Struct] String -# 1919| ValueCategory = lvalue -# 1919| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1919| Conversion = [BoolConversion] conversion to bool -# 1919| Type = [BoolType] bool -# 1919| Value = [CStyleCast] 0 -# 1919| ValueCategory = prvalue -# 1920| getStmt(634): [DoStmt] do (...) ... -# 1922| getCondition(): [Literal] 0 -# 1922| Type = [IntType] int -# 1922| Value = [Literal] 0 -# 1922| ValueCategory = prvalue -# 1920| getStmt(): [BlockStmt] { ... } -# 1921| getStmt(0): [DeclStmt] declaration -# 1921| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x634 -# 1921| Type = [Struct] String -# 1921| getVariable().getInitializer(): [Initializer] initializer for x634 -# 1921| getExpr(): [ConstructorCall] call to String -# 1921| Type = [VoidType] void -# 1921| ValueCategory = prvalue -# 1922| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1922| Type = [VoidType] void -# 1922| ValueCategory = prvalue -# 1922| getQualifier(): [VariableAccess] x634 -# 1922| Type = [Struct] String -# 1922| ValueCategory = lvalue -# 1922| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1922| Conversion = [BoolConversion] conversion to bool -# 1922| Type = [BoolType] bool -# 1922| Value = [CStyleCast] 0 -# 1922| ValueCategory = prvalue -# 1923| getStmt(635): [DoStmt] do (...) ... -# 1925| getCondition(): [Literal] 0 -# 1925| Type = [IntType] int -# 1925| Value = [Literal] 0 -# 1925| ValueCategory = prvalue -# 1923| getStmt(): [BlockStmt] { ... } -# 1924| getStmt(0): [DeclStmt] declaration -# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x635 -# 1924| Type = [Struct] String -# 1924| getVariable().getInitializer(): [Initializer] initializer for x635 -# 1924| getExpr(): [ConstructorCall] call to String -# 1924| Type = [VoidType] void -# 1924| ValueCategory = prvalue -# 1925| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1925| Type = [VoidType] void -# 1925| ValueCategory = prvalue -# 1925| getQualifier(): [VariableAccess] x635 -# 1925| Type = [Struct] String -# 1925| ValueCategory = lvalue -# 1925| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1925| Conversion = [BoolConversion] conversion to bool -# 1925| Type = [BoolType] bool -# 1925| Value = [CStyleCast] 0 -# 1925| ValueCategory = prvalue -# 1926| getStmt(636): [DoStmt] do (...) ... -# 1928| getCondition(): [Literal] 0 -# 1928| Type = [IntType] int -# 1928| Value = [Literal] 0 -# 1928| ValueCategory = prvalue -# 1926| getStmt(): [BlockStmt] { ... } -# 1927| getStmt(0): [DeclStmt] declaration -# 1927| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x636 -# 1927| Type = [Struct] String -# 1927| getVariable().getInitializer(): [Initializer] initializer for x636 -# 1927| getExpr(): [ConstructorCall] call to String -# 1927| Type = [VoidType] void -# 1927| ValueCategory = prvalue -# 1928| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1928| Type = [VoidType] void -# 1928| ValueCategory = prvalue -# 1928| getQualifier(): [VariableAccess] x636 -# 1928| Type = [Struct] String -# 1928| ValueCategory = lvalue -# 1928| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1928| Conversion = [BoolConversion] conversion to bool -# 1928| Type = [BoolType] bool -# 1928| Value = [CStyleCast] 0 -# 1928| ValueCategory = prvalue -# 1929| getStmt(637): [DoStmt] do (...) ... -# 1931| getCondition(): [Literal] 0 -# 1931| Type = [IntType] int -# 1931| Value = [Literal] 0 -# 1931| ValueCategory = prvalue -# 1929| getStmt(): [BlockStmt] { ... } -# 1930| getStmt(0): [DeclStmt] declaration -# 1930| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x637 -# 1930| Type = [Struct] String -# 1930| getVariable().getInitializer(): [Initializer] initializer for x637 -# 1930| getExpr(): [ConstructorCall] call to String -# 1930| Type = [VoidType] void -# 1930| ValueCategory = prvalue -# 1931| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1931| Type = [VoidType] void -# 1931| ValueCategory = prvalue -# 1931| getQualifier(): [VariableAccess] x637 -# 1931| Type = [Struct] String -# 1931| ValueCategory = lvalue -# 1931| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1931| Conversion = [BoolConversion] conversion to bool -# 1931| Type = [BoolType] bool -# 1931| Value = [CStyleCast] 0 -# 1931| ValueCategory = prvalue -# 1932| getStmt(638): [DoStmt] do (...) ... -# 1934| getCondition(): [Literal] 0 -# 1934| Type = [IntType] int -# 1934| Value = [Literal] 0 -# 1934| ValueCategory = prvalue -# 1932| getStmt(): [BlockStmt] { ... } -# 1933| getStmt(0): [DeclStmt] declaration -# 1933| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x638 -# 1933| Type = [Struct] String -# 1933| getVariable().getInitializer(): [Initializer] initializer for x638 -# 1933| getExpr(): [ConstructorCall] call to String -# 1933| Type = [VoidType] void -# 1933| ValueCategory = prvalue -# 1934| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1934| Type = [VoidType] void -# 1934| ValueCategory = prvalue -# 1934| getQualifier(): [VariableAccess] x638 -# 1934| Type = [Struct] String -# 1934| ValueCategory = lvalue -# 1934| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1934| Conversion = [BoolConversion] conversion to bool -# 1934| Type = [BoolType] bool -# 1934| Value = [CStyleCast] 0 -# 1934| ValueCategory = prvalue -# 1935| getStmt(639): [DoStmt] do (...) ... -# 1937| getCondition(): [Literal] 0 -# 1937| Type = [IntType] int -# 1937| Value = [Literal] 0 -# 1937| ValueCategory = prvalue -# 1935| getStmt(): [BlockStmt] { ... } -# 1936| getStmt(0): [DeclStmt] declaration -# 1936| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x639 -# 1936| Type = [Struct] String -# 1936| getVariable().getInitializer(): [Initializer] initializer for x639 -# 1936| getExpr(): [ConstructorCall] call to String -# 1936| Type = [VoidType] void -# 1936| ValueCategory = prvalue -# 1937| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1937| Type = [VoidType] void -# 1937| ValueCategory = prvalue -# 1937| getQualifier(): [VariableAccess] x639 -# 1937| Type = [Struct] String -# 1937| ValueCategory = lvalue -# 1937| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1937| Conversion = [BoolConversion] conversion to bool -# 1937| Type = [BoolType] bool -# 1937| Value = [CStyleCast] 0 -# 1937| ValueCategory = prvalue -# 1938| getStmt(640): [DoStmt] do (...) ... -# 1940| getCondition(): [Literal] 0 -# 1940| Type = [IntType] int -# 1940| Value = [Literal] 0 -# 1940| ValueCategory = prvalue -# 1938| getStmt(): [BlockStmt] { ... } -# 1939| getStmt(0): [DeclStmt] declaration -# 1939| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x640 -# 1939| Type = [Struct] String -# 1939| getVariable().getInitializer(): [Initializer] initializer for x640 -# 1939| getExpr(): [ConstructorCall] call to String -# 1939| Type = [VoidType] void -# 1939| ValueCategory = prvalue -# 1940| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1940| Type = [VoidType] void -# 1940| ValueCategory = prvalue -# 1940| getQualifier(): [VariableAccess] x640 -# 1940| Type = [Struct] String -# 1940| ValueCategory = lvalue -# 1940| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1940| Conversion = [BoolConversion] conversion to bool -# 1940| Type = [BoolType] bool -# 1940| Value = [CStyleCast] 0 -# 1940| ValueCategory = prvalue -# 1941| getStmt(641): [DoStmt] do (...) ... -# 1943| getCondition(): [Literal] 0 -# 1943| Type = [IntType] int -# 1943| Value = [Literal] 0 -# 1943| ValueCategory = prvalue -# 1941| getStmt(): [BlockStmt] { ... } -# 1942| getStmt(0): [DeclStmt] declaration -# 1942| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x641 -# 1942| Type = [Struct] String -# 1942| getVariable().getInitializer(): [Initializer] initializer for x641 -# 1942| getExpr(): [ConstructorCall] call to String -# 1942| Type = [VoidType] void -# 1942| ValueCategory = prvalue -# 1943| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1943| Type = [VoidType] void -# 1943| ValueCategory = prvalue -# 1943| getQualifier(): [VariableAccess] x641 -# 1943| Type = [Struct] String -# 1943| ValueCategory = lvalue -# 1943| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1943| Conversion = [BoolConversion] conversion to bool -# 1943| Type = [BoolType] bool -# 1943| Value = [CStyleCast] 0 -# 1943| ValueCategory = prvalue -# 1944| getStmt(642): [DoStmt] do (...) ... -# 1946| getCondition(): [Literal] 0 -# 1946| Type = [IntType] int -# 1946| Value = [Literal] 0 -# 1946| ValueCategory = prvalue -# 1944| getStmt(): [BlockStmt] { ... } -# 1945| getStmt(0): [DeclStmt] declaration -# 1945| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x642 -# 1945| Type = [Struct] String -# 1945| getVariable().getInitializer(): [Initializer] initializer for x642 -# 1945| getExpr(): [ConstructorCall] call to String -# 1945| Type = [VoidType] void -# 1945| ValueCategory = prvalue -# 1946| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1946| Type = [VoidType] void -# 1946| ValueCategory = prvalue -# 1946| getQualifier(): [VariableAccess] x642 -# 1946| Type = [Struct] String -# 1946| ValueCategory = lvalue -# 1946| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1946| Conversion = [BoolConversion] conversion to bool -# 1946| Type = [BoolType] bool -# 1946| Value = [CStyleCast] 0 -# 1946| ValueCategory = prvalue -# 1947| getStmt(643): [DoStmt] do (...) ... -# 1949| getCondition(): [Literal] 0 -# 1949| Type = [IntType] int -# 1949| Value = [Literal] 0 -# 1949| ValueCategory = prvalue -# 1947| getStmt(): [BlockStmt] { ... } -# 1948| getStmt(0): [DeclStmt] declaration -# 1948| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x643 -# 1948| Type = [Struct] String -# 1948| getVariable().getInitializer(): [Initializer] initializer for x643 -# 1948| getExpr(): [ConstructorCall] call to String -# 1948| Type = [VoidType] void -# 1948| ValueCategory = prvalue -# 1949| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1949| Type = [VoidType] void -# 1949| ValueCategory = prvalue -# 1949| getQualifier(): [VariableAccess] x643 -# 1949| Type = [Struct] String -# 1949| ValueCategory = lvalue -# 1949| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1949| Conversion = [BoolConversion] conversion to bool -# 1949| Type = [BoolType] bool -# 1949| Value = [CStyleCast] 0 -# 1949| ValueCategory = prvalue -# 1950| getStmt(644): [DoStmt] do (...) ... -# 1952| getCondition(): [Literal] 0 -# 1952| Type = [IntType] int -# 1952| Value = [Literal] 0 -# 1952| ValueCategory = prvalue -# 1950| getStmt(): [BlockStmt] { ... } -# 1951| getStmt(0): [DeclStmt] declaration -# 1951| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x644 -# 1951| Type = [Struct] String -# 1951| getVariable().getInitializer(): [Initializer] initializer for x644 -# 1951| getExpr(): [ConstructorCall] call to String -# 1951| Type = [VoidType] void -# 1951| ValueCategory = prvalue -# 1952| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1952| Type = [VoidType] void -# 1952| ValueCategory = prvalue -# 1952| getQualifier(): [VariableAccess] x644 -# 1952| Type = [Struct] String -# 1952| ValueCategory = lvalue -# 1952| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1952| Conversion = [BoolConversion] conversion to bool -# 1952| Type = [BoolType] bool -# 1952| Value = [CStyleCast] 0 -# 1952| ValueCategory = prvalue -# 1953| getStmt(645): [DoStmt] do (...) ... -# 1955| getCondition(): [Literal] 0 -# 1955| Type = [IntType] int -# 1955| Value = [Literal] 0 -# 1955| ValueCategory = prvalue -# 1953| getStmt(): [BlockStmt] { ... } -# 1954| getStmt(0): [DeclStmt] declaration -# 1954| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x645 -# 1954| Type = [Struct] String -# 1954| getVariable().getInitializer(): [Initializer] initializer for x645 -# 1954| getExpr(): [ConstructorCall] call to String -# 1954| Type = [VoidType] void -# 1954| ValueCategory = prvalue -# 1955| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1955| Type = [VoidType] void -# 1955| ValueCategory = prvalue -# 1955| getQualifier(): [VariableAccess] x645 -# 1955| Type = [Struct] String -# 1955| ValueCategory = lvalue -# 1955| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1955| Conversion = [BoolConversion] conversion to bool -# 1955| Type = [BoolType] bool -# 1955| Value = [CStyleCast] 0 -# 1955| ValueCategory = prvalue -# 1956| getStmt(646): [DoStmt] do (...) ... -# 1958| getCondition(): [Literal] 0 -# 1958| Type = [IntType] int -# 1958| Value = [Literal] 0 -# 1958| ValueCategory = prvalue -# 1956| getStmt(): [BlockStmt] { ... } -# 1957| getStmt(0): [DeclStmt] declaration -# 1957| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x646 -# 1957| Type = [Struct] String -# 1957| getVariable().getInitializer(): [Initializer] initializer for x646 -# 1957| getExpr(): [ConstructorCall] call to String -# 1957| Type = [VoidType] void -# 1957| ValueCategory = prvalue -# 1958| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1958| Type = [VoidType] void -# 1958| ValueCategory = prvalue -# 1958| getQualifier(): [VariableAccess] x646 -# 1958| Type = [Struct] String -# 1958| ValueCategory = lvalue -# 1958| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1958| Conversion = [BoolConversion] conversion to bool -# 1958| Type = [BoolType] bool -# 1958| Value = [CStyleCast] 0 -# 1958| ValueCategory = prvalue -# 1959| getStmt(647): [DoStmt] do (...) ... -# 1961| getCondition(): [Literal] 0 -# 1961| Type = [IntType] int -# 1961| Value = [Literal] 0 -# 1961| ValueCategory = prvalue -# 1959| getStmt(): [BlockStmt] { ... } -# 1960| getStmt(0): [DeclStmt] declaration -# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x647 -# 1960| Type = [Struct] String -# 1960| getVariable().getInitializer(): [Initializer] initializer for x647 -# 1960| getExpr(): [ConstructorCall] call to String -# 1960| Type = [VoidType] void -# 1960| ValueCategory = prvalue -# 1961| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1961| Type = [VoidType] void -# 1961| ValueCategory = prvalue -# 1961| getQualifier(): [VariableAccess] x647 -# 1961| Type = [Struct] String -# 1961| ValueCategory = lvalue -# 1961| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1961| Conversion = [BoolConversion] conversion to bool -# 1961| Type = [BoolType] bool -# 1961| Value = [CStyleCast] 0 -# 1961| ValueCategory = prvalue -# 1962| getStmt(648): [DoStmt] do (...) ... -# 1964| getCondition(): [Literal] 0 -# 1964| Type = [IntType] int -# 1964| Value = [Literal] 0 -# 1964| ValueCategory = prvalue -# 1962| getStmt(): [BlockStmt] { ... } -# 1963| getStmt(0): [DeclStmt] declaration -# 1963| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x648 -# 1963| Type = [Struct] String -# 1963| getVariable().getInitializer(): [Initializer] initializer for x648 -# 1963| getExpr(): [ConstructorCall] call to String -# 1963| Type = [VoidType] void -# 1963| ValueCategory = prvalue -# 1964| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1964| Type = [VoidType] void -# 1964| ValueCategory = prvalue -# 1964| getQualifier(): [VariableAccess] x648 -# 1964| Type = [Struct] String -# 1964| ValueCategory = lvalue -# 1964| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1964| Conversion = [BoolConversion] conversion to bool -# 1964| Type = [BoolType] bool -# 1964| Value = [CStyleCast] 0 -# 1964| ValueCategory = prvalue -# 1965| getStmt(649): [DoStmt] do (...) ... -# 1967| getCondition(): [Literal] 0 -# 1967| Type = [IntType] int -# 1967| Value = [Literal] 0 -# 1967| ValueCategory = prvalue -# 1965| getStmt(): [BlockStmt] { ... } -# 1966| getStmt(0): [DeclStmt] declaration -# 1966| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x649 -# 1966| Type = [Struct] String -# 1966| getVariable().getInitializer(): [Initializer] initializer for x649 -# 1966| getExpr(): [ConstructorCall] call to String -# 1966| Type = [VoidType] void -# 1966| ValueCategory = prvalue -# 1967| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1967| Type = [VoidType] void -# 1967| ValueCategory = prvalue -# 1967| getQualifier(): [VariableAccess] x649 -# 1967| Type = [Struct] String -# 1967| ValueCategory = lvalue -# 1967| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1967| Conversion = [BoolConversion] conversion to bool -# 1967| Type = [BoolType] bool -# 1967| Value = [CStyleCast] 0 -# 1967| ValueCategory = prvalue -# 1968| getStmt(650): [DoStmt] do (...) ... -# 1970| getCondition(): [Literal] 0 -# 1970| Type = [IntType] int -# 1970| Value = [Literal] 0 -# 1970| ValueCategory = prvalue -# 1968| getStmt(): [BlockStmt] { ... } -# 1969| getStmt(0): [DeclStmt] declaration -# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x650 -# 1969| Type = [Struct] String -# 1969| getVariable().getInitializer(): [Initializer] initializer for x650 -# 1969| getExpr(): [ConstructorCall] call to String -# 1969| Type = [VoidType] void -# 1969| ValueCategory = prvalue -# 1970| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1970| Type = [VoidType] void -# 1970| ValueCategory = prvalue -# 1970| getQualifier(): [VariableAccess] x650 -# 1970| Type = [Struct] String -# 1970| ValueCategory = lvalue -# 1970| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1970| Conversion = [BoolConversion] conversion to bool -# 1970| Type = [BoolType] bool -# 1970| Value = [CStyleCast] 0 -# 1970| ValueCategory = prvalue -# 1971| getStmt(651): [DoStmt] do (...) ... -# 1973| getCondition(): [Literal] 0 -# 1973| Type = [IntType] int -# 1973| Value = [Literal] 0 -# 1973| ValueCategory = prvalue -# 1971| getStmt(): [BlockStmt] { ... } -# 1972| getStmt(0): [DeclStmt] declaration -# 1972| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x651 -# 1972| Type = [Struct] String -# 1972| getVariable().getInitializer(): [Initializer] initializer for x651 -# 1972| getExpr(): [ConstructorCall] call to String -# 1972| Type = [VoidType] void -# 1972| ValueCategory = prvalue -# 1973| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1973| Type = [VoidType] void -# 1973| ValueCategory = prvalue -# 1973| getQualifier(): [VariableAccess] x651 -# 1973| Type = [Struct] String -# 1973| ValueCategory = lvalue -# 1973| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1973| Conversion = [BoolConversion] conversion to bool -# 1973| Type = [BoolType] bool -# 1973| Value = [CStyleCast] 0 -# 1973| ValueCategory = prvalue -# 1974| getStmt(652): [DoStmt] do (...) ... -# 1976| getCondition(): [Literal] 0 -# 1976| Type = [IntType] int -# 1976| Value = [Literal] 0 -# 1976| ValueCategory = prvalue -# 1974| getStmt(): [BlockStmt] { ... } -# 1975| getStmt(0): [DeclStmt] declaration -# 1975| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x652 -# 1975| Type = [Struct] String -# 1975| getVariable().getInitializer(): [Initializer] initializer for x652 -# 1975| getExpr(): [ConstructorCall] call to String -# 1975| Type = [VoidType] void -# 1975| ValueCategory = prvalue -# 1976| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1976| Type = [VoidType] void -# 1976| ValueCategory = prvalue -# 1976| getQualifier(): [VariableAccess] x652 -# 1976| Type = [Struct] String -# 1976| ValueCategory = lvalue -# 1976| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1976| Conversion = [BoolConversion] conversion to bool -# 1976| Type = [BoolType] bool -# 1976| Value = [CStyleCast] 0 -# 1976| ValueCategory = prvalue -# 1977| getStmt(653): [DoStmt] do (...) ... -# 1979| getCondition(): [Literal] 0 -# 1979| Type = [IntType] int -# 1979| Value = [Literal] 0 -# 1979| ValueCategory = prvalue -# 1977| getStmt(): [BlockStmt] { ... } -# 1978| getStmt(0): [DeclStmt] declaration -# 1978| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x653 -# 1978| Type = [Struct] String -# 1978| getVariable().getInitializer(): [Initializer] initializer for x653 -# 1978| getExpr(): [ConstructorCall] call to String -# 1978| Type = [VoidType] void -# 1978| ValueCategory = prvalue -# 1979| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1979| Type = [VoidType] void -# 1979| ValueCategory = prvalue -# 1979| getQualifier(): [VariableAccess] x653 -# 1979| Type = [Struct] String -# 1979| ValueCategory = lvalue -# 1979| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1979| Conversion = [BoolConversion] conversion to bool -# 1979| Type = [BoolType] bool -# 1979| Value = [CStyleCast] 0 -# 1979| ValueCategory = prvalue -# 1980| getStmt(654): [DoStmt] do (...) ... -# 1982| getCondition(): [Literal] 0 -# 1982| Type = [IntType] int -# 1982| Value = [Literal] 0 -# 1982| ValueCategory = prvalue -# 1980| getStmt(): [BlockStmt] { ... } -# 1981| getStmt(0): [DeclStmt] declaration -# 1981| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x654 -# 1981| Type = [Struct] String -# 1981| getVariable().getInitializer(): [Initializer] initializer for x654 -# 1981| getExpr(): [ConstructorCall] call to String -# 1981| Type = [VoidType] void -# 1981| ValueCategory = prvalue -# 1982| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1982| Type = [VoidType] void -# 1982| ValueCategory = prvalue -# 1982| getQualifier(): [VariableAccess] x654 -# 1982| Type = [Struct] String -# 1982| ValueCategory = lvalue -# 1982| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1982| Conversion = [BoolConversion] conversion to bool -# 1982| Type = [BoolType] bool -# 1982| Value = [CStyleCast] 0 -# 1982| ValueCategory = prvalue -# 1983| getStmt(655): [DoStmt] do (...) ... -# 1985| getCondition(): [Literal] 0 -# 1985| Type = [IntType] int -# 1985| Value = [Literal] 0 -# 1985| ValueCategory = prvalue -# 1983| getStmt(): [BlockStmt] { ... } -# 1984| getStmt(0): [DeclStmt] declaration -# 1984| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x655 -# 1984| Type = [Struct] String -# 1984| getVariable().getInitializer(): [Initializer] initializer for x655 -# 1984| getExpr(): [ConstructorCall] call to String -# 1984| Type = [VoidType] void -# 1984| ValueCategory = prvalue -# 1985| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1985| Type = [VoidType] void -# 1985| ValueCategory = prvalue -# 1985| getQualifier(): [VariableAccess] x655 -# 1985| Type = [Struct] String -# 1985| ValueCategory = lvalue -# 1985| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1985| Conversion = [BoolConversion] conversion to bool -# 1985| Type = [BoolType] bool -# 1985| Value = [CStyleCast] 0 -# 1985| ValueCategory = prvalue -# 1986| getStmt(656): [DoStmt] do (...) ... -# 1988| getCondition(): [Literal] 0 -# 1988| Type = [IntType] int -# 1988| Value = [Literal] 0 -# 1988| ValueCategory = prvalue -# 1986| getStmt(): [BlockStmt] { ... } -# 1987| getStmt(0): [DeclStmt] declaration -# 1987| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x656 -# 1987| Type = [Struct] String -# 1987| getVariable().getInitializer(): [Initializer] initializer for x656 -# 1987| getExpr(): [ConstructorCall] call to String -# 1987| Type = [VoidType] void -# 1987| ValueCategory = prvalue -# 1988| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1988| Type = [VoidType] void -# 1988| ValueCategory = prvalue -# 1988| getQualifier(): [VariableAccess] x656 -# 1988| Type = [Struct] String -# 1988| ValueCategory = lvalue -# 1988| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1988| Conversion = [BoolConversion] conversion to bool -# 1988| Type = [BoolType] bool -# 1988| Value = [CStyleCast] 0 -# 1988| ValueCategory = prvalue -# 1989| getStmt(657): [DoStmt] do (...) ... -# 1991| getCondition(): [Literal] 0 -# 1991| Type = [IntType] int -# 1991| Value = [Literal] 0 -# 1991| ValueCategory = prvalue -# 1989| getStmt(): [BlockStmt] { ... } -# 1990| getStmt(0): [DeclStmt] declaration -# 1990| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x657 -# 1990| Type = [Struct] String -# 1990| getVariable().getInitializer(): [Initializer] initializer for x657 -# 1990| getExpr(): [ConstructorCall] call to String -# 1990| Type = [VoidType] void -# 1990| ValueCategory = prvalue -# 1991| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1991| Type = [VoidType] void -# 1991| ValueCategory = prvalue -# 1991| getQualifier(): [VariableAccess] x657 -# 1991| Type = [Struct] String -# 1991| ValueCategory = lvalue -# 1991| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1991| Conversion = [BoolConversion] conversion to bool -# 1991| Type = [BoolType] bool -# 1991| Value = [CStyleCast] 0 -# 1991| ValueCategory = prvalue -# 1992| getStmt(658): [DoStmt] do (...) ... -# 1994| getCondition(): [Literal] 0 -# 1994| Type = [IntType] int -# 1994| Value = [Literal] 0 -# 1994| ValueCategory = prvalue -# 1992| getStmt(): [BlockStmt] { ... } -# 1993| getStmt(0): [DeclStmt] declaration -# 1993| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x658 -# 1993| Type = [Struct] String -# 1993| getVariable().getInitializer(): [Initializer] initializer for x658 -# 1993| getExpr(): [ConstructorCall] call to String -# 1993| Type = [VoidType] void -# 1993| ValueCategory = prvalue -# 1994| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1994| Type = [VoidType] void -# 1994| ValueCategory = prvalue -# 1994| getQualifier(): [VariableAccess] x658 -# 1994| Type = [Struct] String -# 1994| ValueCategory = lvalue -# 1994| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1994| Conversion = [BoolConversion] conversion to bool -# 1994| Type = [BoolType] bool -# 1994| Value = [CStyleCast] 0 -# 1994| ValueCategory = prvalue -# 1995| getStmt(659): [DoStmt] do (...) ... -# 1997| getCondition(): [Literal] 0 -# 1997| Type = [IntType] int -# 1997| Value = [Literal] 0 -# 1997| ValueCategory = prvalue -# 1995| getStmt(): [BlockStmt] { ... } -# 1996| getStmt(0): [DeclStmt] declaration -# 1996| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x659 -# 1996| Type = [Struct] String -# 1996| getVariable().getInitializer(): [Initializer] initializer for x659 -# 1996| getExpr(): [ConstructorCall] call to String -# 1996| Type = [VoidType] void -# 1996| ValueCategory = prvalue -# 1997| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1997| Type = [VoidType] void -# 1997| ValueCategory = prvalue -# 1997| getQualifier(): [VariableAccess] x659 -# 1997| Type = [Struct] String -# 1997| ValueCategory = lvalue -# 1997| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1997| Conversion = [BoolConversion] conversion to bool -# 1997| Type = [BoolType] bool -# 1997| Value = [CStyleCast] 0 -# 1997| ValueCategory = prvalue -# 1998| getStmt(660): [DoStmt] do (...) ... -# 2000| getCondition(): [Literal] 0 -# 2000| Type = [IntType] int -# 2000| Value = [Literal] 0 -# 2000| ValueCategory = prvalue -# 1998| getStmt(): [BlockStmt] { ... } -# 1999| getStmt(0): [DeclStmt] declaration -# 1999| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x660 -# 1999| Type = [Struct] String -# 1999| getVariable().getInitializer(): [Initializer] initializer for x660 -# 1999| getExpr(): [ConstructorCall] call to String -# 1999| Type = [VoidType] void -# 1999| ValueCategory = prvalue -# 2000| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2000| Type = [VoidType] void -# 2000| ValueCategory = prvalue -# 2000| getQualifier(): [VariableAccess] x660 -# 2000| Type = [Struct] String -# 2000| ValueCategory = lvalue -# 2000| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2000| Conversion = [BoolConversion] conversion to bool -# 2000| Type = [BoolType] bool -# 2000| Value = [CStyleCast] 0 -# 2000| ValueCategory = prvalue -# 2001| getStmt(661): [DoStmt] do (...) ... -# 2003| getCondition(): [Literal] 0 -# 2003| Type = [IntType] int -# 2003| Value = [Literal] 0 -# 2003| ValueCategory = prvalue -# 2001| getStmt(): [BlockStmt] { ... } -# 2002| getStmt(0): [DeclStmt] declaration -# 2002| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x661 -# 2002| Type = [Struct] String -# 2002| getVariable().getInitializer(): [Initializer] initializer for x661 -# 2002| getExpr(): [ConstructorCall] call to String -# 2002| Type = [VoidType] void -# 2002| ValueCategory = prvalue -# 2003| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2003| Type = [VoidType] void -# 2003| ValueCategory = prvalue -# 2003| getQualifier(): [VariableAccess] x661 -# 2003| Type = [Struct] String -# 2003| ValueCategory = lvalue -# 2003| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2003| Conversion = [BoolConversion] conversion to bool -# 2003| Type = [BoolType] bool -# 2003| Value = [CStyleCast] 0 -# 2003| ValueCategory = prvalue -# 2004| getStmt(662): [DoStmt] do (...) ... -# 2006| getCondition(): [Literal] 0 -# 2006| Type = [IntType] int -# 2006| Value = [Literal] 0 -# 2006| ValueCategory = prvalue -# 2004| getStmt(): [BlockStmt] { ... } -# 2005| getStmt(0): [DeclStmt] declaration -# 2005| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x662 -# 2005| Type = [Struct] String -# 2005| getVariable().getInitializer(): [Initializer] initializer for x662 -# 2005| getExpr(): [ConstructorCall] call to String -# 2005| Type = [VoidType] void -# 2005| ValueCategory = prvalue -# 2006| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2006| Type = [VoidType] void -# 2006| ValueCategory = prvalue -# 2006| getQualifier(): [VariableAccess] x662 -# 2006| Type = [Struct] String -# 2006| ValueCategory = lvalue -# 2006| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2006| Conversion = [BoolConversion] conversion to bool -# 2006| Type = [BoolType] bool -# 2006| Value = [CStyleCast] 0 -# 2006| ValueCategory = prvalue -# 2007| getStmt(663): [DoStmt] do (...) ... -# 2009| getCondition(): [Literal] 0 -# 2009| Type = [IntType] int -# 2009| Value = [Literal] 0 -# 2009| ValueCategory = prvalue -# 2007| getStmt(): [BlockStmt] { ... } -# 2008| getStmt(0): [DeclStmt] declaration -# 2008| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x663 -# 2008| Type = [Struct] String -# 2008| getVariable().getInitializer(): [Initializer] initializer for x663 -# 2008| getExpr(): [ConstructorCall] call to String -# 2008| Type = [VoidType] void -# 2008| ValueCategory = prvalue -# 2009| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2009| Type = [VoidType] void -# 2009| ValueCategory = prvalue -# 2009| getQualifier(): [VariableAccess] x663 -# 2009| Type = [Struct] String -# 2009| ValueCategory = lvalue -# 2009| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2009| Conversion = [BoolConversion] conversion to bool -# 2009| Type = [BoolType] bool -# 2009| Value = [CStyleCast] 0 -# 2009| ValueCategory = prvalue -# 2010| getStmt(664): [DoStmt] do (...) ... -# 2012| getCondition(): [Literal] 0 -# 2012| Type = [IntType] int -# 2012| Value = [Literal] 0 -# 2012| ValueCategory = prvalue -# 2010| getStmt(): [BlockStmt] { ... } -# 2011| getStmt(0): [DeclStmt] declaration -# 2011| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x664 -# 2011| Type = [Struct] String -# 2011| getVariable().getInitializer(): [Initializer] initializer for x664 -# 2011| getExpr(): [ConstructorCall] call to String -# 2011| Type = [VoidType] void -# 2011| ValueCategory = prvalue -# 2012| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2012| Type = [VoidType] void -# 2012| ValueCategory = prvalue -# 2012| getQualifier(): [VariableAccess] x664 -# 2012| Type = [Struct] String -# 2012| ValueCategory = lvalue -# 2012| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2012| Conversion = [BoolConversion] conversion to bool -# 2012| Type = [BoolType] bool -# 2012| Value = [CStyleCast] 0 -# 2012| ValueCategory = prvalue -# 2013| getStmt(665): [DoStmt] do (...) ... -# 2015| getCondition(): [Literal] 0 -# 2015| Type = [IntType] int -# 2015| Value = [Literal] 0 -# 2015| ValueCategory = prvalue -# 2013| getStmt(): [BlockStmt] { ... } -# 2014| getStmt(0): [DeclStmt] declaration -# 2014| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x665 -# 2014| Type = [Struct] String -# 2014| getVariable().getInitializer(): [Initializer] initializer for x665 -# 2014| getExpr(): [ConstructorCall] call to String -# 2014| Type = [VoidType] void -# 2014| ValueCategory = prvalue -# 2015| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2015| Type = [VoidType] void -# 2015| ValueCategory = prvalue -# 2015| getQualifier(): [VariableAccess] x665 -# 2015| Type = [Struct] String -# 2015| ValueCategory = lvalue -# 2015| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2015| Conversion = [BoolConversion] conversion to bool -# 2015| Type = [BoolType] bool -# 2015| Value = [CStyleCast] 0 -# 2015| ValueCategory = prvalue -# 2016| getStmt(666): [DoStmt] do (...) ... -# 2018| getCondition(): [Literal] 0 -# 2018| Type = [IntType] int -# 2018| Value = [Literal] 0 -# 2018| ValueCategory = prvalue -# 2016| getStmt(): [BlockStmt] { ... } -# 2017| getStmt(0): [DeclStmt] declaration -# 2017| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x666 -# 2017| Type = [Struct] String -# 2017| getVariable().getInitializer(): [Initializer] initializer for x666 -# 2017| getExpr(): [ConstructorCall] call to String -# 2017| Type = [VoidType] void -# 2017| ValueCategory = prvalue -# 2018| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2018| Type = [VoidType] void -# 2018| ValueCategory = prvalue -# 2018| getQualifier(): [VariableAccess] x666 -# 2018| Type = [Struct] String -# 2018| ValueCategory = lvalue -# 2018| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2018| Conversion = [BoolConversion] conversion to bool -# 2018| Type = [BoolType] bool -# 2018| Value = [CStyleCast] 0 -# 2018| ValueCategory = prvalue -# 2019| getStmt(667): [DoStmt] do (...) ... -# 2021| getCondition(): [Literal] 0 -# 2021| Type = [IntType] int -# 2021| Value = [Literal] 0 -# 2021| ValueCategory = prvalue -# 2019| getStmt(): [BlockStmt] { ... } -# 2020| getStmt(0): [DeclStmt] declaration -# 2020| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x667 -# 2020| Type = [Struct] String -# 2020| getVariable().getInitializer(): [Initializer] initializer for x667 -# 2020| getExpr(): [ConstructorCall] call to String -# 2020| Type = [VoidType] void -# 2020| ValueCategory = prvalue -# 2021| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2021| Type = [VoidType] void -# 2021| ValueCategory = prvalue -# 2021| getQualifier(): [VariableAccess] x667 -# 2021| Type = [Struct] String -# 2021| ValueCategory = lvalue -# 2021| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2021| Conversion = [BoolConversion] conversion to bool -# 2021| Type = [BoolType] bool -# 2021| Value = [CStyleCast] 0 -# 2021| ValueCategory = prvalue -# 2022| getStmt(668): [DoStmt] do (...) ... -# 2024| getCondition(): [Literal] 0 -# 2024| Type = [IntType] int -# 2024| Value = [Literal] 0 -# 2024| ValueCategory = prvalue -# 2022| getStmt(): [BlockStmt] { ... } -# 2023| getStmt(0): [DeclStmt] declaration -# 2023| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x668 -# 2023| Type = [Struct] String -# 2023| getVariable().getInitializer(): [Initializer] initializer for x668 -# 2023| getExpr(): [ConstructorCall] call to String -# 2023| Type = [VoidType] void -# 2023| ValueCategory = prvalue -# 2024| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2024| Type = [VoidType] void -# 2024| ValueCategory = prvalue -# 2024| getQualifier(): [VariableAccess] x668 -# 2024| Type = [Struct] String -# 2024| ValueCategory = lvalue -# 2024| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2024| Conversion = [BoolConversion] conversion to bool -# 2024| Type = [BoolType] bool -# 2024| Value = [CStyleCast] 0 -# 2024| ValueCategory = prvalue -# 2025| getStmt(669): [DoStmt] do (...) ... -# 2027| getCondition(): [Literal] 0 -# 2027| Type = [IntType] int -# 2027| Value = [Literal] 0 -# 2027| ValueCategory = prvalue -# 2025| getStmt(): [BlockStmt] { ... } -# 2026| getStmt(0): [DeclStmt] declaration -# 2026| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x669 -# 2026| Type = [Struct] String -# 2026| getVariable().getInitializer(): [Initializer] initializer for x669 -# 2026| getExpr(): [ConstructorCall] call to String -# 2026| Type = [VoidType] void -# 2026| ValueCategory = prvalue -# 2027| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2027| Type = [VoidType] void -# 2027| ValueCategory = prvalue -# 2027| getQualifier(): [VariableAccess] x669 -# 2027| Type = [Struct] String -# 2027| ValueCategory = lvalue -# 2027| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2027| Conversion = [BoolConversion] conversion to bool -# 2027| Type = [BoolType] bool -# 2027| Value = [CStyleCast] 0 -# 2027| ValueCategory = prvalue -# 2028| getStmt(670): [DoStmt] do (...) ... -# 2030| getCondition(): [Literal] 0 -# 2030| Type = [IntType] int -# 2030| Value = [Literal] 0 -# 2030| ValueCategory = prvalue -# 2028| getStmt(): [BlockStmt] { ... } -# 2029| getStmt(0): [DeclStmt] declaration -# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x670 -# 2029| Type = [Struct] String -# 2029| getVariable().getInitializer(): [Initializer] initializer for x670 -# 2029| getExpr(): [ConstructorCall] call to String -# 2029| Type = [VoidType] void -# 2029| ValueCategory = prvalue -# 2030| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2030| Type = [VoidType] void -# 2030| ValueCategory = prvalue -# 2030| getQualifier(): [VariableAccess] x670 -# 2030| Type = [Struct] String -# 2030| ValueCategory = lvalue -# 2030| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2030| Conversion = [BoolConversion] conversion to bool -# 2030| Type = [BoolType] bool -# 2030| Value = [CStyleCast] 0 -# 2030| ValueCategory = prvalue -# 2031| getStmt(671): [DoStmt] do (...) ... -# 2033| getCondition(): [Literal] 0 -# 2033| Type = [IntType] int -# 2033| Value = [Literal] 0 -# 2033| ValueCategory = prvalue -# 2031| getStmt(): [BlockStmt] { ... } -# 2032| getStmt(0): [DeclStmt] declaration -# 2032| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x671 -# 2032| Type = [Struct] String -# 2032| getVariable().getInitializer(): [Initializer] initializer for x671 -# 2032| getExpr(): [ConstructorCall] call to String -# 2032| Type = [VoidType] void -# 2032| ValueCategory = prvalue -# 2033| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2033| Type = [VoidType] void -# 2033| ValueCategory = prvalue -# 2033| getQualifier(): [VariableAccess] x671 -# 2033| Type = [Struct] String -# 2033| ValueCategory = lvalue -# 2033| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2033| Conversion = [BoolConversion] conversion to bool -# 2033| Type = [BoolType] bool -# 2033| Value = [CStyleCast] 0 -# 2033| ValueCategory = prvalue -# 2034| getStmt(672): [DoStmt] do (...) ... -# 2036| getCondition(): [Literal] 0 -# 2036| Type = [IntType] int -# 2036| Value = [Literal] 0 -# 2036| ValueCategory = prvalue -# 2034| getStmt(): [BlockStmt] { ... } -# 2035| getStmt(0): [DeclStmt] declaration -# 2035| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x672 -# 2035| Type = [Struct] String -# 2035| getVariable().getInitializer(): [Initializer] initializer for x672 -# 2035| getExpr(): [ConstructorCall] call to String -# 2035| Type = [VoidType] void -# 2035| ValueCategory = prvalue -# 2036| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2036| Type = [VoidType] void -# 2036| ValueCategory = prvalue -# 2036| getQualifier(): [VariableAccess] x672 -# 2036| Type = [Struct] String -# 2036| ValueCategory = lvalue -# 2036| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2036| Conversion = [BoolConversion] conversion to bool -# 2036| Type = [BoolType] bool -# 2036| Value = [CStyleCast] 0 -# 2036| ValueCategory = prvalue -# 2037| getStmt(673): [DoStmt] do (...) ... -# 2039| getCondition(): [Literal] 0 -# 2039| Type = [IntType] int -# 2039| Value = [Literal] 0 -# 2039| ValueCategory = prvalue -# 2037| getStmt(): [BlockStmt] { ... } -# 2038| getStmt(0): [DeclStmt] declaration -# 2038| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x673 -# 2038| Type = [Struct] String -# 2038| getVariable().getInitializer(): [Initializer] initializer for x673 -# 2038| getExpr(): [ConstructorCall] call to String -# 2038| Type = [VoidType] void -# 2038| ValueCategory = prvalue -# 2039| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2039| Type = [VoidType] void -# 2039| ValueCategory = prvalue -# 2039| getQualifier(): [VariableAccess] x673 -# 2039| Type = [Struct] String -# 2039| ValueCategory = lvalue -# 2039| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2039| Conversion = [BoolConversion] conversion to bool -# 2039| Type = [BoolType] bool -# 2039| Value = [CStyleCast] 0 -# 2039| ValueCategory = prvalue -# 2040| getStmt(674): [DoStmt] do (...) ... -# 2042| getCondition(): [Literal] 0 -# 2042| Type = [IntType] int -# 2042| Value = [Literal] 0 -# 2042| ValueCategory = prvalue -# 2040| getStmt(): [BlockStmt] { ... } -# 2041| getStmt(0): [DeclStmt] declaration -# 2041| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x674 -# 2041| Type = [Struct] String -# 2041| getVariable().getInitializer(): [Initializer] initializer for x674 -# 2041| getExpr(): [ConstructorCall] call to String -# 2041| Type = [VoidType] void -# 2041| ValueCategory = prvalue -# 2042| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2042| Type = [VoidType] void -# 2042| ValueCategory = prvalue -# 2042| getQualifier(): [VariableAccess] x674 -# 2042| Type = [Struct] String -# 2042| ValueCategory = lvalue -# 2042| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2042| Conversion = [BoolConversion] conversion to bool -# 2042| Type = [BoolType] bool -# 2042| Value = [CStyleCast] 0 -# 2042| ValueCategory = prvalue -# 2043| getStmt(675): [DoStmt] do (...) ... -# 2045| getCondition(): [Literal] 0 -# 2045| Type = [IntType] int -# 2045| Value = [Literal] 0 -# 2045| ValueCategory = prvalue -# 2043| getStmt(): [BlockStmt] { ... } -# 2044| getStmt(0): [DeclStmt] declaration -# 2044| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x675 -# 2044| Type = [Struct] String -# 2044| getVariable().getInitializer(): [Initializer] initializer for x675 -# 2044| getExpr(): [ConstructorCall] call to String -# 2044| Type = [VoidType] void -# 2044| ValueCategory = prvalue -# 2045| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2045| Type = [VoidType] void -# 2045| ValueCategory = prvalue -# 2045| getQualifier(): [VariableAccess] x675 -# 2045| Type = [Struct] String -# 2045| ValueCategory = lvalue -# 2045| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2045| Conversion = [BoolConversion] conversion to bool -# 2045| Type = [BoolType] bool -# 2045| Value = [CStyleCast] 0 -# 2045| ValueCategory = prvalue -# 2046| getStmt(676): [DoStmt] do (...) ... -# 2048| getCondition(): [Literal] 0 -# 2048| Type = [IntType] int -# 2048| Value = [Literal] 0 -# 2048| ValueCategory = prvalue -# 2046| getStmt(): [BlockStmt] { ... } -# 2047| getStmt(0): [DeclStmt] declaration -# 2047| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x676 -# 2047| Type = [Struct] String -# 2047| getVariable().getInitializer(): [Initializer] initializer for x676 -# 2047| getExpr(): [ConstructorCall] call to String -# 2047| Type = [VoidType] void -# 2047| ValueCategory = prvalue -# 2048| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2048| Type = [VoidType] void -# 2048| ValueCategory = prvalue -# 2048| getQualifier(): [VariableAccess] x676 -# 2048| Type = [Struct] String -# 2048| ValueCategory = lvalue -# 2048| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2048| Conversion = [BoolConversion] conversion to bool -# 2048| Type = [BoolType] bool -# 2048| Value = [CStyleCast] 0 -# 2048| ValueCategory = prvalue -# 2049| getStmt(677): [DoStmt] do (...) ... -# 2051| getCondition(): [Literal] 0 -# 2051| Type = [IntType] int -# 2051| Value = [Literal] 0 -# 2051| ValueCategory = prvalue -# 2049| getStmt(): [BlockStmt] { ... } -# 2050| getStmt(0): [DeclStmt] declaration -# 2050| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x677 -# 2050| Type = [Struct] String -# 2050| getVariable().getInitializer(): [Initializer] initializer for x677 -# 2050| getExpr(): [ConstructorCall] call to String -# 2050| Type = [VoidType] void -# 2050| ValueCategory = prvalue -# 2051| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2051| Type = [VoidType] void -# 2051| ValueCategory = prvalue -# 2051| getQualifier(): [VariableAccess] x677 -# 2051| Type = [Struct] String -# 2051| ValueCategory = lvalue -# 2051| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2051| Conversion = [BoolConversion] conversion to bool -# 2051| Type = [BoolType] bool -# 2051| Value = [CStyleCast] 0 -# 2051| ValueCategory = prvalue -# 2052| getStmt(678): [DoStmt] do (...) ... -# 2054| getCondition(): [Literal] 0 -# 2054| Type = [IntType] int -# 2054| Value = [Literal] 0 -# 2054| ValueCategory = prvalue -# 2052| getStmt(): [BlockStmt] { ... } -# 2053| getStmt(0): [DeclStmt] declaration -# 2053| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x678 -# 2053| Type = [Struct] String -# 2053| getVariable().getInitializer(): [Initializer] initializer for x678 -# 2053| getExpr(): [ConstructorCall] call to String -# 2053| Type = [VoidType] void -# 2053| ValueCategory = prvalue -# 2054| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2054| Type = [VoidType] void -# 2054| ValueCategory = prvalue -# 2054| getQualifier(): [VariableAccess] x678 -# 2054| Type = [Struct] String -# 2054| ValueCategory = lvalue -# 2054| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2054| Conversion = [BoolConversion] conversion to bool -# 2054| Type = [BoolType] bool -# 2054| Value = [CStyleCast] 0 -# 2054| ValueCategory = prvalue -# 2055| getStmt(679): [DoStmt] do (...) ... -# 2057| getCondition(): [Literal] 0 -# 2057| Type = [IntType] int -# 2057| Value = [Literal] 0 -# 2057| ValueCategory = prvalue -# 2055| getStmt(): [BlockStmt] { ... } -# 2056| getStmt(0): [DeclStmt] declaration -# 2056| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x679 -# 2056| Type = [Struct] String -# 2056| getVariable().getInitializer(): [Initializer] initializer for x679 -# 2056| getExpr(): [ConstructorCall] call to String -# 2056| Type = [VoidType] void -# 2056| ValueCategory = prvalue -# 2057| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2057| Type = [VoidType] void -# 2057| ValueCategory = prvalue -# 2057| getQualifier(): [VariableAccess] x679 -# 2057| Type = [Struct] String -# 2057| ValueCategory = lvalue -# 2057| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2057| Conversion = [BoolConversion] conversion to bool -# 2057| Type = [BoolType] bool -# 2057| Value = [CStyleCast] 0 -# 2057| ValueCategory = prvalue -# 2058| getStmt(680): [DoStmt] do (...) ... -# 2060| getCondition(): [Literal] 0 -# 2060| Type = [IntType] int -# 2060| Value = [Literal] 0 -# 2060| ValueCategory = prvalue -# 2058| getStmt(): [BlockStmt] { ... } -# 2059| getStmt(0): [DeclStmt] declaration -# 2059| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x680 -# 2059| Type = [Struct] String -# 2059| getVariable().getInitializer(): [Initializer] initializer for x680 -# 2059| getExpr(): [ConstructorCall] call to String -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2060| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2060| Type = [VoidType] void -# 2060| ValueCategory = prvalue -# 2060| getQualifier(): [VariableAccess] x680 -# 2060| Type = [Struct] String -# 2060| ValueCategory = lvalue -# 2060| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2060| Conversion = [BoolConversion] conversion to bool -# 2060| Type = [BoolType] bool -# 2060| Value = [CStyleCast] 0 -# 2060| ValueCategory = prvalue -# 2061| getStmt(681): [DoStmt] do (...) ... -# 2063| getCondition(): [Literal] 0 -# 2063| Type = [IntType] int -# 2063| Value = [Literal] 0 -# 2063| ValueCategory = prvalue -# 2061| getStmt(): [BlockStmt] { ... } -# 2062| getStmt(0): [DeclStmt] declaration -# 2062| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x681 -# 2062| Type = [Struct] String -# 2062| getVariable().getInitializer(): [Initializer] initializer for x681 -# 2062| getExpr(): [ConstructorCall] call to String -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2063| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2063| Type = [VoidType] void -# 2063| ValueCategory = prvalue -# 2063| getQualifier(): [VariableAccess] x681 -# 2063| Type = [Struct] String -# 2063| ValueCategory = lvalue -# 2063| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2063| Conversion = [BoolConversion] conversion to bool -# 2063| Type = [BoolType] bool -# 2063| Value = [CStyleCast] 0 -# 2063| ValueCategory = prvalue -# 2064| getStmt(682): [DoStmt] do (...) ... -# 2066| getCondition(): [Literal] 0 -# 2066| Type = [IntType] int -# 2066| Value = [Literal] 0 -# 2066| ValueCategory = prvalue -# 2064| getStmt(): [BlockStmt] { ... } -# 2065| getStmt(0): [DeclStmt] declaration -# 2065| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x682 -# 2065| Type = [Struct] String -# 2065| getVariable().getInitializer(): [Initializer] initializer for x682 -# 2065| getExpr(): [ConstructorCall] call to String -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2066| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2066| Type = [VoidType] void -# 2066| ValueCategory = prvalue -# 2066| getQualifier(): [VariableAccess] x682 -# 2066| Type = [Struct] String -# 2066| ValueCategory = lvalue -# 2066| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2066| Conversion = [BoolConversion] conversion to bool -# 2066| Type = [BoolType] bool -# 2066| Value = [CStyleCast] 0 -# 2066| ValueCategory = prvalue -# 2067| getStmt(683): [DoStmt] do (...) ... -# 2069| getCondition(): [Literal] 0 -# 2069| Type = [IntType] int -# 2069| Value = [Literal] 0 -# 2069| ValueCategory = prvalue -# 2067| getStmt(): [BlockStmt] { ... } -# 2068| getStmt(0): [DeclStmt] declaration -# 2068| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x683 -# 2068| Type = [Struct] String -# 2068| getVariable().getInitializer(): [Initializer] initializer for x683 -# 2068| getExpr(): [ConstructorCall] call to String -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2069| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getQualifier(): [VariableAccess] x683 -# 2069| Type = [Struct] String -# 2069| ValueCategory = lvalue -# 2069| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2069| Conversion = [BoolConversion] conversion to bool -# 2069| Type = [BoolType] bool -# 2069| Value = [CStyleCast] 0 -# 2069| ValueCategory = prvalue -# 2070| getStmt(684): [DoStmt] do (...) ... -# 2072| getCondition(): [Literal] 0 -# 2072| Type = [IntType] int -# 2072| Value = [Literal] 0 -# 2072| ValueCategory = prvalue -# 2070| getStmt(): [BlockStmt] { ... } -# 2071| getStmt(0): [DeclStmt] declaration -# 2071| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x684 -# 2071| Type = [Struct] String -# 2071| getVariable().getInitializer(): [Initializer] initializer for x684 -# 2071| getExpr(): [ConstructorCall] call to String -# 2071| Type = [VoidType] void -# 2071| ValueCategory = prvalue -# 2072| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2072| Type = [VoidType] void -# 2072| ValueCategory = prvalue -# 2072| getQualifier(): [VariableAccess] x684 -# 2072| Type = [Struct] String -# 2072| ValueCategory = lvalue -# 2072| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2072| Conversion = [BoolConversion] conversion to bool -# 2072| Type = [BoolType] bool -# 2072| Value = [CStyleCast] 0 -# 2072| ValueCategory = prvalue -# 2073| getStmt(685): [DoStmt] do (...) ... -# 2075| getCondition(): [Literal] 0 -# 2075| Type = [IntType] int -# 2075| Value = [Literal] 0 -# 2075| ValueCategory = prvalue -# 2073| getStmt(): [BlockStmt] { ... } -# 2074| getStmt(0): [DeclStmt] declaration -# 2074| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x685 -# 2074| Type = [Struct] String -# 2074| getVariable().getInitializer(): [Initializer] initializer for x685 -# 2074| getExpr(): [ConstructorCall] call to String -# 2074| Type = [VoidType] void -# 2074| ValueCategory = prvalue -# 2075| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2075| Type = [VoidType] void -# 2075| ValueCategory = prvalue -# 2075| getQualifier(): [VariableAccess] x685 -# 2075| Type = [Struct] String -# 2075| ValueCategory = lvalue -# 2075| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2075| Conversion = [BoolConversion] conversion to bool -# 2075| Type = [BoolType] bool -# 2075| Value = [CStyleCast] 0 -# 2075| ValueCategory = prvalue -# 2076| getStmt(686): [DoStmt] do (...) ... -# 2078| getCondition(): [Literal] 0 -# 2078| Type = [IntType] int -# 2078| Value = [Literal] 0 -# 2078| ValueCategory = prvalue -# 2076| getStmt(): [BlockStmt] { ... } -# 2077| getStmt(0): [DeclStmt] declaration -# 2077| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x686 -# 2077| Type = [Struct] String -# 2077| getVariable().getInitializer(): [Initializer] initializer for x686 -# 2077| getExpr(): [ConstructorCall] call to String -# 2077| Type = [VoidType] void -# 2077| ValueCategory = prvalue -# 2078| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2078| Type = [VoidType] void -# 2078| ValueCategory = prvalue -# 2078| getQualifier(): [VariableAccess] x686 -# 2078| Type = [Struct] String -# 2078| ValueCategory = lvalue -# 2078| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2078| Conversion = [BoolConversion] conversion to bool -# 2078| Type = [BoolType] bool -# 2078| Value = [CStyleCast] 0 -# 2078| ValueCategory = prvalue -# 2079| getStmt(687): [DoStmt] do (...) ... -# 2081| getCondition(): [Literal] 0 -# 2081| Type = [IntType] int -# 2081| Value = [Literal] 0 -# 2081| ValueCategory = prvalue -# 2079| getStmt(): [BlockStmt] { ... } -# 2080| getStmt(0): [DeclStmt] declaration -# 2080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x687 -# 2080| Type = [Struct] String -# 2080| getVariable().getInitializer(): [Initializer] initializer for x687 -# 2080| getExpr(): [ConstructorCall] call to String -# 2080| Type = [VoidType] void -# 2080| ValueCategory = prvalue -# 2081| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2081| Type = [VoidType] void -# 2081| ValueCategory = prvalue -# 2081| getQualifier(): [VariableAccess] x687 -# 2081| Type = [Struct] String -# 2081| ValueCategory = lvalue -# 2081| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2081| Conversion = [BoolConversion] conversion to bool -# 2081| Type = [BoolType] bool -# 2081| Value = [CStyleCast] 0 -# 2081| ValueCategory = prvalue -# 2082| getStmt(688): [DoStmt] do (...) ... -# 2084| getCondition(): [Literal] 0 -# 2084| Type = [IntType] int -# 2084| Value = [Literal] 0 -# 2084| ValueCategory = prvalue -# 2082| getStmt(): [BlockStmt] { ... } -# 2083| getStmt(0): [DeclStmt] declaration -# 2083| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x688 -# 2083| Type = [Struct] String -# 2083| getVariable().getInitializer(): [Initializer] initializer for x688 -# 2083| getExpr(): [ConstructorCall] call to String -# 2083| Type = [VoidType] void -# 2083| ValueCategory = prvalue -# 2084| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2084| Type = [VoidType] void -# 2084| ValueCategory = prvalue -# 2084| getQualifier(): [VariableAccess] x688 -# 2084| Type = [Struct] String -# 2084| ValueCategory = lvalue -# 2084| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2084| Conversion = [BoolConversion] conversion to bool -# 2084| Type = [BoolType] bool -# 2084| Value = [CStyleCast] 0 -# 2084| ValueCategory = prvalue -# 2085| getStmt(689): [DoStmt] do (...) ... -# 2087| getCondition(): [Literal] 0 -# 2087| Type = [IntType] int -# 2087| Value = [Literal] 0 -# 2087| ValueCategory = prvalue -# 2085| getStmt(): [BlockStmt] { ... } -# 2086| getStmt(0): [DeclStmt] declaration -# 2086| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x689 -# 2086| Type = [Struct] String -# 2086| getVariable().getInitializer(): [Initializer] initializer for x689 -# 2086| getExpr(): [ConstructorCall] call to String -# 2086| Type = [VoidType] void -# 2086| ValueCategory = prvalue -# 2087| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2087| Type = [VoidType] void -# 2087| ValueCategory = prvalue -# 2087| getQualifier(): [VariableAccess] x689 -# 2087| Type = [Struct] String -# 2087| ValueCategory = lvalue -# 2087| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2087| Conversion = [BoolConversion] conversion to bool -# 2087| Type = [BoolType] bool -# 2087| Value = [CStyleCast] 0 -# 2087| ValueCategory = prvalue -# 2088| getStmt(690): [DoStmt] do (...) ... -# 2090| getCondition(): [Literal] 0 -# 2090| Type = [IntType] int -# 2090| Value = [Literal] 0 -# 2090| ValueCategory = prvalue -# 2088| getStmt(): [BlockStmt] { ... } -# 2089| getStmt(0): [DeclStmt] declaration -# 2089| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x690 -# 2089| Type = [Struct] String -# 2089| getVariable().getInitializer(): [Initializer] initializer for x690 -# 2089| getExpr(): [ConstructorCall] call to String -# 2089| Type = [VoidType] void -# 2089| ValueCategory = prvalue -# 2090| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2090| Type = [VoidType] void -# 2090| ValueCategory = prvalue -# 2090| getQualifier(): [VariableAccess] x690 -# 2090| Type = [Struct] String -# 2090| ValueCategory = lvalue -# 2090| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2090| Conversion = [BoolConversion] conversion to bool -# 2090| Type = [BoolType] bool -# 2090| Value = [CStyleCast] 0 -# 2090| ValueCategory = prvalue -# 2091| getStmt(691): [DoStmt] do (...) ... -# 2093| getCondition(): [Literal] 0 -# 2093| Type = [IntType] int -# 2093| Value = [Literal] 0 -# 2093| ValueCategory = prvalue -# 2091| getStmt(): [BlockStmt] { ... } -# 2092| getStmt(0): [DeclStmt] declaration -# 2092| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x691 -# 2092| Type = [Struct] String -# 2092| getVariable().getInitializer(): [Initializer] initializer for x691 -# 2092| getExpr(): [ConstructorCall] call to String -# 2092| Type = [VoidType] void -# 2092| ValueCategory = prvalue -# 2093| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2093| Type = [VoidType] void -# 2093| ValueCategory = prvalue -# 2093| getQualifier(): [VariableAccess] x691 -# 2093| Type = [Struct] String -# 2093| ValueCategory = lvalue -# 2093| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2093| Conversion = [BoolConversion] conversion to bool -# 2093| Type = [BoolType] bool -# 2093| Value = [CStyleCast] 0 -# 2093| ValueCategory = prvalue -# 2094| getStmt(692): [DoStmt] do (...) ... -# 2096| getCondition(): [Literal] 0 -# 2096| Type = [IntType] int -# 2096| Value = [Literal] 0 -# 2096| ValueCategory = prvalue -# 2094| getStmt(): [BlockStmt] { ... } -# 2095| getStmt(0): [DeclStmt] declaration -# 2095| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x692 -# 2095| Type = [Struct] String -# 2095| getVariable().getInitializer(): [Initializer] initializer for x692 -# 2095| getExpr(): [ConstructorCall] call to String -# 2095| Type = [VoidType] void -# 2095| ValueCategory = prvalue -# 2096| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2096| Type = [VoidType] void -# 2096| ValueCategory = prvalue -# 2096| getQualifier(): [VariableAccess] x692 -# 2096| Type = [Struct] String -# 2096| ValueCategory = lvalue -# 2096| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2096| Conversion = [BoolConversion] conversion to bool -# 2096| Type = [BoolType] bool -# 2096| Value = [CStyleCast] 0 -# 2096| ValueCategory = prvalue -# 2097| getStmt(693): [DoStmt] do (...) ... -# 2099| getCondition(): [Literal] 0 -# 2099| Type = [IntType] int -# 2099| Value = [Literal] 0 -# 2099| ValueCategory = prvalue -# 2097| getStmt(): [BlockStmt] { ... } -# 2098| getStmt(0): [DeclStmt] declaration -# 2098| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x693 -# 2098| Type = [Struct] String -# 2098| getVariable().getInitializer(): [Initializer] initializer for x693 -# 2098| getExpr(): [ConstructorCall] call to String -# 2098| Type = [VoidType] void -# 2098| ValueCategory = prvalue -# 2099| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2099| Type = [VoidType] void -# 2099| ValueCategory = prvalue -# 2099| getQualifier(): [VariableAccess] x693 -# 2099| Type = [Struct] String -# 2099| ValueCategory = lvalue -# 2099| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2099| Conversion = [BoolConversion] conversion to bool -# 2099| Type = [BoolType] bool -# 2099| Value = [CStyleCast] 0 -# 2099| ValueCategory = prvalue -# 2100| getStmt(694): [DoStmt] do (...) ... -# 2102| getCondition(): [Literal] 0 -# 2102| Type = [IntType] int -# 2102| Value = [Literal] 0 -# 2102| ValueCategory = prvalue -# 2100| getStmt(): [BlockStmt] { ... } -# 2101| getStmt(0): [DeclStmt] declaration -# 2101| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x694 -# 2101| Type = [Struct] String -# 2101| getVariable().getInitializer(): [Initializer] initializer for x694 -# 2101| getExpr(): [ConstructorCall] call to String -# 2101| Type = [VoidType] void -# 2101| ValueCategory = prvalue -# 2102| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2102| Type = [VoidType] void -# 2102| ValueCategory = prvalue -# 2102| getQualifier(): [VariableAccess] x694 -# 2102| Type = [Struct] String -# 2102| ValueCategory = lvalue -# 2102| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2102| Conversion = [BoolConversion] conversion to bool -# 2102| Type = [BoolType] bool -# 2102| Value = [CStyleCast] 0 -# 2102| ValueCategory = prvalue -# 2103| getStmt(695): [DoStmt] do (...) ... -# 2105| getCondition(): [Literal] 0 -# 2105| Type = [IntType] int -# 2105| Value = [Literal] 0 -# 2105| ValueCategory = prvalue -# 2103| getStmt(): [BlockStmt] { ... } -# 2104| getStmt(0): [DeclStmt] declaration -# 2104| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x695 -# 2104| Type = [Struct] String -# 2104| getVariable().getInitializer(): [Initializer] initializer for x695 -# 2104| getExpr(): [ConstructorCall] call to String -# 2104| Type = [VoidType] void -# 2104| ValueCategory = prvalue -# 2105| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2105| Type = [VoidType] void -# 2105| ValueCategory = prvalue -# 2105| getQualifier(): [VariableAccess] x695 -# 2105| Type = [Struct] String -# 2105| ValueCategory = lvalue -# 2105| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2105| Conversion = [BoolConversion] conversion to bool -# 2105| Type = [BoolType] bool -# 2105| Value = [CStyleCast] 0 -# 2105| ValueCategory = prvalue -# 2106| getStmt(696): [DoStmt] do (...) ... -# 2108| getCondition(): [Literal] 0 -# 2108| Type = [IntType] int -# 2108| Value = [Literal] 0 -# 2108| ValueCategory = prvalue -# 2106| getStmt(): [BlockStmt] { ... } -# 2107| getStmt(0): [DeclStmt] declaration -# 2107| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x696 -# 2107| Type = [Struct] String -# 2107| getVariable().getInitializer(): [Initializer] initializer for x696 -# 2107| getExpr(): [ConstructorCall] call to String -# 2107| Type = [VoidType] void -# 2107| ValueCategory = prvalue -# 2108| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getQualifier(): [VariableAccess] x696 -# 2108| Type = [Struct] String -# 2108| ValueCategory = lvalue -# 2108| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2108| Conversion = [BoolConversion] conversion to bool -# 2108| Type = [BoolType] bool -# 2108| Value = [CStyleCast] 0 -# 2108| ValueCategory = prvalue -# 2109| getStmt(697): [DoStmt] do (...) ... -# 2111| getCondition(): [Literal] 0 -# 2111| Type = [IntType] int -# 2111| Value = [Literal] 0 -# 2111| ValueCategory = prvalue -# 2109| getStmt(): [BlockStmt] { ... } -# 2110| getStmt(0): [DeclStmt] declaration -# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x697 -# 2110| Type = [Struct] String -# 2110| getVariable().getInitializer(): [Initializer] initializer for x697 -# 2110| getExpr(): [ConstructorCall] call to String -# 2110| Type = [VoidType] void -# 2110| ValueCategory = prvalue -# 2111| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getQualifier(): [VariableAccess] x697 -# 2111| Type = [Struct] String -# 2111| ValueCategory = lvalue -# 2111| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2111| Conversion = [BoolConversion] conversion to bool -# 2111| Type = [BoolType] bool -# 2111| Value = [CStyleCast] 0 -# 2111| ValueCategory = prvalue -# 2112| getStmt(698): [DoStmt] do (...) ... -# 2114| getCondition(): [Literal] 0 -# 2114| Type = [IntType] int -# 2114| Value = [Literal] 0 -# 2114| ValueCategory = prvalue -# 2112| getStmt(): [BlockStmt] { ... } -# 2113| getStmt(0): [DeclStmt] declaration -# 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x698 -# 2113| Type = [Struct] String -# 2113| getVariable().getInitializer(): [Initializer] initializer for x698 -# 2113| getExpr(): [ConstructorCall] call to String -# 2113| Type = [VoidType] void -# 2113| ValueCategory = prvalue -# 2114| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getQualifier(): [VariableAccess] x698 -# 2114| Type = [Struct] String -# 2114| ValueCategory = lvalue -# 2114| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2114| Conversion = [BoolConversion] conversion to bool -# 2114| Type = [BoolType] bool -# 2114| Value = [CStyleCast] 0 -# 2114| ValueCategory = prvalue -# 2115| getStmt(699): [DoStmt] do (...) ... -# 2117| getCondition(): [Literal] 0 -# 2117| Type = [IntType] int -# 2117| Value = [Literal] 0 -# 2117| ValueCategory = prvalue -# 2115| getStmt(): [BlockStmt] { ... } -# 2116| getStmt(0): [DeclStmt] declaration -# 2116| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x699 -# 2116| Type = [Struct] String -# 2116| getVariable().getInitializer(): [Initializer] initializer for x699 -# 2116| getExpr(): [ConstructorCall] call to String -# 2116| Type = [VoidType] void -# 2116| ValueCategory = prvalue -# 2117| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2117| Type = [VoidType] void -# 2117| ValueCategory = prvalue -# 2117| getQualifier(): [VariableAccess] x699 -# 2117| Type = [Struct] String -# 2117| ValueCategory = lvalue -# 2117| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2117| Conversion = [BoolConversion] conversion to bool -# 2117| Type = [BoolType] bool -# 2117| Value = [CStyleCast] 0 -# 2117| ValueCategory = prvalue -# 2118| getStmt(700): [DoStmt] do (...) ... -# 2120| getCondition(): [Literal] 0 -# 2120| Type = [IntType] int -# 2120| Value = [Literal] 0 -# 2120| ValueCategory = prvalue -# 2118| getStmt(): [BlockStmt] { ... } -# 2119| getStmt(0): [DeclStmt] declaration -# 2119| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x700 -# 2119| Type = [Struct] String -# 2119| getVariable().getInitializer(): [Initializer] initializer for x700 -# 2119| getExpr(): [ConstructorCall] call to String -# 2119| Type = [VoidType] void -# 2119| ValueCategory = prvalue -# 2120| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2120| Type = [VoidType] void -# 2120| ValueCategory = prvalue -# 2120| getQualifier(): [VariableAccess] x700 -# 2120| Type = [Struct] String -# 2120| ValueCategory = lvalue -# 2120| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2120| Conversion = [BoolConversion] conversion to bool -# 2120| Type = [BoolType] bool -# 2120| Value = [CStyleCast] 0 -# 2120| ValueCategory = prvalue -# 2121| getStmt(701): [DoStmt] do (...) ... -# 2123| getCondition(): [Literal] 0 -# 2123| Type = [IntType] int -# 2123| Value = [Literal] 0 -# 2123| ValueCategory = prvalue -# 2121| getStmt(): [BlockStmt] { ... } -# 2122| getStmt(0): [DeclStmt] declaration -# 2122| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x701 -# 2122| Type = [Struct] String -# 2122| getVariable().getInitializer(): [Initializer] initializer for x701 -# 2122| getExpr(): [ConstructorCall] call to String -# 2122| Type = [VoidType] void -# 2122| ValueCategory = prvalue -# 2123| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2123| Type = [VoidType] void -# 2123| ValueCategory = prvalue -# 2123| getQualifier(): [VariableAccess] x701 -# 2123| Type = [Struct] String -# 2123| ValueCategory = lvalue -# 2123| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2123| Conversion = [BoolConversion] conversion to bool -# 2123| Type = [BoolType] bool -# 2123| Value = [CStyleCast] 0 -# 2123| ValueCategory = prvalue -# 2124| getStmt(702): [DoStmt] do (...) ... -# 2126| getCondition(): [Literal] 0 -# 2126| Type = [IntType] int -# 2126| Value = [Literal] 0 -# 2126| ValueCategory = prvalue -# 2124| getStmt(): [BlockStmt] { ... } -# 2125| getStmt(0): [DeclStmt] declaration -# 2125| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x702 -# 2125| Type = [Struct] String -# 2125| getVariable().getInitializer(): [Initializer] initializer for x702 -# 2125| getExpr(): [ConstructorCall] call to String -# 2125| Type = [VoidType] void -# 2125| ValueCategory = prvalue -# 2126| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2126| Type = [VoidType] void -# 2126| ValueCategory = prvalue -# 2126| getQualifier(): [VariableAccess] x702 -# 2126| Type = [Struct] String -# 2126| ValueCategory = lvalue -# 2126| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2126| Conversion = [BoolConversion] conversion to bool -# 2126| Type = [BoolType] bool -# 2126| Value = [CStyleCast] 0 -# 2126| ValueCategory = prvalue -# 2127| getStmt(703): [DoStmt] do (...) ... -# 2129| getCondition(): [Literal] 0 -# 2129| Type = [IntType] int -# 2129| Value = [Literal] 0 -# 2129| ValueCategory = prvalue -# 2127| getStmt(): [BlockStmt] { ... } -# 2128| getStmt(0): [DeclStmt] declaration -# 2128| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x703 -# 2128| Type = [Struct] String -# 2128| getVariable().getInitializer(): [Initializer] initializer for x703 -# 2128| getExpr(): [ConstructorCall] call to String -# 2128| Type = [VoidType] void -# 2128| ValueCategory = prvalue -# 2129| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2129| Type = [VoidType] void -# 2129| ValueCategory = prvalue -# 2129| getQualifier(): [VariableAccess] x703 -# 2129| Type = [Struct] String -# 2129| ValueCategory = lvalue -# 2129| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2129| Conversion = [BoolConversion] conversion to bool -# 2129| Type = [BoolType] bool -# 2129| Value = [CStyleCast] 0 -# 2129| ValueCategory = prvalue -# 2130| getStmt(704): [DoStmt] do (...) ... -# 2132| getCondition(): [Literal] 0 -# 2132| Type = [IntType] int -# 2132| Value = [Literal] 0 -# 2132| ValueCategory = prvalue -# 2130| getStmt(): [BlockStmt] { ... } -# 2131| getStmt(0): [DeclStmt] declaration -# 2131| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x704 -# 2131| Type = [Struct] String -# 2131| getVariable().getInitializer(): [Initializer] initializer for x704 -# 2131| getExpr(): [ConstructorCall] call to String -# 2131| Type = [VoidType] void -# 2131| ValueCategory = prvalue -# 2132| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2132| Type = [VoidType] void -# 2132| ValueCategory = prvalue -# 2132| getQualifier(): [VariableAccess] x704 -# 2132| Type = [Struct] String -# 2132| ValueCategory = lvalue -# 2132| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2132| Conversion = [BoolConversion] conversion to bool -# 2132| Type = [BoolType] bool -# 2132| Value = [CStyleCast] 0 -# 2132| ValueCategory = prvalue -# 2133| getStmt(705): [DoStmt] do (...) ... -# 2135| getCondition(): [Literal] 0 -# 2135| Type = [IntType] int -# 2135| Value = [Literal] 0 -# 2135| ValueCategory = prvalue -# 2133| getStmt(): [BlockStmt] { ... } -# 2134| getStmt(0): [DeclStmt] declaration -# 2134| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x705 -# 2134| Type = [Struct] String -# 2134| getVariable().getInitializer(): [Initializer] initializer for x705 -# 2134| getExpr(): [ConstructorCall] call to String -# 2134| Type = [VoidType] void -# 2134| ValueCategory = prvalue -# 2135| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2135| Type = [VoidType] void -# 2135| ValueCategory = prvalue -# 2135| getQualifier(): [VariableAccess] x705 -# 2135| Type = [Struct] String -# 2135| ValueCategory = lvalue -# 2135| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2135| Conversion = [BoolConversion] conversion to bool -# 2135| Type = [BoolType] bool -# 2135| Value = [CStyleCast] 0 -# 2135| ValueCategory = prvalue -# 2136| getStmt(706): [DoStmt] do (...) ... -# 2138| getCondition(): [Literal] 0 -# 2138| Type = [IntType] int -# 2138| Value = [Literal] 0 -# 2138| ValueCategory = prvalue -# 2136| getStmt(): [BlockStmt] { ... } -# 2137| getStmt(0): [DeclStmt] declaration -# 2137| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x706 -# 2137| Type = [Struct] String -# 2137| getVariable().getInitializer(): [Initializer] initializer for x706 -# 2137| getExpr(): [ConstructorCall] call to String -# 2137| Type = [VoidType] void -# 2137| ValueCategory = prvalue -# 2138| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2138| Type = [VoidType] void -# 2138| ValueCategory = prvalue -# 2138| getQualifier(): [VariableAccess] x706 -# 2138| Type = [Struct] String -# 2138| ValueCategory = lvalue -# 2138| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2138| Conversion = [BoolConversion] conversion to bool -# 2138| Type = [BoolType] bool -# 2138| Value = [CStyleCast] 0 -# 2138| ValueCategory = prvalue -# 2139| getStmt(707): [DoStmt] do (...) ... -# 2141| getCondition(): [Literal] 0 -# 2141| Type = [IntType] int -# 2141| Value = [Literal] 0 -# 2141| ValueCategory = prvalue -# 2139| getStmt(): [BlockStmt] { ... } -# 2140| getStmt(0): [DeclStmt] declaration -# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x707 -# 2140| Type = [Struct] String -# 2140| getVariable().getInitializer(): [Initializer] initializer for x707 -# 2140| getExpr(): [ConstructorCall] call to String -# 2140| Type = [VoidType] void -# 2140| ValueCategory = prvalue -# 2141| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2141| Type = [VoidType] void -# 2141| ValueCategory = prvalue -# 2141| getQualifier(): [VariableAccess] x707 -# 2141| Type = [Struct] String -# 2141| ValueCategory = lvalue -# 2141| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2141| Conversion = [BoolConversion] conversion to bool -# 2141| Type = [BoolType] bool -# 2141| Value = [CStyleCast] 0 -# 2141| ValueCategory = prvalue -# 2142| getStmt(708): [DoStmt] do (...) ... -# 2144| getCondition(): [Literal] 0 -# 2144| Type = [IntType] int -# 2144| Value = [Literal] 0 -# 2144| ValueCategory = prvalue -# 2142| getStmt(): [BlockStmt] { ... } -# 2143| getStmt(0): [DeclStmt] declaration -# 2143| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x708 -# 2143| Type = [Struct] String -# 2143| getVariable().getInitializer(): [Initializer] initializer for x708 -# 2143| getExpr(): [ConstructorCall] call to String -# 2143| Type = [VoidType] void -# 2143| ValueCategory = prvalue -# 2144| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2144| Type = [VoidType] void -# 2144| ValueCategory = prvalue -# 2144| getQualifier(): [VariableAccess] x708 -# 2144| Type = [Struct] String -# 2144| ValueCategory = lvalue -# 2144| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2144| Conversion = [BoolConversion] conversion to bool -# 2144| Type = [BoolType] bool -# 2144| Value = [CStyleCast] 0 -# 2144| ValueCategory = prvalue -# 2145| getStmt(709): [DoStmt] do (...) ... -# 2147| getCondition(): [Literal] 0 -# 2147| Type = [IntType] int -# 2147| Value = [Literal] 0 -# 2147| ValueCategory = prvalue -# 2145| getStmt(): [BlockStmt] { ... } -# 2146| getStmt(0): [DeclStmt] declaration -# 2146| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x709 -# 2146| Type = [Struct] String -# 2146| getVariable().getInitializer(): [Initializer] initializer for x709 -# 2146| getExpr(): [ConstructorCall] call to String -# 2146| Type = [VoidType] void -# 2146| ValueCategory = prvalue -# 2147| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2147| Type = [VoidType] void -# 2147| ValueCategory = prvalue -# 2147| getQualifier(): [VariableAccess] x709 -# 2147| Type = [Struct] String -# 2147| ValueCategory = lvalue -# 2147| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2147| Conversion = [BoolConversion] conversion to bool -# 2147| Type = [BoolType] bool -# 2147| Value = [CStyleCast] 0 -# 2147| ValueCategory = prvalue -# 2148| getStmt(710): [DoStmt] do (...) ... -# 2150| getCondition(): [Literal] 0 -# 2150| Type = [IntType] int -# 2150| Value = [Literal] 0 -# 2150| ValueCategory = prvalue -# 2148| getStmt(): [BlockStmt] { ... } -# 2149| getStmt(0): [DeclStmt] declaration -# 2149| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x710 -# 2149| Type = [Struct] String -# 2149| getVariable().getInitializer(): [Initializer] initializer for x710 -# 2149| getExpr(): [ConstructorCall] call to String -# 2149| Type = [VoidType] void -# 2149| ValueCategory = prvalue -# 2150| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2150| Type = [VoidType] void -# 2150| ValueCategory = prvalue -# 2150| getQualifier(): [VariableAccess] x710 -# 2150| Type = [Struct] String -# 2150| ValueCategory = lvalue -# 2150| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2150| Conversion = [BoolConversion] conversion to bool -# 2150| Type = [BoolType] bool -# 2150| Value = [CStyleCast] 0 -# 2150| ValueCategory = prvalue -# 2151| getStmt(711): [DoStmt] do (...) ... -# 2153| getCondition(): [Literal] 0 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 0 -# 2153| ValueCategory = prvalue -# 2151| getStmt(): [BlockStmt] { ... } -# 2152| getStmt(0): [DeclStmt] declaration -# 2152| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x711 -# 2152| Type = [Struct] String -# 2152| getVariable().getInitializer(): [Initializer] initializer for x711 -# 2152| getExpr(): [ConstructorCall] call to String -# 2152| Type = [VoidType] void -# 2152| ValueCategory = prvalue -# 2153| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2153| Type = [VoidType] void -# 2153| ValueCategory = prvalue -# 2153| getQualifier(): [VariableAccess] x711 -# 2153| Type = [Struct] String -# 2153| ValueCategory = lvalue -# 2153| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2153| Conversion = [BoolConversion] conversion to bool -# 2153| Type = [BoolType] bool -# 2153| Value = [CStyleCast] 0 -# 2153| ValueCategory = prvalue -# 2154| getStmt(712): [DoStmt] do (...) ... -# 2156| getCondition(): [Literal] 0 -# 2156| Type = [IntType] int -# 2156| Value = [Literal] 0 -# 2156| ValueCategory = prvalue -# 2154| getStmt(): [BlockStmt] { ... } -# 2155| getStmt(0): [DeclStmt] declaration -# 2155| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x712 -# 2155| Type = [Struct] String -# 2155| getVariable().getInitializer(): [Initializer] initializer for x712 -# 2155| getExpr(): [ConstructorCall] call to String -# 2155| Type = [VoidType] void -# 2155| ValueCategory = prvalue -# 2156| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2156| Type = [VoidType] void -# 2156| ValueCategory = prvalue -# 2156| getQualifier(): [VariableAccess] x712 -# 2156| Type = [Struct] String -# 2156| ValueCategory = lvalue -# 2156| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2156| Conversion = [BoolConversion] conversion to bool -# 2156| Type = [BoolType] bool -# 2156| Value = [CStyleCast] 0 -# 2156| ValueCategory = prvalue -# 2157| getStmt(713): [DoStmt] do (...) ... -# 2159| getCondition(): [Literal] 0 -# 2159| Type = [IntType] int -# 2159| Value = [Literal] 0 -# 2159| ValueCategory = prvalue -# 2157| getStmt(): [BlockStmt] { ... } -# 2158| getStmt(0): [DeclStmt] declaration -# 2158| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x713 -# 2158| Type = [Struct] String -# 2158| getVariable().getInitializer(): [Initializer] initializer for x713 -# 2158| getExpr(): [ConstructorCall] call to String -# 2158| Type = [VoidType] void -# 2158| ValueCategory = prvalue -# 2159| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2159| Type = [VoidType] void -# 2159| ValueCategory = prvalue -# 2159| getQualifier(): [VariableAccess] x713 -# 2159| Type = [Struct] String -# 2159| ValueCategory = lvalue -# 2159| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2159| Conversion = [BoolConversion] conversion to bool -# 2159| Type = [BoolType] bool -# 2159| Value = [CStyleCast] 0 -# 2159| ValueCategory = prvalue -# 2160| getStmt(714): [DoStmt] do (...) ... -# 2162| getCondition(): [Literal] 0 -# 2162| Type = [IntType] int -# 2162| Value = [Literal] 0 -# 2162| ValueCategory = prvalue -# 2160| getStmt(): [BlockStmt] { ... } -# 2161| getStmt(0): [DeclStmt] declaration -# 2161| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x714 -# 2161| Type = [Struct] String -# 2161| getVariable().getInitializer(): [Initializer] initializer for x714 -# 2161| getExpr(): [ConstructorCall] call to String -# 2161| Type = [VoidType] void -# 2161| ValueCategory = prvalue -# 2162| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2162| Type = [VoidType] void -# 2162| ValueCategory = prvalue -# 2162| getQualifier(): [VariableAccess] x714 -# 2162| Type = [Struct] String -# 2162| ValueCategory = lvalue -# 2162| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2162| Conversion = [BoolConversion] conversion to bool -# 2162| Type = [BoolType] bool -# 2162| Value = [CStyleCast] 0 -# 2162| ValueCategory = prvalue -# 2163| getStmt(715): [DoStmt] do (...) ... -# 2165| getCondition(): [Literal] 0 -# 2165| Type = [IntType] int -# 2165| Value = [Literal] 0 -# 2165| ValueCategory = prvalue -# 2163| getStmt(): [BlockStmt] { ... } -# 2164| getStmt(0): [DeclStmt] declaration -# 2164| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x715 -# 2164| Type = [Struct] String -# 2164| getVariable().getInitializer(): [Initializer] initializer for x715 -# 2164| getExpr(): [ConstructorCall] call to String -# 2164| Type = [VoidType] void -# 2164| ValueCategory = prvalue -# 2165| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2165| Type = [VoidType] void -# 2165| ValueCategory = prvalue -# 2165| getQualifier(): [VariableAccess] x715 -# 2165| Type = [Struct] String -# 2165| ValueCategory = lvalue -# 2165| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2165| Conversion = [BoolConversion] conversion to bool -# 2165| Type = [BoolType] bool -# 2165| Value = [CStyleCast] 0 -# 2165| ValueCategory = prvalue -# 2166| getStmt(716): [DoStmt] do (...) ... -# 2168| getCondition(): [Literal] 0 -# 2168| Type = [IntType] int -# 2168| Value = [Literal] 0 -# 2168| ValueCategory = prvalue -# 2166| getStmt(): [BlockStmt] { ... } -# 2167| getStmt(0): [DeclStmt] declaration -# 2167| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x716 -# 2167| Type = [Struct] String -# 2167| getVariable().getInitializer(): [Initializer] initializer for x716 -# 2167| getExpr(): [ConstructorCall] call to String -# 2167| Type = [VoidType] void -# 2167| ValueCategory = prvalue -# 2168| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2168| Type = [VoidType] void -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] x716 -# 2168| Type = [Struct] String -# 2168| ValueCategory = lvalue -# 2168| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2168| Conversion = [BoolConversion] conversion to bool -# 2168| Type = [BoolType] bool -# 2168| Value = [CStyleCast] 0 -# 2168| ValueCategory = prvalue -# 2169| getStmt(717): [DoStmt] do (...) ... -# 2171| getCondition(): [Literal] 0 -# 2171| Type = [IntType] int -# 2171| Value = [Literal] 0 -# 2171| ValueCategory = prvalue -# 2169| getStmt(): [BlockStmt] { ... } -# 2170| getStmt(0): [DeclStmt] declaration -# 2170| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x717 -# 2170| Type = [Struct] String -# 2170| getVariable().getInitializer(): [Initializer] initializer for x717 -# 2170| getExpr(): [ConstructorCall] call to String -# 2170| Type = [VoidType] void -# 2170| ValueCategory = prvalue -# 2171| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2171| Type = [VoidType] void -# 2171| ValueCategory = prvalue -# 2171| getQualifier(): [VariableAccess] x717 -# 2171| Type = [Struct] String -# 2171| ValueCategory = lvalue -# 2171| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2171| Conversion = [BoolConversion] conversion to bool -# 2171| Type = [BoolType] bool -# 2171| Value = [CStyleCast] 0 -# 2171| ValueCategory = prvalue -# 2172| getStmt(718): [DoStmt] do (...) ... -# 2174| getCondition(): [Literal] 0 -# 2174| Type = [IntType] int -# 2174| Value = [Literal] 0 -# 2174| ValueCategory = prvalue -# 2172| getStmt(): [BlockStmt] { ... } -# 2173| getStmt(0): [DeclStmt] declaration -# 2173| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x718 -# 2173| Type = [Struct] String -# 2173| getVariable().getInitializer(): [Initializer] initializer for x718 -# 2173| getExpr(): [ConstructorCall] call to String -# 2173| Type = [VoidType] void -# 2173| ValueCategory = prvalue -# 2174| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2174| Type = [VoidType] void -# 2174| ValueCategory = prvalue -# 2174| getQualifier(): [VariableAccess] x718 -# 2174| Type = [Struct] String -# 2174| ValueCategory = lvalue -# 2174| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2174| Conversion = [BoolConversion] conversion to bool -# 2174| Type = [BoolType] bool -# 2174| Value = [CStyleCast] 0 -# 2174| ValueCategory = prvalue -# 2175| getStmt(719): [DoStmt] do (...) ... -# 2177| getCondition(): [Literal] 0 -# 2177| Type = [IntType] int -# 2177| Value = [Literal] 0 -# 2177| ValueCategory = prvalue -# 2175| getStmt(): [BlockStmt] { ... } -# 2176| getStmt(0): [DeclStmt] declaration -# 2176| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x719 -# 2176| Type = [Struct] String -# 2176| getVariable().getInitializer(): [Initializer] initializer for x719 -# 2176| getExpr(): [ConstructorCall] call to String -# 2176| Type = [VoidType] void -# 2176| ValueCategory = prvalue -# 2177| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2177| Type = [VoidType] void -# 2177| ValueCategory = prvalue -# 2177| getQualifier(): [VariableAccess] x719 -# 2177| Type = [Struct] String -# 2177| ValueCategory = lvalue -# 2177| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2177| Conversion = [BoolConversion] conversion to bool -# 2177| Type = [BoolType] bool -# 2177| Value = [CStyleCast] 0 -# 2177| ValueCategory = prvalue -# 2178| getStmt(720): [DoStmt] do (...) ... -# 2180| getCondition(): [Literal] 0 -# 2180| Type = [IntType] int -# 2180| Value = [Literal] 0 -# 2180| ValueCategory = prvalue -# 2178| getStmt(): [BlockStmt] { ... } -# 2179| getStmt(0): [DeclStmt] declaration -# 2179| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x720 -# 2179| Type = [Struct] String -# 2179| getVariable().getInitializer(): [Initializer] initializer for x720 -# 2179| getExpr(): [ConstructorCall] call to String -# 2179| Type = [VoidType] void -# 2179| ValueCategory = prvalue -# 2180| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2180| Type = [VoidType] void -# 2180| ValueCategory = prvalue -# 2180| getQualifier(): [VariableAccess] x720 -# 2180| Type = [Struct] String -# 2180| ValueCategory = lvalue -# 2180| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2180| Conversion = [BoolConversion] conversion to bool -# 2180| Type = [BoolType] bool -# 2180| Value = [CStyleCast] 0 -# 2180| ValueCategory = prvalue -# 2181| getStmt(721): [DoStmt] do (...) ... -# 2183| getCondition(): [Literal] 0 -# 2183| Type = [IntType] int -# 2183| Value = [Literal] 0 -# 2183| ValueCategory = prvalue -# 2181| getStmt(): [BlockStmt] { ... } -# 2182| getStmt(0): [DeclStmt] declaration -# 2182| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x721 -# 2182| Type = [Struct] String -# 2182| getVariable().getInitializer(): [Initializer] initializer for x721 -# 2182| getExpr(): [ConstructorCall] call to String -# 2182| Type = [VoidType] void -# 2182| ValueCategory = prvalue -# 2183| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2183| Type = [VoidType] void -# 2183| ValueCategory = prvalue -# 2183| getQualifier(): [VariableAccess] x721 -# 2183| Type = [Struct] String -# 2183| ValueCategory = lvalue -# 2183| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2183| Conversion = [BoolConversion] conversion to bool -# 2183| Type = [BoolType] bool -# 2183| Value = [CStyleCast] 0 -# 2183| ValueCategory = prvalue -# 2184| getStmt(722): [DoStmt] do (...) ... -# 2186| getCondition(): [Literal] 0 -# 2186| Type = [IntType] int -# 2186| Value = [Literal] 0 -# 2186| ValueCategory = prvalue -# 2184| getStmt(): [BlockStmt] { ... } -# 2185| getStmt(0): [DeclStmt] declaration -# 2185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x722 -# 2185| Type = [Struct] String -# 2185| getVariable().getInitializer(): [Initializer] initializer for x722 -# 2185| getExpr(): [ConstructorCall] call to String -# 2185| Type = [VoidType] void -# 2185| ValueCategory = prvalue -# 2186| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2186| getQualifier(): [VariableAccess] x722 -# 2186| Type = [Struct] String -# 2186| ValueCategory = lvalue -# 2186| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2186| Conversion = [BoolConversion] conversion to bool -# 2186| Type = [BoolType] bool -# 2186| Value = [CStyleCast] 0 -# 2186| ValueCategory = prvalue -# 2187| getStmt(723): [DoStmt] do (...) ... -# 2189| getCondition(): [Literal] 0 -# 2189| Type = [IntType] int -# 2189| Value = [Literal] 0 -# 2189| ValueCategory = prvalue -# 2187| getStmt(): [BlockStmt] { ... } -# 2188| getStmt(0): [DeclStmt] declaration -# 2188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x723 -# 2188| Type = [Struct] String -# 2188| getVariable().getInitializer(): [Initializer] initializer for x723 -# 2188| getExpr(): [ConstructorCall] call to String -# 2188| Type = [VoidType] void -# 2188| ValueCategory = prvalue -# 2189| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2189| Type = [VoidType] void -# 2189| ValueCategory = prvalue -# 2189| getQualifier(): [VariableAccess] x723 -# 2189| Type = [Struct] String -# 2189| ValueCategory = lvalue -# 2189| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2189| Conversion = [BoolConversion] conversion to bool -# 2189| Type = [BoolType] bool -# 2189| Value = [CStyleCast] 0 -# 2189| ValueCategory = prvalue -# 2190| getStmt(724): [DoStmt] do (...) ... -# 2192| getCondition(): [Literal] 0 -# 2192| Type = [IntType] int -# 2192| Value = [Literal] 0 -# 2192| ValueCategory = prvalue -# 2190| getStmt(): [BlockStmt] { ... } -# 2191| getStmt(0): [DeclStmt] declaration -# 2191| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x724 -# 2191| Type = [Struct] String -# 2191| getVariable().getInitializer(): [Initializer] initializer for x724 -# 2191| getExpr(): [ConstructorCall] call to String -# 2191| Type = [VoidType] void -# 2191| ValueCategory = prvalue -# 2192| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2192| Type = [VoidType] void -# 2192| ValueCategory = prvalue -# 2192| getQualifier(): [VariableAccess] x724 -# 2192| Type = [Struct] String -# 2192| ValueCategory = lvalue -# 2192| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2192| Conversion = [BoolConversion] conversion to bool -# 2192| Type = [BoolType] bool -# 2192| Value = [CStyleCast] 0 -# 2192| ValueCategory = prvalue -# 2193| getStmt(725): [DoStmt] do (...) ... -# 2195| getCondition(): [Literal] 0 -# 2195| Type = [IntType] int -# 2195| Value = [Literal] 0 -# 2195| ValueCategory = prvalue -# 2193| getStmt(): [BlockStmt] { ... } -# 2194| getStmt(0): [DeclStmt] declaration -# 2194| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x725 -# 2194| Type = [Struct] String -# 2194| getVariable().getInitializer(): [Initializer] initializer for x725 -# 2194| getExpr(): [ConstructorCall] call to String -# 2194| Type = [VoidType] void -# 2194| ValueCategory = prvalue -# 2195| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2195| Type = [VoidType] void -# 2195| ValueCategory = prvalue -# 2195| getQualifier(): [VariableAccess] x725 -# 2195| Type = [Struct] String -# 2195| ValueCategory = lvalue -# 2195| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2195| Conversion = [BoolConversion] conversion to bool -# 2195| Type = [BoolType] bool -# 2195| Value = [CStyleCast] 0 -# 2195| ValueCategory = prvalue -# 2196| getStmt(726): [DoStmt] do (...) ... -# 2198| getCondition(): [Literal] 0 -# 2198| Type = [IntType] int -# 2198| Value = [Literal] 0 -# 2198| ValueCategory = prvalue -# 2196| getStmt(): [BlockStmt] { ... } -# 2197| getStmt(0): [DeclStmt] declaration -# 2197| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x726 -# 2197| Type = [Struct] String -# 2197| getVariable().getInitializer(): [Initializer] initializer for x726 -# 2197| getExpr(): [ConstructorCall] call to String -# 2197| Type = [VoidType] void -# 2197| ValueCategory = prvalue -# 2198| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2198| Type = [VoidType] void -# 2198| ValueCategory = prvalue -# 2198| getQualifier(): [VariableAccess] x726 -# 2198| Type = [Struct] String -# 2198| ValueCategory = lvalue -# 2198| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2198| Conversion = [BoolConversion] conversion to bool -# 2198| Type = [BoolType] bool -# 2198| Value = [CStyleCast] 0 -# 2198| ValueCategory = prvalue -# 2199| getStmt(727): [DoStmt] do (...) ... -# 2201| getCondition(): [Literal] 0 -# 2201| Type = [IntType] int -# 2201| Value = [Literal] 0 -# 2201| ValueCategory = prvalue -# 2199| getStmt(): [BlockStmt] { ... } -# 2200| getStmt(0): [DeclStmt] declaration -# 2200| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x727 -# 2200| Type = [Struct] String -# 2200| getVariable().getInitializer(): [Initializer] initializer for x727 -# 2200| getExpr(): [ConstructorCall] call to String -# 2200| Type = [VoidType] void -# 2200| ValueCategory = prvalue -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] x727 -# 2201| Type = [Struct] String -# 2201| ValueCategory = lvalue -# 2201| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2201| Conversion = [BoolConversion] conversion to bool -# 2201| Type = [BoolType] bool -# 2201| Value = [CStyleCast] 0 -# 2201| ValueCategory = prvalue -# 2202| getStmt(728): [DoStmt] do (...) ... -# 2204| getCondition(): [Literal] 0 -# 2204| Type = [IntType] int -# 2204| Value = [Literal] 0 -# 2204| ValueCategory = prvalue -# 2202| getStmt(): [BlockStmt] { ... } -# 2203| getStmt(0): [DeclStmt] declaration -# 2203| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x728 -# 2203| Type = [Struct] String -# 2203| getVariable().getInitializer(): [Initializer] initializer for x728 -# 2203| getExpr(): [ConstructorCall] call to String -# 2203| Type = [VoidType] void -# 2203| ValueCategory = prvalue -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] x728 -# 2204| Type = [Struct] String -# 2204| ValueCategory = lvalue -# 2204| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2204| Conversion = [BoolConversion] conversion to bool -# 2204| Type = [BoolType] bool -# 2204| Value = [CStyleCast] 0 -# 2204| ValueCategory = prvalue -# 2205| getStmt(729): [DoStmt] do (...) ... -# 2207| getCondition(): [Literal] 0 -# 2207| Type = [IntType] int -# 2207| Value = [Literal] 0 -# 2207| ValueCategory = prvalue -# 2205| getStmt(): [BlockStmt] { ... } -# 2206| getStmt(0): [DeclStmt] declaration -# 2206| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x729 -# 2206| Type = [Struct] String -# 2206| getVariable().getInitializer(): [Initializer] initializer for x729 -# 2206| getExpr(): [ConstructorCall] call to String -# 2206| Type = [VoidType] void -# 2206| ValueCategory = prvalue -# 2207| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2207| Type = [VoidType] void -# 2207| ValueCategory = prvalue -# 2207| getQualifier(): [VariableAccess] x729 -# 2207| Type = [Struct] String -# 2207| ValueCategory = lvalue -# 2207| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2207| Conversion = [BoolConversion] conversion to bool -# 2207| Type = [BoolType] bool -# 2207| Value = [CStyleCast] 0 -# 2207| ValueCategory = prvalue -# 2208| getStmt(730): [DoStmt] do (...) ... -# 2210| getCondition(): [Literal] 0 -# 2210| Type = [IntType] int -# 2210| Value = [Literal] 0 -# 2210| ValueCategory = prvalue -# 2208| getStmt(): [BlockStmt] { ... } -# 2209| getStmt(0): [DeclStmt] declaration -# 2209| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x730 -# 2209| Type = [Struct] String -# 2209| getVariable().getInitializer(): [Initializer] initializer for x730 -# 2209| getExpr(): [ConstructorCall] call to String -# 2209| Type = [VoidType] void -# 2209| ValueCategory = prvalue -# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] x730 -# 2210| Type = [Struct] String -# 2210| ValueCategory = lvalue -# 2210| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2210| Conversion = [BoolConversion] conversion to bool -# 2210| Type = [BoolType] bool -# 2210| Value = [CStyleCast] 0 -# 2210| ValueCategory = prvalue -# 2211| getStmt(731): [DoStmt] do (...) ... -# 2213| getCondition(): [Literal] 0 -# 2213| Type = [IntType] int -# 2213| Value = [Literal] 0 -# 2213| ValueCategory = prvalue -# 2211| getStmt(): [BlockStmt] { ... } -# 2212| getStmt(0): [DeclStmt] declaration -# 2212| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x731 -# 2212| Type = [Struct] String -# 2212| getVariable().getInitializer(): [Initializer] initializer for x731 -# 2212| getExpr(): [ConstructorCall] call to String -# 2212| Type = [VoidType] void -# 2212| ValueCategory = prvalue -# 2213| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2213| Type = [VoidType] void -# 2213| ValueCategory = prvalue -# 2213| getQualifier(): [VariableAccess] x731 -# 2213| Type = [Struct] String -# 2213| ValueCategory = lvalue -# 2213| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2213| Conversion = [BoolConversion] conversion to bool -# 2213| Type = [BoolType] bool -# 2213| Value = [CStyleCast] 0 -# 2213| ValueCategory = prvalue -# 2214| getStmt(732): [DoStmt] do (...) ... -# 2216| getCondition(): [Literal] 0 -# 2216| Type = [IntType] int -# 2216| Value = [Literal] 0 -# 2216| ValueCategory = prvalue -# 2214| getStmt(): [BlockStmt] { ... } -# 2215| getStmt(0): [DeclStmt] declaration -# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x732 -# 2215| Type = [Struct] String -# 2215| getVariable().getInitializer(): [Initializer] initializer for x732 -# 2215| getExpr(): [ConstructorCall] call to String -# 2215| Type = [VoidType] void -# 2215| ValueCategory = prvalue -# 2216| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2216| Type = [VoidType] void -# 2216| ValueCategory = prvalue -# 2216| getQualifier(): [VariableAccess] x732 -# 2216| Type = [Struct] String -# 2216| ValueCategory = lvalue -# 2216| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2216| Conversion = [BoolConversion] conversion to bool -# 2216| Type = [BoolType] bool -# 2216| Value = [CStyleCast] 0 -# 2216| ValueCategory = prvalue -# 2217| getStmt(733): [DoStmt] do (...) ... -# 2219| getCondition(): [Literal] 0 -# 2219| Type = [IntType] int -# 2219| Value = [Literal] 0 -# 2219| ValueCategory = prvalue -# 2217| getStmt(): [BlockStmt] { ... } -# 2218| getStmt(0): [DeclStmt] declaration -# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x733 -# 2218| Type = [Struct] String -# 2218| getVariable().getInitializer(): [Initializer] initializer for x733 -# 2218| getExpr(): [ConstructorCall] call to String -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x733 -# 2219| Type = [Struct] String -# 2219| ValueCategory = lvalue -# 2219| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2219| Conversion = [BoolConversion] conversion to bool -# 2219| Type = [BoolType] bool -# 2219| Value = [CStyleCast] 0 -# 2219| ValueCategory = prvalue -# 2220| getStmt(734): [DoStmt] do (...) ... -# 2222| getCondition(): [Literal] 0 -# 2222| Type = [IntType] int -# 2222| Value = [Literal] 0 -# 2222| ValueCategory = prvalue -# 2220| getStmt(): [BlockStmt] { ... } -# 2221| getStmt(0): [DeclStmt] declaration -# 2221| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x734 -# 2221| Type = [Struct] String -# 2221| getVariable().getInitializer(): [Initializer] initializer for x734 -# 2221| getExpr(): [ConstructorCall] call to String -# 2221| Type = [VoidType] void -# 2221| ValueCategory = prvalue -# 2222| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2222| Type = [VoidType] void -# 2222| ValueCategory = prvalue -# 2222| getQualifier(): [VariableAccess] x734 -# 2222| Type = [Struct] String -# 2222| ValueCategory = lvalue -# 2222| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2222| Conversion = [BoolConversion] conversion to bool -# 2222| Type = [BoolType] bool -# 2222| Value = [CStyleCast] 0 -# 2222| ValueCategory = prvalue -# 2223| getStmt(735): [DoStmt] do (...) ... -# 2225| getCondition(): [Literal] 0 -# 2225| Type = [IntType] int -# 2225| Value = [Literal] 0 -# 2225| ValueCategory = prvalue -# 2223| getStmt(): [BlockStmt] { ... } -# 2224| getStmt(0): [DeclStmt] declaration -# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x735 -# 2224| Type = [Struct] String -# 2224| getVariable().getInitializer(): [Initializer] initializer for x735 -# 2224| getExpr(): [ConstructorCall] call to String -# 2224| Type = [VoidType] void -# 2224| ValueCategory = prvalue -# 2225| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2225| Type = [VoidType] void -# 2225| ValueCategory = prvalue -# 2225| getQualifier(): [VariableAccess] x735 -# 2225| Type = [Struct] String -# 2225| ValueCategory = lvalue -# 2225| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2225| Conversion = [BoolConversion] conversion to bool -# 2225| Type = [BoolType] bool -# 2225| Value = [CStyleCast] 0 -# 2225| ValueCategory = prvalue -# 2226| getStmt(736): [DoStmt] do (...) ... -# 2228| getCondition(): [Literal] 0 -# 2228| Type = [IntType] int -# 2228| Value = [Literal] 0 -# 2228| ValueCategory = prvalue -# 2226| getStmt(): [BlockStmt] { ... } -# 2227| getStmt(0): [DeclStmt] declaration -# 2227| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x736 -# 2227| Type = [Struct] String -# 2227| getVariable().getInitializer(): [Initializer] initializer for x736 -# 2227| getExpr(): [ConstructorCall] call to String -# 2227| Type = [VoidType] void -# 2227| ValueCategory = prvalue -# 2228| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2228| Type = [VoidType] void -# 2228| ValueCategory = prvalue -# 2228| getQualifier(): [VariableAccess] x736 -# 2228| Type = [Struct] String -# 2228| ValueCategory = lvalue -# 2228| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2228| Conversion = [BoolConversion] conversion to bool -# 2228| Type = [BoolType] bool -# 2228| Value = [CStyleCast] 0 -# 2228| ValueCategory = prvalue -# 2229| getStmt(737): [DoStmt] do (...) ... -# 2231| getCondition(): [Literal] 0 -# 2231| Type = [IntType] int -# 2231| Value = [Literal] 0 -# 2231| ValueCategory = prvalue -# 2229| getStmt(): [BlockStmt] { ... } -# 2230| getStmt(0): [DeclStmt] declaration -# 2230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x737 -# 2230| Type = [Struct] String -# 2230| getVariable().getInitializer(): [Initializer] initializer for x737 -# 2230| getExpr(): [ConstructorCall] call to String -# 2230| Type = [VoidType] void -# 2230| ValueCategory = prvalue -# 2231| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2231| Type = [VoidType] void -# 2231| ValueCategory = prvalue -# 2231| getQualifier(): [VariableAccess] x737 -# 2231| Type = [Struct] String -# 2231| ValueCategory = lvalue -# 2231| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2231| Conversion = [BoolConversion] conversion to bool -# 2231| Type = [BoolType] bool -# 2231| Value = [CStyleCast] 0 -# 2231| ValueCategory = prvalue -# 2232| getStmt(738): [DoStmt] do (...) ... -# 2234| getCondition(): [Literal] 0 -# 2234| Type = [IntType] int -# 2234| Value = [Literal] 0 -# 2234| ValueCategory = prvalue -# 2232| getStmt(): [BlockStmt] { ... } -# 2233| getStmt(0): [DeclStmt] declaration -# 2233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x738 -# 2233| Type = [Struct] String -# 2233| getVariable().getInitializer(): [Initializer] initializer for x738 -# 2233| getExpr(): [ConstructorCall] call to String -# 2233| Type = [VoidType] void -# 2233| ValueCategory = prvalue -# 2234| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2234| Type = [VoidType] void -# 2234| ValueCategory = prvalue -# 2234| getQualifier(): [VariableAccess] x738 -# 2234| Type = [Struct] String -# 2234| ValueCategory = lvalue -# 2234| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2234| Conversion = [BoolConversion] conversion to bool -# 2234| Type = [BoolType] bool -# 2234| Value = [CStyleCast] 0 -# 2234| ValueCategory = prvalue -# 2235| getStmt(739): [DoStmt] do (...) ... -# 2237| getCondition(): [Literal] 0 -# 2237| Type = [IntType] int -# 2237| Value = [Literal] 0 -# 2237| ValueCategory = prvalue -# 2235| getStmt(): [BlockStmt] { ... } -# 2236| getStmt(0): [DeclStmt] declaration -# 2236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x739 -# 2236| Type = [Struct] String -# 2236| getVariable().getInitializer(): [Initializer] initializer for x739 -# 2236| getExpr(): [ConstructorCall] call to String -# 2236| Type = [VoidType] void -# 2236| ValueCategory = prvalue -# 2237| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2237| Type = [VoidType] void -# 2237| ValueCategory = prvalue -# 2237| getQualifier(): [VariableAccess] x739 -# 2237| Type = [Struct] String -# 2237| ValueCategory = lvalue -# 2237| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2237| Conversion = [BoolConversion] conversion to bool -# 2237| Type = [BoolType] bool -# 2237| Value = [CStyleCast] 0 -# 2237| ValueCategory = prvalue -# 2238| getStmt(740): [DoStmt] do (...) ... -# 2240| getCondition(): [Literal] 0 -# 2240| Type = [IntType] int -# 2240| Value = [Literal] 0 -# 2240| ValueCategory = prvalue -# 2238| getStmt(): [BlockStmt] { ... } -# 2239| getStmt(0): [DeclStmt] declaration -# 2239| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x740 -# 2239| Type = [Struct] String -# 2239| getVariable().getInitializer(): [Initializer] initializer for x740 -# 2239| getExpr(): [ConstructorCall] call to String -# 2239| Type = [VoidType] void -# 2239| ValueCategory = prvalue -# 2240| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2240| Type = [VoidType] void -# 2240| ValueCategory = prvalue -# 2240| getQualifier(): [VariableAccess] x740 -# 2240| Type = [Struct] String -# 2240| ValueCategory = lvalue -# 2240| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2240| Conversion = [BoolConversion] conversion to bool -# 2240| Type = [BoolType] bool -# 2240| Value = [CStyleCast] 0 -# 2240| ValueCategory = prvalue -# 2241| getStmt(741): [DoStmt] do (...) ... -# 2243| getCondition(): [Literal] 0 -# 2243| Type = [IntType] int -# 2243| Value = [Literal] 0 -# 2243| ValueCategory = prvalue -# 2241| getStmt(): [BlockStmt] { ... } -# 2242| getStmt(0): [DeclStmt] declaration -# 2242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x741 -# 2242| Type = [Struct] String -# 2242| getVariable().getInitializer(): [Initializer] initializer for x741 -# 2242| getExpr(): [ConstructorCall] call to String -# 2242| Type = [VoidType] void -# 2242| ValueCategory = prvalue -# 2243| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2243| Type = [VoidType] void -# 2243| ValueCategory = prvalue -# 2243| getQualifier(): [VariableAccess] x741 -# 2243| Type = [Struct] String -# 2243| ValueCategory = lvalue -# 2243| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2243| Conversion = [BoolConversion] conversion to bool -# 2243| Type = [BoolType] bool -# 2243| Value = [CStyleCast] 0 -# 2243| ValueCategory = prvalue -# 2244| getStmt(742): [DoStmt] do (...) ... -# 2246| getCondition(): [Literal] 0 -# 2246| Type = [IntType] int -# 2246| Value = [Literal] 0 -# 2246| ValueCategory = prvalue -# 2244| getStmt(): [BlockStmt] { ... } -# 2245| getStmt(0): [DeclStmt] declaration -# 2245| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x742 -# 2245| Type = [Struct] String -# 2245| getVariable().getInitializer(): [Initializer] initializer for x742 -# 2245| getExpr(): [ConstructorCall] call to String -# 2245| Type = [VoidType] void -# 2245| ValueCategory = prvalue -# 2246| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2246| Type = [VoidType] void -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] x742 -# 2246| Type = [Struct] String -# 2246| ValueCategory = lvalue -# 2246| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2246| Conversion = [BoolConversion] conversion to bool -# 2246| Type = [BoolType] bool -# 2246| Value = [CStyleCast] 0 -# 2246| ValueCategory = prvalue -# 2247| getStmt(743): [DoStmt] do (...) ... -# 2249| getCondition(): [Literal] 0 -# 2249| Type = [IntType] int -# 2249| Value = [Literal] 0 -# 2249| ValueCategory = prvalue -# 2247| getStmt(): [BlockStmt] { ... } -# 2248| getStmt(0): [DeclStmt] declaration -# 2248| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x743 -# 2248| Type = [Struct] String -# 2248| getVariable().getInitializer(): [Initializer] initializer for x743 -# 2248| getExpr(): [ConstructorCall] call to String -# 2248| Type = [VoidType] void -# 2248| ValueCategory = prvalue -# 2249| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2249| Type = [VoidType] void -# 2249| ValueCategory = prvalue -# 2249| getQualifier(): [VariableAccess] x743 -# 2249| Type = [Struct] String -# 2249| ValueCategory = lvalue -# 2249| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2249| Conversion = [BoolConversion] conversion to bool -# 2249| Type = [BoolType] bool -# 2249| Value = [CStyleCast] 0 -# 2249| ValueCategory = prvalue -# 2250| getStmt(744): [DoStmt] do (...) ... -# 2252| getCondition(): [Literal] 0 -# 2252| Type = [IntType] int -# 2252| Value = [Literal] 0 -# 2252| ValueCategory = prvalue -# 2250| getStmt(): [BlockStmt] { ... } -# 2251| getStmt(0): [DeclStmt] declaration -# 2251| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x744 -# 2251| Type = [Struct] String -# 2251| getVariable().getInitializer(): [Initializer] initializer for x744 -# 2251| getExpr(): [ConstructorCall] call to String -# 2251| Type = [VoidType] void -# 2251| ValueCategory = prvalue -# 2252| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2252| Type = [VoidType] void -# 2252| ValueCategory = prvalue -# 2252| getQualifier(): [VariableAccess] x744 -# 2252| Type = [Struct] String -# 2252| ValueCategory = lvalue -# 2252| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2252| Conversion = [BoolConversion] conversion to bool -# 2252| Type = [BoolType] bool -# 2252| Value = [CStyleCast] 0 -# 2252| ValueCategory = prvalue -# 2253| getStmt(745): [DoStmt] do (...) ... -# 2255| getCondition(): [Literal] 0 -# 2255| Type = [IntType] int -# 2255| Value = [Literal] 0 -# 2255| ValueCategory = prvalue -# 2253| getStmt(): [BlockStmt] { ... } -# 2254| getStmt(0): [DeclStmt] declaration -# 2254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x745 -# 2254| Type = [Struct] String -# 2254| getVariable().getInitializer(): [Initializer] initializer for x745 -# 2254| getExpr(): [ConstructorCall] call to String -# 2254| Type = [VoidType] void -# 2254| ValueCategory = prvalue -# 2255| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2255| Type = [VoidType] void -# 2255| ValueCategory = prvalue -# 2255| getQualifier(): [VariableAccess] x745 -# 2255| Type = [Struct] String -# 2255| ValueCategory = lvalue -# 2255| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2255| Conversion = [BoolConversion] conversion to bool -# 2255| Type = [BoolType] bool -# 2255| Value = [CStyleCast] 0 -# 2255| ValueCategory = prvalue -# 2256| getStmt(746): [DoStmt] do (...) ... -# 2258| getCondition(): [Literal] 0 -# 2258| Type = [IntType] int -# 2258| Value = [Literal] 0 -# 2258| ValueCategory = prvalue -# 2256| getStmt(): [BlockStmt] { ... } -# 2257| getStmt(0): [DeclStmt] declaration -# 2257| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x746 -# 2257| Type = [Struct] String -# 2257| getVariable().getInitializer(): [Initializer] initializer for x746 -# 2257| getExpr(): [ConstructorCall] call to String -# 2257| Type = [VoidType] void -# 2257| ValueCategory = prvalue -# 2258| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2258| Type = [VoidType] void -# 2258| ValueCategory = prvalue -# 2258| getQualifier(): [VariableAccess] x746 -# 2258| Type = [Struct] String -# 2258| ValueCategory = lvalue -# 2258| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2258| Conversion = [BoolConversion] conversion to bool -# 2258| Type = [BoolType] bool -# 2258| Value = [CStyleCast] 0 -# 2258| ValueCategory = prvalue -# 2259| getStmt(747): [DoStmt] do (...) ... -# 2261| getCondition(): [Literal] 0 -# 2261| Type = [IntType] int -# 2261| Value = [Literal] 0 -# 2261| ValueCategory = prvalue -# 2259| getStmt(): [BlockStmt] { ... } -# 2260| getStmt(0): [DeclStmt] declaration -# 2260| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x747 -# 2260| Type = [Struct] String -# 2260| getVariable().getInitializer(): [Initializer] initializer for x747 -# 2260| getExpr(): [ConstructorCall] call to String -# 2260| Type = [VoidType] void -# 2260| ValueCategory = prvalue -# 2261| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2261| Type = [VoidType] void -# 2261| ValueCategory = prvalue -# 2261| getQualifier(): [VariableAccess] x747 -# 2261| Type = [Struct] String -# 2261| ValueCategory = lvalue -# 2261| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2261| Conversion = [BoolConversion] conversion to bool -# 2261| Type = [BoolType] bool -# 2261| Value = [CStyleCast] 0 -# 2261| ValueCategory = prvalue -# 2262| getStmt(748): [DoStmt] do (...) ... -# 2264| getCondition(): [Literal] 0 -# 2264| Type = [IntType] int -# 2264| Value = [Literal] 0 -# 2264| ValueCategory = prvalue -# 2262| getStmt(): [BlockStmt] { ... } -# 2263| getStmt(0): [DeclStmt] declaration -# 2263| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x748 -# 2263| Type = [Struct] String -# 2263| getVariable().getInitializer(): [Initializer] initializer for x748 -# 2263| getExpr(): [ConstructorCall] call to String -# 2263| Type = [VoidType] void -# 2263| ValueCategory = prvalue -# 2264| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2264| Type = [VoidType] void -# 2264| ValueCategory = prvalue -# 2264| getQualifier(): [VariableAccess] x748 -# 2264| Type = [Struct] String -# 2264| ValueCategory = lvalue -# 2264| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2264| Conversion = [BoolConversion] conversion to bool -# 2264| Type = [BoolType] bool -# 2264| Value = [CStyleCast] 0 -# 2264| ValueCategory = prvalue -# 2265| getStmt(749): [DoStmt] do (...) ... -# 2267| getCondition(): [Literal] 0 -# 2267| Type = [IntType] int -# 2267| Value = [Literal] 0 -# 2267| ValueCategory = prvalue -# 2265| getStmt(): [BlockStmt] { ... } -# 2266| getStmt(0): [DeclStmt] declaration -# 2266| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x749 -# 2266| Type = [Struct] String -# 2266| getVariable().getInitializer(): [Initializer] initializer for x749 -# 2266| getExpr(): [ConstructorCall] call to String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2267| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2267| Type = [VoidType] void -# 2267| ValueCategory = prvalue -# 2267| getQualifier(): [VariableAccess] x749 -# 2267| Type = [Struct] String -# 2267| ValueCategory = lvalue -# 2267| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2267| Conversion = [BoolConversion] conversion to bool -# 2267| Type = [BoolType] bool -# 2267| Value = [CStyleCast] 0 -# 2267| ValueCategory = prvalue -# 2268| getStmt(750): [DoStmt] do (...) ... -# 2270| getCondition(): [Literal] 0 -# 2270| Type = [IntType] int -# 2270| Value = [Literal] 0 -# 2270| ValueCategory = prvalue -# 2268| getStmt(): [BlockStmt] { ... } -# 2269| getStmt(0): [DeclStmt] declaration -# 2269| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x750 -# 2269| Type = [Struct] String -# 2269| getVariable().getInitializer(): [Initializer] initializer for x750 -# 2269| getExpr(): [ConstructorCall] call to String -# 2269| Type = [VoidType] void -# 2269| ValueCategory = prvalue -# 2270| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2270| Type = [VoidType] void -# 2270| ValueCategory = prvalue -# 2270| getQualifier(): [VariableAccess] x750 -# 2270| Type = [Struct] String -# 2270| ValueCategory = lvalue -# 2270| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2270| Conversion = [BoolConversion] conversion to bool -# 2270| Type = [BoolType] bool -# 2270| Value = [CStyleCast] 0 -# 2270| ValueCategory = prvalue -# 2271| getStmt(751): [DoStmt] do (...) ... -# 2273| getCondition(): [Literal] 0 -# 2273| Type = [IntType] int -# 2273| Value = [Literal] 0 -# 2273| ValueCategory = prvalue -# 2271| getStmt(): [BlockStmt] { ... } -# 2272| getStmt(0): [DeclStmt] declaration -# 2272| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x751 -# 2272| Type = [Struct] String -# 2272| getVariable().getInitializer(): [Initializer] initializer for x751 -# 2272| getExpr(): [ConstructorCall] call to String -# 2272| Type = [VoidType] void -# 2272| ValueCategory = prvalue -# 2273| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2273| Type = [VoidType] void -# 2273| ValueCategory = prvalue -# 2273| getQualifier(): [VariableAccess] x751 -# 2273| Type = [Struct] String -# 2273| ValueCategory = lvalue -# 2273| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2273| Conversion = [BoolConversion] conversion to bool -# 2273| Type = [BoolType] bool -# 2273| Value = [CStyleCast] 0 -# 2273| ValueCategory = prvalue -# 2274| getStmt(752): [DoStmt] do (...) ... -# 2276| getCondition(): [Literal] 0 -# 2276| Type = [IntType] int -# 2276| Value = [Literal] 0 -# 2276| ValueCategory = prvalue -# 2274| getStmt(): [BlockStmt] { ... } -# 2275| getStmt(0): [DeclStmt] declaration -# 2275| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x752 -# 2275| Type = [Struct] String -# 2275| getVariable().getInitializer(): [Initializer] initializer for x752 -# 2275| getExpr(): [ConstructorCall] call to String -# 2275| Type = [VoidType] void -# 2275| ValueCategory = prvalue -# 2276| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2276| Type = [VoidType] void -# 2276| ValueCategory = prvalue -# 2276| getQualifier(): [VariableAccess] x752 -# 2276| Type = [Struct] String -# 2276| ValueCategory = lvalue -# 2276| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2276| Conversion = [BoolConversion] conversion to bool -# 2276| Type = [BoolType] bool -# 2276| Value = [CStyleCast] 0 -# 2276| ValueCategory = prvalue -# 2277| getStmt(753): [DoStmt] do (...) ... -# 2279| getCondition(): [Literal] 0 -# 2279| Type = [IntType] int -# 2279| Value = [Literal] 0 -# 2279| ValueCategory = prvalue -# 2277| getStmt(): [BlockStmt] { ... } -# 2278| getStmt(0): [DeclStmt] declaration -# 2278| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x753 -# 2278| Type = [Struct] String -# 2278| getVariable().getInitializer(): [Initializer] initializer for x753 -# 2278| getExpr(): [ConstructorCall] call to String -# 2278| Type = [VoidType] void -# 2278| ValueCategory = prvalue -# 2279| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2279| Type = [VoidType] void -# 2279| ValueCategory = prvalue -# 2279| getQualifier(): [VariableAccess] x753 -# 2279| Type = [Struct] String -# 2279| ValueCategory = lvalue -# 2279| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2279| Conversion = [BoolConversion] conversion to bool -# 2279| Type = [BoolType] bool -# 2279| Value = [CStyleCast] 0 -# 2279| ValueCategory = prvalue -# 2280| getStmt(754): [DoStmt] do (...) ... -# 2282| getCondition(): [Literal] 0 -# 2282| Type = [IntType] int -# 2282| Value = [Literal] 0 -# 2282| ValueCategory = prvalue -# 2280| getStmt(): [BlockStmt] { ... } -# 2281| getStmt(0): [DeclStmt] declaration -# 2281| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x754 -# 2281| Type = [Struct] String -# 2281| getVariable().getInitializer(): [Initializer] initializer for x754 -# 2281| getExpr(): [ConstructorCall] call to String -# 2281| Type = [VoidType] void -# 2281| ValueCategory = prvalue -# 2282| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2282| Type = [VoidType] void -# 2282| ValueCategory = prvalue -# 2282| getQualifier(): [VariableAccess] x754 -# 2282| Type = [Struct] String -# 2282| ValueCategory = lvalue -# 2282| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2282| Conversion = [BoolConversion] conversion to bool -# 2282| Type = [BoolType] bool -# 2282| Value = [CStyleCast] 0 -# 2282| ValueCategory = prvalue -# 2283| getStmt(755): [DoStmt] do (...) ... -# 2285| getCondition(): [Literal] 0 -# 2285| Type = [IntType] int -# 2285| Value = [Literal] 0 -# 2285| ValueCategory = prvalue -# 2283| getStmt(): [BlockStmt] { ... } -# 2284| getStmt(0): [DeclStmt] declaration -# 2284| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x755 -# 2284| Type = [Struct] String -# 2284| getVariable().getInitializer(): [Initializer] initializer for x755 -# 2284| getExpr(): [ConstructorCall] call to String -# 2284| Type = [VoidType] void -# 2284| ValueCategory = prvalue -# 2285| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2285| Type = [VoidType] void -# 2285| ValueCategory = prvalue -# 2285| getQualifier(): [VariableAccess] x755 -# 2285| Type = [Struct] String -# 2285| ValueCategory = lvalue -# 2285| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2285| Conversion = [BoolConversion] conversion to bool -# 2285| Type = [BoolType] bool -# 2285| Value = [CStyleCast] 0 -# 2285| ValueCategory = prvalue -# 2286| getStmt(756): [DoStmt] do (...) ... -# 2288| getCondition(): [Literal] 0 -# 2288| Type = [IntType] int -# 2288| Value = [Literal] 0 -# 2288| ValueCategory = prvalue -# 2286| getStmt(): [BlockStmt] { ... } -# 2287| getStmt(0): [DeclStmt] declaration -# 2287| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x756 -# 2287| Type = [Struct] String -# 2287| getVariable().getInitializer(): [Initializer] initializer for x756 -# 2287| getExpr(): [ConstructorCall] call to String -# 2287| Type = [VoidType] void -# 2287| ValueCategory = prvalue -# 2288| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2288| Type = [VoidType] void -# 2288| ValueCategory = prvalue -# 2288| getQualifier(): [VariableAccess] x756 -# 2288| Type = [Struct] String -# 2288| ValueCategory = lvalue -# 2288| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2288| Conversion = [BoolConversion] conversion to bool -# 2288| Type = [BoolType] bool -# 2288| Value = [CStyleCast] 0 -# 2288| ValueCategory = prvalue -# 2289| getStmt(757): [DoStmt] do (...) ... -# 2291| getCondition(): [Literal] 0 -# 2291| Type = [IntType] int -# 2291| Value = [Literal] 0 -# 2291| ValueCategory = prvalue -# 2289| getStmt(): [BlockStmt] { ... } -# 2290| getStmt(0): [DeclStmt] declaration -# 2290| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x757 -# 2290| Type = [Struct] String -# 2290| getVariable().getInitializer(): [Initializer] initializer for x757 -# 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] x757 -# 2291| Type = [Struct] String -# 2291| ValueCategory = lvalue -# 2291| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2291| Conversion = [BoolConversion] conversion to bool -# 2291| Type = [BoolType] bool -# 2291| Value = [CStyleCast] 0 -# 2291| ValueCategory = prvalue -# 2292| getStmt(758): [DoStmt] do (...) ... -# 2294| getCondition(): [Literal] 0 -# 2294| Type = [IntType] int -# 2294| Value = [Literal] 0 -# 2294| ValueCategory = prvalue -# 2292| getStmt(): [BlockStmt] { ... } -# 2293| getStmt(0): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x758 -# 2293| Type = [Struct] String -# 2293| getVariable().getInitializer(): [Initializer] initializer for x758 -# 2293| getExpr(): [ConstructorCall] call to String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2294| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2294| Type = [VoidType] void -# 2294| ValueCategory = prvalue -# 2294| getQualifier(): [VariableAccess] x758 -# 2294| Type = [Struct] String -# 2294| ValueCategory = lvalue -# 2294| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2294| Conversion = [BoolConversion] conversion to bool -# 2294| Type = [BoolType] bool -# 2294| Value = [CStyleCast] 0 -# 2294| ValueCategory = prvalue -# 2295| getStmt(759): [DoStmt] do (...) ... -# 2297| getCondition(): [Literal] 0 -# 2297| Type = [IntType] int -# 2297| Value = [Literal] 0 -# 2297| ValueCategory = prvalue -# 2295| getStmt(): [BlockStmt] { ... } -# 2296| getStmt(0): [DeclStmt] declaration -# 2296| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x759 -# 2296| Type = [Struct] String -# 2296| getVariable().getInitializer(): [Initializer] initializer for x759 -# 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| getQualifier(): [VariableAccess] x759 -# 2297| Type = [Struct] String -# 2297| ValueCategory = lvalue -# 2297| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2297| Conversion = [BoolConversion] conversion to bool -# 2297| Type = [BoolType] bool -# 2297| Value = [CStyleCast] 0 -# 2297| ValueCategory = prvalue -# 2298| getStmt(760): [DoStmt] do (...) ... -# 2300| getCondition(): [Literal] 0 -# 2300| Type = [IntType] int -# 2300| Value = [Literal] 0 -# 2300| ValueCategory = prvalue -# 2298| getStmt(): [BlockStmt] { ... } -# 2299| getStmt(0): [DeclStmt] declaration -# 2299| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x760 -# 2299| Type = [Struct] String -# 2299| getVariable().getInitializer(): [Initializer] initializer for x760 -# 2299| getExpr(): [ConstructorCall] call to String -# 2299| Type = [VoidType] void -# 2299| ValueCategory = prvalue -# 2300| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2300| Type = [VoidType] void -# 2300| ValueCategory = prvalue -# 2300| getQualifier(): [VariableAccess] x760 -# 2300| Type = [Struct] String -# 2300| ValueCategory = lvalue -# 2300| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2300| Conversion = [BoolConversion] conversion to bool -# 2300| Type = [BoolType] bool -# 2300| Value = [CStyleCast] 0 -# 2300| ValueCategory = prvalue -# 2301| getStmt(761): [DoStmt] do (...) ... -# 2303| getCondition(): [Literal] 0 -# 2303| Type = [IntType] int -# 2303| Value = [Literal] 0 -# 2303| ValueCategory = prvalue -# 2301| getStmt(): [BlockStmt] { ... } -# 2302| getStmt(0): [DeclStmt] declaration -# 2302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x761 -# 2302| Type = [Struct] String -# 2302| getVariable().getInitializer(): [Initializer] initializer for x761 -# 2302| getExpr(): [ConstructorCall] call to String -# 2302| Type = [VoidType] void -# 2302| ValueCategory = prvalue -# 2303| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2303| Type = [VoidType] void -# 2303| ValueCategory = prvalue -# 2303| getQualifier(): [VariableAccess] x761 -# 2303| Type = [Struct] String -# 2303| ValueCategory = lvalue -# 2303| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2303| Conversion = [BoolConversion] conversion to bool -# 2303| Type = [BoolType] bool -# 2303| Value = [CStyleCast] 0 -# 2303| ValueCategory = prvalue -# 2304| getStmt(762): [DoStmt] do (...) ... -# 2306| getCondition(): [Literal] 0 -# 2306| Type = [IntType] int -# 2306| Value = [Literal] 0 -# 2306| ValueCategory = prvalue -# 2304| getStmt(): [BlockStmt] { ... } -# 2305| getStmt(0): [DeclStmt] declaration -# 2305| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x762 -# 2305| Type = [Struct] String -# 2305| getVariable().getInitializer(): [Initializer] initializer for x762 -# 2305| getExpr(): [ConstructorCall] call to String -# 2305| Type = [VoidType] void -# 2305| ValueCategory = prvalue -# 2306| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2306| Type = [VoidType] void -# 2306| ValueCategory = prvalue -# 2306| getQualifier(): [VariableAccess] x762 -# 2306| Type = [Struct] String -# 2306| ValueCategory = lvalue -# 2306| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2306| Conversion = [BoolConversion] conversion to bool -# 2306| Type = [BoolType] bool -# 2306| Value = [CStyleCast] 0 -# 2306| ValueCategory = prvalue -# 2307| getStmt(763): [DoStmt] do (...) ... -# 2309| getCondition(): [Literal] 0 -# 2309| Type = [IntType] int -# 2309| Value = [Literal] 0 -# 2309| ValueCategory = prvalue -# 2307| getStmt(): [BlockStmt] { ... } -# 2308| getStmt(0): [DeclStmt] declaration -# 2308| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x763 -# 2308| Type = [Struct] String -# 2308| getVariable().getInitializer(): [Initializer] initializer for x763 -# 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] x763 -# 2309| Type = [Struct] String -# 2309| ValueCategory = lvalue -# 2309| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2309| Conversion = [BoolConversion] conversion to bool -# 2309| Type = [BoolType] bool -# 2309| Value = [CStyleCast] 0 -# 2309| ValueCategory = prvalue -# 2310| getStmt(764): [DoStmt] do (...) ... -# 2312| getCondition(): [Literal] 0 -# 2312| Type = [IntType] int -# 2312| Value = [Literal] 0 -# 2312| ValueCategory = prvalue -# 2310| getStmt(): [BlockStmt] { ... } -# 2311| getStmt(0): [DeclStmt] declaration -# 2311| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x764 -# 2311| Type = [Struct] String -# 2311| getVariable().getInitializer(): [Initializer] initializer for x764 -# 2311| getExpr(): [ConstructorCall] call to String -# 2311| Type = [VoidType] void -# 2311| ValueCategory = prvalue -# 2312| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2312| Type = [VoidType] void -# 2312| ValueCategory = prvalue -# 2312| getQualifier(): [VariableAccess] x764 -# 2312| Type = [Struct] String -# 2312| ValueCategory = lvalue -# 2312| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2312| Conversion = [BoolConversion] conversion to bool -# 2312| Type = [BoolType] bool -# 2312| Value = [CStyleCast] 0 -# 2312| ValueCategory = prvalue -# 2313| getStmt(765): [DoStmt] do (...) ... -# 2315| getCondition(): [Literal] 0 -# 2315| Type = [IntType] int -# 2315| Value = [Literal] 0 -# 2315| ValueCategory = prvalue -# 2313| getStmt(): [BlockStmt] { ... } -# 2314| getStmt(0): [DeclStmt] declaration -# 2314| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x765 -# 2314| Type = [Struct] String -# 2314| getVariable().getInitializer(): [Initializer] initializer for x765 -# 2314| getExpr(): [ConstructorCall] call to String -# 2314| Type = [VoidType] void -# 2314| ValueCategory = prvalue -# 2315| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2315| Type = [VoidType] void -# 2315| ValueCategory = prvalue -# 2315| getQualifier(): [VariableAccess] x765 -# 2315| Type = [Struct] String -# 2315| ValueCategory = lvalue -# 2315| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2315| Conversion = [BoolConversion] conversion to bool -# 2315| Type = [BoolType] bool -# 2315| Value = [CStyleCast] 0 -# 2315| ValueCategory = prvalue -# 2316| getStmt(766): [DoStmt] do (...) ... -# 2318| getCondition(): [Literal] 0 -# 2318| Type = [IntType] int -# 2318| Value = [Literal] 0 -# 2318| ValueCategory = prvalue -# 2316| getStmt(): [BlockStmt] { ... } -# 2317| getStmt(0): [DeclStmt] declaration -# 2317| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x766 -# 2317| Type = [Struct] String -# 2317| getVariable().getInitializer(): [Initializer] initializer for x766 -# 2317| getExpr(): [ConstructorCall] call to String -# 2317| Type = [VoidType] void -# 2317| ValueCategory = prvalue -# 2318| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2318| Type = [VoidType] void -# 2318| ValueCategory = prvalue -# 2318| getQualifier(): [VariableAccess] x766 -# 2318| Type = [Struct] String -# 2318| ValueCategory = lvalue -# 2318| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2318| Conversion = [BoolConversion] conversion to bool -# 2318| Type = [BoolType] bool -# 2318| Value = [CStyleCast] 0 -# 2318| ValueCategory = prvalue -# 2319| getStmt(767): [DoStmt] do (...) ... -# 2321| getCondition(): [Literal] 0 -# 2321| Type = [IntType] int -# 2321| Value = [Literal] 0 -# 2321| ValueCategory = prvalue -# 2319| getStmt(): [BlockStmt] { ... } -# 2320| getStmt(0): [DeclStmt] declaration -# 2320| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x767 -# 2320| Type = [Struct] String -# 2320| getVariable().getInitializer(): [Initializer] initializer for x767 -# 2320| getExpr(): [ConstructorCall] call to String -# 2320| Type = [VoidType] void -# 2320| ValueCategory = prvalue -# 2321| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2321| Type = [VoidType] void -# 2321| ValueCategory = prvalue -# 2321| getQualifier(): [VariableAccess] x767 -# 2321| Type = [Struct] String -# 2321| ValueCategory = lvalue -# 2321| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2321| Conversion = [BoolConversion] conversion to bool -# 2321| Type = [BoolType] bool -# 2321| Value = [CStyleCast] 0 -# 2321| ValueCategory = prvalue -# 2322| getStmt(768): [DoStmt] do (...) ... -# 2324| getCondition(): [Literal] 0 -# 2324| Type = [IntType] int -# 2324| Value = [Literal] 0 -# 2324| ValueCategory = prvalue -# 2322| getStmt(): [BlockStmt] { ... } -# 2323| getStmt(0): [DeclStmt] declaration -# 2323| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x768 -# 2323| Type = [Struct] String -# 2323| getVariable().getInitializer(): [Initializer] initializer for x768 -# 2323| getExpr(): [ConstructorCall] call to String -# 2323| Type = [VoidType] void -# 2323| ValueCategory = prvalue -# 2324| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2324| Type = [VoidType] void -# 2324| ValueCategory = prvalue -# 2324| getQualifier(): [VariableAccess] x768 -# 2324| Type = [Struct] String -# 2324| ValueCategory = lvalue -# 2324| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2324| Conversion = [BoolConversion] conversion to bool -# 2324| Type = [BoolType] bool -# 2324| Value = [CStyleCast] 0 -# 2324| ValueCategory = prvalue -# 2325| getStmt(769): [DoStmt] do (...) ... -# 2327| getCondition(): [Literal] 0 -# 2327| Type = [IntType] int -# 2327| Value = [Literal] 0 -# 2327| ValueCategory = prvalue -# 2325| getStmt(): [BlockStmt] { ... } -# 2326| getStmt(0): [DeclStmt] declaration -# 2326| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x769 -# 2326| Type = [Struct] String -# 2326| getVariable().getInitializer(): [Initializer] initializer for x769 -# 2326| getExpr(): [ConstructorCall] call to String -# 2326| Type = [VoidType] void -# 2326| ValueCategory = prvalue -# 2327| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2327| Type = [VoidType] void -# 2327| ValueCategory = prvalue -# 2327| getQualifier(): [VariableAccess] x769 -# 2327| Type = [Struct] String -# 2327| ValueCategory = lvalue -# 2327| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2327| Conversion = [BoolConversion] conversion to bool -# 2327| Type = [BoolType] bool -# 2327| Value = [CStyleCast] 0 -# 2327| ValueCategory = prvalue -# 2328| getStmt(770): [DoStmt] do (...) ... -# 2330| getCondition(): [Literal] 0 -# 2330| Type = [IntType] int -# 2330| Value = [Literal] 0 -# 2330| ValueCategory = prvalue -# 2328| getStmt(): [BlockStmt] { ... } -# 2329| getStmt(0): [DeclStmt] declaration -# 2329| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x770 -# 2329| Type = [Struct] String -# 2329| getVariable().getInitializer(): [Initializer] initializer for x770 -# 2329| getExpr(): [ConstructorCall] call to String -# 2329| Type = [VoidType] void -# 2329| ValueCategory = prvalue -# 2330| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2330| Type = [VoidType] void -# 2330| ValueCategory = prvalue -# 2330| getQualifier(): [VariableAccess] x770 -# 2330| Type = [Struct] String -# 2330| ValueCategory = lvalue -# 2330| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2330| Conversion = [BoolConversion] conversion to bool -# 2330| Type = [BoolType] bool -# 2330| Value = [CStyleCast] 0 -# 2330| ValueCategory = prvalue -# 2331| getStmt(771): [DoStmt] do (...) ... -# 2333| getCondition(): [Literal] 0 -# 2333| Type = [IntType] int -# 2333| Value = [Literal] 0 -# 2333| ValueCategory = prvalue -# 2331| getStmt(): [BlockStmt] { ... } -# 2332| getStmt(0): [DeclStmt] declaration -# 2332| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x771 -# 2332| Type = [Struct] String -# 2332| getVariable().getInitializer(): [Initializer] initializer for x771 -# 2332| getExpr(): [ConstructorCall] call to String -# 2332| Type = [VoidType] void -# 2332| ValueCategory = prvalue -# 2333| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2333| Type = [VoidType] void -# 2333| ValueCategory = prvalue -# 2333| getQualifier(): [VariableAccess] x771 -# 2333| Type = [Struct] String -# 2333| ValueCategory = lvalue -# 2333| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2333| Conversion = [BoolConversion] conversion to bool -# 2333| Type = [BoolType] bool -# 2333| Value = [CStyleCast] 0 -# 2333| ValueCategory = prvalue -# 2334| getStmt(772): [DoStmt] do (...) ... -# 2336| getCondition(): [Literal] 0 -# 2336| Type = [IntType] int -# 2336| Value = [Literal] 0 -# 2336| ValueCategory = prvalue -# 2334| getStmt(): [BlockStmt] { ... } -# 2335| getStmt(0): [DeclStmt] declaration -# 2335| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x772 -# 2335| Type = [Struct] String -# 2335| getVariable().getInitializer(): [Initializer] initializer for x772 -# 2335| getExpr(): [ConstructorCall] call to String -# 2335| Type = [VoidType] void -# 2335| ValueCategory = prvalue -# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2336| Type = [VoidType] void -# 2336| ValueCategory = prvalue -# 2336| getQualifier(): [VariableAccess] x772 -# 2336| Type = [Struct] String -# 2336| ValueCategory = lvalue -# 2336| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2336| Conversion = [BoolConversion] conversion to bool -# 2336| Type = [BoolType] bool -# 2336| Value = [CStyleCast] 0 -# 2336| ValueCategory = prvalue -# 2337| getStmt(773): [DoStmt] do (...) ... -# 2339| getCondition(): [Literal] 0 -# 2339| Type = [IntType] int -# 2339| Value = [Literal] 0 -# 2339| ValueCategory = prvalue -# 2337| getStmt(): [BlockStmt] { ... } -# 2338| getStmt(0): [DeclStmt] declaration -# 2338| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x773 -# 2338| Type = [Struct] String -# 2338| getVariable().getInitializer(): [Initializer] initializer for x773 -# 2338| getExpr(): [ConstructorCall] call to String -# 2338| Type = [VoidType] void -# 2338| ValueCategory = prvalue -# 2339| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2339| Type = [VoidType] void -# 2339| ValueCategory = prvalue -# 2339| getQualifier(): [VariableAccess] x773 -# 2339| Type = [Struct] String -# 2339| ValueCategory = lvalue -# 2339| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2339| Conversion = [BoolConversion] conversion to bool -# 2339| Type = [BoolType] bool -# 2339| Value = [CStyleCast] 0 -# 2339| ValueCategory = prvalue -# 2340| getStmt(774): [DoStmt] do (...) ... -# 2342| getCondition(): [Literal] 0 -# 2342| Type = [IntType] int -# 2342| Value = [Literal] 0 -# 2342| ValueCategory = prvalue -# 2340| getStmt(): [BlockStmt] { ... } -# 2341| getStmt(0): [DeclStmt] declaration -# 2341| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x774 -# 2341| Type = [Struct] String -# 2341| getVariable().getInitializer(): [Initializer] initializer for x774 -# 2341| getExpr(): [ConstructorCall] call to String -# 2341| Type = [VoidType] void -# 2341| ValueCategory = prvalue -# 2342| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2342| Type = [VoidType] void -# 2342| ValueCategory = prvalue -# 2342| getQualifier(): [VariableAccess] x774 -# 2342| Type = [Struct] String -# 2342| ValueCategory = lvalue -# 2342| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2342| Conversion = [BoolConversion] conversion to bool -# 2342| Type = [BoolType] bool -# 2342| Value = [CStyleCast] 0 -# 2342| ValueCategory = prvalue -# 2343| getStmt(775): [DoStmt] do (...) ... -# 2345| getCondition(): [Literal] 0 -# 2345| Type = [IntType] int -# 2345| Value = [Literal] 0 -# 2345| ValueCategory = prvalue -# 2343| getStmt(): [BlockStmt] { ... } -# 2344| getStmt(0): [DeclStmt] declaration -# 2344| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x775 -# 2344| Type = [Struct] String -# 2344| getVariable().getInitializer(): [Initializer] initializer for x775 -# 2344| getExpr(): [ConstructorCall] call to String -# 2344| Type = [VoidType] void -# 2344| ValueCategory = prvalue -# 2345| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2345| Type = [VoidType] void -# 2345| ValueCategory = prvalue -# 2345| getQualifier(): [VariableAccess] x775 -# 2345| Type = [Struct] String -# 2345| ValueCategory = lvalue -# 2345| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2345| Conversion = [BoolConversion] conversion to bool -# 2345| Type = [BoolType] bool -# 2345| Value = [CStyleCast] 0 -# 2345| ValueCategory = prvalue -# 2346| getStmt(776): [DoStmt] do (...) ... -# 2348| getCondition(): [Literal] 0 -# 2348| Type = [IntType] int -# 2348| Value = [Literal] 0 -# 2348| ValueCategory = prvalue -# 2346| getStmt(): [BlockStmt] { ... } -# 2347| getStmt(0): [DeclStmt] declaration -# 2347| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x776 -# 2347| Type = [Struct] String -# 2347| getVariable().getInitializer(): [Initializer] initializer for x776 -# 2347| getExpr(): [ConstructorCall] call to String -# 2347| Type = [VoidType] void -# 2347| ValueCategory = prvalue -# 2348| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2348| Type = [VoidType] void -# 2348| ValueCategory = prvalue -# 2348| getQualifier(): [VariableAccess] x776 -# 2348| Type = [Struct] String -# 2348| ValueCategory = lvalue -# 2348| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2348| Conversion = [BoolConversion] conversion to bool -# 2348| Type = [BoolType] bool -# 2348| Value = [CStyleCast] 0 -# 2348| ValueCategory = prvalue -# 2349| getStmt(777): [DoStmt] do (...) ... -# 2351| getCondition(): [Literal] 0 -# 2351| Type = [IntType] int -# 2351| Value = [Literal] 0 -# 2351| ValueCategory = prvalue -# 2349| getStmt(): [BlockStmt] { ... } -# 2350| getStmt(0): [DeclStmt] declaration -# 2350| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x777 -# 2350| Type = [Struct] String -# 2350| getVariable().getInitializer(): [Initializer] initializer for x777 -# 2350| getExpr(): [ConstructorCall] call to String -# 2350| Type = [VoidType] void -# 2350| ValueCategory = prvalue -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] x777 -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2351| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2351| Conversion = [BoolConversion] conversion to bool -# 2351| Type = [BoolType] bool -# 2351| Value = [CStyleCast] 0 -# 2351| ValueCategory = prvalue -# 2352| getStmt(778): [DoStmt] do (...) ... -# 2354| getCondition(): [Literal] 0 -# 2354| Type = [IntType] int -# 2354| Value = [Literal] 0 -# 2354| ValueCategory = prvalue -# 2352| getStmt(): [BlockStmt] { ... } -# 2353| getStmt(0): [DeclStmt] declaration -# 2353| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x778 -# 2353| Type = [Struct] String -# 2353| getVariable().getInitializer(): [Initializer] initializer for x778 -# 2353| getExpr(): [ConstructorCall] call to String -# 2353| Type = [VoidType] void -# 2353| ValueCategory = prvalue -# 2354| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2354| Type = [VoidType] void -# 2354| ValueCategory = prvalue -# 2354| getQualifier(): [VariableAccess] x778 -# 2354| Type = [Struct] String -# 2354| ValueCategory = lvalue -# 2354| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2354| Conversion = [BoolConversion] conversion to bool -# 2354| Type = [BoolType] bool -# 2354| Value = [CStyleCast] 0 -# 2354| ValueCategory = prvalue -# 2355| getStmt(779): [DoStmt] do (...) ... -# 2357| getCondition(): [Literal] 0 -# 2357| Type = [IntType] int -# 2357| Value = [Literal] 0 -# 2357| ValueCategory = prvalue -# 2355| getStmt(): [BlockStmt] { ... } -# 2356| getStmt(0): [DeclStmt] declaration -# 2356| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x779 -# 2356| Type = [Struct] String -# 2356| getVariable().getInitializer(): [Initializer] initializer for x779 -# 2356| getExpr(): [ConstructorCall] call to String -# 2356| Type = [VoidType] void -# 2356| ValueCategory = prvalue -# 2357| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2357| Type = [VoidType] void -# 2357| ValueCategory = prvalue -# 2357| getQualifier(): [VariableAccess] x779 -# 2357| Type = [Struct] String -# 2357| ValueCategory = lvalue -# 2357| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2357| Conversion = [BoolConversion] conversion to bool -# 2357| Type = [BoolType] bool -# 2357| Value = [CStyleCast] 0 -# 2357| ValueCategory = prvalue -# 2358| getStmt(780): [DoStmt] do (...) ... -# 2360| getCondition(): [Literal] 0 -# 2360| Type = [IntType] int -# 2360| Value = [Literal] 0 -# 2360| ValueCategory = prvalue -# 2358| getStmt(): [BlockStmt] { ... } -# 2359| getStmt(0): [DeclStmt] declaration -# 2359| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x780 -# 2359| Type = [Struct] String -# 2359| getVariable().getInitializer(): [Initializer] initializer for x780 -# 2359| getExpr(): [ConstructorCall] call to String -# 2359| Type = [VoidType] void -# 2359| ValueCategory = prvalue -# 2360| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2360| Type = [VoidType] void -# 2360| ValueCategory = prvalue -# 2360| getQualifier(): [VariableAccess] x780 -# 2360| Type = [Struct] String -# 2360| ValueCategory = lvalue -# 2360| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2360| Conversion = [BoolConversion] conversion to bool -# 2360| Type = [BoolType] bool -# 2360| Value = [CStyleCast] 0 -# 2360| ValueCategory = prvalue -# 2361| getStmt(781): [DoStmt] do (...) ... -# 2363| getCondition(): [Literal] 0 -# 2363| Type = [IntType] int -# 2363| Value = [Literal] 0 -# 2363| ValueCategory = prvalue -# 2361| getStmt(): [BlockStmt] { ... } -# 2362| getStmt(0): [DeclStmt] declaration -# 2362| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x781 -# 2362| Type = [Struct] String -# 2362| getVariable().getInitializer(): [Initializer] initializer for x781 -# 2362| getExpr(): [ConstructorCall] call to String -# 2362| Type = [VoidType] void -# 2362| ValueCategory = prvalue -# 2363| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2363| Type = [VoidType] void -# 2363| ValueCategory = prvalue -# 2363| getQualifier(): [VariableAccess] x781 -# 2363| Type = [Struct] String -# 2363| ValueCategory = lvalue -# 2363| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2363| Conversion = [BoolConversion] conversion to bool -# 2363| Type = [BoolType] bool -# 2363| Value = [CStyleCast] 0 -# 2363| ValueCategory = prvalue -# 2364| getStmt(782): [DoStmt] do (...) ... -# 2366| getCondition(): [Literal] 0 -# 2366| Type = [IntType] int -# 2366| Value = [Literal] 0 -# 2366| ValueCategory = prvalue -# 2364| getStmt(): [BlockStmt] { ... } -# 2365| getStmt(0): [DeclStmt] declaration -# 2365| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x782 -# 2365| Type = [Struct] String -# 2365| getVariable().getInitializer(): [Initializer] initializer for x782 -# 2365| getExpr(): [ConstructorCall] call to String -# 2365| Type = [VoidType] void -# 2365| ValueCategory = prvalue -# 2366| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2366| Type = [VoidType] void -# 2366| ValueCategory = prvalue -# 2366| getQualifier(): [VariableAccess] x782 -# 2366| Type = [Struct] String -# 2366| ValueCategory = lvalue -# 2366| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2366| Conversion = [BoolConversion] conversion to bool -# 2366| Type = [BoolType] bool -# 2366| Value = [CStyleCast] 0 -# 2366| ValueCategory = prvalue -# 2367| getStmt(783): [DoStmt] do (...) ... -# 2369| getCondition(): [Literal] 0 -# 2369| Type = [IntType] int -# 2369| Value = [Literal] 0 -# 2369| ValueCategory = prvalue -# 2367| getStmt(): [BlockStmt] { ... } -# 2368| getStmt(0): [DeclStmt] declaration -# 2368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x783 -# 2368| Type = [Struct] String -# 2368| getVariable().getInitializer(): [Initializer] initializer for x783 -# 2368| getExpr(): [ConstructorCall] call to String -# 2368| Type = [VoidType] void -# 2368| ValueCategory = prvalue -# 2369| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2369| Type = [VoidType] void -# 2369| ValueCategory = prvalue -# 2369| getQualifier(): [VariableAccess] x783 -# 2369| Type = [Struct] String -# 2369| ValueCategory = lvalue -# 2369| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2369| Conversion = [BoolConversion] conversion to bool -# 2369| Type = [BoolType] bool -# 2369| Value = [CStyleCast] 0 -# 2369| ValueCategory = prvalue -# 2370| getStmt(784): [DoStmt] do (...) ... -# 2372| getCondition(): [Literal] 0 -# 2372| Type = [IntType] int -# 2372| Value = [Literal] 0 -# 2372| ValueCategory = prvalue -# 2370| getStmt(): [BlockStmt] { ... } -# 2371| getStmt(0): [DeclStmt] declaration -# 2371| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x784 -# 2371| Type = [Struct] String -# 2371| getVariable().getInitializer(): [Initializer] initializer for x784 -# 2371| getExpr(): [ConstructorCall] call to String -# 2371| Type = [VoidType] void -# 2371| ValueCategory = prvalue -# 2372| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2372| Type = [VoidType] void -# 2372| ValueCategory = prvalue -# 2372| getQualifier(): [VariableAccess] x784 -# 2372| Type = [Struct] String -# 2372| ValueCategory = lvalue -# 2372| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2372| Conversion = [BoolConversion] conversion to bool -# 2372| Type = [BoolType] bool -# 2372| Value = [CStyleCast] 0 -# 2372| ValueCategory = prvalue -# 2373| getStmt(785): [DoStmt] do (...) ... -# 2375| getCondition(): [Literal] 0 -# 2375| Type = [IntType] int -# 2375| Value = [Literal] 0 -# 2375| ValueCategory = prvalue -# 2373| getStmt(): [BlockStmt] { ... } -# 2374| getStmt(0): [DeclStmt] declaration -# 2374| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x785 -# 2374| Type = [Struct] String -# 2374| getVariable().getInitializer(): [Initializer] initializer for x785 -# 2374| getExpr(): [ConstructorCall] call to String -# 2374| Type = [VoidType] void -# 2374| ValueCategory = prvalue -# 2375| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2375| Type = [VoidType] void -# 2375| ValueCategory = prvalue -# 2375| getQualifier(): [VariableAccess] x785 -# 2375| Type = [Struct] String -# 2375| ValueCategory = lvalue -# 2375| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2375| Conversion = [BoolConversion] conversion to bool -# 2375| Type = [BoolType] bool -# 2375| Value = [CStyleCast] 0 -# 2375| ValueCategory = prvalue -# 2376| getStmt(786): [DoStmt] do (...) ... -# 2378| getCondition(): [Literal] 0 -# 2378| Type = [IntType] int -# 2378| Value = [Literal] 0 -# 2378| ValueCategory = prvalue -# 2376| getStmt(): [BlockStmt] { ... } -# 2377| getStmt(0): [DeclStmt] declaration -# 2377| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x786 -# 2377| Type = [Struct] String -# 2377| getVariable().getInitializer(): [Initializer] initializer for x786 -# 2377| getExpr(): [ConstructorCall] call to String -# 2377| Type = [VoidType] void -# 2377| ValueCategory = prvalue -# 2378| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2378| Type = [VoidType] void -# 2378| ValueCategory = prvalue -# 2378| getQualifier(): [VariableAccess] x786 -# 2378| Type = [Struct] String -# 2378| ValueCategory = lvalue -# 2378| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2378| Conversion = [BoolConversion] conversion to bool -# 2378| Type = [BoolType] bool -# 2378| Value = [CStyleCast] 0 -# 2378| ValueCategory = prvalue -# 2379| getStmt(787): [DoStmt] do (...) ... -# 2381| getCondition(): [Literal] 0 -# 2381| Type = [IntType] int -# 2381| Value = [Literal] 0 -# 2381| ValueCategory = prvalue -# 2379| getStmt(): [BlockStmt] { ... } -# 2380| getStmt(0): [DeclStmt] declaration -# 2380| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x787 -# 2380| Type = [Struct] String -# 2380| getVariable().getInitializer(): [Initializer] initializer for x787 -# 2380| getExpr(): [ConstructorCall] call to String -# 2380| Type = [VoidType] void -# 2380| ValueCategory = prvalue -# 2381| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2381| Type = [VoidType] void -# 2381| ValueCategory = prvalue -# 2381| getQualifier(): [VariableAccess] x787 -# 2381| Type = [Struct] String -# 2381| ValueCategory = lvalue -# 2381| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2381| Conversion = [BoolConversion] conversion to bool -# 2381| Type = [BoolType] bool -# 2381| Value = [CStyleCast] 0 -# 2381| ValueCategory = prvalue -# 2382| getStmt(788): [DoStmt] do (...) ... -# 2384| getCondition(): [Literal] 0 -# 2384| Type = [IntType] int -# 2384| Value = [Literal] 0 -# 2384| ValueCategory = prvalue -# 2382| getStmt(): [BlockStmt] { ... } -# 2383| getStmt(0): [DeclStmt] declaration -# 2383| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x788 -# 2383| Type = [Struct] String -# 2383| getVariable().getInitializer(): [Initializer] initializer for x788 -# 2383| getExpr(): [ConstructorCall] call to String -# 2383| Type = [VoidType] void -# 2383| ValueCategory = prvalue -# 2384| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2384| Type = [VoidType] void -# 2384| ValueCategory = prvalue -# 2384| getQualifier(): [VariableAccess] x788 -# 2384| Type = [Struct] String -# 2384| ValueCategory = lvalue -# 2384| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2384| Conversion = [BoolConversion] conversion to bool -# 2384| Type = [BoolType] bool -# 2384| Value = [CStyleCast] 0 -# 2384| ValueCategory = prvalue -# 2385| getStmt(789): [DoStmt] do (...) ... -# 2387| getCondition(): [Literal] 0 -# 2387| Type = [IntType] int -# 2387| Value = [Literal] 0 -# 2387| ValueCategory = prvalue -# 2385| getStmt(): [BlockStmt] { ... } -# 2386| getStmt(0): [DeclStmt] declaration -# 2386| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x789 -# 2386| Type = [Struct] String -# 2386| getVariable().getInitializer(): [Initializer] initializer for x789 -# 2386| getExpr(): [ConstructorCall] call to String -# 2386| Type = [VoidType] void -# 2386| ValueCategory = prvalue -# 2387| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2387| Type = [VoidType] void -# 2387| ValueCategory = prvalue -# 2387| getQualifier(): [VariableAccess] x789 -# 2387| Type = [Struct] String -# 2387| ValueCategory = lvalue -# 2387| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2387| Conversion = [BoolConversion] conversion to bool -# 2387| Type = [BoolType] bool -# 2387| Value = [CStyleCast] 0 -# 2387| ValueCategory = prvalue -# 2388| getStmt(790): [DoStmt] do (...) ... -# 2390| getCondition(): [Literal] 0 -# 2390| Type = [IntType] int -# 2390| Value = [Literal] 0 -# 2390| ValueCategory = prvalue -# 2388| getStmt(): [BlockStmt] { ... } -# 2389| getStmt(0): [DeclStmt] declaration -# 2389| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x790 -# 2389| Type = [Struct] String -# 2389| getVariable().getInitializer(): [Initializer] initializer for x790 -# 2389| getExpr(): [ConstructorCall] call to String -# 2389| Type = [VoidType] void -# 2389| ValueCategory = prvalue -# 2390| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2390| Type = [VoidType] void -# 2390| ValueCategory = prvalue -# 2390| getQualifier(): [VariableAccess] x790 -# 2390| Type = [Struct] String -# 2390| ValueCategory = lvalue -# 2390| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2390| Conversion = [BoolConversion] conversion to bool -# 2390| Type = [BoolType] bool -# 2390| Value = [CStyleCast] 0 -# 2390| ValueCategory = prvalue -# 2391| getStmt(791): [DoStmt] do (...) ... -# 2393| getCondition(): [Literal] 0 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 0 -# 2393| ValueCategory = prvalue -# 2391| getStmt(): [BlockStmt] { ... } -# 2392| getStmt(0): [DeclStmt] declaration -# 2392| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x791 -# 2392| Type = [Struct] String -# 2392| getVariable().getInitializer(): [Initializer] initializer for x791 -# 2392| getExpr(): [ConstructorCall] call to String -# 2392| Type = [VoidType] void -# 2392| ValueCategory = prvalue -# 2393| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2393| Type = [VoidType] void -# 2393| ValueCategory = prvalue -# 2393| getQualifier(): [VariableAccess] x791 -# 2393| Type = [Struct] String -# 2393| ValueCategory = lvalue -# 2393| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2393| Conversion = [BoolConversion] conversion to bool -# 2393| Type = [BoolType] bool -# 2393| Value = [CStyleCast] 0 -# 2393| ValueCategory = prvalue -# 2394| getStmt(792): [DoStmt] do (...) ... -# 2396| getCondition(): [Literal] 0 -# 2396| Type = [IntType] int -# 2396| Value = [Literal] 0 -# 2396| ValueCategory = prvalue -# 2394| getStmt(): [BlockStmt] { ... } -# 2395| getStmt(0): [DeclStmt] declaration -# 2395| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x792 -# 2395| Type = [Struct] String -# 2395| getVariable().getInitializer(): [Initializer] initializer for x792 -# 2395| getExpr(): [ConstructorCall] call to String -# 2395| Type = [VoidType] void -# 2395| ValueCategory = prvalue -# 2396| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2396| Type = [VoidType] void -# 2396| ValueCategory = prvalue -# 2396| getQualifier(): [VariableAccess] x792 -# 2396| Type = [Struct] String -# 2396| ValueCategory = lvalue -# 2396| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2396| Conversion = [BoolConversion] conversion to bool -# 2396| Type = [BoolType] bool -# 2396| Value = [CStyleCast] 0 -# 2396| ValueCategory = prvalue -# 2397| getStmt(793): [DoStmt] do (...) ... -# 2399| getCondition(): [Literal] 0 -# 2399| Type = [IntType] int -# 2399| Value = [Literal] 0 -# 2399| ValueCategory = prvalue -# 2397| getStmt(): [BlockStmt] { ... } -# 2398| getStmt(0): [DeclStmt] declaration -# 2398| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x793 -# 2398| Type = [Struct] String -# 2398| getVariable().getInitializer(): [Initializer] initializer for x793 -# 2398| getExpr(): [ConstructorCall] call to String -# 2398| Type = [VoidType] void -# 2398| ValueCategory = prvalue -# 2399| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2399| Type = [VoidType] void -# 2399| ValueCategory = prvalue -# 2399| getQualifier(): [VariableAccess] x793 -# 2399| Type = [Struct] String -# 2399| ValueCategory = lvalue -# 2399| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2399| Conversion = [BoolConversion] conversion to bool -# 2399| Type = [BoolType] bool -# 2399| Value = [CStyleCast] 0 -# 2399| ValueCategory = prvalue -# 2400| getStmt(794): [DoStmt] do (...) ... -# 2402| getCondition(): [Literal] 0 -# 2402| Type = [IntType] int -# 2402| Value = [Literal] 0 -# 2402| ValueCategory = prvalue -# 2400| getStmt(): [BlockStmt] { ... } -# 2401| getStmt(0): [DeclStmt] declaration -# 2401| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x794 -# 2401| Type = [Struct] String -# 2401| getVariable().getInitializer(): [Initializer] initializer for x794 -# 2401| getExpr(): [ConstructorCall] call to String -# 2401| Type = [VoidType] void -# 2401| ValueCategory = prvalue -# 2402| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2402| Type = [VoidType] void -# 2402| ValueCategory = prvalue -# 2402| getQualifier(): [VariableAccess] x794 -# 2402| Type = [Struct] String -# 2402| ValueCategory = lvalue -# 2402| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2402| Conversion = [BoolConversion] conversion to bool -# 2402| Type = [BoolType] bool -# 2402| Value = [CStyleCast] 0 -# 2402| ValueCategory = prvalue -# 2403| getStmt(795): [DoStmt] do (...) ... -# 2405| getCondition(): [Literal] 0 -# 2405| Type = [IntType] int -# 2405| Value = [Literal] 0 -# 2405| ValueCategory = prvalue -# 2403| getStmt(): [BlockStmt] { ... } -# 2404| getStmt(0): [DeclStmt] declaration -# 2404| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x795 -# 2404| Type = [Struct] String -# 2404| getVariable().getInitializer(): [Initializer] initializer for x795 -# 2404| getExpr(): [ConstructorCall] call to String -# 2404| Type = [VoidType] void -# 2404| ValueCategory = prvalue -# 2405| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2405| Type = [VoidType] void -# 2405| ValueCategory = prvalue -# 2405| getQualifier(): [VariableAccess] x795 -# 2405| Type = [Struct] String -# 2405| ValueCategory = lvalue -# 2405| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2405| Conversion = [BoolConversion] conversion to bool -# 2405| Type = [BoolType] bool -# 2405| Value = [CStyleCast] 0 -# 2405| ValueCategory = prvalue -# 2406| getStmt(796): [DoStmt] do (...) ... -# 2408| getCondition(): [Literal] 0 -# 2408| Type = [IntType] int -# 2408| Value = [Literal] 0 -# 2408| ValueCategory = prvalue -# 2406| getStmt(): [BlockStmt] { ... } -# 2407| getStmt(0): [DeclStmt] declaration -# 2407| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x796 -# 2407| Type = [Struct] String -# 2407| getVariable().getInitializer(): [Initializer] initializer for x796 -# 2407| getExpr(): [ConstructorCall] call to String -# 2407| Type = [VoidType] void -# 2407| ValueCategory = prvalue -# 2408| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2408| Type = [VoidType] void -# 2408| ValueCategory = prvalue -# 2408| getQualifier(): [VariableAccess] x796 -# 2408| Type = [Struct] String -# 2408| ValueCategory = lvalue -# 2408| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2408| Conversion = [BoolConversion] conversion to bool -# 2408| Type = [BoolType] bool -# 2408| Value = [CStyleCast] 0 -# 2408| ValueCategory = prvalue -# 2409| getStmt(797): [DoStmt] do (...) ... -# 2411| getCondition(): [Literal] 0 -# 2411| Type = [IntType] int -# 2411| Value = [Literal] 0 -# 2411| ValueCategory = prvalue -# 2409| getStmt(): [BlockStmt] { ... } -# 2410| getStmt(0): [DeclStmt] declaration -# 2410| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x797 -# 2410| Type = [Struct] String -# 2410| getVariable().getInitializer(): [Initializer] initializer for x797 -# 2410| getExpr(): [ConstructorCall] call to String -# 2410| Type = [VoidType] void -# 2410| ValueCategory = prvalue -# 2411| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2411| Type = [VoidType] void -# 2411| ValueCategory = prvalue -# 2411| getQualifier(): [VariableAccess] x797 -# 2411| Type = [Struct] String -# 2411| ValueCategory = lvalue -# 2411| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2411| Conversion = [BoolConversion] conversion to bool -# 2411| Type = [BoolType] bool -# 2411| Value = [CStyleCast] 0 -# 2411| ValueCategory = prvalue -# 2412| getStmt(798): [DoStmt] do (...) ... -# 2414| getCondition(): [Literal] 0 -# 2414| Type = [IntType] int -# 2414| Value = [Literal] 0 -# 2414| ValueCategory = prvalue -# 2412| getStmt(): [BlockStmt] { ... } -# 2413| getStmt(0): [DeclStmt] declaration -# 2413| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x798 -# 2413| Type = [Struct] String -# 2413| getVariable().getInitializer(): [Initializer] initializer for x798 -# 2413| getExpr(): [ConstructorCall] call to String -# 2413| Type = [VoidType] void -# 2413| ValueCategory = prvalue -# 2414| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2414| Type = [VoidType] void -# 2414| ValueCategory = prvalue -# 2414| getQualifier(): [VariableAccess] x798 -# 2414| Type = [Struct] String -# 2414| ValueCategory = lvalue -# 2414| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2414| Conversion = [BoolConversion] conversion to bool -# 2414| Type = [BoolType] bool -# 2414| Value = [CStyleCast] 0 -# 2414| ValueCategory = prvalue -# 2415| getStmt(799): [DoStmt] do (...) ... -# 2417| getCondition(): [Literal] 0 -# 2417| Type = [IntType] int -# 2417| Value = [Literal] 0 -# 2417| ValueCategory = prvalue -# 2415| getStmt(): [BlockStmt] { ... } -# 2416| getStmt(0): [DeclStmt] declaration -# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x799 -# 2416| Type = [Struct] String -# 2416| getVariable().getInitializer(): [Initializer] initializer for x799 -# 2416| getExpr(): [ConstructorCall] call to String -# 2416| Type = [VoidType] void -# 2416| ValueCategory = prvalue -# 2417| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2417| Type = [VoidType] void -# 2417| ValueCategory = prvalue -# 2417| getQualifier(): [VariableAccess] x799 -# 2417| Type = [Struct] String -# 2417| ValueCategory = lvalue -# 2417| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2417| Conversion = [BoolConversion] conversion to bool -# 2417| Type = [BoolType] bool -# 2417| Value = [CStyleCast] 0 -# 2417| ValueCategory = prvalue -# 2418| getStmt(800): [DoStmt] do (...) ... -# 2420| getCondition(): [Literal] 0 -# 2420| Type = [IntType] int -# 2420| Value = [Literal] 0 -# 2420| ValueCategory = prvalue -# 2418| getStmt(): [BlockStmt] { ... } -# 2419| getStmt(0): [DeclStmt] declaration -# 2419| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x800 -# 2419| Type = [Struct] String -# 2419| getVariable().getInitializer(): [Initializer] initializer for x800 -# 2419| getExpr(): [ConstructorCall] call to String -# 2419| Type = [VoidType] void -# 2419| ValueCategory = prvalue -# 2420| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2420| Type = [VoidType] void -# 2420| ValueCategory = prvalue -# 2420| getQualifier(): [VariableAccess] x800 -# 2420| Type = [Struct] String -# 2420| ValueCategory = lvalue -# 2420| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2420| Conversion = [BoolConversion] conversion to bool -# 2420| Type = [BoolType] bool -# 2420| Value = [CStyleCast] 0 -# 2420| ValueCategory = prvalue -# 2421| getStmt(801): [DoStmt] do (...) ... -# 2423| getCondition(): [Literal] 0 -# 2423| Type = [IntType] int -# 2423| Value = [Literal] 0 -# 2423| ValueCategory = prvalue -# 2421| getStmt(): [BlockStmt] { ... } -# 2422| getStmt(0): [DeclStmt] declaration -# 2422| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x801 -# 2422| Type = [Struct] String -# 2422| getVariable().getInitializer(): [Initializer] initializer for x801 -# 2422| getExpr(): [ConstructorCall] call to String -# 2422| Type = [VoidType] void -# 2422| ValueCategory = prvalue -# 2423| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2423| Type = [VoidType] void -# 2423| ValueCategory = prvalue -# 2423| getQualifier(): [VariableAccess] x801 -# 2423| Type = [Struct] String -# 2423| ValueCategory = lvalue -# 2423| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2423| Conversion = [BoolConversion] conversion to bool -# 2423| Type = [BoolType] bool -# 2423| Value = [CStyleCast] 0 -# 2423| ValueCategory = prvalue -# 2424| getStmt(802): [DoStmt] do (...) ... -# 2426| getCondition(): [Literal] 0 -# 2426| Type = [IntType] int -# 2426| Value = [Literal] 0 -# 2426| ValueCategory = prvalue -# 2424| getStmt(): [BlockStmt] { ... } -# 2425| getStmt(0): [DeclStmt] declaration -# 2425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x802 -# 2425| Type = [Struct] String -# 2425| getVariable().getInitializer(): [Initializer] initializer for x802 -# 2425| getExpr(): [ConstructorCall] call to String -# 2425| Type = [VoidType] void -# 2425| ValueCategory = prvalue -# 2426| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2426| Type = [VoidType] void -# 2426| ValueCategory = prvalue -# 2426| getQualifier(): [VariableAccess] x802 -# 2426| Type = [Struct] String -# 2426| ValueCategory = lvalue -# 2426| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2426| Conversion = [BoolConversion] conversion to bool -# 2426| Type = [BoolType] bool -# 2426| Value = [CStyleCast] 0 -# 2426| ValueCategory = prvalue -# 2427| getStmt(803): [DoStmt] do (...) ... -# 2429| getCondition(): [Literal] 0 -# 2429| Type = [IntType] int -# 2429| Value = [Literal] 0 -# 2429| ValueCategory = prvalue -# 2427| getStmt(): [BlockStmt] { ... } -# 2428| getStmt(0): [DeclStmt] declaration -# 2428| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x803 -# 2428| Type = [Struct] String -# 2428| getVariable().getInitializer(): [Initializer] initializer for x803 -# 2428| getExpr(): [ConstructorCall] call to String -# 2428| Type = [VoidType] void -# 2428| ValueCategory = prvalue -# 2429| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2429| Type = [VoidType] void -# 2429| ValueCategory = prvalue -# 2429| getQualifier(): [VariableAccess] x803 -# 2429| Type = [Struct] String -# 2429| ValueCategory = lvalue -# 2429| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2429| Conversion = [BoolConversion] conversion to bool -# 2429| Type = [BoolType] bool -# 2429| Value = [CStyleCast] 0 -# 2429| ValueCategory = prvalue -# 2430| getStmt(804): [DoStmt] do (...) ... -# 2432| getCondition(): [Literal] 0 -# 2432| Type = [IntType] int -# 2432| Value = [Literal] 0 -# 2432| ValueCategory = prvalue -# 2430| getStmt(): [BlockStmt] { ... } -# 2431| getStmt(0): [DeclStmt] declaration -# 2431| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x804 -# 2431| Type = [Struct] String -# 2431| getVariable().getInitializer(): [Initializer] initializer for x804 -# 2431| getExpr(): [ConstructorCall] call to String -# 2431| Type = [VoidType] void -# 2431| ValueCategory = prvalue -# 2432| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2432| Type = [VoidType] void -# 2432| ValueCategory = prvalue -# 2432| getQualifier(): [VariableAccess] x804 -# 2432| Type = [Struct] String -# 2432| ValueCategory = lvalue -# 2432| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2432| Conversion = [BoolConversion] conversion to bool -# 2432| Type = [BoolType] bool -# 2432| Value = [CStyleCast] 0 -# 2432| ValueCategory = prvalue -# 2433| getStmt(805): [DoStmt] do (...) ... -# 2435| getCondition(): [Literal] 0 -# 2435| Type = [IntType] int -# 2435| Value = [Literal] 0 -# 2435| ValueCategory = prvalue -# 2433| getStmt(): [BlockStmt] { ... } -# 2434| getStmt(0): [DeclStmt] declaration -# 2434| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x805 -# 2434| Type = [Struct] String -# 2434| getVariable().getInitializer(): [Initializer] initializer for x805 -# 2434| getExpr(): [ConstructorCall] call to String -# 2434| Type = [VoidType] void -# 2434| ValueCategory = prvalue -# 2435| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2435| Type = [VoidType] void -# 2435| ValueCategory = prvalue -# 2435| getQualifier(): [VariableAccess] x805 -# 2435| Type = [Struct] String -# 2435| ValueCategory = lvalue -# 2435| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2435| Conversion = [BoolConversion] conversion to bool -# 2435| Type = [BoolType] bool -# 2435| Value = [CStyleCast] 0 -# 2435| ValueCategory = prvalue -# 2436| getStmt(806): [DoStmt] do (...) ... -# 2438| getCondition(): [Literal] 0 -# 2438| Type = [IntType] int -# 2438| Value = [Literal] 0 -# 2438| ValueCategory = prvalue -# 2436| getStmt(): [BlockStmt] { ... } -# 2437| getStmt(0): [DeclStmt] declaration -# 2437| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x806 -# 2437| Type = [Struct] String -# 2437| getVariable().getInitializer(): [Initializer] initializer for x806 -# 2437| getExpr(): [ConstructorCall] call to String -# 2437| Type = [VoidType] void -# 2437| ValueCategory = prvalue -# 2438| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2438| Type = [VoidType] void -# 2438| ValueCategory = prvalue -# 2438| getQualifier(): [VariableAccess] x806 -# 2438| Type = [Struct] String -# 2438| ValueCategory = lvalue -# 2438| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2438| Conversion = [BoolConversion] conversion to bool -# 2438| Type = [BoolType] bool -# 2438| Value = [CStyleCast] 0 -# 2438| ValueCategory = prvalue -# 2439| getStmt(807): [DoStmt] do (...) ... -# 2441| getCondition(): [Literal] 0 -# 2441| Type = [IntType] int -# 2441| Value = [Literal] 0 -# 2441| ValueCategory = prvalue -# 2439| getStmt(): [BlockStmt] { ... } -# 2440| getStmt(0): [DeclStmt] declaration -# 2440| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x807 -# 2440| Type = [Struct] String -# 2440| getVariable().getInitializer(): [Initializer] initializer for x807 -# 2440| getExpr(): [ConstructorCall] call to String -# 2440| Type = [VoidType] void -# 2440| ValueCategory = prvalue -# 2441| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2441| Type = [VoidType] void -# 2441| ValueCategory = prvalue -# 2441| getQualifier(): [VariableAccess] x807 -# 2441| Type = [Struct] String -# 2441| ValueCategory = lvalue -# 2441| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2441| Conversion = [BoolConversion] conversion to bool -# 2441| Type = [BoolType] bool -# 2441| Value = [CStyleCast] 0 -# 2441| ValueCategory = prvalue -# 2442| getStmt(808): [DoStmt] do (...) ... -# 2444| getCondition(): [Literal] 0 -# 2444| Type = [IntType] int -# 2444| Value = [Literal] 0 -# 2444| ValueCategory = prvalue -# 2442| getStmt(): [BlockStmt] { ... } -# 2443| getStmt(0): [DeclStmt] declaration -# 2443| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x808 -# 2443| Type = [Struct] String -# 2443| getVariable().getInitializer(): [Initializer] initializer for x808 -# 2443| getExpr(): [ConstructorCall] call to String -# 2443| Type = [VoidType] void -# 2443| ValueCategory = prvalue -# 2444| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2444| Type = [VoidType] void -# 2444| ValueCategory = prvalue -# 2444| getQualifier(): [VariableAccess] x808 -# 2444| Type = [Struct] String -# 2444| ValueCategory = lvalue -# 2444| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2444| Conversion = [BoolConversion] conversion to bool -# 2444| Type = [BoolType] bool -# 2444| Value = [CStyleCast] 0 -# 2444| ValueCategory = prvalue -# 2445| getStmt(809): [DoStmt] do (...) ... -# 2447| getCondition(): [Literal] 0 -# 2447| Type = [IntType] int -# 2447| Value = [Literal] 0 -# 2447| ValueCategory = prvalue -# 2445| getStmt(): [BlockStmt] { ... } -# 2446| getStmt(0): [DeclStmt] declaration -# 2446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x809 -# 2446| Type = [Struct] String -# 2446| getVariable().getInitializer(): [Initializer] initializer for x809 -# 2446| getExpr(): [ConstructorCall] call to String -# 2446| Type = [VoidType] void -# 2446| ValueCategory = prvalue -# 2447| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2447| Type = [VoidType] void -# 2447| ValueCategory = prvalue -# 2447| getQualifier(): [VariableAccess] x809 -# 2447| Type = [Struct] String -# 2447| ValueCategory = lvalue -# 2447| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2447| Conversion = [BoolConversion] conversion to bool -# 2447| Type = [BoolType] bool -# 2447| Value = [CStyleCast] 0 -# 2447| ValueCategory = prvalue -# 2448| getStmt(810): [DoStmt] do (...) ... -# 2450| getCondition(): [Literal] 0 -# 2450| Type = [IntType] int -# 2450| Value = [Literal] 0 -# 2450| ValueCategory = prvalue -# 2448| getStmt(): [BlockStmt] { ... } -# 2449| getStmt(0): [DeclStmt] declaration -# 2449| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x810 -# 2449| Type = [Struct] String -# 2449| getVariable().getInitializer(): [Initializer] initializer for x810 -# 2449| getExpr(): [ConstructorCall] call to String -# 2449| Type = [VoidType] void -# 2449| ValueCategory = prvalue -# 2450| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2450| Type = [VoidType] void -# 2450| ValueCategory = prvalue -# 2450| getQualifier(): [VariableAccess] x810 -# 2450| Type = [Struct] String -# 2450| ValueCategory = lvalue -# 2450| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2450| Conversion = [BoolConversion] conversion to bool -# 2450| Type = [BoolType] bool -# 2450| Value = [CStyleCast] 0 -# 2450| ValueCategory = prvalue -# 2451| getStmt(811): [DoStmt] do (...) ... -# 2453| getCondition(): [Literal] 0 -# 2453| Type = [IntType] int -# 2453| Value = [Literal] 0 -# 2453| ValueCategory = prvalue -# 2451| getStmt(): [BlockStmt] { ... } -# 2452| getStmt(0): [DeclStmt] declaration -# 2452| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x811 -# 2452| Type = [Struct] String -# 2452| getVariable().getInitializer(): [Initializer] initializer for x811 -# 2452| getExpr(): [ConstructorCall] call to String -# 2452| Type = [VoidType] void -# 2452| ValueCategory = prvalue -# 2453| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2453| Type = [VoidType] void -# 2453| ValueCategory = prvalue -# 2453| getQualifier(): [VariableAccess] x811 -# 2453| Type = [Struct] String -# 2453| ValueCategory = lvalue -# 2453| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2453| Conversion = [BoolConversion] conversion to bool -# 2453| Type = [BoolType] bool -# 2453| Value = [CStyleCast] 0 -# 2453| ValueCategory = prvalue -# 2454| getStmt(812): [DoStmt] do (...) ... -# 2456| getCondition(): [Literal] 0 -# 2456| Type = [IntType] int -# 2456| Value = [Literal] 0 -# 2456| ValueCategory = prvalue -# 2454| getStmt(): [BlockStmt] { ... } -# 2455| getStmt(0): [DeclStmt] declaration -# 2455| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x812 -# 2455| Type = [Struct] String -# 2455| getVariable().getInitializer(): [Initializer] initializer for x812 -# 2455| getExpr(): [ConstructorCall] call to String -# 2455| Type = [VoidType] void -# 2455| ValueCategory = prvalue -# 2456| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2456| Type = [VoidType] void -# 2456| ValueCategory = prvalue -# 2456| getQualifier(): [VariableAccess] x812 -# 2456| Type = [Struct] String -# 2456| ValueCategory = lvalue -# 2456| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2456| Conversion = [BoolConversion] conversion to bool -# 2456| Type = [BoolType] bool -# 2456| Value = [CStyleCast] 0 -# 2456| ValueCategory = prvalue -# 2457| getStmt(813): [DoStmt] do (...) ... -# 2459| getCondition(): [Literal] 0 -# 2459| Type = [IntType] int -# 2459| Value = [Literal] 0 -# 2459| ValueCategory = prvalue -# 2457| getStmt(): [BlockStmt] { ... } -# 2458| getStmt(0): [DeclStmt] declaration -# 2458| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x813 -# 2458| Type = [Struct] String -# 2458| getVariable().getInitializer(): [Initializer] initializer for x813 -# 2458| getExpr(): [ConstructorCall] call to String -# 2458| Type = [VoidType] void -# 2458| ValueCategory = prvalue -# 2459| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2459| Type = [VoidType] void -# 2459| ValueCategory = prvalue -# 2459| getQualifier(): [VariableAccess] x813 -# 2459| Type = [Struct] String -# 2459| ValueCategory = lvalue -# 2459| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2459| Conversion = [BoolConversion] conversion to bool -# 2459| Type = [BoolType] bool -# 2459| Value = [CStyleCast] 0 -# 2459| ValueCategory = prvalue -# 2460| getStmt(814): [DoStmt] do (...) ... -# 2462| getCondition(): [Literal] 0 -# 2462| Type = [IntType] int -# 2462| Value = [Literal] 0 -# 2462| ValueCategory = prvalue -# 2460| getStmt(): [BlockStmt] { ... } -# 2461| getStmt(0): [DeclStmt] declaration -# 2461| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x814 -# 2461| Type = [Struct] String -# 2461| getVariable().getInitializer(): [Initializer] initializer for x814 -# 2461| getExpr(): [ConstructorCall] call to String -# 2461| Type = [VoidType] void -# 2461| ValueCategory = prvalue -# 2462| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2462| Type = [VoidType] void -# 2462| ValueCategory = prvalue -# 2462| getQualifier(): [VariableAccess] x814 -# 2462| Type = [Struct] String -# 2462| ValueCategory = lvalue -# 2462| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2462| Conversion = [BoolConversion] conversion to bool -# 2462| Type = [BoolType] bool -# 2462| Value = [CStyleCast] 0 -# 2462| ValueCategory = prvalue -# 2463| getStmt(815): [DoStmt] do (...) ... -# 2465| getCondition(): [Literal] 0 -# 2465| Type = [IntType] int -# 2465| Value = [Literal] 0 -# 2465| ValueCategory = prvalue -# 2463| getStmt(): [BlockStmt] { ... } -# 2464| getStmt(0): [DeclStmt] declaration -# 2464| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x815 -# 2464| Type = [Struct] String -# 2464| getVariable().getInitializer(): [Initializer] initializer for x815 -# 2464| getExpr(): [ConstructorCall] call to String -# 2464| Type = [VoidType] void -# 2464| ValueCategory = prvalue -# 2465| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2465| Type = [VoidType] void -# 2465| ValueCategory = prvalue -# 2465| getQualifier(): [VariableAccess] x815 -# 2465| Type = [Struct] String -# 2465| ValueCategory = lvalue -# 2465| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2465| Conversion = [BoolConversion] conversion to bool -# 2465| Type = [BoolType] bool -# 2465| Value = [CStyleCast] 0 -# 2465| ValueCategory = prvalue -# 2466| getStmt(816): [DoStmt] do (...) ... -# 2468| getCondition(): [Literal] 0 -# 2468| Type = [IntType] int -# 2468| Value = [Literal] 0 -# 2468| ValueCategory = prvalue -# 2466| getStmt(): [BlockStmt] { ... } -# 2467| getStmt(0): [DeclStmt] declaration -# 2467| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x816 -# 2467| Type = [Struct] String -# 2467| getVariable().getInitializer(): [Initializer] initializer for x816 -# 2467| getExpr(): [ConstructorCall] call to String -# 2467| Type = [VoidType] void -# 2467| ValueCategory = prvalue -# 2468| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2468| Type = [VoidType] void -# 2468| ValueCategory = prvalue -# 2468| getQualifier(): [VariableAccess] x816 -# 2468| Type = [Struct] String -# 2468| ValueCategory = lvalue -# 2468| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2468| Conversion = [BoolConversion] conversion to bool -# 2468| Type = [BoolType] bool -# 2468| Value = [CStyleCast] 0 -# 2468| ValueCategory = prvalue -# 2469| getStmt(817): [DoStmt] do (...) ... -# 2471| getCondition(): [Literal] 0 -# 2471| Type = [IntType] int -# 2471| Value = [Literal] 0 -# 2471| ValueCategory = prvalue -# 2469| getStmt(): [BlockStmt] { ... } -# 2470| getStmt(0): [DeclStmt] declaration -# 2470| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x817 -# 2470| Type = [Struct] String -# 2470| getVariable().getInitializer(): [Initializer] initializer for x817 -# 2470| getExpr(): [ConstructorCall] call to String -# 2470| Type = [VoidType] void -# 2470| ValueCategory = prvalue -# 2471| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2471| Type = [VoidType] void -# 2471| ValueCategory = prvalue -# 2471| getQualifier(): [VariableAccess] x817 -# 2471| Type = [Struct] String -# 2471| ValueCategory = lvalue -# 2471| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2471| Conversion = [BoolConversion] conversion to bool -# 2471| Type = [BoolType] bool -# 2471| Value = [CStyleCast] 0 -# 2471| ValueCategory = prvalue -# 2472| getStmt(818): [DoStmt] do (...) ... -# 2474| getCondition(): [Literal] 0 -# 2474| Type = [IntType] int -# 2474| Value = [Literal] 0 -# 2474| ValueCategory = prvalue -# 2472| getStmt(): [BlockStmt] { ... } -# 2473| getStmt(0): [DeclStmt] declaration -# 2473| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x818 -# 2473| Type = [Struct] String -# 2473| getVariable().getInitializer(): [Initializer] initializer for x818 -# 2473| getExpr(): [ConstructorCall] call to String -# 2473| Type = [VoidType] void -# 2473| ValueCategory = prvalue -# 2474| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2474| Type = [VoidType] void -# 2474| ValueCategory = prvalue -# 2474| getQualifier(): [VariableAccess] x818 -# 2474| Type = [Struct] String -# 2474| ValueCategory = lvalue -# 2474| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2474| Conversion = [BoolConversion] conversion to bool -# 2474| Type = [BoolType] bool -# 2474| Value = [CStyleCast] 0 -# 2474| ValueCategory = prvalue -# 2475| getStmt(819): [DoStmt] do (...) ... -# 2477| getCondition(): [Literal] 0 -# 2477| Type = [IntType] int -# 2477| Value = [Literal] 0 -# 2477| ValueCategory = prvalue -# 2475| getStmt(): [BlockStmt] { ... } -# 2476| getStmt(0): [DeclStmt] declaration -# 2476| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x819 -# 2476| Type = [Struct] String -# 2476| getVariable().getInitializer(): [Initializer] initializer for x819 -# 2476| getExpr(): [ConstructorCall] call to String -# 2476| Type = [VoidType] void -# 2476| ValueCategory = prvalue -# 2477| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2477| Type = [VoidType] void -# 2477| ValueCategory = prvalue -# 2477| getQualifier(): [VariableAccess] x819 -# 2477| Type = [Struct] String -# 2477| ValueCategory = lvalue -# 2477| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2477| Conversion = [BoolConversion] conversion to bool -# 2477| Type = [BoolType] bool -# 2477| Value = [CStyleCast] 0 -# 2477| ValueCategory = prvalue -# 2478| getStmt(820): [DoStmt] do (...) ... -# 2480| getCondition(): [Literal] 0 -# 2480| Type = [IntType] int -# 2480| Value = [Literal] 0 -# 2480| ValueCategory = prvalue -# 2478| getStmt(): [BlockStmt] { ... } -# 2479| getStmt(0): [DeclStmt] declaration -# 2479| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x820 -# 2479| Type = [Struct] String -# 2479| getVariable().getInitializer(): [Initializer] initializer for x820 -# 2479| getExpr(): [ConstructorCall] call to String -# 2479| Type = [VoidType] void -# 2479| ValueCategory = prvalue -# 2480| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2480| Type = [VoidType] void -# 2480| ValueCategory = prvalue -# 2480| getQualifier(): [VariableAccess] x820 -# 2480| Type = [Struct] String -# 2480| ValueCategory = lvalue -# 2480| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2480| Conversion = [BoolConversion] conversion to bool -# 2480| Type = [BoolType] bool -# 2480| Value = [CStyleCast] 0 -# 2480| ValueCategory = prvalue -# 2481| getStmt(821): [DoStmt] do (...) ... -# 2483| getCondition(): [Literal] 0 -# 2483| Type = [IntType] int -# 2483| Value = [Literal] 0 -# 2483| ValueCategory = prvalue -# 2481| getStmt(): [BlockStmt] { ... } -# 2482| getStmt(0): [DeclStmt] declaration -# 2482| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x821 -# 2482| Type = [Struct] String -# 2482| getVariable().getInitializer(): [Initializer] initializer for x821 -# 2482| getExpr(): [ConstructorCall] call to String -# 2482| Type = [VoidType] void -# 2482| ValueCategory = prvalue -# 2483| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2483| Type = [VoidType] void -# 2483| ValueCategory = prvalue -# 2483| getQualifier(): [VariableAccess] x821 -# 2483| Type = [Struct] String -# 2483| ValueCategory = lvalue -# 2483| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2483| Conversion = [BoolConversion] conversion to bool -# 2483| Type = [BoolType] bool -# 2483| Value = [CStyleCast] 0 -# 2483| ValueCategory = prvalue -# 2484| getStmt(822): [DoStmt] do (...) ... -# 2486| getCondition(): [Literal] 0 -# 2486| Type = [IntType] int -# 2486| Value = [Literal] 0 -# 2486| ValueCategory = prvalue -# 2484| getStmt(): [BlockStmt] { ... } -# 2485| getStmt(0): [DeclStmt] declaration -# 2485| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x822 -# 2485| Type = [Struct] String -# 2485| getVariable().getInitializer(): [Initializer] initializer for x822 -# 2485| getExpr(): [ConstructorCall] call to String -# 2485| Type = [VoidType] void -# 2485| ValueCategory = prvalue -# 2486| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2486| Type = [VoidType] void -# 2486| ValueCategory = prvalue -# 2486| getQualifier(): [VariableAccess] x822 -# 2486| Type = [Struct] String -# 2486| ValueCategory = lvalue -# 2486| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2486| Conversion = [BoolConversion] conversion to bool -# 2486| Type = [BoolType] bool -# 2486| Value = [CStyleCast] 0 -# 2486| ValueCategory = prvalue -# 2487| getStmt(823): [DoStmt] do (...) ... -# 2489| getCondition(): [Literal] 0 -# 2489| Type = [IntType] int -# 2489| Value = [Literal] 0 -# 2489| ValueCategory = prvalue -# 2487| getStmt(): [BlockStmt] { ... } -# 2488| getStmt(0): [DeclStmt] declaration -# 2488| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x823 -# 2488| Type = [Struct] String -# 2488| getVariable().getInitializer(): [Initializer] initializer for x823 -# 2488| getExpr(): [ConstructorCall] call to String -# 2488| Type = [VoidType] void -# 2488| ValueCategory = prvalue -# 2489| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2489| Type = [VoidType] void -# 2489| ValueCategory = prvalue -# 2489| getQualifier(): [VariableAccess] x823 -# 2489| Type = [Struct] String -# 2489| ValueCategory = lvalue -# 2489| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2489| Conversion = [BoolConversion] conversion to bool -# 2489| Type = [BoolType] bool -# 2489| Value = [CStyleCast] 0 -# 2489| ValueCategory = prvalue -# 2490| getStmt(824): [DoStmt] do (...) ... -# 2492| getCondition(): [Literal] 0 -# 2492| Type = [IntType] int -# 2492| Value = [Literal] 0 -# 2492| ValueCategory = prvalue -# 2490| getStmt(): [BlockStmt] { ... } -# 2491| getStmt(0): [DeclStmt] declaration -# 2491| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x824 -# 2491| Type = [Struct] String -# 2491| getVariable().getInitializer(): [Initializer] initializer for x824 -# 2491| getExpr(): [ConstructorCall] call to String -# 2491| Type = [VoidType] void -# 2491| ValueCategory = prvalue -# 2492| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2492| Type = [VoidType] void -# 2492| ValueCategory = prvalue -# 2492| getQualifier(): [VariableAccess] x824 -# 2492| Type = [Struct] String -# 2492| ValueCategory = lvalue -# 2492| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2492| Conversion = [BoolConversion] conversion to bool -# 2492| Type = [BoolType] bool -# 2492| Value = [CStyleCast] 0 -# 2492| ValueCategory = prvalue -# 2493| getStmt(825): [DoStmt] do (...) ... -# 2495| getCondition(): [Literal] 0 -# 2495| Type = [IntType] int -# 2495| Value = [Literal] 0 -# 2495| ValueCategory = prvalue -# 2493| getStmt(): [BlockStmt] { ... } -# 2494| getStmt(0): [DeclStmt] declaration -# 2494| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x825 -# 2494| Type = [Struct] String -# 2494| getVariable().getInitializer(): [Initializer] initializer for x825 -# 2494| getExpr(): [ConstructorCall] call to String -# 2494| Type = [VoidType] void -# 2494| ValueCategory = prvalue -# 2495| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2495| Type = [VoidType] void -# 2495| ValueCategory = prvalue -# 2495| getQualifier(): [VariableAccess] x825 -# 2495| Type = [Struct] String -# 2495| ValueCategory = lvalue -# 2495| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2495| Conversion = [BoolConversion] conversion to bool -# 2495| Type = [BoolType] bool -# 2495| Value = [CStyleCast] 0 -# 2495| ValueCategory = prvalue -# 2496| getStmt(826): [DoStmt] do (...) ... -# 2498| getCondition(): [Literal] 0 -# 2498| Type = [IntType] int -# 2498| Value = [Literal] 0 -# 2498| ValueCategory = prvalue -# 2496| getStmt(): [BlockStmt] { ... } -# 2497| getStmt(0): [DeclStmt] declaration -# 2497| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x826 -# 2497| Type = [Struct] String -# 2497| getVariable().getInitializer(): [Initializer] initializer for x826 -# 2497| getExpr(): [ConstructorCall] call to String -# 2497| Type = [VoidType] void -# 2497| ValueCategory = prvalue -# 2498| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2498| Type = [VoidType] void -# 2498| ValueCategory = prvalue -# 2498| getQualifier(): [VariableAccess] x826 -# 2498| Type = [Struct] String -# 2498| ValueCategory = lvalue -# 2498| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2498| Conversion = [BoolConversion] conversion to bool -# 2498| Type = [BoolType] bool -# 2498| Value = [CStyleCast] 0 -# 2498| ValueCategory = prvalue -# 2499| getStmt(827): [DoStmt] do (...) ... -# 2501| getCondition(): [Literal] 0 -# 2501| Type = [IntType] int -# 2501| Value = [Literal] 0 -# 2501| ValueCategory = prvalue -# 2499| getStmt(): [BlockStmt] { ... } -# 2500| getStmt(0): [DeclStmt] declaration -# 2500| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x827 -# 2500| Type = [Struct] String -# 2500| getVariable().getInitializer(): [Initializer] initializer for x827 -# 2500| getExpr(): [ConstructorCall] call to String -# 2500| Type = [VoidType] void -# 2500| ValueCategory = prvalue -# 2501| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2501| Type = [VoidType] void -# 2501| ValueCategory = prvalue -# 2501| getQualifier(): [VariableAccess] x827 -# 2501| Type = [Struct] String -# 2501| ValueCategory = lvalue -# 2501| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2501| Conversion = [BoolConversion] conversion to bool -# 2501| Type = [BoolType] bool -# 2501| Value = [CStyleCast] 0 -# 2501| ValueCategory = prvalue -# 2502| getStmt(828): [DoStmt] do (...) ... -# 2504| getCondition(): [Literal] 0 -# 2504| Type = [IntType] int -# 2504| Value = [Literal] 0 -# 2504| ValueCategory = prvalue -# 2502| getStmt(): [BlockStmt] { ... } -# 2503| getStmt(0): [DeclStmt] declaration -# 2503| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x828 -# 2503| Type = [Struct] String -# 2503| getVariable().getInitializer(): [Initializer] initializer for x828 -# 2503| getExpr(): [ConstructorCall] call to String -# 2503| Type = [VoidType] void -# 2503| ValueCategory = prvalue -# 2504| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2504| Type = [VoidType] void -# 2504| ValueCategory = prvalue -# 2504| getQualifier(): [VariableAccess] x828 -# 2504| Type = [Struct] String -# 2504| ValueCategory = lvalue -# 2504| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2504| Conversion = [BoolConversion] conversion to bool -# 2504| Type = [BoolType] bool -# 2504| Value = [CStyleCast] 0 -# 2504| ValueCategory = prvalue -# 2505| getStmt(829): [DoStmt] do (...) ... -# 2507| getCondition(): [Literal] 0 -# 2507| Type = [IntType] int -# 2507| Value = [Literal] 0 -# 2507| ValueCategory = prvalue -# 2505| getStmt(): [BlockStmt] { ... } -# 2506| getStmt(0): [DeclStmt] declaration -# 2506| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x829 -# 2506| Type = [Struct] String -# 2506| getVariable().getInitializer(): [Initializer] initializer for x829 -# 2506| getExpr(): [ConstructorCall] call to String -# 2506| Type = [VoidType] void -# 2506| ValueCategory = prvalue -# 2507| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2507| Type = [VoidType] void -# 2507| ValueCategory = prvalue -# 2507| getQualifier(): [VariableAccess] x829 -# 2507| Type = [Struct] String -# 2507| ValueCategory = lvalue -# 2507| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2507| Conversion = [BoolConversion] conversion to bool -# 2507| Type = [BoolType] bool -# 2507| Value = [CStyleCast] 0 -# 2507| ValueCategory = prvalue -# 2508| getStmt(830): [DoStmt] do (...) ... -# 2510| getCondition(): [Literal] 0 -# 2510| Type = [IntType] int -# 2510| Value = [Literal] 0 -# 2510| ValueCategory = prvalue -# 2508| getStmt(): [BlockStmt] { ... } -# 2509| getStmt(0): [DeclStmt] declaration -# 2509| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x830 -# 2509| Type = [Struct] String -# 2509| getVariable().getInitializer(): [Initializer] initializer for x830 -# 2509| getExpr(): [ConstructorCall] call to String -# 2509| Type = [VoidType] void -# 2509| ValueCategory = prvalue -# 2510| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2510| Type = [VoidType] void -# 2510| ValueCategory = prvalue -# 2510| getQualifier(): [VariableAccess] x830 -# 2510| Type = [Struct] String -# 2510| ValueCategory = lvalue -# 2510| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2510| Conversion = [BoolConversion] conversion to bool -# 2510| Type = [BoolType] bool -# 2510| Value = [CStyleCast] 0 -# 2510| ValueCategory = prvalue -# 2511| getStmt(831): [DoStmt] do (...) ... -# 2513| getCondition(): [Literal] 0 -# 2513| Type = [IntType] int -# 2513| Value = [Literal] 0 -# 2513| ValueCategory = prvalue -# 2511| getStmt(): [BlockStmt] { ... } -# 2512| getStmt(0): [DeclStmt] declaration -# 2512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x831 -# 2512| Type = [Struct] String -# 2512| getVariable().getInitializer(): [Initializer] initializer for x831 -# 2512| getExpr(): [ConstructorCall] call to String -# 2512| Type = [VoidType] void -# 2512| ValueCategory = prvalue -# 2513| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2513| Type = [VoidType] void -# 2513| ValueCategory = prvalue -# 2513| getQualifier(): [VariableAccess] x831 -# 2513| Type = [Struct] String -# 2513| ValueCategory = lvalue -# 2513| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2513| Conversion = [BoolConversion] conversion to bool -# 2513| Type = [BoolType] bool -# 2513| Value = [CStyleCast] 0 -# 2513| ValueCategory = prvalue -# 2514| getStmt(832): [DoStmt] do (...) ... -# 2516| getCondition(): [Literal] 0 -# 2516| Type = [IntType] int -# 2516| Value = [Literal] 0 -# 2516| ValueCategory = prvalue -# 2514| getStmt(): [BlockStmt] { ... } -# 2515| getStmt(0): [DeclStmt] declaration -# 2515| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x832 -# 2515| Type = [Struct] String -# 2515| getVariable().getInitializer(): [Initializer] initializer for x832 -# 2515| getExpr(): [ConstructorCall] call to String -# 2515| Type = [VoidType] void -# 2515| ValueCategory = prvalue -# 2516| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2516| Type = [VoidType] void -# 2516| ValueCategory = prvalue -# 2516| getQualifier(): [VariableAccess] x832 -# 2516| Type = [Struct] String -# 2516| ValueCategory = lvalue -# 2516| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2516| Conversion = [BoolConversion] conversion to bool -# 2516| Type = [BoolType] bool -# 2516| Value = [CStyleCast] 0 -# 2516| ValueCategory = prvalue -# 2517| getStmt(833): [DoStmt] do (...) ... -# 2519| getCondition(): [Literal] 0 -# 2519| Type = [IntType] int -# 2519| Value = [Literal] 0 -# 2519| ValueCategory = prvalue -# 2517| getStmt(): [BlockStmt] { ... } -# 2518| getStmt(0): [DeclStmt] declaration -# 2518| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x833 -# 2518| Type = [Struct] String -# 2518| getVariable().getInitializer(): [Initializer] initializer for x833 -# 2518| getExpr(): [ConstructorCall] call to String -# 2518| Type = [VoidType] void -# 2518| ValueCategory = prvalue -# 2519| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2519| Type = [VoidType] void -# 2519| ValueCategory = prvalue -# 2519| getQualifier(): [VariableAccess] x833 -# 2519| Type = [Struct] String -# 2519| ValueCategory = lvalue -# 2519| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2519| Conversion = [BoolConversion] conversion to bool -# 2519| Type = [BoolType] bool -# 2519| Value = [CStyleCast] 0 -# 2519| ValueCategory = prvalue -# 2520| getStmt(834): [DoStmt] do (...) ... -# 2522| getCondition(): [Literal] 0 -# 2522| Type = [IntType] int -# 2522| Value = [Literal] 0 -# 2522| ValueCategory = prvalue -# 2520| getStmt(): [BlockStmt] { ... } -# 2521| getStmt(0): [DeclStmt] declaration -# 2521| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x834 -# 2521| Type = [Struct] String -# 2521| getVariable().getInitializer(): [Initializer] initializer for x834 -# 2521| getExpr(): [ConstructorCall] call to String -# 2521| Type = [VoidType] void -# 2521| ValueCategory = prvalue -# 2522| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2522| Type = [VoidType] void -# 2522| ValueCategory = prvalue -# 2522| getQualifier(): [VariableAccess] x834 -# 2522| Type = [Struct] String -# 2522| ValueCategory = lvalue -# 2522| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2522| Conversion = [BoolConversion] conversion to bool -# 2522| Type = [BoolType] bool -# 2522| Value = [CStyleCast] 0 -# 2522| ValueCategory = prvalue -# 2523| getStmt(835): [DoStmt] do (...) ... -# 2525| getCondition(): [Literal] 0 -# 2525| Type = [IntType] int -# 2525| Value = [Literal] 0 -# 2525| ValueCategory = prvalue -# 2523| getStmt(): [BlockStmt] { ... } -# 2524| getStmt(0): [DeclStmt] declaration -# 2524| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x835 -# 2524| Type = [Struct] String -# 2524| getVariable().getInitializer(): [Initializer] initializer for x835 -# 2524| getExpr(): [ConstructorCall] call to String -# 2524| Type = [VoidType] void -# 2524| ValueCategory = prvalue -# 2525| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2525| Type = [VoidType] void -# 2525| ValueCategory = prvalue -# 2525| getQualifier(): [VariableAccess] x835 -# 2525| Type = [Struct] String -# 2525| ValueCategory = lvalue -# 2525| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2525| Conversion = [BoolConversion] conversion to bool -# 2525| Type = [BoolType] bool -# 2525| Value = [CStyleCast] 0 -# 2525| ValueCategory = prvalue -# 2526| getStmt(836): [DoStmt] do (...) ... -# 2528| getCondition(): [Literal] 0 -# 2528| Type = [IntType] int -# 2528| Value = [Literal] 0 -# 2528| ValueCategory = prvalue -# 2526| getStmt(): [BlockStmt] { ... } -# 2527| getStmt(0): [DeclStmt] declaration -# 2527| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x836 -# 2527| Type = [Struct] String -# 2527| getVariable().getInitializer(): [Initializer] initializer for x836 -# 2527| getExpr(): [ConstructorCall] call to String -# 2527| Type = [VoidType] void -# 2527| ValueCategory = prvalue -# 2528| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2528| Type = [VoidType] void -# 2528| ValueCategory = prvalue -# 2528| getQualifier(): [VariableAccess] x836 -# 2528| Type = [Struct] String -# 2528| ValueCategory = lvalue -# 2528| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2528| Conversion = [BoolConversion] conversion to bool -# 2528| Type = [BoolType] bool -# 2528| Value = [CStyleCast] 0 -# 2528| ValueCategory = prvalue -# 2529| getStmt(837): [DoStmt] do (...) ... -# 2531| getCondition(): [Literal] 0 -# 2531| Type = [IntType] int -# 2531| Value = [Literal] 0 -# 2531| ValueCategory = prvalue -# 2529| getStmt(): [BlockStmt] { ... } -# 2530| getStmt(0): [DeclStmt] declaration -# 2530| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x837 -# 2530| Type = [Struct] String -# 2530| getVariable().getInitializer(): [Initializer] initializer for x837 -# 2530| getExpr(): [ConstructorCall] call to String -# 2530| Type = [VoidType] void -# 2530| ValueCategory = prvalue -# 2531| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2531| Type = [VoidType] void -# 2531| ValueCategory = prvalue -# 2531| getQualifier(): [VariableAccess] x837 -# 2531| Type = [Struct] String -# 2531| ValueCategory = lvalue -# 2531| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2531| Conversion = [BoolConversion] conversion to bool -# 2531| Type = [BoolType] bool -# 2531| Value = [CStyleCast] 0 -# 2531| ValueCategory = prvalue -# 2532| getStmt(838): [DoStmt] do (...) ... -# 2534| getCondition(): [Literal] 0 -# 2534| Type = [IntType] int -# 2534| Value = [Literal] 0 -# 2534| ValueCategory = prvalue -# 2532| getStmt(): [BlockStmt] { ... } -# 2533| getStmt(0): [DeclStmt] declaration -# 2533| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x838 -# 2533| Type = [Struct] String -# 2533| getVariable().getInitializer(): [Initializer] initializer for x838 -# 2533| getExpr(): [ConstructorCall] call to String -# 2533| Type = [VoidType] void -# 2533| ValueCategory = prvalue -# 2534| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2534| Type = [VoidType] void -# 2534| ValueCategory = prvalue -# 2534| getQualifier(): [VariableAccess] x838 -# 2534| Type = [Struct] String -# 2534| ValueCategory = lvalue -# 2534| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2534| Conversion = [BoolConversion] conversion to bool -# 2534| Type = [BoolType] bool -# 2534| Value = [CStyleCast] 0 -# 2534| ValueCategory = prvalue -# 2535| getStmt(839): [DoStmt] do (...) ... -# 2537| getCondition(): [Literal] 0 -# 2537| Type = [IntType] int -# 2537| Value = [Literal] 0 -# 2537| ValueCategory = prvalue -# 2535| getStmt(): [BlockStmt] { ... } -# 2536| getStmt(0): [DeclStmt] declaration -# 2536| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x839 -# 2536| Type = [Struct] String -# 2536| getVariable().getInitializer(): [Initializer] initializer for x839 -# 2536| getExpr(): [ConstructorCall] call to String -# 2536| Type = [VoidType] void -# 2536| ValueCategory = prvalue -# 2537| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2537| Type = [VoidType] void -# 2537| ValueCategory = prvalue -# 2537| getQualifier(): [VariableAccess] x839 -# 2537| Type = [Struct] String -# 2537| ValueCategory = lvalue -# 2537| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2537| Conversion = [BoolConversion] conversion to bool -# 2537| Type = [BoolType] bool -# 2537| Value = [CStyleCast] 0 -# 2537| ValueCategory = prvalue -# 2538| getStmt(840): [DoStmt] do (...) ... -# 2540| getCondition(): [Literal] 0 -# 2540| Type = [IntType] int -# 2540| Value = [Literal] 0 -# 2540| ValueCategory = prvalue -# 2538| getStmt(): [BlockStmt] { ... } -# 2539| getStmt(0): [DeclStmt] declaration -# 2539| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x840 -# 2539| Type = [Struct] String -# 2539| getVariable().getInitializer(): [Initializer] initializer for x840 -# 2539| getExpr(): [ConstructorCall] call to String -# 2539| Type = [VoidType] void -# 2539| ValueCategory = prvalue -# 2540| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2540| Type = [VoidType] void -# 2540| ValueCategory = prvalue -# 2540| getQualifier(): [VariableAccess] x840 -# 2540| Type = [Struct] String -# 2540| ValueCategory = lvalue -# 2540| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2540| Conversion = [BoolConversion] conversion to bool -# 2540| Type = [BoolType] bool -# 2540| Value = [CStyleCast] 0 -# 2540| ValueCategory = prvalue -# 2541| getStmt(841): [DoStmt] do (...) ... -# 2543| getCondition(): [Literal] 0 -# 2543| Type = [IntType] int -# 2543| Value = [Literal] 0 -# 2543| ValueCategory = prvalue -# 2541| getStmt(): [BlockStmt] { ... } -# 2542| getStmt(0): [DeclStmt] declaration -# 2542| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x841 -# 2542| Type = [Struct] String -# 2542| getVariable().getInitializer(): [Initializer] initializer for x841 -# 2542| getExpr(): [ConstructorCall] call to String -# 2542| Type = [VoidType] void -# 2542| ValueCategory = prvalue -# 2543| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2543| Type = [VoidType] void -# 2543| ValueCategory = prvalue -# 2543| getQualifier(): [VariableAccess] x841 -# 2543| Type = [Struct] String -# 2543| ValueCategory = lvalue -# 2543| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2543| Conversion = [BoolConversion] conversion to bool -# 2543| Type = [BoolType] bool -# 2543| Value = [CStyleCast] 0 -# 2543| ValueCategory = prvalue -# 2544| getStmt(842): [DoStmt] do (...) ... -# 2546| getCondition(): [Literal] 0 -# 2546| Type = [IntType] int -# 2546| Value = [Literal] 0 -# 2546| ValueCategory = prvalue -# 2544| getStmt(): [BlockStmt] { ... } -# 2545| getStmt(0): [DeclStmt] declaration -# 2545| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x842 -# 2545| Type = [Struct] String -# 2545| getVariable().getInitializer(): [Initializer] initializer for x842 -# 2545| getExpr(): [ConstructorCall] call to String -# 2545| Type = [VoidType] void -# 2545| ValueCategory = prvalue -# 2546| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2546| Type = [VoidType] void -# 2546| ValueCategory = prvalue -# 2546| getQualifier(): [VariableAccess] x842 -# 2546| Type = [Struct] String -# 2546| ValueCategory = lvalue -# 2546| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2546| Conversion = [BoolConversion] conversion to bool -# 2546| Type = [BoolType] bool -# 2546| Value = [CStyleCast] 0 -# 2546| ValueCategory = prvalue -# 2547| getStmt(843): [DoStmt] do (...) ... -# 2549| getCondition(): [Literal] 0 -# 2549| Type = [IntType] int -# 2549| Value = [Literal] 0 -# 2549| ValueCategory = prvalue -# 2547| getStmt(): [BlockStmt] { ... } -# 2548| getStmt(0): [DeclStmt] declaration -# 2548| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x843 -# 2548| Type = [Struct] String -# 2548| getVariable().getInitializer(): [Initializer] initializer for x843 -# 2548| getExpr(): [ConstructorCall] call to String -# 2548| Type = [VoidType] void -# 2548| ValueCategory = prvalue -# 2549| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2549| Type = [VoidType] void -# 2549| ValueCategory = prvalue -# 2549| getQualifier(): [VariableAccess] x843 -# 2549| Type = [Struct] String -# 2549| ValueCategory = lvalue -# 2549| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2549| Conversion = [BoolConversion] conversion to bool -# 2549| Type = [BoolType] bool -# 2549| Value = [CStyleCast] 0 -# 2549| ValueCategory = prvalue -# 2550| getStmt(844): [DoStmt] do (...) ... -# 2552| getCondition(): [Literal] 0 -# 2552| Type = [IntType] int -# 2552| Value = [Literal] 0 -# 2552| ValueCategory = prvalue -# 2550| getStmt(): [BlockStmt] { ... } -# 2551| getStmt(0): [DeclStmt] declaration -# 2551| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x844 -# 2551| Type = [Struct] String -# 2551| getVariable().getInitializer(): [Initializer] initializer for x844 -# 2551| getExpr(): [ConstructorCall] call to String -# 2551| Type = [VoidType] void -# 2551| ValueCategory = prvalue -# 2552| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2552| Type = [VoidType] void -# 2552| ValueCategory = prvalue -# 2552| getQualifier(): [VariableAccess] x844 -# 2552| Type = [Struct] String -# 2552| ValueCategory = lvalue -# 2552| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2552| Conversion = [BoolConversion] conversion to bool -# 2552| Type = [BoolType] bool -# 2552| Value = [CStyleCast] 0 -# 2552| ValueCategory = prvalue -# 2553| getStmt(845): [DoStmt] do (...) ... -# 2555| getCondition(): [Literal] 0 -# 2555| Type = [IntType] int -# 2555| Value = [Literal] 0 -# 2555| ValueCategory = prvalue -# 2553| getStmt(): [BlockStmt] { ... } -# 2554| getStmt(0): [DeclStmt] declaration -# 2554| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x845 -# 2554| Type = [Struct] String -# 2554| getVariable().getInitializer(): [Initializer] initializer for x845 -# 2554| getExpr(): [ConstructorCall] call to String -# 2554| Type = [VoidType] void -# 2554| ValueCategory = prvalue -# 2555| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2555| Type = [VoidType] void -# 2555| ValueCategory = prvalue -# 2555| getQualifier(): [VariableAccess] x845 -# 2555| Type = [Struct] String -# 2555| ValueCategory = lvalue -# 2555| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2555| Conversion = [BoolConversion] conversion to bool -# 2555| Type = [BoolType] bool -# 2555| Value = [CStyleCast] 0 -# 2555| ValueCategory = prvalue -# 2556| getStmt(846): [DoStmt] do (...) ... -# 2558| getCondition(): [Literal] 0 -# 2558| Type = [IntType] int -# 2558| Value = [Literal] 0 -# 2558| ValueCategory = prvalue -# 2556| getStmt(): [BlockStmt] { ... } -# 2557| getStmt(0): [DeclStmt] declaration -# 2557| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x846 -# 2557| Type = [Struct] String -# 2557| getVariable().getInitializer(): [Initializer] initializer for x846 -# 2557| getExpr(): [ConstructorCall] call to String -# 2557| Type = [VoidType] void -# 2557| ValueCategory = prvalue -# 2558| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2558| Type = [VoidType] void -# 2558| ValueCategory = prvalue -# 2558| getQualifier(): [VariableAccess] x846 -# 2558| Type = [Struct] String -# 2558| ValueCategory = lvalue -# 2558| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2558| Conversion = [BoolConversion] conversion to bool -# 2558| Type = [BoolType] bool -# 2558| Value = [CStyleCast] 0 -# 2558| ValueCategory = prvalue -# 2559| getStmt(847): [DoStmt] do (...) ... -# 2561| getCondition(): [Literal] 0 -# 2561| Type = [IntType] int -# 2561| Value = [Literal] 0 -# 2561| ValueCategory = prvalue -# 2559| getStmt(): [BlockStmt] { ... } -# 2560| getStmt(0): [DeclStmt] declaration -# 2560| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x847 -# 2560| Type = [Struct] String -# 2560| getVariable().getInitializer(): [Initializer] initializer for x847 -# 2560| getExpr(): [ConstructorCall] call to String -# 2560| Type = [VoidType] void -# 2560| ValueCategory = prvalue -# 2561| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2561| Type = [VoidType] void -# 2561| ValueCategory = prvalue -# 2561| getQualifier(): [VariableAccess] x847 -# 2561| Type = [Struct] String -# 2561| ValueCategory = lvalue -# 2561| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2561| Conversion = [BoolConversion] conversion to bool -# 2561| Type = [BoolType] bool -# 2561| Value = [CStyleCast] 0 -# 2561| ValueCategory = prvalue -# 2562| getStmt(848): [DoStmt] do (...) ... -# 2564| getCondition(): [Literal] 0 -# 2564| Type = [IntType] int -# 2564| Value = [Literal] 0 -# 2564| ValueCategory = prvalue -# 2562| getStmt(): [BlockStmt] { ... } -# 2563| getStmt(0): [DeclStmt] declaration -# 2563| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x848 -# 2563| Type = [Struct] String -# 2563| getVariable().getInitializer(): [Initializer] initializer for x848 -# 2563| getExpr(): [ConstructorCall] call to String -# 2563| Type = [VoidType] void -# 2563| ValueCategory = prvalue -# 2564| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2564| Type = [VoidType] void -# 2564| ValueCategory = prvalue -# 2564| getQualifier(): [VariableAccess] x848 -# 2564| Type = [Struct] String -# 2564| ValueCategory = lvalue -# 2564| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2564| Conversion = [BoolConversion] conversion to bool -# 2564| Type = [BoolType] bool -# 2564| Value = [CStyleCast] 0 -# 2564| ValueCategory = prvalue -# 2565| getStmt(849): [DoStmt] do (...) ... -# 2567| getCondition(): [Literal] 0 -# 2567| Type = [IntType] int -# 2567| Value = [Literal] 0 -# 2567| ValueCategory = prvalue -# 2565| getStmt(): [BlockStmt] { ... } -# 2566| getStmt(0): [DeclStmt] declaration -# 2566| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x849 -# 2566| Type = [Struct] String -# 2566| getVariable().getInitializer(): [Initializer] initializer for x849 -# 2566| getExpr(): [ConstructorCall] call to String -# 2566| Type = [VoidType] void -# 2566| ValueCategory = prvalue -# 2567| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2567| Type = [VoidType] void -# 2567| ValueCategory = prvalue -# 2567| getQualifier(): [VariableAccess] x849 -# 2567| Type = [Struct] String -# 2567| ValueCategory = lvalue -# 2567| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2567| Conversion = [BoolConversion] conversion to bool -# 2567| Type = [BoolType] bool -# 2567| Value = [CStyleCast] 0 -# 2567| ValueCategory = prvalue -# 2568| getStmt(850): [DoStmt] do (...) ... -# 2570| getCondition(): [Literal] 0 -# 2570| Type = [IntType] int -# 2570| Value = [Literal] 0 -# 2570| ValueCategory = prvalue -# 2568| getStmt(): [BlockStmt] { ... } -# 2569| getStmt(0): [DeclStmt] declaration -# 2569| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x850 -# 2569| Type = [Struct] String -# 2569| getVariable().getInitializer(): [Initializer] initializer for x850 -# 2569| getExpr(): [ConstructorCall] call to String -# 2569| Type = [VoidType] void -# 2569| ValueCategory = prvalue -# 2570| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2570| Type = [VoidType] void -# 2570| ValueCategory = prvalue -# 2570| getQualifier(): [VariableAccess] x850 -# 2570| Type = [Struct] String -# 2570| ValueCategory = lvalue -# 2570| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2570| Conversion = [BoolConversion] conversion to bool -# 2570| Type = [BoolType] bool -# 2570| Value = [CStyleCast] 0 -# 2570| ValueCategory = prvalue -# 2571| getStmt(851): [DoStmt] do (...) ... -# 2573| getCondition(): [Literal] 0 -# 2573| Type = [IntType] int -# 2573| Value = [Literal] 0 -# 2573| ValueCategory = prvalue -# 2571| getStmt(): [BlockStmt] { ... } -# 2572| getStmt(0): [DeclStmt] declaration -# 2572| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x851 -# 2572| Type = [Struct] String -# 2572| getVariable().getInitializer(): [Initializer] initializer for x851 -# 2572| getExpr(): [ConstructorCall] call to String -# 2572| Type = [VoidType] void -# 2572| ValueCategory = prvalue -# 2573| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2573| Type = [VoidType] void -# 2573| ValueCategory = prvalue -# 2573| getQualifier(): [VariableAccess] x851 -# 2573| Type = [Struct] String -# 2573| ValueCategory = lvalue -# 2573| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2573| Conversion = [BoolConversion] conversion to bool -# 2573| Type = [BoolType] bool -# 2573| Value = [CStyleCast] 0 -# 2573| ValueCategory = prvalue -# 2574| getStmt(852): [DoStmt] do (...) ... -# 2576| getCondition(): [Literal] 0 -# 2576| Type = [IntType] int -# 2576| Value = [Literal] 0 -# 2576| ValueCategory = prvalue -# 2574| getStmt(): [BlockStmt] { ... } -# 2575| getStmt(0): [DeclStmt] declaration -# 2575| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x852 -# 2575| Type = [Struct] String -# 2575| getVariable().getInitializer(): [Initializer] initializer for x852 -# 2575| getExpr(): [ConstructorCall] call to String -# 2575| Type = [VoidType] void -# 2575| ValueCategory = prvalue -# 2576| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2576| Type = [VoidType] void -# 2576| ValueCategory = prvalue -# 2576| getQualifier(): [VariableAccess] x852 -# 2576| Type = [Struct] String -# 2576| ValueCategory = lvalue -# 2576| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2576| Conversion = [BoolConversion] conversion to bool -# 2576| Type = [BoolType] bool -# 2576| Value = [CStyleCast] 0 -# 2576| ValueCategory = prvalue -# 2577| getStmt(853): [DoStmt] do (...) ... -# 2579| getCondition(): [Literal] 0 -# 2579| Type = [IntType] int -# 2579| Value = [Literal] 0 -# 2579| ValueCategory = prvalue -# 2577| getStmt(): [BlockStmt] { ... } -# 2578| getStmt(0): [DeclStmt] declaration -# 2578| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x853 -# 2578| Type = [Struct] String -# 2578| getVariable().getInitializer(): [Initializer] initializer for x853 -# 2578| getExpr(): [ConstructorCall] call to String -# 2578| Type = [VoidType] void -# 2578| ValueCategory = prvalue -# 2579| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2579| Type = [VoidType] void -# 2579| ValueCategory = prvalue -# 2579| getQualifier(): [VariableAccess] x853 -# 2579| Type = [Struct] String -# 2579| ValueCategory = lvalue -# 2579| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2579| Conversion = [BoolConversion] conversion to bool -# 2579| Type = [BoolType] bool -# 2579| Value = [CStyleCast] 0 -# 2579| ValueCategory = prvalue -# 2580| getStmt(854): [DoStmt] do (...) ... -# 2582| getCondition(): [Literal] 0 -# 2582| Type = [IntType] int -# 2582| Value = [Literal] 0 -# 2582| ValueCategory = prvalue -# 2580| getStmt(): [BlockStmt] { ... } -# 2581| getStmt(0): [DeclStmt] declaration -# 2581| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x854 -# 2581| Type = [Struct] String -# 2581| getVariable().getInitializer(): [Initializer] initializer for x854 -# 2581| getExpr(): [ConstructorCall] call to String -# 2581| Type = [VoidType] void -# 2581| ValueCategory = prvalue -# 2582| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2582| Type = [VoidType] void -# 2582| ValueCategory = prvalue -# 2582| getQualifier(): [VariableAccess] x854 -# 2582| Type = [Struct] String -# 2582| ValueCategory = lvalue -# 2582| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2582| Conversion = [BoolConversion] conversion to bool -# 2582| Type = [BoolType] bool -# 2582| Value = [CStyleCast] 0 -# 2582| ValueCategory = prvalue -# 2583| getStmt(855): [DoStmt] do (...) ... -# 2585| getCondition(): [Literal] 0 -# 2585| Type = [IntType] int -# 2585| Value = [Literal] 0 -# 2585| ValueCategory = prvalue -# 2583| getStmt(): [BlockStmt] { ... } -# 2584| getStmt(0): [DeclStmt] declaration -# 2584| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x855 -# 2584| Type = [Struct] String -# 2584| getVariable().getInitializer(): [Initializer] initializer for x855 -# 2584| getExpr(): [ConstructorCall] call to String -# 2584| Type = [VoidType] void -# 2584| ValueCategory = prvalue -# 2585| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2585| Type = [VoidType] void -# 2585| ValueCategory = prvalue -# 2585| getQualifier(): [VariableAccess] x855 -# 2585| Type = [Struct] String -# 2585| ValueCategory = lvalue -# 2585| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2585| Conversion = [BoolConversion] conversion to bool -# 2585| Type = [BoolType] bool -# 2585| Value = [CStyleCast] 0 -# 2585| ValueCategory = prvalue -# 2586| getStmt(856): [DoStmt] do (...) ... -# 2588| getCondition(): [Literal] 0 -# 2588| Type = [IntType] int -# 2588| Value = [Literal] 0 -# 2588| ValueCategory = prvalue -# 2586| getStmt(): [BlockStmt] { ... } -# 2587| getStmt(0): [DeclStmt] declaration -# 2587| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x856 -# 2587| Type = [Struct] String -# 2587| getVariable().getInitializer(): [Initializer] initializer for x856 -# 2587| getExpr(): [ConstructorCall] call to String -# 2587| Type = [VoidType] void -# 2587| ValueCategory = prvalue -# 2588| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2588| Type = [VoidType] void -# 2588| ValueCategory = prvalue -# 2588| getQualifier(): [VariableAccess] x856 -# 2588| Type = [Struct] String -# 2588| ValueCategory = lvalue -# 2588| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2588| Conversion = [BoolConversion] conversion to bool -# 2588| Type = [BoolType] bool -# 2588| Value = [CStyleCast] 0 -# 2588| ValueCategory = prvalue -# 2589| getStmt(857): [DoStmt] do (...) ... -# 2591| getCondition(): [Literal] 0 -# 2591| Type = [IntType] int -# 2591| Value = [Literal] 0 -# 2591| ValueCategory = prvalue -# 2589| getStmt(): [BlockStmt] { ... } -# 2590| getStmt(0): [DeclStmt] declaration -# 2590| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x857 -# 2590| Type = [Struct] String -# 2590| getVariable().getInitializer(): [Initializer] initializer for x857 -# 2590| getExpr(): [ConstructorCall] call to String -# 2590| Type = [VoidType] void -# 2590| ValueCategory = prvalue -# 2591| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2591| Type = [VoidType] void -# 2591| ValueCategory = prvalue -# 2591| getQualifier(): [VariableAccess] x857 -# 2591| Type = [Struct] String -# 2591| ValueCategory = lvalue -# 2591| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2591| Conversion = [BoolConversion] conversion to bool -# 2591| Type = [BoolType] bool -# 2591| Value = [CStyleCast] 0 -# 2591| ValueCategory = prvalue -# 2592| getStmt(858): [DoStmt] do (...) ... -# 2594| getCondition(): [Literal] 0 -# 2594| Type = [IntType] int -# 2594| Value = [Literal] 0 -# 2594| ValueCategory = prvalue -# 2592| getStmt(): [BlockStmt] { ... } -# 2593| getStmt(0): [DeclStmt] declaration -# 2593| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x858 -# 2593| Type = [Struct] String -# 2593| getVariable().getInitializer(): [Initializer] initializer for x858 -# 2593| getExpr(): [ConstructorCall] call to String -# 2593| Type = [VoidType] void -# 2593| ValueCategory = prvalue -# 2594| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2594| Type = [VoidType] void -# 2594| ValueCategory = prvalue -# 2594| getQualifier(): [VariableAccess] x858 -# 2594| Type = [Struct] String -# 2594| ValueCategory = lvalue -# 2594| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2594| Conversion = [BoolConversion] conversion to bool -# 2594| Type = [BoolType] bool -# 2594| Value = [CStyleCast] 0 -# 2594| ValueCategory = prvalue -# 2595| getStmt(859): [DoStmt] do (...) ... -# 2597| getCondition(): [Literal] 0 -# 2597| Type = [IntType] int -# 2597| Value = [Literal] 0 -# 2597| ValueCategory = prvalue -# 2595| getStmt(): [BlockStmt] { ... } -# 2596| getStmt(0): [DeclStmt] declaration -# 2596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x859 -# 2596| Type = [Struct] String -# 2596| getVariable().getInitializer(): [Initializer] initializer for x859 -# 2596| getExpr(): [ConstructorCall] call to String -# 2596| Type = [VoidType] void -# 2596| ValueCategory = prvalue -# 2597| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2597| Type = [VoidType] void -# 2597| ValueCategory = prvalue -# 2597| getQualifier(): [VariableAccess] x859 -# 2597| Type = [Struct] String -# 2597| ValueCategory = lvalue -# 2597| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2597| Conversion = [BoolConversion] conversion to bool -# 2597| Type = [BoolType] bool -# 2597| Value = [CStyleCast] 0 -# 2597| ValueCategory = prvalue -# 2598| getStmt(860): [DoStmt] do (...) ... -# 2600| getCondition(): [Literal] 0 -# 2600| Type = [IntType] int -# 2600| Value = [Literal] 0 -# 2600| ValueCategory = prvalue -# 2598| getStmt(): [BlockStmt] { ... } -# 2599| getStmt(0): [DeclStmt] declaration -# 2599| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x860 -# 2599| Type = [Struct] String -# 2599| getVariable().getInitializer(): [Initializer] initializer for x860 -# 2599| getExpr(): [ConstructorCall] call to String -# 2599| Type = [VoidType] void -# 2599| ValueCategory = prvalue -# 2600| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2600| Type = [VoidType] void -# 2600| ValueCategory = prvalue -# 2600| getQualifier(): [VariableAccess] x860 -# 2600| Type = [Struct] String -# 2600| ValueCategory = lvalue -# 2600| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2600| Conversion = [BoolConversion] conversion to bool -# 2600| Type = [BoolType] bool -# 2600| Value = [CStyleCast] 0 -# 2600| ValueCategory = prvalue -# 2601| getStmt(861): [DoStmt] do (...) ... -# 2603| getCondition(): [Literal] 0 -# 2603| Type = [IntType] int -# 2603| Value = [Literal] 0 -# 2603| ValueCategory = prvalue -# 2601| getStmt(): [BlockStmt] { ... } -# 2602| getStmt(0): [DeclStmt] declaration -# 2602| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x861 -# 2602| Type = [Struct] String -# 2602| getVariable().getInitializer(): [Initializer] initializer for x861 -# 2602| getExpr(): [ConstructorCall] call to String -# 2602| Type = [VoidType] void -# 2602| ValueCategory = prvalue -# 2603| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2603| Type = [VoidType] void -# 2603| ValueCategory = prvalue -# 2603| getQualifier(): [VariableAccess] x861 -# 2603| Type = [Struct] String -# 2603| ValueCategory = lvalue -# 2603| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2603| Conversion = [BoolConversion] conversion to bool -# 2603| Type = [BoolType] bool -# 2603| Value = [CStyleCast] 0 -# 2603| ValueCategory = prvalue -# 2604| getStmt(862): [DoStmt] do (...) ... -# 2606| getCondition(): [Literal] 0 -# 2606| Type = [IntType] int -# 2606| Value = [Literal] 0 -# 2606| ValueCategory = prvalue -# 2604| getStmt(): [BlockStmt] { ... } -# 2605| getStmt(0): [DeclStmt] declaration -# 2605| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x862 -# 2605| Type = [Struct] String -# 2605| getVariable().getInitializer(): [Initializer] initializer for x862 -# 2605| getExpr(): [ConstructorCall] call to String -# 2605| Type = [VoidType] void -# 2605| ValueCategory = prvalue -# 2606| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2606| Type = [VoidType] void -# 2606| ValueCategory = prvalue -# 2606| getQualifier(): [VariableAccess] x862 -# 2606| Type = [Struct] String -# 2606| ValueCategory = lvalue -# 2606| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2606| Conversion = [BoolConversion] conversion to bool -# 2606| Type = [BoolType] bool -# 2606| Value = [CStyleCast] 0 -# 2606| ValueCategory = prvalue -# 2607| getStmt(863): [DoStmt] do (...) ... -# 2609| getCondition(): [Literal] 0 -# 2609| Type = [IntType] int -# 2609| Value = [Literal] 0 -# 2609| ValueCategory = prvalue -# 2607| getStmt(): [BlockStmt] { ... } -# 2608| getStmt(0): [DeclStmt] declaration -# 2608| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x863 -# 2608| Type = [Struct] String -# 2608| getVariable().getInitializer(): [Initializer] initializer for x863 -# 2608| getExpr(): [ConstructorCall] call to String -# 2608| Type = [VoidType] void -# 2608| ValueCategory = prvalue -# 2609| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2609| Type = [VoidType] void -# 2609| ValueCategory = prvalue -# 2609| getQualifier(): [VariableAccess] x863 -# 2609| Type = [Struct] String -# 2609| ValueCategory = lvalue -# 2609| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2609| Conversion = [BoolConversion] conversion to bool -# 2609| Type = [BoolType] bool -# 2609| Value = [CStyleCast] 0 -# 2609| ValueCategory = prvalue -# 2610| getStmt(864): [DoStmt] do (...) ... -# 2612| getCondition(): [Literal] 0 -# 2612| Type = [IntType] int -# 2612| Value = [Literal] 0 -# 2612| ValueCategory = prvalue -# 2610| getStmt(): [BlockStmt] { ... } -# 2611| getStmt(0): [DeclStmt] declaration -# 2611| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x864 -# 2611| Type = [Struct] String -# 2611| getVariable().getInitializer(): [Initializer] initializer for x864 -# 2611| getExpr(): [ConstructorCall] call to String -# 2611| Type = [VoidType] void -# 2611| ValueCategory = prvalue -# 2612| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2612| Type = [VoidType] void -# 2612| ValueCategory = prvalue -# 2612| getQualifier(): [VariableAccess] x864 -# 2612| Type = [Struct] String -# 2612| ValueCategory = lvalue -# 2612| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2612| Conversion = [BoolConversion] conversion to bool -# 2612| Type = [BoolType] bool -# 2612| Value = [CStyleCast] 0 -# 2612| ValueCategory = prvalue -# 2613| getStmt(865): [DoStmt] do (...) ... -# 2615| getCondition(): [Literal] 0 -# 2615| Type = [IntType] int -# 2615| Value = [Literal] 0 -# 2615| ValueCategory = prvalue -# 2613| getStmt(): [BlockStmt] { ... } -# 2614| getStmt(0): [DeclStmt] declaration -# 2614| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x865 -# 2614| Type = [Struct] String -# 2614| getVariable().getInitializer(): [Initializer] initializer for x865 -# 2614| getExpr(): [ConstructorCall] call to String -# 2614| Type = [VoidType] void -# 2614| ValueCategory = prvalue -# 2615| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2615| Type = [VoidType] void -# 2615| ValueCategory = prvalue -# 2615| getQualifier(): [VariableAccess] x865 -# 2615| Type = [Struct] String -# 2615| ValueCategory = lvalue -# 2615| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2615| Conversion = [BoolConversion] conversion to bool -# 2615| Type = [BoolType] bool -# 2615| Value = [CStyleCast] 0 -# 2615| ValueCategory = prvalue -# 2616| getStmt(866): [DoStmt] do (...) ... -# 2618| getCondition(): [Literal] 0 -# 2618| Type = [IntType] int -# 2618| Value = [Literal] 0 -# 2618| ValueCategory = prvalue -# 2616| getStmt(): [BlockStmt] { ... } -# 2617| getStmt(0): [DeclStmt] declaration -# 2617| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x866 -# 2617| Type = [Struct] String -# 2617| getVariable().getInitializer(): [Initializer] initializer for x866 -# 2617| getExpr(): [ConstructorCall] call to String -# 2617| Type = [VoidType] void -# 2617| ValueCategory = prvalue -# 2618| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2618| Type = [VoidType] void -# 2618| ValueCategory = prvalue -# 2618| getQualifier(): [VariableAccess] x866 -# 2618| Type = [Struct] String -# 2618| ValueCategory = lvalue -# 2618| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2618| Conversion = [BoolConversion] conversion to bool -# 2618| Type = [BoolType] bool -# 2618| Value = [CStyleCast] 0 -# 2618| ValueCategory = prvalue -# 2619| getStmt(867): [DoStmt] do (...) ... -# 2621| getCondition(): [Literal] 0 -# 2621| Type = [IntType] int -# 2621| Value = [Literal] 0 -# 2621| ValueCategory = prvalue -# 2619| getStmt(): [BlockStmt] { ... } -# 2620| getStmt(0): [DeclStmt] declaration -# 2620| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x867 -# 2620| Type = [Struct] String -# 2620| getVariable().getInitializer(): [Initializer] initializer for x867 -# 2620| getExpr(): [ConstructorCall] call to String -# 2620| Type = [VoidType] void -# 2620| ValueCategory = prvalue -# 2621| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2621| Type = [VoidType] void -# 2621| ValueCategory = prvalue -# 2621| getQualifier(): [VariableAccess] x867 -# 2621| Type = [Struct] String -# 2621| ValueCategory = lvalue -# 2621| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2621| Conversion = [BoolConversion] conversion to bool -# 2621| Type = [BoolType] bool -# 2621| Value = [CStyleCast] 0 -# 2621| ValueCategory = prvalue -# 2622| getStmt(868): [DoStmt] do (...) ... -# 2624| getCondition(): [Literal] 0 -# 2624| Type = [IntType] int -# 2624| Value = [Literal] 0 -# 2624| ValueCategory = prvalue -# 2622| getStmt(): [BlockStmt] { ... } -# 2623| getStmt(0): [DeclStmt] declaration -# 2623| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x868 -# 2623| Type = [Struct] String -# 2623| getVariable().getInitializer(): [Initializer] initializer for x868 -# 2623| getExpr(): [ConstructorCall] call to String -# 2623| Type = [VoidType] void -# 2623| ValueCategory = prvalue -# 2624| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2624| Type = [VoidType] void -# 2624| ValueCategory = prvalue -# 2624| getQualifier(): [VariableAccess] x868 -# 2624| Type = [Struct] String -# 2624| ValueCategory = lvalue -# 2624| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2624| Conversion = [BoolConversion] conversion to bool -# 2624| Type = [BoolType] bool -# 2624| Value = [CStyleCast] 0 -# 2624| ValueCategory = prvalue -# 2625| getStmt(869): [DoStmt] do (...) ... -# 2627| getCondition(): [Literal] 0 -# 2627| Type = [IntType] int -# 2627| Value = [Literal] 0 -# 2627| ValueCategory = prvalue -# 2625| getStmt(): [BlockStmt] { ... } -# 2626| getStmt(0): [DeclStmt] declaration -# 2626| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x869 -# 2626| Type = [Struct] String -# 2626| getVariable().getInitializer(): [Initializer] initializer for x869 -# 2626| getExpr(): [ConstructorCall] call to String -# 2626| Type = [VoidType] void -# 2626| ValueCategory = prvalue -# 2627| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2627| Type = [VoidType] void -# 2627| ValueCategory = prvalue -# 2627| getQualifier(): [VariableAccess] x869 -# 2627| Type = [Struct] String -# 2627| ValueCategory = lvalue -# 2627| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2627| Conversion = [BoolConversion] conversion to bool -# 2627| Type = [BoolType] bool -# 2627| Value = [CStyleCast] 0 -# 2627| ValueCategory = prvalue -# 2628| getStmt(870): [DoStmt] do (...) ... -# 2630| getCondition(): [Literal] 0 -# 2630| Type = [IntType] int -# 2630| Value = [Literal] 0 -# 2630| ValueCategory = prvalue -# 2628| getStmt(): [BlockStmt] { ... } -# 2629| getStmt(0): [DeclStmt] declaration -# 2629| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x870 -# 2629| Type = [Struct] String -# 2629| getVariable().getInitializer(): [Initializer] initializer for x870 -# 2629| getExpr(): [ConstructorCall] call to String -# 2629| Type = [VoidType] void -# 2629| ValueCategory = prvalue -# 2630| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2630| Type = [VoidType] void -# 2630| ValueCategory = prvalue -# 2630| getQualifier(): [VariableAccess] x870 -# 2630| Type = [Struct] String -# 2630| ValueCategory = lvalue -# 2630| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2630| Conversion = [BoolConversion] conversion to bool -# 2630| Type = [BoolType] bool -# 2630| Value = [CStyleCast] 0 -# 2630| ValueCategory = prvalue -# 2631| getStmt(871): [DoStmt] do (...) ... -# 2633| getCondition(): [Literal] 0 -# 2633| Type = [IntType] int -# 2633| Value = [Literal] 0 -# 2633| ValueCategory = prvalue -# 2631| getStmt(): [BlockStmt] { ... } -# 2632| getStmt(0): [DeclStmt] declaration -# 2632| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x871 -# 2632| Type = [Struct] String -# 2632| getVariable().getInitializer(): [Initializer] initializer for x871 -# 2632| getExpr(): [ConstructorCall] call to String -# 2632| Type = [VoidType] void -# 2632| ValueCategory = prvalue -# 2633| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2633| Type = [VoidType] void -# 2633| ValueCategory = prvalue -# 2633| getQualifier(): [VariableAccess] x871 -# 2633| Type = [Struct] String -# 2633| ValueCategory = lvalue -# 2633| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2633| Conversion = [BoolConversion] conversion to bool -# 2633| Type = [BoolType] bool -# 2633| Value = [CStyleCast] 0 -# 2633| ValueCategory = prvalue -# 2634| getStmt(872): [DoStmt] do (...) ... -# 2636| getCondition(): [Literal] 0 -# 2636| Type = [IntType] int -# 2636| Value = [Literal] 0 -# 2636| ValueCategory = prvalue -# 2634| getStmt(): [BlockStmt] { ... } -# 2635| getStmt(0): [DeclStmt] declaration -# 2635| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x872 -# 2635| Type = [Struct] String -# 2635| getVariable().getInitializer(): [Initializer] initializer for x872 -# 2635| getExpr(): [ConstructorCall] call to String -# 2635| Type = [VoidType] void -# 2635| ValueCategory = prvalue -# 2636| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2636| Type = [VoidType] void -# 2636| ValueCategory = prvalue -# 2636| getQualifier(): [VariableAccess] x872 -# 2636| Type = [Struct] String -# 2636| ValueCategory = lvalue -# 2636| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2636| Conversion = [BoolConversion] conversion to bool -# 2636| Type = [BoolType] bool -# 2636| Value = [CStyleCast] 0 -# 2636| ValueCategory = prvalue -# 2637| getStmt(873): [DoStmt] do (...) ... -# 2639| getCondition(): [Literal] 0 -# 2639| Type = [IntType] int -# 2639| Value = [Literal] 0 -# 2639| ValueCategory = prvalue -# 2637| getStmt(): [BlockStmt] { ... } -# 2638| getStmt(0): [DeclStmt] declaration -# 2638| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x873 -# 2638| Type = [Struct] String -# 2638| getVariable().getInitializer(): [Initializer] initializer for x873 -# 2638| getExpr(): [ConstructorCall] call to String -# 2638| Type = [VoidType] void -# 2638| ValueCategory = prvalue -# 2639| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2639| Type = [VoidType] void -# 2639| ValueCategory = prvalue -# 2639| getQualifier(): [VariableAccess] x873 -# 2639| Type = [Struct] String -# 2639| ValueCategory = lvalue -# 2639| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2639| Conversion = [BoolConversion] conversion to bool -# 2639| Type = [BoolType] bool -# 2639| Value = [CStyleCast] 0 -# 2639| ValueCategory = prvalue -# 2640| getStmt(874): [DoStmt] do (...) ... -# 2642| getCondition(): [Literal] 0 -# 2642| Type = [IntType] int -# 2642| Value = [Literal] 0 -# 2642| ValueCategory = prvalue -# 2640| getStmt(): [BlockStmt] { ... } -# 2641| getStmt(0): [DeclStmt] declaration -# 2641| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x874 -# 2641| Type = [Struct] String -# 2641| getVariable().getInitializer(): [Initializer] initializer for x874 -# 2641| getExpr(): [ConstructorCall] call to String -# 2641| Type = [VoidType] void -# 2641| ValueCategory = prvalue -# 2642| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2642| Type = [VoidType] void -# 2642| ValueCategory = prvalue -# 2642| getQualifier(): [VariableAccess] x874 -# 2642| Type = [Struct] String -# 2642| ValueCategory = lvalue -# 2642| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2642| Conversion = [BoolConversion] conversion to bool -# 2642| Type = [BoolType] bool -# 2642| Value = [CStyleCast] 0 -# 2642| ValueCategory = prvalue -# 2643| getStmt(875): [DoStmt] do (...) ... -# 2645| getCondition(): [Literal] 0 -# 2645| Type = [IntType] int -# 2645| Value = [Literal] 0 -# 2645| ValueCategory = prvalue -# 2643| getStmt(): [BlockStmt] { ... } -# 2644| getStmt(0): [DeclStmt] declaration -# 2644| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x875 -# 2644| Type = [Struct] String -# 2644| getVariable().getInitializer(): [Initializer] initializer for x875 -# 2644| getExpr(): [ConstructorCall] call to String -# 2644| Type = [VoidType] void -# 2644| ValueCategory = prvalue -# 2645| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2645| Type = [VoidType] void -# 2645| ValueCategory = prvalue -# 2645| getQualifier(): [VariableAccess] x875 -# 2645| Type = [Struct] String -# 2645| ValueCategory = lvalue -# 2645| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2645| Conversion = [BoolConversion] conversion to bool -# 2645| Type = [BoolType] bool -# 2645| Value = [CStyleCast] 0 -# 2645| ValueCategory = prvalue -# 2646| getStmt(876): [DoStmt] do (...) ... -# 2648| getCondition(): [Literal] 0 -# 2648| Type = [IntType] int -# 2648| Value = [Literal] 0 -# 2648| ValueCategory = prvalue -# 2646| getStmt(): [BlockStmt] { ... } -# 2647| getStmt(0): [DeclStmt] declaration -# 2647| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x876 -# 2647| Type = [Struct] String -# 2647| getVariable().getInitializer(): [Initializer] initializer for x876 -# 2647| getExpr(): [ConstructorCall] call to String -# 2647| Type = [VoidType] void -# 2647| ValueCategory = prvalue -# 2648| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2648| Type = [VoidType] void -# 2648| ValueCategory = prvalue -# 2648| getQualifier(): [VariableAccess] x876 -# 2648| Type = [Struct] String -# 2648| ValueCategory = lvalue -# 2648| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2648| Conversion = [BoolConversion] conversion to bool -# 2648| Type = [BoolType] bool -# 2648| Value = [CStyleCast] 0 -# 2648| ValueCategory = prvalue -# 2649| getStmt(877): [DoStmt] do (...) ... -# 2651| getCondition(): [Literal] 0 -# 2651| Type = [IntType] int -# 2651| Value = [Literal] 0 -# 2651| ValueCategory = prvalue -# 2649| getStmt(): [BlockStmt] { ... } -# 2650| getStmt(0): [DeclStmt] declaration -# 2650| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x877 -# 2650| Type = [Struct] String -# 2650| getVariable().getInitializer(): [Initializer] initializer for x877 -# 2650| getExpr(): [ConstructorCall] call to String -# 2650| Type = [VoidType] void -# 2650| ValueCategory = prvalue -# 2651| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2651| Type = [VoidType] void -# 2651| ValueCategory = prvalue -# 2651| getQualifier(): [VariableAccess] x877 -# 2651| Type = [Struct] String -# 2651| ValueCategory = lvalue -# 2651| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2651| Conversion = [BoolConversion] conversion to bool -# 2651| Type = [BoolType] bool -# 2651| Value = [CStyleCast] 0 -# 2651| ValueCategory = prvalue -# 2652| getStmt(878): [DoStmt] do (...) ... -# 2654| getCondition(): [Literal] 0 -# 2654| Type = [IntType] int -# 2654| Value = [Literal] 0 -# 2654| ValueCategory = prvalue -# 2652| getStmt(): [BlockStmt] { ... } -# 2653| getStmt(0): [DeclStmt] declaration -# 2653| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x878 -# 2653| Type = [Struct] String -# 2653| getVariable().getInitializer(): [Initializer] initializer for x878 -# 2653| getExpr(): [ConstructorCall] call to String -# 2653| Type = [VoidType] void -# 2653| ValueCategory = prvalue -# 2654| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2654| Type = [VoidType] void -# 2654| ValueCategory = prvalue -# 2654| getQualifier(): [VariableAccess] x878 -# 2654| Type = [Struct] String -# 2654| ValueCategory = lvalue -# 2654| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2654| Conversion = [BoolConversion] conversion to bool -# 2654| Type = [BoolType] bool -# 2654| Value = [CStyleCast] 0 -# 2654| ValueCategory = prvalue -# 2655| getStmt(879): [DoStmt] do (...) ... -# 2657| getCondition(): [Literal] 0 -# 2657| Type = [IntType] int -# 2657| Value = [Literal] 0 -# 2657| ValueCategory = prvalue -# 2655| getStmt(): [BlockStmt] { ... } -# 2656| getStmt(0): [DeclStmt] declaration -# 2656| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x879 -# 2656| Type = [Struct] String -# 2656| getVariable().getInitializer(): [Initializer] initializer for x879 -# 2656| getExpr(): [ConstructorCall] call to String -# 2656| Type = [VoidType] void -# 2656| ValueCategory = prvalue -# 2657| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2657| Type = [VoidType] void -# 2657| ValueCategory = prvalue -# 2657| getQualifier(): [VariableAccess] x879 -# 2657| Type = [Struct] String -# 2657| ValueCategory = lvalue -# 2657| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2657| Conversion = [BoolConversion] conversion to bool -# 2657| Type = [BoolType] bool -# 2657| Value = [CStyleCast] 0 -# 2657| ValueCategory = prvalue -# 2658| getStmt(880): [DoStmt] do (...) ... -# 2660| getCondition(): [Literal] 0 -# 2660| Type = [IntType] int -# 2660| Value = [Literal] 0 -# 2660| ValueCategory = prvalue -# 2658| getStmt(): [BlockStmt] { ... } -# 2659| getStmt(0): [DeclStmt] declaration -# 2659| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x880 -# 2659| Type = [Struct] String -# 2659| getVariable().getInitializer(): [Initializer] initializer for x880 -# 2659| getExpr(): [ConstructorCall] call to String -# 2659| Type = [VoidType] void -# 2659| ValueCategory = prvalue -# 2660| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2660| Type = [VoidType] void -# 2660| ValueCategory = prvalue -# 2660| getQualifier(): [VariableAccess] x880 -# 2660| Type = [Struct] String -# 2660| ValueCategory = lvalue -# 2660| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2660| Conversion = [BoolConversion] conversion to bool -# 2660| Type = [BoolType] bool -# 2660| Value = [CStyleCast] 0 -# 2660| ValueCategory = prvalue -# 2661| getStmt(881): [DoStmt] do (...) ... -# 2663| getCondition(): [Literal] 0 -# 2663| Type = [IntType] int -# 2663| Value = [Literal] 0 -# 2663| ValueCategory = prvalue -# 2661| getStmt(): [BlockStmt] { ... } -# 2662| getStmt(0): [DeclStmt] declaration -# 2662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x881 -# 2662| Type = [Struct] String -# 2662| getVariable().getInitializer(): [Initializer] initializer for x881 -# 2662| getExpr(): [ConstructorCall] call to String -# 2662| Type = [VoidType] void -# 2662| ValueCategory = prvalue -# 2663| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2663| Type = [VoidType] void -# 2663| ValueCategory = prvalue -# 2663| getQualifier(): [VariableAccess] x881 -# 2663| Type = [Struct] String -# 2663| ValueCategory = lvalue -# 2663| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2663| Conversion = [BoolConversion] conversion to bool -# 2663| Type = [BoolType] bool -# 2663| Value = [CStyleCast] 0 -# 2663| ValueCategory = prvalue -# 2664| getStmt(882): [DoStmt] do (...) ... -# 2666| getCondition(): [Literal] 0 -# 2666| Type = [IntType] int -# 2666| Value = [Literal] 0 -# 2666| ValueCategory = prvalue -# 2664| getStmt(): [BlockStmt] { ... } -# 2665| getStmt(0): [DeclStmt] declaration -# 2665| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x882 -# 2665| Type = [Struct] String -# 2665| getVariable().getInitializer(): [Initializer] initializer for x882 -# 2665| getExpr(): [ConstructorCall] call to String -# 2665| Type = [VoidType] void -# 2665| ValueCategory = prvalue -# 2666| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2666| Type = [VoidType] void -# 2666| ValueCategory = prvalue -# 2666| getQualifier(): [VariableAccess] x882 -# 2666| Type = [Struct] String -# 2666| ValueCategory = lvalue -# 2666| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2666| Conversion = [BoolConversion] conversion to bool -# 2666| Type = [BoolType] bool -# 2666| Value = [CStyleCast] 0 -# 2666| ValueCategory = prvalue -# 2667| getStmt(883): [DoStmt] do (...) ... -# 2669| getCondition(): [Literal] 0 -# 2669| Type = [IntType] int -# 2669| Value = [Literal] 0 -# 2669| ValueCategory = prvalue -# 2667| getStmt(): [BlockStmt] { ... } -# 2668| getStmt(0): [DeclStmt] declaration -# 2668| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x883 -# 2668| Type = [Struct] String -# 2668| getVariable().getInitializer(): [Initializer] initializer for x883 -# 2668| getExpr(): [ConstructorCall] call to String -# 2668| Type = [VoidType] void -# 2668| ValueCategory = prvalue -# 2669| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2669| Type = [VoidType] void -# 2669| ValueCategory = prvalue -# 2669| getQualifier(): [VariableAccess] x883 -# 2669| Type = [Struct] String -# 2669| ValueCategory = lvalue -# 2669| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2669| Conversion = [BoolConversion] conversion to bool -# 2669| Type = [BoolType] bool -# 2669| Value = [CStyleCast] 0 -# 2669| ValueCategory = prvalue -# 2670| getStmt(884): [DoStmt] do (...) ... -# 2672| getCondition(): [Literal] 0 -# 2672| Type = [IntType] int -# 2672| Value = [Literal] 0 -# 2672| ValueCategory = prvalue -# 2670| getStmt(): [BlockStmt] { ... } -# 2671| getStmt(0): [DeclStmt] declaration -# 2671| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x884 -# 2671| Type = [Struct] String -# 2671| getVariable().getInitializer(): [Initializer] initializer for x884 -# 2671| getExpr(): [ConstructorCall] call to String -# 2671| Type = [VoidType] void -# 2671| ValueCategory = prvalue -# 2672| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2672| Type = [VoidType] void -# 2672| ValueCategory = prvalue -# 2672| getQualifier(): [VariableAccess] x884 -# 2672| Type = [Struct] String -# 2672| ValueCategory = lvalue -# 2672| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2672| Conversion = [BoolConversion] conversion to bool -# 2672| Type = [BoolType] bool -# 2672| Value = [CStyleCast] 0 -# 2672| ValueCategory = prvalue -# 2673| getStmt(885): [DoStmt] do (...) ... -# 2675| getCondition(): [Literal] 0 -# 2675| Type = [IntType] int -# 2675| Value = [Literal] 0 -# 2675| ValueCategory = prvalue -# 2673| getStmt(): [BlockStmt] { ... } -# 2674| getStmt(0): [DeclStmt] declaration -# 2674| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x885 -# 2674| Type = [Struct] String -# 2674| getVariable().getInitializer(): [Initializer] initializer for x885 -# 2674| getExpr(): [ConstructorCall] call to String -# 2674| Type = [VoidType] void -# 2674| ValueCategory = prvalue -# 2675| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2675| Type = [VoidType] void -# 2675| ValueCategory = prvalue -# 2675| getQualifier(): [VariableAccess] x885 -# 2675| Type = [Struct] String -# 2675| ValueCategory = lvalue -# 2675| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2675| Conversion = [BoolConversion] conversion to bool -# 2675| Type = [BoolType] bool -# 2675| Value = [CStyleCast] 0 -# 2675| ValueCategory = prvalue -# 2676| getStmt(886): [DoStmt] do (...) ... -# 2678| getCondition(): [Literal] 0 -# 2678| Type = [IntType] int -# 2678| Value = [Literal] 0 -# 2678| ValueCategory = prvalue -# 2676| getStmt(): [BlockStmt] { ... } -# 2677| getStmt(0): [DeclStmt] declaration -# 2677| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x886 -# 2677| Type = [Struct] String -# 2677| getVariable().getInitializer(): [Initializer] initializer for x886 -# 2677| getExpr(): [ConstructorCall] call to String -# 2677| Type = [VoidType] void -# 2677| ValueCategory = prvalue -# 2678| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2678| Type = [VoidType] void -# 2678| ValueCategory = prvalue -# 2678| getQualifier(): [VariableAccess] x886 -# 2678| Type = [Struct] String -# 2678| ValueCategory = lvalue -# 2678| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2678| Conversion = [BoolConversion] conversion to bool -# 2678| Type = [BoolType] bool -# 2678| Value = [CStyleCast] 0 -# 2678| ValueCategory = prvalue -# 2679| getStmt(887): [DoStmt] do (...) ... -# 2681| getCondition(): [Literal] 0 -# 2681| Type = [IntType] int -# 2681| Value = [Literal] 0 -# 2681| ValueCategory = prvalue -# 2679| getStmt(): [BlockStmt] { ... } -# 2680| getStmt(0): [DeclStmt] declaration -# 2680| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x887 -# 2680| Type = [Struct] String -# 2680| getVariable().getInitializer(): [Initializer] initializer for x887 -# 2680| getExpr(): [ConstructorCall] call to String -# 2680| Type = [VoidType] void -# 2680| ValueCategory = prvalue -# 2681| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2681| Type = [VoidType] void -# 2681| ValueCategory = prvalue -# 2681| getQualifier(): [VariableAccess] x887 -# 2681| Type = [Struct] String -# 2681| ValueCategory = lvalue -# 2681| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2681| Conversion = [BoolConversion] conversion to bool -# 2681| Type = [BoolType] bool -# 2681| Value = [CStyleCast] 0 -# 2681| ValueCategory = prvalue -# 2682| getStmt(888): [DoStmt] do (...) ... -# 2684| getCondition(): [Literal] 0 -# 2684| Type = [IntType] int -# 2684| Value = [Literal] 0 -# 2684| ValueCategory = prvalue -# 2682| getStmt(): [BlockStmt] { ... } -# 2683| getStmt(0): [DeclStmt] declaration -# 2683| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x888 -# 2683| Type = [Struct] String -# 2683| getVariable().getInitializer(): [Initializer] initializer for x888 -# 2683| getExpr(): [ConstructorCall] call to String -# 2683| Type = [VoidType] void -# 2683| ValueCategory = prvalue -# 2684| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2684| Type = [VoidType] void -# 2684| ValueCategory = prvalue -# 2684| getQualifier(): [VariableAccess] x888 -# 2684| Type = [Struct] String -# 2684| ValueCategory = lvalue -# 2684| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2684| Conversion = [BoolConversion] conversion to bool -# 2684| Type = [BoolType] bool -# 2684| Value = [CStyleCast] 0 -# 2684| ValueCategory = prvalue -# 2685| getStmt(889): [DoStmt] do (...) ... -# 2687| getCondition(): [Literal] 0 -# 2687| Type = [IntType] int -# 2687| Value = [Literal] 0 -# 2687| ValueCategory = prvalue -# 2685| getStmt(): [BlockStmt] { ... } -# 2686| getStmt(0): [DeclStmt] declaration -# 2686| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x889 -# 2686| Type = [Struct] String -# 2686| getVariable().getInitializer(): [Initializer] initializer for x889 -# 2686| getExpr(): [ConstructorCall] call to String -# 2686| Type = [VoidType] void -# 2686| ValueCategory = prvalue -# 2687| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2687| Type = [VoidType] void -# 2687| ValueCategory = prvalue -# 2687| getQualifier(): [VariableAccess] x889 -# 2687| Type = [Struct] String -# 2687| ValueCategory = lvalue -# 2687| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2687| Conversion = [BoolConversion] conversion to bool -# 2687| Type = [BoolType] bool -# 2687| Value = [CStyleCast] 0 -# 2687| ValueCategory = prvalue -# 2688| getStmt(890): [DoStmt] do (...) ... -# 2690| getCondition(): [Literal] 0 -# 2690| Type = [IntType] int -# 2690| Value = [Literal] 0 -# 2690| ValueCategory = prvalue -# 2688| getStmt(): [BlockStmt] { ... } -# 2689| getStmt(0): [DeclStmt] declaration -# 2689| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x890 -# 2689| Type = [Struct] String -# 2689| getVariable().getInitializer(): [Initializer] initializer for x890 -# 2689| getExpr(): [ConstructorCall] call to String -# 2689| Type = [VoidType] void -# 2689| ValueCategory = prvalue -# 2690| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2690| Type = [VoidType] void -# 2690| ValueCategory = prvalue -# 2690| getQualifier(): [VariableAccess] x890 -# 2690| Type = [Struct] String -# 2690| ValueCategory = lvalue -# 2690| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2690| Conversion = [BoolConversion] conversion to bool -# 2690| Type = [BoolType] bool -# 2690| Value = [CStyleCast] 0 -# 2690| ValueCategory = prvalue -# 2691| getStmt(891): [DoStmt] do (...) ... -# 2693| getCondition(): [Literal] 0 -# 2693| Type = [IntType] int -# 2693| Value = [Literal] 0 -# 2693| ValueCategory = prvalue -# 2691| getStmt(): [BlockStmt] { ... } -# 2692| getStmt(0): [DeclStmt] declaration -# 2692| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x891 -# 2692| Type = [Struct] String -# 2692| getVariable().getInitializer(): [Initializer] initializer for x891 -# 2692| getExpr(): [ConstructorCall] call to String -# 2692| Type = [VoidType] void -# 2692| ValueCategory = prvalue -# 2693| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2693| Type = [VoidType] void -# 2693| ValueCategory = prvalue -# 2693| getQualifier(): [VariableAccess] x891 -# 2693| Type = [Struct] String -# 2693| ValueCategory = lvalue -# 2693| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2693| Conversion = [BoolConversion] conversion to bool -# 2693| Type = [BoolType] bool -# 2693| Value = [CStyleCast] 0 -# 2693| ValueCategory = prvalue -# 2694| getStmt(892): [DoStmt] do (...) ... -# 2696| getCondition(): [Literal] 0 -# 2696| Type = [IntType] int -# 2696| Value = [Literal] 0 -# 2696| ValueCategory = prvalue -# 2694| getStmt(): [BlockStmt] { ... } -# 2695| getStmt(0): [DeclStmt] declaration -# 2695| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x892 -# 2695| Type = [Struct] String -# 2695| getVariable().getInitializer(): [Initializer] initializer for x892 -# 2695| getExpr(): [ConstructorCall] call to String -# 2695| Type = [VoidType] void -# 2695| ValueCategory = prvalue -# 2696| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2696| Type = [VoidType] void -# 2696| ValueCategory = prvalue -# 2696| getQualifier(): [VariableAccess] x892 -# 2696| Type = [Struct] String -# 2696| ValueCategory = lvalue -# 2696| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2696| Conversion = [BoolConversion] conversion to bool -# 2696| Type = [BoolType] bool -# 2696| Value = [CStyleCast] 0 -# 2696| ValueCategory = prvalue -# 2697| getStmt(893): [DoStmt] do (...) ... -# 2699| getCondition(): [Literal] 0 -# 2699| Type = [IntType] int -# 2699| Value = [Literal] 0 -# 2699| ValueCategory = prvalue -# 2697| getStmt(): [BlockStmt] { ... } -# 2698| getStmt(0): [DeclStmt] declaration -# 2698| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x893 -# 2698| Type = [Struct] String -# 2698| getVariable().getInitializer(): [Initializer] initializer for x893 -# 2698| getExpr(): [ConstructorCall] call to String -# 2698| Type = [VoidType] void -# 2698| ValueCategory = prvalue -# 2699| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2699| Type = [VoidType] void -# 2699| ValueCategory = prvalue -# 2699| getQualifier(): [VariableAccess] x893 -# 2699| Type = [Struct] String -# 2699| ValueCategory = lvalue -# 2699| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2699| Conversion = [BoolConversion] conversion to bool -# 2699| Type = [BoolType] bool -# 2699| Value = [CStyleCast] 0 -# 2699| ValueCategory = prvalue -# 2700| getStmt(894): [DoStmt] do (...) ... -# 2702| getCondition(): [Literal] 0 -# 2702| Type = [IntType] int -# 2702| Value = [Literal] 0 -# 2702| ValueCategory = prvalue -# 2700| getStmt(): [BlockStmt] { ... } -# 2701| getStmt(0): [DeclStmt] declaration -# 2701| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x894 -# 2701| Type = [Struct] String -# 2701| getVariable().getInitializer(): [Initializer] initializer for x894 -# 2701| getExpr(): [ConstructorCall] call to String -# 2701| Type = [VoidType] void -# 2701| ValueCategory = prvalue -# 2702| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2702| Type = [VoidType] void -# 2702| ValueCategory = prvalue -# 2702| getQualifier(): [VariableAccess] x894 -# 2702| Type = [Struct] String -# 2702| ValueCategory = lvalue -# 2702| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2702| Conversion = [BoolConversion] conversion to bool -# 2702| Type = [BoolType] bool -# 2702| Value = [CStyleCast] 0 -# 2702| ValueCategory = prvalue -# 2703| getStmt(895): [DoStmt] do (...) ... -# 2705| getCondition(): [Literal] 0 -# 2705| Type = [IntType] int -# 2705| Value = [Literal] 0 -# 2705| ValueCategory = prvalue -# 2703| getStmt(): [BlockStmt] { ... } -# 2704| getStmt(0): [DeclStmt] declaration -# 2704| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x895 -# 2704| Type = [Struct] String -# 2704| getVariable().getInitializer(): [Initializer] initializer for x895 -# 2704| getExpr(): [ConstructorCall] call to String -# 2704| Type = [VoidType] void -# 2704| ValueCategory = prvalue -# 2705| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2705| Type = [VoidType] void -# 2705| ValueCategory = prvalue -# 2705| getQualifier(): [VariableAccess] x895 -# 2705| Type = [Struct] String -# 2705| ValueCategory = lvalue -# 2705| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2705| Conversion = [BoolConversion] conversion to bool -# 2705| Type = [BoolType] bool -# 2705| Value = [CStyleCast] 0 -# 2705| ValueCategory = prvalue -# 2706| getStmt(896): [DoStmt] do (...) ... -# 2708| getCondition(): [Literal] 0 -# 2708| Type = [IntType] int -# 2708| Value = [Literal] 0 -# 2708| ValueCategory = prvalue -# 2706| getStmt(): [BlockStmt] { ... } -# 2707| getStmt(0): [DeclStmt] declaration -# 2707| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x896 -# 2707| Type = [Struct] String -# 2707| getVariable().getInitializer(): [Initializer] initializer for x896 -# 2707| getExpr(): [ConstructorCall] call to String -# 2707| Type = [VoidType] void -# 2707| ValueCategory = prvalue -# 2708| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2708| Type = [VoidType] void -# 2708| ValueCategory = prvalue -# 2708| getQualifier(): [VariableAccess] x896 -# 2708| Type = [Struct] String -# 2708| ValueCategory = lvalue -# 2708| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2708| Conversion = [BoolConversion] conversion to bool -# 2708| Type = [BoolType] bool -# 2708| Value = [CStyleCast] 0 -# 2708| ValueCategory = prvalue -# 2709| getStmt(897): [DoStmt] do (...) ... -# 2711| getCondition(): [Literal] 0 -# 2711| Type = [IntType] int -# 2711| Value = [Literal] 0 -# 2711| ValueCategory = prvalue -# 2709| getStmt(): [BlockStmt] { ... } -# 2710| getStmt(0): [DeclStmt] declaration -# 2710| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x897 -# 2710| Type = [Struct] String -# 2710| getVariable().getInitializer(): [Initializer] initializer for x897 -# 2710| getExpr(): [ConstructorCall] call to String -# 2710| Type = [VoidType] void -# 2710| ValueCategory = prvalue -# 2711| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2711| Type = [VoidType] void -# 2711| ValueCategory = prvalue -# 2711| getQualifier(): [VariableAccess] x897 -# 2711| Type = [Struct] String -# 2711| ValueCategory = lvalue -# 2711| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2711| Conversion = [BoolConversion] conversion to bool -# 2711| Type = [BoolType] bool -# 2711| Value = [CStyleCast] 0 -# 2711| ValueCategory = prvalue -# 2712| getStmt(898): [DoStmt] do (...) ... -# 2714| getCondition(): [Literal] 0 -# 2714| Type = [IntType] int -# 2714| Value = [Literal] 0 -# 2714| ValueCategory = prvalue -# 2712| getStmt(): [BlockStmt] { ... } -# 2713| getStmt(0): [DeclStmt] declaration -# 2713| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x898 -# 2713| Type = [Struct] String -# 2713| getVariable().getInitializer(): [Initializer] initializer for x898 -# 2713| getExpr(): [ConstructorCall] call to String -# 2713| Type = [VoidType] void -# 2713| ValueCategory = prvalue -# 2714| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2714| Type = [VoidType] void -# 2714| ValueCategory = prvalue -# 2714| getQualifier(): [VariableAccess] x898 -# 2714| Type = [Struct] String -# 2714| ValueCategory = lvalue -# 2714| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2714| Conversion = [BoolConversion] conversion to bool -# 2714| Type = [BoolType] bool -# 2714| Value = [CStyleCast] 0 -# 2714| ValueCategory = prvalue -# 2715| getStmt(899): [DoStmt] do (...) ... -# 2717| getCondition(): [Literal] 0 -# 2717| Type = [IntType] int -# 2717| Value = [Literal] 0 -# 2717| ValueCategory = prvalue -# 2715| getStmt(): [BlockStmt] { ... } -# 2716| getStmt(0): [DeclStmt] declaration -# 2716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x899 -# 2716| Type = [Struct] String -# 2716| getVariable().getInitializer(): [Initializer] initializer for x899 -# 2716| getExpr(): [ConstructorCall] call to String -# 2716| Type = [VoidType] void -# 2716| ValueCategory = prvalue -# 2717| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2717| Type = [VoidType] void -# 2717| ValueCategory = prvalue -# 2717| getQualifier(): [VariableAccess] x899 -# 2717| Type = [Struct] String -# 2717| ValueCategory = lvalue -# 2717| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2717| Conversion = [BoolConversion] conversion to bool -# 2717| Type = [BoolType] bool -# 2717| Value = [CStyleCast] 0 -# 2717| ValueCategory = prvalue -# 2718| getStmt(900): [DoStmt] do (...) ... -# 2720| getCondition(): [Literal] 0 -# 2720| Type = [IntType] int -# 2720| Value = [Literal] 0 -# 2720| ValueCategory = prvalue -# 2718| getStmt(): [BlockStmt] { ... } -# 2719| getStmt(0): [DeclStmt] declaration -# 2719| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x900 -# 2719| Type = [Struct] String -# 2719| getVariable().getInitializer(): [Initializer] initializer for x900 -# 2719| getExpr(): [ConstructorCall] call to String -# 2719| Type = [VoidType] void -# 2719| ValueCategory = prvalue -# 2720| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2720| Type = [VoidType] void -# 2720| ValueCategory = prvalue -# 2720| getQualifier(): [VariableAccess] x900 -# 2720| Type = [Struct] String -# 2720| ValueCategory = lvalue -# 2720| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2720| Conversion = [BoolConversion] conversion to bool -# 2720| Type = [BoolType] bool -# 2720| Value = [CStyleCast] 0 -# 2720| ValueCategory = prvalue -# 2721| getStmt(901): [DoStmt] do (...) ... -# 2723| getCondition(): [Literal] 0 -# 2723| Type = [IntType] int -# 2723| Value = [Literal] 0 -# 2723| ValueCategory = prvalue -# 2721| getStmt(): [BlockStmt] { ... } -# 2722| getStmt(0): [DeclStmt] declaration -# 2722| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x901 -# 2722| Type = [Struct] String -# 2722| getVariable().getInitializer(): [Initializer] initializer for x901 -# 2722| getExpr(): [ConstructorCall] call to String -# 2722| Type = [VoidType] void -# 2722| ValueCategory = prvalue -# 2723| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2723| Type = [VoidType] void -# 2723| ValueCategory = prvalue -# 2723| getQualifier(): [VariableAccess] x901 -# 2723| Type = [Struct] String -# 2723| ValueCategory = lvalue -# 2723| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2723| Conversion = [BoolConversion] conversion to bool -# 2723| Type = [BoolType] bool -# 2723| Value = [CStyleCast] 0 -# 2723| ValueCategory = prvalue -# 2724| getStmt(902): [DoStmt] do (...) ... -# 2726| getCondition(): [Literal] 0 -# 2726| Type = [IntType] int -# 2726| Value = [Literal] 0 -# 2726| ValueCategory = prvalue -# 2724| getStmt(): [BlockStmt] { ... } -# 2725| getStmt(0): [DeclStmt] declaration -# 2725| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x902 -# 2725| Type = [Struct] String -# 2725| getVariable().getInitializer(): [Initializer] initializer for x902 -# 2725| getExpr(): [ConstructorCall] call to String -# 2725| Type = [VoidType] void -# 2725| ValueCategory = prvalue -# 2726| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2726| Type = [VoidType] void -# 2726| ValueCategory = prvalue -# 2726| getQualifier(): [VariableAccess] x902 -# 2726| Type = [Struct] String -# 2726| ValueCategory = lvalue -# 2726| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2726| Conversion = [BoolConversion] conversion to bool -# 2726| Type = [BoolType] bool -# 2726| Value = [CStyleCast] 0 -# 2726| ValueCategory = prvalue -# 2727| getStmt(903): [DoStmt] do (...) ... -# 2729| getCondition(): [Literal] 0 -# 2729| Type = [IntType] int -# 2729| Value = [Literal] 0 -# 2729| ValueCategory = prvalue -# 2727| getStmt(): [BlockStmt] { ... } -# 2728| getStmt(0): [DeclStmt] declaration -# 2728| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x903 -# 2728| Type = [Struct] String -# 2728| getVariable().getInitializer(): [Initializer] initializer for x903 -# 2728| getExpr(): [ConstructorCall] call to String -# 2728| Type = [VoidType] void -# 2728| ValueCategory = prvalue -# 2729| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2729| Type = [VoidType] void -# 2729| ValueCategory = prvalue -# 2729| getQualifier(): [VariableAccess] x903 -# 2729| Type = [Struct] String -# 2729| ValueCategory = lvalue -# 2729| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2729| Conversion = [BoolConversion] conversion to bool -# 2729| Type = [BoolType] bool -# 2729| Value = [CStyleCast] 0 -# 2729| ValueCategory = prvalue -# 2730| getStmt(904): [DoStmt] do (...) ... -# 2732| getCondition(): [Literal] 0 -# 2732| Type = [IntType] int -# 2732| Value = [Literal] 0 -# 2732| ValueCategory = prvalue -# 2730| getStmt(): [BlockStmt] { ... } -# 2731| getStmt(0): [DeclStmt] declaration -# 2731| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x904 -# 2731| Type = [Struct] String -# 2731| getVariable().getInitializer(): [Initializer] initializer for x904 -# 2731| getExpr(): [ConstructorCall] call to String -# 2731| Type = [VoidType] void -# 2731| ValueCategory = prvalue -# 2732| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2732| Type = [VoidType] void -# 2732| ValueCategory = prvalue -# 2732| getQualifier(): [VariableAccess] x904 -# 2732| Type = [Struct] String -# 2732| ValueCategory = lvalue -# 2732| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2732| Conversion = [BoolConversion] conversion to bool -# 2732| Type = [BoolType] bool -# 2732| Value = [CStyleCast] 0 -# 2732| ValueCategory = prvalue -# 2733| getStmt(905): [DoStmt] do (...) ... -# 2735| getCondition(): [Literal] 0 -# 2735| Type = [IntType] int -# 2735| Value = [Literal] 0 -# 2735| ValueCategory = prvalue -# 2733| getStmt(): [BlockStmt] { ... } -# 2734| getStmt(0): [DeclStmt] declaration -# 2734| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x905 -# 2734| Type = [Struct] String -# 2734| getVariable().getInitializer(): [Initializer] initializer for x905 -# 2734| getExpr(): [ConstructorCall] call to String -# 2734| Type = [VoidType] void -# 2734| ValueCategory = prvalue -# 2735| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2735| Type = [VoidType] void -# 2735| ValueCategory = prvalue -# 2735| getQualifier(): [VariableAccess] x905 -# 2735| Type = [Struct] String -# 2735| ValueCategory = lvalue -# 2735| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2735| Conversion = [BoolConversion] conversion to bool -# 2735| Type = [BoolType] bool -# 2735| Value = [CStyleCast] 0 -# 2735| ValueCategory = prvalue -# 2736| getStmt(906): [DoStmt] do (...) ... -# 2738| getCondition(): [Literal] 0 -# 2738| Type = [IntType] int -# 2738| Value = [Literal] 0 -# 2738| ValueCategory = prvalue -# 2736| getStmt(): [BlockStmt] { ... } -# 2737| getStmt(0): [DeclStmt] declaration -# 2737| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x906 -# 2737| Type = [Struct] String -# 2737| getVariable().getInitializer(): [Initializer] initializer for x906 -# 2737| getExpr(): [ConstructorCall] call to String -# 2737| Type = [VoidType] void -# 2737| ValueCategory = prvalue -# 2738| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2738| Type = [VoidType] void -# 2738| ValueCategory = prvalue -# 2738| getQualifier(): [VariableAccess] x906 -# 2738| Type = [Struct] String -# 2738| ValueCategory = lvalue -# 2738| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2738| Conversion = [BoolConversion] conversion to bool -# 2738| Type = [BoolType] bool -# 2738| Value = [CStyleCast] 0 -# 2738| ValueCategory = prvalue -# 2739| getStmt(907): [DoStmt] do (...) ... -# 2741| getCondition(): [Literal] 0 -# 2741| Type = [IntType] int -# 2741| Value = [Literal] 0 -# 2741| ValueCategory = prvalue -# 2739| getStmt(): [BlockStmt] { ... } -# 2740| getStmt(0): [DeclStmt] declaration -# 2740| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x907 -# 2740| Type = [Struct] String -# 2740| getVariable().getInitializer(): [Initializer] initializer for x907 -# 2740| getExpr(): [ConstructorCall] call to String -# 2740| Type = [VoidType] void -# 2740| ValueCategory = prvalue -# 2741| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2741| Type = [VoidType] void -# 2741| ValueCategory = prvalue -# 2741| getQualifier(): [VariableAccess] x907 -# 2741| Type = [Struct] String -# 2741| ValueCategory = lvalue -# 2741| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2741| Conversion = [BoolConversion] conversion to bool -# 2741| Type = [BoolType] bool -# 2741| Value = [CStyleCast] 0 -# 2741| ValueCategory = prvalue -# 2742| getStmt(908): [DoStmt] do (...) ... -# 2744| getCondition(): [Literal] 0 -# 2744| Type = [IntType] int -# 2744| Value = [Literal] 0 -# 2744| ValueCategory = prvalue -# 2742| getStmt(): [BlockStmt] { ... } -# 2743| getStmt(0): [DeclStmt] declaration -# 2743| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x908 -# 2743| Type = [Struct] String -# 2743| getVariable().getInitializer(): [Initializer] initializer for x908 -# 2743| getExpr(): [ConstructorCall] call to String -# 2743| Type = [VoidType] void -# 2743| ValueCategory = prvalue -# 2744| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2744| Type = [VoidType] void -# 2744| ValueCategory = prvalue -# 2744| getQualifier(): [VariableAccess] x908 -# 2744| Type = [Struct] String -# 2744| ValueCategory = lvalue -# 2744| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2744| Conversion = [BoolConversion] conversion to bool -# 2744| Type = [BoolType] bool -# 2744| Value = [CStyleCast] 0 -# 2744| ValueCategory = prvalue -# 2745| getStmt(909): [DoStmt] do (...) ... -# 2747| getCondition(): [Literal] 0 -# 2747| Type = [IntType] int -# 2747| Value = [Literal] 0 -# 2747| ValueCategory = prvalue -# 2745| getStmt(): [BlockStmt] { ... } -# 2746| getStmt(0): [DeclStmt] declaration -# 2746| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x909 -# 2746| Type = [Struct] String -# 2746| getVariable().getInitializer(): [Initializer] initializer for x909 -# 2746| getExpr(): [ConstructorCall] call to String -# 2746| Type = [VoidType] void -# 2746| ValueCategory = prvalue -# 2747| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2747| Type = [VoidType] void -# 2747| ValueCategory = prvalue -# 2747| getQualifier(): [VariableAccess] x909 -# 2747| Type = [Struct] String -# 2747| ValueCategory = lvalue -# 2747| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2747| Conversion = [BoolConversion] conversion to bool -# 2747| Type = [BoolType] bool -# 2747| Value = [CStyleCast] 0 -# 2747| ValueCategory = prvalue -# 2748| getStmt(910): [DoStmt] do (...) ... -# 2750| getCondition(): [Literal] 0 -# 2750| Type = [IntType] int -# 2750| Value = [Literal] 0 -# 2750| ValueCategory = prvalue -# 2748| getStmt(): [BlockStmt] { ... } -# 2749| getStmt(0): [DeclStmt] declaration -# 2749| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x910 -# 2749| Type = [Struct] String -# 2749| getVariable().getInitializer(): [Initializer] initializer for x910 -# 2749| getExpr(): [ConstructorCall] call to String -# 2749| Type = [VoidType] void -# 2749| ValueCategory = prvalue -# 2750| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2750| Type = [VoidType] void -# 2750| ValueCategory = prvalue -# 2750| getQualifier(): [VariableAccess] x910 -# 2750| Type = [Struct] String -# 2750| ValueCategory = lvalue -# 2750| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2750| Conversion = [BoolConversion] conversion to bool -# 2750| Type = [BoolType] bool -# 2750| Value = [CStyleCast] 0 -# 2750| ValueCategory = prvalue -# 2751| getStmt(911): [DoStmt] do (...) ... -# 2753| getCondition(): [Literal] 0 -# 2753| Type = [IntType] int -# 2753| Value = [Literal] 0 -# 2753| ValueCategory = prvalue -# 2751| getStmt(): [BlockStmt] { ... } -# 2752| getStmt(0): [DeclStmt] declaration -# 2752| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x911 -# 2752| Type = [Struct] String -# 2752| getVariable().getInitializer(): [Initializer] initializer for x911 -# 2752| getExpr(): [ConstructorCall] call to String -# 2752| Type = [VoidType] void -# 2752| ValueCategory = prvalue -# 2753| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2753| Type = [VoidType] void -# 2753| ValueCategory = prvalue -# 2753| getQualifier(): [VariableAccess] x911 -# 2753| Type = [Struct] String -# 2753| ValueCategory = lvalue -# 2753| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2753| Conversion = [BoolConversion] conversion to bool -# 2753| Type = [BoolType] bool -# 2753| Value = [CStyleCast] 0 -# 2753| ValueCategory = prvalue -# 2754| getStmt(912): [DoStmt] do (...) ... -# 2756| getCondition(): [Literal] 0 -# 2756| Type = [IntType] int -# 2756| Value = [Literal] 0 -# 2756| ValueCategory = prvalue -# 2754| getStmt(): [BlockStmt] { ... } -# 2755| getStmt(0): [DeclStmt] declaration -# 2755| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x912 -# 2755| Type = [Struct] String -# 2755| getVariable().getInitializer(): [Initializer] initializer for x912 -# 2755| getExpr(): [ConstructorCall] call to String -# 2755| Type = [VoidType] void -# 2755| ValueCategory = prvalue -# 2756| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2756| Type = [VoidType] void -# 2756| ValueCategory = prvalue -# 2756| getQualifier(): [VariableAccess] x912 -# 2756| Type = [Struct] String -# 2756| ValueCategory = lvalue -# 2756| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2756| Conversion = [BoolConversion] conversion to bool -# 2756| Type = [BoolType] bool -# 2756| Value = [CStyleCast] 0 -# 2756| ValueCategory = prvalue -# 2757| getStmt(913): [DoStmt] do (...) ... -# 2759| getCondition(): [Literal] 0 -# 2759| Type = [IntType] int -# 2759| Value = [Literal] 0 -# 2759| ValueCategory = prvalue -# 2757| getStmt(): [BlockStmt] { ... } -# 2758| getStmt(0): [DeclStmt] declaration -# 2758| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x913 -# 2758| Type = [Struct] String -# 2758| getVariable().getInitializer(): [Initializer] initializer for x913 -# 2758| getExpr(): [ConstructorCall] call to String -# 2758| Type = [VoidType] void -# 2758| ValueCategory = prvalue -# 2759| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2759| Type = [VoidType] void -# 2759| ValueCategory = prvalue -# 2759| getQualifier(): [VariableAccess] x913 -# 2759| Type = [Struct] String -# 2759| ValueCategory = lvalue -# 2759| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2759| Conversion = [BoolConversion] conversion to bool -# 2759| Type = [BoolType] bool -# 2759| Value = [CStyleCast] 0 -# 2759| ValueCategory = prvalue -# 2760| getStmt(914): [DoStmt] do (...) ... -# 2762| getCondition(): [Literal] 0 -# 2762| Type = [IntType] int -# 2762| Value = [Literal] 0 -# 2762| ValueCategory = prvalue -# 2760| getStmt(): [BlockStmt] { ... } -# 2761| getStmt(0): [DeclStmt] declaration -# 2761| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x914 -# 2761| Type = [Struct] String -# 2761| getVariable().getInitializer(): [Initializer] initializer for x914 -# 2761| getExpr(): [ConstructorCall] call to String -# 2761| Type = [VoidType] void -# 2761| ValueCategory = prvalue -# 2762| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2762| Type = [VoidType] void -# 2762| ValueCategory = prvalue -# 2762| getQualifier(): [VariableAccess] x914 -# 2762| Type = [Struct] String -# 2762| ValueCategory = lvalue -# 2762| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2762| Conversion = [BoolConversion] conversion to bool -# 2762| Type = [BoolType] bool -# 2762| Value = [CStyleCast] 0 -# 2762| ValueCategory = prvalue -# 2763| getStmt(915): [DoStmt] do (...) ... -# 2765| getCondition(): [Literal] 0 -# 2765| Type = [IntType] int -# 2765| Value = [Literal] 0 -# 2765| ValueCategory = prvalue -# 2763| getStmt(): [BlockStmt] { ... } -# 2764| getStmt(0): [DeclStmt] declaration -# 2764| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x915 -# 2764| Type = [Struct] String -# 2764| getVariable().getInitializer(): [Initializer] initializer for x915 -# 2764| getExpr(): [ConstructorCall] call to String -# 2764| Type = [VoidType] void -# 2764| ValueCategory = prvalue -# 2765| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2765| Type = [VoidType] void -# 2765| ValueCategory = prvalue -# 2765| getQualifier(): [VariableAccess] x915 -# 2765| Type = [Struct] String -# 2765| ValueCategory = lvalue -# 2765| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2765| Conversion = [BoolConversion] conversion to bool -# 2765| Type = [BoolType] bool -# 2765| Value = [CStyleCast] 0 -# 2765| ValueCategory = prvalue -# 2766| getStmt(916): [DoStmt] do (...) ... -# 2768| getCondition(): [Literal] 0 -# 2768| Type = [IntType] int -# 2768| Value = [Literal] 0 -# 2768| ValueCategory = prvalue -# 2766| getStmt(): [BlockStmt] { ... } -# 2767| getStmt(0): [DeclStmt] declaration -# 2767| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x916 -# 2767| Type = [Struct] String -# 2767| getVariable().getInitializer(): [Initializer] initializer for x916 -# 2767| getExpr(): [ConstructorCall] call to String -# 2767| Type = [VoidType] void -# 2767| ValueCategory = prvalue -# 2768| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2768| Type = [VoidType] void -# 2768| ValueCategory = prvalue -# 2768| getQualifier(): [VariableAccess] x916 -# 2768| Type = [Struct] String -# 2768| ValueCategory = lvalue -# 2768| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2768| Conversion = [BoolConversion] conversion to bool -# 2768| Type = [BoolType] bool -# 2768| Value = [CStyleCast] 0 -# 2768| ValueCategory = prvalue -# 2769| getStmt(917): [DoStmt] do (...) ... -# 2771| getCondition(): [Literal] 0 -# 2771| Type = [IntType] int -# 2771| Value = [Literal] 0 -# 2771| ValueCategory = prvalue -# 2769| getStmt(): [BlockStmt] { ... } -# 2770| getStmt(0): [DeclStmt] declaration -# 2770| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x917 -# 2770| Type = [Struct] String -# 2770| getVariable().getInitializer(): [Initializer] initializer for x917 -# 2770| getExpr(): [ConstructorCall] call to String -# 2770| Type = [VoidType] void -# 2770| ValueCategory = prvalue -# 2771| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2771| Type = [VoidType] void -# 2771| ValueCategory = prvalue -# 2771| getQualifier(): [VariableAccess] x917 -# 2771| Type = [Struct] String -# 2771| ValueCategory = lvalue -# 2771| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2771| Conversion = [BoolConversion] conversion to bool -# 2771| Type = [BoolType] bool -# 2771| Value = [CStyleCast] 0 -# 2771| ValueCategory = prvalue -# 2772| getStmt(918): [DoStmt] do (...) ... -# 2774| getCondition(): [Literal] 0 -# 2774| Type = [IntType] int -# 2774| Value = [Literal] 0 -# 2774| ValueCategory = prvalue -# 2772| getStmt(): [BlockStmt] { ... } -# 2773| getStmt(0): [DeclStmt] declaration -# 2773| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x918 -# 2773| Type = [Struct] String -# 2773| getVariable().getInitializer(): [Initializer] initializer for x918 -# 2773| getExpr(): [ConstructorCall] call to String -# 2773| Type = [VoidType] void -# 2773| ValueCategory = prvalue -# 2774| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2774| Type = [VoidType] void -# 2774| ValueCategory = prvalue -# 2774| getQualifier(): [VariableAccess] x918 -# 2774| Type = [Struct] String -# 2774| ValueCategory = lvalue -# 2774| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2774| Conversion = [BoolConversion] conversion to bool -# 2774| Type = [BoolType] bool -# 2774| Value = [CStyleCast] 0 -# 2774| ValueCategory = prvalue -# 2775| getStmt(919): [DoStmt] do (...) ... -# 2777| getCondition(): [Literal] 0 -# 2777| Type = [IntType] int -# 2777| Value = [Literal] 0 -# 2777| ValueCategory = prvalue -# 2775| getStmt(): [BlockStmt] { ... } -# 2776| getStmt(0): [DeclStmt] declaration -# 2776| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x919 -# 2776| Type = [Struct] String -# 2776| getVariable().getInitializer(): [Initializer] initializer for x919 -# 2776| getExpr(): [ConstructorCall] call to String -# 2776| Type = [VoidType] void -# 2776| ValueCategory = prvalue -# 2777| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2777| Type = [VoidType] void -# 2777| ValueCategory = prvalue -# 2777| getQualifier(): [VariableAccess] x919 -# 2777| Type = [Struct] String -# 2777| ValueCategory = lvalue -# 2777| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2777| Conversion = [BoolConversion] conversion to bool -# 2777| Type = [BoolType] bool -# 2777| Value = [CStyleCast] 0 -# 2777| ValueCategory = prvalue -# 2778| getStmt(920): [DoStmt] do (...) ... -# 2780| getCondition(): [Literal] 0 -# 2780| Type = [IntType] int -# 2780| Value = [Literal] 0 -# 2780| ValueCategory = prvalue -# 2778| getStmt(): [BlockStmt] { ... } -# 2779| getStmt(0): [DeclStmt] declaration -# 2779| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x920 -# 2779| Type = [Struct] String -# 2779| getVariable().getInitializer(): [Initializer] initializer for x920 -# 2779| getExpr(): [ConstructorCall] call to String -# 2779| Type = [VoidType] void -# 2779| ValueCategory = prvalue -# 2780| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2780| Type = [VoidType] void -# 2780| ValueCategory = prvalue -# 2780| getQualifier(): [VariableAccess] x920 -# 2780| Type = [Struct] String -# 2780| ValueCategory = lvalue -# 2780| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2780| Conversion = [BoolConversion] conversion to bool -# 2780| Type = [BoolType] bool -# 2780| Value = [CStyleCast] 0 -# 2780| ValueCategory = prvalue -# 2781| getStmt(921): [DoStmt] do (...) ... -# 2783| getCondition(): [Literal] 0 -# 2783| Type = [IntType] int -# 2783| Value = [Literal] 0 -# 2783| ValueCategory = prvalue -# 2781| getStmt(): [BlockStmt] { ... } -# 2782| getStmt(0): [DeclStmt] declaration -# 2782| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x921 -# 2782| Type = [Struct] String -# 2782| getVariable().getInitializer(): [Initializer] initializer for x921 -# 2782| getExpr(): [ConstructorCall] call to String -# 2782| Type = [VoidType] void -# 2782| ValueCategory = prvalue -# 2783| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2783| Type = [VoidType] void -# 2783| ValueCategory = prvalue -# 2783| getQualifier(): [VariableAccess] x921 -# 2783| Type = [Struct] String -# 2783| ValueCategory = lvalue -# 2783| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2783| Conversion = [BoolConversion] conversion to bool -# 2783| Type = [BoolType] bool -# 2783| Value = [CStyleCast] 0 -# 2783| ValueCategory = prvalue -# 2784| getStmt(922): [DoStmt] do (...) ... -# 2786| getCondition(): [Literal] 0 -# 2786| Type = [IntType] int -# 2786| Value = [Literal] 0 -# 2786| ValueCategory = prvalue -# 2784| getStmt(): [BlockStmt] { ... } -# 2785| getStmt(0): [DeclStmt] declaration -# 2785| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x922 -# 2785| Type = [Struct] String -# 2785| getVariable().getInitializer(): [Initializer] initializer for x922 -# 2785| getExpr(): [ConstructorCall] call to String -# 2785| Type = [VoidType] void -# 2785| ValueCategory = prvalue -# 2786| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2786| Type = [VoidType] void -# 2786| ValueCategory = prvalue -# 2786| getQualifier(): [VariableAccess] x922 -# 2786| Type = [Struct] String -# 2786| ValueCategory = lvalue -# 2786| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2786| Conversion = [BoolConversion] conversion to bool -# 2786| Type = [BoolType] bool -# 2786| Value = [CStyleCast] 0 -# 2786| ValueCategory = prvalue -# 2787| getStmt(923): [DoStmt] do (...) ... -# 2789| getCondition(): [Literal] 0 -# 2789| Type = [IntType] int -# 2789| Value = [Literal] 0 -# 2789| ValueCategory = prvalue -# 2787| getStmt(): [BlockStmt] { ... } -# 2788| getStmt(0): [DeclStmt] declaration -# 2788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x923 -# 2788| Type = [Struct] String -# 2788| getVariable().getInitializer(): [Initializer] initializer for x923 -# 2788| getExpr(): [ConstructorCall] call to String -# 2788| Type = [VoidType] void -# 2788| ValueCategory = prvalue -# 2789| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2789| Type = [VoidType] void -# 2789| ValueCategory = prvalue -# 2789| getQualifier(): [VariableAccess] x923 -# 2789| Type = [Struct] String -# 2789| ValueCategory = lvalue -# 2789| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2789| Conversion = [BoolConversion] conversion to bool -# 2789| Type = [BoolType] bool -# 2789| Value = [CStyleCast] 0 -# 2789| ValueCategory = prvalue -# 2790| getStmt(924): [DoStmt] do (...) ... -# 2792| getCondition(): [Literal] 0 -# 2792| Type = [IntType] int -# 2792| Value = [Literal] 0 -# 2792| ValueCategory = prvalue -# 2790| getStmt(): [BlockStmt] { ... } -# 2791| getStmt(0): [DeclStmt] declaration -# 2791| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x924 -# 2791| Type = [Struct] String -# 2791| getVariable().getInitializer(): [Initializer] initializer for x924 -# 2791| getExpr(): [ConstructorCall] call to String -# 2791| Type = [VoidType] void -# 2791| ValueCategory = prvalue -# 2792| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2792| Type = [VoidType] void -# 2792| ValueCategory = prvalue -# 2792| getQualifier(): [VariableAccess] x924 -# 2792| Type = [Struct] String -# 2792| ValueCategory = lvalue -# 2792| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2792| Conversion = [BoolConversion] conversion to bool -# 2792| Type = [BoolType] bool -# 2792| Value = [CStyleCast] 0 -# 2792| ValueCategory = prvalue -# 2793| getStmt(925): [DoStmt] do (...) ... -# 2795| getCondition(): [Literal] 0 -# 2795| Type = [IntType] int -# 2795| Value = [Literal] 0 -# 2795| ValueCategory = prvalue -# 2793| getStmt(): [BlockStmt] { ... } -# 2794| getStmt(0): [DeclStmt] declaration -# 2794| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x925 -# 2794| Type = [Struct] String -# 2794| getVariable().getInitializer(): [Initializer] initializer for x925 -# 2794| getExpr(): [ConstructorCall] call to String -# 2794| Type = [VoidType] void -# 2794| ValueCategory = prvalue -# 2795| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2795| Type = [VoidType] void -# 2795| ValueCategory = prvalue -# 2795| getQualifier(): [VariableAccess] x925 -# 2795| Type = [Struct] String -# 2795| ValueCategory = lvalue -# 2795| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2795| Conversion = [BoolConversion] conversion to bool -# 2795| Type = [BoolType] bool -# 2795| Value = [CStyleCast] 0 -# 2795| ValueCategory = prvalue -# 2796| getStmt(926): [DoStmt] do (...) ... -# 2798| getCondition(): [Literal] 0 -# 2798| Type = [IntType] int -# 2798| Value = [Literal] 0 -# 2798| ValueCategory = prvalue -# 2796| getStmt(): [BlockStmt] { ... } -# 2797| getStmt(0): [DeclStmt] declaration -# 2797| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x926 -# 2797| Type = [Struct] String -# 2797| getVariable().getInitializer(): [Initializer] initializer for x926 -# 2797| getExpr(): [ConstructorCall] call to String -# 2797| Type = [VoidType] void -# 2797| ValueCategory = prvalue -# 2798| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2798| Type = [VoidType] void -# 2798| ValueCategory = prvalue -# 2798| getQualifier(): [VariableAccess] x926 -# 2798| Type = [Struct] String -# 2798| ValueCategory = lvalue -# 2798| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2798| Conversion = [BoolConversion] conversion to bool -# 2798| Type = [BoolType] bool -# 2798| Value = [CStyleCast] 0 -# 2798| ValueCategory = prvalue -# 2799| getStmt(927): [DoStmt] do (...) ... -# 2801| getCondition(): [Literal] 0 -# 2801| Type = [IntType] int -# 2801| Value = [Literal] 0 -# 2801| ValueCategory = prvalue -# 2799| getStmt(): [BlockStmt] { ... } -# 2800| getStmt(0): [DeclStmt] declaration -# 2800| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x927 -# 2800| Type = [Struct] String -# 2800| getVariable().getInitializer(): [Initializer] initializer for x927 -# 2800| getExpr(): [ConstructorCall] call to String -# 2800| Type = [VoidType] void -# 2800| ValueCategory = prvalue -# 2801| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2801| Type = [VoidType] void -# 2801| ValueCategory = prvalue -# 2801| getQualifier(): [VariableAccess] x927 -# 2801| Type = [Struct] String -# 2801| ValueCategory = lvalue -# 2801| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2801| Conversion = [BoolConversion] conversion to bool -# 2801| Type = [BoolType] bool -# 2801| Value = [CStyleCast] 0 -# 2801| ValueCategory = prvalue -# 2802| getStmt(928): [DoStmt] do (...) ... -# 2804| getCondition(): [Literal] 0 -# 2804| Type = [IntType] int -# 2804| Value = [Literal] 0 -# 2804| ValueCategory = prvalue -# 2802| getStmt(): [BlockStmt] { ... } -# 2803| getStmt(0): [DeclStmt] declaration -# 2803| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x928 -# 2803| Type = [Struct] String -# 2803| getVariable().getInitializer(): [Initializer] initializer for x928 -# 2803| getExpr(): [ConstructorCall] call to String -# 2803| Type = [VoidType] void -# 2803| ValueCategory = prvalue -# 2804| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2804| Type = [VoidType] void -# 2804| ValueCategory = prvalue -# 2804| getQualifier(): [VariableAccess] x928 -# 2804| Type = [Struct] String -# 2804| ValueCategory = lvalue -# 2804| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2804| Conversion = [BoolConversion] conversion to bool -# 2804| Type = [BoolType] bool -# 2804| Value = [CStyleCast] 0 -# 2804| ValueCategory = prvalue -# 2805| getStmt(929): [DoStmt] do (...) ... -# 2807| getCondition(): [Literal] 0 -# 2807| Type = [IntType] int -# 2807| Value = [Literal] 0 -# 2807| ValueCategory = prvalue -# 2805| getStmt(): [BlockStmt] { ... } -# 2806| getStmt(0): [DeclStmt] declaration -# 2806| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x929 -# 2806| Type = [Struct] String -# 2806| getVariable().getInitializer(): [Initializer] initializer for x929 -# 2806| getExpr(): [ConstructorCall] call to String -# 2806| Type = [VoidType] void -# 2806| ValueCategory = prvalue -# 2807| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2807| Type = [VoidType] void -# 2807| ValueCategory = prvalue -# 2807| getQualifier(): [VariableAccess] x929 -# 2807| Type = [Struct] String -# 2807| ValueCategory = lvalue -# 2807| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2807| Conversion = [BoolConversion] conversion to bool -# 2807| Type = [BoolType] bool -# 2807| Value = [CStyleCast] 0 -# 2807| ValueCategory = prvalue -# 2808| getStmt(930): [DoStmt] do (...) ... -# 2810| getCondition(): [Literal] 0 -# 2810| Type = [IntType] int -# 2810| Value = [Literal] 0 -# 2810| ValueCategory = prvalue -# 2808| getStmt(): [BlockStmt] { ... } -# 2809| getStmt(0): [DeclStmt] declaration -# 2809| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x930 -# 2809| Type = [Struct] String -# 2809| getVariable().getInitializer(): [Initializer] initializer for x930 -# 2809| getExpr(): [ConstructorCall] call to String -# 2809| Type = [VoidType] void -# 2809| ValueCategory = prvalue -# 2810| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2810| Type = [VoidType] void -# 2810| ValueCategory = prvalue -# 2810| getQualifier(): [VariableAccess] x930 -# 2810| Type = [Struct] String -# 2810| ValueCategory = lvalue -# 2810| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2810| Conversion = [BoolConversion] conversion to bool -# 2810| Type = [BoolType] bool -# 2810| Value = [CStyleCast] 0 -# 2810| ValueCategory = prvalue -# 2811| getStmt(931): [DoStmt] do (...) ... -# 2813| getCondition(): [Literal] 0 -# 2813| Type = [IntType] int -# 2813| Value = [Literal] 0 -# 2813| ValueCategory = prvalue -# 2811| getStmt(): [BlockStmt] { ... } -# 2812| getStmt(0): [DeclStmt] declaration -# 2812| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x931 -# 2812| Type = [Struct] String -# 2812| getVariable().getInitializer(): [Initializer] initializer for x931 -# 2812| getExpr(): [ConstructorCall] call to String -# 2812| Type = [VoidType] void -# 2812| ValueCategory = prvalue -# 2813| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2813| Type = [VoidType] void -# 2813| ValueCategory = prvalue -# 2813| getQualifier(): [VariableAccess] x931 -# 2813| Type = [Struct] String -# 2813| ValueCategory = lvalue -# 2813| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2813| Conversion = [BoolConversion] conversion to bool -# 2813| Type = [BoolType] bool -# 2813| Value = [CStyleCast] 0 -# 2813| ValueCategory = prvalue -# 2814| getStmt(932): [DoStmt] do (...) ... -# 2816| getCondition(): [Literal] 0 -# 2816| Type = [IntType] int -# 2816| Value = [Literal] 0 -# 2816| ValueCategory = prvalue -# 2814| getStmt(): [BlockStmt] { ... } -# 2815| getStmt(0): [DeclStmt] declaration -# 2815| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x932 -# 2815| Type = [Struct] String -# 2815| getVariable().getInitializer(): [Initializer] initializer for x932 -# 2815| getExpr(): [ConstructorCall] call to String -# 2815| Type = [VoidType] void -# 2815| ValueCategory = prvalue -# 2816| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2816| Type = [VoidType] void -# 2816| ValueCategory = prvalue -# 2816| getQualifier(): [VariableAccess] x932 -# 2816| Type = [Struct] String -# 2816| ValueCategory = lvalue -# 2816| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2816| Conversion = [BoolConversion] conversion to bool -# 2816| Type = [BoolType] bool -# 2816| Value = [CStyleCast] 0 -# 2816| ValueCategory = prvalue -# 2817| getStmt(933): [DoStmt] do (...) ... -# 2819| getCondition(): [Literal] 0 -# 2819| Type = [IntType] int -# 2819| Value = [Literal] 0 -# 2819| ValueCategory = prvalue -# 2817| getStmt(): [BlockStmt] { ... } -# 2818| getStmt(0): [DeclStmt] declaration -# 2818| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x933 -# 2818| Type = [Struct] String -# 2818| getVariable().getInitializer(): [Initializer] initializer for x933 -# 2818| getExpr(): [ConstructorCall] call to String -# 2818| Type = [VoidType] void -# 2818| ValueCategory = prvalue -# 2819| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2819| Type = [VoidType] void -# 2819| ValueCategory = prvalue -# 2819| getQualifier(): [VariableAccess] x933 -# 2819| Type = [Struct] String -# 2819| ValueCategory = lvalue -# 2819| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2819| Conversion = [BoolConversion] conversion to bool -# 2819| Type = [BoolType] bool -# 2819| Value = [CStyleCast] 0 -# 2819| ValueCategory = prvalue -# 2820| getStmt(934): [DoStmt] do (...) ... -# 2822| getCondition(): [Literal] 0 -# 2822| Type = [IntType] int -# 2822| Value = [Literal] 0 -# 2822| ValueCategory = prvalue -# 2820| getStmt(): [BlockStmt] { ... } -# 2821| getStmt(0): [DeclStmt] declaration -# 2821| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x934 -# 2821| Type = [Struct] String -# 2821| getVariable().getInitializer(): [Initializer] initializer for x934 -# 2821| getExpr(): [ConstructorCall] call to String -# 2821| Type = [VoidType] void -# 2821| ValueCategory = prvalue -# 2822| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2822| Type = [VoidType] void -# 2822| ValueCategory = prvalue -# 2822| getQualifier(): [VariableAccess] x934 -# 2822| Type = [Struct] String -# 2822| ValueCategory = lvalue -# 2822| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2822| Conversion = [BoolConversion] conversion to bool -# 2822| Type = [BoolType] bool -# 2822| Value = [CStyleCast] 0 -# 2822| ValueCategory = prvalue -# 2823| getStmt(935): [DoStmt] do (...) ... -# 2825| getCondition(): [Literal] 0 -# 2825| Type = [IntType] int -# 2825| Value = [Literal] 0 -# 2825| ValueCategory = prvalue -# 2823| getStmt(): [BlockStmt] { ... } -# 2824| getStmt(0): [DeclStmt] declaration -# 2824| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x935 -# 2824| Type = [Struct] String -# 2824| getVariable().getInitializer(): [Initializer] initializer for x935 -# 2824| getExpr(): [ConstructorCall] call to String -# 2824| Type = [VoidType] void -# 2824| ValueCategory = prvalue -# 2825| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2825| Type = [VoidType] void -# 2825| ValueCategory = prvalue -# 2825| getQualifier(): [VariableAccess] x935 -# 2825| Type = [Struct] String -# 2825| ValueCategory = lvalue -# 2825| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2825| Conversion = [BoolConversion] conversion to bool -# 2825| Type = [BoolType] bool -# 2825| Value = [CStyleCast] 0 -# 2825| ValueCategory = prvalue -# 2826| getStmt(936): [DoStmt] do (...) ... -# 2828| getCondition(): [Literal] 0 -# 2828| Type = [IntType] int -# 2828| Value = [Literal] 0 -# 2828| ValueCategory = prvalue -# 2826| getStmt(): [BlockStmt] { ... } -# 2827| getStmt(0): [DeclStmt] declaration -# 2827| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x936 -# 2827| Type = [Struct] String -# 2827| getVariable().getInitializer(): [Initializer] initializer for x936 -# 2827| getExpr(): [ConstructorCall] call to String -# 2827| Type = [VoidType] void -# 2827| ValueCategory = prvalue -# 2828| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2828| Type = [VoidType] void -# 2828| ValueCategory = prvalue -# 2828| getQualifier(): [VariableAccess] x936 -# 2828| Type = [Struct] String -# 2828| ValueCategory = lvalue -# 2828| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2828| Conversion = [BoolConversion] conversion to bool -# 2828| Type = [BoolType] bool -# 2828| Value = [CStyleCast] 0 -# 2828| ValueCategory = prvalue -# 2829| getStmt(937): [DoStmt] do (...) ... -# 2831| getCondition(): [Literal] 0 -# 2831| Type = [IntType] int -# 2831| Value = [Literal] 0 -# 2831| ValueCategory = prvalue -# 2829| getStmt(): [BlockStmt] { ... } -# 2830| getStmt(0): [DeclStmt] declaration -# 2830| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x937 -# 2830| Type = [Struct] String -# 2830| getVariable().getInitializer(): [Initializer] initializer for x937 -# 2830| getExpr(): [ConstructorCall] call to String -# 2830| Type = [VoidType] void -# 2830| ValueCategory = prvalue -# 2831| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2831| Type = [VoidType] void -# 2831| ValueCategory = prvalue -# 2831| getQualifier(): [VariableAccess] x937 -# 2831| Type = [Struct] String -# 2831| ValueCategory = lvalue -# 2831| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2831| Conversion = [BoolConversion] conversion to bool -# 2831| Type = [BoolType] bool -# 2831| Value = [CStyleCast] 0 -# 2831| ValueCategory = prvalue -# 2832| getStmt(938): [DoStmt] do (...) ... -# 2834| getCondition(): [Literal] 0 -# 2834| Type = [IntType] int -# 2834| Value = [Literal] 0 -# 2834| ValueCategory = prvalue -# 2832| getStmt(): [BlockStmt] { ... } -# 2833| getStmt(0): [DeclStmt] declaration -# 2833| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x938 -# 2833| Type = [Struct] String -# 2833| getVariable().getInitializer(): [Initializer] initializer for x938 -# 2833| getExpr(): [ConstructorCall] call to String -# 2833| Type = [VoidType] void -# 2833| ValueCategory = prvalue -# 2834| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2834| Type = [VoidType] void -# 2834| ValueCategory = prvalue -# 2834| getQualifier(): [VariableAccess] x938 -# 2834| Type = [Struct] String -# 2834| ValueCategory = lvalue -# 2834| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2834| Conversion = [BoolConversion] conversion to bool -# 2834| Type = [BoolType] bool -# 2834| Value = [CStyleCast] 0 -# 2834| ValueCategory = prvalue -# 2835| getStmt(939): [DoStmt] do (...) ... -# 2837| getCondition(): [Literal] 0 -# 2837| Type = [IntType] int -# 2837| Value = [Literal] 0 -# 2837| ValueCategory = prvalue -# 2835| getStmt(): [BlockStmt] { ... } -# 2836| getStmt(0): [DeclStmt] declaration -# 2836| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x939 -# 2836| Type = [Struct] String -# 2836| getVariable().getInitializer(): [Initializer] initializer for x939 -# 2836| getExpr(): [ConstructorCall] call to String -# 2836| Type = [VoidType] void -# 2836| ValueCategory = prvalue -# 2837| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2837| Type = [VoidType] void -# 2837| ValueCategory = prvalue -# 2837| getQualifier(): [VariableAccess] x939 -# 2837| Type = [Struct] String -# 2837| ValueCategory = lvalue -# 2837| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2837| Conversion = [BoolConversion] conversion to bool -# 2837| Type = [BoolType] bool -# 2837| Value = [CStyleCast] 0 -# 2837| ValueCategory = prvalue -# 2838| getStmt(940): [DoStmt] do (...) ... -# 2840| getCondition(): [Literal] 0 -# 2840| Type = [IntType] int -# 2840| Value = [Literal] 0 -# 2840| ValueCategory = prvalue -# 2838| getStmt(): [BlockStmt] { ... } -# 2839| getStmt(0): [DeclStmt] declaration -# 2839| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x940 -# 2839| Type = [Struct] String -# 2839| getVariable().getInitializer(): [Initializer] initializer for x940 -# 2839| getExpr(): [ConstructorCall] call to String -# 2839| Type = [VoidType] void -# 2839| ValueCategory = prvalue -# 2840| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2840| Type = [VoidType] void -# 2840| ValueCategory = prvalue -# 2840| getQualifier(): [VariableAccess] x940 -# 2840| Type = [Struct] String -# 2840| ValueCategory = lvalue -# 2840| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2840| Conversion = [BoolConversion] conversion to bool -# 2840| Type = [BoolType] bool -# 2840| Value = [CStyleCast] 0 -# 2840| ValueCategory = prvalue -# 2841| getStmt(941): [DoStmt] do (...) ... -# 2843| getCondition(): [Literal] 0 -# 2843| Type = [IntType] int -# 2843| Value = [Literal] 0 -# 2843| ValueCategory = prvalue -# 2841| getStmt(): [BlockStmt] { ... } -# 2842| getStmt(0): [DeclStmt] declaration -# 2842| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x941 -# 2842| Type = [Struct] String -# 2842| getVariable().getInitializer(): [Initializer] initializer for x941 -# 2842| getExpr(): [ConstructorCall] call to String -# 2842| Type = [VoidType] void -# 2842| ValueCategory = prvalue -# 2843| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2843| Type = [VoidType] void -# 2843| ValueCategory = prvalue -# 2843| getQualifier(): [VariableAccess] x941 -# 2843| Type = [Struct] String -# 2843| ValueCategory = lvalue -# 2843| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2843| Conversion = [BoolConversion] conversion to bool -# 2843| Type = [BoolType] bool -# 2843| Value = [CStyleCast] 0 -# 2843| ValueCategory = prvalue -# 2844| getStmt(942): [DoStmt] do (...) ... -# 2846| getCondition(): [Literal] 0 -# 2846| Type = [IntType] int -# 2846| Value = [Literal] 0 -# 2846| ValueCategory = prvalue -# 2844| getStmt(): [BlockStmt] { ... } -# 2845| getStmt(0): [DeclStmt] declaration -# 2845| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x942 -# 2845| Type = [Struct] String -# 2845| getVariable().getInitializer(): [Initializer] initializer for x942 -# 2845| getExpr(): [ConstructorCall] call to String -# 2845| Type = [VoidType] void -# 2845| ValueCategory = prvalue -# 2846| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2846| Type = [VoidType] void -# 2846| ValueCategory = prvalue -# 2846| getQualifier(): [VariableAccess] x942 -# 2846| Type = [Struct] String -# 2846| ValueCategory = lvalue -# 2846| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2846| Conversion = [BoolConversion] conversion to bool -# 2846| Type = [BoolType] bool -# 2846| Value = [CStyleCast] 0 -# 2846| ValueCategory = prvalue -# 2847| getStmt(943): [DoStmt] do (...) ... -# 2849| getCondition(): [Literal] 0 -# 2849| Type = [IntType] int -# 2849| Value = [Literal] 0 -# 2849| ValueCategory = prvalue -# 2847| getStmt(): [BlockStmt] { ... } -# 2848| getStmt(0): [DeclStmt] declaration -# 2848| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x943 -# 2848| Type = [Struct] String -# 2848| getVariable().getInitializer(): [Initializer] initializer for x943 -# 2848| getExpr(): [ConstructorCall] call to String -# 2848| Type = [VoidType] void -# 2848| ValueCategory = prvalue -# 2849| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2849| Type = [VoidType] void -# 2849| ValueCategory = prvalue -# 2849| getQualifier(): [VariableAccess] x943 -# 2849| Type = [Struct] String -# 2849| ValueCategory = lvalue -# 2849| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2849| Conversion = [BoolConversion] conversion to bool -# 2849| Type = [BoolType] bool -# 2849| Value = [CStyleCast] 0 -# 2849| ValueCategory = prvalue -# 2850| getStmt(944): [DoStmt] do (...) ... -# 2852| getCondition(): [Literal] 0 -# 2852| Type = [IntType] int -# 2852| Value = [Literal] 0 -# 2852| ValueCategory = prvalue -# 2850| getStmt(): [BlockStmt] { ... } -# 2851| getStmt(0): [DeclStmt] declaration -# 2851| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x944 -# 2851| Type = [Struct] String -# 2851| getVariable().getInitializer(): [Initializer] initializer for x944 -# 2851| getExpr(): [ConstructorCall] call to String -# 2851| Type = [VoidType] void -# 2851| ValueCategory = prvalue -# 2852| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2852| Type = [VoidType] void -# 2852| ValueCategory = prvalue -# 2852| getQualifier(): [VariableAccess] x944 -# 2852| Type = [Struct] String -# 2852| ValueCategory = lvalue -# 2852| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2852| Conversion = [BoolConversion] conversion to bool -# 2852| Type = [BoolType] bool -# 2852| Value = [CStyleCast] 0 -# 2852| ValueCategory = prvalue -# 2853| getStmt(945): [DoStmt] do (...) ... -# 2855| getCondition(): [Literal] 0 -# 2855| Type = [IntType] int -# 2855| Value = [Literal] 0 -# 2855| ValueCategory = prvalue -# 2853| getStmt(): [BlockStmt] { ... } -# 2854| getStmt(0): [DeclStmt] declaration -# 2854| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x945 -# 2854| Type = [Struct] String -# 2854| getVariable().getInitializer(): [Initializer] initializer for x945 -# 2854| getExpr(): [ConstructorCall] call to String -# 2854| Type = [VoidType] void -# 2854| ValueCategory = prvalue -# 2855| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2855| Type = [VoidType] void -# 2855| ValueCategory = prvalue -# 2855| getQualifier(): [VariableAccess] x945 -# 2855| Type = [Struct] String -# 2855| ValueCategory = lvalue -# 2855| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2855| Conversion = [BoolConversion] conversion to bool -# 2855| Type = [BoolType] bool -# 2855| Value = [CStyleCast] 0 -# 2855| ValueCategory = prvalue -# 2856| getStmt(946): [DoStmt] do (...) ... -# 2858| getCondition(): [Literal] 0 -# 2858| Type = [IntType] int -# 2858| Value = [Literal] 0 -# 2858| ValueCategory = prvalue -# 2856| getStmt(): [BlockStmt] { ... } -# 2857| getStmt(0): [DeclStmt] declaration -# 2857| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x946 -# 2857| Type = [Struct] String -# 2857| getVariable().getInitializer(): [Initializer] initializer for x946 -# 2857| getExpr(): [ConstructorCall] call to String -# 2857| Type = [VoidType] void -# 2857| ValueCategory = prvalue -# 2858| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2858| Type = [VoidType] void -# 2858| ValueCategory = prvalue -# 2858| getQualifier(): [VariableAccess] x946 -# 2858| Type = [Struct] String -# 2858| ValueCategory = lvalue -# 2858| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2858| Conversion = [BoolConversion] conversion to bool -# 2858| Type = [BoolType] bool -# 2858| Value = [CStyleCast] 0 -# 2858| ValueCategory = prvalue -# 2859| getStmt(947): [DoStmt] do (...) ... -# 2861| getCondition(): [Literal] 0 -# 2861| Type = [IntType] int -# 2861| Value = [Literal] 0 -# 2861| ValueCategory = prvalue -# 2859| getStmt(): [BlockStmt] { ... } -# 2860| getStmt(0): [DeclStmt] declaration -# 2860| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x947 -# 2860| Type = [Struct] String -# 2860| getVariable().getInitializer(): [Initializer] initializer for x947 -# 2860| getExpr(): [ConstructorCall] call to String -# 2860| Type = [VoidType] void -# 2860| ValueCategory = prvalue -# 2861| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2861| Type = [VoidType] void -# 2861| ValueCategory = prvalue -# 2861| getQualifier(): [VariableAccess] x947 -# 2861| Type = [Struct] String -# 2861| ValueCategory = lvalue -# 2861| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2861| Conversion = [BoolConversion] conversion to bool -# 2861| Type = [BoolType] bool -# 2861| Value = [CStyleCast] 0 -# 2861| ValueCategory = prvalue -# 2862| getStmt(948): [DoStmt] do (...) ... -# 2864| getCondition(): [Literal] 0 -# 2864| Type = [IntType] int -# 2864| Value = [Literal] 0 -# 2864| ValueCategory = prvalue -# 2862| getStmt(): [BlockStmt] { ... } -# 2863| getStmt(0): [DeclStmt] declaration -# 2863| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x948 -# 2863| Type = [Struct] String -# 2863| getVariable().getInitializer(): [Initializer] initializer for x948 -# 2863| getExpr(): [ConstructorCall] call to String -# 2863| Type = [VoidType] void -# 2863| ValueCategory = prvalue -# 2864| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2864| Type = [VoidType] void -# 2864| ValueCategory = prvalue -# 2864| getQualifier(): [VariableAccess] x948 -# 2864| Type = [Struct] String -# 2864| ValueCategory = lvalue -# 2864| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2864| Conversion = [BoolConversion] conversion to bool -# 2864| Type = [BoolType] bool -# 2864| Value = [CStyleCast] 0 -# 2864| ValueCategory = prvalue -# 2865| getStmt(949): [DoStmt] do (...) ... -# 2867| getCondition(): [Literal] 0 -# 2867| Type = [IntType] int -# 2867| Value = [Literal] 0 -# 2867| ValueCategory = prvalue -# 2865| getStmt(): [BlockStmt] { ... } -# 2866| getStmt(0): [DeclStmt] declaration -# 2866| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x949 -# 2866| Type = [Struct] String -# 2866| getVariable().getInitializer(): [Initializer] initializer for x949 -# 2866| getExpr(): [ConstructorCall] call to String -# 2866| Type = [VoidType] void -# 2866| ValueCategory = prvalue -# 2867| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2867| Type = [VoidType] void -# 2867| ValueCategory = prvalue -# 2867| getQualifier(): [VariableAccess] x949 -# 2867| Type = [Struct] String -# 2867| ValueCategory = lvalue -# 2867| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2867| Conversion = [BoolConversion] conversion to bool -# 2867| Type = [BoolType] bool -# 2867| Value = [CStyleCast] 0 -# 2867| ValueCategory = prvalue -# 2868| getStmt(950): [DoStmt] do (...) ... -# 2870| getCondition(): [Literal] 0 -# 2870| Type = [IntType] int -# 2870| Value = [Literal] 0 -# 2870| ValueCategory = prvalue -# 2868| getStmt(): [BlockStmt] { ... } -# 2869| getStmt(0): [DeclStmt] declaration -# 2869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x950 -# 2869| Type = [Struct] String -# 2869| getVariable().getInitializer(): [Initializer] initializer for x950 -# 2869| getExpr(): [ConstructorCall] call to String -# 2869| Type = [VoidType] void -# 2869| ValueCategory = prvalue -# 2870| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2870| Type = [VoidType] void -# 2870| ValueCategory = prvalue -# 2870| getQualifier(): [VariableAccess] x950 -# 2870| Type = [Struct] String -# 2870| ValueCategory = lvalue -# 2870| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2870| Conversion = [BoolConversion] conversion to bool -# 2870| Type = [BoolType] bool -# 2870| Value = [CStyleCast] 0 -# 2870| ValueCategory = prvalue -# 2871| getStmt(951): [DoStmt] do (...) ... -# 2873| getCondition(): [Literal] 0 -# 2873| Type = [IntType] int -# 2873| Value = [Literal] 0 -# 2873| ValueCategory = prvalue -# 2871| getStmt(): [BlockStmt] { ... } -# 2872| getStmt(0): [DeclStmt] declaration -# 2872| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x951 -# 2872| Type = [Struct] String -# 2872| getVariable().getInitializer(): [Initializer] initializer for x951 -# 2872| getExpr(): [ConstructorCall] call to String -# 2872| Type = [VoidType] void -# 2872| ValueCategory = prvalue -# 2873| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2873| Type = [VoidType] void -# 2873| ValueCategory = prvalue -# 2873| getQualifier(): [VariableAccess] x951 -# 2873| Type = [Struct] String -# 2873| ValueCategory = lvalue -# 2873| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2873| Conversion = [BoolConversion] conversion to bool -# 2873| Type = [BoolType] bool -# 2873| Value = [CStyleCast] 0 -# 2873| ValueCategory = prvalue -# 2874| getStmt(952): [DoStmt] do (...) ... -# 2876| getCondition(): [Literal] 0 -# 2876| Type = [IntType] int -# 2876| Value = [Literal] 0 -# 2876| ValueCategory = prvalue -# 2874| getStmt(): [BlockStmt] { ... } -# 2875| getStmt(0): [DeclStmt] declaration -# 2875| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x952 -# 2875| Type = [Struct] String -# 2875| getVariable().getInitializer(): [Initializer] initializer for x952 -# 2875| getExpr(): [ConstructorCall] call to String -# 2875| Type = [VoidType] void -# 2875| ValueCategory = prvalue -# 2876| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2876| Type = [VoidType] void -# 2876| ValueCategory = prvalue -# 2876| getQualifier(): [VariableAccess] x952 -# 2876| Type = [Struct] String -# 2876| ValueCategory = lvalue -# 2876| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2876| Conversion = [BoolConversion] conversion to bool -# 2876| Type = [BoolType] bool -# 2876| Value = [CStyleCast] 0 -# 2876| ValueCategory = prvalue -# 2877| getStmt(953): [DoStmt] do (...) ... -# 2879| getCondition(): [Literal] 0 -# 2879| Type = [IntType] int -# 2879| Value = [Literal] 0 -# 2879| ValueCategory = prvalue -# 2877| getStmt(): [BlockStmt] { ... } -# 2878| getStmt(0): [DeclStmt] declaration -# 2878| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x953 -# 2878| Type = [Struct] String -# 2878| getVariable().getInitializer(): [Initializer] initializer for x953 -# 2878| getExpr(): [ConstructorCall] call to String -# 2878| Type = [VoidType] void -# 2878| ValueCategory = prvalue -# 2879| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2879| Type = [VoidType] void -# 2879| ValueCategory = prvalue -# 2879| getQualifier(): [VariableAccess] x953 -# 2879| Type = [Struct] String -# 2879| ValueCategory = lvalue -# 2879| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2879| Conversion = [BoolConversion] conversion to bool -# 2879| Type = [BoolType] bool -# 2879| Value = [CStyleCast] 0 -# 2879| ValueCategory = prvalue -# 2880| getStmt(954): [DoStmt] do (...) ... -# 2882| getCondition(): [Literal] 0 -# 2882| Type = [IntType] int -# 2882| Value = [Literal] 0 -# 2882| ValueCategory = prvalue -# 2880| getStmt(): [BlockStmt] { ... } -# 2881| getStmt(0): [DeclStmt] declaration -# 2881| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x954 -# 2881| Type = [Struct] String -# 2881| getVariable().getInitializer(): [Initializer] initializer for x954 -# 2881| getExpr(): [ConstructorCall] call to String -# 2881| Type = [VoidType] void -# 2881| ValueCategory = prvalue -# 2882| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2882| Type = [VoidType] void -# 2882| ValueCategory = prvalue -# 2882| getQualifier(): [VariableAccess] x954 -# 2882| Type = [Struct] String -# 2882| ValueCategory = lvalue -# 2882| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2882| Conversion = [BoolConversion] conversion to bool -# 2882| Type = [BoolType] bool -# 2882| Value = [CStyleCast] 0 -# 2882| ValueCategory = prvalue -# 2883| getStmt(955): [DoStmt] do (...) ... -# 2885| getCondition(): [Literal] 0 -# 2885| Type = [IntType] int -# 2885| Value = [Literal] 0 -# 2885| ValueCategory = prvalue -# 2883| getStmt(): [BlockStmt] { ... } -# 2884| getStmt(0): [DeclStmt] declaration -# 2884| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x955 -# 2884| Type = [Struct] String -# 2884| getVariable().getInitializer(): [Initializer] initializer for x955 -# 2884| getExpr(): [ConstructorCall] call to String -# 2884| Type = [VoidType] void -# 2884| ValueCategory = prvalue -# 2885| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2885| Type = [VoidType] void -# 2885| ValueCategory = prvalue -# 2885| getQualifier(): [VariableAccess] x955 -# 2885| Type = [Struct] String -# 2885| ValueCategory = lvalue -# 2885| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2885| Conversion = [BoolConversion] conversion to bool -# 2885| Type = [BoolType] bool -# 2885| Value = [CStyleCast] 0 -# 2885| ValueCategory = prvalue -# 2886| getStmt(956): [DoStmt] do (...) ... -# 2888| getCondition(): [Literal] 0 -# 2888| Type = [IntType] int -# 2888| Value = [Literal] 0 -# 2888| ValueCategory = prvalue -# 2886| getStmt(): [BlockStmt] { ... } -# 2887| getStmt(0): [DeclStmt] declaration -# 2887| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x956 -# 2887| Type = [Struct] String -# 2887| getVariable().getInitializer(): [Initializer] initializer for x956 -# 2887| getExpr(): [ConstructorCall] call to String -# 2887| Type = [VoidType] void -# 2887| ValueCategory = prvalue -# 2888| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2888| Type = [VoidType] void -# 2888| ValueCategory = prvalue -# 2888| getQualifier(): [VariableAccess] x956 -# 2888| Type = [Struct] String -# 2888| ValueCategory = lvalue -# 2888| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2888| Conversion = [BoolConversion] conversion to bool -# 2888| Type = [BoolType] bool -# 2888| Value = [CStyleCast] 0 -# 2888| ValueCategory = prvalue -# 2889| getStmt(957): [DoStmt] do (...) ... -# 2891| getCondition(): [Literal] 0 -# 2891| Type = [IntType] int -# 2891| Value = [Literal] 0 -# 2891| ValueCategory = prvalue -# 2889| getStmt(): [BlockStmt] { ... } -# 2890| getStmt(0): [DeclStmt] declaration -# 2890| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x957 -# 2890| Type = [Struct] String -# 2890| getVariable().getInitializer(): [Initializer] initializer for x957 -# 2890| getExpr(): [ConstructorCall] call to String -# 2890| Type = [VoidType] void -# 2890| ValueCategory = prvalue -# 2891| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2891| Type = [VoidType] void -# 2891| ValueCategory = prvalue -# 2891| getQualifier(): [VariableAccess] x957 -# 2891| Type = [Struct] String -# 2891| ValueCategory = lvalue -# 2891| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2891| Conversion = [BoolConversion] conversion to bool -# 2891| Type = [BoolType] bool -# 2891| Value = [CStyleCast] 0 -# 2891| ValueCategory = prvalue -# 2892| getStmt(958): [DoStmt] do (...) ... -# 2894| getCondition(): [Literal] 0 -# 2894| Type = [IntType] int -# 2894| Value = [Literal] 0 -# 2894| ValueCategory = prvalue -# 2892| getStmt(): [BlockStmt] { ... } -# 2893| getStmt(0): [DeclStmt] declaration -# 2893| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x958 -# 2893| Type = [Struct] String -# 2893| getVariable().getInitializer(): [Initializer] initializer for x958 -# 2893| getExpr(): [ConstructorCall] call to String -# 2893| Type = [VoidType] void -# 2893| ValueCategory = prvalue -# 2894| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2894| Type = [VoidType] void -# 2894| ValueCategory = prvalue -# 2894| getQualifier(): [VariableAccess] x958 -# 2894| Type = [Struct] String -# 2894| ValueCategory = lvalue -# 2894| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2894| Conversion = [BoolConversion] conversion to bool -# 2894| Type = [BoolType] bool -# 2894| Value = [CStyleCast] 0 -# 2894| ValueCategory = prvalue -# 2895| getStmt(959): [DoStmt] do (...) ... -# 2897| getCondition(): [Literal] 0 -# 2897| Type = [IntType] int -# 2897| Value = [Literal] 0 -# 2897| ValueCategory = prvalue -# 2895| getStmt(): [BlockStmt] { ... } -# 2896| getStmt(0): [DeclStmt] declaration -# 2896| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x959 -# 2896| Type = [Struct] String -# 2896| getVariable().getInitializer(): [Initializer] initializer for x959 -# 2896| getExpr(): [ConstructorCall] call to String -# 2896| Type = [VoidType] void -# 2896| ValueCategory = prvalue -# 2897| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2897| Type = [VoidType] void -# 2897| ValueCategory = prvalue -# 2897| getQualifier(): [VariableAccess] x959 -# 2897| Type = [Struct] String -# 2897| ValueCategory = lvalue -# 2897| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2897| Conversion = [BoolConversion] conversion to bool -# 2897| Type = [BoolType] bool -# 2897| Value = [CStyleCast] 0 -# 2897| ValueCategory = prvalue -# 2898| getStmt(960): [DoStmt] do (...) ... -# 2900| getCondition(): [Literal] 0 -# 2900| Type = [IntType] int -# 2900| Value = [Literal] 0 -# 2900| ValueCategory = prvalue -# 2898| getStmt(): [BlockStmt] { ... } -# 2899| getStmt(0): [DeclStmt] declaration -# 2899| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x960 -# 2899| Type = [Struct] String -# 2899| getVariable().getInitializer(): [Initializer] initializer for x960 -# 2899| getExpr(): [ConstructorCall] call to String -# 2899| Type = [VoidType] void -# 2899| ValueCategory = prvalue -# 2900| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2900| Type = [VoidType] void -# 2900| ValueCategory = prvalue -# 2900| getQualifier(): [VariableAccess] x960 -# 2900| Type = [Struct] String -# 2900| ValueCategory = lvalue -# 2900| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2900| Conversion = [BoolConversion] conversion to bool -# 2900| Type = [BoolType] bool -# 2900| Value = [CStyleCast] 0 -# 2900| ValueCategory = prvalue -# 2901| getStmt(961): [DoStmt] do (...) ... -# 2903| getCondition(): [Literal] 0 -# 2903| Type = [IntType] int -# 2903| Value = [Literal] 0 -# 2903| ValueCategory = prvalue -# 2901| getStmt(): [BlockStmt] { ... } -# 2902| getStmt(0): [DeclStmt] declaration -# 2902| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x961 -# 2902| Type = [Struct] String -# 2902| getVariable().getInitializer(): [Initializer] initializer for x961 -# 2902| getExpr(): [ConstructorCall] call to String -# 2902| Type = [VoidType] void -# 2902| ValueCategory = prvalue -# 2903| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2903| Type = [VoidType] void -# 2903| ValueCategory = prvalue -# 2903| getQualifier(): [VariableAccess] x961 -# 2903| Type = [Struct] String -# 2903| ValueCategory = lvalue -# 2903| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2903| Conversion = [BoolConversion] conversion to bool -# 2903| Type = [BoolType] bool -# 2903| Value = [CStyleCast] 0 -# 2903| ValueCategory = prvalue -# 2904| getStmt(962): [DoStmt] do (...) ... -# 2906| getCondition(): [Literal] 0 -# 2906| Type = [IntType] int -# 2906| Value = [Literal] 0 -# 2906| ValueCategory = prvalue -# 2904| getStmt(): [BlockStmt] { ... } -# 2905| getStmt(0): [DeclStmt] declaration -# 2905| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x962 -# 2905| Type = [Struct] String -# 2905| getVariable().getInitializer(): [Initializer] initializer for x962 -# 2905| getExpr(): [ConstructorCall] call to String -# 2905| Type = [VoidType] void -# 2905| ValueCategory = prvalue -# 2906| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2906| Type = [VoidType] void -# 2906| ValueCategory = prvalue -# 2906| getQualifier(): [VariableAccess] x962 -# 2906| Type = [Struct] String -# 2906| ValueCategory = lvalue -# 2906| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2906| Conversion = [BoolConversion] conversion to bool -# 2906| Type = [BoolType] bool -# 2906| Value = [CStyleCast] 0 -# 2906| ValueCategory = prvalue -# 2907| getStmt(963): [DoStmt] do (...) ... -# 2909| getCondition(): [Literal] 0 -# 2909| Type = [IntType] int -# 2909| Value = [Literal] 0 -# 2909| ValueCategory = prvalue -# 2907| getStmt(): [BlockStmt] { ... } -# 2908| getStmt(0): [DeclStmt] declaration -# 2908| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x963 -# 2908| Type = [Struct] String -# 2908| getVariable().getInitializer(): [Initializer] initializer for x963 -# 2908| getExpr(): [ConstructorCall] call to String -# 2908| Type = [VoidType] void -# 2908| ValueCategory = prvalue -# 2909| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2909| Type = [VoidType] void -# 2909| ValueCategory = prvalue -# 2909| getQualifier(): [VariableAccess] x963 -# 2909| Type = [Struct] String -# 2909| ValueCategory = lvalue -# 2909| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2909| Conversion = [BoolConversion] conversion to bool -# 2909| Type = [BoolType] bool -# 2909| Value = [CStyleCast] 0 -# 2909| ValueCategory = prvalue -# 2910| getStmt(964): [DoStmt] do (...) ... -# 2912| getCondition(): [Literal] 0 -# 2912| Type = [IntType] int -# 2912| Value = [Literal] 0 -# 2912| ValueCategory = prvalue -# 2910| getStmt(): [BlockStmt] { ... } -# 2911| getStmt(0): [DeclStmt] declaration -# 2911| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x964 -# 2911| Type = [Struct] String -# 2911| getVariable().getInitializer(): [Initializer] initializer for x964 -# 2911| getExpr(): [ConstructorCall] call to String -# 2911| Type = [VoidType] void -# 2911| ValueCategory = prvalue -# 2912| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2912| Type = [VoidType] void -# 2912| ValueCategory = prvalue -# 2912| getQualifier(): [VariableAccess] x964 -# 2912| Type = [Struct] String -# 2912| ValueCategory = lvalue -# 2912| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2912| Conversion = [BoolConversion] conversion to bool -# 2912| Type = [BoolType] bool -# 2912| Value = [CStyleCast] 0 -# 2912| ValueCategory = prvalue -# 2913| getStmt(965): [DoStmt] do (...) ... -# 2915| getCondition(): [Literal] 0 -# 2915| Type = [IntType] int -# 2915| Value = [Literal] 0 -# 2915| ValueCategory = prvalue -# 2913| getStmt(): [BlockStmt] { ... } -# 2914| getStmt(0): [DeclStmt] declaration -# 2914| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x965 -# 2914| Type = [Struct] String -# 2914| getVariable().getInitializer(): [Initializer] initializer for x965 -# 2914| getExpr(): [ConstructorCall] call to String -# 2914| Type = [VoidType] void -# 2914| ValueCategory = prvalue -# 2915| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2915| Type = [VoidType] void -# 2915| ValueCategory = prvalue -# 2915| getQualifier(): [VariableAccess] x965 -# 2915| Type = [Struct] String -# 2915| ValueCategory = lvalue -# 2915| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2915| Conversion = [BoolConversion] conversion to bool -# 2915| Type = [BoolType] bool -# 2915| Value = [CStyleCast] 0 -# 2915| ValueCategory = prvalue -# 2916| getStmt(966): [DoStmt] do (...) ... -# 2918| getCondition(): [Literal] 0 -# 2918| Type = [IntType] int -# 2918| Value = [Literal] 0 -# 2918| ValueCategory = prvalue -# 2916| getStmt(): [BlockStmt] { ... } -# 2917| getStmt(0): [DeclStmt] declaration -# 2917| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x966 -# 2917| Type = [Struct] String -# 2917| getVariable().getInitializer(): [Initializer] initializer for x966 -# 2917| getExpr(): [ConstructorCall] call to String -# 2917| Type = [VoidType] void -# 2917| ValueCategory = prvalue -# 2918| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2918| Type = [VoidType] void -# 2918| ValueCategory = prvalue -# 2918| getQualifier(): [VariableAccess] x966 -# 2918| Type = [Struct] String -# 2918| ValueCategory = lvalue -# 2918| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2918| Conversion = [BoolConversion] conversion to bool -# 2918| Type = [BoolType] bool -# 2918| Value = [CStyleCast] 0 -# 2918| ValueCategory = prvalue -# 2919| getStmt(967): [DoStmt] do (...) ... -# 2921| getCondition(): [Literal] 0 -# 2921| Type = [IntType] int -# 2921| Value = [Literal] 0 -# 2921| ValueCategory = prvalue -# 2919| getStmt(): [BlockStmt] { ... } -# 2920| getStmt(0): [DeclStmt] declaration -# 2920| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x967 -# 2920| Type = [Struct] String -# 2920| getVariable().getInitializer(): [Initializer] initializer for x967 -# 2920| getExpr(): [ConstructorCall] call to String -# 2920| Type = [VoidType] void -# 2920| ValueCategory = prvalue -# 2921| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2921| Type = [VoidType] void -# 2921| ValueCategory = prvalue -# 2921| getQualifier(): [VariableAccess] x967 -# 2921| Type = [Struct] String -# 2921| ValueCategory = lvalue -# 2921| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2921| Conversion = [BoolConversion] conversion to bool -# 2921| Type = [BoolType] bool -# 2921| Value = [CStyleCast] 0 -# 2921| ValueCategory = prvalue -# 2922| getStmt(968): [DoStmt] do (...) ... -# 2924| getCondition(): [Literal] 0 -# 2924| Type = [IntType] int -# 2924| Value = [Literal] 0 -# 2924| ValueCategory = prvalue -# 2922| getStmt(): [BlockStmt] { ... } -# 2923| getStmt(0): [DeclStmt] declaration -# 2923| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x968 -# 2923| Type = [Struct] String -# 2923| getVariable().getInitializer(): [Initializer] initializer for x968 -# 2923| getExpr(): [ConstructorCall] call to String -# 2923| Type = [VoidType] void -# 2923| ValueCategory = prvalue -# 2924| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2924| Type = [VoidType] void -# 2924| ValueCategory = prvalue -# 2924| getQualifier(): [VariableAccess] x968 -# 2924| Type = [Struct] String -# 2924| ValueCategory = lvalue -# 2924| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2924| Conversion = [BoolConversion] conversion to bool -# 2924| Type = [BoolType] bool -# 2924| Value = [CStyleCast] 0 -# 2924| ValueCategory = prvalue -# 2925| getStmt(969): [DoStmt] do (...) ... -# 2927| getCondition(): [Literal] 0 -# 2927| Type = [IntType] int -# 2927| Value = [Literal] 0 -# 2927| ValueCategory = prvalue -# 2925| getStmt(): [BlockStmt] { ... } -# 2926| getStmt(0): [DeclStmt] declaration -# 2926| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x969 -# 2926| Type = [Struct] String -# 2926| getVariable().getInitializer(): [Initializer] initializer for x969 -# 2926| getExpr(): [ConstructorCall] call to String -# 2926| Type = [VoidType] void -# 2926| ValueCategory = prvalue -# 2927| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2927| Type = [VoidType] void -# 2927| ValueCategory = prvalue -# 2927| getQualifier(): [VariableAccess] x969 -# 2927| Type = [Struct] String -# 2927| ValueCategory = lvalue -# 2927| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2927| Conversion = [BoolConversion] conversion to bool -# 2927| Type = [BoolType] bool -# 2927| Value = [CStyleCast] 0 -# 2927| ValueCategory = prvalue -# 2928| getStmt(970): [DoStmt] do (...) ... -# 2930| getCondition(): [Literal] 0 -# 2930| Type = [IntType] int -# 2930| Value = [Literal] 0 -# 2930| ValueCategory = prvalue -# 2928| getStmt(): [BlockStmt] { ... } -# 2929| getStmt(0): [DeclStmt] declaration -# 2929| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x970 -# 2929| Type = [Struct] String -# 2929| getVariable().getInitializer(): [Initializer] initializer for x970 -# 2929| getExpr(): [ConstructorCall] call to String -# 2929| Type = [VoidType] void -# 2929| ValueCategory = prvalue -# 2930| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2930| Type = [VoidType] void -# 2930| ValueCategory = prvalue -# 2930| getQualifier(): [VariableAccess] x970 -# 2930| Type = [Struct] String -# 2930| ValueCategory = lvalue -# 2930| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2930| Conversion = [BoolConversion] conversion to bool -# 2930| Type = [BoolType] bool -# 2930| Value = [CStyleCast] 0 -# 2930| ValueCategory = prvalue -# 2931| getStmt(971): [DoStmt] do (...) ... -# 2933| getCondition(): [Literal] 0 -# 2933| Type = [IntType] int -# 2933| Value = [Literal] 0 -# 2933| ValueCategory = prvalue -# 2931| getStmt(): [BlockStmt] { ... } -# 2932| getStmt(0): [DeclStmt] declaration -# 2932| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x971 -# 2932| Type = [Struct] String -# 2932| getVariable().getInitializer(): [Initializer] initializer for x971 -# 2932| getExpr(): [ConstructorCall] call to String -# 2932| Type = [VoidType] void -# 2932| ValueCategory = prvalue -# 2933| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2933| Type = [VoidType] void -# 2933| ValueCategory = prvalue -# 2933| getQualifier(): [VariableAccess] x971 -# 2933| Type = [Struct] String -# 2933| ValueCategory = lvalue -# 2933| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2933| Conversion = [BoolConversion] conversion to bool -# 2933| Type = [BoolType] bool -# 2933| Value = [CStyleCast] 0 -# 2933| ValueCategory = prvalue -# 2934| getStmt(972): [DoStmt] do (...) ... -# 2936| getCondition(): [Literal] 0 -# 2936| Type = [IntType] int -# 2936| Value = [Literal] 0 -# 2936| ValueCategory = prvalue -# 2934| getStmt(): [BlockStmt] { ... } -# 2935| getStmt(0): [DeclStmt] declaration -# 2935| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x972 -# 2935| Type = [Struct] String -# 2935| getVariable().getInitializer(): [Initializer] initializer for x972 -# 2935| getExpr(): [ConstructorCall] call to String -# 2935| Type = [VoidType] void -# 2935| ValueCategory = prvalue -# 2936| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2936| Type = [VoidType] void -# 2936| ValueCategory = prvalue -# 2936| getQualifier(): [VariableAccess] x972 -# 2936| Type = [Struct] String -# 2936| ValueCategory = lvalue -# 2936| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2936| Conversion = [BoolConversion] conversion to bool -# 2936| Type = [BoolType] bool -# 2936| Value = [CStyleCast] 0 -# 2936| ValueCategory = prvalue -# 2937| getStmt(973): [DoStmt] do (...) ... -# 2939| getCondition(): [Literal] 0 -# 2939| Type = [IntType] int -# 2939| Value = [Literal] 0 -# 2939| ValueCategory = prvalue -# 2937| getStmt(): [BlockStmt] { ... } -# 2938| getStmt(0): [DeclStmt] declaration -# 2938| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x973 -# 2938| Type = [Struct] String -# 2938| getVariable().getInitializer(): [Initializer] initializer for x973 -# 2938| getExpr(): [ConstructorCall] call to String -# 2938| Type = [VoidType] void -# 2938| ValueCategory = prvalue -# 2939| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2939| Type = [VoidType] void -# 2939| ValueCategory = prvalue -# 2939| getQualifier(): [VariableAccess] x973 -# 2939| Type = [Struct] String -# 2939| ValueCategory = lvalue -# 2939| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2939| Conversion = [BoolConversion] conversion to bool -# 2939| Type = [BoolType] bool -# 2939| Value = [CStyleCast] 0 -# 2939| ValueCategory = prvalue -# 2940| getStmt(974): [DoStmt] do (...) ... -# 2942| getCondition(): [Literal] 0 -# 2942| Type = [IntType] int -# 2942| Value = [Literal] 0 -# 2942| ValueCategory = prvalue -# 2940| getStmt(): [BlockStmt] { ... } -# 2941| getStmt(0): [DeclStmt] declaration -# 2941| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x974 -# 2941| Type = [Struct] String -# 2941| getVariable().getInitializer(): [Initializer] initializer for x974 -# 2941| getExpr(): [ConstructorCall] call to String -# 2941| Type = [VoidType] void -# 2941| ValueCategory = prvalue -# 2942| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2942| Type = [VoidType] void -# 2942| ValueCategory = prvalue -# 2942| getQualifier(): [VariableAccess] x974 -# 2942| Type = [Struct] String -# 2942| ValueCategory = lvalue -# 2942| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2942| Conversion = [BoolConversion] conversion to bool -# 2942| Type = [BoolType] bool -# 2942| Value = [CStyleCast] 0 -# 2942| ValueCategory = prvalue -# 2943| getStmt(975): [DoStmt] do (...) ... -# 2945| getCondition(): [Literal] 0 -# 2945| Type = [IntType] int -# 2945| Value = [Literal] 0 -# 2945| ValueCategory = prvalue -# 2943| getStmt(): [BlockStmt] { ... } -# 2944| getStmt(0): [DeclStmt] declaration -# 2944| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x975 -# 2944| Type = [Struct] String -# 2944| getVariable().getInitializer(): [Initializer] initializer for x975 -# 2944| getExpr(): [ConstructorCall] call to String -# 2944| Type = [VoidType] void -# 2944| ValueCategory = prvalue -# 2945| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2945| Type = [VoidType] void -# 2945| ValueCategory = prvalue -# 2945| getQualifier(): [VariableAccess] x975 -# 2945| Type = [Struct] String -# 2945| ValueCategory = lvalue -# 2945| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2945| Conversion = [BoolConversion] conversion to bool -# 2945| Type = [BoolType] bool -# 2945| Value = [CStyleCast] 0 -# 2945| ValueCategory = prvalue -# 2946| getStmt(976): [DoStmt] do (...) ... -# 2948| getCondition(): [Literal] 0 -# 2948| Type = [IntType] int -# 2948| Value = [Literal] 0 -# 2948| ValueCategory = prvalue -# 2946| getStmt(): [BlockStmt] { ... } -# 2947| getStmt(0): [DeclStmt] declaration -# 2947| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x976 -# 2947| Type = [Struct] String -# 2947| getVariable().getInitializer(): [Initializer] initializer for x976 -# 2947| getExpr(): [ConstructorCall] call to String -# 2947| Type = [VoidType] void -# 2947| ValueCategory = prvalue -# 2948| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2948| Type = [VoidType] void -# 2948| ValueCategory = prvalue -# 2948| getQualifier(): [VariableAccess] x976 -# 2948| Type = [Struct] String -# 2948| ValueCategory = lvalue -# 2948| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2948| Conversion = [BoolConversion] conversion to bool -# 2948| Type = [BoolType] bool -# 2948| Value = [CStyleCast] 0 -# 2948| ValueCategory = prvalue -# 2949| getStmt(977): [DoStmt] do (...) ... -# 2951| getCondition(): [Literal] 0 -# 2951| Type = [IntType] int -# 2951| Value = [Literal] 0 -# 2951| ValueCategory = prvalue -# 2949| getStmt(): [BlockStmt] { ... } -# 2950| getStmt(0): [DeclStmt] declaration -# 2950| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x977 -# 2950| Type = [Struct] String -# 2950| getVariable().getInitializer(): [Initializer] initializer for x977 -# 2950| getExpr(): [ConstructorCall] call to String -# 2950| Type = [VoidType] void -# 2950| ValueCategory = prvalue -# 2951| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2951| Type = [VoidType] void -# 2951| ValueCategory = prvalue -# 2951| getQualifier(): [VariableAccess] x977 -# 2951| Type = [Struct] String -# 2951| ValueCategory = lvalue -# 2951| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2951| Conversion = [BoolConversion] conversion to bool -# 2951| Type = [BoolType] bool -# 2951| Value = [CStyleCast] 0 -# 2951| ValueCategory = prvalue -# 2952| getStmt(978): [DoStmt] do (...) ... -# 2954| getCondition(): [Literal] 0 -# 2954| Type = [IntType] int -# 2954| Value = [Literal] 0 -# 2954| ValueCategory = prvalue -# 2952| getStmt(): [BlockStmt] { ... } -# 2953| getStmt(0): [DeclStmt] declaration -# 2953| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x978 -# 2953| Type = [Struct] String -# 2953| getVariable().getInitializer(): [Initializer] initializer for x978 -# 2953| getExpr(): [ConstructorCall] call to String -# 2953| Type = [VoidType] void -# 2953| ValueCategory = prvalue -# 2954| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2954| Type = [VoidType] void -# 2954| ValueCategory = prvalue -# 2954| getQualifier(): [VariableAccess] x978 -# 2954| Type = [Struct] String -# 2954| ValueCategory = lvalue -# 2954| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2954| Conversion = [BoolConversion] conversion to bool -# 2954| Type = [BoolType] bool -# 2954| Value = [CStyleCast] 0 -# 2954| ValueCategory = prvalue -# 2955| getStmt(979): [DoStmt] do (...) ... -# 2957| getCondition(): [Literal] 0 -# 2957| Type = [IntType] int -# 2957| Value = [Literal] 0 -# 2957| ValueCategory = prvalue -# 2955| getStmt(): [BlockStmt] { ... } -# 2956| getStmt(0): [DeclStmt] declaration -# 2956| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x979 -# 2956| Type = [Struct] String -# 2956| getVariable().getInitializer(): [Initializer] initializer for x979 -# 2956| getExpr(): [ConstructorCall] call to String -# 2956| Type = [VoidType] void -# 2956| ValueCategory = prvalue -# 2957| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2957| Type = [VoidType] void -# 2957| ValueCategory = prvalue -# 2957| getQualifier(): [VariableAccess] x979 -# 2957| Type = [Struct] String -# 2957| ValueCategory = lvalue -# 2957| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2957| Conversion = [BoolConversion] conversion to bool -# 2957| Type = [BoolType] bool -# 2957| Value = [CStyleCast] 0 -# 2957| ValueCategory = prvalue -# 2958| getStmt(980): [DoStmt] do (...) ... -# 2960| getCondition(): [Literal] 0 -# 2960| Type = [IntType] int -# 2960| Value = [Literal] 0 -# 2960| ValueCategory = prvalue -# 2958| getStmt(): [BlockStmt] { ... } -# 2959| getStmt(0): [DeclStmt] declaration -# 2959| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x980 -# 2959| Type = [Struct] String -# 2959| getVariable().getInitializer(): [Initializer] initializer for x980 -# 2959| getExpr(): [ConstructorCall] call to String -# 2959| Type = [VoidType] void -# 2959| ValueCategory = prvalue -# 2960| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2960| Type = [VoidType] void -# 2960| ValueCategory = prvalue -# 2960| getQualifier(): [VariableAccess] x980 -# 2960| Type = [Struct] String -# 2960| ValueCategory = lvalue -# 2960| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2960| Conversion = [BoolConversion] conversion to bool -# 2960| Type = [BoolType] bool -# 2960| Value = [CStyleCast] 0 -# 2960| ValueCategory = prvalue -# 2961| getStmt(981): [DoStmt] do (...) ... -# 2963| getCondition(): [Literal] 0 -# 2963| Type = [IntType] int -# 2963| Value = [Literal] 0 -# 2963| ValueCategory = prvalue -# 2961| getStmt(): [BlockStmt] { ... } -# 2962| getStmt(0): [DeclStmt] declaration -# 2962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x981 -# 2962| Type = [Struct] String -# 2962| getVariable().getInitializer(): [Initializer] initializer for x981 -# 2962| getExpr(): [ConstructorCall] call to String -# 2962| Type = [VoidType] void -# 2962| ValueCategory = prvalue -# 2963| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2963| Type = [VoidType] void -# 2963| ValueCategory = prvalue -# 2963| getQualifier(): [VariableAccess] x981 -# 2963| Type = [Struct] String -# 2963| ValueCategory = lvalue -# 2963| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2963| Conversion = [BoolConversion] conversion to bool -# 2963| Type = [BoolType] bool -# 2963| Value = [CStyleCast] 0 -# 2963| ValueCategory = prvalue -# 2964| getStmt(982): [DoStmt] do (...) ... -# 2966| getCondition(): [Literal] 0 -# 2966| Type = [IntType] int -# 2966| Value = [Literal] 0 -# 2966| ValueCategory = prvalue -# 2964| getStmt(): [BlockStmt] { ... } -# 2965| getStmt(0): [DeclStmt] declaration -# 2965| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x982 -# 2965| Type = [Struct] String -# 2965| getVariable().getInitializer(): [Initializer] initializer for x982 -# 2965| getExpr(): [ConstructorCall] call to String -# 2965| Type = [VoidType] void -# 2965| ValueCategory = prvalue -# 2966| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2966| Type = [VoidType] void -# 2966| ValueCategory = prvalue -# 2966| getQualifier(): [VariableAccess] x982 -# 2966| Type = [Struct] String -# 2966| ValueCategory = lvalue -# 2966| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2966| Conversion = [BoolConversion] conversion to bool -# 2966| Type = [BoolType] bool -# 2966| Value = [CStyleCast] 0 -# 2966| ValueCategory = prvalue -# 2967| getStmt(983): [DoStmt] do (...) ... -# 2969| getCondition(): [Literal] 0 -# 2969| Type = [IntType] int -# 2969| Value = [Literal] 0 -# 2969| ValueCategory = prvalue -# 2967| getStmt(): [BlockStmt] { ... } -# 2968| getStmt(0): [DeclStmt] declaration -# 2968| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x983 -# 2968| Type = [Struct] String -# 2968| getVariable().getInitializer(): [Initializer] initializer for x983 -# 2968| getExpr(): [ConstructorCall] call to String -# 2968| Type = [VoidType] void -# 2968| ValueCategory = prvalue -# 2969| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2969| Type = [VoidType] void -# 2969| ValueCategory = prvalue -# 2969| getQualifier(): [VariableAccess] x983 -# 2969| Type = [Struct] String -# 2969| ValueCategory = lvalue -# 2969| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2969| Conversion = [BoolConversion] conversion to bool -# 2969| Type = [BoolType] bool -# 2969| Value = [CStyleCast] 0 -# 2969| ValueCategory = prvalue -# 2970| getStmt(984): [DoStmt] do (...) ... -# 2972| getCondition(): [Literal] 0 -# 2972| Type = [IntType] int -# 2972| Value = [Literal] 0 -# 2972| ValueCategory = prvalue -# 2970| getStmt(): [BlockStmt] { ... } -# 2971| getStmt(0): [DeclStmt] declaration -# 2971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x984 -# 2971| Type = [Struct] String -# 2971| getVariable().getInitializer(): [Initializer] initializer for x984 -# 2971| getExpr(): [ConstructorCall] call to String -# 2971| Type = [VoidType] void -# 2971| ValueCategory = prvalue -# 2972| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2972| Type = [VoidType] void -# 2972| ValueCategory = prvalue -# 2972| getQualifier(): [VariableAccess] x984 -# 2972| Type = [Struct] String -# 2972| ValueCategory = lvalue -# 2972| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2972| Conversion = [BoolConversion] conversion to bool -# 2972| Type = [BoolType] bool -# 2972| Value = [CStyleCast] 0 -# 2972| ValueCategory = prvalue -# 2973| getStmt(985): [DoStmt] do (...) ... -# 2975| getCondition(): [Literal] 0 -# 2975| Type = [IntType] int -# 2975| Value = [Literal] 0 -# 2975| ValueCategory = prvalue -# 2973| getStmt(): [BlockStmt] { ... } -# 2974| getStmt(0): [DeclStmt] declaration -# 2974| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x985 -# 2974| Type = [Struct] String -# 2974| getVariable().getInitializer(): [Initializer] initializer for x985 -# 2974| getExpr(): [ConstructorCall] call to String -# 2974| Type = [VoidType] void -# 2974| ValueCategory = prvalue -# 2975| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2975| Type = [VoidType] void -# 2975| ValueCategory = prvalue -# 2975| getQualifier(): [VariableAccess] x985 -# 2975| Type = [Struct] String -# 2975| ValueCategory = lvalue -# 2975| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2975| Conversion = [BoolConversion] conversion to bool -# 2975| Type = [BoolType] bool -# 2975| Value = [CStyleCast] 0 -# 2975| ValueCategory = prvalue -# 2976| getStmt(986): [DoStmt] do (...) ... -# 2978| getCondition(): [Literal] 0 -# 2978| Type = [IntType] int -# 2978| Value = [Literal] 0 -# 2978| ValueCategory = prvalue -# 2976| getStmt(): [BlockStmt] { ... } -# 2977| getStmt(0): [DeclStmt] declaration -# 2977| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x986 -# 2977| Type = [Struct] String -# 2977| getVariable().getInitializer(): [Initializer] initializer for x986 -# 2977| getExpr(): [ConstructorCall] call to String -# 2977| Type = [VoidType] void -# 2977| ValueCategory = prvalue -# 2978| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2978| Type = [VoidType] void -# 2978| ValueCategory = prvalue -# 2978| getQualifier(): [VariableAccess] x986 -# 2978| Type = [Struct] String -# 2978| ValueCategory = lvalue -# 2978| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2978| Conversion = [BoolConversion] conversion to bool -# 2978| Type = [BoolType] bool -# 2978| Value = [CStyleCast] 0 -# 2978| ValueCategory = prvalue -# 2979| getStmt(987): [DoStmt] do (...) ... -# 2981| getCondition(): [Literal] 0 -# 2981| Type = [IntType] int -# 2981| Value = [Literal] 0 -# 2981| ValueCategory = prvalue -# 2979| getStmt(): [BlockStmt] { ... } -# 2980| getStmt(0): [DeclStmt] declaration -# 2980| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x987 -# 2980| Type = [Struct] String -# 2980| getVariable().getInitializer(): [Initializer] initializer for x987 -# 2980| getExpr(): [ConstructorCall] call to String -# 2980| Type = [VoidType] void -# 2980| ValueCategory = prvalue -# 2981| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2981| Type = [VoidType] void -# 2981| ValueCategory = prvalue -# 2981| getQualifier(): [VariableAccess] x987 -# 2981| Type = [Struct] String -# 2981| ValueCategory = lvalue -# 2981| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2981| Conversion = [BoolConversion] conversion to bool -# 2981| Type = [BoolType] bool -# 2981| Value = [CStyleCast] 0 -# 2981| ValueCategory = prvalue -# 2982| getStmt(988): [DoStmt] do (...) ... -# 2984| getCondition(): [Literal] 0 -# 2984| Type = [IntType] int -# 2984| Value = [Literal] 0 -# 2984| ValueCategory = prvalue -# 2982| getStmt(): [BlockStmt] { ... } -# 2983| getStmt(0): [DeclStmt] declaration -# 2983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x988 -# 2983| Type = [Struct] String -# 2983| getVariable().getInitializer(): [Initializer] initializer for x988 -# 2983| getExpr(): [ConstructorCall] call to String -# 2983| Type = [VoidType] void -# 2983| ValueCategory = prvalue -# 2984| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2984| Type = [VoidType] void -# 2984| ValueCategory = prvalue -# 2984| getQualifier(): [VariableAccess] x988 -# 2984| Type = [Struct] String -# 2984| ValueCategory = lvalue -# 2984| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2984| Conversion = [BoolConversion] conversion to bool -# 2984| Type = [BoolType] bool -# 2984| Value = [CStyleCast] 0 -# 2984| ValueCategory = prvalue -# 2985| getStmt(989): [DoStmt] do (...) ... -# 2987| getCondition(): [Literal] 0 -# 2987| Type = [IntType] int -# 2987| Value = [Literal] 0 -# 2987| ValueCategory = prvalue -# 2985| getStmt(): [BlockStmt] { ... } -# 2986| getStmt(0): [DeclStmt] declaration -# 2986| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x989 -# 2986| Type = [Struct] String -# 2986| getVariable().getInitializer(): [Initializer] initializer for x989 -# 2986| getExpr(): [ConstructorCall] call to String -# 2986| Type = [VoidType] void -# 2986| ValueCategory = prvalue -# 2987| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2987| Type = [VoidType] void -# 2987| ValueCategory = prvalue -# 2987| getQualifier(): [VariableAccess] x989 -# 2987| Type = [Struct] String -# 2987| ValueCategory = lvalue -# 2987| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2987| Conversion = [BoolConversion] conversion to bool -# 2987| Type = [BoolType] bool -# 2987| Value = [CStyleCast] 0 -# 2987| ValueCategory = prvalue -# 2988| getStmt(990): [DoStmt] do (...) ... -# 2990| getCondition(): [Literal] 0 -# 2990| Type = [IntType] int -# 2990| Value = [Literal] 0 -# 2990| ValueCategory = prvalue -# 2988| getStmt(): [BlockStmt] { ... } -# 2989| getStmt(0): [DeclStmt] declaration -# 2989| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x990 -# 2989| Type = [Struct] String -# 2989| getVariable().getInitializer(): [Initializer] initializer for x990 -# 2989| getExpr(): [ConstructorCall] call to String -# 2989| Type = [VoidType] void -# 2989| ValueCategory = prvalue -# 2990| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2990| Type = [VoidType] void -# 2990| ValueCategory = prvalue -# 2990| getQualifier(): [VariableAccess] x990 -# 2990| Type = [Struct] String -# 2990| ValueCategory = lvalue -# 2990| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2990| Conversion = [BoolConversion] conversion to bool -# 2990| Type = [BoolType] bool -# 2990| Value = [CStyleCast] 0 -# 2990| ValueCategory = prvalue -# 2991| getStmt(991): [DoStmt] do (...) ... -# 2993| getCondition(): [Literal] 0 -# 2993| Type = [IntType] int -# 2993| Value = [Literal] 0 -# 2993| ValueCategory = prvalue -# 2991| getStmt(): [BlockStmt] { ... } -# 2992| getStmt(0): [DeclStmt] declaration -# 2992| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x991 -# 2992| Type = [Struct] String -# 2992| getVariable().getInitializer(): [Initializer] initializer for x991 -# 2992| getExpr(): [ConstructorCall] call to String -# 2992| Type = [VoidType] void -# 2992| ValueCategory = prvalue -# 2993| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2993| Type = [VoidType] void -# 2993| ValueCategory = prvalue -# 2993| getQualifier(): [VariableAccess] x991 -# 2993| Type = [Struct] String -# 2993| ValueCategory = lvalue -# 2993| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2993| Conversion = [BoolConversion] conversion to bool -# 2993| Type = [BoolType] bool -# 2993| Value = [CStyleCast] 0 -# 2993| ValueCategory = prvalue -# 2994| getStmt(992): [DoStmt] do (...) ... -# 2996| getCondition(): [Literal] 0 -# 2996| Type = [IntType] int -# 2996| Value = [Literal] 0 -# 2996| ValueCategory = prvalue -# 2994| getStmt(): [BlockStmt] { ... } -# 2995| getStmt(0): [DeclStmt] declaration -# 2995| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x992 -# 2995| Type = [Struct] String -# 2995| getVariable().getInitializer(): [Initializer] initializer for x992 -# 2995| getExpr(): [ConstructorCall] call to String -# 2995| Type = [VoidType] void -# 2995| ValueCategory = prvalue -# 2996| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2996| Type = [VoidType] void -# 2996| ValueCategory = prvalue -# 2996| getQualifier(): [VariableAccess] x992 -# 2996| Type = [Struct] String -# 2996| ValueCategory = lvalue -# 2996| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2996| Conversion = [BoolConversion] conversion to bool -# 2996| Type = [BoolType] bool -# 2996| Value = [CStyleCast] 0 -# 2996| ValueCategory = prvalue -# 2997| getStmt(993): [DoStmt] do (...) ... -# 2999| getCondition(): [Literal] 0 -# 2999| Type = [IntType] int -# 2999| Value = [Literal] 0 -# 2999| ValueCategory = prvalue -# 2997| getStmt(): [BlockStmt] { ... } -# 2998| getStmt(0): [DeclStmt] declaration -# 2998| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x993 -# 2998| Type = [Struct] String -# 2998| getVariable().getInitializer(): [Initializer] initializer for x993 -# 2998| getExpr(): [ConstructorCall] call to String -# 2998| Type = [VoidType] void -# 2998| ValueCategory = prvalue -# 2999| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2999| Type = [VoidType] void -# 2999| ValueCategory = prvalue -# 2999| getQualifier(): [VariableAccess] x993 -# 2999| Type = [Struct] String -# 2999| ValueCategory = lvalue -# 2999| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2999| Conversion = [BoolConversion] conversion to bool -# 2999| Type = [BoolType] bool -# 2999| Value = [CStyleCast] 0 -# 2999| ValueCategory = prvalue -# 3000| getStmt(994): [DoStmt] do (...) ... -# 3002| getCondition(): [Literal] 0 -# 3002| Type = [IntType] int -# 3002| Value = [Literal] 0 -# 3002| ValueCategory = prvalue -# 3000| getStmt(): [BlockStmt] { ... } -# 3001| getStmt(0): [DeclStmt] declaration -# 3001| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x994 -# 3001| Type = [Struct] String -# 3001| getVariable().getInitializer(): [Initializer] initializer for x994 -# 3001| getExpr(): [ConstructorCall] call to String -# 3001| Type = [VoidType] void -# 3001| ValueCategory = prvalue -# 3002| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3002| Type = [VoidType] void -# 3002| ValueCategory = prvalue -# 3002| getQualifier(): [VariableAccess] x994 -# 3002| Type = [Struct] String -# 3002| ValueCategory = lvalue -# 3002| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3002| Conversion = [BoolConversion] conversion to bool -# 3002| Type = [BoolType] bool -# 3002| Value = [CStyleCast] 0 -# 3002| ValueCategory = prvalue -# 3003| getStmt(995): [DoStmt] do (...) ... -# 3005| getCondition(): [Literal] 0 -# 3005| Type = [IntType] int -# 3005| Value = [Literal] 0 -# 3005| ValueCategory = prvalue -# 3003| getStmt(): [BlockStmt] { ... } -# 3004| getStmt(0): [DeclStmt] declaration -# 3004| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x995 -# 3004| Type = [Struct] String -# 3004| getVariable().getInitializer(): [Initializer] initializer for x995 -# 3004| getExpr(): [ConstructorCall] call to String -# 3004| Type = [VoidType] void -# 3004| ValueCategory = prvalue -# 3005| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3005| Type = [VoidType] void -# 3005| ValueCategory = prvalue -# 3005| getQualifier(): [VariableAccess] x995 -# 3005| Type = [Struct] String -# 3005| ValueCategory = lvalue -# 3005| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3005| Conversion = [BoolConversion] conversion to bool -# 3005| Type = [BoolType] bool -# 3005| Value = [CStyleCast] 0 -# 3005| ValueCategory = prvalue -# 3006| getStmt(996): [DoStmt] do (...) ... -# 3008| getCondition(): [Literal] 0 -# 3008| Type = [IntType] int -# 3008| Value = [Literal] 0 -# 3008| ValueCategory = prvalue -# 3006| getStmt(): [BlockStmt] { ... } -# 3007| getStmt(0): [DeclStmt] declaration -# 3007| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x996 -# 3007| Type = [Struct] String -# 3007| getVariable().getInitializer(): [Initializer] initializer for x996 -# 3007| getExpr(): [ConstructorCall] call to String -# 3007| Type = [VoidType] void -# 3007| ValueCategory = prvalue -# 3008| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3008| Type = [VoidType] void -# 3008| ValueCategory = prvalue -# 3008| getQualifier(): [VariableAccess] x996 -# 3008| Type = [Struct] String -# 3008| ValueCategory = lvalue -# 3008| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3008| Conversion = [BoolConversion] conversion to bool -# 3008| Type = [BoolType] bool -# 3008| Value = [CStyleCast] 0 -# 3008| ValueCategory = prvalue -# 3009| getStmt(997): [DoStmt] do (...) ... -# 3011| getCondition(): [Literal] 0 -# 3011| Type = [IntType] int -# 3011| Value = [Literal] 0 -# 3011| ValueCategory = prvalue -# 3009| getStmt(): [BlockStmt] { ... } -# 3010| getStmt(0): [DeclStmt] declaration -# 3010| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x997 -# 3010| Type = [Struct] String -# 3010| getVariable().getInitializer(): [Initializer] initializer for x997 -# 3010| getExpr(): [ConstructorCall] call to String -# 3010| Type = [VoidType] void -# 3010| ValueCategory = prvalue -# 3011| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3011| Type = [VoidType] void -# 3011| ValueCategory = prvalue -# 3011| getQualifier(): [VariableAccess] x997 -# 3011| Type = [Struct] String -# 3011| ValueCategory = lvalue -# 3011| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3011| Conversion = [BoolConversion] conversion to bool -# 3011| Type = [BoolType] bool -# 3011| Value = [CStyleCast] 0 -# 3011| ValueCategory = prvalue -# 3012| getStmt(998): [DoStmt] do (...) ... -# 3014| getCondition(): [Literal] 0 -# 3014| Type = [IntType] int -# 3014| Value = [Literal] 0 -# 3014| ValueCategory = prvalue -# 3012| getStmt(): [BlockStmt] { ... } -# 3013| getStmt(0): [DeclStmt] declaration -# 3013| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x998 -# 3013| Type = [Struct] String -# 3013| getVariable().getInitializer(): [Initializer] initializer for x998 -# 3013| getExpr(): [ConstructorCall] call to String -# 3013| Type = [VoidType] void -# 3013| ValueCategory = prvalue -# 3014| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3014| Type = [VoidType] void -# 3014| ValueCategory = prvalue -# 3014| getQualifier(): [VariableAccess] x998 -# 3014| Type = [Struct] String -# 3014| ValueCategory = lvalue -# 3014| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3014| Conversion = [BoolConversion] conversion to bool -# 3014| Type = [BoolType] bool -# 3014| Value = [CStyleCast] 0 -# 3014| ValueCategory = prvalue -# 3015| getStmt(999): [DoStmt] do (...) ... -# 3017| getCondition(): [Literal] 0 -# 3017| Type = [IntType] int -# 3017| Value = [Literal] 0 -# 3017| ValueCategory = prvalue -# 3015| getStmt(): [BlockStmt] { ... } -# 3016| getStmt(0): [DeclStmt] declaration -# 3016| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x999 -# 3016| Type = [Struct] String -# 3016| getVariable().getInitializer(): [Initializer] initializer for x999 -# 3016| getExpr(): [ConstructorCall] call to String -# 3016| Type = [VoidType] void -# 3016| ValueCategory = prvalue -# 3017| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3017| Type = [VoidType] void -# 3017| ValueCategory = prvalue -# 3017| getQualifier(): [VariableAccess] x999 -# 3017| Type = [Struct] String -# 3017| ValueCategory = lvalue -# 3017| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3017| Conversion = [BoolConversion] conversion to bool -# 3017| Type = [BoolType] bool -# 3017| Value = [CStyleCast] 0 -# 3017| ValueCategory = prvalue -# 3018| getStmt(1000): [DoStmt] do (...) ... -# 3020| getCondition(): [Literal] 0 -# 3020| Type = [IntType] int -# 3020| Value = [Literal] 0 -# 3020| ValueCategory = prvalue -# 3018| getStmt(): [BlockStmt] { ... } -# 3019| getStmt(0): [DeclStmt] declaration -# 3019| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1000 -# 3019| Type = [Struct] String -# 3019| getVariable().getInitializer(): [Initializer] initializer for x1000 -# 3019| getExpr(): [ConstructorCall] call to String -# 3019| Type = [VoidType] void -# 3019| ValueCategory = prvalue -# 3020| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3020| Type = [VoidType] void -# 3020| ValueCategory = prvalue -# 3020| getQualifier(): [VariableAccess] x1000 -# 3020| Type = [Struct] String -# 3020| ValueCategory = lvalue -# 3020| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3020| Conversion = [BoolConversion] conversion to bool -# 3020| Type = [BoolType] bool -# 3020| Value = [CStyleCast] 0 -# 3020| ValueCategory = prvalue -# 3021| getStmt(1001): [DoStmt] do (...) ... -# 3023| getCondition(): [Literal] 0 -# 3023| Type = [IntType] int -# 3023| Value = [Literal] 0 -# 3023| ValueCategory = prvalue -# 3021| getStmt(): [BlockStmt] { ... } -# 3022| getStmt(0): [DeclStmt] declaration -# 3022| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1001 -# 3022| Type = [Struct] String -# 3022| getVariable().getInitializer(): [Initializer] initializer for x1001 -# 3022| getExpr(): [ConstructorCall] call to String -# 3022| Type = [VoidType] void -# 3022| ValueCategory = prvalue -# 3023| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3023| Type = [VoidType] void -# 3023| ValueCategory = prvalue -# 3023| getQualifier(): [VariableAccess] x1001 -# 3023| Type = [Struct] String -# 3023| ValueCategory = lvalue -# 3023| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3023| Conversion = [BoolConversion] conversion to bool -# 3023| Type = [BoolType] bool -# 3023| Value = [CStyleCast] 0 -# 3023| ValueCategory = prvalue -# 3024| getStmt(1002): [DoStmt] do (...) ... -# 3026| getCondition(): [Literal] 0 -# 3026| Type = [IntType] int -# 3026| Value = [Literal] 0 -# 3026| ValueCategory = prvalue -# 3024| getStmt(): [BlockStmt] { ... } -# 3025| getStmt(0): [DeclStmt] declaration -# 3025| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1002 -# 3025| Type = [Struct] String -# 3025| getVariable().getInitializer(): [Initializer] initializer for x1002 -# 3025| getExpr(): [ConstructorCall] call to String -# 3025| Type = [VoidType] void -# 3025| ValueCategory = prvalue -# 3026| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3026| Type = [VoidType] void -# 3026| ValueCategory = prvalue -# 3026| getQualifier(): [VariableAccess] x1002 -# 3026| Type = [Struct] String -# 3026| ValueCategory = lvalue -# 3026| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3026| Conversion = [BoolConversion] conversion to bool -# 3026| Type = [BoolType] bool -# 3026| Value = [CStyleCast] 0 -# 3026| ValueCategory = prvalue -# 3027| getStmt(1003): [DoStmt] do (...) ... -# 3029| getCondition(): [Literal] 0 -# 3029| Type = [IntType] int -# 3029| Value = [Literal] 0 -# 3029| ValueCategory = prvalue -# 3027| getStmt(): [BlockStmt] { ... } -# 3028| getStmt(0): [DeclStmt] declaration -# 3028| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1003 -# 3028| Type = [Struct] String -# 3028| getVariable().getInitializer(): [Initializer] initializer for x1003 -# 3028| getExpr(): [ConstructorCall] call to String -# 3028| Type = [VoidType] void -# 3028| ValueCategory = prvalue -# 3029| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3029| Type = [VoidType] void -# 3029| ValueCategory = prvalue -# 3029| getQualifier(): [VariableAccess] x1003 -# 3029| Type = [Struct] String -# 3029| ValueCategory = lvalue -# 3029| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3029| Conversion = [BoolConversion] conversion to bool -# 3029| Type = [BoolType] bool -# 3029| Value = [CStyleCast] 0 -# 3029| ValueCategory = prvalue -# 3030| getStmt(1004): [DoStmt] do (...) ... -# 3032| getCondition(): [Literal] 0 -# 3032| Type = [IntType] int -# 3032| Value = [Literal] 0 -# 3032| ValueCategory = prvalue -# 3030| getStmt(): [BlockStmt] { ... } -# 3031| getStmt(0): [DeclStmt] declaration -# 3031| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1004 -# 3031| Type = [Struct] String -# 3031| getVariable().getInitializer(): [Initializer] initializer for x1004 -# 3031| getExpr(): [ConstructorCall] call to String -# 3031| Type = [VoidType] void -# 3031| ValueCategory = prvalue -# 3032| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3032| Type = [VoidType] void -# 3032| ValueCategory = prvalue -# 3032| getQualifier(): [VariableAccess] x1004 -# 3032| Type = [Struct] String -# 3032| ValueCategory = lvalue -# 3032| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3032| Conversion = [BoolConversion] conversion to bool -# 3032| Type = [BoolType] bool -# 3032| Value = [CStyleCast] 0 -# 3032| ValueCategory = prvalue -# 3033| getStmt(1005): [DoStmt] do (...) ... -# 3035| getCondition(): [Literal] 0 -# 3035| Type = [IntType] int -# 3035| Value = [Literal] 0 -# 3035| ValueCategory = prvalue -# 3033| getStmt(): [BlockStmt] { ... } -# 3034| getStmt(0): [DeclStmt] declaration -# 3034| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1005 -# 3034| Type = [Struct] String -# 3034| getVariable().getInitializer(): [Initializer] initializer for x1005 -# 3034| getExpr(): [ConstructorCall] call to String -# 3034| Type = [VoidType] void -# 3034| ValueCategory = prvalue -# 3035| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3035| Type = [VoidType] void -# 3035| ValueCategory = prvalue -# 3035| getQualifier(): [VariableAccess] x1005 -# 3035| Type = [Struct] String -# 3035| ValueCategory = lvalue -# 3035| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3035| Conversion = [BoolConversion] conversion to bool -# 3035| Type = [BoolType] bool -# 3035| Value = [CStyleCast] 0 -# 3035| ValueCategory = prvalue -# 3036| getStmt(1006): [DoStmt] do (...) ... -# 3038| getCondition(): [Literal] 0 -# 3038| Type = [IntType] int -# 3038| Value = [Literal] 0 -# 3038| ValueCategory = prvalue -# 3036| getStmt(): [BlockStmt] { ... } -# 3037| getStmt(0): [DeclStmt] declaration -# 3037| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1006 -# 3037| Type = [Struct] String -# 3037| getVariable().getInitializer(): [Initializer] initializer for x1006 -# 3037| getExpr(): [ConstructorCall] call to String -# 3037| Type = [VoidType] void -# 3037| ValueCategory = prvalue -# 3038| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3038| Type = [VoidType] void -# 3038| ValueCategory = prvalue -# 3038| getQualifier(): [VariableAccess] x1006 -# 3038| Type = [Struct] String -# 3038| ValueCategory = lvalue -# 3038| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3038| Conversion = [BoolConversion] conversion to bool -# 3038| Type = [BoolType] bool -# 3038| Value = [CStyleCast] 0 -# 3038| ValueCategory = prvalue -# 3039| getStmt(1007): [DoStmt] do (...) ... -# 3041| getCondition(): [Literal] 0 -# 3041| Type = [IntType] int -# 3041| Value = [Literal] 0 -# 3041| ValueCategory = prvalue -# 3039| getStmt(): [BlockStmt] { ... } -# 3040| getStmt(0): [DeclStmt] declaration -# 3040| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1007 -# 3040| Type = [Struct] String -# 3040| getVariable().getInitializer(): [Initializer] initializer for x1007 -# 3040| getExpr(): [ConstructorCall] call to String -# 3040| Type = [VoidType] void -# 3040| ValueCategory = prvalue -# 3041| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3041| Type = [VoidType] void -# 3041| ValueCategory = prvalue -# 3041| getQualifier(): [VariableAccess] x1007 -# 3041| Type = [Struct] String -# 3041| ValueCategory = lvalue -# 3041| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3041| Conversion = [BoolConversion] conversion to bool -# 3041| Type = [BoolType] bool -# 3041| Value = [CStyleCast] 0 -# 3041| ValueCategory = prvalue -# 3042| getStmt(1008): [DoStmt] do (...) ... -# 3044| getCondition(): [Literal] 0 -# 3044| Type = [IntType] int -# 3044| Value = [Literal] 0 -# 3044| ValueCategory = prvalue -# 3042| getStmt(): [BlockStmt] { ... } -# 3043| getStmt(0): [DeclStmt] declaration -# 3043| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1008 -# 3043| Type = [Struct] String -# 3043| getVariable().getInitializer(): [Initializer] initializer for x1008 -# 3043| getExpr(): [ConstructorCall] call to String -# 3043| Type = [VoidType] void -# 3043| ValueCategory = prvalue -# 3044| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3044| Type = [VoidType] void -# 3044| ValueCategory = prvalue -# 3044| getQualifier(): [VariableAccess] x1008 -# 3044| Type = [Struct] String -# 3044| ValueCategory = lvalue -# 3044| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3044| Conversion = [BoolConversion] conversion to bool -# 3044| Type = [BoolType] bool -# 3044| Value = [CStyleCast] 0 -# 3044| ValueCategory = prvalue -# 3045| getStmt(1009): [DoStmt] do (...) ... -# 3047| getCondition(): [Literal] 0 -# 3047| Type = [IntType] int -# 3047| Value = [Literal] 0 -# 3047| ValueCategory = prvalue -# 3045| getStmt(): [BlockStmt] { ... } -# 3046| getStmt(0): [DeclStmt] declaration -# 3046| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1009 -# 3046| Type = [Struct] String -# 3046| getVariable().getInitializer(): [Initializer] initializer for x1009 -# 3046| getExpr(): [ConstructorCall] call to String -# 3046| Type = [VoidType] void -# 3046| ValueCategory = prvalue -# 3047| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3047| Type = [VoidType] void -# 3047| ValueCategory = prvalue -# 3047| getQualifier(): [VariableAccess] x1009 -# 3047| Type = [Struct] String -# 3047| ValueCategory = lvalue -# 3047| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3047| Conversion = [BoolConversion] conversion to bool -# 3047| Type = [BoolType] bool -# 3047| Value = [CStyleCast] 0 -# 3047| ValueCategory = prvalue -# 3048| getStmt(1010): [DoStmt] do (...) ... -# 3050| getCondition(): [Literal] 0 -# 3050| Type = [IntType] int -# 3050| Value = [Literal] 0 -# 3050| ValueCategory = prvalue -# 3048| getStmt(): [BlockStmt] { ... } -# 3049| getStmt(0): [DeclStmt] declaration -# 3049| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1010 -# 3049| Type = [Struct] String -# 3049| getVariable().getInitializer(): [Initializer] initializer for x1010 -# 3049| getExpr(): [ConstructorCall] call to String -# 3049| Type = [VoidType] void -# 3049| ValueCategory = prvalue -# 3050| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3050| Type = [VoidType] void -# 3050| ValueCategory = prvalue -# 3050| getQualifier(): [VariableAccess] x1010 -# 3050| Type = [Struct] String -# 3050| ValueCategory = lvalue -# 3050| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3050| Conversion = [BoolConversion] conversion to bool -# 3050| Type = [BoolType] bool -# 3050| Value = [CStyleCast] 0 -# 3050| ValueCategory = prvalue -# 3051| getStmt(1011): [DoStmt] do (...) ... -# 3053| getCondition(): [Literal] 0 -# 3053| Type = [IntType] int -# 3053| Value = [Literal] 0 -# 3053| ValueCategory = prvalue -# 3051| getStmt(): [BlockStmt] { ... } -# 3052| getStmt(0): [DeclStmt] declaration -# 3052| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1011 -# 3052| Type = [Struct] String -# 3052| getVariable().getInitializer(): [Initializer] initializer for x1011 -# 3052| getExpr(): [ConstructorCall] call to String -# 3052| Type = [VoidType] void -# 3052| ValueCategory = prvalue -# 3053| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3053| Type = [VoidType] void -# 3053| ValueCategory = prvalue -# 3053| getQualifier(): [VariableAccess] x1011 -# 3053| Type = [Struct] String -# 3053| ValueCategory = lvalue -# 3053| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3053| Conversion = [BoolConversion] conversion to bool -# 3053| Type = [BoolType] bool -# 3053| Value = [CStyleCast] 0 -# 3053| ValueCategory = prvalue -# 3054| getStmt(1012): [DoStmt] do (...) ... -# 3056| getCondition(): [Literal] 0 -# 3056| Type = [IntType] int -# 3056| Value = [Literal] 0 -# 3056| ValueCategory = prvalue -# 3054| getStmt(): [BlockStmt] { ... } -# 3055| getStmt(0): [DeclStmt] declaration -# 3055| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1012 -# 3055| Type = [Struct] String -# 3055| getVariable().getInitializer(): [Initializer] initializer for x1012 -# 3055| getExpr(): [ConstructorCall] call to String -# 3055| Type = [VoidType] void -# 3055| ValueCategory = prvalue -# 3056| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3056| Type = [VoidType] void -# 3056| ValueCategory = prvalue -# 3056| getQualifier(): [VariableAccess] x1012 -# 3056| Type = [Struct] String -# 3056| ValueCategory = lvalue -# 3056| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3056| Conversion = [BoolConversion] conversion to bool -# 3056| Type = [BoolType] bool -# 3056| Value = [CStyleCast] 0 -# 3056| ValueCategory = prvalue -# 3057| getStmt(1013): [DoStmt] do (...) ... -# 3059| getCondition(): [Literal] 0 -# 3059| Type = [IntType] int -# 3059| Value = [Literal] 0 -# 3059| ValueCategory = prvalue -# 3057| getStmt(): [BlockStmt] { ... } -# 3058| getStmt(0): [DeclStmt] declaration -# 3058| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1013 -# 3058| Type = [Struct] String -# 3058| getVariable().getInitializer(): [Initializer] initializer for x1013 -# 3058| getExpr(): [ConstructorCall] call to String -# 3058| Type = [VoidType] void -# 3058| ValueCategory = prvalue -# 3059| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3059| Type = [VoidType] void -# 3059| ValueCategory = prvalue -# 3059| getQualifier(): [VariableAccess] x1013 -# 3059| Type = [Struct] String -# 3059| ValueCategory = lvalue -# 3059| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3059| Conversion = [BoolConversion] conversion to bool -# 3059| Type = [BoolType] bool -# 3059| Value = [CStyleCast] 0 -# 3059| ValueCategory = prvalue -# 3060| getStmt(1014): [DoStmt] do (...) ... -# 3062| getCondition(): [Literal] 0 -# 3062| Type = [IntType] int -# 3062| Value = [Literal] 0 -# 3062| ValueCategory = prvalue -# 3060| getStmt(): [BlockStmt] { ... } -# 3061| getStmt(0): [DeclStmt] declaration -# 3061| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1014 -# 3061| Type = [Struct] String -# 3061| getVariable().getInitializer(): [Initializer] initializer for x1014 -# 3061| getExpr(): [ConstructorCall] call to String -# 3061| Type = [VoidType] void -# 3061| ValueCategory = prvalue -# 3062| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3062| Type = [VoidType] void -# 3062| ValueCategory = prvalue -# 3062| getQualifier(): [VariableAccess] x1014 -# 3062| Type = [Struct] String -# 3062| ValueCategory = lvalue -# 3062| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3062| Conversion = [BoolConversion] conversion to bool -# 3062| Type = [BoolType] bool -# 3062| Value = [CStyleCast] 0 -# 3062| ValueCategory = prvalue -# 3063| getStmt(1015): [DoStmt] do (...) ... -# 3065| getCondition(): [Literal] 0 -# 3065| Type = [IntType] int -# 3065| Value = [Literal] 0 -# 3065| ValueCategory = prvalue -# 3063| getStmt(): [BlockStmt] { ... } -# 3064| getStmt(0): [DeclStmt] declaration -# 3064| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1015 -# 3064| Type = [Struct] String -# 3064| getVariable().getInitializer(): [Initializer] initializer for x1015 -# 3064| getExpr(): [ConstructorCall] call to String -# 3064| Type = [VoidType] void -# 3064| ValueCategory = prvalue -# 3065| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3065| Type = [VoidType] void -# 3065| ValueCategory = prvalue -# 3065| getQualifier(): [VariableAccess] x1015 -# 3065| Type = [Struct] String -# 3065| ValueCategory = lvalue -# 3065| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3065| Conversion = [BoolConversion] conversion to bool -# 3065| Type = [BoolType] bool -# 3065| Value = [CStyleCast] 0 -# 3065| ValueCategory = prvalue -# 3066| getStmt(1016): [DoStmt] do (...) ... -# 3068| getCondition(): [Literal] 0 -# 3068| Type = [IntType] int -# 3068| Value = [Literal] 0 -# 3068| ValueCategory = prvalue -# 3066| getStmt(): [BlockStmt] { ... } -# 3067| getStmt(0): [DeclStmt] declaration -# 3067| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1016 -# 3067| Type = [Struct] String -# 3067| getVariable().getInitializer(): [Initializer] initializer for x1016 -# 3067| getExpr(): [ConstructorCall] call to String -# 3067| Type = [VoidType] void -# 3067| ValueCategory = prvalue -# 3068| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3068| Type = [VoidType] void -# 3068| ValueCategory = prvalue -# 3068| getQualifier(): [VariableAccess] x1016 -# 3068| Type = [Struct] String -# 3068| ValueCategory = lvalue -# 3068| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3068| Conversion = [BoolConversion] conversion to bool -# 3068| Type = [BoolType] bool -# 3068| Value = [CStyleCast] 0 -# 3068| ValueCategory = prvalue -# 3069| getStmt(1017): [DoStmt] do (...) ... -# 3071| getCondition(): [Literal] 0 -# 3071| Type = [IntType] int -# 3071| Value = [Literal] 0 -# 3071| ValueCategory = prvalue -# 3069| getStmt(): [BlockStmt] { ... } -# 3070| getStmt(0): [DeclStmt] declaration -# 3070| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1017 -# 3070| Type = [Struct] String -# 3070| getVariable().getInitializer(): [Initializer] initializer for x1017 -# 3070| getExpr(): [ConstructorCall] call to String -# 3070| Type = [VoidType] void -# 3070| ValueCategory = prvalue -# 3071| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3071| Type = [VoidType] void -# 3071| ValueCategory = prvalue -# 3071| getQualifier(): [VariableAccess] x1017 -# 3071| Type = [Struct] String -# 3071| ValueCategory = lvalue -# 3071| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3071| Conversion = [BoolConversion] conversion to bool -# 3071| Type = [BoolType] bool -# 3071| Value = [CStyleCast] 0 -# 3071| ValueCategory = prvalue -# 3072| getStmt(1018): [DoStmt] do (...) ... -# 3074| getCondition(): [Literal] 0 -# 3074| Type = [IntType] int -# 3074| Value = [Literal] 0 -# 3074| ValueCategory = prvalue -# 3072| getStmt(): [BlockStmt] { ... } -# 3073| getStmt(0): [DeclStmt] declaration -# 3073| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1018 -# 3073| Type = [Struct] String -# 3073| getVariable().getInitializer(): [Initializer] initializer for x1018 -# 3073| getExpr(): [ConstructorCall] call to String -# 3073| Type = [VoidType] void -# 3073| ValueCategory = prvalue -# 3074| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3074| Type = [VoidType] void -# 3074| ValueCategory = prvalue -# 3074| getQualifier(): [VariableAccess] x1018 -# 3074| Type = [Struct] String -# 3074| ValueCategory = lvalue -# 3074| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3074| Conversion = [BoolConversion] conversion to bool -# 3074| Type = [BoolType] bool -# 3074| Value = [CStyleCast] 0 -# 3074| ValueCategory = prvalue -# 3075| getStmt(1019): [DoStmt] do (...) ... -# 3077| getCondition(): [Literal] 0 -# 3077| Type = [IntType] int -# 3077| Value = [Literal] 0 -# 3077| ValueCategory = prvalue -# 3075| getStmt(): [BlockStmt] { ... } -# 3076| getStmt(0): [DeclStmt] declaration -# 3076| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1019 -# 3076| Type = [Struct] String -# 3076| getVariable().getInitializer(): [Initializer] initializer for x1019 -# 3076| getExpr(): [ConstructorCall] call to String -# 3076| Type = [VoidType] void -# 3076| ValueCategory = prvalue -# 3077| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3077| Type = [VoidType] void -# 3077| ValueCategory = prvalue -# 3077| getQualifier(): [VariableAccess] x1019 -# 3077| Type = [Struct] String -# 3077| ValueCategory = lvalue -# 3077| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3077| Conversion = [BoolConversion] conversion to bool -# 3077| Type = [BoolType] bool -# 3077| Value = [CStyleCast] 0 -# 3077| ValueCategory = prvalue -# 3078| getStmt(1020): [DoStmt] do (...) ... -# 3080| getCondition(): [Literal] 0 -# 3080| Type = [IntType] int -# 3080| Value = [Literal] 0 -# 3080| ValueCategory = prvalue -# 3078| getStmt(): [BlockStmt] { ... } -# 3079| getStmt(0): [DeclStmt] declaration -# 3079| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1020 -# 3079| Type = [Struct] String -# 3079| getVariable().getInitializer(): [Initializer] initializer for x1020 -# 3079| getExpr(): [ConstructorCall] call to String -# 3079| Type = [VoidType] void -# 3079| ValueCategory = prvalue -# 3080| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3080| Type = [VoidType] void -# 3080| ValueCategory = prvalue -# 3080| getQualifier(): [VariableAccess] x1020 -# 3080| Type = [Struct] String -# 3080| ValueCategory = lvalue -# 3080| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3080| Conversion = [BoolConversion] conversion to bool -# 3080| Type = [BoolType] bool -# 3080| Value = [CStyleCast] 0 -# 3080| ValueCategory = prvalue -# 3081| getStmt(1021): [DoStmt] do (...) ... -# 3083| getCondition(): [Literal] 0 -# 3083| Type = [IntType] int -# 3083| Value = [Literal] 0 -# 3083| ValueCategory = prvalue -# 3081| getStmt(): [BlockStmt] { ... } -# 3082| getStmt(0): [DeclStmt] declaration -# 3082| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1021 -# 3082| Type = [Struct] String -# 3082| getVariable().getInitializer(): [Initializer] initializer for x1021 -# 3082| getExpr(): [ConstructorCall] call to String -# 3082| Type = [VoidType] void -# 3082| ValueCategory = prvalue -# 3083| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3083| Type = [VoidType] void -# 3083| ValueCategory = prvalue -# 3083| getQualifier(): [VariableAccess] x1021 -# 3083| Type = [Struct] String -# 3083| ValueCategory = lvalue -# 3083| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3083| Conversion = [BoolConversion] conversion to bool -# 3083| Type = [BoolType] bool -# 3083| Value = [CStyleCast] 0 -# 3083| ValueCategory = prvalue -# 3084| getStmt(1022): [DoStmt] do (...) ... -# 3086| getCondition(): [Literal] 0 -# 3086| Type = [IntType] int -# 3086| Value = [Literal] 0 -# 3086| ValueCategory = prvalue -# 3084| getStmt(): [BlockStmt] { ... } -# 3085| getStmt(0): [DeclStmt] declaration -# 3085| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1022 -# 3085| Type = [Struct] String -# 3085| getVariable().getInitializer(): [Initializer] initializer for x1022 -# 3085| getExpr(): [ConstructorCall] call to String -# 3085| Type = [VoidType] void -# 3085| ValueCategory = prvalue -# 3086| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3086| Type = [VoidType] void -# 3086| ValueCategory = prvalue -# 3086| getQualifier(): [VariableAccess] x1022 -# 3086| Type = [Struct] String -# 3086| ValueCategory = lvalue -# 3086| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3086| Conversion = [BoolConversion] conversion to bool -# 3086| Type = [BoolType] bool -# 3086| Value = [CStyleCast] 0 -# 3086| ValueCategory = prvalue -# 3087| getStmt(1023): [DoStmt] do (...) ... -# 3089| getCondition(): [Literal] 0 -# 3089| Type = [IntType] int -# 3089| Value = [Literal] 0 -# 3089| ValueCategory = prvalue -# 3087| getStmt(): [BlockStmt] { ... } -# 3088| getStmt(0): [DeclStmt] declaration -# 3088| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1023 -# 3088| Type = [Struct] String -# 3088| getVariable().getInitializer(): [Initializer] initializer for x1023 -# 3088| getExpr(): [ConstructorCall] call to String -# 3088| Type = [VoidType] void -# 3088| ValueCategory = prvalue -# 3089| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3089| Type = [VoidType] void -# 3089| ValueCategory = prvalue -# 3089| getQualifier(): [VariableAccess] x1023 -# 3089| Type = [Struct] String -# 3089| ValueCategory = lvalue -# 3089| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3089| Conversion = [BoolConversion] conversion to bool -# 3089| Type = [BoolType] bool -# 3089| Value = [CStyleCast] 0 -# 3089| ValueCategory = prvalue -# 3090| getStmt(1024): [DoStmt] do (...) ... -# 3092| getCondition(): [Literal] 0 -# 3092| Type = [IntType] int -# 3092| Value = [Literal] 0 -# 3092| ValueCategory = prvalue -# 3090| getStmt(): [BlockStmt] { ... } -# 3091| getStmt(0): [DeclStmt] declaration -# 3091| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1024 -# 3091| Type = [Struct] String -# 3091| getVariable().getInitializer(): [Initializer] initializer for x1024 -# 3091| getExpr(): [ConstructorCall] call to String -# 3091| Type = [VoidType] void -# 3091| ValueCategory = prvalue -# 3092| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 3092| Type = [VoidType] void -# 3092| ValueCategory = prvalue -# 3092| getQualifier(): [VariableAccess] x1024 -# 3092| Type = [Struct] String -# 3092| ValueCategory = lvalue -# 3092| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 3092| Conversion = [BoolConversion] conversion to bool -# 3092| Type = [BoolType] bool -# 3092| Value = [CStyleCast] 0 -# 3092| ValueCategory = prvalue -# 3093| getStmt(1025): [ReturnStmt] return ... +# 35| getStmt(6): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x6 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x6 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x6 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(7): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x7 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x7 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x7 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(8): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x8 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x8 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x8 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(9): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x9 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x9 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x9 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(10): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x10 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x10 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x10 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(11): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x11 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x11 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x11 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(12): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x12 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x12 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x12 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(13): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x13 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x13 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x13 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(14): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x14 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x14 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x14 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(15): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x15 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x15 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x15 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(16): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x16 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x16 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x16 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(17): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x17 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x17 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x17 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(18): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x18 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x18 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x18 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(19): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x19 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x19 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x19 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(20): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x20 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x20 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x20 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(21): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x21 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x21 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x21 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(22): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x22 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x22 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x22 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(23): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x23 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x23 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x23 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(24): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x24 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x24 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x24 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(25): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x25 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x25 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x25 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(26): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x26 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x26 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x26 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(27): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x27 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x27 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x27 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(28): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x28 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x28 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x28 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(29): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x29 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x29 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x29 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(30): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x30 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x30 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x30 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(31): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x31 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x31 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x31 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(32): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x32 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x32 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x32 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(33): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x33 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x33 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x33 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(34): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x34 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x34 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x34 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(35): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x35 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x35 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x35 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(36): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x36 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x36 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x36 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(37): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x37 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x37 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x37 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(38): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x38 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x38 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x38 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(39): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x39 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x39 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x39 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(40): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x40 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x40 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x40 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(41): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x41 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x41 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x41 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(42): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x42 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x42 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x42 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(43): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x43 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x43 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x43 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(44): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x44 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x44 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x44 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(45): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x45 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x45 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x45 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(46): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x46 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x46 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x46 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(47): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x47 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x47 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x47 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(48): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x48 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x48 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x48 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(49): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x49 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x49 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x49 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(50): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x50 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x50 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x50 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(51): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x51 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x51 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x51 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(52): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x52 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x52 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x52 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(53): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x53 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x53 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x53 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(54): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x54 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x54 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x54 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(55): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x55 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x55 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x55 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(56): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x56 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x56 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x56 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(57): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x57 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x57 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x57 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(58): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x58 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x58 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x58 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(59): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x59 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x59 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x59 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(60): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x60 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x60 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x60 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(61): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x61 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x61 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x61 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(62): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x62 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x62 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x62 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(63): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x63 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x63 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x63 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(64): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x64 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x64 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x64 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(65): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x65 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x65 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x65 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(66): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x66 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x66 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x66 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(67): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x67 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x67 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x67 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(68): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x68 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x68 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x68 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(69): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x69 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x69 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x69 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(70): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x70 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x70 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x70 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(71): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x71 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x71 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x71 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(72): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x72 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x72 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x72 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(73): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x73 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x73 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x73 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(74): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x74 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x74 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x74 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(75): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x75 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x75 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x75 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(76): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x76 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x76 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x76 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(77): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x77 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x77 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x77 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(78): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x78 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x78 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x78 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(79): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x79 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x79 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x79 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(80): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x80 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x80 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x80 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(81): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x81 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x81 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x81 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(82): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x82 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x82 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x82 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(83): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x83 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x83 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x83 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(84): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x84 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x84 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x84 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(85): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x85 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x85 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x85 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(86): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x86 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x86 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x86 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(87): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x87 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x87 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x87 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(88): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x88 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x88 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x88 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(89): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x89 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x89 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x89 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(90): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x90 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x90 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x90 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(91): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x91 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x91 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x91 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(92): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x92 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x92 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x92 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(93): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x93 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x93 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x93 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(94): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x94 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x94 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x94 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(95): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x95 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x95 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x95 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(96): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x96 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x96 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x96 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(97): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x97 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x97 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x97 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(98): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x98 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x98 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x98 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(99): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x99 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x99 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x99 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(100): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x100 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x100 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x100 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(101): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x101 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x101 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x101 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(102): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x102 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x102 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x102 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(103): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x103 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x103 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x103 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(104): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x104 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x104 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x104 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(105): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x105 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x105 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x105 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(106): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x106 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x106 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x106 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(107): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x107 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x107 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x107 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(108): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x108 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x108 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x108 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(109): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x109 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x109 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x109 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(110): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x110 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x110 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x110 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(111): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x111 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x111 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x111 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(112): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x112 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x112 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x112 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(113): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x113 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x113 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x113 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(114): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x114 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x114 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x114 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(115): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x115 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x115 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x115 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(116): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x116 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x116 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x116 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(117): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x117 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x117 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x117 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(118): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x118 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x118 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x118 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(119): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x119 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x119 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x119 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(120): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x120 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x120 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x120 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(121): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x121 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x121 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x121 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(122): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x122 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x122 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x122 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(123): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x123 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x123 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x123 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(124): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x124 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x124 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x124 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(125): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x125 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x125 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x125 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(126): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x126 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x126 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x126 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(127): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x127 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x127 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x127 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(128): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x128 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x128 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x128 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(129): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x129 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x129 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x129 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(130): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x130 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x130 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x130 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(131): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x131 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x131 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x131 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(132): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x132 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x132 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x132 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(133): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x133 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x133 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x133 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(134): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x134 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x134 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x134 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(135): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x135 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x135 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x135 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(136): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x136 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x136 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x136 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(137): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x137 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x137 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x137 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(138): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x138 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x138 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x138 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(139): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x139 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x139 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x139 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(140): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x140 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x140 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x140 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(141): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x141 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x141 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x141 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(142): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x142 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x142 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x142 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(143): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x143 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x143 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x143 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(144): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x144 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x144 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x144 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(145): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x145 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x145 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x145 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(146): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x146 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x146 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x146 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(147): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x147 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x147 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x147 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(148): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x148 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x148 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x148 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(149): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x149 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x149 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x149 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(150): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x150 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x150 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x150 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(151): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x151 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x151 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x151 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(152): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x152 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x152 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x152 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(153): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x153 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x153 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x153 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(154): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x154 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x154 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x154 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(155): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x155 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x155 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x155 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(156): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x156 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x156 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x156 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(157): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x157 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x157 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x157 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(158): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x158 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x158 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x158 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(159): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x159 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x159 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x159 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(160): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x160 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x160 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x160 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(161): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x161 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x161 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x161 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(162): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x162 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x162 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x162 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(163): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x163 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x163 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x163 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(164): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x164 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x164 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x164 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(165): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x165 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x165 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x165 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(166): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x166 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x166 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x166 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(167): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x167 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x167 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x167 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(168): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x168 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x168 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x168 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(169): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x169 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x169 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x169 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(170): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x170 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x170 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x170 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(171): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x171 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x171 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x171 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(172): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x172 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x172 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x172 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(173): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x173 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x173 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x173 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(174): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x174 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x174 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x174 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(175): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x175 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x175 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x175 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(176): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x176 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x176 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x176 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(177): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x177 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x177 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x177 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(178): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x178 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x178 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x178 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(179): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x179 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x179 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x179 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(180): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x180 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x180 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x180 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(181): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x181 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x181 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x181 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(182): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x182 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x182 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x182 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(183): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x183 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x183 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x183 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(184): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x184 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x184 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x184 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(185): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x185 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x185 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x185 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(186): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x186 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x186 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x186 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(187): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x187 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x187 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x187 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(188): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x188 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x188 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x188 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(189): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x189 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x189 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x189 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(190): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x190 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x190 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x190 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(191): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x191 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x191 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x191 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(192): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x192 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x192 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x192 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(193): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x193 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x193 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x193 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(194): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x194 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x194 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x194 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(195): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x195 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x195 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x195 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(196): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x196 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x196 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x196 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(197): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x197 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x197 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x197 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(198): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x198 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x198 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x198 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(199): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x199 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x199 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x199 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(200): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x200 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x200 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x200 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(201): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x201 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x201 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x201 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(202): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x202 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x202 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x202 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(203): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x203 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x203 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x203 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(204): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x204 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x204 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x204 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(205): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x205 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x205 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x205 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(206): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x206 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x206 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x206 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(207): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x207 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x207 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x207 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(208): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x208 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x208 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x208 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(209): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x209 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x209 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x209 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(210): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x210 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x210 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x210 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(211): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x211 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x211 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x211 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(212): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x212 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x212 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x212 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(213): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x213 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x213 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x213 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(214): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x214 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x214 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x214 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(215): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x215 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x215 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x215 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(216): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x216 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x216 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x216 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(217): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x217 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x217 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x217 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(218): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x218 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x218 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x218 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(219): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x219 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x219 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x219 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(220): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x220 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x220 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x220 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(221): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x221 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x221 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x221 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(222): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x222 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x222 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x222 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(223): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x223 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x223 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x223 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(224): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x224 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x224 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x224 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(225): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x225 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x225 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x225 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(226): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x226 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x226 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x226 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(227): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x227 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x227 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x227 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(228): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x228 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x228 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x228 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(229): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x229 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x229 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x229 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(230): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x230 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x230 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x230 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(231): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x231 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x231 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x231 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(232): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x232 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x232 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x232 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(233): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x233 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x233 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x233 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(234): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x234 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x234 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x234 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(235): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x235 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x235 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x235 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(236): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x236 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x236 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x236 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(237): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x237 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x237 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x237 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(238): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x238 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x238 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x238 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(239): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x239 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x239 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x239 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(240): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x240 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x240 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x240 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(241): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x241 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x241 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x241 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(242): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x242 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x242 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x242 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(243): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x243 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x243 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x243 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(244): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x244 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x244 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x244 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(245): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x245 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x245 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x245 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(246): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x246 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x246 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x246 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(247): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x247 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x247 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x247 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(248): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x248 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x248 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x248 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(249): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x249 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x249 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x249 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(250): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x250 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x250 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x250 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(251): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x251 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x251 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x251 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(252): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x252 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x252 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x252 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(253): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x253 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x253 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x253 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(254): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x254 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x254 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x254 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(255): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x255 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x255 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x255 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(256): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x256 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x256 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x256 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(257): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x257 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x257 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x257 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(258): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x258 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x258 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x258 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(259): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x259 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x259 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x259 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(260): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x260 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x260 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x260 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(261): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x261 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x261 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x261 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(262): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x262 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x262 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x262 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(263): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x263 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x263 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x263 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(264): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x264 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x264 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x264 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(265): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x265 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x265 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x265 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(266): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x266 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x266 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x266 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(267): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x267 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x267 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x267 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(268): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x268 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x268 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x268 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(269): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x269 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x269 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x269 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(270): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x270 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x270 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x270 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(271): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x271 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x271 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x271 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(272): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x272 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x272 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x272 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(273): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x273 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x273 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x273 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(274): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x274 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x274 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x274 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(275): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x275 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x275 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x275 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(276): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x276 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x276 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x276 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(277): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x277 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x277 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x277 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(278): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x278 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x278 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x278 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(279): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x279 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x279 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x279 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(280): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x280 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x280 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x280 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(281): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x281 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x281 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x281 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(282): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x282 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x282 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x282 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(283): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x283 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x283 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x283 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(284): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x284 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x284 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x284 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(285): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x285 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x285 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x285 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(286): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x286 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x286 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x286 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(287): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x287 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x287 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x287 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(288): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x288 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x288 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x288 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(289): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x289 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x289 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x289 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(290): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x290 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x290 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x290 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(291): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x291 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x291 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x291 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(292): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x292 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x292 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x292 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(293): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x293 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x293 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x293 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(294): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x294 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x294 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x294 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(295): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x295 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x295 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x295 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(296): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x296 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x296 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x296 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(297): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x297 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x297 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x297 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(298): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x298 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x298 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x298 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(299): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x299 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x299 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x299 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(300): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x300 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x300 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x300 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(301): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x301 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x301 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x301 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(302): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x302 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x302 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x302 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(303): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x303 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x303 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x303 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(304): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x304 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x304 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x304 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(305): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x305 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x305 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x305 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(306): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x306 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x306 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x306 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(307): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x307 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x307 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x307 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(308): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x308 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x308 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x308 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(309): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x309 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x309 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x309 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(310): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x310 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x310 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x310 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(311): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x311 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x311 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x311 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(312): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x312 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x312 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x312 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(313): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x313 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x313 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x313 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(314): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x314 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x314 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x314 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(315): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x315 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x315 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x315 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(316): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x316 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x316 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x316 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(317): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x317 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x317 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x317 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(318): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x318 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x318 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x318 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(319): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x319 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x319 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x319 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(320): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x320 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x320 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x320 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(321): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x321 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x321 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x321 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(322): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x322 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x322 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x322 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(323): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x323 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x323 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x323 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(324): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x324 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x324 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x324 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(325): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x325 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x325 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x325 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(326): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x326 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x326 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x326 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(327): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x327 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x327 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x327 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(328): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x328 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x328 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x328 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(329): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x329 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x329 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x329 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(330): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x330 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x330 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x330 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(331): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x331 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x331 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x331 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(332): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x332 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x332 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x332 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(333): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x333 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x333 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x333 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(334): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x334 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x334 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x334 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(335): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x335 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x335 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x335 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(336): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x336 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x336 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x336 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(337): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x337 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x337 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x337 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(338): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x338 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x338 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x338 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(339): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x339 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x339 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x339 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(340): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x340 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x340 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x340 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(341): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x341 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x341 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x341 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(342): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x342 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x342 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x342 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(343): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x343 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x343 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x343 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(344): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x344 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x344 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x344 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(345): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x345 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x345 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x345 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(346): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x346 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x346 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x346 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(347): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x347 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x347 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x347 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(348): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x348 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x348 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x348 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(349): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x349 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x349 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x349 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(350): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x350 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x350 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x350 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(351): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x351 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x351 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x351 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(352): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x352 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x352 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x352 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(353): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x353 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x353 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x353 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(354): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x354 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x354 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x354 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(355): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x355 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x355 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x355 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(356): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x356 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x356 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x356 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(357): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x357 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x357 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x357 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(358): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x358 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x358 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x358 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(359): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x359 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x359 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x359 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(360): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x360 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x360 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x360 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(361): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x361 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x361 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x361 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(362): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x362 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x362 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x362 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(363): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x363 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x363 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x363 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(364): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x364 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x364 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x364 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(365): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x365 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x365 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x365 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(366): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x366 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x366 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x366 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(367): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x367 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x367 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x367 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(368): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x368 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x368 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x368 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(369): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x369 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x369 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x369 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(370): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x370 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x370 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x370 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(371): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x371 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x371 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x371 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(372): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x372 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x372 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x372 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(373): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x373 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x373 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x373 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(374): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x374 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x374 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x374 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(375): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x375 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x375 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x375 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(376): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x376 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x376 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x376 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(377): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x377 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x377 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x377 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(378): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x378 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x378 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x378 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(379): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x379 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x379 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x379 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(380): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x380 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x380 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x380 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(381): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x381 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x381 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x381 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(382): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x382 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x382 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x382 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(383): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x383 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x383 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x383 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(384): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x384 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x384 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x384 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(385): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x385 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x385 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x385 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(386): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x386 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x386 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x386 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(387): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x387 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x387 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x387 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(388): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x388 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x388 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x388 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(389): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x389 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x389 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x389 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(390): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x390 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x390 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x390 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(391): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x391 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x391 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x391 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(392): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x392 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x392 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x392 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(393): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x393 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x393 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x393 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(394): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x394 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x394 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x394 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(395): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x395 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x395 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x395 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(396): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x396 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x396 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x396 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(397): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x397 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x397 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x397 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(398): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x398 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x398 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x398 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(399): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x399 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x399 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x399 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(400): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x400 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x400 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x400 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(401): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x401 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x401 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x401 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(402): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x402 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x402 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x402 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(403): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x403 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x403 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x403 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(404): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x404 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x404 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x404 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(405): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x405 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x405 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x405 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(406): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x406 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x406 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x406 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(407): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x407 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x407 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x407 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(408): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x408 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x408 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x408 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(409): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x409 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x409 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x409 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(410): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x410 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x410 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x410 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(411): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x411 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x411 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x411 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(412): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x412 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x412 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x412 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(413): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x413 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x413 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x413 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(414): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x414 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x414 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x414 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(415): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x415 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x415 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x415 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(416): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x416 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x416 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x416 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(417): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x417 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x417 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x417 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(418): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x418 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x418 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x418 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(419): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x419 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x419 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x419 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(420): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x420 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x420 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x420 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(421): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x421 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x421 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x421 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(422): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x422 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x422 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x422 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(423): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x423 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x423 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x423 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(424): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x424 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x424 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x424 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(425): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x425 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x425 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x425 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(426): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x426 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x426 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x426 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(427): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x427 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x427 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x427 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(428): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x428 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x428 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x428 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(429): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x429 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x429 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x429 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(430): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x430 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x430 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x430 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(431): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x431 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x431 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x431 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(432): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x432 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x432 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x432 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(433): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x433 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x433 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x433 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(434): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x434 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x434 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x434 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(435): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x435 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x435 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x435 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(436): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x436 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x436 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x436 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(437): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x437 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x437 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x437 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(438): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x438 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x438 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x438 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(439): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x439 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x439 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x439 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(440): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x440 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x440 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x440 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(441): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x441 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x441 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x441 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(442): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x442 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x442 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x442 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(443): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x443 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x443 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x443 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(444): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x444 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x444 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x444 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(445): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x445 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x445 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x445 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(446): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x446 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x446 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x446 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(447): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x447 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x447 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x447 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(448): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x448 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x448 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x448 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(449): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x449 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x449 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x449 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(450): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x450 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x450 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x450 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(451): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x451 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x451 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x451 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(452): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x452 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x452 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x452 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(453): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x453 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x453 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x453 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(454): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x454 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x454 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x454 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(455): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x455 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x455 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x455 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(456): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x456 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x456 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x456 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(457): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x457 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x457 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x457 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(458): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x458 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x458 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x458 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(459): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x459 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x459 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x459 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(460): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x460 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x460 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x460 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(461): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x461 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x461 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x461 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(462): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x462 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x462 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x462 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(463): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x463 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x463 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x463 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(464): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x464 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x464 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x464 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(465): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x465 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x465 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x465 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(466): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x466 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x466 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x466 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(467): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x467 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x467 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x467 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(468): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x468 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x468 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x468 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(469): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x469 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x469 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x469 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(470): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x470 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x470 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x470 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(471): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x471 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x471 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x471 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(472): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x472 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x472 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x472 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(473): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x473 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x473 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x473 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(474): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x474 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x474 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x474 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(475): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x475 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x475 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x475 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(476): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x476 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x476 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x476 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(477): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x477 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x477 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x477 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(478): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x478 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x478 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x478 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(479): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x479 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x479 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x479 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(480): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x480 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x480 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x480 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(481): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x481 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x481 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x481 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(482): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x482 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x482 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x482 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(483): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x483 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x483 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x483 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(484): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x484 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x484 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x484 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(485): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x485 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x485 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x485 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(486): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x486 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x486 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x486 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(487): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x487 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x487 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x487 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(488): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x488 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x488 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x488 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(489): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x489 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x489 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x489 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(490): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x490 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x490 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x490 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(491): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x491 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x491 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x491 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(492): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x492 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x492 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x492 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(493): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x493 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x493 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x493 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(494): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x494 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x494 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x494 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(495): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x495 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x495 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x495 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(496): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x496 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x496 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x496 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(497): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x497 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x497 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x497 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(498): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x498 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x498 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x498 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(499): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x499 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x499 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x499 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(500): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x500 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x500 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x500 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(501): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x501 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x501 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x501 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(502): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x502 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x502 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x502 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(503): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x503 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x503 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x503 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(504): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x504 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x504 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x504 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(505): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x505 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x505 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x505 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(506): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x506 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x506 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x506 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(507): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x507 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x507 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x507 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(508): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x508 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x508 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x508 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(509): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x509 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x509 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x509 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(510): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x510 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x510 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x510 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(511): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x511 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x511 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x511 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(512): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x512 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x512 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x512 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(513): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x513 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x513 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x513 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(514): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x514 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x514 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x514 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(515): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x515 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x515 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x515 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(516): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x516 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x516 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x516 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(517): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x517 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x517 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x517 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(518): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x518 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x518 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x518 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(519): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x519 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x519 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x519 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(520): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x520 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x520 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x520 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(521): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x521 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x521 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x521 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(522): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x522 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x522 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x522 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(523): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x523 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x523 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x523 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(524): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x524 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x524 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x524 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(525): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x525 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x525 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x525 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(526): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x526 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x526 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x526 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(527): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x527 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x527 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x527 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(528): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x528 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x528 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x528 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(529): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x529 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x529 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x529 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(530): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x530 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x530 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x530 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(531): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x531 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x531 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x531 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(532): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x532 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x532 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x532 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(533): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x533 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x533 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x533 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(534): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x534 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x534 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x534 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(535): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x535 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x535 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x535 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(536): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x536 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x536 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x536 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(537): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x537 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x537 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x537 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(538): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x538 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x538 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x538 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(539): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x539 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x539 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x539 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(540): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x540 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x540 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x540 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(541): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x541 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x541 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x541 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(542): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x542 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x542 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x542 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(543): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x543 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x543 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x543 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(544): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x544 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x544 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x544 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(545): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x545 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x545 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x545 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(546): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x546 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x546 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x546 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(547): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x547 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x547 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x547 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(548): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x548 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x548 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x548 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(549): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x549 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x549 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x549 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(550): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x550 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x550 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x550 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(551): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x551 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x551 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x551 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(552): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x552 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x552 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x552 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(553): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x553 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x553 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x553 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(554): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x554 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x554 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x554 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(555): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x555 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x555 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x555 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(556): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x556 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x556 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x556 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(557): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x557 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x557 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x557 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(558): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x558 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x558 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x558 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(559): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x559 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x559 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x559 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(560): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x560 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x560 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x560 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(561): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x561 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x561 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x561 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(562): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x562 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x562 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x562 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(563): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x563 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x563 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x563 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(564): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x564 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x564 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x564 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(565): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x565 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x565 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x565 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(566): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x566 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x566 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x566 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(567): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x567 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x567 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x567 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(568): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x568 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x568 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x568 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(569): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x569 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x569 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x569 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(570): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x570 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x570 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x570 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(571): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x571 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x571 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x571 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(572): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x572 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x572 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x572 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(573): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x573 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x573 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x573 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(574): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x574 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x574 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x574 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(575): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x575 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x575 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x575 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(576): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x576 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x576 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x576 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(577): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x577 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x577 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x577 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(578): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x578 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x578 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x578 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(579): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x579 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x579 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x579 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(580): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x580 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x580 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x580 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(581): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x581 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x581 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x581 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(582): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x582 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x582 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x582 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(583): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x583 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x583 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x583 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(584): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x584 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x584 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x584 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(585): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x585 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x585 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x585 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(586): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x586 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x586 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x586 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(587): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x587 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x587 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x587 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(588): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x588 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x588 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x588 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(589): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x589 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x589 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x589 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(590): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x590 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x590 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x590 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(591): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x591 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x591 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x591 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(592): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x592 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x592 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x592 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(593): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x593 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x593 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x593 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(594): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x594 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x594 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x594 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(595): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x595 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x595 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x595 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(596): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x596 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x596 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x596 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(597): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x597 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x597 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x597 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(598): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x598 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x598 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x598 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(599): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x599 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x599 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x599 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(600): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x600 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x600 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x600 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(601): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x601 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x601 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x601 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(602): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x602 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x602 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x602 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(603): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x603 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x603 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x603 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(604): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x604 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x604 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x604 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(605): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x605 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x605 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x605 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(606): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x606 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x606 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x606 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(607): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x607 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x607 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x607 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(608): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x608 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x608 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x608 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(609): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x609 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x609 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x609 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(610): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x610 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x610 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x610 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(611): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x611 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x611 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x611 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(612): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x612 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x612 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x612 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(613): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x613 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x613 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x613 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(614): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x614 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x614 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x614 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(615): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x615 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x615 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x615 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(616): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x616 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x616 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x616 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(617): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x617 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x617 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x617 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(618): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x618 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x618 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x618 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(619): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x619 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x619 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x619 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(620): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x620 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x620 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x620 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(621): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x621 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x621 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x621 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(622): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x622 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x622 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x622 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(623): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x623 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x623 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x623 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(624): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x624 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x624 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x624 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(625): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x625 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x625 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x625 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(626): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x626 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x626 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x626 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(627): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x627 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x627 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x627 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(628): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x628 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x628 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x628 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(629): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x629 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x629 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x629 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(630): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x630 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x630 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x630 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(631): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x631 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x631 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x631 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(632): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x632 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x632 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x632 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(633): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x633 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x633 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x633 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(634): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x634 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x634 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x634 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(635): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x635 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x635 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x635 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(636): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x636 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x636 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x636 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(637): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x637 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x637 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x637 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(638): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x638 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x638 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x638 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(639): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x639 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x639 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x639 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(640): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x640 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x640 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x640 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(641): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x641 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x641 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x641 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(642): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x642 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x642 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x642 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(643): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x643 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x643 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x643 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(644): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x644 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x644 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x644 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(645): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x645 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x645 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x645 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(646): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x646 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x646 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x646 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(647): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x647 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x647 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x647 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(648): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x648 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x648 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x648 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(649): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x649 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x649 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x649 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(650): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x650 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x650 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x650 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(651): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x651 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x651 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x651 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(652): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x652 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x652 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x652 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(653): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x653 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x653 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x653 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(654): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x654 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x654 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x654 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(655): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x655 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x655 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x655 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(656): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x656 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x656 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x656 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(657): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x657 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x657 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x657 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(658): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x658 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x658 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x658 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(659): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x659 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x659 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x659 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(660): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x660 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x660 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x660 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(661): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x661 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x661 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x661 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(662): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x662 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x662 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x662 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(663): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x663 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x663 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x663 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(664): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x664 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x664 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x664 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(665): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x665 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x665 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x665 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(666): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x666 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x666 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x666 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(667): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x667 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x667 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x667 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(668): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x668 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x668 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x668 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(669): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x669 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x669 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x669 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(670): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x670 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x670 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x670 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(671): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x671 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x671 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x671 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(672): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x672 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x672 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x672 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(673): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x673 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x673 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x673 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(674): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x674 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x674 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x674 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(675): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x675 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x675 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x675 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(676): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x676 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x676 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x676 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(677): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x677 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x677 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x677 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(678): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x678 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x678 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x678 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(679): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x679 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x679 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x679 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(680): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x680 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x680 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x680 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(681): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x681 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x681 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x681 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(682): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x682 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x682 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x682 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(683): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x683 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x683 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x683 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(684): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x684 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x684 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x684 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(685): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x685 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x685 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x685 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(686): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x686 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x686 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x686 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(687): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x687 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x687 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x687 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(688): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x688 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x688 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x688 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(689): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x689 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x689 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x689 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(690): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x690 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x690 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x690 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(691): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x691 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x691 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x691 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(692): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x692 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x692 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x692 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(693): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x693 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x693 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x693 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(694): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x694 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x694 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x694 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(695): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x695 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x695 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x695 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(696): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x696 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x696 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x696 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(697): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x697 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x697 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x697 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(698): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x698 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x698 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x698 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(699): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x699 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x699 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x699 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(700): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x700 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x700 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x700 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(701): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x701 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x701 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x701 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(702): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x702 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x702 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x702 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(703): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x703 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x703 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x703 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(704): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x704 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x704 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x704 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(705): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x705 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x705 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x705 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(706): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x706 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x706 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x706 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(707): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x707 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x707 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x707 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(708): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x708 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x708 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x708 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(709): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x709 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x709 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x709 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(710): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x710 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x710 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x710 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(711): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x711 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x711 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x711 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(712): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x712 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x712 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x712 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(713): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x713 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x713 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x713 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(714): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x714 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x714 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x714 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(715): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x715 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x715 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x715 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(716): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x716 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x716 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x716 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(717): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x717 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x717 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x717 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(718): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x718 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x718 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x718 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(719): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x719 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x719 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x719 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(720): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x720 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x720 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x720 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(721): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x721 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x721 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x721 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(722): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x722 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x722 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x722 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(723): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x723 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x723 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x723 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(724): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x724 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x724 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x724 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(725): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x725 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x725 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x725 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(726): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x726 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x726 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x726 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(727): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x727 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x727 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x727 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(728): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x728 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x728 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x728 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(729): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x729 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x729 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x729 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(730): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x730 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x730 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x730 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(731): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x731 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x731 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x731 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(732): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x732 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x732 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x732 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(733): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x733 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x733 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x733 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(734): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x734 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x734 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x734 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(735): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x735 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x735 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x735 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(736): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x736 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x736 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x736 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(737): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x737 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x737 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x737 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(738): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x738 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x738 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x738 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(739): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x739 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x739 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x739 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(740): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x740 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x740 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x740 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(741): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x741 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x741 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x741 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(742): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x742 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x742 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x742 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(743): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x743 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x743 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x743 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(744): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x744 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x744 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x744 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(745): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x745 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x745 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x745 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(746): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x746 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x746 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x746 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(747): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x747 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x747 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x747 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(748): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x748 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x748 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x748 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(749): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x749 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x749 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x749 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(750): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x750 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x750 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x750 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(751): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x751 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x751 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x751 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(752): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x752 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x752 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x752 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(753): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x753 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x753 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x753 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(754): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x754 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x754 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x754 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(755): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x755 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x755 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x755 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(756): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x756 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x756 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x756 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(757): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x757 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x757 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x757 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(758): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x758 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x758 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x758 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(759): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x759 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x759 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x759 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(760): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x760 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x760 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x760 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(761): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x761 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x761 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x761 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(762): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x762 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x762 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x762 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(763): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x763 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x763 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x763 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(764): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x764 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x764 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x764 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(765): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x765 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x765 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x765 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(766): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x766 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x766 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x766 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(767): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x767 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x767 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x767 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(768): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x768 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x768 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x768 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(769): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x769 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x769 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x769 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(770): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x770 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x770 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x770 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(771): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x771 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x771 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x771 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(772): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x772 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x772 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x772 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(773): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x773 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x773 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x773 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(774): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x774 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x774 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x774 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(775): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x775 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x775 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x775 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(776): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x776 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x776 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x776 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(777): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x777 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x777 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x777 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(778): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x778 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x778 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x778 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(779): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x779 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x779 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x779 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(780): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x780 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x780 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x780 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(781): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x781 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x781 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x781 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(782): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x782 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x782 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x782 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(783): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x783 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x783 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x783 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(784): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x784 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x784 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x784 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(785): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x785 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x785 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x785 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(786): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x786 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x786 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x786 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(787): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x787 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x787 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x787 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(788): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x788 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x788 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x788 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(789): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x789 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x789 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x789 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(790): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x790 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x790 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x790 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(791): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x791 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x791 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x791 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(792): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x792 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x792 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x792 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(793): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x793 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x793 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x793 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(794): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x794 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x794 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x794 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(795): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x795 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x795 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x795 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(796): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x796 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x796 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x796 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(797): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x797 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x797 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x797 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(798): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x798 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x798 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x798 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(799): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x799 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x799 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x799 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(800): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x800 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x800 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x800 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(801): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x801 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x801 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x801 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(802): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x802 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x802 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x802 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(803): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x803 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x803 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x803 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(804): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x804 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x804 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x804 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(805): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x805 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x805 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x805 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(806): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x806 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x806 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x806 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(807): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x807 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x807 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x807 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(808): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x808 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x808 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x808 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(809): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x809 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x809 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x809 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(810): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x810 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x810 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x810 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(811): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x811 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x811 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x811 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(812): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x812 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x812 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x812 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(813): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x813 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x813 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x813 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(814): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x814 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x814 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x814 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(815): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x815 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x815 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x815 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(816): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x816 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x816 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x816 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(817): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x817 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x817 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x817 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(818): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x818 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x818 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x818 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(819): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x819 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x819 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x819 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(820): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x820 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x820 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x820 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(821): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x821 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x821 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x821 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(822): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x822 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x822 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x822 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(823): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x823 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x823 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x823 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(824): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x824 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x824 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x824 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(825): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x825 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x825 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x825 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(826): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x826 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x826 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x826 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(827): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x827 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x827 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x827 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(828): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x828 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x828 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x828 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(829): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x829 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x829 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x829 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(830): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x830 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x830 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x830 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(831): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x831 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x831 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x831 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(832): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x832 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x832 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x832 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(833): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x833 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x833 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x833 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(834): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x834 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x834 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x834 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(835): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x835 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x835 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x835 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(836): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x836 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x836 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x836 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(837): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x837 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x837 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x837 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(838): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x838 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x838 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x838 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(839): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x839 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x839 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x839 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(840): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x840 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x840 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x840 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(841): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x841 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x841 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x841 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(842): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x842 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x842 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x842 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(843): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x843 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x843 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x843 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(844): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x844 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x844 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x844 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(845): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x845 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x845 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x845 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(846): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x846 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x846 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x846 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(847): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x847 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x847 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x847 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(848): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x848 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x848 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x848 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(849): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x849 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x849 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x849 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(850): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x850 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x850 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x850 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(851): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x851 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x851 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x851 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(852): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x852 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x852 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x852 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(853): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x853 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x853 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x853 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(854): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x854 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x854 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x854 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(855): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x855 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x855 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x855 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(856): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x856 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x856 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x856 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(857): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x857 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x857 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x857 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(858): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x858 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x858 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x858 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(859): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x859 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x859 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x859 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(860): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x860 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x860 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x860 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(861): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x861 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x861 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x861 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(862): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x862 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x862 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x862 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(863): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x863 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x863 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x863 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(864): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x864 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x864 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x864 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(865): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x865 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x865 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x865 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(866): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x866 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x866 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x866 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(867): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x867 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x867 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x867 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(868): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x868 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x868 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x868 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(869): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x869 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x869 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x869 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(870): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x870 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x870 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x870 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(871): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x871 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x871 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x871 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(872): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x872 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x872 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x872 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(873): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x873 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x873 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x873 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(874): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x874 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x874 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x874 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(875): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x875 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x875 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x875 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(876): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x876 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x876 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x876 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(877): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x877 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x877 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x877 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(878): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x878 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x878 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x878 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(879): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x879 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x879 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x879 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(880): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x880 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x880 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x880 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(881): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x881 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x881 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x881 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(882): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x882 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x882 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x882 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(883): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x883 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x883 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x883 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(884): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x884 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x884 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x884 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(885): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x885 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x885 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x885 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(886): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x886 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x886 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x886 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(887): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x887 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x887 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x887 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(888): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x888 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x888 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x888 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(889): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x889 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x889 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x889 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(890): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x890 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x890 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x890 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(891): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x891 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x891 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x891 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(892): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x892 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x892 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x892 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(893): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x893 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x893 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x893 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(894): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x894 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x894 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x894 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(895): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x895 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x895 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x895 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(896): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x896 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x896 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x896 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(897): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x897 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x897 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x897 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(898): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x898 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x898 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x898 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(899): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x899 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x899 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x899 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(900): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x900 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x900 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x900 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(901): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x901 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x901 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x901 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(902): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x902 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x902 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x902 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(903): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x903 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x903 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x903 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(904): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x904 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x904 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x904 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(905): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x905 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x905 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x905 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(906): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x906 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x906 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x906 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(907): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x907 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x907 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x907 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(908): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x908 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x908 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x908 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(909): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x909 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x909 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x909 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(910): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x910 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x910 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x910 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(911): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x911 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x911 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x911 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(912): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x912 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x912 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x912 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(913): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x913 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x913 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x913 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(914): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x914 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x914 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x914 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(915): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x915 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x915 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x915 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(916): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x916 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x916 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x916 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(917): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x917 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x917 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x917 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(918): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x918 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x918 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x918 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(919): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x919 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x919 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x919 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(920): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x920 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x920 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x920 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(921): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x921 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x921 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x921 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(922): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x922 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x922 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x922 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(923): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x923 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x923 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x923 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(924): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x924 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x924 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x924 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(925): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x925 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x925 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x925 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(926): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x926 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x926 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x926 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(927): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x927 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x927 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x927 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(928): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x928 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x928 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x928 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(929): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x929 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x929 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x929 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(930): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x930 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x930 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x930 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(931): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x931 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x931 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x931 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(932): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x932 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x932 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x932 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(933): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x933 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x933 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x933 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(934): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x934 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x934 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x934 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(935): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x935 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x935 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x935 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(936): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x936 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x936 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x936 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(937): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x937 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x937 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x937 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(938): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x938 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x938 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x938 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(939): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x939 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x939 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x939 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(940): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x940 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x940 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x940 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(941): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x941 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x941 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x941 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(942): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x942 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x942 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x942 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(943): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x943 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x943 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x943 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(944): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x944 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x944 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x944 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(945): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x945 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x945 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x945 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(946): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x946 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x946 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x946 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(947): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x947 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x947 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x947 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(948): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x948 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x948 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x948 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(949): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x949 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x949 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x949 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(950): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x950 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x950 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x950 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(951): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x951 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x951 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x951 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(952): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x952 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x952 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x952 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(953): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x953 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x953 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x953 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(954): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x954 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x954 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x954 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(955): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x955 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x955 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x955 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(956): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x956 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x956 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x956 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(957): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x957 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x957 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x957 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(958): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x958 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x958 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x958 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(959): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x959 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x959 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x959 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(960): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x960 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x960 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x960 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(961): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x961 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x961 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x961 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(962): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x962 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x962 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x962 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(963): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x963 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x963 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x963 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(964): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x964 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x964 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x964 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(965): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x965 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x965 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x965 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(966): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x966 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x966 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x966 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(967): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x967 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x967 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x967 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(968): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x968 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x968 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x968 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(969): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x969 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x969 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x969 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(970): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x970 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x970 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x970 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(971): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x971 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x971 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x971 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(972): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x972 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x972 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x972 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(973): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x973 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x973 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x973 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(974): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x974 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x974 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x974 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(975): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x975 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x975 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x975 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(976): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x976 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x976 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x976 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(977): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x977 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x977 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x977 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(978): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x978 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x978 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x978 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(979): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x979 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x979 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x979 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(980): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x980 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x980 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x980 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(981): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x981 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x981 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x981 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(982): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x982 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x982 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x982 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(983): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x983 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x983 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x983 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(984): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x984 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x984 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x984 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(985): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x985 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x985 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x985 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(986): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x986 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x986 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x986 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(987): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x987 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x987 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x987 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(988): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x988 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x988 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x988 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(989): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x989 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x989 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x989 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(990): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x990 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x990 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x990 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(991): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x991 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x991 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x991 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(992): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x992 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x992 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x992 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(993): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x993 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x993 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x993 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(994): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x994 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x994 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x994 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(995): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x995 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x995 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x995 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(996): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x996 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x996 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x996 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(997): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x997 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x997 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x997 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(998): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x998 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x998 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x998 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(999): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x999 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x999 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x999 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1000): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1000 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1000 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1000 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1001): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1001 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1001 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1001 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1002): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1002 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1002 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1002 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1003): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1003 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1003 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1003 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1004): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1004 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1004 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1004 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1005): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1005 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1005 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1005 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1006): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1006 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1006 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1006 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1007): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1007 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1007 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1007 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1008): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1008 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1008 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1008 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1009): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1009 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1009 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1009 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1010): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1010 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1010 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1010 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1011): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1011 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1011 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1011 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1012): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1012 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1012 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1012 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1013): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1013 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1013 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1013 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1014): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1014 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1014 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1014 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1015): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1015 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1015 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1015 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1016): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1016 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1016 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1016 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1017): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1017 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1017 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1017 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1018): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1018 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1018 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1018 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1019): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1019 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1019 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1019 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1020): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1020 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1020 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1020 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1021): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1021 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1021 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1021 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1022): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1022 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1022 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1022 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1023): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1023 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1023 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1023 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(1024): [DoStmt] do (...) ... +# 35| getCondition(): [Literal] 0 +# 35| Type = [IntType] int +# 35| Value = [Literal] 0 +# 35| ValueCategory = prvalue +# 35| getStmt(): [BlockStmt] { ... } +# 35| getStmt(0): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1024 +# 35| Type = [Struct] String +# 35| getVariable().getInitializer(): [Initializer] initializer for x1024 +# 35| getExpr(): [ConstructorCall] call to String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [VariableAccess] x1024 +# 35| Type = [Struct] String +# 35| ValueCategory = lvalue +# 35| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 35| Conversion = [BoolConversion] conversion to bool +# 35| Type = [BoolType] bool +# 35| Value = [CStyleCast] 0 +# 35| ValueCategory = prvalue +# 36| getStmt(1025): [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 ad50412abc8..e149575e0fb 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -19007,18468 +19007,18468 @@ ir.cpp: # 2684| v2684_14(void) = Unreached : many-defs-per-use.cpp: -# 17| void many_defs_per_use() -# 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| mu17_2(unknown) = AliasedDefinition : -# 17| mu17_3(unknown) = InitializeNonLocal : -# 19| r19_1(glval) = VariableAddress[x0] : -# 19| mu19_2(String) = Uninitialized[x0] : &:r19_1 -# 19| r19_3(glval) = FunctionAddress[String] : -# 19| v19_4(void) = Call[String] : func:r19_3, this:r19_1 -# 19| mu19_5(unknown) = ^CallSideEffect : ~m? -# 19| mu19_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r19_1 -# 20| r20_1(glval) = VariableAddress[x0] : -# 20| r20_2(glval) = FunctionAddress[~String] : -# 20| v20_3(void) = Call[~String] : func:r20_2, this:r20_1 -# 20| mu20_4(unknown) = ^CallSideEffect : ~m? -# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_1, ~m? -# 20| mu20_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r20_1 -# 20| r20_7(bool) = Constant[0] : -# 20| v20_8(void) = ConditionalBranch : r20_7 +# 34| void many_defs_per_use() +# 34| Block 0 +# 34| v34_1(void) = EnterFunction : +# 34| mu34_2(unknown) = AliasedDefinition : +# 34| mu34_3(unknown) = InitializeNonLocal : +# 35| r35_1(glval) = VariableAddress[x0] : +# 35| mu35_2(String) = Uninitialized[x0] : &:r35_1 +# 35| r35_3(glval) = FunctionAddress[String] : +# 35| v35_4(void) = Call[String] : func:r35_3, this:r35_1 +# 35| mu35_5(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1 +# 35| r35_7(glval) = VariableAddress[x0] : +# 35| r35_8(glval) = FunctionAddress[~String] : +# 35| v35_9(void) = Call[~String] : func:r35_8, this:r35_7 +# 35| mu35_10(unknown) = ^CallSideEffect : ~m? +# 35| v35_11(void) = ^IndirectReadSideEffect[-1] : &:r35_7, ~m? +# 35| mu35_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7 +# 35| r35_13(bool) = Constant[0] : +# 35| v35_14(void) = ConditionalBranch : r35_13 #-----| False -> Block 1 #-----| True -> Block 1026 -# 22| Block 1 -# 22| r22_1(glval) = VariableAddress[x1] : -# 22| mu22_2(String) = Uninitialized[x1] : &:r22_1 -# 22| r22_3(glval) = FunctionAddress[String] : -# 22| v22_4(void) = Call[String] : func:r22_3, this:r22_1 -# 22| mu22_5(unknown) = ^CallSideEffect : ~m? -# 22| mu22_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r22_1 -# 23| r23_1(glval) = VariableAddress[x1] : -# 23| r23_2(glval) = FunctionAddress[~String] : -# 23| v23_3(void) = Call[~String] : func:r23_2, this:r23_1 -# 23| mu23_4(unknown) = ^CallSideEffect : ~m? -# 23| v23_5(void) = ^IndirectReadSideEffect[-1] : &:r23_1, ~m? -# 23| mu23_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r23_1 -# 23| r23_7(bool) = Constant[0] : -# 23| v23_8(void) = ConditionalBranch : r23_7 +# 35| Block 1 +# 35| r35_15(glval) = VariableAddress[x1] : +# 35| mu35_16(String) = Uninitialized[x1] : &:r35_15 +# 35| r35_17(glval) = FunctionAddress[String] : +# 35| v35_18(void) = Call[String] : func:r35_17, this:r35_15 +# 35| mu35_19(unknown) = ^CallSideEffect : ~m? +# 35| mu35_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_15 +# 35| r35_21(glval) = VariableAddress[x1] : +# 35| r35_22(glval) = FunctionAddress[~String] : +# 35| v35_23(void) = Call[~String] : func:r35_22, this:r35_21 +# 35| mu35_24(unknown) = ^CallSideEffect : ~m? +# 35| v35_25(void) = ^IndirectReadSideEffect[-1] : &:r35_21, ~m? +# 35| mu35_26(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_21 +# 35| r35_27(bool) = Constant[0] : +# 35| v35_28(void) = ConditionalBranch : r35_27 #-----| False -> Block 2 #-----| True -> Block 1026 -# 25| Block 2 -# 25| r25_1(glval) = VariableAddress[x2] : -# 25| mu25_2(String) = Uninitialized[x2] : &:r25_1 -# 25| r25_3(glval) = FunctionAddress[String] : -# 25| v25_4(void) = Call[String] : func:r25_3, this:r25_1 -# 25| mu25_5(unknown) = ^CallSideEffect : ~m? -# 25| mu25_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r25_1 -# 26| r26_1(glval) = VariableAddress[x2] : -# 26| r26_2(glval) = FunctionAddress[~String] : -# 26| v26_3(void) = Call[~String] : func:r26_2, this:r26_1 -# 26| mu26_4(unknown) = ^CallSideEffect : ~m? -# 26| v26_5(void) = ^IndirectReadSideEffect[-1] : &:r26_1, ~m? -# 26| mu26_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r26_1 -# 26| r26_7(bool) = Constant[0] : -# 26| v26_8(void) = ConditionalBranch : r26_7 +# 35| Block 2 +# 35| r35_29(glval) = VariableAddress[x2] : +# 35| mu35_30(String) = Uninitialized[x2] : &:r35_29 +# 35| r35_31(glval) = FunctionAddress[String] : +# 35| v35_32(void) = Call[String] : func:r35_31, this:r35_29 +# 35| mu35_33(unknown) = ^CallSideEffect : ~m? +# 35| mu35_34(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_29 +# 35| r35_35(glval) = VariableAddress[x2] : +# 35| r35_36(glval) = FunctionAddress[~String] : +# 35| v35_37(void) = Call[~String] : func:r35_36, this:r35_35 +# 35| mu35_38(unknown) = ^CallSideEffect : ~m? +# 35| v35_39(void) = ^IndirectReadSideEffect[-1] : &:r35_35, ~m? +# 35| mu35_40(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_35 +# 35| r35_41(bool) = Constant[0] : +# 35| v35_42(void) = ConditionalBranch : r35_41 #-----| False -> Block 3 #-----| True -> Block 1026 -# 28| Block 3 -# 28| r28_1(glval) = VariableAddress[x3] : -# 28| mu28_2(String) = Uninitialized[x3] : &:r28_1 -# 28| r28_3(glval) = FunctionAddress[String] : -# 28| v28_4(void) = Call[String] : func:r28_3, this:r28_1 -# 28| mu28_5(unknown) = ^CallSideEffect : ~m? -# 28| mu28_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r28_1 -# 29| r29_1(glval) = VariableAddress[x3] : -# 29| r29_2(glval) = FunctionAddress[~String] : -# 29| v29_3(void) = Call[~String] : func:r29_2, this:r29_1 -# 29| mu29_4(unknown) = ^CallSideEffect : ~m? -# 29| v29_5(void) = ^IndirectReadSideEffect[-1] : &:r29_1, ~m? -# 29| mu29_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r29_1 -# 29| r29_7(bool) = Constant[0] : -# 29| v29_8(void) = ConditionalBranch : r29_7 +# 35| Block 3 +# 35| r35_43(glval) = VariableAddress[x3] : +# 35| mu35_44(String) = Uninitialized[x3] : &:r35_43 +# 35| r35_45(glval) = FunctionAddress[String] : +# 35| v35_46(void) = Call[String] : func:r35_45, this:r35_43 +# 35| mu35_47(unknown) = ^CallSideEffect : ~m? +# 35| mu35_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_43 +# 35| r35_49(glval) = VariableAddress[x3] : +# 35| r35_50(glval) = FunctionAddress[~String] : +# 35| v35_51(void) = Call[~String] : func:r35_50, this:r35_49 +# 35| mu35_52(unknown) = ^CallSideEffect : ~m? +# 35| v35_53(void) = ^IndirectReadSideEffect[-1] : &:r35_49, ~m? +# 35| mu35_54(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_49 +# 35| r35_55(bool) = Constant[0] : +# 35| v35_56(void) = ConditionalBranch : r35_55 #-----| False -> Block 4 #-----| True -> Block 1026 -# 31| Block 4 -# 31| r31_1(glval) = VariableAddress[x4] : -# 31| mu31_2(String) = Uninitialized[x4] : &:r31_1 -# 31| r31_3(glval) = FunctionAddress[String] : -# 31| v31_4(void) = Call[String] : func:r31_3, this:r31_1 -# 31| mu31_5(unknown) = ^CallSideEffect : ~m? -# 31| mu31_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r31_1 -# 32| r32_1(glval) = VariableAddress[x4] : -# 32| r32_2(glval) = FunctionAddress[~String] : -# 32| v32_3(void) = Call[~String] : func:r32_2, this:r32_1 -# 32| mu32_4(unknown) = ^CallSideEffect : ~m? -# 32| v32_5(void) = ^IndirectReadSideEffect[-1] : &:r32_1, ~m? -# 32| mu32_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r32_1 -# 32| r32_7(bool) = Constant[0] : -# 32| v32_8(void) = ConditionalBranch : r32_7 +# 35| Block 4 +# 35| r35_57(glval) = VariableAddress[x4] : +# 35| mu35_58(String) = Uninitialized[x4] : &:r35_57 +# 35| r35_59(glval) = FunctionAddress[String] : +# 35| v35_60(void) = Call[String] : func:r35_59, this:r35_57 +# 35| mu35_61(unknown) = ^CallSideEffect : ~m? +# 35| mu35_62(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_57 +# 35| r35_63(glval) = VariableAddress[x4] : +# 35| r35_64(glval) = FunctionAddress[~String] : +# 35| v35_65(void) = Call[~String] : func:r35_64, this:r35_63 +# 35| mu35_66(unknown) = ^CallSideEffect : ~m? +# 35| v35_67(void) = ^IndirectReadSideEffect[-1] : &:r35_63, ~m? +# 35| mu35_68(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_63 +# 35| r35_69(bool) = Constant[0] : +# 35| v35_70(void) = ConditionalBranch : r35_69 #-----| False -> Block 5 #-----| True -> Block 1026 -# 34| Block 5 -# 34| r34_1(glval) = VariableAddress[x5] : -# 34| mu34_2(String) = Uninitialized[x5] : &:r34_1 -# 34| r34_3(glval) = FunctionAddress[String] : -# 34| v34_4(void) = Call[String] : func:r34_3, this:r34_1 -# 34| mu34_5(unknown) = ^CallSideEffect : ~m? -# 34| mu34_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 -# 35| r35_1(glval) = VariableAddress[x5] : -# 35| r35_2(glval) = FunctionAddress[~String] : -# 35| v35_3(void) = Call[~String] : func:r35_2, this:r35_1 -# 35| mu35_4(unknown) = ^CallSideEffect : ~m? -# 35| v35_5(void) = ^IndirectReadSideEffect[-1] : &:r35_1, ~m? -# 35| mu35_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1 -# 35| r35_7(bool) = Constant[0] : -# 35| v35_8(void) = ConditionalBranch : r35_7 +# 35| Block 5 +# 35| r35_71(glval) = VariableAddress[x5] : +# 35| mu35_72(String) = Uninitialized[x5] : &:r35_71 +# 35| r35_73(glval) = FunctionAddress[String] : +# 35| v35_74(void) = Call[String] : func:r35_73, this:r35_71 +# 35| mu35_75(unknown) = ^CallSideEffect : ~m? +# 35| mu35_76(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_71 +# 35| r35_77(glval) = VariableAddress[x5] : +# 35| r35_78(glval) = FunctionAddress[~String] : +# 35| v35_79(void) = Call[~String] : func:r35_78, this:r35_77 +# 35| mu35_80(unknown) = ^CallSideEffect : ~m? +# 35| v35_81(void) = ^IndirectReadSideEffect[-1] : &:r35_77, ~m? +# 35| mu35_82(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_77 +# 35| r35_83(bool) = Constant[0] : +# 35| v35_84(void) = ConditionalBranch : r35_83 #-----| False -> Block 6 #-----| True -> Block 1026 -# 37| Block 6 -# 37| r37_1(glval) = VariableAddress[x6] : -# 37| mu37_2(String) = Uninitialized[x6] : &:r37_1 -# 37| r37_3(glval) = FunctionAddress[String] : -# 37| v37_4(void) = Call[String] : func:r37_3, this:r37_1 -# 37| mu37_5(unknown) = ^CallSideEffect : ~m? -# 37| mu37_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r37_1 -# 38| r38_1(glval) = VariableAddress[x6] : -# 38| r38_2(glval) = FunctionAddress[~String] : -# 38| v38_3(void) = Call[~String] : func:r38_2, this:r38_1 -# 38| mu38_4(unknown) = ^CallSideEffect : ~m? -# 38| v38_5(void) = ^IndirectReadSideEffect[-1] : &:r38_1, ~m? -# 38| mu38_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r38_1 -# 38| r38_7(bool) = Constant[0] : -# 38| v38_8(void) = ConditionalBranch : r38_7 +# 35| Block 6 +# 35| r35_85(glval) = VariableAddress[x6] : +# 35| mu35_86(String) = Uninitialized[x6] : &:r35_85 +# 35| r35_87(glval) = FunctionAddress[String] : +# 35| v35_88(void) = Call[String] : func:r35_87, this:r35_85 +# 35| mu35_89(unknown) = ^CallSideEffect : ~m? +# 35| mu35_90(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_85 +# 35| r35_91(glval) = VariableAddress[x6] : +# 35| r35_92(glval) = FunctionAddress[~String] : +# 35| v35_93(void) = Call[~String] : func:r35_92, this:r35_91 +# 35| mu35_94(unknown) = ^CallSideEffect : ~m? +# 35| v35_95(void) = ^IndirectReadSideEffect[-1] : &:r35_91, ~m? +# 35| mu35_96(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_91 +# 35| r35_97(bool) = Constant[0] : +# 35| v35_98(void) = ConditionalBranch : r35_97 #-----| False -> Block 7 #-----| True -> Block 1026 -# 40| Block 7 -# 40| r40_1(glval) = VariableAddress[x7] : -# 40| mu40_2(String) = Uninitialized[x7] : &:r40_1 -# 40| r40_3(glval) = FunctionAddress[String] : -# 40| v40_4(void) = Call[String] : func:r40_3, this:r40_1 -# 40| mu40_5(unknown) = ^CallSideEffect : ~m? -# 40| mu40_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r40_1 -# 41| r41_1(glval) = VariableAddress[x7] : -# 41| r41_2(glval) = FunctionAddress[~String] : -# 41| v41_3(void) = Call[~String] : func:r41_2, this:r41_1 -# 41| mu41_4(unknown) = ^CallSideEffect : ~m? -# 41| v41_5(void) = ^IndirectReadSideEffect[-1] : &:r41_1, ~m? -# 41| mu41_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r41_1 -# 41| r41_7(bool) = Constant[0] : -# 41| v41_8(void) = ConditionalBranch : r41_7 +# 35| Block 7 +# 35| r35_99(glval) = VariableAddress[x7] : +# 35| mu35_100(String) = Uninitialized[x7] : &:r35_99 +# 35| r35_101(glval) = FunctionAddress[String] : +# 35| v35_102(void) = Call[String] : func:r35_101, this:r35_99 +# 35| mu35_103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_99 +# 35| r35_105(glval) = VariableAddress[x7] : +# 35| r35_106(glval) = FunctionAddress[~String] : +# 35| v35_107(void) = Call[~String] : func:r35_106, this:r35_105 +# 35| mu35_108(unknown) = ^CallSideEffect : ~m? +# 35| v35_109(void) = ^IndirectReadSideEffect[-1] : &:r35_105, ~m? +# 35| mu35_110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_105 +# 35| r35_111(bool) = Constant[0] : +# 35| v35_112(void) = ConditionalBranch : r35_111 #-----| False -> Block 8 #-----| True -> Block 1026 -# 43| Block 8 -# 43| r43_1(glval) = VariableAddress[x8] : -# 43| mu43_2(String) = Uninitialized[x8] : &:r43_1 -# 43| r43_3(glval) = FunctionAddress[String] : -# 43| v43_4(void) = Call[String] : func:r43_3, this:r43_1 -# 43| mu43_5(unknown) = ^CallSideEffect : ~m? -# 43| mu43_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 -# 44| r44_1(glval) = VariableAddress[x8] : -# 44| r44_2(glval) = FunctionAddress[~String] : -# 44| v44_3(void) = Call[~String] : func:r44_2, this:r44_1 -# 44| mu44_4(unknown) = ^CallSideEffect : ~m? -# 44| v44_5(void) = ^IndirectReadSideEffect[-1] : &:r44_1, ~m? -# 44| mu44_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r44_1 -# 44| r44_7(bool) = Constant[0] : -# 44| v44_8(void) = ConditionalBranch : r44_7 +# 35| Block 8 +# 35| r35_113(glval) = VariableAddress[x8] : +# 35| mu35_114(String) = Uninitialized[x8] : &:r35_113 +# 35| r35_115(glval) = FunctionAddress[String] : +# 35| v35_116(void) = Call[String] : func:r35_115, this:r35_113 +# 35| mu35_117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_113 +# 35| r35_119(glval) = VariableAddress[x8] : +# 35| r35_120(glval) = FunctionAddress[~String] : +# 35| v35_121(void) = Call[~String] : func:r35_120, this:r35_119 +# 35| mu35_122(unknown) = ^CallSideEffect : ~m? +# 35| v35_123(void) = ^IndirectReadSideEffect[-1] : &:r35_119, ~m? +# 35| mu35_124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_119 +# 35| r35_125(bool) = Constant[0] : +# 35| v35_126(void) = ConditionalBranch : r35_125 #-----| False -> Block 9 #-----| True -> Block 1026 -# 46| Block 9 -# 46| r46_1(glval) = VariableAddress[x9] : -# 46| mu46_2(String) = Uninitialized[x9] : &:r46_1 -# 46| r46_3(glval) = FunctionAddress[String] : -# 46| v46_4(void) = Call[String] : func:r46_3, this:r46_1 -# 46| mu46_5(unknown) = ^CallSideEffect : ~m? -# 46| mu46_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r46_1 -# 47| r47_1(glval) = VariableAddress[x9] : -# 47| r47_2(glval) = FunctionAddress[~String] : -# 47| v47_3(void) = Call[~String] : func:r47_2, this:r47_1 -# 47| mu47_4(unknown) = ^CallSideEffect : ~m? -# 47| v47_5(void) = ^IndirectReadSideEffect[-1] : &:r47_1, ~m? -# 47| mu47_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r47_1 -# 47| r47_7(bool) = Constant[0] : -# 47| v47_8(void) = ConditionalBranch : r47_7 +# 35| Block 9 +# 35| r35_127(glval) = VariableAddress[x9] : +# 35| mu35_128(String) = Uninitialized[x9] : &:r35_127 +# 35| r35_129(glval) = FunctionAddress[String] : +# 35| v35_130(void) = Call[String] : func:r35_129, this:r35_127 +# 35| mu35_131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_127 +# 35| r35_133(glval) = VariableAddress[x9] : +# 35| r35_134(glval) = FunctionAddress[~String] : +# 35| v35_135(void) = Call[~String] : func:r35_134, this:r35_133 +# 35| mu35_136(unknown) = ^CallSideEffect : ~m? +# 35| v35_137(void) = ^IndirectReadSideEffect[-1] : &:r35_133, ~m? +# 35| mu35_138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_133 +# 35| r35_139(bool) = Constant[0] : +# 35| v35_140(void) = ConditionalBranch : r35_139 #-----| False -> Block 10 #-----| True -> Block 1026 -# 49| Block 10 -# 49| r49_1(glval) = VariableAddress[x10] : -# 49| mu49_2(String) = Uninitialized[x10] : &:r49_1 -# 49| r49_3(glval) = FunctionAddress[String] : -# 49| v49_4(void) = Call[String] : func:r49_3, this:r49_1 -# 49| mu49_5(unknown) = ^CallSideEffect : ~m? -# 49| mu49_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r49_1 -# 50| r50_1(glval) = VariableAddress[x10] : -# 50| r50_2(glval) = FunctionAddress[~String] : -# 50| v50_3(void) = Call[~String] : func:r50_2, this:r50_1 -# 50| mu50_4(unknown) = ^CallSideEffect : ~m? -# 50| v50_5(void) = ^IndirectReadSideEffect[-1] : &:r50_1, ~m? -# 50| mu50_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 -# 50| r50_7(bool) = Constant[0] : -# 50| v50_8(void) = ConditionalBranch : r50_7 +# 35| Block 10 +# 35| r35_141(glval) = VariableAddress[x10] : +# 35| mu35_142(String) = Uninitialized[x10] : &:r35_141 +# 35| r35_143(glval) = FunctionAddress[String] : +# 35| v35_144(void) = Call[String] : func:r35_143, this:r35_141 +# 35| mu35_145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_141 +# 35| r35_147(glval) = VariableAddress[x10] : +# 35| r35_148(glval) = FunctionAddress[~String] : +# 35| v35_149(void) = Call[~String] : func:r35_148, this:r35_147 +# 35| mu35_150(unknown) = ^CallSideEffect : ~m? +# 35| v35_151(void) = ^IndirectReadSideEffect[-1] : &:r35_147, ~m? +# 35| mu35_152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_147 +# 35| r35_153(bool) = Constant[0] : +# 35| v35_154(void) = ConditionalBranch : r35_153 #-----| False -> Block 11 #-----| True -> Block 1026 -# 52| Block 11 -# 52| r52_1(glval) = VariableAddress[x11] : -# 52| mu52_2(String) = Uninitialized[x11] : &:r52_1 -# 52| r52_3(glval) = FunctionAddress[String] : -# 52| v52_4(void) = Call[String] : func:r52_3, this:r52_1 -# 52| mu52_5(unknown) = ^CallSideEffect : ~m? -# 52| mu52_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r52_1 -# 53| r53_1(glval) = VariableAddress[x11] : -# 53| r53_2(glval) = FunctionAddress[~String] : -# 53| v53_3(void) = Call[~String] : func:r53_2, this:r53_1 -# 53| mu53_4(unknown) = ^CallSideEffect : ~m? -# 53| v53_5(void) = ^IndirectReadSideEffect[-1] : &:r53_1, ~m? -# 53| mu53_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r53_1 -# 53| r53_7(bool) = Constant[0] : -# 53| v53_8(void) = ConditionalBranch : r53_7 +# 35| Block 11 +# 35| r35_155(glval) = VariableAddress[x11] : +# 35| mu35_156(String) = Uninitialized[x11] : &:r35_155 +# 35| r35_157(glval) = FunctionAddress[String] : +# 35| v35_158(void) = Call[String] : func:r35_157, this:r35_155 +# 35| mu35_159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_155 +# 35| r35_161(glval) = VariableAddress[x11] : +# 35| r35_162(glval) = FunctionAddress[~String] : +# 35| v35_163(void) = Call[~String] : func:r35_162, this:r35_161 +# 35| mu35_164(unknown) = ^CallSideEffect : ~m? +# 35| v35_165(void) = ^IndirectReadSideEffect[-1] : &:r35_161, ~m? +# 35| mu35_166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_161 +# 35| r35_167(bool) = Constant[0] : +# 35| v35_168(void) = ConditionalBranch : r35_167 #-----| False -> Block 12 #-----| True -> Block 1026 -# 55| Block 12 -# 55| r55_1(glval) = VariableAddress[x12] : -# 55| mu55_2(String) = Uninitialized[x12] : &:r55_1 -# 55| r55_3(glval) = FunctionAddress[String] : -# 55| v55_4(void) = Call[String] : func:r55_3, this:r55_1 -# 55| mu55_5(unknown) = ^CallSideEffect : ~m? -# 55| mu55_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r55_1 -# 56| r56_1(glval) = VariableAddress[x12] : -# 56| r56_2(glval) = FunctionAddress[~String] : -# 56| v56_3(void) = Call[~String] : func:r56_2, this:r56_1 -# 56| mu56_4(unknown) = ^CallSideEffect : ~m? -# 56| v56_5(void) = ^IndirectReadSideEffect[-1] : &:r56_1, ~m? -# 56| mu56_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r56_1 -# 56| r56_7(bool) = Constant[0] : -# 56| v56_8(void) = ConditionalBranch : r56_7 +# 35| Block 12 +# 35| r35_169(glval) = VariableAddress[x12] : +# 35| mu35_170(String) = Uninitialized[x12] : &:r35_169 +# 35| r35_171(glval) = FunctionAddress[String] : +# 35| v35_172(void) = Call[String] : func:r35_171, this:r35_169 +# 35| mu35_173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_169 +# 35| r35_175(glval) = VariableAddress[x12] : +# 35| r35_176(glval) = FunctionAddress[~String] : +# 35| v35_177(void) = Call[~String] : func:r35_176, this:r35_175 +# 35| mu35_178(unknown) = ^CallSideEffect : ~m? +# 35| v35_179(void) = ^IndirectReadSideEffect[-1] : &:r35_175, ~m? +# 35| mu35_180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_175 +# 35| r35_181(bool) = Constant[0] : +# 35| v35_182(void) = ConditionalBranch : r35_181 #-----| False -> Block 13 #-----| True -> Block 1026 -# 58| Block 13 -# 58| r58_1(glval) = VariableAddress[x13] : -# 58| mu58_2(String) = Uninitialized[x13] : &:r58_1 -# 58| r58_3(glval) = FunctionAddress[String] : -# 58| v58_4(void) = Call[String] : func:r58_3, this:r58_1 -# 58| mu58_5(unknown) = ^CallSideEffect : ~m? -# 58| mu58_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r58_1 -# 59| r59_1(glval) = VariableAddress[x13] : -# 59| r59_2(glval) = FunctionAddress[~String] : -# 59| v59_3(void) = Call[~String] : func:r59_2, this:r59_1 -# 59| mu59_4(unknown) = ^CallSideEffect : ~m? -# 59| v59_5(void) = ^IndirectReadSideEffect[-1] : &:r59_1, ~m? -# 59| mu59_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r59_1 -# 59| r59_7(bool) = Constant[0] : -# 59| v59_8(void) = ConditionalBranch : r59_7 +# 35| Block 13 +# 35| r35_183(glval) = VariableAddress[x13] : +# 35| mu35_184(String) = Uninitialized[x13] : &:r35_183 +# 35| r35_185(glval) = FunctionAddress[String] : +# 35| v35_186(void) = Call[String] : func:r35_185, this:r35_183 +# 35| mu35_187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_183 +# 35| r35_189(glval) = VariableAddress[x13] : +# 35| r35_190(glval) = FunctionAddress[~String] : +# 35| v35_191(void) = Call[~String] : func:r35_190, this:r35_189 +# 35| mu35_192(unknown) = ^CallSideEffect : ~m? +# 35| v35_193(void) = ^IndirectReadSideEffect[-1] : &:r35_189, ~m? +# 35| mu35_194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_189 +# 35| r35_195(bool) = Constant[0] : +# 35| v35_196(void) = ConditionalBranch : r35_195 #-----| False -> Block 14 #-----| True -> Block 1026 -# 61| Block 14 -# 61| r61_1(glval) = VariableAddress[x14] : -# 61| mu61_2(String) = Uninitialized[x14] : &:r61_1 -# 61| r61_3(glval) = FunctionAddress[String] : -# 61| v61_4(void) = Call[String] : func:r61_3, this:r61_1 -# 61| mu61_5(unknown) = ^CallSideEffect : ~m? -# 61| mu61_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r61_1 -# 62| r62_1(glval) = VariableAddress[x14] : -# 62| r62_2(glval) = FunctionAddress[~String] : -# 62| v62_3(void) = Call[~String] : func:r62_2, this:r62_1 -# 62| mu62_4(unknown) = ^CallSideEffect : ~m? -# 62| v62_5(void) = ^IndirectReadSideEffect[-1] : &:r62_1, ~m? -# 62| mu62_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r62_1 -# 62| r62_7(bool) = Constant[0] : -# 62| v62_8(void) = ConditionalBranch : r62_7 +# 35| Block 14 +# 35| r35_197(glval) = VariableAddress[x14] : +# 35| mu35_198(String) = Uninitialized[x14] : &:r35_197 +# 35| r35_199(glval) = FunctionAddress[String] : +# 35| v35_200(void) = Call[String] : func:r35_199, this:r35_197 +# 35| mu35_201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_197 +# 35| r35_203(glval) = VariableAddress[x14] : +# 35| r35_204(glval) = FunctionAddress[~String] : +# 35| v35_205(void) = Call[~String] : func:r35_204, this:r35_203 +# 35| mu35_206(unknown) = ^CallSideEffect : ~m? +# 35| v35_207(void) = ^IndirectReadSideEffect[-1] : &:r35_203, ~m? +# 35| mu35_208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_203 +# 35| r35_209(bool) = Constant[0] : +# 35| v35_210(void) = ConditionalBranch : r35_209 #-----| False -> Block 15 #-----| True -> Block 1026 -# 64| Block 15 -# 64| r64_1(glval) = VariableAddress[x15] : -# 64| mu64_2(String) = Uninitialized[x15] : &:r64_1 -# 64| r64_3(glval) = FunctionAddress[String] : -# 64| v64_4(void) = Call[String] : func:r64_3, this:r64_1 -# 64| mu64_5(unknown) = ^CallSideEffect : ~m? -# 64| mu64_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r64_1 -# 65| r65_1(glval) = VariableAddress[x15] : -# 65| r65_2(glval) = FunctionAddress[~String] : -# 65| v65_3(void) = Call[~String] : func:r65_2, this:r65_1 -# 65| mu65_4(unknown) = ^CallSideEffect : ~m? -# 65| v65_5(void) = ^IndirectReadSideEffect[-1] : &:r65_1, ~m? -# 65| mu65_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r65_1 -# 65| r65_7(bool) = Constant[0] : -# 65| v65_8(void) = ConditionalBranch : r65_7 +# 35| Block 15 +# 35| r35_211(glval) = VariableAddress[x15] : +# 35| mu35_212(String) = Uninitialized[x15] : &:r35_211 +# 35| r35_213(glval) = FunctionAddress[String] : +# 35| v35_214(void) = Call[String] : func:r35_213, this:r35_211 +# 35| mu35_215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_211 +# 35| r35_217(glval) = VariableAddress[x15] : +# 35| r35_218(glval) = FunctionAddress[~String] : +# 35| v35_219(void) = Call[~String] : func:r35_218, this:r35_217 +# 35| mu35_220(unknown) = ^CallSideEffect : ~m? +# 35| v35_221(void) = ^IndirectReadSideEffect[-1] : &:r35_217, ~m? +# 35| mu35_222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_217 +# 35| r35_223(bool) = Constant[0] : +# 35| v35_224(void) = ConditionalBranch : r35_223 #-----| False -> Block 16 #-----| True -> Block 1026 -# 67| Block 16 -# 67| r67_1(glval) = VariableAddress[x16] : -# 67| mu67_2(String) = Uninitialized[x16] : &:r67_1 -# 67| r67_3(glval) = FunctionAddress[String] : -# 67| v67_4(void) = Call[String] : func:r67_3, this:r67_1 -# 67| mu67_5(unknown) = ^CallSideEffect : ~m? -# 67| mu67_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r67_1 -# 68| r68_1(glval) = VariableAddress[x16] : -# 68| r68_2(glval) = FunctionAddress[~String] : -# 68| v68_3(void) = Call[~String] : func:r68_2, this:r68_1 -# 68| mu68_4(unknown) = ^CallSideEffect : ~m? -# 68| v68_5(void) = ^IndirectReadSideEffect[-1] : &:r68_1, ~m? -# 68| mu68_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r68_1 -# 68| r68_7(bool) = Constant[0] : -# 68| v68_8(void) = ConditionalBranch : r68_7 +# 35| Block 16 +# 35| r35_225(glval) = VariableAddress[x16] : +# 35| mu35_226(String) = Uninitialized[x16] : &:r35_225 +# 35| r35_227(glval) = FunctionAddress[String] : +# 35| v35_228(void) = Call[String] : func:r35_227, this:r35_225 +# 35| mu35_229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_225 +# 35| r35_231(glval) = VariableAddress[x16] : +# 35| r35_232(glval) = FunctionAddress[~String] : +# 35| v35_233(void) = Call[~String] : func:r35_232, this:r35_231 +# 35| mu35_234(unknown) = ^CallSideEffect : ~m? +# 35| v35_235(void) = ^IndirectReadSideEffect[-1] : &:r35_231, ~m? +# 35| mu35_236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_231 +# 35| r35_237(bool) = Constant[0] : +# 35| v35_238(void) = ConditionalBranch : r35_237 #-----| False -> Block 17 #-----| True -> Block 1026 -# 70| Block 17 -# 70| r70_1(glval) = VariableAddress[x17] : -# 70| mu70_2(String) = Uninitialized[x17] : &:r70_1 -# 70| r70_3(glval) = FunctionAddress[String] : -# 70| v70_4(void) = Call[String] : func:r70_3, this:r70_1 -# 70| mu70_5(unknown) = ^CallSideEffect : ~m? -# 70| mu70_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r70_1 -# 71| r71_1(glval) = VariableAddress[x17] : -# 71| r71_2(glval) = FunctionAddress[~String] : -# 71| v71_3(void) = Call[~String] : func:r71_2, this:r71_1 -# 71| mu71_4(unknown) = ^CallSideEffect : ~m? -# 71| v71_5(void) = ^IndirectReadSideEffect[-1] : &:r71_1, ~m? -# 71| mu71_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r71_1 -# 71| r71_7(bool) = Constant[0] : -# 71| v71_8(void) = ConditionalBranch : r71_7 +# 35| Block 17 +# 35| r35_239(glval) = VariableAddress[x17] : +# 35| mu35_240(String) = Uninitialized[x17] : &:r35_239 +# 35| r35_241(glval) = FunctionAddress[String] : +# 35| v35_242(void) = Call[String] : func:r35_241, this:r35_239 +# 35| mu35_243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_239 +# 35| r35_245(glval) = VariableAddress[x17] : +# 35| r35_246(glval) = FunctionAddress[~String] : +# 35| v35_247(void) = Call[~String] : func:r35_246, this:r35_245 +# 35| mu35_248(unknown) = ^CallSideEffect : ~m? +# 35| v35_249(void) = ^IndirectReadSideEffect[-1] : &:r35_245, ~m? +# 35| mu35_250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_245 +# 35| r35_251(bool) = Constant[0] : +# 35| v35_252(void) = ConditionalBranch : r35_251 #-----| False -> Block 18 #-----| True -> Block 1026 -# 73| Block 18 -# 73| r73_1(glval) = VariableAddress[x18] : -# 73| mu73_2(String) = Uninitialized[x18] : &:r73_1 -# 73| r73_3(glval) = FunctionAddress[String] : -# 73| v73_4(void) = Call[String] : func:r73_3, this:r73_1 -# 73| mu73_5(unknown) = ^CallSideEffect : ~m? -# 73| mu73_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r73_1 -# 74| r74_1(glval) = VariableAddress[x18] : -# 74| r74_2(glval) = FunctionAddress[~String] : -# 74| v74_3(void) = Call[~String] : func:r74_2, this:r74_1 -# 74| mu74_4(unknown) = ^CallSideEffect : ~m? -# 74| v74_5(void) = ^IndirectReadSideEffect[-1] : &:r74_1, ~m? -# 74| mu74_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r74_1 -# 74| r74_7(bool) = Constant[0] : -# 74| v74_8(void) = ConditionalBranch : r74_7 +# 35| Block 18 +# 35| r35_253(glval) = VariableAddress[x18] : +# 35| mu35_254(String) = Uninitialized[x18] : &:r35_253 +# 35| r35_255(glval) = FunctionAddress[String] : +# 35| v35_256(void) = Call[String] : func:r35_255, this:r35_253 +# 35| mu35_257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_253 +# 35| r35_259(glval) = VariableAddress[x18] : +# 35| r35_260(glval) = FunctionAddress[~String] : +# 35| v35_261(void) = Call[~String] : func:r35_260, this:r35_259 +# 35| mu35_262(unknown) = ^CallSideEffect : ~m? +# 35| v35_263(void) = ^IndirectReadSideEffect[-1] : &:r35_259, ~m? +# 35| mu35_264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_259 +# 35| r35_265(bool) = Constant[0] : +# 35| v35_266(void) = ConditionalBranch : r35_265 #-----| False -> Block 19 #-----| True -> Block 1026 -# 76| Block 19 -# 76| r76_1(glval) = VariableAddress[x19] : -# 76| mu76_2(String) = Uninitialized[x19] : &:r76_1 -# 76| r76_3(glval) = FunctionAddress[String] : -# 76| v76_4(void) = Call[String] : func:r76_3, this:r76_1 -# 76| mu76_5(unknown) = ^CallSideEffect : ~m? -# 76| mu76_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r76_1 -# 77| r77_1(glval) = VariableAddress[x19] : -# 77| r77_2(glval) = FunctionAddress[~String] : -# 77| v77_3(void) = Call[~String] : func:r77_2, this:r77_1 -# 77| mu77_4(unknown) = ^CallSideEffect : ~m? -# 77| v77_5(void) = ^IndirectReadSideEffect[-1] : &:r77_1, ~m? -# 77| mu77_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r77_1 -# 77| r77_7(bool) = Constant[0] : -# 77| v77_8(void) = ConditionalBranch : r77_7 +# 35| Block 19 +# 35| r35_267(glval) = VariableAddress[x19] : +# 35| mu35_268(String) = Uninitialized[x19] : &:r35_267 +# 35| r35_269(glval) = FunctionAddress[String] : +# 35| v35_270(void) = Call[String] : func:r35_269, this:r35_267 +# 35| mu35_271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_267 +# 35| r35_273(glval) = VariableAddress[x19] : +# 35| r35_274(glval) = FunctionAddress[~String] : +# 35| v35_275(void) = Call[~String] : func:r35_274, this:r35_273 +# 35| mu35_276(unknown) = ^CallSideEffect : ~m? +# 35| v35_277(void) = ^IndirectReadSideEffect[-1] : &:r35_273, ~m? +# 35| mu35_278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_273 +# 35| r35_279(bool) = Constant[0] : +# 35| v35_280(void) = ConditionalBranch : r35_279 #-----| False -> Block 20 #-----| True -> Block 1026 -# 79| Block 20 -# 79| r79_1(glval) = VariableAddress[x20] : -# 79| mu79_2(String) = Uninitialized[x20] : &:r79_1 -# 79| r79_3(glval) = FunctionAddress[String] : -# 79| v79_4(void) = Call[String] : func:r79_3, this:r79_1 -# 79| mu79_5(unknown) = ^CallSideEffect : ~m? -# 79| mu79_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r79_1 -# 80| r80_1(glval) = VariableAddress[x20] : -# 80| r80_2(glval) = FunctionAddress[~String] : -# 80| v80_3(void) = Call[~String] : func:r80_2, this:r80_1 -# 80| mu80_4(unknown) = ^CallSideEffect : ~m? -# 80| v80_5(void) = ^IndirectReadSideEffect[-1] : &:r80_1, ~m? -# 80| mu80_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r80_1 -# 80| r80_7(bool) = Constant[0] : -# 80| v80_8(void) = ConditionalBranch : r80_7 +# 35| Block 20 +# 35| r35_281(glval) = VariableAddress[x20] : +# 35| mu35_282(String) = Uninitialized[x20] : &:r35_281 +# 35| r35_283(glval) = FunctionAddress[String] : +# 35| v35_284(void) = Call[String] : func:r35_283, this:r35_281 +# 35| mu35_285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_281 +# 35| r35_287(glval) = VariableAddress[x20] : +# 35| r35_288(glval) = FunctionAddress[~String] : +# 35| v35_289(void) = Call[~String] : func:r35_288, this:r35_287 +# 35| mu35_290(unknown) = ^CallSideEffect : ~m? +# 35| v35_291(void) = ^IndirectReadSideEffect[-1] : &:r35_287, ~m? +# 35| mu35_292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_287 +# 35| r35_293(bool) = Constant[0] : +# 35| v35_294(void) = ConditionalBranch : r35_293 #-----| False -> Block 21 #-----| True -> Block 1026 -# 82| Block 21 -# 82| r82_1(glval) = VariableAddress[x21] : -# 82| mu82_2(String) = Uninitialized[x21] : &:r82_1 -# 82| r82_3(glval) = FunctionAddress[String] : -# 82| v82_4(void) = Call[String] : func:r82_3, this:r82_1 -# 82| mu82_5(unknown) = ^CallSideEffect : ~m? -# 82| mu82_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r82_1 -# 83| r83_1(glval) = VariableAddress[x21] : -# 83| r83_2(glval) = FunctionAddress[~String] : -# 83| v83_3(void) = Call[~String] : func:r83_2, this:r83_1 -# 83| mu83_4(unknown) = ^CallSideEffect : ~m? -# 83| v83_5(void) = ^IndirectReadSideEffect[-1] : &:r83_1, ~m? -# 83| mu83_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r83_1 -# 83| r83_7(bool) = Constant[0] : -# 83| v83_8(void) = ConditionalBranch : r83_7 +# 35| Block 21 +# 35| r35_295(glval) = VariableAddress[x21] : +# 35| mu35_296(String) = Uninitialized[x21] : &:r35_295 +# 35| r35_297(glval) = FunctionAddress[String] : +# 35| v35_298(void) = Call[String] : func:r35_297, this:r35_295 +# 35| mu35_299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_295 +# 35| r35_301(glval) = VariableAddress[x21] : +# 35| r35_302(glval) = FunctionAddress[~String] : +# 35| v35_303(void) = Call[~String] : func:r35_302, this:r35_301 +# 35| mu35_304(unknown) = ^CallSideEffect : ~m? +# 35| v35_305(void) = ^IndirectReadSideEffect[-1] : &:r35_301, ~m? +# 35| mu35_306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_301 +# 35| r35_307(bool) = Constant[0] : +# 35| v35_308(void) = ConditionalBranch : r35_307 #-----| False -> Block 22 #-----| True -> Block 1026 -# 85| Block 22 -# 85| r85_1(glval) = VariableAddress[x22] : -# 85| mu85_2(String) = Uninitialized[x22] : &:r85_1 -# 85| r85_3(glval) = FunctionAddress[String] : -# 85| v85_4(void) = Call[String] : func:r85_3, this:r85_1 -# 85| mu85_5(unknown) = ^CallSideEffect : ~m? -# 85| mu85_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r85_1 -# 86| r86_1(glval) = VariableAddress[x22] : -# 86| r86_2(glval) = FunctionAddress[~String] : -# 86| v86_3(void) = Call[~String] : func:r86_2, this:r86_1 -# 86| mu86_4(unknown) = ^CallSideEffect : ~m? -# 86| v86_5(void) = ^IndirectReadSideEffect[-1] : &:r86_1, ~m? -# 86| mu86_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r86_1 -# 86| r86_7(bool) = Constant[0] : -# 86| v86_8(void) = ConditionalBranch : r86_7 +# 35| Block 22 +# 35| r35_309(glval) = VariableAddress[x22] : +# 35| mu35_310(String) = Uninitialized[x22] : &:r35_309 +# 35| r35_311(glval) = FunctionAddress[String] : +# 35| v35_312(void) = Call[String] : func:r35_311, this:r35_309 +# 35| mu35_313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_309 +# 35| r35_315(glval) = VariableAddress[x22] : +# 35| r35_316(glval) = FunctionAddress[~String] : +# 35| v35_317(void) = Call[~String] : func:r35_316, this:r35_315 +# 35| mu35_318(unknown) = ^CallSideEffect : ~m? +# 35| v35_319(void) = ^IndirectReadSideEffect[-1] : &:r35_315, ~m? +# 35| mu35_320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_315 +# 35| r35_321(bool) = Constant[0] : +# 35| v35_322(void) = ConditionalBranch : r35_321 #-----| False -> Block 23 #-----| True -> Block 1026 -# 88| Block 23 -# 88| r88_1(glval) = VariableAddress[x23] : -# 88| mu88_2(String) = Uninitialized[x23] : &:r88_1 -# 88| r88_3(glval) = FunctionAddress[String] : -# 88| v88_4(void) = Call[String] : func:r88_3, this:r88_1 -# 88| mu88_5(unknown) = ^CallSideEffect : ~m? -# 88| mu88_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r88_1 -# 89| r89_1(glval) = VariableAddress[x23] : -# 89| r89_2(glval) = FunctionAddress[~String] : -# 89| v89_3(void) = Call[~String] : func:r89_2, this:r89_1 -# 89| mu89_4(unknown) = ^CallSideEffect : ~m? -# 89| v89_5(void) = ^IndirectReadSideEffect[-1] : &:r89_1, ~m? -# 89| mu89_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r89_1 -# 89| r89_7(bool) = Constant[0] : -# 89| v89_8(void) = ConditionalBranch : r89_7 +# 35| Block 23 +# 35| r35_323(glval) = VariableAddress[x23] : +# 35| mu35_324(String) = Uninitialized[x23] : &:r35_323 +# 35| r35_325(glval) = FunctionAddress[String] : +# 35| v35_326(void) = Call[String] : func:r35_325, this:r35_323 +# 35| mu35_327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_323 +# 35| r35_329(glval) = VariableAddress[x23] : +# 35| r35_330(glval) = FunctionAddress[~String] : +# 35| v35_331(void) = Call[~String] : func:r35_330, this:r35_329 +# 35| mu35_332(unknown) = ^CallSideEffect : ~m? +# 35| v35_333(void) = ^IndirectReadSideEffect[-1] : &:r35_329, ~m? +# 35| mu35_334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_329 +# 35| r35_335(bool) = Constant[0] : +# 35| v35_336(void) = ConditionalBranch : r35_335 #-----| False -> Block 24 #-----| True -> Block 1026 -# 91| Block 24 -# 91| r91_1(glval) = VariableAddress[x24] : -# 91| mu91_2(String) = Uninitialized[x24] : &:r91_1 -# 91| r91_3(glval) = FunctionAddress[String] : -# 91| v91_4(void) = Call[String] : func:r91_3, this:r91_1 -# 91| mu91_5(unknown) = ^CallSideEffect : ~m? -# 91| mu91_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r91_1 -# 92| r92_1(glval) = VariableAddress[x24] : -# 92| r92_2(glval) = FunctionAddress[~String] : -# 92| v92_3(void) = Call[~String] : func:r92_2, this:r92_1 -# 92| mu92_4(unknown) = ^CallSideEffect : ~m? -# 92| v92_5(void) = ^IndirectReadSideEffect[-1] : &:r92_1, ~m? -# 92| mu92_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r92_1 -# 92| r92_7(bool) = Constant[0] : -# 92| v92_8(void) = ConditionalBranch : r92_7 +# 35| Block 24 +# 35| r35_337(glval) = VariableAddress[x24] : +# 35| mu35_338(String) = Uninitialized[x24] : &:r35_337 +# 35| r35_339(glval) = FunctionAddress[String] : +# 35| v35_340(void) = Call[String] : func:r35_339, this:r35_337 +# 35| mu35_341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_337 +# 35| r35_343(glval) = VariableAddress[x24] : +# 35| r35_344(glval) = FunctionAddress[~String] : +# 35| v35_345(void) = Call[~String] : func:r35_344, this:r35_343 +# 35| mu35_346(unknown) = ^CallSideEffect : ~m? +# 35| v35_347(void) = ^IndirectReadSideEffect[-1] : &:r35_343, ~m? +# 35| mu35_348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_343 +# 35| r35_349(bool) = Constant[0] : +# 35| v35_350(void) = ConditionalBranch : r35_349 #-----| False -> Block 25 #-----| True -> Block 1026 -# 94| Block 25 -# 94| r94_1(glval) = VariableAddress[x25] : -# 94| mu94_2(String) = Uninitialized[x25] : &:r94_1 -# 94| r94_3(glval) = FunctionAddress[String] : -# 94| v94_4(void) = Call[String] : func:r94_3, this:r94_1 -# 94| mu94_5(unknown) = ^CallSideEffect : ~m? -# 94| mu94_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r94_1 -# 95| r95_1(glval) = VariableAddress[x25] : -# 95| r95_2(glval) = FunctionAddress[~String] : -# 95| v95_3(void) = Call[~String] : func:r95_2, this:r95_1 -# 95| mu95_4(unknown) = ^CallSideEffect : ~m? -# 95| v95_5(void) = ^IndirectReadSideEffect[-1] : &:r95_1, ~m? -# 95| mu95_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r95_1 -# 95| r95_7(bool) = Constant[0] : -# 95| v95_8(void) = ConditionalBranch : r95_7 +# 35| Block 25 +# 35| r35_351(glval) = VariableAddress[x25] : +# 35| mu35_352(String) = Uninitialized[x25] : &:r35_351 +# 35| r35_353(glval) = FunctionAddress[String] : +# 35| v35_354(void) = Call[String] : func:r35_353, this:r35_351 +# 35| mu35_355(unknown) = ^CallSideEffect : ~m? +# 35| mu35_356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_351 +# 35| r35_357(glval) = VariableAddress[x25] : +# 35| r35_358(glval) = FunctionAddress[~String] : +# 35| v35_359(void) = Call[~String] : func:r35_358, this:r35_357 +# 35| mu35_360(unknown) = ^CallSideEffect : ~m? +# 35| v35_361(void) = ^IndirectReadSideEffect[-1] : &:r35_357, ~m? +# 35| mu35_362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_357 +# 35| r35_363(bool) = Constant[0] : +# 35| v35_364(void) = ConditionalBranch : r35_363 #-----| False -> Block 26 #-----| True -> Block 1026 -# 97| Block 26 -# 97| r97_1(glval) = VariableAddress[x26] : -# 97| mu97_2(String) = Uninitialized[x26] : &:r97_1 -# 97| r97_3(glval) = FunctionAddress[String] : -# 97| v97_4(void) = Call[String] : func:r97_3, this:r97_1 -# 97| mu97_5(unknown) = ^CallSideEffect : ~m? -# 97| mu97_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r97_1 -# 98| r98_1(glval) = VariableAddress[x26] : -# 98| r98_2(glval) = FunctionAddress[~String] : -# 98| v98_3(void) = Call[~String] : func:r98_2, this:r98_1 -# 98| mu98_4(unknown) = ^CallSideEffect : ~m? -# 98| v98_5(void) = ^IndirectReadSideEffect[-1] : &:r98_1, ~m? -# 98| mu98_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r98_1 -# 98| r98_7(bool) = Constant[0] : -# 98| v98_8(void) = ConditionalBranch : r98_7 +# 35| Block 26 +# 35| r35_365(glval) = VariableAddress[x26] : +# 35| mu35_366(String) = Uninitialized[x26] : &:r35_365 +# 35| r35_367(glval) = FunctionAddress[String] : +# 35| v35_368(void) = Call[String] : func:r35_367, this:r35_365 +# 35| mu35_369(unknown) = ^CallSideEffect : ~m? +# 35| mu35_370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_365 +# 35| r35_371(glval) = VariableAddress[x26] : +# 35| r35_372(glval) = FunctionAddress[~String] : +# 35| v35_373(void) = Call[~String] : func:r35_372, this:r35_371 +# 35| mu35_374(unknown) = ^CallSideEffect : ~m? +# 35| v35_375(void) = ^IndirectReadSideEffect[-1] : &:r35_371, ~m? +# 35| mu35_376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_371 +# 35| r35_377(bool) = Constant[0] : +# 35| v35_378(void) = ConditionalBranch : r35_377 #-----| False -> Block 27 #-----| True -> Block 1026 -# 100| Block 27 -# 100| r100_1(glval) = VariableAddress[x27] : -# 100| mu100_2(String) = Uninitialized[x27] : &:r100_1 -# 100| r100_3(glval) = FunctionAddress[String] : -# 100| v100_4(void) = Call[String] : func:r100_3, this:r100_1 -# 100| mu100_5(unknown) = ^CallSideEffect : ~m? -# 100| mu100_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 -# 101| r101_1(glval) = VariableAddress[x27] : -# 101| r101_2(glval) = FunctionAddress[~String] : -# 101| v101_3(void) = Call[~String] : func:r101_2, this:r101_1 -# 101| mu101_4(unknown) = ^CallSideEffect : ~m? -# 101| v101_5(void) = ^IndirectReadSideEffect[-1] : &:r101_1, ~m? -# 101| mu101_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r101_1 -# 101| r101_7(bool) = Constant[0] : -# 101| v101_8(void) = ConditionalBranch : r101_7 +# 35| Block 27 +# 35| r35_379(glval) = VariableAddress[x27] : +# 35| mu35_380(String) = Uninitialized[x27] : &:r35_379 +# 35| r35_381(glval) = FunctionAddress[String] : +# 35| v35_382(void) = Call[String] : func:r35_381, this:r35_379 +# 35| mu35_383(unknown) = ^CallSideEffect : ~m? +# 35| mu35_384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_379 +# 35| r35_385(glval) = VariableAddress[x27] : +# 35| r35_386(glval) = FunctionAddress[~String] : +# 35| v35_387(void) = Call[~String] : func:r35_386, this:r35_385 +# 35| mu35_388(unknown) = ^CallSideEffect : ~m? +# 35| v35_389(void) = ^IndirectReadSideEffect[-1] : &:r35_385, ~m? +# 35| mu35_390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_385 +# 35| r35_391(bool) = Constant[0] : +# 35| v35_392(void) = ConditionalBranch : r35_391 #-----| False -> Block 28 #-----| True -> Block 1026 -# 103| Block 28 -# 103| r103_1(glval) = VariableAddress[x28] : -# 103| mu103_2(String) = Uninitialized[x28] : &:r103_1 -# 103| r103_3(glval) = FunctionAddress[String] : -# 103| v103_4(void) = Call[String] : func:r103_3, this:r103_1 -# 103| mu103_5(unknown) = ^CallSideEffect : ~m? -# 103| mu103_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r103_1 -# 104| r104_1(glval) = VariableAddress[x28] : -# 104| r104_2(glval) = FunctionAddress[~String] : -# 104| v104_3(void) = Call[~String] : func:r104_2, this:r104_1 -# 104| mu104_4(unknown) = ^CallSideEffect : ~m? -# 104| v104_5(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m? -# 104| mu104_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 -# 104| r104_7(bool) = Constant[0] : -# 104| v104_8(void) = ConditionalBranch : r104_7 +# 35| Block 28 +# 35| r35_393(glval) = VariableAddress[x28] : +# 35| mu35_394(String) = Uninitialized[x28] : &:r35_393 +# 35| r35_395(glval) = FunctionAddress[String] : +# 35| v35_396(void) = Call[String] : func:r35_395, this:r35_393 +# 35| mu35_397(unknown) = ^CallSideEffect : ~m? +# 35| mu35_398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_393 +# 35| r35_399(glval) = VariableAddress[x28] : +# 35| r35_400(glval) = FunctionAddress[~String] : +# 35| v35_401(void) = Call[~String] : func:r35_400, this:r35_399 +# 35| mu35_402(unknown) = ^CallSideEffect : ~m? +# 35| v35_403(void) = ^IndirectReadSideEffect[-1] : &:r35_399, ~m? +# 35| mu35_404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_399 +# 35| r35_405(bool) = Constant[0] : +# 35| v35_406(void) = ConditionalBranch : r35_405 #-----| False -> Block 29 #-----| True -> Block 1026 -# 106| Block 29 -# 106| r106_1(glval) = VariableAddress[x29] : -# 106| mu106_2(String) = Uninitialized[x29] : &:r106_1 -# 106| r106_3(glval) = FunctionAddress[String] : -# 106| v106_4(void) = Call[String] : func:r106_3, this:r106_1 -# 106| mu106_5(unknown) = ^CallSideEffect : ~m? -# 106| mu106_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r106_1 -# 107| r107_1(glval) = VariableAddress[x29] : -# 107| r107_2(glval) = FunctionAddress[~String] : -# 107| v107_3(void) = Call[~String] : func:r107_2, this:r107_1 -# 107| mu107_4(unknown) = ^CallSideEffect : ~m? -# 107| v107_5(void) = ^IndirectReadSideEffect[-1] : &:r107_1, ~m? -# 107| mu107_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r107_1 -# 107| r107_7(bool) = Constant[0] : -# 107| v107_8(void) = ConditionalBranch : r107_7 +# 35| Block 29 +# 35| r35_407(glval) = VariableAddress[x29] : +# 35| mu35_408(String) = Uninitialized[x29] : &:r35_407 +# 35| r35_409(glval) = FunctionAddress[String] : +# 35| v35_410(void) = Call[String] : func:r35_409, this:r35_407 +# 35| mu35_411(unknown) = ^CallSideEffect : ~m? +# 35| mu35_412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_407 +# 35| r35_413(glval) = VariableAddress[x29] : +# 35| r35_414(glval) = FunctionAddress[~String] : +# 35| v35_415(void) = Call[~String] : func:r35_414, this:r35_413 +# 35| mu35_416(unknown) = ^CallSideEffect : ~m? +# 35| v35_417(void) = ^IndirectReadSideEffect[-1] : &:r35_413, ~m? +# 35| mu35_418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_413 +# 35| r35_419(bool) = Constant[0] : +# 35| v35_420(void) = ConditionalBranch : r35_419 #-----| False -> Block 30 #-----| True -> Block 1026 -# 109| Block 30 -# 109| r109_1(glval) = VariableAddress[x30] : -# 109| mu109_2(String) = Uninitialized[x30] : &:r109_1 -# 109| r109_3(glval) = FunctionAddress[String] : -# 109| v109_4(void) = Call[String] : func:r109_3, this:r109_1 -# 109| mu109_5(unknown) = ^CallSideEffect : ~m? -# 109| mu109_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 -# 110| r110_1(glval) = VariableAddress[x30] : -# 110| r110_2(glval) = FunctionAddress[~String] : -# 110| v110_3(void) = Call[~String] : func:r110_2, this:r110_1 -# 110| mu110_4(unknown) = ^CallSideEffect : ~m? -# 110| v110_5(void) = ^IndirectReadSideEffect[-1] : &:r110_1, ~m? -# 110| mu110_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r110_1 -# 110| r110_7(bool) = Constant[0] : -# 110| v110_8(void) = ConditionalBranch : r110_7 +# 35| Block 30 +# 35| r35_421(glval) = VariableAddress[x30] : +# 35| mu35_422(String) = Uninitialized[x30] : &:r35_421 +# 35| r35_423(glval) = FunctionAddress[String] : +# 35| v35_424(void) = Call[String] : func:r35_423, this:r35_421 +# 35| mu35_425(unknown) = ^CallSideEffect : ~m? +# 35| mu35_426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_421 +# 35| r35_427(glval) = VariableAddress[x30] : +# 35| r35_428(glval) = FunctionAddress[~String] : +# 35| v35_429(void) = Call[~String] : func:r35_428, this:r35_427 +# 35| mu35_430(unknown) = ^CallSideEffect : ~m? +# 35| v35_431(void) = ^IndirectReadSideEffect[-1] : &:r35_427, ~m? +# 35| mu35_432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_427 +# 35| r35_433(bool) = Constant[0] : +# 35| v35_434(void) = ConditionalBranch : r35_433 #-----| False -> Block 31 #-----| True -> Block 1026 -# 112| Block 31 -# 112| r112_1(glval) = VariableAddress[x31] : -# 112| mu112_2(String) = Uninitialized[x31] : &:r112_1 -# 112| r112_3(glval) = FunctionAddress[String] : -# 112| v112_4(void) = Call[String] : func:r112_3, this:r112_1 -# 112| mu112_5(unknown) = ^CallSideEffect : ~m? -# 112| mu112_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r112_1 -# 113| r113_1(glval) = VariableAddress[x31] : -# 113| r113_2(glval) = FunctionAddress[~String] : -# 113| v113_3(void) = Call[~String] : func:r113_2, this:r113_1 -# 113| mu113_4(unknown) = ^CallSideEffect : ~m? -# 113| v113_5(void) = ^IndirectReadSideEffect[-1] : &:r113_1, ~m? -# 113| mu113_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r113_1 -# 113| r113_7(bool) = Constant[0] : -# 113| v113_8(void) = ConditionalBranch : r113_7 +# 35| Block 31 +# 35| r35_435(glval) = VariableAddress[x31] : +# 35| mu35_436(String) = Uninitialized[x31] : &:r35_435 +# 35| r35_437(glval) = FunctionAddress[String] : +# 35| v35_438(void) = Call[String] : func:r35_437, this:r35_435 +# 35| mu35_439(unknown) = ^CallSideEffect : ~m? +# 35| mu35_440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_435 +# 35| r35_441(glval) = VariableAddress[x31] : +# 35| r35_442(glval) = FunctionAddress[~String] : +# 35| v35_443(void) = Call[~String] : func:r35_442, this:r35_441 +# 35| mu35_444(unknown) = ^CallSideEffect : ~m? +# 35| v35_445(void) = ^IndirectReadSideEffect[-1] : &:r35_441, ~m? +# 35| mu35_446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_441 +# 35| r35_447(bool) = Constant[0] : +# 35| v35_448(void) = ConditionalBranch : r35_447 #-----| False -> Block 32 #-----| True -> Block 1026 -# 115| Block 32 -# 115| r115_1(glval) = VariableAddress[x32] : -# 115| mu115_2(String) = Uninitialized[x32] : &:r115_1 -# 115| r115_3(glval) = FunctionAddress[String] : -# 115| v115_4(void) = Call[String] : func:r115_3, this:r115_1 -# 115| mu115_5(unknown) = ^CallSideEffect : ~m? -# 115| mu115_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r115_1 -# 116| r116_1(glval) = VariableAddress[x32] : -# 116| r116_2(glval) = FunctionAddress[~String] : -# 116| v116_3(void) = Call[~String] : func:r116_2, this:r116_1 -# 116| mu116_4(unknown) = ^CallSideEffect : ~m? -# 116| v116_5(void) = ^IndirectReadSideEffect[-1] : &:r116_1, ~m? -# 116| mu116_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r116_1 -# 116| r116_7(bool) = Constant[0] : -# 116| v116_8(void) = ConditionalBranch : r116_7 +# 35| Block 32 +# 35| r35_449(glval) = VariableAddress[x32] : +# 35| mu35_450(String) = Uninitialized[x32] : &:r35_449 +# 35| r35_451(glval) = FunctionAddress[String] : +# 35| v35_452(void) = Call[String] : func:r35_451, this:r35_449 +# 35| mu35_453(unknown) = ^CallSideEffect : ~m? +# 35| mu35_454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_449 +# 35| r35_455(glval) = VariableAddress[x32] : +# 35| r35_456(glval) = FunctionAddress[~String] : +# 35| v35_457(void) = Call[~String] : func:r35_456, this:r35_455 +# 35| mu35_458(unknown) = ^CallSideEffect : ~m? +# 35| v35_459(void) = ^IndirectReadSideEffect[-1] : &:r35_455, ~m? +# 35| mu35_460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_455 +# 35| r35_461(bool) = Constant[0] : +# 35| v35_462(void) = ConditionalBranch : r35_461 #-----| False -> Block 33 #-----| True -> Block 1026 -# 118| Block 33 -# 118| r118_1(glval) = VariableAddress[x33] : -# 118| mu118_2(String) = Uninitialized[x33] : &:r118_1 -# 118| r118_3(glval) = FunctionAddress[String] : -# 118| v118_4(void) = Call[String] : func:r118_3, this:r118_1 -# 118| mu118_5(unknown) = ^CallSideEffect : ~m? -# 118| mu118_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r118_1 -# 119| r119_1(glval) = VariableAddress[x33] : -# 119| r119_2(glval) = FunctionAddress[~String] : -# 119| v119_3(void) = Call[~String] : func:r119_2, this:r119_1 -# 119| mu119_4(unknown) = ^CallSideEffect : ~m? -# 119| v119_5(void) = ^IndirectReadSideEffect[-1] : &:r119_1, ~m? -# 119| mu119_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r119_1 -# 119| r119_7(bool) = Constant[0] : -# 119| v119_8(void) = ConditionalBranch : r119_7 +# 35| Block 33 +# 35| r35_463(glval) = VariableAddress[x33] : +# 35| mu35_464(String) = Uninitialized[x33] : &:r35_463 +# 35| r35_465(glval) = FunctionAddress[String] : +# 35| v35_466(void) = Call[String] : func:r35_465, this:r35_463 +# 35| mu35_467(unknown) = ^CallSideEffect : ~m? +# 35| mu35_468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_463 +# 35| r35_469(glval) = VariableAddress[x33] : +# 35| r35_470(glval) = FunctionAddress[~String] : +# 35| v35_471(void) = Call[~String] : func:r35_470, this:r35_469 +# 35| mu35_472(unknown) = ^CallSideEffect : ~m? +# 35| v35_473(void) = ^IndirectReadSideEffect[-1] : &:r35_469, ~m? +# 35| mu35_474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_469 +# 35| r35_475(bool) = Constant[0] : +# 35| v35_476(void) = ConditionalBranch : r35_475 #-----| False -> Block 34 #-----| True -> Block 1026 -# 121| Block 34 -# 121| r121_1(glval) = VariableAddress[x34] : -# 121| mu121_2(String) = Uninitialized[x34] : &:r121_1 -# 121| r121_3(glval) = FunctionAddress[String] : -# 121| v121_4(void) = Call[String] : func:r121_3, this:r121_1 -# 121| mu121_5(unknown) = ^CallSideEffect : ~m? -# 121| mu121_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r121_1 -# 122| r122_1(glval) = VariableAddress[x34] : -# 122| r122_2(glval) = FunctionAddress[~String] : -# 122| v122_3(void) = Call[~String] : func:r122_2, this:r122_1 -# 122| mu122_4(unknown) = ^CallSideEffect : ~m? -# 122| v122_5(void) = ^IndirectReadSideEffect[-1] : &:r122_1, ~m? -# 122| mu122_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r122_1 -# 122| r122_7(bool) = Constant[0] : -# 122| v122_8(void) = ConditionalBranch : r122_7 +# 35| Block 34 +# 35| r35_477(glval) = VariableAddress[x34] : +# 35| mu35_478(String) = Uninitialized[x34] : &:r35_477 +# 35| r35_479(glval) = FunctionAddress[String] : +# 35| v35_480(void) = Call[String] : func:r35_479, this:r35_477 +# 35| mu35_481(unknown) = ^CallSideEffect : ~m? +# 35| mu35_482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_477 +# 35| r35_483(glval) = VariableAddress[x34] : +# 35| r35_484(glval) = FunctionAddress[~String] : +# 35| v35_485(void) = Call[~String] : func:r35_484, this:r35_483 +# 35| mu35_486(unknown) = ^CallSideEffect : ~m? +# 35| v35_487(void) = ^IndirectReadSideEffect[-1] : &:r35_483, ~m? +# 35| mu35_488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_483 +# 35| r35_489(bool) = Constant[0] : +# 35| v35_490(void) = ConditionalBranch : r35_489 #-----| False -> Block 35 #-----| True -> Block 1026 -# 124| Block 35 -# 124| r124_1(glval) = VariableAddress[x35] : -# 124| mu124_2(String) = Uninitialized[x35] : &:r124_1 -# 124| r124_3(glval) = FunctionAddress[String] : -# 124| v124_4(void) = Call[String] : func:r124_3, this:r124_1 -# 124| mu124_5(unknown) = ^CallSideEffect : ~m? -# 124| mu124_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r124_1 -# 125| r125_1(glval) = VariableAddress[x35] : -# 125| r125_2(glval) = FunctionAddress[~String] : -# 125| v125_3(void) = Call[~String] : func:r125_2, this:r125_1 -# 125| mu125_4(unknown) = ^CallSideEffect : ~m? -# 125| v125_5(void) = ^IndirectReadSideEffect[-1] : &:r125_1, ~m? -# 125| mu125_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r125_1 -# 125| r125_7(bool) = Constant[0] : -# 125| v125_8(void) = ConditionalBranch : r125_7 +# 35| Block 35 +# 35| r35_491(glval) = VariableAddress[x35] : +# 35| mu35_492(String) = Uninitialized[x35] : &:r35_491 +# 35| r35_493(glval) = FunctionAddress[String] : +# 35| v35_494(void) = Call[String] : func:r35_493, this:r35_491 +# 35| mu35_495(unknown) = ^CallSideEffect : ~m? +# 35| mu35_496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_491 +# 35| r35_497(glval) = VariableAddress[x35] : +# 35| r35_498(glval) = FunctionAddress[~String] : +# 35| v35_499(void) = Call[~String] : func:r35_498, this:r35_497 +# 35| mu35_500(unknown) = ^CallSideEffect : ~m? +# 35| v35_501(void) = ^IndirectReadSideEffect[-1] : &:r35_497, ~m? +# 35| mu35_502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_497 +# 35| r35_503(bool) = Constant[0] : +# 35| v35_504(void) = ConditionalBranch : r35_503 #-----| False -> Block 36 #-----| True -> Block 1026 -# 127| Block 36 -# 127| r127_1(glval) = VariableAddress[x36] : -# 127| mu127_2(String) = Uninitialized[x36] : &:r127_1 -# 127| r127_3(glval) = FunctionAddress[String] : -# 127| v127_4(void) = Call[String] : func:r127_3, this:r127_1 -# 127| mu127_5(unknown) = ^CallSideEffect : ~m? -# 127| mu127_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r127_1 -# 128| r128_1(glval) = VariableAddress[x36] : -# 128| r128_2(glval) = FunctionAddress[~String] : -# 128| v128_3(void) = Call[~String] : func:r128_2, this:r128_1 -# 128| mu128_4(unknown) = ^CallSideEffect : ~m? -# 128| v128_5(void) = ^IndirectReadSideEffect[-1] : &:r128_1, ~m? -# 128| mu128_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r128_1 -# 128| r128_7(bool) = Constant[0] : -# 128| v128_8(void) = ConditionalBranch : r128_7 +# 35| Block 36 +# 35| r35_505(glval) = VariableAddress[x36] : +# 35| mu35_506(String) = Uninitialized[x36] : &:r35_505 +# 35| r35_507(glval) = FunctionAddress[String] : +# 35| v35_508(void) = Call[String] : func:r35_507, this:r35_505 +# 35| mu35_509(unknown) = ^CallSideEffect : ~m? +# 35| mu35_510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_505 +# 35| r35_511(glval) = VariableAddress[x36] : +# 35| r35_512(glval) = FunctionAddress[~String] : +# 35| v35_513(void) = Call[~String] : func:r35_512, this:r35_511 +# 35| mu35_514(unknown) = ^CallSideEffect : ~m? +# 35| v35_515(void) = ^IndirectReadSideEffect[-1] : &:r35_511, ~m? +# 35| mu35_516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_511 +# 35| r35_517(bool) = Constant[0] : +# 35| v35_518(void) = ConditionalBranch : r35_517 #-----| False -> Block 37 #-----| True -> Block 1026 -# 130| Block 37 -# 130| r130_1(glval) = VariableAddress[x37] : -# 130| mu130_2(String) = Uninitialized[x37] : &:r130_1 -# 130| r130_3(glval) = FunctionAddress[String] : -# 130| v130_4(void) = Call[String] : func:r130_3, this:r130_1 -# 130| mu130_5(unknown) = ^CallSideEffect : ~m? -# 130| mu130_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r130_1 -# 131| r131_1(glval) = VariableAddress[x37] : -# 131| r131_2(glval) = FunctionAddress[~String] : -# 131| v131_3(void) = Call[~String] : func:r131_2, this:r131_1 -# 131| mu131_4(unknown) = ^CallSideEffect : ~m? -# 131| v131_5(void) = ^IndirectReadSideEffect[-1] : &:r131_1, ~m? -# 131| mu131_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r131_1 -# 131| r131_7(bool) = Constant[0] : -# 131| v131_8(void) = ConditionalBranch : r131_7 +# 35| Block 37 +# 35| r35_519(glval) = VariableAddress[x37] : +# 35| mu35_520(String) = Uninitialized[x37] : &:r35_519 +# 35| r35_521(glval) = FunctionAddress[String] : +# 35| v35_522(void) = Call[String] : func:r35_521, this:r35_519 +# 35| mu35_523(unknown) = ^CallSideEffect : ~m? +# 35| mu35_524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_519 +# 35| r35_525(glval) = VariableAddress[x37] : +# 35| r35_526(glval) = FunctionAddress[~String] : +# 35| v35_527(void) = Call[~String] : func:r35_526, this:r35_525 +# 35| mu35_528(unknown) = ^CallSideEffect : ~m? +# 35| v35_529(void) = ^IndirectReadSideEffect[-1] : &:r35_525, ~m? +# 35| mu35_530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_525 +# 35| r35_531(bool) = Constant[0] : +# 35| v35_532(void) = ConditionalBranch : r35_531 #-----| False -> Block 38 #-----| True -> Block 1026 -# 133| Block 38 -# 133| r133_1(glval) = VariableAddress[x38] : -# 133| mu133_2(String) = Uninitialized[x38] : &:r133_1 -# 133| r133_3(glval) = FunctionAddress[String] : -# 133| v133_4(void) = Call[String] : func:r133_3, this:r133_1 -# 133| mu133_5(unknown) = ^CallSideEffect : ~m? -# 133| mu133_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r133_1 -# 134| r134_1(glval) = VariableAddress[x38] : -# 134| r134_2(glval) = FunctionAddress[~String] : -# 134| v134_3(void) = Call[~String] : func:r134_2, this:r134_1 -# 134| mu134_4(unknown) = ^CallSideEffect : ~m? -# 134| v134_5(void) = ^IndirectReadSideEffect[-1] : &:r134_1, ~m? -# 134| mu134_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r134_1 -# 134| r134_7(bool) = Constant[0] : -# 134| v134_8(void) = ConditionalBranch : r134_7 +# 35| Block 38 +# 35| r35_533(glval) = VariableAddress[x38] : +# 35| mu35_534(String) = Uninitialized[x38] : &:r35_533 +# 35| r35_535(glval) = FunctionAddress[String] : +# 35| v35_536(void) = Call[String] : func:r35_535, this:r35_533 +# 35| mu35_537(unknown) = ^CallSideEffect : ~m? +# 35| mu35_538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_533 +# 35| r35_539(glval) = VariableAddress[x38] : +# 35| r35_540(glval) = FunctionAddress[~String] : +# 35| v35_541(void) = Call[~String] : func:r35_540, this:r35_539 +# 35| mu35_542(unknown) = ^CallSideEffect : ~m? +# 35| v35_543(void) = ^IndirectReadSideEffect[-1] : &:r35_539, ~m? +# 35| mu35_544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_539 +# 35| r35_545(bool) = Constant[0] : +# 35| v35_546(void) = ConditionalBranch : r35_545 #-----| False -> Block 39 #-----| True -> Block 1026 -# 136| Block 39 -# 136| r136_1(glval) = VariableAddress[x39] : -# 136| mu136_2(String) = Uninitialized[x39] : &:r136_1 -# 136| r136_3(glval) = FunctionAddress[String] : -# 136| v136_4(void) = Call[String] : func:r136_3, this:r136_1 -# 136| mu136_5(unknown) = ^CallSideEffect : ~m? -# 136| mu136_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r136_1 -# 137| r137_1(glval) = VariableAddress[x39] : -# 137| r137_2(glval) = FunctionAddress[~String] : -# 137| v137_3(void) = Call[~String] : func:r137_2, this:r137_1 -# 137| mu137_4(unknown) = ^CallSideEffect : ~m? -# 137| v137_5(void) = ^IndirectReadSideEffect[-1] : &:r137_1, ~m? -# 137| mu137_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r137_1 -# 137| r137_7(bool) = Constant[0] : -# 137| v137_8(void) = ConditionalBranch : r137_7 +# 35| Block 39 +# 35| r35_547(glval) = VariableAddress[x39] : +# 35| mu35_548(String) = Uninitialized[x39] : &:r35_547 +# 35| r35_549(glval) = FunctionAddress[String] : +# 35| v35_550(void) = Call[String] : func:r35_549, this:r35_547 +# 35| mu35_551(unknown) = ^CallSideEffect : ~m? +# 35| mu35_552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_547 +# 35| r35_553(glval) = VariableAddress[x39] : +# 35| r35_554(glval) = FunctionAddress[~String] : +# 35| v35_555(void) = Call[~String] : func:r35_554, this:r35_553 +# 35| mu35_556(unknown) = ^CallSideEffect : ~m? +# 35| v35_557(void) = ^IndirectReadSideEffect[-1] : &:r35_553, ~m? +# 35| mu35_558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_553 +# 35| r35_559(bool) = Constant[0] : +# 35| v35_560(void) = ConditionalBranch : r35_559 #-----| False -> Block 40 #-----| True -> Block 1026 -# 139| Block 40 -# 139| r139_1(glval) = VariableAddress[x40] : -# 139| mu139_2(String) = Uninitialized[x40] : &:r139_1 -# 139| r139_3(glval) = FunctionAddress[String] : -# 139| v139_4(void) = Call[String] : func:r139_3, this:r139_1 -# 139| mu139_5(unknown) = ^CallSideEffect : ~m? -# 139| mu139_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r139_1 -# 140| r140_1(glval) = VariableAddress[x40] : -# 140| r140_2(glval) = FunctionAddress[~String] : -# 140| v140_3(void) = Call[~String] : func:r140_2, this:r140_1 -# 140| mu140_4(unknown) = ^CallSideEffect : ~m? -# 140| v140_5(void) = ^IndirectReadSideEffect[-1] : &:r140_1, ~m? -# 140| mu140_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r140_1 -# 140| r140_7(bool) = Constant[0] : -# 140| v140_8(void) = ConditionalBranch : r140_7 +# 35| Block 40 +# 35| r35_561(glval) = VariableAddress[x40] : +# 35| mu35_562(String) = Uninitialized[x40] : &:r35_561 +# 35| r35_563(glval) = FunctionAddress[String] : +# 35| v35_564(void) = Call[String] : func:r35_563, this:r35_561 +# 35| mu35_565(unknown) = ^CallSideEffect : ~m? +# 35| mu35_566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_561 +# 35| r35_567(glval) = VariableAddress[x40] : +# 35| r35_568(glval) = FunctionAddress[~String] : +# 35| v35_569(void) = Call[~String] : func:r35_568, this:r35_567 +# 35| mu35_570(unknown) = ^CallSideEffect : ~m? +# 35| v35_571(void) = ^IndirectReadSideEffect[-1] : &:r35_567, ~m? +# 35| mu35_572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_567 +# 35| r35_573(bool) = Constant[0] : +# 35| v35_574(void) = ConditionalBranch : r35_573 #-----| False -> Block 41 #-----| True -> Block 1026 -# 142| Block 41 -# 142| r142_1(glval) = VariableAddress[x41] : -# 142| mu142_2(String) = Uninitialized[x41] : &:r142_1 -# 142| r142_3(glval) = FunctionAddress[String] : -# 142| v142_4(void) = Call[String] : func:r142_3, this:r142_1 -# 142| mu142_5(unknown) = ^CallSideEffect : ~m? -# 142| mu142_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r142_1 -# 143| r143_1(glval) = VariableAddress[x41] : -# 143| r143_2(glval) = FunctionAddress[~String] : -# 143| v143_3(void) = Call[~String] : func:r143_2, this:r143_1 -# 143| mu143_4(unknown) = ^CallSideEffect : ~m? -# 143| v143_5(void) = ^IndirectReadSideEffect[-1] : &:r143_1, ~m? -# 143| mu143_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r143_1 -# 143| r143_7(bool) = Constant[0] : -# 143| v143_8(void) = ConditionalBranch : r143_7 +# 35| Block 41 +# 35| r35_575(glval) = VariableAddress[x41] : +# 35| mu35_576(String) = Uninitialized[x41] : &:r35_575 +# 35| r35_577(glval) = FunctionAddress[String] : +# 35| v35_578(void) = Call[String] : func:r35_577, this:r35_575 +# 35| mu35_579(unknown) = ^CallSideEffect : ~m? +# 35| mu35_580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_575 +# 35| r35_581(glval) = VariableAddress[x41] : +# 35| r35_582(glval) = FunctionAddress[~String] : +# 35| v35_583(void) = Call[~String] : func:r35_582, this:r35_581 +# 35| mu35_584(unknown) = ^CallSideEffect : ~m? +# 35| v35_585(void) = ^IndirectReadSideEffect[-1] : &:r35_581, ~m? +# 35| mu35_586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_581 +# 35| r35_587(bool) = Constant[0] : +# 35| v35_588(void) = ConditionalBranch : r35_587 #-----| False -> Block 42 #-----| True -> Block 1026 -# 145| Block 42 -# 145| r145_1(glval) = VariableAddress[x42] : -# 145| mu145_2(String) = Uninitialized[x42] : &:r145_1 -# 145| r145_3(glval) = FunctionAddress[String] : -# 145| v145_4(void) = Call[String] : func:r145_3, this:r145_1 -# 145| mu145_5(unknown) = ^CallSideEffect : ~m? -# 145| mu145_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r145_1 -# 146| r146_1(glval) = VariableAddress[x42] : -# 146| r146_2(glval) = FunctionAddress[~String] : -# 146| v146_3(void) = Call[~String] : func:r146_2, this:r146_1 -# 146| mu146_4(unknown) = ^CallSideEffect : ~m? -# 146| v146_5(void) = ^IndirectReadSideEffect[-1] : &:r146_1, ~m? -# 146| mu146_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r146_1 -# 146| r146_7(bool) = Constant[0] : -# 146| v146_8(void) = ConditionalBranch : r146_7 +# 35| Block 42 +# 35| r35_589(glval) = VariableAddress[x42] : +# 35| mu35_590(String) = Uninitialized[x42] : &:r35_589 +# 35| r35_591(glval) = FunctionAddress[String] : +# 35| v35_592(void) = Call[String] : func:r35_591, this:r35_589 +# 35| mu35_593(unknown) = ^CallSideEffect : ~m? +# 35| mu35_594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_589 +# 35| r35_595(glval) = VariableAddress[x42] : +# 35| r35_596(glval) = FunctionAddress[~String] : +# 35| v35_597(void) = Call[~String] : func:r35_596, this:r35_595 +# 35| mu35_598(unknown) = ^CallSideEffect : ~m? +# 35| v35_599(void) = ^IndirectReadSideEffect[-1] : &:r35_595, ~m? +# 35| mu35_600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_595 +# 35| r35_601(bool) = Constant[0] : +# 35| v35_602(void) = ConditionalBranch : r35_601 #-----| False -> Block 43 #-----| True -> Block 1026 -# 148| Block 43 -# 148| r148_1(glval) = VariableAddress[x43] : -# 148| mu148_2(String) = Uninitialized[x43] : &:r148_1 -# 148| r148_3(glval) = FunctionAddress[String] : -# 148| v148_4(void) = Call[String] : func:r148_3, this:r148_1 -# 148| mu148_5(unknown) = ^CallSideEffect : ~m? -# 148| mu148_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r148_1 -# 149| r149_1(glval) = VariableAddress[x43] : -# 149| r149_2(glval) = FunctionAddress[~String] : -# 149| v149_3(void) = Call[~String] : func:r149_2, this:r149_1 -# 149| mu149_4(unknown) = ^CallSideEffect : ~m? -# 149| v149_5(void) = ^IndirectReadSideEffect[-1] : &:r149_1, ~m? -# 149| mu149_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r149_1 -# 149| r149_7(bool) = Constant[0] : -# 149| v149_8(void) = ConditionalBranch : r149_7 +# 35| Block 43 +# 35| r35_603(glval) = VariableAddress[x43] : +# 35| mu35_604(String) = Uninitialized[x43] : &:r35_603 +# 35| r35_605(glval) = FunctionAddress[String] : +# 35| v35_606(void) = Call[String] : func:r35_605, this:r35_603 +# 35| mu35_607(unknown) = ^CallSideEffect : ~m? +# 35| mu35_608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_603 +# 35| r35_609(glval) = VariableAddress[x43] : +# 35| r35_610(glval) = FunctionAddress[~String] : +# 35| v35_611(void) = Call[~String] : func:r35_610, this:r35_609 +# 35| mu35_612(unknown) = ^CallSideEffect : ~m? +# 35| v35_613(void) = ^IndirectReadSideEffect[-1] : &:r35_609, ~m? +# 35| mu35_614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_609 +# 35| r35_615(bool) = Constant[0] : +# 35| v35_616(void) = ConditionalBranch : r35_615 #-----| False -> Block 44 #-----| True -> Block 1026 -# 151| Block 44 -# 151| r151_1(glval) = VariableAddress[x44] : -# 151| mu151_2(String) = Uninitialized[x44] : &:r151_1 -# 151| r151_3(glval) = FunctionAddress[String] : -# 151| v151_4(void) = Call[String] : func:r151_3, this:r151_1 -# 151| mu151_5(unknown) = ^CallSideEffect : ~m? -# 151| mu151_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r151_1 -# 152| r152_1(glval) = VariableAddress[x44] : -# 152| r152_2(glval) = FunctionAddress[~String] : -# 152| v152_3(void) = Call[~String] : func:r152_2, this:r152_1 -# 152| mu152_4(unknown) = ^CallSideEffect : ~m? -# 152| v152_5(void) = ^IndirectReadSideEffect[-1] : &:r152_1, ~m? -# 152| mu152_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r152_1 -# 152| r152_7(bool) = Constant[0] : -# 152| v152_8(void) = ConditionalBranch : r152_7 +# 35| Block 44 +# 35| r35_617(glval) = VariableAddress[x44] : +# 35| mu35_618(String) = Uninitialized[x44] : &:r35_617 +# 35| r35_619(glval) = FunctionAddress[String] : +# 35| v35_620(void) = Call[String] : func:r35_619, this:r35_617 +# 35| mu35_621(unknown) = ^CallSideEffect : ~m? +# 35| mu35_622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_617 +# 35| r35_623(glval) = VariableAddress[x44] : +# 35| r35_624(glval) = FunctionAddress[~String] : +# 35| v35_625(void) = Call[~String] : func:r35_624, this:r35_623 +# 35| mu35_626(unknown) = ^CallSideEffect : ~m? +# 35| v35_627(void) = ^IndirectReadSideEffect[-1] : &:r35_623, ~m? +# 35| mu35_628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_623 +# 35| r35_629(bool) = Constant[0] : +# 35| v35_630(void) = ConditionalBranch : r35_629 #-----| False -> Block 45 #-----| True -> Block 1026 -# 154| Block 45 -# 154| r154_1(glval) = VariableAddress[x45] : -# 154| mu154_2(String) = Uninitialized[x45] : &:r154_1 -# 154| r154_3(glval) = FunctionAddress[String] : -# 154| v154_4(void) = Call[String] : func:r154_3, this:r154_1 -# 154| mu154_5(unknown) = ^CallSideEffect : ~m? -# 154| mu154_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r154_1 -# 155| r155_1(glval) = VariableAddress[x45] : -# 155| r155_2(glval) = FunctionAddress[~String] : -# 155| v155_3(void) = Call[~String] : func:r155_2, this:r155_1 -# 155| mu155_4(unknown) = ^CallSideEffect : ~m? -# 155| v155_5(void) = ^IndirectReadSideEffect[-1] : &:r155_1, ~m? -# 155| mu155_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r155_1 -# 155| r155_7(bool) = Constant[0] : -# 155| v155_8(void) = ConditionalBranch : r155_7 +# 35| Block 45 +# 35| r35_631(glval) = VariableAddress[x45] : +# 35| mu35_632(String) = Uninitialized[x45] : &:r35_631 +# 35| r35_633(glval) = FunctionAddress[String] : +# 35| v35_634(void) = Call[String] : func:r35_633, this:r35_631 +# 35| mu35_635(unknown) = ^CallSideEffect : ~m? +# 35| mu35_636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_631 +# 35| r35_637(glval) = VariableAddress[x45] : +# 35| r35_638(glval) = FunctionAddress[~String] : +# 35| v35_639(void) = Call[~String] : func:r35_638, this:r35_637 +# 35| mu35_640(unknown) = ^CallSideEffect : ~m? +# 35| v35_641(void) = ^IndirectReadSideEffect[-1] : &:r35_637, ~m? +# 35| mu35_642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_637 +# 35| r35_643(bool) = Constant[0] : +# 35| v35_644(void) = ConditionalBranch : r35_643 #-----| False -> Block 46 #-----| True -> Block 1026 -# 157| Block 46 -# 157| r157_1(glval) = VariableAddress[x46] : -# 157| mu157_2(String) = Uninitialized[x46] : &:r157_1 -# 157| r157_3(glval) = FunctionAddress[String] : -# 157| v157_4(void) = Call[String] : func:r157_3, this:r157_1 -# 157| mu157_5(unknown) = ^CallSideEffect : ~m? -# 157| mu157_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r157_1 -# 158| r158_1(glval) = VariableAddress[x46] : -# 158| r158_2(glval) = FunctionAddress[~String] : -# 158| v158_3(void) = Call[~String] : func:r158_2, this:r158_1 -# 158| mu158_4(unknown) = ^CallSideEffect : ~m? -# 158| v158_5(void) = ^IndirectReadSideEffect[-1] : &:r158_1, ~m? -# 158| mu158_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r158_1 -# 158| r158_7(bool) = Constant[0] : -# 158| v158_8(void) = ConditionalBranch : r158_7 +# 35| Block 46 +# 35| r35_645(glval) = VariableAddress[x46] : +# 35| mu35_646(String) = Uninitialized[x46] : &:r35_645 +# 35| r35_647(glval) = FunctionAddress[String] : +# 35| v35_648(void) = Call[String] : func:r35_647, this:r35_645 +# 35| mu35_649(unknown) = ^CallSideEffect : ~m? +# 35| mu35_650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_645 +# 35| r35_651(glval) = VariableAddress[x46] : +# 35| r35_652(glval) = FunctionAddress[~String] : +# 35| v35_653(void) = Call[~String] : func:r35_652, this:r35_651 +# 35| mu35_654(unknown) = ^CallSideEffect : ~m? +# 35| v35_655(void) = ^IndirectReadSideEffect[-1] : &:r35_651, ~m? +# 35| mu35_656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_651 +# 35| r35_657(bool) = Constant[0] : +# 35| v35_658(void) = ConditionalBranch : r35_657 #-----| False -> Block 47 #-----| True -> Block 1026 -# 160| Block 47 -# 160| r160_1(glval) = VariableAddress[x47] : -# 160| mu160_2(String) = Uninitialized[x47] : &:r160_1 -# 160| r160_3(glval) = FunctionAddress[String] : -# 160| v160_4(void) = Call[String] : func:r160_3, this:r160_1 -# 160| mu160_5(unknown) = ^CallSideEffect : ~m? -# 160| mu160_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r160_1 -# 161| r161_1(glval) = VariableAddress[x47] : -# 161| r161_2(glval) = FunctionAddress[~String] : -# 161| v161_3(void) = Call[~String] : func:r161_2, this:r161_1 -# 161| mu161_4(unknown) = ^CallSideEffect : ~m? -# 161| v161_5(void) = ^IndirectReadSideEffect[-1] : &:r161_1, ~m? -# 161| mu161_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r161_1 -# 161| r161_7(bool) = Constant[0] : -# 161| v161_8(void) = ConditionalBranch : r161_7 +# 35| Block 47 +# 35| r35_659(glval) = VariableAddress[x47] : +# 35| mu35_660(String) = Uninitialized[x47] : &:r35_659 +# 35| r35_661(glval) = FunctionAddress[String] : +# 35| v35_662(void) = Call[String] : func:r35_661, this:r35_659 +# 35| mu35_663(unknown) = ^CallSideEffect : ~m? +# 35| mu35_664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_659 +# 35| r35_665(glval) = VariableAddress[x47] : +# 35| r35_666(glval) = FunctionAddress[~String] : +# 35| v35_667(void) = Call[~String] : func:r35_666, this:r35_665 +# 35| mu35_668(unknown) = ^CallSideEffect : ~m? +# 35| v35_669(void) = ^IndirectReadSideEffect[-1] : &:r35_665, ~m? +# 35| mu35_670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_665 +# 35| r35_671(bool) = Constant[0] : +# 35| v35_672(void) = ConditionalBranch : r35_671 #-----| False -> Block 48 #-----| True -> Block 1026 -# 163| Block 48 -# 163| r163_1(glval) = VariableAddress[x48] : -# 163| mu163_2(String) = Uninitialized[x48] : &:r163_1 -# 163| r163_3(glval) = FunctionAddress[String] : -# 163| v163_4(void) = Call[String] : func:r163_3, this:r163_1 -# 163| mu163_5(unknown) = ^CallSideEffect : ~m? -# 163| mu163_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r163_1 -# 164| r164_1(glval) = VariableAddress[x48] : -# 164| r164_2(glval) = FunctionAddress[~String] : -# 164| v164_3(void) = Call[~String] : func:r164_2, this:r164_1 -# 164| mu164_4(unknown) = ^CallSideEffect : ~m? -# 164| v164_5(void) = ^IndirectReadSideEffect[-1] : &:r164_1, ~m? -# 164| mu164_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r164_1 -# 164| r164_7(bool) = Constant[0] : -# 164| v164_8(void) = ConditionalBranch : r164_7 +# 35| Block 48 +# 35| r35_673(glval) = VariableAddress[x48] : +# 35| mu35_674(String) = Uninitialized[x48] : &:r35_673 +# 35| r35_675(glval) = FunctionAddress[String] : +# 35| v35_676(void) = Call[String] : func:r35_675, this:r35_673 +# 35| mu35_677(unknown) = ^CallSideEffect : ~m? +# 35| mu35_678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_673 +# 35| r35_679(glval) = VariableAddress[x48] : +# 35| r35_680(glval) = FunctionAddress[~String] : +# 35| v35_681(void) = Call[~String] : func:r35_680, this:r35_679 +# 35| mu35_682(unknown) = ^CallSideEffect : ~m? +# 35| v35_683(void) = ^IndirectReadSideEffect[-1] : &:r35_679, ~m? +# 35| mu35_684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_679 +# 35| r35_685(bool) = Constant[0] : +# 35| v35_686(void) = ConditionalBranch : r35_685 #-----| False -> Block 49 #-----| True -> Block 1026 -# 166| Block 49 -# 166| r166_1(glval) = VariableAddress[x49] : -# 166| mu166_2(String) = Uninitialized[x49] : &:r166_1 -# 166| r166_3(glval) = FunctionAddress[String] : -# 166| v166_4(void) = Call[String] : func:r166_3, this:r166_1 -# 166| mu166_5(unknown) = ^CallSideEffect : ~m? -# 166| mu166_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r166_1 -# 167| r167_1(glval) = VariableAddress[x49] : -# 167| r167_2(glval) = FunctionAddress[~String] : -# 167| v167_3(void) = Call[~String] : func:r167_2, this:r167_1 -# 167| mu167_4(unknown) = ^CallSideEffect : ~m? -# 167| v167_5(void) = ^IndirectReadSideEffect[-1] : &:r167_1, ~m? -# 167| mu167_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r167_1 -# 167| r167_7(bool) = Constant[0] : -# 167| v167_8(void) = ConditionalBranch : r167_7 +# 35| Block 49 +# 35| r35_687(glval) = VariableAddress[x49] : +# 35| mu35_688(String) = Uninitialized[x49] : &:r35_687 +# 35| r35_689(glval) = FunctionAddress[String] : +# 35| v35_690(void) = Call[String] : func:r35_689, this:r35_687 +# 35| mu35_691(unknown) = ^CallSideEffect : ~m? +# 35| mu35_692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_687 +# 35| r35_693(glval) = VariableAddress[x49] : +# 35| r35_694(glval) = FunctionAddress[~String] : +# 35| v35_695(void) = Call[~String] : func:r35_694, this:r35_693 +# 35| mu35_696(unknown) = ^CallSideEffect : ~m? +# 35| v35_697(void) = ^IndirectReadSideEffect[-1] : &:r35_693, ~m? +# 35| mu35_698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_693 +# 35| r35_699(bool) = Constant[0] : +# 35| v35_700(void) = ConditionalBranch : r35_699 #-----| False -> Block 50 #-----| True -> Block 1026 -# 169| Block 50 -# 169| r169_1(glval) = VariableAddress[x50] : -# 169| mu169_2(String) = Uninitialized[x50] : &:r169_1 -# 169| r169_3(glval) = FunctionAddress[String] : -# 169| v169_4(void) = Call[String] : func:r169_3, this:r169_1 -# 169| mu169_5(unknown) = ^CallSideEffect : ~m? -# 169| mu169_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r169_1 -# 170| r170_1(glval) = VariableAddress[x50] : -# 170| r170_2(glval) = FunctionAddress[~String] : -# 170| v170_3(void) = Call[~String] : func:r170_2, this:r170_1 -# 170| mu170_4(unknown) = ^CallSideEffect : ~m? -# 170| v170_5(void) = ^IndirectReadSideEffect[-1] : &:r170_1, ~m? -# 170| mu170_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r170_1 -# 170| r170_7(bool) = Constant[0] : -# 170| v170_8(void) = ConditionalBranch : r170_7 +# 35| Block 50 +# 35| r35_701(glval) = VariableAddress[x50] : +# 35| mu35_702(String) = Uninitialized[x50] : &:r35_701 +# 35| r35_703(glval) = FunctionAddress[String] : +# 35| v35_704(void) = Call[String] : func:r35_703, this:r35_701 +# 35| mu35_705(unknown) = ^CallSideEffect : ~m? +# 35| mu35_706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_701 +# 35| r35_707(glval) = VariableAddress[x50] : +# 35| r35_708(glval) = FunctionAddress[~String] : +# 35| v35_709(void) = Call[~String] : func:r35_708, this:r35_707 +# 35| mu35_710(unknown) = ^CallSideEffect : ~m? +# 35| v35_711(void) = ^IndirectReadSideEffect[-1] : &:r35_707, ~m? +# 35| mu35_712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_707 +# 35| r35_713(bool) = Constant[0] : +# 35| v35_714(void) = ConditionalBranch : r35_713 #-----| False -> Block 51 #-----| True -> Block 1026 -# 172| Block 51 -# 172| r172_1(glval) = VariableAddress[x51] : -# 172| mu172_2(String) = Uninitialized[x51] : &:r172_1 -# 172| r172_3(glval) = FunctionAddress[String] : -# 172| v172_4(void) = Call[String] : func:r172_3, this:r172_1 -# 172| mu172_5(unknown) = ^CallSideEffect : ~m? -# 172| mu172_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r172_1 -# 173| r173_1(glval) = VariableAddress[x51] : -# 173| r173_2(glval) = FunctionAddress[~String] : -# 173| v173_3(void) = Call[~String] : func:r173_2, this:r173_1 -# 173| mu173_4(unknown) = ^CallSideEffect : ~m? -# 173| v173_5(void) = ^IndirectReadSideEffect[-1] : &:r173_1, ~m? -# 173| mu173_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r173_1 -# 173| r173_7(bool) = Constant[0] : -# 173| v173_8(void) = ConditionalBranch : r173_7 +# 35| Block 51 +# 35| r35_715(glval) = VariableAddress[x51] : +# 35| mu35_716(String) = Uninitialized[x51] : &:r35_715 +# 35| r35_717(glval) = FunctionAddress[String] : +# 35| v35_718(void) = Call[String] : func:r35_717, this:r35_715 +# 35| mu35_719(unknown) = ^CallSideEffect : ~m? +# 35| mu35_720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_715 +# 35| r35_721(glval) = VariableAddress[x51] : +# 35| r35_722(glval) = FunctionAddress[~String] : +# 35| v35_723(void) = Call[~String] : func:r35_722, this:r35_721 +# 35| mu35_724(unknown) = ^CallSideEffect : ~m? +# 35| v35_725(void) = ^IndirectReadSideEffect[-1] : &:r35_721, ~m? +# 35| mu35_726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_721 +# 35| r35_727(bool) = Constant[0] : +# 35| v35_728(void) = ConditionalBranch : r35_727 #-----| False -> Block 52 #-----| True -> Block 1026 -# 175| Block 52 -# 175| r175_1(glval) = VariableAddress[x52] : -# 175| mu175_2(String) = Uninitialized[x52] : &:r175_1 -# 175| r175_3(glval) = FunctionAddress[String] : -# 175| v175_4(void) = Call[String] : func:r175_3, this:r175_1 -# 175| mu175_5(unknown) = ^CallSideEffect : ~m? -# 175| mu175_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r175_1 -# 176| r176_1(glval) = VariableAddress[x52] : -# 176| r176_2(glval) = FunctionAddress[~String] : -# 176| v176_3(void) = Call[~String] : func:r176_2, this:r176_1 -# 176| mu176_4(unknown) = ^CallSideEffect : ~m? -# 176| v176_5(void) = ^IndirectReadSideEffect[-1] : &:r176_1, ~m? -# 176| mu176_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r176_1 -# 176| r176_7(bool) = Constant[0] : -# 176| v176_8(void) = ConditionalBranch : r176_7 +# 35| Block 52 +# 35| r35_729(glval) = VariableAddress[x52] : +# 35| mu35_730(String) = Uninitialized[x52] : &:r35_729 +# 35| r35_731(glval) = FunctionAddress[String] : +# 35| v35_732(void) = Call[String] : func:r35_731, this:r35_729 +# 35| mu35_733(unknown) = ^CallSideEffect : ~m? +# 35| mu35_734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_729 +# 35| r35_735(glval) = VariableAddress[x52] : +# 35| r35_736(glval) = FunctionAddress[~String] : +# 35| v35_737(void) = Call[~String] : func:r35_736, this:r35_735 +# 35| mu35_738(unknown) = ^CallSideEffect : ~m? +# 35| v35_739(void) = ^IndirectReadSideEffect[-1] : &:r35_735, ~m? +# 35| mu35_740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_735 +# 35| r35_741(bool) = Constant[0] : +# 35| v35_742(void) = ConditionalBranch : r35_741 #-----| False -> Block 53 #-----| True -> Block 1026 -# 178| Block 53 -# 178| r178_1(glval) = VariableAddress[x53] : -# 178| mu178_2(String) = Uninitialized[x53] : &:r178_1 -# 178| r178_3(glval) = FunctionAddress[String] : -# 178| v178_4(void) = Call[String] : func:r178_3, this:r178_1 -# 178| mu178_5(unknown) = ^CallSideEffect : ~m? -# 178| mu178_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r178_1 -# 179| r179_1(glval) = VariableAddress[x53] : -# 179| r179_2(glval) = FunctionAddress[~String] : -# 179| v179_3(void) = Call[~String] : func:r179_2, this:r179_1 -# 179| mu179_4(unknown) = ^CallSideEffect : ~m? -# 179| v179_5(void) = ^IndirectReadSideEffect[-1] : &:r179_1, ~m? -# 179| mu179_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r179_1 -# 179| r179_7(bool) = Constant[0] : -# 179| v179_8(void) = ConditionalBranch : r179_7 +# 35| Block 53 +# 35| r35_743(glval) = VariableAddress[x53] : +# 35| mu35_744(String) = Uninitialized[x53] : &:r35_743 +# 35| r35_745(glval) = FunctionAddress[String] : +# 35| v35_746(void) = Call[String] : func:r35_745, this:r35_743 +# 35| mu35_747(unknown) = ^CallSideEffect : ~m? +# 35| mu35_748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_743 +# 35| r35_749(glval) = VariableAddress[x53] : +# 35| r35_750(glval) = FunctionAddress[~String] : +# 35| v35_751(void) = Call[~String] : func:r35_750, this:r35_749 +# 35| mu35_752(unknown) = ^CallSideEffect : ~m? +# 35| v35_753(void) = ^IndirectReadSideEffect[-1] : &:r35_749, ~m? +# 35| mu35_754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_749 +# 35| r35_755(bool) = Constant[0] : +# 35| v35_756(void) = ConditionalBranch : r35_755 #-----| False -> Block 54 #-----| True -> Block 1026 -# 181| Block 54 -# 181| r181_1(glval) = VariableAddress[x54] : -# 181| mu181_2(String) = Uninitialized[x54] : &:r181_1 -# 181| r181_3(glval) = FunctionAddress[String] : -# 181| v181_4(void) = Call[String] : func:r181_3, this:r181_1 -# 181| mu181_5(unknown) = ^CallSideEffect : ~m? -# 181| mu181_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r181_1 -# 182| r182_1(glval) = VariableAddress[x54] : -# 182| r182_2(glval) = FunctionAddress[~String] : -# 182| v182_3(void) = Call[~String] : func:r182_2, this:r182_1 -# 182| mu182_4(unknown) = ^CallSideEffect : ~m? -# 182| v182_5(void) = ^IndirectReadSideEffect[-1] : &:r182_1, ~m? -# 182| mu182_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r182_1 -# 182| r182_7(bool) = Constant[0] : -# 182| v182_8(void) = ConditionalBranch : r182_7 +# 35| Block 54 +# 35| r35_757(glval) = VariableAddress[x54] : +# 35| mu35_758(String) = Uninitialized[x54] : &:r35_757 +# 35| r35_759(glval) = FunctionAddress[String] : +# 35| v35_760(void) = Call[String] : func:r35_759, this:r35_757 +# 35| mu35_761(unknown) = ^CallSideEffect : ~m? +# 35| mu35_762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_757 +# 35| r35_763(glval) = VariableAddress[x54] : +# 35| r35_764(glval) = FunctionAddress[~String] : +# 35| v35_765(void) = Call[~String] : func:r35_764, this:r35_763 +# 35| mu35_766(unknown) = ^CallSideEffect : ~m? +# 35| v35_767(void) = ^IndirectReadSideEffect[-1] : &:r35_763, ~m? +# 35| mu35_768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_763 +# 35| r35_769(bool) = Constant[0] : +# 35| v35_770(void) = ConditionalBranch : r35_769 #-----| False -> Block 55 #-----| True -> Block 1026 -# 184| Block 55 -# 184| r184_1(glval) = VariableAddress[x55] : -# 184| mu184_2(String) = Uninitialized[x55] : &:r184_1 -# 184| r184_3(glval) = FunctionAddress[String] : -# 184| v184_4(void) = Call[String] : func:r184_3, this:r184_1 -# 184| mu184_5(unknown) = ^CallSideEffect : ~m? -# 184| mu184_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r184_1 -# 185| r185_1(glval) = VariableAddress[x55] : -# 185| r185_2(glval) = FunctionAddress[~String] : -# 185| v185_3(void) = Call[~String] : func:r185_2, this:r185_1 -# 185| mu185_4(unknown) = ^CallSideEffect : ~m? -# 185| v185_5(void) = ^IndirectReadSideEffect[-1] : &:r185_1, ~m? -# 185| mu185_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r185_1 -# 185| r185_7(bool) = Constant[0] : -# 185| v185_8(void) = ConditionalBranch : r185_7 +# 35| Block 55 +# 35| r35_771(glval) = VariableAddress[x55] : +# 35| mu35_772(String) = Uninitialized[x55] : &:r35_771 +# 35| r35_773(glval) = FunctionAddress[String] : +# 35| v35_774(void) = Call[String] : func:r35_773, this:r35_771 +# 35| mu35_775(unknown) = ^CallSideEffect : ~m? +# 35| mu35_776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_771 +# 35| r35_777(glval) = VariableAddress[x55] : +# 35| r35_778(glval) = FunctionAddress[~String] : +# 35| v35_779(void) = Call[~String] : func:r35_778, this:r35_777 +# 35| mu35_780(unknown) = ^CallSideEffect : ~m? +# 35| v35_781(void) = ^IndirectReadSideEffect[-1] : &:r35_777, ~m? +# 35| mu35_782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_777 +# 35| r35_783(bool) = Constant[0] : +# 35| v35_784(void) = ConditionalBranch : r35_783 #-----| False -> Block 56 #-----| True -> Block 1026 -# 187| Block 56 -# 187| r187_1(glval) = VariableAddress[x56] : -# 187| mu187_2(String) = Uninitialized[x56] : &:r187_1 -# 187| r187_3(glval) = FunctionAddress[String] : -# 187| v187_4(void) = Call[String] : func:r187_3, this:r187_1 -# 187| mu187_5(unknown) = ^CallSideEffect : ~m? -# 187| mu187_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r187_1 -# 188| r188_1(glval) = VariableAddress[x56] : -# 188| r188_2(glval) = FunctionAddress[~String] : -# 188| v188_3(void) = Call[~String] : func:r188_2, this:r188_1 -# 188| mu188_4(unknown) = ^CallSideEffect : ~m? -# 188| v188_5(void) = ^IndirectReadSideEffect[-1] : &:r188_1, ~m? -# 188| mu188_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r188_1 -# 188| r188_7(bool) = Constant[0] : -# 188| v188_8(void) = ConditionalBranch : r188_7 +# 35| Block 56 +# 35| r35_785(glval) = VariableAddress[x56] : +# 35| mu35_786(String) = Uninitialized[x56] : &:r35_785 +# 35| r35_787(glval) = FunctionAddress[String] : +# 35| v35_788(void) = Call[String] : func:r35_787, this:r35_785 +# 35| mu35_789(unknown) = ^CallSideEffect : ~m? +# 35| mu35_790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_785 +# 35| r35_791(glval) = VariableAddress[x56] : +# 35| r35_792(glval) = FunctionAddress[~String] : +# 35| v35_793(void) = Call[~String] : func:r35_792, this:r35_791 +# 35| mu35_794(unknown) = ^CallSideEffect : ~m? +# 35| v35_795(void) = ^IndirectReadSideEffect[-1] : &:r35_791, ~m? +# 35| mu35_796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_791 +# 35| r35_797(bool) = Constant[0] : +# 35| v35_798(void) = ConditionalBranch : r35_797 #-----| False -> Block 57 #-----| True -> Block 1026 -# 190| Block 57 -# 190| r190_1(glval) = VariableAddress[x57] : -# 190| mu190_2(String) = Uninitialized[x57] : &:r190_1 -# 190| r190_3(glval) = FunctionAddress[String] : -# 190| v190_4(void) = Call[String] : func:r190_3, this:r190_1 -# 190| mu190_5(unknown) = ^CallSideEffect : ~m? -# 190| mu190_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r190_1 -# 191| r191_1(glval) = VariableAddress[x57] : -# 191| r191_2(glval) = FunctionAddress[~String] : -# 191| v191_3(void) = Call[~String] : func:r191_2, this:r191_1 -# 191| mu191_4(unknown) = ^CallSideEffect : ~m? -# 191| v191_5(void) = ^IndirectReadSideEffect[-1] : &:r191_1, ~m? -# 191| mu191_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r191_1 -# 191| r191_7(bool) = Constant[0] : -# 191| v191_8(void) = ConditionalBranch : r191_7 +# 35| Block 57 +# 35| r35_799(glval) = VariableAddress[x57] : +# 35| mu35_800(String) = Uninitialized[x57] : &:r35_799 +# 35| r35_801(glval) = FunctionAddress[String] : +# 35| v35_802(void) = Call[String] : func:r35_801, this:r35_799 +# 35| mu35_803(unknown) = ^CallSideEffect : ~m? +# 35| mu35_804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_799 +# 35| r35_805(glval) = VariableAddress[x57] : +# 35| r35_806(glval) = FunctionAddress[~String] : +# 35| v35_807(void) = Call[~String] : func:r35_806, this:r35_805 +# 35| mu35_808(unknown) = ^CallSideEffect : ~m? +# 35| v35_809(void) = ^IndirectReadSideEffect[-1] : &:r35_805, ~m? +# 35| mu35_810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_805 +# 35| r35_811(bool) = Constant[0] : +# 35| v35_812(void) = ConditionalBranch : r35_811 #-----| False -> Block 58 #-----| True -> Block 1026 -# 193| Block 58 -# 193| r193_1(glval) = VariableAddress[x58] : -# 193| mu193_2(String) = Uninitialized[x58] : &:r193_1 -# 193| r193_3(glval) = FunctionAddress[String] : -# 193| v193_4(void) = Call[String] : func:r193_3, this:r193_1 -# 193| mu193_5(unknown) = ^CallSideEffect : ~m? -# 193| mu193_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r193_1 -# 194| r194_1(glval) = VariableAddress[x58] : -# 194| r194_2(glval) = FunctionAddress[~String] : -# 194| v194_3(void) = Call[~String] : func:r194_2, this:r194_1 -# 194| mu194_4(unknown) = ^CallSideEffect : ~m? -# 194| v194_5(void) = ^IndirectReadSideEffect[-1] : &:r194_1, ~m? -# 194| mu194_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r194_1 -# 194| r194_7(bool) = Constant[0] : -# 194| v194_8(void) = ConditionalBranch : r194_7 +# 35| Block 58 +# 35| r35_813(glval) = VariableAddress[x58] : +# 35| mu35_814(String) = Uninitialized[x58] : &:r35_813 +# 35| r35_815(glval) = FunctionAddress[String] : +# 35| v35_816(void) = Call[String] : func:r35_815, this:r35_813 +# 35| mu35_817(unknown) = ^CallSideEffect : ~m? +# 35| mu35_818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_813 +# 35| r35_819(glval) = VariableAddress[x58] : +# 35| r35_820(glval) = FunctionAddress[~String] : +# 35| v35_821(void) = Call[~String] : func:r35_820, this:r35_819 +# 35| mu35_822(unknown) = ^CallSideEffect : ~m? +# 35| v35_823(void) = ^IndirectReadSideEffect[-1] : &:r35_819, ~m? +# 35| mu35_824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_819 +# 35| r35_825(bool) = Constant[0] : +# 35| v35_826(void) = ConditionalBranch : r35_825 #-----| False -> Block 59 #-----| True -> Block 1026 -# 196| Block 59 -# 196| r196_1(glval) = VariableAddress[x59] : -# 196| mu196_2(String) = Uninitialized[x59] : &:r196_1 -# 196| r196_3(glval) = FunctionAddress[String] : -# 196| v196_4(void) = Call[String] : func:r196_3, this:r196_1 -# 196| mu196_5(unknown) = ^CallSideEffect : ~m? -# 196| mu196_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r196_1 -# 197| r197_1(glval) = VariableAddress[x59] : -# 197| r197_2(glval) = FunctionAddress[~String] : -# 197| v197_3(void) = Call[~String] : func:r197_2, this:r197_1 -# 197| mu197_4(unknown) = ^CallSideEffect : ~m? -# 197| v197_5(void) = ^IndirectReadSideEffect[-1] : &:r197_1, ~m? -# 197| mu197_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r197_1 -# 197| r197_7(bool) = Constant[0] : -# 197| v197_8(void) = ConditionalBranch : r197_7 +# 35| Block 59 +# 35| r35_827(glval) = VariableAddress[x59] : +# 35| mu35_828(String) = Uninitialized[x59] : &:r35_827 +# 35| r35_829(glval) = FunctionAddress[String] : +# 35| v35_830(void) = Call[String] : func:r35_829, this:r35_827 +# 35| mu35_831(unknown) = ^CallSideEffect : ~m? +# 35| mu35_832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_827 +# 35| r35_833(glval) = VariableAddress[x59] : +# 35| r35_834(glval) = FunctionAddress[~String] : +# 35| v35_835(void) = Call[~String] : func:r35_834, this:r35_833 +# 35| mu35_836(unknown) = ^CallSideEffect : ~m? +# 35| v35_837(void) = ^IndirectReadSideEffect[-1] : &:r35_833, ~m? +# 35| mu35_838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_833 +# 35| r35_839(bool) = Constant[0] : +# 35| v35_840(void) = ConditionalBranch : r35_839 #-----| False -> Block 60 #-----| True -> Block 1026 -# 199| Block 60 -# 199| r199_1(glval) = VariableAddress[x60] : -# 199| mu199_2(String) = Uninitialized[x60] : &:r199_1 -# 199| r199_3(glval) = FunctionAddress[String] : -# 199| v199_4(void) = Call[String] : func:r199_3, this:r199_1 -# 199| mu199_5(unknown) = ^CallSideEffect : ~m? -# 199| mu199_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r199_1 -# 200| r200_1(glval) = VariableAddress[x60] : -# 200| r200_2(glval) = FunctionAddress[~String] : -# 200| v200_3(void) = Call[~String] : func:r200_2, this:r200_1 -# 200| mu200_4(unknown) = ^CallSideEffect : ~m? -# 200| v200_5(void) = ^IndirectReadSideEffect[-1] : &:r200_1, ~m? -# 200| mu200_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r200_1 -# 200| r200_7(bool) = Constant[0] : -# 200| v200_8(void) = ConditionalBranch : r200_7 +# 35| Block 60 +# 35| r35_841(glval) = VariableAddress[x60] : +# 35| mu35_842(String) = Uninitialized[x60] : &:r35_841 +# 35| r35_843(glval) = FunctionAddress[String] : +# 35| v35_844(void) = Call[String] : func:r35_843, this:r35_841 +# 35| mu35_845(unknown) = ^CallSideEffect : ~m? +# 35| mu35_846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_841 +# 35| r35_847(glval) = VariableAddress[x60] : +# 35| r35_848(glval) = FunctionAddress[~String] : +# 35| v35_849(void) = Call[~String] : func:r35_848, this:r35_847 +# 35| mu35_850(unknown) = ^CallSideEffect : ~m? +# 35| v35_851(void) = ^IndirectReadSideEffect[-1] : &:r35_847, ~m? +# 35| mu35_852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_847 +# 35| r35_853(bool) = Constant[0] : +# 35| v35_854(void) = ConditionalBranch : r35_853 #-----| False -> Block 61 #-----| True -> Block 1026 -# 202| Block 61 -# 202| r202_1(glval) = VariableAddress[x61] : -# 202| mu202_2(String) = Uninitialized[x61] : &:r202_1 -# 202| r202_3(glval) = FunctionAddress[String] : -# 202| v202_4(void) = Call[String] : func:r202_3, this:r202_1 -# 202| mu202_5(unknown) = ^CallSideEffect : ~m? -# 202| mu202_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r202_1 -# 203| r203_1(glval) = VariableAddress[x61] : -# 203| r203_2(glval) = FunctionAddress[~String] : -# 203| v203_3(void) = Call[~String] : func:r203_2, this:r203_1 -# 203| mu203_4(unknown) = ^CallSideEffect : ~m? -# 203| v203_5(void) = ^IndirectReadSideEffect[-1] : &:r203_1, ~m? -# 203| mu203_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r203_1 -# 203| r203_7(bool) = Constant[0] : -# 203| v203_8(void) = ConditionalBranch : r203_7 +# 35| Block 61 +# 35| r35_855(glval) = VariableAddress[x61] : +# 35| mu35_856(String) = Uninitialized[x61] : &:r35_855 +# 35| r35_857(glval) = FunctionAddress[String] : +# 35| v35_858(void) = Call[String] : func:r35_857, this:r35_855 +# 35| mu35_859(unknown) = ^CallSideEffect : ~m? +# 35| mu35_860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_855 +# 35| r35_861(glval) = VariableAddress[x61] : +# 35| r35_862(glval) = FunctionAddress[~String] : +# 35| v35_863(void) = Call[~String] : func:r35_862, this:r35_861 +# 35| mu35_864(unknown) = ^CallSideEffect : ~m? +# 35| v35_865(void) = ^IndirectReadSideEffect[-1] : &:r35_861, ~m? +# 35| mu35_866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_861 +# 35| r35_867(bool) = Constant[0] : +# 35| v35_868(void) = ConditionalBranch : r35_867 #-----| False -> Block 62 #-----| True -> Block 1026 -# 205| Block 62 -# 205| r205_1(glval) = VariableAddress[x62] : -# 205| mu205_2(String) = Uninitialized[x62] : &:r205_1 -# 205| r205_3(glval) = FunctionAddress[String] : -# 205| v205_4(void) = Call[String] : func:r205_3, this:r205_1 -# 205| mu205_5(unknown) = ^CallSideEffect : ~m? -# 205| mu205_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r205_1 -# 206| r206_1(glval) = VariableAddress[x62] : -# 206| r206_2(glval) = FunctionAddress[~String] : -# 206| v206_3(void) = Call[~String] : func:r206_2, this:r206_1 -# 206| mu206_4(unknown) = ^CallSideEffect : ~m? -# 206| v206_5(void) = ^IndirectReadSideEffect[-1] : &:r206_1, ~m? -# 206| mu206_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r206_1 -# 206| r206_7(bool) = Constant[0] : -# 206| v206_8(void) = ConditionalBranch : r206_7 +# 35| Block 62 +# 35| r35_869(glval) = VariableAddress[x62] : +# 35| mu35_870(String) = Uninitialized[x62] : &:r35_869 +# 35| r35_871(glval) = FunctionAddress[String] : +# 35| v35_872(void) = Call[String] : func:r35_871, this:r35_869 +# 35| mu35_873(unknown) = ^CallSideEffect : ~m? +# 35| mu35_874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_869 +# 35| r35_875(glval) = VariableAddress[x62] : +# 35| r35_876(glval) = FunctionAddress[~String] : +# 35| v35_877(void) = Call[~String] : func:r35_876, this:r35_875 +# 35| mu35_878(unknown) = ^CallSideEffect : ~m? +# 35| v35_879(void) = ^IndirectReadSideEffect[-1] : &:r35_875, ~m? +# 35| mu35_880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_875 +# 35| r35_881(bool) = Constant[0] : +# 35| v35_882(void) = ConditionalBranch : r35_881 #-----| False -> Block 63 #-----| True -> Block 1026 -# 208| Block 63 -# 208| r208_1(glval) = VariableAddress[x63] : -# 208| mu208_2(String) = Uninitialized[x63] : &:r208_1 -# 208| r208_3(glval) = FunctionAddress[String] : -# 208| v208_4(void) = Call[String] : func:r208_3, this:r208_1 -# 208| mu208_5(unknown) = ^CallSideEffect : ~m? -# 208| mu208_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r208_1 -# 209| r209_1(glval) = VariableAddress[x63] : -# 209| r209_2(glval) = FunctionAddress[~String] : -# 209| v209_3(void) = Call[~String] : func:r209_2, this:r209_1 -# 209| mu209_4(unknown) = ^CallSideEffect : ~m? -# 209| v209_5(void) = ^IndirectReadSideEffect[-1] : &:r209_1, ~m? -# 209| mu209_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r209_1 -# 209| r209_7(bool) = Constant[0] : -# 209| v209_8(void) = ConditionalBranch : r209_7 +# 35| Block 63 +# 35| r35_883(glval) = VariableAddress[x63] : +# 35| mu35_884(String) = Uninitialized[x63] : &:r35_883 +# 35| r35_885(glval) = FunctionAddress[String] : +# 35| v35_886(void) = Call[String] : func:r35_885, this:r35_883 +# 35| mu35_887(unknown) = ^CallSideEffect : ~m? +# 35| mu35_888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_883 +# 35| r35_889(glval) = VariableAddress[x63] : +# 35| r35_890(glval) = FunctionAddress[~String] : +# 35| v35_891(void) = Call[~String] : func:r35_890, this:r35_889 +# 35| mu35_892(unknown) = ^CallSideEffect : ~m? +# 35| v35_893(void) = ^IndirectReadSideEffect[-1] : &:r35_889, ~m? +# 35| mu35_894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_889 +# 35| r35_895(bool) = Constant[0] : +# 35| v35_896(void) = ConditionalBranch : r35_895 #-----| False -> Block 64 #-----| True -> Block 1026 -# 211| Block 64 -# 211| r211_1(glval) = VariableAddress[x64] : -# 211| mu211_2(String) = Uninitialized[x64] : &:r211_1 -# 211| r211_3(glval) = FunctionAddress[String] : -# 211| v211_4(void) = Call[String] : func:r211_3, this:r211_1 -# 211| mu211_5(unknown) = ^CallSideEffect : ~m? -# 211| mu211_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r211_1 -# 212| r212_1(glval) = VariableAddress[x64] : -# 212| r212_2(glval) = FunctionAddress[~String] : -# 212| v212_3(void) = Call[~String] : func:r212_2, this:r212_1 -# 212| mu212_4(unknown) = ^CallSideEffect : ~m? -# 212| v212_5(void) = ^IndirectReadSideEffect[-1] : &:r212_1, ~m? -# 212| mu212_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r212_1 -# 212| r212_7(bool) = Constant[0] : -# 212| v212_8(void) = ConditionalBranch : r212_7 +# 35| Block 64 +# 35| r35_897(glval) = VariableAddress[x64] : +# 35| mu35_898(String) = Uninitialized[x64] : &:r35_897 +# 35| r35_899(glval) = FunctionAddress[String] : +# 35| v35_900(void) = Call[String] : func:r35_899, this:r35_897 +# 35| mu35_901(unknown) = ^CallSideEffect : ~m? +# 35| mu35_902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_897 +# 35| r35_903(glval) = VariableAddress[x64] : +# 35| r35_904(glval) = FunctionAddress[~String] : +# 35| v35_905(void) = Call[~String] : func:r35_904, this:r35_903 +# 35| mu35_906(unknown) = ^CallSideEffect : ~m? +# 35| v35_907(void) = ^IndirectReadSideEffect[-1] : &:r35_903, ~m? +# 35| mu35_908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_903 +# 35| r35_909(bool) = Constant[0] : +# 35| v35_910(void) = ConditionalBranch : r35_909 #-----| False -> Block 65 #-----| True -> Block 1026 -# 214| Block 65 -# 214| r214_1(glval) = VariableAddress[x65] : -# 214| mu214_2(String) = Uninitialized[x65] : &:r214_1 -# 214| r214_3(glval) = FunctionAddress[String] : -# 214| v214_4(void) = Call[String] : func:r214_3, this:r214_1 -# 214| mu214_5(unknown) = ^CallSideEffect : ~m? -# 214| mu214_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r214_1 -# 215| r215_1(glval) = VariableAddress[x65] : -# 215| r215_2(glval) = FunctionAddress[~String] : -# 215| v215_3(void) = Call[~String] : func:r215_2, this:r215_1 -# 215| mu215_4(unknown) = ^CallSideEffect : ~m? -# 215| v215_5(void) = ^IndirectReadSideEffect[-1] : &:r215_1, ~m? -# 215| mu215_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r215_1 -# 215| r215_7(bool) = Constant[0] : -# 215| v215_8(void) = ConditionalBranch : r215_7 +# 35| Block 65 +# 35| r35_911(glval) = VariableAddress[x65] : +# 35| mu35_912(String) = Uninitialized[x65] : &:r35_911 +# 35| r35_913(glval) = FunctionAddress[String] : +# 35| v35_914(void) = Call[String] : func:r35_913, this:r35_911 +# 35| mu35_915(unknown) = ^CallSideEffect : ~m? +# 35| mu35_916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_911 +# 35| r35_917(glval) = VariableAddress[x65] : +# 35| r35_918(glval) = FunctionAddress[~String] : +# 35| v35_919(void) = Call[~String] : func:r35_918, this:r35_917 +# 35| mu35_920(unknown) = ^CallSideEffect : ~m? +# 35| v35_921(void) = ^IndirectReadSideEffect[-1] : &:r35_917, ~m? +# 35| mu35_922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_917 +# 35| r35_923(bool) = Constant[0] : +# 35| v35_924(void) = ConditionalBranch : r35_923 #-----| False -> Block 66 #-----| True -> Block 1026 -# 217| Block 66 -# 217| r217_1(glval) = VariableAddress[x66] : -# 217| mu217_2(String) = Uninitialized[x66] : &:r217_1 -# 217| r217_3(glval) = FunctionAddress[String] : -# 217| v217_4(void) = Call[String] : func:r217_3, this:r217_1 -# 217| mu217_5(unknown) = ^CallSideEffect : ~m? -# 217| mu217_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r217_1 -# 218| r218_1(glval) = VariableAddress[x66] : -# 218| r218_2(glval) = FunctionAddress[~String] : -# 218| v218_3(void) = Call[~String] : func:r218_2, this:r218_1 -# 218| mu218_4(unknown) = ^CallSideEffect : ~m? -# 218| v218_5(void) = ^IndirectReadSideEffect[-1] : &:r218_1, ~m? -# 218| mu218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r218_1 -# 218| r218_7(bool) = Constant[0] : -# 218| v218_8(void) = ConditionalBranch : r218_7 +# 35| Block 66 +# 35| r35_925(glval) = VariableAddress[x66] : +# 35| mu35_926(String) = Uninitialized[x66] : &:r35_925 +# 35| r35_927(glval) = FunctionAddress[String] : +# 35| v35_928(void) = Call[String] : func:r35_927, this:r35_925 +# 35| mu35_929(unknown) = ^CallSideEffect : ~m? +# 35| mu35_930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_925 +# 35| r35_931(glval) = VariableAddress[x66] : +# 35| r35_932(glval) = FunctionAddress[~String] : +# 35| v35_933(void) = Call[~String] : func:r35_932, this:r35_931 +# 35| mu35_934(unknown) = ^CallSideEffect : ~m? +# 35| v35_935(void) = ^IndirectReadSideEffect[-1] : &:r35_931, ~m? +# 35| mu35_936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_931 +# 35| r35_937(bool) = Constant[0] : +# 35| v35_938(void) = ConditionalBranch : r35_937 #-----| False -> Block 67 #-----| True -> Block 1026 -# 220| Block 67 -# 220| r220_1(glval) = VariableAddress[x67] : -# 220| mu220_2(String) = Uninitialized[x67] : &:r220_1 -# 220| r220_3(glval) = FunctionAddress[String] : -# 220| v220_4(void) = Call[String] : func:r220_3, this:r220_1 -# 220| mu220_5(unknown) = ^CallSideEffect : ~m? -# 220| mu220_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r220_1 -# 221| r221_1(glval) = VariableAddress[x67] : -# 221| r221_2(glval) = FunctionAddress[~String] : -# 221| v221_3(void) = Call[~String] : func:r221_2, this:r221_1 -# 221| mu221_4(unknown) = ^CallSideEffect : ~m? -# 221| v221_5(void) = ^IndirectReadSideEffect[-1] : &:r221_1, ~m? -# 221| mu221_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r221_1 -# 221| r221_7(bool) = Constant[0] : -# 221| v221_8(void) = ConditionalBranch : r221_7 +# 35| Block 67 +# 35| r35_939(glval) = VariableAddress[x67] : +# 35| mu35_940(String) = Uninitialized[x67] : &:r35_939 +# 35| r35_941(glval) = FunctionAddress[String] : +# 35| v35_942(void) = Call[String] : func:r35_941, this:r35_939 +# 35| mu35_943(unknown) = ^CallSideEffect : ~m? +# 35| mu35_944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_939 +# 35| r35_945(glval) = VariableAddress[x67] : +# 35| r35_946(glval) = FunctionAddress[~String] : +# 35| v35_947(void) = Call[~String] : func:r35_946, this:r35_945 +# 35| mu35_948(unknown) = ^CallSideEffect : ~m? +# 35| v35_949(void) = ^IndirectReadSideEffect[-1] : &:r35_945, ~m? +# 35| mu35_950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_945 +# 35| r35_951(bool) = Constant[0] : +# 35| v35_952(void) = ConditionalBranch : r35_951 #-----| False -> Block 68 #-----| True -> Block 1026 -# 223| Block 68 -# 223| r223_1(glval) = VariableAddress[x68] : -# 223| mu223_2(String) = Uninitialized[x68] : &:r223_1 -# 223| r223_3(glval) = FunctionAddress[String] : -# 223| v223_4(void) = Call[String] : func:r223_3, this:r223_1 -# 223| mu223_5(unknown) = ^CallSideEffect : ~m? -# 223| mu223_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r223_1 -# 224| r224_1(glval) = VariableAddress[x68] : -# 224| r224_2(glval) = FunctionAddress[~String] : -# 224| v224_3(void) = Call[~String] : func:r224_2, this:r224_1 -# 224| mu224_4(unknown) = ^CallSideEffect : ~m? -# 224| v224_5(void) = ^IndirectReadSideEffect[-1] : &:r224_1, ~m? -# 224| mu224_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r224_1 -# 224| r224_7(bool) = Constant[0] : -# 224| v224_8(void) = ConditionalBranch : r224_7 +# 35| Block 68 +# 35| r35_953(glval) = VariableAddress[x68] : +# 35| mu35_954(String) = Uninitialized[x68] : &:r35_953 +# 35| r35_955(glval) = FunctionAddress[String] : +# 35| v35_956(void) = Call[String] : func:r35_955, this:r35_953 +# 35| mu35_957(unknown) = ^CallSideEffect : ~m? +# 35| mu35_958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_953 +# 35| r35_959(glval) = VariableAddress[x68] : +# 35| r35_960(glval) = FunctionAddress[~String] : +# 35| v35_961(void) = Call[~String] : func:r35_960, this:r35_959 +# 35| mu35_962(unknown) = ^CallSideEffect : ~m? +# 35| v35_963(void) = ^IndirectReadSideEffect[-1] : &:r35_959, ~m? +# 35| mu35_964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_959 +# 35| r35_965(bool) = Constant[0] : +# 35| v35_966(void) = ConditionalBranch : r35_965 #-----| False -> Block 69 #-----| True -> Block 1026 -# 226| Block 69 -# 226| r226_1(glval) = VariableAddress[x69] : -# 226| mu226_2(String) = Uninitialized[x69] : &:r226_1 -# 226| r226_3(glval) = FunctionAddress[String] : -# 226| v226_4(void) = Call[String] : func:r226_3, this:r226_1 -# 226| mu226_5(unknown) = ^CallSideEffect : ~m? -# 226| mu226_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r226_1 -# 227| r227_1(glval) = VariableAddress[x69] : -# 227| r227_2(glval) = FunctionAddress[~String] : -# 227| v227_3(void) = Call[~String] : func:r227_2, this:r227_1 -# 227| mu227_4(unknown) = ^CallSideEffect : ~m? -# 227| v227_5(void) = ^IndirectReadSideEffect[-1] : &:r227_1, ~m? -# 227| mu227_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r227_1 -# 227| r227_7(bool) = Constant[0] : -# 227| v227_8(void) = ConditionalBranch : r227_7 +# 35| Block 69 +# 35| r35_967(glval) = VariableAddress[x69] : +# 35| mu35_968(String) = Uninitialized[x69] : &:r35_967 +# 35| r35_969(glval) = FunctionAddress[String] : +# 35| v35_970(void) = Call[String] : func:r35_969, this:r35_967 +# 35| mu35_971(unknown) = ^CallSideEffect : ~m? +# 35| mu35_972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_967 +# 35| r35_973(glval) = VariableAddress[x69] : +# 35| r35_974(glval) = FunctionAddress[~String] : +# 35| v35_975(void) = Call[~String] : func:r35_974, this:r35_973 +# 35| mu35_976(unknown) = ^CallSideEffect : ~m? +# 35| v35_977(void) = ^IndirectReadSideEffect[-1] : &:r35_973, ~m? +# 35| mu35_978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_973 +# 35| r35_979(bool) = Constant[0] : +# 35| v35_980(void) = ConditionalBranch : r35_979 #-----| False -> Block 70 #-----| True -> Block 1026 -# 229| Block 70 -# 229| r229_1(glval) = VariableAddress[x70] : -# 229| mu229_2(String) = Uninitialized[x70] : &:r229_1 -# 229| r229_3(glval) = FunctionAddress[String] : -# 229| v229_4(void) = Call[String] : func:r229_3, this:r229_1 -# 229| mu229_5(unknown) = ^CallSideEffect : ~m? -# 229| mu229_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r229_1 -# 230| r230_1(glval) = VariableAddress[x70] : -# 230| r230_2(glval) = FunctionAddress[~String] : -# 230| v230_3(void) = Call[~String] : func:r230_2, this:r230_1 -# 230| mu230_4(unknown) = ^CallSideEffect : ~m? -# 230| v230_5(void) = ^IndirectReadSideEffect[-1] : &:r230_1, ~m? -# 230| mu230_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r230_1 -# 230| r230_7(bool) = Constant[0] : -# 230| v230_8(void) = ConditionalBranch : r230_7 +# 35| Block 70 +# 35| r35_981(glval) = VariableAddress[x70] : +# 35| mu35_982(String) = Uninitialized[x70] : &:r35_981 +# 35| r35_983(glval) = FunctionAddress[String] : +# 35| v35_984(void) = Call[String] : func:r35_983, this:r35_981 +# 35| mu35_985(unknown) = ^CallSideEffect : ~m? +# 35| mu35_986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_981 +# 35| r35_987(glval) = VariableAddress[x70] : +# 35| r35_988(glval) = FunctionAddress[~String] : +# 35| v35_989(void) = Call[~String] : func:r35_988, this:r35_987 +# 35| mu35_990(unknown) = ^CallSideEffect : ~m? +# 35| v35_991(void) = ^IndirectReadSideEffect[-1] : &:r35_987, ~m? +# 35| mu35_992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_987 +# 35| r35_993(bool) = Constant[0] : +# 35| v35_994(void) = ConditionalBranch : r35_993 #-----| False -> Block 71 #-----| True -> Block 1026 -# 232| Block 71 -# 232| r232_1(glval) = VariableAddress[x71] : -# 232| mu232_2(String) = Uninitialized[x71] : &:r232_1 -# 232| r232_3(glval) = FunctionAddress[String] : -# 232| v232_4(void) = Call[String] : func:r232_3, this:r232_1 -# 232| mu232_5(unknown) = ^CallSideEffect : ~m? -# 232| mu232_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r232_1 -# 233| r233_1(glval) = VariableAddress[x71] : -# 233| r233_2(glval) = FunctionAddress[~String] : -# 233| v233_3(void) = Call[~String] : func:r233_2, this:r233_1 -# 233| mu233_4(unknown) = ^CallSideEffect : ~m? -# 233| v233_5(void) = ^IndirectReadSideEffect[-1] : &:r233_1, ~m? -# 233| mu233_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r233_1 -# 233| r233_7(bool) = Constant[0] : -# 233| v233_8(void) = ConditionalBranch : r233_7 +# 35| Block 71 +# 35| r35_995(glval) = VariableAddress[x71] : +# 35| mu35_996(String) = Uninitialized[x71] : &:r35_995 +# 35| r35_997(glval) = FunctionAddress[String] : +# 35| v35_998(void) = Call[String] : func:r35_997, this:r35_995 +# 35| mu35_999(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_995 +# 35| r35_1001(glval) = VariableAddress[x71] : +# 35| r35_1002(glval) = FunctionAddress[~String] : +# 35| v35_1003(void) = Call[~String] : func:r35_1002, this:r35_1001 +# 35| mu35_1004(unknown) = ^CallSideEffect : ~m? +# 35| v35_1005(void) = ^IndirectReadSideEffect[-1] : &:r35_1001, ~m? +# 35| mu35_1006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1001 +# 35| r35_1007(bool) = Constant[0] : +# 35| v35_1008(void) = ConditionalBranch : r35_1007 #-----| False -> Block 72 #-----| True -> Block 1026 -# 235| Block 72 -# 235| r235_1(glval) = VariableAddress[x72] : -# 235| mu235_2(String) = Uninitialized[x72] : &:r235_1 -# 235| r235_3(glval) = FunctionAddress[String] : -# 235| v235_4(void) = Call[String] : func:r235_3, this:r235_1 -# 235| mu235_5(unknown) = ^CallSideEffect : ~m? -# 235| mu235_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r235_1 -# 236| r236_1(glval) = VariableAddress[x72] : -# 236| r236_2(glval) = FunctionAddress[~String] : -# 236| v236_3(void) = Call[~String] : func:r236_2, this:r236_1 -# 236| mu236_4(unknown) = ^CallSideEffect : ~m? -# 236| v236_5(void) = ^IndirectReadSideEffect[-1] : &:r236_1, ~m? -# 236| mu236_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r236_1 -# 236| r236_7(bool) = Constant[0] : -# 236| v236_8(void) = ConditionalBranch : r236_7 +# 35| Block 72 +# 35| r35_1009(glval) = VariableAddress[x72] : +# 35| mu35_1010(String) = Uninitialized[x72] : &:r35_1009 +# 35| r35_1011(glval) = FunctionAddress[String] : +# 35| v35_1012(void) = Call[String] : func:r35_1011, this:r35_1009 +# 35| mu35_1013(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1009 +# 35| r35_1015(glval) = VariableAddress[x72] : +# 35| r35_1016(glval) = FunctionAddress[~String] : +# 35| v35_1017(void) = Call[~String] : func:r35_1016, this:r35_1015 +# 35| mu35_1018(unknown) = ^CallSideEffect : ~m? +# 35| v35_1019(void) = ^IndirectReadSideEffect[-1] : &:r35_1015, ~m? +# 35| mu35_1020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1015 +# 35| r35_1021(bool) = Constant[0] : +# 35| v35_1022(void) = ConditionalBranch : r35_1021 #-----| False -> Block 73 #-----| True -> Block 1026 -# 238| Block 73 -# 238| r238_1(glval) = VariableAddress[x73] : -# 238| mu238_2(String) = Uninitialized[x73] : &:r238_1 -# 238| r238_3(glval) = FunctionAddress[String] : -# 238| v238_4(void) = Call[String] : func:r238_3, this:r238_1 -# 238| mu238_5(unknown) = ^CallSideEffect : ~m? -# 238| mu238_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r238_1 -# 239| r239_1(glval) = VariableAddress[x73] : -# 239| r239_2(glval) = FunctionAddress[~String] : -# 239| v239_3(void) = Call[~String] : func:r239_2, this:r239_1 -# 239| mu239_4(unknown) = ^CallSideEffect : ~m? -# 239| v239_5(void) = ^IndirectReadSideEffect[-1] : &:r239_1, ~m? -# 239| mu239_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r239_1 -# 239| r239_7(bool) = Constant[0] : -# 239| v239_8(void) = ConditionalBranch : r239_7 +# 35| Block 73 +# 35| r35_1023(glval) = VariableAddress[x73] : +# 35| mu35_1024(String) = Uninitialized[x73] : &:r35_1023 +# 35| r35_1025(glval) = FunctionAddress[String] : +# 35| v35_1026(void) = Call[String] : func:r35_1025, this:r35_1023 +# 35| mu35_1027(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1023 +# 35| r35_1029(glval) = VariableAddress[x73] : +# 35| r35_1030(glval) = FunctionAddress[~String] : +# 35| v35_1031(void) = Call[~String] : func:r35_1030, this:r35_1029 +# 35| mu35_1032(unknown) = ^CallSideEffect : ~m? +# 35| v35_1033(void) = ^IndirectReadSideEffect[-1] : &:r35_1029, ~m? +# 35| mu35_1034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1029 +# 35| r35_1035(bool) = Constant[0] : +# 35| v35_1036(void) = ConditionalBranch : r35_1035 #-----| False -> Block 74 #-----| True -> Block 1026 -# 241| Block 74 -# 241| r241_1(glval) = VariableAddress[x74] : -# 241| mu241_2(String) = Uninitialized[x74] : &:r241_1 -# 241| r241_3(glval) = FunctionAddress[String] : -# 241| v241_4(void) = Call[String] : func:r241_3, this:r241_1 -# 241| mu241_5(unknown) = ^CallSideEffect : ~m? -# 241| mu241_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r241_1 -# 242| r242_1(glval) = VariableAddress[x74] : -# 242| r242_2(glval) = FunctionAddress[~String] : -# 242| v242_3(void) = Call[~String] : func:r242_2, this:r242_1 -# 242| mu242_4(unknown) = ^CallSideEffect : ~m? -# 242| v242_5(void) = ^IndirectReadSideEffect[-1] : &:r242_1, ~m? -# 242| mu242_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r242_1 -# 242| r242_7(bool) = Constant[0] : -# 242| v242_8(void) = ConditionalBranch : r242_7 +# 35| Block 74 +# 35| r35_1037(glval) = VariableAddress[x74] : +# 35| mu35_1038(String) = Uninitialized[x74] : &:r35_1037 +# 35| r35_1039(glval) = FunctionAddress[String] : +# 35| v35_1040(void) = Call[String] : func:r35_1039, this:r35_1037 +# 35| mu35_1041(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1037 +# 35| r35_1043(glval) = VariableAddress[x74] : +# 35| r35_1044(glval) = FunctionAddress[~String] : +# 35| v35_1045(void) = Call[~String] : func:r35_1044, this:r35_1043 +# 35| mu35_1046(unknown) = ^CallSideEffect : ~m? +# 35| v35_1047(void) = ^IndirectReadSideEffect[-1] : &:r35_1043, ~m? +# 35| mu35_1048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1043 +# 35| r35_1049(bool) = Constant[0] : +# 35| v35_1050(void) = ConditionalBranch : r35_1049 #-----| False -> Block 75 #-----| True -> Block 1026 -# 244| Block 75 -# 244| r244_1(glval) = VariableAddress[x75] : -# 244| mu244_2(String) = Uninitialized[x75] : &:r244_1 -# 244| r244_3(glval) = FunctionAddress[String] : -# 244| v244_4(void) = Call[String] : func:r244_3, this:r244_1 -# 244| mu244_5(unknown) = ^CallSideEffect : ~m? -# 244| mu244_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r244_1 -# 245| r245_1(glval) = VariableAddress[x75] : -# 245| r245_2(glval) = FunctionAddress[~String] : -# 245| v245_3(void) = Call[~String] : func:r245_2, this:r245_1 -# 245| mu245_4(unknown) = ^CallSideEffect : ~m? -# 245| v245_5(void) = ^IndirectReadSideEffect[-1] : &:r245_1, ~m? -# 245| mu245_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r245_1 -# 245| r245_7(bool) = Constant[0] : -# 245| v245_8(void) = ConditionalBranch : r245_7 +# 35| Block 75 +# 35| r35_1051(glval) = VariableAddress[x75] : +# 35| mu35_1052(String) = Uninitialized[x75] : &:r35_1051 +# 35| r35_1053(glval) = FunctionAddress[String] : +# 35| v35_1054(void) = Call[String] : func:r35_1053, this:r35_1051 +# 35| mu35_1055(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1051 +# 35| r35_1057(glval) = VariableAddress[x75] : +# 35| r35_1058(glval) = FunctionAddress[~String] : +# 35| v35_1059(void) = Call[~String] : func:r35_1058, this:r35_1057 +# 35| mu35_1060(unknown) = ^CallSideEffect : ~m? +# 35| v35_1061(void) = ^IndirectReadSideEffect[-1] : &:r35_1057, ~m? +# 35| mu35_1062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1057 +# 35| r35_1063(bool) = Constant[0] : +# 35| v35_1064(void) = ConditionalBranch : r35_1063 #-----| False -> Block 76 #-----| True -> Block 1026 -# 247| Block 76 -# 247| r247_1(glval) = VariableAddress[x76] : -# 247| mu247_2(String) = Uninitialized[x76] : &:r247_1 -# 247| r247_3(glval) = FunctionAddress[String] : -# 247| v247_4(void) = Call[String] : func:r247_3, this:r247_1 -# 247| mu247_5(unknown) = ^CallSideEffect : ~m? -# 247| mu247_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r247_1 -# 248| r248_1(glval) = VariableAddress[x76] : -# 248| r248_2(glval) = FunctionAddress[~String] : -# 248| v248_3(void) = Call[~String] : func:r248_2, this:r248_1 -# 248| mu248_4(unknown) = ^CallSideEffect : ~m? -# 248| v248_5(void) = ^IndirectReadSideEffect[-1] : &:r248_1, ~m? -# 248| mu248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r248_1 -# 248| r248_7(bool) = Constant[0] : -# 248| v248_8(void) = ConditionalBranch : r248_7 +# 35| Block 76 +# 35| r35_1065(glval) = VariableAddress[x76] : +# 35| mu35_1066(String) = Uninitialized[x76] : &:r35_1065 +# 35| r35_1067(glval) = FunctionAddress[String] : +# 35| v35_1068(void) = Call[String] : func:r35_1067, this:r35_1065 +# 35| mu35_1069(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1065 +# 35| r35_1071(glval) = VariableAddress[x76] : +# 35| r35_1072(glval) = FunctionAddress[~String] : +# 35| v35_1073(void) = Call[~String] : func:r35_1072, this:r35_1071 +# 35| mu35_1074(unknown) = ^CallSideEffect : ~m? +# 35| v35_1075(void) = ^IndirectReadSideEffect[-1] : &:r35_1071, ~m? +# 35| mu35_1076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1071 +# 35| r35_1077(bool) = Constant[0] : +# 35| v35_1078(void) = ConditionalBranch : r35_1077 #-----| False -> Block 77 #-----| True -> Block 1026 -# 250| Block 77 -# 250| r250_1(glval) = VariableAddress[x77] : -# 250| mu250_2(String) = Uninitialized[x77] : &:r250_1 -# 250| r250_3(glval) = FunctionAddress[String] : -# 250| v250_4(void) = Call[String] : func:r250_3, this:r250_1 -# 250| mu250_5(unknown) = ^CallSideEffect : ~m? -# 250| mu250_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r250_1 -# 251| r251_1(glval) = VariableAddress[x77] : -# 251| r251_2(glval) = FunctionAddress[~String] : -# 251| v251_3(void) = Call[~String] : func:r251_2, this:r251_1 -# 251| mu251_4(unknown) = ^CallSideEffect : ~m? -# 251| v251_5(void) = ^IndirectReadSideEffect[-1] : &:r251_1, ~m? -# 251| mu251_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r251_1 -# 251| r251_7(bool) = Constant[0] : -# 251| v251_8(void) = ConditionalBranch : r251_7 +# 35| Block 77 +# 35| r35_1079(glval) = VariableAddress[x77] : +# 35| mu35_1080(String) = Uninitialized[x77] : &:r35_1079 +# 35| r35_1081(glval) = FunctionAddress[String] : +# 35| v35_1082(void) = Call[String] : func:r35_1081, this:r35_1079 +# 35| mu35_1083(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1079 +# 35| r35_1085(glval) = VariableAddress[x77] : +# 35| r35_1086(glval) = FunctionAddress[~String] : +# 35| v35_1087(void) = Call[~String] : func:r35_1086, this:r35_1085 +# 35| mu35_1088(unknown) = ^CallSideEffect : ~m? +# 35| v35_1089(void) = ^IndirectReadSideEffect[-1] : &:r35_1085, ~m? +# 35| mu35_1090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1085 +# 35| r35_1091(bool) = Constant[0] : +# 35| v35_1092(void) = ConditionalBranch : r35_1091 #-----| False -> Block 78 #-----| True -> Block 1026 -# 253| Block 78 -# 253| r253_1(glval) = VariableAddress[x78] : -# 253| mu253_2(String) = Uninitialized[x78] : &:r253_1 -# 253| r253_3(glval) = FunctionAddress[String] : -# 253| v253_4(void) = Call[String] : func:r253_3, this:r253_1 -# 253| mu253_5(unknown) = ^CallSideEffect : ~m? -# 253| mu253_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r253_1 -# 254| r254_1(glval) = VariableAddress[x78] : -# 254| r254_2(glval) = FunctionAddress[~String] : -# 254| v254_3(void) = Call[~String] : func:r254_2, this:r254_1 -# 254| mu254_4(unknown) = ^CallSideEffect : ~m? -# 254| v254_5(void) = ^IndirectReadSideEffect[-1] : &:r254_1, ~m? -# 254| mu254_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r254_1 -# 254| r254_7(bool) = Constant[0] : -# 254| v254_8(void) = ConditionalBranch : r254_7 +# 35| Block 78 +# 35| r35_1093(glval) = VariableAddress[x78] : +# 35| mu35_1094(String) = Uninitialized[x78] : &:r35_1093 +# 35| r35_1095(glval) = FunctionAddress[String] : +# 35| v35_1096(void) = Call[String] : func:r35_1095, this:r35_1093 +# 35| mu35_1097(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1093 +# 35| r35_1099(glval) = VariableAddress[x78] : +# 35| r35_1100(glval) = FunctionAddress[~String] : +# 35| v35_1101(void) = Call[~String] : func:r35_1100, this:r35_1099 +# 35| mu35_1102(unknown) = ^CallSideEffect : ~m? +# 35| v35_1103(void) = ^IndirectReadSideEffect[-1] : &:r35_1099, ~m? +# 35| mu35_1104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1099 +# 35| r35_1105(bool) = Constant[0] : +# 35| v35_1106(void) = ConditionalBranch : r35_1105 #-----| False -> Block 79 #-----| True -> Block 1026 -# 256| Block 79 -# 256| r256_1(glval) = VariableAddress[x79] : -# 256| mu256_2(String) = Uninitialized[x79] : &:r256_1 -# 256| r256_3(glval) = FunctionAddress[String] : -# 256| v256_4(void) = Call[String] : func:r256_3, this:r256_1 -# 256| mu256_5(unknown) = ^CallSideEffect : ~m? -# 256| mu256_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r256_1 -# 257| r257_1(glval) = VariableAddress[x79] : -# 257| r257_2(glval) = FunctionAddress[~String] : -# 257| v257_3(void) = Call[~String] : func:r257_2, this:r257_1 -# 257| mu257_4(unknown) = ^CallSideEffect : ~m? -# 257| v257_5(void) = ^IndirectReadSideEffect[-1] : &:r257_1, ~m? -# 257| mu257_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r257_1 -# 257| r257_7(bool) = Constant[0] : -# 257| v257_8(void) = ConditionalBranch : r257_7 +# 35| Block 79 +# 35| r35_1107(glval) = VariableAddress[x79] : +# 35| mu35_1108(String) = Uninitialized[x79] : &:r35_1107 +# 35| r35_1109(glval) = FunctionAddress[String] : +# 35| v35_1110(void) = Call[String] : func:r35_1109, this:r35_1107 +# 35| mu35_1111(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1107 +# 35| r35_1113(glval) = VariableAddress[x79] : +# 35| r35_1114(glval) = FunctionAddress[~String] : +# 35| v35_1115(void) = Call[~String] : func:r35_1114, this:r35_1113 +# 35| mu35_1116(unknown) = ^CallSideEffect : ~m? +# 35| v35_1117(void) = ^IndirectReadSideEffect[-1] : &:r35_1113, ~m? +# 35| mu35_1118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1113 +# 35| r35_1119(bool) = Constant[0] : +# 35| v35_1120(void) = ConditionalBranch : r35_1119 #-----| False -> Block 80 #-----| True -> Block 1026 -# 259| Block 80 -# 259| r259_1(glval) = VariableAddress[x80] : -# 259| mu259_2(String) = Uninitialized[x80] : &:r259_1 -# 259| r259_3(glval) = FunctionAddress[String] : -# 259| v259_4(void) = Call[String] : func:r259_3, this:r259_1 -# 259| mu259_5(unknown) = ^CallSideEffect : ~m? -# 259| mu259_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r259_1 -# 260| r260_1(glval) = VariableAddress[x80] : -# 260| r260_2(glval) = FunctionAddress[~String] : -# 260| v260_3(void) = Call[~String] : func:r260_2, this:r260_1 -# 260| mu260_4(unknown) = ^CallSideEffect : ~m? -# 260| v260_5(void) = ^IndirectReadSideEffect[-1] : &:r260_1, ~m? -# 260| mu260_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r260_1 -# 260| r260_7(bool) = Constant[0] : -# 260| v260_8(void) = ConditionalBranch : r260_7 +# 35| Block 80 +# 35| r35_1121(glval) = VariableAddress[x80] : +# 35| mu35_1122(String) = Uninitialized[x80] : &:r35_1121 +# 35| r35_1123(glval) = FunctionAddress[String] : +# 35| v35_1124(void) = Call[String] : func:r35_1123, this:r35_1121 +# 35| mu35_1125(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1121 +# 35| r35_1127(glval) = VariableAddress[x80] : +# 35| r35_1128(glval) = FunctionAddress[~String] : +# 35| v35_1129(void) = Call[~String] : func:r35_1128, this:r35_1127 +# 35| mu35_1130(unknown) = ^CallSideEffect : ~m? +# 35| v35_1131(void) = ^IndirectReadSideEffect[-1] : &:r35_1127, ~m? +# 35| mu35_1132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1127 +# 35| r35_1133(bool) = Constant[0] : +# 35| v35_1134(void) = ConditionalBranch : r35_1133 #-----| False -> Block 81 #-----| True -> Block 1026 -# 262| Block 81 -# 262| r262_1(glval) = VariableAddress[x81] : -# 262| mu262_2(String) = Uninitialized[x81] : &:r262_1 -# 262| r262_3(glval) = FunctionAddress[String] : -# 262| v262_4(void) = Call[String] : func:r262_3, this:r262_1 -# 262| mu262_5(unknown) = ^CallSideEffect : ~m? -# 262| mu262_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r262_1 -# 263| r263_1(glval) = VariableAddress[x81] : -# 263| r263_2(glval) = FunctionAddress[~String] : -# 263| v263_3(void) = Call[~String] : func:r263_2, this:r263_1 -# 263| mu263_4(unknown) = ^CallSideEffect : ~m? -# 263| v263_5(void) = ^IndirectReadSideEffect[-1] : &:r263_1, ~m? -# 263| mu263_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r263_1 -# 263| r263_7(bool) = Constant[0] : -# 263| v263_8(void) = ConditionalBranch : r263_7 +# 35| Block 81 +# 35| r35_1135(glval) = VariableAddress[x81] : +# 35| mu35_1136(String) = Uninitialized[x81] : &:r35_1135 +# 35| r35_1137(glval) = FunctionAddress[String] : +# 35| v35_1138(void) = Call[String] : func:r35_1137, this:r35_1135 +# 35| mu35_1139(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1135 +# 35| r35_1141(glval) = VariableAddress[x81] : +# 35| r35_1142(glval) = FunctionAddress[~String] : +# 35| v35_1143(void) = Call[~String] : func:r35_1142, this:r35_1141 +# 35| mu35_1144(unknown) = ^CallSideEffect : ~m? +# 35| v35_1145(void) = ^IndirectReadSideEffect[-1] : &:r35_1141, ~m? +# 35| mu35_1146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1141 +# 35| r35_1147(bool) = Constant[0] : +# 35| v35_1148(void) = ConditionalBranch : r35_1147 #-----| False -> Block 82 #-----| True -> Block 1026 -# 265| Block 82 -# 265| r265_1(glval) = VariableAddress[x82] : -# 265| mu265_2(String) = Uninitialized[x82] : &:r265_1 -# 265| r265_3(glval) = FunctionAddress[String] : -# 265| v265_4(void) = Call[String] : func:r265_3, this:r265_1 -# 265| mu265_5(unknown) = ^CallSideEffect : ~m? -# 265| mu265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r265_1 -# 266| r266_1(glval) = VariableAddress[x82] : -# 266| r266_2(glval) = FunctionAddress[~String] : -# 266| v266_3(void) = Call[~String] : func:r266_2, this:r266_1 -# 266| mu266_4(unknown) = ^CallSideEffect : ~m? -# 266| v266_5(void) = ^IndirectReadSideEffect[-1] : &:r266_1, ~m? -# 266| mu266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r266_1 -# 266| r266_7(bool) = Constant[0] : -# 266| v266_8(void) = ConditionalBranch : r266_7 +# 35| Block 82 +# 35| r35_1149(glval) = VariableAddress[x82] : +# 35| mu35_1150(String) = Uninitialized[x82] : &:r35_1149 +# 35| r35_1151(glval) = FunctionAddress[String] : +# 35| v35_1152(void) = Call[String] : func:r35_1151, this:r35_1149 +# 35| mu35_1153(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1149 +# 35| r35_1155(glval) = VariableAddress[x82] : +# 35| r35_1156(glval) = FunctionAddress[~String] : +# 35| v35_1157(void) = Call[~String] : func:r35_1156, this:r35_1155 +# 35| mu35_1158(unknown) = ^CallSideEffect : ~m? +# 35| v35_1159(void) = ^IndirectReadSideEffect[-1] : &:r35_1155, ~m? +# 35| mu35_1160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1155 +# 35| r35_1161(bool) = Constant[0] : +# 35| v35_1162(void) = ConditionalBranch : r35_1161 #-----| False -> Block 83 #-----| True -> Block 1026 -# 268| Block 83 -# 268| r268_1(glval) = VariableAddress[x83] : -# 268| mu268_2(String) = Uninitialized[x83] : &:r268_1 -# 268| r268_3(glval) = FunctionAddress[String] : -# 268| v268_4(void) = Call[String] : func:r268_3, this:r268_1 -# 268| mu268_5(unknown) = ^CallSideEffect : ~m? -# 268| mu268_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r268_1 -# 269| r269_1(glval) = VariableAddress[x83] : -# 269| r269_2(glval) = FunctionAddress[~String] : -# 269| v269_3(void) = Call[~String] : func:r269_2, this:r269_1 -# 269| mu269_4(unknown) = ^CallSideEffect : ~m? -# 269| v269_5(void) = ^IndirectReadSideEffect[-1] : &:r269_1, ~m? -# 269| mu269_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r269_1 -# 269| r269_7(bool) = Constant[0] : -# 269| v269_8(void) = ConditionalBranch : r269_7 +# 35| Block 83 +# 35| r35_1163(glval) = VariableAddress[x83] : +# 35| mu35_1164(String) = Uninitialized[x83] : &:r35_1163 +# 35| r35_1165(glval) = FunctionAddress[String] : +# 35| v35_1166(void) = Call[String] : func:r35_1165, this:r35_1163 +# 35| mu35_1167(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1163 +# 35| r35_1169(glval) = VariableAddress[x83] : +# 35| r35_1170(glval) = FunctionAddress[~String] : +# 35| v35_1171(void) = Call[~String] : func:r35_1170, this:r35_1169 +# 35| mu35_1172(unknown) = ^CallSideEffect : ~m? +# 35| v35_1173(void) = ^IndirectReadSideEffect[-1] : &:r35_1169, ~m? +# 35| mu35_1174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1169 +# 35| r35_1175(bool) = Constant[0] : +# 35| v35_1176(void) = ConditionalBranch : r35_1175 #-----| False -> Block 84 #-----| True -> Block 1026 -# 271| Block 84 -# 271| r271_1(glval) = VariableAddress[x84] : -# 271| mu271_2(String) = Uninitialized[x84] : &:r271_1 -# 271| r271_3(glval) = FunctionAddress[String] : -# 271| v271_4(void) = Call[String] : func:r271_3, this:r271_1 -# 271| mu271_5(unknown) = ^CallSideEffect : ~m? -# 271| mu271_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r271_1 -# 272| r272_1(glval) = VariableAddress[x84] : -# 272| r272_2(glval) = FunctionAddress[~String] : -# 272| v272_3(void) = Call[~String] : func:r272_2, this:r272_1 -# 272| mu272_4(unknown) = ^CallSideEffect : ~m? -# 272| v272_5(void) = ^IndirectReadSideEffect[-1] : &:r272_1, ~m? -# 272| mu272_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r272_1 -# 272| r272_7(bool) = Constant[0] : -# 272| v272_8(void) = ConditionalBranch : r272_7 +# 35| Block 84 +# 35| r35_1177(glval) = VariableAddress[x84] : +# 35| mu35_1178(String) = Uninitialized[x84] : &:r35_1177 +# 35| r35_1179(glval) = FunctionAddress[String] : +# 35| v35_1180(void) = Call[String] : func:r35_1179, this:r35_1177 +# 35| mu35_1181(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1177 +# 35| r35_1183(glval) = VariableAddress[x84] : +# 35| r35_1184(glval) = FunctionAddress[~String] : +# 35| v35_1185(void) = Call[~String] : func:r35_1184, this:r35_1183 +# 35| mu35_1186(unknown) = ^CallSideEffect : ~m? +# 35| v35_1187(void) = ^IndirectReadSideEffect[-1] : &:r35_1183, ~m? +# 35| mu35_1188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1183 +# 35| r35_1189(bool) = Constant[0] : +# 35| v35_1190(void) = ConditionalBranch : r35_1189 #-----| False -> Block 85 #-----| True -> Block 1026 -# 274| Block 85 -# 274| r274_1(glval) = VariableAddress[x85] : -# 274| mu274_2(String) = Uninitialized[x85] : &:r274_1 -# 274| r274_3(glval) = FunctionAddress[String] : -# 274| v274_4(void) = Call[String] : func:r274_3, this:r274_1 -# 274| mu274_5(unknown) = ^CallSideEffect : ~m? -# 274| mu274_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r274_1 -# 275| r275_1(glval) = VariableAddress[x85] : -# 275| r275_2(glval) = FunctionAddress[~String] : -# 275| v275_3(void) = Call[~String] : func:r275_2, this:r275_1 -# 275| mu275_4(unknown) = ^CallSideEffect : ~m? -# 275| v275_5(void) = ^IndirectReadSideEffect[-1] : &:r275_1, ~m? -# 275| mu275_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r275_1 -# 275| r275_7(bool) = Constant[0] : -# 275| v275_8(void) = ConditionalBranch : r275_7 +# 35| Block 85 +# 35| r35_1191(glval) = VariableAddress[x85] : +# 35| mu35_1192(String) = Uninitialized[x85] : &:r35_1191 +# 35| r35_1193(glval) = FunctionAddress[String] : +# 35| v35_1194(void) = Call[String] : func:r35_1193, this:r35_1191 +# 35| mu35_1195(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1191 +# 35| r35_1197(glval) = VariableAddress[x85] : +# 35| r35_1198(glval) = FunctionAddress[~String] : +# 35| v35_1199(void) = Call[~String] : func:r35_1198, this:r35_1197 +# 35| mu35_1200(unknown) = ^CallSideEffect : ~m? +# 35| v35_1201(void) = ^IndirectReadSideEffect[-1] : &:r35_1197, ~m? +# 35| mu35_1202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1197 +# 35| r35_1203(bool) = Constant[0] : +# 35| v35_1204(void) = ConditionalBranch : r35_1203 #-----| False -> Block 86 #-----| True -> Block 1026 -# 277| Block 86 -# 277| r277_1(glval) = VariableAddress[x86] : -# 277| mu277_2(String) = Uninitialized[x86] : &:r277_1 -# 277| r277_3(glval) = FunctionAddress[String] : -# 277| v277_4(void) = Call[String] : func:r277_3, this:r277_1 -# 277| mu277_5(unknown) = ^CallSideEffect : ~m? -# 277| mu277_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r277_1 -# 278| r278_1(glval) = VariableAddress[x86] : -# 278| r278_2(glval) = FunctionAddress[~String] : -# 278| v278_3(void) = Call[~String] : func:r278_2, this:r278_1 -# 278| mu278_4(unknown) = ^CallSideEffect : ~m? -# 278| v278_5(void) = ^IndirectReadSideEffect[-1] : &:r278_1, ~m? -# 278| mu278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r278_1 -# 278| r278_7(bool) = Constant[0] : -# 278| v278_8(void) = ConditionalBranch : r278_7 +# 35| Block 86 +# 35| r35_1205(glval) = VariableAddress[x86] : +# 35| mu35_1206(String) = Uninitialized[x86] : &:r35_1205 +# 35| r35_1207(glval) = FunctionAddress[String] : +# 35| v35_1208(void) = Call[String] : func:r35_1207, this:r35_1205 +# 35| mu35_1209(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1205 +# 35| r35_1211(glval) = VariableAddress[x86] : +# 35| r35_1212(glval) = FunctionAddress[~String] : +# 35| v35_1213(void) = Call[~String] : func:r35_1212, this:r35_1211 +# 35| mu35_1214(unknown) = ^CallSideEffect : ~m? +# 35| v35_1215(void) = ^IndirectReadSideEffect[-1] : &:r35_1211, ~m? +# 35| mu35_1216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1211 +# 35| r35_1217(bool) = Constant[0] : +# 35| v35_1218(void) = ConditionalBranch : r35_1217 #-----| False -> Block 87 #-----| True -> Block 1026 -# 280| Block 87 -# 280| r280_1(glval) = VariableAddress[x87] : -# 280| mu280_2(String) = Uninitialized[x87] : &:r280_1 -# 280| r280_3(glval) = FunctionAddress[String] : -# 280| v280_4(void) = Call[String] : func:r280_3, this:r280_1 -# 280| mu280_5(unknown) = ^CallSideEffect : ~m? -# 280| mu280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r280_1 -# 281| r281_1(glval) = VariableAddress[x87] : -# 281| r281_2(glval) = FunctionAddress[~String] : -# 281| v281_3(void) = Call[~String] : func:r281_2, this:r281_1 -# 281| mu281_4(unknown) = ^CallSideEffect : ~m? -# 281| v281_5(void) = ^IndirectReadSideEffect[-1] : &:r281_1, ~m? -# 281| mu281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r281_1 -# 281| r281_7(bool) = Constant[0] : -# 281| v281_8(void) = ConditionalBranch : r281_7 +# 35| Block 87 +# 35| r35_1219(glval) = VariableAddress[x87] : +# 35| mu35_1220(String) = Uninitialized[x87] : &:r35_1219 +# 35| r35_1221(glval) = FunctionAddress[String] : +# 35| v35_1222(void) = Call[String] : func:r35_1221, this:r35_1219 +# 35| mu35_1223(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1219 +# 35| r35_1225(glval) = VariableAddress[x87] : +# 35| r35_1226(glval) = FunctionAddress[~String] : +# 35| v35_1227(void) = Call[~String] : func:r35_1226, this:r35_1225 +# 35| mu35_1228(unknown) = ^CallSideEffect : ~m? +# 35| v35_1229(void) = ^IndirectReadSideEffect[-1] : &:r35_1225, ~m? +# 35| mu35_1230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1225 +# 35| r35_1231(bool) = Constant[0] : +# 35| v35_1232(void) = ConditionalBranch : r35_1231 #-----| False -> Block 88 #-----| True -> Block 1026 -# 283| Block 88 -# 283| r283_1(glval) = VariableAddress[x88] : -# 283| mu283_2(String) = Uninitialized[x88] : &:r283_1 -# 283| r283_3(glval) = FunctionAddress[String] : -# 283| v283_4(void) = Call[String] : func:r283_3, this:r283_1 -# 283| mu283_5(unknown) = ^CallSideEffect : ~m? -# 283| mu283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r283_1 -# 284| r284_1(glval) = VariableAddress[x88] : -# 284| r284_2(glval) = FunctionAddress[~String] : -# 284| v284_3(void) = Call[~String] : func:r284_2, this:r284_1 -# 284| mu284_4(unknown) = ^CallSideEffect : ~m? -# 284| v284_5(void) = ^IndirectReadSideEffect[-1] : &:r284_1, ~m? -# 284| mu284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r284_1 -# 284| r284_7(bool) = Constant[0] : -# 284| v284_8(void) = ConditionalBranch : r284_7 +# 35| Block 88 +# 35| r35_1233(glval) = VariableAddress[x88] : +# 35| mu35_1234(String) = Uninitialized[x88] : &:r35_1233 +# 35| r35_1235(glval) = FunctionAddress[String] : +# 35| v35_1236(void) = Call[String] : func:r35_1235, this:r35_1233 +# 35| mu35_1237(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1233 +# 35| r35_1239(glval) = VariableAddress[x88] : +# 35| r35_1240(glval) = FunctionAddress[~String] : +# 35| v35_1241(void) = Call[~String] : func:r35_1240, this:r35_1239 +# 35| mu35_1242(unknown) = ^CallSideEffect : ~m? +# 35| v35_1243(void) = ^IndirectReadSideEffect[-1] : &:r35_1239, ~m? +# 35| mu35_1244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1239 +# 35| r35_1245(bool) = Constant[0] : +# 35| v35_1246(void) = ConditionalBranch : r35_1245 #-----| False -> Block 89 #-----| True -> Block 1026 -# 286| Block 89 -# 286| r286_1(glval) = VariableAddress[x89] : -# 286| mu286_2(String) = Uninitialized[x89] : &:r286_1 -# 286| r286_3(glval) = FunctionAddress[String] : -# 286| v286_4(void) = Call[String] : func:r286_3, this:r286_1 -# 286| mu286_5(unknown) = ^CallSideEffect : ~m? -# 286| mu286_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r286_1 -# 287| r287_1(glval) = VariableAddress[x89] : -# 287| r287_2(glval) = FunctionAddress[~String] : -# 287| v287_3(void) = Call[~String] : func:r287_2, this:r287_1 -# 287| mu287_4(unknown) = ^CallSideEffect : ~m? -# 287| v287_5(void) = ^IndirectReadSideEffect[-1] : &:r287_1, ~m? -# 287| mu287_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r287_1 -# 287| r287_7(bool) = Constant[0] : -# 287| v287_8(void) = ConditionalBranch : r287_7 +# 35| Block 89 +# 35| r35_1247(glval) = VariableAddress[x89] : +# 35| mu35_1248(String) = Uninitialized[x89] : &:r35_1247 +# 35| r35_1249(glval) = FunctionAddress[String] : +# 35| v35_1250(void) = Call[String] : func:r35_1249, this:r35_1247 +# 35| mu35_1251(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1247 +# 35| r35_1253(glval) = VariableAddress[x89] : +# 35| r35_1254(glval) = FunctionAddress[~String] : +# 35| v35_1255(void) = Call[~String] : func:r35_1254, this:r35_1253 +# 35| mu35_1256(unknown) = ^CallSideEffect : ~m? +# 35| v35_1257(void) = ^IndirectReadSideEffect[-1] : &:r35_1253, ~m? +# 35| mu35_1258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1253 +# 35| r35_1259(bool) = Constant[0] : +# 35| v35_1260(void) = ConditionalBranch : r35_1259 #-----| False -> Block 90 #-----| True -> Block 1026 -# 289| Block 90 -# 289| r289_1(glval) = VariableAddress[x90] : -# 289| mu289_2(String) = Uninitialized[x90] : &:r289_1 -# 289| r289_3(glval) = FunctionAddress[String] : -# 289| v289_4(void) = Call[String] : func:r289_3, this:r289_1 -# 289| mu289_5(unknown) = ^CallSideEffect : ~m? -# 289| mu289_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r289_1 -# 290| r290_1(glval) = VariableAddress[x90] : -# 290| r290_2(glval) = FunctionAddress[~String] : -# 290| v290_3(void) = Call[~String] : func:r290_2, this:r290_1 -# 290| mu290_4(unknown) = ^CallSideEffect : ~m? -# 290| v290_5(void) = ^IndirectReadSideEffect[-1] : &:r290_1, ~m? -# 290| mu290_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r290_1 -# 290| r290_7(bool) = Constant[0] : -# 290| v290_8(void) = ConditionalBranch : r290_7 +# 35| Block 90 +# 35| r35_1261(glval) = VariableAddress[x90] : +# 35| mu35_1262(String) = Uninitialized[x90] : &:r35_1261 +# 35| r35_1263(glval) = FunctionAddress[String] : +# 35| v35_1264(void) = Call[String] : func:r35_1263, this:r35_1261 +# 35| mu35_1265(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1261 +# 35| r35_1267(glval) = VariableAddress[x90] : +# 35| r35_1268(glval) = FunctionAddress[~String] : +# 35| v35_1269(void) = Call[~String] : func:r35_1268, this:r35_1267 +# 35| mu35_1270(unknown) = ^CallSideEffect : ~m? +# 35| v35_1271(void) = ^IndirectReadSideEffect[-1] : &:r35_1267, ~m? +# 35| mu35_1272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1267 +# 35| r35_1273(bool) = Constant[0] : +# 35| v35_1274(void) = ConditionalBranch : r35_1273 #-----| False -> Block 91 #-----| True -> Block 1026 -# 292| Block 91 -# 292| r292_1(glval) = VariableAddress[x91] : -# 292| mu292_2(String) = Uninitialized[x91] : &:r292_1 -# 292| r292_3(glval) = FunctionAddress[String] : -# 292| v292_4(void) = Call[String] : func:r292_3, this:r292_1 -# 292| mu292_5(unknown) = ^CallSideEffect : ~m? -# 292| mu292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r292_1 -# 293| r293_1(glval) = VariableAddress[x91] : -# 293| r293_2(glval) = FunctionAddress[~String] : -# 293| v293_3(void) = Call[~String] : func:r293_2, this:r293_1 -# 293| mu293_4(unknown) = ^CallSideEffect : ~m? -# 293| v293_5(void) = ^IndirectReadSideEffect[-1] : &:r293_1, ~m? -# 293| mu293_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r293_1 -# 293| r293_7(bool) = Constant[0] : -# 293| v293_8(void) = ConditionalBranch : r293_7 +# 35| Block 91 +# 35| r35_1275(glval) = VariableAddress[x91] : +# 35| mu35_1276(String) = Uninitialized[x91] : &:r35_1275 +# 35| r35_1277(glval) = FunctionAddress[String] : +# 35| v35_1278(void) = Call[String] : func:r35_1277, this:r35_1275 +# 35| mu35_1279(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1275 +# 35| r35_1281(glval) = VariableAddress[x91] : +# 35| r35_1282(glval) = FunctionAddress[~String] : +# 35| v35_1283(void) = Call[~String] : func:r35_1282, this:r35_1281 +# 35| mu35_1284(unknown) = ^CallSideEffect : ~m? +# 35| v35_1285(void) = ^IndirectReadSideEffect[-1] : &:r35_1281, ~m? +# 35| mu35_1286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1281 +# 35| r35_1287(bool) = Constant[0] : +# 35| v35_1288(void) = ConditionalBranch : r35_1287 #-----| False -> Block 92 #-----| True -> Block 1026 -# 295| Block 92 -# 295| r295_1(glval) = VariableAddress[x92] : -# 295| mu295_2(String) = Uninitialized[x92] : &:r295_1 -# 295| r295_3(glval) = FunctionAddress[String] : -# 295| v295_4(void) = Call[String] : func:r295_3, this:r295_1 -# 295| mu295_5(unknown) = ^CallSideEffect : ~m? -# 295| mu295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r295_1 -# 296| r296_1(glval) = VariableAddress[x92] : -# 296| r296_2(glval) = FunctionAddress[~String] : -# 296| v296_3(void) = Call[~String] : func:r296_2, this:r296_1 -# 296| mu296_4(unknown) = ^CallSideEffect : ~m? -# 296| v296_5(void) = ^IndirectReadSideEffect[-1] : &:r296_1, ~m? -# 296| mu296_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r296_1 -# 296| r296_7(bool) = Constant[0] : -# 296| v296_8(void) = ConditionalBranch : r296_7 +# 35| Block 92 +# 35| r35_1289(glval) = VariableAddress[x92] : +# 35| mu35_1290(String) = Uninitialized[x92] : &:r35_1289 +# 35| r35_1291(glval) = FunctionAddress[String] : +# 35| v35_1292(void) = Call[String] : func:r35_1291, this:r35_1289 +# 35| mu35_1293(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1289 +# 35| r35_1295(glval) = VariableAddress[x92] : +# 35| r35_1296(glval) = FunctionAddress[~String] : +# 35| v35_1297(void) = Call[~String] : func:r35_1296, this:r35_1295 +# 35| mu35_1298(unknown) = ^CallSideEffect : ~m? +# 35| v35_1299(void) = ^IndirectReadSideEffect[-1] : &:r35_1295, ~m? +# 35| mu35_1300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1295 +# 35| r35_1301(bool) = Constant[0] : +# 35| v35_1302(void) = ConditionalBranch : r35_1301 #-----| False -> Block 93 #-----| True -> Block 1026 -# 298| Block 93 -# 298| r298_1(glval) = VariableAddress[x93] : -# 298| mu298_2(String) = Uninitialized[x93] : &:r298_1 -# 298| r298_3(glval) = FunctionAddress[String] : -# 298| v298_4(void) = Call[String] : func:r298_3, this:r298_1 -# 298| mu298_5(unknown) = ^CallSideEffect : ~m? -# 298| mu298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r298_1 -# 299| r299_1(glval) = VariableAddress[x93] : -# 299| r299_2(glval) = FunctionAddress[~String] : -# 299| v299_3(void) = Call[~String] : func:r299_2, this:r299_1 -# 299| mu299_4(unknown) = ^CallSideEffect : ~m? -# 299| v299_5(void) = ^IndirectReadSideEffect[-1] : &:r299_1, ~m? -# 299| mu299_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r299_1 -# 299| r299_7(bool) = Constant[0] : -# 299| v299_8(void) = ConditionalBranch : r299_7 +# 35| Block 93 +# 35| r35_1303(glval) = VariableAddress[x93] : +# 35| mu35_1304(String) = Uninitialized[x93] : &:r35_1303 +# 35| r35_1305(glval) = FunctionAddress[String] : +# 35| v35_1306(void) = Call[String] : func:r35_1305, this:r35_1303 +# 35| mu35_1307(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1303 +# 35| r35_1309(glval) = VariableAddress[x93] : +# 35| r35_1310(glval) = FunctionAddress[~String] : +# 35| v35_1311(void) = Call[~String] : func:r35_1310, this:r35_1309 +# 35| mu35_1312(unknown) = ^CallSideEffect : ~m? +# 35| v35_1313(void) = ^IndirectReadSideEffect[-1] : &:r35_1309, ~m? +# 35| mu35_1314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1309 +# 35| r35_1315(bool) = Constant[0] : +# 35| v35_1316(void) = ConditionalBranch : r35_1315 #-----| False -> Block 94 #-----| True -> Block 1026 -# 301| Block 94 -# 301| r301_1(glval) = VariableAddress[x94] : -# 301| mu301_2(String) = Uninitialized[x94] : &:r301_1 -# 301| r301_3(glval) = FunctionAddress[String] : -# 301| v301_4(void) = Call[String] : func:r301_3, this:r301_1 -# 301| mu301_5(unknown) = ^CallSideEffect : ~m? -# 301| mu301_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r301_1 -# 302| r302_1(glval) = VariableAddress[x94] : -# 302| r302_2(glval) = FunctionAddress[~String] : -# 302| v302_3(void) = Call[~String] : func:r302_2, this:r302_1 -# 302| mu302_4(unknown) = ^CallSideEffect : ~m? -# 302| v302_5(void) = ^IndirectReadSideEffect[-1] : &:r302_1, ~m? -# 302| mu302_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r302_1 -# 302| r302_7(bool) = Constant[0] : -# 302| v302_8(void) = ConditionalBranch : r302_7 +# 35| Block 94 +# 35| r35_1317(glval) = VariableAddress[x94] : +# 35| mu35_1318(String) = Uninitialized[x94] : &:r35_1317 +# 35| r35_1319(glval) = FunctionAddress[String] : +# 35| v35_1320(void) = Call[String] : func:r35_1319, this:r35_1317 +# 35| mu35_1321(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1317 +# 35| r35_1323(glval) = VariableAddress[x94] : +# 35| r35_1324(glval) = FunctionAddress[~String] : +# 35| v35_1325(void) = Call[~String] : func:r35_1324, this:r35_1323 +# 35| mu35_1326(unknown) = ^CallSideEffect : ~m? +# 35| v35_1327(void) = ^IndirectReadSideEffect[-1] : &:r35_1323, ~m? +# 35| mu35_1328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1323 +# 35| r35_1329(bool) = Constant[0] : +# 35| v35_1330(void) = ConditionalBranch : r35_1329 #-----| False -> Block 95 #-----| True -> Block 1026 -# 304| Block 95 -# 304| r304_1(glval) = VariableAddress[x95] : -# 304| mu304_2(String) = Uninitialized[x95] : &:r304_1 -# 304| r304_3(glval) = FunctionAddress[String] : -# 304| v304_4(void) = Call[String] : func:r304_3, this:r304_1 -# 304| mu304_5(unknown) = ^CallSideEffect : ~m? -# 304| mu304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r304_1 -# 305| r305_1(glval) = VariableAddress[x95] : -# 305| r305_2(glval) = FunctionAddress[~String] : -# 305| v305_3(void) = Call[~String] : func:r305_2, this:r305_1 -# 305| mu305_4(unknown) = ^CallSideEffect : ~m? -# 305| v305_5(void) = ^IndirectReadSideEffect[-1] : &:r305_1, ~m? -# 305| mu305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r305_1 -# 305| r305_7(bool) = Constant[0] : -# 305| v305_8(void) = ConditionalBranch : r305_7 +# 35| Block 95 +# 35| r35_1331(glval) = VariableAddress[x95] : +# 35| mu35_1332(String) = Uninitialized[x95] : &:r35_1331 +# 35| r35_1333(glval) = FunctionAddress[String] : +# 35| v35_1334(void) = Call[String] : func:r35_1333, this:r35_1331 +# 35| mu35_1335(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1331 +# 35| r35_1337(glval) = VariableAddress[x95] : +# 35| r35_1338(glval) = FunctionAddress[~String] : +# 35| v35_1339(void) = Call[~String] : func:r35_1338, this:r35_1337 +# 35| mu35_1340(unknown) = ^CallSideEffect : ~m? +# 35| v35_1341(void) = ^IndirectReadSideEffect[-1] : &:r35_1337, ~m? +# 35| mu35_1342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1337 +# 35| r35_1343(bool) = Constant[0] : +# 35| v35_1344(void) = ConditionalBranch : r35_1343 #-----| False -> Block 96 #-----| True -> Block 1026 -# 307| Block 96 -# 307| r307_1(glval) = VariableAddress[x96] : -# 307| mu307_2(String) = Uninitialized[x96] : &:r307_1 -# 307| r307_3(glval) = FunctionAddress[String] : -# 307| v307_4(void) = Call[String] : func:r307_3, this:r307_1 -# 307| mu307_5(unknown) = ^CallSideEffect : ~m? -# 307| mu307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r307_1 -# 308| r308_1(glval) = VariableAddress[x96] : -# 308| r308_2(glval) = FunctionAddress[~String] : -# 308| v308_3(void) = Call[~String] : func:r308_2, this:r308_1 -# 308| mu308_4(unknown) = ^CallSideEffect : ~m? -# 308| v308_5(void) = ^IndirectReadSideEffect[-1] : &:r308_1, ~m? -# 308| mu308_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r308_1 -# 308| r308_7(bool) = Constant[0] : -# 308| v308_8(void) = ConditionalBranch : r308_7 +# 35| Block 96 +# 35| r35_1345(glval) = VariableAddress[x96] : +# 35| mu35_1346(String) = Uninitialized[x96] : &:r35_1345 +# 35| r35_1347(glval) = FunctionAddress[String] : +# 35| v35_1348(void) = Call[String] : func:r35_1347, this:r35_1345 +# 35| mu35_1349(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1345 +# 35| r35_1351(glval) = VariableAddress[x96] : +# 35| r35_1352(glval) = FunctionAddress[~String] : +# 35| v35_1353(void) = Call[~String] : func:r35_1352, this:r35_1351 +# 35| mu35_1354(unknown) = ^CallSideEffect : ~m? +# 35| v35_1355(void) = ^IndirectReadSideEffect[-1] : &:r35_1351, ~m? +# 35| mu35_1356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1351 +# 35| r35_1357(bool) = Constant[0] : +# 35| v35_1358(void) = ConditionalBranch : r35_1357 #-----| False -> Block 97 #-----| True -> Block 1026 -# 310| Block 97 -# 310| r310_1(glval) = VariableAddress[x97] : -# 310| mu310_2(String) = Uninitialized[x97] : &:r310_1 -# 310| r310_3(glval) = FunctionAddress[String] : -# 310| v310_4(void) = Call[String] : func:r310_3, this:r310_1 -# 310| mu310_5(unknown) = ^CallSideEffect : ~m? -# 310| mu310_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r310_1 -# 311| r311_1(glval) = VariableAddress[x97] : -# 311| r311_2(glval) = FunctionAddress[~String] : -# 311| v311_3(void) = Call[~String] : func:r311_2, this:r311_1 -# 311| mu311_4(unknown) = ^CallSideEffect : ~m? -# 311| v311_5(void) = ^IndirectReadSideEffect[-1] : &:r311_1, ~m? -# 311| mu311_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r311_1 -# 311| r311_7(bool) = Constant[0] : -# 311| v311_8(void) = ConditionalBranch : r311_7 +# 35| Block 97 +# 35| r35_1359(glval) = VariableAddress[x97] : +# 35| mu35_1360(String) = Uninitialized[x97] : &:r35_1359 +# 35| r35_1361(glval) = FunctionAddress[String] : +# 35| v35_1362(void) = Call[String] : func:r35_1361, this:r35_1359 +# 35| mu35_1363(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1359 +# 35| r35_1365(glval) = VariableAddress[x97] : +# 35| r35_1366(glval) = FunctionAddress[~String] : +# 35| v35_1367(void) = Call[~String] : func:r35_1366, this:r35_1365 +# 35| mu35_1368(unknown) = ^CallSideEffect : ~m? +# 35| v35_1369(void) = ^IndirectReadSideEffect[-1] : &:r35_1365, ~m? +# 35| mu35_1370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1365 +# 35| r35_1371(bool) = Constant[0] : +# 35| v35_1372(void) = ConditionalBranch : r35_1371 #-----| False -> Block 98 #-----| True -> Block 1026 -# 313| Block 98 -# 313| r313_1(glval) = VariableAddress[x98] : -# 313| mu313_2(String) = Uninitialized[x98] : &:r313_1 -# 313| r313_3(glval) = FunctionAddress[String] : -# 313| v313_4(void) = Call[String] : func:r313_3, this:r313_1 -# 313| mu313_5(unknown) = ^CallSideEffect : ~m? -# 313| mu313_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r313_1 -# 314| r314_1(glval) = VariableAddress[x98] : -# 314| r314_2(glval) = FunctionAddress[~String] : -# 314| v314_3(void) = Call[~String] : func:r314_2, this:r314_1 -# 314| mu314_4(unknown) = ^CallSideEffect : ~m? -# 314| v314_5(void) = ^IndirectReadSideEffect[-1] : &:r314_1, ~m? -# 314| mu314_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r314_1 -# 314| r314_7(bool) = Constant[0] : -# 314| v314_8(void) = ConditionalBranch : r314_7 +# 35| Block 98 +# 35| r35_1373(glval) = VariableAddress[x98] : +# 35| mu35_1374(String) = Uninitialized[x98] : &:r35_1373 +# 35| r35_1375(glval) = FunctionAddress[String] : +# 35| v35_1376(void) = Call[String] : func:r35_1375, this:r35_1373 +# 35| mu35_1377(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1373 +# 35| r35_1379(glval) = VariableAddress[x98] : +# 35| r35_1380(glval) = FunctionAddress[~String] : +# 35| v35_1381(void) = Call[~String] : func:r35_1380, this:r35_1379 +# 35| mu35_1382(unknown) = ^CallSideEffect : ~m? +# 35| v35_1383(void) = ^IndirectReadSideEffect[-1] : &:r35_1379, ~m? +# 35| mu35_1384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1379 +# 35| r35_1385(bool) = Constant[0] : +# 35| v35_1386(void) = ConditionalBranch : r35_1385 #-----| False -> Block 99 #-----| True -> Block 1026 -# 316| Block 99 -# 316| r316_1(glval) = VariableAddress[x99] : -# 316| mu316_2(String) = Uninitialized[x99] : &:r316_1 -# 316| r316_3(glval) = FunctionAddress[String] : -# 316| v316_4(void) = Call[String] : func:r316_3, this:r316_1 -# 316| mu316_5(unknown) = ^CallSideEffect : ~m? -# 316| mu316_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r316_1 -# 317| r317_1(glval) = VariableAddress[x99] : -# 317| r317_2(glval) = FunctionAddress[~String] : -# 317| v317_3(void) = Call[~String] : func:r317_2, this:r317_1 -# 317| mu317_4(unknown) = ^CallSideEffect : ~m? -# 317| v317_5(void) = ^IndirectReadSideEffect[-1] : &:r317_1, ~m? -# 317| mu317_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r317_1 -# 317| r317_7(bool) = Constant[0] : -# 317| v317_8(void) = ConditionalBranch : r317_7 +# 35| Block 99 +# 35| r35_1387(glval) = VariableAddress[x99] : +# 35| mu35_1388(String) = Uninitialized[x99] : &:r35_1387 +# 35| r35_1389(glval) = FunctionAddress[String] : +# 35| v35_1390(void) = Call[String] : func:r35_1389, this:r35_1387 +# 35| mu35_1391(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1387 +# 35| r35_1393(glval) = VariableAddress[x99] : +# 35| r35_1394(glval) = FunctionAddress[~String] : +# 35| v35_1395(void) = Call[~String] : func:r35_1394, this:r35_1393 +# 35| mu35_1396(unknown) = ^CallSideEffect : ~m? +# 35| v35_1397(void) = ^IndirectReadSideEffect[-1] : &:r35_1393, ~m? +# 35| mu35_1398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1393 +# 35| r35_1399(bool) = Constant[0] : +# 35| v35_1400(void) = ConditionalBranch : r35_1399 #-----| False -> Block 100 #-----| True -> Block 1026 -# 319| Block 100 -# 319| r319_1(glval) = VariableAddress[x100] : -# 319| mu319_2(String) = Uninitialized[x100] : &:r319_1 -# 319| r319_3(glval) = FunctionAddress[String] : -# 319| v319_4(void) = Call[String] : func:r319_3, this:r319_1 -# 319| mu319_5(unknown) = ^CallSideEffect : ~m? -# 319| mu319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r319_1 -# 320| r320_1(glval) = VariableAddress[x100] : -# 320| r320_2(glval) = FunctionAddress[~String] : -# 320| v320_3(void) = Call[~String] : func:r320_2, this:r320_1 -# 320| mu320_4(unknown) = ^CallSideEffect : ~m? -# 320| v320_5(void) = ^IndirectReadSideEffect[-1] : &:r320_1, ~m? -# 320| mu320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r320_1 -# 320| r320_7(bool) = Constant[0] : -# 320| v320_8(void) = ConditionalBranch : r320_7 +# 35| Block 100 +# 35| r35_1401(glval) = VariableAddress[x100] : +# 35| mu35_1402(String) = Uninitialized[x100] : &:r35_1401 +# 35| r35_1403(glval) = FunctionAddress[String] : +# 35| v35_1404(void) = Call[String] : func:r35_1403, this:r35_1401 +# 35| mu35_1405(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1401 +# 35| r35_1407(glval) = VariableAddress[x100] : +# 35| r35_1408(glval) = FunctionAddress[~String] : +# 35| v35_1409(void) = Call[~String] : func:r35_1408, this:r35_1407 +# 35| mu35_1410(unknown) = ^CallSideEffect : ~m? +# 35| v35_1411(void) = ^IndirectReadSideEffect[-1] : &:r35_1407, ~m? +# 35| mu35_1412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1407 +# 35| r35_1413(bool) = Constant[0] : +# 35| v35_1414(void) = ConditionalBranch : r35_1413 #-----| False -> Block 101 #-----| True -> Block 1026 -# 322| Block 101 -# 322| r322_1(glval) = VariableAddress[x101] : -# 322| mu322_2(String) = Uninitialized[x101] : &:r322_1 -# 322| r322_3(glval) = FunctionAddress[String] : -# 322| v322_4(void) = Call[String] : func:r322_3, this:r322_1 -# 322| mu322_5(unknown) = ^CallSideEffect : ~m? -# 322| mu322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r322_1 -# 323| r323_1(glval) = VariableAddress[x101] : -# 323| r323_2(glval) = FunctionAddress[~String] : -# 323| v323_3(void) = Call[~String] : func:r323_2, this:r323_1 -# 323| mu323_4(unknown) = ^CallSideEffect : ~m? -# 323| v323_5(void) = ^IndirectReadSideEffect[-1] : &:r323_1, ~m? -# 323| mu323_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r323_1 -# 323| r323_7(bool) = Constant[0] : -# 323| v323_8(void) = ConditionalBranch : r323_7 +# 35| Block 101 +# 35| r35_1415(glval) = VariableAddress[x101] : +# 35| mu35_1416(String) = Uninitialized[x101] : &:r35_1415 +# 35| r35_1417(glval) = FunctionAddress[String] : +# 35| v35_1418(void) = Call[String] : func:r35_1417, this:r35_1415 +# 35| mu35_1419(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1415 +# 35| r35_1421(glval) = VariableAddress[x101] : +# 35| r35_1422(glval) = FunctionAddress[~String] : +# 35| v35_1423(void) = Call[~String] : func:r35_1422, this:r35_1421 +# 35| mu35_1424(unknown) = ^CallSideEffect : ~m? +# 35| v35_1425(void) = ^IndirectReadSideEffect[-1] : &:r35_1421, ~m? +# 35| mu35_1426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1421 +# 35| r35_1427(bool) = Constant[0] : +# 35| v35_1428(void) = ConditionalBranch : r35_1427 #-----| False -> Block 102 #-----| True -> Block 1026 -# 325| Block 102 -# 325| r325_1(glval) = VariableAddress[x102] : -# 325| mu325_2(String) = Uninitialized[x102] : &:r325_1 -# 325| r325_3(glval) = FunctionAddress[String] : -# 325| v325_4(void) = Call[String] : func:r325_3, this:r325_1 -# 325| mu325_5(unknown) = ^CallSideEffect : ~m? -# 325| mu325_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r325_1 -# 326| r326_1(glval) = VariableAddress[x102] : -# 326| r326_2(glval) = FunctionAddress[~String] : -# 326| v326_3(void) = Call[~String] : func:r326_2, this:r326_1 -# 326| mu326_4(unknown) = ^CallSideEffect : ~m? -# 326| v326_5(void) = ^IndirectReadSideEffect[-1] : &:r326_1, ~m? -# 326| mu326_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r326_1 -# 326| r326_7(bool) = Constant[0] : -# 326| v326_8(void) = ConditionalBranch : r326_7 +# 35| Block 102 +# 35| r35_1429(glval) = VariableAddress[x102] : +# 35| mu35_1430(String) = Uninitialized[x102] : &:r35_1429 +# 35| r35_1431(glval) = FunctionAddress[String] : +# 35| v35_1432(void) = Call[String] : func:r35_1431, this:r35_1429 +# 35| mu35_1433(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1429 +# 35| r35_1435(glval) = VariableAddress[x102] : +# 35| r35_1436(glval) = FunctionAddress[~String] : +# 35| v35_1437(void) = Call[~String] : func:r35_1436, this:r35_1435 +# 35| mu35_1438(unknown) = ^CallSideEffect : ~m? +# 35| v35_1439(void) = ^IndirectReadSideEffect[-1] : &:r35_1435, ~m? +# 35| mu35_1440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1435 +# 35| r35_1441(bool) = Constant[0] : +# 35| v35_1442(void) = ConditionalBranch : r35_1441 #-----| False -> Block 103 #-----| True -> Block 1026 -# 328| Block 103 -# 328| r328_1(glval) = VariableAddress[x103] : -# 328| mu328_2(String) = Uninitialized[x103] : &:r328_1 -# 328| r328_3(glval) = FunctionAddress[String] : -# 328| v328_4(void) = Call[String] : func:r328_3, this:r328_1 -# 328| mu328_5(unknown) = ^CallSideEffect : ~m? -# 328| mu328_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r328_1 -# 329| r329_1(glval) = VariableAddress[x103] : -# 329| r329_2(glval) = FunctionAddress[~String] : -# 329| v329_3(void) = Call[~String] : func:r329_2, this:r329_1 -# 329| mu329_4(unknown) = ^CallSideEffect : ~m? -# 329| v329_5(void) = ^IndirectReadSideEffect[-1] : &:r329_1, ~m? -# 329| mu329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r329_1 -# 329| r329_7(bool) = Constant[0] : -# 329| v329_8(void) = ConditionalBranch : r329_7 +# 35| Block 103 +# 35| r35_1443(glval) = VariableAddress[x103] : +# 35| mu35_1444(String) = Uninitialized[x103] : &:r35_1443 +# 35| r35_1445(glval) = FunctionAddress[String] : +# 35| v35_1446(void) = Call[String] : func:r35_1445, this:r35_1443 +# 35| mu35_1447(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1443 +# 35| r35_1449(glval) = VariableAddress[x103] : +# 35| r35_1450(glval) = FunctionAddress[~String] : +# 35| v35_1451(void) = Call[~String] : func:r35_1450, this:r35_1449 +# 35| mu35_1452(unknown) = ^CallSideEffect : ~m? +# 35| v35_1453(void) = ^IndirectReadSideEffect[-1] : &:r35_1449, ~m? +# 35| mu35_1454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1449 +# 35| r35_1455(bool) = Constant[0] : +# 35| v35_1456(void) = ConditionalBranch : r35_1455 #-----| False -> Block 104 #-----| True -> Block 1026 -# 331| Block 104 -# 331| r331_1(glval) = VariableAddress[x104] : -# 331| mu331_2(String) = Uninitialized[x104] : &:r331_1 -# 331| r331_3(glval) = FunctionAddress[String] : -# 331| v331_4(void) = Call[String] : func:r331_3, this:r331_1 -# 331| mu331_5(unknown) = ^CallSideEffect : ~m? -# 331| mu331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r331_1 -# 332| r332_1(glval) = VariableAddress[x104] : -# 332| r332_2(glval) = FunctionAddress[~String] : -# 332| v332_3(void) = Call[~String] : func:r332_2, this:r332_1 -# 332| mu332_4(unknown) = ^CallSideEffect : ~m? -# 332| v332_5(void) = ^IndirectReadSideEffect[-1] : &:r332_1, ~m? -# 332| mu332_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r332_1 -# 332| r332_7(bool) = Constant[0] : -# 332| v332_8(void) = ConditionalBranch : r332_7 +# 35| Block 104 +# 35| r35_1457(glval) = VariableAddress[x104] : +# 35| mu35_1458(String) = Uninitialized[x104] : &:r35_1457 +# 35| r35_1459(glval) = FunctionAddress[String] : +# 35| v35_1460(void) = Call[String] : func:r35_1459, this:r35_1457 +# 35| mu35_1461(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1457 +# 35| r35_1463(glval) = VariableAddress[x104] : +# 35| r35_1464(glval) = FunctionAddress[~String] : +# 35| v35_1465(void) = Call[~String] : func:r35_1464, this:r35_1463 +# 35| mu35_1466(unknown) = ^CallSideEffect : ~m? +# 35| v35_1467(void) = ^IndirectReadSideEffect[-1] : &:r35_1463, ~m? +# 35| mu35_1468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1463 +# 35| r35_1469(bool) = Constant[0] : +# 35| v35_1470(void) = ConditionalBranch : r35_1469 #-----| False -> Block 105 #-----| True -> Block 1026 -# 334| Block 105 -# 334| r334_1(glval) = VariableAddress[x105] : -# 334| mu334_2(String) = Uninitialized[x105] : &:r334_1 -# 334| r334_3(glval) = FunctionAddress[String] : -# 334| v334_4(void) = Call[String] : func:r334_3, this:r334_1 -# 334| mu334_5(unknown) = ^CallSideEffect : ~m? -# 334| mu334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r334_1 -# 335| r335_1(glval) = VariableAddress[x105] : -# 335| r335_2(glval) = FunctionAddress[~String] : -# 335| v335_3(void) = Call[~String] : func:r335_2, this:r335_1 -# 335| mu335_4(unknown) = ^CallSideEffect : ~m? -# 335| v335_5(void) = ^IndirectReadSideEffect[-1] : &:r335_1, ~m? -# 335| mu335_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r335_1 -# 335| r335_7(bool) = Constant[0] : -# 335| v335_8(void) = ConditionalBranch : r335_7 +# 35| Block 105 +# 35| r35_1471(glval) = VariableAddress[x105] : +# 35| mu35_1472(String) = Uninitialized[x105] : &:r35_1471 +# 35| r35_1473(glval) = FunctionAddress[String] : +# 35| v35_1474(void) = Call[String] : func:r35_1473, this:r35_1471 +# 35| mu35_1475(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1471 +# 35| r35_1477(glval) = VariableAddress[x105] : +# 35| r35_1478(glval) = FunctionAddress[~String] : +# 35| v35_1479(void) = Call[~String] : func:r35_1478, this:r35_1477 +# 35| mu35_1480(unknown) = ^CallSideEffect : ~m? +# 35| v35_1481(void) = ^IndirectReadSideEffect[-1] : &:r35_1477, ~m? +# 35| mu35_1482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1477 +# 35| r35_1483(bool) = Constant[0] : +# 35| v35_1484(void) = ConditionalBranch : r35_1483 #-----| False -> Block 106 #-----| True -> Block 1026 -# 337| Block 106 -# 337| r337_1(glval) = VariableAddress[x106] : -# 337| mu337_2(String) = Uninitialized[x106] : &:r337_1 -# 337| r337_3(glval) = FunctionAddress[String] : -# 337| v337_4(void) = Call[String] : func:r337_3, this:r337_1 -# 337| mu337_5(unknown) = ^CallSideEffect : ~m? -# 337| mu337_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r337_1 -# 338| r338_1(glval) = VariableAddress[x106] : -# 338| r338_2(glval) = FunctionAddress[~String] : -# 338| v338_3(void) = Call[~String] : func:r338_2, this:r338_1 -# 338| mu338_4(unknown) = ^CallSideEffect : ~m? -# 338| v338_5(void) = ^IndirectReadSideEffect[-1] : &:r338_1, ~m? -# 338| mu338_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r338_1 -# 338| r338_7(bool) = Constant[0] : -# 338| v338_8(void) = ConditionalBranch : r338_7 +# 35| Block 106 +# 35| r35_1485(glval) = VariableAddress[x106] : +# 35| mu35_1486(String) = Uninitialized[x106] : &:r35_1485 +# 35| r35_1487(glval) = FunctionAddress[String] : +# 35| v35_1488(void) = Call[String] : func:r35_1487, this:r35_1485 +# 35| mu35_1489(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1485 +# 35| r35_1491(glval) = VariableAddress[x106] : +# 35| r35_1492(glval) = FunctionAddress[~String] : +# 35| v35_1493(void) = Call[~String] : func:r35_1492, this:r35_1491 +# 35| mu35_1494(unknown) = ^CallSideEffect : ~m? +# 35| v35_1495(void) = ^IndirectReadSideEffect[-1] : &:r35_1491, ~m? +# 35| mu35_1496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1491 +# 35| r35_1497(bool) = Constant[0] : +# 35| v35_1498(void) = ConditionalBranch : r35_1497 #-----| False -> Block 107 #-----| True -> Block 1026 -# 340| Block 107 -# 340| r340_1(glval) = VariableAddress[x107] : -# 340| mu340_2(String) = Uninitialized[x107] : &:r340_1 -# 340| r340_3(glval) = FunctionAddress[String] : -# 340| v340_4(void) = Call[String] : func:r340_3, this:r340_1 -# 340| mu340_5(unknown) = ^CallSideEffect : ~m? -# 340| mu340_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r340_1 -# 341| r341_1(glval) = VariableAddress[x107] : -# 341| r341_2(glval) = FunctionAddress[~String] : -# 341| v341_3(void) = Call[~String] : func:r341_2, this:r341_1 -# 341| mu341_4(unknown) = ^CallSideEffect : ~m? -# 341| v341_5(void) = ^IndirectReadSideEffect[-1] : &:r341_1, ~m? -# 341| mu341_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r341_1 -# 341| r341_7(bool) = Constant[0] : -# 341| v341_8(void) = ConditionalBranch : r341_7 +# 35| Block 107 +# 35| r35_1499(glval) = VariableAddress[x107] : +# 35| mu35_1500(String) = Uninitialized[x107] : &:r35_1499 +# 35| r35_1501(glval) = FunctionAddress[String] : +# 35| v35_1502(void) = Call[String] : func:r35_1501, this:r35_1499 +# 35| mu35_1503(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1499 +# 35| r35_1505(glval) = VariableAddress[x107] : +# 35| r35_1506(glval) = FunctionAddress[~String] : +# 35| v35_1507(void) = Call[~String] : func:r35_1506, this:r35_1505 +# 35| mu35_1508(unknown) = ^CallSideEffect : ~m? +# 35| v35_1509(void) = ^IndirectReadSideEffect[-1] : &:r35_1505, ~m? +# 35| mu35_1510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1505 +# 35| r35_1511(bool) = Constant[0] : +# 35| v35_1512(void) = ConditionalBranch : r35_1511 #-----| False -> Block 108 #-----| True -> Block 1026 -# 343| Block 108 -# 343| r343_1(glval) = VariableAddress[x108] : -# 343| mu343_2(String) = Uninitialized[x108] : &:r343_1 -# 343| r343_3(glval) = FunctionAddress[String] : -# 343| v343_4(void) = Call[String] : func:r343_3, this:r343_1 -# 343| mu343_5(unknown) = ^CallSideEffect : ~m? -# 343| mu343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r343_1 -# 344| r344_1(glval) = VariableAddress[x108] : -# 344| r344_2(glval) = FunctionAddress[~String] : -# 344| v344_3(void) = Call[~String] : func:r344_2, this:r344_1 -# 344| mu344_4(unknown) = ^CallSideEffect : ~m? -# 344| v344_5(void) = ^IndirectReadSideEffect[-1] : &:r344_1, ~m? -# 344| mu344_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r344_1 -# 344| r344_7(bool) = Constant[0] : -# 344| v344_8(void) = ConditionalBranch : r344_7 +# 35| Block 108 +# 35| r35_1513(glval) = VariableAddress[x108] : +# 35| mu35_1514(String) = Uninitialized[x108] : &:r35_1513 +# 35| r35_1515(glval) = FunctionAddress[String] : +# 35| v35_1516(void) = Call[String] : func:r35_1515, this:r35_1513 +# 35| mu35_1517(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1513 +# 35| r35_1519(glval) = VariableAddress[x108] : +# 35| r35_1520(glval) = FunctionAddress[~String] : +# 35| v35_1521(void) = Call[~String] : func:r35_1520, this:r35_1519 +# 35| mu35_1522(unknown) = ^CallSideEffect : ~m? +# 35| v35_1523(void) = ^IndirectReadSideEffect[-1] : &:r35_1519, ~m? +# 35| mu35_1524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1519 +# 35| r35_1525(bool) = Constant[0] : +# 35| v35_1526(void) = ConditionalBranch : r35_1525 #-----| False -> Block 109 #-----| True -> Block 1026 -# 346| Block 109 -# 346| r346_1(glval) = VariableAddress[x109] : -# 346| mu346_2(String) = Uninitialized[x109] : &:r346_1 -# 346| r346_3(glval) = FunctionAddress[String] : -# 346| v346_4(void) = Call[String] : func:r346_3, this:r346_1 -# 346| mu346_5(unknown) = ^CallSideEffect : ~m? -# 346| mu346_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r346_1 -# 347| r347_1(glval) = VariableAddress[x109] : -# 347| r347_2(glval) = FunctionAddress[~String] : -# 347| v347_3(void) = Call[~String] : func:r347_2, this:r347_1 -# 347| mu347_4(unknown) = ^CallSideEffect : ~m? -# 347| v347_5(void) = ^IndirectReadSideEffect[-1] : &:r347_1, ~m? -# 347| mu347_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r347_1 -# 347| r347_7(bool) = Constant[0] : -# 347| v347_8(void) = ConditionalBranch : r347_7 +# 35| Block 109 +# 35| r35_1527(glval) = VariableAddress[x109] : +# 35| mu35_1528(String) = Uninitialized[x109] : &:r35_1527 +# 35| r35_1529(glval) = FunctionAddress[String] : +# 35| v35_1530(void) = Call[String] : func:r35_1529, this:r35_1527 +# 35| mu35_1531(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1527 +# 35| r35_1533(glval) = VariableAddress[x109] : +# 35| r35_1534(glval) = FunctionAddress[~String] : +# 35| v35_1535(void) = Call[~String] : func:r35_1534, this:r35_1533 +# 35| mu35_1536(unknown) = ^CallSideEffect : ~m? +# 35| v35_1537(void) = ^IndirectReadSideEffect[-1] : &:r35_1533, ~m? +# 35| mu35_1538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1533 +# 35| r35_1539(bool) = Constant[0] : +# 35| v35_1540(void) = ConditionalBranch : r35_1539 #-----| False -> Block 110 #-----| True -> Block 1026 -# 349| Block 110 -# 349| r349_1(glval) = VariableAddress[x110] : -# 349| mu349_2(String) = Uninitialized[x110] : &:r349_1 -# 349| r349_3(glval) = FunctionAddress[String] : -# 349| v349_4(void) = Call[String] : func:r349_3, this:r349_1 -# 349| mu349_5(unknown) = ^CallSideEffect : ~m? -# 349| mu349_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r349_1 -# 350| r350_1(glval) = VariableAddress[x110] : -# 350| r350_2(glval) = FunctionAddress[~String] : -# 350| v350_3(void) = Call[~String] : func:r350_2, this:r350_1 -# 350| mu350_4(unknown) = ^CallSideEffect : ~m? -# 350| v350_5(void) = ^IndirectReadSideEffect[-1] : &:r350_1, ~m? -# 350| mu350_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r350_1 -# 350| r350_7(bool) = Constant[0] : -# 350| v350_8(void) = ConditionalBranch : r350_7 +# 35| Block 110 +# 35| r35_1541(glval) = VariableAddress[x110] : +# 35| mu35_1542(String) = Uninitialized[x110] : &:r35_1541 +# 35| r35_1543(glval) = FunctionAddress[String] : +# 35| v35_1544(void) = Call[String] : func:r35_1543, this:r35_1541 +# 35| mu35_1545(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1541 +# 35| r35_1547(glval) = VariableAddress[x110] : +# 35| r35_1548(glval) = FunctionAddress[~String] : +# 35| v35_1549(void) = Call[~String] : func:r35_1548, this:r35_1547 +# 35| mu35_1550(unknown) = ^CallSideEffect : ~m? +# 35| v35_1551(void) = ^IndirectReadSideEffect[-1] : &:r35_1547, ~m? +# 35| mu35_1552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1547 +# 35| r35_1553(bool) = Constant[0] : +# 35| v35_1554(void) = ConditionalBranch : r35_1553 #-----| False -> Block 111 #-----| True -> Block 1026 -# 352| Block 111 -# 352| r352_1(glval) = VariableAddress[x111] : -# 352| mu352_2(String) = Uninitialized[x111] : &:r352_1 -# 352| r352_3(glval) = FunctionAddress[String] : -# 352| v352_4(void) = Call[String] : func:r352_3, this:r352_1 -# 352| mu352_5(unknown) = ^CallSideEffect : ~m? -# 352| mu352_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r352_1 -# 353| r353_1(glval) = VariableAddress[x111] : -# 353| r353_2(glval) = FunctionAddress[~String] : -# 353| v353_3(void) = Call[~String] : func:r353_2, this:r353_1 -# 353| mu353_4(unknown) = ^CallSideEffect : ~m? -# 353| v353_5(void) = ^IndirectReadSideEffect[-1] : &:r353_1, ~m? -# 353| mu353_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r353_1 -# 353| r353_7(bool) = Constant[0] : -# 353| v353_8(void) = ConditionalBranch : r353_7 +# 35| Block 111 +# 35| r35_1555(glval) = VariableAddress[x111] : +# 35| mu35_1556(String) = Uninitialized[x111] : &:r35_1555 +# 35| r35_1557(glval) = FunctionAddress[String] : +# 35| v35_1558(void) = Call[String] : func:r35_1557, this:r35_1555 +# 35| mu35_1559(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1555 +# 35| r35_1561(glval) = VariableAddress[x111] : +# 35| r35_1562(glval) = FunctionAddress[~String] : +# 35| v35_1563(void) = Call[~String] : func:r35_1562, this:r35_1561 +# 35| mu35_1564(unknown) = ^CallSideEffect : ~m? +# 35| v35_1565(void) = ^IndirectReadSideEffect[-1] : &:r35_1561, ~m? +# 35| mu35_1566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1561 +# 35| r35_1567(bool) = Constant[0] : +# 35| v35_1568(void) = ConditionalBranch : r35_1567 #-----| False -> Block 112 #-----| True -> Block 1026 -# 355| Block 112 -# 355| r355_1(glval) = VariableAddress[x112] : -# 355| mu355_2(String) = Uninitialized[x112] : &:r355_1 -# 355| r355_3(glval) = FunctionAddress[String] : -# 355| v355_4(void) = Call[String] : func:r355_3, this:r355_1 -# 355| mu355_5(unknown) = ^CallSideEffect : ~m? -# 355| mu355_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r355_1 -# 356| r356_1(glval) = VariableAddress[x112] : -# 356| r356_2(glval) = FunctionAddress[~String] : -# 356| v356_3(void) = Call[~String] : func:r356_2, this:r356_1 -# 356| mu356_4(unknown) = ^CallSideEffect : ~m? -# 356| v356_5(void) = ^IndirectReadSideEffect[-1] : &:r356_1, ~m? -# 356| mu356_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r356_1 -# 356| r356_7(bool) = Constant[0] : -# 356| v356_8(void) = ConditionalBranch : r356_7 +# 35| Block 112 +# 35| r35_1569(glval) = VariableAddress[x112] : +# 35| mu35_1570(String) = Uninitialized[x112] : &:r35_1569 +# 35| r35_1571(glval) = FunctionAddress[String] : +# 35| v35_1572(void) = Call[String] : func:r35_1571, this:r35_1569 +# 35| mu35_1573(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1569 +# 35| r35_1575(glval) = VariableAddress[x112] : +# 35| r35_1576(glval) = FunctionAddress[~String] : +# 35| v35_1577(void) = Call[~String] : func:r35_1576, this:r35_1575 +# 35| mu35_1578(unknown) = ^CallSideEffect : ~m? +# 35| v35_1579(void) = ^IndirectReadSideEffect[-1] : &:r35_1575, ~m? +# 35| mu35_1580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1575 +# 35| r35_1581(bool) = Constant[0] : +# 35| v35_1582(void) = ConditionalBranch : r35_1581 #-----| False -> Block 113 #-----| True -> Block 1026 -# 358| Block 113 -# 358| r358_1(glval) = VariableAddress[x113] : -# 358| mu358_2(String) = Uninitialized[x113] : &:r358_1 -# 358| r358_3(glval) = FunctionAddress[String] : -# 358| v358_4(void) = Call[String] : func:r358_3, this:r358_1 -# 358| mu358_5(unknown) = ^CallSideEffect : ~m? -# 358| mu358_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r358_1 -# 359| r359_1(glval) = VariableAddress[x113] : -# 359| r359_2(glval) = FunctionAddress[~String] : -# 359| v359_3(void) = Call[~String] : func:r359_2, this:r359_1 -# 359| mu359_4(unknown) = ^CallSideEffect : ~m? -# 359| v359_5(void) = ^IndirectReadSideEffect[-1] : &:r359_1, ~m? -# 359| mu359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r359_1 -# 359| r359_7(bool) = Constant[0] : -# 359| v359_8(void) = ConditionalBranch : r359_7 +# 35| Block 113 +# 35| r35_1583(glval) = VariableAddress[x113] : +# 35| mu35_1584(String) = Uninitialized[x113] : &:r35_1583 +# 35| r35_1585(glval) = FunctionAddress[String] : +# 35| v35_1586(void) = Call[String] : func:r35_1585, this:r35_1583 +# 35| mu35_1587(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1583 +# 35| r35_1589(glval) = VariableAddress[x113] : +# 35| r35_1590(glval) = FunctionAddress[~String] : +# 35| v35_1591(void) = Call[~String] : func:r35_1590, this:r35_1589 +# 35| mu35_1592(unknown) = ^CallSideEffect : ~m? +# 35| v35_1593(void) = ^IndirectReadSideEffect[-1] : &:r35_1589, ~m? +# 35| mu35_1594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1589 +# 35| r35_1595(bool) = Constant[0] : +# 35| v35_1596(void) = ConditionalBranch : r35_1595 #-----| False -> Block 114 #-----| True -> Block 1026 -# 361| Block 114 -# 361| r361_1(glval) = VariableAddress[x114] : -# 361| mu361_2(String) = Uninitialized[x114] : &:r361_1 -# 361| r361_3(glval) = FunctionAddress[String] : -# 361| v361_4(void) = Call[String] : func:r361_3, this:r361_1 -# 361| mu361_5(unknown) = ^CallSideEffect : ~m? -# 361| mu361_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r361_1 -# 362| r362_1(glval) = VariableAddress[x114] : -# 362| r362_2(glval) = FunctionAddress[~String] : -# 362| v362_3(void) = Call[~String] : func:r362_2, this:r362_1 -# 362| mu362_4(unknown) = ^CallSideEffect : ~m? -# 362| v362_5(void) = ^IndirectReadSideEffect[-1] : &:r362_1, ~m? -# 362| mu362_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r362_1 -# 362| r362_7(bool) = Constant[0] : -# 362| v362_8(void) = ConditionalBranch : r362_7 +# 35| Block 114 +# 35| r35_1597(glval) = VariableAddress[x114] : +# 35| mu35_1598(String) = Uninitialized[x114] : &:r35_1597 +# 35| r35_1599(glval) = FunctionAddress[String] : +# 35| v35_1600(void) = Call[String] : func:r35_1599, this:r35_1597 +# 35| mu35_1601(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1597 +# 35| r35_1603(glval) = VariableAddress[x114] : +# 35| r35_1604(glval) = FunctionAddress[~String] : +# 35| v35_1605(void) = Call[~String] : func:r35_1604, this:r35_1603 +# 35| mu35_1606(unknown) = ^CallSideEffect : ~m? +# 35| v35_1607(void) = ^IndirectReadSideEffect[-1] : &:r35_1603, ~m? +# 35| mu35_1608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1603 +# 35| r35_1609(bool) = Constant[0] : +# 35| v35_1610(void) = ConditionalBranch : r35_1609 #-----| False -> Block 115 #-----| True -> Block 1026 -# 364| Block 115 -# 364| r364_1(glval) = VariableAddress[x115] : -# 364| mu364_2(String) = Uninitialized[x115] : &:r364_1 -# 364| r364_3(glval) = FunctionAddress[String] : -# 364| v364_4(void) = Call[String] : func:r364_3, this:r364_1 -# 364| mu364_5(unknown) = ^CallSideEffect : ~m? -# 364| mu364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r364_1 -# 365| r365_1(glval) = VariableAddress[x115] : -# 365| r365_2(glval) = FunctionAddress[~String] : -# 365| v365_3(void) = Call[~String] : func:r365_2, this:r365_1 -# 365| mu365_4(unknown) = ^CallSideEffect : ~m? -# 365| v365_5(void) = ^IndirectReadSideEffect[-1] : &:r365_1, ~m? -# 365| mu365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r365_1 -# 365| r365_7(bool) = Constant[0] : -# 365| v365_8(void) = ConditionalBranch : r365_7 +# 35| Block 115 +# 35| r35_1611(glval) = VariableAddress[x115] : +# 35| mu35_1612(String) = Uninitialized[x115] : &:r35_1611 +# 35| r35_1613(glval) = FunctionAddress[String] : +# 35| v35_1614(void) = Call[String] : func:r35_1613, this:r35_1611 +# 35| mu35_1615(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1611 +# 35| r35_1617(glval) = VariableAddress[x115] : +# 35| r35_1618(glval) = FunctionAddress[~String] : +# 35| v35_1619(void) = Call[~String] : func:r35_1618, this:r35_1617 +# 35| mu35_1620(unknown) = ^CallSideEffect : ~m? +# 35| v35_1621(void) = ^IndirectReadSideEffect[-1] : &:r35_1617, ~m? +# 35| mu35_1622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1617 +# 35| r35_1623(bool) = Constant[0] : +# 35| v35_1624(void) = ConditionalBranch : r35_1623 #-----| False -> Block 116 #-----| True -> Block 1026 -# 367| Block 116 -# 367| r367_1(glval) = VariableAddress[x116] : -# 367| mu367_2(String) = Uninitialized[x116] : &:r367_1 -# 367| r367_3(glval) = FunctionAddress[String] : -# 367| v367_4(void) = Call[String] : func:r367_3, this:r367_1 -# 367| mu367_5(unknown) = ^CallSideEffect : ~m? -# 367| mu367_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r367_1 -# 368| r368_1(glval) = VariableAddress[x116] : -# 368| r368_2(glval) = FunctionAddress[~String] : -# 368| v368_3(void) = Call[~String] : func:r368_2, this:r368_1 -# 368| mu368_4(unknown) = ^CallSideEffect : ~m? -# 368| v368_5(void) = ^IndirectReadSideEffect[-1] : &:r368_1, ~m? -# 368| mu368_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r368_1 -# 368| r368_7(bool) = Constant[0] : -# 368| v368_8(void) = ConditionalBranch : r368_7 +# 35| Block 116 +# 35| r35_1625(glval) = VariableAddress[x116] : +# 35| mu35_1626(String) = Uninitialized[x116] : &:r35_1625 +# 35| r35_1627(glval) = FunctionAddress[String] : +# 35| v35_1628(void) = Call[String] : func:r35_1627, this:r35_1625 +# 35| mu35_1629(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1625 +# 35| r35_1631(glval) = VariableAddress[x116] : +# 35| r35_1632(glval) = FunctionAddress[~String] : +# 35| v35_1633(void) = Call[~String] : func:r35_1632, this:r35_1631 +# 35| mu35_1634(unknown) = ^CallSideEffect : ~m? +# 35| v35_1635(void) = ^IndirectReadSideEffect[-1] : &:r35_1631, ~m? +# 35| mu35_1636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1631 +# 35| r35_1637(bool) = Constant[0] : +# 35| v35_1638(void) = ConditionalBranch : r35_1637 #-----| False -> Block 117 #-----| True -> Block 1026 -# 370| Block 117 -# 370| r370_1(glval) = VariableAddress[x117] : -# 370| mu370_2(String) = Uninitialized[x117] : &:r370_1 -# 370| r370_3(glval) = FunctionAddress[String] : -# 370| v370_4(void) = Call[String] : func:r370_3, this:r370_1 -# 370| mu370_5(unknown) = ^CallSideEffect : ~m? -# 370| mu370_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r370_1 -# 371| r371_1(glval) = VariableAddress[x117] : -# 371| r371_2(glval) = FunctionAddress[~String] : -# 371| v371_3(void) = Call[~String] : func:r371_2, this:r371_1 -# 371| mu371_4(unknown) = ^CallSideEffect : ~m? -# 371| v371_5(void) = ^IndirectReadSideEffect[-1] : &:r371_1, ~m? -# 371| mu371_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r371_1 -# 371| r371_7(bool) = Constant[0] : -# 371| v371_8(void) = ConditionalBranch : r371_7 +# 35| Block 117 +# 35| r35_1639(glval) = VariableAddress[x117] : +# 35| mu35_1640(String) = Uninitialized[x117] : &:r35_1639 +# 35| r35_1641(glval) = FunctionAddress[String] : +# 35| v35_1642(void) = Call[String] : func:r35_1641, this:r35_1639 +# 35| mu35_1643(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1639 +# 35| r35_1645(glval) = VariableAddress[x117] : +# 35| r35_1646(glval) = FunctionAddress[~String] : +# 35| v35_1647(void) = Call[~String] : func:r35_1646, this:r35_1645 +# 35| mu35_1648(unknown) = ^CallSideEffect : ~m? +# 35| v35_1649(void) = ^IndirectReadSideEffect[-1] : &:r35_1645, ~m? +# 35| mu35_1650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1645 +# 35| r35_1651(bool) = Constant[0] : +# 35| v35_1652(void) = ConditionalBranch : r35_1651 #-----| False -> Block 118 #-----| True -> Block 1026 -# 373| Block 118 -# 373| r373_1(glval) = VariableAddress[x118] : -# 373| mu373_2(String) = Uninitialized[x118] : &:r373_1 -# 373| r373_3(glval) = FunctionAddress[String] : -# 373| v373_4(void) = Call[String] : func:r373_3, this:r373_1 -# 373| mu373_5(unknown) = ^CallSideEffect : ~m? -# 373| mu373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r373_1 -# 374| r374_1(glval) = VariableAddress[x118] : -# 374| r374_2(glval) = FunctionAddress[~String] : -# 374| v374_3(void) = Call[~String] : func:r374_2, this:r374_1 -# 374| mu374_4(unknown) = ^CallSideEffect : ~m? -# 374| v374_5(void) = ^IndirectReadSideEffect[-1] : &:r374_1, ~m? -# 374| mu374_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r374_1 -# 374| r374_7(bool) = Constant[0] : -# 374| v374_8(void) = ConditionalBranch : r374_7 +# 35| Block 118 +# 35| r35_1653(glval) = VariableAddress[x118] : +# 35| mu35_1654(String) = Uninitialized[x118] : &:r35_1653 +# 35| r35_1655(glval) = FunctionAddress[String] : +# 35| v35_1656(void) = Call[String] : func:r35_1655, this:r35_1653 +# 35| mu35_1657(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1653 +# 35| r35_1659(glval) = VariableAddress[x118] : +# 35| r35_1660(glval) = FunctionAddress[~String] : +# 35| v35_1661(void) = Call[~String] : func:r35_1660, this:r35_1659 +# 35| mu35_1662(unknown) = ^CallSideEffect : ~m? +# 35| v35_1663(void) = ^IndirectReadSideEffect[-1] : &:r35_1659, ~m? +# 35| mu35_1664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1659 +# 35| r35_1665(bool) = Constant[0] : +# 35| v35_1666(void) = ConditionalBranch : r35_1665 #-----| False -> Block 119 #-----| True -> Block 1026 -# 376| Block 119 -# 376| r376_1(glval) = VariableAddress[x119] : -# 376| mu376_2(String) = Uninitialized[x119] : &:r376_1 -# 376| r376_3(glval) = FunctionAddress[String] : -# 376| v376_4(void) = Call[String] : func:r376_3, this:r376_1 -# 376| mu376_5(unknown) = ^CallSideEffect : ~m? -# 376| mu376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r376_1 -# 377| r377_1(glval) = VariableAddress[x119] : -# 377| r377_2(glval) = FunctionAddress[~String] : -# 377| v377_3(void) = Call[~String] : func:r377_2, this:r377_1 -# 377| mu377_4(unknown) = ^CallSideEffect : ~m? -# 377| v377_5(void) = ^IndirectReadSideEffect[-1] : &:r377_1, ~m? -# 377| mu377_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r377_1 -# 377| r377_7(bool) = Constant[0] : -# 377| v377_8(void) = ConditionalBranch : r377_7 +# 35| Block 119 +# 35| r35_1667(glval) = VariableAddress[x119] : +# 35| mu35_1668(String) = Uninitialized[x119] : &:r35_1667 +# 35| r35_1669(glval) = FunctionAddress[String] : +# 35| v35_1670(void) = Call[String] : func:r35_1669, this:r35_1667 +# 35| mu35_1671(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1667 +# 35| r35_1673(glval) = VariableAddress[x119] : +# 35| r35_1674(glval) = FunctionAddress[~String] : +# 35| v35_1675(void) = Call[~String] : func:r35_1674, this:r35_1673 +# 35| mu35_1676(unknown) = ^CallSideEffect : ~m? +# 35| v35_1677(void) = ^IndirectReadSideEffect[-1] : &:r35_1673, ~m? +# 35| mu35_1678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1673 +# 35| r35_1679(bool) = Constant[0] : +# 35| v35_1680(void) = ConditionalBranch : r35_1679 #-----| False -> Block 120 #-----| True -> Block 1026 -# 379| Block 120 -# 379| r379_1(glval) = VariableAddress[x120] : -# 379| mu379_2(String) = Uninitialized[x120] : &:r379_1 -# 379| r379_3(glval) = FunctionAddress[String] : -# 379| v379_4(void) = Call[String] : func:r379_3, this:r379_1 -# 379| mu379_5(unknown) = ^CallSideEffect : ~m? -# 379| mu379_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r379_1 -# 380| r380_1(glval) = VariableAddress[x120] : -# 380| r380_2(glval) = FunctionAddress[~String] : -# 380| v380_3(void) = Call[~String] : func:r380_2, this:r380_1 -# 380| mu380_4(unknown) = ^CallSideEffect : ~m? -# 380| v380_5(void) = ^IndirectReadSideEffect[-1] : &:r380_1, ~m? -# 380| mu380_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r380_1 -# 380| r380_7(bool) = Constant[0] : -# 380| v380_8(void) = ConditionalBranch : r380_7 +# 35| Block 120 +# 35| r35_1681(glval) = VariableAddress[x120] : +# 35| mu35_1682(String) = Uninitialized[x120] : &:r35_1681 +# 35| r35_1683(glval) = FunctionAddress[String] : +# 35| v35_1684(void) = Call[String] : func:r35_1683, this:r35_1681 +# 35| mu35_1685(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1681 +# 35| r35_1687(glval) = VariableAddress[x120] : +# 35| r35_1688(glval) = FunctionAddress[~String] : +# 35| v35_1689(void) = Call[~String] : func:r35_1688, this:r35_1687 +# 35| mu35_1690(unknown) = ^CallSideEffect : ~m? +# 35| v35_1691(void) = ^IndirectReadSideEffect[-1] : &:r35_1687, ~m? +# 35| mu35_1692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1687 +# 35| r35_1693(bool) = Constant[0] : +# 35| v35_1694(void) = ConditionalBranch : r35_1693 #-----| False -> Block 121 #-----| True -> Block 1026 -# 382| Block 121 -# 382| r382_1(glval) = VariableAddress[x121] : -# 382| mu382_2(String) = Uninitialized[x121] : &:r382_1 -# 382| r382_3(glval) = FunctionAddress[String] : -# 382| v382_4(void) = Call[String] : func:r382_3, this:r382_1 -# 382| mu382_5(unknown) = ^CallSideEffect : ~m? -# 382| mu382_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r382_1 -# 383| r383_1(glval) = VariableAddress[x121] : -# 383| r383_2(glval) = FunctionAddress[~String] : -# 383| v383_3(void) = Call[~String] : func:r383_2, this:r383_1 -# 383| mu383_4(unknown) = ^CallSideEffect : ~m? -# 383| v383_5(void) = ^IndirectReadSideEffect[-1] : &:r383_1, ~m? -# 383| mu383_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r383_1 -# 383| r383_7(bool) = Constant[0] : -# 383| v383_8(void) = ConditionalBranch : r383_7 +# 35| Block 121 +# 35| r35_1695(glval) = VariableAddress[x121] : +# 35| mu35_1696(String) = Uninitialized[x121] : &:r35_1695 +# 35| r35_1697(glval) = FunctionAddress[String] : +# 35| v35_1698(void) = Call[String] : func:r35_1697, this:r35_1695 +# 35| mu35_1699(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1695 +# 35| r35_1701(glval) = VariableAddress[x121] : +# 35| r35_1702(glval) = FunctionAddress[~String] : +# 35| v35_1703(void) = Call[~String] : func:r35_1702, this:r35_1701 +# 35| mu35_1704(unknown) = ^CallSideEffect : ~m? +# 35| v35_1705(void) = ^IndirectReadSideEffect[-1] : &:r35_1701, ~m? +# 35| mu35_1706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1701 +# 35| r35_1707(bool) = Constant[0] : +# 35| v35_1708(void) = ConditionalBranch : r35_1707 #-----| False -> Block 122 #-----| True -> Block 1026 -# 385| Block 122 -# 385| r385_1(glval) = VariableAddress[x122] : -# 385| mu385_2(String) = Uninitialized[x122] : &:r385_1 -# 385| r385_3(glval) = FunctionAddress[String] : -# 385| v385_4(void) = Call[String] : func:r385_3, this:r385_1 -# 385| mu385_5(unknown) = ^CallSideEffect : ~m? -# 385| mu385_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r385_1 -# 386| r386_1(glval) = VariableAddress[x122] : -# 386| r386_2(glval) = FunctionAddress[~String] : -# 386| v386_3(void) = Call[~String] : func:r386_2, this:r386_1 -# 386| mu386_4(unknown) = ^CallSideEffect : ~m? -# 386| v386_5(void) = ^IndirectReadSideEffect[-1] : &:r386_1, ~m? -# 386| mu386_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r386_1 -# 386| r386_7(bool) = Constant[0] : -# 386| v386_8(void) = ConditionalBranch : r386_7 +# 35| Block 122 +# 35| r35_1709(glval) = VariableAddress[x122] : +# 35| mu35_1710(String) = Uninitialized[x122] : &:r35_1709 +# 35| r35_1711(glval) = FunctionAddress[String] : +# 35| v35_1712(void) = Call[String] : func:r35_1711, this:r35_1709 +# 35| mu35_1713(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1709 +# 35| r35_1715(glval) = VariableAddress[x122] : +# 35| r35_1716(glval) = FunctionAddress[~String] : +# 35| v35_1717(void) = Call[~String] : func:r35_1716, this:r35_1715 +# 35| mu35_1718(unknown) = ^CallSideEffect : ~m? +# 35| v35_1719(void) = ^IndirectReadSideEffect[-1] : &:r35_1715, ~m? +# 35| mu35_1720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1715 +# 35| r35_1721(bool) = Constant[0] : +# 35| v35_1722(void) = ConditionalBranch : r35_1721 #-----| False -> Block 123 #-----| True -> Block 1026 -# 388| Block 123 -# 388| r388_1(glval) = VariableAddress[x123] : -# 388| mu388_2(String) = Uninitialized[x123] : &:r388_1 -# 388| r388_3(glval) = FunctionAddress[String] : -# 388| v388_4(void) = Call[String] : func:r388_3, this:r388_1 -# 388| mu388_5(unknown) = ^CallSideEffect : ~m? -# 388| mu388_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r388_1 -# 389| r389_1(glval) = VariableAddress[x123] : -# 389| r389_2(glval) = FunctionAddress[~String] : -# 389| v389_3(void) = Call[~String] : func:r389_2, this:r389_1 -# 389| mu389_4(unknown) = ^CallSideEffect : ~m? -# 389| v389_5(void) = ^IndirectReadSideEffect[-1] : &:r389_1, ~m? -# 389| mu389_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r389_1 -# 389| r389_7(bool) = Constant[0] : -# 389| v389_8(void) = ConditionalBranch : r389_7 +# 35| Block 123 +# 35| r35_1723(glval) = VariableAddress[x123] : +# 35| mu35_1724(String) = Uninitialized[x123] : &:r35_1723 +# 35| r35_1725(glval) = FunctionAddress[String] : +# 35| v35_1726(void) = Call[String] : func:r35_1725, this:r35_1723 +# 35| mu35_1727(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1723 +# 35| r35_1729(glval) = VariableAddress[x123] : +# 35| r35_1730(glval) = FunctionAddress[~String] : +# 35| v35_1731(void) = Call[~String] : func:r35_1730, this:r35_1729 +# 35| mu35_1732(unknown) = ^CallSideEffect : ~m? +# 35| v35_1733(void) = ^IndirectReadSideEffect[-1] : &:r35_1729, ~m? +# 35| mu35_1734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1729 +# 35| r35_1735(bool) = Constant[0] : +# 35| v35_1736(void) = ConditionalBranch : r35_1735 #-----| False -> Block 124 #-----| True -> Block 1026 -# 391| Block 124 -# 391| r391_1(glval) = VariableAddress[x124] : -# 391| mu391_2(String) = Uninitialized[x124] : &:r391_1 -# 391| r391_3(glval) = FunctionAddress[String] : -# 391| v391_4(void) = Call[String] : func:r391_3, this:r391_1 -# 391| mu391_5(unknown) = ^CallSideEffect : ~m? -# 391| mu391_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r391_1 -# 392| r392_1(glval) = VariableAddress[x124] : -# 392| r392_2(glval) = FunctionAddress[~String] : -# 392| v392_3(void) = Call[~String] : func:r392_2, this:r392_1 -# 392| mu392_4(unknown) = ^CallSideEffect : ~m? -# 392| v392_5(void) = ^IndirectReadSideEffect[-1] : &:r392_1, ~m? -# 392| mu392_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r392_1 -# 392| r392_7(bool) = Constant[0] : -# 392| v392_8(void) = ConditionalBranch : r392_7 +# 35| Block 124 +# 35| r35_1737(glval) = VariableAddress[x124] : +# 35| mu35_1738(String) = Uninitialized[x124] : &:r35_1737 +# 35| r35_1739(glval) = FunctionAddress[String] : +# 35| v35_1740(void) = Call[String] : func:r35_1739, this:r35_1737 +# 35| mu35_1741(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1737 +# 35| r35_1743(glval) = VariableAddress[x124] : +# 35| r35_1744(glval) = FunctionAddress[~String] : +# 35| v35_1745(void) = Call[~String] : func:r35_1744, this:r35_1743 +# 35| mu35_1746(unknown) = ^CallSideEffect : ~m? +# 35| v35_1747(void) = ^IndirectReadSideEffect[-1] : &:r35_1743, ~m? +# 35| mu35_1748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1743 +# 35| r35_1749(bool) = Constant[0] : +# 35| v35_1750(void) = ConditionalBranch : r35_1749 #-----| False -> Block 125 #-----| True -> Block 1026 -# 394| Block 125 -# 394| r394_1(glval) = VariableAddress[x125] : -# 394| mu394_2(String) = Uninitialized[x125] : &:r394_1 -# 394| r394_3(glval) = FunctionAddress[String] : -# 394| v394_4(void) = Call[String] : func:r394_3, this:r394_1 -# 394| mu394_5(unknown) = ^CallSideEffect : ~m? -# 394| mu394_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r394_1 -# 395| r395_1(glval) = VariableAddress[x125] : -# 395| r395_2(glval) = FunctionAddress[~String] : -# 395| v395_3(void) = Call[~String] : func:r395_2, this:r395_1 -# 395| mu395_4(unknown) = ^CallSideEffect : ~m? -# 395| v395_5(void) = ^IndirectReadSideEffect[-1] : &:r395_1, ~m? -# 395| mu395_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r395_1 -# 395| r395_7(bool) = Constant[0] : -# 395| v395_8(void) = ConditionalBranch : r395_7 +# 35| Block 125 +# 35| r35_1751(glval) = VariableAddress[x125] : +# 35| mu35_1752(String) = Uninitialized[x125] : &:r35_1751 +# 35| r35_1753(glval) = FunctionAddress[String] : +# 35| v35_1754(void) = Call[String] : func:r35_1753, this:r35_1751 +# 35| mu35_1755(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1751 +# 35| r35_1757(glval) = VariableAddress[x125] : +# 35| r35_1758(glval) = FunctionAddress[~String] : +# 35| v35_1759(void) = Call[~String] : func:r35_1758, this:r35_1757 +# 35| mu35_1760(unknown) = ^CallSideEffect : ~m? +# 35| v35_1761(void) = ^IndirectReadSideEffect[-1] : &:r35_1757, ~m? +# 35| mu35_1762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1757 +# 35| r35_1763(bool) = Constant[0] : +# 35| v35_1764(void) = ConditionalBranch : r35_1763 #-----| False -> Block 126 #-----| True -> Block 1026 -# 397| Block 126 -# 397| r397_1(glval) = VariableAddress[x126] : -# 397| mu397_2(String) = Uninitialized[x126] : &:r397_1 -# 397| r397_3(glval) = FunctionAddress[String] : -# 397| v397_4(void) = Call[String] : func:r397_3, this:r397_1 -# 397| mu397_5(unknown) = ^CallSideEffect : ~m? -# 397| mu397_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r397_1 -# 398| r398_1(glval) = VariableAddress[x126] : -# 398| r398_2(glval) = FunctionAddress[~String] : -# 398| v398_3(void) = Call[~String] : func:r398_2, this:r398_1 -# 398| mu398_4(unknown) = ^CallSideEffect : ~m? -# 398| v398_5(void) = ^IndirectReadSideEffect[-1] : &:r398_1, ~m? -# 398| mu398_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r398_1 -# 398| r398_7(bool) = Constant[0] : -# 398| v398_8(void) = ConditionalBranch : r398_7 +# 35| Block 126 +# 35| r35_1765(glval) = VariableAddress[x126] : +# 35| mu35_1766(String) = Uninitialized[x126] : &:r35_1765 +# 35| r35_1767(glval) = FunctionAddress[String] : +# 35| v35_1768(void) = Call[String] : func:r35_1767, this:r35_1765 +# 35| mu35_1769(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1765 +# 35| r35_1771(glval) = VariableAddress[x126] : +# 35| r35_1772(glval) = FunctionAddress[~String] : +# 35| v35_1773(void) = Call[~String] : func:r35_1772, this:r35_1771 +# 35| mu35_1774(unknown) = ^CallSideEffect : ~m? +# 35| v35_1775(void) = ^IndirectReadSideEffect[-1] : &:r35_1771, ~m? +# 35| mu35_1776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1771 +# 35| r35_1777(bool) = Constant[0] : +# 35| v35_1778(void) = ConditionalBranch : r35_1777 #-----| False -> Block 127 #-----| True -> Block 1026 -# 400| Block 127 -# 400| r400_1(glval) = VariableAddress[x127] : -# 400| mu400_2(String) = Uninitialized[x127] : &:r400_1 -# 400| r400_3(glval) = FunctionAddress[String] : -# 400| v400_4(void) = Call[String] : func:r400_3, this:r400_1 -# 400| mu400_5(unknown) = ^CallSideEffect : ~m? -# 400| mu400_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r400_1 -# 401| r401_1(glval) = VariableAddress[x127] : -# 401| r401_2(glval) = FunctionAddress[~String] : -# 401| v401_3(void) = Call[~String] : func:r401_2, this:r401_1 -# 401| mu401_4(unknown) = ^CallSideEffect : ~m? -# 401| v401_5(void) = ^IndirectReadSideEffect[-1] : &:r401_1, ~m? -# 401| mu401_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r401_1 -# 401| r401_7(bool) = Constant[0] : -# 401| v401_8(void) = ConditionalBranch : r401_7 +# 35| Block 127 +# 35| r35_1779(glval) = VariableAddress[x127] : +# 35| mu35_1780(String) = Uninitialized[x127] : &:r35_1779 +# 35| r35_1781(glval) = FunctionAddress[String] : +# 35| v35_1782(void) = Call[String] : func:r35_1781, this:r35_1779 +# 35| mu35_1783(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1779 +# 35| r35_1785(glval) = VariableAddress[x127] : +# 35| r35_1786(glval) = FunctionAddress[~String] : +# 35| v35_1787(void) = Call[~String] : func:r35_1786, this:r35_1785 +# 35| mu35_1788(unknown) = ^CallSideEffect : ~m? +# 35| v35_1789(void) = ^IndirectReadSideEffect[-1] : &:r35_1785, ~m? +# 35| mu35_1790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1785 +# 35| r35_1791(bool) = Constant[0] : +# 35| v35_1792(void) = ConditionalBranch : r35_1791 #-----| False -> Block 128 #-----| True -> Block 1026 -# 403| Block 128 -# 403| r403_1(glval) = VariableAddress[x128] : -# 403| mu403_2(String) = Uninitialized[x128] : &:r403_1 -# 403| r403_3(glval) = FunctionAddress[String] : -# 403| v403_4(void) = Call[String] : func:r403_3, this:r403_1 -# 403| mu403_5(unknown) = ^CallSideEffect : ~m? -# 403| mu403_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r403_1 -# 404| r404_1(glval) = VariableAddress[x128] : -# 404| r404_2(glval) = FunctionAddress[~String] : -# 404| v404_3(void) = Call[~String] : func:r404_2, this:r404_1 -# 404| mu404_4(unknown) = ^CallSideEffect : ~m? -# 404| v404_5(void) = ^IndirectReadSideEffect[-1] : &:r404_1, ~m? -# 404| mu404_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r404_1 -# 404| r404_7(bool) = Constant[0] : -# 404| v404_8(void) = ConditionalBranch : r404_7 +# 35| Block 128 +# 35| r35_1793(glval) = VariableAddress[x128] : +# 35| mu35_1794(String) = Uninitialized[x128] : &:r35_1793 +# 35| r35_1795(glval) = FunctionAddress[String] : +# 35| v35_1796(void) = Call[String] : func:r35_1795, this:r35_1793 +# 35| mu35_1797(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1793 +# 35| r35_1799(glval) = VariableAddress[x128] : +# 35| r35_1800(glval) = FunctionAddress[~String] : +# 35| v35_1801(void) = Call[~String] : func:r35_1800, this:r35_1799 +# 35| mu35_1802(unknown) = ^CallSideEffect : ~m? +# 35| v35_1803(void) = ^IndirectReadSideEffect[-1] : &:r35_1799, ~m? +# 35| mu35_1804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1799 +# 35| r35_1805(bool) = Constant[0] : +# 35| v35_1806(void) = ConditionalBranch : r35_1805 #-----| False -> Block 129 #-----| True -> Block 1026 -# 406| Block 129 -# 406| r406_1(glval) = VariableAddress[x129] : -# 406| mu406_2(String) = Uninitialized[x129] : &:r406_1 -# 406| r406_3(glval) = FunctionAddress[String] : -# 406| v406_4(void) = Call[String] : func:r406_3, this:r406_1 -# 406| mu406_5(unknown) = ^CallSideEffect : ~m? -# 406| mu406_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r406_1 -# 407| r407_1(glval) = VariableAddress[x129] : -# 407| r407_2(glval) = FunctionAddress[~String] : -# 407| v407_3(void) = Call[~String] : func:r407_2, this:r407_1 -# 407| mu407_4(unknown) = ^CallSideEffect : ~m? -# 407| v407_5(void) = ^IndirectReadSideEffect[-1] : &:r407_1, ~m? -# 407| mu407_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r407_1 -# 407| r407_7(bool) = Constant[0] : -# 407| v407_8(void) = ConditionalBranch : r407_7 +# 35| Block 129 +# 35| r35_1807(glval) = VariableAddress[x129] : +# 35| mu35_1808(String) = Uninitialized[x129] : &:r35_1807 +# 35| r35_1809(glval) = FunctionAddress[String] : +# 35| v35_1810(void) = Call[String] : func:r35_1809, this:r35_1807 +# 35| mu35_1811(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1807 +# 35| r35_1813(glval) = VariableAddress[x129] : +# 35| r35_1814(glval) = FunctionAddress[~String] : +# 35| v35_1815(void) = Call[~String] : func:r35_1814, this:r35_1813 +# 35| mu35_1816(unknown) = ^CallSideEffect : ~m? +# 35| v35_1817(void) = ^IndirectReadSideEffect[-1] : &:r35_1813, ~m? +# 35| mu35_1818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1813 +# 35| r35_1819(bool) = Constant[0] : +# 35| v35_1820(void) = ConditionalBranch : r35_1819 #-----| False -> Block 130 #-----| True -> Block 1026 -# 409| Block 130 -# 409| r409_1(glval) = VariableAddress[x130] : -# 409| mu409_2(String) = Uninitialized[x130] : &:r409_1 -# 409| r409_3(glval) = FunctionAddress[String] : -# 409| v409_4(void) = Call[String] : func:r409_3, this:r409_1 -# 409| mu409_5(unknown) = ^CallSideEffect : ~m? -# 409| mu409_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r409_1 -# 410| r410_1(glval) = VariableAddress[x130] : -# 410| r410_2(glval) = FunctionAddress[~String] : -# 410| v410_3(void) = Call[~String] : func:r410_2, this:r410_1 -# 410| mu410_4(unknown) = ^CallSideEffect : ~m? -# 410| v410_5(void) = ^IndirectReadSideEffect[-1] : &:r410_1, ~m? -# 410| mu410_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r410_1 -# 410| r410_7(bool) = Constant[0] : -# 410| v410_8(void) = ConditionalBranch : r410_7 +# 35| Block 130 +# 35| r35_1821(glval) = VariableAddress[x130] : +# 35| mu35_1822(String) = Uninitialized[x130] : &:r35_1821 +# 35| r35_1823(glval) = FunctionAddress[String] : +# 35| v35_1824(void) = Call[String] : func:r35_1823, this:r35_1821 +# 35| mu35_1825(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1821 +# 35| r35_1827(glval) = VariableAddress[x130] : +# 35| r35_1828(glval) = FunctionAddress[~String] : +# 35| v35_1829(void) = Call[~String] : func:r35_1828, this:r35_1827 +# 35| mu35_1830(unknown) = ^CallSideEffect : ~m? +# 35| v35_1831(void) = ^IndirectReadSideEffect[-1] : &:r35_1827, ~m? +# 35| mu35_1832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1827 +# 35| r35_1833(bool) = Constant[0] : +# 35| v35_1834(void) = ConditionalBranch : r35_1833 #-----| False -> Block 131 #-----| True -> Block 1026 -# 412| Block 131 -# 412| r412_1(glval) = VariableAddress[x131] : -# 412| mu412_2(String) = Uninitialized[x131] : &:r412_1 -# 412| r412_3(glval) = FunctionAddress[String] : -# 412| v412_4(void) = Call[String] : func:r412_3, this:r412_1 -# 412| mu412_5(unknown) = ^CallSideEffect : ~m? -# 412| mu412_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r412_1 -# 413| r413_1(glval) = VariableAddress[x131] : -# 413| r413_2(glval) = FunctionAddress[~String] : -# 413| v413_3(void) = Call[~String] : func:r413_2, this:r413_1 -# 413| mu413_4(unknown) = ^CallSideEffect : ~m? -# 413| v413_5(void) = ^IndirectReadSideEffect[-1] : &:r413_1, ~m? -# 413| mu413_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r413_1 -# 413| r413_7(bool) = Constant[0] : -# 413| v413_8(void) = ConditionalBranch : r413_7 +# 35| Block 131 +# 35| r35_1835(glval) = VariableAddress[x131] : +# 35| mu35_1836(String) = Uninitialized[x131] : &:r35_1835 +# 35| r35_1837(glval) = FunctionAddress[String] : +# 35| v35_1838(void) = Call[String] : func:r35_1837, this:r35_1835 +# 35| mu35_1839(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1835 +# 35| r35_1841(glval) = VariableAddress[x131] : +# 35| r35_1842(glval) = FunctionAddress[~String] : +# 35| v35_1843(void) = Call[~String] : func:r35_1842, this:r35_1841 +# 35| mu35_1844(unknown) = ^CallSideEffect : ~m? +# 35| v35_1845(void) = ^IndirectReadSideEffect[-1] : &:r35_1841, ~m? +# 35| mu35_1846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1841 +# 35| r35_1847(bool) = Constant[0] : +# 35| v35_1848(void) = ConditionalBranch : r35_1847 #-----| False -> Block 132 #-----| True -> Block 1026 -# 415| Block 132 -# 415| r415_1(glval) = VariableAddress[x132] : -# 415| mu415_2(String) = Uninitialized[x132] : &:r415_1 -# 415| r415_3(glval) = FunctionAddress[String] : -# 415| v415_4(void) = Call[String] : func:r415_3, this:r415_1 -# 415| mu415_5(unknown) = ^CallSideEffect : ~m? -# 415| mu415_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r415_1 -# 416| r416_1(glval) = VariableAddress[x132] : -# 416| r416_2(glval) = FunctionAddress[~String] : -# 416| v416_3(void) = Call[~String] : func:r416_2, this:r416_1 -# 416| mu416_4(unknown) = ^CallSideEffect : ~m? -# 416| v416_5(void) = ^IndirectReadSideEffect[-1] : &:r416_1, ~m? -# 416| mu416_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r416_1 -# 416| r416_7(bool) = Constant[0] : -# 416| v416_8(void) = ConditionalBranch : r416_7 +# 35| Block 132 +# 35| r35_1849(glval) = VariableAddress[x132] : +# 35| mu35_1850(String) = Uninitialized[x132] : &:r35_1849 +# 35| r35_1851(glval) = FunctionAddress[String] : +# 35| v35_1852(void) = Call[String] : func:r35_1851, this:r35_1849 +# 35| mu35_1853(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1849 +# 35| r35_1855(glval) = VariableAddress[x132] : +# 35| r35_1856(glval) = FunctionAddress[~String] : +# 35| v35_1857(void) = Call[~String] : func:r35_1856, this:r35_1855 +# 35| mu35_1858(unknown) = ^CallSideEffect : ~m? +# 35| v35_1859(void) = ^IndirectReadSideEffect[-1] : &:r35_1855, ~m? +# 35| mu35_1860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1855 +# 35| r35_1861(bool) = Constant[0] : +# 35| v35_1862(void) = ConditionalBranch : r35_1861 #-----| False -> Block 133 #-----| True -> Block 1026 -# 418| Block 133 -# 418| r418_1(glval) = VariableAddress[x133] : -# 418| mu418_2(String) = Uninitialized[x133] : &:r418_1 -# 418| r418_3(glval) = FunctionAddress[String] : -# 418| v418_4(void) = Call[String] : func:r418_3, this:r418_1 -# 418| mu418_5(unknown) = ^CallSideEffect : ~m? -# 418| mu418_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r418_1 -# 419| r419_1(glval) = VariableAddress[x133] : -# 419| r419_2(glval) = FunctionAddress[~String] : -# 419| v419_3(void) = Call[~String] : func:r419_2, this:r419_1 -# 419| mu419_4(unknown) = ^CallSideEffect : ~m? -# 419| v419_5(void) = ^IndirectReadSideEffect[-1] : &:r419_1, ~m? -# 419| mu419_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r419_1 -# 419| r419_7(bool) = Constant[0] : -# 419| v419_8(void) = ConditionalBranch : r419_7 +# 35| Block 133 +# 35| r35_1863(glval) = VariableAddress[x133] : +# 35| mu35_1864(String) = Uninitialized[x133] : &:r35_1863 +# 35| r35_1865(glval) = FunctionAddress[String] : +# 35| v35_1866(void) = Call[String] : func:r35_1865, this:r35_1863 +# 35| mu35_1867(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1863 +# 35| r35_1869(glval) = VariableAddress[x133] : +# 35| r35_1870(glval) = FunctionAddress[~String] : +# 35| v35_1871(void) = Call[~String] : func:r35_1870, this:r35_1869 +# 35| mu35_1872(unknown) = ^CallSideEffect : ~m? +# 35| v35_1873(void) = ^IndirectReadSideEffect[-1] : &:r35_1869, ~m? +# 35| mu35_1874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1869 +# 35| r35_1875(bool) = Constant[0] : +# 35| v35_1876(void) = ConditionalBranch : r35_1875 #-----| False -> Block 134 #-----| True -> Block 1026 -# 421| Block 134 -# 421| r421_1(glval) = VariableAddress[x134] : -# 421| mu421_2(String) = Uninitialized[x134] : &:r421_1 -# 421| r421_3(glval) = FunctionAddress[String] : -# 421| v421_4(void) = Call[String] : func:r421_3, this:r421_1 -# 421| mu421_5(unknown) = ^CallSideEffect : ~m? -# 421| mu421_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r421_1 -# 422| r422_1(glval) = VariableAddress[x134] : -# 422| r422_2(glval) = FunctionAddress[~String] : -# 422| v422_3(void) = Call[~String] : func:r422_2, this:r422_1 -# 422| mu422_4(unknown) = ^CallSideEffect : ~m? -# 422| v422_5(void) = ^IndirectReadSideEffect[-1] : &:r422_1, ~m? -# 422| mu422_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r422_1 -# 422| r422_7(bool) = Constant[0] : -# 422| v422_8(void) = ConditionalBranch : r422_7 +# 35| Block 134 +# 35| r35_1877(glval) = VariableAddress[x134] : +# 35| mu35_1878(String) = Uninitialized[x134] : &:r35_1877 +# 35| r35_1879(glval) = FunctionAddress[String] : +# 35| v35_1880(void) = Call[String] : func:r35_1879, this:r35_1877 +# 35| mu35_1881(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1877 +# 35| r35_1883(glval) = VariableAddress[x134] : +# 35| r35_1884(glval) = FunctionAddress[~String] : +# 35| v35_1885(void) = Call[~String] : func:r35_1884, this:r35_1883 +# 35| mu35_1886(unknown) = ^CallSideEffect : ~m? +# 35| v35_1887(void) = ^IndirectReadSideEffect[-1] : &:r35_1883, ~m? +# 35| mu35_1888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1883 +# 35| r35_1889(bool) = Constant[0] : +# 35| v35_1890(void) = ConditionalBranch : r35_1889 #-----| False -> Block 135 #-----| True -> Block 1026 -# 424| Block 135 -# 424| r424_1(glval) = VariableAddress[x135] : -# 424| mu424_2(String) = Uninitialized[x135] : &:r424_1 -# 424| r424_3(glval) = FunctionAddress[String] : -# 424| v424_4(void) = Call[String] : func:r424_3, this:r424_1 -# 424| mu424_5(unknown) = ^CallSideEffect : ~m? -# 424| mu424_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r424_1 -# 425| r425_1(glval) = VariableAddress[x135] : -# 425| r425_2(glval) = FunctionAddress[~String] : -# 425| v425_3(void) = Call[~String] : func:r425_2, this:r425_1 -# 425| mu425_4(unknown) = ^CallSideEffect : ~m? -# 425| v425_5(void) = ^IndirectReadSideEffect[-1] : &:r425_1, ~m? -# 425| mu425_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r425_1 -# 425| r425_7(bool) = Constant[0] : -# 425| v425_8(void) = ConditionalBranch : r425_7 +# 35| Block 135 +# 35| r35_1891(glval) = VariableAddress[x135] : +# 35| mu35_1892(String) = Uninitialized[x135] : &:r35_1891 +# 35| r35_1893(glval) = FunctionAddress[String] : +# 35| v35_1894(void) = Call[String] : func:r35_1893, this:r35_1891 +# 35| mu35_1895(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1891 +# 35| r35_1897(glval) = VariableAddress[x135] : +# 35| r35_1898(glval) = FunctionAddress[~String] : +# 35| v35_1899(void) = Call[~String] : func:r35_1898, this:r35_1897 +# 35| mu35_1900(unknown) = ^CallSideEffect : ~m? +# 35| v35_1901(void) = ^IndirectReadSideEffect[-1] : &:r35_1897, ~m? +# 35| mu35_1902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1897 +# 35| r35_1903(bool) = Constant[0] : +# 35| v35_1904(void) = ConditionalBranch : r35_1903 #-----| False -> Block 136 #-----| True -> Block 1026 -# 427| Block 136 -# 427| r427_1(glval) = VariableAddress[x136] : -# 427| mu427_2(String) = Uninitialized[x136] : &:r427_1 -# 427| r427_3(glval) = FunctionAddress[String] : -# 427| v427_4(void) = Call[String] : func:r427_3, this:r427_1 -# 427| mu427_5(unknown) = ^CallSideEffect : ~m? -# 427| mu427_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r427_1 -# 428| r428_1(glval) = VariableAddress[x136] : -# 428| r428_2(glval) = FunctionAddress[~String] : -# 428| v428_3(void) = Call[~String] : func:r428_2, this:r428_1 -# 428| mu428_4(unknown) = ^CallSideEffect : ~m? -# 428| v428_5(void) = ^IndirectReadSideEffect[-1] : &:r428_1, ~m? -# 428| mu428_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r428_1 -# 428| r428_7(bool) = Constant[0] : -# 428| v428_8(void) = ConditionalBranch : r428_7 +# 35| Block 136 +# 35| r35_1905(glval) = VariableAddress[x136] : +# 35| mu35_1906(String) = Uninitialized[x136] : &:r35_1905 +# 35| r35_1907(glval) = FunctionAddress[String] : +# 35| v35_1908(void) = Call[String] : func:r35_1907, this:r35_1905 +# 35| mu35_1909(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1905 +# 35| r35_1911(glval) = VariableAddress[x136] : +# 35| r35_1912(glval) = FunctionAddress[~String] : +# 35| v35_1913(void) = Call[~String] : func:r35_1912, this:r35_1911 +# 35| mu35_1914(unknown) = ^CallSideEffect : ~m? +# 35| v35_1915(void) = ^IndirectReadSideEffect[-1] : &:r35_1911, ~m? +# 35| mu35_1916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1911 +# 35| r35_1917(bool) = Constant[0] : +# 35| v35_1918(void) = ConditionalBranch : r35_1917 #-----| False -> Block 137 #-----| True -> Block 1026 -# 430| Block 137 -# 430| r430_1(glval) = VariableAddress[x137] : -# 430| mu430_2(String) = Uninitialized[x137] : &:r430_1 -# 430| r430_3(glval) = FunctionAddress[String] : -# 430| v430_4(void) = Call[String] : func:r430_3, this:r430_1 -# 430| mu430_5(unknown) = ^CallSideEffect : ~m? -# 430| mu430_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r430_1 -# 431| r431_1(glval) = VariableAddress[x137] : -# 431| r431_2(glval) = FunctionAddress[~String] : -# 431| v431_3(void) = Call[~String] : func:r431_2, this:r431_1 -# 431| mu431_4(unknown) = ^CallSideEffect : ~m? -# 431| v431_5(void) = ^IndirectReadSideEffect[-1] : &:r431_1, ~m? -# 431| mu431_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r431_1 -# 431| r431_7(bool) = Constant[0] : -# 431| v431_8(void) = ConditionalBranch : r431_7 +# 35| Block 137 +# 35| r35_1919(glval) = VariableAddress[x137] : +# 35| mu35_1920(String) = Uninitialized[x137] : &:r35_1919 +# 35| r35_1921(glval) = FunctionAddress[String] : +# 35| v35_1922(void) = Call[String] : func:r35_1921, this:r35_1919 +# 35| mu35_1923(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1919 +# 35| r35_1925(glval) = VariableAddress[x137] : +# 35| r35_1926(glval) = FunctionAddress[~String] : +# 35| v35_1927(void) = Call[~String] : func:r35_1926, this:r35_1925 +# 35| mu35_1928(unknown) = ^CallSideEffect : ~m? +# 35| v35_1929(void) = ^IndirectReadSideEffect[-1] : &:r35_1925, ~m? +# 35| mu35_1930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1925 +# 35| r35_1931(bool) = Constant[0] : +# 35| v35_1932(void) = ConditionalBranch : r35_1931 #-----| False -> Block 138 #-----| True -> Block 1026 -# 433| Block 138 -# 433| r433_1(glval) = VariableAddress[x138] : -# 433| mu433_2(String) = Uninitialized[x138] : &:r433_1 -# 433| r433_3(glval) = FunctionAddress[String] : -# 433| v433_4(void) = Call[String] : func:r433_3, this:r433_1 -# 433| mu433_5(unknown) = ^CallSideEffect : ~m? -# 433| mu433_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r433_1 -# 434| r434_1(glval) = VariableAddress[x138] : -# 434| r434_2(glval) = FunctionAddress[~String] : -# 434| v434_3(void) = Call[~String] : func:r434_2, this:r434_1 -# 434| mu434_4(unknown) = ^CallSideEffect : ~m? -# 434| v434_5(void) = ^IndirectReadSideEffect[-1] : &:r434_1, ~m? -# 434| mu434_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r434_1 -# 434| r434_7(bool) = Constant[0] : -# 434| v434_8(void) = ConditionalBranch : r434_7 +# 35| Block 138 +# 35| r35_1933(glval) = VariableAddress[x138] : +# 35| mu35_1934(String) = Uninitialized[x138] : &:r35_1933 +# 35| r35_1935(glval) = FunctionAddress[String] : +# 35| v35_1936(void) = Call[String] : func:r35_1935, this:r35_1933 +# 35| mu35_1937(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1933 +# 35| r35_1939(glval) = VariableAddress[x138] : +# 35| r35_1940(glval) = FunctionAddress[~String] : +# 35| v35_1941(void) = Call[~String] : func:r35_1940, this:r35_1939 +# 35| mu35_1942(unknown) = ^CallSideEffect : ~m? +# 35| v35_1943(void) = ^IndirectReadSideEffect[-1] : &:r35_1939, ~m? +# 35| mu35_1944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1939 +# 35| r35_1945(bool) = Constant[0] : +# 35| v35_1946(void) = ConditionalBranch : r35_1945 #-----| False -> Block 139 #-----| True -> Block 1026 -# 436| Block 139 -# 436| r436_1(glval) = VariableAddress[x139] : -# 436| mu436_2(String) = Uninitialized[x139] : &:r436_1 -# 436| r436_3(glval) = FunctionAddress[String] : -# 436| v436_4(void) = Call[String] : func:r436_3, this:r436_1 -# 436| mu436_5(unknown) = ^CallSideEffect : ~m? -# 436| mu436_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r436_1 -# 437| r437_1(glval) = VariableAddress[x139] : -# 437| r437_2(glval) = FunctionAddress[~String] : -# 437| v437_3(void) = Call[~String] : func:r437_2, this:r437_1 -# 437| mu437_4(unknown) = ^CallSideEffect : ~m? -# 437| v437_5(void) = ^IndirectReadSideEffect[-1] : &:r437_1, ~m? -# 437| mu437_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r437_1 -# 437| r437_7(bool) = Constant[0] : -# 437| v437_8(void) = ConditionalBranch : r437_7 +# 35| Block 139 +# 35| r35_1947(glval) = VariableAddress[x139] : +# 35| mu35_1948(String) = Uninitialized[x139] : &:r35_1947 +# 35| r35_1949(glval) = FunctionAddress[String] : +# 35| v35_1950(void) = Call[String] : func:r35_1949, this:r35_1947 +# 35| mu35_1951(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1947 +# 35| r35_1953(glval) = VariableAddress[x139] : +# 35| r35_1954(glval) = FunctionAddress[~String] : +# 35| v35_1955(void) = Call[~String] : func:r35_1954, this:r35_1953 +# 35| mu35_1956(unknown) = ^CallSideEffect : ~m? +# 35| v35_1957(void) = ^IndirectReadSideEffect[-1] : &:r35_1953, ~m? +# 35| mu35_1958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1953 +# 35| r35_1959(bool) = Constant[0] : +# 35| v35_1960(void) = ConditionalBranch : r35_1959 #-----| False -> Block 140 #-----| True -> Block 1026 -# 439| Block 140 -# 439| r439_1(glval) = VariableAddress[x140] : -# 439| mu439_2(String) = Uninitialized[x140] : &:r439_1 -# 439| r439_3(glval) = FunctionAddress[String] : -# 439| v439_4(void) = Call[String] : func:r439_3, this:r439_1 -# 439| mu439_5(unknown) = ^CallSideEffect : ~m? -# 439| mu439_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r439_1 -# 440| r440_1(glval) = VariableAddress[x140] : -# 440| r440_2(glval) = FunctionAddress[~String] : -# 440| v440_3(void) = Call[~String] : func:r440_2, this:r440_1 -# 440| mu440_4(unknown) = ^CallSideEffect : ~m? -# 440| v440_5(void) = ^IndirectReadSideEffect[-1] : &:r440_1, ~m? -# 440| mu440_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r440_1 -# 440| r440_7(bool) = Constant[0] : -# 440| v440_8(void) = ConditionalBranch : r440_7 +# 35| Block 140 +# 35| r35_1961(glval) = VariableAddress[x140] : +# 35| mu35_1962(String) = Uninitialized[x140] : &:r35_1961 +# 35| r35_1963(glval) = FunctionAddress[String] : +# 35| v35_1964(void) = Call[String] : func:r35_1963, this:r35_1961 +# 35| mu35_1965(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1961 +# 35| r35_1967(glval) = VariableAddress[x140] : +# 35| r35_1968(glval) = FunctionAddress[~String] : +# 35| v35_1969(void) = Call[~String] : func:r35_1968, this:r35_1967 +# 35| mu35_1970(unknown) = ^CallSideEffect : ~m? +# 35| v35_1971(void) = ^IndirectReadSideEffect[-1] : &:r35_1967, ~m? +# 35| mu35_1972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1967 +# 35| r35_1973(bool) = Constant[0] : +# 35| v35_1974(void) = ConditionalBranch : r35_1973 #-----| False -> Block 141 #-----| True -> Block 1026 -# 442| Block 141 -# 442| r442_1(glval) = VariableAddress[x141] : -# 442| mu442_2(String) = Uninitialized[x141] : &:r442_1 -# 442| r442_3(glval) = FunctionAddress[String] : -# 442| v442_4(void) = Call[String] : func:r442_3, this:r442_1 -# 442| mu442_5(unknown) = ^CallSideEffect : ~m? -# 442| mu442_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r442_1 -# 443| r443_1(glval) = VariableAddress[x141] : -# 443| r443_2(glval) = FunctionAddress[~String] : -# 443| v443_3(void) = Call[~String] : func:r443_2, this:r443_1 -# 443| mu443_4(unknown) = ^CallSideEffect : ~m? -# 443| v443_5(void) = ^IndirectReadSideEffect[-1] : &:r443_1, ~m? -# 443| mu443_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r443_1 -# 443| r443_7(bool) = Constant[0] : -# 443| v443_8(void) = ConditionalBranch : r443_7 +# 35| Block 141 +# 35| r35_1975(glval) = VariableAddress[x141] : +# 35| mu35_1976(String) = Uninitialized[x141] : &:r35_1975 +# 35| r35_1977(glval) = FunctionAddress[String] : +# 35| v35_1978(void) = Call[String] : func:r35_1977, this:r35_1975 +# 35| mu35_1979(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1975 +# 35| r35_1981(glval) = VariableAddress[x141] : +# 35| r35_1982(glval) = FunctionAddress[~String] : +# 35| v35_1983(void) = Call[~String] : func:r35_1982, this:r35_1981 +# 35| mu35_1984(unknown) = ^CallSideEffect : ~m? +# 35| v35_1985(void) = ^IndirectReadSideEffect[-1] : &:r35_1981, ~m? +# 35| mu35_1986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1981 +# 35| r35_1987(bool) = Constant[0] : +# 35| v35_1988(void) = ConditionalBranch : r35_1987 #-----| False -> Block 142 #-----| True -> Block 1026 -# 445| Block 142 -# 445| r445_1(glval) = VariableAddress[x142] : -# 445| mu445_2(String) = Uninitialized[x142] : &:r445_1 -# 445| r445_3(glval) = FunctionAddress[String] : -# 445| v445_4(void) = Call[String] : func:r445_3, this:r445_1 -# 445| mu445_5(unknown) = ^CallSideEffect : ~m? -# 445| mu445_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r445_1 -# 446| r446_1(glval) = VariableAddress[x142] : -# 446| r446_2(glval) = FunctionAddress[~String] : -# 446| v446_3(void) = Call[~String] : func:r446_2, this:r446_1 -# 446| mu446_4(unknown) = ^CallSideEffect : ~m? -# 446| v446_5(void) = ^IndirectReadSideEffect[-1] : &:r446_1, ~m? -# 446| mu446_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r446_1 -# 446| r446_7(bool) = Constant[0] : -# 446| v446_8(void) = ConditionalBranch : r446_7 +# 35| Block 142 +# 35| r35_1989(glval) = VariableAddress[x142] : +# 35| mu35_1990(String) = Uninitialized[x142] : &:r35_1989 +# 35| r35_1991(glval) = FunctionAddress[String] : +# 35| v35_1992(void) = Call[String] : func:r35_1991, this:r35_1989 +# 35| mu35_1993(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1989 +# 35| r35_1995(glval) = VariableAddress[x142] : +# 35| r35_1996(glval) = FunctionAddress[~String] : +# 35| v35_1997(void) = Call[~String] : func:r35_1996, this:r35_1995 +# 35| mu35_1998(unknown) = ^CallSideEffect : ~m? +# 35| v35_1999(void) = ^IndirectReadSideEffect[-1] : &:r35_1995, ~m? +# 35| mu35_2000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1995 +# 35| r35_2001(bool) = Constant[0] : +# 35| v35_2002(void) = ConditionalBranch : r35_2001 #-----| False -> Block 143 #-----| True -> Block 1026 -# 448| Block 143 -# 448| r448_1(glval) = VariableAddress[x143] : -# 448| mu448_2(String) = Uninitialized[x143] : &:r448_1 -# 448| r448_3(glval) = FunctionAddress[String] : -# 448| v448_4(void) = Call[String] : func:r448_3, this:r448_1 -# 448| mu448_5(unknown) = ^CallSideEffect : ~m? -# 448| mu448_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r448_1 -# 449| r449_1(glval) = VariableAddress[x143] : -# 449| r449_2(glval) = FunctionAddress[~String] : -# 449| v449_3(void) = Call[~String] : func:r449_2, this:r449_1 -# 449| mu449_4(unknown) = ^CallSideEffect : ~m? -# 449| v449_5(void) = ^IndirectReadSideEffect[-1] : &:r449_1, ~m? -# 449| mu449_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r449_1 -# 449| r449_7(bool) = Constant[0] : -# 449| v449_8(void) = ConditionalBranch : r449_7 +# 35| Block 143 +# 35| r35_2003(glval) = VariableAddress[x143] : +# 35| mu35_2004(String) = Uninitialized[x143] : &:r35_2003 +# 35| r35_2005(glval) = FunctionAddress[String] : +# 35| v35_2006(void) = Call[String] : func:r35_2005, this:r35_2003 +# 35| mu35_2007(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2003 +# 35| r35_2009(glval) = VariableAddress[x143] : +# 35| r35_2010(glval) = FunctionAddress[~String] : +# 35| v35_2011(void) = Call[~String] : func:r35_2010, this:r35_2009 +# 35| mu35_2012(unknown) = ^CallSideEffect : ~m? +# 35| v35_2013(void) = ^IndirectReadSideEffect[-1] : &:r35_2009, ~m? +# 35| mu35_2014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2009 +# 35| r35_2015(bool) = Constant[0] : +# 35| v35_2016(void) = ConditionalBranch : r35_2015 #-----| False -> Block 144 #-----| True -> Block 1026 -# 451| Block 144 -# 451| r451_1(glval) = VariableAddress[x144] : -# 451| mu451_2(String) = Uninitialized[x144] : &:r451_1 -# 451| r451_3(glval) = FunctionAddress[String] : -# 451| v451_4(void) = Call[String] : func:r451_3, this:r451_1 -# 451| mu451_5(unknown) = ^CallSideEffect : ~m? -# 451| mu451_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r451_1 -# 452| r452_1(glval) = VariableAddress[x144] : -# 452| r452_2(glval) = FunctionAddress[~String] : -# 452| v452_3(void) = Call[~String] : func:r452_2, this:r452_1 -# 452| mu452_4(unknown) = ^CallSideEffect : ~m? -# 452| v452_5(void) = ^IndirectReadSideEffect[-1] : &:r452_1, ~m? -# 452| mu452_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r452_1 -# 452| r452_7(bool) = Constant[0] : -# 452| v452_8(void) = ConditionalBranch : r452_7 +# 35| Block 144 +# 35| r35_2017(glval) = VariableAddress[x144] : +# 35| mu35_2018(String) = Uninitialized[x144] : &:r35_2017 +# 35| r35_2019(glval) = FunctionAddress[String] : +# 35| v35_2020(void) = Call[String] : func:r35_2019, this:r35_2017 +# 35| mu35_2021(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2017 +# 35| r35_2023(glval) = VariableAddress[x144] : +# 35| r35_2024(glval) = FunctionAddress[~String] : +# 35| v35_2025(void) = Call[~String] : func:r35_2024, this:r35_2023 +# 35| mu35_2026(unknown) = ^CallSideEffect : ~m? +# 35| v35_2027(void) = ^IndirectReadSideEffect[-1] : &:r35_2023, ~m? +# 35| mu35_2028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2023 +# 35| r35_2029(bool) = Constant[0] : +# 35| v35_2030(void) = ConditionalBranch : r35_2029 #-----| False -> Block 145 #-----| True -> Block 1026 -# 454| Block 145 -# 454| r454_1(glval) = VariableAddress[x145] : -# 454| mu454_2(String) = Uninitialized[x145] : &:r454_1 -# 454| r454_3(glval) = FunctionAddress[String] : -# 454| v454_4(void) = Call[String] : func:r454_3, this:r454_1 -# 454| mu454_5(unknown) = ^CallSideEffect : ~m? -# 454| mu454_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r454_1 -# 455| r455_1(glval) = VariableAddress[x145] : -# 455| r455_2(glval) = FunctionAddress[~String] : -# 455| v455_3(void) = Call[~String] : func:r455_2, this:r455_1 -# 455| mu455_4(unknown) = ^CallSideEffect : ~m? -# 455| v455_5(void) = ^IndirectReadSideEffect[-1] : &:r455_1, ~m? -# 455| mu455_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r455_1 -# 455| r455_7(bool) = Constant[0] : -# 455| v455_8(void) = ConditionalBranch : r455_7 +# 35| Block 145 +# 35| r35_2031(glval) = VariableAddress[x145] : +# 35| mu35_2032(String) = Uninitialized[x145] : &:r35_2031 +# 35| r35_2033(glval) = FunctionAddress[String] : +# 35| v35_2034(void) = Call[String] : func:r35_2033, this:r35_2031 +# 35| mu35_2035(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2031 +# 35| r35_2037(glval) = VariableAddress[x145] : +# 35| r35_2038(glval) = FunctionAddress[~String] : +# 35| v35_2039(void) = Call[~String] : func:r35_2038, this:r35_2037 +# 35| mu35_2040(unknown) = ^CallSideEffect : ~m? +# 35| v35_2041(void) = ^IndirectReadSideEffect[-1] : &:r35_2037, ~m? +# 35| mu35_2042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2037 +# 35| r35_2043(bool) = Constant[0] : +# 35| v35_2044(void) = ConditionalBranch : r35_2043 #-----| False -> Block 146 #-----| True -> Block 1026 -# 457| Block 146 -# 457| r457_1(glval) = VariableAddress[x146] : -# 457| mu457_2(String) = Uninitialized[x146] : &:r457_1 -# 457| r457_3(glval) = FunctionAddress[String] : -# 457| v457_4(void) = Call[String] : func:r457_3, this:r457_1 -# 457| mu457_5(unknown) = ^CallSideEffect : ~m? -# 457| mu457_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r457_1 -# 458| r458_1(glval) = VariableAddress[x146] : -# 458| r458_2(glval) = FunctionAddress[~String] : -# 458| v458_3(void) = Call[~String] : func:r458_2, this:r458_1 -# 458| mu458_4(unknown) = ^CallSideEffect : ~m? -# 458| v458_5(void) = ^IndirectReadSideEffect[-1] : &:r458_1, ~m? -# 458| mu458_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r458_1 -# 458| r458_7(bool) = Constant[0] : -# 458| v458_8(void) = ConditionalBranch : r458_7 +# 35| Block 146 +# 35| r35_2045(glval) = VariableAddress[x146] : +# 35| mu35_2046(String) = Uninitialized[x146] : &:r35_2045 +# 35| r35_2047(glval) = FunctionAddress[String] : +# 35| v35_2048(void) = Call[String] : func:r35_2047, this:r35_2045 +# 35| mu35_2049(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2045 +# 35| r35_2051(glval) = VariableAddress[x146] : +# 35| r35_2052(glval) = FunctionAddress[~String] : +# 35| v35_2053(void) = Call[~String] : func:r35_2052, this:r35_2051 +# 35| mu35_2054(unknown) = ^CallSideEffect : ~m? +# 35| v35_2055(void) = ^IndirectReadSideEffect[-1] : &:r35_2051, ~m? +# 35| mu35_2056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2051 +# 35| r35_2057(bool) = Constant[0] : +# 35| v35_2058(void) = ConditionalBranch : r35_2057 #-----| False -> Block 147 #-----| True -> Block 1026 -# 460| Block 147 -# 460| r460_1(glval) = VariableAddress[x147] : -# 460| mu460_2(String) = Uninitialized[x147] : &:r460_1 -# 460| r460_3(glval) = FunctionAddress[String] : -# 460| v460_4(void) = Call[String] : func:r460_3, this:r460_1 -# 460| mu460_5(unknown) = ^CallSideEffect : ~m? -# 460| mu460_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r460_1 -# 461| r461_1(glval) = VariableAddress[x147] : -# 461| r461_2(glval) = FunctionAddress[~String] : -# 461| v461_3(void) = Call[~String] : func:r461_2, this:r461_1 -# 461| mu461_4(unknown) = ^CallSideEffect : ~m? -# 461| v461_5(void) = ^IndirectReadSideEffect[-1] : &:r461_1, ~m? -# 461| mu461_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r461_1 -# 461| r461_7(bool) = Constant[0] : -# 461| v461_8(void) = ConditionalBranch : r461_7 +# 35| Block 147 +# 35| r35_2059(glval) = VariableAddress[x147] : +# 35| mu35_2060(String) = Uninitialized[x147] : &:r35_2059 +# 35| r35_2061(glval) = FunctionAddress[String] : +# 35| v35_2062(void) = Call[String] : func:r35_2061, this:r35_2059 +# 35| mu35_2063(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2059 +# 35| r35_2065(glval) = VariableAddress[x147] : +# 35| r35_2066(glval) = FunctionAddress[~String] : +# 35| v35_2067(void) = Call[~String] : func:r35_2066, this:r35_2065 +# 35| mu35_2068(unknown) = ^CallSideEffect : ~m? +# 35| v35_2069(void) = ^IndirectReadSideEffect[-1] : &:r35_2065, ~m? +# 35| mu35_2070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2065 +# 35| r35_2071(bool) = Constant[0] : +# 35| v35_2072(void) = ConditionalBranch : r35_2071 #-----| False -> Block 148 #-----| True -> Block 1026 -# 463| Block 148 -# 463| r463_1(glval) = VariableAddress[x148] : -# 463| mu463_2(String) = Uninitialized[x148] : &:r463_1 -# 463| r463_3(glval) = FunctionAddress[String] : -# 463| v463_4(void) = Call[String] : func:r463_3, this:r463_1 -# 463| mu463_5(unknown) = ^CallSideEffect : ~m? -# 463| mu463_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r463_1 -# 464| r464_1(glval) = VariableAddress[x148] : -# 464| r464_2(glval) = FunctionAddress[~String] : -# 464| v464_3(void) = Call[~String] : func:r464_2, this:r464_1 -# 464| mu464_4(unknown) = ^CallSideEffect : ~m? -# 464| v464_5(void) = ^IndirectReadSideEffect[-1] : &:r464_1, ~m? -# 464| mu464_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r464_1 -# 464| r464_7(bool) = Constant[0] : -# 464| v464_8(void) = ConditionalBranch : r464_7 +# 35| Block 148 +# 35| r35_2073(glval) = VariableAddress[x148] : +# 35| mu35_2074(String) = Uninitialized[x148] : &:r35_2073 +# 35| r35_2075(glval) = FunctionAddress[String] : +# 35| v35_2076(void) = Call[String] : func:r35_2075, this:r35_2073 +# 35| mu35_2077(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2073 +# 35| r35_2079(glval) = VariableAddress[x148] : +# 35| r35_2080(glval) = FunctionAddress[~String] : +# 35| v35_2081(void) = Call[~String] : func:r35_2080, this:r35_2079 +# 35| mu35_2082(unknown) = ^CallSideEffect : ~m? +# 35| v35_2083(void) = ^IndirectReadSideEffect[-1] : &:r35_2079, ~m? +# 35| mu35_2084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2079 +# 35| r35_2085(bool) = Constant[0] : +# 35| v35_2086(void) = ConditionalBranch : r35_2085 #-----| False -> Block 149 #-----| True -> Block 1026 -# 466| Block 149 -# 466| r466_1(glval) = VariableAddress[x149] : -# 466| mu466_2(String) = Uninitialized[x149] : &:r466_1 -# 466| r466_3(glval) = FunctionAddress[String] : -# 466| v466_4(void) = Call[String] : func:r466_3, this:r466_1 -# 466| mu466_5(unknown) = ^CallSideEffect : ~m? -# 466| mu466_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r466_1 -# 467| r467_1(glval) = VariableAddress[x149] : -# 467| r467_2(glval) = FunctionAddress[~String] : -# 467| v467_3(void) = Call[~String] : func:r467_2, this:r467_1 -# 467| mu467_4(unknown) = ^CallSideEffect : ~m? -# 467| v467_5(void) = ^IndirectReadSideEffect[-1] : &:r467_1, ~m? -# 467| mu467_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r467_1 -# 467| r467_7(bool) = Constant[0] : -# 467| v467_8(void) = ConditionalBranch : r467_7 +# 35| Block 149 +# 35| r35_2087(glval) = VariableAddress[x149] : +# 35| mu35_2088(String) = Uninitialized[x149] : &:r35_2087 +# 35| r35_2089(glval) = FunctionAddress[String] : +# 35| v35_2090(void) = Call[String] : func:r35_2089, this:r35_2087 +# 35| mu35_2091(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2087 +# 35| r35_2093(glval) = VariableAddress[x149] : +# 35| r35_2094(glval) = FunctionAddress[~String] : +# 35| v35_2095(void) = Call[~String] : func:r35_2094, this:r35_2093 +# 35| mu35_2096(unknown) = ^CallSideEffect : ~m? +# 35| v35_2097(void) = ^IndirectReadSideEffect[-1] : &:r35_2093, ~m? +# 35| mu35_2098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2093 +# 35| r35_2099(bool) = Constant[0] : +# 35| v35_2100(void) = ConditionalBranch : r35_2099 #-----| False -> Block 150 #-----| True -> Block 1026 -# 469| Block 150 -# 469| r469_1(glval) = VariableAddress[x150] : -# 469| mu469_2(String) = Uninitialized[x150] : &:r469_1 -# 469| r469_3(glval) = FunctionAddress[String] : -# 469| v469_4(void) = Call[String] : func:r469_3, this:r469_1 -# 469| mu469_5(unknown) = ^CallSideEffect : ~m? -# 469| mu469_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r469_1 -# 470| r470_1(glval) = VariableAddress[x150] : -# 470| r470_2(glval) = FunctionAddress[~String] : -# 470| v470_3(void) = Call[~String] : func:r470_2, this:r470_1 -# 470| mu470_4(unknown) = ^CallSideEffect : ~m? -# 470| v470_5(void) = ^IndirectReadSideEffect[-1] : &:r470_1, ~m? -# 470| mu470_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r470_1 -# 470| r470_7(bool) = Constant[0] : -# 470| v470_8(void) = ConditionalBranch : r470_7 +# 35| Block 150 +# 35| r35_2101(glval) = VariableAddress[x150] : +# 35| mu35_2102(String) = Uninitialized[x150] : &:r35_2101 +# 35| r35_2103(glval) = FunctionAddress[String] : +# 35| v35_2104(void) = Call[String] : func:r35_2103, this:r35_2101 +# 35| mu35_2105(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2101 +# 35| r35_2107(glval) = VariableAddress[x150] : +# 35| r35_2108(glval) = FunctionAddress[~String] : +# 35| v35_2109(void) = Call[~String] : func:r35_2108, this:r35_2107 +# 35| mu35_2110(unknown) = ^CallSideEffect : ~m? +# 35| v35_2111(void) = ^IndirectReadSideEffect[-1] : &:r35_2107, ~m? +# 35| mu35_2112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2107 +# 35| r35_2113(bool) = Constant[0] : +# 35| v35_2114(void) = ConditionalBranch : r35_2113 #-----| False -> Block 151 #-----| True -> Block 1026 -# 472| Block 151 -# 472| r472_1(glval) = VariableAddress[x151] : -# 472| mu472_2(String) = Uninitialized[x151] : &:r472_1 -# 472| r472_3(glval) = FunctionAddress[String] : -# 472| v472_4(void) = Call[String] : func:r472_3, this:r472_1 -# 472| mu472_5(unknown) = ^CallSideEffect : ~m? -# 472| mu472_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r472_1 -# 473| r473_1(glval) = VariableAddress[x151] : -# 473| r473_2(glval) = FunctionAddress[~String] : -# 473| v473_3(void) = Call[~String] : func:r473_2, this:r473_1 -# 473| mu473_4(unknown) = ^CallSideEffect : ~m? -# 473| v473_5(void) = ^IndirectReadSideEffect[-1] : &:r473_1, ~m? -# 473| mu473_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r473_1 -# 473| r473_7(bool) = Constant[0] : -# 473| v473_8(void) = ConditionalBranch : r473_7 +# 35| Block 151 +# 35| r35_2115(glval) = VariableAddress[x151] : +# 35| mu35_2116(String) = Uninitialized[x151] : &:r35_2115 +# 35| r35_2117(glval) = FunctionAddress[String] : +# 35| v35_2118(void) = Call[String] : func:r35_2117, this:r35_2115 +# 35| mu35_2119(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2115 +# 35| r35_2121(glval) = VariableAddress[x151] : +# 35| r35_2122(glval) = FunctionAddress[~String] : +# 35| v35_2123(void) = Call[~String] : func:r35_2122, this:r35_2121 +# 35| mu35_2124(unknown) = ^CallSideEffect : ~m? +# 35| v35_2125(void) = ^IndirectReadSideEffect[-1] : &:r35_2121, ~m? +# 35| mu35_2126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2121 +# 35| r35_2127(bool) = Constant[0] : +# 35| v35_2128(void) = ConditionalBranch : r35_2127 #-----| False -> Block 152 #-----| True -> Block 1026 -# 475| Block 152 -# 475| r475_1(glval) = VariableAddress[x152] : -# 475| mu475_2(String) = Uninitialized[x152] : &:r475_1 -# 475| r475_3(glval) = FunctionAddress[String] : -# 475| v475_4(void) = Call[String] : func:r475_3, this:r475_1 -# 475| mu475_5(unknown) = ^CallSideEffect : ~m? -# 475| mu475_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r475_1 -# 476| r476_1(glval) = VariableAddress[x152] : -# 476| r476_2(glval) = FunctionAddress[~String] : -# 476| v476_3(void) = Call[~String] : func:r476_2, this:r476_1 -# 476| mu476_4(unknown) = ^CallSideEffect : ~m? -# 476| v476_5(void) = ^IndirectReadSideEffect[-1] : &:r476_1, ~m? -# 476| mu476_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r476_1 -# 476| r476_7(bool) = Constant[0] : -# 476| v476_8(void) = ConditionalBranch : r476_7 +# 35| Block 152 +# 35| r35_2129(glval) = VariableAddress[x152] : +# 35| mu35_2130(String) = Uninitialized[x152] : &:r35_2129 +# 35| r35_2131(glval) = FunctionAddress[String] : +# 35| v35_2132(void) = Call[String] : func:r35_2131, this:r35_2129 +# 35| mu35_2133(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2129 +# 35| r35_2135(glval) = VariableAddress[x152] : +# 35| r35_2136(glval) = FunctionAddress[~String] : +# 35| v35_2137(void) = Call[~String] : func:r35_2136, this:r35_2135 +# 35| mu35_2138(unknown) = ^CallSideEffect : ~m? +# 35| v35_2139(void) = ^IndirectReadSideEffect[-1] : &:r35_2135, ~m? +# 35| mu35_2140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2135 +# 35| r35_2141(bool) = Constant[0] : +# 35| v35_2142(void) = ConditionalBranch : r35_2141 #-----| False -> Block 153 #-----| True -> Block 1026 -# 478| Block 153 -# 478| r478_1(glval) = VariableAddress[x153] : -# 478| mu478_2(String) = Uninitialized[x153] : &:r478_1 -# 478| r478_3(glval) = FunctionAddress[String] : -# 478| v478_4(void) = Call[String] : func:r478_3, this:r478_1 -# 478| mu478_5(unknown) = ^CallSideEffect : ~m? -# 478| mu478_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r478_1 -# 479| r479_1(glval) = VariableAddress[x153] : -# 479| r479_2(glval) = FunctionAddress[~String] : -# 479| v479_3(void) = Call[~String] : func:r479_2, this:r479_1 -# 479| mu479_4(unknown) = ^CallSideEffect : ~m? -# 479| v479_5(void) = ^IndirectReadSideEffect[-1] : &:r479_1, ~m? -# 479| mu479_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r479_1 -# 479| r479_7(bool) = Constant[0] : -# 479| v479_8(void) = ConditionalBranch : r479_7 +# 35| Block 153 +# 35| r35_2143(glval) = VariableAddress[x153] : +# 35| mu35_2144(String) = Uninitialized[x153] : &:r35_2143 +# 35| r35_2145(glval) = FunctionAddress[String] : +# 35| v35_2146(void) = Call[String] : func:r35_2145, this:r35_2143 +# 35| mu35_2147(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2143 +# 35| r35_2149(glval) = VariableAddress[x153] : +# 35| r35_2150(glval) = FunctionAddress[~String] : +# 35| v35_2151(void) = Call[~String] : func:r35_2150, this:r35_2149 +# 35| mu35_2152(unknown) = ^CallSideEffect : ~m? +# 35| v35_2153(void) = ^IndirectReadSideEffect[-1] : &:r35_2149, ~m? +# 35| mu35_2154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2149 +# 35| r35_2155(bool) = Constant[0] : +# 35| v35_2156(void) = ConditionalBranch : r35_2155 #-----| False -> Block 154 #-----| True -> Block 1026 -# 481| Block 154 -# 481| r481_1(glval) = VariableAddress[x154] : -# 481| mu481_2(String) = Uninitialized[x154] : &:r481_1 -# 481| r481_3(glval) = FunctionAddress[String] : -# 481| v481_4(void) = Call[String] : func:r481_3, this:r481_1 -# 481| mu481_5(unknown) = ^CallSideEffect : ~m? -# 481| mu481_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r481_1 -# 482| r482_1(glval) = VariableAddress[x154] : -# 482| r482_2(glval) = FunctionAddress[~String] : -# 482| v482_3(void) = Call[~String] : func:r482_2, this:r482_1 -# 482| mu482_4(unknown) = ^CallSideEffect : ~m? -# 482| v482_5(void) = ^IndirectReadSideEffect[-1] : &:r482_1, ~m? -# 482| mu482_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r482_1 -# 482| r482_7(bool) = Constant[0] : -# 482| v482_8(void) = ConditionalBranch : r482_7 +# 35| Block 154 +# 35| r35_2157(glval) = VariableAddress[x154] : +# 35| mu35_2158(String) = Uninitialized[x154] : &:r35_2157 +# 35| r35_2159(glval) = FunctionAddress[String] : +# 35| v35_2160(void) = Call[String] : func:r35_2159, this:r35_2157 +# 35| mu35_2161(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2157 +# 35| r35_2163(glval) = VariableAddress[x154] : +# 35| r35_2164(glval) = FunctionAddress[~String] : +# 35| v35_2165(void) = Call[~String] : func:r35_2164, this:r35_2163 +# 35| mu35_2166(unknown) = ^CallSideEffect : ~m? +# 35| v35_2167(void) = ^IndirectReadSideEffect[-1] : &:r35_2163, ~m? +# 35| mu35_2168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2163 +# 35| r35_2169(bool) = Constant[0] : +# 35| v35_2170(void) = ConditionalBranch : r35_2169 #-----| False -> Block 155 #-----| True -> Block 1026 -# 484| Block 155 -# 484| r484_1(glval) = VariableAddress[x155] : -# 484| mu484_2(String) = Uninitialized[x155] : &:r484_1 -# 484| r484_3(glval) = FunctionAddress[String] : -# 484| v484_4(void) = Call[String] : func:r484_3, this:r484_1 -# 484| mu484_5(unknown) = ^CallSideEffect : ~m? -# 484| mu484_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r484_1 -# 485| r485_1(glval) = VariableAddress[x155] : -# 485| r485_2(glval) = FunctionAddress[~String] : -# 485| v485_3(void) = Call[~String] : func:r485_2, this:r485_1 -# 485| mu485_4(unknown) = ^CallSideEffect : ~m? -# 485| v485_5(void) = ^IndirectReadSideEffect[-1] : &:r485_1, ~m? -# 485| mu485_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r485_1 -# 485| r485_7(bool) = Constant[0] : -# 485| v485_8(void) = ConditionalBranch : r485_7 +# 35| Block 155 +# 35| r35_2171(glval) = VariableAddress[x155] : +# 35| mu35_2172(String) = Uninitialized[x155] : &:r35_2171 +# 35| r35_2173(glval) = FunctionAddress[String] : +# 35| v35_2174(void) = Call[String] : func:r35_2173, this:r35_2171 +# 35| mu35_2175(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2171 +# 35| r35_2177(glval) = VariableAddress[x155] : +# 35| r35_2178(glval) = FunctionAddress[~String] : +# 35| v35_2179(void) = Call[~String] : func:r35_2178, this:r35_2177 +# 35| mu35_2180(unknown) = ^CallSideEffect : ~m? +# 35| v35_2181(void) = ^IndirectReadSideEffect[-1] : &:r35_2177, ~m? +# 35| mu35_2182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2177 +# 35| r35_2183(bool) = Constant[0] : +# 35| v35_2184(void) = ConditionalBranch : r35_2183 #-----| False -> Block 156 #-----| True -> Block 1026 -# 487| Block 156 -# 487| r487_1(glval) = VariableAddress[x156] : -# 487| mu487_2(String) = Uninitialized[x156] : &:r487_1 -# 487| r487_3(glval) = FunctionAddress[String] : -# 487| v487_4(void) = Call[String] : func:r487_3, this:r487_1 -# 487| mu487_5(unknown) = ^CallSideEffect : ~m? -# 487| mu487_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r487_1 -# 488| r488_1(glval) = VariableAddress[x156] : -# 488| r488_2(glval) = FunctionAddress[~String] : -# 488| v488_3(void) = Call[~String] : func:r488_2, this:r488_1 -# 488| mu488_4(unknown) = ^CallSideEffect : ~m? -# 488| v488_5(void) = ^IndirectReadSideEffect[-1] : &:r488_1, ~m? -# 488| mu488_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r488_1 -# 488| r488_7(bool) = Constant[0] : -# 488| v488_8(void) = ConditionalBranch : r488_7 +# 35| Block 156 +# 35| r35_2185(glval) = VariableAddress[x156] : +# 35| mu35_2186(String) = Uninitialized[x156] : &:r35_2185 +# 35| r35_2187(glval) = FunctionAddress[String] : +# 35| v35_2188(void) = Call[String] : func:r35_2187, this:r35_2185 +# 35| mu35_2189(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2185 +# 35| r35_2191(glval) = VariableAddress[x156] : +# 35| r35_2192(glval) = FunctionAddress[~String] : +# 35| v35_2193(void) = Call[~String] : func:r35_2192, this:r35_2191 +# 35| mu35_2194(unknown) = ^CallSideEffect : ~m? +# 35| v35_2195(void) = ^IndirectReadSideEffect[-1] : &:r35_2191, ~m? +# 35| mu35_2196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2191 +# 35| r35_2197(bool) = Constant[0] : +# 35| v35_2198(void) = ConditionalBranch : r35_2197 #-----| False -> Block 157 #-----| True -> Block 1026 -# 490| Block 157 -# 490| r490_1(glval) = VariableAddress[x157] : -# 490| mu490_2(String) = Uninitialized[x157] : &:r490_1 -# 490| r490_3(glval) = FunctionAddress[String] : -# 490| v490_4(void) = Call[String] : func:r490_3, this:r490_1 -# 490| mu490_5(unknown) = ^CallSideEffect : ~m? -# 490| mu490_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r490_1 -# 491| r491_1(glval) = VariableAddress[x157] : -# 491| r491_2(glval) = FunctionAddress[~String] : -# 491| v491_3(void) = Call[~String] : func:r491_2, this:r491_1 -# 491| mu491_4(unknown) = ^CallSideEffect : ~m? -# 491| v491_5(void) = ^IndirectReadSideEffect[-1] : &:r491_1, ~m? -# 491| mu491_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r491_1 -# 491| r491_7(bool) = Constant[0] : -# 491| v491_8(void) = ConditionalBranch : r491_7 +# 35| Block 157 +# 35| r35_2199(glval) = VariableAddress[x157] : +# 35| mu35_2200(String) = Uninitialized[x157] : &:r35_2199 +# 35| r35_2201(glval) = FunctionAddress[String] : +# 35| v35_2202(void) = Call[String] : func:r35_2201, this:r35_2199 +# 35| mu35_2203(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2199 +# 35| r35_2205(glval) = VariableAddress[x157] : +# 35| r35_2206(glval) = FunctionAddress[~String] : +# 35| v35_2207(void) = Call[~String] : func:r35_2206, this:r35_2205 +# 35| mu35_2208(unknown) = ^CallSideEffect : ~m? +# 35| v35_2209(void) = ^IndirectReadSideEffect[-1] : &:r35_2205, ~m? +# 35| mu35_2210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2205 +# 35| r35_2211(bool) = Constant[0] : +# 35| v35_2212(void) = ConditionalBranch : r35_2211 #-----| False -> Block 158 #-----| True -> Block 1026 -# 493| Block 158 -# 493| r493_1(glval) = VariableAddress[x158] : -# 493| mu493_2(String) = Uninitialized[x158] : &:r493_1 -# 493| r493_3(glval) = FunctionAddress[String] : -# 493| v493_4(void) = Call[String] : func:r493_3, this:r493_1 -# 493| mu493_5(unknown) = ^CallSideEffect : ~m? -# 493| mu493_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r493_1 -# 494| r494_1(glval) = VariableAddress[x158] : -# 494| r494_2(glval) = FunctionAddress[~String] : -# 494| v494_3(void) = Call[~String] : func:r494_2, this:r494_1 -# 494| mu494_4(unknown) = ^CallSideEffect : ~m? -# 494| v494_5(void) = ^IndirectReadSideEffect[-1] : &:r494_1, ~m? -# 494| mu494_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r494_1 -# 494| r494_7(bool) = Constant[0] : -# 494| v494_8(void) = ConditionalBranch : r494_7 +# 35| Block 158 +# 35| r35_2213(glval) = VariableAddress[x158] : +# 35| mu35_2214(String) = Uninitialized[x158] : &:r35_2213 +# 35| r35_2215(glval) = FunctionAddress[String] : +# 35| v35_2216(void) = Call[String] : func:r35_2215, this:r35_2213 +# 35| mu35_2217(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2213 +# 35| r35_2219(glval) = VariableAddress[x158] : +# 35| r35_2220(glval) = FunctionAddress[~String] : +# 35| v35_2221(void) = Call[~String] : func:r35_2220, this:r35_2219 +# 35| mu35_2222(unknown) = ^CallSideEffect : ~m? +# 35| v35_2223(void) = ^IndirectReadSideEffect[-1] : &:r35_2219, ~m? +# 35| mu35_2224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2219 +# 35| r35_2225(bool) = Constant[0] : +# 35| v35_2226(void) = ConditionalBranch : r35_2225 #-----| False -> Block 159 #-----| True -> Block 1026 -# 496| Block 159 -# 496| r496_1(glval) = VariableAddress[x159] : -# 496| mu496_2(String) = Uninitialized[x159] : &:r496_1 -# 496| r496_3(glval) = FunctionAddress[String] : -# 496| v496_4(void) = Call[String] : func:r496_3, this:r496_1 -# 496| mu496_5(unknown) = ^CallSideEffect : ~m? -# 496| mu496_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r496_1 -# 497| r497_1(glval) = VariableAddress[x159] : -# 497| r497_2(glval) = FunctionAddress[~String] : -# 497| v497_3(void) = Call[~String] : func:r497_2, this:r497_1 -# 497| mu497_4(unknown) = ^CallSideEffect : ~m? -# 497| v497_5(void) = ^IndirectReadSideEffect[-1] : &:r497_1, ~m? -# 497| mu497_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r497_1 -# 497| r497_7(bool) = Constant[0] : -# 497| v497_8(void) = ConditionalBranch : r497_7 +# 35| Block 159 +# 35| r35_2227(glval) = VariableAddress[x159] : +# 35| mu35_2228(String) = Uninitialized[x159] : &:r35_2227 +# 35| r35_2229(glval) = FunctionAddress[String] : +# 35| v35_2230(void) = Call[String] : func:r35_2229, this:r35_2227 +# 35| mu35_2231(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2227 +# 35| r35_2233(glval) = VariableAddress[x159] : +# 35| r35_2234(glval) = FunctionAddress[~String] : +# 35| v35_2235(void) = Call[~String] : func:r35_2234, this:r35_2233 +# 35| mu35_2236(unknown) = ^CallSideEffect : ~m? +# 35| v35_2237(void) = ^IndirectReadSideEffect[-1] : &:r35_2233, ~m? +# 35| mu35_2238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2233 +# 35| r35_2239(bool) = Constant[0] : +# 35| v35_2240(void) = ConditionalBranch : r35_2239 #-----| False -> Block 160 #-----| True -> Block 1026 -# 499| Block 160 -# 499| r499_1(glval) = VariableAddress[x160] : -# 499| mu499_2(String) = Uninitialized[x160] : &:r499_1 -# 499| r499_3(glval) = FunctionAddress[String] : -# 499| v499_4(void) = Call[String] : func:r499_3, this:r499_1 -# 499| mu499_5(unknown) = ^CallSideEffect : ~m? -# 499| mu499_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r499_1 -# 500| r500_1(glval) = VariableAddress[x160] : -# 500| r500_2(glval) = FunctionAddress[~String] : -# 500| v500_3(void) = Call[~String] : func:r500_2, this:r500_1 -# 500| mu500_4(unknown) = ^CallSideEffect : ~m? -# 500| v500_5(void) = ^IndirectReadSideEffect[-1] : &:r500_1, ~m? -# 500| mu500_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r500_1 -# 500| r500_7(bool) = Constant[0] : -# 500| v500_8(void) = ConditionalBranch : r500_7 +# 35| Block 160 +# 35| r35_2241(glval) = VariableAddress[x160] : +# 35| mu35_2242(String) = Uninitialized[x160] : &:r35_2241 +# 35| r35_2243(glval) = FunctionAddress[String] : +# 35| v35_2244(void) = Call[String] : func:r35_2243, this:r35_2241 +# 35| mu35_2245(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2241 +# 35| r35_2247(glval) = VariableAddress[x160] : +# 35| r35_2248(glval) = FunctionAddress[~String] : +# 35| v35_2249(void) = Call[~String] : func:r35_2248, this:r35_2247 +# 35| mu35_2250(unknown) = ^CallSideEffect : ~m? +# 35| v35_2251(void) = ^IndirectReadSideEffect[-1] : &:r35_2247, ~m? +# 35| mu35_2252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2247 +# 35| r35_2253(bool) = Constant[0] : +# 35| v35_2254(void) = ConditionalBranch : r35_2253 #-----| False -> Block 161 #-----| True -> Block 1026 -# 502| Block 161 -# 502| r502_1(glval) = VariableAddress[x161] : -# 502| mu502_2(String) = Uninitialized[x161] : &:r502_1 -# 502| r502_3(glval) = FunctionAddress[String] : -# 502| v502_4(void) = Call[String] : func:r502_3, this:r502_1 -# 502| mu502_5(unknown) = ^CallSideEffect : ~m? -# 502| mu502_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r502_1 -# 503| r503_1(glval) = VariableAddress[x161] : -# 503| r503_2(glval) = FunctionAddress[~String] : -# 503| v503_3(void) = Call[~String] : func:r503_2, this:r503_1 -# 503| mu503_4(unknown) = ^CallSideEffect : ~m? -# 503| v503_5(void) = ^IndirectReadSideEffect[-1] : &:r503_1, ~m? -# 503| mu503_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r503_1 -# 503| r503_7(bool) = Constant[0] : -# 503| v503_8(void) = ConditionalBranch : r503_7 +# 35| Block 161 +# 35| r35_2255(glval) = VariableAddress[x161] : +# 35| mu35_2256(String) = Uninitialized[x161] : &:r35_2255 +# 35| r35_2257(glval) = FunctionAddress[String] : +# 35| v35_2258(void) = Call[String] : func:r35_2257, this:r35_2255 +# 35| mu35_2259(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2255 +# 35| r35_2261(glval) = VariableAddress[x161] : +# 35| r35_2262(glval) = FunctionAddress[~String] : +# 35| v35_2263(void) = Call[~String] : func:r35_2262, this:r35_2261 +# 35| mu35_2264(unknown) = ^CallSideEffect : ~m? +# 35| v35_2265(void) = ^IndirectReadSideEffect[-1] : &:r35_2261, ~m? +# 35| mu35_2266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2261 +# 35| r35_2267(bool) = Constant[0] : +# 35| v35_2268(void) = ConditionalBranch : r35_2267 #-----| False -> Block 162 #-----| True -> Block 1026 -# 505| Block 162 -# 505| r505_1(glval) = VariableAddress[x162] : -# 505| mu505_2(String) = Uninitialized[x162] : &:r505_1 -# 505| r505_3(glval) = FunctionAddress[String] : -# 505| v505_4(void) = Call[String] : func:r505_3, this:r505_1 -# 505| mu505_5(unknown) = ^CallSideEffect : ~m? -# 505| mu505_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r505_1 -# 506| r506_1(glval) = VariableAddress[x162] : -# 506| r506_2(glval) = FunctionAddress[~String] : -# 506| v506_3(void) = Call[~String] : func:r506_2, this:r506_1 -# 506| mu506_4(unknown) = ^CallSideEffect : ~m? -# 506| v506_5(void) = ^IndirectReadSideEffect[-1] : &:r506_1, ~m? -# 506| mu506_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r506_1 -# 506| r506_7(bool) = Constant[0] : -# 506| v506_8(void) = ConditionalBranch : r506_7 +# 35| Block 162 +# 35| r35_2269(glval) = VariableAddress[x162] : +# 35| mu35_2270(String) = Uninitialized[x162] : &:r35_2269 +# 35| r35_2271(glval) = FunctionAddress[String] : +# 35| v35_2272(void) = Call[String] : func:r35_2271, this:r35_2269 +# 35| mu35_2273(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2269 +# 35| r35_2275(glval) = VariableAddress[x162] : +# 35| r35_2276(glval) = FunctionAddress[~String] : +# 35| v35_2277(void) = Call[~String] : func:r35_2276, this:r35_2275 +# 35| mu35_2278(unknown) = ^CallSideEffect : ~m? +# 35| v35_2279(void) = ^IndirectReadSideEffect[-1] : &:r35_2275, ~m? +# 35| mu35_2280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2275 +# 35| r35_2281(bool) = Constant[0] : +# 35| v35_2282(void) = ConditionalBranch : r35_2281 #-----| False -> Block 163 #-----| True -> Block 1026 -# 508| Block 163 -# 508| r508_1(glval) = VariableAddress[x163] : -# 508| mu508_2(String) = Uninitialized[x163] : &:r508_1 -# 508| r508_3(glval) = FunctionAddress[String] : -# 508| v508_4(void) = Call[String] : func:r508_3, this:r508_1 -# 508| mu508_5(unknown) = ^CallSideEffect : ~m? -# 508| mu508_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r508_1 -# 509| r509_1(glval) = VariableAddress[x163] : -# 509| r509_2(glval) = FunctionAddress[~String] : -# 509| v509_3(void) = Call[~String] : func:r509_2, this:r509_1 -# 509| mu509_4(unknown) = ^CallSideEffect : ~m? -# 509| v509_5(void) = ^IndirectReadSideEffect[-1] : &:r509_1, ~m? -# 509| mu509_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r509_1 -# 509| r509_7(bool) = Constant[0] : -# 509| v509_8(void) = ConditionalBranch : r509_7 +# 35| Block 163 +# 35| r35_2283(glval) = VariableAddress[x163] : +# 35| mu35_2284(String) = Uninitialized[x163] : &:r35_2283 +# 35| r35_2285(glval) = FunctionAddress[String] : +# 35| v35_2286(void) = Call[String] : func:r35_2285, this:r35_2283 +# 35| mu35_2287(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2283 +# 35| r35_2289(glval) = VariableAddress[x163] : +# 35| r35_2290(glval) = FunctionAddress[~String] : +# 35| v35_2291(void) = Call[~String] : func:r35_2290, this:r35_2289 +# 35| mu35_2292(unknown) = ^CallSideEffect : ~m? +# 35| v35_2293(void) = ^IndirectReadSideEffect[-1] : &:r35_2289, ~m? +# 35| mu35_2294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2289 +# 35| r35_2295(bool) = Constant[0] : +# 35| v35_2296(void) = ConditionalBranch : r35_2295 #-----| False -> Block 164 #-----| True -> Block 1026 -# 511| Block 164 -# 511| r511_1(glval) = VariableAddress[x164] : -# 511| mu511_2(String) = Uninitialized[x164] : &:r511_1 -# 511| r511_3(glval) = FunctionAddress[String] : -# 511| v511_4(void) = Call[String] : func:r511_3, this:r511_1 -# 511| mu511_5(unknown) = ^CallSideEffect : ~m? -# 511| mu511_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r511_1 -# 512| r512_1(glval) = VariableAddress[x164] : -# 512| r512_2(glval) = FunctionAddress[~String] : -# 512| v512_3(void) = Call[~String] : func:r512_2, this:r512_1 -# 512| mu512_4(unknown) = ^CallSideEffect : ~m? -# 512| v512_5(void) = ^IndirectReadSideEffect[-1] : &:r512_1, ~m? -# 512| mu512_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r512_1 -# 512| r512_7(bool) = Constant[0] : -# 512| v512_8(void) = ConditionalBranch : r512_7 +# 35| Block 164 +# 35| r35_2297(glval) = VariableAddress[x164] : +# 35| mu35_2298(String) = Uninitialized[x164] : &:r35_2297 +# 35| r35_2299(glval) = FunctionAddress[String] : +# 35| v35_2300(void) = Call[String] : func:r35_2299, this:r35_2297 +# 35| mu35_2301(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2297 +# 35| r35_2303(glval) = VariableAddress[x164] : +# 35| r35_2304(glval) = FunctionAddress[~String] : +# 35| v35_2305(void) = Call[~String] : func:r35_2304, this:r35_2303 +# 35| mu35_2306(unknown) = ^CallSideEffect : ~m? +# 35| v35_2307(void) = ^IndirectReadSideEffect[-1] : &:r35_2303, ~m? +# 35| mu35_2308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2303 +# 35| r35_2309(bool) = Constant[0] : +# 35| v35_2310(void) = ConditionalBranch : r35_2309 #-----| False -> Block 165 #-----| True -> Block 1026 -# 514| Block 165 -# 514| r514_1(glval) = VariableAddress[x165] : -# 514| mu514_2(String) = Uninitialized[x165] : &:r514_1 -# 514| r514_3(glval) = FunctionAddress[String] : -# 514| v514_4(void) = Call[String] : func:r514_3, this:r514_1 -# 514| mu514_5(unknown) = ^CallSideEffect : ~m? -# 514| mu514_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r514_1 -# 515| r515_1(glval) = VariableAddress[x165] : -# 515| r515_2(glval) = FunctionAddress[~String] : -# 515| v515_3(void) = Call[~String] : func:r515_2, this:r515_1 -# 515| mu515_4(unknown) = ^CallSideEffect : ~m? -# 515| v515_5(void) = ^IndirectReadSideEffect[-1] : &:r515_1, ~m? -# 515| mu515_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r515_1 -# 515| r515_7(bool) = Constant[0] : -# 515| v515_8(void) = ConditionalBranch : r515_7 +# 35| Block 165 +# 35| r35_2311(glval) = VariableAddress[x165] : +# 35| mu35_2312(String) = Uninitialized[x165] : &:r35_2311 +# 35| r35_2313(glval) = FunctionAddress[String] : +# 35| v35_2314(void) = Call[String] : func:r35_2313, this:r35_2311 +# 35| mu35_2315(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2311 +# 35| r35_2317(glval) = VariableAddress[x165] : +# 35| r35_2318(glval) = FunctionAddress[~String] : +# 35| v35_2319(void) = Call[~String] : func:r35_2318, this:r35_2317 +# 35| mu35_2320(unknown) = ^CallSideEffect : ~m? +# 35| v35_2321(void) = ^IndirectReadSideEffect[-1] : &:r35_2317, ~m? +# 35| mu35_2322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2317 +# 35| r35_2323(bool) = Constant[0] : +# 35| v35_2324(void) = ConditionalBranch : r35_2323 #-----| False -> Block 166 #-----| True -> Block 1026 -# 517| Block 166 -# 517| r517_1(glval) = VariableAddress[x166] : -# 517| mu517_2(String) = Uninitialized[x166] : &:r517_1 -# 517| r517_3(glval) = FunctionAddress[String] : -# 517| v517_4(void) = Call[String] : func:r517_3, this:r517_1 -# 517| mu517_5(unknown) = ^CallSideEffect : ~m? -# 517| mu517_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r517_1 -# 518| r518_1(glval) = VariableAddress[x166] : -# 518| r518_2(glval) = FunctionAddress[~String] : -# 518| v518_3(void) = Call[~String] : func:r518_2, this:r518_1 -# 518| mu518_4(unknown) = ^CallSideEffect : ~m? -# 518| v518_5(void) = ^IndirectReadSideEffect[-1] : &:r518_1, ~m? -# 518| mu518_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r518_1 -# 518| r518_7(bool) = Constant[0] : -# 518| v518_8(void) = ConditionalBranch : r518_7 +# 35| Block 166 +# 35| r35_2325(glval) = VariableAddress[x166] : +# 35| mu35_2326(String) = Uninitialized[x166] : &:r35_2325 +# 35| r35_2327(glval) = FunctionAddress[String] : +# 35| v35_2328(void) = Call[String] : func:r35_2327, this:r35_2325 +# 35| mu35_2329(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2325 +# 35| r35_2331(glval) = VariableAddress[x166] : +# 35| r35_2332(glval) = FunctionAddress[~String] : +# 35| v35_2333(void) = Call[~String] : func:r35_2332, this:r35_2331 +# 35| mu35_2334(unknown) = ^CallSideEffect : ~m? +# 35| v35_2335(void) = ^IndirectReadSideEffect[-1] : &:r35_2331, ~m? +# 35| mu35_2336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2331 +# 35| r35_2337(bool) = Constant[0] : +# 35| v35_2338(void) = ConditionalBranch : r35_2337 #-----| False -> Block 167 #-----| True -> Block 1026 -# 520| Block 167 -# 520| r520_1(glval) = VariableAddress[x167] : -# 520| mu520_2(String) = Uninitialized[x167] : &:r520_1 -# 520| r520_3(glval) = FunctionAddress[String] : -# 520| v520_4(void) = Call[String] : func:r520_3, this:r520_1 -# 520| mu520_5(unknown) = ^CallSideEffect : ~m? -# 520| mu520_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r520_1 -# 521| r521_1(glval) = VariableAddress[x167] : -# 521| r521_2(glval) = FunctionAddress[~String] : -# 521| v521_3(void) = Call[~String] : func:r521_2, this:r521_1 -# 521| mu521_4(unknown) = ^CallSideEffect : ~m? -# 521| v521_5(void) = ^IndirectReadSideEffect[-1] : &:r521_1, ~m? -# 521| mu521_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r521_1 -# 521| r521_7(bool) = Constant[0] : -# 521| v521_8(void) = ConditionalBranch : r521_7 +# 35| Block 167 +# 35| r35_2339(glval) = VariableAddress[x167] : +# 35| mu35_2340(String) = Uninitialized[x167] : &:r35_2339 +# 35| r35_2341(glval) = FunctionAddress[String] : +# 35| v35_2342(void) = Call[String] : func:r35_2341, this:r35_2339 +# 35| mu35_2343(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2339 +# 35| r35_2345(glval) = VariableAddress[x167] : +# 35| r35_2346(glval) = FunctionAddress[~String] : +# 35| v35_2347(void) = Call[~String] : func:r35_2346, this:r35_2345 +# 35| mu35_2348(unknown) = ^CallSideEffect : ~m? +# 35| v35_2349(void) = ^IndirectReadSideEffect[-1] : &:r35_2345, ~m? +# 35| mu35_2350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2345 +# 35| r35_2351(bool) = Constant[0] : +# 35| v35_2352(void) = ConditionalBranch : r35_2351 #-----| False -> Block 168 #-----| True -> Block 1026 -# 523| Block 168 -# 523| r523_1(glval) = VariableAddress[x168] : -# 523| mu523_2(String) = Uninitialized[x168] : &:r523_1 -# 523| r523_3(glval) = FunctionAddress[String] : -# 523| v523_4(void) = Call[String] : func:r523_3, this:r523_1 -# 523| mu523_5(unknown) = ^CallSideEffect : ~m? -# 523| mu523_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r523_1 -# 524| r524_1(glval) = VariableAddress[x168] : -# 524| r524_2(glval) = FunctionAddress[~String] : -# 524| v524_3(void) = Call[~String] : func:r524_2, this:r524_1 -# 524| mu524_4(unknown) = ^CallSideEffect : ~m? -# 524| v524_5(void) = ^IndirectReadSideEffect[-1] : &:r524_1, ~m? -# 524| mu524_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r524_1 -# 524| r524_7(bool) = Constant[0] : -# 524| v524_8(void) = ConditionalBranch : r524_7 +# 35| Block 168 +# 35| r35_2353(glval) = VariableAddress[x168] : +# 35| mu35_2354(String) = Uninitialized[x168] : &:r35_2353 +# 35| r35_2355(glval) = FunctionAddress[String] : +# 35| v35_2356(void) = Call[String] : func:r35_2355, this:r35_2353 +# 35| mu35_2357(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2353 +# 35| r35_2359(glval) = VariableAddress[x168] : +# 35| r35_2360(glval) = FunctionAddress[~String] : +# 35| v35_2361(void) = Call[~String] : func:r35_2360, this:r35_2359 +# 35| mu35_2362(unknown) = ^CallSideEffect : ~m? +# 35| v35_2363(void) = ^IndirectReadSideEffect[-1] : &:r35_2359, ~m? +# 35| mu35_2364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2359 +# 35| r35_2365(bool) = Constant[0] : +# 35| v35_2366(void) = ConditionalBranch : r35_2365 #-----| False -> Block 169 #-----| True -> Block 1026 -# 526| Block 169 -# 526| r526_1(glval) = VariableAddress[x169] : -# 526| mu526_2(String) = Uninitialized[x169] : &:r526_1 -# 526| r526_3(glval) = FunctionAddress[String] : -# 526| v526_4(void) = Call[String] : func:r526_3, this:r526_1 -# 526| mu526_5(unknown) = ^CallSideEffect : ~m? -# 526| mu526_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r526_1 -# 527| r527_1(glval) = VariableAddress[x169] : -# 527| r527_2(glval) = FunctionAddress[~String] : -# 527| v527_3(void) = Call[~String] : func:r527_2, this:r527_1 -# 527| mu527_4(unknown) = ^CallSideEffect : ~m? -# 527| v527_5(void) = ^IndirectReadSideEffect[-1] : &:r527_1, ~m? -# 527| mu527_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r527_1 -# 527| r527_7(bool) = Constant[0] : -# 527| v527_8(void) = ConditionalBranch : r527_7 +# 35| Block 169 +# 35| r35_2367(glval) = VariableAddress[x169] : +# 35| mu35_2368(String) = Uninitialized[x169] : &:r35_2367 +# 35| r35_2369(glval) = FunctionAddress[String] : +# 35| v35_2370(void) = Call[String] : func:r35_2369, this:r35_2367 +# 35| mu35_2371(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2367 +# 35| r35_2373(glval) = VariableAddress[x169] : +# 35| r35_2374(glval) = FunctionAddress[~String] : +# 35| v35_2375(void) = Call[~String] : func:r35_2374, this:r35_2373 +# 35| mu35_2376(unknown) = ^CallSideEffect : ~m? +# 35| v35_2377(void) = ^IndirectReadSideEffect[-1] : &:r35_2373, ~m? +# 35| mu35_2378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2373 +# 35| r35_2379(bool) = Constant[0] : +# 35| v35_2380(void) = ConditionalBranch : r35_2379 #-----| False -> Block 170 #-----| True -> Block 1026 -# 529| Block 170 -# 529| r529_1(glval) = VariableAddress[x170] : -# 529| mu529_2(String) = Uninitialized[x170] : &:r529_1 -# 529| r529_3(glval) = FunctionAddress[String] : -# 529| v529_4(void) = Call[String] : func:r529_3, this:r529_1 -# 529| mu529_5(unknown) = ^CallSideEffect : ~m? -# 529| mu529_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r529_1 -# 530| r530_1(glval) = VariableAddress[x170] : -# 530| r530_2(glval) = FunctionAddress[~String] : -# 530| v530_3(void) = Call[~String] : func:r530_2, this:r530_1 -# 530| mu530_4(unknown) = ^CallSideEffect : ~m? -# 530| v530_5(void) = ^IndirectReadSideEffect[-1] : &:r530_1, ~m? -# 530| mu530_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r530_1 -# 530| r530_7(bool) = Constant[0] : -# 530| v530_8(void) = ConditionalBranch : r530_7 +# 35| Block 170 +# 35| r35_2381(glval) = VariableAddress[x170] : +# 35| mu35_2382(String) = Uninitialized[x170] : &:r35_2381 +# 35| r35_2383(glval) = FunctionAddress[String] : +# 35| v35_2384(void) = Call[String] : func:r35_2383, this:r35_2381 +# 35| mu35_2385(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2381 +# 35| r35_2387(glval) = VariableAddress[x170] : +# 35| r35_2388(glval) = FunctionAddress[~String] : +# 35| v35_2389(void) = Call[~String] : func:r35_2388, this:r35_2387 +# 35| mu35_2390(unknown) = ^CallSideEffect : ~m? +# 35| v35_2391(void) = ^IndirectReadSideEffect[-1] : &:r35_2387, ~m? +# 35| mu35_2392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2387 +# 35| r35_2393(bool) = Constant[0] : +# 35| v35_2394(void) = ConditionalBranch : r35_2393 #-----| False -> Block 171 #-----| True -> Block 1026 -# 532| Block 171 -# 532| r532_1(glval) = VariableAddress[x171] : -# 532| mu532_2(String) = Uninitialized[x171] : &:r532_1 -# 532| r532_3(glval) = FunctionAddress[String] : -# 532| v532_4(void) = Call[String] : func:r532_3, this:r532_1 -# 532| mu532_5(unknown) = ^CallSideEffect : ~m? -# 532| mu532_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r532_1 -# 533| r533_1(glval) = VariableAddress[x171] : -# 533| r533_2(glval) = FunctionAddress[~String] : -# 533| v533_3(void) = Call[~String] : func:r533_2, this:r533_1 -# 533| mu533_4(unknown) = ^CallSideEffect : ~m? -# 533| v533_5(void) = ^IndirectReadSideEffect[-1] : &:r533_1, ~m? -# 533| mu533_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r533_1 -# 533| r533_7(bool) = Constant[0] : -# 533| v533_8(void) = ConditionalBranch : r533_7 +# 35| Block 171 +# 35| r35_2395(glval) = VariableAddress[x171] : +# 35| mu35_2396(String) = Uninitialized[x171] : &:r35_2395 +# 35| r35_2397(glval) = FunctionAddress[String] : +# 35| v35_2398(void) = Call[String] : func:r35_2397, this:r35_2395 +# 35| mu35_2399(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2395 +# 35| r35_2401(glval) = VariableAddress[x171] : +# 35| r35_2402(glval) = FunctionAddress[~String] : +# 35| v35_2403(void) = Call[~String] : func:r35_2402, this:r35_2401 +# 35| mu35_2404(unknown) = ^CallSideEffect : ~m? +# 35| v35_2405(void) = ^IndirectReadSideEffect[-1] : &:r35_2401, ~m? +# 35| mu35_2406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2401 +# 35| r35_2407(bool) = Constant[0] : +# 35| v35_2408(void) = ConditionalBranch : r35_2407 #-----| False -> Block 172 #-----| True -> Block 1026 -# 535| Block 172 -# 535| r535_1(glval) = VariableAddress[x172] : -# 535| mu535_2(String) = Uninitialized[x172] : &:r535_1 -# 535| r535_3(glval) = FunctionAddress[String] : -# 535| v535_4(void) = Call[String] : func:r535_3, this:r535_1 -# 535| mu535_5(unknown) = ^CallSideEffect : ~m? -# 535| mu535_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r535_1 -# 536| r536_1(glval) = VariableAddress[x172] : -# 536| r536_2(glval) = FunctionAddress[~String] : -# 536| v536_3(void) = Call[~String] : func:r536_2, this:r536_1 -# 536| mu536_4(unknown) = ^CallSideEffect : ~m? -# 536| v536_5(void) = ^IndirectReadSideEffect[-1] : &:r536_1, ~m? -# 536| mu536_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r536_1 -# 536| r536_7(bool) = Constant[0] : -# 536| v536_8(void) = ConditionalBranch : r536_7 +# 35| Block 172 +# 35| r35_2409(glval) = VariableAddress[x172] : +# 35| mu35_2410(String) = Uninitialized[x172] : &:r35_2409 +# 35| r35_2411(glval) = FunctionAddress[String] : +# 35| v35_2412(void) = Call[String] : func:r35_2411, this:r35_2409 +# 35| mu35_2413(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2409 +# 35| r35_2415(glval) = VariableAddress[x172] : +# 35| r35_2416(glval) = FunctionAddress[~String] : +# 35| v35_2417(void) = Call[~String] : func:r35_2416, this:r35_2415 +# 35| mu35_2418(unknown) = ^CallSideEffect : ~m? +# 35| v35_2419(void) = ^IndirectReadSideEffect[-1] : &:r35_2415, ~m? +# 35| mu35_2420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2415 +# 35| r35_2421(bool) = Constant[0] : +# 35| v35_2422(void) = ConditionalBranch : r35_2421 #-----| False -> Block 173 #-----| True -> Block 1026 -# 538| Block 173 -# 538| r538_1(glval) = VariableAddress[x173] : -# 538| mu538_2(String) = Uninitialized[x173] : &:r538_1 -# 538| r538_3(glval) = FunctionAddress[String] : -# 538| v538_4(void) = Call[String] : func:r538_3, this:r538_1 -# 538| mu538_5(unknown) = ^CallSideEffect : ~m? -# 538| mu538_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r538_1 -# 539| r539_1(glval) = VariableAddress[x173] : -# 539| r539_2(glval) = FunctionAddress[~String] : -# 539| v539_3(void) = Call[~String] : func:r539_2, this:r539_1 -# 539| mu539_4(unknown) = ^CallSideEffect : ~m? -# 539| v539_5(void) = ^IndirectReadSideEffect[-1] : &:r539_1, ~m? -# 539| mu539_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r539_1 -# 539| r539_7(bool) = Constant[0] : -# 539| v539_8(void) = ConditionalBranch : r539_7 +# 35| Block 173 +# 35| r35_2423(glval) = VariableAddress[x173] : +# 35| mu35_2424(String) = Uninitialized[x173] : &:r35_2423 +# 35| r35_2425(glval) = FunctionAddress[String] : +# 35| v35_2426(void) = Call[String] : func:r35_2425, this:r35_2423 +# 35| mu35_2427(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2423 +# 35| r35_2429(glval) = VariableAddress[x173] : +# 35| r35_2430(glval) = FunctionAddress[~String] : +# 35| v35_2431(void) = Call[~String] : func:r35_2430, this:r35_2429 +# 35| mu35_2432(unknown) = ^CallSideEffect : ~m? +# 35| v35_2433(void) = ^IndirectReadSideEffect[-1] : &:r35_2429, ~m? +# 35| mu35_2434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2429 +# 35| r35_2435(bool) = Constant[0] : +# 35| v35_2436(void) = ConditionalBranch : r35_2435 #-----| False -> Block 174 #-----| True -> Block 1026 -# 541| Block 174 -# 541| r541_1(glval) = VariableAddress[x174] : -# 541| mu541_2(String) = Uninitialized[x174] : &:r541_1 -# 541| r541_3(glval) = FunctionAddress[String] : -# 541| v541_4(void) = Call[String] : func:r541_3, this:r541_1 -# 541| mu541_5(unknown) = ^CallSideEffect : ~m? -# 541| mu541_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r541_1 -# 542| r542_1(glval) = VariableAddress[x174] : -# 542| r542_2(glval) = FunctionAddress[~String] : -# 542| v542_3(void) = Call[~String] : func:r542_2, this:r542_1 -# 542| mu542_4(unknown) = ^CallSideEffect : ~m? -# 542| v542_5(void) = ^IndirectReadSideEffect[-1] : &:r542_1, ~m? -# 542| mu542_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r542_1 -# 542| r542_7(bool) = Constant[0] : -# 542| v542_8(void) = ConditionalBranch : r542_7 +# 35| Block 174 +# 35| r35_2437(glval) = VariableAddress[x174] : +# 35| mu35_2438(String) = Uninitialized[x174] : &:r35_2437 +# 35| r35_2439(glval) = FunctionAddress[String] : +# 35| v35_2440(void) = Call[String] : func:r35_2439, this:r35_2437 +# 35| mu35_2441(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2437 +# 35| r35_2443(glval) = VariableAddress[x174] : +# 35| r35_2444(glval) = FunctionAddress[~String] : +# 35| v35_2445(void) = Call[~String] : func:r35_2444, this:r35_2443 +# 35| mu35_2446(unknown) = ^CallSideEffect : ~m? +# 35| v35_2447(void) = ^IndirectReadSideEffect[-1] : &:r35_2443, ~m? +# 35| mu35_2448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2443 +# 35| r35_2449(bool) = Constant[0] : +# 35| v35_2450(void) = ConditionalBranch : r35_2449 #-----| False -> Block 175 #-----| True -> Block 1026 -# 544| Block 175 -# 544| r544_1(glval) = VariableAddress[x175] : -# 544| mu544_2(String) = Uninitialized[x175] : &:r544_1 -# 544| r544_3(glval) = FunctionAddress[String] : -# 544| v544_4(void) = Call[String] : func:r544_3, this:r544_1 -# 544| mu544_5(unknown) = ^CallSideEffect : ~m? -# 544| mu544_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r544_1 -# 545| r545_1(glval) = VariableAddress[x175] : -# 545| r545_2(glval) = FunctionAddress[~String] : -# 545| v545_3(void) = Call[~String] : func:r545_2, this:r545_1 -# 545| mu545_4(unknown) = ^CallSideEffect : ~m? -# 545| v545_5(void) = ^IndirectReadSideEffect[-1] : &:r545_1, ~m? -# 545| mu545_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r545_1 -# 545| r545_7(bool) = Constant[0] : -# 545| v545_8(void) = ConditionalBranch : r545_7 +# 35| Block 175 +# 35| r35_2451(glval) = VariableAddress[x175] : +# 35| mu35_2452(String) = Uninitialized[x175] : &:r35_2451 +# 35| r35_2453(glval) = FunctionAddress[String] : +# 35| v35_2454(void) = Call[String] : func:r35_2453, this:r35_2451 +# 35| mu35_2455(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2451 +# 35| r35_2457(glval) = VariableAddress[x175] : +# 35| r35_2458(glval) = FunctionAddress[~String] : +# 35| v35_2459(void) = Call[~String] : func:r35_2458, this:r35_2457 +# 35| mu35_2460(unknown) = ^CallSideEffect : ~m? +# 35| v35_2461(void) = ^IndirectReadSideEffect[-1] : &:r35_2457, ~m? +# 35| mu35_2462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2457 +# 35| r35_2463(bool) = Constant[0] : +# 35| v35_2464(void) = ConditionalBranch : r35_2463 #-----| False -> Block 176 #-----| True -> Block 1026 -# 547| Block 176 -# 547| r547_1(glval) = VariableAddress[x176] : -# 547| mu547_2(String) = Uninitialized[x176] : &:r547_1 -# 547| r547_3(glval) = FunctionAddress[String] : -# 547| v547_4(void) = Call[String] : func:r547_3, this:r547_1 -# 547| mu547_5(unknown) = ^CallSideEffect : ~m? -# 547| mu547_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r547_1 -# 548| r548_1(glval) = VariableAddress[x176] : -# 548| r548_2(glval) = FunctionAddress[~String] : -# 548| v548_3(void) = Call[~String] : func:r548_2, this:r548_1 -# 548| mu548_4(unknown) = ^CallSideEffect : ~m? -# 548| v548_5(void) = ^IndirectReadSideEffect[-1] : &:r548_1, ~m? -# 548| mu548_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r548_1 -# 548| r548_7(bool) = Constant[0] : -# 548| v548_8(void) = ConditionalBranch : r548_7 +# 35| Block 176 +# 35| r35_2465(glval) = VariableAddress[x176] : +# 35| mu35_2466(String) = Uninitialized[x176] : &:r35_2465 +# 35| r35_2467(glval) = FunctionAddress[String] : +# 35| v35_2468(void) = Call[String] : func:r35_2467, this:r35_2465 +# 35| mu35_2469(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2465 +# 35| r35_2471(glval) = VariableAddress[x176] : +# 35| r35_2472(glval) = FunctionAddress[~String] : +# 35| v35_2473(void) = Call[~String] : func:r35_2472, this:r35_2471 +# 35| mu35_2474(unknown) = ^CallSideEffect : ~m? +# 35| v35_2475(void) = ^IndirectReadSideEffect[-1] : &:r35_2471, ~m? +# 35| mu35_2476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2471 +# 35| r35_2477(bool) = Constant[0] : +# 35| v35_2478(void) = ConditionalBranch : r35_2477 #-----| False -> Block 177 #-----| True -> Block 1026 -# 550| Block 177 -# 550| r550_1(glval) = VariableAddress[x177] : -# 550| mu550_2(String) = Uninitialized[x177] : &:r550_1 -# 550| r550_3(glval) = FunctionAddress[String] : -# 550| v550_4(void) = Call[String] : func:r550_3, this:r550_1 -# 550| mu550_5(unknown) = ^CallSideEffect : ~m? -# 550| mu550_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r550_1 -# 551| r551_1(glval) = VariableAddress[x177] : -# 551| r551_2(glval) = FunctionAddress[~String] : -# 551| v551_3(void) = Call[~String] : func:r551_2, this:r551_1 -# 551| mu551_4(unknown) = ^CallSideEffect : ~m? -# 551| v551_5(void) = ^IndirectReadSideEffect[-1] : &:r551_1, ~m? -# 551| mu551_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r551_1 -# 551| r551_7(bool) = Constant[0] : -# 551| v551_8(void) = ConditionalBranch : r551_7 +# 35| Block 177 +# 35| r35_2479(glval) = VariableAddress[x177] : +# 35| mu35_2480(String) = Uninitialized[x177] : &:r35_2479 +# 35| r35_2481(glval) = FunctionAddress[String] : +# 35| v35_2482(void) = Call[String] : func:r35_2481, this:r35_2479 +# 35| mu35_2483(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2479 +# 35| r35_2485(glval) = VariableAddress[x177] : +# 35| r35_2486(glval) = FunctionAddress[~String] : +# 35| v35_2487(void) = Call[~String] : func:r35_2486, this:r35_2485 +# 35| mu35_2488(unknown) = ^CallSideEffect : ~m? +# 35| v35_2489(void) = ^IndirectReadSideEffect[-1] : &:r35_2485, ~m? +# 35| mu35_2490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2485 +# 35| r35_2491(bool) = Constant[0] : +# 35| v35_2492(void) = ConditionalBranch : r35_2491 #-----| False -> Block 178 #-----| True -> Block 1026 -# 553| Block 178 -# 553| r553_1(glval) = VariableAddress[x178] : -# 553| mu553_2(String) = Uninitialized[x178] : &:r553_1 -# 553| r553_3(glval) = FunctionAddress[String] : -# 553| v553_4(void) = Call[String] : func:r553_3, this:r553_1 -# 553| mu553_5(unknown) = ^CallSideEffect : ~m? -# 553| mu553_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r553_1 -# 554| r554_1(glval) = VariableAddress[x178] : -# 554| r554_2(glval) = FunctionAddress[~String] : -# 554| v554_3(void) = Call[~String] : func:r554_2, this:r554_1 -# 554| mu554_4(unknown) = ^CallSideEffect : ~m? -# 554| v554_5(void) = ^IndirectReadSideEffect[-1] : &:r554_1, ~m? -# 554| mu554_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r554_1 -# 554| r554_7(bool) = Constant[0] : -# 554| v554_8(void) = ConditionalBranch : r554_7 +# 35| Block 178 +# 35| r35_2493(glval) = VariableAddress[x178] : +# 35| mu35_2494(String) = Uninitialized[x178] : &:r35_2493 +# 35| r35_2495(glval) = FunctionAddress[String] : +# 35| v35_2496(void) = Call[String] : func:r35_2495, this:r35_2493 +# 35| mu35_2497(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2493 +# 35| r35_2499(glval) = VariableAddress[x178] : +# 35| r35_2500(glval) = FunctionAddress[~String] : +# 35| v35_2501(void) = Call[~String] : func:r35_2500, this:r35_2499 +# 35| mu35_2502(unknown) = ^CallSideEffect : ~m? +# 35| v35_2503(void) = ^IndirectReadSideEffect[-1] : &:r35_2499, ~m? +# 35| mu35_2504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2499 +# 35| r35_2505(bool) = Constant[0] : +# 35| v35_2506(void) = ConditionalBranch : r35_2505 #-----| False -> Block 179 #-----| True -> Block 1026 -# 556| Block 179 -# 556| r556_1(glval) = VariableAddress[x179] : -# 556| mu556_2(String) = Uninitialized[x179] : &:r556_1 -# 556| r556_3(glval) = FunctionAddress[String] : -# 556| v556_4(void) = Call[String] : func:r556_3, this:r556_1 -# 556| mu556_5(unknown) = ^CallSideEffect : ~m? -# 556| mu556_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r556_1 -# 557| r557_1(glval) = VariableAddress[x179] : -# 557| r557_2(glval) = FunctionAddress[~String] : -# 557| v557_3(void) = Call[~String] : func:r557_2, this:r557_1 -# 557| mu557_4(unknown) = ^CallSideEffect : ~m? -# 557| v557_5(void) = ^IndirectReadSideEffect[-1] : &:r557_1, ~m? -# 557| mu557_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r557_1 -# 557| r557_7(bool) = Constant[0] : -# 557| v557_8(void) = ConditionalBranch : r557_7 +# 35| Block 179 +# 35| r35_2507(glval) = VariableAddress[x179] : +# 35| mu35_2508(String) = Uninitialized[x179] : &:r35_2507 +# 35| r35_2509(glval) = FunctionAddress[String] : +# 35| v35_2510(void) = Call[String] : func:r35_2509, this:r35_2507 +# 35| mu35_2511(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2507 +# 35| r35_2513(glval) = VariableAddress[x179] : +# 35| r35_2514(glval) = FunctionAddress[~String] : +# 35| v35_2515(void) = Call[~String] : func:r35_2514, this:r35_2513 +# 35| mu35_2516(unknown) = ^CallSideEffect : ~m? +# 35| v35_2517(void) = ^IndirectReadSideEffect[-1] : &:r35_2513, ~m? +# 35| mu35_2518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2513 +# 35| r35_2519(bool) = Constant[0] : +# 35| v35_2520(void) = ConditionalBranch : r35_2519 #-----| False -> Block 180 #-----| True -> Block 1026 -# 559| Block 180 -# 559| r559_1(glval) = VariableAddress[x180] : -# 559| mu559_2(String) = Uninitialized[x180] : &:r559_1 -# 559| r559_3(glval) = FunctionAddress[String] : -# 559| v559_4(void) = Call[String] : func:r559_3, this:r559_1 -# 559| mu559_5(unknown) = ^CallSideEffect : ~m? -# 559| mu559_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r559_1 -# 560| r560_1(glval) = VariableAddress[x180] : -# 560| r560_2(glval) = FunctionAddress[~String] : -# 560| v560_3(void) = Call[~String] : func:r560_2, this:r560_1 -# 560| mu560_4(unknown) = ^CallSideEffect : ~m? -# 560| v560_5(void) = ^IndirectReadSideEffect[-1] : &:r560_1, ~m? -# 560| mu560_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r560_1 -# 560| r560_7(bool) = Constant[0] : -# 560| v560_8(void) = ConditionalBranch : r560_7 +# 35| Block 180 +# 35| r35_2521(glval) = VariableAddress[x180] : +# 35| mu35_2522(String) = Uninitialized[x180] : &:r35_2521 +# 35| r35_2523(glval) = FunctionAddress[String] : +# 35| v35_2524(void) = Call[String] : func:r35_2523, this:r35_2521 +# 35| mu35_2525(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2521 +# 35| r35_2527(glval) = VariableAddress[x180] : +# 35| r35_2528(glval) = FunctionAddress[~String] : +# 35| v35_2529(void) = Call[~String] : func:r35_2528, this:r35_2527 +# 35| mu35_2530(unknown) = ^CallSideEffect : ~m? +# 35| v35_2531(void) = ^IndirectReadSideEffect[-1] : &:r35_2527, ~m? +# 35| mu35_2532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2527 +# 35| r35_2533(bool) = Constant[0] : +# 35| v35_2534(void) = ConditionalBranch : r35_2533 #-----| False -> Block 181 #-----| True -> Block 1026 -# 562| Block 181 -# 562| r562_1(glval) = VariableAddress[x181] : -# 562| mu562_2(String) = Uninitialized[x181] : &:r562_1 -# 562| r562_3(glval) = FunctionAddress[String] : -# 562| v562_4(void) = Call[String] : func:r562_3, this:r562_1 -# 562| mu562_5(unknown) = ^CallSideEffect : ~m? -# 562| mu562_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r562_1 -# 563| r563_1(glval) = VariableAddress[x181] : -# 563| r563_2(glval) = FunctionAddress[~String] : -# 563| v563_3(void) = Call[~String] : func:r563_2, this:r563_1 -# 563| mu563_4(unknown) = ^CallSideEffect : ~m? -# 563| v563_5(void) = ^IndirectReadSideEffect[-1] : &:r563_1, ~m? -# 563| mu563_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r563_1 -# 563| r563_7(bool) = Constant[0] : -# 563| v563_8(void) = ConditionalBranch : r563_7 +# 35| Block 181 +# 35| r35_2535(glval) = VariableAddress[x181] : +# 35| mu35_2536(String) = Uninitialized[x181] : &:r35_2535 +# 35| r35_2537(glval) = FunctionAddress[String] : +# 35| v35_2538(void) = Call[String] : func:r35_2537, this:r35_2535 +# 35| mu35_2539(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2535 +# 35| r35_2541(glval) = VariableAddress[x181] : +# 35| r35_2542(glval) = FunctionAddress[~String] : +# 35| v35_2543(void) = Call[~String] : func:r35_2542, this:r35_2541 +# 35| mu35_2544(unknown) = ^CallSideEffect : ~m? +# 35| v35_2545(void) = ^IndirectReadSideEffect[-1] : &:r35_2541, ~m? +# 35| mu35_2546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2541 +# 35| r35_2547(bool) = Constant[0] : +# 35| v35_2548(void) = ConditionalBranch : r35_2547 #-----| False -> Block 182 #-----| True -> Block 1026 -# 565| Block 182 -# 565| r565_1(glval) = VariableAddress[x182] : -# 565| mu565_2(String) = Uninitialized[x182] : &:r565_1 -# 565| r565_3(glval) = FunctionAddress[String] : -# 565| v565_4(void) = Call[String] : func:r565_3, this:r565_1 -# 565| mu565_5(unknown) = ^CallSideEffect : ~m? -# 565| mu565_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r565_1 -# 566| r566_1(glval) = VariableAddress[x182] : -# 566| r566_2(glval) = FunctionAddress[~String] : -# 566| v566_3(void) = Call[~String] : func:r566_2, this:r566_1 -# 566| mu566_4(unknown) = ^CallSideEffect : ~m? -# 566| v566_5(void) = ^IndirectReadSideEffect[-1] : &:r566_1, ~m? -# 566| mu566_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r566_1 -# 566| r566_7(bool) = Constant[0] : -# 566| v566_8(void) = ConditionalBranch : r566_7 +# 35| Block 182 +# 35| r35_2549(glval) = VariableAddress[x182] : +# 35| mu35_2550(String) = Uninitialized[x182] : &:r35_2549 +# 35| r35_2551(glval) = FunctionAddress[String] : +# 35| v35_2552(void) = Call[String] : func:r35_2551, this:r35_2549 +# 35| mu35_2553(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2549 +# 35| r35_2555(glval) = VariableAddress[x182] : +# 35| r35_2556(glval) = FunctionAddress[~String] : +# 35| v35_2557(void) = Call[~String] : func:r35_2556, this:r35_2555 +# 35| mu35_2558(unknown) = ^CallSideEffect : ~m? +# 35| v35_2559(void) = ^IndirectReadSideEffect[-1] : &:r35_2555, ~m? +# 35| mu35_2560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2555 +# 35| r35_2561(bool) = Constant[0] : +# 35| v35_2562(void) = ConditionalBranch : r35_2561 #-----| False -> Block 183 #-----| True -> Block 1026 -# 568| Block 183 -# 568| r568_1(glval) = VariableAddress[x183] : -# 568| mu568_2(String) = Uninitialized[x183] : &:r568_1 -# 568| r568_3(glval) = FunctionAddress[String] : -# 568| v568_4(void) = Call[String] : func:r568_3, this:r568_1 -# 568| mu568_5(unknown) = ^CallSideEffect : ~m? -# 568| mu568_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r568_1 -# 569| r569_1(glval) = VariableAddress[x183] : -# 569| r569_2(glval) = FunctionAddress[~String] : -# 569| v569_3(void) = Call[~String] : func:r569_2, this:r569_1 -# 569| mu569_4(unknown) = ^CallSideEffect : ~m? -# 569| v569_5(void) = ^IndirectReadSideEffect[-1] : &:r569_1, ~m? -# 569| mu569_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r569_1 -# 569| r569_7(bool) = Constant[0] : -# 569| v569_8(void) = ConditionalBranch : r569_7 +# 35| Block 183 +# 35| r35_2563(glval) = VariableAddress[x183] : +# 35| mu35_2564(String) = Uninitialized[x183] : &:r35_2563 +# 35| r35_2565(glval) = FunctionAddress[String] : +# 35| v35_2566(void) = Call[String] : func:r35_2565, this:r35_2563 +# 35| mu35_2567(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2563 +# 35| r35_2569(glval) = VariableAddress[x183] : +# 35| r35_2570(glval) = FunctionAddress[~String] : +# 35| v35_2571(void) = Call[~String] : func:r35_2570, this:r35_2569 +# 35| mu35_2572(unknown) = ^CallSideEffect : ~m? +# 35| v35_2573(void) = ^IndirectReadSideEffect[-1] : &:r35_2569, ~m? +# 35| mu35_2574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2569 +# 35| r35_2575(bool) = Constant[0] : +# 35| v35_2576(void) = ConditionalBranch : r35_2575 #-----| False -> Block 184 #-----| True -> Block 1026 -# 571| Block 184 -# 571| r571_1(glval) = VariableAddress[x184] : -# 571| mu571_2(String) = Uninitialized[x184] : &:r571_1 -# 571| r571_3(glval) = FunctionAddress[String] : -# 571| v571_4(void) = Call[String] : func:r571_3, this:r571_1 -# 571| mu571_5(unknown) = ^CallSideEffect : ~m? -# 571| mu571_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r571_1 -# 572| r572_1(glval) = VariableAddress[x184] : -# 572| r572_2(glval) = FunctionAddress[~String] : -# 572| v572_3(void) = Call[~String] : func:r572_2, this:r572_1 -# 572| mu572_4(unknown) = ^CallSideEffect : ~m? -# 572| v572_5(void) = ^IndirectReadSideEffect[-1] : &:r572_1, ~m? -# 572| mu572_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r572_1 -# 572| r572_7(bool) = Constant[0] : -# 572| v572_8(void) = ConditionalBranch : r572_7 +# 35| Block 184 +# 35| r35_2577(glval) = VariableAddress[x184] : +# 35| mu35_2578(String) = Uninitialized[x184] : &:r35_2577 +# 35| r35_2579(glval) = FunctionAddress[String] : +# 35| v35_2580(void) = Call[String] : func:r35_2579, this:r35_2577 +# 35| mu35_2581(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2577 +# 35| r35_2583(glval) = VariableAddress[x184] : +# 35| r35_2584(glval) = FunctionAddress[~String] : +# 35| v35_2585(void) = Call[~String] : func:r35_2584, this:r35_2583 +# 35| mu35_2586(unknown) = ^CallSideEffect : ~m? +# 35| v35_2587(void) = ^IndirectReadSideEffect[-1] : &:r35_2583, ~m? +# 35| mu35_2588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2583 +# 35| r35_2589(bool) = Constant[0] : +# 35| v35_2590(void) = ConditionalBranch : r35_2589 #-----| False -> Block 185 #-----| True -> Block 1026 -# 574| Block 185 -# 574| r574_1(glval) = VariableAddress[x185] : -# 574| mu574_2(String) = Uninitialized[x185] : &:r574_1 -# 574| r574_3(glval) = FunctionAddress[String] : -# 574| v574_4(void) = Call[String] : func:r574_3, this:r574_1 -# 574| mu574_5(unknown) = ^CallSideEffect : ~m? -# 574| mu574_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r574_1 -# 575| r575_1(glval) = VariableAddress[x185] : -# 575| r575_2(glval) = FunctionAddress[~String] : -# 575| v575_3(void) = Call[~String] : func:r575_2, this:r575_1 -# 575| mu575_4(unknown) = ^CallSideEffect : ~m? -# 575| v575_5(void) = ^IndirectReadSideEffect[-1] : &:r575_1, ~m? -# 575| mu575_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r575_1 -# 575| r575_7(bool) = Constant[0] : -# 575| v575_8(void) = ConditionalBranch : r575_7 +# 35| Block 185 +# 35| r35_2591(glval) = VariableAddress[x185] : +# 35| mu35_2592(String) = Uninitialized[x185] : &:r35_2591 +# 35| r35_2593(glval) = FunctionAddress[String] : +# 35| v35_2594(void) = Call[String] : func:r35_2593, this:r35_2591 +# 35| mu35_2595(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2591 +# 35| r35_2597(glval) = VariableAddress[x185] : +# 35| r35_2598(glval) = FunctionAddress[~String] : +# 35| v35_2599(void) = Call[~String] : func:r35_2598, this:r35_2597 +# 35| mu35_2600(unknown) = ^CallSideEffect : ~m? +# 35| v35_2601(void) = ^IndirectReadSideEffect[-1] : &:r35_2597, ~m? +# 35| mu35_2602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2597 +# 35| r35_2603(bool) = Constant[0] : +# 35| v35_2604(void) = ConditionalBranch : r35_2603 #-----| False -> Block 186 #-----| True -> Block 1026 -# 577| Block 186 -# 577| r577_1(glval) = VariableAddress[x186] : -# 577| mu577_2(String) = Uninitialized[x186] : &:r577_1 -# 577| r577_3(glval) = FunctionAddress[String] : -# 577| v577_4(void) = Call[String] : func:r577_3, this:r577_1 -# 577| mu577_5(unknown) = ^CallSideEffect : ~m? -# 577| mu577_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r577_1 -# 578| r578_1(glval) = VariableAddress[x186] : -# 578| r578_2(glval) = FunctionAddress[~String] : -# 578| v578_3(void) = Call[~String] : func:r578_2, this:r578_1 -# 578| mu578_4(unknown) = ^CallSideEffect : ~m? -# 578| v578_5(void) = ^IndirectReadSideEffect[-1] : &:r578_1, ~m? -# 578| mu578_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r578_1 -# 578| r578_7(bool) = Constant[0] : -# 578| v578_8(void) = ConditionalBranch : r578_7 +# 35| Block 186 +# 35| r35_2605(glval) = VariableAddress[x186] : +# 35| mu35_2606(String) = Uninitialized[x186] : &:r35_2605 +# 35| r35_2607(glval) = FunctionAddress[String] : +# 35| v35_2608(void) = Call[String] : func:r35_2607, this:r35_2605 +# 35| mu35_2609(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2605 +# 35| r35_2611(glval) = VariableAddress[x186] : +# 35| r35_2612(glval) = FunctionAddress[~String] : +# 35| v35_2613(void) = Call[~String] : func:r35_2612, this:r35_2611 +# 35| mu35_2614(unknown) = ^CallSideEffect : ~m? +# 35| v35_2615(void) = ^IndirectReadSideEffect[-1] : &:r35_2611, ~m? +# 35| mu35_2616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2611 +# 35| r35_2617(bool) = Constant[0] : +# 35| v35_2618(void) = ConditionalBranch : r35_2617 #-----| False -> Block 187 #-----| True -> Block 1026 -# 580| Block 187 -# 580| r580_1(glval) = VariableAddress[x187] : -# 580| mu580_2(String) = Uninitialized[x187] : &:r580_1 -# 580| r580_3(glval) = FunctionAddress[String] : -# 580| v580_4(void) = Call[String] : func:r580_3, this:r580_1 -# 580| mu580_5(unknown) = ^CallSideEffect : ~m? -# 580| mu580_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r580_1 -# 581| r581_1(glval) = VariableAddress[x187] : -# 581| r581_2(glval) = FunctionAddress[~String] : -# 581| v581_3(void) = Call[~String] : func:r581_2, this:r581_1 -# 581| mu581_4(unknown) = ^CallSideEffect : ~m? -# 581| v581_5(void) = ^IndirectReadSideEffect[-1] : &:r581_1, ~m? -# 581| mu581_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r581_1 -# 581| r581_7(bool) = Constant[0] : -# 581| v581_8(void) = ConditionalBranch : r581_7 +# 35| Block 187 +# 35| r35_2619(glval) = VariableAddress[x187] : +# 35| mu35_2620(String) = Uninitialized[x187] : &:r35_2619 +# 35| r35_2621(glval) = FunctionAddress[String] : +# 35| v35_2622(void) = Call[String] : func:r35_2621, this:r35_2619 +# 35| mu35_2623(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2619 +# 35| r35_2625(glval) = VariableAddress[x187] : +# 35| r35_2626(glval) = FunctionAddress[~String] : +# 35| v35_2627(void) = Call[~String] : func:r35_2626, this:r35_2625 +# 35| mu35_2628(unknown) = ^CallSideEffect : ~m? +# 35| v35_2629(void) = ^IndirectReadSideEffect[-1] : &:r35_2625, ~m? +# 35| mu35_2630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2625 +# 35| r35_2631(bool) = Constant[0] : +# 35| v35_2632(void) = ConditionalBranch : r35_2631 #-----| False -> Block 188 #-----| True -> Block 1026 -# 583| Block 188 -# 583| r583_1(glval) = VariableAddress[x188] : -# 583| mu583_2(String) = Uninitialized[x188] : &:r583_1 -# 583| r583_3(glval) = FunctionAddress[String] : -# 583| v583_4(void) = Call[String] : func:r583_3, this:r583_1 -# 583| mu583_5(unknown) = ^CallSideEffect : ~m? -# 583| mu583_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r583_1 -# 584| r584_1(glval) = VariableAddress[x188] : -# 584| r584_2(glval) = FunctionAddress[~String] : -# 584| v584_3(void) = Call[~String] : func:r584_2, this:r584_1 -# 584| mu584_4(unknown) = ^CallSideEffect : ~m? -# 584| v584_5(void) = ^IndirectReadSideEffect[-1] : &:r584_1, ~m? -# 584| mu584_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r584_1 -# 584| r584_7(bool) = Constant[0] : -# 584| v584_8(void) = ConditionalBranch : r584_7 +# 35| Block 188 +# 35| r35_2633(glval) = VariableAddress[x188] : +# 35| mu35_2634(String) = Uninitialized[x188] : &:r35_2633 +# 35| r35_2635(glval) = FunctionAddress[String] : +# 35| v35_2636(void) = Call[String] : func:r35_2635, this:r35_2633 +# 35| mu35_2637(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2633 +# 35| r35_2639(glval) = VariableAddress[x188] : +# 35| r35_2640(glval) = FunctionAddress[~String] : +# 35| v35_2641(void) = Call[~String] : func:r35_2640, this:r35_2639 +# 35| mu35_2642(unknown) = ^CallSideEffect : ~m? +# 35| v35_2643(void) = ^IndirectReadSideEffect[-1] : &:r35_2639, ~m? +# 35| mu35_2644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2639 +# 35| r35_2645(bool) = Constant[0] : +# 35| v35_2646(void) = ConditionalBranch : r35_2645 #-----| False -> Block 189 #-----| True -> Block 1026 -# 586| Block 189 -# 586| r586_1(glval) = VariableAddress[x189] : -# 586| mu586_2(String) = Uninitialized[x189] : &:r586_1 -# 586| r586_3(glval) = FunctionAddress[String] : -# 586| v586_4(void) = Call[String] : func:r586_3, this:r586_1 -# 586| mu586_5(unknown) = ^CallSideEffect : ~m? -# 586| mu586_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r586_1 -# 587| r587_1(glval) = VariableAddress[x189] : -# 587| r587_2(glval) = FunctionAddress[~String] : -# 587| v587_3(void) = Call[~String] : func:r587_2, this:r587_1 -# 587| mu587_4(unknown) = ^CallSideEffect : ~m? -# 587| v587_5(void) = ^IndirectReadSideEffect[-1] : &:r587_1, ~m? -# 587| mu587_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r587_1 -# 587| r587_7(bool) = Constant[0] : -# 587| v587_8(void) = ConditionalBranch : r587_7 +# 35| Block 189 +# 35| r35_2647(glval) = VariableAddress[x189] : +# 35| mu35_2648(String) = Uninitialized[x189] : &:r35_2647 +# 35| r35_2649(glval) = FunctionAddress[String] : +# 35| v35_2650(void) = Call[String] : func:r35_2649, this:r35_2647 +# 35| mu35_2651(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2647 +# 35| r35_2653(glval) = VariableAddress[x189] : +# 35| r35_2654(glval) = FunctionAddress[~String] : +# 35| v35_2655(void) = Call[~String] : func:r35_2654, this:r35_2653 +# 35| mu35_2656(unknown) = ^CallSideEffect : ~m? +# 35| v35_2657(void) = ^IndirectReadSideEffect[-1] : &:r35_2653, ~m? +# 35| mu35_2658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2653 +# 35| r35_2659(bool) = Constant[0] : +# 35| v35_2660(void) = ConditionalBranch : r35_2659 #-----| False -> Block 190 #-----| True -> Block 1026 -# 589| Block 190 -# 589| r589_1(glval) = VariableAddress[x190] : -# 589| mu589_2(String) = Uninitialized[x190] : &:r589_1 -# 589| r589_3(glval) = FunctionAddress[String] : -# 589| v589_4(void) = Call[String] : func:r589_3, this:r589_1 -# 589| mu589_5(unknown) = ^CallSideEffect : ~m? -# 589| mu589_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r589_1 -# 590| r590_1(glval) = VariableAddress[x190] : -# 590| r590_2(glval) = FunctionAddress[~String] : -# 590| v590_3(void) = Call[~String] : func:r590_2, this:r590_1 -# 590| mu590_4(unknown) = ^CallSideEffect : ~m? -# 590| v590_5(void) = ^IndirectReadSideEffect[-1] : &:r590_1, ~m? -# 590| mu590_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r590_1 -# 590| r590_7(bool) = Constant[0] : -# 590| v590_8(void) = ConditionalBranch : r590_7 +# 35| Block 190 +# 35| r35_2661(glval) = VariableAddress[x190] : +# 35| mu35_2662(String) = Uninitialized[x190] : &:r35_2661 +# 35| r35_2663(glval) = FunctionAddress[String] : +# 35| v35_2664(void) = Call[String] : func:r35_2663, this:r35_2661 +# 35| mu35_2665(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2661 +# 35| r35_2667(glval) = VariableAddress[x190] : +# 35| r35_2668(glval) = FunctionAddress[~String] : +# 35| v35_2669(void) = Call[~String] : func:r35_2668, this:r35_2667 +# 35| mu35_2670(unknown) = ^CallSideEffect : ~m? +# 35| v35_2671(void) = ^IndirectReadSideEffect[-1] : &:r35_2667, ~m? +# 35| mu35_2672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2667 +# 35| r35_2673(bool) = Constant[0] : +# 35| v35_2674(void) = ConditionalBranch : r35_2673 #-----| False -> Block 191 #-----| True -> Block 1026 -# 592| Block 191 -# 592| r592_1(glval) = VariableAddress[x191] : -# 592| mu592_2(String) = Uninitialized[x191] : &:r592_1 -# 592| r592_3(glval) = FunctionAddress[String] : -# 592| v592_4(void) = Call[String] : func:r592_3, this:r592_1 -# 592| mu592_5(unknown) = ^CallSideEffect : ~m? -# 592| mu592_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r592_1 -# 593| r593_1(glval) = VariableAddress[x191] : -# 593| r593_2(glval) = FunctionAddress[~String] : -# 593| v593_3(void) = Call[~String] : func:r593_2, this:r593_1 -# 593| mu593_4(unknown) = ^CallSideEffect : ~m? -# 593| v593_5(void) = ^IndirectReadSideEffect[-1] : &:r593_1, ~m? -# 593| mu593_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r593_1 -# 593| r593_7(bool) = Constant[0] : -# 593| v593_8(void) = ConditionalBranch : r593_7 +# 35| Block 191 +# 35| r35_2675(glval) = VariableAddress[x191] : +# 35| mu35_2676(String) = Uninitialized[x191] : &:r35_2675 +# 35| r35_2677(glval) = FunctionAddress[String] : +# 35| v35_2678(void) = Call[String] : func:r35_2677, this:r35_2675 +# 35| mu35_2679(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2675 +# 35| r35_2681(glval) = VariableAddress[x191] : +# 35| r35_2682(glval) = FunctionAddress[~String] : +# 35| v35_2683(void) = Call[~String] : func:r35_2682, this:r35_2681 +# 35| mu35_2684(unknown) = ^CallSideEffect : ~m? +# 35| v35_2685(void) = ^IndirectReadSideEffect[-1] : &:r35_2681, ~m? +# 35| mu35_2686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2681 +# 35| r35_2687(bool) = Constant[0] : +# 35| v35_2688(void) = ConditionalBranch : r35_2687 #-----| False -> Block 192 #-----| True -> Block 1026 -# 595| Block 192 -# 595| r595_1(glval) = VariableAddress[x192] : -# 595| mu595_2(String) = Uninitialized[x192] : &:r595_1 -# 595| r595_3(glval) = FunctionAddress[String] : -# 595| v595_4(void) = Call[String] : func:r595_3, this:r595_1 -# 595| mu595_5(unknown) = ^CallSideEffect : ~m? -# 595| mu595_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r595_1 -# 596| r596_1(glval) = VariableAddress[x192] : -# 596| r596_2(glval) = FunctionAddress[~String] : -# 596| v596_3(void) = Call[~String] : func:r596_2, this:r596_1 -# 596| mu596_4(unknown) = ^CallSideEffect : ~m? -# 596| v596_5(void) = ^IndirectReadSideEffect[-1] : &:r596_1, ~m? -# 596| mu596_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r596_1 -# 596| r596_7(bool) = Constant[0] : -# 596| v596_8(void) = ConditionalBranch : r596_7 +# 35| Block 192 +# 35| r35_2689(glval) = VariableAddress[x192] : +# 35| mu35_2690(String) = Uninitialized[x192] : &:r35_2689 +# 35| r35_2691(glval) = FunctionAddress[String] : +# 35| v35_2692(void) = Call[String] : func:r35_2691, this:r35_2689 +# 35| mu35_2693(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2689 +# 35| r35_2695(glval) = VariableAddress[x192] : +# 35| r35_2696(glval) = FunctionAddress[~String] : +# 35| v35_2697(void) = Call[~String] : func:r35_2696, this:r35_2695 +# 35| mu35_2698(unknown) = ^CallSideEffect : ~m? +# 35| v35_2699(void) = ^IndirectReadSideEffect[-1] : &:r35_2695, ~m? +# 35| mu35_2700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2695 +# 35| r35_2701(bool) = Constant[0] : +# 35| v35_2702(void) = ConditionalBranch : r35_2701 #-----| False -> Block 193 #-----| True -> Block 1026 -# 598| Block 193 -# 598| r598_1(glval) = VariableAddress[x193] : -# 598| mu598_2(String) = Uninitialized[x193] : &:r598_1 -# 598| r598_3(glval) = FunctionAddress[String] : -# 598| v598_4(void) = Call[String] : func:r598_3, this:r598_1 -# 598| mu598_5(unknown) = ^CallSideEffect : ~m? -# 598| mu598_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r598_1 -# 599| r599_1(glval) = VariableAddress[x193] : -# 599| r599_2(glval) = FunctionAddress[~String] : -# 599| v599_3(void) = Call[~String] : func:r599_2, this:r599_1 -# 599| mu599_4(unknown) = ^CallSideEffect : ~m? -# 599| v599_5(void) = ^IndirectReadSideEffect[-1] : &:r599_1, ~m? -# 599| mu599_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r599_1 -# 599| r599_7(bool) = Constant[0] : -# 599| v599_8(void) = ConditionalBranch : r599_7 +# 35| Block 193 +# 35| r35_2703(glval) = VariableAddress[x193] : +# 35| mu35_2704(String) = Uninitialized[x193] : &:r35_2703 +# 35| r35_2705(glval) = FunctionAddress[String] : +# 35| v35_2706(void) = Call[String] : func:r35_2705, this:r35_2703 +# 35| mu35_2707(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2703 +# 35| r35_2709(glval) = VariableAddress[x193] : +# 35| r35_2710(glval) = FunctionAddress[~String] : +# 35| v35_2711(void) = Call[~String] : func:r35_2710, this:r35_2709 +# 35| mu35_2712(unknown) = ^CallSideEffect : ~m? +# 35| v35_2713(void) = ^IndirectReadSideEffect[-1] : &:r35_2709, ~m? +# 35| mu35_2714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2709 +# 35| r35_2715(bool) = Constant[0] : +# 35| v35_2716(void) = ConditionalBranch : r35_2715 #-----| False -> Block 194 #-----| True -> Block 1026 -# 601| Block 194 -# 601| r601_1(glval) = VariableAddress[x194] : -# 601| mu601_2(String) = Uninitialized[x194] : &:r601_1 -# 601| r601_3(glval) = FunctionAddress[String] : -# 601| v601_4(void) = Call[String] : func:r601_3, this:r601_1 -# 601| mu601_5(unknown) = ^CallSideEffect : ~m? -# 601| mu601_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r601_1 -# 602| r602_1(glval) = VariableAddress[x194] : -# 602| r602_2(glval) = FunctionAddress[~String] : -# 602| v602_3(void) = Call[~String] : func:r602_2, this:r602_1 -# 602| mu602_4(unknown) = ^CallSideEffect : ~m? -# 602| v602_5(void) = ^IndirectReadSideEffect[-1] : &:r602_1, ~m? -# 602| mu602_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r602_1 -# 602| r602_7(bool) = Constant[0] : -# 602| v602_8(void) = ConditionalBranch : r602_7 +# 35| Block 194 +# 35| r35_2717(glval) = VariableAddress[x194] : +# 35| mu35_2718(String) = Uninitialized[x194] : &:r35_2717 +# 35| r35_2719(glval) = FunctionAddress[String] : +# 35| v35_2720(void) = Call[String] : func:r35_2719, this:r35_2717 +# 35| mu35_2721(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2717 +# 35| r35_2723(glval) = VariableAddress[x194] : +# 35| r35_2724(glval) = FunctionAddress[~String] : +# 35| v35_2725(void) = Call[~String] : func:r35_2724, this:r35_2723 +# 35| mu35_2726(unknown) = ^CallSideEffect : ~m? +# 35| v35_2727(void) = ^IndirectReadSideEffect[-1] : &:r35_2723, ~m? +# 35| mu35_2728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2723 +# 35| r35_2729(bool) = Constant[0] : +# 35| v35_2730(void) = ConditionalBranch : r35_2729 #-----| False -> Block 195 #-----| True -> Block 1026 -# 604| Block 195 -# 604| r604_1(glval) = VariableAddress[x195] : -# 604| mu604_2(String) = Uninitialized[x195] : &:r604_1 -# 604| r604_3(glval) = FunctionAddress[String] : -# 604| v604_4(void) = Call[String] : func:r604_3, this:r604_1 -# 604| mu604_5(unknown) = ^CallSideEffect : ~m? -# 604| mu604_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r604_1 -# 605| r605_1(glval) = VariableAddress[x195] : -# 605| r605_2(glval) = FunctionAddress[~String] : -# 605| v605_3(void) = Call[~String] : func:r605_2, this:r605_1 -# 605| mu605_4(unknown) = ^CallSideEffect : ~m? -# 605| v605_5(void) = ^IndirectReadSideEffect[-1] : &:r605_1, ~m? -# 605| mu605_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r605_1 -# 605| r605_7(bool) = Constant[0] : -# 605| v605_8(void) = ConditionalBranch : r605_7 +# 35| Block 195 +# 35| r35_2731(glval) = VariableAddress[x195] : +# 35| mu35_2732(String) = Uninitialized[x195] : &:r35_2731 +# 35| r35_2733(glval) = FunctionAddress[String] : +# 35| v35_2734(void) = Call[String] : func:r35_2733, this:r35_2731 +# 35| mu35_2735(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2731 +# 35| r35_2737(glval) = VariableAddress[x195] : +# 35| r35_2738(glval) = FunctionAddress[~String] : +# 35| v35_2739(void) = Call[~String] : func:r35_2738, this:r35_2737 +# 35| mu35_2740(unknown) = ^CallSideEffect : ~m? +# 35| v35_2741(void) = ^IndirectReadSideEffect[-1] : &:r35_2737, ~m? +# 35| mu35_2742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2737 +# 35| r35_2743(bool) = Constant[0] : +# 35| v35_2744(void) = ConditionalBranch : r35_2743 #-----| False -> Block 196 #-----| True -> Block 1026 -# 607| Block 196 -# 607| r607_1(glval) = VariableAddress[x196] : -# 607| mu607_2(String) = Uninitialized[x196] : &:r607_1 -# 607| r607_3(glval) = FunctionAddress[String] : -# 607| v607_4(void) = Call[String] : func:r607_3, this:r607_1 -# 607| mu607_5(unknown) = ^CallSideEffect : ~m? -# 607| mu607_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r607_1 -# 608| r608_1(glval) = VariableAddress[x196] : -# 608| r608_2(glval) = FunctionAddress[~String] : -# 608| v608_3(void) = Call[~String] : func:r608_2, this:r608_1 -# 608| mu608_4(unknown) = ^CallSideEffect : ~m? -# 608| v608_5(void) = ^IndirectReadSideEffect[-1] : &:r608_1, ~m? -# 608| mu608_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r608_1 -# 608| r608_7(bool) = Constant[0] : -# 608| v608_8(void) = ConditionalBranch : r608_7 +# 35| Block 196 +# 35| r35_2745(glval) = VariableAddress[x196] : +# 35| mu35_2746(String) = Uninitialized[x196] : &:r35_2745 +# 35| r35_2747(glval) = FunctionAddress[String] : +# 35| v35_2748(void) = Call[String] : func:r35_2747, this:r35_2745 +# 35| mu35_2749(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2745 +# 35| r35_2751(glval) = VariableAddress[x196] : +# 35| r35_2752(glval) = FunctionAddress[~String] : +# 35| v35_2753(void) = Call[~String] : func:r35_2752, this:r35_2751 +# 35| mu35_2754(unknown) = ^CallSideEffect : ~m? +# 35| v35_2755(void) = ^IndirectReadSideEffect[-1] : &:r35_2751, ~m? +# 35| mu35_2756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2751 +# 35| r35_2757(bool) = Constant[0] : +# 35| v35_2758(void) = ConditionalBranch : r35_2757 #-----| False -> Block 197 #-----| True -> Block 1026 -# 610| Block 197 -# 610| r610_1(glval) = VariableAddress[x197] : -# 610| mu610_2(String) = Uninitialized[x197] : &:r610_1 -# 610| r610_3(glval) = FunctionAddress[String] : -# 610| v610_4(void) = Call[String] : func:r610_3, this:r610_1 -# 610| mu610_5(unknown) = ^CallSideEffect : ~m? -# 610| mu610_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r610_1 -# 611| r611_1(glval) = VariableAddress[x197] : -# 611| r611_2(glval) = FunctionAddress[~String] : -# 611| v611_3(void) = Call[~String] : func:r611_2, this:r611_1 -# 611| mu611_4(unknown) = ^CallSideEffect : ~m? -# 611| v611_5(void) = ^IndirectReadSideEffect[-1] : &:r611_1, ~m? -# 611| mu611_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r611_1 -# 611| r611_7(bool) = Constant[0] : -# 611| v611_8(void) = ConditionalBranch : r611_7 +# 35| Block 197 +# 35| r35_2759(glval) = VariableAddress[x197] : +# 35| mu35_2760(String) = Uninitialized[x197] : &:r35_2759 +# 35| r35_2761(glval) = FunctionAddress[String] : +# 35| v35_2762(void) = Call[String] : func:r35_2761, this:r35_2759 +# 35| mu35_2763(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2759 +# 35| r35_2765(glval) = VariableAddress[x197] : +# 35| r35_2766(glval) = FunctionAddress[~String] : +# 35| v35_2767(void) = Call[~String] : func:r35_2766, this:r35_2765 +# 35| mu35_2768(unknown) = ^CallSideEffect : ~m? +# 35| v35_2769(void) = ^IndirectReadSideEffect[-1] : &:r35_2765, ~m? +# 35| mu35_2770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2765 +# 35| r35_2771(bool) = Constant[0] : +# 35| v35_2772(void) = ConditionalBranch : r35_2771 #-----| False -> Block 198 #-----| True -> Block 1026 -# 613| Block 198 -# 613| r613_1(glval) = VariableAddress[x198] : -# 613| mu613_2(String) = Uninitialized[x198] : &:r613_1 -# 613| r613_3(glval) = FunctionAddress[String] : -# 613| v613_4(void) = Call[String] : func:r613_3, this:r613_1 -# 613| mu613_5(unknown) = ^CallSideEffect : ~m? -# 613| mu613_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r613_1 -# 614| r614_1(glval) = VariableAddress[x198] : -# 614| r614_2(glval) = FunctionAddress[~String] : -# 614| v614_3(void) = Call[~String] : func:r614_2, this:r614_1 -# 614| mu614_4(unknown) = ^CallSideEffect : ~m? -# 614| v614_5(void) = ^IndirectReadSideEffect[-1] : &:r614_1, ~m? -# 614| mu614_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r614_1 -# 614| r614_7(bool) = Constant[0] : -# 614| v614_8(void) = ConditionalBranch : r614_7 +# 35| Block 198 +# 35| r35_2773(glval) = VariableAddress[x198] : +# 35| mu35_2774(String) = Uninitialized[x198] : &:r35_2773 +# 35| r35_2775(glval) = FunctionAddress[String] : +# 35| v35_2776(void) = Call[String] : func:r35_2775, this:r35_2773 +# 35| mu35_2777(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2773 +# 35| r35_2779(glval) = VariableAddress[x198] : +# 35| r35_2780(glval) = FunctionAddress[~String] : +# 35| v35_2781(void) = Call[~String] : func:r35_2780, this:r35_2779 +# 35| mu35_2782(unknown) = ^CallSideEffect : ~m? +# 35| v35_2783(void) = ^IndirectReadSideEffect[-1] : &:r35_2779, ~m? +# 35| mu35_2784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2779 +# 35| r35_2785(bool) = Constant[0] : +# 35| v35_2786(void) = ConditionalBranch : r35_2785 #-----| False -> Block 199 #-----| True -> Block 1026 -# 616| Block 199 -# 616| r616_1(glval) = VariableAddress[x199] : -# 616| mu616_2(String) = Uninitialized[x199] : &:r616_1 -# 616| r616_3(glval) = FunctionAddress[String] : -# 616| v616_4(void) = Call[String] : func:r616_3, this:r616_1 -# 616| mu616_5(unknown) = ^CallSideEffect : ~m? -# 616| mu616_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r616_1 -# 617| r617_1(glval) = VariableAddress[x199] : -# 617| r617_2(glval) = FunctionAddress[~String] : -# 617| v617_3(void) = Call[~String] : func:r617_2, this:r617_1 -# 617| mu617_4(unknown) = ^CallSideEffect : ~m? -# 617| v617_5(void) = ^IndirectReadSideEffect[-1] : &:r617_1, ~m? -# 617| mu617_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r617_1 -# 617| r617_7(bool) = Constant[0] : -# 617| v617_8(void) = ConditionalBranch : r617_7 +# 35| Block 199 +# 35| r35_2787(glval) = VariableAddress[x199] : +# 35| mu35_2788(String) = Uninitialized[x199] : &:r35_2787 +# 35| r35_2789(glval) = FunctionAddress[String] : +# 35| v35_2790(void) = Call[String] : func:r35_2789, this:r35_2787 +# 35| mu35_2791(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2787 +# 35| r35_2793(glval) = VariableAddress[x199] : +# 35| r35_2794(glval) = FunctionAddress[~String] : +# 35| v35_2795(void) = Call[~String] : func:r35_2794, this:r35_2793 +# 35| mu35_2796(unknown) = ^CallSideEffect : ~m? +# 35| v35_2797(void) = ^IndirectReadSideEffect[-1] : &:r35_2793, ~m? +# 35| mu35_2798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2793 +# 35| r35_2799(bool) = Constant[0] : +# 35| v35_2800(void) = ConditionalBranch : r35_2799 #-----| False -> Block 200 #-----| True -> Block 1026 -# 619| Block 200 -# 619| r619_1(glval) = VariableAddress[x200] : -# 619| mu619_2(String) = Uninitialized[x200] : &:r619_1 -# 619| r619_3(glval) = FunctionAddress[String] : -# 619| v619_4(void) = Call[String] : func:r619_3, this:r619_1 -# 619| mu619_5(unknown) = ^CallSideEffect : ~m? -# 619| mu619_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r619_1 -# 620| r620_1(glval) = VariableAddress[x200] : -# 620| r620_2(glval) = FunctionAddress[~String] : -# 620| v620_3(void) = Call[~String] : func:r620_2, this:r620_1 -# 620| mu620_4(unknown) = ^CallSideEffect : ~m? -# 620| v620_5(void) = ^IndirectReadSideEffect[-1] : &:r620_1, ~m? -# 620| mu620_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_1 -# 620| r620_7(bool) = Constant[0] : -# 620| v620_8(void) = ConditionalBranch : r620_7 +# 35| Block 200 +# 35| r35_2801(glval) = VariableAddress[x200] : +# 35| mu35_2802(String) = Uninitialized[x200] : &:r35_2801 +# 35| r35_2803(glval) = FunctionAddress[String] : +# 35| v35_2804(void) = Call[String] : func:r35_2803, this:r35_2801 +# 35| mu35_2805(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2801 +# 35| r35_2807(glval) = VariableAddress[x200] : +# 35| r35_2808(glval) = FunctionAddress[~String] : +# 35| v35_2809(void) = Call[~String] : func:r35_2808, this:r35_2807 +# 35| mu35_2810(unknown) = ^CallSideEffect : ~m? +# 35| v35_2811(void) = ^IndirectReadSideEffect[-1] : &:r35_2807, ~m? +# 35| mu35_2812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2807 +# 35| r35_2813(bool) = Constant[0] : +# 35| v35_2814(void) = ConditionalBranch : r35_2813 #-----| False -> Block 201 #-----| True -> Block 1026 -# 622| Block 201 -# 622| r622_1(glval) = VariableAddress[x201] : -# 622| mu622_2(String) = Uninitialized[x201] : &:r622_1 -# 622| r622_3(glval) = FunctionAddress[String] : -# 622| v622_4(void) = Call[String] : func:r622_3, this:r622_1 -# 622| mu622_5(unknown) = ^CallSideEffect : ~m? -# 622| mu622_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r622_1 -# 623| r623_1(glval) = VariableAddress[x201] : -# 623| r623_2(glval) = FunctionAddress[~String] : -# 623| v623_3(void) = Call[~String] : func:r623_2, this:r623_1 -# 623| mu623_4(unknown) = ^CallSideEffect : ~m? -# 623| v623_5(void) = ^IndirectReadSideEffect[-1] : &:r623_1, ~m? -# 623| mu623_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r623_1 -# 623| r623_7(bool) = Constant[0] : -# 623| v623_8(void) = ConditionalBranch : r623_7 +# 35| Block 201 +# 35| r35_2815(glval) = VariableAddress[x201] : +# 35| mu35_2816(String) = Uninitialized[x201] : &:r35_2815 +# 35| r35_2817(glval) = FunctionAddress[String] : +# 35| v35_2818(void) = Call[String] : func:r35_2817, this:r35_2815 +# 35| mu35_2819(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2815 +# 35| r35_2821(glval) = VariableAddress[x201] : +# 35| r35_2822(glval) = FunctionAddress[~String] : +# 35| v35_2823(void) = Call[~String] : func:r35_2822, this:r35_2821 +# 35| mu35_2824(unknown) = ^CallSideEffect : ~m? +# 35| v35_2825(void) = ^IndirectReadSideEffect[-1] : &:r35_2821, ~m? +# 35| mu35_2826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2821 +# 35| r35_2827(bool) = Constant[0] : +# 35| v35_2828(void) = ConditionalBranch : r35_2827 #-----| False -> Block 202 #-----| True -> Block 1026 -# 625| Block 202 -# 625| r625_1(glval) = VariableAddress[x202] : -# 625| mu625_2(String) = Uninitialized[x202] : &:r625_1 -# 625| r625_3(glval) = FunctionAddress[String] : -# 625| v625_4(void) = Call[String] : func:r625_3, this:r625_1 -# 625| mu625_5(unknown) = ^CallSideEffect : ~m? -# 625| mu625_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r625_1 -# 626| r626_1(glval) = VariableAddress[x202] : -# 626| r626_2(glval) = FunctionAddress[~String] : -# 626| v626_3(void) = Call[~String] : func:r626_2, this:r626_1 -# 626| mu626_4(unknown) = ^CallSideEffect : ~m? -# 626| v626_5(void) = ^IndirectReadSideEffect[-1] : &:r626_1, ~m? -# 626| mu626_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r626_1 -# 626| r626_7(bool) = Constant[0] : -# 626| v626_8(void) = ConditionalBranch : r626_7 +# 35| Block 202 +# 35| r35_2829(glval) = VariableAddress[x202] : +# 35| mu35_2830(String) = Uninitialized[x202] : &:r35_2829 +# 35| r35_2831(glval) = FunctionAddress[String] : +# 35| v35_2832(void) = Call[String] : func:r35_2831, this:r35_2829 +# 35| mu35_2833(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2829 +# 35| r35_2835(glval) = VariableAddress[x202] : +# 35| r35_2836(glval) = FunctionAddress[~String] : +# 35| v35_2837(void) = Call[~String] : func:r35_2836, this:r35_2835 +# 35| mu35_2838(unknown) = ^CallSideEffect : ~m? +# 35| v35_2839(void) = ^IndirectReadSideEffect[-1] : &:r35_2835, ~m? +# 35| mu35_2840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2835 +# 35| r35_2841(bool) = Constant[0] : +# 35| v35_2842(void) = ConditionalBranch : r35_2841 #-----| False -> Block 203 #-----| True -> Block 1026 -# 628| Block 203 -# 628| r628_1(glval) = VariableAddress[x203] : -# 628| mu628_2(String) = Uninitialized[x203] : &:r628_1 -# 628| r628_3(glval) = FunctionAddress[String] : -# 628| v628_4(void) = Call[String] : func:r628_3, this:r628_1 -# 628| mu628_5(unknown) = ^CallSideEffect : ~m? -# 628| mu628_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r628_1 -# 629| r629_1(glval) = VariableAddress[x203] : -# 629| r629_2(glval) = FunctionAddress[~String] : -# 629| v629_3(void) = Call[~String] : func:r629_2, this:r629_1 -# 629| mu629_4(unknown) = ^CallSideEffect : ~m? -# 629| v629_5(void) = ^IndirectReadSideEffect[-1] : &:r629_1, ~m? -# 629| mu629_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r629_1 -# 629| r629_7(bool) = Constant[0] : -# 629| v629_8(void) = ConditionalBranch : r629_7 +# 35| Block 203 +# 35| r35_2843(glval) = VariableAddress[x203] : +# 35| mu35_2844(String) = Uninitialized[x203] : &:r35_2843 +# 35| r35_2845(glval) = FunctionAddress[String] : +# 35| v35_2846(void) = Call[String] : func:r35_2845, this:r35_2843 +# 35| mu35_2847(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2843 +# 35| r35_2849(glval) = VariableAddress[x203] : +# 35| r35_2850(glval) = FunctionAddress[~String] : +# 35| v35_2851(void) = Call[~String] : func:r35_2850, this:r35_2849 +# 35| mu35_2852(unknown) = ^CallSideEffect : ~m? +# 35| v35_2853(void) = ^IndirectReadSideEffect[-1] : &:r35_2849, ~m? +# 35| mu35_2854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2849 +# 35| r35_2855(bool) = Constant[0] : +# 35| v35_2856(void) = ConditionalBranch : r35_2855 #-----| False -> Block 204 #-----| True -> Block 1026 -# 631| Block 204 -# 631| r631_1(glval) = VariableAddress[x204] : -# 631| mu631_2(String) = Uninitialized[x204] : &:r631_1 -# 631| r631_3(glval) = FunctionAddress[String] : -# 631| v631_4(void) = Call[String] : func:r631_3, this:r631_1 -# 631| mu631_5(unknown) = ^CallSideEffect : ~m? -# 631| mu631_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r631_1 -# 632| r632_1(glval) = VariableAddress[x204] : -# 632| r632_2(glval) = FunctionAddress[~String] : -# 632| v632_3(void) = Call[~String] : func:r632_2, this:r632_1 -# 632| mu632_4(unknown) = ^CallSideEffect : ~m? -# 632| v632_5(void) = ^IndirectReadSideEffect[-1] : &:r632_1, ~m? -# 632| mu632_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r632_1 -# 632| r632_7(bool) = Constant[0] : -# 632| v632_8(void) = ConditionalBranch : r632_7 +# 35| Block 204 +# 35| r35_2857(glval) = VariableAddress[x204] : +# 35| mu35_2858(String) = Uninitialized[x204] : &:r35_2857 +# 35| r35_2859(glval) = FunctionAddress[String] : +# 35| v35_2860(void) = Call[String] : func:r35_2859, this:r35_2857 +# 35| mu35_2861(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2857 +# 35| r35_2863(glval) = VariableAddress[x204] : +# 35| r35_2864(glval) = FunctionAddress[~String] : +# 35| v35_2865(void) = Call[~String] : func:r35_2864, this:r35_2863 +# 35| mu35_2866(unknown) = ^CallSideEffect : ~m? +# 35| v35_2867(void) = ^IndirectReadSideEffect[-1] : &:r35_2863, ~m? +# 35| mu35_2868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2863 +# 35| r35_2869(bool) = Constant[0] : +# 35| v35_2870(void) = ConditionalBranch : r35_2869 #-----| False -> Block 205 #-----| True -> Block 1026 -# 634| Block 205 -# 634| r634_1(glval) = VariableAddress[x205] : -# 634| mu634_2(String) = Uninitialized[x205] : &:r634_1 -# 634| r634_3(glval) = FunctionAddress[String] : -# 634| v634_4(void) = Call[String] : func:r634_3, this:r634_1 -# 634| mu634_5(unknown) = ^CallSideEffect : ~m? -# 634| mu634_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r634_1 -# 635| r635_1(glval) = VariableAddress[x205] : -# 635| r635_2(glval) = FunctionAddress[~String] : -# 635| v635_3(void) = Call[~String] : func:r635_2, this:r635_1 -# 635| mu635_4(unknown) = ^CallSideEffect : ~m? -# 635| v635_5(void) = ^IndirectReadSideEffect[-1] : &:r635_1, ~m? -# 635| mu635_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r635_1 -# 635| r635_7(bool) = Constant[0] : -# 635| v635_8(void) = ConditionalBranch : r635_7 +# 35| Block 205 +# 35| r35_2871(glval) = VariableAddress[x205] : +# 35| mu35_2872(String) = Uninitialized[x205] : &:r35_2871 +# 35| r35_2873(glval) = FunctionAddress[String] : +# 35| v35_2874(void) = Call[String] : func:r35_2873, this:r35_2871 +# 35| mu35_2875(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2871 +# 35| r35_2877(glval) = VariableAddress[x205] : +# 35| r35_2878(glval) = FunctionAddress[~String] : +# 35| v35_2879(void) = Call[~String] : func:r35_2878, this:r35_2877 +# 35| mu35_2880(unknown) = ^CallSideEffect : ~m? +# 35| v35_2881(void) = ^IndirectReadSideEffect[-1] : &:r35_2877, ~m? +# 35| mu35_2882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2877 +# 35| r35_2883(bool) = Constant[0] : +# 35| v35_2884(void) = ConditionalBranch : r35_2883 #-----| False -> Block 206 #-----| True -> Block 1026 -# 637| Block 206 -# 637| r637_1(glval) = VariableAddress[x206] : -# 637| mu637_2(String) = Uninitialized[x206] : &:r637_1 -# 637| r637_3(glval) = FunctionAddress[String] : -# 637| v637_4(void) = Call[String] : func:r637_3, this:r637_1 -# 637| mu637_5(unknown) = ^CallSideEffect : ~m? -# 637| mu637_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r637_1 -# 638| r638_1(glval) = VariableAddress[x206] : -# 638| r638_2(glval) = FunctionAddress[~String] : -# 638| v638_3(void) = Call[~String] : func:r638_2, this:r638_1 -# 638| mu638_4(unknown) = ^CallSideEffect : ~m? -# 638| v638_5(void) = ^IndirectReadSideEffect[-1] : &:r638_1, ~m? -# 638| mu638_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r638_1 -# 638| r638_7(bool) = Constant[0] : -# 638| v638_8(void) = ConditionalBranch : r638_7 +# 35| Block 206 +# 35| r35_2885(glval) = VariableAddress[x206] : +# 35| mu35_2886(String) = Uninitialized[x206] : &:r35_2885 +# 35| r35_2887(glval) = FunctionAddress[String] : +# 35| v35_2888(void) = Call[String] : func:r35_2887, this:r35_2885 +# 35| mu35_2889(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2885 +# 35| r35_2891(glval) = VariableAddress[x206] : +# 35| r35_2892(glval) = FunctionAddress[~String] : +# 35| v35_2893(void) = Call[~String] : func:r35_2892, this:r35_2891 +# 35| mu35_2894(unknown) = ^CallSideEffect : ~m? +# 35| v35_2895(void) = ^IndirectReadSideEffect[-1] : &:r35_2891, ~m? +# 35| mu35_2896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2891 +# 35| r35_2897(bool) = Constant[0] : +# 35| v35_2898(void) = ConditionalBranch : r35_2897 #-----| False -> Block 207 #-----| True -> Block 1026 -# 640| Block 207 -# 640| r640_1(glval) = VariableAddress[x207] : -# 640| mu640_2(String) = Uninitialized[x207] : &:r640_1 -# 640| r640_3(glval) = FunctionAddress[String] : -# 640| v640_4(void) = Call[String] : func:r640_3, this:r640_1 -# 640| mu640_5(unknown) = ^CallSideEffect : ~m? -# 640| mu640_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r640_1 -# 641| r641_1(glval) = VariableAddress[x207] : -# 641| r641_2(glval) = FunctionAddress[~String] : -# 641| v641_3(void) = Call[~String] : func:r641_2, this:r641_1 -# 641| mu641_4(unknown) = ^CallSideEffect : ~m? -# 641| v641_5(void) = ^IndirectReadSideEffect[-1] : &:r641_1, ~m? -# 641| mu641_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r641_1 -# 641| r641_7(bool) = Constant[0] : -# 641| v641_8(void) = ConditionalBranch : r641_7 +# 35| Block 207 +# 35| r35_2899(glval) = VariableAddress[x207] : +# 35| mu35_2900(String) = Uninitialized[x207] : &:r35_2899 +# 35| r35_2901(glval) = FunctionAddress[String] : +# 35| v35_2902(void) = Call[String] : func:r35_2901, this:r35_2899 +# 35| mu35_2903(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2899 +# 35| r35_2905(glval) = VariableAddress[x207] : +# 35| r35_2906(glval) = FunctionAddress[~String] : +# 35| v35_2907(void) = Call[~String] : func:r35_2906, this:r35_2905 +# 35| mu35_2908(unknown) = ^CallSideEffect : ~m? +# 35| v35_2909(void) = ^IndirectReadSideEffect[-1] : &:r35_2905, ~m? +# 35| mu35_2910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2905 +# 35| r35_2911(bool) = Constant[0] : +# 35| v35_2912(void) = ConditionalBranch : r35_2911 #-----| False -> Block 208 #-----| True -> Block 1026 -# 643| Block 208 -# 643| r643_1(glval) = VariableAddress[x208] : -# 643| mu643_2(String) = Uninitialized[x208] : &:r643_1 -# 643| r643_3(glval) = FunctionAddress[String] : -# 643| v643_4(void) = Call[String] : func:r643_3, this:r643_1 -# 643| mu643_5(unknown) = ^CallSideEffect : ~m? -# 643| mu643_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r643_1 -# 644| r644_1(glval) = VariableAddress[x208] : -# 644| r644_2(glval) = FunctionAddress[~String] : -# 644| v644_3(void) = Call[~String] : func:r644_2, this:r644_1 -# 644| mu644_4(unknown) = ^CallSideEffect : ~m? -# 644| v644_5(void) = ^IndirectReadSideEffect[-1] : &:r644_1, ~m? -# 644| mu644_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r644_1 -# 644| r644_7(bool) = Constant[0] : -# 644| v644_8(void) = ConditionalBranch : r644_7 +# 35| Block 208 +# 35| r35_2913(glval) = VariableAddress[x208] : +# 35| mu35_2914(String) = Uninitialized[x208] : &:r35_2913 +# 35| r35_2915(glval) = FunctionAddress[String] : +# 35| v35_2916(void) = Call[String] : func:r35_2915, this:r35_2913 +# 35| mu35_2917(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2913 +# 35| r35_2919(glval) = VariableAddress[x208] : +# 35| r35_2920(glval) = FunctionAddress[~String] : +# 35| v35_2921(void) = Call[~String] : func:r35_2920, this:r35_2919 +# 35| mu35_2922(unknown) = ^CallSideEffect : ~m? +# 35| v35_2923(void) = ^IndirectReadSideEffect[-1] : &:r35_2919, ~m? +# 35| mu35_2924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2919 +# 35| r35_2925(bool) = Constant[0] : +# 35| v35_2926(void) = ConditionalBranch : r35_2925 #-----| False -> Block 209 #-----| True -> Block 1026 -# 646| Block 209 -# 646| r646_1(glval) = VariableAddress[x209] : -# 646| mu646_2(String) = Uninitialized[x209] : &:r646_1 -# 646| r646_3(glval) = FunctionAddress[String] : -# 646| v646_4(void) = Call[String] : func:r646_3, this:r646_1 -# 646| mu646_5(unknown) = ^CallSideEffect : ~m? -# 646| mu646_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r646_1 -# 647| r647_1(glval) = VariableAddress[x209] : -# 647| r647_2(glval) = FunctionAddress[~String] : -# 647| v647_3(void) = Call[~String] : func:r647_2, this:r647_1 -# 647| mu647_4(unknown) = ^CallSideEffect : ~m? -# 647| v647_5(void) = ^IndirectReadSideEffect[-1] : &:r647_1, ~m? -# 647| mu647_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r647_1 -# 647| r647_7(bool) = Constant[0] : -# 647| v647_8(void) = ConditionalBranch : r647_7 +# 35| Block 209 +# 35| r35_2927(glval) = VariableAddress[x209] : +# 35| mu35_2928(String) = Uninitialized[x209] : &:r35_2927 +# 35| r35_2929(glval) = FunctionAddress[String] : +# 35| v35_2930(void) = Call[String] : func:r35_2929, this:r35_2927 +# 35| mu35_2931(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2927 +# 35| r35_2933(glval) = VariableAddress[x209] : +# 35| r35_2934(glval) = FunctionAddress[~String] : +# 35| v35_2935(void) = Call[~String] : func:r35_2934, this:r35_2933 +# 35| mu35_2936(unknown) = ^CallSideEffect : ~m? +# 35| v35_2937(void) = ^IndirectReadSideEffect[-1] : &:r35_2933, ~m? +# 35| mu35_2938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2933 +# 35| r35_2939(bool) = Constant[0] : +# 35| v35_2940(void) = ConditionalBranch : r35_2939 #-----| False -> Block 210 #-----| True -> Block 1026 -# 649| Block 210 -# 649| r649_1(glval) = VariableAddress[x210] : -# 649| mu649_2(String) = Uninitialized[x210] : &:r649_1 -# 649| r649_3(glval) = FunctionAddress[String] : -# 649| v649_4(void) = Call[String] : func:r649_3, this:r649_1 -# 649| mu649_5(unknown) = ^CallSideEffect : ~m? -# 649| mu649_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r649_1 -# 650| r650_1(glval) = VariableAddress[x210] : -# 650| r650_2(glval) = FunctionAddress[~String] : -# 650| v650_3(void) = Call[~String] : func:r650_2, this:r650_1 -# 650| mu650_4(unknown) = ^CallSideEffect : ~m? -# 650| v650_5(void) = ^IndirectReadSideEffect[-1] : &:r650_1, ~m? -# 650| mu650_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r650_1 -# 650| r650_7(bool) = Constant[0] : -# 650| v650_8(void) = ConditionalBranch : r650_7 +# 35| Block 210 +# 35| r35_2941(glval) = VariableAddress[x210] : +# 35| mu35_2942(String) = Uninitialized[x210] : &:r35_2941 +# 35| r35_2943(glval) = FunctionAddress[String] : +# 35| v35_2944(void) = Call[String] : func:r35_2943, this:r35_2941 +# 35| mu35_2945(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2941 +# 35| r35_2947(glval) = VariableAddress[x210] : +# 35| r35_2948(glval) = FunctionAddress[~String] : +# 35| v35_2949(void) = Call[~String] : func:r35_2948, this:r35_2947 +# 35| mu35_2950(unknown) = ^CallSideEffect : ~m? +# 35| v35_2951(void) = ^IndirectReadSideEffect[-1] : &:r35_2947, ~m? +# 35| mu35_2952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2947 +# 35| r35_2953(bool) = Constant[0] : +# 35| v35_2954(void) = ConditionalBranch : r35_2953 #-----| False -> Block 211 #-----| True -> Block 1026 -# 652| Block 211 -# 652| r652_1(glval) = VariableAddress[x211] : -# 652| mu652_2(String) = Uninitialized[x211] : &:r652_1 -# 652| r652_3(glval) = FunctionAddress[String] : -# 652| v652_4(void) = Call[String] : func:r652_3, this:r652_1 -# 652| mu652_5(unknown) = ^CallSideEffect : ~m? -# 652| mu652_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r652_1 -# 653| r653_1(glval) = VariableAddress[x211] : -# 653| r653_2(glval) = FunctionAddress[~String] : -# 653| v653_3(void) = Call[~String] : func:r653_2, this:r653_1 -# 653| mu653_4(unknown) = ^CallSideEffect : ~m? -# 653| v653_5(void) = ^IndirectReadSideEffect[-1] : &:r653_1, ~m? -# 653| mu653_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r653_1 -# 653| r653_7(bool) = Constant[0] : -# 653| v653_8(void) = ConditionalBranch : r653_7 +# 35| Block 211 +# 35| r35_2955(glval) = VariableAddress[x211] : +# 35| mu35_2956(String) = Uninitialized[x211] : &:r35_2955 +# 35| r35_2957(glval) = FunctionAddress[String] : +# 35| v35_2958(void) = Call[String] : func:r35_2957, this:r35_2955 +# 35| mu35_2959(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2955 +# 35| r35_2961(glval) = VariableAddress[x211] : +# 35| r35_2962(glval) = FunctionAddress[~String] : +# 35| v35_2963(void) = Call[~String] : func:r35_2962, this:r35_2961 +# 35| mu35_2964(unknown) = ^CallSideEffect : ~m? +# 35| v35_2965(void) = ^IndirectReadSideEffect[-1] : &:r35_2961, ~m? +# 35| mu35_2966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2961 +# 35| r35_2967(bool) = Constant[0] : +# 35| v35_2968(void) = ConditionalBranch : r35_2967 #-----| False -> Block 212 #-----| True -> Block 1026 -# 655| Block 212 -# 655| r655_1(glval) = VariableAddress[x212] : -# 655| mu655_2(String) = Uninitialized[x212] : &:r655_1 -# 655| r655_3(glval) = FunctionAddress[String] : -# 655| v655_4(void) = Call[String] : func:r655_3, this:r655_1 -# 655| mu655_5(unknown) = ^CallSideEffect : ~m? -# 655| mu655_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r655_1 -# 656| r656_1(glval) = VariableAddress[x212] : -# 656| r656_2(glval) = FunctionAddress[~String] : -# 656| v656_3(void) = Call[~String] : func:r656_2, this:r656_1 -# 656| mu656_4(unknown) = ^CallSideEffect : ~m? -# 656| v656_5(void) = ^IndirectReadSideEffect[-1] : &:r656_1, ~m? -# 656| mu656_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r656_1 -# 656| r656_7(bool) = Constant[0] : -# 656| v656_8(void) = ConditionalBranch : r656_7 +# 35| Block 212 +# 35| r35_2969(glval) = VariableAddress[x212] : +# 35| mu35_2970(String) = Uninitialized[x212] : &:r35_2969 +# 35| r35_2971(glval) = FunctionAddress[String] : +# 35| v35_2972(void) = Call[String] : func:r35_2971, this:r35_2969 +# 35| mu35_2973(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2969 +# 35| r35_2975(glval) = VariableAddress[x212] : +# 35| r35_2976(glval) = FunctionAddress[~String] : +# 35| v35_2977(void) = Call[~String] : func:r35_2976, this:r35_2975 +# 35| mu35_2978(unknown) = ^CallSideEffect : ~m? +# 35| v35_2979(void) = ^IndirectReadSideEffect[-1] : &:r35_2975, ~m? +# 35| mu35_2980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2975 +# 35| r35_2981(bool) = Constant[0] : +# 35| v35_2982(void) = ConditionalBranch : r35_2981 #-----| False -> Block 213 #-----| True -> Block 1026 -# 658| Block 213 -# 658| r658_1(glval) = VariableAddress[x213] : -# 658| mu658_2(String) = Uninitialized[x213] : &:r658_1 -# 658| r658_3(glval) = FunctionAddress[String] : -# 658| v658_4(void) = Call[String] : func:r658_3, this:r658_1 -# 658| mu658_5(unknown) = ^CallSideEffect : ~m? -# 658| mu658_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r658_1 -# 659| r659_1(glval) = VariableAddress[x213] : -# 659| r659_2(glval) = FunctionAddress[~String] : -# 659| v659_3(void) = Call[~String] : func:r659_2, this:r659_1 -# 659| mu659_4(unknown) = ^CallSideEffect : ~m? -# 659| v659_5(void) = ^IndirectReadSideEffect[-1] : &:r659_1, ~m? -# 659| mu659_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r659_1 -# 659| r659_7(bool) = Constant[0] : -# 659| v659_8(void) = ConditionalBranch : r659_7 +# 35| Block 213 +# 35| r35_2983(glval) = VariableAddress[x213] : +# 35| mu35_2984(String) = Uninitialized[x213] : &:r35_2983 +# 35| r35_2985(glval) = FunctionAddress[String] : +# 35| v35_2986(void) = Call[String] : func:r35_2985, this:r35_2983 +# 35| mu35_2987(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2983 +# 35| r35_2989(glval) = VariableAddress[x213] : +# 35| r35_2990(glval) = FunctionAddress[~String] : +# 35| v35_2991(void) = Call[~String] : func:r35_2990, this:r35_2989 +# 35| mu35_2992(unknown) = ^CallSideEffect : ~m? +# 35| v35_2993(void) = ^IndirectReadSideEffect[-1] : &:r35_2989, ~m? +# 35| mu35_2994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2989 +# 35| r35_2995(bool) = Constant[0] : +# 35| v35_2996(void) = ConditionalBranch : r35_2995 #-----| False -> Block 214 #-----| True -> Block 1026 -# 661| Block 214 -# 661| r661_1(glval) = VariableAddress[x214] : -# 661| mu661_2(String) = Uninitialized[x214] : &:r661_1 -# 661| r661_3(glval) = FunctionAddress[String] : -# 661| v661_4(void) = Call[String] : func:r661_3, this:r661_1 -# 661| mu661_5(unknown) = ^CallSideEffect : ~m? -# 661| mu661_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r661_1 -# 662| r662_1(glval) = VariableAddress[x214] : -# 662| r662_2(glval) = FunctionAddress[~String] : -# 662| v662_3(void) = Call[~String] : func:r662_2, this:r662_1 -# 662| mu662_4(unknown) = ^CallSideEffect : ~m? -# 662| v662_5(void) = ^IndirectReadSideEffect[-1] : &:r662_1, ~m? -# 662| mu662_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r662_1 -# 662| r662_7(bool) = Constant[0] : -# 662| v662_8(void) = ConditionalBranch : r662_7 +# 35| Block 214 +# 35| r35_2997(glval) = VariableAddress[x214] : +# 35| mu35_2998(String) = Uninitialized[x214] : &:r35_2997 +# 35| r35_2999(glval) = FunctionAddress[String] : +# 35| v35_3000(void) = Call[String] : func:r35_2999, this:r35_2997 +# 35| mu35_3001(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2997 +# 35| r35_3003(glval) = VariableAddress[x214] : +# 35| r35_3004(glval) = FunctionAddress[~String] : +# 35| v35_3005(void) = Call[~String] : func:r35_3004, this:r35_3003 +# 35| mu35_3006(unknown) = ^CallSideEffect : ~m? +# 35| v35_3007(void) = ^IndirectReadSideEffect[-1] : &:r35_3003, ~m? +# 35| mu35_3008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3003 +# 35| r35_3009(bool) = Constant[0] : +# 35| v35_3010(void) = ConditionalBranch : r35_3009 #-----| False -> Block 215 #-----| True -> Block 1026 -# 664| Block 215 -# 664| r664_1(glval) = VariableAddress[x215] : -# 664| mu664_2(String) = Uninitialized[x215] : &:r664_1 -# 664| r664_3(glval) = FunctionAddress[String] : -# 664| v664_4(void) = Call[String] : func:r664_3, this:r664_1 -# 664| mu664_5(unknown) = ^CallSideEffect : ~m? -# 664| mu664_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r664_1 -# 665| r665_1(glval) = VariableAddress[x215] : -# 665| r665_2(glval) = FunctionAddress[~String] : -# 665| v665_3(void) = Call[~String] : func:r665_2, this:r665_1 -# 665| mu665_4(unknown) = ^CallSideEffect : ~m? -# 665| v665_5(void) = ^IndirectReadSideEffect[-1] : &:r665_1, ~m? -# 665| mu665_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r665_1 -# 665| r665_7(bool) = Constant[0] : -# 665| v665_8(void) = ConditionalBranch : r665_7 +# 35| Block 215 +# 35| r35_3011(glval) = VariableAddress[x215] : +# 35| mu35_3012(String) = Uninitialized[x215] : &:r35_3011 +# 35| r35_3013(glval) = FunctionAddress[String] : +# 35| v35_3014(void) = Call[String] : func:r35_3013, this:r35_3011 +# 35| mu35_3015(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3011 +# 35| r35_3017(glval) = VariableAddress[x215] : +# 35| r35_3018(glval) = FunctionAddress[~String] : +# 35| v35_3019(void) = Call[~String] : func:r35_3018, this:r35_3017 +# 35| mu35_3020(unknown) = ^CallSideEffect : ~m? +# 35| v35_3021(void) = ^IndirectReadSideEffect[-1] : &:r35_3017, ~m? +# 35| mu35_3022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3017 +# 35| r35_3023(bool) = Constant[0] : +# 35| v35_3024(void) = ConditionalBranch : r35_3023 #-----| False -> Block 216 #-----| True -> Block 1026 -# 667| Block 216 -# 667| r667_1(glval) = VariableAddress[x216] : -# 667| mu667_2(String) = Uninitialized[x216] : &:r667_1 -# 667| r667_3(glval) = FunctionAddress[String] : -# 667| v667_4(void) = Call[String] : func:r667_3, this:r667_1 -# 667| mu667_5(unknown) = ^CallSideEffect : ~m? -# 667| mu667_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r667_1 -# 668| r668_1(glval) = VariableAddress[x216] : -# 668| r668_2(glval) = FunctionAddress[~String] : -# 668| v668_3(void) = Call[~String] : func:r668_2, this:r668_1 -# 668| mu668_4(unknown) = ^CallSideEffect : ~m? -# 668| v668_5(void) = ^IndirectReadSideEffect[-1] : &:r668_1, ~m? -# 668| mu668_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r668_1 -# 668| r668_7(bool) = Constant[0] : -# 668| v668_8(void) = ConditionalBranch : r668_7 +# 35| Block 216 +# 35| r35_3025(glval) = VariableAddress[x216] : +# 35| mu35_3026(String) = Uninitialized[x216] : &:r35_3025 +# 35| r35_3027(glval) = FunctionAddress[String] : +# 35| v35_3028(void) = Call[String] : func:r35_3027, this:r35_3025 +# 35| mu35_3029(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3025 +# 35| r35_3031(glval) = VariableAddress[x216] : +# 35| r35_3032(glval) = FunctionAddress[~String] : +# 35| v35_3033(void) = Call[~String] : func:r35_3032, this:r35_3031 +# 35| mu35_3034(unknown) = ^CallSideEffect : ~m? +# 35| v35_3035(void) = ^IndirectReadSideEffect[-1] : &:r35_3031, ~m? +# 35| mu35_3036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3031 +# 35| r35_3037(bool) = Constant[0] : +# 35| v35_3038(void) = ConditionalBranch : r35_3037 #-----| False -> Block 217 #-----| True -> Block 1026 -# 670| Block 217 -# 670| r670_1(glval) = VariableAddress[x217] : -# 670| mu670_2(String) = Uninitialized[x217] : &:r670_1 -# 670| r670_3(glval) = FunctionAddress[String] : -# 670| v670_4(void) = Call[String] : func:r670_3, this:r670_1 -# 670| mu670_5(unknown) = ^CallSideEffect : ~m? -# 670| mu670_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r670_1 -# 671| r671_1(glval) = VariableAddress[x217] : -# 671| r671_2(glval) = FunctionAddress[~String] : -# 671| v671_3(void) = Call[~String] : func:r671_2, this:r671_1 -# 671| mu671_4(unknown) = ^CallSideEffect : ~m? -# 671| v671_5(void) = ^IndirectReadSideEffect[-1] : &:r671_1, ~m? -# 671| mu671_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r671_1 -# 671| r671_7(bool) = Constant[0] : -# 671| v671_8(void) = ConditionalBranch : r671_7 +# 35| Block 217 +# 35| r35_3039(glval) = VariableAddress[x217] : +# 35| mu35_3040(String) = Uninitialized[x217] : &:r35_3039 +# 35| r35_3041(glval) = FunctionAddress[String] : +# 35| v35_3042(void) = Call[String] : func:r35_3041, this:r35_3039 +# 35| mu35_3043(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3039 +# 35| r35_3045(glval) = VariableAddress[x217] : +# 35| r35_3046(glval) = FunctionAddress[~String] : +# 35| v35_3047(void) = Call[~String] : func:r35_3046, this:r35_3045 +# 35| mu35_3048(unknown) = ^CallSideEffect : ~m? +# 35| v35_3049(void) = ^IndirectReadSideEffect[-1] : &:r35_3045, ~m? +# 35| mu35_3050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3045 +# 35| r35_3051(bool) = Constant[0] : +# 35| v35_3052(void) = ConditionalBranch : r35_3051 #-----| False -> Block 218 #-----| True -> Block 1026 -# 673| Block 218 -# 673| r673_1(glval) = VariableAddress[x218] : -# 673| mu673_2(String) = Uninitialized[x218] : &:r673_1 -# 673| r673_3(glval) = FunctionAddress[String] : -# 673| v673_4(void) = Call[String] : func:r673_3, this:r673_1 -# 673| mu673_5(unknown) = ^CallSideEffect : ~m? -# 673| mu673_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r673_1 -# 674| r674_1(glval) = VariableAddress[x218] : -# 674| r674_2(glval) = FunctionAddress[~String] : -# 674| v674_3(void) = Call[~String] : func:r674_2, this:r674_1 -# 674| mu674_4(unknown) = ^CallSideEffect : ~m? -# 674| v674_5(void) = ^IndirectReadSideEffect[-1] : &:r674_1, ~m? -# 674| mu674_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r674_1 -# 674| r674_7(bool) = Constant[0] : -# 674| v674_8(void) = ConditionalBranch : r674_7 +# 35| Block 218 +# 35| r35_3053(glval) = VariableAddress[x218] : +# 35| mu35_3054(String) = Uninitialized[x218] : &:r35_3053 +# 35| r35_3055(glval) = FunctionAddress[String] : +# 35| v35_3056(void) = Call[String] : func:r35_3055, this:r35_3053 +# 35| mu35_3057(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3053 +# 35| r35_3059(glval) = VariableAddress[x218] : +# 35| r35_3060(glval) = FunctionAddress[~String] : +# 35| v35_3061(void) = Call[~String] : func:r35_3060, this:r35_3059 +# 35| mu35_3062(unknown) = ^CallSideEffect : ~m? +# 35| v35_3063(void) = ^IndirectReadSideEffect[-1] : &:r35_3059, ~m? +# 35| mu35_3064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3059 +# 35| r35_3065(bool) = Constant[0] : +# 35| v35_3066(void) = ConditionalBranch : r35_3065 #-----| False -> Block 219 #-----| True -> Block 1026 -# 676| Block 219 -# 676| r676_1(glval) = VariableAddress[x219] : -# 676| mu676_2(String) = Uninitialized[x219] : &:r676_1 -# 676| r676_3(glval) = FunctionAddress[String] : -# 676| v676_4(void) = Call[String] : func:r676_3, this:r676_1 -# 676| mu676_5(unknown) = ^CallSideEffect : ~m? -# 676| mu676_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r676_1 -# 677| r677_1(glval) = VariableAddress[x219] : -# 677| r677_2(glval) = FunctionAddress[~String] : -# 677| v677_3(void) = Call[~String] : func:r677_2, this:r677_1 -# 677| mu677_4(unknown) = ^CallSideEffect : ~m? -# 677| v677_5(void) = ^IndirectReadSideEffect[-1] : &:r677_1, ~m? -# 677| mu677_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r677_1 -# 677| r677_7(bool) = Constant[0] : -# 677| v677_8(void) = ConditionalBranch : r677_7 +# 35| Block 219 +# 35| r35_3067(glval) = VariableAddress[x219] : +# 35| mu35_3068(String) = Uninitialized[x219] : &:r35_3067 +# 35| r35_3069(glval) = FunctionAddress[String] : +# 35| v35_3070(void) = Call[String] : func:r35_3069, this:r35_3067 +# 35| mu35_3071(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3067 +# 35| r35_3073(glval) = VariableAddress[x219] : +# 35| r35_3074(glval) = FunctionAddress[~String] : +# 35| v35_3075(void) = Call[~String] : func:r35_3074, this:r35_3073 +# 35| mu35_3076(unknown) = ^CallSideEffect : ~m? +# 35| v35_3077(void) = ^IndirectReadSideEffect[-1] : &:r35_3073, ~m? +# 35| mu35_3078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3073 +# 35| r35_3079(bool) = Constant[0] : +# 35| v35_3080(void) = ConditionalBranch : r35_3079 #-----| False -> Block 220 #-----| True -> Block 1026 -# 679| Block 220 -# 679| r679_1(glval) = VariableAddress[x220] : -# 679| mu679_2(String) = Uninitialized[x220] : &:r679_1 -# 679| r679_3(glval) = FunctionAddress[String] : -# 679| v679_4(void) = Call[String] : func:r679_3, this:r679_1 -# 679| mu679_5(unknown) = ^CallSideEffect : ~m? -# 679| mu679_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r679_1 -# 680| r680_1(glval) = VariableAddress[x220] : -# 680| r680_2(glval) = FunctionAddress[~String] : -# 680| v680_3(void) = Call[~String] : func:r680_2, this:r680_1 -# 680| mu680_4(unknown) = ^CallSideEffect : ~m? -# 680| v680_5(void) = ^IndirectReadSideEffect[-1] : &:r680_1, ~m? -# 680| mu680_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r680_1 -# 680| r680_7(bool) = Constant[0] : -# 680| v680_8(void) = ConditionalBranch : r680_7 +# 35| Block 220 +# 35| r35_3081(glval) = VariableAddress[x220] : +# 35| mu35_3082(String) = Uninitialized[x220] : &:r35_3081 +# 35| r35_3083(glval) = FunctionAddress[String] : +# 35| v35_3084(void) = Call[String] : func:r35_3083, this:r35_3081 +# 35| mu35_3085(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3081 +# 35| r35_3087(glval) = VariableAddress[x220] : +# 35| r35_3088(glval) = FunctionAddress[~String] : +# 35| v35_3089(void) = Call[~String] : func:r35_3088, this:r35_3087 +# 35| mu35_3090(unknown) = ^CallSideEffect : ~m? +# 35| v35_3091(void) = ^IndirectReadSideEffect[-1] : &:r35_3087, ~m? +# 35| mu35_3092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3087 +# 35| r35_3093(bool) = Constant[0] : +# 35| v35_3094(void) = ConditionalBranch : r35_3093 #-----| False -> Block 221 #-----| True -> Block 1026 -# 682| Block 221 -# 682| r682_1(glval) = VariableAddress[x221] : -# 682| mu682_2(String) = Uninitialized[x221] : &:r682_1 -# 682| r682_3(glval) = FunctionAddress[String] : -# 682| v682_4(void) = Call[String] : func:r682_3, this:r682_1 -# 682| mu682_5(unknown) = ^CallSideEffect : ~m? -# 682| mu682_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r682_1 -# 683| r683_1(glval) = VariableAddress[x221] : -# 683| r683_2(glval) = FunctionAddress[~String] : -# 683| v683_3(void) = Call[~String] : func:r683_2, this:r683_1 -# 683| mu683_4(unknown) = ^CallSideEffect : ~m? -# 683| v683_5(void) = ^IndirectReadSideEffect[-1] : &:r683_1, ~m? -# 683| mu683_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r683_1 -# 683| r683_7(bool) = Constant[0] : -# 683| v683_8(void) = ConditionalBranch : r683_7 +# 35| Block 221 +# 35| r35_3095(glval) = VariableAddress[x221] : +# 35| mu35_3096(String) = Uninitialized[x221] : &:r35_3095 +# 35| r35_3097(glval) = FunctionAddress[String] : +# 35| v35_3098(void) = Call[String] : func:r35_3097, this:r35_3095 +# 35| mu35_3099(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3095 +# 35| r35_3101(glval) = VariableAddress[x221] : +# 35| r35_3102(glval) = FunctionAddress[~String] : +# 35| v35_3103(void) = Call[~String] : func:r35_3102, this:r35_3101 +# 35| mu35_3104(unknown) = ^CallSideEffect : ~m? +# 35| v35_3105(void) = ^IndirectReadSideEffect[-1] : &:r35_3101, ~m? +# 35| mu35_3106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3101 +# 35| r35_3107(bool) = Constant[0] : +# 35| v35_3108(void) = ConditionalBranch : r35_3107 #-----| False -> Block 222 #-----| True -> Block 1026 -# 685| Block 222 -# 685| r685_1(glval) = VariableAddress[x222] : -# 685| mu685_2(String) = Uninitialized[x222] : &:r685_1 -# 685| r685_3(glval) = FunctionAddress[String] : -# 685| v685_4(void) = Call[String] : func:r685_3, this:r685_1 -# 685| mu685_5(unknown) = ^CallSideEffect : ~m? -# 685| mu685_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r685_1 -# 686| r686_1(glval) = VariableAddress[x222] : -# 686| r686_2(glval) = FunctionAddress[~String] : -# 686| v686_3(void) = Call[~String] : func:r686_2, this:r686_1 -# 686| mu686_4(unknown) = ^CallSideEffect : ~m? -# 686| v686_5(void) = ^IndirectReadSideEffect[-1] : &:r686_1, ~m? -# 686| mu686_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r686_1 -# 686| r686_7(bool) = Constant[0] : -# 686| v686_8(void) = ConditionalBranch : r686_7 +# 35| Block 222 +# 35| r35_3109(glval) = VariableAddress[x222] : +# 35| mu35_3110(String) = Uninitialized[x222] : &:r35_3109 +# 35| r35_3111(glval) = FunctionAddress[String] : +# 35| v35_3112(void) = Call[String] : func:r35_3111, this:r35_3109 +# 35| mu35_3113(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3109 +# 35| r35_3115(glval) = VariableAddress[x222] : +# 35| r35_3116(glval) = FunctionAddress[~String] : +# 35| v35_3117(void) = Call[~String] : func:r35_3116, this:r35_3115 +# 35| mu35_3118(unknown) = ^CallSideEffect : ~m? +# 35| v35_3119(void) = ^IndirectReadSideEffect[-1] : &:r35_3115, ~m? +# 35| mu35_3120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3115 +# 35| r35_3121(bool) = Constant[0] : +# 35| v35_3122(void) = ConditionalBranch : r35_3121 #-----| False -> Block 223 #-----| True -> Block 1026 -# 688| Block 223 -# 688| r688_1(glval) = VariableAddress[x223] : -# 688| mu688_2(String) = Uninitialized[x223] : &:r688_1 -# 688| r688_3(glval) = FunctionAddress[String] : -# 688| v688_4(void) = Call[String] : func:r688_3, this:r688_1 -# 688| mu688_5(unknown) = ^CallSideEffect : ~m? -# 688| mu688_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r688_1 -# 689| r689_1(glval) = VariableAddress[x223] : -# 689| r689_2(glval) = FunctionAddress[~String] : -# 689| v689_3(void) = Call[~String] : func:r689_2, this:r689_1 -# 689| mu689_4(unknown) = ^CallSideEffect : ~m? -# 689| v689_5(void) = ^IndirectReadSideEffect[-1] : &:r689_1, ~m? -# 689| mu689_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r689_1 -# 689| r689_7(bool) = Constant[0] : -# 689| v689_8(void) = ConditionalBranch : r689_7 +# 35| Block 223 +# 35| r35_3123(glval) = VariableAddress[x223] : +# 35| mu35_3124(String) = Uninitialized[x223] : &:r35_3123 +# 35| r35_3125(glval) = FunctionAddress[String] : +# 35| v35_3126(void) = Call[String] : func:r35_3125, this:r35_3123 +# 35| mu35_3127(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3123 +# 35| r35_3129(glval) = VariableAddress[x223] : +# 35| r35_3130(glval) = FunctionAddress[~String] : +# 35| v35_3131(void) = Call[~String] : func:r35_3130, this:r35_3129 +# 35| mu35_3132(unknown) = ^CallSideEffect : ~m? +# 35| v35_3133(void) = ^IndirectReadSideEffect[-1] : &:r35_3129, ~m? +# 35| mu35_3134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3129 +# 35| r35_3135(bool) = Constant[0] : +# 35| v35_3136(void) = ConditionalBranch : r35_3135 #-----| False -> Block 224 #-----| True -> Block 1026 -# 691| Block 224 -# 691| r691_1(glval) = VariableAddress[x224] : -# 691| mu691_2(String) = Uninitialized[x224] : &:r691_1 -# 691| r691_3(glval) = FunctionAddress[String] : -# 691| v691_4(void) = Call[String] : func:r691_3, this:r691_1 -# 691| mu691_5(unknown) = ^CallSideEffect : ~m? -# 691| mu691_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r691_1 -# 692| r692_1(glval) = VariableAddress[x224] : -# 692| r692_2(glval) = FunctionAddress[~String] : -# 692| v692_3(void) = Call[~String] : func:r692_2, this:r692_1 -# 692| mu692_4(unknown) = ^CallSideEffect : ~m? -# 692| v692_5(void) = ^IndirectReadSideEffect[-1] : &:r692_1, ~m? -# 692| mu692_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r692_1 -# 692| r692_7(bool) = Constant[0] : -# 692| v692_8(void) = ConditionalBranch : r692_7 +# 35| Block 224 +# 35| r35_3137(glval) = VariableAddress[x224] : +# 35| mu35_3138(String) = Uninitialized[x224] : &:r35_3137 +# 35| r35_3139(glval) = FunctionAddress[String] : +# 35| v35_3140(void) = Call[String] : func:r35_3139, this:r35_3137 +# 35| mu35_3141(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3137 +# 35| r35_3143(glval) = VariableAddress[x224] : +# 35| r35_3144(glval) = FunctionAddress[~String] : +# 35| v35_3145(void) = Call[~String] : func:r35_3144, this:r35_3143 +# 35| mu35_3146(unknown) = ^CallSideEffect : ~m? +# 35| v35_3147(void) = ^IndirectReadSideEffect[-1] : &:r35_3143, ~m? +# 35| mu35_3148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3143 +# 35| r35_3149(bool) = Constant[0] : +# 35| v35_3150(void) = ConditionalBranch : r35_3149 #-----| False -> Block 225 #-----| True -> Block 1026 -# 694| Block 225 -# 694| r694_1(glval) = VariableAddress[x225] : -# 694| mu694_2(String) = Uninitialized[x225] : &:r694_1 -# 694| r694_3(glval) = FunctionAddress[String] : -# 694| v694_4(void) = Call[String] : func:r694_3, this:r694_1 -# 694| mu694_5(unknown) = ^CallSideEffect : ~m? -# 694| mu694_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r694_1 -# 695| r695_1(glval) = VariableAddress[x225] : -# 695| r695_2(glval) = FunctionAddress[~String] : -# 695| v695_3(void) = Call[~String] : func:r695_2, this:r695_1 -# 695| mu695_4(unknown) = ^CallSideEffect : ~m? -# 695| v695_5(void) = ^IndirectReadSideEffect[-1] : &:r695_1, ~m? -# 695| mu695_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r695_1 -# 695| r695_7(bool) = Constant[0] : -# 695| v695_8(void) = ConditionalBranch : r695_7 +# 35| Block 225 +# 35| r35_3151(glval) = VariableAddress[x225] : +# 35| mu35_3152(String) = Uninitialized[x225] : &:r35_3151 +# 35| r35_3153(glval) = FunctionAddress[String] : +# 35| v35_3154(void) = Call[String] : func:r35_3153, this:r35_3151 +# 35| mu35_3155(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3151 +# 35| r35_3157(glval) = VariableAddress[x225] : +# 35| r35_3158(glval) = FunctionAddress[~String] : +# 35| v35_3159(void) = Call[~String] : func:r35_3158, this:r35_3157 +# 35| mu35_3160(unknown) = ^CallSideEffect : ~m? +# 35| v35_3161(void) = ^IndirectReadSideEffect[-1] : &:r35_3157, ~m? +# 35| mu35_3162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3157 +# 35| r35_3163(bool) = Constant[0] : +# 35| v35_3164(void) = ConditionalBranch : r35_3163 #-----| False -> Block 226 #-----| True -> Block 1026 -# 697| Block 226 -# 697| r697_1(glval) = VariableAddress[x226] : -# 697| mu697_2(String) = Uninitialized[x226] : &:r697_1 -# 697| r697_3(glval) = FunctionAddress[String] : -# 697| v697_4(void) = Call[String] : func:r697_3, this:r697_1 -# 697| mu697_5(unknown) = ^CallSideEffect : ~m? -# 697| mu697_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r697_1 -# 698| r698_1(glval) = VariableAddress[x226] : -# 698| r698_2(glval) = FunctionAddress[~String] : -# 698| v698_3(void) = Call[~String] : func:r698_2, this:r698_1 -# 698| mu698_4(unknown) = ^CallSideEffect : ~m? -# 698| v698_5(void) = ^IndirectReadSideEffect[-1] : &:r698_1, ~m? -# 698| mu698_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r698_1 -# 698| r698_7(bool) = Constant[0] : -# 698| v698_8(void) = ConditionalBranch : r698_7 +# 35| Block 226 +# 35| r35_3165(glval) = VariableAddress[x226] : +# 35| mu35_3166(String) = Uninitialized[x226] : &:r35_3165 +# 35| r35_3167(glval) = FunctionAddress[String] : +# 35| v35_3168(void) = Call[String] : func:r35_3167, this:r35_3165 +# 35| mu35_3169(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3165 +# 35| r35_3171(glval) = VariableAddress[x226] : +# 35| r35_3172(glval) = FunctionAddress[~String] : +# 35| v35_3173(void) = Call[~String] : func:r35_3172, this:r35_3171 +# 35| mu35_3174(unknown) = ^CallSideEffect : ~m? +# 35| v35_3175(void) = ^IndirectReadSideEffect[-1] : &:r35_3171, ~m? +# 35| mu35_3176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3171 +# 35| r35_3177(bool) = Constant[0] : +# 35| v35_3178(void) = ConditionalBranch : r35_3177 #-----| False -> Block 227 #-----| True -> Block 1026 -# 700| Block 227 -# 700| r700_1(glval) = VariableAddress[x227] : -# 700| mu700_2(String) = Uninitialized[x227] : &:r700_1 -# 700| r700_3(glval) = FunctionAddress[String] : -# 700| v700_4(void) = Call[String] : func:r700_3, this:r700_1 -# 700| mu700_5(unknown) = ^CallSideEffect : ~m? -# 700| mu700_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r700_1 -# 701| r701_1(glval) = VariableAddress[x227] : -# 701| r701_2(glval) = FunctionAddress[~String] : -# 701| v701_3(void) = Call[~String] : func:r701_2, this:r701_1 -# 701| mu701_4(unknown) = ^CallSideEffect : ~m? -# 701| v701_5(void) = ^IndirectReadSideEffect[-1] : &:r701_1, ~m? -# 701| mu701_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r701_1 -# 701| r701_7(bool) = Constant[0] : -# 701| v701_8(void) = ConditionalBranch : r701_7 +# 35| Block 227 +# 35| r35_3179(glval) = VariableAddress[x227] : +# 35| mu35_3180(String) = Uninitialized[x227] : &:r35_3179 +# 35| r35_3181(glval) = FunctionAddress[String] : +# 35| v35_3182(void) = Call[String] : func:r35_3181, this:r35_3179 +# 35| mu35_3183(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3179 +# 35| r35_3185(glval) = VariableAddress[x227] : +# 35| r35_3186(glval) = FunctionAddress[~String] : +# 35| v35_3187(void) = Call[~String] : func:r35_3186, this:r35_3185 +# 35| mu35_3188(unknown) = ^CallSideEffect : ~m? +# 35| v35_3189(void) = ^IndirectReadSideEffect[-1] : &:r35_3185, ~m? +# 35| mu35_3190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3185 +# 35| r35_3191(bool) = Constant[0] : +# 35| v35_3192(void) = ConditionalBranch : r35_3191 #-----| False -> Block 228 #-----| True -> Block 1026 -# 703| Block 228 -# 703| r703_1(glval) = VariableAddress[x228] : -# 703| mu703_2(String) = Uninitialized[x228] : &:r703_1 -# 703| r703_3(glval) = FunctionAddress[String] : -# 703| v703_4(void) = Call[String] : func:r703_3, this:r703_1 -# 703| mu703_5(unknown) = ^CallSideEffect : ~m? -# 703| mu703_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r703_1 -# 704| r704_1(glval) = VariableAddress[x228] : -# 704| r704_2(glval) = FunctionAddress[~String] : -# 704| v704_3(void) = Call[~String] : func:r704_2, this:r704_1 -# 704| mu704_4(unknown) = ^CallSideEffect : ~m? -# 704| v704_5(void) = ^IndirectReadSideEffect[-1] : &:r704_1, ~m? -# 704| mu704_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r704_1 -# 704| r704_7(bool) = Constant[0] : -# 704| v704_8(void) = ConditionalBranch : r704_7 +# 35| Block 228 +# 35| r35_3193(glval) = VariableAddress[x228] : +# 35| mu35_3194(String) = Uninitialized[x228] : &:r35_3193 +# 35| r35_3195(glval) = FunctionAddress[String] : +# 35| v35_3196(void) = Call[String] : func:r35_3195, this:r35_3193 +# 35| mu35_3197(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3193 +# 35| r35_3199(glval) = VariableAddress[x228] : +# 35| r35_3200(glval) = FunctionAddress[~String] : +# 35| v35_3201(void) = Call[~String] : func:r35_3200, this:r35_3199 +# 35| mu35_3202(unknown) = ^CallSideEffect : ~m? +# 35| v35_3203(void) = ^IndirectReadSideEffect[-1] : &:r35_3199, ~m? +# 35| mu35_3204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3199 +# 35| r35_3205(bool) = Constant[0] : +# 35| v35_3206(void) = ConditionalBranch : r35_3205 #-----| False -> Block 229 #-----| True -> Block 1026 -# 706| Block 229 -# 706| r706_1(glval) = VariableAddress[x229] : -# 706| mu706_2(String) = Uninitialized[x229] : &:r706_1 -# 706| r706_3(glval) = FunctionAddress[String] : -# 706| v706_4(void) = Call[String] : func:r706_3, this:r706_1 -# 706| mu706_5(unknown) = ^CallSideEffect : ~m? -# 706| mu706_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r706_1 -# 707| r707_1(glval) = VariableAddress[x229] : -# 707| r707_2(glval) = FunctionAddress[~String] : -# 707| v707_3(void) = Call[~String] : func:r707_2, this:r707_1 -# 707| mu707_4(unknown) = ^CallSideEffect : ~m? -# 707| v707_5(void) = ^IndirectReadSideEffect[-1] : &:r707_1, ~m? -# 707| mu707_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r707_1 -# 707| r707_7(bool) = Constant[0] : -# 707| v707_8(void) = ConditionalBranch : r707_7 +# 35| Block 229 +# 35| r35_3207(glval) = VariableAddress[x229] : +# 35| mu35_3208(String) = Uninitialized[x229] : &:r35_3207 +# 35| r35_3209(glval) = FunctionAddress[String] : +# 35| v35_3210(void) = Call[String] : func:r35_3209, this:r35_3207 +# 35| mu35_3211(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3207 +# 35| r35_3213(glval) = VariableAddress[x229] : +# 35| r35_3214(glval) = FunctionAddress[~String] : +# 35| v35_3215(void) = Call[~String] : func:r35_3214, this:r35_3213 +# 35| mu35_3216(unknown) = ^CallSideEffect : ~m? +# 35| v35_3217(void) = ^IndirectReadSideEffect[-1] : &:r35_3213, ~m? +# 35| mu35_3218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3213 +# 35| r35_3219(bool) = Constant[0] : +# 35| v35_3220(void) = ConditionalBranch : r35_3219 #-----| False -> Block 230 #-----| True -> Block 1026 -# 709| Block 230 -# 709| r709_1(glval) = VariableAddress[x230] : -# 709| mu709_2(String) = Uninitialized[x230] : &:r709_1 -# 709| r709_3(glval) = FunctionAddress[String] : -# 709| v709_4(void) = Call[String] : func:r709_3, this:r709_1 -# 709| mu709_5(unknown) = ^CallSideEffect : ~m? -# 709| mu709_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r709_1 -# 710| r710_1(glval) = VariableAddress[x230] : -# 710| r710_2(glval) = FunctionAddress[~String] : -# 710| v710_3(void) = Call[~String] : func:r710_2, this:r710_1 -# 710| mu710_4(unknown) = ^CallSideEffect : ~m? -# 710| v710_5(void) = ^IndirectReadSideEffect[-1] : &:r710_1, ~m? -# 710| mu710_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r710_1 -# 710| r710_7(bool) = Constant[0] : -# 710| v710_8(void) = ConditionalBranch : r710_7 +# 35| Block 230 +# 35| r35_3221(glval) = VariableAddress[x230] : +# 35| mu35_3222(String) = Uninitialized[x230] : &:r35_3221 +# 35| r35_3223(glval) = FunctionAddress[String] : +# 35| v35_3224(void) = Call[String] : func:r35_3223, this:r35_3221 +# 35| mu35_3225(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3221 +# 35| r35_3227(glval) = VariableAddress[x230] : +# 35| r35_3228(glval) = FunctionAddress[~String] : +# 35| v35_3229(void) = Call[~String] : func:r35_3228, this:r35_3227 +# 35| mu35_3230(unknown) = ^CallSideEffect : ~m? +# 35| v35_3231(void) = ^IndirectReadSideEffect[-1] : &:r35_3227, ~m? +# 35| mu35_3232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3227 +# 35| r35_3233(bool) = Constant[0] : +# 35| v35_3234(void) = ConditionalBranch : r35_3233 #-----| False -> Block 231 #-----| True -> Block 1026 -# 712| Block 231 -# 712| r712_1(glval) = VariableAddress[x231] : -# 712| mu712_2(String) = Uninitialized[x231] : &:r712_1 -# 712| r712_3(glval) = FunctionAddress[String] : -# 712| v712_4(void) = Call[String] : func:r712_3, this:r712_1 -# 712| mu712_5(unknown) = ^CallSideEffect : ~m? -# 712| mu712_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r712_1 -# 713| r713_1(glval) = VariableAddress[x231] : -# 713| r713_2(glval) = FunctionAddress[~String] : -# 713| v713_3(void) = Call[~String] : func:r713_2, this:r713_1 -# 713| mu713_4(unknown) = ^CallSideEffect : ~m? -# 713| v713_5(void) = ^IndirectReadSideEffect[-1] : &:r713_1, ~m? -# 713| mu713_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r713_1 -# 713| r713_7(bool) = Constant[0] : -# 713| v713_8(void) = ConditionalBranch : r713_7 +# 35| Block 231 +# 35| r35_3235(glval) = VariableAddress[x231] : +# 35| mu35_3236(String) = Uninitialized[x231] : &:r35_3235 +# 35| r35_3237(glval) = FunctionAddress[String] : +# 35| v35_3238(void) = Call[String] : func:r35_3237, this:r35_3235 +# 35| mu35_3239(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3235 +# 35| r35_3241(glval) = VariableAddress[x231] : +# 35| r35_3242(glval) = FunctionAddress[~String] : +# 35| v35_3243(void) = Call[~String] : func:r35_3242, this:r35_3241 +# 35| mu35_3244(unknown) = ^CallSideEffect : ~m? +# 35| v35_3245(void) = ^IndirectReadSideEffect[-1] : &:r35_3241, ~m? +# 35| mu35_3246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3241 +# 35| r35_3247(bool) = Constant[0] : +# 35| v35_3248(void) = ConditionalBranch : r35_3247 #-----| False -> Block 232 #-----| True -> Block 1026 -# 715| Block 232 -# 715| r715_1(glval) = VariableAddress[x232] : -# 715| mu715_2(String) = Uninitialized[x232] : &:r715_1 -# 715| r715_3(glval) = FunctionAddress[String] : -# 715| v715_4(void) = Call[String] : func:r715_3, this:r715_1 -# 715| mu715_5(unknown) = ^CallSideEffect : ~m? -# 715| mu715_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r715_1 -# 716| r716_1(glval) = VariableAddress[x232] : -# 716| r716_2(glval) = FunctionAddress[~String] : -# 716| v716_3(void) = Call[~String] : func:r716_2, this:r716_1 -# 716| mu716_4(unknown) = ^CallSideEffect : ~m? -# 716| v716_5(void) = ^IndirectReadSideEffect[-1] : &:r716_1, ~m? -# 716| mu716_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r716_1 -# 716| r716_7(bool) = Constant[0] : -# 716| v716_8(void) = ConditionalBranch : r716_7 +# 35| Block 232 +# 35| r35_3249(glval) = VariableAddress[x232] : +# 35| mu35_3250(String) = Uninitialized[x232] : &:r35_3249 +# 35| r35_3251(glval) = FunctionAddress[String] : +# 35| v35_3252(void) = Call[String] : func:r35_3251, this:r35_3249 +# 35| mu35_3253(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3249 +# 35| r35_3255(glval) = VariableAddress[x232] : +# 35| r35_3256(glval) = FunctionAddress[~String] : +# 35| v35_3257(void) = Call[~String] : func:r35_3256, this:r35_3255 +# 35| mu35_3258(unknown) = ^CallSideEffect : ~m? +# 35| v35_3259(void) = ^IndirectReadSideEffect[-1] : &:r35_3255, ~m? +# 35| mu35_3260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3255 +# 35| r35_3261(bool) = Constant[0] : +# 35| v35_3262(void) = ConditionalBranch : r35_3261 #-----| False -> Block 233 #-----| True -> Block 1026 -# 718| Block 233 -# 718| r718_1(glval) = VariableAddress[x233] : -# 718| mu718_2(String) = Uninitialized[x233] : &:r718_1 -# 718| r718_3(glval) = FunctionAddress[String] : -# 718| v718_4(void) = Call[String] : func:r718_3, this:r718_1 -# 718| mu718_5(unknown) = ^CallSideEffect : ~m? -# 718| mu718_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r718_1 -# 719| r719_1(glval) = VariableAddress[x233] : -# 719| r719_2(glval) = FunctionAddress[~String] : -# 719| v719_3(void) = Call[~String] : func:r719_2, this:r719_1 -# 719| mu719_4(unknown) = ^CallSideEffect : ~m? -# 719| v719_5(void) = ^IndirectReadSideEffect[-1] : &:r719_1, ~m? -# 719| mu719_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r719_1 -# 719| r719_7(bool) = Constant[0] : -# 719| v719_8(void) = ConditionalBranch : r719_7 +# 35| Block 233 +# 35| r35_3263(glval) = VariableAddress[x233] : +# 35| mu35_3264(String) = Uninitialized[x233] : &:r35_3263 +# 35| r35_3265(glval) = FunctionAddress[String] : +# 35| v35_3266(void) = Call[String] : func:r35_3265, this:r35_3263 +# 35| mu35_3267(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3263 +# 35| r35_3269(glval) = VariableAddress[x233] : +# 35| r35_3270(glval) = FunctionAddress[~String] : +# 35| v35_3271(void) = Call[~String] : func:r35_3270, this:r35_3269 +# 35| mu35_3272(unknown) = ^CallSideEffect : ~m? +# 35| v35_3273(void) = ^IndirectReadSideEffect[-1] : &:r35_3269, ~m? +# 35| mu35_3274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3269 +# 35| r35_3275(bool) = Constant[0] : +# 35| v35_3276(void) = ConditionalBranch : r35_3275 #-----| False -> Block 234 #-----| True -> Block 1026 -# 721| Block 234 -# 721| r721_1(glval) = VariableAddress[x234] : -# 721| mu721_2(String) = Uninitialized[x234] : &:r721_1 -# 721| r721_3(glval) = FunctionAddress[String] : -# 721| v721_4(void) = Call[String] : func:r721_3, this:r721_1 -# 721| mu721_5(unknown) = ^CallSideEffect : ~m? -# 721| mu721_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r721_1 -# 722| r722_1(glval) = VariableAddress[x234] : -# 722| r722_2(glval) = FunctionAddress[~String] : -# 722| v722_3(void) = Call[~String] : func:r722_2, this:r722_1 -# 722| mu722_4(unknown) = ^CallSideEffect : ~m? -# 722| v722_5(void) = ^IndirectReadSideEffect[-1] : &:r722_1, ~m? -# 722| mu722_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r722_1 -# 722| r722_7(bool) = Constant[0] : -# 722| v722_8(void) = ConditionalBranch : r722_7 +# 35| Block 234 +# 35| r35_3277(glval) = VariableAddress[x234] : +# 35| mu35_3278(String) = Uninitialized[x234] : &:r35_3277 +# 35| r35_3279(glval) = FunctionAddress[String] : +# 35| v35_3280(void) = Call[String] : func:r35_3279, this:r35_3277 +# 35| mu35_3281(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3277 +# 35| r35_3283(glval) = VariableAddress[x234] : +# 35| r35_3284(glval) = FunctionAddress[~String] : +# 35| v35_3285(void) = Call[~String] : func:r35_3284, this:r35_3283 +# 35| mu35_3286(unknown) = ^CallSideEffect : ~m? +# 35| v35_3287(void) = ^IndirectReadSideEffect[-1] : &:r35_3283, ~m? +# 35| mu35_3288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3283 +# 35| r35_3289(bool) = Constant[0] : +# 35| v35_3290(void) = ConditionalBranch : r35_3289 #-----| False -> Block 235 #-----| True -> Block 1026 -# 724| Block 235 -# 724| r724_1(glval) = VariableAddress[x235] : -# 724| mu724_2(String) = Uninitialized[x235] : &:r724_1 -# 724| r724_3(glval) = FunctionAddress[String] : -# 724| v724_4(void) = Call[String] : func:r724_3, this:r724_1 -# 724| mu724_5(unknown) = ^CallSideEffect : ~m? -# 724| mu724_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r724_1 -# 725| r725_1(glval) = VariableAddress[x235] : -# 725| r725_2(glval) = FunctionAddress[~String] : -# 725| v725_3(void) = Call[~String] : func:r725_2, this:r725_1 -# 725| mu725_4(unknown) = ^CallSideEffect : ~m? -# 725| v725_5(void) = ^IndirectReadSideEffect[-1] : &:r725_1, ~m? -# 725| mu725_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r725_1 -# 725| r725_7(bool) = Constant[0] : -# 725| v725_8(void) = ConditionalBranch : r725_7 +# 35| Block 235 +# 35| r35_3291(glval) = VariableAddress[x235] : +# 35| mu35_3292(String) = Uninitialized[x235] : &:r35_3291 +# 35| r35_3293(glval) = FunctionAddress[String] : +# 35| v35_3294(void) = Call[String] : func:r35_3293, this:r35_3291 +# 35| mu35_3295(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3291 +# 35| r35_3297(glval) = VariableAddress[x235] : +# 35| r35_3298(glval) = FunctionAddress[~String] : +# 35| v35_3299(void) = Call[~String] : func:r35_3298, this:r35_3297 +# 35| mu35_3300(unknown) = ^CallSideEffect : ~m? +# 35| v35_3301(void) = ^IndirectReadSideEffect[-1] : &:r35_3297, ~m? +# 35| mu35_3302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3297 +# 35| r35_3303(bool) = Constant[0] : +# 35| v35_3304(void) = ConditionalBranch : r35_3303 #-----| False -> Block 236 #-----| True -> Block 1026 -# 727| Block 236 -# 727| r727_1(glval) = VariableAddress[x236] : -# 727| mu727_2(String) = Uninitialized[x236] : &:r727_1 -# 727| r727_3(glval) = FunctionAddress[String] : -# 727| v727_4(void) = Call[String] : func:r727_3, this:r727_1 -# 727| mu727_5(unknown) = ^CallSideEffect : ~m? -# 727| mu727_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r727_1 -# 728| r728_1(glval) = VariableAddress[x236] : -# 728| r728_2(glval) = FunctionAddress[~String] : -# 728| v728_3(void) = Call[~String] : func:r728_2, this:r728_1 -# 728| mu728_4(unknown) = ^CallSideEffect : ~m? -# 728| v728_5(void) = ^IndirectReadSideEffect[-1] : &:r728_1, ~m? -# 728| mu728_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r728_1 -# 728| r728_7(bool) = Constant[0] : -# 728| v728_8(void) = ConditionalBranch : r728_7 +# 35| Block 236 +# 35| r35_3305(glval) = VariableAddress[x236] : +# 35| mu35_3306(String) = Uninitialized[x236] : &:r35_3305 +# 35| r35_3307(glval) = FunctionAddress[String] : +# 35| v35_3308(void) = Call[String] : func:r35_3307, this:r35_3305 +# 35| mu35_3309(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3305 +# 35| r35_3311(glval) = VariableAddress[x236] : +# 35| r35_3312(glval) = FunctionAddress[~String] : +# 35| v35_3313(void) = Call[~String] : func:r35_3312, this:r35_3311 +# 35| mu35_3314(unknown) = ^CallSideEffect : ~m? +# 35| v35_3315(void) = ^IndirectReadSideEffect[-1] : &:r35_3311, ~m? +# 35| mu35_3316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3311 +# 35| r35_3317(bool) = Constant[0] : +# 35| v35_3318(void) = ConditionalBranch : r35_3317 #-----| False -> Block 237 #-----| True -> Block 1026 -# 730| Block 237 -# 730| r730_1(glval) = VariableAddress[x237] : -# 730| mu730_2(String) = Uninitialized[x237] : &:r730_1 -# 730| r730_3(glval) = FunctionAddress[String] : -# 730| v730_4(void) = Call[String] : func:r730_3, this:r730_1 -# 730| mu730_5(unknown) = ^CallSideEffect : ~m? -# 730| mu730_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r730_1 -# 731| r731_1(glval) = VariableAddress[x237] : -# 731| r731_2(glval) = FunctionAddress[~String] : -# 731| v731_3(void) = Call[~String] : func:r731_2, this:r731_1 -# 731| mu731_4(unknown) = ^CallSideEffect : ~m? -# 731| v731_5(void) = ^IndirectReadSideEffect[-1] : &:r731_1, ~m? -# 731| mu731_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r731_1 -# 731| r731_7(bool) = Constant[0] : -# 731| v731_8(void) = ConditionalBranch : r731_7 +# 35| Block 237 +# 35| r35_3319(glval) = VariableAddress[x237] : +# 35| mu35_3320(String) = Uninitialized[x237] : &:r35_3319 +# 35| r35_3321(glval) = FunctionAddress[String] : +# 35| v35_3322(void) = Call[String] : func:r35_3321, this:r35_3319 +# 35| mu35_3323(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3319 +# 35| r35_3325(glval) = VariableAddress[x237] : +# 35| r35_3326(glval) = FunctionAddress[~String] : +# 35| v35_3327(void) = Call[~String] : func:r35_3326, this:r35_3325 +# 35| mu35_3328(unknown) = ^CallSideEffect : ~m? +# 35| v35_3329(void) = ^IndirectReadSideEffect[-1] : &:r35_3325, ~m? +# 35| mu35_3330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3325 +# 35| r35_3331(bool) = Constant[0] : +# 35| v35_3332(void) = ConditionalBranch : r35_3331 #-----| False -> Block 238 #-----| True -> Block 1026 -# 733| Block 238 -# 733| r733_1(glval) = VariableAddress[x238] : -# 733| mu733_2(String) = Uninitialized[x238] : &:r733_1 -# 733| r733_3(glval) = FunctionAddress[String] : -# 733| v733_4(void) = Call[String] : func:r733_3, this:r733_1 -# 733| mu733_5(unknown) = ^CallSideEffect : ~m? -# 733| mu733_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r733_1 -# 734| r734_1(glval) = VariableAddress[x238] : -# 734| r734_2(glval) = FunctionAddress[~String] : -# 734| v734_3(void) = Call[~String] : func:r734_2, this:r734_1 -# 734| mu734_4(unknown) = ^CallSideEffect : ~m? -# 734| v734_5(void) = ^IndirectReadSideEffect[-1] : &:r734_1, ~m? -# 734| mu734_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r734_1 -# 734| r734_7(bool) = Constant[0] : -# 734| v734_8(void) = ConditionalBranch : r734_7 +# 35| Block 238 +# 35| r35_3333(glval) = VariableAddress[x238] : +# 35| mu35_3334(String) = Uninitialized[x238] : &:r35_3333 +# 35| r35_3335(glval) = FunctionAddress[String] : +# 35| v35_3336(void) = Call[String] : func:r35_3335, this:r35_3333 +# 35| mu35_3337(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3333 +# 35| r35_3339(glval) = VariableAddress[x238] : +# 35| r35_3340(glval) = FunctionAddress[~String] : +# 35| v35_3341(void) = Call[~String] : func:r35_3340, this:r35_3339 +# 35| mu35_3342(unknown) = ^CallSideEffect : ~m? +# 35| v35_3343(void) = ^IndirectReadSideEffect[-1] : &:r35_3339, ~m? +# 35| mu35_3344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3339 +# 35| r35_3345(bool) = Constant[0] : +# 35| v35_3346(void) = ConditionalBranch : r35_3345 #-----| False -> Block 239 #-----| True -> Block 1026 -# 736| Block 239 -# 736| r736_1(glval) = VariableAddress[x239] : -# 736| mu736_2(String) = Uninitialized[x239] : &:r736_1 -# 736| r736_3(glval) = FunctionAddress[String] : -# 736| v736_4(void) = Call[String] : func:r736_3, this:r736_1 -# 736| mu736_5(unknown) = ^CallSideEffect : ~m? -# 736| mu736_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r736_1 -# 737| r737_1(glval) = VariableAddress[x239] : -# 737| r737_2(glval) = FunctionAddress[~String] : -# 737| v737_3(void) = Call[~String] : func:r737_2, this:r737_1 -# 737| mu737_4(unknown) = ^CallSideEffect : ~m? -# 737| v737_5(void) = ^IndirectReadSideEffect[-1] : &:r737_1, ~m? -# 737| mu737_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r737_1 -# 737| r737_7(bool) = Constant[0] : -# 737| v737_8(void) = ConditionalBranch : r737_7 +# 35| Block 239 +# 35| r35_3347(glval) = VariableAddress[x239] : +# 35| mu35_3348(String) = Uninitialized[x239] : &:r35_3347 +# 35| r35_3349(glval) = FunctionAddress[String] : +# 35| v35_3350(void) = Call[String] : func:r35_3349, this:r35_3347 +# 35| mu35_3351(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3347 +# 35| r35_3353(glval) = VariableAddress[x239] : +# 35| r35_3354(glval) = FunctionAddress[~String] : +# 35| v35_3355(void) = Call[~String] : func:r35_3354, this:r35_3353 +# 35| mu35_3356(unknown) = ^CallSideEffect : ~m? +# 35| v35_3357(void) = ^IndirectReadSideEffect[-1] : &:r35_3353, ~m? +# 35| mu35_3358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3353 +# 35| r35_3359(bool) = Constant[0] : +# 35| v35_3360(void) = ConditionalBranch : r35_3359 #-----| False -> Block 240 #-----| True -> Block 1026 -# 739| Block 240 -# 739| r739_1(glval) = VariableAddress[x240] : -# 739| mu739_2(String) = Uninitialized[x240] : &:r739_1 -# 739| r739_3(glval) = FunctionAddress[String] : -# 739| v739_4(void) = Call[String] : func:r739_3, this:r739_1 -# 739| mu739_5(unknown) = ^CallSideEffect : ~m? -# 739| mu739_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r739_1 -# 740| r740_1(glval) = VariableAddress[x240] : -# 740| r740_2(glval) = FunctionAddress[~String] : -# 740| v740_3(void) = Call[~String] : func:r740_2, this:r740_1 -# 740| mu740_4(unknown) = ^CallSideEffect : ~m? -# 740| v740_5(void) = ^IndirectReadSideEffect[-1] : &:r740_1, ~m? -# 740| mu740_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r740_1 -# 740| r740_7(bool) = Constant[0] : -# 740| v740_8(void) = ConditionalBranch : r740_7 +# 35| Block 240 +# 35| r35_3361(glval) = VariableAddress[x240] : +# 35| mu35_3362(String) = Uninitialized[x240] : &:r35_3361 +# 35| r35_3363(glval) = FunctionAddress[String] : +# 35| v35_3364(void) = Call[String] : func:r35_3363, this:r35_3361 +# 35| mu35_3365(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3361 +# 35| r35_3367(glval) = VariableAddress[x240] : +# 35| r35_3368(glval) = FunctionAddress[~String] : +# 35| v35_3369(void) = Call[~String] : func:r35_3368, this:r35_3367 +# 35| mu35_3370(unknown) = ^CallSideEffect : ~m? +# 35| v35_3371(void) = ^IndirectReadSideEffect[-1] : &:r35_3367, ~m? +# 35| mu35_3372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3367 +# 35| r35_3373(bool) = Constant[0] : +# 35| v35_3374(void) = ConditionalBranch : r35_3373 #-----| False -> Block 241 #-----| True -> Block 1026 -# 742| Block 241 -# 742| r742_1(glval) = VariableAddress[x241] : -# 742| mu742_2(String) = Uninitialized[x241] : &:r742_1 -# 742| r742_3(glval) = FunctionAddress[String] : -# 742| v742_4(void) = Call[String] : func:r742_3, this:r742_1 -# 742| mu742_5(unknown) = ^CallSideEffect : ~m? -# 742| mu742_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r742_1 -# 743| r743_1(glval) = VariableAddress[x241] : -# 743| r743_2(glval) = FunctionAddress[~String] : -# 743| v743_3(void) = Call[~String] : func:r743_2, this:r743_1 -# 743| mu743_4(unknown) = ^CallSideEffect : ~m? -# 743| v743_5(void) = ^IndirectReadSideEffect[-1] : &:r743_1, ~m? -# 743| mu743_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r743_1 -# 743| r743_7(bool) = Constant[0] : -# 743| v743_8(void) = ConditionalBranch : r743_7 +# 35| Block 241 +# 35| r35_3375(glval) = VariableAddress[x241] : +# 35| mu35_3376(String) = Uninitialized[x241] : &:r35_3375 +# 35| r35_3377(glval) = FunctionAddress[String] : +# 35| v35_3378(void) = Call[String] : func:r35_3377, this:r35_3375 +# 35| mu35_3379(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3375 +# 35| r35_3381(glval) = VariableAddress[x241] : +# 35| r35_3382(glval) = FunctionAddress[~String] : +# 35| v35_3383(void) = Call[~String] : func:r35_3382, this:r35_3381 +# 35| mu35_3384(unknown) = ^CallSideEffect : ~m? +# 35| v35_3385(void) = ^IndirectReadSideEffect[-1] : &:r35_3381, ~m? +# 35| mu35_3386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3381 +# 35| r35_3387(bool) = Constant[0] : +# 35| v35_3388(void) = ConditionalBranch : r35_3387 #-----| False -> Block 242 #-----| True -> Block 1026 -# 745| Block 242 -# 745| r745_1(glval) = VariableAddress[x242] : -# 745| mu745_2(String) = Uninitialized[x242] : &:r745_1 -# 745| r745_3(glval) = FunctionAddress[String] : -# 745| v745_4(void) = Call[String] : func:r745_3, this:r745_1 -# 745| mu745_5(unknown) = ^CallSideEffect : ~m? -# 745| mu745_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_1 -# 746| r746_1(glval) = VariableAddress[x242] : -# 746| r746_2(glval) = FunctionAddress[~String] : -# 746| v746_3(void) = Call[~String] : func:r746_2, this:r746_1 -# 746| mu746_4(unknown) = ^CallSideEffect : ~m? -# 746| v746_5(void) = ^IndirectReadSideEffect[-1] : &:r746_1, ~m? -# 746| mu746_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r746_1 -# 746| r746_7(bool) = Constant[0] : -# 746| v746_8(void) = ConditionalBranch : r746_7 +# 35| Block 242 +# 35| r35_3389(glval) = VariableAddress[x242] : +# 35| mu35_3390(String) = Uninitialized[x242] : &:r35_3389 +# 35| r35_3391(glval) = FunctionAddress[String] : +# 35| v35_3392(void) = Call[String] : func:r35_3391, this:r35_3389 +# 35| mu35_3393(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3389 +# 35| r35_3395(glval) = VariableAddress[x242] : +# 35| r35_3396(glval) = FunctionAddress[~String] : +# 35| v35_3397(void) = Call[~String] : func:r35_3396, this:r35_3395 +# 35| mu35_3398(unknown) = ^CallSideEffect : ~m? +# 35| v35_3399(void) = ^IndirectReadSideEffect[-1] : &:r35_3395, ~m? +# 35| mu35_3400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3395 +# 35| r35_3401(bool) = Constant[0] : +# 35| v35_3402(void) = ConditionalBranch : r35_3401 #-----| False -> Block 243 #-----| True -> Block 1026 -# 748| Block 243 -# 748| r748_1(glval) = VariableAddress[x243] : -# 748| mu748_2(String) = Uninitialized[x243] : &:r748_1 -# 748| r748_3(glval) = FunctionAddress[String] : -# 748| v748_4(void) = Call[String] : func:r748_3, this:r748_1 -# 748| mu748_5(unknown) = ^CallSideEffect : ~m? -# 748| mu748_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r748_1 -# 749| r749_1(glval) = VariableAddress[x243] : -# 749| r749_2(glval) = FunctionAddress[~String] : -# 749| v749_3(void) = Call[~String] : func:r749_2, this:r749_1 -# 749| mu749_4(unknown) = ^CallSideEffect : ~m? -# 749| v749_5(void) = ^IndirectReadSideEffect[-1] : &:r749_1, ~m? -# 749| mu749_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r749_1 -# 749| r749_7(bool) = Constant[0] : -# 749| v749_8(void) = ConditionalBranch : r749_7 +# 35| Block 243 +# 35| r35_3403(glval) = VariableAddress[x243] : +# 35| mu35_3404(String) = Uninitialized[x243] : &:r35_3403 +# 35| r35_3405(glval) = FunctionAddress[String] : +# 35| v35_3406(void) = Call[String] : func:r35_3405, this:r35_3403 +# 35| mu35_3407(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3403 +# 35| r35_3409(glval) = VariableAddress[x243] : +# 35| r35_3410(glval) = FunctionAddress[~String] : +# 35| v35_3411(void) = Call[~String] : func:r35_3410, this:r35_3409 +# 35| mu35_3412(unknown) = ^CallSideEffect : ~m? +# 35| v35_3413(void) = ^IndirectReadSideEffect[-1] : &:r35_3409, ~m? +# 35| mu35_3414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3409 +# 35| r35_3415(bool) = Constant[0] : +# 35| v35_3416(void) = ConditionalBranch : r35_3415 #-----| False -> Block 244 #-----| True -> Block 1026 -# 751| Block 244 -# 751| r751_1(glval) = VariableAddress[x244] : -# 751| mu751_2(String) = Uninitialized[x244] : &:r751_1 -# 751| r751_3(glval) = FunctionAddress[String] : -# 751| v751_4(void) = Call[String] : func:r751_3, this:r751_1 -# 751| mu751_5(unknown) = ^CallSideEffect : ~m? -# 751| mu751_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r751_1 -# 752| r752_1(glval) = VariableAddress[x244] : -# 752| r752_2(glval) = FunctionAddress[~String] : -# 752| v752_3(void) = Call[~String] : func:r752_2, this:r752_1 -# 752| mu752_4(unknown) = ^CallSideEffect : ~m? -# 752| v752_5(void) = ^IndirectReadSideEffect[-1] : &:r752_1, ~m? -# 752| mu752_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r752_1 -# 752| r752_7(bool) = Constant[0] : -# 752| v752_8(void) = ConditionalBranch : r752_7 +# 35| Block 244 +# 35| r35_3417(glval) = VariableAddress[x244] : +# 35| mu35_3418(String) = Uninitialized[x244] : &:r35_3417 +# 35| r35_3419(glval) = FunctionAddress[String] : +# 35| v35_3420(void) = Call[String] : func:r35_3419, this:r35_3417 +# 35| mu35_3421(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3417 +# 35| r35_3423(glval) = VariableAddress[x244] : +# 35| r35_3424(glval) = FunctionAddress[~String] : +# 35| v35_3425(void) = Call[~String] : func:r35_3424, this:r35_3423 +# 35| mu35_3426(unknown) = ^CallSideEffect : ~m? +# 35| v35_3427(void) = ^IndirectReadSideEffect[-1] : &:r35_3423, ~m? +# 35| mu35_3428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3423 +# 35| r35_3429(bool) = Constant[0] : +# 35| v35_3430(void) = ConditionalBranch : r35_3429 #-----| False -> Block 245 #-----| True -> Block 1026 -# 754| Block 245 -# 754| r754_1(glval) = VariableAddress[x245] : -# 754| mu754_2(String) = Uninitialized[x245] : &:r754_1 -# 754| r754_3(glval) = FunctionAddress[String] : -# 754| v754_4(void) = Call[String] : func:r754_3, this:r754_1 -# 754| mu754_5(unknown) = ^CallSideEffect : ~m? -# 754| mu754_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r754_1 -# 755| r755_1(glval) = VariableAddress[x245] : -# 755| r755_2(glval) = FunctionAddress[~String] : -# 755| v755_3(void) = Call[~String] : func:r755_2, this:r755_1 -# 755| mu755_4(unknown) = ^CallSideEffect : ~m? -# 755| v755_5(void) = ^IndirectReadSideEffect[-1] : &:r755_1, ~m? -# 755| mu755_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r755_1 -# 755| r755_7(bool) = Constant[0] : -# 755| v755_8(void) = ConditionalBranch : r755_7 +# 35| Block 245 +# 35| r35_3431(glval) = VariableAddress[x245] : +# 35| mu35_3432(String) = Uninitialized[x245] : &:r35_3431 +# 35| r35_3433(glval) = FunctionAddress[String] : +# 35| v35_3434(void) = Call[String] : func:r35_3433, this:r35_3431 +# 35| mu35_3435(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3431 +# 35| r35_3437(glval) = VariableAddress[x245] : +# 35| r35_3438(glval) = FunctionAddress[~String] : +# 35| v35_3439(void) = Call[~String] : func:r35_3438, this:r35_3437 +# 35| mu35_3440(unknown) = ^CallSideEffect : ~m? +# 35| v35_3441(void) = ^IndirectReadSideEffect[-1] : &:r35_3437, ~m? +# 35| mu35_3442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3437 +# 35| r35_3443(bool) = Constant[0] : +# 35| v35_3444(void) = ConditionalBranch : r35_3443 #-----| False -> Block 246 #-----| True -> Block 1026 -# 757| Block 246 -# 757| r757_1(glval) = VariableAddress[x246] : -# 757| mu757_2(String) = Uninitialized[x246] : &:r757_1 -# 757| r757_3(glval) = FunctionAddress[String] : -# 757| v757_4(void) = Call[String] : func:r757_3, this:r757_1 -# 757| mu757_5(unknown) = ^CallSideEffect : ~m? -# 757| mu757_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r757_1 -# 758| r758_1(glval) = VariableAddress[x246] : -# 758| r758_2(glval) = FunctionAddress[~String] : -# 758| v758_3(void) = Call[~String] : func:r758_2, this:r758_1 -# 758| mu758_4(unknown) = ^CallSideEffect : ~m? -# 758| v758_5(void) = ^IndirectReadSideEffect[-1] : &:r758_1, ~m? -# 758| mu758_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r758_1 -# 758| r758_7(bool) = Constant[0] : -# 758| v758_8(void) = ConditionalBranch : r758_7 +# 35| Block 246 +# 35| r35_3445(glval) = VariableAddress[x246] : +# 35| mu35_3446(String) = Uninitialized[x246] : &:r35_3445 +# 35| r35_3447(glval) = FunctionAddress[String] : +# 35| v35_3448(void) = Call[String] : func:r35_3447, this:r35_3445 +# 35| mu35_3449(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3445 +# 35| r35_3451(glval) = VariableAddress[x246] : +# 35| r35_3452(glval) = FunctionAddress[~String] : +# 35| v35_3453(void) = Call[~String] : func:r35_3452, this:r35_3451 +# 35| mu35_3454(unknown) = ^CallSideEffect : ~m? +# 35| v35_3455(void) = ^IndirectReadSideEffect[-1] : &:r35_3451, ~m? +# 35| mu35_3456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3451 +# 35| r35_3457(bool) = Constant[0] : +# 35| v35_3458(void) = ConditionalBranch : r35_3457 #-----| False -> Block 247 #-----| True -> Block 1026 -# 760| Block 247 -# 760| r760_1(glval) = VariableAddress[x247] : -# 760| mu760_2(String) = Uninitialized[x247] : &:r760_1 -# 760| r760_3(glval) = FunctionAddress[String] : -# 760| v760_4(void) = Call[String] : func:r760_3, this:r760_1 -# 760| mu760_5(unknown) = ^CallSideEffect : ~m? -# 760| mu760_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r760_1 -# 761| r761_1(glval) = VariableAddress[x247] : -# 761| r761_2(glval) = FunctionAddress[~String] : -# 761| v761_3(void) = Call[~String] : func:r761_2, this:r761_1 -# 761| mu761_4(unknown) = ^CallSideEffect : ~m? -# 761| v761_5(void) = ^IndirectReadSideEffect[-1] : &:r761_1, ~m? -# 761| mu761_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r761_1 -# 761| r761_7(bool) = Constant[0] : -# 761| v761_8(void) = ConditionalBranch : r761_7 +# 35| Block 247 +# 35| r35_3459(glval) = VariableAddress[x247] : +# 35| mu35_3460(String) = Uninitialized[x247] : &:r35_3459 +# 35| r35_3461(glval) = FunctionAddress[String] : +# 35| v35_3462(void) = Call[String] : func:r35_3461, this:r35_3459 +# 35| mu35_3463(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3459 +# 35| r35_3465(glval) = VariableAddress[x247] : +# 35| r35_3466(glval) = FunctionAddress[~String] : +# 35| v35_3467(void) = Call[~String] : func:r35_3466, this:r35_3465 +# 35| mu35_3468(unknown) = ^CallSideEffect : ~m? +# 35| v35_3469(void) = ^IndirectReadSideEffect[-1] : &:r35_3465, ~m? +# 35| mu35_3470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3465 +# 35| r35_3471(bool) = Constant[0] : +# 35| v35_3472(void) = ConditionalBranch : r35_3471 #-----| False -> Block 248 #-----| True -> Block 1026 -# 763| Block 248 -# 763| r763_1(glval) = VariableAddress[x248] : -# 763| mu763_2(String) = Uninitialized[x248] : &:r763_1 -# 763| r763_3(glval) = FunctionAddress[String] : -# 763| v763_4(void) = Call[String] : func:r763_3, this:r763_1 -# 763| mu763_5(unknown) = ^CallSideEffect : ~m? -# 763| mu763_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r763_1 -# 764| r764_1(glval) = VariableAddress[x248] : -# 764| r764_2(glval) = FunctionAddress[~String] : -# 764| v764_3(void) = Call[~String] : func:r764_2, this:r764_1 -# 764| mu764_4(unknown) = ^CallSideEffect : ~m? -# 764| v764_5(void) = ^IndirectReadSideEffect[-1] : &:r764_1, ~m? -# 764| mu764_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r764_1 -# 764| r764_7(bool) = Constant[0] : -# 764| v764_8(void) = ConditionalBranch : r764_7 +# 35| Block 248 +# 35| r35_3473(glval) = VariableAddress[x248] : +# 35| mu35_3474(String) = Uninitialized[x248] : &:r35_3473 +# 35| r35_3475(glval) = FunctionAddress[String] : +# 35| v35_3476(void) = Call[String] : func:r35_3475, this:r35_3473 +# 35| mu35_3477(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3473 +# 35| r35_3479(glval) = VariableAddress[x248] : +# 35| r35_3480(glval) = FunctionAddress[~String] : +# 35| v35_3481(void) = Call[~String] : func:r35_3480, this:r35_3479 +# 35| mu35_3482(unknown) = ^CallSideEffect : ~m? +# 35| v35_3483(void) = ^IndirectReadSideEffect[-1] : &:r35_3479, ~m? +# 35| mu35_3484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3479 +# 35| r35_3485(bool) = Constant[0] : +# 35| v35_3486(void) = ConditionalBranch : r35_3485 #-----| False -> Block 249 #-----| True -> Block 1026 -# 766| Block 249 -# 766| r766_1(glval) = VariableAddress[x249] : -# 766| mu766_2(String) = Uninitialized[x249] : &:r766_1 -# 766| r766_3(glval) = FunctionAddress[String] : -# 766| v766_4(void) = Call[String] : func:r766_3, this:r766_1 -# 766| mu766_5(unknown) = ^CallSideEffect : ~m? -# 766| mu766_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r766_1 -# 767| r767_1(glval) = VariableAddress[x249] : -# 767| r767_2(glval) = FunctionAddress[~String] : -# 767| v767_3(void) = Call[~String] : func:r767_2, this:r767_1 -# 767| mu767_4(unknown) = ^CallSideEffect : ~m? -# 767| v767_5(void) = ^IndirectReadSideEffect[-1] : &:r767_1, ~m? -# 767| mu767_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r767_1 -# 767| r767_7(bool) = Constant[0] : -# 767| v767_8(void) = ConditionalBranch : r767_7 +# 35| Block 249 +# 35| r35_3487(glval) = VariableAddress[x249] : +# 35| mu35_3488(String) = Uninitialized[x249] : &:r35_3487 +# 35| r35_3489(glval) = FunctionAddress[String] : +# 35| v35_3490(void) = Call[String] : func:r35_3489, this:r35_3487 +# 35| mu35_3491(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3487 +# 35| r35_3493(glval) = VariableAddress[x249] : +# 35| r35_3494(glval) = FunctionAddress[~String] : +# 35| v35_3495(void) = Call[~String] : func:r35_3494, this:r35_3493 +# 35| mu35_3496(unknown) = ^CallSideEffect : ~m? +# 35| v35_3497(void) = ^IndirectReadSideEffect[-1] : &:r35_3493, ~m? +# 35| mu35_3498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3493 +# 35| r35_3499(bool) = Constant[0] : +# 35| v35_3500(void) = ConditionalBranch : r35_3499 #-----| False -> Block 250 #-----| True -> Block 1026 -# 769| Block 250 -# 769| r769_1(glval) = VariableAddress[x250] : -# 769| mu769_2(String) = Uninitialized[x250] : &:r769_1 -# 769| r769_3(glval) = FunctionAddress[String] : -# 769| v769_4(void) = Call[String] : func:r769_3, this:r769_1 -# 769| mu769_5(unknown) = ^CallSideEffect : ~m? -# 769| mu769_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r769_1 -# 770| r770_1(glval) = VariableAddress[x250] : -# 770| r770_2(glval) = FunctionAddress[~String] : -# 770| v770_3(void) = Call[~String] : func:r770_2, this:r770_1 -# 770| mu770_4(unknown) = ^CallSideEffect : ~m? -# 770| v770_5(void) = ^IndirectReadSideEffect[-1] : &:r770_1, ~m? -# 770| mu770_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r770_1 -# 770| r770_7(bool) = Constant[0] : -# 770| v770_8(void) = ConditionalBranch : r770_7 +# 35| Block 250 +# 35| r35_3501(glval) = VariableAddress[x250] : +# 35| mu35_3502(String) = Uninitialized[x250] : &:r35_3501 +# 35| r35_3503(glval) = FunctionAddress[String] : +# 35| v35_3504(void) = Call[String] : func:r35_3503, this:r35_3501 +# 35| mu35_3505(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3501 +# 35| r35_3507(glval) = VariableAddress[x250] : +# 35| r35_3508(glval) = FunctionAddress[~String] : +# 35| v35_3509(void) = Call[~String] : func:r35_3508, this:r35_3507 +# 35| mu35_3510(unknown) = ^CallSideEffect : ~m? +# 35| v35_3511(void) = ^IndirectReadSideEffect[-1] : &:r35_3507, ~m? +# 35| mu35_3512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3507 +# 35| r35_3513(bool) = Constant[0] : +# 35| v35_3514(void) = ConditionalBranch : r35_3513 #-----| False -> Block 251 #-----| True -> Block 1026 -# 772| Block 251 -# 772| r772_1(glval) = VariableAddress[x251] : -# 772| mu772_2(String) = Uninitialized[x251] : &:r772_1 -# 772| r772_3(glval) = FunctionAddress[String] : -# 772| v772_4(void) = Call[String] : func:r772_3, this:r772_1 -# 772| mu772_5(unknown) = ^CallSideEffect : ~m? -# 772| mu772_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r772_1 -# 773| r773_1(glval) = VariableAddress[x251] : -# 773| r773_2(glval) = FunctionAddress[~String] : -# 773| v773_3(void) = Call[~String] : func:r773_2, this:r773_1 -# 773| mu773_4(unknown) = ^CallSideEffect : ~m? -# 773| v773_5(void) = ^IndirectReadSideEffect[-1] : &:r773_1, ~m? -# 773| mu773_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r773_1 -# 773| r773_7(bool) = Constant[0] : -# 773| v773_8(void) = ConditionalBranch : r773_7 +# 35| Block 251 +# 35| r35_3515(glval) = VariableAddress[x251] : +# 35| mu35_3516(String) = Uninitialized[x251] : &:r35_3515 +# 35| r35_3517(glval) = FunctionAddress[String] : +# 35| v35_3518(void) = Call[String] : func:r35_3517, this:r35_3515 +# 35| mu35_3519(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3515 +# 35| r35_3521(glval) = VariableAddress[x251] : +# 35| r35_3522(glval) = FunctionAddress[~String] : +# 35| v35_3523(void) = Call[~String] : func:r35_3522, this:r35_3521 +# 35| mu35_3524(unknown) = ^CallSideEffect : ~m? +# 35| v35_3525(void) = ^IndirectReadSideEffect[-1] : &:r35_3521, ~m? +# 35| mu35_3526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3521 +# 35| r35_3527(bool) = Constant[0] : +# 35| v35_3528(void) = ConditionalBranch : r35_3527 #-----| False -> Block 252 #-----| True -> Block 1026 -# 775| Block 252 -# 775| r775_1(glval) = VariableAddress[x252] : -# 775| mu775_2(String) = Uninitialized[x252] : &:r775_1 -# 775| r775_3(glval) = FunctionAddress[String] : -# 775| v775_4(void) = Call[String] : func:r775_3, this:r775_1 -# 775| mu775_5(unknown) = ^CallSideEffect : ~m? -# 775| mu775_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r775_1 -# 776| r776_1(glval) = VariableAddress[x252] : -# 776| r776_2(glval) = FunctionAddress[~String] : -# 776| v776_3(void) = Call[~String] : func:r776_2, this:r776_1 -# 776| mu776_4(unknown) = ^CallSideEffect : ~m? -# 776| v776_5(void) = ^IndirectReadSideEffect[-1] : &:r776_1, ~m? -# 776| mu776_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r776_1 -# 776| r776_7(bool) = Constant[0] : -# 776| v776_8(void) = ConditionalBranch : r776_7 +# 35| Block 252 +# 35| r35_3529(glval) = VariableAddress[x252] : +# 35| mu35_3530(String) = Uninitialized[x252] : &:r35_3529 +# 35| r35_3531(glval) = FunctionAddress[String] : +# 35| v35_3532(void) = Call[String] : func:r35_3531, this:r35_3529 +# 35| mu35_3533(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3529 +# 35| r35_3535(glval) = VariableAddress[x252] : +# 35| r35_3536(glval) = FunctionAddress[~String] : +# 35| v35_3537(void) = Call[~String] : func:r35_3536, this:r35_3535 +# 35| mu35_3538(unknown) = ^CallSideEffect : ~m? +# 35| v35_3539(void) = ^IndirectReadSideEffect[-1] : &:r35_3535, ~m? +# 35| mu35_3540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3535 +# 35| r35_3541(bool) = Constant[0] : +# 35| v35_3542(void) = ConditionalBranch : r35_3541 #-----| False -> Block 253 #-----| True -> Block 1026 -# 778| Block 253 -# 778| r778_1(glval) = VariableAddress[x253] : -# 778| mu778_2(String) = Uninitialized[x253] : &:r778_1 -# 778| r778_3(glval) = FunctionAddress[String] : -# 778| v778_4(void) = Call[String] : func:r778_3, this:r778_1 -# 778| mu778_5(unknown) = ^CallSideEffect : ~m? -# 778| mu778_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r778_1 -# 779| r779_1(glval) = VariableAddress[x253] : -# 779| r779_2(glval) = FunctionAddress[~String] : -# 779| v779_3(void) = Call[~String] : func:r779_2, this:r779_1 -# 779| mu779_4(unknown) = ^CallSideEffect : ~m? -# 779| v779_5(void) = ^IndirectReadSideEffect[-1] : &:r779_1, ~m? -# 779| mu779_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r779_1 -# 779| r779_7(bool) = Constant[0] : -# 779| v779_8(void) = ConditionalBranch : r779_7 +# 35| Block 253 +# 35| r35_3543(glval) = VariableAddress[x253] : +# 35| mu35_3544(String) = Uninitialized[x253] : &:r35_3543 +# 35| r35_3545(glval) = FunctionAddress[String] : +# 35| v35_3546(void) = Call[String] : func:r35_3545, this:r35_3543 +# 35| mu35_3547(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3543 +# 35| r35_3549(glval) = VariableAddress[x253] : +# 35| r35_3550(glval) = FunctionAddress[~String] : +# 35| v35_3551(void) = Call[~String] : func:r35_3550, this:r35_3549 +# 35| mu35_3552(unknown) = ^CallSideEffect : ~m? +# 35| v35_3553(void) = ^IndirectReadSideEffect[-1] : &:r35_3549, ~m? +# 35| mu35_3554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3549 +# 35| r35_3555(bool) = Constant[0] : +# 35| v35_3556(void) = ConditionalBranch : r35_3555 #-----| False -> Block 254 #-----| True -> Block 1026 -# 781| Block 254 -# 781| r781_1(glval) = VariableAddress[x254] : -# 781| mu781_2(String) = Uninitialized[x254] : &:r781_1 -# 781| r781_3(glval) = FunctionAddress[String] : -# 781| v781_4(void) = Call[String] : func:r781_3, this:r781_1 -# 781| mu781_5(unknown) = ^CallSideEffect : ~m? -# 781| mu781_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r781_1 -# 782| r782_1(glval) = VariableAddress[x254] : -# 782| r782_2(glval) = FunctionAddress[~String] : -# 782| v782_3(void) = Call[~String] : func:r782_2, this:r782_1 -# 782| mu782_4(unknown) = ^CallSideEffect : ~m? -# 782| v782_5(void) = ^IndirectReadSideEffect[-1] : &:r782_1, ~m? -# 782| mu782_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r782_1 -# 782| r782_7(bool) = Constant[0] : -# 782| v782_8(void) = ConditionalBranch : r782_7 +# 35| Block 254 +# 35| r35_3557(glval) = VariableAddress[x254] : +# 35| mu35_3558(String) = Uninitialized[x254] : &:r35_3557 +# 35| r35_3559(glval) = FunctionAddress[String] : +# 35| v35_3560(void) = Call[String] : func:r35_3559, this:r35_3557 +# 35| mu35_3561(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3557 +# 35| r35_3563(glval) = VariableAddress[x254] : +# 35| r35_3564(glval) = FunctionAddress[~String] : +# 35| v35_3565(void) = Call[~String] : func:r35_3564, this:r35_3563 +# 35| mu35_3566(unknown) = ^CallSideEffect : ~m? +# 35| v35_3567(void) = ^IndirectReadSideEffect[-1] : &:r35_3563, ~m? +# 35| mu35_3568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3563 +# 35| r35_3569(bool) = Constant[0] : +# 35| v35_3570(void) = ConditionalBranch : r35_3569 #-----| False -> Block 255 #-----| True -> Block 1026 -# 784| Block 255 -# 784| r784_1(glval) = VariableAddress[x255] : -# 784| mu784_2(String) = Uninitialized[x255] : &:r784_1 -# 784| r784_3(glval) = FunctionAddress[String] : -# 784| v784_4(void) = Call[String] : func:r784_3, this:r784_1 -# 784| mu784_5(unknown) = ^CallSideEffect : ~m? -# 784| mu784_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r784_1 -# 785| r785_1(glval) = VariableAddress[x255] : -# 785| r785_2(glval) = FunctionAddress[~String] : -# 785| v785_3(void) = Call[~String] : func:r785_2, this:r785_1 -# 785| mu785_4(unknown) = ^CallSideEffect : ~m? -# 785| v785_5(void) = ^IndirectReadSideEffect[-1] : &:r785_1, ~m? -# 785| mu785_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r785_1 -# 785| r785_7(bool) = Constant[0] : -# 785| v785_8(void) = ConditionalBranch : r785_7 +# 35| Block 255 +# 35| r35_3571(glval) = VariableAddress[x255] : +# 35| mu35_3572(String) = Uninitialized[x255] : &:r35_3571 +# 35| r35_3573(glval) = FunctionAddress[String] : +# 35| v35_3574(void) = Call[String] : func:r35_3573, this:r35_3571 +# 35| mu35_3575(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3571 +# 35| r35_3577(glval) = VariableAddress[x255] : +# 35| r35_3578(glval) = FunctionAddress[~String] : +# 35| v35_3579(void) = Call[~String] : func:r35_3578, this:r35_3577 +# 35| mu35_3580(unknown) = ^CallSideEffect : ~m? +# 35| v35_3581(void) = ^IndirectReadSideEffect[-1] : &:r35_3577, ~m? +# 35| mu35_3582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3577 +# 35| r35_3583(bool) = Constant[0] : +# 35| v35_3584(void) = ConditionalBranch : r35_3583 #-----| False -> Block 256 #-----| True -> Block 1026 -# 787| Block 256 -# 787| r787_1(glval) = VariableAddress[x256] : -# 787| mu787_2(String) = Uninitialized[x256] : &:r787_1 -# 787| r787_3(glval) = FunctionAddress[String] : -# 787| v787_4(void) = Call[String] : func:r787_3, this:r787_1 -# 787| mu787_5(unknown) = ^CallSideEffect : ~m? -# 787| mu787_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r787_1 -# 788| r788_1(glval) = VariableAddress[x256] : -# 788| r788_2(glval) = FunctionAddress[~String] : -# 788| v788_3(void) = Call[~String] : func:r788_2, this:r788_1 -# 788| mu788_4(unknown) = ^CallSideEffect : ~m? -# 788| v788_5(void) = ^IndirectReadSideEffect[-1] : &:r788_1, ~m? -# 788| mu788_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r788_1 -# 788| r788_7(bool) = Constant[0] : -# 788| v788_8(void) = ConditionalBranch : r788_7 +# 35| Block 256 +# 35| r35_3585(glval) = VariableAddress[x256] : +# 35| mu35_3586(String) = Uninitialized[x256] : &:r35_3585 +# 35| r35_3587(glval) = FunctionAddress[String] : +# 35| v35_3588(void) = Call[String] : func:r35_3587, this:r35_3585 +# 35| mu35_3589(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3585 +# 35| r35_3591(glval) = VariableAddress[x256] : +# 35| r35_3592(glval) = FunctionAddress[~String] : +# 35| v35_3593(void) = Call[~String] : func:r35_3592, this:r35_3591 +# 35| mu35_3594(unknown) = ^CallSideEffect : ~m? +# 35| v35_3595(void) = ^IndirectReadSideEffect[-1] : &:r35_3591, ~m? +# 35| mu35_3596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3591 +# 35| r35_3597(bool) = Constant[0] : +# 35| v35_3598(void) = ConditionalBranch : r35_3597 #-----| False -> Block 257 #-----| True -> Block 1026 -# 790| Block 257 -# 790| r790_1(glval) = VariableAddress[x257] : -# 790| mu790_2(String) = Uninitialized[x257] : &:r790_1 -# 790| r790_3(glval) = FunctionAddress[String] : -# 790| v790_4(void) = Call[String] : func:r790_3, this:r790_1 -# 790| mu790_5(unknown) = ^CallSideEffect : ~m? -# 790| mu790_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r790_1 -# 791| r791_1(glval) = VariableAddress[x257] : -# 791| r791_2(glval) = FunctionAddress[~String] : -# 791| v791_3(void) = Call[~String] : func:r791_2, this:r791_1 -# 791| mu791_4(unknown) = ^CallSideEffect : ~m? -# 791| v791_5(void) = ^IndirectReadSideEffect[-1] : &:r791_1, ~m? -# 791| mu791_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r791_1 -# 791| r791_7(bool) = Constant[0] : -# 791| v791_8(void) = ConditionalBranch : r791_7 +# 35| Block 257 +# 35| r35_3599(glval) = VariableAddress[x257] : +# 35| mu35_3600(String) = Uninitialized[x257] : &:r35_3599 +# 35| r35_3601(glval) = FunctionAddress[String] : +# 35| v35_3602(void) = Call[String] : func:r35_3601, this:r35_3599 +# 35| mu35_3603(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3599 +# 35| r35_3605(glval) = VariableAddress[x257] : +# 35| r35_3606(glval) = FunctionAddress[~String] : +# 35| v35_3607(void) = Call[~String] : func:r35_3606, this:r35_3605 +# 35| mu35_3608(unknown) = ^CallSideEffect : ~m? +# 35| v35_3609(void) = ^IndirectReadSideEffect[-1] : &:r35_3605, ~m? +# 35| mu35_3610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3605 +# 35| r35_3611(bool) = Constant[0] : +# 35| v35_3612(void) = ConditionalBranch : r35_3611 #-----| False -> Block 258 #-----| True -> Block 1026 -# 793| Block 258 -# 793| r793_1(glval) = VariableAddress[x258] : -# 793| mu793_2(String) = Uninitialized[x258] : &:r793_1 -# 793| r793_3(glval) = FunctionAddress[String] : -# 793| v793_4(void) = Call[String] : func:r793_3, this:r793_1 -# 793| mu793_5(unknown) = ^CallSideEffect : ~m? -# 793| mu793_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r793_1 -# 794| r794_1(glval) = VariableAddress[x258] : -# 794| r794_2(glval) = FunctionAddress[~String] : -# 794| v794_3(void) = Call[~String] : func:r794_2, this:r794_1 -# 794| mu794_4(unknown) = ^CallSideEffect : ~m? -# 794| v794_5(void) = ^IndirectReadSideEffect[-1] : &:r794_1, ~m? -# 794| mu794_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r794_1 -# 794| r794_7(bool) = Constant[0] : -# 794| v794_8(void) = ConditionalBranch : r794_7 +# 35| Block 258 +# 35| r35_3613(glval) = VariableAddress[x258] : +# 35| mu35_3614(String) = Uninitialized[x258] : &:r35_3613 +# 35| r35_3615(glval) = FunctionAddress[String] : +# 35| v35_3616(void) = Call[String] : func:r35_3615, this:r35_3613 +# 35| mu35_3617(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3613 +# 35| r35_3619(glval) = VariableAddress[x258] : +# 35| r35_3620(glval) = FunctionAddress[~String] : +# 35| v35_3621(void) = Call[~String] : func:r35_3620, this:r35_3619 +# 35| mu35_3622(unknown) = ^CallSideEffect : ~m? +# 35| v35_3623(void) = ^IndirectReadSideEffect[-1] : &:r35_3619, ~m? +# 35| mu35_3624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3619 +# 35| r35_3625(bool) = Constant[0] : +# 35| v35_3626(void) = ConditionalBranch : r35_3625 #-----| False -> Block 259 #-----| True -> Block 1026 -# 796| Block 259 -# 796| r796_1(glval) = VariableAddress[x259] : -# 796| mu796_2(String) = Uninitialized[x259] : &:r796_1 -# 796| r796_3(glval) = FunctionAddress[String] : -# 796| v796_4(void) = Call[String] : func:r796_3, this:r796_1 -# 796| mu796_5(unknown) = ^CallSideEffect : ~m? -# 796| mu796_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r796_1 -# 797| r797_1(glval) = VariableAddress[x259] : -# 797| r797_2(glval) = FunctionAddress[~String] : -# 797| v797_3(void) = Call[~String] : func:r797_2, this:r797_1 -# 797| mu797_4(unknown) = ^CallSideEffect : ~m? -# 797| v797_5(void) = ^IndirectReadSideEffect[-1] : &:r797_1, ~m? -# 797| mu797_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r797_1 -# 797| r797_7(bool) = Constant[0] : -# 797| v797_8(void) = ConditionalBranch : r797_7 +# 35| Block 259 +# 35| r35_3627(glval) = VariableAddress[x259] : +# 35| mu35_3628(String) = Uninitialized[x259] : &:r35_3627 +# 35| r35_3629(glval) = FunctionAddress[String] : +# 35| v35_3630(void) = Call[String] : func:r35_3629, this:r35_3627 +# 35| mu35_3631(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3627 +# 35| r35_3633(glval) = VariableAddress[x259] : +# 35| r35_3634(glval) = FunctionAddress[~String] : +# 35| v35_3635(void) = Call[~String] : func:r35_3634, this:r35_3633 +# 35| mu35_3636(unknown) = ^CallSideEffect : ~m? +# 35| v35_3637(void) = ^IndirectReadSideEffect[-1] : &:r35_3633, ~m? +# 35| mu35_3638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3633 +# 35| r35_3639(bool) = Constant[0] : +# 35| v35_3640(void) = ConditionalBranch : r35_3639 #-----| False -> Block 260 #-----| True -> Block 1026 -# 799| Block 260 -# 799| r799_1(glval) = VariableAddress[x260] : -# 799| mu799_2(String) = Uninitialized[x260] : &:r799_1 -# 799| r799_3(glval) = FunctionAddress[String] : -# 799| v799_4(void) = Call[String] : func:r799_3, this:r799_1 -# 799| mu799_5(unknown) = ^CallSideEffect : ~m? -# 799| mu799_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r799_1 -# 800| r800_1(glval) = VariableAddress[x260] : -# 800| r800_2(glval) = FunctionAddress[~String] : -# 800| v800_3(void) = Call[~String] : func:r800_2, this:r800_1 -# 800| mu800_4(unknown) = ^CallSideEffect : ~m? -# 800| v800_5(void) = ^IndirectReadSideEffect[-1] : &:r800_1, ~m? -# 800| mu800_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r800_1 -# 800| r800_7(bool) = Constant[0] : -# 800| v800_8(void) = ConditionalBranch : r800_7 +# 35| Block 260 +# 35| r35_3641(glval) = VariableAddress[x260] : +# 35| mu35_3642(String) = Uninitialized[x260] : &:r35_3641 +# 35| r35_3643(glval) = FunctionAddress[String] : +# 35| v35_3644(void) = Call[String] : func:r35_3643, this:r35_3641 +# 35| mu35_3645(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3641 +# 35| r35_3647(glval) = VariableAddress[x260] : +# 35| r35_3648(glval) = FunctionAddress[~String] : +# 35| v35_3649(void) = Call[~String] : func:r35_3648, this:r35_3647 +# 35| mu35_3650(unknown) = ^CallSideEffect : ~m? +# 35| v35_3651(void) = ^IndirectReadSideEffect[-1] : &:r35_3647, ~m? +# 35| mu35_3652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3647 +# 35| r35_3653(bool) = Constant[0] : +# 35| v35_3654(void) = ConditionalBranch : r35_3653 #-----| False -> Block 261 #-----| True -> Block 1026 -# 802| Block 261 -# 802| r802_1(glval) = VariableAddress[x261] : -# 802| mu802_2(String) = Uninitialized[x261] : &:r802_1 -# 802| r802_3(glval) = FunctionAddress[String] : -# 802| v802_4(void) = Call[String] : func:r802_3, this:r802_1 -# 802| mu802_5(unknown) = ^CallSideEffect : ~m? -# 802| mu802_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r802_1 -# 803| r803_1(glval) = VariableAddress[x261] : -# 803| r803_2(glval) = FunctionAddress[~String] : -# 803| v803_3(void) = Call[~String] : func:r803_2, this:r803_1 -# 803| mu803_4(unknown) = ^CallSideEffect : ~m? -# 803| v803_5(void) = ^IndirectReadSideEffect[-1] : &:r803_1, ~m? -# 803| mu803_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r803_1 -# 803| r803_7(bool) = Constant[0] : -# 803| v803_8(void) = ConditionalBranch : r803_7 +# 35| Block 261 +# 35| r35_3655(glval) = VariableAddress[x261] : +# 35| mu35_3656(String) = Uninitialized[x261] : &:r35_3655 +# 35| r35_3657(glval) = FunctionAddress[String] : +# 35| v35_3658(void) = Call[String] : func:r35_3657, this:r35_3655 +# 35| mu35_3659(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3655 +# 35| r35_3661(glval) = VariableAddress[x261] : +# 35| r35_3662(glval) = FunctionAddress[~String] : +# 35| v35_3663(void) = Call[~String] : func:r35_3662, this:r35_3661 +# 35| mu35_3664(unknown) = ^CallSideEffect : ~m? +# 35| v35_3665(void) = ^IndirectReadSideEffect[-1] : &:r35_3661, ~m? +# 35| mu35_3666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3661 +# 35| r35_3667(bool) = Constant[0] : +# 35| v35_3668(void) = ConditionalBranch : r35_3667 #-----| False -> Block 262 #-----| True -> Block 1026 -# 805| Block 262 -# 805| r805_1(glval) = VariableAddress[x262] : -# 805| mu805_2(String) = Uninitialized[x262] : &:r805_1 -# 805| r805_3(glval) = FunctionAddress[String] : -# 805| v805_4(void) = Call[String] : func:r805_3, this:r805_1 -# 805| mu805_5(unknown) = ^CallSideEffect : ~m? -# 805| mu805_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r805_1 -# 806| r806_1(glval) = VariableAddress[x262] : -# 806| r806_2(glval) = FunctionAddress[~String] : -# 806| v806_3(void) = Call[~String] : func:r806_2, this:r806_1 -# 806| mu806_4(unknown) = ^CallSideEffect : ~m? -# 806| v806_5(void) = ^IndirectReadSideEffect[-1] : &:r806_1, ~m? -# 806| mu806_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r806_1 -# 806| r806_7(bool) = Constant[0] : -# 806| v806_8(void) = ConditionalBranch : r806_7 +# 35| Block 262 +# 35| r35_3669(glval) = VariableAddress[x262] : +# 35| mu35_3670(String) = Uninitialized[x262] : &:r35_3669 +# 35| r35_3671(glval) = FunctionAddress[String] : +# 35| v35_3672(void) = Call[String] : func:r35_3671, this:r35_3669 +# 35| mu35_3673(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3669 +# 35| r35_3675(glval) = VariableAddress[x262] : +# 35| r35_3676(glval) = FunctionAddress[~String] : +# 35| v35_3677(void) = Call[~String] : func:r35_3676, this:r35_3675 +# 35| mu35_3678(unknown) = ^CallSideEffect : ~m? +# 35| v35_3679(void) = ^IndirectReadSideEffect[-1] : &:r35_3675, ~m? +# 35| mu35_3680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3675 +# 35| r35_3681(bool) = Constant[0] : +# 35| v35_3682(void) = ConditionalBranch : r35_3681 #-----| False -> Block 263 #-----| True -> Block 1026 -# 808| Block 263 -# 808| r808_1(glval) = VariableAddress[x263] : -# 808| mu808_2(String) = Uninitialized[x263] : &:r808_1 -# 808| r808_3(glval) = FunctionAddress[String] : -# 808| v808_4(void) = Call[String] : func:r808_3, this:r808_1 -# 808| mu808_5(unknown) = ^CallSideEffect : ~m? -# 808| mu808_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r808_1 -# 809| r809_1(glval) = VariableAddress[x263] : -# 809| r809_2(glval) = FunctionAddress[~String] : -# 809| v809_3(void) = Call[~String] : func:r809_2, this:r809_1 -# 809| mu809_4(unknown) = ^CallSideEffect : ~m? -# 809| v809_5(void) = ^IndirectReadSideEffect[-1] : &:r809_1, ~m? -# 809| mu809_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 -# 809| r809_7(bool) = Constant[0] : -# 809| v809_8(void) = ConditionalBranch : r809_7 +# 35| Block 263 +# 35| r35_3683(glval) = VariableAddress[x263] : +# 35| mu35_3684(String) = Uninitialized[x263] : &:r35_3683 +# 35| r35_3685(glval) = FunctionAddress[String] : +# 35| v35_3686(void) = Call[String] : func:r35_3685, this:r35_3683 +# 35| mu35_3687(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3683 +# 35| r35_3689(glval) = VariableAddress[x263] : +# 35| r35_3690(glval) = FunctionAddress[~String] : +# 35| v35_3691(void) = Call[~String] : func:r35_3690, this:r35_3689 +# 35| mu35_3692(unknown) = ^CallSideEffect : ~m? +# 35| v35_3693(void) = ^IndirectReadSideEffect[-1] : &:r35_3689, ~m? +# 35| mu35_3694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3689 +# 35| r35_3695(bool) = Constant[0] : +# 35| v35_3696(void) = ConditionalBranch : r35_3695 #-----| False -> Block 264 #-----| True -> Block 1026 -# 811| Block 264 -# 811| r811_1(glval) = VariableAddress[x264] : -# 811| mu811_2(String) = Uninitialized[x264] : &:r811_1 -# 811| r811_3(glval) = FunctionAddress[String] : -# 811| v811_4(void) = Call[String] : func:r811_3, this:r811_1 -# 811| mu811_5(unknown) = ^CallSideEffect : ~m? -# 811| mu811_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r811_1 -# 812| r812_1(glval) = VariableAddress[x264] : -# 812| r812_2(glval) = FunctionAddress[~String] : -# 812| v812_3(void) = Call[~String] : func:r812_2, this:r812_1 -# 812| mu812_4(unknown) = ^CallSideEffect : ~m? -# 812| v812_5(void) = ^IndirectReadSideEffect[-1] : &:r812_1, ~m? -# 812| mu812_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r812_1 -# 812| r812_7(bool) = Constant[0] : -# 812| v812_8(void) = ConditionalBranch : r812_7 +# 35| Block 264 +# 35| r35_3697(glval) = VariableAddress[x264] : +# 35| mu35_3698(String) = Uninitialized[x264] : &:r35_3697 +# 35| r35_3699(glval) = FunctionAddress[String] : +# 35| v35_3700(void) = Call[String] : func:r35_3699, this:r35_3697 +# 35| mu35_3701(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3697 +# 35| r35_3703(glval) = VariableAddress[x264] : +# 35| r35_3704(glval) = FunctionAddress[~String] : +# 35| v35_3705(void) = Call[~String] : func:r35_3704, this:r35_3703 +# 35| mu35_3706(unknown) = ^CallSideEffect : ~m? +# 35| v35_3707(void) = ^IndirectReadSideEffect[-1] : &:r35_3703, ~m? +# 35| mu35_3708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3703 +# 35| r35_3709(bool) = Constant[0] : +# 35| v35_3710(void) = ConditionalBranch : r35_3709 #-----| False -> Block 265 #-----| True -> Block 1026 -# 814| Block 265 -# 814| r814_1(glval) = VariableAddress[x265] : -# 814| mu814_2(String) = Uninitialized[x265] : &:r814_1 -# 814| r814_3(glval) = FunctionAddress[String] : -# 814| v814_4(void) = Call[String] : func:r814_3, this:r814_1 -# 814| mu814_5(unknown) = ^CallSideEffect : ~m? -# 814| mu814_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r814_1 -# 815| r815_1(glval) = VariableAddress[x265] : -# 815| r815_2(glval) = FunctionAddress[~String] : -# 815| v815_3(void) = Call[~String] : func:r815_2, this:r815_1 -# 815| mu815_4(unknown) = ^CallSideEffect : ~m? -# 815| v815_5(void) = ^IndirectReadSideEffect[-1] : &:r815_1, ~m? -# 815| mu815_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r815_1 -# 815| r815_7(bool) = Constant[0] : -# 815| v815_8(void) = ConditionalBranch : r815_7 +# 35| Block 265 +# 35| r35_3711(glval) = VariableAddress[x265] : +# 35| mu35_3712(String) = Uninitialized[x265] : &:r35_3711 +# 35| r35_3713(glval) = FunctionAddress[String] : +# 35| v35_3714(void) = Call[String] : func:r35_3713, this:r35_3711 +# 35| mu35_3715(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3711 +# 35| r35_3717(glval) = VariableAddress[x265] : +# 35| r35_3718(glval) = FunctionAddress[~String] : +# 35| v35_3719(void) = Call[~String] : func:r35_3718, this:r35_3717 +# 35| mu35_3720(unknown) = ^CallSideEffect : ~m? +# 35| v35_3721(void) = ^IndirectReadSideEffect[-1] : &:r35_3717, ~m? +# 35| mu35_3722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3717 +# 35| r35_3723(bool) = Constant[0] : +# 35| v35_3724(void) = ConditionalBranch : r35_3723 #-----| False -> Block 266 #-----| True -> Block 1026 -# 817| Block 266 -# 817| r817_1(glval) = VariableAddress[x266] : -# 817| mu817_2(String) = Uninitialized[x266] : &:r817_1 -# 817| r817_3(glval) = FunctionAddress[String] : -# 817| v817_4(void) = Call[String] : func:r817_3, this:r817_1 -# 817| mu817_5(unknown) = ^CallSideEffect : ~m? -# 817| mu817_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r817_1 -# 818| r818_1(glval) = VariableAddress[x266] : -# 818| r818_2(glval) = FunctionAddress[~String] : -# 818| v818_3(void) = Call[~String] : func:r818_2, this:r818_1 -# 818| mu818_4(unknown) = ^CallSideEffect : ~m? -# 818| v818_5(void) = ^IndirectReadSideEffect[-1] : &:r818_1, ~m? -# 818| mu818_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r818_1 -# 818| r818_7(bool) = Constant[0] : -# 818| v818_8(void) = ConditionalBranch : r818_7 +# 35| Block 266 +# 35| r35_3725(glval) = VariableAddress[x266] : +# 35| mu35_3726(String) = Uninitialized[x266] : &:r35_3725 +# 35| r35_3727(glval) = FunctionAddress[String] : +# 35| v35_3728(void) = Call[String] : func:r35_3727, this:r35_3725 +# 35| mu35_3729(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3725 +# 35| r35_3731(glval) = VariableAddress[x266] : +# 35| r35_3732(glval) = FunctionAddress[~String] : +# 35| v35_3733(void) = Call[~String] : func:r35_3732, this:r35_3731 +# 35| mu35_3734(unknown) = ^CallSideEffect : ~m? +# 35| v35_3735(void) = ^IndirectReadSideEffect[-1] : &:r35_3731, ~m? +# 35| mu35_3736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3731 +# 35| r35_3737(bool) = Constant[0] : +# 35| v35_3738(void) = ConditionalBranch : r35_3737 #-----| False -> Block 267 #-----| True -> Block 1026 -# 820| Block 267 -# 820| r820_1(glval) = VariableAddress[x267] : -# 820| mu820_2(String) = Uninitialized[x267] : &:r820_1 -# 820| r820_3(glval) = FunctionAddress[String] : -# 820| v820_4(void) = Call[String] : func:r820_3, this:r820_1 -# 820| mu820_5(unknown) = ^CallSideEffect : ~m? -# 820| mu820_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r820_1 -# 821| r821_1(glval) = VariableAddress[x267] : -# 821| r821_2(glval) = FunctionAddress[~String] : -# 821| v821_3(void) = Call[~String] : func:r821_2, this:r821_1 -# 821| mu821_4(unknown) = ^CallSideEffect : ~m? -# 821| v821_5(void) = ^IndirectReadSideEffect[-1] : &:r821_1, ~m? -# 821| mu821_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r821_1 -# 821| r821_7(bool) = Constant[0] : -# 821| v821_8(void) = ConditionalBranch : r821_7 +# 35| Block 267 +# 35| r35_3739(glval) = VariableAddress[x267] : +# 35| mu35_3740(String) = Uninitialized[x267] : &:r35_3739 +# 35| r35_3741(glval) = FunctionAddress[String] : +# 35| v35_3742(void) = Call[String] : func:r35_3741, this:r35_3739 +# 35| mu35_3743(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3739 +# 35| r35_3745(glval) = VariableAddress[x267] : +# 35| r35_3746(glval) = FunctionAddress[~String] : +# 35| v35_3747(void) = Call[~String] : func:r35_3746, this:r35_3745 +# 35| mu35_3748(unknown) = ^CallSideEffect : ~m? +# 35| v35_3749(void) = ^IndirectReadSideEffect[-1] : &:r35_3745, ~m? +# 35| mu35_3750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3745 +# 35| r35_3751(bool) = Constant[0] : +# 35| v35_3752(void) = ConditionalBranch : r35_3751 #-----| False -> Block 268 #-----| True -> Block 1026 -# 823| Block 268 -# 823| r823_1(glval) = VariableAddress[x268] : -# 823| mu823_2(String) = Uninitialized[x268] : &:r823_1 -# 823| r823_3(glval) = FunctionAddress[String] : -# 823| v823_4(void) = Call[String] : func:r823_3, this:r823_1 -# 823| mu823_5(unknown) = ^CallSideEffect : ~m? -# 823| mu823_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 -# 824| r824_1(glval) = VariableAddress[x268] : -# 824| r824_2(glval) = FunctionAddress[~String] : -# 824| v824_3(void) = Call[~String] : func:r824_2, this:r824_1 -# 824| mu824_4(unknown) = ^CallSideEffect : ~m? -# 824| v824_5(void) = ^IndirectReadSideEffect[-1] : &:r824_1, ~m? -# 824| mu824_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 -# 824| r824_7(bool) = Constant[0] : -# 824| v824_8(void) = ConditionalBranch : r824_7 +# 35| Block 268 +# 35| r35_3753(glval) = VariableAddress[x268] : +# 35| mu35_3754(String) = Uninitialized[x268] : &:r35_3753 +# 35| r35_3755(glval) = FunctionAddress[String] : +# 35| v35_3756(void) = Call[String] : func:r35_3755, this:r35_3753 +# 35| mu35_3757(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3753 +# 35| r35_3759(glval) = VariableAddress[x268] : +# 35| r35_3760(glval) = FunctionAddress[~String] : +# 35| v35_3761(void) = Call[~String] : func:r35_3760, this:r35_3759 +# 35| mu35_3762(unknown) = ^CallSideEffect : ~m? +# 35| v35_3763(void) = ^IndirectReadSideEffect[-1] : &:r35_3759, ~m? +# 35| mu35_3764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3759 +# 35| r35_3765(bool) = Constant[0] : +# 35| v35_3766(void) = ConditionalBranch : r35_3765 #-----| False -> Block 269 #-----| True -> Block 1026 -# 826| Block 269 -# 826| r826_1(glval) = VariableAddress[x269] : -# 826| mu826_2(String) = Uninitialized[x269] : &:r826_1 -# 826| r826_3(glval) = FunctionAddress[String] : -# 826| v826_4(void) = Call[String] : func:r826_3, this:r826_1 -# 826| mu826_5(unknown) = ^CallSideEffect : ~m? -# 826| mu826_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r826_1 -# 827| r827_1(glval) = VariableAddress[x269] : -# 827| r827_2(glval) = FunctionAddress[~String] : -# 827| v827_3(void) = Call[~String] : func:r827_2, this:r827_1 -# 827| mu827_4(unknown) = ^CallSideEffect : ~m? -# 827| v827_5(void) = ^IndirectReadSideEffect[-1] : &:r827_1, ~m? -# 827| mu827_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r827_1 -# 827| r827_7(bool) = Constant[0] : -# 827| v827_8(void) = ConditionalBranch : r827_7 +# 35| Block 269 +# 35| r35_3767(glval) = VariableAddress[x269] : +# 35| mu35_3768(String) = Uninitialized[x269] : &:r35_3767 +# 35| r35_3769(glval) = FunctionAddress[String] : +# 35| v35_3770(void) = Call[String] : func:r35_3769, this:r35_3767 +# 35| mu35_3771(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3767 +# 35| r35_3773(glval) = VariableAddress[x269] : +# 35| r35_3774(glval) = FunctionAddress[~String] : +# 35| v35_3775(void) = Call[~String] : func:r35_3774, this:r35_3773 +# 35| mu35_3776(unknown) = ^CallSideEffect : ~m? +# 35| v35_3777(void) = ^IndirectReadSideEffect[-1] : &:r35_3773, ~m? +# 35| mu35_3778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3773 +# 35| r35_3779(bool) = Constant[0] : +# 35| v35_3780(void) = ConditionalBranch : r35_3779 #-----| False -> Block 270 #-----| True -> Block 1026 -# 829| Block 270 -# 829| r829_1(glval) = VariableAddress[x270] : -# 829| mu829_2(String) = Uninitialized[x270] : &:r829_1 -# 829| r829_3(glval) = FunctionAddress[String] : -# 829| v829_4(void) = Call[String] : func:r829_3, this:r829_1 -# 829| mu829_5(unknown) = ^CallSideEffect : ~m? -# 829| mu829_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r829_1 -# 830| r830_1(glval) = VariableAddress[x270] : -# 830| r830_2(glval) = FunctionAddress[~String] : -# 830| v830_3(void) = Call[~String] : func:r830_2, this:r830_1 -# 830| mu830_4(unknown) = ^CallSideEffect : ~m? -# 830| v830_5(void) = ^IndirectReadSideEffect[-1] : &:r830_1, ~m? -# 830| mu830_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r830_1 -# 830| r830_7(bool) = Constant[0] : -# 830| v830_8(void) = ConditionalBranch : r830_7 +# 35| Block 270 +# 35| r35_3781(glval) = VariableAddress[x270] : +# 35| mu35_3782(String) = Uninitialized[x270] : &:r35_3781 +# 35| r35_3783(glval) = FunctionAddress[String] : +# 35| v35_3784(void) = Call[String] : func:r35_3783, this:r35_3781 +# 35| mu35_3785(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3781 +# 35| r35_3787(glval) = VariableAddress[x270] : +# 35| r35_3788(glval) = FunctionAddress[~String] : +# 35| v35_3789(void) = Call[~String] : func:r35_3788, this:r35_3787 +# 35| mu35_3790(unknown) = ^CallSideEffect : ~m? +# 35| v35_3791(void) = ^IndirectReadSideEffect[-1] : &:r35_3787, ~m? +# 35| mu35_3792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3787 +# 35| r35_3793(bool) = Constant[0] : +# 35| v35_3794(void) = ConditionalBranch : r35_3793 #-----| False -> Block 271 #-----| True -> Block 1026 -# 832| Block 271 -# 832| r832_1(glval) = VariableAddress[x271] : -# 832| mu832_2(String) = Uninitialized[x271] : &:r832_1 -# 832| r832_3(glval) = FunctionAddress[String] : -# 832| v832_4(void) = Call[String] : func:r832_3, this:r832_1 -# 832| mu832_5(unknown) = ^CallSideEffect : ~m? -# 832| mu832_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r832_1 -# 833| r833_1(glval) = VariableAddress[x271] : -# 833| r833_2(glval) = FunctionAddress[~String] : -# 833| v833_3(void) = Call[~String] : func:r833_2, this:r833_1 -# 833| mu833_4(unknown) = ^CallSideEffect : ~m? -# 833| v833_5(void) = ^IndirectReadSideEffect[-1] : &:r833_1, ~m? -# 833| mu833_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r833_1 -# 833| r833_7(bool) = Constant[0] : -# 833| v833_8(void) = ConditionalBranch : r833_7 +# 35| Block 271 +# 35| r35_3795(glval) = VariableAddress[x271] : +# 35| mu35_3796(String) = Uninitialized[x271] : &:r35_3795 +# 35| r35_3797(glval) = FunctionAddress[String] : +# 35| v35_3798(void) = Call[String] : func:r35_3797, this:r35_3795 +# 35| mu35_3799(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3795 +# 35| r35_3801(glval) = VariableAddress[x271] : +# 35| r35_3802(glval) = FunctionAddress[~String] : +# 35| v35_3803(void) = Call[~String] : func:r35_3802, this:r35_3801 +# 35| mu35_3804(unknown) = ^CallSideEffect : ~m? +# 35| v35_3805(void) = ^IndirectReadSideEffect[-1] : &:r35_3801, ~m? +# 35| mu35_3806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3801 +# 35| r35_3807(bool) = Constant[0] : +# 35| v35_3808(void) = ConditionalBranch : r35_3807 #-----| False -> Block 272 #-----| True -> Block 1026 -# 835| Block 272 -# 835| r835_1(glval) = VariableAddress[x272] : -# 835| mu835_2(String) = Uninitialized[x272] : &:r835_1 -# 835| r835_3(glval) = FunctionAddress[String] : -# 835| v835_4(void) = Call[String] : func:r835_3, this:r835_1 -# 835| mu835_5(unknown) = ^CallSideEffect : ~m? -# 835| mu835_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r835_1 -# 836| r836_1(glval) = VariableAddress[x272] : -# 836| r836_2(glval) = FunctionAddress[~String] : -# 836| v836_3(void) = Call[~String] : func:r836_2, this:r836_1 -# 836| mu836_4(unknown) = ^CallSideEffect : ~m? -# 836| v836_5(void) = ^IndirectReadSideEffect[-1] : &:r836_1, ~m? -# 836| mu836_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r836_1 -# 836| r836_7(bool) = Constant[0] : -# 836| v836_8(void) = ConditionalBranch : r836_7 +# 35| Block 272 +# 35| r35_3809(glval) = VariableAddress[x272] : +# 35| mu35_3810(String) = Uninitialized[x272] : &:r35_3809 +# 35| r35_3811(glval) = FunctionAddress[String] : +# 35| v35_3812(void) = Call[String] : func:r35_3811, this:r35_3809 +# 35| mu35_3813(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3809 +# 35| r35_3815(glval) = VariableAddress[x272] : +# 35| r35_3816(glval) = FunctionAddress[~String] : +# 35| v35_3817(void) = Call[~String] : func:r35_3816, this:r35_3815 +# 35| mu35_3818(unknown) = ^CallSideEffect : ~m? +# 35| v35_3819(void) = ^IndirectReadSideEffect[-1] : &:r35_3815, ~m? +# 35| mu35_3820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3815 +# 35| r35_3821(bool) = Constant[0] : +# 35| v35_3822(void) = ConditionalBranch : r35_3821 #-----| False -> Block 273 #-----| True -> Block 1026 -# 838| Block 273 -# 838| r838_1(glval) = VariableAddress[x273] : -# 838| mu838_2(String) = Uninitialized[x273] : &:r838_1 -# 838| r838_3(glval) = FunctionAddress[String] : -# 838| v838_4(void) = Call[String] : func:r838_3, this:r838_1 -# 838| mu838_5(unknown) = ^CallSideEffect : ~m? -# 838| mu838_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r838_1 -# 839| r839_1(glval) = VariableAddress[x273] : -# 839| r839_2(glval) = FunctionAddress[~String] : -# 839| v839_3(void) = Call[~String] : func:r839_2, this:r839_1 -# 839| mu839_4(unknown) = ^CallSideEffect : ~m? -# 839| v839_5(void) = ^IndirectReadSideEffect[-1] : &:r839_1, ~m? -# 839| mu839_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r839_1 -# 839| r839_7(bool) = Constant[0] : -# 839| v839_8(void) = ConditionalBranch : r839_7 +# 35| Block 273 +# 35| r35_3823(glval) = VariableAddress[x273] : +# 35| mu35_3824(String) = Uninitialized[x273] : &:r35_3823 +# 35| r35_3825(glval) = FunctionAddress[String] : +# 35| v35_3826(void) = Call[String] : func:r35_3825, this:r35_3823 +# 35| mu35_3827(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3823 +# 35| r35_3829(glval) = VariableAddress[x273] : +# 35| r35_3830(glval) = FunctionAddress[~String] : +# 35| v35_3831(void) = Call[~String] : func:r35_3830, this:r35_3829 +# 35| mu35_3832(unknown) = ^CallSideEffect : ~m? +# 35| v35_3833(void) = ^IndirectReadSideEffect[-1] : &:r35_3829, ~m? +# 35| mu35_3834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3829 +# 35| r35_3835(bool) = Constant[0] : +# 35| v35_3836(void) = ConditionalBranch : r35_3835 #-----| False -> Block 274 #-----| True -> Block 1026 -# 841| Block 274 -# 841| r841_1(glval) = VariableAddress[x274] : -# 841| mu841_2(String) = Uninitialized[x274] : &:r841_1 -# 841| r841_3(glval) = FunctionAddress[String] : -# 841| v841_4(void) = Call[String] : func:r841_3, this:r841_1 -# 841| mu841_5(unknown) = ^CallSideEffect : ~m? -# 841| mu841_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r841_1 -# 842| r842_1(glval) = VariableAddress[x274] : -# 842| r842_2(glval) = FunctionAddress[~String] : -# 842| v842_3(void) = Call[~String] : func:r842_2, this:r842_1 -# 842| mu842_4(unknown) = ^CallSideEffect : ~m? -# 842| v842_5(void) = ^IndirectReadSideEffect[-1] : &:r842_1, ~m? -# 842| mu842_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r842_1 -# 842| r842_7(bool) = Constant[0] : -# 842| v842_8(void) = ConditionalBranch : r842_7 +# 35| Block 274 +# 35| r35_3837(glval) = VariableAddress[x274] : +# 35| mu35_3838(String) = Uninitialized[x274] : &:r35_3837 +# 35| r35_3839(glval) = FunctionAddress[String] : +# 35| v35_3840(void) = Call[String] : func:r35_3839, this:r35_3837 +# 35| mu35_3841(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3837 +# 35| r35_3843(glval) = VariableAddress[x274] : +# 35| r35_3844(glval) = FunctionAddress[~String] : +# 35| v35_3845(void) = Call[~String] : func:r35_3844, this:r35_3843 +# 35| mu35_3846(unknown) = ^CallSideEffect : ~m? +# 35| v35_3847(void) = ^IndirectReadSideEffect[-1] : &:r35_3843, ~m? +# 35| mu35_3848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3843 +# 35| r35_3849(bool) = Constant[0] : +# 35| v35_3850(void) = ConditionalBranch : r35_3849 #-----| False -> Block 275 #-----| True -> Block 1026 -# 844| Block 275 -# 844| r844_1(glval) = VariableAddress[x275] : -# 844| mu844_2(String) = Uninitialized[x275] : &:r844_1 -# 844| r844_3(glval) = FunctionAddress[String] : -# 844| v844_4(void) = Call[String] : func:r844_3, this:r844_1 -# 844| mu844_5(unknown) = ^CallSideEffect : ~m? -# 844| mu844_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r844_1 -# 845| r845_1(glval) = VariableAddress[x275] : -# 845| r845_2(glval) = FunctionAddress[~String] : -# 845| v845_3(void) = Call[~String] : func:r845_2, this:r845_1 -# 845| mu845_4(unknown) = ^CallSideEffect : ~m? -# 845| v845_5(void) = ^IndirectReadSideEffect[-1] : &:r845_1, ~m? -# 845| mu845_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r845_1 -# 845| r845_7(bool) = Constant[0] : -# 845| v845_8(void) = ConditionalBranch : r845_7 +# 35| Block 275 +# 35| r35_3851(glval) = VariableAddress[x275] : +# 35| mu35_3852(String) = Uninitialized[x275] : &:r35_3851 +# 35| r35_3853(glval) = FunctionAddress[String] : +# 35| v35_3854(void) = Call[String] : func:r35_3853, this:r35_3851 +# 35| mu35_3855(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3851 +# 35| r35_3857(glval) = VariableAddress[x275] : +# 35| r35_3858(glval) = FunctionAddress[~String] : +# 35| v35_3859(void) = Call[~String] : func:r35_3858, this:r35_3857 +# 35| mu35_3860(unknown) = ^CallSideEffect : ~m? +# 35| v35_3861(void) = ^IndirectReadSideEffect[-1] : &:r35_3857, ~m? +# 35| mu35_3862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3857 +# 35| r35_3863(bool) = Constant[0] : +# 35| v35_3864(void) = ConditionalBranch : r35_3863 #-----| False -> Block 276 #-----| True -> Block 1026 -# 847| Block 276 -# 847| r847_1(glval) = VariableAddress[x276] : -# 847| mu847_2(String) = Uninitialized[x276] : &:r847_1 -# 847| r847_3(glval) = FunctionAddress[String] : -# 847| v847_4(void) = Call[String] : func:r847_3, this:r847_1 -# 847| mu847_5(unknown) = ^CallSideEffect : ~m? -# 847| mu847_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r847_1 -# 848| r848_1(glval) = VariableAddress[x276] : -# 848| r848_2(glval) = FunctionAddress[~String] : -# 848| v848_3(void) = Call[~String] : func:r848_2, this:r848_1 -# 848| mu848_4(unknown) = ^CallSideEffect : ~m? -# 848| v848_5(void) = ^IndirectReadSideEffect[-1] : &:r848_1, ~m? -# 848| mu848_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r848_1 -# 848| r848_7(bool) = Constant[0] : -# 848| v848_8(void) = ConditionalBranch : r848_7 +# 35| Block 276 +# 35| r35_3865(glval) = VariableAddress[x276] : +# 35| mu35_3866(String) = Uninitialized[x276] : &:r35_3865 +# 35| r35_3867(glval) = FunctionAddress[String] : +# 35| v35_3868(void) = Call[String] : func:r35_3867, this:r35_3865 +# 35| mu35_3869(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3865 +# 35| r35_3871(glval) = VariableAddress[x276] : +# 35| r35_3872(glval) = FunctionAddress[~String] : +# 35| v35_3873(void) = Call[~String] : func:r35_3872, this:r35_3871 +# 35| mu35_3874(unknown) = ^CallSideEffect : ~m? +# 35| v35_3875(void) = ^IndirectReadSideEffect[-1] : &:r35_3871, ~m? +# 35| mu35_3876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3871 +# 35| r35_3877(bool) = Constant[0] : +# 35| v35_3878(void) = ConditionalBranch : r35_3877 #-----| False -> Block 277 #-----| True -> Block 1026 -# 850| Block 277 -# 850| r850_1(glval) = VariableAddress[x277] : -# 850| mu850_2(String) = Uninitialized[x277] : &:r850_1 -# 850| r850_3(glval) = FunctionAddress[String] : -# 850| v850_4(void) = Call[String] : func:r850_3, this:r850_1 -# 850| mu850_5(unknown) = ^CallSideEffect : ~m? -# 850| mu850_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r850_1 -# 851| r851_1(glval) = VariableAddress[x277] : -# 851| r851_2(glval) = FunctionAddress[~String] : -# 851| v851_3(void) = Call[~String] : func:r851_2, this:r851_1 -# 851| mu851_4(unknown) = ^CallSideEffect : ~m? -# 851| v851_5(void) = ^IndirectReadSideEffect[-1] : &:r851_1, ~m? -# 851| mu851_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r851_1 -# 851| r851_7(bool) = Constant[0] : -# 851| v851_8(void) = ConditionalBranch : r851_7 +# 35| Block 277 +# 35| r35_3879(glval) = VariableAddress[x277] : +# 35| mu35_3880(String) = Uninitialized[x277] : &:r35_3879 +# 35| r35_3881(glval) = FunctionAddress[String] : +# 35| v35_3882(void) = Call[String] : func:r35_3881, this:r35_3879 +# 35| mu35_3883(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3879 +# 35| r35_3885(glval) = VariableAddress[x277] : +# 35| r35_3886(glval) = FunctionAddress[~String] : +# 35| v35_3887(void) = Call[~String] : func:r35_3886, this:r35_3885 +# 35| mu35_3888(unknown) = ^CallSideEffect : ~m? +# 35| v35_3889(void) = ^IndirectReadSideEffect[-1] : &:r35_3885, ~m? +# 35| mu35_3890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3885 +# 35| r35_3891(bool) = Constant[0] : +# 35| v35_3892(void) = ConditionalBranch : r35_3891 #-----| False -> Block 278 #-----| True -> Block 1026 -# 853| Block 278 -# 853| r853_1(glval) = VariableAddress[x278] : -# 853| mu853_2(String) = Uninitialized[x278] : &:r853_1 -# 853| r853_3(glval) = FunctionAddress[String] : -# 853| v853_4(void) = Call[String] : func:r853_3, this:r853_1 -# 853| mu853_5(unknown) = ^CallSideEffect : ~m? -# 853| mu853_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r853_1 -# 854| r854_1(glval) = VariableAddress[x278] : -# 854| r854_2(glval) = FunctionAddress[~String] : -# 854| v854_3(void) = Call[~String] : func:r854_2, this:r854_1 -# 854| mu854_4(unknown) = ^CallSideEffect : ~m? -# 854| v854_5(void) = ^IndirectReadSideEffect[-1] : &:r854_1, ~m? -# 854| mu854_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r854_1 -# 854| r854_7(bool) = Constant[0] : -# 854| v854_8(void) = ConditionalBranch : r854_7 +# 35| Block 278 +# 35| r35_3893(glval) = VariableAddress[x278] : +# 35| mu35_3894(String) = Uninitialized[x278] : &:r35_3893 +# 35| r35_3895(glval) = FunctionAddress[String] : +# 35| v35_3896(void) = Call[String] : func:r35_3895, this:r35_3893 +# 35| mu35_3897(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3893 +# 35| r35_3899(glval) = VariableAddress[x278] : +# 35| r35_3900(glval) = FunctionAddress[~String] : +# 35| v35_3901(void) = Call[~String] : func:r35_3900, this:r35_3899 +# 35| mu35_3902(unknown) = ^CallSideEffect : ~m? +# 35| v35_3903(void) = ^IndirectReadSideEffect[-1] : &:r35_3899, ~m? +# 35| mu35_3904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3899 +# 35| r35_3905(bool) = Constant[0] : +# 35| v35_3906(void) = ConditionalBranch : r35_3905 #-----| False -> Block 279 #-----| True -> Block 1026 -# 856| Block 279 -# 856| r856_1(glval) = VariableAddress[x279] : -# 856| mu856_2(String) = Uninitialized[x279] : &:r856_1 -# 856| r856_3(glval) = FunctionAddress[String] : -# 856| v856_4(void) = Call[String] : func:r856_3, this:r856_1 -# 856| mu856_5(unknown) = ^CallSideEffect : ~m? -# 856| mu856_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r856_1 -# 857| r857_1(glval) = VariableAddress[x279] : -# 857| r857_2(glval) = FunctionAddress[~String] : -# 857| v857_3(void) = Call[~String] : func:r857_2, this:r857_1 -# 857| mu857_4(unknown) = ^CallSideEffect : ~m? -# 857| v857_5(void) = ^IndirectReadSideEffect[-1] : &:r857_1, ~m? -# 857| mu857_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r857_1 -# 857| r857_7(bool) = Constant[0] : -# 857| v857_8(void) = ConditionalBranch : r857_7 +# 35| Block 279 +# 35| r35_3907(glval) = VariableAddress[x279] : +# 35| mu35_3908(String) = Uninitialized[x279] : &:r35_3907 +# 35| r35_3909(glval) = FunctionAddress[String] : +# 35| v35_3910(void) = Call[String] : func:r35_3909, this:r35_3907 +# 35| mu35_3911(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3907 +# 35| r35_3913(glval) = VariableAddress[x279] : +# 35| r35_3914(glval) = FunctionAddress[~String] : +# 35| v35_3915(void) = Call[~String] : func:r35_3914, this:r35_3913 +# 35| mu35_3916(unknown) = ^CallSideEffect : ~m? +# 35| v35_3917(void) = ^IndirectReadSideEffect[-1] : &:r35_3913, ~m? +# 35| mu35_3918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3913 +# 35| r35_3919(bool) = Constant[0] : +# 35| v35_3920(void) = ConditionalBranch : r35_3919 #-----| False -> Block 280 #-----| True -> Block 1026 -# 859| Block 280 -# 859| r859_1(glval) = VariableAddress[x280] : -# 859| mu859_2(String) = Uninitialized[x280] : &:r859_1 -# 859| r859_3(glval) = FunctionAddress[String] : -# 859| v859_4(void) = Call[String] : func:r859_3, this:r859_1 -# 859| mu859_5(unknown) = ^CallSideEffect : ~m? -# 859| mu859_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r859_1 -# 860| r860_1(glval) = VariableAddress[x280] : -# 860| r860_2(glval) = FunctionAddress[~String] : -# 860| v860_3(void) = Call[~String] : func:r860_2, this:r860_1 -# 860| mu860_4(unknown) = ^CallSideEffect : ~m? -# 860| v860_5(void) = ^IndirectReadSideEffect[-1] : &:r860_1, ~m? -# 860| mu860_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r860_1 -# 860| r860_7(bool) = Constant[0] : -# 860| v860_8(void) = ConditionalBranch : r860_7 +# 35| Block 280 +# 35| r35_3921(glval) = VariableAddress[x280] : +# 35| mu35_3922(String) = Uninitialized[x280] : &:r35_3921 +# 35| r35_3923(glval) = FunctionAddress[String] : +# 35| v35_3924(void) = Call[String] : func:r35_3923, this:r35_3921 +# 35| mu35_3925(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3921 +# 35| r35_3927(glval) = VariableAddress[x280] : +# 35| r35_3928(glval) = FunctionAddress[~String] : +# 35| v35_3929(void) = Call[~String] : func:r35_3928, this:r35_3927 +# 35| mu35_3930(unknown) = ^CallSideEffect : ~m? +# 35| v35_3931(void) = ^IndirectReadSideEffect[-1] : &:r35_3927, ~m? +# 35| mu35_3932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3927 +# 35| r35_3933(bool) = Constant[0] : +# 35| v35_3934(void) = ConditionalBranch : r35_3933 #-----| False -> Block 281 #-----| True -> Block 1026 -# 862| Block 281 -# 862| r862_1(glval) = VariableAddress[x281] : -# 862| mu862_2(String) = Uninitialized[x281] : &:r862_1 -# 862| r862_3(glval) = FunctionAddress[String] : -# 862| v862_4(void) = Call[String] : func:r862_3, this:r862_1 -# 862| mu862_5(unknown) = ^CallSideEffect : ~m? -# 862| mu862_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r862_1 -# 863| r863_1(glval) = VariableAddress[x281] : -# 863| r863_2(glval) = FunctionAddress[~String] : -# 863| v863_3(void) = Call[~String] : func:r863_2, this:r863_1 -# 863| mu863_4(unknown) = ^CallSideEffect : ~m? -# 863| v863_5(void) = ^IndirectReadSideEffect[-1] : &:r863_1, ~m? -# 863| mu863_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r863_1 -# 863| r863_7(bool) = Constant[0] : -# 863| v863_8(void) = ConditionalBranch : r863_7 +# 35| Block 281 +# 35| r35_3935(glval) = VariableAddress[x281] : +# 35| mu35_3936(String) = Uninitialized[x281] : &:r35_3935 +# 35| r35_3937(glval) = FunctionAddress[String] : +# 35| v35_3938(void) = Call[String] : func:r35_3937, this:r35_3935 +# 35| mu35_3939(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3935 +# 35| r35_3941(glval) = VariableAddress[x281] : +# 35| r35_3942(glval) = FunctionAddress[~String] : +# 35| v35_3943(void) = Call[~String] : func:r35_3942, this:r35_3941 +# 35| mu35_3944(unknown) = ^CallSideEffect : ~m? +# 35| v35_3945(void) = ^IndirectReadSideEffect[-1] : &:r35_3941, ~m? +# 35| mu35_3946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3941 +# 35| r35_3947(bool) = Constant[0] : +# 35| v35_3948(void) = ConditionalBranch : r35_3947 #-----| False -> Block 282 #-----| True -> Block 1026 -# 865| Block 282 -# 865| r865_1(glval) = VariableAddress[x282] : -# 865| mu865_2(String) = Uninitialized[x282] : &:r865_1 -# 865| r865_3(glval) = FunctionAddress[String] : -# 865| v865_4(void) = Call[String] : func:r865_3, this:r865_1 -# 865| mu865_5(unknown) = ^CallSideEffect : ~m? -# 865| mu865_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r865_1 -# 866| r866_1(glval) = VariableAddress[x282] : -# 866| r866_2(glval) = FunctionAddress[~String] : -# 866| v866_3(void) = Call[~String] : func:r866_2, this:r866_1 -# 866| mu866_4(unknown) = ^CallSideEffect : ~m? -# 866| v866_5(void) = ^IndirectReadSideEffect[-1] : &:r866_1, ~m? -# 866| mu866_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r866_1 -# 866| r866_7(bool) = Constant[0] : -# 866| v866_8(void) = ConditionalBranch : r866_7 +# 35| Block 282 +# 35| r35_3949(glval) = VariableAddress[x282] : +# 35| mu35_3950(String) = Uninitialized[x282] : &:r35_3949 +# 35| r35_3951(glval) = FunctionAddress[String] : +# 35| v35_3952(void) = Call[String] : func:r35_3951, this:r35_3949 +# 35| mu35_3953(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3949 +# 35| r35_3955(glval) = VariableAddress[x282] : +# 35| r35_3956(glval) = FunctionAddress[~String] : +# 35| v35_3957(void) = Call[~String] : func:r35_3956, this:r35_3955 +# 35| mu35_3958(unknown) = ^CallSideEffect : ~m? +# 35| v35_3959(void) = ^IndirectReadSideEffect[-1] : &:r35_3955, ~m? +# 35| mu35_3960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3955 +# 35| r35_3961(bool) = Constant[0] : +# 35| v35_3962(void) = ConditionalBranch : r35_3961 #-----| False -> Block 283 #-----| True -> Block 1026 -# 868| Block 283 -# 868| r868_1(glval) = VariableAddress[x283] : -# 868| mu868_2(String) = Uninitialized[x283] : &:r868_1 -# 868| r868_3(glval) = FunctionAddress[String] : -# 868| v868_4(void) = Call[String] : func:r868_3, this:r868_1 -# 868| mu868_5(unknown) = ^CallSideEffect : ~m? -# 868| mu868_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r868_1 -# 869| r869_1(glval) = VariableAddress[x283] : -# 869| r869_2(glval) = FunctionAddress[~String] : -# 869| v869_3(void) = Call[~String] : func:r869_2, this:r869_1 -# 869| mu869_4(unknown) = ^CallSideEffect : ~m? -# 869| v869_5(void) = ^IndirectReadSideEffect[-1] : &:r869_1, ~m? -# 869| mu869_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r869_1 -# 869| r869_7(bool) = Constant[0] : -# 869| v869_8(void) = ConditionalBranch : r869_7 +# 35| Block 283 +# 35| r35_3963(glval) = VariableAddress[x283] : +# 35| mu35_3964(String) = Uninitialized[x283] : &:r35_3963 +# 35| r35_3965(glval) = FunctionAddress[String] : +# 35| v35_3966(void) = Call[String] : func:r35_3965, this:r35_3963 +# 35| mu35_3967(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3963 +# 35| r35_3969(glval) = VariableAddress[x283] : +# 35| r35_3970(glval) = FunctionAddress[~String] : +# 35| v35_3971(void) = Call[~String] : func:r35_3970, this:r35_3969 +# 35| mu35_3972(unknown) = ^CallSideEffect : ~m? +# 35| v35_3973(void) = ^IndirectReadSideEffect[-1] : &:r35_3969, ~m? +# 35| mu35_3974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3969 +# 35| r35_3975(bool) = Constant[0] : +# 35| v35_3976(void) = ConditionalBranch : r35_3975 #-----| False -> Block 284 #-----| True -> Block 1026 -# 871| Block 284 -# 871| r871_1(glval) = VariableAddress[x284] : -# 871| mu871_2(String) = Uninitialized[x284] : &:r871_1 -# 871| r871_3(glval) = FunctionAddress[String] : -# 871| v871_4(void) = Call[String] : func:r871_3, this:r871_1 -# 871| mu871_5(unknown) = ^CallSideEffect : ~m? -# 871| mu871_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r871_1 -# 872| r872_1(glval) = VariableAddress[x284] : -# 872| r872_2(glval) = FunctionAddress[~String] : -# 872| v872_3(void) = Call[~String] : func:r872_2, this:r872_1 -# 872| mu872_4(unknown) = ^CallSideEffect : ~m? -# 872| v872_5(void) = ^IndirectReadSideEffect[-1] : &:r872_1, ~m? -# 872| mu872_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r872_1 -# 872| r872_7(bool) = Constant[0] : -# 872| v872_8(void) = ConditionalBranch : r872_7 +# 35| Block 284 +# 35| r35_3977(glval) = VariableAddress[x284] : +# 35| mu35_3978(String) = Uninitialized[x284] : &:r35_3977 +# 35| r35_3979(glval) = FunctionAddress[String] : +# 35| v35_3980(void) = Call[String] : func:r35_3979, this:r35_3977 +# 35| mu35_3981(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3977 +# 35| r35_3983(glval) = VariableAddress[x284] : +# 35| r35_3984(glval) = FunctionAddress[~String] : +# 35| v35_3985(void) = Call[~String] : func:r35_3984, this:r35_3983 +# 35| mu35_3986(unknown) = ^CallSideEffect : ~m? +# 35| v35_3987(void) = ^IndirectReadSideEffect[-1] : &:r35_3983, ~m? +# 35| mu35_3988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3983 +# 35| r35_3989(bool) = Constant[0] : +# 35| v35_3990(void) = ConditionalBranch : r35_3989 #-----| False -> Block 285 #-----| True -> Block 1026 -# 874| Block 285 -# 874| r874_1(glval) = VariableAddress[x285] : -# 874| mu874_2(String) = Uninitialized[x285] : &:r874_1 -# 874| r874_3(glval) = FunctionAddress[String] : -# 874| v874_4(void) = Call[String] : func:r874_3, this:r874_1 -# 874| mu874_5(unknown) = ^CallSideEffect : ~m? -# 874| mu874_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r874_1 -# 875| r875_1(glval) = VariableAddress[x285] : -# 875| r875_2(glval) = FunctionAddress[~String] : -# 875| v875_3(void) = Call[~String] : func:r875_2, this:r875_1 -# 875| mu875_4(unknown) = ^CallSideEffect : ~m? -# 875| v875_5(void) = ^IndirectReadSideEffect[-1] : &:r875_1, ~m? -# 875| mu875_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r875_1 -# 875| r875_7(bool) = Constant[0] : -# 875| v875_8(void) = ConditionalBranch : r875_7 +# 35| Block 285 +# 35| r35_3991(glval) = VariableAddress[x285] : +# 35| mu35_3992(String) = Uninitialized[x285] : &:r35_3991 +# 35| r35_3993(glval) = FunctionAddress[String] : +# 35| v35_3994(void) = Call[String] : func:r35_3993, this:r35_3991 +# 35| mu35_3995(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3991 +# 35| r35_3997(glval) = VariableAddress[x285] : +# 35| r35_3998(glval) = FunctionAddress[~String] : +# 35| v35_3999(void) = Call[~String] : func:r35_3998, this:r35_3997 +# 35| mu35_4000(unknown) = ^CallSideEffect : ~m? +# 35| v35_4001(void) = ^IndirectReadSideEffect[-1] : &:r35_3997, ~m? +# 35| mu35_4002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3997 +# 35| r35_4003(bool) = Constant[0] : +# 35| v35_4004(void) = ConditionalBranch : r35_4003 #-----| False -> Block 286 #-----| True -> Block 1026 -# 877| Block 286 -# 877| r877_1(glval) = VariableAddress[x286] : -# 877| mu877_2(String) = Uninitialized[x286] : &:r877_1 -# 877| r877_3(glval) = FunctionAddress[String] : -# 877| v877_4(void) = Call[String] : func:r877_3, this:r877_1 -# 877| mu877_5(unknown) = ^CallSideEffect : ~m? -# 877| mu877_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r877_1 -# 878| r878_1(glval) = VariableAddress[x286] : -# 878| r878_2(glval) = FunctionAddress[~String] : -# 878| v878_3(void) = Call[~String] : func:r878_2, this:r878_1 -# 878| mu878_4(unknown) = ^CallSideEffect : ~m? -# 878| v878_5(void) = ^IndirectReadSideEffect[-1] : &:r878_1, ~m? -# 878| mu878_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r878_1 -# 878| r878_7(bool) = Constant[0] : -# 878| v878_8(void) = ConditionalBranch : r878_7 +# 35| Block 286 +# 35| r35_4005(glval) = VariableAddress[x286] : +# 35| mu35_4006(String) = Uninitialized[x286] : &:r35_4005 +# 35| r35_4007(glval) = FunctionAddress[String] : +# 35| v35_4008(void) = Call[String] : func:r35_4007, this:r35_4005 +# 35| mu35_4009(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4005 +# 35| r35_4011(glval) = VariableAddress[x286] : +# 35| r35_4012(glval) = FunctionAddress[~String] : +# 35| v35_4013(void) = Call[~String] : func:r35_4012, this:r35_4011 +# 35| mu35_4014(unknown) = ^CallSideEffect : ~m? +# 35| v35_4015(void) = ^IndirectReadSideEffect[-1] : &:r35_4011, ~m? +# 35| mu35_4016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4011 +# 35| r35_4017(bool) = Constant[0] : +# 35| v35_4018(void) = ConditionalBranch : r35_4017 #-----| False -> Block 287 #-----| True -> Block 1026 -# 880| Block 287 -# 880| r880_1(glval) = VariableAddress[x287] : -# 880| mu880_2(String) = Uninitialized[x287] : &:r880_1 -# 880| r880_3(glval) = FunctionAddress[String] : -# 880| v880_4(void) = Call[String] : func:r880_3, this:r880_1 -# 880| mu880_5(unknown) = ^CallSideEffect : ~m? -# 880| mu880_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r880_1 -# 881| r881_1(glval) = VariableAddress[x287] : -# 881| r881_2(glval) = FunctionAddress[~String] : -# 881| v881_3(void) = Call[~String] : func:r881_2, this:r881_1 -# 881| mu881_4(unknown) = ^CallSideEffect : ~m? -# 881| v881_5(void) = ^IndirectReadSideEffect[-1] : &:r881_1, ~m? -# 881| mu881_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r881_1 -# 881| r881_7(bool) = Constant[0] : -# 881| v881_8(void) = ConditionalBranch : r881_7 +# 35| Block 287 +# 35| r35_4019(glval) = VariableAddress[x287] : +# 35| mu35_4020(String) = Uninitialized[x287] : &:r35_4019 +# 35| r35_4021(glval) = FunctionAddress[String] : +# 35| v35_4022(void) = Call[String] : func:r35_4021, this:r35_4019 +# 35| mu35_4023(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4019 +# 35| r35_4025(glval) = VariableAddress[x287] : +# 35| r35_4026(glval) = FunctionAddress[~String] : +# 35| v35_4027(void) = Call[~String] : func:r35_4026, this:r35_4025 +# 35| mu35_4028(unknown) = ^CallSideEffect : ~m? +# 35| v35_4029(void) = ^IndirectReadSideEffect[-1] : &:r35_4025, ~m? +# 35| mu35_4030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4025 +# 35| r35_4031(bool) = Constant[0] : +# 35| v35_4032(void) = ConditionalBranch : r35_4031 #-----| False -> Block 288 #-----| True -> Block 1026 -# 883| Block 288 -# 883| r883_1(glval) = VariableAddress[x288] : -# 883| mu883_2(String) = Uninitialized[x288] : &:r883_1 -# 883| r883_3(glval) = FunctionAddress[String] : -# 883| v883_4(void) = Call[String] : func:r883_3, this:r883_1 -# 883| mu883_5(unknown) = ^CallSideEffect : ~m? -# 883| mu883_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r883_1 -# 884| r884_1(glval) = VariableAddress[x288] : -# 884| r884_2(glval) = FunctionAddress[~String] : -# 884| v884_3(void) = Call[~String] : func:r884_2, this:r884_1 -# 884| mu884_4(unknown) = ^CallSideEffect : ~m? -# 884| v884_5(void) = ^IndirectReadSideEffect[-1] : &:r884_1, ~m? -# 884| mu884_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r884_1 -# 884| r884_7(bool) = Constant[0] : -# 884| v884_8(void) = ConditionalBranch : r884_7 +# 35| Block 288 +# 35| r35_4033(glval) = VariableAddress[x288] : +# 35| mu35_4034(String) = Uninitialized[x288] : &:r35_4033 +# 35| r35_4035(glval) = FunctionAddress[String] : +# 35| v35_4036(void) = Call[String] : func:r35_4035, this:r35_4033 +# 35| mu35_4037(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4033 +# 35| r35_4039(glval) = VariableAddress[x288] : +# 35| r35_4040(glval) = FunctionAddress[~String] : +# 35| v35_4041(void) = Call[~String] : func:r35_4040, this:r35_4039 +# 35| mu35_4042(unknown) = ^CallSideEffect : ~m? +# 35| v35_4043(void) = ^IndirectReadSideEffect[-1] : &:r35_4039, ~m? +# 35| mu35_4044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4039 +# 35| r35_4045(bool) = Constant[0] : +# 35| v35_4046(void) = ConditionalBranch : r35_4045 #-----| False -> Block 289 #-----| True -> Block 1026 -# 886| Block 289 -# 886| r886_1(glval) = VariableAddress[x289] : -# 886| mu886_2(String) = Uninitialized[x289] : &:r886_1 -# 886| r886_3(glval) = FunctionAddress[String] : -# 886| v886_4(void) = Call[String] : func:r886_3, this:r886_1 -# 886| mu886_5(unknown) = ^CallSideEffect : ~m? -# 886| mu886_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r886_1 -# 887| r887_1(glval) = VariableAddress[x289] : -# 887| r887_2(glval) = FunctionAddress[~String] : -# 887| v887_3(void) = Call[~String] : func:r887_2, this:r887_1 -# 887| mu887_4(unknown) = ^CallSideEffect : ~m? -# 887| v887_5(void) = ^IndirectReadSideEffect[-1] : &:r887_1, ~m? -# 887| mu887_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r887_1 -# 887| r887_7(bool) = Constant[0] : -# 887| v887_8(void) = ConditionalBranch : r887_7 +# 35| Block 289 +# 35| r35_4047(glval) = VariableAddress[x289] : +# 35| mu35_4048(String) = Uninitialized[x289] : &:r35_4047 +# 35| r35_4049(glval) = FunctionAddress[String] : +# 35| v35_4050(void) = Call[String] : func:r35_4049, this:r35_4047 +# 35| mu35_4051(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4047 +# 35| r35_4053(glval) = VariableAddress[x289] : +# 35| r35_4054(glval) = FunctionAddress[~String] : +# 35| v35_4055(void) = Call[~String] : func:r35_4054, this:r35_4053 +# 35| mu35_4056(unknown) = ^CallSideEffect : ~m? +# 35| v35_4057(void) = ^IndirectReadSideEffect[-1] : &:r35_4053, ~m? +# 35| mu35_4058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4053 +# 35| r35_4059(bool) = Constant[0] : +# 35| v35_4060(void) = ConditionalBranch : r35_4059 #-----| False -> Block 290 #-----| True -> Block 1026 -# 889| Block 290 -# 889| r889_1(glval) = VariableAddress[x290] : -# 889| mu889_2(String) = Uninitialized[x290] : &:r889_1 -# 889| r889_3(glval) = FunctionAddress[String] : -# 889| v889_4(void) = Call[String] : func:r889_3, this:r889_1 -# 889| mu889_5(unknown) = ^CallSideEffect : ~m? -# 889| mu889_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r889_1 -# 890| r890_1(glval) = VariableAddress[x290] : -# 890| r890_2(glval) = FunctionAddress[~String] : -# 890| v890_3(void) = Call[~String] : func:r890_2, this:r890_1 -# 890| mu890_4(unknown) = ^CallSideEffect : ~m? -# 890| v890_5(void) = ^IndirectReadSideEffect[-1] : &:r890_1, ~m? -# 890| mu890_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r890_1 -# 890| r890_7(bool) = Constant[0] : -# 890| v890_8(void) = ConditionalBranch : r890_7 +# 35| Block 290 +# 35| r35_4061(glval) = VariableAddress[x290] : +# 35| mu35_4062(String) = Uninitialized[x290] : &:r35_4061 +# 35| r35_4063(glval) = FunctionAddress[String] : +# 35| v35_4064(void) = Call[String] : func:r35_4063, this:r35_4061 +# 35| mu35_4065(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4061 +# 35| r35_4067(glval) = VariableAddress[x290] : +# 35| r35_4068(glval) = FunctionAddress[~String] : +# 35| v35_4069(void) = Call[~String] : func:r35_4068, this:r35_4067 +# 35| mu35_4070(unknown) = ^CallSideEffect : ~m? +# 35| v35_4071(void) = ^IndirectReadSideEffect[-1] : &:r35_4067, ~m? +# 35| mu35_4072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4067 +# 35| r35_4073(bool) = Constant[0] : +# 35| v35_4074(void) = ConditionalBranch : r35_4073 #-----| False -> Block 291 #-----| True -> Block 1026 -# 892| Block 291 -# 892| r892_1(glval) = VariableAddress[x291] : -# 892| mu892_2(String) = Uninitialized[x291] : &:r892_1 -# 892| r892_3(glval) = FunctionAddress[String] : -# 892| v892_4(void) = Call[String] : func:r892_3, this:r892_1 -# 892| mu892_5(unknown) = ^CallSideEffect : ~m? -# 892| mu892_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r892_1 -# 893| r893_1(glval) = VariableAddress[x291] : -# 893| r893_2(glval) = FunctionAddress[~String] : -# 893| v893_3(void) = Call[~String] : func:r893_2, this:r893_1 -# 893| mu893_4(unknown) = ^CallSideEffect : ~m? -# 893| v893_5(void) = ^IndirectReadSideEffect[-1] : &:r893_1, ~m? -# 893| mu893_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r893_1 -# 893| r893_7(bool) = Constant[0] : -# 893| v893_8(void) = ConditionalBranch : r893_7 +# 35| Block 291 +# 35| r35_4075(glval) = VariableAddress[x291] : +# 35| mu35_4076(String) = Uninitialized[x291] : &:r35_4075 +# 35| r35_4077(glval) = FunctionAddress[String] : +# 35| v35_4078(void) = Call[String] : func:r35_4077, this:r35_4075 +# 35| mu35_4079(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4075 +# 35| r35_4081(glval) = VariableAddress[x291] : +# 35| r35_4082(glval) = FunctionAddress[~String] : +# 35| v35_4083(void) = Call[~String] : func:r35_4082, this:r35_4081 +# 35| mu35_4084(unknown) = ^CallSideEffect : ~m? +# 35| v35_4085(void) = ^IndirectReadSideEffect[-1] : &:r35_4081, ~m? +# 35| mu35_4086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4081 +# 35| r35_4087(bool) = Constant[0] : +# 35| v35_4088(void) = ConditionalBranch : r35_4087 #-----| False -> Block 292 #-----| True -> Block 1026 -# 895| Block 292 -# 895| r895_1(glval) = VariableAddress[x292] : -# 895| mu895_2(String) = Uninitialized[x292] : &:r895_1 -# 895| r895_3(glval) = FunctionAddress[String] : -# 895| v895_4(void) = Call[String] : func:r895_3, this:r895_1 -# 895| mu895_5(unknown) = ^CallSideEffect : ~m? -# 895| mu895_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r895_1 -# 896| r896_1(glval) = VariableAddress[x292] : -# 896| r896_2(glval) = FunctionAddress[~String] : -# 896| v896_3(void) = Call[~String] : func:r896_2, this:r896_1 -# 896| mu896_4(unknown) = ^CallSideEffect : ~m? -# 896| v896_5(void) = ^IndirectReadSideEffect[-1] : &:r896_1, ~m? -# 896| mu896_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r896_1 -# 896| r896_7(bool) = Constant[0] : -# 896| v896_8(void) = ConditionalBranch : r896_7 +# 35| Block 292 +# 35| r35_4089(glval) = VariableAddress[x292] : +# 35| mu35_4090(String) = Uninitialized[x292] : &:r35_4089 +# 35| r35_4091(glval) = FunctionAddress[String] : +# 35| v35_4092(void) = Call[String] : func:r35_4091, this:r35_4089 +# 35| mu35_4093(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4089 +# 35| r35_4095(glval) = VariableAddress[x292] : +# 35| r35_4096(glval) = FunctionAddress[~String] : +# 35| v35_4097(void) = Call[~String] : func:r35_4096, this:r35_4095 +# 35| mu35_4098(unknown) = ^CallSideEffect : ~m? +# 35| v35_4099(void) = ^IndirectReadSideEffect[-1] : &:r35_4095, ~m? +# 35| mu35_4100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4095 +# 35| r35_4101(bool) = Constant[0] : +# 35| v35_4102(void) = ConditionalBranch : r35_4101 #-----| False -> Block 293 #-----| True -> Block 1026 -# 898| Block 293 -# 898| r898_1(glval) = VariableAddress[x293] : -# 898| mu898_2(String) = Uninitialized[x293] : &:r898_1 -# 898| r898_3(glval) = FunctionAddress[String] : -# 898| v898_4(void) = Call[String] : func:r898_3, this:r898_1 -# 898| mu898_5(unknown) = ^CallSideEffect : ~m? -# 898| mu898_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r898_1 -# 899| r899_1(glval) = VariableAddress[x293] : -# 899| r899_2(glval) = FunctionAddress[~String] : -# 899| v899_3(void) = Call[~String] : func:r899_2, this:r899_1 -# 899| mu899_4(unknown) = ^CallSideEffect : ~m? -# 899| v899_5(void) = ^IndirectReadSideEffect[-1] : &:r899_1, ~m? -# 899| mu899_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r899_1 -# 899| r899_7(bool) = Constant[0] : -# 899| v899_8(void) = ConditionalBranch : r899_7 +# 35| Block 293 +# 35| r35_4103(glval) = VariableAddress[x293] : +# 35| mu35_4104(String) = Uninitialized[x293] : &:r35_4103 +# 35| r35_4105(glval) = FunctionAddress[String] : +# 35| v35_4106(void) = Call[String] : func:r35_4105, this:r35_4103 +# 35| mu35_4107(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4103 +# 35| r35_4109(glval) = VariableAddress[x293] : +# 35| r35_4110(glval) = FunctionAddress[~String] : +# 35| v35_4111(void) = Call[~String] : func:r35_4110, this:r35_4109 +# 35| mu35_4112(unknown) = ^CallSideEffect : ~m? +# 35| v35_4113(void) = ^IndirectReadSideEffect[-1] : &:r35_4109, ~m? +# 35| mu35_4114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4109 +# 35| r35_4115(bool) = Constant[0] : +# 35| v35_4116(void) = ConditionalBranch : r35_4115 #-----| False -> Block 294 #-----| True -> Block 1026 -# 901| Block 294 -# 901| r901_1(glval) = VariableAddress[x294] : -# 901| mu901_2(String) = Uninitialized[x294] : &:r901_1 -# 901| r901_3(glval) = FunctionAddress[String] : -# 901| v901_4(void) = Call[String] : func:r901_3, this:r901_1 -# 901| mu901_5(unknown) = ^CallSideEffect : ~m? -# 901| mu901_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r901_1 -# 902| r902_1(glval) = VariableAddress[x294] : -# 902| r902_2(glval) = FunctionAddress[~String] : -# 902| v902_3(void) = Call[~String] : func:r902_2, this:r902_1 -# 902| mu902_4(unknown) = ^CallSideEffect : ~m? -# 902| v902_5(void) = ^IndirectReadSideEffect[-1] : &:r902_1, ~m? -# 902| mu902_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r902_1 -# 902| r902_7(bool) = Constant[0] : -# 902| v902_8(void) = ConditionalBranch : r902_7 +# 35| Block 294 +# 35| r35_4117(glval) = VariableAddress[x294] : +# 35| mu35_4118(String) = Uninitialized[x294] : &:r35_4117 +# 35| r35_4119(glval) = FunctionAddress[String] : +# 35| v35_4120(void) = Call[String] : func:r35_4119, this:r35_4117 +# 35| mu35_4121(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4117 +# 35| r35_4123(glval) = VariableAddress[x294] : +# 35| r35_4124(glval) = FunctionAddress[~String] : +# 35| v35_4125(void) = Call[~String] : func:r35_4124, this:r35_4123 +# 35| mu35_4126(unknown) = ^CallSideEffect : ~m? +# 35| v35_4127(void) = ^IndirectReadSideEffect[-1] : &:r35_4123, ~m? +# 35| mu35_4128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4123 +# 35| r35_4129(bool) = Constant[0] : +# 35| v35_4130(void) = ConditionalBranch : r35_4129 #-----| False -> Block 295 #-----| True -> Block 1026 -# 904| Block 295 -# 904| r904_1(glval) = VariableAddress[x295] : -# 904| mu904_2(String) = Uninitialized[x295] : &:r904_1 -# 904| r904_3(glval) = FunctionAddress[String] : -# 904| v904_4(void) = Call[String] : func:r904_3, this:r904_1 -# 904| mu904_5(unknown) = ^CallSideEffect : ~m? -# 904| mu904_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r904_1 -# 905| r905_1(glval) = VariableAddress[x295] : -# 905| r905_2(glval) = FunctionAddress[~String] : -# 905| v905_3(void) = Call[~String] : func:r905_2, this:r905_1 -# 905| mu905_4(unknown) = ^CallSideEffect : ~m? -# 905| v905_5(void) = ^IndirectReadSideEffect[-1] : &:r905_1, ~m? -# 905| mu905_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r905_1 -# 905| r905_7(bool) = Constant[0] : -# 905| v905_8(void) = ConditionalBranch : r905_7 +# 35| Block 295 +# 35| r35_4131(glval) = VariableAddress[x295] : +# 35| mu35_4132(String) = Uninitialized[x295] : &:r35_4131 +# 35| r35_4133(glval) = FunctionAddress[String] : +# 35| v35_4134(void) = Call[String] : func:r35_4133, this:r35_4131 +# 35| mu35_4135(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4131 +# 35| r35_4137(glval) = VariableAddress[x295] : +# 35| r35_4138(glval) = FunctionAddress[~String] : +# 35| v35_4139(void) = Call[~String] : func:r35_4138, this:r35_4137 +# 35| mu35_4140(unknown) = ^CallSideEffect : ~m? +# 35| v35_4141(void) = ^IndirectReadSideEffect[-1] : &:r35_4137, ~m? +# 35| mu35_4142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4137 +# 35| r35_4143(bool) = Constant[0] : +# 35| v35_4144(void) = ConditionalBranch : r35_4143 #-----| False -> Block 296 #-----| True -> Block 1026 -# 907| Block 296 -# 907| r907_1(glval) = VariableAddress[x296] : -# 907| mu907_2(String) = Uninitialized[x296] : &:r907_1 -# 907| r907_3(glval) = FunctionAddress[String] : -# 907| v907_4(void) = Call[String] : func:r907_3, this:r907_1 -# 907| mu907_5(unknown) = ^CallSideEffect : ~m? -# 907| mu907_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r907_1 -# 908| r908_1(glval) = VariableAddress[x296] : -# 908| r908_2(glval) = FunctionAddress[~String] : -# 908| v908_3(void) = Call[~String] : func:r908_2, this:r908_1 -# 908| mu908_4(unknown) = ^CallSideEffect : ~m? -# 908| v908_5(void) = ^IndirectReadSideEffect[-1] : &:r908_1, ~m? -# 908| mu908_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r908_1 -# 908| r908_7(bool) = Constant[0] : -# 908| v908_8(void) = ConditionalBranch : r908_7 +# 35| Block 296 +# 35| r35_4145(glval) = VariableAddress[x296] : +# 35| mu35_4146(String) = Uninitialized[x296] : &:r35_4145 +# 35| r35_4147(glval) = FunctionAddress[String] : +# 35| v35_4148(void) = Call[String] : func:r35_4147, this:r35_4145 +# 35| mu35_4149(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4145 +# 35| r35_4151(glval) = VariableAddress[x296] : +# 35| r35_4152(glval) = FunctionAddress[~String] : +# 35| v35_4153(void) = Call[~String] : func:r35_4152, this:r35_4151 +# 35| mu35_4154(unknown) = ^CallSideEffect : ~m? +# 35| v35_4155(void) = ^IndirectReadSideEffect[-1] : &:r35_4151, ~m? +# 35| mu35_4156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4151 +# 35| r35_4157(bool) = Constant[0] : +# 35| v35_4158(void) = ConditionalBranch : r35_4157 #-----| False -> Block 297 #-----| True -> Block 1026 -# 910| Block 297 -# 910| r910_1(glval) = VariableAddress[x297] : -# 910| mu910_2(String) = Uninitialized[x297] : &:r910_1 -# 910| r910_3(glval) = FunctionAddress[String] : -# 910| v910_4(void) = Call[String] : func:r910_3, this:r910_1 -# 910| mu910_5(unknown) = ^CallSideEffect : ~m? -# 910| mu910_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r910_1 -# 911| r911_1(glval) = VariableAddress[x297] : -# 911| r911_2(glval) = FunctionAddress[~String] : -# 911| v911_3(void) = Call[~String] : func:r911_2, this:r911_1 -# 911| mu911_4(unknown) = ^CallSideEffect : ~m? -# 911| v911_5(void) = ^IndirectReadSideEffect[-1] : &:r911_1, ~m? -# 911| mu911_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r911_1 -# 911| r911_7(bool) = Constant[0] : -# 911| v911_8(void) = ConditionalBranch : r911_7 +# 35| Block 297 +# 35| r35_4159(glval) = VariableAddress[x297] : +# 35| mu35_4160(String) = Uninitialized[x297] : &:r35_4159 +# 35| r35_4161(glval) = FunctionAddress[String] : +# 35| v35_4162(void) = Call[String] : func:r35_4161, this:r35_4159 +# 35| mu35_4163(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4159 +# 35| r35_4165(glval) = VariableAddress[x297] : +# 35| r35_4166(glval) = FunctionAddress[~String] : +# 35| v35_4167(void) = Call[~String] : func:r35_4166, this:r35_4165 +# 35| mu35_4168(unknown) = ^CallSideEffect : ~m? +# 35| v35_4169(void) = ^IndirectReadSideEffect[-1] : &:r35_4165, ~m? +# 35| mu35_4170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4165 +# 35| r35_4171(bool) = Constant[0] : +# 35| v35_4172(void) = ConditionalBranch : r35_4171 #-----| False -> Block 298 #-----| True -> Block 1026 -# 913| Block 298 -# 913| r913_1(glval) = VariableAddress[x298] : -# 913| mu913_2(String) = Uninitialized[x298] : &:r913_1 -# 913| r913_3(glval) = FunctionAddress[String] : -# 913| v913_4(void) = Call[String] : func:r913_3, this:r913_1 -# 913| mu913_5(unknown) = ^CallSideEffect : ~m? -# 913| mu913_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r913_1 -# 914| r914_1(glval) = VariableAddress[x298] : -# 914| r914_2(glval) = FunctionAddress[~String] : -# 914| v914_3(void) = Call[~String] : func:r914_2, this:r914_1 -# 914| mu914_4(unknown) = ^CallSideEffect : ~m? -# 914| v914_5(void) = ^IndirectReadSideEffect[-1] : &:r914_1, ~m? -# 914| mu914_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r914_1 -# 914| r914_7(bool) = Constant[0] : -# 914| v914_8(void) = ConditionalBranch : r914_7 +# 35| Block 298 +# 35| r35_4173(glval) = VariableAddress[x298] : +# 35| mu35_4174(String) = Uninitialized[x298] : &:r35_4173 +# 35| r35_4175(glval) = FunctionAddress[String] : +# 35| v35_4176(void) = Call[String] : func:r35_4175, this:r35_4173 +# 35| mu35_4177(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4173 +# 35| r35_4179(glval) = VariableAddress[x298] : +# 35| r35_4180(glval) = FunctionAddress[~String] : +# 35| v35_4181(void) = Call[~String] : func:r35_4180, this:r35_4179 +# 35| mu35_4182(unknown) = ^CallSideEffect : ~m? +# 35| v35_4183(void) = ^IndirectReadSideEffect[-1] : &:r35_4179, ~m? +# 35| mu35_4184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4179 +# 35| r35_4185(bool) = Constant[0] : +# 35| v35_4186(void) = ConditionalBranch : r35_4185 #-----| False -> Block 299 #-----| True -> Block 1026 -# 916| Block 299 -# 916| r916_1(glval) = VariableAddress[x299] : -# 916| mu916_2(String) = Uninitialized[x299] : &:r916_1 -# 916| r916_3(glval) = FunctionAddress[String] : -# 916| v916_4(void) = Call[String] : func:r916_3, this:r916_1 -# 916| mu916_5(unknown) = ^CallSideEffect : ~m? -# 916| mu916_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r916_1 -# 917| r917_1(glval) = VariableAddress[x299] : -# 917| r917_2(glval) = FunctionAddress[~String] : -# 917| v917_3(void) = Call[~String] : func:r917_2, this:r917_1 -# 917| mu917_4(unknown) = ^CallSideEffect : ~m? -# 917| v917_5(void) = ^IndirectReadSideEffect[-1] : &:r917_1, ~m? -# 917| mu917_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r917_1 -# 917| r917_7(bool) = Constant[0] : -# 917| v917_8(void) = ConditionalBranch : r917_7 +# 35| Block 299 +# 35| r35_4187(glval) = VariableAddress[x299] : +# 35| mu35_4188(String) = Uninitialized[x299] : &:r35_4187 +# 35| r35_4189(glval) = FunctionAddress[String] : +# 35| v35_4190(void) = Call[String] : func:r35_4189, this:r35_4187 +# 35| mu35_4191(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4187 +# 35| r35_4193(glval) = VariableAddress[x299] : +# 35| r35_4194(glval) = FunctionAddress[~String] : +# 35| v35_4195(void) = Call[~String] : func:r35_4194, this:r35_4193 +# 35| mu35_4196(unknown) = ^CallSideEffect : ~m? +# 35| v35_4197(void) = ^IndirectReadSideEffect[-1] : &:r35_4193, ~m? +# 35| mu35_4198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4193 +# 35| r35_4199(bool) = Constant[0] : +# 35| v35_4200(void) = ConditionalBranch : r35_4199 #-----| False -> Block 300 #-----| True -> Block 1026 -# 919| Block 300 -# 919| r919_1(glval) = VariableAddress[x300] : -# 919| mu919_2(String) = Uninitialized[x300] : &:r919_1 -# 919| r919_3(glval) = FunctionAddress[String] : -# 919| v919_4(void) = Call[String] : func:r919_3, this:r919_1 -# 919| mu919_5(unknown) = ^CallSideEffect : ~m? -# 919| mu919_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r919_1 -# 920| r920_1(glval) = VariableAddress[x300] : -# 920| r920_2(glval) = FunctionAddress[~String] : -# 920| v920_3(void) = Call[~String] : func:r920_2, this:r920_1 -# 920| mu920_4(unknown) = ^CallSideEffect : ~m? -# 920| v920_5(void) = ^IndirectReadSideEffect[-1] : &:r920_1, ~m? -# 920| mu920_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r920_1 -# 920| r920_7(bool) = Constant[0] : -# 920| v920_8(void) = ConditionalBranch : r920_7 +# 35| Block 300 +# 35| r35_4201(glval) = VariableAddress[x300] : +# 35| mu35_4202(String) = Uninitialized[x300] : &:r35_4201 +# 35| r35_4203(glval) = FunctionAddress[String] : +# 35| v35_4204(void) = Call[String] : func:r35_4203, this:r35_4201 +# 35| mu35_4205(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4201 +# 35| r35_4207(glval) = VariableAddress[x300] : +# 35| r35_4208(glval) = FunctionAddress[~String] : +# 35| v35_4209(void) = Call[~String] : func:r35_4208, this:r35_4207 +# 35| mu35_4210(unknown) = ^CallSideEffect : ~m? +# 35| v35_4211(void) = ^IndirectReadSideEffect[-1] : &:r35_4207, ~m? +# 35| mu35_4212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4207 +# 35| r35_4213(bool) = Constant[0] : +# 35| v35_4214(void) = ConditionalBranch : r35_4213 #-----| False -> Block 301 #-----| True -> Block 1026 -# 922| Block 301 -# 922| r922_1(glval) = VariableAddress[x301] : -# 922| mu922_2(String) = Uninitialized[x301] : &:r922_1 -# 922| r922_3(glval) = FunctionAddress[String] : -# 922| v922_4(void) = Call[String] : func:r922_3, this:r922_1 -# 922| mu922_5(unknown) = ^CallSideEffect : ~m? -# 922| mu922_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r922_1 -# 923| r923_1(glval) = VariableAddress[x301] : -# 923| r923_2(glval) = FunctionAddress[~String] : -# 923| v923_3(void) = Call[~String] : func:r923_2, this:r923_1 -# 923| mu923_4(unknown) = ^CallSideEffect : ~m? -# 923| v923_5(void) = ^IndirectReadSideEffect[-1] : &:r923_1, ~m? -# 923| mu923_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r923_1 -# 923| r923_7(bool) = Constant[0] : -# 923| v923_8(void) = ConditionalBranch : r923_7 +# 35| Block 301 +# 35| r35_4215(glval) = VariableAddress[x301] : +# 35| mu35_4216(String) = Uninitialized[x301] : &:r35_4215 +# 35| r35_4217(glval) = FunctionAddress[String] : +# 35| v35_4218(void) = Call[String] : func:r35_4217, this:r35_4215 +# 35| mu35_4219(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4215 +# 35| r35_4221(glval) = VariableAddress[x301] : +# 35| r35_4222(glval) = FunctionAddress[~String] : +# 35| v35_4223(void) = Call[~String] : func:r35_4222, this:r35_4221 +# 35| mu35_4224(unknown) = ^CallSideEffect : ~m? +# 35| v35_4225(void) = ^IndirectReadSideEffect[-1] : &:r35_4221, ~m? +# 35| mu35_4226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4221 +# 35| r35_4227(bool) = Constant[0] : +# 35| v35_4228(void) = ConditionalBranch : r35_4227 #-----| False -> Block 302 #-----| True -> Block 1026 -# 925| Block 302 -# 925| r925_1(glval) = VariableAddress[x302] : -# 925| mu925_2(String) = Uninitialized[x302] : &:r925_1 -# 925| r925_3(glval) = FunctionAddress[String] : -# 925| v925_4(void) = Call[String] : func:r925_3, this:r925_1 -# 925| mu925_5(unknown) = ^CallSideEffect : ~m? -# 925| mu925_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r925_1 -# 926| r926_1(glval) = VariableAddress[x302] : -# 926| r926_2(glval) = FunctionAddress[~String] : -# 926| v926_3(void) = Call[~String] : func:r926_2, this:r926_1 -# 926| mu926_4(unknown) = ^CallSideEffect : ~m? -# 926| v926_5(void) = ^IndirectReadSideEffect[-1] : &:r926_1, ~m? -# 926| mu926_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r926_1 -# 926| r926_7(bool) = Constant[0] : -# 926| v926_8(void) = ConditionalBranch : r926_7 +# 35| Block 302 +# 35| r35_4229(glval) = VariableAddress[x302] : +# 35| mu35_4230(String) = Uninitialized[x302] : &:r35_4229 +# 35| r35_4231(glval) = FunctionAddress[String] : +# 35| v35_4232(void) = Call[String] : func:r35_4231, this:r35_4229 +# 35| mu35_4233(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4229 +# 35| r35_4235(glval) = VariableAddress[x302] : +# 35| r35_4236(glval) = FunctionAddress[~String] : +# 35| v35_4237(void) = Call[~String] : func:r35_4236, this:r35_4235 +# 35| mu35_4238(unknown) = ^CallSideEffect : ~m? +# 35| v35_4239(void) = ^IndirectReadSideEffect[-1] : &:r35_4235, ~m? +# 35| mu35_4240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4235 +# 35| r35_4241(bool) = Constant[0] : +# 35| v35_4242(void) = ConditionalBranch : r35_4241 #-----| False -> Block 303 #-----| True -> Block 1026 -# 928| Block 303 -# 928| r928_1(glval) = VariableAddress[x303] : -# 928| mu928_2(String) = Uninitialized[x303] : &:r928_1 -# 928| r928_3(glval) = FunctionAddress[String] : -# 928| v928_4(void) = Call[String] : func:r928_3, this:r928_1 -# 928| mu928_5(unknown) = ^CallSideEffect : ~m? -# 928| mu928_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r928_1 -# 929| r929_1(glval) = VariableAddress[x303] : -# 929| r929_2(glval) = FunctionAddress[~String] : -# 929| v929_3(void) = Call[~String] : func:r929_2, this:r929_1 -# 929| mu929_4(unknown) = ^CallSideEffect : ~m? -# 929| v929_5(void) = ^IndirectReadSideEffect[-1] : &:r929_1, ~m? -# 929| mu929_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r929_1 -# 929| r929_7(bool) = Constant[0] : -# 929| v929_8(void) = ConditionalBranch : r929_7 +# 35| Block 303 +# 35| r35_4243(glval) = VariableAddress[x303] : +# 35| mu35_4244(String) = Uninitialized[x303] : &:r35_4243 +# 35| r35_4245(glval) = FunctionAddress[String] : +# 35| v35_4246(void) = Call[String] : func:r35_4245, this:r35_4243 +# 35| mu35_4247(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4243 +# 35| r35_4249(glval) = VariableAddress[x303] : +# 35| r35_4250(glval) = FunctionAddress[~String] : +# 35| v35_4251(void) = Call[~String] : func:r35_4250, this:r35_4249 +# 35| mu35_4252(unknown) = ^CallSideEffect : ~m? +# 35| v35_4253(void) = ^IndirectReadSideEffect[-1] : &:r35_4249, ~m? +# 35| mu35_4254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4249 +# 35| r35_4255(bool) = Constant[0] : +# 35| v35_4256(void) = ConditionalBranch : r35_4255 #-----| False -> Block 304 #-----| True -> Block 1026 -# 931| Block 304 -# 931| r931_1(glval) = VariableAddress[x304] : -# 931| mu931_2(String) = Uninitialized[x304] : &:r931_1 -# 931| r931_3(glval) = FunctionAddress[String] : -# 931| v931_4(void) = Call[String] : func:r931_3, this:r931_1 -# 931| mu931_5(unknown) = ^CallSideEffect : ~m? -# 931| mu931_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r931_1 -# 932| r932_1(glval) = VariableAddress[x304] : -# 932| r932_2(glval) = FunctionAddress[~String] : -# 932| v932_3(void) = Call[~String] : func:r932_2, this:r932_1 -# 932| mu932_4(unknown) = ^CallSideEffect : ~m? -# 932| v932_5(void) = ^IndirectReadSideEffect[-1] : &:r932_1, ~m? -# 932| mu932_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r932_1 -# 932| r932_7(bool) = Constant[0] : -# 932| v932_8(void) = ConditionalBranch : r932_7 +# 35| Block 304 +# 35| r35_4257(glval) = VariableAddress[x304] : +# 35| mu35_4258(String) = Uninitialized[x304] : &:r35_4257 +# 35| r35_4259(glval) = FunctionAddress[String] : +# 35| v35_4260(void) = Call[String] : func:r35_4259, this:r35_4257 +# 35| mu35_4261(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4257 +# 35| r35_4263(glval) = VariableAddress[x304] : +# 35| r35_4264(glval) = FunctionAddress[~String] : +# 35| v35_4265(void) = Call[~String] : func:r35_4264, this:r35_4263 +# 35| mu35_4266(unknown) = ^CallSideEffect : ~m? +# 35| v35_4267(void) = ^IndirectReadSideEffect[-1] : &:r35_4263, ~m? +# 35| mu35_4268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4263 +# 35| r35_4269(bool) = Constant[0] : +# 35| v35_4270(void) = ConditionalBranch : r35_4269 #-----| False -> Block 305 #-----| True -> Block 1026 -# 934| Block 305 -# 934| r934_1(glval) = VariableAddress[x305] : -# 934| mu934_2(String) = Uninitialized[x305] : &:r934_1 -# 934| r934_3(glval) = FunctionAddress[String] : -# 934| v934_4(void) = Call[String] : func:r934_3, this:r934_1 -# 934| mu934_5(unknown) = ^CallSideEffect : ~m? -# 934| mu934_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r934_1 -# 935| r935_1(glval) = VariableAddress[x305] : -# 935| r935_2(glval) = FunctionAddress[~String] : -# 935| v935_3(void) = Call[~String] : func:r935_2, this:r935_1 -# 935| mu935_4(unknown) = ^CallSideEffect : ~m? -# 935| v935_5(void) = ^IndirectReadSideEffect[-1] : &:r935_1, ~m? -# 935| mu935_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r935_1 -# 935| r935_7(bool) = Constant[0] : -# 935| v935_8(void) = ConditionalBranch : r935_7 +# 35| Block 305 +# 35| r35_4271(glval) = VariableAddress[x305] : +# 35| mu35_4272(String) = Uninitialized[x305] : &:r35_4271 +# 35| r35_4273(glval) = FunctionAddress[String] : +# 35| v35_4274(void) = Call[String] : func:r35_4273, this:r35_4271 +# 35| mu35_4275(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4271 +# 35| r35_4277(glval) = VariableAddress[x305] : +# 35| r35_4278(glval) = FunctionAddress[~String] : +# 35| v35_4279(void) = Call[~String] : func:r35_4278, this:r35_4277 +# 35| mu35_4280(unknown) = ^CallSideEffect : ~m? +# 35| v35_4281(void) = ^IndirectReadSideEffect[-1] : &:r35_4277, ~m? +# 35| mu35_4282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4277 +# 35| r35_4283(bool) = Constant[0] : +# 35| v35_4284(void) = ConditionalBranch : r35_4283 #-----| False -> Block 306 #-----| True -> Block 1026 -# 937| Block 306 -# 937| r937_1(glval) = VariableAddress[x306] : -# 937| mu937_2(String) = Uninitialized[x306] : &:r937_1 -# 937| r937_3(glval) = FunctionAddress[String] : -# 937| v937_4(void) = Call[String] : func:r937_3, this:r937_1 -# 937| mu937_5(unknown) = ^CallSideEffect : ~m? -# 937| mu937_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r937_1 -# 938| r938_1(glval) = VariableAddress[x306] : -# 938| r938_2(glval) = FunctionAddress[~String] : -# 938| v938_3(void) = Call[~String] : func:r938_2, this:r938_1 -# 938| mu938_4(unknown) = ^CallSideEffect : ~m? -# 938| v938_5(void) = ^IndirectReadSideEffect[-1] : &:r938_1, ~m? -# 938| mu938_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r938_1 -# 938| r938_7(bool) = Constant[0] : -# 938| v938_8(void) = ConditionalBranch : r938_7 +# 35| Block 306 +# 35| r35_4285(glval) = VariableAddress[x306] : +# 35| mu35_4286(String) = Uninitialized[x306] : &:r35_4285 +# 35| r35_4287(glval) = FunctionAddress[String] : +# 35| v35_4288(void) = Call[String] : func:r35_4287, this:r35_4285 +# 35| mu35_4289(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4285 +# 35| r35_4291(glval) = VariableAddress[x306] : +# 35| r35_4292(glval) = FunctionAddress[~String] : +# 35| v35_4293(void) = Call[~String] : func:r35_4292, this:r35_4291 +# 35| mu35_4294(unknown) = ^CallSideEffect : ~m? +# 35| v35_4295(void) = ^IndirectReadSideEffect[-1] : &:r35_4291, ~m? +# 35| mu35_4296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4291 +# 35| r35_4297(bool) = Constant[0] : +# 35| v35_4298(void) = ConditionalBranch : r35_4297 #-----| False -> Block 307 #-----| True -> Block 1026 -# 940| Block 307 -# 940| r940_1(glval) = VariableAddress[x307] : -# 940| mu940_2(String) = Uninitialized[x307] : &:r940_1 -# 940| r940_3(glval) = FunctionAddress[String] : -# 940| v940_4(void) = Call[String] : func:r940_3, this:r940_1 -# 940| mu940_5(unknown) = ^CallSideEffect : ~m? -# 940| mu940_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r940_1 -# 941| r941_1(glval) = VariableAddress[x307] : -# 941| r941_2(glval) = FunctionAddress[~String] : -# 941| v941_3(void) = Call[~String] : func:r941_2, this:r941_1 -# 941| mu941_4(unknown) = ^CallSideEffect : ~m? -# 941| v941_5(void) = ^IndirectReadSideEffect[-1] : &:r941_1, ~m? -# 941| mu941_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r941_1 -# 941| r941_7(bool) = Constant[0] : -# 941| v941_8(void) = ConditionalBranch : r941_7 +# 35| Block 307 +# 35| r35_4299(glval) = VariableAddress[x307] : +# 35| mu35_4300(String) = Uninitialized[x307] : &:r35_4299 +# 35| r35_4301(glval) = FunctionAddress[String] : +# 35| v35_4302(void) = Call[String] : func:r35_4301, this:r35_4299 +# 35| mu35_4303(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4299 +# 35| r35_4305(glval) = VariableAddress[x307] : +# 35| r35_4306(glval) = FunctionAddress[~String] : +# 35| v35_4307(void) = Call[~String] : func:r35_4306, this:r35_4305 +# 35| mu35_4308(unknown) = ^CallSideEffect : ~m? +# 35| v35_4309(void) = ^IndirectReadSideEffect[-1] : &:r35_4305, ~m? +# 35| mu35_4310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4305 +# 35| r35_4311(bool) = Constant[0] : +# 35| v35_4312(void) = ConditionalBranch : r35_4311 #-----| False -> Block 308 #-----| True -> Block 1026 -# 943| Block 308 -# 943| r943_1(glval) = VariableAddress[x308] : -# 943| mu943_2(String) = Uninitialized[x308] : &:r943_1 -# 943| r943_3(glval) = FunctionAddress[String] : -# 943| v943_4(void) = Call[String] : func:r943_3, this:r943_1 -# 943| mu943_5(unknown) = ^CallSideEffect : ~m? -# 943| mu943_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r943_1 -# 944| r944_1(glval) = VariableAddress[x308] : -# 944| r944_2(glval) = FunctionAddress[~String] : -# 944| v944_3(void) = Call[~String] : func:r944_2, this:r944_1 -# 944| mu944_4(unknown) = ^CallSideEffect : ~m? -# 944| v944_5(void) = ^IndirectReadSideEffect[-1] : &:r944_1, ~m? -# 944| mu944_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r944_1 -# 944| r944_7(bool) = Constant[0] : -# 944| v944_8(void) = ConditionalBranch : r944_7 +# 35| Block 308 +# 35| r35_4313(glval) = VariableAddress[x308] : +# 35| mu35_4314(String) = Uninitialized[x308] : &:r35_4313 +# 35| r35_4315(glval) = FunctionAddress[String] : +# 35| v35_4316(void) = Call[String] : func:r35_4315, this:r35_4313 +# 35| mu35_4317(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4313 +# 35| r35_4319(glval) = VariableAddress[x308] : +# 35| r35_4320(glval) = FunctionAddress[~String] : +# 35| v35_4321(void) = Call[~String] : func:r35_4320, this:r35_4319 +# 35| mu35_4322(unknown) = ^CallSideEffect : ~m? +# 35| v35_4323(void) = ^IndirectReadSideEffect[-1] : &:r35_4319, ~m? +# 35| mu35_4324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4319 +# 35| r35_4325(bool) = Constant[0] : +# 35| v35_4326(void) = ConditionalBranch : r35_4325 #-----| False -> Block 309 #-----| True -> Block 1026 -# 946| Block 309 -# 946| r946_1(glval) = VariableAddress[x309] : -# 946| mu946_2(String) = Uninitialized[x309] : &:r946_1 -# 946| r946_3(glval) = FunctionAddress[String] : -# 946| v946_4(void) = Call[String] : func:r946_3, this:r946_1 -# 946| mu946_5(unknown) = ^CallSideEffect : ~m? -# 946| mu946_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r946_1 -# 947| r947_1(glval) = VariableAddress[x309] : -# 947| r947_2(glval) = FunctionAddress[~String] : -# 947| v947_3(void) = Call[~String] : func:r947_2, this:r947_1 -# 947| mu947_4(unknown) = ^CallSideEffect : ~m? -# 947| v947_5(void) = ^IndirectReadSideEffect[-1] : &:r947_1, ~m? -# 947| mu947_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r947_1 -# 947| r947_7(bool) = Constant[0] : -# 947| v947_8(void) = ConditionalBranch : r947_7 +# 35| Block 309 +# 35| r35_4327(glval) = VariableAddress[x309] : +# 35| mu35_4328(String) = Uninitialized[x309] : &:r35_4327 +# 35| r35_4329(glval) = FunctionAddress[String] : +# 35| v35_4330(void) = Call[String] : func:r35_4329, this:r35_4327 +# 35| mu35_4331(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4327 +# 35| r35_4333(glval) = VariableAddress[x309] : +# 35| r35_4334(glval) = FunctionAddress[~String] : +# 35| v35_4335(void) = Call[~String] : func:r35_4334, this:r35_4333 +# 35| mu35_4336(unknown) = ^CallSideEffect : ~m? +# 35| v35_4337(void) = ^IndirectReadSideEffect[-1] : &:r35_4333, ~m? +# 35| mu35_4338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4333 +# 35| r35_4339(bool) = Constant[0] : +# 35| v35_4340(void) = ConditionalBranch : r35_4339 #-----| False -> Block 310 #-----| True -> Block 1026 -# 949| Block 310 -# 949| r949_1(glval) = VariableAddress[x310] : -# 949| mu949_2(String) = Uninitialized[x310] : &:r949_1 -# 949| r949_3(glval) = FunctionAddress[String] : -# 949| v949_4(void) = Call[String] : func:r949_3, this:r949_1 -# 949| mu949_5(unknown) = ^CallSideEffect : ~m? -# 949| mu949_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r949_1 -# 950| r950_1(glval) = VariableAddress[x310] : -# 950| r950_2(glval) = FunctionAddress[~String] : -# 950| v950_3(void) = Call[~String] : func:r950_2, this:r950_1 -# 950| mu950_4(unknown) = ^CallSideEffect : ~m? -# 950| v950_5(void) = ^IndirectReadSideEffect[-1] : &:r950_1, ~m? -# 950| mu950_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r950_1 -# 950| r950_7(bool) = Constant[0] : -# 950| v950_8(void) = ConditionalBranch : r950_7 +# 35| Block 310 +# 35| r35_4341(glval) = VariableAddress[x310] : +# 35| mu35_4342(String) = Uninitialized[x310] : &:r35_4341 +# 35| r35_4343(glval) = FunctionAddress[String] : +# 35| v35_4344(void) = Call[String] : func:r35_4343, this:r35_4341 +# 35| mu35_4345(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4341 +# 35| r35_4347(glval) = VariableAddress[x310] : +# 35| r35_4348(glval) = FunctionAddress[~String] : +# 35| v35_4349(void) = Call[~String] : func:r35_4348, this:r35_4347 +# 35| mu35_4350(unknown) = ^CallSideEffect : ~m? +# 35| v35_4351(void) = ^IndirectReadSideEffect[-1] : &:r35_4347, ~m? +# 35| mu35_4352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4347 +# 35| r35_4353(bool) = Constant[0] : +# 35| v35_4354(void) = ConditionalBranch : r35_4353 #-----| False -> Block 311 #-----| True -> Block 1026 -# 952| Block 311 -# 952| r952_1(glval) = VariableAddress[x311] : -# 952| mu952_2(String) = Uninitialized[x311] : &:r952_1 -# 952| r952_3(glval) = FunctionAddress[String] : -# 952| v952_4(void) = Call[String] : func:r952_3, this:r952_1 -# 952| mu952_5(unknown) = ^CallSideEffect : ~m? -# 952| mu952_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r952_1 -# 953| r953_1(glval) = VariableAddress[x311] : -# 953| r953_2(glval) = FunctionAddress[~String] : -# 953| v953_3(void) = Call[~String] : func:r953_2, this:r953_1 -# 953| mu953_4(unknown) = ^CallSideEffect : ~m? -# 953| v953_5(void) = ^IndirectReadSideEffect[-1] : &:r953_1, ~m? -# 953| mu953_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r953_1 -# 953| r953_7(bool) = Constant[0] : -# 953| v953_8(void) = ConditionalBranch : r953_7 +# 35| Block 311 +# 35| r35_4355(glval) = VariableAddress[x311] : +# 35| mu35_4356(String) = Uninitialized[x311] : &:r35_4355 +# 35| r35_4357(glval) = FunctionAddress[String] : +# 35| v35_4358(void) = Call[String] : func:r35_4357, this:r35_4355 +# 35| mu35_4359(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4355 +# 35| r35_4361(glval) = VariableAddress[x311] : +# 35| r35_4362(glval) = FunctionAddress[~String] : +# 35| v35_4363(void) = Call[~String] : func:r35_4362, this:r35_4361 +# 35| mu35_4364(unknown) = ^CallSideEffect : ~m? +# 35| v35_4365(void) = ^IndirectReadSideEffect[-1] : &:r35_4361, ~m? +# 35| mu35_4366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4361 +# 35| r35_4367(bool) = Constant[0] : +# 35| v35_4368(void) = ConditionalBranch : r35_4367 #-----| False -> Block 312 #-----| True -> Block 1026 -# 955| Block 312 -# 955| r955_1(glval) = VariableAddress[x312] : -# 955| mu955_2(String) = Uninitialized[x312] : &:r955_1 -# 955| r955_3(glval) = FunctionAddress[String] : -# 955| v955_4(void) = Call[String] : func:r955_3, this:r955_1 -# 955| mu955_5(unknown) = ^CallSideEffect : ~m? -# 955| mu955_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r955_1 -# 956| r956_1(glval) = VariableAddress[x312] : -# 956| r956_2(glval) = FunctionAddress[~String] : -# 956| v956_3(void) = Call[~String] : func:r956_2, this:r956_1 -# 956| mu956_4(unknown) = ^CallSideEffect : ~m? -# 956| v956_5(void) = ^IndirectReadSideEffect[-1] : &:r956_1, ~m? -# 956| mu956_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r956_1 -# 956| r956_7(bool) = Constant[0] : -# 956| v956_8(void) = ConditionalBranch : r956_7 +# 35| Block 312 +# 35| r35_4369(glval) = VariableAddress[x312] : +# 35| mu35_4370(String) = Uninitialized[x312] : &:r35_4369 +# 35| r35_4371(glval) = FunctionAddress[String] : +# 35| v35_4372(void) = Call[String] : func:r35_4371, this:r35_4369 +# 35| mu35_4373(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4369 +# 35| r35_4375(glval) = VariableAddress[x312] : +# 35| r35_4376(glval) = FunctionAddress[~String] : +# 35| v35_4377(void) = Call[~String] : func:r35_4376, this:r35_4375 +# 35| mu35_4378(unknown) = ^CallSideEffect : ~m? +# 35| v35_4379(void) = ^IndirectReadSideEffect[-1] : &:r35_4375, ~m? +# 35| mu35_4380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4375 +# 35| r35_4381(bool) = Constant[0] : +# 35| v35_4382(void) = ConditionalBranch : r35_4381 #-----| False -> Block 313 #-----| True -> Block 1026 -# 958| Block 313 -# 958| r958_1(glval) = VariableAddress[x313] : -# 958| mu958_2(String) = Uninitialized[x313] : &:r958_1 -# 958| r958_3(glval) = FunctionAddress[String] : -# 958| v958_4(void) = Call[String] : func:r958_3, this:r958_1 -# 958| mu958_5(unknown) = ^CallSideEffect : ~m? -# 958| mu958_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r958_1 -# 959| r959_1(glval) = VariableAddress[x313] : -# 959| r959_2(glval) = FunctionAddress[~String] : -# 959| v959_3(void) = Call[~String] : func:r959_2, this:r959_1 -# 959| mu959_4(unknown) = ^CallSideEffect : ~m? -# 959| v959_5(void) = ^IndirectReadSideEffect[-1] : &:r959_1, ~m? -# 959| mu959_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r959_1 -# 959| r959_7(bool) = Constant[0] : -# 959| v959_8(void) = ConditionalBranch : r959_7 +# 35| Block 313 +# 35| r35_4383(glval) = VariableAddress[x313] : +# 35| mu35_4384(String) = Uninitialized[x313] : &:r35_4383 +# 35| r35_4385(glval) = FunctionAddress[String] : +# 35| v35_4386(void) = Call[String] : func:r35_4385, this:r35_4383 +# 35| mu35_4387(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4383 +# 35| r35_4389(glval) = VariableAddress[x313] : +# 35| r35_4390(glval) = FunctionAddress[~String] : +# 35| v35_4391(void) = Call[~String] : func:r35_4390, this:r35_4389 +# 35| mu35_4392(unknown) = ^CallSideEffect : ~m? +# 35| v35_4393(void) = ^IndirectReadSideEffect[-1] : &:r35_4389, ~m? +# 35| mu35_4394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4389 +# 35| r35_4395(bool) = Constant[0] : +# 35| v35_4396(void) = ConditionalBranch : r35_4395 #-----| False -> Block 314 #-----| True -> Block 1026 -# 961| Block 314 -# 961| r961_1(glval) = VariableAddress[x314] : -# 961| mu961_2(String) = Uninitialized[x314] : &:r961_1 -# 961| r961_3(glval) = FunctionAddress[String] : -# 961| v961_4(void) = Call[String] : func:r961_3, this:r961_1 -# 961| mu961_5(unknown) = ^CallSideEffect : ~m? -# 961| mu961_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r961_1 -# 962| r962_1(glval) = VariableAddress[x314] : -# 962| r962_2(glval) = FunctionAddress[~String] : -# 962| v962_3(void) = Call[~String] : func:r962_2, this:r962_1 -# 962| mu962_4(unknown) = ^CallSideEffect : ~m? -# 962| v962_5(void) = ^IndirectReadSideEffect[-1] : &:r962_1, ~m? -# 962| mu962_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r962_1 -# 962| r962_7(bool) = Constant[0] : -# 962| v962_8(void) = ConditionalBranch : r962_7 +# 35| Block 314 +# 35| r35_4397(glval) = VariableAddress[x314] : +# 35| mu35_4398(String) = Uninitialized[x314] : &:r35_4397 +# 35| r35_4399(glval) = FunctionAddress[String] : +# 35| v35_4400(void) = Call[String] : func:r35_4399, this:r35_4397 +# 35| mu35_4401(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4397 +# 35| r35_4403(glval) = VariableAddress[x314] : +# 35| r35_4404(glval) = FunctionAddress[~String] : +# 35| v35_4405(void) = Call[~String] : func:r35_4404, this:r35_4403 +# 35| mu35_4406(unknown) = ^CallSideEffect : ~m? +# 35| v35_4407(void) = ^IndirectReadSideEffect[-1] : &:r35_4403, ~m? +# 35| mu35_4408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4403 +# 35| r35_4409(bool) = Constant[0] : +# 35| v35_4410(void) = ConditionalBranch : r35_4409 #-----| False -> Block 315 #-----| True -> Block 1026 -# 964| Block 315 -# 964| r964_1(glval) = VariableAddress[x315] : -# 964| mu964_2(String) = Uninitialized[x315] : &:r964_1 -# 964| r964_3(glval) = FunctionAddress[String] : -# 964| v964_4(void) = Call[String] : func:r964_3, this:r964_1 -# 964| mu964_5(unknown) = ^CallSideEffect : ~m? -# 964| mu964_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r964_1 -# 965| r965_1(glval) = VariableAddress[x315] : -# 965| r965_2(glval) = FunctionAddress[~String] : -# 965| v965_3(void) = Call[~String] : func:r965_2, this:r965_1 -# 965| mu965_4(unknown) = ^CallSideEffect : ~m? -# 965| v965_5(void) = ^IndirectReadSideEffect[-1] : &:r965_1, ~m? -# 965| mu965_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r965_1 -# 965| r965_7(bool) = Constant[0] : -# 965| v965_8(void) = ConditionalBranch : r965_7 +# 35| Block 315 +# 35| r35_4411(glval) = VariableAddress[x315] : +# 35| mu35_4412(String) = Uninitialized[x315] : &:r35_4411 +# 35| r35_4413(glval) = FunctionAddress[String] : +# 35| v35_4414(void) = Call[String] : func:r35_4413, this:r35_4411 +# 35| mu35_4415(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4411 +# 35| r35_4417(glval) = VariableAddress[x315] : +# 35| r35_4418(glval) = FunctionAddress[~String] : +# 35| v35_4419(void) = Call[~String] : func:r35_4418, this:r35_4417 +# 35| mu35_4420(unknown) = ^CallSideEffect : ~m? +# 35| v35_4421(void) = ^IndirectReadSideEffect[-1] : &:r35_4417, ~m? +# 35| mu35_4422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4417 +# 35| r35_4423(bool) = Constant[0] : +# 35| v35_4424(void) = ConditionalBranch : r35_4423 #-----| False -> Block 316 #-----| True -> Block 1026 -# 967| Block 316 -# 967| r967_1(glval) = VariableAddress[x316] : -# 967| mu967_2(String) = Uninitialized[x316] : &:r967_1 -# 967| r967_3(glval) = FunctionAddress[String] : -# 967| v967_4(void) = Call[String] : func:r967_3, this:r967_1 -# 967| mu967_5(unknown) = ^CallSideEffect : ~m? -# 967| mu967_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r967_1 -# 968| r968_1(glval) = VariableAddress[x316] : -# 968| r968_2(glval) = FunctionAddress[~String] : -# 968| v968_3(void) = Call[~String] : func:r968_2, this:r968_1 -# 968| mu968_4(unknown) = ^CallSideEffect : ~m? -# 968| v968_5(void) = ^IndirectReadSideEffect[-1] : &:r968_1, ~m? -# 968| mu968_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r968_1 -# 968| r968_7(bool) = Constant[0] : -# 968| v968_8(void) = ConditionalBranch : r968_7 +# 35| Block 316 +# 35| r35_4425(glval) = VariableAddress[x316] : +# 35| mu35_4426(String) = Uninitialized[x316] : &:r35_4425 +# 35| r35_4427(glval) = FunctionAddress[String] : +# 35| v35_4428(void) = Call[String] : func:r35_4427, this:r35_4425 +# 35| mu35_4429(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4425 +# 35| r35_4431(glval) = VariableAddress[x316] : +# 35| r35_4432(glval) = FunctionAddress[~String] : +# 35| v35_4433(void) = Call[~String] : func:r35_4432, this:r35_4431 +# 35| mu35_4434(unknown) = ^CallSideEffect : ~m? +# 35| v35_4435(void) = ^IndirectReadSideEffect[-1] : &:r35_4431, ~m? +# 35| mu35_4436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4431 +# 35| r35_4437(bool) = Constant[0] : +# 35| v35_4438(void) = ConditionalBranch : r35_4437 #-----| False -> Block 317 #-----| True -> Block 1026 -# 970| Block 317 -# 970| r970_1(glval) = VariableAddress[x317] : -# 970| mu970_2(String) = Uninitialized[x317] : &:r970_1 -# 970| r970_3(glval) = FunctionAddress[String] : -# 970| v970_4(void) = Call[String] : func:r970_3, this:r970_1 -# 970| mu970_5(unknown) = ^CallSideEffect : ~m? -# 970| mu970_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r970_1 -# 971| r971_1(glval) = VariableAddress[x317] : -# 971| r971_2(glval) = FunctionAddress[~String] : -# 971| v971_3(void) = Call[~String] : func:r971_2, this:r971_1 -# 971| mu971_4(unknown) = ^CallSideEffect : ~m? -# 971| v971_5(void) = ^IndirectReadSideEffect[-1] : &:r971_1, ~m? -# 971| mu971_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r971_1 -# 971| r971_7(bool) = Constant[0] : -# 971| v971_8(void) = ConditionalBranch : r971_7 +# 35| Block 317 +# 35| r35_4439(glval) = VariableAddress[x317] : +# 35| mu35_4440(String) = Uninitialized[x317] : &:r35_4439 +# 35| r35_4441(glval) = FunctionAddress[String] : +# 35| v35_4442(void) = Call[String] : func:r35_4441, this:r35_4439 +# 35| mu35_4443(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4439 +# 35| r35_4445(glval) = VariableAddress[x317] : +# 35| r35_4446(glval) = FunctionAddress[~String] : +# 35| v35_4447(void) = Call[~String] : func:r35_4446, this:r35_4445 +# 35| mu35_4448(unknown) = ^CallSideEffect : ~m? +# 35| v35_4449(void) = ^IndirectReadSideEffect[-1] : &:r35_4445, ~m? +# 35| mu35_4450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4445 +# 35| r35_4451(bool) = Constant[0] : +# 35| v35_4452(void) = ConditionalBranch : r35_4451 #-----| False -> Block 318 #-----| True -> Block 1026 -# 973| Block 318 -# 973| r973_1(glval) = VariableAddress[x318] : -# 973| mu973_2(String) = Uninitialized[x318] : &:r973_1 -# 973| r973_3(glval) = FunctionAddress[String] : -# 973| v973_4(void) = Call[String] : func:r973_3, this:r973_1 -# 973| mu973_5(unknown) = ^CallSideEffect : ~m? -# 973| mu973_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r973_1 -# 974| r974_1(glval) = VariableAddress[x318] : -# 974| r974_2(glval) = FunctionAddress[~String] : -# 974| v974_3(void) = Call[~String] : func:r974_2, this:r974_1 -# 974| mu974_4(unknown) = ^CallSideEffect : ~m? -# 974| v974_5(void) = ^IndirectReadSideEffect[-1] : &:r974_1, ~m? -# 974| mu974_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r974_1 -# 974| r974_7(bool) = Constant[0] : -# 974| v974_8(void) = ConditionalBranch : r974_7 +# 35| Block 318 +# 35| r35_4453(glval) = VariableAddress[x318] : +# 35| mu35_4454(String) = Uninitialized[x318] : &:r35_4453 +# 35| r35_4455(glval) = FunctionAddress[String] : +# 35| v35_4456(void) = Call[String] : func:r35_4455, this:r35_4453 +# 35| mu35_4457(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4453 +# 35| r35_4459(glval) = VariableAddress[x318] : +# 35| r35_4460(glval) = FunctionAddress[~String] : +# 35| v35_4461(void) = Call[~String] : func:r35_4460, this:r35_4459 +# 35| mu35_4462(unknown) = ^CallSideEffect : ~m? +# 35| v35_4463(void) = ^IndirectReadSideEffect[-1] : &:r35_4459, ~m? +# 35| mu35_4464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4459 +# 35| r35_4465(bool) = Constant[0] : +# 35| v35_4466(void) = ConditionalBranch : r35_4465 #-----| False -> Block 319 #-----| True -> Block 1026 -# 976| Block 319 -# 976| r976_1(glval) = VariableAddress[x319] : -# 976| mu976_2(String) = Uninitialized[x319] : &:r976_1 -# 976| r976_3(glval) = FunctionAddress[String] : -# 976| v976_4(void) = Call[String] : func:r976_3, this:r976_1 -# 976| mu976_5(unknown) = ^CallSideEffect : ~m? -# 976| mu976_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r976_1 -# 977| r977_1(glval) = VariableAddress[x319] : -# 977| r977_2(glval) = FunctionAddress[~String] : -# 977| v977_3(void) = Call[~String] : func:r977_2, this:r977_1 -# 977| mu977_4(unknown) = ^CallSideEffect : ~m? -# 977| v977_5(void) = ^IndirectReadSideEffect[-1] : &:r977_1, ~m? -# 977| mu977_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r977_1 -# 977| r977_7(bool) = Constant[0] : -# 977| v977_8(void) = ConditionalBranch : r977_7 +# 35| Block 319 +# 35| r35_4467(glval) = VariableAddress[x319] : +# 35| mu35_4468(String) = Uninitialized[x319] : &:r35_4467 +# 35| r35_4469(glval) = FunctionAddress[String] : +# 35| v35_4470(void) = Call[String] : func:r35_4469, this:r35_4467 +# 35| mu35_4471(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4467 +# 35| r35_4473(glval) = VariableAddress[x319] : +# 35| r35_4474(glval) = FunctionAddress[~String] : +# 35| v35_4475(void) = Call[~String] : func:r35_4474, this:r35_4473 +# 35| mu35_4476(unknown) = ^CallSideEffect : ~m? +# 35| v35_4477(void) = ^IndirectReadSideEffect[-1] : &:r35_4473, ~m? +# 35| mu35_4478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4473 +# 35| r35_4479(bool) = Constant[0] : +# 35| v35_4480(void) = ConditionalBranch : r35_4479 #-----| False -> Block 320 #-----| True -> Block 1026 -# 979| Block 320 -# 979| r979_1(glval) = VariableAddress[x320] : -# 979| mu979_2(String) = Uninitialized[x320] : &:r979_1 -# 979| r979_3(glval) = FunctionAddress[String] : -# 979| v979_4(void) = Call[String] : func:r979_3, this:r979_1 -# 979| mu979_5(unknown) = ^CallSideEffect : ~m? -# 979| mu979_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r979_1 -# 980| r980_1(glval) = VariableAddress[x320] : -# 980| r980_2(glval) = FunctionAddress[~String] : -# 980| v980_3(void) = Call[~String] : func:r980_2, this:r980_1 -# 980| mu980_4(unknown) = ^CallSideEffect : ~m? -# 980| v980_5(void) = ^IndirectReadSideEffect[-1] : &:r980_1, ~m? -# 980| mu980_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r980_1 -# 980| r980_7(bool) = Constant[0] : -# 980| v980_8(void) = ConditionalBranch : r980_7 +# 35| Block 320 +# 35| r35_4481(glval) = VariableAddress[x320] : +# 35| mu35_4482(String) = Uninitialized[x320] : &:r35_4481 +# 35| r35_4483(glval) = FunctionAddress[String] : +# 35| v35_4484(void) = Call[String] : func:r35_4483, this:r35_4481 +# 35| mu35_4485(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4481 +# 35| r35_4487(glval) = VariableAddress[x320] : +# 35| r35_4488(glval) = FunctionAddress[~String] : +# 35| v35_4489(void) = Call[~String] : func:r35_4488, this:r35_4487 +# 35| mu35_4490(unknown) = ^CallSideEffect : ~m? +# 35| v35_4491(void) = ^IndirectReadSideEffect[-1] : &:r35_4487, ~m? +# 35| mu35_4492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4487 +# 35| r35_4493(bool) = Constant[0] : +# 35| v35_4494(void) = ConditionalBranch : r35_4493 #-----| False -> Block 321 #-----| True -> Block 1026 -# 982| Block 321 -# 982| r982_1(glval) = VariableAddress[x321] : -# 982| mu982_2(String) = Uninitialized[x321] : &:r982_1 -# 982| r982_3(glval) = FunctionAddress[String] : -# 982| v982_4(void) = Call[String] : func:r982_3, this:r982_1 -# 982| mu982_5(unknown) = ^CallSideEffect : ~m? -# 982| mu982_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r982_1 -# 983| r983_1(glval) = VariableAddress[x321] : -# 983| r983_2(glval) = FunctionAddress[~String] : -# 983| v983_3(void) = Call[~String] : func:r983_2, this:r983_1 -# 983| mu983_4(unknown) = ^CallSideEffect : ~m? -# 983| v983_5(void) = ^IndirectReadSideEffect[-1] : &:r983_1, ~m? -# 983| mu983_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r983_1 -# 983| r983_7(bool) = Constant[0] : -# 983| v983_8(void) = ConditionalBranch : r983_7 +# 35| Block 321 +# 35| r35_4495(glval) = VariableAddress[x321] : +# 35| mu35_4496(String) = Uninitialized[x321] : &:r35_4495 +# 35| r35_4497(glval) = FunctionAddress[String] : +# 35| v35_4498(void) = Call[String] : func:r35_4497, this:r35_4495 +# 35| mu35_4499(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4495 +# 35| r35_4501(glval) = VariableAddress[x321] : +# 35| r35_4502(glval) = FunctionAddress[~String] : +# 35| v35_4503(void) = Call[~String] : func:r35_4502, this:r35_4501 +# 35| mu35_4504(unknown) = ^CallSideEffect : ~m? +# 35| v35_4505(void) = ^IndirectReadSideEffect[-1] : &:r35_4501, ~m? +# 35| mu35_4506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4501 +# 35| r35_4507(bool) = Constant[0] : +# 35| v35_4508(void) = ConditionalBranch : r35_4507 #-----| False -> Block 322 #-----| True -> Block 1026 -# 985| Block 322 -# 985| r985_1(glval) = VariableAddress[x322] : -# 985| mu985_2(String) = Uninitialized[x322] : &:r985_1 -# 985| r985_3(glval) = FunctionAddress[String] : -# 985| v985_4(void) = Call[String] : func:r985_3, this:r985_1 -# 985| mu985_5(unknown) = ^CallSideEffect : ~m? -# 985| mu985_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r985_1 -# 986| r986_1(glval) = VariableAddress[x322] : -# 986| r986_2(glval) = FunctionAddress[~String] : -# 986| v986_3(void) = Call[~String] : func:r986_2, this:r986_1 -# 986| mu986_4(unknown) = ^CallSideEffect : ~m? -# 986| v986_5(void) = ^IndirectReadSideEffect[-1] : &:r986_1, ~m? -# 986| mu986_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r986_1 -# 986| r986_7(bool) = Constant[0] : -# 986| v986_8(void) = ConditionalBranch : r986_7 +# 35| Block 322 +# 35| r35_4509(glval) = VariableAddress[x322] : +# 35| mu35_4510(String) = Uninitialized[x322] : &:r35_4509 +# 35| r35_4511(glval) = FunctionAddress[String] : +# 35| v35_4512(void) = Call[String] : func:r35_4511, this:r35_4509 +# 35| mu35_4513(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4509 +# 35| r35_4515(glval) = VariableAddress[x322] : +# 35| r35_4516(glval) = FunctionAddress[~String] : +# 35| v35_4517(void) = Call[~String] : func:r35_4516, this:r35_4515 +# 35| mu35_4518(unknown) = ^CallSideEffect : ~m? +# 35| v35_4519(void) = ^IndirectReadSideEffect[-1] : &:r35_4515, ~m? +# 35| mu35_4520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4515 +# 35| r35_4521(bool) = Constant[0] : +# 35| v35_4522(void) = ConditionalBranch : r35_4521 #-----| False -> Block 323 #-----| True -> Block 1026 -# 988| Block 323 -# 988| r988_1(glval) = VariableAddress[x323] : -# 988| mu988_2(String) = Uninitialized[x323] : &:r988_1 -# 988| r988_3(glval) = FunctionAddress[String] : -# 988| v988_4(void) = Call[String] : func:r988_3, this:r988_1 -# 988| mu988_5(unknown) = ^CallSideEffect : ~m? -# 988| mu988_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r988_1 -# 989| r989_1(glval) = VariableAddress[x323] : -# 989| r989_2(glval) = FunctionAddress[~String] : -# 989| v989_3(void) = Call[~String] : func:r989_2, this:r989_1 -# 989| mu989_4(unknown) = ^CallSideEffect : ~m? -# 989| v989_5(void) = ^IndirectReadSideEffect[-1] : &:r989_1, ~m? -# 989| mu989_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r989_1 -# 989| r989_7(bool) = Constant[0] : -# 989| v989_8(void) = ConditionalBranch : r989_7 +# 35| Block 323 +# 35| r35_4523(glval) = VariableAddress[x323] : +# 35| mu35_4524(String) = Uninitialized[x323] : &:r35_4523 +# 35| r35_4525(glval) = FunctionAddress[String] : +# 35| v35_4526(void) = Call[String] : func:r35_4525, this:r35_4523 +# 35| mu35_4527(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4523 +# 35| r35_4529(glval) = VariableAddress[x323] : +# 35| r35_4530(glval) = FunctionAddress[~String] : +# 35| v35_4531(void) = Call[~String] : func:r35_4530, this:r35_4529 +# 35| mu35_4532(unknown) = ^CallSideEffect : ~m? +# 35| v35_4533(void) = ^IndirectReadSideEffect[-1] : &:r35_4529, ~m? +# 35| mu35_4534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4529 +# 35| r35_4535(bool) = Constant[0] : +# 35| v35_4536(void) = ConditionalBranch : r35_4535 #-----| False -> Block 324 #-----| True -> Block 1026 -# 991| Block 324 -# 991| r991_1(glval) = VariableAddress[x324] : -# 991| mu991_2(String) = Uninitialized[x324] : &:r991_1 -# 991| r991_3(glval) = FunctionAddress[String] : -# 991| v991_4(void) = Call[String] : func:r991_3, this:r991_1 -# 991| mu991_5(unknown) = ^CallSideEffect : ~m? -# 991| mu991_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r991_1 -# 992| r992_1(glval) = VariableAddress[x324] : -# 992| r992_2(glval) = FunctionAddress[~String] : -# 992| v992_3(void) = Call[~String] : func:r992_2, this:r992_1 -# 992| mu992_4(unknown) = ^CallSideEffect : ~m? -# 992| v992_5(void) = ^IndirectReadSideEffect[-1] : &:r992_1, ~m? -# 992| mu992_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r992_1 -# 992| r992_7(bool) = Constant[0] : -# 992| v992_8(void) = ConditionalBranch : r992_7 +# 35| Block 324 +# 35| r35_4537(glval) = VariableAddress[x324] : +# 35| mu35_4538(String) = Uninitialized[x324] : &:r35_4537 +# 35| r35_4539(glval) = FunctionAddress[String] : +# 35| v35_4540(void) = Call[String] : func:r35_4539, this:r35_4537 +# 35| mu35_4541(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4537 +# 35| r35_4543(glval) = VariableAddress[x324] : +# 35| r35_4544(glval) = FunctionAddress[~String] : +# 35| v35_4545(void) = Call[~String] : func:r35_4544, this:r35_4543 +# 35| mu35_4546(unknown) = ^CallSideEffect : ~m? +# 35| v35_4547(void) = ^IndirectReadSideEffect[-1] : &:r35_4543, ~m? +# 35| mu35_4548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4543 +# 35| r35_4549(bool) = Constant[0] : +# 35| v35_4550(void) = ConditionalBranch : r35_4549 #-----| False -> Block 325 #-----| True -> Block 1026 -# 994| Block 325 -# 994| r994_1(glval) = VariableAddress[x325] : -# 994| mu994_2(String) = Uninitialized[x325] : &:r994_1 -# 994| r994_3(glval) = FunctionAddress[String] : -# 994| v994_4(void) = Call[String] : func:r994_3, this:r994_1 -# 994| mu994_5(unknown) = ^CallSideEffect : ~m? -# 994| mu994_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r994_1 -# 995| r995_1(glval) = VariableAddress[x325] : -# 995| r995_2(glval) = FunctionAddress[~String] : -# 995| v995_3(void) = Call[~String] : func:r995_2, this:r995_1 -# 995| mu995_4(unknown) = ^CallSideEffect : ~m? -# 995| v995_5(void) = ^IndirectReadSideEffect[-1] : &:r995_1, ~m? -# 995| mu995_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r995_1 -# 995| r995_7(bool) = Constant[0] : -# 995| v995_8(void) = ConditionalBranch : r995_7 +# 35| Block 325 +# 35| r35_4551(glval) = VariableAddress[x325] : +# 35| mu35_4552(String) = Uninitialized[x325] : &:r35_4551 +# 35| r35_4553(glval) = FunctionAddress[String] : +# 35| v35_4554(void) = Call[String] : func:r35_4553, this:r35_4551 +# 35| mu35_4555(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4551 +# 35| r35_4557(glval) = VariableAddress[x325] : +# 35| r35_4558(glval) = FunctionAddress[~String] : +# 35| v35_4559(void) = Call[~String] : func:r35_4558, this:r35_4557 +# 35| mu35_4560(unknown) = ^CallSideEffect : ~m? +# 35| v35_4561(void) = ^IndirectReadSideEffect[-1] : &:r35_4557, ~m? +# 35| mu35_4562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4557 +# 35| r35_4563(bool) = Constant[0] : +# 35| v35_4564(void) = ConditionalBranch : r35_4563 #-----| False -> Block 326 #-----| True -> Block 1026 -# 997| Block 326 -# 997| r997_1(glval) = VariableAddress[x326] : -# 997| mu997_2(String) = Uninitialized[x326] : &:r997_1 -# 997| r997_3(glval) = FunctionAddress[String] : -# 997| v997_4(void) = Call[String] : func:r997_3, this:r997_1 -# 997| mu997_5(unknown) = ^CallSideEffect : ~m? -# 997| mu997_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r997_1 -# 998| r998_1(glval) = VariableAddress[x326] : -# 998| r998_2(glval) = FunctionAddress[~String] : -# 998| v998_3(void) = Call[~String] : func:r998_2, this:r998_1 -# 998| mu998_4(unknown) = ^CallSideEffect : ~m? -# 998| v998_5(void) = ^IndirectReadSideEffect[-1] : &:r998_1, ~m? -# 998| mu998_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r998_1 -# 998| r998_7(bool) = Constant[0] : -# 998| v998_8(void) = ConditionalBranch : r998_7 +# 35| Block 326 +# 35| r35_4565(glval) = VariableAddress[x326] : +# 35| mu35_4566(String) = Uninitialized[x326] : &:r35_4565 +# 35| r35_4567(glval) = FunctionAddress[String] : +# 35| v35_4568(void) = Call[String] : func:r35_4567, this:r35_4565 +# 35| mu35_4569(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4565 +# 35| r35_4571(glval) = VariableAddress[x326] : +# 35| r35_4572(glval) = FunctionAddress[~String] : +# 35| v35_4573(void) = Call[~String] : func:r35_4572, this:r35_4571 +# 35| mu35_4574(unknown) = ^CallSideEffect : ~m? +# 35| v35_4575(void) = ^IndirectReadSideEffect[-1] : &:r35_4571, ~m? +# 35| mu35_4576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4571 +# 35| r35_4577(bool) = Constant[0] : +# 35| v35_4578(void) = ConditionalBranch : r35_4577 #-----| False -> Block 327 #-----| True -> Block 1026 -# 1000| Block 327 -# 1000| r1000_1(glval) = VariableAddress[x327] : -# 1000| mu1000_2(String) = Uninitialized[x327] : &:r1000_1 -# 1000| r1000_3(glval) = FunctionAddress[String] : -# 1000| v1000_4(void) = Call[String] : func:r1000_3, this:r1000_1 -# 1000| mu1000_5(unknown) = ^CallSideEffect : ~m? -# 1000| mu1000_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1000_1 -# 1001| r1001_1(glval) = VariableAddress[x327] : -# 1001| r1001_2(glval) = FunctionAddress[~String] : -# 1001| v1001_3(void) = Call[~String] : func:r1001_2, this:r1001_1 -# 1001| mu1001_4(unknown) = ^CallSideEffect : ~m? -# 1001| v1001_5(void) = ^IndirectReadSideEffect[-1] : &:r1001_1, ~m? -# 1001| mu1001_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1001_1 -# 1001| r1001_7(bool) = Constant[0] : -# 1001| v1001_8(void) = ConditionalBranch : r1001_7 +# 35| Block 327 +# 35| r35_4579(glval) = VariableAddress[x327] : +# 35| mu35_4580(String) = Uninitialized[x327] : &:r35_4579 +# 35| r35_4581(glval) = FunctionAddress[String] : +# 35| v35_4582(void) = Call[String] : func:r35_4581, this:r35_4579 +# 35| mu35_4583(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4579 +# 35| r35_4585(glval) = VariableAddress[x327] : +# 35| r35_4586(glval) = FunctionAddress[~String] : +# 35| v35_4587(void) = Call[~String] : func:r35_4586, this:r35_4585 +# 35| mu35_4588(unknown) = ^CallSideEffect : ~m? +# 35| v35_4589(void) = ^IndirectReadSideEffect[-1] : &:r35_4585, ~m? +# 35| mu35_4590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4585 +# 35| r35_4591(bool) = Constant[0] : +# 35| v35_4592(void) = ConditionalBranch : r35_4591 #-----| False -> Block 328 #-----| True -> Block 1026 -# 1003| Block 328 -# 1003| r1003_1(glval) = VariableAddress[x328] : -# 1003| mu1003_2(String) = Uninitialized[x328] : &:r1003_1 -# 1003| r1003_3(glval) = FunctionAddress[String] : -# 1003| v1003_4(void) = Call[String] : func:r1003_3, this:r1003_1 -# 1003| mu1003_5(unknown) = ^CallSideEffect : ~m? -# 1003| mu1003_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1003_1 -# 1004| r1004_1(glval) = VariableAddress[x328] : -# 1004| r1004_2(glval) = FunctionAddress[~String] : -# 1004| v1004_3(void) = Call[~String] : func:r1004_2, this:r1004_1 -# 1004| mu1004_4(unknown) = ^CallSideEffect : ~m? -# 1004| v1004_5(void) = ^IndirectReadSideEffect[-1] : &:r1004_1, ~m? -# 1004| mu1004_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1004_1 -# 1004| r1004_7(bool) = Constant[0] : -# 1004| v1004_8(void) = ConditionalBranch : r1004_7 +# 35| Block 328 +# 35| r35_4593(glval) = VariableAddress[x328] : +# 35| mu35_4594(String) = Uninitialized[x328] : &:r35_4593 +# 35| r35_4595(glval) = FunctionAddress[String] : +# 35| v35_4596(void) = Call[String] : func:r35_4595, this:r35_4593 +# 35| mu35_4597(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4593 +# 35| r35_4599(glval) = VariableAddress[x328] : +# 35| r35_4600(glval) = FunctionAddress[~String] : +# 35| v35_4601(void) = Call[~String] : func:r35_4600, this:r35_4599 +# 35| mu35_4602(unknown) = ^CallSideEffect : ~m? +# 35| v35_4603(void) = ^IndirectReadSideEffect[-1] : &:r35_4599, ~m? +# 35| mu35_4604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4599 +# 35| r35_4605(bool) = Constant[0] : +# 35| v35_4606(void) = ConditionalBranch : r35_4605 #-----| False -> Block 329 #-----| True -> Block 1026 -# 1006| Block 329 -# 1006| r1006_1(glval) = VariableAddress[x329] : -# 1006| mu1006_2(String) = Uninitialized[x329] : &:r1006_1 -# 1006| r1006_3(glval) = FunctionAddress[String] : -# 1006| v1006_4(void) = Call[String] : func:r1006_3, this:r1006_1 -# 1006| mu1006_5(unknown) = ^CallSideEffect : ~m? -# 1006| mu1006_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1006_1 -# 1007| r1007_1(glval) = VariableAddress[x329] : -# 1007| r1007_2(glval) = FunctionAddress[~String] : -# 1007| v1007_3(void) = Call[~String] : func:r1007_2, this:r1007_1 -# 1007| mu1007_4(unknown) = ^CallSideEffect : ~m? -# 1007| v1007_5(void) = ^IndirectReadSideEffect[-1] : &:r1007_1, ~m? -# 1007| mu1007_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1007_1 -# 1007| r1007_7(bool) = Constant[0] : -# 1007| v1007_8(void) = ConditionalBranch : r1007_7 +# 35| Block 329 +# 35| r35_4607(glval) = VariableAddress[x329] : +# 35| mu35_4608(String) = Uninitialized[x329] : &:r35_4607 +# 35| r35_4609(glval) = FunctionAddress[String] : +# 35| v35_4610(void) = Call[String] : func:r35_4609, this:r35_4607 +# 35| mu35_4611(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4607 +# 35| r35_4613(glval) = VariableAddress[x329] : +# 35| r35_4614(glval) = FunctionAddress[~String] : +# 35| v35_4615(void) = Call[~String] : func:r35_4614, this:r35_4613 +# 35| mu35_4616(unknown) = ^CallSideEffect : ~m? +# 35| v35_4617(void) = ^IndirectReadSideEffect[-1] : &:r35_4613, ~m? +# 35| mu35_4618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4613 +# 35| r35_4619(bool) = Constant[0] : +# 35| v35_4620(void) = ConditionalBranch : r35_4619 #-----| False -> Block 330 #-----| True -> Block 1026 -# 1009| Block 330 -# 1009| r1009_1(glval) = VariableAddress[x330] : -# 1009| mu1009_2(String) = Uninitialized[x330] : &:r1009_1 -# 1009| r1009_3(glval) = FunctionAddress[String] : -# 1009| v1009_4(void) = Call[String] : func:r1009_3, this:r1009_1 -# 1009| mu1009_5(unknown) = ^CallSideEffect : ~m? -# 1009| mu1009_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1009_1 -# 1010| r1010_1(glval) = VariableAddress[x330] : -# 1010| r1010_2(glval) = FunctionAddress[~String] : -# 1010| v1010_3(void) = Call[~String] : func:r1010_2, this:r1010_1 -# 1010| mu1010_4(unknown) = ^CallSideEffect : ~m? -# 1010| v1010_5(void) = ^IndirectReadSideEffect[-1] : &:r1010_1, ~m? -# 1010| mu1010_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1010_1 -# 1010| r1010_7(bool) = Constant[0] : -# 1010| v1010_8(void) = ConditionalBranch : r1010_7 +# 35| Block 330 +# 35| r35_4621(glval) = VariableAddress[x330] : +# 35| mu35_4622(String) = Uninitialized[x330] : &:r35_4621 +# 35| r35_4623(glval) = FunctionAddress[String] : +# 35| v35_4624(void) = Call[String] : func:r35_4623, this:r35_4621 +# 35| mu35_4625(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4621 +# 35| r35_4627(glval) = VariableAddress[x330] : +# 35| r35_4628(glval) = FunctionAddress[~String] : +# 35| v35_4629(void) = Call[~String] : func:r35_4628, this:r35_4627 +# 35| mu35_4630(unknown) = ^CallSideEffect : ~m? +# 35| v35_4631(void) = ^IndirectReadSideEffect[-1] : &:r35_4627, ~m? +# 35| mu35_4632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4627 +# 35| r35_4633(bool) = Constant[0] : +# 35| v35_4634(void) = ConditionalBranch : r35_4633 #-----| False -> Block 331 #-----| True -> Block 1026 -# 1012| Block 331 -# 1012| r1012_1(glval) = VariableAddress[x331] : -# 1012| mu1012_2(String) = Uninitialized[x331] : &:r1012_1 -# 1012| r1012_3(glval) = FunctionAddress[String] : -# 1012| v1012_4(void) = Call[String] : func:r1012_3, this:r1012_1 -# 1012| mu1012_5(unknown) = ^CallSideEffect : ~m? -# 1012| mu1012_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1012_1 -# 1013| r1013_1(glval) = VariableAddress[x331] : -# 1013| r1013_2(glval) = FunctionAddress[~String] : -# 1013| v1013_3(void) = Call[~String] : func:r1013_2, this:r1013_1 -# 1013| mu1013_4(unknown) = ^CallSideEffect : ~m? -# 1013| v1013_5(void) = ^IndirectReadSideEffect[-1] : &:r1013_1, ~m? -# 1013| mu1013_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1013_1 -# 1013| r1013_7(bool) = Constant[0] : -# 1013| v1013_8(void) = ConditionalBranch : r1013_7 +# 35| Block 331 +# 35| r35_4635(glval) = VariableAddress[x331] : +# 35| mu35_4636(String) = Uninitialized[x331] : &:r35_4635 +# 35| r35_4637(glval) = FunctionAddress[String] : +# 35| v35_4638(void) = Call[String] : func:r35_4637, this:r35_4635 +# 35| mu35_4639(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4635 +# 35| r35_4641(glval) = VariableAddress[x331] : +# 35| r35_4642(glval) = FunctionAddress[~String] : +# 35| v35_4643(void) = Call[~String] : func:r35_4642, this:r35_4641 +# 35| mu35_4644(unknown) = ^CallSideEffect : ~m? +# 35| v35_4645(void) = ^IndirectReadSideEffect[-1] : &:r35_4641, ~m? +# 35| mu35_4646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4641 +# 35| r35_4647(bool) = Constant[0] : +# 35| v35_4648(void) = ConditionalBranch : r35_4647 #-----| False -> Block 332 #-----| True -> Block 1026 -# 1015| Block 332 -# 1015| r1015_1(glval) = VariableAddress[x332] : -# 1015| mu1015_2(String) = Uninitialized[x332] : &:r1015_1 -# 1015| r1015_3(glval) = FunctionAddress[String] : -# 1015| v1015_4(void) = Call[String] : func:r1015_3, this:r1015_1 -# 1015| mu1015_5(unknown) = ^CallSideEffect : ~m? -# 1015| mu1015_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1015_1 -# 1016| r1016_1(glval) = VariableAddress[x332] : -# 1016| r1016_2(glval) = FunctionAddress[~String] : -# 1016| v1016_3(void) = Call[~String] : func:r1016_2, this:r1016_1 -# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? -# 1016| v1016_5(void) = ^IndirectReadSideEffect[-1] : &:r1016_1, ~m? -# 1016| mu1016_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1016_1 -# 1016| r1016_7(bool) = Constant[0] : -# 1016| v1016_8(void) = ConditionalBranch : r1016_7 +# 35| Block 332 +# 35| r35_4649(glval) = VariableAddress[x332] : +# 35| mu35_4650(String) = Uninitialized[x332] : &:r35_4649 +# 35| r35_4651(glval) = FunctionAddress[String] : +# 35| v35_4652(void) = Call[String] : func:r35_4651, this:r35_4649 +# 35| mu35_4653(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4649 +# 35| r35_4655(glval) = VariableAddress[x332] : +# 35| r35_4656(glval) = FunctionAddress[~String] : +# 35| v35_4657(void) = Call[~String] : func:r35_4656, this:r35_4655 +# 35| mu35_4658(unknown) = ^CallSideEffect : ~m? +# 35| v35_4659(void) = ^IndirectReadSideEffect[-1] : &:r35_4655, ~m? +# 35| mu35_4660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4655 +# 35| r35_4661(bool) = Constant[0] : +# 35| v35_4662(void) = ConditionalBranch : r35_4661 #-----| False -> Block 333 #-----| True -> Block 1026 -# 1018| Block 333 -# 1018| r1018_1(glval) = VariableAddress[x333] : -# 1018| mu1018_2(String) = Uninitialized[x333] : &:r1018_1 -# 1018| r1018_3(glval) = FunctionAddress[String] : -# 1018| v1018_4(void) = Call[String] : func:r1018_3, this:r1018_1 -# 1018| mu1018_5(unknown) = ^CallSideEffect : ~m? -# 1018| mu1018_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1018_1 -# 1019| r1019_1(glval) = VariableAddress[x333] : -# 1019| r1019_2(glval) = FunctionAddress[~String] : -# 1019| v1019_3(void) = Call[~String] : func:r1019_2, this:r1019_1 -# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? -# 1019| v1019_5(void) = ^IndirectReadSideEffect[-1] : &:r1019_1, ~m? -# 1019| mu1019_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1019_1 -# 1019| r1019_7(bool) = Constant[0] : -# 1019| v1019_8(void) = ConditionalBranch : r1019_7 +# 35| Block 333 +# 35| r35_4663(glval) = VariableAddress[x333] : +# 35| mu35_4664(String) = Uninitialized[x333] : &:r35_4663 +# 35| r35_4665(glval) = FunctionAddress[String] : +# 35| v35_4666(void) = Call[String] : func:r35_4665, this:r35_4663 +# 35| mu35_4667(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4663 +# 35| r35_4669(glval) = VariableAddress[x333] : +# 35| r35_4670(glval) = FunctionAddress[~String] : +# 35| v35_4671(void) = Call[~String] : func:r35_4670, this:r35_4669 +# 35| mu35_4672(unknown) = ^CallSideEffect : ~m? +# 35| v35_4673(void) = ^IndirectReadSideEffect[-1] : &:r35_4669, ~m? +# 35| mu35_4674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4669 +# 35| r35_4675(bool) = Constant[0] : +# 35| v35_4676(void) = ConditionalBranch : r35_4675 #-----| False -> Block 334 #-----| True -> Block 1026 -# 1021| Block 334 -# 1021| r1021_1(glval) = VariableAddress[x334] : -# 1021| mu1021_2(String) = Uninitialized[x334] : &:r1021_1 -# 1021| r1021_3(glval) = FunctionAddress[String] : -# 1021| v1021_4(void) = Call[String] : func:r1021_3, this:r1021_1 -# 1021| mu1021_5(unknown) = ^CallSideEffect : ~m? -# 1021| mu1021_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1021_1 -# 1022| r1022_1(glval) = VariableAddress[x334] : -# 1022| r1022_2(glval) = FunctionAddress[~String] : -# 1022| v1022_3(void) = Call[~String] : func:r1022_2, this:r1022_1 -# 1022| mu1022_4(unknown) = ^CallSideEffect : ~m? -# 1022| v1022_5(void) = ^IndirectReadSideEffect[-1] : &:r1022_1, ~m? -# 1022| mu1022_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1022_1 -# 1022| r1022_7(bool) = Constant[0] : -# 1022| v1022_8(void) = ConditionalBranch : r1022_7 +# 35| Block 334 +# 35| r35_4677(glval) = VariableAddress[x334] : +# 35| mu35_4678(String) = Uninitialized[x334] : &:r35_4677 +# 35| r35_4679(glval) = FunctionAddress[String] : +# 35| v35_4680(void) = Call[String] : func:r35_4679, this:r35_4677 +# 35| mu35_4681(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4677 +# 35| r35_4683(glval) = VariableAddress[x334] : +# 35| r35_4684(glval) = FunctionAddress[~String] : +# 35| v35_4685(void) = Call[~String] : func:r35_4684, this:r35_4683 +# 35| mu35_4686(unknown) = ^CallSideEffect : ~m? +# 35| v35_4687(void) = ^IndirectReadSideEffect[-1] : &:r35_4683, ~m? +# 35| mu35_4688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4683 +# 35| r35_4689(bool) = Constant[0] : +# 35| v35_4690(void) = ConditionalBranch : r35_4689 #-----| False -> Block 335 #-----| True -> Block 1026 -# 1024| Block 335 -# 1024| r1024_1(glval) = VariableAddress[x335] : -# 1024| mu1024_2(String) = Uninitialized[x335] : &:r1024_1 -# 1024| r1024_3(glval) = FunctionAddress[String] : -# 1024| v1024_4(void) = Call[String] : func:r1024_3, this:r1024_1 -# 1024| mu1024_5(unknown) = ^CallSideEffect : ~m? -# 1024| mu1024_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1024_1 -# 1025| r1025_1(glval) = VariableAddress[x335] : -# 1025| r1025_2(glval) = FunctionAddress[~String] : -# 1025| v1025_3(void) = Call[~String] : func:r1025_2, this:r1025_1 -# 1025| mu1025_4(unknown) = ^CallSideEffect : ~m? -# 1025| v1025_5(void) = ^IndirectReadSideEffect[-1] : &:r1025_1, ~m? -# 1025| mu1025_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1025_1 -# 1025| r1025_7(bool) = Constant[0] : -# 1025| v1025_8(void) = ConditionalBranch : r1025_7 +# 35| Block 335 +# 35| r35_4691(glval) = VariableAddress[x335] : +# 35| mu35_4692(String) = Uninitialized[x335] : &:r35_4691 +# 35| r35_4693(glval) = FunctionAddress[String] : +# 35| v35_4694(void) = Call[String] : func:r35_4693, this:r35_4691 +# 35| mu35_4695(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4691 +# 35| r35_4697(glval) = VariableAddress[x335] : +# 35| r35_4698(glval) = FunctionAddress[~String] : +# 35| v35_4699(void) = Call[~String] : func:r35_4698, this:r35_4697 +# 35| mu35_4700(unknown) = ^CallSideEffect : ~m? +# 35| v35_4701(void) = ^IndirectReadSideEffect[-1] : &:r35_4697, ~m? +# 35| mu35_4702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4697 +# 35| r35_4703(bool) = Constant[0] : +# 35| v35_4704(void) = ConditionalBranch : r35_4703 #-----| False -> Block 336 #-----| True -> Block 1026 -# 1027| Block 336 -# 1027| r1027_1(glval) = VariableAddress[x336] : -# 1027| mu1027_2(String) = Uninitialized[x336] : &:r1027_1 -# 1027| r1027_3(glval) = FunctionAddress[String] : -# 1027| v1027_4(void) = Call[String] : func:r1027_3, this:r1027_1 -# 1027| mu1027_5(unknown) = ^CallSideEffect : ~m? -# 1027| mu1027_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1027_1 -# 1028| r1028_1(glval) = VariableAddress[x336] : -# 1028| r1028_2(glval) = FunctionAddress[~String] : -# 1028| v1028_3(void) = Call[~String] : func:r1028_2, this:r1028_1 -# 1028| mu1028_4(unknown) = ^CallSideEffect : ~m? -# 1028| v1028_5(void) = ^IndirectReadSideEffect[-1] : &:r1028_1, ~m? -# 1028| mu1028_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1028_1 -# 1028| r1028_7(bool) = Constant[0] : -# 1028| v1028_8(void) = ConditionalBranch : r1028_7 +# 35| Block 336 +# 35| r35_4705(glval) = VariableAddress[x336] : +# 35| mu35_4706(String) = Uninitialized[x336] : &:r35_4705 +# 35| r35_4707(glval) = FunctionAddress[String] : +# 35| v35_4708(void) = Call[String] : func:r35_4707, this:r35_4705 +# 35| mu35_4709(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4705 +# 35| r35_4711(glval) = VariableAddress[x336] : +# 35| r35_4712(glval) = FunctionAddress[~String] : +# 35| v35_4713(void) = Call[~String] : func:r35_4712, this:r35_4711 +# 35| mu35_4714(unknown) = ^CallSideEffect : ~m? +# 35| v35_4715(void) = ^IndirectReadSideEffect[-1] : &:r35_4711, ~m? +# 35| mu35_4716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4711 +# 35| r35_4717(bool) = Constant[0] : +# 35| v35_4718(void) = ConditionalBranch : r35_4717 #-----| False -> Block 337 #-----| True -> Block 1026 -# 1030| Block 337 -# 1030| r1030_1(glval) = VariableAddress[x337] : -# 1030| mu1030_2(String) = Uninitialized[x337] : &:r1030_1 -# 1030| r1030_3(glval) = FunctionAddress[String] : -# 1030| v1030_4(void) = Call[String] : func:r1030_3, this:r1030_1 -# 1030| mu1030_5(unknown) = ^CallSideEffect : ~m? -# 1030| mu1030_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1030_1 -# 1031| r1031_1(glval) = VariableAddress[x337] : -# 1031| r1031_2(glval) = FunctionAddress[~String] : -# 1031| v1031_3(void) = Call[~String] : func:r1031_2, this:r1031_1 -# 1031| mu1031_4(unknown) = ^CallSideEffect : ~m? -# 1031| v1031_5(void) = ^IndirectReadSideEffect[-1] : &:r1031_1, ~m? -# 1031| mu1031_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1031_1 -# 1031| r1031_7(bool) = Constant[0] : -# 1031| v1031_8(void) = ConditionalBranch : r1031_7 +# 35| Block 337 +# 35| r35_4719(glval) = VariableAddress[x337] : +# 35| mu35_4720(String) = Uninitialized[x337] : &:r35_4719 +# 35| r35_4721(glval) = FunctionAddress[String] : +# 35| v35_4722(void) = Call[String] : func:r35_4721, this:r35_4719 +# 35| mu35_4723(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4719 +# 35| r35_4725(glval) = VariableAddress[x337] : +# 35| r35_4726(glval) = FunctionAddress[~String] : +# 35| v35_4727(void) = Call[~String] : func:r35_4726, this:r35_4725 +# 35| mu35_4728(unknown) = ^CallSideEffect : ~m? +# 35| v35_4729(void) = ^IndirectReadSideEffect[-1] : &:r35_4725, ~m? +# 35| mu35_4730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4725 +# 35| r35_4731(bool) = Constant[0] : +# 35| v35_4732(void) = ConditionalBranch : r35_4731 #-----| False -> Block 338 #-----| True -> Block 1026 -# 1033| Block 338 -# 1033| r1033_1(glval) = VariableAddress[x338] : -# 1033| mu1033_2(String) = Uninitialized[x338] : &:r1033_1 -# 1033| r1033_3(glval) = FunctionAddress[String] : -# 1033| v1033_4(void) = Call[String] : func:r1033_3, this:r1033_1 -# 1033| mu1033_5(unknown) = ^CallSideEffect : ~m? -# 1033| mu1033_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1033_1 -# 1034| r1034_1(glval) = VariableAddress[x338] : -# 1034| r1034_2(glval) = FunctionAddress[~String] : -# 1034| v1034_3(void) = Call[~String] : func:r1034_2, this:r1034_1 -# 1034| mu1034_4(unknown) = ^CallSideEffect : ~m? -# 1034| v1034_5(void) = ^IndirectReadSideEffect[-1] : &:r1034_1, ~m? -# 1034| mu1034_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1034_1 -# 1034| r1034_7(bool) = Constant[0] : -# 1034| v1034_8(void) = ConditionalBranch : r1034_7 +# 35| Block 338 +# 35| r35_4733(glval) = VariableAddress[x338] : +# 35| mu35_4734(String) = Uninitialized[x338] : &:r35_4733 +# 35| r35_4735(glval) = FunctionAddress[String] : +# 35| v35_4736(void) = Call[String] : func:r35_4735, this:r35_4733 +# 35| mu35_4737(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4733 +# 35| r35_4739(glval) = VariableAddress[x338] : +# 35| r35_4740(glval) = FunctionAddress[~String] : +# 35| v35_4741(void) = Call[~String] : func:r35_4740, this:r35_4739 +# 35| mu35_4742(unknown) = ^CallSideEffect : ~m? +# 35| v35_4743(void) = ^IndirectReadSideEffect[-1] : &:r35_4739, ~m? +# 35| mu35_4744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4739 +# 35| r35_4745(bool) = Constant[0] : +# 35| v35_4746(void) = ConditionalBranch : r35_4745 #-----| False -> Block 339 #-----| True -> Block 1026 -# 1036| Block 339 -# 1036| r1036_1(glval) = VariableAddress[x339] : -# 1036| mu1036_2(String) = Uninitialized[x339] : &:r1036_1 -# 1036| r1036_3(glval) = FunctionAddress[String] : -# 1036| v1036_4(void) = Call[String] : func:r1036_3, this:r1036_1 -# 1036| mu1036_5(unknown) = ^CallSideEffect : ~m? -# 1036| mu1036_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1036_1 -# 1037| r1037_1(glval) = VariableAddress[x339] : -# 1037| r1037_2(glval) = FunctionAddress[~String] : -# 1037| v1037_3(void) = Call[~String] : func:r1037_2, this:r1037_1 -# 1037| mu1037_4(unknown) = ^CallSideEffect : ~m? -# 1037| v1037_5(void) = ^IndirectReadSideEffect[-1] : &:r1037_1, ~m? -# 1037| mu1037_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1037_1 -# 1037| r1037_7(bool) = Constant[0] : -# 1037| v1037_8(void) = ConditionalBranch : r1037_7 +# 35| Block 339 +# 35| r35_4747(glval) = VariableAddress[x339] : +# 35| mu35_4748(String) = Uninitialized[x339] : &:r35_4747 +# 35| r35_4749(glval) = FunctionAddress[String] : +# 35| v35_4750(void) = Call[String] : func:r35_4749, this:r35_4747 +# 35| mu35_4751(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4747 +# 35| r35_4753(glval) = VariableAddress[x339] : +# 35| r35_4754(glval) = FunctionAddress[~String] : +# 35| v35_4755(void) = Call[~String] : func:r35_4754, this:r35_4753 +# 35| mu35_4756(unknown) = ^CallSideEffect : ~m? +# 35| v35_4757(void) = ^IndirectReadSideEffect[-1] : &:r35_4753, ~m? +# 35| mu35_4758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4753 +# 35| r35_4759(bool) = Constant[0] : +# 35| v35_4760(void) = ConditionalBranch : r35_4759 #-----| False -> Block 340 #-----| True -> Block 1026 -# 1039| Block 340 -# 1039| r1039_1(glval) = VariableAddress[x340] : -# 1039| mu1039_2(String) = Uninitialized[x340] : &:r1039_1 -# 1039| r1039_3(glval) = FunctionAddress[String] : -# 1039| v1039_4(void) = Call[String] : func:r1039_3, this:r1039_1 -# 1039| mu1039_5(unknown) = ^CallSideEffect : ~m? -# 1039| mu1039_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1039_1 -# 1040| r1040_1(glval) = VariableAddress[x340] : -# 1040| r1040_2(glval) = FunctionAddress[~String] : -# 1040| v1040_3(void) = Call[~String] : func:r1040_2, this:r1040_1 -# 1040| mu1040_4(unknown) = ^CallSideEffect : ~m? -# 1040| v1040_5(void) = ^IndirectReadSideEffect[-1] : &:r1040_1, ~m? -# 1040| mu1040_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1040_1 -# 1040| r1040_7(bool) = Constant[0] : -# 1040| v1040_8(void) = ConditionalBranch : r1040_7 +# 35| Block 340 +# 35| r35_4761(glval) = VariableAddress[x340] : +# 35| mu35_4762(String) = Uninitialized[x340] : &:r35_4761 +# 35| r35_4763(glval) = FunctionAddress[String] : +# 35| v35_4764(void) = Call[String] : func:r35_4763, this:r35_4761 +# 35| mu35_4765(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4761 +# 35| r35_4767(glval) = VariableAddress[x340] : +# 35| r35_4768(glval) = FunctionAddress[~String] : +# 35| v35_4769(void) = Call[~String] : func:r35_4768, this:r35_4767 +# 35| mu35_4770(unknown) = ^CallSideEffect : ~m? +# 35| v35_4771(void) = ^IndirectReadSideEffect[-1] : &:r35_4767, ~m? +# 35| mu35_4772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4767 +# 35| r35_4773(bool) = Constant[0] : +# 35| v35_4774(void) = ConditionalBranch : r35_4773 #-----| False -> Block 341 #-----| True -> Block 1026 -# 1042| Block 341 -# 1042| r1042_1(glval) = VariableAddress[x341] : -# 1042| mu1042_2(String) = Uninitialized[x341] : &:r1042_1 -# 1042| r1042_3(glval) = FunctionAddress[String] : -# 1042| v1042_4(void) = Call[String] : func:r1042_3, this:r1042_1 -# 1042| mu1042_5(unknown) = ^CallSideEffect : ~m? -# 1042| mu1042_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1042_1 -# 1043| r1043_1(glval) = VariableAddress[x341] : -# 1043| r1043_2(glval) = FunctionAddress[~String] : -# 1043| v1043_3(void) = Call[~String] : func:r1043_2, this:r1043_1 -# 1043| mu1043_4(unknown) = ^CallSideEffect : ~m? -# 1043| v1043_5(void) = ^IndirectReadSideEffect[-1] : &:r1043_1, ~m? -# 1043| mu1043_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1043_1 -# 1043| r1043_7(bool) = Constant[0] : -# 1043| v1043_8(void) = ConditionalBranch : r1043_7 +# 35| Block 341 +# 35| r35_4775(glval) = VariableAddress[x341] : +# 35| mu35_4776(String) = Uninitialized[x341] : &:r35_4775 +# 35| r35_4777(glval) = FunctionAddress[String] : +# 35| v35_4778(void) = Call[String] : func:r35_4777, this:r35_4775 +# 35| mu35_4779(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4775 +# 35| r35_4781(glval) = VariableAddress[x341] : +# 35| r35_4782(glval) = FunctionAddress[~String] : +# 35| v35_4783(void) = Call[~String] : func:r35_4782, this:r35_4781 +# 35| mu35_4784(unknown) = ^CallSideEffect : ~m? +# 35| v35_4785(void) = ^IndirectReadSideEffect[-1] : &:r35_4781, ~m? +# 35| mu35_4786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4781 +# 35| r35_4787(bool) = Constant[0] : +# 35| v35_4788(void) = ConditionalBranch : r35_4787 #-----| False -> Block 342 #-----| True -> Block 1026 -# 1045| Block 342 -# 1045| r1045_1(glval) = VariableAddress[x342] : -# 1045| mu1045_2(String) = Uninitialized[x342] : &:r1045_1 -# 1045| r1045_3(glval) = FunctionAddress[String] : -# 1045| v1045_4(void) = Call[String] : func:r1045_3, this:r1045_1 -# 1045| mu1045_5(unknown) = ^CallSideEffect : ~m? -# 1045| mu1045_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1045_1 -# 1046| r1046_1(glval) = VariableAddress[x342] : -# 1046| r1046_2(glval) = FunctionAddress[~String] : -# 1046| v1046_3(void) = Call[~String] : func:r1046_2, this:r1046_1 -# 1046| mu1046_4(unknown) = ^CallSideEffect : ~m? -# 1046| v1046_5(void) = ^IndirectReadSideEffect[-1] : &:r1046_1, ~m? -# 1046| mu1046_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1046_1 -# 1046| r1046_7(bool) = Constant[0] : -# 1046| v1046_8(void) = ConditionalBranch : r1046_7 +# 35| Block 342 +# 35| r35_4789(glval) = VariableAddress[x342] : +# 35| mu35_4790(String) = Uninitialized[x342] : &:r35_4789 +# 35| r35_4791(glval) = FunctionAddress[String] : +# 35| v35_4792(void) = Call[String] : func:r35_4791, this:r35_4789 +# 35| mu35_4793(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4789 +# 35| r35_4795(glval) = VariableAddress[x342] : +# 35| r35_4796(glval) = FunctionAddress[~String] : +# 35| v35_4797(void) = Call[~String] : func:r35_4796, this:r35_4795 +# 35| mu35_4798(unknown) = ^CallSideEffect : ~m? +# 35| v35_4799(void) = ^IndirectReadSideEffect[-1] : &:r35_4795, ~m? +# 35| mu35_4800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4795 +# 35| r35_4801(bool) = Constant[0] : +# 35| v35_4802(void) = ConditionalBranch : r35_4801 #-----| False -> Block 343 #-----| True -> Block 1026 -# 1048| Block 343 -# 1048| r1048_1(glval) = VariableAddress[x343] : -# 1048| mu1048_2(String) = Uninitialized[x343] : &:r1048_1 -# 1048| r1048_3(glval) = FunctionAddress[String] : -# 1048| v1048_4(void) = Call[String] : func:r1048_3, this:r1048_1 -# 1048| mu1048_5(unknown) = ^CallSideEffect : ~m? -# 1048| mu1048_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1048_1 -# 1049| r1049_1(glval) = VariableAddress[x343] : -# 1049| r1049_2(glval) = FunctionAddress[~String] : -# 1049| v1049_3(void) = Call[~String] : func:r1049_2, this:r1049_1 -# 1049| mu1049_4(unknown) = ^CallSideEffect : ~m? -# 1049| v1049_5(void) = ^IndirectReadSideEffect[-1] : &:r1049_1, ~m? -# 1049| mu1049_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1049_1 -# 1049| r1049_7(bool) = Constant[0] : -# 1049| v1049_8(void) = ConditionalBranch : r1049_7 +# 35| Block 343 +# 35| r35_4803(glval) = VariableAddress[x343] : +# 35| mu35_4804(String) = Uninitialized[x343] : &:r35_4803 +# 35| r35_4805(glval) = FunctionAddress[String] : +# 35| v35_4806(void) = Call[String] : func:r35_4805, this:r35_4803 +# 35| mu35_4807(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4803 +# 35| r35_4809(glval) = VariableAddress[x343] : +# 35| r35_4810(glval) = FunctionAddress[~String] : +# 35| v35_4811(void) = Call[~String] : func:r35_4810, this:r35_4809 +# 35| mu35_4812(unknown) = ^CallSideEffect : ~m? +# 35| v35_4813(void) = ^IndirectReadSideEffect[-1] : &:r35_4809, ~m? +# 35| mu35_4814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4809 +# 35| r35_4815(bool) = Constant[0] : +# 35| v35_4816(void) = ConditionalBranch : r35_4815 #-----| False -> Block 344 #-----| True -> Block 1026 -# 1051| Block 344 -# 1051| r1051_1(glval) = VariableAddress[x344] : -# 1051| mu1051_2(String) = Uninitialized[x344] : &:r1051_1 -# 1051| r1051_3(glval) = FunctionAddress[String] : -# 1051| v1051_4(void) = Call[String] : func:r1051_3, this:r1051_1 -# 1051| mu1051_5(unknown) = ^CallSideEffect : ~m? -# 1051| mu1051_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1051_1 -# 1052| r1052_1(glval) = VariableAddress[x344] : -# 1052| r1052_2(glval) = FunctionAddress[~String] : -# 1052| v1052_3(void) = Call[~String] : func:r1052_2, this:r1052_1 -# 1052| mu1052_4(unknown) = ^CallSideEffect : ~m? -# 1052| v1052_5(void) = ^IndirectReadSideEffect[-1] : &:r1052_1, ~m? -# 1052| mu1052_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1052_1 -# 1052| r1052_7(bool) = Constant[0] : -# 1052| v1052_8(void) = ConditionalBranch : r1052_7 +# 35| Block 344 +# 35| r35_4817(glval) = VariableAddress[x344] : +# 35| mu35_4818(String) = Uninitialized[x344] : &:r35_4817 +# 35| r35_4819(glval) = FunctionAddress[String] : +# 35| v35_4820(void) = Call[String] : func:r35_4819, this:r35_4817 +# 35| mu35_4821(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4817 +# 35| r35_4823(glval) = VariableAddress[x344] : +# 35| r35_4824(glval) = FunctionAddress[~String] : +# 35| v35_4825(void) = Call[~String] : func:r35_4824, this:r35_4823 +# 35| mu35_4826(unknown) = ^CallSideEffect : ~m? +# 35| v35_4827(void) = ^IndirectReadSideEffect[-1] : &:r35_4823, ~m? +# 35| mu35_4828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4823 +# 35| r35_4829(bool) = Constant[0] : +# 35| v35_4830(void) = ConditionalBranch : r35_4829 #-----| False -> Block 345 #-----| True -> Block 1026 -# 1054| Block 345 -# 1054| r1054_1(glval) = VariableAddress[x345] : -# 1054| mu1054_2(String) = Uninitialized[x345] : &:r1054_1 -# 1054| r1054_3(glval) = FunctionAddress[String] : -# 1054| v1054_4(void) = Call[String] : func:r1054_3, this:r1054_1 -# 1054| mu1054_5(unknown) = ^CallSideEffect : ~m? -# 1054| mu1054_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1054_1 -# 1055| r1055_1(glval) = VariableAddress[x345] : -# 1055| r1055_2(glval) = FunctionAddress[~String] : -# 1055| v1055_3(void) = Call[~String] : func:r1055_2, this:r1055_1 -# 1055| mu1055_4(unknown) = ^CallSideEffect : ~m? -# 1055| v1055_5(void) = ^IndirectReadSideEffect[-1] : &:r1055_1, ~m? -# 1055| mu1055_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1055_1 -# 1055| r1055_7(bool) = Constant[0] : -# 1055| v1055_8(void) = ConditionalBranch : r1055_7 +# 35| Block 345 +# 35| r35_4831(glval) = VariableAddress[x345] : +# 35| mu35_4832(String) = Uninitialized[x345] : &:r35_4831 +# 35| r35_4833(glval) = FunctionAddress[String] : +# 35| v35_4834(void) = Call[String] : func:r35_4833, this:r35_4831 +# 35| mu35_4835(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4831 +# 35| r35_4837(glval) = VariableAddress[x345] : +# 35| r35_4838(glval) = FunctionAddress[~String] : +# 35| v35_4839(void) = Call[~String] : func:r35_4838, this:r35_4837 +# 35| mu35_4840(unknown) = ^CallSideEffect : ~m? +# 35| v35_4841(void) = ^IndirectReadSideEffect[-1] : &:r35_4837, ~m? +# 35| mu35_4842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4837 +# 35| r35_4843(bool) = Constant[0] : +# 35| v35_4844(void) = ConditionalBranch : r35_4843 #-----| False -> Block 346 #-----| True -> Block 1026 -# 1057| Block 346 -# 1057| r1057_1(glval) = VariableAddress[x346] : -# 1057| mu1057_2(String) = Uninitialized[x346] : &:r1057_1 -# 1057| r1057_3(glval) = FunctionAddress[String] : -# 1057| v1057_4(void) = Call[String] : func:r1057_3, this:r1057_1 -# 1057| mu1057_5(unknown) = ^CallSideEffect : ~m? -# 1057| mu1057_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1057_1 -# 1058| r1058_1(glval) = VariableAddress[x346] : -# 1058| r1058_2(glval) = FunctionAddress[~String] : -# 1058| v1058_3(void) = Call[~String] : func:r1058_2, this:r1058_1 -# 1058| mu1058_4(unknown) = ^CallSideEffect : ~m? -# 1058| v1058_5(void) = ^IndirectReadSideEffect[-1] : &:r1058_1, ~m? -# 1058| mu1058_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1058_1 -# 1058| r1058_7(bool) = Constant[0] : -# 1058| v1058_8(void) = ConditionalBranch : r1058_7 +# 35| Block 346 +# 35| r35_4845(glval) = VariableAddress[x346] : +# 35| mu35_4846(String) = Uninitialized[x346] : &:r35_4845 +# 35| r35_4847(glval) = FunctionAddress[String] : +# 35| v35_4848(void) = Call[String] : func:r35_4847, this:r35_4845 +# 35| mu35_4849(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4845 +# 35| r35_4851(glval) = VariableAddress[x346] : +# 35| r35_4852(glval) = FunctionAddress[~String] : +# 35| v35_4853(void) = Call[~String] : func:r35_4852, this:r35_4851 +# 35| mu35_4854(unknown) = ^CallSideEffect : ~m? +# 35| v35_4855(void) = ^IndirectReadSideEffect[-1] : &:r35_4851, ~m? +# 35| mu35_4856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4851 +# 35| r35_4857(bool) = Constant[0] : +# 35| v35_4858(void) = ConditionalBranch : r35_4857 #-----| False -> Block 347 #-----| True -> Block 1026 -# 1060| Block 347 -# 1060| r1060_1(glval) = VariableAddress[x347] : -# 1060| mu1060_2(String) = Uninitialized[x347] : &:r1060_1 -# 1060| r1060_3(glval) = FunctionAddress[String] : -# 1060| v1060_4(void) = Call[String] : func:r1060_3, this:r1060_1 -# 1060| mu1060_5(unknown) = ^CallSideEffect : ~m? -# 1060| mu1060_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1060_1 -# 1061| r1061_1(glval) = VariableAddress[x347] : -# 1061| r1061_2(glval) = FunctionAddress[~String] : -# 1061| v1061_3(void) = Call[~String] : func:r1061_2, this:r1061_1 -# 1061| mu1061_4(unknown) = ^CallSideEffect : ~m? -# 1061| v1061_5(void) = ^IndirectReadSideEffect[-1] : &:r1061_1, ~m? -# 1061| mu1061_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1061_1 -# 1061| r1061_7(bool) = Constant[0] : -# 1061| v1061_8(void) = ConditionalBranch : r1061_7 +# 35| Block 347 +# 35| r35_4859(glval) = VariableAddress[x347] : +# 35| mu35_4860(String) = Uninitialized[x347] : &:r35_4859 +# 35| r35_4861(glval) = FunctionAddress[String] : +# 35| v35_4862(void) = Call[String] : func:r35_4861, this:r35_4859 +# 35| mu35_4863(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4859 +# 35| r35_4865(glval) = VariableAddress[x347] : +# 35| r35_4866(glval) = FunctionAddress[~String] : +# 35| v35_4867(void) = Call[~String] : func:r35_4866, this:r35_4865 +# 35| mu35_4868(unknown) = ^CallSideEffect : ~m? +# 35| v35_4869(void) = ^IndirectReadSideEffect[-1] : &:r35_4865, ~m? +# 35| mu35_4870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4865 +# 35| r35_4871(bool) = Constant[0] : +# 35| v35_4872(void) = ConditionalBranch : r35_4871 #-----| False -> Block 348 #-----| True -> Block 1026 -# 1063| Block 348 -# 1063| r1063_1(glval) = VariableAddress[x348] : -# 1063| mu1063_2(String) = Uninitialized[x348] : &:r1063_1 -# 1063| r1063_3(glval) = FunctionAddress[String] : -# 1063| v1063_4(void) = Call[String] : func:r1063_3, this:r1063_1 -# 1063| mu1063_5(unknown) = ^CallSideEffect : ~m? -# 1063| mu1063_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1063_1 -# 1064| r1064_1(glval) = VariableAddress[x348] : -# 1064| r1064_2(glval) = FunctionAddress[~String] : -# 1064| v1064_3(void) = Call[~String] : func:r1064_2, this:r1064_1 -# 1064| mu1064_4(unknown) = ^CallSideEffect : ~m? -# 1064| v1064_5(void) = ^IndirectReadSideEffect[-1] : &:r1064_1, ~m? -# 1064| mu1064_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1064_1 -# 1064| r1064_7(bool) = Constant[0] : -# 1064| v1064_8(void) = ConditionalBranch : r1064_7 +# 35| Block 348 +# 35| r35_4873(glval) = VariableAddress[x348] : +# 35| mu35_4874(String) = Uninitialized[x348] : &:r35_4873 +# 35| r35_4875(glval) = FunctionAddress[String] : +# 35| v35_4876(void) = Call[String] : func:r35_4875, this:r35_4873 +# 35| mu35_4877(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4873 +# 35| r35_4879(glval) = VariableAddress[x348] : +# 35| r35_4880(glval) = FunctionAddress[~String] : +# 35| v35_4881(void) = Call[~String] : func:r35_4880, this:r35_4879 +# 35| mu35_4882(unknown) = ^CallSideEffect : ~m? +# 35| v35_4883(void) = ^IndirectReadSideEffect[-1] : &:r35_4879, ~m? +# 35| mu35_4884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4879 +# 35| r35_4885(bool) = Constant[0] : +# 35| v35_4886(void) = ConditionalBranch : r35_4885 #-----| False -> Block 349 #-----| True -> Block 1026 -# 1066| Block 349 -# 1066| r1066_1(glval) = VariableAddress[x349] : -# 1066| mu1066_2(String) = Uninitialized[x349] : &:r1066_1 -# 1066| r1066_3(glval) = FunctionAddress[String] : -# 1066| v1066_4(void) = Call[String] : func:r1066_3, this:r1066_1 -# 1066| mu1066_5(unknown) = ^CallSideEffect : ~m? -# 1066| mu1066_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1066_1 -# 1067| r1067_1(glval) = VariableAddress[x349] : -# 1067| r1067_2(glval) = FunctionAddress[~String] : -# 1067| v1067_3(void) = Call[~String] : func:r1067_2, this:r1067_1 -# 1067| mu1067_4(unknown) = ^CallSideEffect : ~m? -# 1067| v1067_5(void) = ^IndirectReadSideEffect[-1] : &:r1067_1, ~m? -# 1067| mu1067_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1067_1 -# 1067| r1067_7(bool) = Constant[0] : -# 1067| v1067_8(void) = ConditionalBranch : r1067_7 +# 35| Block 349 +# 35| r35_4887(glval) = VariableAddress[x349] : +# 35| mu35_4888(String) = Uninitialized[x349] : &:r35_4887 +# 35| r35_4889(glval) = FunctionAddress[String] : +# 35| v35_4890(void) = Call[String] : func:r35_4889, this:r35_4887 +# 35| mu35_4891(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4887 +# 35| r35_4893(glval) = VariableAddress[x349] : +# 35| r35_4894(glval) = FunctionAddress[~String] : +# 35| v35_4895(void) = Call[~String] : func:r35_4894, this:r35_4893 +# 35| mu35_4896(unknown) = ^CallSideEffect : ~m? +# 35| v35_4897(void) = ^IndirectReadSideEffect[-1] : &:r35_4893, ~m? +# 35| mu35_4898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4893 +# 35| r35_4899(bool) = Constant[0] : +# 35| v35_4900(void) = ConditionalBranch : r35_4899 #-----| False -> Block 350 #-----| True -> Block 1026 -# 1069| Block 350 -# 1069| r1069_1(glval) = VariableAddress[x350] : -# 1069| mu1069_2(String) = Uninitialized[x350] : &:r1069_1 -# 1069| r1069_3(glval) = FunctionAddress[String] : -# 1069| v1069_4(void) = Call[String] : func:r1069_3, this:r1069_1 -# 1069| mu1069_5(unknown) = ^CallSideEffect : ~m? -# 1069| mu1069_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1069_1 -# 1070| r1070_1(glval) = VariableAddress[x350] : -# 1070| r1070_2(glval) = FunctionAddress[~String] : -# 1070| v1070_3(void) = Call[~String] : func:r1070_2, this:r1070_1 -# 1070| mu1070_4(unknown) = ^CallSideEffect : ~m? -# 1070| v1070_5(void) = ^IndirectReadSideEffect[-1] : &:r1070_1, ~m? -# 1070| mu1070_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1070_1 -# 1070| r1070_7(bool) = Constant[0] : -# 1070| v1070_8(void) = ConditionalBranch : r1070_7 +# 35| Block 350 +# 35| r35_4901(glval) = VariableAddress[x350] : +# 35| mu35_4902(String) = Uninitialized[x350] : &:r35_4901 +# 35| r35_4903(glval) = FunctionAddress[String] : +# 35| v35_4904(void) = Call[String] : func:r35_4903, this:r35_4901 +# 35| mu35_4905(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4901 +# 35| r35_4907(glval) = VariableAddress[x350] : +# 35| r35_4908(glval) = FunctionAddress[~String] : +# 35| v35_4909(void) = Call[~String] : func:r35_4908, this:r35_4907 +# 35| mu35_4910(unknown) = ^CallSideEffect : ~m? +# 35| v35_4911(void) = ^IndirectReadSideEffect[-1] : &:r35_4907, ~m? +# 35| mu35_4912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4907 +# 35| r35_4913(bool) = Constant[0] : +# 35| v35_4914(void) = ConditionalBranch : r35_4913 #-----| False -> Block 351 #-----| True -> Block 1026 -# 1072| Block 351 -# 1072| r1072_1(glval) = VariableAddress[x351] : -# 1072| mu1072_2(String) = Uninitialized[x351] : &:r1072_1 -# 1072| r1072_3(glval) = FunctionAddress[String] : -# 1072| v1072_4(void) = Call[String] : func:r1072_3, this:r1072_1 -# 1072| mu1072_5(unknown) = ^CallSideEffect : ~m? -# 1072| mu1072_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1072_1 -# 1073| r1073_1(glval) = VariableAddress[x351] : -# 1073| r1073_2(glval) = FunctionAddress[~String] : -# 1073| v1073_3(void) = Call[~String] : func:r1073_2, this:r1073_1 -# 1073| mu1073_4(unknown) = ^CallSideEffect : ~m? -# 1073| v1073_5(void) = ^IndirectReadSideEffect[-1] : &:r1073_1, ~m? -# 1073| mu1073_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1073_1 -# 1073| r1073_7(bool) = Constant[0] : -# 1073| v1073_8(void) = ConditionalBranch : r1073_7 +# 35| Block 351 +# 35| r35_4915(glval) = VariableAddress[x351] : +# 35| mu35_4916(String) = Uninitialized[x351] : &:r35_4915 +# 35| r35_4917(glval) = FunctionAddress[String] : +# 35| v35_4918(void) = Call[String] : func:r35_4917, this:r35_4915 +# 35| mu35_4919(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4915 +# 35| r35_4921(glval) = VariableAddress[x351] : +# 35| r35_4922(glval) = FunctionAddress[~String] : +# 35| v35_4923(void) = Call[~String] : func:r35_4922, this:r35_4921 +# 35| mu35_4924(unknown) = ^CallSideEffect : ~m? +# 35| v35_4925(void) = ^IndirectReadSideEffect[-1] : &:r35_4921, ~m? +# 35| mu35_4926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4921 +# 35| r35_4927(bool) = Constant[0] : +# 35| v35_4928(void) = ConditionalBranch : r35_4927 #-----| False -> Block 352 #-----| True -> Block 1026 -# 1075| Block 352 -# 1075| r1075_1(glval) = VariableAddress[x352] : -# 1075| mu1075_2(String) = Uninitialized[x352] : &:r1075_1 -# 1075| r1075_3(glval) = FunctionAddress[String] : -# 1075| v1075_4(void) = Call[String] : func:r1075_3, this:r1075_1 -# 1075| mu1075_5(unknown) = ^CallSideEffect : ~m? -# 1075| mu1075_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1075_1 -# 1076| r1076_1(glval) = VariableAddress[x352] : -# 1076| r1076_2(glval) = FunctionAddress[~String] : -# 1076| v1076_3(void) = Call[~String] : func:r1076_2, this:r1076_1 -# 1076| mu1076_4(unknown) = ^CallSideEffect : ~m? -# 1076| v1076_5(void) = ^IndirectReadSideEffect[-1] : &:r1076_1, ~m? -# 1076| mu1076_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1076_1 -# 1076| r1076_7(bool) = Constant[0] : -# 1076| v1076_8(void) = ConditionalBranch : r1076_7 +# 35| Block 352 +# 35| r35_4929(glval) = VariableAddress[x352] : +# 35| mu35_4930(String) = Uninitialized[x352] : &:r35_4929 +# 35| r35_4931(glval) = FunctionAddress[String] : +# 35| v35_4932(void) = Call[String] : func:r35_4931, this:r35_4929 +# 35| mu35_4933(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4929 +# 35| r35_4935(glval) = VariableAddress[x352] : +# 35| r35_4936(glval) = FunctionAddress[~String] : +# 35| v35_4937(void) = Call[~String] : func:r35_4936, this:r35_4935 +# 35| mu35_4938(unknown) = ^CallSideEffect : ~m? +# 35| v35_4939(void) = ^IndirectReadSideEffect[-1] : &:r35_4935, ~m? +# 35| mu35_4940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4935 +# 35| r35_4941(bool) = Constant[0] : +# 35| v35_4942(void) = ConditionalBranch : r35_4941 #-----| False -> Block 353 #-----| True -> Block 1026 -# 1078| Block 353 -# 1078| r1078_1(glval) = VariableAddress[x353] : -# 1078| mu1078_2(String) = Uninitialized[x353] : &:r1078_1 -# 1078| r1078_3(glval) = FunctionAddress[String] : -# 1078| v1078_4(void) = Call[String] : func:r1078_3, this:r1078_1 -# 1078| mu1078_5(unknown) = ^CallSideEffect : ~m? -# 1078| mu1078_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1078_1 -# 1079| r1079_1(glval) = VariableAddress[x353] : -# 1079| r1079_2(glval) = FunctionAddress[~String] : -# 1079| v1079_3(void) = Call[~String] : func:r1079_2, this:r1079_1 -# 1079| mu1079_4(unknown) = ^CallSideEffect : ~m? -# 1079| v1079_5(void) = ^IndirectReadSideEffect[-1] : &:r1079_1, ~m? -# 1079| mu1079_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1079_1 -# 1079| r1079_7(bool) = Constant[0] : -# 1079| v1079_8(void) = ConditionalBranch : r1079_7 +# 35| Block 353 +# 35| r35_4943(glval) = VariableAddress[x353] : +# 35| mu35_4944(String) = Uninitialized[x353] : &:r35_4943 +# 35| r35_4945(glval) = FunctionAddress[String] : +# 35| v35_4946(void) = Call[String] : func:r35_4945, this:r35_4943 +# 35| mu35_4947(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4943 +# 35| r35_4949(glval) = VariableAddress[x353] : +# 35| r35_4950(glval) = FunctionAddress[~String] : +# 35| v35_4951(void) = Call[~String] : func:r35_4950, this:r35_4949 +# 35| mu35_4952(unknown) = ^CallSideEffect : ~m? +# 35| v35_4953(void) = ^IndirectReadSideEffect[-1] : &:r35_4949, ~m? +# 35| mu35_4954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4949 +# 35| r35_4955(bool) = Constant[0] : +# 35| v35_4956(void) = ConditionalBranch : r35_4955 #-----| False -> Block 354 #-----| True -> Block 1026 -# 1081| Block 354 -# 1081| r1081_1(glval) = VariableAddress[x354] : -# 1081| mu1081_2(String) = Uninitialized[x354] : &:r1081_1 -# 1081| r1081_3(glval) = FunctionAddress[String] : -# 1081| v1081_4(void) = Call[String] : func:r1081_3, this:r1081_1 -# 1081| mu1081_5(unknown) = ^CallSideEffect : ~m? -# 1081| mu1081_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1081_1 -# 1082| r1082_1(glval) = VariableAddress[x354] : -# 1082| r1082_2(glval) = FunctionAddress[~String] : -# 1082| v1082_3(void) = Call[~String] : func:r1082_2, this:r1082_1 -# 1082| mu1082_4(unknown) = ^CallSideEffect : ~m? -# 1082| v1082_5(void) = ^IndirectReadSideEffect[-1] : &:r1082_1, ~m? -# 1082| mu1082_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1082_1 -# 1082| r1082_7(bool) = Constant[0] : -# 1082| v1082_8(void) = ConditionalBranch : r1082_7 +# 35| Block 354 +# 35| r35_4957(glval) = VariableAddress[x354] : +# 35| mu35_4958(String) = Uninitialized[x354] : &:r35_4957 +# 35| r35_4959(glval) = FunctionAddress[String] : +# 35| v35_4960(void) = Call[String] : func:r35_4959, this:r35_4957 +# 35| mu35_4961(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4957 +# 35| r35_4963(glval) = VariableAddress[x354] : +# 35| r35_4964(glval) = FunctionAddress[~String] : +# 35| v35_4965(void) = Call[~String] : func:r35_4964, this:r35_4963 +# 35| mu35_4966(unknown) = ^CallSideEffect : ~m? +# 35| v35_4967(void) = ^IndirectReadSideEffect[-1] : &:r35_4963, ~m? +# 35| mu35_4968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4963 +# 35| r35_4969(bool) = Constant[0] : +# 35| v35_4970(void) = ConditionalBranch : r35_4969 #-----| False -> Block 355 #-----| True -> Block 1026 -# 1084| Block 355 -# 1084| r1084_1(glval) = VariableAddress[x355] : -# 1084| mu1084_2(String) = Uninitialized[x355] : &:r1084_1 -# 1084| r1084_3(glval) = FunctionAddress[String] : -# 1084| v1084_4(void) = Call[String] : func:r1084_3, this:r1084_1 -# 1084| mu1084_5(unknown) = ^CallSideEffect : ~m? -# 1084| mu1084_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1084_1 -# 1085| r1085_1(glval) = VariableAddress[x355] : -# 1085| r1085_2(glval) = FunctionAddress[~String] : -# 1085| v1085_3(void) = Call[~String] : func:r1085_2, this:r1085_1 -# 1085| mu1085_4(unknown) = ^CallSideEffect : ~m? -# 1085| v1085_5(void) = ^IndirectReadSideEffect[-1] : &:r1085_1, ~m? -# 1085| mu1085_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1085_1 -# 1085| r1085_7(bool) = Constant[0] : -# 1085| v1085_8(void) = ConditionalBranch : r1085_7 +# 35| Block 355 +# 35| r35_4971(glval) = VariableAddress[x355] : +# 35| mu35_4972(String) = Uninitialized[x355] : &:r35_4971 +# 35| r35_4973(glval) = FunctionAddress[String] : +# 35| v35_4974(void) = Call[String] : func:r35_4973, this:r35_4971 +# 35| mu35_4975(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4971 +# 35| r35_4977(glval) = VariableAddress[x355] : +# 35| r35_4978(glval) = FunctionAddress[~String] : +# 35| v35_4979(void) = Call[~String] : func:r35_4978, this:r35_4977 +# 35| mu35_4980(unknown) = ^CallSideEffect : ~m? +# 35| v35_4981(void) = ^IndirectReadSideEffect[-1] : &:r35_4977, ~m? +# 35| mu35_4982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4977 +# 35| r35_4983(bool) = Constant[0] : +# 35| v35_4984(void) = ConditionalBranch : r35_4983 #-----| False -> Block 356 #-----| True -> Block 1026 -# 1087| Block 356 -# 1087| r1087_1(glval) = VariableAddress[x356] : -# 1087| mu1087_2(String) = Uninitialized[x356] : &:r1087_1 -# 1087| r1087_3(glval) = FunctionAddress[String] : -# 1087| v1087_4(void) = Call[String] : func:r1087_3, this:r1087_1 -# 1087| mu1087_5(unknown) = ^CallSideEffect : ~m? -# 1087| mu1087_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1087_1 -# 1088| r1088_1(glval) = VariableAddress[x356] : -# 1088| r1088_2(glval) = FunctionAddress[~String] : -# 1088| v1088_3(void) = Call[~String] : func:r1088_2, this:r1088_1 -# 1088| mu1088_4(unknown) = ^CallSideEffect : ~m? -# 1088| v1088_5(void) = ^IndirectReadSideEffect[-1] : &:r1088_1, ~m? -# 1088| mu1088_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1088_1 -# 1088| r1088_7(bool) = Constant[0] : -# 1088| v1088_8(void) = ConditionalBranch : r1088_7 +# 35| Block 356 +# 35| r35_4985(glval) = VariableAddress[x356] : +# 35| mu35_4986(String) = Uninitialized[x356] : &:r35_4985 +# 35| r35_4987(glval) = FunctionAddress[String] : +# 35| v35_4988(void) = Call[String] : func:r35_4987, this:r35_4985 +# 35| mu35_4989(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4985 +# 35| r35_4991(glval) = VariableAddress[x356] : +# 35| r35_4992(glval) = FunctionAddress[~String] : +# 35| v35_4993(void) = Call[~String] : func:r35_4992, this:r35_4991 +# 35| mu35_4994(unknown) = ^CallSideEffect : ~m? +# 35| v35_4995(void) = ^IndirectReadSideEffect[-1] : &:r35_4991, ~m? +# 35| mu35_4996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4991 +# 35| r35_4997(bool) = Constant[0] : +# 35| v35_4998(void) = ConditionalBranch : r35_4997 #-----| False -> Block 357 #-----| True -> Block 1026 -# 1090| Block 357 -# 1090| r1090_1(glval) = VariableAddress[x357] : -# 1090| mu1090_2(String) = Uninitialized[x357] : &:r1090_1 -# 1090| r1090_3(glval) = FunctionAddress[String] : -# 1090| v1090_4(void) = Call[String] : func:r1090_3, this:r1090_1 -# 1090| mu1090_5(unknown) = ^CallSideEffect : ~m? -# 1090| mu1090_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1090_1 -# 1091| r1091_1(glval) = VariableAddress[x357] : -# 1091| r1091_2(glval) = FunctionAddress[~String] : -# 1091| v1091_3(void) = Call[~String] : func:r1091_2, this:r1091_1 -# 1091| mu1091_4(unknown) = ^CallSideEffect : ~m? -# 1091| v1091_5(void) = ^IndirectReadSideEffect[-1] : &:r1091_1, ~m? -# 1091| mu1091_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1091_1 -# 1091| r1091_7(bool) = Constant[0] : -# 1091| v1091_8(void) = ConditionalBranch : r1091_7 +# 35| Block 357 +# 35| r35_4999(glval) = VariableAddress[x357] : +# 35| mu35_5000(String) = Uninitialized[x357] : &:r35_4999 +# 35| r35_5001(glval) = FunctionAddress[String] : +# 35| v35_5002(void) = Call[String] : func:r35_5001, this:r35_4999 +# 35| mu35_5003(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4999 +# 35| r35_5005(glval) = VariableAddress[x357] : +# 35| r35_5006(glval) = FunctionAddress[~String] : +# 35| v35_5007(void) = Call[~String] : func:r35_5006, this:r35_5005 +# 35| mu35_5008(unknown) = ^CallSideEffect : ~m? +# 35| v35_5009(void) = ^IndirectReadSideEffect[-1] : &:r35_5005, ~m? +# 35| mu35_5010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5005 +# 35| r35_5011(bool) = Constant[0] : +# 35| v35_5012(void) = ConditionalBranch : r35_5011 #-----| False -> Block 358 #-----| True -> Block 1026 -# 1093| Block 358 -# 1093| r1093_1(glval) = VariableAddress[x358] : -# 1093| mu1093_2(String) = Uninitialized[x358] : &:r1093_1 -# 1093| r1093_3(glval) = FunctionAddress[String] : -# 1093| v1093_4(void) = Call[String] : func:r1093_3, this:r1093_1 -# 1093| mu1093_5(unknown) = ^CallSideEffect : ~m? -# 1093| mu1093_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1093_1 -# 1094| r1094_1(glval) = VariableAddress[x358] : -# 1094| r1094_2(glval) = FunctionAddress[~String] : -# 1094| v1094_3(void) = Call[~String] : func:r1094_2, this:r1094_1 -# 1094| mu1094_4(unknown) = ^CallSideEffect : ~m? -# 1094| v1094_5(void) = ^IndirectReadSideEffect[-1] : &:r1094_1, ~m? -# 1094| mu1094_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1094_1 -# 1094| r1094_7(bool) = Constant[0] : -# 1094| v1094_8(void) = ConditionalBranch : r1094_7 +# 35| Block 358 +# 35| r35_5013(glval) = VariableAddress[x358] : +# 35| mu35_5014(String) = Uninitialized[x358] : &:r35_5013 +# 35| r35_5015(glval) = FunctionAddress[String] : +# 35| v35_5016(void) = Call[String] : func:r35_5015, this:r35_5013 +# 35| mu35_5017(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5013 +# 35| r35_5019(glval) = VariableAddress[x358] : +# 35| r35_5020(glval) = FunctionAddress[~String] : +# 35| v35_5021(void) = Call[~String] : func:r35_5020, this:r35_5019 +# 35| mu35_5022(unknown) = ^CallSideEffect : ~m? +# 35| v35_5023(void) = ^IndirectReadSideEffect[-1] : &:r35_5019, ~m? +# 35| mu35_5024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5019 +# 35| r35_5025(bool) = Constant[0] : +# 35| v35_5026(void) = ConditionalBranch : r35_5025 #-----| False -> Block 359 #-----| True -> Block 1026 -# 1096| Block 359 -# 1096| r1096_1(glval) = VariableAddress[x359] : -# 1096| mu1096_2(String) = Uninitialized[x359] : &:r1096_1 -# 1096| r1096_3(glval) = FunctionAddress[String] : -# 1096| v1096_4(void) = Call[String] : func:r1096_3, this:r1096_1 -# 1096| mu1096_5(unknown) = ^CallSideEffect : ~m? -# 1096| mu1096_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1096_1 -# 1097| r1097_1(glval) = VariableAddress[x359] : -# 1097| r1097_2(glval) = FunctionAddress[~String] : -# 1097| v1097_3(void) = Call[~String] : func:r1097_2, this:r1097_1 -# 1097| mu1097_4(unknown) = ^CallSideEffect : ~m? -# 1097| v1097_5(void) = ^IndirectReadSideEffect[-1] : &:r1097_1, ~m? -# 1097| mu1097_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1097_1 -# 1097| r1097_7(bool) = Constant[0] : -# 1097| v1097_8(void) = ConditionalBranch : r1097_7 +# 35| Block 359 +# 35| r35_5027(glval) = VariableAddress[x359] : +# 35| mu35_5028(String) = Uninitialized[x359] : &:r35_5027 +# 35| r35_5029(glval) = FunctionAddress[String] : +# 35| v35_5030(void) = Call[String] : func:r35_5029, this:r35_5027 +# 35| mu35_5031(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5027 +# 35| r35_5033(glval) = VariableAddress[x359] : +# 35| r35_5034(glval) = FunctionAddress[~String] : +# 35| v35_5035(void) = Call[~String] : func:r35_5034, this:r35_5033 +# 35| mu35_5036(unknown) = ^CallSideEffect : ~m? +# 35| v35_5037(void) = ^IndirectReadSideEffect[-1] : &:r35_5033, ~m? +# 35| mu35_5038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5033 +# 35| r35_5039(bool) = Constant[0] : +# 35| v35_5040(void) = ConditionalBranch : r35_5039 #-----| False -> Block 360 #-----| True -> Block 1026 -# 1099| Block 360 -# 1099| r1099_1(glval) = VariableAddress[x360] : -# 1099| mu1099_2(String) = Uninitialized[x360] : &:r1099_1 -# 1099| r1099_3(glval) = FunctionAddress[String] : -# 1099| v1099_4(void) = Call[String] : func:r1099_3, this:r1099_1 -# 1099| mu1099_5(unknown) = ^CallSideEffect : ~m? -# 1099| mu1099_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1099_1 -# 1100| r1100_1(glval) = VariableAddress[x360] : -# 1100| r1100_2(glval) = FunctionAddress[~String] : -# 1100| v1100_3(void) = Call[~String] : func:r1100_2, this:r1100_1 -# 1100| mu1100_4(unknown) = ^CallSideEffect : ~m? -# 1100| v1100_5(void) = ^IndirectReadSideEffect[-1] : &:r1100_1, ~m? -# 1100| mu1100_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1100_1 -# 1100| r1100_7(bool) = Constant[0] : -# 1100| v1100_8(void) = ConditionalBranch : r1100_7 +# 35| Block 360 +# 35| r35_5041(glval) = VariableAddress[x360] : +# 35| mu35_5042(String) = Uninitialized[x360] : &:r35_5041 +# 35| r35_5043(glval) = FunctionAddress[String] : +# 35| v35_5044(void) = Call[String] : func:r35_5043, this:r35_5041 +# 35| mu35_5045(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5041 +# 35| r35_5047(glval) = VariableAddress[x360] : +# 35| r35_5048(glval) = FunctionAddress[~String] : +# 35| v35_5049(void) = Call[~String] : func:r35_5048, this:r35_5047 +# 35| mu35_5050(unknown) = ^CallSideEffect : ~m? +# 35| v35_5051(void) = ^IndirectReadSideEffect[-1] : &:r35_5047, ~m? +# 35| mu35_5052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5047 +# 35| r35_5053(bool) = Constant[0] : +# 35| v35_5054(void) = ConditionalBranch : r35_5053 #-----| False -> Block 361 #-----| True -> Block 1026 -# 1102| Block 361 -# 1102| r1102_1(glval) = VariableAddress[x361] : -# 1102| mu1102_2(String) = Uninitialized[x361] : &:r1102_1 -# 1102| r1102_3(glval) = FunctionAddress[String] : -# 1102| v1102_4(void) = Call[String] : func:r1102_3, this:r1102_1 -# 1102| mu1102_5(unknown) = ^CallSideEffect : ~m? -# 1102| mu1102_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1102_1 -# 1103| r1103_1(glval) = VariableAddress[x361] : -# 1103| r1103_2(glval) = FunctionAddress[~String] : -# 1103| v1103_3(void) = Call[~String] : func:r1103_2, this:r1103_1 -# 1103| mu1103_4(unknown) = ^CallSideEffect : ~m? -# 1103| v1103_5(void) = ^IndirectReadSideEffect[-1] : &:r1103_1, ~m? -# 1103| mu1103_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1103_1 -# 1103| r1103_7(bool) = Constant[0] : -# 1103| v1103_8(void) = ConditionalBranch : r1103_7 +# 35| Block 361 +# 35| r35_5055(glval) = VariableAddress[x361] : +# 35| mu35_5056(String) = Uninitialized[x361] : &:r35_5055 +# 35| r35_5057(glval) = FunctionAddress[String] : +# 35| v35_5058(void) = Call[String] : func:r35_5057, this:r35_5055 +# 35| mu35_5059(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5055 +# 35| r35_5061(glval) = VariableAddress[x361] : +# 35| r35_5062(glval) = FunctionAddress[~String] : +# 35| v35_5063(void) = Call[~String] : func:r35_5062, this:r35_5061 +# 35| mu35_5064(unknown) = ^CallSideEffect : ~m? +# 35| v35_5065(void) = ^IndirectReadSideEffect[-1] : &:r35_5061, ~m? +# 35| mu35_5066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5061 +# 35| r35_5067(bool) = Constant[0] : +# 35| v35_5068(void) = ConditionalBranch : r35_5067 #-----| False -> Block 362 #-----| True -> Block 1026 -# 1105| Block 362 -# 1105| r1105_1(glval) = VariableAddress[x362] : -# 1105| mu1105_2(String) = Uninitialized[x362] : &:r1105_1 -# 1105| r1105_3(glval) = FunctionAddress[String] : -# 1105| v1105_4(void) = Call[String] : func:r1105_3, this:r1105_1 -# 1105| mu1105_5(unknown) = ^CallSideEffect : ~m? -# 1105| mu1105_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1105_1 -# 1106| r1106_1(glval) = VariableAddress[x362] : -# 1106| r1106_2(glval) = FunctionAddress[~String] : -# 1106| v1106_3(void) = Call[~String] : func:r1106_2, this:r1106_1 -# 1106| mu1106_4(unknown) = ^CallSideEffect : ~m? -# 1106| v1106_5(void) = ^IndirectReadSideEffect[-1] : &:r1106_1, ~m? -# 1106| mu1106_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1106_1 -# 1106| r1106_7(bool) = Constant[0] : -# 1106| v1106_8(void) = ConditionalBranch : r1106_7 +# 35| Block 362 +# 35| r35_5069(glval) = VariableAddress[x362] : +# 35| mu35_5070(String) = Uninitialized[x362] : &:r35_5069 +# 35| r35_5071(glval) = FunctionAddress[String] : +# 35| v35_5072(void) = Call[String] : func:r35_5071, this:r35_5069 +# 35| mu35_5073(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5069 +# 35| r35_5075(glval) = VariableAddress[x362] : +# 35| r35_5076(glval) = FunctionAddress[~String] : +# 35| v35_5077(void) = Call[~String] : func:r35_5076, this:r35_5075 +# 35| mu35_5078(unknown) = ^CallSideEffect : ~m? +# 35| v35_5079(void) = ^IndirectReadSideEffect[-1] : &:r35_5075, ~m? +# 35| mu35_5080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5075 +# 35| r35_5081(bool) = Constant[0] : +# 35| v35_5082(void) = ConditionalBranch : r35_5081 #-----| False -> Block 363 #-----| True -> Block 1026 -# 1108| Block 363 -# 1108| r1108_1(glval) = VariableAddress[x363] : -# 1108| mu1108_2(String) = Uninitialized[x363] : &:r1108_1 -# 1108| r1108_3(glval) = FunctionAddress[String] : -# 1108| v1108_4(void) = Call[String] : func:r1108_3, this:r1108_1 -# 1108| mu1108_5(unknown) = ^CallSideEffect : ~m? -# 1108| mu1108_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1108_1 -# 1109| r1109_1(glval) = VariableAddress[x363] : -# 1109| r1109_2(glval) = FunctionAddress[~String] : -# 1109| v1109_3(void) = Call[~String] : func:r1109_2, this:r1109_1 -# 1109| mu1109_4(unknown) = ^CallSideEffect : ~m? -# 1109| v1109_5(void) = ^IndirectReadSideEffect[-1] : &:r1109_1, ~m? -# 1109| mu1109_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1109_1 -# 1109| r1109_7(bool) = Constant[0] : -# 1109| v1109_8(void) = ConditionalBranch : r1109_7 +# 35| Block 363 +# 35| r35_5083(glval) = VariableAddress[x363] : +# 35| mu35_5084(String) = Uninitialized[x363] : &:r35_5083 +# 35| r35_5085(glval) = FunctionAddress[String] : +# 35| v35_5086(void) = Call[String] : func:r35_5085, this:r35_5083 +# 35| mu35_5087(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5083 +# 35| r35_5089(glval) = VariableAddress[x363] : +# 35| r35_5090(glval) = FunctionAddress[~String] : +# 35| v35_5091(void) = Call[~String] : func:r35_5090, this:r35_5089 +# 35| mu35_5092(unknown) = ^CallSideEffect : ~m? +# 35| v35_5093(void) = ^IndirectReadSideEffect[-1] : &:r35_5089, ~m? +# 35| mu35_5094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5089 +# 35| r35_5095(bool) = Constant[0] : +# 35| v35_5096(void) = ConditionalBranch : r35_5095 #-----| False -> Block 364 #-----| True -> Block 1026 -# 1111| Block 364 -# 1111| r1111_1(glval) = VariableAddress[x364] : -# 1111| mu1111_2(String) = Uninitialized[x364] : &:r1111_1 -# 1111| r1111_3(glval) = FunctionAddress[String] : -# 1111| v1111_4(void) = Call[String] : func:r1111_3, this:r1111_1 -# 1111| mu1111_5(unknown) = ^CallSideEffect : ~m? -# 1111| mu1111_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1111_1 -# 1112| r1112_1(glval) = VariableAddress[x364] : -# 1112| r1112_2(glval) = FunctionAddress[~String] : -# 1112| v1112_3(void) = Call[~String] : func:r1112_2, this:r1112_1 -# 1112| mu1112_4(unknown) = ^CallSideEffect : ~m? -# 1112| v1112_5(void) = ^IndirectReadSideEffect[-1] : &:r1112_1, ~m? -# 1112| mu1112_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1112_1 -# 1112| r1112_7(bool) = Constant[0] : -# 1112| v1112_8(void) = ConditionalBranch : r1112_7 +# 35| Block 364 +# 35| r35_5097(glval) = VariableAddress[x364] : +# 35| mu35_5098(String) = Uninitialized[x364] : &:r35_5097 +# 35| r35_5099(glval) = FunctionAddress[String] : +# 35| v35_5100(void) = Call[String] : func:r35_5099, this:r35_5097 +# 35| mu35_5101(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5097 +# 35| r35_5103(glval) = VariableAddress[x364] : +# 35| r35_5104(glval) = FunctionAddress[~String] : +# 35| v35_5105(void) = Call[~String] : func:r35_5104, this:r35_5103 +# 35| mu35_5106(unknown) = ^CallSideEffect : ~m? +# 35| v35_5107(void) = ^IndirectReadSideEffect[-1] : &:r35_5103, ~m? +# 35| mu35_5108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5103 +# 35| r35_5109(bool) = Constant[0] : +# 35| v35_5110(void) = ConditionalBranch : r35_5109 #-----| False -> Block 365 #-----| True -> Block 1026 -# 1114| Block 365 -# 1114| r1114_1(glval) = VariableAddress[x365] : -# 1114| mu1114_2(String) = Uninitialized[x365] : &:r1114_1 -# 1114| r1114_3(glval) = FunctionAddress[String] : -# 1114| v1114_4(void) = Call[String] : func:r1114_3, this:r1114_1 -# 1114| mu1114_5(unknown) = ^CallSideEffect : ~m? -# 1114| mu1114_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1114_1 -# 1115| r1115_1(glval) = VariableAddress[x365] : -# 1115| r1115_2(glval) = FunctionAddress[~String] : -# 1115| v1115_3(void) = Call[~String] : func:r1115_2, this:r1115_1 -# 1115| mu1115_4(unknown) = ^CallSideEffect : ~m? -# 1115| v1115_5(void) = ^IndirectReadSideEffect[-1] : &:r1115_1, ~m? -# 1115| mu1115_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1115_1 -# 1115| r1115_7(bool) = Constant[0] : -# 1115| v1115_8(void) = ConditionalBranch : r1115_7 +# 35| Block 365 +# 35| r35_5111(glval) = VariableAddress[x365] : +# 35| mu35_5112(String) = Uninitialized[x365] : &:r35_5111 +# 35| r35_5113(glval) = FunctionAddress[String] : +# 35| v35_5114(void) = Call[String] : func:r35_5113, this:r35_5111 +# 35| mu35_5115(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5111 +# 35| r35_5117(glval) = VariableAddress[x365] : +# 35| r35_5118(glval) = FunctionAddress[~String] : +# 35| v35_5119(void) = Call[~String] : func:r35_5118, this:r35_5117 +# 35| mu35_5120(unknown) = ^CallSideEffect : ~m? +# 35| v35_5121(void) = ^IndirectReadSideEffect[-1] : &:r35_5117, ~m? +# 35| mu35_5122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5117 +# 35| r35_5123(bool) = Constant[0] : +# 35| v35_5124(void) = ConditionalBranch : r35_5123 #-----| False -> Block 366 #-----| True -> Block 1026 -# 1117| Block 366 -# 1117| r1117_1(glval) = VariableAddress[x366] : -# 1117| mu1117_2(String) = Uninitialized[x366] : &:r1117_1 -# 1117| r1117_3(glval) = FunctionAddress[String] : -# 1117| v1117_4(void) = Call[String] : func:r1117_3, this:r1117_1 -# 1117| mu1117_5(unknown) = ^CallSideEffect : ~m? -# 1117| mu1117_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1117_1 -# 1118| r1118_1(glval) = VariableAddress[x366] : -# 1118| r1118_2(glval) = FunctionAddress[~String] : -# 1118| v1118_3(void) = Call[~String] : func:r1118_2, this:r1118_1 -# 1118| mu1118_4(unknown) = ^CallSideEffect : ~m? -# 1118| v1118_5(void) = ^IndirectReadSideEffect[-1] : &:r1118_1, ~m? -# 1118| mu1118_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1118_1 -# 1118| r1118_7(bool) = Constant[0] : -# 1118| v1118_8(void) = ConditionalBranch : r1118_7 +# 35| Block 366 +# 35| r35_5125(glval) = VariableAddress[x366] : +# 35| mu35_5126(String) = Uninitialized[x366] : &:r35_5125 +# 35| r35_5127(glval) = FunctionAddress[String] : +# 35| v35_5128(void) = Call[String] : func:r35_5127, this:r35_5125 +# 35| mu35_5129(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5125 +# 35| r35_5131(glval) = VariableAddress[x366] : +# 35| r35_5132(glval) = FunctionAddress[~String] : +# 35| v35_5133(void) = Call[~String] : func:r35_5132, this:r35_5131 +# 35| mu35_5134(unknown) = ^CallSideEffect : ~m? +# 35| v35_5135(void) = ^IndirectReadSideEffect[-1] : &:r35_5131, ~m? +# 35| mu35_5136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5131 +# 35| r35_5137(bool) = Constant[0] : +# 35| v35_5138(void) = ConditionalBranch : r35_5137 #-----| False -> Block 367 #-----| True -> Block 1026 -# 1120| Block 367 -# 1120| r1120_1(glval) = VariableAddress[x367] : -# 1120| mu1120_2(String) = Uninitialized[x367] : &:r1120_1 -# 1120| r1120_3(glval) = FunctionAddress[String] : -# 1120| v1120_4(void) = Call[String] : func:r1120_3, this:r1120_1 -# 1120| mu1120_5(unknown) = ^CallSideEffect : ~m? -# 1120| mu1120_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1120_1 -# 1121| r1121_1(glval) = VariableAddress[x367] : -# 1121| r1121_2(glval) = FunctionAddress[~String] : -# 1121| v1121_3(void) = Call[~String] : func:r1121_2, this:r1121_1 -# 1121| mu1121_4(unknown) = ^CallSideEffect : ~m? -# 1121| v1121_5(void) = ^IndirectReadSideEffect[-1] : &:r1121_1, ~m? -# 1121| mu1121_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1121_1 -# 1121| r1121_7(bool) = Constant[0] : -# 1121| v1121_8(void) = ConditionalBranch : r1121_7 +# 35| Block 367 +# 35| r35_5139(glval) = VariableAddress[x367] : +# 35| mu35_5140(String) = Uninitialized[x367] : &:r35_5139 +# 35| r35_5141(glval) = FunctionAddress[String] : +# 35| v35_5142(void) = Call[String] : func:r35_5141, this:r35_5139 +# 35| mu35_5143(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5139 +# 35| r35_5145(glval) = VariableAddress[x367] : +# 35| r35_5146(glval) = FunctionAddress[~String] : +# 35| v35_5147(void) = Call[~String] : func:r35_5146, this:r35_5145 +# 35| mu35_5148(unknown) = ^CallSideEffect : ~m? +# 35| v35_5149(void) = ^IndirectReadSideEffect[-1] : &:r35_5145, ~m? +# 35| mu35_5150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5145 +# 35| r35_5151(bool) = Constant[0] : +# 35| v35_5152(void) = ConditionalBranch : r35_5151 #-----| False -> Block 368 #-----| True -> Block 1026 -# 1123| Block 368 -# 1123| r1123_1(glval) = VariableAddress[x368] : -# 1123| mu1123_2(String) = Uninitialized[x368] : &:r1123_1 -# 1123| r1123_3(glval) = FunctionAddress[String] : -# 1123| v1123_4(void) = Call[String] : func:r1123_3, this:r1123_1 -# 1123| mu1123_5(unknown) = ^CallSideEffect : ~m? -# 1123| mu1123_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1123_1 -# 1124| r1124_1(glval) = VariableAddress[x368] : -# 1124| r1124_2(glval) = FunctionAddress[~String] : -# 1124| v1124_3(void) = Call[~String] : func:r1124_2, this:r1124_1 -# 1124| mu1124_4(unknown) = ^CallSideEffect : ~m? -# 1124| v1124_5(void) = ^IndirectReadSideEffect[-1] : &:r1124_1, ~m? -# 1124| mu1124_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1124_1 -# 1124| r1124_7(bool) = Constant[0] : -# 1124| v1124_8(void) = ConditionalBranch : r1124_7 +# 35| Block 368 +# 35| r35_5153(glval) = VariableAddress[x368] : +# 35| mu35_5154(String) = Uninitialized[x368] : &:r35_5153 +# 35| r35_5155(glval) = FunctionAddress[String] : +# 35| v35_5156(void) = Call[String] : func:r35_5155, this:r35_5153 +# 35| mu35_5157(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5153 +# 35| r35_5159(glval) = VariableAddress[x368] : +# 35| r35_5160(glval) = FunctionAddress[~String] : +# 35| v35_5161(void) = Call[~String] : func:r35_5160, this:r35_5159 +# 35| mu35_5162(unknown) = ^CallSideEffect : ~m? +# 35| v35_5163(void) = ^IndirectReadSideEffect[-1] : &:r35_5159, ~m? +# 35| mu35_5164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5159 +# 35| r35_5165(bool) = Constant[0] : +# 35| v35_5166(void) = ConditionalBranch : r35_5165 #-----| False -> Block 369 #-----| True -> Block 1026 -# 1126| Block 369 -# 1126| r1126_1(glval) = VariableAddress[x369] : -# 1126| mu1126_2(String) = Uninitialized[x369] : &:r1126_1 -# 1126| r1126_3(glval) = FunctionAddress[String] : -# 1126| v1126_4(void) = Call[String] : func:r1126_3, this:r1126_1 -# 1126| mu1126_5(unknown) = ^CallSideEffect : ~m? -# 1126| mu1126_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[x369] : -# 1127| r1127_2(glval) = FunctionAddress[~String] : -# 1127| v1127_3(void) = Call[~String] : func:r1127_2, this:r1127_1 -# 1127| mu1127_4(unknown) = ^CallSideEffect : ~m? -# 1127| v1127_5(void) = ^IndirectReadSideEffect[-1] : &:r1127_1, ~m? -# 1127| mu1127_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1127_1 -# 1127| r1127_7(bool) = Constant[0] : -# 1127| v1127_8(void) = ConditionalBranch : r1127_7 +# 35| Block 369 +# 35| r35_5167(glval) = VariableAddress[x369] : +# 35| mu35_5168(String) = Uninitialized[x369] : &:r35_5167 +# 35| r35_5169(glval) = FunctionAddress[String] : +# 35| v35_5170(void) = Call[String] : func:r35_5169, this:r35_5167 +# 35| mu35_5171(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5167 +# 35| r35_5173(glval) = VariableAddress[x369] : +# 35| r35_5174(glval) = FunctionAddress[~String] : +# 35| v35_5175(void) = Call[~String] : func:r35_5174, this:r35_5173 +# 35| mu35_5176(unknown) = ^CallSideEffect : ~m? +# 35| v35_5177(void) = ^IndirectReadSideEffect[-1] : &:r35_5173, ~m? +# 35| mu35_5178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5173 +# 35| r35_5179(bool) = Constant[0] : +# 35| v35_5180(void) = ConditionalBranch : r35_5179 #-----| False -> Block 370 #-----| True -> Block 1026 -# 1129| Block 370 -# 1129| r1129_1(glval) = VariableAddress[x370] : -# 1129| mu1129_2(String) = Uninitialized[x370] : &:r1129_1 -# 1129| r1129_3(glval) = FunctionAddress[String] : -# 1129| v1129_4(void) = Call[String] : func:r1129_3, this:r1129_1 -# 1129| mu1129_5(unknown) = ^CallSideEffect : ~m? -# 1129| mu1129_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1129_1 -# 1130| r1130_1(glval) = VariableAddress[x370] : -# 1130| r1130_2(glval) = FunctionAddress[~String] : -# 1130| v1130_3(void) = Call[~String] : func:r1130_2, this:r1130_1 -# 1130| mu1130_4(unknown) = ^CallSideEffect : ~m? -# 1130| v1130_5(void) = ^IndirectReadSideEffect[-1] : &:r1130_1, ~m? -# 1130| mu1130_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1130_1 -# 1130| r1130_7(bool) = Constant[0] : -# 1130| v1130_8(void) = ConditionalBranch : r1130_7 +# 35| Block 370 +# 35| r35_5181(glval) = VariableAddress[x370] : +# 35| mu35_5182(String) = Uninitialized[x370] : &:r35_5181 +# 35| r35_5183(glval) = FunctionAddress[String] : +# 35| v35_5184(void) = Call[String] : func:r35_5183, this:r35_5181 +# 35| mu35_5185(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5181 +# 35| r35_5187(glval) = VariableAddress[x370] : +# 35| r35_5188(glval) = FunctionAddress[~String] : +# 35| v35_5189(void) = Call[~String] : func:r35_5188, this:r35_5187 +# 35| mu35_5190(unknown) = ^CallSideEffect : ~m? +# 35| v35_5191(void) = ^IndirectReadSideEffect[-1] : &:r35_5187, ~m? +# 35| mu35_5192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5187 +# 35| r35_5193(bool) = Constant[0] : +# 35| v35_5194(void) = ConditionalBranch : r35_5193 #-----| False -> Block 371 #-----| True -> Block 1026 -# 1132| Block 371 -# 1132| r1132_1(glval) = VariableAddress[x371] : -# 1132| mu1132_2(String) = Uninitialized[x371] : &:r1132_1 -# 1132| r1132_3(glval) = FunctionAddress[String] : -# 1132| v1132_4(void) = Call[String] : func:r1132_3, this:r1132_1 -# 1132| mu1132_5(unknown) = ^CallSideEffect : ~m? -# 1132| mu1132_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1132_1 -# 1133| r1133_1(glval) = VariableAddress[x371] : -# 1133| r1133_2(glval) = FunctionAddress[~String] : -# 1133| v1133_3(void) = Call[~String] : func:r1133_2, this:r1133_1 -# 1133| mu1133_4(unknown) = ^CallSideEffect : ~m? -# 1133| v1133_5(void) = ^IndirectReadSideEffect[-1] : &:r1133_1, ~m? -# 1133| mu1133_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1133_1 -# 1133| r1133_7(bool) = Constant[0] : -# 1133| v1133_8(void) = ConditionalBranch : r1133_7 +# 35| Block 371 +# 35| r35_5195(glval) = VariableAddress[x371] : +# 35| mu35_5196(String) = Uninitialized[x371] : &:r35_5195 +# 35| r35_5197(glval) = FunctionAddress[String] : +# 35| v35_5198(void) = Call[String] : func:r35_5197, this:r35_5195 +# 35| mu35_5199(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5195 +# 35| r35_5201(glval) = VariableAddress[x371] : +# 35| r35_5202(glval) = FunctionAddress[~String] : +# 35| v35_5203(void) = Call[~String] : func:r35_5202, this:r35_5201 +# 35| mu35_5204(unknown) = ^CallSideEffect : ~m? +# 35| v35_5205(void) = ^IndirectReadSideEffect[-1] : &:r35_5201, ~m? +# 35| mu35_5206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5201 +# 35| r35_5207(bool) = Constant[0] : +# 35| v35_5208(void) = ConditionalBranch : r35_5207 #-----| False -> Block 372 #-----| True -> Block 1026 -# 1135| Block 372 -# 1135| r1135_1(glval) = VariableAddress[x372] : -# 1135| mu1135_2(String) = Uninitialized[x372] : &:r1135_1 -# 1135| r1135_3(glval) = FunctionAddress[String] : -# 1135| v1135_4(void) = Call[String] : func:r1135_3, this:r1135_1 -# 1135| mu1135_5(unknown) = ^CallSideEffect : ~m? -# 1135| mu1135_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1135_1 -# 1136| r1136_1(glval) = VariableAddress[x372] : -# 1136| r1136_2(glval) = FunctionAddress[~String] : -# 1136| v1136_3(void) = Call[~String] : func:r1136_2, this:r1136_1 -# 1136| mu1136_4(unknown) = ^CallSideEffect : ~m? -# 1136| v1136_5(void) = ^IndirectReadSideEffect[-1] : &:r1136_1, ~m? -# 1136| mu1136_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1136_1 -# 1136| r1136_7(bool) = Constant[0] : -# 1136| v1136_8(void) = ConditionalBranch : r1136_7 +# 35| Block 372 +# 35| r35_5209(glval) = VariableAddress[x372] : +# 35| mu35_5210(String) = Uninitialized[x372] : &:r35_5209 +# 35| r35_5211(glval) = FunctionAddress[String] : +# 35| v35_5212(void) = Call[String] : func:r35_5211, this:r35_5209 +# 35| mu35_5213(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5209 +# 35| r35_5215(glval) = VariableAddress[x372] : +# 35| r35_5216(glval) = FunctionAddress[~String] : +# 35| v35_5217(void) = Call[~String] : func:r35_5216, this:r35_5215 +# 35| mu35_5218(unknown) = ^CallSideEffect : ~m? +# 35| v35_5219(void) = ^IndirectReadSideEffect[-1] : &:r35_5215, ~m? +# 35| mu35_5220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5215 +# 35| r35_5221(bool) = Constant[0] : +# 35| v35_5222(void) = ConditionalBranch : r35_5221 #-----| False -> Block 373 #-----| True -> Block 1026 -# 1138| Block 373 -# 1138| r1138_1(glval) = VariableAddress[x373] : -# 1138| mu1138_2(String) = Uninitialized[x373] : &:r1138_1 -# 1138| r1138_3(glval) = FunctionAddress[String] : -# 1138| v1138_4(void) = Call[String] : func:r1138_3, this:r1138_1 -# 1138| mu1138_5(unknown) = ^CallSideEffect : ~m? -# 1138| mu1138_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1138_1 -# 1139| r1139_1(glval) = VariableAddress[x373] : -# 1139| r1139_2(glval) = FunctionAddress[~String] : -# 1139| v1139_3(void) = Call[~String] : func:r1139_2, this:r1139_1 -# 1139| mu1139_4(unknown) = ^CallSideEffect : ~m? -# 1139| v1139_5(void) = ^IndirectReadSideEffect[-1] : &:r1139_1, ~m? -# 1139| mu1139_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1139_1 -# 1139| r1139_7(bool) = Constant[0] : -# 1139| v1139_8(void) = ConditionalBranch : r1139_7 +# 35| Block 373 +# 35| r35_5223(glval) = VariableAddress[x373] : +# 35| mu35_5224(String) = Uninitialized[x373] : &:r35_5223 +# 35| r35_5225(glval) = FunctionAddress[String] : +# 35| v35_5226(void) = Call[String] : func:r35_5225, this:r35_5223 +# 35| mu35_5227(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5223 +# 35| r35_5229(glval) = VariableAddress[x373] : +# 35| r35_5230(glval) = FunctionAddress[~String] : +# 35| v35_5231(void) = Call[~String] : func:r35_5230, this:r35_5229 +# 35| mu35_5232(unknown) = ^CallSideEffect : ~m? +# 35| v35_5233(void) = ^IndirectReadSideEffect[-1] : &:r35_5229, ~m? +# 35| mu35_5234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5229 +# 35| r35_5235(bool) = Constant[0] : +# 35| v35_5236(void) = ConditionalBranch : r35_5235 #-----| False -> Block 374 #-----| True -> Block 1026 -# 1141| Block 374 -# 1141| r1141_1(glval) = VariableAddress[x374] : -# 1141| mu1141_2(String) = Uninitialized[x374] : &:r1141_1 -# 1141| r1141_3(glval) = FunctionAddress[String] : -# 1141| v1141_4(void) = Call[String] : func:r1141_3, this:r1141_1 -# 1141| mu1141_5(unknown) = ^CallSideEffect : ~m? -# 1141| mu1141_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1141_1 -# 1142| r1142_1(glval) = VariableAddress[x374] : -# 1142| r1142_2(glval) = FunctionAddress[~String] : -# 1142| v1142_3(void) = Call[~String] : func:r1142_2, this:r1142_1 -# 1142| mu1142_4(unknown) = ^CallSideEffect : ~m? -# 1142| v1142_5(void) = ^IndirectReadSideEffect[-1] : &:r1142_1, ~m? -# 1142| mu1142_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1142_1 -# 1142| r1142_7(bool) = Constant[0] : -# 1142| v1142_8(void) = ConditionalBranch : r1142_7 +# 35| Block 374 +# 35| r35_5237(glval) = VariableAddress[x374] : +# 35| mu35_5238(String) = Uninitialized[x374] : &:r35_5237 +# 35| r35_5239(glval) = FunctionAddress[String] : +# 35| v35_5240(void) = Call[String] : func:r35_5239, this:r35_5237 +# 35| mu35_5241(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5237 +# 35| r35_5243(glval) = VariableAddress[x374] : +# 35| r35_5244(glval) = FunctionAddress[~String] : +# 35| v35_5245(void) = Call[~String] : func:r35_5244, this:r35_5243 +# 35| mu35_5246(unknown) = ^CallSideEffect : ~m? +# 35| v35_5247(void) = ^IndirectReadSideEffect[-1] : &:r35_5243, ~m? +# 35| mu35_5248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5243 +# 35| r35_5249(bool) = Constant[0] : +# 35| v35_5250(void) = ConditionalBranch : r35_5249 #-----| False -> Block 375 #-----| True -> Block 1026 -# 1144| Block 375 -# 1144| r1144_1(glval) = VariableAddress[x375] : -# 1144| mu1144_2(String) = Uninitialized[x375] : &:r1144_1 -# 1144| r1144_3(glval) = FunctionAddress[String] : -# 1144| v1144_4(void) = Call[String] : func:r1144_3, this:r1144_1 -# 1144| mu1144_5(unknown) = ^CallSideEffect : ~m? -# 1144| mu1144_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1144_1 -# 1145| r1145_1(glval) = VariableAddress[x375] : -# 1145| r1145_2(glval) = FunctionAddress[~String] : -# 1145| v1145_3(void) = Call[~String] : func:r1145_2, this:r1145_1 -# 1145| mu1145_4(unknown) = ^CallSideEffect : ~m? -# 1145| v1145_5(void) = ^IndirectReadSideEffect[-1] : &:r1145_1, ~m? -# 1145| mu1145_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1145_1 -# 1145| r1145_7(bool) = Constant[0] : -# 1145| v1145_8(void) = ConditionalBranch : r1145_7 +# 35| Block 375 +# 35| r35_5251(glval) = VariableAddress[x375] : +# 35| mu35_5252(String) = Uninitialized[x375] : &:r35_5251 +# 35| r35_5253(glval) = FunctionAddress[String] : +# 35| v35_5254(void) = Call[String] : func:r35_5253, this:r35_5251 +# 35| mu35_5255(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5251 +# 35| r35_5257(glval) = VariableAddress[x375] : +# 35| r35_5258(glval) = FunctionAddress[~String] : +# 35| v35_5259(void) = Call[~String] : func:r35_5258, this:r35_5257 +# 35| mu35_5260(unknown) = ^CallSideEffect : ~m? +# 35| v35_5261(void) = ^IndirectReadSideEffect[-1] : &:r35_5257, ~m? +# 35| mu35_5262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5257 +# 35| r35_5263(bool) = Constant[0] : +# 35| v35_5264(void) = ConditionalBranch : r35_5263 #-----| False -> Block 376 #-----| True -> Block 1026 -# 1147| Block 376 -# 1147| r1147_1(glval) = VariableAddress[x376] : -# 1147| mu1147_2(String) = Uninitialized[x376] : &:r1147_1 -# 1147| r1147_3(glval) = FunctionAddress[String] : -# 1147| v1147_4(void) = Call[String] : func:r1147_3, this:r1147_1 -# 1147| mu1147_5(unknown) = ^CallSideEffect : ~m? -# 1147| mu1147_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1147_1 -# 1148| r1148_1(glval) = VariableAddress[x376] : -# 1148| r1148_2(glval) = FunctionAddress[~String] : -# 1148| v1148_3(void) = Call[~String] : func:r1148_2, this:r1148_1 -# 1148| mu1148_4(unknown) = ^CallSideEffect : ~m? -# 1148| v1148_5(void) = ^IndirectReadSideEffect[-1] : &:r1148_1, ~m? -# 1148| mu1148_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1148_1 -# 1148| r1148_7(bool) = Constant[0] : -# 1148| v1148_8(void) = ConditionalBranch : r1148_7 +# 35| Block 376 +# 35| r35_5265(glval) = VariableAddress[x376] : +# 35| mu35_5266(String) = Uninitialized[x376] : &:r35_5265 +# 35| r35_5267(glval) = FunctionAddress[String] : +# 35| v35_5268(void) = Call[String] : func:r35_5267, this:r35_5265 +# 35| mu35_5269(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5265 +# 35| r35_5271(glval) = VariableAddress[x376] : +# 35| r35_5272(glval) = FunctionAddress[~String] : +# 35| v35_5273(void) = Call[~String] : func:r35_5272, this:r35_5271 +# 35| mu35_5274(unknown) = ^CallSideEffect : ~m? +# 35| v35_5275(void) = ^IndirectReadSideEffect[-1] : &:r35_5271, ~m? +# 35| mu35_5276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5271 +# 35| r35_5277(bool) = Constant[0] : +# 35| v35_5278(void) = ConditionalBranch : r35_5277 #-----| False -> Block 377 #-----| True -> Block 1026 -# 1150| Block 377 -# 1150| r1150_1(glval) = VariableAddress[x377] : -# 1150| mu1150_2(String) = Uninitialized[x377] : &:r1150_1 -# 1150| r1150_3(glval) = FunctionAddress[String] : -# 1150| v1150_4(void) = Call[String] : func:r1150_3, this:r1150_1 -# 1150| mu1150_5(unknown) = ^CallSideEffect : ~m? -# 1150| mu1150_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1150_1 -# 1151| r1151_1(glval) = VariableAddress[x377] : -# 1151| r1151_2(glval) = FunctionAddress[~String] : -# 1151| v1151_3(void) = Call[~String] : func:r1151_2, this:r1151_1 -# 1151| mu1151_4(unknown) = ^CallSideEffect : ~m? -# 1151| v1151_5(void) = ^IndirectReadSideEffect[-1] : &:r1151_1, ~m? -# 1151| mu1151_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1151_1 -# 1151| r1151_7(bool) = Constant[0] : -# 1151| v1151_8(void) = ConditionalBranch : r1151_7 +# 35| Block 377 +# 35| r35_5279(glval) = VariableAddress[x377] : +# 35| mu35_5280(String) = Uninitialized[x377] : &:r35_5279 +# 35| r35_5281(glval) = FunctionAddress[String] : +# 35| v35_5282(void) = Call[String] : func:r35_5281, this:r35_5279 +# 35| mu35_5283(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5279 +# 35| r35_5285(glval) = VariableAddress[x377] : +# 35| r35_5286(glval) = FunctionAddress[~String] : +# 35| v35_5287(void) = Call[~String] : func:r35_5286, this:r35_5285 +# 35| mu35_5288(unknown) = ^CallSideEffect : ~m? +# 35| v35_5289(void) = ^IndirectReadSideEffect[-1] : &:r35_5285, ~m? +# 35| mu35_5290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5285 +# 35| r35_5291(bool) = Constant[0] : +# 35| v35_5292(void) = ConditionalBranch : r35_5291 #-----| False -> Block 378 #-----| True -> Block 1026 -# 1153| Block 378 -# 1153| r1153_1(glval) = VariableAddress[x378] : -# 1153| mu1153_2(String) = Uninitialized[x378] : &:r1153_1 -# 1153| r1153_3(glval) = FunctionAddress[String] : -# 1153| v1153_4(void) = Call[String] : func:r1153_3, this:r1153_1 -# 1153| mu1153_5(unknown) = ^CallSideEffect : ~m? -# 1153| mu1153_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1153_1 -# 1154| r1154_1(glval) = VariableAddress[x378] : -# 1154| r1154_2(glval) = FunctionAddress[~String] : -# 1154| v1154_3(void) = Call[~String] : func:r1154_2, this:r1154_1 -# 1154| mu1154_4(unknown) = ^CallSideEffect : ~m? -# 1154| v1154_5(void) = ^IndirectReadSideEffect[-1] : &:r1154_1, ~m? -# 1154| mu1154_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| r1154_7(bool) = Constant[0] : -# 1154| v1154_8(void) = ConditionalBranch : r1154_7 +# 35| Block 378 +# 35| r35_5293(glval) = VariableAddress[x378] : +# 35| mu35_5294(String) = Uninitialized[x378] : &:r35_5293 +# 35| r35_5295(glval) = FunctionAddress[String] : +# 35| v35_5296(void) = Call[String] : func:r35_5295, this:r35_5293 +# 35| mu35_5297(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5293 +# 35| r35_5299(glval) = VariableAddress[x378] : +# 35| r35_5300(glval) = FunctionAddress[~String] : +# 35| v35_5301(void) = Call[~String] : func:r35_5300, this:r35_5299 +# 35| mu35_5302(unknown) = ^CallSideEffect : ~m? +# 35| v35_5303(void) = ^IndirectReadSideEffect[-1] : &:r35_5299, ~m? +# 35| mu35_5304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5299 +# 35| r35_5305(bool) = Constant[0] : +# 35| v35_5306(void) = ConditionalBranch : r35_5305 #-----| False -> Block 379 #-----| True -> Block 1026 -# 1156| Block 379 -# 1156| r1156_1(glval) = VariableAddress[x379] : -# 1156| mu1156_2(String) = Uninitialized[x379] : &:r1156_1 -# 1156| r1156_3(glval) = FunctionAddress[String] : -# 1156| v1156_4(void) = Call[String] : func:r1156_3, this:r1156_1 -# 1156| mu1156_5(unknown) = ^CallSideEffect : ~m? -# 1156| mu1156_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 -# 1157| r1157_1(glval) = VariableAddress[x379] : -# 1157| r1157_2(glval) = FunctionAddress[~String] : -# 1157| v1157_3(void) = Call[~String] : func:r1157_2, this:r1157_1 -# 1157| mu1157_4(unknown) = ^CallSideEffect : ~m? -# 1157| v1157_5(void) = ^IndirectReadSideEffect[-1] : &:r1157_1, ~m? -# 1157| mu1157_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1157_1 -# 1157| r1157_7(bool) = Constant[0] : -# 1157| v1157_8(void) = ConditionalBranch : r1157_7 +# 35| Block 379 +# 35| r35_5307(glval) = VariableAddress[x379] : +# 35| mu35_5308(String) = Uninitialized[x379] : &:r35_5307 +# 35| r35_5309(glval) = FunctionAddress[String] : +# 35| v35_5310(void) = Call[String] : func:r35_5309, this:r35_5307 +# 35| mu35_5311(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5307 +# 35| r35_5313(glval) = VariableAddress[x379] : +# 35| r35_5314(glval) = FunctionAddress[~String] : +# 35| v35_5315(void) = Call[~String] : func:r35_5314, this:r35_5313 +# 35| mu35_5316(unknown) = ^CallSideEffect : ~m? +# 35| v35_5317(void) = ^IndirectReadSideEffect[-1] : &:r35_5313, ~m? +# 35| mu35_5318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5313 +# 35| r35_5319(bool) = Constant[0] : +# 35| v35_5320(void) = ConditionalBranch : r35_5319 #-----| False -> Block 380 #-----| True -> Block 1026 -# 1159| Block 380 -# 1159| r1159_1(glval) = VariableAddress[x380] : -# 1159| mu1159_2(String) = Uninitialized[x380] : &:r1159_1 -# 1159| r1159_3(glval) = FunctionAddress[String] : -# 1159| v1159_4(void) = Call[String] : func:r1159_3, this:r1159_1 -# 1159| mu1159_5(unknown) = ^CallSideEffect : ~m? -# 1159| mu1159_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1159_1 -# 1160| r1160_1(glval) = VariableAddress[x380] : -# 1160| r1160_2(glval) = FunctionAddress[~String] : -# 1160| v1160_3(void) = Call[~String] : func:r1160_2, this:r1160_1 -# 1160| mu1160_4(unknown) = ^CallSideEffect : ~m? -# 1160| v1160_5(void) = ^IndirectReadSideEffect[-1] : &:r1160_1, ~m? -# 1160| mu1160_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1160_1 -# 1160| r1160_7(bool) = Constant[0] : -# 1160| v1160_8(void) = ConditionalBranch : r1160_7 +# 35| Block 380 +# 35| r35_5321(glval) = VariableAddress[x380] : +# 35| mu35_5322(String) = Uninitialized[x380] : &:r35_5321 +# 35| r35_5323(glval) = FunctionAddress[String] : +# 35| v35_5324(void) = Call[String] : func:r35_5323, this:r35_5321 +# 35| mu35_5325(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5321 +# 35| r35_5327(glval) = VariableAddress[x380] : +# 35| r35_5328(glval) = FunctionAddress[~String] : +# 35| v35_5329(void) = Call[~String] : func:r35_5328, this:r35_5327 +# 35| mu35_5330(unknown) = ^CallSideEffect : ~m? +# 35| v35_5331(void) = ^IndirectReadSideEffect[-1] : &:r35_5327, ~m? +# 35| mu35_5332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5327 +# 35| r35_5333(bool) = Constant[0] : +# 35| v35_5334(void) = ConditionalBranch : r35_5333 #-----| False -> Block 381 #-----| True -> Block 1026 -# 1162| Block 381 -# 1162| r1162_1(glval) = VariableAddress[x381] : -# 1162| mu1162_2(String) = Uninitialized[x381] : &:r1162_1 -# 1162| r1162_3(glval) = FunctionAddress[String] : -# 1162| v1162_4(void) = Call[String] : func:r1162_3, this:r1162_1 -# 1162| mu1162_5(unknown) = ^CallSideEffect : ~m? -# 1162| mu1162_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1162_1 -# 1163| r1163_1(glval) = VariableAddress[x381] : -# 1163| r1163_2(glval) = FunctionAddress[~String] : -# 1163| v1163_3(void) = Call[~String] : func:r1163_2, this:r1163_1 -# 1163| mu1163_4(unknown) = ^CallSideEffect : ~m? -# 1163| v1163_5(void) = ^IndirectReadSideEffect[-1] : &:r1163_1, ~m? -# 1163| mu1163_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1163_1 -# 1163| r1163_7(bool) = Constant[0] : -# 1163| v1163_8(void) = ConditionalBranch : r1163_7 +# 35| Block 381 +# 35| r35_5335(glval) = VariableAddress[x381] : +# 35| mu35_5336(String) = Uninitialized[x381] : &:r35_5335 +# 35| r35_5337(glval) = FunctionAddress[String] : +# 35| v35_5338(void) = Call[String] : func:r35_5337, this:r35_5335 +# 35| mu35_5339(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5335 +# 35| r35_5341(glval) = VariableAddress[x381] : +# 35| r35_5342(glval) = FunctionAddress[~String] : +# 35| v35_5343(void) = Call[~String] : func:r35_5342, this:r35_5341 +# 35| mu35_5344(unknown) = ^CallSideEffect : ~m? +# 35| v35_5345(void) = ^IndirectReadSideEffect[-1] : &:r35_5341, ~m? +# 35| mu35_5346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5341 +# 35| r35_5347(bool) = Constant[0] : +# 35| v35_5348(void) = ConditionalBranch : r35_5347 #-----| False -> Block 382 #-----| True -> Block 1026 -# 1165| Block 382 -# 1165| r1165_1(glval) = VariableAddress[x382] : -# 1165| mu1165_2(String) = Uninitialized[x382] : &:r1165_1 -# 1165| r1165_3(glval) = FunctionAddress[String] : -# 1165| v1165_4(void) = Call[String] : func:r1165_3, this:r1165_1 -# 1165| mu1165_5(unknown) = ^CallSideEffect : ~m? -# 1165| mu1165_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1165_1 -# 1166| r1166_1(glval) = VariableAddress[x382] : -# 1166| r1166_2(glval) = FunctionAddress[~String] : -# 1166| v1166_3(void) = Call[~String] : func:r1166_2, this:r1166_1 -# 1166| mu1166_4(unknown) = ^CallSideEffect : ~m? -# 1166| v1166_5(void) = ^IndirectReadSideEffect[-1] : &:r1166_1, ~m? -# 1166| mu1166_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1166_1 -# 1166| r1166_7(bool) = Constant[0] : -# 1166| v1166_8(void) = ConditionalBranch : r1166_7 +# 35| Block 382 +# 35| r35_5349(glval) = VariableAddress[x382] : +# 35| mu35_5350(String) = Uninitialized[x382] : &:r35_5349 +# 35| r35_5351(glval) = FunctionAddress[String] : +# 35| v35_5352(void) = Call[String] : func:r35_5351, this:r35_5349 +# 35| mu35_5353(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5349 +# 35| r35_5355(glval) = VariableAddress[x382] : +# 35| r35_5356(glval) = FunctionAddress[~String] : +# 35| v35_5357(void) = Call[~String] : func:r35_5356, this:r35_5355 +# 35| mu35_5358(unknown) = ^CallSideEffect : ~m? +# 35| v35_5359(void) = ^IndirectReadSideEffect[-1] : &:r35_5355, ~m? +# 35| mu35_5360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5355 +# 35| r35_5361(bool) = Constant[0] : +# 35| v35_5362(void) = ConditionalBranch : r35_5361 #-----| False -> Block 383 #-----| True -> Block 1026 -# 1168| Block 383 -# 1168| r1168_1(glval) = VariableAddress[x383] : -# 1168| mu1168_2(String) = Uninitialized[x383] : &:r1168_1 -# 1168| r1168_3(glval) = FunctionAddress[String] : -# 1168| v1168_4(void) = Call[String] : func:r1168_3, this:r1168_1 -# 1168| mu1168_5(unknown) = ^CallSideEffect : ~m? -# 1168| mu1168_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1168_1 -# 1169| r1169_1(glval) = VariableAddress[x383] : -# 1169| r1169_2(glval) = FunctionAddress[~String] : -# 1169| v1169_3(void) = Call[~String] : func:r1169_2, this:r1169_1 -# 1169| mu1169_4(unknown) = ^CallSideEffect : ~m? -# 1169| v1169_5(void) = ^IndirectReadSideEffect[-1] : &:r1169_1, ~m? -# 1169| mu1169_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1169_1 -# 1169| r1169_7(bool) = Constant[0] : -# 1169| v1169_8(void) = ConditionalBranch : r1169_7 +# 35| Block 383 +# 35| r35_5363(glval) = VariableAddress[x383] : +# 35| mu35_5364(String) = Uninitialized[x383] : &:r35_5363 +# 35| r35_5365(glval) = FunctionAddress[String] : +# 35| v35_5366(void) = Call[String] : func:r35_5365, this:r35_5363 +# 35| mu35_5367(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5363 +# 35| r35_5369(glval) = VariableAddress[x383] : +# 35| r35_5370(glval) = FunctionAddress[~String] : +# 35| v35_5371(void) = Call[~String] : func:r35_5370, this:r35_5369 +# 35| mu35_5372(unknown) = ^CallSideEffect : ~m? +# 35| v35_5373(void) = ^IndirectReadSideEffect[-1] : &:r35_5369, ~m? +# 35| mu35_5374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5369 +# 35| r35_5375(bool) = Constant[0] : +# 35| v35_5376(void) = ConditionalBranch : r35_5375 #-----| False -> Block 384 #-----| True -> Block 1026 -# 1171| Block 384 -# 1171| r1171_1(glval) = VariableAddress[x384] : -# 1171| mu1171_2(String) = Uninitialized[x384] : &:r1171_1 -# 1171| r1171_3(glval) = FunctionAddress[String] : -# 1171| v1171_4(void) = Call[String] : func:r1171_3, this:r1171_1 -# 1171| mu1171_5(unknown) = ^CallSideEffect : ~m? -# 1171| mu1171_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1171_1 -# 1172| r1172_1(glval) = VariableAddress[x384] : -# 1172| r1172_2(glval) = FunctionAddress[~String] : -# 1172| v1172_3(void) = Call[~String] : func:r1172_2, this:r1172_1 -# 1172| mu1172_4(unknown) = ^CallSideEffect : ~m? -# 1172| v1172_5(void) = ^IndirectReadSideEffect[-1] : &:r1172_1, ~m? -# 1172| mu1172_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1172_1 -# 1172| r1172_7(bool) = Constant[0] : -# 1172| v1172_8(void) = ConditionalBranch : r1172_7 +# 35| Block 384 +# 35| r35_5377(glval) = VariableAddress[x384] : +# 35| mu35_5378(String) = Uninitialized[x384] : &:r35_5377 +# 35| r35_5379(glval) = FunctionAddress[String] : +# 35| v35_5380(void) = Call[String] : func:r35_5379, this:r35_5377 +# 35| mu35_5381(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5377 +# 35| r35_5383(glval) = VariableAddress[x384] : +# 35| r35_5384(glval) = FunctionAddress[~String] : +# 35| v35_5385(void) = Call[~String] : func:r35_5384, this:r35_5383 +# 35| mu35_5386(unknown) = ^CallSideEffect : ~m? +# 35| v35_5387(void) = ^IndirectReadSideEffect[-1] : &:r35_5383, ~m? +# 35| mu35_5388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5383 +# 35| r35_5389(bool) = Constant[0] : +# 35| v35_5390(void) = ConditionalBranch : r35_5389 #-----| False -> Block 385 #-----| True -> Block 1026 -# 1174| Block 385 -# 1174| r1174_1(glval) = VariableAddress[x385] : -# 1174| mu1174_2(String) = Uninitialized[x385] : &:r1174_1 -# 1174| r1174_3(glval) = FunctionAddress[String] : -# 1174| v1174_4(void) = Call[String] : func:r1174_3, this:r1174_1 -# 1174| mu1174_5(unknown) = ^CallSideEffect : ~m? -# 1174| mu1174_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1174_1 -# 1175| r1175_1(glval) = VariableAddress[x385] : -# 1175| r1175_2(glval) = FunctionAddress[~String] : -# 1175| v1175_3(void) = Call[~String] : func:r1175_2, this:r1175_1 -# 1175| mu1175_4(unknown) = ^CallSideEffect : ~m? -# 1175| v1175_5(void) = ^IndirectReadSideEffect[-1] : &:r1175_1, ~m? -# 1175| mu1175_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1175_1 -# 1175| r1175_7(bool) = Constant[0] : -# 1175| v1175_8(void) = ConditionalBranch : r1175_7 +# 35| Block 385 +# 35| r35_5391(glval) = VariableAddress[x385] : +# 35| mu35_5392(String) = Uninitialized[x385] : &:r35_5391 +# 35| r35_5393(glval) = FunctionAddress[String] : +# 35| v35_5394(void) = Call[String] : func:r35_5393, this:r35_5391 +# 35| mu35_5395(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5391 +# 35| r35_5397(glval) = VariableAddress[x385] : +# 35| r35_5398(glval) = FunctionAddress[~String] : +# 35| v35_5399(void) = Call[~String] : func:r35_5398, this:r35_5397 +# 35| mu35_5400(unknown) = ^CallSideEffect : ~m? +# 35| v35_5401(void) = ^IndirectReadSideEffect[-1] : &:r35_5397, ~m? +# 35| mu35_5402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5397 +# 35| r35_5403(bool) = Constant[0] : +# 35| v35_5404(void) = ConditionalBranch : r35_5403 #-----| False -> Block 386 #-----| True -> Block 1026 -# 1177| Block 386 -# 1177| r1177_1(glval) = VariableAddress[x386] : -# 1177| mu1177_2(String) = Uninitialized[x386] : &:r1177_1 -# 1177| r1177_3(glval) = FunctionAddress[String] : -# 1177| v1177_4(void) = Call[String] : func:r1177_3, this:r1177_1 -# 1177| mu1177_5(unknown) = ^CallSideEffect : ~m? -# 1177| mu1177_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1177_1 -# 1178| r1178_1(glval) = VariableAddress[x386] : -# 1178| r1178_2(glval) = FunctionAddress[~String] : -# 1178| v1178_3(void) = Call[~String] : func:r1178_2, this:r1178_1 -# 1178| mu1178_4(unknown) = ^CallSideEffect : ~m? -# 1178| v1178_5(void) = ^IndirectReadSideEffect[-1] : &:r1178_1, ~m? -# 1178| mu1178_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1178_1 -# 1178| r1178_7(bool) = Constant[0] : -# 1178| v1178_8(void) = ConditionalBranch : r1178_7 +# 35| Block 386 +# 35| r35_5405(glval) = VariableAddress[x386] : +# 35| mu35_5406(String) = Uninitialized[x386] : &:r35_5405 +# 35| r35_5407(glval) = FunctionAddress[String] : +# 35| v35_5408(void) = Call[String] : func:r35_5407, this:r35_5405 +# 35| mu35_5409(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5405 +# 35| r35_5411(glval) = VariableAddress[x386] : +# 35| r35_5412(glval) = FunctionAddress[~String] : +# 35| v35_5413(void) = Call[~String] : func:r35_5412, this:r35_5411 +# 35| mu35_5414(unknown) = ^CallSideEffect : ~m? +# 35| v35_5415(void) = ^IndirectReadSideEffect[-1] : &:r35_5411, ~m? +# 35| mu35_5416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5411 +# 35| r35_5417(bool) = Constant[0] : +# 35| v35_5418(void) = ConditionalBranch : r35_5417 #-----| False -> Block 387 #-----| True -> Block 1026 -# 1180| Block 387 -# 1180| r1180_1(glval) = VariableAddress[x387] : -# 1180| mu1180_2(String) = Uninitialized[x387] : &:r1180_1 -# 1180| r1180_3(glval) = FunctionAddress[String] : -# 1180| v1180_4(void) = Call[String] : func:r1180_3, this:r1180_1 -# 1180| mu1180_5(unknown) = ^CallSideEffect : ~m? -# 1180| mu1180_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1180_1 -# 1181| r1181_1(glval) = VariableAddress[x387] : -# 1181| r1181_2(glval) = FunctionAddress[~String] : -# 1181| v1181_3(void) = Call[~String] : func:r1181_2, this:r1181_1 -# 1181| mu1181_4(unknown) = ^CallSideEffect : ~m? -# 1181| v1181_5(void) = ^IndirectReadSideEffect[-1] : &:r1181_1, ~m? -# 1181| mu1181_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 -# 1181| r1181_7(bool) = Constant[0] : -# 1181| v1181_8(void) = ConditionalBranch : r1181_7 +# 35| Block 387 +# 35| r35_5419(glval) = VariableAddress[x387] : +# 35| mu35_5420(String) = Uninitialized[x387] : &:r35_5419 +# 35| r35_5421(glval) = FunctionAddress[String] : +# 35| v35_5422(void) = Call[String] : func:r35_5421, this:r35_5419 +# 35| mu35_5423(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5419 +# 35| r35_5425(glval) = VariableAddress[x387] : +# 35| r35_5426(glval) = FunctionAddress[~String] : +# 35| v35_5427(void) = Call[~String] : func:r35_5426, this:r35_5425 +# 35| mu35_5428(unknown) = ^CallSideEffect : ~m? +# 35| v35_5429(void) = ^IndirectReadSideEffect[-1] : &:r35_5425, ~m? +# 35| mu35_5430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5425 +# 35| r35_5431(bool) = Constant[0] : +# 35| v35_5432(void) = ConditionalBranch : r35_5431 #-----| False -> Block 388 #-----| True -> Block 1026 -# 1183| Block 388 -# 1183| r1183_1(glval) = VariableAddress[x388] : -# 1183| mu1183_2(String) = Uninitialized[x388] : &:r1183_1 -# 1183| r1183_3(glval) = FunctionAddress[String] : -# 1183| v1183_4(void) = Call[String] : func:r1183_3, this:r1183_1 -# 1183| mu1183_5(unknown) = ^CallSideEffect : ~m? -# 1183| mu1183_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1183_1 -# 1184| r1184_1(glval) = VariableAddress[x388] : -# 1184| r1184_2(glval) = FunctionAddress[~String] : -# 1184| v1184_3(void) = Call[~String] : func:r1184_2, this:r1184_1 -# 1184| mu1184_4(unknown) = ^CallSideEffect : ~m? -# 1184| v1184_5(void) = ^IndirectReadSideEffect[-1] : &:r1184_1, ~m? -# 1184| mu1184_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1184_1 -# 1184| r1184_7(bool) = Constant[0] : -# 1184| v1184_8(void) = ConditionalBranch : r1184_7 +# 35| Block 388 +# 35| r35_5433(glval) = VariableAddress[x388] : +# 35| mu35_5434(String) = Uninitialized[x388] : &:r35_5433 +# 35| r35_5435(glval) = FunctionAddress[String] : +# 35| v35_5436(void) = Call[String] : func:r35_5435, this:r35_5433 +# 35| mu35_5437(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5433 +# 35| r35_5439(glval) = VariableAddress[x388] : +# 35| r35_5440(glval) = FunctionAddress[~String] : +# 35| v35_5441(void) = Call[~String] : func:r35_5440, this:r35_5439 +# 35| mu35_5442(unknown) = ^CallSideEffect : ~m? +# 35| v35_5443(void) = ^IndirectReadSideEffect[-1] : &:r35_5439, ~m? +# 35| mu35_5444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5439 +# 35| r35_5445(bool) = Constant[0] : +# 35| v35_5446(void) = ConditionalBranch : r35_5445 #-----| False -> Block 389 #-----| True -> Block 1026 -# 1186| Block 389 -# 1186| r1186_1(glval) = VariableAddress[x389] : -# 1186| mu1186_2(String) = Uninitialized[x389] : &:r1186_1 -# 1186| r1186_3(glval) = FunctionAddress[String] : -# 1186| v1186_4(void) = Call[String] : func:r1186_3, this:r1186_1 -# 1186| mu1186_5(unknown) = ^CallSideEffect : ~m? -# 1186| mu1186_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1186_1 -# 1187| r1187_1(glval) = VariableAddress[x389] : -# 1187| r1187_2(glval) = FunctionAddress[~String] : -# 1187| v1187_3(void) = Call[~String] : func:r1187_2, this:r1187_1 -# 1187| mu1187_4(unknown) = ^CallSideEffect : ~m? -# 1187| v1187_5(void) = ^IndirectReadSideEffect[-1] : &:r1187_1, ~m? -# 1187| mu1187_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1187_1 -# 1187| r1187_7(bool) = Constant[0] : -# 1187| v1187_8(void) = ConditionalBranch : r1187_7 +# 35| Block 389 +# 35| r35_5447(glval) = VariableAddress[x389] : +# 35| mu35_5448(String) = Uninitialized[x389] : &:r35_5447 +# 35| r35_5449(glval) = FunctionAddress[String] : +# 35| v35_5450(void) = Call[String] : func:r35_5449, this:r35_5447 +# 35| mu35_5451(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5447 +# 35| r35_5453(glval) = VariableAddress[x389] : +# 35| r35_5454(glval) = FunctionAddress[~String] : +# 35| v35_5455(void) = Call[~String] : func:r35_5454, this:r35_5453 +# 35| mu35_5456(unknown) = ^CallSideEffect : ~m? +# 35| v35_5457(void) = ^IndirectReadSideEffect[-1] : &:r35_5453, ~m? +# 35| mu35_5458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5453 +# 35| r35_5459(bool) = Constant[0] : +# 35| v35_5460(void) = ConditionalBranch : r35_5459 #-----| False -> Block 390 #-----| True -> Block 1026 -# 1189| Block 390 -# 1189| r1189_1(glval) = VariableAddress[x390] : -# 1189| mu1189_2(String) = Uninitialized[x390] : &:r1189_1 -# 1189| r1189_3(glval) = FunctionAddress[String] : -# 1189| v1189_4(void) = Call[String] : func:r1189_3, this:r1189_1 -# 1189| mu1189_5(unknown) = ^CallSideEffect : ~m? -# 1189| mu1189_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1189_1 -# 1190| r1190_1(glval) = VariableAddress[x390] : -# 1190| r1190_2(glval) = FunctionAddress[~String] : -# 1190| v1190_3(void) = Call[~String] : func:r1190_2, this:r1190_1 -# 1190| mu1190_4(unknown) = ^CallSideEffect : ~m? -# 1190| v1190_5(void) = ^IndirectReadSideEffect[-1] : &:r1190_1, ~m? -# 1190| mu1190_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1190_1 -# 1190| r1190_7(bool) = Constant[0] : -# 1190| v1190_8(void) = ConditionalBranch : r1190_7 +# 35| Block 390 +# 35| r35_5461(glval) = VariableAddress[x390] : +# 35| mu35_5462(String) = Uninitialized[x390] : &:r35_5461 +# 35| r35_5463(glval) = FunctionAddress[String] : +# 35| v35_5464(void) = Call[String] : func:r35_5463, this:r35_5461 +# 35| mu35_5465(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5461 +# 35| r35_5467(glval) = VariableAddress[x390] : +# 35| r35_5468(glval) = FunctionAddress[~String] : +# 35| v35_5469(void) = Call[~String] : func:r35_5468, this:r35_5467 +# 35| mu35_5470(unknown) = ^CallSideEffect : ~m? +# 35| v35_5471(void) = ^IndirectReadSideEffect[-1] : &:r35_5467, ~m? +# 35| mu35_5472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5467 +# 35| r35_5473(bool) = Constant[0] : +# 35| v35_5474(void) = ConditionalBranch : r35_5473 #-----| False -> Block 391 #-----| True -> Block 1026 -# 1192| Block 391 -# 1192| r1192_1(glval) = VariableAddress[x391] : -# 1192| mu1192_2(String) = Uninitialized[x391] : &:r1192_1 -# 1192| r1192_3(glval) = FunctionAddress[String] : -# 1192| v1192_4(void) = Call[String] : func:r1192_3, this:r1192_1 -# 1192| mu1192_5(unknown) = ^CallSideEffect : ~m? -# 1192| mu1192_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1192_1 -# 1193| r1193_1(glval) = VariableAddress[x391] : -# 1193| r1193_2(glval) = FunctionAddress[~String] : -# 1193| v1193_3(void) = Call[~String] : func:r1193_2, this:r1193_1 -# 1193| mu1193_4(unknown) = ^CallSideEffect : ~m? -# 1193| v1193_5(void) = ^IndirectReadSideEffect[-1] : &:r1193_1, ~m? -# 1193| mu1193_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1193_1 -# 1193| r1193_7(bool) = Constant[0] : -# 1193| v1193_8(void) = ConditionalBranch : r1193_7 +# 35| Block 391 +# 35| r35_5475(glval) = VariableAddress[x391] : +# 35| mu35_5476(String) = Uninitialized[x391] : &:r35_5475 +# 35| r35_5477(glval) = FunctionAddress[String] : +# 35| v35_5478(void) = Call[String] : func:r35_5477, this:r35_5475 +# 35| mu35_5479(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5475 +# 35| r35_5481(glval) = VariableAddress[x391] : +# 35| r35_5482(glval) = FunctionAddress[~String] : +# 35| v35_5483(void) = Call[~String] : func:r35_5482, this:r35_5481 +# 35| mu35_5484(unknown) = ^CallSideEffect : ~m? +# 35| v35_5485(void) = ^IndirectReadSideEffect[-1] : &:r35_5481, ~m? +# 35| mu35_5486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5481 +# 35| r35_5487(bool) = Constant[0] : +# 35| v35_5488(void) = ConditionalBranch : r35_5487 #-----| False -> Block 392 #-----| True -> Block 1026 -# 1195| Block 392 -# 1195| r1195_1(glval) = VariableAddress[x392] : -# 1195| mu1195_2(String) = Uninitialized[x392] : &:r1195_1 -# 1195| r1195_3(glval) = FunctionAddress[String] : -# 1195| v1195_4(void) = Call[String] : func:r1195_3, this:r1195_1 -# 1195| mu1195_5(unknown) = ^CallSideEffect : ~m? -# 1195| mu1195_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1195_1 -# 1196| r1196_1(glval) = VariableAddress[x392] : -# 1196| r1196_2(glval) = FunctionAddress[~String] : -# 1196| v1196_3(void) = Call[~String] : func:r1196_2, this:r1196_1 -# 1196| mu1196_4(unknown) = ^CallSideEffect : ~m? -# 1196| v1196_5(void) = ^IndirectReadSideEffect[-1] : &:r1196_1, ~m? -# 1196| mu1196_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1196_1 -# 1196| r1196_7(bool) = Constant[0] : -# 1196| v1196_8(void) = ConditionalBranch : r1196_7 +# 35| Block 392 +# 35| r35_5489(glval) = VariableAddress[x392] : +# 35| mu35_5490(String) = Uninitialized[x392] : &:r35_5489 +# 35| r35_5491(glval) = FunctionAddress[String] : +# 35| v35_5492(void) = Call[String] : func:r35_5491, this:r35_5489 +# 35| mu35_5493(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5489 +# 35| r35_5495(glval) = VariableAddress[x392] : +# 35| r35_5496(glval) = FunctionAddress[~String] : +# 35| v35_5497(void) = Call[~String] : func:r35_5496, this:r35_5495 +# 35| mu35_5498(unknown) = ^CallSideEffect : ~m? +# 35| v35_5499(void) = ^IndirectReadSideEffect[-1] : &:r35_5495, ~m? +# 35| mu35_5500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5495 +# 35| r35_5501(bool) = Constant[0] : +# 35| v35_5502(void) = ConditionalBranch : r35_5501 #-----| False -> Block 393 #-----| True -> Block 1026 -# 1198| Block 393 -# 1198| r1198_1(glval) = VariableAddress[x393] : -# 1198| mu1198_2(String) = Uninitialized[x393] : &:r1198_1 -# 1198| r1198_3(glval) = FunctionAddress[String] : -# 1198| v1198_4(void) = Call[String] : func:r1198_3, this:r1198_1 -# 1198| mu1198_5(unknown) = ^CallSideEffect : ~m? -# 1198| mu1198_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1198_1 -# 1199| r1199_1(glval) = VariableAddress[x393] : -# 1199| r1199_2(glval) = FunctionAddress[~String] : -# 1199| v1199_3(void) = Call[~String] : func:r1199_2, this:r1199_1 -# 1199| mu1199_4(unknown) = ^CallSideEffect : ~m? -# 1199| v1199_5(void) = ^IndirectReadSideEffect[-1] : &:r1199_1, ~m? -# 1199| mu1199_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1199_1 -# 1199| r1199_7(bool) = Constant[0] : -# 1199| v1199_8(void) = ConditionalBranch : r1199_7 +# 35| Block 393 +# 35| r35_5503(glval) = VariableAddress[x393] : +# 35| mu35_5504(String) = Uninitialized[x393] : &:r35_5503 +# 35| r35_5505(glval) = FunctionAddress[String] : +# 35| v35_5506(void) = Call[String] : func:r35_5505, this:r35_5503 +# 35| mu35_5507(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5503 +# 35| r35_5509(glval) = VariableAddress[x393] : +# 35| r35_5510(glval) = FunctionAddress[~String] : +# 35| v35_5511(void) = Call[~String] : func:r35_5510, this:r35_5509 +# 35| mu35_5512(unknown) = ^CallSideEffect : ~m? +# 35| v35_5513(void) = ^IndirectReadSideEffect[-1] : &:r35_5509, ~m? +# 35| mu35_5514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5509 +# 35| r35_5515(bool) = Constant[0] : +# 35| v35_5516(void) = ConditionalBranch : r35_5515 #-----| False -> Block 394 #-----| True -> Block 1026 -# 1201| Block 394 -# 1201| r1201_1(glval) = VariableAddress[x394] : -# 1201| mu1201_2(String) = Uninitialized[x394] : &:r1201_1 -# 1201| r1201_3(glval) = FunctionAddress[String] : -# 1201| v1201_4(void) = Call[String] : func:r1201_3, this:r1201_1 -# 1201| mu1201_5(unknown) = ^CallSideEffect : ~m? -# 1201| mu1201_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1201_1 -# 1202| r1202_1(glval) = VariableAddress[x394] : -# 1202| r1202_2(glval) = FunctionAddress[~String] : -# 1202| v1202_3(void) = Call[~String] : func:r1202_2, this:r1202_1 -# 1202| mu1202_4(unknown) = ^CallSideEffect : ~m? -# 1202| v1202_5(void) = ^IndirectReadSideEffect[-1] : &:r1202_1, ~m? -# 1202| mu1202_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1202_1 -# 1202| r1202_7(bool) = Constant[0] : -# 1202| v1202_8(void) = ConditionalBranch : r1202_7 +# 35| Block 394 +# 35| r35_5517(glval) = VariableAddress[x394] : +# 35| mu35_5518(String) = Uninitialized[x394] : &:r35_5517 +# 35| r35_5519(glval) = FunctionAddress[String] : +# 35| v35_5520(void) = Call[String] : func:r35_5519, this:r35_5517 +# 35| mu35_5521(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5517 +# 35| r35_5523(glval) = VariableAddress[x394] : +# 35| r35_5524(glval) = FunctionAddress[~String] : +# 35| v35_5525(void) = Call[~String] : func:r35_5524, this:r35_5523 +# 35| mu35_5526(unknown) = ^CallSideEffect : ~m? +# 35| v35_5527(void) = ^IndirectReadSideEffect[-1] : &:r35_5523, ~m? +# 35| mu35_5528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5523 +# 35| r35_5529(bool) = Constant[0] : +# 35| v35_5530(void) = ConditionalBranch : r35_5529 #-----| False -> Block 395 #-----| True -> Block 1026 -# 1204| Block 395 -# 1204| r1204_1(glval) = VariableAddress[x395] : -# 1204| mu1204_2(String) = Uninitialized[x395] : &:r1204_1 -# 1204| r1204_3(glval) = FunctionAddress[String] : -# 1204| v1204_4(void) = Call[String] : func:r1204_3, this:r1204_1 -# 1204| mu1204_5(unknown) = ^CallSideEffect : ~m? -# 1204| mu1204_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1204_1 -# 1205| r1205_1(glval) = VariableAddress[x395] : -# 1205| r1205_2(glval) = FunctionAddress[~String] : -# 1205| v1205_3(void) = Call[~String] : func:r1205_2, this:r1205_1 -# 1205| mu1205_4(unknown) = ^CallSideEffect : ~m? -# 1205| v1205_5(void) = ^IndirectReadSideEffect[-1] : &:r1205_1, ~m? -# 1205| mu1205_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1205_1 -# 1205| r1205_7(bool) = Constant[0] : -# 1205| v1205_8(void) = ConditionalBranch : r1205_7 +# 35| Block 395 +# 35| r35_5531(glval) = VariableAddress[x395] : +# 35| mu35_5532(String) = Uninitialized[x395] : &:r35_5531 +# 35| r35_5533(glval) = FunctionAddress[String] : +# 35| v35_5534(void) = Call[String] : func:r35_5533, this:r35_5531 +# 35| mu35_5535(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5531 +# 35| r35_5537(glval) = VariableAddress[x395] : +# 35| r35_5538(glval) = FunctionAddress[~String] : +# 35| v35_5539(void) = Call[~String] : func:r35_5538, this:r35_5537 +# 35| mu35_5540(unknown) = ^CallSideEffect : ~m? +# 35| v35_5541(void) = ^IndirectReadSideEffect[-1] : &:r35_5537, ~m? +# 35| mu35_5542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5537 +# 35| r35_5543(bool) = Constant[0] : +# 35| v35_5544(void) = ConditionalBranch : r35_5543 #-----| False -> Block 396 #-----| True -> Block 1026 -# 1207| Block 396 -# 1207| r1207_1(glval) = VariableAddress[x396] : -# 1207| mu1207_2(String) = Uninitialized[x396] : &:r1207_1 -# 1207| r1207_3(glval) = FunctionAddress[String] : -# 1207| v1207_4(void) = Call[String] : func:r1207_3, this:r1207_1 -# 1207| mu1207_5(unknown) = ^CallSideEffect : ~m? -# 1207| mu1207_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1207_1 -# 1208| r1208_1(glval) = VariableAddress[x396] : -# 1208| r1208_2(glval) = FunctionAddress[~String] : -# 1208| v1208_3(void) = Call[~String] : func:r1208_2, this:r1208_1 -# 1208| mu1208_4(unknown) = ^CallSideEffect : ~m? -# 1208| v1208_5(void) = ^IndirectReadSideEffect[-1] : &:r1208_1, ~m? -# 1208| mu1208_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1208_1 -# 1208| r1208_7(bool) = Constant[0] : -# 1208| v1208_8(void) = ConditionalBranch : r1208_7 +# 35| Block 396 +# 35| r35_5545(glval) = VariableAddress[x396] : +# 35| mu35_5546(String) = Uninitialized[x396] : &:r35_5545 +# 35| r35_5547(glval) = FunctionAddress[String] : +# 35| v35_5548(void) = Call[String] : func:r35_5547, this:r35_5545 +# 35| mu35_5549(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5545 +# 35| r35_5551(glval) = VariableAddress[x396] : +# 35| r35_5552(glval) = FunctionAddress[~String] : +# 35| v35_5553(void) = Call[~String] : func:r35_5552, this:r35_5551 +# 35| mu35_5554(unknown) = ^CallSideEffect : ~m? +# 35| v35_5555(void) = ^IndirectReadSideEffect[-1] : &:r35_5551, ~m? +# 35| mu35_5556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5551 +# 35| r35_5557(bool) = Constant[0] : +# 35| v35_5558(void) = ConditionalBranch : r35_5557 #-----| False -> Block 397 #-----| True -> Block 1026 -# 1210| Block 397 -# 1210| r1210_1(glval) = VariableAddress[x397] : -# 1210| mu1210_2(String) = Uninitialized[x397] : &:r1210_1 -# 1210| r1210_3(glval) = FunctionAddress[String] : -# 1210| v1210_4(void) = Call[String] : func:r1210_3, this:r1210_1 -# 1210| mu1210_5(unknown) = ^CallSideEffect : ~m? -# 1210| mu1210_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1210_1 -# 1211| r1211_1(glval) = VariableAddress[x397] : -# 1211| r1211_2(glval) = FunctionAddress[~String] : -# 1211| v1211_3(void) = Call[~String] : func:r1211_2, this:r1211_1 -# 1211| mu1211_4(unknown) = ^CallSideEffect : ~m? -# 1211| v1211_5(void) = ^IndirectReadSideEffect[-1] : &:r1211_1, ~m? -# 1211| mu1211_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1211_1 -# 1211| r1211_7(bool) = Constant[0] : -# 1211| v1211_8(void) = ConditionalBranch : r1211_7 +# 35| Block 397 +# 35| r35_5559(glval) = VariableAddress[x397] : +# 35| mu35_5560(String) = Uninitialized[x397] : &:r35_5559 +# 35| r35_5561(glval) = FunctionAddress[String] : +# 35| v35_5562(void) = Call[String] : func:r35_5561, this:r35_5559 +# 35| mu35_5563(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5559 +# 35| r35_5565(glval) = VariableAddress[x397] : +# 35| r35_5566(glval) = FunctionAddress[~String] : +# 35| v35_5567(void) = Call[~String] : func:r35_5566, this:r35_5565 +# 35| mu35_5568(unknown) = ^CallSideEffect : ~m? +# 35| v35_5569(void) = ^IndirectReadSideEffect[-1] : &:r35_5565, ~m? +# 35| mu35_5570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5565 +# 35| r35_5571(bool) = Constant[0] : +# 35| v35_5572(void) = ConditionalBranch : r35_5571 #-----| False -> Block 398 #-----| True -> Block 1026 -# 1213| Block 398 -# 1213| r1213_1(glval) = VariableAddress[x398] : -# 1213| mu1213_2(String) = Uninitialized[x398] : &:r1213_1 -# 1213| r1213_3(glval) = FunctionAddress[String] : -# 1213| v1213_4(void) = Call[String] : func:r1213_3, this:r1213_1 -# 1213| mu1213_5(unknown) = ^CallSideEffect : ~m? -# 1213| mu1213_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1213_1 -# 1214| r1214_1(glval) = VariableAddress[x398] : -# 1214| r1214_2(glval) = FunctionAddress[~String] : -# 1214| v1214_3(void) = Call[~String] : func:r1214_2, this:r1214_1 -# 1214| mu1214_4(unknown) = ^CallSideEffect : ~m? -# 1214| v1214_5(void) = ^IndirectReadSideEffect[-1] : &:r1214_1, ~m? -# 1214| mu1214_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1214_1 -# 1214| r1214_7(bool) = Constant[0] : -# 1214| v1214_8(void) = ConditionalBranch : r1214_7 +# 35| Block 398 +# 35| r35_5573(glval) = VariableAddress[x398] : +# 35| mu35_5574(String) = Uninitialized[x398] : &:r35_5573 +# 35| r35_5575(glval) = FunctionAddress[String] : +# 35| v35_5576(void) = Call[String] : func:r35_5575, this:r35_5573 +# 35| mu35_5577(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5573 +# 35| r35_5579(glval) = VariableAddress[x398] : +# 35| r35_5580(glval) = FunctionAddress[~String] : +# 35| v35_5581(void) = Call[~String] : func:r35_5580, this:r35_5579 +# 35| mu35_5582(unknown) = ^CallSideEffect : ~m? +# 35| v35_5583(void) = ^IndirectReadSideEffect[-1] : &:r35_5579, ~m? +# 35| mu35_5584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5579 +# 35| r35_5585(bool) = Constant[0] : +# 35| v35_5586(void) = ConditionalBranch : r35_5585 #-----| False -> Block 399 #-----| True -> Block 1026 -# 1216| Block 399 -# 1216| r1216_1(glval) = VariableAddress[x399] : -# 1216| mu1216_2(String) = Uninitialized[x399] : &:r1216_1 -# 1216| r1216_3(glval) = FunctionAddress[String] : -# 1216| v1216_4(void) = Call[String] : func:r1216_3, this:r1216_1 -# 1216| mu1216_5(unknown) = ^CallSideEffect : ~m? -# 1216| mu1216_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1216_1 -# 1217| r1217_1(glval) = VariableAddress[x399] : -# 1217| r1217_2(glval) = FunctionAddress[~String] : -# 1217| v1217_3(void) = Call[~String] : func:r1217_2, this:r1217_1 -# 1217| mu1217_4(unknown) = ^CallSideEffect : ~m? -# 1217| v1217_5(void) = ^IndirectReadSideEffect[-1] : &:r1217_1, ~m? -# 1217| mu1217_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1217_1 -# 1217| r1217_7(bool) = Constant[0] : -# 1217| v1217_8(void) = ConditionalBranch : r1217_7 +# 35| Block 399 +# 35| r35_5587(glval) = VariableAddress[x399] : +# 35| mu35_5588(String) = Uninitialized[x399] : &:r35_5587 +# 35| r35_5589(glval) = FunctionAddress[String] : +# 35| v35_5590(void) = Call[String] : func:r35_5589, this:r35_5587 +# 35| mu35_5591(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5587 +# 35| r35_5593(glval) = VariableAddress[x399] : +# 35| r35_5594(glval) = FunctionAddress[~String] : +# 35| v35_5595(void) = Call[~String] : func:r35_5594, this:r35_5593 +# 35| mu35_5596(unknown) = ^CallSideEffect : ~m? +# 35| v35_5597(void) = ^IndirectReadSideEffect[-1] : &:r35_5593, ~m? +# 35| mu35_5598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5593 +# 35| r35_5599(bool) = Constant[0] : +# 35| v35_5600(void) = ConditionalBranch : r35_5599 #-----| False -> Block 400 #-----| True -> Block 1026 -# 1219| Block 400 -# 1219| r1219_1(glval) = VariableAddress[x400] : -# 1219| mu1219_2(String) = Uninitialized[x400] : &:r1219_1 -# 1219| r1219_3(glval) = FunctionAddress[String] : -# 1219| v1219_4(void) = Call[String] : func:r1219_3, this:r1219_1 -# 1219| mu1219_5(unknown) = ^CallSideEffect : ~m? -# 1219| mu1219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1219_1 -# 1220| r1220_1(glval) = VariableAddress[x400] : -# 1220| r1220_2(glval) = FunctionAddress[~String] : -# 1220| v1220_3(void) = Call[~String] : func:r1220_2, this:r1220_1 -# 1220| mu1220_4(unknown) = ^CallSideEffect : ~m? -# 1220| v1220_5(void) = ^IndirectReadSideEffect[-1] : &:r1220_1, ~m? -# 1220| mu1220_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1220_1 -# 1220| r1220_7(bool) = Constant[0] : -# 1220| v1220_8(void) = ConditionalBranch : r1220_7 +# 35| Block 400 +# 35| r35_5601(glval) = VariableAddress[x400] : +# 35| mu35_5602(String) = Uninitialized[x400] : &:r35_5601 +# 35| r35_5603(glval) = FunctionAddress[String] : +# 35| v35_5604(void) = Call[String] : func:r35_5603, this:r35_5601 +# 35| mu35_5605(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5601 +# 35| r35_5607(glval) = VariableAddress[x400] : +# 35| r35_5608(glval) = FunctionAddress[~String] : +# 35| v35_5609(void) = Call[~String] : func:r35_5608, this:r35_5607 +# 35| mu35_5610(unknown) = ^CallSideEffect : ~m? +# 35| v35_5611(void) = ^IndirectReadSideEffect[-1] : &:r35_5607, ~m? +# 35| mu35_5612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5607 +# 35| r35_5613(bool) = Constant[0] : +# 35| v35_5614(void) = ConditionalBranch : r35_5613 #-----| False -> Block 401 #-----| True -> Block 1026 -# 1222| Block 401 -# 1222| r1222_1(glval) = VariableAddress[x401] : -# 1222| mu1222_2(String) = Uninitialized[x401] : &:r1222_1 -# 1222| r1222_3(glval) = FunctionAddress[String] : -# 1222| v1222_4(void) = Call[String] : func:r1222_3, this:r1222_1 -# 1222| mu1222_5(unknown) = ^CallSideEffect : ~m? -# 1222| mu1222_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1222_1 -# 1223| r1223_1(glval) = VariableAddress[x401] : -# 1223| r1223_2(glval) = FunctionAddress[~String] : -# 1223| v1223_3(void) = Call[~String] : func:r1223_2, this:r1223_1 -# 1223| mu1223_4(unknown) = ^CallSideEffect : ~m? -# 1223| v1223_5(void) = ^IndirectReadSideEffect[-1] : &:r1223_1, ~m? -# 1223| mu1223_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1223_1 -# 1223| r1223_7(bool) = Constant[0] : -# 1223| v1223_8(void) = ConditionalBranch : r1223_7 +# 35| Block 401 +# 35| r35_5615(glval) = VariableAddress[x401] : +# 35| mu35_5616(String) = Uninitialized[x401] : &:r35_5615 +# 35| r35_5617(glval) = FunctionAddress[String] : +# 35| v35_5618(void) = Call[String] : func:r35_5617, this:r35_5615 +# 35| mu35_5619(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5615 +# 35| r35_5621(glval) = VariableAddress[x401] : +# 35| r35_5622(glval) = FunctionAddress[~String] : +# 35| v35_5623(void) = Call[~String] : func:r35_5622, this:r35_5621 +# 35| mu35_5624(unknown) = ^CallSideEffect : ~m? +# 35| v35_5625(void) = ^IndirectReadSideEffect[-1] : &:r35_5621, ~m? +# 35| mu35_5626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5621 +# 35| r35_5627(bool) = Constant[0] : +# 35| v35_5628(void) = ConditionalBranch : r35_5627 #-----| False -> Block 402 #-----| True -> Block 1026 -# 1225| Block 402 -# 1225| r1225_1(glval) = VariableAddress[x402] : -# 1225| mu1225_2(String) = Uninitialized[x402] : &:r1225_1 -# 1225| r1225_3(glval) = FunctionAddress[String] : -# 1225| v1225_4(void) = Call[String] : func:r1225_3, this:r1225_1 -# 1225| mu1225_5(unknown) = ^CallSideEffect : ~m? -# 1225| mu1225_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1225_1 -# 1226| r1226_1(glval) = VariableAddress[x402] : -# 1226| r1226_2(glval) = FunctionAddress[~String] : -# 1226| v1226_3(void) = Call[~String] : func:r1226_2, this:r1226_1 -# 1226| mu1226_4(unknown) = ^CallSideEffect : ~m? -# 1226| v1226_5(void) = ^IndirectReadSideEffect[-1] : &:r1226_1, ~m? -# 1226| mu1226_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1226_1 -# 1226| r1226_7(bool) = Constant[0] : -# 1226| v1226_8(void) = ConditionalBranch : r1226_7 +# 35| Block 402 +# 35| r35_5629(glval) = VariableAddress[x402] : +# 35| mu35_5630(String) = Uninitialized[x402] : &:r35_5629 +# 35| r35_5631(glval) = FunctionAddress[String] : +# 35| v35_5632(void) = Call[String] : func:r35_5631, this:r35_5629 +# 35| mu35_5633(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5629 +# 35| r35_5635(glval) = VariableAddress[x402] : +# 35| r35_5636(glval) = FunctionAddress[~String] : +# 35| v35_5637(void) = Call[~String] : func:r35_5636, this:r35_5635 +# 35| mu35_5638(unknown) = ^CallSideEffect : ~m? +# 35| v35_5639(void) = ^IndirectReadSideEffect[-1] : &:r35_5635, ~m? +# 35| mu35_5640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5635 +# 35| r35_5641(bool) = Constant[0] : +# 35| v35_5642(void) = ConditionalBranch : r35_5641 #-----| False -> Block 403 #-----| True -> Block 1026 -# 1228| Block 403 -# 1228| r1228_1(glval) = VariableAddress[x403] : -# 1228| mu1228_2(String) = Uninitialized[x403] : &:r1228_1 -# 1228| r1228_3(glval) = FunctionAddress[String] : -# 1228| v1228_4(void) = Call[String] : func:r1228_3, this:r1228_1 -# 1228| mu1228_5(unknown) = ^CallSideEffect : ~m? -# 1228| mu1228_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1228_1 -# 1229| r1229_1(glval) = VariableAddress[x403] : -# 1229| r1229_2(glval) = FunctionAddress[~String] : -# 1229| v1229_3(void) = Call[~String] : func:r1229_2, this:r1229_1 -# 1229| mu1229_4(unknown) = ^CallSideEffect : ~m? -# 1229| v1229_5(void) = ^IndirectReadSideEffect[-1] : &:r1229_1, ~m? -# 1229| mu1229_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1229_1 -# 1229| r1229_7(bool) = Constant[0] : -# 1229| v1229_8(void) = ConditionalBranch : r1229_7 +# 35| Block 403 +# 35| r35_5643(glval) = VariableAddress[x403] : +# 35| mu35_5644(String) = Uninitialized[x403] : &:r35_5643 +# 35| r35_5645(glval) = FunctionAddress[String] : +# 35| v35_5646(void) = Call[String] : func:r35_5645, this:r35_5643 +# 35| mu35_5647(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5643 +# 35| r35_5649(glval) = VariableAddress[x403] : +# 35| r35_5650(glval) = FunctionAddress[~String] : +# 35| v35_5651(void) = Call[~String] : func:r35_5650, this:r35_5649 +# 35| mu35_5652(unknown) = ^CallSideEffect : ~m? +# 35| v35_5653(void) = ^IndirectReadSideEffect[-1] : &:r35_5649, ~m? +# 35| mu35_5654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5649 +# 35| r35_5655(bool) = Constant[0] : +# 35| v35_5656(void) = ConditionalBranch : r35_5655 #-----| False -> Block 404 #-----| True -> Block 1026 -# 1231| Block 404 -# 1231| r1231_1(glval) = VariableAddress[x404] : -# 1231| mu1231_2(String) = Uninitialized[x404] : &:r1231_1 -# 1231| r1231_3(glval) = FunctionAddress[String] : -# 1231| v1231_4(void) = Call[String] : func:r1231_3, this:r1231_1 -# 1231| mu1231_5(unknown) = ^CallSideEffect : ~m? -# 1231| mu1231_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1231_1 -# 1232| r1232_1(glval) = VariableAddress[x404] : -# 1232| r1232_2(glval) = FunctionAddress[~String] : -# 1232| v1232_3(void) = Call[~String] : func:r1232_2, this:r1232_1 -# 1232| mu1232_4(unknown) = ^CallSideEffect : ~m? -# 1232| v1232_5(void) = ^IndirectReadSideEffect[-1] : &:r1232_1, ~m? -# 1232| mu1232_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1232_1 -# 1232| r1232_7(bool) = Constant[0] : -# 1232| v1232_8(void) = ConditionalBranch : r1232_7 +# 35| Block 404 +# 35| r35_5657(glval) = VariableAddress[x404] : +# 35| mu35_5658(String) = Uninitialized[x404] : &:r35_5657 +# 35| r35_5659(glval) = FunctionAddress[String] : +# 35| v35_5660(void) = Call[String] : func:r35_5659, this:r35_5657 +# 35| mu35_5661(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5657 +# 35| r35_5663(glval) = VariableAddress[x404] : +# 35| r35_5664(glval) = FunctionAddress[~String] : +# 35| v35_5665(void) = Call[~String] : func:r35_5664, this:r35_5663 +# 35| mu35_5666(unknown) = ^CallSideEffect : ~m? +# 35| v35_5667(void) = ^IndirectReadSideEffect[-1] : &:r35_5663, ~m? +# 35| mu35_5668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5663 +# 35| r35_5669(bool) = Constant[0] : +# 35| v35_5670(void) = ConditionalBranch : r35_5669 #-----| False -> Block 405 #-----| True -> Block 1026 -# 1234| Block 405 -# 1234| r1234_1(glval) = VariableAddress[x405] : -# 1234| mu1234_2(String) = Uninitialized[x405] : &:r1234_1 -# 1234| r1234_3(glval) = FunctionAddress[String] : -# 1234| v1234_4(void) = Call[String] : func:r1234_3, this:r1234_1 -# 1234| mu1234_5(unknown) = ^CallSideEffect : ~m? -# 1234| mu1234_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1234_1 -# 1235| r1235_1(glval) = VariableAddress[x405] : -# 1235| r1235_2(glval) = FunctionAddress[~String] : -# 1235| v1235_3(void) = Call[~String] : func:r1235_2, this:r1235_1 -# 1235| mu1235_4(unknown) = ^CallSideEffect : ~m? -# 1235| v1235_5(void) = ^IndirectReadSideEffect[-1] : &:r1235_1, ~m? -# 1235| mu1235_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1235_1 -# 1235| r1235_7(bool) = Constant[0] : -# 1235| v1235_8(void) = ConditionalBranch : r1235_7 +# 35| Block 405 +# 35| r35_5671(glval) = VariableAddress[x405] : +# 35| mu35_5672(String) = Uninitialized[x405] : &:r35_5671 +# 35| r35_5673(glval) = FunctionAddress[String] : +# 35| v35_5674(void) = Call[String] : func:r35_5673, this:r35_5671 +# 35| mu35_5675(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5671 +# 35| r35_5677(glval) = VariableAddress[x405] : +# 35| r35_5678(glval) = FunctionAddress[~String] : +# 35| v35_5679(void) = Call[~String] : func:r35_5678, this:r35_5677 +# 35| mu35_5680(unknown) = ^CallSideEffect : ~m? +# 35| v35_5681(void) = ^IndirectReadSideEffect[-1] : &:r35_5677, ~m? +# 35| mu35_5682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5677 +# 35| r35_5683(bool) = Constant[0] : +# 35| v35_5684(void) = ConditionalBranch : r35_5683 #-----| False -> Block 406 #-----| True -> Block 1026 -# 1237| Block 406 -# 1237| r1237_1(glval) = VariableAddress[x406] : -# 1237| mu1237_2(String) = Uninitialized[x406] : &:r1237_1 -# 1237| r1237_3(glval) = FunctionAddress[String] : -# 1237| v1237_4(void) = Call[String] : func:r1237_3, this:r1237_1 -# 1237| mu1237_5(unknown) = ^CallSideEffect : ~m? -# 1237| mu1237_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1237_1 -# 1238| r1238_1(glval) = VariableAddress[x406] : -# 1238| r1238_2(glval) = FunctionAddress[~String] : -# 1238| v1238_3(void) = Call[~String] : func:r1238_2, this:r1238_1 -# 1238| mu1238_4(unknown) = ^CallSideEffect : ~m? -# 1238| v1238_5(void) = ^IndirectReadSideEffect[-1] : &:r1238_1, ~m? -# 1238| mu1238_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1238_1 -# 1238| r1238_7(bool) = Constant[0] : -# 1238| v1238_8(void) = ConditionalBranch : r1238_7 +# 35| Block 406 +# 35| r35_5685(glval) = VariableAddress[x406] : +# 35| mu35_5686(String) = Uninitialized[x406] : &:r35_5685 +# 35| r35_5687(glval) = FunctionAddress[String] : +# 35| v35_5688(void) = Call[String] : func:r35_5687, this:r35_5685 +# 35| mu35_5689(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5685 +# 35| r35_5691(glval) = VariableAddress[x406] : +# 35| r35_5692(glval) = FunctionAddress[~String] : +# 35| v35_5693(void) = Call[~String] : func:r35_5692, this:r35_5691 +# 35| mu35_5694(unknown) = ^CallSideEffect : ~m? +# 35| v35_5695(void) = ^IndirectReadSideEffect[-1] : &:r35_5691, ~m? +# 35| mu35_5696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5691 +# 35| r35_5697(bool) = Constant[0] : +# 35| v35_5698(void) = ConditionalBranch : r35_5697 #-----| False -> Block 407 #-----| True -> Block 1026 -# 1240| Block 407 -# 1240| r1240_1(glval) = VariableAddress[x407] : -# 1240| mu1240_2(String) = Uninitialized[x407] : &:r1240_1 -# 1240| r1240_3(glval) = FunctionAddress[String] : -# 1240| v1240_4(void) = Call[String] : func:r1240_3, this:r1240_1 -# 1240| mu1240_5(unknown) = ^CallSideEffect : ~m? -# 1240| mu1240_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1240_1 -# 1241| r1241_1(glval) = VariableAddress[x407] : -# 1241| r1241_2(glval) = FunctionAddress[~String] : -# 1241| v1241_3(void) = Call[~String] : func:r1241_2, this:r1241_1 -# 1241| mu1241_4(unknown) = ^CallSideEffect : ~m? -# 1241| v1241_5(void) = ^IndirectReadSideEffect[-1] : &:r1241_1, ~m? -# 1241| mu1241_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_1 -# 1241| r1241_7(bool) = Constant[0] : -# 1241| v1241_8(void) = ConditionalBranch : r1241_7 +# 35| Block 407 +# 35| r35_5699(glval) = VariableAddress[x407] : +# 35| mu35_5700(String) = Uninitialized[x407] : &:r35_5699 +# 35| r35_5701(glval) = FunctionAddress[String] : +# 35| v35_5702(void) = Call[String] : func:r35_5701, this:r35_5699 +# 35| mu35_5703(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5699 +# 35| r35_5705(glval) = VariableAddress[x407] : +# 35| r35_5706(glval) = FunctionAddress[~String] : +# 35| v35_5707(void) = Call[~String] : func:r35_5706, this:r35_5705 +# 35| mu35_5708(unknown) = ^CallSideEffect : ~m? +# 35| v35_5709(void) = ^IndirectReadSideEffect[-1] : &:r35_5705, ~m? +# 35| mu35_5710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5705 +# 35| r35_5711(bool) = Constant[0] : +# 35| v35_5712(void) = ConditionalBranch : r35_5711 #-----| False -> Block 408 #-----| True -> Block 1026 -# 1243| Block 408 -# 1243| r1243_1(glval) = VariableAddress[x408] : -# 1243| mu1243_2(String) = Uninitialized[x408] : &:r1243_1 -# 1243| r1243_3(glval) = FunctionAddress[String] : -# 1243| v1243_4(void) = Call[String] : func:r1243_3, this:r1243_1 -# 1243| mu1243_5(unknown) = ^CallSideEffect : ~m? -# 1243| mu1243_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_1 -# 1244| r1244_1(glval) = VariableAddress[x408] : -# 1244| r1244_2(glval) = FunctionAddress[~String] : -# 1244| v1244_3(void) = Call[~String] : func:r1244_2, this:r1244_1 -# 1244| mu1244_4(unknown) = ^CallSideEffect : ~m? -# 1244| v1244_5(void) = ^IndirectReadSideEffect[-1] : &:r1244_1, ~m? -# 1244| mu1244_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_1 -# 1244| r1244_7(bool) = Constant[0] : -# 1244| v1244_8(void) = ConditionalBranch : r1244_7 +# 35| Block 408 +# 35| r35_5713(glval) = VariableAddress[x408] : +# 35| mu35_5714(String) = Uninitialized[x408] : &:r35_5713 +# 35| r35_5715(glval) = FunctionAddress[String] : +# 35| v35_5716(void) = Call[String] : func:r35_5715, this:r35_5713 +# 35| mu35_5717(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5713 +# 35| r35_5719(glval) = VariableAddress[x408] : +# 35| r35_5720(glval) = FunctionAddress[~String] : +# 35| v35_5721(void) = Call[~String] : func:r35_5720, this:r35_5719 +# 35| mu35_5722(unknown) = ^CallSideEffect : ~m? +# 35| v35_5723(void) = ^IndirectReadSideEffect[-1] : &:r35_5719, ~m? +# 35| mu35_5724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5719 +# 35| r35_5725(bool) = Constant[0] : +# 35| v35_5726(void) = ConditionalBranch : r35_5725 #-----| False -> Block 409 #-----| True -> Block 1026 -# 1246| Block 409 -# 1246| r1246_1(glval) = VariableAddress[x409] : -# 1246| mu1246_2(String) = Uninitialized[x409] : &:r1246_1 -# 1246| r1246_3(glval) = FunctionAddress[String] : -# 1246| v1246_4(void) = Call[String] : func:r1246_3, this:r1246_1 -# 1246| mu1246_5(unknown) = ^CallSideEffect : ~m? -# 1246| mu1246_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1246_1 -# 1247| r1247_1(glval) = VariableAddress[x409] : -# 1247| r1247_2(glval) = FunctionAddress[~String] : -# 1247| v1247_3(void) = Call[~String] : func:r1247_2, this:r1247_1 -# 1247| mu1247_4(unknown) = ^CallSideEffect : ~m? -# 1247| v1247_5(void) = ^IndirectReadSideEffect[-1] : &:r1247_1, ~m? -# 1247| mu1247_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1247_1 -# 1247| r1247_7(bool) = Constant[0] : -# 1247| v1247_8(void) = ConditionalBranch : r1247_7 +# 35| Block 409 +# 35| r35_5727(glval) = VariableAddress[x409] : +# 35| mu35_5728(String) = Uninitialized[x409] : &:r35_5727 +# 35| r35_5729(glval) = FunctionAddress[String] : +# 35| v35_5730(void) = Call[String] : func:r35_5729, this:r35_5727 +# 35| mu35_5731(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5727 +# 35| r35_5733(glval) = VariableAddress[x409] : +# 35| r35_5734(glval) = FunctionAddress[~String] : +# 35| v35_5735(void) = Call[~String] : func:r35_5734, this:r35_5733 +# 35| mu35_5736(unknown) = ^CallSideEffect : ~m? +# 35| v35_5737(void) = ^IndirectReadSideEffect[-1] : &:r35_5733, ~m? +# 35| mu35_5738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5733 +# 35| r35_5739(bool) = Constant[0] : +# 35| v35_5740(void) = ConditionalBranch : r35_5739 #-----| False -> Block 410 #-----| True -> Block 1026 -# 1249| Block 410 -# 1249| r1249_1(glval) = VariableAddress[x410] : -# 1249| mu1249_2(String) = Uninitialized[x410] : &:r1249_1 -# 1249| r1249_3(glval) = FunctionAddress[String] : -# 1249| v1249_4(void) = Call[String] : func:r1249_3, this:r1249_1 -# 1249| mu1249_5(unknown) = ^CallSideEffect : ~m? -# 1249| mu1249_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1249_1 -# 1250| r1250_1(glval) = VariableAddress[x410] : -# 1250| r1250_2(glval) = FunctionAddress[~String] : -# 1250| v1250_3(void) = Call[~String] : func:r1250_2, this:r1250_1 -# 1250| mu1250_4(unknown) = ^CallSideEffect : ~m? -# 1250| v1250_5(void) = ^IndirectReadSideEffect[-1] : &:r1250_1, ~m? -# 1250| mu1250_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1250_1 -# 1250| r1250_7(bool) = Constant[0] : -# 1250| v1250_8(void) = ConditionalBranch : r1250_7 +# 35| Block 410 +# 35| r35_5741(glval) = VariableAddress[x410] : +# 35| mu35_5742(String) = Uninitialized[x410] : &:r35_5741 +# 35| r35_5743(glval) = FunctionAddress[String] : +# 35| v35_5744(void) = Call[String] : func:r35_5743, this:r35_5741 +# 35| mu35_5745(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5741 +# 35| r35_5747(glval) = VariableAddress[x410] : +# 35| r35_5748(glval) = FunctionAddress[~String] : +# 35| v35_5749(void) = Call[~String] : func:r35_5748, this:r35_5747 +# 35| mu35_5750(unknown) = ^CallSideEffect : ~m? +# 35| v35_5751(void) = ^IndirectReadSideEffect[-1] : &:r35_5747, ~m? +# 35| mu35_5752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5747 +# 35| r35_5753(bool) = Constant[0] : +# 35| v35_5754(void) = ConditionalBranch : r35_5753 #-----| False -> Block 411 #-----| True -> Block 1026 -# 1252| Block 411 -# 1252| r1252_1(glval) = VariableAddress[x411] : -# 1252| mu1252_2(String) = Uninitialized[x411] : &:r1252_1 -# 1252| r1252_3(glval) = FunctionAddress[String] : -# 1252| v1252_4(void) = Call[String] : func:r1252_3, this:r1252_1 -# 1252| mu1252_5(unknown) = ^CallSideEffect : ~m? -# 1252| mu1252_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1252_1 -# 1253| r1253_1(glval) = VariableAddress[x411] : -# 1253| r1253_2(glval) = FunctionAddress[~String] : -# 1253| v1253_3(void) = Call[~String] : func:r1253_2, this:r1253_1 -# 1253| mu1253_4(unknown) = ^CallSideEffect : ~m? -# 1253| v1253_5(void) = ^IndirectReadSideEffect[-1] : &:r1253_1, ~m? -# 1253| mu1253_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1253_1 -# 1253| r1253_7(bool) = Constant[0] : -# 1253| v1253_8(void) = ConditionalBranch : r1253_7 +# 35| Block 411 +# 35| r35_5755(glval) = VariableAddress[x411] : +# 35| mu35_5756(String) = Uninitialized[x411] : &:r35_5755 +# 35| r35_5757(glval) = FunctionAddress[String] : +# 35| v35_5758(void) = Call[String] : func:r35_5757, this:r35_5755 +# 35| mu35_5759(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5755 +# 35| r35_5761(glval) = VariableAddress[x411] : +# 35| r35_5762(glval) = FunctionAddress[~String] : +# 35| v35_5763(void) = Call[~String] : func:r35_5762, this:r35_5761 +# 35| mu35_5764(unknown) = ^CallSideEffect : ~m? +# 35| v35_5765(void) = ^IndirectReadSideEffect[-1] : &:r35_5761, ~m? +# 35| mu35_5766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5761 +# 35| r35_5767(bool) = Constant[0] : +# 35| v35_5768(void) = ConditionalBranch : r35_5767 #-----| False -> Block 412 #-----| True -> Block 1026 -# 1255| Block 412 -# 1255| r1255_1(glval) = VariableAddress[x412] : -# 1255| mu1255_2(String) = Uninitialized[x412] : &:r1255_1 -# 1255| r1255_3(glval) = FunctionAddress[String] : -# 1255| v1255_4(void) = Call[String] : func:r1255_3, this:r1255_1 -# 1255| mu1255_5(unknown) = ^CallSideEffect : ~m? -# 1255| mu1255_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1255_1 -# 1256| r1256_1(glval) = VariableAddress[x412] : -# 1256| r1256_2(glval) = FunctionAddress[~String] : -# 1256| v1256_3(void) = Call[~String] : func:r1256_2, this:r1256_1 -# 1256| mu1256_4(unknown) = ^CallSideEffect : ~m? -# 1256| v1256_5(void) = ^IndirectReadSideEffect[-1] : &:r1256_1, ~m? -# 1256| mu1256_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1256_1 -# 1256| r1256_7(bool) = Constant[0] : -# 1256| v1256_8(void) = ConditionalBranch : r1256_7 +# 35| Block 412 +# 35| r35_5769(glval) = VariableAddress[x412] : +# 35| mu35_5770(String) = Uninitialized[x412] : &:r35_5769 +# 35| r35_5771(glval) = FunctionAddress[String] : +# 35| v35_5772(void) = Call[String] : func:r35_5771, this:r35_5769 +# 35| mu35_5773(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5769 +# 35| r35_5775(glval) = VariableAddress[x412] : +# 35| r35_5776(glval) = FunctionAddress[~String] : +# 35| v35_5777(void) = Call[~String] : func:r35_5776, this:r35_5775 +# 35| mu35_5778(unknown) = ^CallSideEffect : ~m? +# 35| v35_5779(void) = ^IndirectReadSideEffect[-1] : &:r35_5775, ~m? +# 35| mu35_5780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5775 +# 35| r35_5781(bool) = Constant[0] : +# 35| v35_5782(void) = ConditionalBranch : r35_5781 #-----| False -> Block 413 #-----| True -> Block 1026 -# 1258| Block 413 -# 1258| r1258_1(glval) = VariableAddress[x413] : -# 1258| mu1258_2(String) = Uninitialized[x413] : &:r1258_1 -# 1258| r1258_3(glval) = FunctionAddress[String] : -# 1258| v1258_4(void) = Call[String] : func:r1258_3, this:r1258_1 -# 1258| mu1258_5(unknown) = ^CallSideEffect : ~m? -# 1258| mu1258_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1258_1 -# 1259| r1259_1(glval) = VariableAddress[x413] : -# 1259| r1259_2(glval) = FunctionAddress[~String] : -# 1259| v1259_3(void) = Call[~String] : func:r1259_2, this:r1259_1 -# 1259| mu1259_4(unknown) = ^CallSideEffect : ~m? -# 1259| v1259_5(void) = ^IndirectReadSideEffect[-1] : &:r1259_1, ~m? -# 1259| mu1259_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1259_1 -# 1259| r1259_7(bool) = Constant[0] : -# 1259| v1259_8(void) = ConditionalBranch : r1259_7 +# 35| Block 413 +# 35| r35_5783(glval) = VariableAddress[x413] : +# 35| mu35_5784(String) = Uninitialized[x413] : &:r35_5783 +# 35| r35_5785(glval) = FunctionAddress[String] : +# 35| v35_5786(void) = Call[String] : func:r35_5785, this:r35_5783 +# 35| mu35_5787(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5783 +# 35| r35_5789(glval) = VariableAddress[x413] : +# 35| r35_5790(glval) = FunctionAddress[~String] : +# 35| v35_5791(void) = Call[~String] : func:r35_5790, this:r35_5789 +# 35| mu35_5792(unknown) = ^CallSideEffect : ~m? +# 35| v35_5793(void) = ^IndirectReadSideEffect[-1] : &:r35_5789, ~m? +# 35| mu35_5794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5789 +# 35| r35_5795(bool) = Constant[0] : +# 35| v35_5796(void) = ConditionalBranch : r35_5795 #-----| False -> Block 414 #-----| True -> Block 1026 -# 1261| Block 414 -# 1261| r1261_1(glval) = VariableAddress[x414] : -# 1261| mu1261_2(String) = Uninitialized[x414] : &:r1261_1 -# 1261| r1261_3(glval) = FunctionAddress[String] : -# 1261| v1261_4(void) = Call[String] : func:r1261_3, this:r1261_1 -# 1261| mu1261_5(unknown) = ^CallSideEffect : ~m? -# 1261| mu1261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1261_1 -# 1262| r1262_1(glval) = VariableAddress[x414] : -# 1262| r1262_2(glval) = FunctionAddress[~String] : -# 1262| v1262_3(void) = Call[~String] : func:r1262_2, this:r1262_1 -# 1262| mu1262_4(unknown) = ^CallSideEffect : ~m? -# 1262| v1262_5(void) = ^IndirectReadSideEffect[-1] : &:r1262_1, ~m? -# 1262| mu1262_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1262_1 -# 1262| r1262_7(bool) = Constant[0] : -# 1262| v1262_8(void) = ConditionalBranch : r1262_7 +# 35| Block 414 +# 35| r35_5797(glval) = VariableAddress[x414] : +# 35| mu35_5798(String) = Uninitialized[x414] : &:r35_5797 +# 35| r35_5799(glval) = FunctionAddress[String] : +# 35| v35_5800(void) = Call[String] : func:r35_5799, this:r35_5797 +# 35| mu35_5801(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5797 +# 35| r35_5803(glval) = VariableAddress[x414] : +# 35| r35_5804(glval) = FunctionAddress[~String] : +# 35| v35_5805(void) = Call[~String] : func:r35_5804, this:r35_5803 +# 35| mu35_5806(unknown) = ^CallSideEffect : ~m? +# 35| v35_5807(void) = ^IndirectReadSideEffect[-1] : &:r35_5803, ~m? +# 35| mu35_5808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5803 +# 35| r35_5809(bool) = Constant[0] : +# 35| v35_5810(void) = ConditionalBranch : r35_5809 #-----| False -> Block 415 #-----| True -> Block 1026 -# 1264| Block 415 -# 1264| r1264_1(glval) = VariableAddress[x415] : -# 1264| mu1264_2(String) = Uninitialized[x415] : &:r1264_1 -# 1264| r1264_3(glval) = FunctionAddress[String] : -# 1264| v1264_4(void) = Call[String] : func:r1264_3, this:r1264_1 -# 1264| mu1264_5(unknown) = ^CallSideEffect : ~m? -# 1264| mu1264_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1264_1 -# 1265| r1265_1(glval) = VariableAddress[x415] : -# 1265| r1265_2(glval) = FunctionAddress[~String] : -# 1265| v1265_3(void) = Call[~String] : func:r1265_2, this:r1265_1 -# 1265| mu1265_4(unknown) = ^CallSideEffect : ~m? -# 1265| v1265_5(void) = ^IndirectReadSideEffect[-1] : &:r1265_1, ~m? -# 1265| mu1265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1265_1 -# 1265| r1265_7(bool) = Constant[0] : -# 1265| v1265_8(void) = ConditionalBranch : r1265_7 +# 35| Block 415 +# 35| r35_5811(glval) = VariableAddress[x415] : +# 35| mu35_5812(String) = Uninitialized[x415] : &:r35_5811 +# 35| r35_5813(glval) = FunctionAddress[String] : +# 35| v35_5814(void) = Call[String] : func:r35_5813, this:r35_5811 +# 35| mu35_5815(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5811 +# 35| r35_5817(glval) = VariableAddress[x415] : +# 35| r35_5818(glval) = FunctionAddress[~String] : +# 35| v35_5819(void) = Call[~String] : func:r35_5818, this:r35_5817 +# 35| mu35_5820(unknown) = ^CallSideEffect : ~m? +# 35| v35_5821(void) = ^IndirectReadSideEffect[-1] : &:r35_5817, ~m? +# 35| mu35_5822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5817 +# 35| r35_5823(bool) = Constant[0] : +# 35| v35_5824(void) = ConditionalBranch : r35_5823 #-----| False -> Block 416 #-----| True -> Block 1026 -# 1267| Block 416 -# 1267| r1267_1(glval) = VariableAddress[x416] : -# 1267| mu1267_2(String) = Uninitialized[x416] : &:r1267_1 -# 1267| r1267_3(glval) = FunctionAddress[String] : -# 1267| v1267_4(void) = Call[String] : func:r1267_3, this:r1267_1 -# 1267| mu1267_5(unknown) = ^CallSideEffect : ~m? -# 1267| mu1267_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1267_1 -# 1268| r1268_1(glval) = VariableAddress[x416] : -# 1268| r1268_2(glval) = FunctionAddress[~String] : -# 1268| v1268_3(void) = Call[~String] : func:r1268_2, this:r1268_1 -# 1268| mu1268_4(unknown) = ^CallSideEffect : ~m? -# 1268| v1268_5(void) = ^IndirectReadSideEffect[-1] : &:r1268_1, ~m? -# 1268| mu1268_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1268_1 -# 1268| r1268_7(bool) = Constant[0] : -# 1268| v1268_8(void) = ConditionalBranch : r1268_7 +# 35| Block 416 +# 35| r35_5825(glval) = VariableAddress[x416] : +# 35| mu35_5826(String) = Uninitialized[x416] : &:r35_5825 +# 35| r35_5827(glval) = FunctionAddress[String] : +# 35| v35_5828(void) = Call[String] : func:r35_5827, this:r35_5825 +# 35| mu35_5829(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5825 +# 35| r35_5831(glval) = VariableAddress[x416] : +# 35| r35_5832(glval) = FunctionAddress[~String] : +# 35| v35_5833(void) = Call[~String] : func:r35_5832, this:r35_5831 +# 35| mu35_5834(unknown) = ^CallSideEffect : ~m? +# 35| v35_5835(void) = ^IndirectReadSideEffect[-1] : &:r35_5831, ~m? +# 35| mu35_5836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5831 +# 35| r35_5837(bool) = Constant[0] : +# 35| v35_5838(void) = ConditionalBranch : r35_5837 #-----| False -> Block 417 #-----| True -> Block 1026 -# 1270| Block 417 -# 1270| r1270_1(glval) = VariableAddress[x417] : -# 1270| mu1270_2(String) = Uninitialized[x417] : &:r1270_1 -# 1270| r1270_3(glval) = FunctionAddress[String] : -# 1270| v1270_4(void) = Call[String] : func:r1270_3, this:r1270_1 -# 1270| mu1270_5(unknown) = ^CallSideEffect : ~m? -# 1270| mu1270_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1270_1 -# 1271| r1271_1(glval) = VariableAddress[x417] : -# 1271| r1271_2(glval) = FunctionAddress[~String] : -# 1271| v1271_3(void) = Call[~String] : func:r1271_2, this:r1271_1 -# 1271| mu1271_4(unknown) = ^CallSideEffect : ~m? -# 1271| v1271_5(void) = ^IndirectReadSideEffect[-1] : &:r1271_1, ~m? -# 1271| mu1271_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1271| r1271_7(bool) = Constant[0] : -# 1271| v1271_8(void) = ConditionalBranch : r1271_7 +# 35| Block 417 +# 35| r35_5839(glval) = VariableAddress[x417] : +# 35| mu35_5840(String) = Uninitialized[x417] : &:r35_5839 +# 35| r35_5841(glval) = FunctionAddress[String] : +# 35| v35_5842(void) = Call[String] : func:r35_5841, this:r35_5839 +# 35| mu35_5843(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5839 +# 35| r35_5845(glval) = VariableAddress[x417] : +# 35| r35_5846(glval) = FunctionAddress[~String] : +# 35| v35_5847(void) = Call[~String] : func:r35_5846, this:r35_5845 +# 35| mu35_5848(unknown) = ^CallSideEffect : ~m? +# 35| v35_5849(void) = ^IndirectReadSideEffect[-1] : &:r35_5845, ~m? +# 35| mu35_5850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5845 +# 35| r35_5851(bool) = Constant[0] : +# 35| v35_5852(void) = ConditionalBranch : r35_5851 #-----| False -> Block 418 #-----| True -> Block 1026 -# 1273| Block 418 -# 1273| r1273_1(glval) = VariableAddress[x418] : -# 1273| mu1273_2(String) = Uninitialized[x418] : &:r1273_1 -# 1273| r1273_3(glval) = FunctionAddress[String] : -# 1273| v1273_4(void) = Call[String] : func:r1273_3, this:r1273_1 -# 1273| mu1273_5(unknown) = ^CallSideEffect : ~m? -# 1273| mu1273_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 -# 1274| r1274_1(glval) = VariableAddress[x418] : -# 1274| r1274_2(glval) = FunctionAddress[~String] : -# 1274| v1274_3(void) = Call[~String] : func:r1274_2, this:r1274_1 -# 1274| mu1274_4(unknown) = ^CallSideEffect : ~m? -# 1274| v1274_5(void) = ^IndirectReadSideEffect[-1] : &:r1274_1, ~m? -# 1274| mu1274_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1274_1 -# 1274| r1274_7(bool) = Constant[0] : -# 1274| v1274_8(void) = ConditionalBranch : r1274_7 +# 35| Block 418 +# 35| r35_5853(glval) = VariableAddress[x418] : +# 35| mu35_5854(String) = Uninitialized[x418] : &:r35_5853 +# 35| r35_5855(glval) = FunctionAddress[String] : +# 35| v35_5856(void) = Call[String] : func:r35_5855, this:r35_5853 +# 35| mu35_5857(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5853 +# 35| r35_5859(glval) = VariableAddress[x418] : +# 35| r35_5860(glval) = FunctionAddress[~String] : +# 35| v35_5861(void) = Call[~String] : func:r35_5860, this:r35_5859 +# 35| mu35_5862(unknown) = ^CallSideEffect : ~m? +# 35| v35_5863(void) = ^IndirectReadSideEffect[-1] : &:r35_5859, ~m? +# 35| mu35_5864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5859 +# 35| r35_5865(bool) = Constant[0] : +# 35| v35_5866(void) = ConditionalBranch : r35_5865 #-----| False -> Block 419 #-----| True -> Block 1026 -# 1276| Block 419 -# 1276| r1276_1(glval) = VariableAddress[x419] : -# 1276| mu1276_2(String) = Uninitialized[x419] : &:r1276_1 -# 1276| r1276_3(glval) = FunctionAddress[String] : -# 1276| v1276_4(void) = Call[String] : func:r1276_3, this:r1276_1 -# 1276| mu1276_5(unknown) = ^CallSideEffect : ~m? -# 1276| mu1276_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1276_1 -# 1277| r1277_1(glval) = VariableAddress[x419] : -# 1277| r1277_2(glval) = FunctionAddress[~String] : -# 1277| v1277_3(void) = Call[~String] : func:r1277_2, this:r1277_1 -# 1277| mu1277_4(unknown) = ^CallSideEffect : ~m? -# 1277| v1277_5(void) = ^IndirectReadSideEffect[-1] : &:r1277_1, ~m? -# 1277| mu1277_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1277_1 -# 1277| r1277_7(bool) = Constant[0] : -# 1277| v1277_8(void) = ConditionalBranch : r1277_7 +# 35| Block 419 +# 35| r35_5867(glval) = VariableAddress[x419] : +# 35| mu35_5868(String) = Uninitialized[x419] : &:r35_5867 +# 35| r35_5869(glval) = FunctionAddress[String] : +# 35| v35_5870(void) = Call[String] : func:r35_5869, this:r35_5867 +# 35| mu35_5871(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5867 +# 35| r35_5873(glval) = VariableAddress[x419] : +# 35| r35_5874(glval) = FunctionAddress[~String] : +# 35| v35_5875(void) = Call[~String] : func:r35_5874, this:r35_5873 +# 35| mu35_5876(unknown) = ^CallSideEffect : ~m? +# 35| v35_5877(void) = ^IndirectReadSideEffect[-1] : &:r35_5873, ~m? +# 35| mu35_5878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5873 +# 35| r35_5879(bool) = Constant[0] : +# 35| v35_5880(void) = ConditionalBranch : r35_5879 #-----| False -> Block 420 #-----| True -> Block 1026 -# 1279| Block 420 -# 1279| r1279_1(glval) = VariableAddress[x420] : -# 1279| mu1279_2(String) = Uninitialized[x420] : &:r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[String] : -# 1279| v1279_4(void) = Call[String] : func:r1279_3, this:r1279_1 -# 1279| mu1279_5(unknown) = ^CallSideEffect : ~m? -# 1279| mu1279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1279_1 -# 1280| r1280_1(glval) = VariableAddress[x420] : -# 1280| r1280_2(glval) = FunctionAddress[~String] : -# 1280| v1280_3(void) = Call[~String] : func:r1280_2, this:r1280_1 -# 1280| mu1280_4(unknown) = ^CallSideEffect : ~m? -# 1280| v1280_5(void) = ^IndirectReadSideEffect[-1] : &:r1280_1, ~m? -# 1280| mu1280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1280_1 -# 1280| r1280_7(bool) = Constant[0] : -# 1280| v1280_8(void) = ConditionalBranch : r1280_7 +# 35| Block 420 +# 35| r35_5881(glval) = VariableAddress[x420] : +# 35| mu35_5882(String) = Uninitialized[x420] : &:r35_5881 +# 35| r35_5883(glval) = FunctionAddress[String] : +# 35| v35_5884(void) = Call[String] : func:r35_5883, this:r35_5881 +# 35| mu35_5885(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5881 +# 35| r35_5887(glval) = VariableAddress[x420] : +# 35| r35_5888(glval) = FunctionAddress[~String] : +# 35| v35_5889(void) = Call[~String] : func:r35_5888, this:r35_5887 +# 35| mu35_5890(unknown) = ^CallSideEffect : ~m? +# 35| v35_5891(void) = ^IndirectReadSideEffect[-1] : &:r35_5887, ~m? +# 35| mu35_5892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5887 +# 35| r35_5893(bool) = Constant[0] : +# 35| v35_5894(void) = ConditionalBranch : r35_5893 #-----| False -> Block 421 #-----| True -> Block 1026 -# 1282| Block 421 -# 1282| r1282_1(glval) = VariableAddress[x421] : -# 1282| mu1282_2(String) = Uninitialized[x421] : &:r1282_1 -# 1282| r1282_3(glval) = FunctionAddress[String] : -# 1282| v1282_4(void) = Call[String] : func:r1282_3, this:r1282_1 -# 1282| mu1282_5(unknown) = ^CallSideEffect : ~m? -# 1282| mu1282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1282_1 -# 1283| r1283_1(glval) = VariableAddress[x421] : -# 1283| r1283_2(glval) = FunctionAddress[~String] : -# 1283| v1283_3(void) = Call[~String] : func:r1283_2, this:r1283_1 -# 1283| mu1283_4(unknown) = ^CallSideEffect : ~m? -# 1283| v1283_5(void) = ^IndirectReadSideEffect[-1] : &:r1283_1, ~m? -# 1283| mu1283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1283_1 -# 1283| r1283_7(bool) = Constant[0] : -# 1283| v1283_8(void) = ConditionalBranch : r1283_7 +# 35| Block 421 +# 35| r35_5895(glval) = VariableAddress[x421] : +# 35| mu35_5896(String) = Uninitialized[x421] : &:r35_5895 +# 35| r35_5897(glval) = FunctionAddress[String] : +# 35| v35_5898(void) = Call[String] : func:r35_5897, this:r35_5895 +# 35| mu35_5899(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5895 +# 35| r35_5901(glval) = VariableAddress[x421] : +# 35| r35_5902(glval) = FunctionAddress[~String] : +# 35| v35_5903(void) = Call[~String] : func:r35_5902, this:r35_5901 +# 35| mu35_5904(unknown) = ^CallSideEffect : ~m? +# 35| v35_5905(void) = ^IndirectReadSideEffect[-1] : &:r35_5901, ~m? +# 35| mu35_5906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5901 +# 35| r35_5907(bool) = Constant[0] : +# 35| v35_5908(void) = ConditionalBranch : r35_5907 #-----| False -> Block 422 #-----| True -> Block 1026 -# 1285| Block 422 -# 1285| r1285_1(glval) = VariableAddress[x422] : -# 1285| mu1285_2(String) = Uninitialized[x422] : &:r1285_1 -# 1285| r1285_3(glval) = FunctionAddress[String] : -# 1285| v1285_4(void) = Call[String] : func:r1285_3, this:r1285_1 -# 1285| mu1285_5(unknown) = ^CallSideEffect : ~m? -# 1285| mu1285_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1285_1 -# 1286| r1286_1(glval) = VariableAddress[x422] : -# 1286| r1286_2(glval) = FunctionAddress[~String] : -# 1286| v1286_3(void) = Call[~String] : func:r1286_2, this:r1286_1 -# 1286| mu1286_4(unknown) = ^CallSideEffect : ~m? -# 1286| v1286_5(void) = ^IndirectReadSideEffect[-1] : &:r1286_1, ~m? -# 1286| mu1286_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1286_1 -# 1286| r1286_7(bool) = Constant[0] : -# 1286| v1286_8(void) = ConditionalBranch : r1286_7 +# 35| Block 422 +# 35| r35_5909(glval) = VariableAddress[x422] : +# 35| mu35_5910(String) = Uninitialized[x422] : &:r35_5909 +# 35| r35_5911(glval) = FunctionAddress[String] : +# 35| v35_5912(void) = Call[String] : func:r35_5911, this:r35_5909 +# 35| mu35_5913(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5909 +# 35| r35_5915(glval) = VariableAddress[x422] : +# 35| r35_5916(glval) = FunctionAddress[~String] : +# 35| v35_5917(void) = Call[~String] : func:r35_5916, this:r35_5915 +# 35| mu35_5918(unknown) = ^CallSideEffect : ~m? +# 35| v35_5919(void) = ^IndirectReadSideEffect[-1] : &:r35_5915, ~m? +# 35| mu35_5920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5915 +# 35| r35_5921(bool) = Constant[0] : +# 35| v35_5922(void) = ConditionalBranch : r35_5921 #-----| False -> Block 423 #-----| True -> Block 1026 -# 1288| Block 423 -# 1288| r1288_1(glval) = VariableAddress[x423] : -# 1288| mu1288_2(String) = Uninitialized[x423] : &:r1288_1 -# 1288| r1288_3(glval) = FunctionAddress[String] : -# 1288| v1288_4(void) = Call[String] : func:r1288_3, this:r1288_1 -# 1288| mu1288_5(unknown) = ^CallSideEffect : ~m? -# 1288| mu1288_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1288_1 -# 1289| r1289_1(glval) = VariableAddress[x423] : -# 1289| r1289_2(glval) = FunctionAddress[~String] : -# 1289| v1289_3(void) = Call[~String] : func:r1289_2, this:r1289_1 -# 1289| mu1289_4(unknown) = ^CallSideEffect : ~m? -# 1289| v1289_5(void) = ^IndirectReadSideEffect[-1] : &:r1289_1, ~m? -# 1289| mu1289_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1289_1 -# 1289| r1289_7(bool) = Constant[0] : -# 1289| v1289_8(void) = ConditionalBranch : r1289_7 +# 35| Block 423 +# 35| r35_5923(glval) = VariableAddress[x423] : +# 35| mu35_5924(String) = Uninitialized[x423] : &:r35_5923 +# 35| r35_5925(glval) = FunctionAddress[String] : +# 35| v35_5926(void) = Call[String] : func:r35_5925, this:r35_5923 +# 35| mu35_5927(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5923 +# 35| r35_5929(glval) = VariableAddress[x423] : +# 35| r35_5930(glval) = FunctionAddress[~String] : +# 35| v35_5931(void) = Call[~String] : func:r35_5930, this:r35_5929 +# 35| mu35_5932(unknown) = ^CallSideEffect : ~m? +# 35| v35_5933(void) = ^IndirectReadSideEffect[-1] : &:r35_5929, ~m? +# 35| mu35_5934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5929 +# 35| r35_5935(bool) = Constant[0] : +# 35| v35_5936(void) = ConditionalBranch : r35_5935 #-----| False -> Block 424 #-----| True -> Block 1026 -# 1291| Block 424 -# 1291| r1291_1(glval) = VariableAddress[x424] : -# 1291| mu1291_2(String) = Uninitialized[x424] : &:r1291_1 -# 1291| r1291_3(glval) = FunctionAddress[String] : -# 1291| v1291_4(void) = Call[String] : func:r1291_3, this:r1291_1 -# 1291| mu1291_5(unknown) = ^CallSideEffect : ~m? -# 1291| mu1291_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1291_1 -# 1292| r1292_1(glval) = VariableAddress[x424] : -# 1292| r1292_2(glval) = FunctionAddress[~String] : -# 1292| v1292_3(void) = Call[~String] : func:r1292_2, this:r1292_1 -# 1292| mu1292_4(unknown) = ^CallSideEffect : ~m? -# 1292| v1292_5(void) = ^IndirectReadSideEffect[-1] : &:r1292_1, ~m? -# 1292| mu1292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_1 -# 1292| r1292_7(bool) = Constant[0] : -# 1292| v1292_8(void) = ConditionalBranch : r1292_7 +# 35| Block 424 +# 35| r35_5937(glval) = VariableAddress[x424] : +# 35| mu35_5938(String) = Uninitialized[x424] : &:r35_5937 +# 35| r35_5939(glval) = FunctionAddress[String] : +# 35| v35_5940(void) = Call[String] : func:r35_5939, this:r35_5937 +# 35| mu35_5941(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5937 +# 35| r35_5943(glval) = VariableAddress[x424] : +# 35| r35_5944(glval) = FunctionAddress[~String] : +# 35| v35_5945(void) = Call[~String] : func:r35_5944, this:r35_5943 +# 35| mu35_5946(unknown) = ^CallSideEffect : ~m? +# 35| v35_5947(void) = ^IndirectReadSideEffect[-1] : &:r35_5943, ~m? +# 35| mu35_5948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5943 +# 35| r35_5949(bool) = Constant[0] : +# 35| v35_5950(void) = ConditionalBranch : r35_5949 #-----| False -> Block 425 #-----| True -> Block 1026 -# 1294| Block 425 -# 1294| r1294_1(glval) = VariableAddress[x425] : -# 1294| mu1294_2(String) = Uninitialized[x425] : &:r1294_1 -# 1294| r1294_3(glval) = FunctionAddress[String] : -# 1294| v1294_4(void) = Call[String] : func:r1294_3, this:r1294_1 -# 1294| mu1294_5(unknown) = ^CallSideEffect : ~m? -# 1294| mu1294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1294_1 -# 1295| r1295_1(glval) = VariableAddress[x425] : -# 1295| r1295_2(glval) = FunctionAddress[~String] : -# 1295| v1295_3(void) = Call[~String] : func:r1295_2, this:r1295_1 -# 1295| mu1295_4(unknown) = ^CallSideEffect : ~m? -# 1295| v1295_5(void) = ^IndirectReadSideEffect[-1] : &:r1295_1, ~m? -# 1295| mu1295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1295_1 -# 1295| r1295_7(bool) = Constant[0] : -# 1295| v1295_8(void) = ConditionalBranch : r1295_7 +# 35| Block 425 +# 35| r35_5951(glval) = VariableAddress[x425] : +# 35| mu35_5952(String) = Uninitialized[x425] : &:r35_5951 +# 35| r35_5953(glval) = FunctionAddress[String] : +# 35| v35_5954(void) = Call[String] : func:r35_5953, this:r35_5951 +# 35| mu35_5955(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5951 +# 35| r35_5957(glval) = VariableAddress[x425] : +# 35| r35_5958(glval) = FunctionAddress[~String] : +# 35| v35_5959(void) = Call[~String] : func:r35_5958, this:r35_5957 +# 35| mu35_5960(unknown) = ^CallSideEffect : ~m? +# 35| v35_5961(void) = ^IndirectReadSideEffect[-1] : &:r35_5957, ~m? +# 35| mu35_5962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5957 +# 35| r35_5963(bool) = Constant[0] : +# 35| v35_5964(void) = ConditionalBranch : r35_5963 #-----| False -> Block 426 #-----| True -> Block 1026 -# 1297| Block 426 -# 1297| r1297_1(glval) = VariableAddress[x426] : -# 1297| mu1297_2(String) = Uninitialized[x426] : &:r1297_1 -# 1297| r1297_3(glval) = FunctionAddress[String] : -# 1297| v1297_4(void) = Call[String] : func:r1297_3, this:r1297_1 -# 1297| mu1297_5(unknown) = ^CallSideEffect : ~m? -# 1297| mu1297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1297_1 -# 1298| r1298_1(glval) = VariableAddress[x426] : -# 1298| r1298_2(glval) = FunctionAddress[~String] : -# 1298| v1298_3(void) = Call[~String] : func:r1298_2, this:r1298_1 -# 1298| mu1298_4(unknown) = ^CallSideEffect : ~m? -# 1298| v1298_5(void) = ^IndirectReadSideEffect[-1] : &:r1298_1, ~m? -# 1298| mu1298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1298_1 -# 1298| r1298_7(bool) = Constant[0] : -# 1298| v1298_8(void) = ConditionalBranch : r1298_7 +# 35| Block 426 +# 35| r35_5965(glval) = VariableAddress[x426] : +# 35| mu35_5966(String) = Uninitialized[x426] : &:r35_5965 +# 35| r35_5967(glval) = FunctionAddress[String] : +# 35| v35_5968(void) = Call[String] : func:r35_5967, this:r35_5965 +# 35| mu35_5969(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5965 +# 35| r35_5971(glval) = VariableAddress[x426] : +# 35| r35_5972(glval) = FunctionAddress[~String] : +# 35| v35_5973(void) = Call[~String] : func:r35_5972, this:r35_5971 +# 35| mu35_5974(unknown) = ^CallSideEffect : ~m? +# 35| v35_5975(void) = ^IndirectReadSideEffect[-1] : &:r35_5971, ~m? +# 35| mu35_5976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5971 +# 35| r35_5977(bool) = Constant[0] : +# 35| v35_5978(void) = ConditionalBranch : r35_5977 #-----| False -> Block 427 #-----| True -> Block 1026 -# 1300| Block 427 -# 1300| r1300_1(glval) = VariableAddress[x427] : -# 1300| mu1300_2(String) = Uninitialized[x427] : &:r1300_1 -# 1300| r1300_3(glval) = FunctionAddress[String] : -# 1300| v1300_4(void) = Call[String] : func:r1300_3, this:r1300_1 -# 1300| mu1300_5(unknown) = ^CallSideEffect : ~m? -# 1300| mu1300_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1300_1 -# 1301| r1301_1(glval) = VariableAddress[x427] : -# 1301| r1301_2(glval) = FunctionAddress[~String] : -# 1301| v1301_3(void) = Call[~String] : func:r1301_2, this:r1301_1 -# 1301| mu1301_4(unknown) = ^CallSideEffect : ~m? -# 1301| v1301_5(void) = ^IndirectReadSideEffect[-1] : &:r1301_1, ~m? -# 1301| mu1301_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1301_1 -# 1301| r1301_7(bool) = Constant[0] : -# 1301| v1301_8(void) = ConditionalBranch : r1301_7 +# 35| Block 427 +# 35| r35_5979(glval) = VariableAddress[x427] : +# 35| mu35_5980(String) = Uninitialized[x427] : &:r35_5979 +# 35| r35_5981(glval) = FunctionAddress[String] : +# 35| v35_5982(void) = Call[String] : func:r35_5981, this:r35_5979 +# 35| mu35_5983(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5979 +# 35| r35_5985(glval) = VariableAddress[x427] : +# 35| r35_5986(glval) = FunctionAddress[~String] : +# 35| v35_5987(void) = Call[~String] : func:r35_5986, this:r35_5985 +# 35| mu35_5988(unknown) = ^CallSideEffect : ~m? +# 35| v35_5989(void) = ^IndirectReadSideEffect[-1] : &:r35_5985, ~m? +# 35| mu35_5990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5985 +# 35| r35_5991(bool) = Constant[0] : +# 35| v35_5992(void) = ConditionalBranch : r35_5991 #-----| False -> Block 428 #-----| True -> Block 1026 -# 1303| Block 428 -# 1303| r1303_1(glval) = VariableAddress[x428] : -# 1303| mu1303_2(String) = Uninitialized[x428] : &:r1303_1 -# 1303| r1303_3(glval) = FunctionAddress[String] : -# 1303| v1303_4(void) = Call[String] : func:r1303_3, this:r1303_1 -# 1303| mu1303_5(unknown) = ^CallSideEffect : ~m? -# 1303| mu1303_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1303_1 -# 1304| r1304_1(glval) = VariableAddress[x428] : -# 1304| r1304_2(glval) = FunctionAddress[~String] : -# 1304| v1304_3(void) = Call[~String] : func:r1304_2, this:r1304_1 -# 1304| mu1304_4(unknown) = ^CallSideEffect : ~m? -# 1304| v1304_5(void) = ^IndirectReadSideEffect[-1] : &:r1304_1, ~m? -# 1304| mu1304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1304_1 -# 1304| r1304_7(bool) = Constant[0] : -# 1304| v1304_8(void) = ConditionalBranch : r1304_7 +# 35| Block 428 +# 35| r35_5993(glval) = VariableAddress[x428] : +# 35| mu35_5994(String) = Uninitialized[x428] : &:r35_5993 +# 35| r35_5995(glval) = FunctionAddress[String] : +# 35| v35_5996(void) = Call[String] : func:r35_5995, this:r35_5993 +# 35| mu35_5997(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5993 +# 35| r35_5999(glval) = VariableAddress[x428] : +# 35| r35_6000(glval) = FunctionAddress[~String] : +# 35| v35_6001(void) = Call[~String] : func:r35_6000, this:r35_5999 +# 35| mu35_6002(unknown) = ^CallSideEffect : ~m? +# 35| v35_6003(void) = ^IndirectReadSideEffect[-1] : &:r35_5999, ~m? +# 35| mu35_6004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5999 +# 35| r35_6005(bool) = Constant[0] : +# 35| v35_6006(void) = ConditionalBranch : r35_6005 #-----| False -> Block 429 #-----| True -> Block 1026 -# 1306| Block 429 -# 1306| r1306_1(glval) = VariableAddress[x429] : -# 1306| mu1306_2(String) = Uninitialized[x429] : &:r1306_1 -# 1306| r1306_3(glval) = FunctionAddress[String] : -# 1306| v1306_4(void) = Call[String] : func:r1306_3, this:r1306_1 -# 1306| mu1306_5(unknown) = ^CallSideEffect : ~m? -# 1306| mu1306_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1306_1 -# 1307| r1307_1(glval) = VariableAddress[x429] : -# 1307| r1307_2(glval) = FunctionAddress[~String] : -# 1307| v1307_3(void) = Call[~String] : func:r1307_2, this:r1307_1 -# 1307| mu1307_4(unknown) = ^CallSideEffect : ~m? -# 1307| v1307_5(void) = ^IndirectReadSideEffect[-1] : &:r1307_1, ~m? -# 1307| mu1307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1307_1 -# 1307| r1307_7(bool) = Constant[0] : -# 1307| v1307_8(void) = ConditionalBranch : r1307_7 +# 35| Block 429 +# 35| r35_6007(glval) = VariableAddress[x429] : +# 35| mu35_6008(String) = Uninitialized[x429] : &:r35_6007 +# 35| r35_6009(glval) = FunctionAddress[String] : +# 35| v35_6010(void) = Call[String] : func:r35_6009, this:r35_6007 +# 35| mu35_6011(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6007 +# 35| r35_6013(glval) = VariableAddress[x429] : +# 35| r35_6014(glval) = FunctionAddress[~String] : +# 35| v35_6015(void) = Call[~String] : func:r35_6014, this:r35_6013 +# 35| mu35_6016(unknown) = ^CallSideEffect : ~m? +# 35| v35_6017(void) = ^IndirectReadSideEffect[-1] : &:r35_6013, ~m? +# 35| mu35_6018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6013 +# 35| r35_6019(bool) = Constant[0] : +# 35| v35_6020(void) = ConditionalBranch : r35_6019 #-----| False -> Block 430 #-----| True -> Block 1026 -# 1309| Block 430 -# 1309| r1309_1(glval) = VariableAddress[x430] : -# 1309| mu1309_2(String) = Uninitialized[x430] : &:r1309_1 -# 1309| r1309_3(glval) = FunctionAddress[String] : -# 1309| v1309_4(void) = Call[String] : func:r1309_3, this:r1309_1 -# 1309| mu1309_5(unknown) = ^CallSideEffect : ~m? -# 1309| mu1309_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1309_1 -# 1310| r1310_1(glval) = VariableAddress[x430] : -# 1310| r1310_2(glval) = FunctionAddress[~String] : -# 1310| v1310_3(void) = Call[~String] : func:r1310_2, this:r1310_1 -# 1310| mu1310_4(unknown) = ^CallSideEffect : ~m? -# 1310| v1310_5(void) = ^IndirectReadSideEffect[-1] : &:r1310_1, ~m? -# 1310| mu1310_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1310_1 -# 1310| r1310_7(bool) = Constant[0] : -# 1310| v1310_8(void) = ConditionalBranch : r1310_7 +# 35| Block 430 +# 35| r35_6021(glval) = VariableAddress[x430] : +# 35| mu35_6022(String) = Uninitialized[x430] : &:r35_6021 +# 35| r35_6023(glval) = FunctionAddress[String] : +# 35| v35_6024(void) = Call[String] : func:r35_6023, this:r35_6021 +# 35| mu35_6025(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6021 +# 35| r35_6027(glval) = VariableAddress[x430] : +# 35| r35_6028(glval) = FunctionAddress[~String] : +# 35| v35_6029(void) = Call[~String] : func:r35_6028, this:r35_6027 +# 35| mu35_6030(unknown) = ^CallSideEffect : ~m? +# 35| v35_6031(void) = ^IndirectReadSideEffect[-1] : &:r35_6027, ~m? +# 35| mu35_6032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6027 +# 35| r35_6033(bool) = Constant[0] : +# 35| v35_6034(void) = ConditionalBranch : r35_6033 #-----| False -> Block 431 #-----| True -> Block 1026 -# 1312| Block 431 -# 1312| r1312_1(glval) = VariableAddress[x431] : -# 1312| mu1312_2(String) = Uninitialized[x431] : &:r1312_1 -# 1312| r1312_3(glval) = FunctionAddress[String] : -# 1312| v1312_4(void) = Call[String] : func:r1312_3, this:r1312_1 -# 1312| mu1312_5(unknown) = ^CallSideEffect : ~m? -# 1312| mu1312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1312_1 -# 1313| r1313_1(glval) = VariableAddress[x431] : -# 1313| r1313_2(glval) = FunctionAddress[~String] : -# 1313| v1313_3(void) = Call[~String] : func:r1313_2, this:r1313_1 -# 1313| mu1313_4(unknown) = ^CallSideEffect : ~m? -# 1313| v1313_5(void) = ^IndirectReadSideEffect[-1] : &:r1313_1, ~m? -# 1313| mu1313_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1313_1 -# 1313| r1313_7(bool) = Constant[0] : -# 1313| v1313_8(void) = ConditionalBranch : r1313_7 +# 35| Block 431 +# 35| r35_6035(glval) = VariableAddress[x431] : +# 35| mu35_6036(String) = Uninitialized[x431] : &:r35_6035 +# 35| r35_6037(glval) = FunctionAddress[String] : +# 35| v35_6038(void) = Call[String] : func:r35_6037, this:r35_6035 +# 35| mu35_6039(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6035 +# 35| r35_6041(glval) = VariableAddress[x431] : +# 35| r35_6042(glval) = FunctionAddress[~String] : +# 35| v35_6043(void) = Call[~String] : func:r35_6042, this:r35_6041 +# 35| mu35_6044(unknown) = ^CallSideEffect : ~m? +# 35| v35_6045(void) = ^IndirectReadSideEffect[-1] : &:r35_6041, ~m? +# 35| mu35_6046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6041 +# 35| r35_6047(bool) = Constant[0] : +# 35| v35_6048(void) = ConditionalBranch : r35_6047 #-----| False -> Block 432 #-----| True -> Block 1026 -# 1315| Block 432 -# 1315| r1315_1(glval) = VariableAddress[x432] : -# 1315| mu1315_2(String) = Uninitialized[x432] : &:r1315_1 -# 1315| r1315_3(glval) = FunctionAddress[String] : -# 1315| v1315_4(void) = Call[String] : func:r1315_3, this:r1315_1 -# 1315| mu1315_5(unknown) = ^CallSideEffect : ~m? -# 1315| mu1315_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1315_1 -# 1316| r1316_1(glval) = VariableAddress[x432] : -# 1316| r1316_2(glval) = FunctionAddress[~String] : -# 1316| v1316_3(void) = Call[~String] : func:r1316_2, this:r1316_1 -# 1316| mu1316_4(unknown) = ^CallSideEffect : ~m? -# 1316| v1316_5(void) = ^IndirectReadSideEffect[-1] : &:r1316_1, ~m? -# 1316| mu1316_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1316_1 -# 1316| r1316_7(bool) = Constant[0] : -# 1316| v1316_8(void) = ConditionalBranch : r1316_7 +# 35| Block 432 +# 35| r35_6049(glval) = VariableAddress[x432] : +# 35| mu35_6050(String) = Uninitialized[x432] : &:r35_6049 +# 35| r35_6051(glval) = FunctionAddress[String] : +# 35| v35_6052(void) = Call[String] : func:r35_6051, this:r35_6049 +# 35| mu35_6053(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6049 +# 35| r35_6055(glval) = VariableAddress[x432] : +# 35| r35_6056(glval) = FunctionAddress[~String] : +# 35| v35_6057(void) = Call[~String] : func:r35_6056, this:r35_6055 +# 35| mu35_6058(unknown) = ^CallSideEffect : ~m? +# 35| v35_6059(void) = ^IndirectReadSideEffect[-1] : &:r35_6055, ~m? +# 35| mu35_6060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6055 +# 35| r35_6061(bool) = Constant[0] : +# 35| v35_6062(void) = ConditionalBranch : r35_6061 #-----| False -> Block 433 #-----| True -> Block 1026 -# 1318| Block 433 -# 1318| r1318_1(glval) = VariableAddress[x433] : -# 1318| mu1318_2(String) = Uninitialized[x433] : &:r1318_1 -# 1318| r1318_3(glval) = FunctionAddress[String] : -# 1318| v1318_4(void) = Call[String] : func:r1318_3, this:r1318_1 -# 1318| mu1318_5(unknown) = ^CallSideEffect : ~m? -# 1318| mu1318_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1318_1 -# 1319| r1319_1(glval) = VariableAddress[x433] : -# 1319| r1319_2(glval) = FunctionAddress[~String] : -# 1319| v1319_3(void) = Call[~String] : func:r1319_2, this:r1319_1 -# 1319| mu1319_4(unknown) = ^CallSideEffect : ~m? -# 1319| v1319_5(void) = ^IndirectReadSideEffect[-1] : &:r1319_1, ~m? -# 1319| mu1319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1319_1 -# 1319| r1319_7(bool) = Constant[0] : -# 1319| v1319_8(void) = ConditionalBranch : r1319_7 +# 35| Block 433 +# 35| r35_6063(glval) = VariableAddress[x433] : +# 35| mu35_6064(String) = Uninitialized[x433] : &:r35_6063 +# 35| r35_6065(glval) = FunctionAddress[String] : +# 35| v35_6066(void) = Call[String] : func:r35_6065, this:r35_6063 +# 35| mu35_6067(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6063 +# 35| r35_6069(glval) = VariableAddress[x433] : +# 35| r35_6070(glval) = FunctionAddress[~String] : +# 35| v35_6071(void) = Call[~String] : func:r35_6070, this:r35_6069 +# 35| mu35_6072(unknown) = ^CallSideEffect : ~m? +# 35| v35_6073(void) = ^IndirectReadSideEffect[-1] : &:r35_6069, ~m? +# 35| mu35_6074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6069 +# 35| r35_6075(bool) = Constant[0] : +# 35| v35_6076(void) = ConditionalBranch : r35_6075 #-----| False -> Block 434 #-----| True -> Block 1026 -# 1321| Block 434 -# 1321| r1321_1(glval) = VariableAddress[x434] : -# 1321| mu1321_2(String) = Uninitialized[x434] : &:r1321_1 -# 1321| r1321_3(glval) = FunctionAddress[String] : -# 1321| v1321_4(void) = Call[String] : func:r1321_3, this:r1321_1 -# 1321| mu1321_5(unknown) = ^CallSideEffect : ~m? -# 1321| mu1321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1321_1 -# 1322| r1322_1(glval) = VariableAddress[x434] : -# 1322| r1322_2(glval) = FunctionAddress[~String] : -# 1322| v1322_3(void) = Call[~String] : func:r1322_2, this:r1322_1 -# 1322| mu1322_4(unknown) = ^CallSideEffect : ~m? -# 1322| v1322_5(void) = ^IndirectReadSideEffect[-1] : &:r1322_1, ~m? -# 1322| mu1322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1322_1 -# 1322| r1322_7(bool) = Constant[0] : -# 1322| v1322_8(void) = ConditionalBranch : r1322_7 +# 35| Block 434 +# 35| r35_6077(glval) = VariableAddress[x434] : +# 35| mu35_6078(String) = Uninitialized[x434] : &:r35_6077 +# 35| r35_6079(glval) = FunctionAddress[String] : +# 35| v35_6080(void) = Call[String] : func:r35_6079, this:r35_6077 +# 35| mu35_6081(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6077 +# 35| r35_6083(glval) = VariableAddress[x434] : +# 35| r35_6084(glval) = FunctionAddress[~String] : +# 35| v35_6085(void) = Call[~String] : func:r35_6084, this:r35_6083 +# 35| mu35_6086(unknown) = ^CallSideEffect : ~m? +# 35| v35_6087(void) = ^IndirectReadSideEffect[-1] : &:r35_6083, ~m? +# 35| mu35_6088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6083 +# 35| r35_6089(bool) = Constant[0] : +# 35| v35_6090(void) = ConditionalBranch : r35_6089 #-----| False -> Block 435 #-----| True -> Block 1026 -# 1324| Block 435 -# 1324| r1324_1(glval) = VariableAddress[x435] : -# 1324| mu1324_2(String) = Uninitialized[x435] : &:r1324_1 -# 1324| r1324_3(glval) = FunctionAddress[String] : -# 1324| v1324_4(void) = Call[String] : func:r1324_3, this:r1324_1 -# 1324| mu1324_5(unknown) = ^CallSideEffect : ~m? -# 1324| mu1324_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1324_1 -# 1325| r1325_1(glval) = VariableAddress[x435] : -# 1325| r1325_2(glval) = FunctionAddress[~String] : -# 1325| v1325_3(void) = Call[~String] : func:r1325_2, this:r1325_1 -# 1325| mu1325_4(unknown) = ^CallSideEffect : ~m? -# 1325| v1325_5(void) = ^IndirectReadSideEffect[-1] : &:r1325_1, ~m? -# 1325| mu1325_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1325_1 -# 1325| r1325_7(bool) = Constant[0] : -# 1325| v1325_8(void) = ConditionalBranch : r1325_7 +# 35| Block 435 +# 35| r35_6091(glval) = VariableAddress[x435] : +# 35| mu35_6092(String) = Uninitialized[x435] : &:r35_6091 +# 35| r35_6093(glval) = FunctionAddress[String] : +# 35| v35_6094(void) = Call[String] : func:r35_6093, this:r35_6091 +# 35| mu35_6095(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6091 +# 35| r35_6097(glval) = VariableAddress[x435] : +# 35| r35_6098(glval) = FunctionAddress[~String] : +# 35| v35_6099(void) = Call[~String] : func:r35_6098, this:r35_6097 +# 35| mu35_6100(unknown) = ^CallSideEffect : ~m? +# 35| v35_6101(void) = ^IndirectReadSideEffect[-1] : &:r35_6097, ~m? +# 35| mu35_6102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6097 +# 35| r35_6103(bool) = Constant[0] : +# 35| v35_6104(void) = ConditionalBranch : r35_6103 #-----| False -> Block 436 #-----| True -> Block 1026 -# 1327| Block 436 -# 1327| r1327_1(glval) = VariableAddress[x436] : -# 1327| mu1327_2(String) = Uninitialized[x436] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1328| r1328_1(glval) = VariableAddress[x436] : -# 1328| r1328_2(glval) = FunctionAddress[~String] : -# 1328| v1328_3(void) = Call[~String] : func:r1328_2, this:r1328_1 -# 1328| mu1328_4(unknown) = ^CallSideEffect : ~m? -# 1328| v1328_5(void) = ^IndirectReadSideEffect[-1] : &:r1328_1, ~m? -# 1328| mu1328_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1328_1 -# 1328| r1328_7(bool) = Constant[0] : -# 1328| v1328_8(void) = ConditionalBranch : r1328_7 +# 35| Block 436 +# 35| r35_6105(glval) = VariableAddress[x436] : +# 35| mu35_6106(String) = Uninitialized[x436] : &:r35_6105 +# 35| r35_6107(glval) = FunctionAddress[String] : +# 35| v35_6108(void) = Call[String] : func:r35_6107, this:r35_6105 +# 35| mu35_6109(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6105 +# 35| r35_6111(glval) = VariableAddress[x436] : +# 35| r35_6112(glval) = FunctionAddress[~String] : +# 35| v35_6113(void) = Call[~String] : func:r35_6112, this:r35_6111 +# 35| mu35_6114(unknown) = ^CallSideEffect : ~m? +# 35| v35_6115(void) = ^IndirectReadSideEffect[-1] : &:r35_6111, ~m? +# 35| mu35_6116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6111 +# 35| r35_6117(bool) = Constant[0] : +# 35| v35_6118(void) = ConditionalBranch : r35_6117 #-----| False -> Block 437 #-----| True -> Block 1026 -# 1330| Block 437 -# 1330| r1330_1(glval) = VariableAddress[x437] : -# 1330| mu1330_2(String) = Uninitialized[x437] : &:r1330_1 -# 1330| r1330_3(glval) = FunctionAddress[String] : -# 1330| v1330_4(void) = Call[String] : func:r1330_3, this:r1330_1 -# 1330| mu1330_5(unknown) = ^CallSideEffect : ~m? -# 1330| mu1330_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1330_1 -# 1331| r1331_1(glval) = VariableAddress[x437] : -# 1331| r1331_2(glval) = FunctionAddress[~String] : -# 1331| v1331_3(void) = Call[~String] : func:r1331_2, this:r1331_1 -# 1331| mu1331_4(unknown) = ^CallSideEffect : ~m? -# 1331| v1331_5(void) = ^IndirectReadSideEffect[-1] : &:r1331_1, ~m? -# 1331| mu1331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1331_1 -# 1331| r1331_7(bool) = Constant[0] : -# 1331| v1331_8(void) = ConditionalBranch : r1331_7 +# 35| Block 437 +# 35| r35_6119(glval) = VariableAddress[x437] : +# 35| mu35_6120(String) = Uninitialized[x437] : &:r35_6119 +# 35| r35_6121(glval) = FunctionAddress[String] : +# 35| v35_6122(void) = Call[String] : func:r35_6121, this:r35_6119 +# 35| mu35_6123(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6119 +# 35| r35_6125(glval) = VariableAddress[x437] : +# 35| r35_6126(glval) = FunctionAddress[~String] : +# 35| v35_6127(void) = Call[~String] : func:r35_6126, this:r35_6125 +# 35| mu35_6128(unknown) = ^CallSideEffect : ~m? +# 35| v35_6129(void) = ^IndirectReadSideEffect[-1] : &:r35_6125, ~m? +# 35| mu35_6130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6125 +# 35| r35_6131(bool) = Constant[0] : +# 35| v35_6132(void) = ConditionalBranch : r35_6131 #-----| False -> Block 438 #-----| True -> Block 1026 -# 1333| Block 438 -# 1333| r1333_1(glval) = VariableAddress[x438] : -# 1333| mu1333_2(String) = Uninitialized[x438] : &:r1333_1 -# 1333| r1333_3(glval) = FunctionAddress[String] : -# 1333| v1333_4(void) = Call[String] : func:r1333_3, this:r1333_1 -# 1333| mu1333_5(unknown) = ^CallSideEffect : ~m? -# 1333| mu1333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1333_1 -# 1334| r1334_1(glval) = VariableAddress[x438] : -# 1334| r1334_2(glval) = FunctionAddress[~String] : -# 1334| v1334_3(void) = Call[~String] : func:r1334_2, this:r1334_1 -# 1334| mu1334_4(unknown) = ^CallSideEffect : ~m? -# 1334| v1334_5(void) = ^IndirectReadSideEffect[-1] : &:r1334_1, ~m? -# 1334| mu1334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1334_1 -# 1334| r1334_7(bool) = Constant[0] : -# 1334| v1334_8(void) = ConditionalBranch : r1334_7 +# 35| Block 438 +# 35| r35_6133(glval) = VariableAddress[x438] : +# 35| mu35_6134(String) = Uninitialized[x438] : &:r35_6133 +# 35| r35_6135(glval) = FunctionAddress[String] : +# 35| v35_6136(void) = Call[String] : func:r35_6135, this:r35_6133 +# 35| mu35_6137(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6133 +# 35| r35_6139(glval) = VariableAddress[x438] : +# 35| r35_6140(glval) = FunctionAddress[~String] : +# 35| v35_6141(void) = Call[~String] : func:r35_6140, this:r35_6139 +# 35| mu35_6142(unknown) = ^CallSideEffect : ~m? +# 35| v35_6143(void) = ^IndirectReadSideEffect[-1] : &:r35_6139, ~m? +# 35| mu35_6144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6139 +# 35| r35_6145(bool) = Constant[0] : +# 35| v35_6146(void) = ConditionalBranch : r35_6145 #-----| False -> Block 439 #-----| True -> Block 1026 -# 1336| Block 439 -# 1336| r1336_1(glval) = VariableAddress[x439] : -# 1336| mu1336_2(String) = Uninitialized[x439] : &:r1336_1 -# 1336| r1336_3(glval) = FunctionAddress[String] : -# 1336| v1336_4(void) = Call[String] : func:r1336_3, this:r1336_1 -# 1336| mu1336_5(unknown) = ^CallSideEffect : ~m? -# 1336| mu1336_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1336_1 -# 1337| r1337_1(glval) = VariableAddress[x439] : -# 1337| r1337_2(glval) = FunctionAddress[~String] : -# 1337| v1337_3(void) = Call[~String] : func:r1337_2, this:r1337_1 -# 1337| mu1337_4(unknown) = ^CallSideEffect : ~m? -# 1337| v1337_5(void) = ^IndirectReadSideEffect[-1] : &:r1337_1, ~m? -# 1337| mu1337_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1337_1 -# 1337| r1337_7(bool) = Constant[0] : -# 1337| v1337_8(void) = ConditionalBranch : r1337_7 +# 35| Block 439 +# 35| r35_6147(glval) = VariableAddress[x439] : +# 35| mu35_6148(String) = Uninitialized[x439] : &:r35_6147 +# 35| r35_6149(glval) = FunctionAddress[String] : +# 35| v35_6150(void) = Call[String] : func:r35_6149, this:r35_6147 +# 35| mu35_6151(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6147 +# 35| r35_6153(glval) = VariableAddress[x439] : +# 35| r35_6154(glval) = FunctionAddress[~String] : +# 35| v35_6155(void) = Call[~String] : func:r35_6154, this:r35_6153 +# 35| mu35_6156(unknown) = ^CallSideEffect : ~m? +# 35| v35_6157(void) = ^IndirectReadSideEffect[-1] : &:r35_6153, ~m? +# 35| mu35_6158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6153 +# 35| r35_6159(bool) = Constant[0] : +# 35| v35_6160(void) = ConditionalBranch : r35_6159 #-----| False -> Block 440 #-----| True -> Block 1026 -# 1339| Block 440 -# 1339| r1339_1(glval) = VariableAddress[x440] : -# 1339| mu1339_2(String) = Uninitialized[x440] : &:r1339_1 -# 1339| r1339_3(glval) = FunctionAddress[String] : -# 1339| v1339_4(void) = Call[String] : func:r1339_3, this:r1339_1 -# 1339| mu1339_5(unknown) = ^CallSideEffect : ~m? -# 1339| mu1339_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1339_1 -# 1340| r1340_1(glval) = VariableAddress[x440] : -# 1340| r1340_2(glval) = FunctionAddress[~String] : -# 1340| v1340_3(void) = Call[~String] : func:r1340_2, this:r1340_1 -# 1340| mu1340_4(unknown) = ^CallSideEffect : ~m? -# 1340| v1340_5(void) = ^IndirectReadSideEffect[-1] : &:r1340_1, ~m? -# 1340| mu1340_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1340_1 -# 1340| r1340_7(bool) = Constant[0] : -# 1340| v1340_8(void) = ConditionalBranch : r1340_7 +# 35| Block 440 +# 35| r35_6161(glval) = VariableAddress[x440] : +# 35| mu35_6162(String) = Uninitialized[x440] : &:r35_6161 +# 35| r35_6163(glval) = FunctionAddress[String] : +# 35| v35_6164(void) = Call[String] : func:r35_6163, this:r35_6161 +# 35| mu35_6165(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6161 +# 35| r35_6167(glval) = VariableAddress[x440] : +# 35| r35_6168(glval) = FunctionAddress[~String] : +# 35| v35_6169(void) = Call[~String] : func:r35_6168, this:r35_6167 +# 35| mu35_6170(unknown) = ^CallSideEffect : ~m? +# 35| v35_6171(void) = ^IndirectReadSideEffect[-1] : &:r35_6167, ~m? +# 35| mu35_6172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6167 +# 35| r35_6173(bool) = Constant[0] : +# 35| v35_6174(void) = ConditionalBranch : r35_6173 #-----| False -> Block 441 #-----| True -> Block 1026 -# 1342| Block 441 -# 1342| r1342_1(glval) = VariableAddress[x441] : -# 1342| mu1342_2(String) = Uninitialized[x441] : &:r1342_1 -# 1342| r1342_3(glval) = FunctionAddress[String] : -# 1342| v1342_4(void) = Call[String] : func:r1342_3, this:r1342_1 -# 1342| mu1342_5(unknown) = ^CallSideEffect : ~m? -# 1342| mu1342_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1342_1 -# 1343| r1343_1(glval) = VariableAddress[x441] : -# 1343| r1343_2(glval) = FunctionAddress[~String] : -# 1343| v1343_3(void) = Call[~String] : func:r1343_2, this:r1343_1 -# 1343| mu1343_4(unknown) = ^CallSideEffect : ~m? -# 1343| v1343_5(void) = ^IndirectReadSideEffect[-1] : &:r1343_1, ~m? -# 1343| mu1343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1343_1 -# 1343| r1343_7(bool) = Constant[0] : -# 1343| v1343_8(void) = ConditionalBranch : r1343_7 +# 35| Block 441 +# 35| r35_6175(glval) = VariableAddress[x441] : +# 35| mu35_6176(String) = Uninitialized[x441] : &:r35_6175 +# 35| r35_6177(glval) = FunctionAddress[String] : +# 35| v35_6178(void) = Call[String] : func:r35_6177, this:r35_6175 +# 35| mu35_6179(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6175 +# 35| r35_6181(glval) = VariableAddress[x441] : +# 35| r35_6182(glval) = FunctionAddress[~String] : +# 35| v35_6183(void) = Call[~String] : func:r35_6182, this:r35_6181 +# 35| mu35_6184(unknown) = ^CallSideEffect : ~m? +# 35| v35_6185(void) = ^IndirectReadSideEffect[-1] : &:r35_6181, ~m? +# 35| mu35_6186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6181 +# 35| r35_6187(bool) = Constant[0] : +# 35| v35_6188(void) = ConditionalBranch : r35_6187 #-----| False -> Block 442 #-----| True -> Block 1026 -# 1345| Block 442 -# 1345| r1345_1(glval) = VariableAddress[x442] : -# 1345| mu1345_2(String) = Uninitialized[x442] : &:r1345_1 -# 1345| r1345_3(glval) = FunctionAddress[String] : -# 1345| v1345_4(void) = Call[String] : func:r1345_3, this:r1345_1 -# 1345| mu1345_5(unknown) = ^CallSideEffect : ~m? -# 1345| mu1345_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1345_1 -# 1346| r1346_1(glval) = VariableAddress[x442] : -# 1346| r1346_2(glval) = FunctionAddress[~String] : -# 1346| v1346_3(void) = Call[~String] : func:r1346_2, this:r1346_1 -# 1346| mu1346_4(unknown) = ^CallSideEffect : ~m? -# 1346| v1346_5(void) = ^IndirectReadSideEffect[-1] : &:r1346_1, ~m? -# 1346| mu1346_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1346_1 -# 1346| r1346_7(bool) = Constant[0] : -# 1346| v1346_8(void) = ConditionalBranch : r1346_7 +# 35| Block 442 +# 35| r35_6189(glval) = VariableAddress[x442] : +# 35| mu35_6190(String) = Uninitialized[x442] : &:r35_6189 +# 35| r35_6191(glval) = FunctionAddress[String] : +# 35| v35_6192(void) = Call[String] : func:r35_6191, this:r35_6189 +# 35| mu35_6193(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6189 +# 35| r35_6195(glval) = VariableAddress[x442] : +# 35| r35_6196(glval) = FunctionAddress[~String] : +# 35| v35_6197(void) = Call[~String] : func:r35_6196, this:r35_6195 +# 35| mu35_6198(unknown) = ^CallSideEffect : ~m? +# 35| v35_6199(void) = ^IndirectReadSideEffect[-1] : &:r35_6195, ~m? +# 35| mu35_6200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6195 +# 35| r35_6201(bool) = Constant[0] : +# 35| v35_6202(void) = ConditionalBranch : r35_6201 #-----| False -> Block 443 #-----| True -> Block 1026 -# 1348| Block 443 -# 1348| r1348_1(glval) = VariableAddress[x443] : -# 1348| mu1348_2(String) = Uninitialized[x443] : &:r1348_1 -# 1348| r1348_3(glval) = FunctionAddress[String] : -# 1348| v1348_4(void) = Call[String] : func:r1348_3, this:r1348_1 -# 1348| mu1348_5(unknown) = ^CallSideEffect : ~m? -# 1348| mu1348_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1348_1 -# 1349| r1349_1(glval) = VariableAddress[x443] : -# 1349| r1349_2(glval) = FunctionAddress[~String] : -# 1349| v1349_3(void) = Call[~String] : func:r1349_2, this:r1349_1 -# 1349| mu1349_4(unknown) = ^CallSideEffect : ~m? -# 1349| v1349_5(void) = ^IndirectReadSideEffect[-1] : &:r1349_1, ~m? -# 1349| mu1349_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1349_1 -# 1349| r1349_7(bool) = Constant[0] : -# 1349| v1349_8(void) = ConditionalBranch : r1349_7 +# 35| Block 443 +# 35| r35_6203(glval) = VariableAddress[x443] : +# 35| mu35_6204(String) = Uninitialized[x443] : &:r35_6203 +# 35| r35_6205(glval) = FunctionAddress[String] : +# 35| v35_6206(void) = Call[String] : func:r35_6205, this:r35_6203 +# 35| mu35_6207(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6203 +# 35| r35_6209(glval) = VariableAddress[x443] : +# 35| r35_6210(glval) = FunctionAddress[~String] : +# 35| v35_6211(void) = Call[~String] : func:r35_6210, this:r35_6209 +# 35| mu35_6212(unknown) = ^CallSideEffect : ~m? +# 35| v35_6213(void) = ^IndirectReadSideEffect[-1] : &:r35_6209, ~m? +# 35| mu35_6214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6209 +# 35| r35_6215(bool) = Constant[0] : +# 35| v35_6216(void) = ConditionalBranch : r35_6215 #-----| False -> Block 444 #-----| True -> Block 1026 -# 1351| Block 444 -# 1351| r1351_1(glval) = VariableAddress[x444] : -# 1351| mu1351_2(String) = Uninitialized[x444] : &:r1351_1 -# 1351| r1351_3(glval) = FunctionAddress[String] : -# 1351| v1351_4(void) = Call[String] : func:r1351_3, this:r1351_1 -# 1351| mu1351_5(unknown) = ^CallSideEffect : ~m? -# 1351| mu1351_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1351_1 -# 1352| r1352_1(glval) = VariableAddress[x444] : -# 1352| r1352_2(glval) = FunctionAddress[~String] : -# 1352| v1352_3(void) = Call[~String] : func:r1352_2, this:r1352_1 -# 1352| mu1352_4(unknown) = ^CallSideEffect : ~m? -# 1352| v1352_5(void) = ^IndirectReadSideEffect[-1] : &:r1352_1, ~m? -# 1352| mu1352_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1352_1 -# 1352| r1352_7(bool) = Constant[0] : -# 1352| v1352_8(void) = ConditionalBranch : r1352_7 +# 35| Block 444 +# 35| r35_6217(glval) = VariableAddress[x444] : +# 35| mu35_6218(String) = Uninitialized[x444] : &:r35_6217 +# 35| r35_6219(glval) = FunctionAddress[String] : +# 35| v35_6220(void) = Call[String] : func:r35_6219, this:r35_6217 +# 35| mu35_6221(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6217 +# 35| r35_6223(glval) = VariableAddress[x444] : +# 35| r35_6224(glval) = FunctionAddress[~String] : +# 35| v35_6225(void) = Call[~String] : func:r35_6224, this:r35_6223 +# 35| mu35_6226(unknown) = ^CallSideEffect : ~m? +# 35| v35_6227(void) = ^IndirectReadSideEffect[-1] : &:r35_6223, ~m? +# 35| mu35_6228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6223 +# 35| r35_6229(bool) = Constant[0] : +# 35| v35_6230(void) = ConditionalBranch : r35_6229 #-----| False -> Block 445 #-----| True -> Block 1026 -# 1354| Block 445 -# 1354| r1354_1(glval) = VariableAddress[x445] : -# 1354| mu1354_2(String) = Uninitialized[x445] : &:r1354_1 -# 1354| r1354_3(glval) = FunctionAddress[String] : -# 1354| v1354_4(void) = Call[String] : func:r1354_3, this:r1354_1 -# 1354| mu1354_5(unknown) = ^CallSideEffect : ~m? -# 1354| mu1354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1354_1 -# 1355| r1355_1(glval) = VariableAddress[x445] : -# 1355| r1355_2(glval) = FunctionAddress[~String] : -# 1355| v1355_3(void) = Call[~String] : func:r1355_2, this:r1355_1 -# 1355| mu1355_4(unknown) = ^CallSideEffect : ~m? -# 1355| v1355_5(void) = ^IndirectReadSideEffect[-1] : &:r1355_1, ~m? -# 1355| mu1355_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1355_1 -# 1355| r1355_7(bool) = Constant[0] : -# 1355| v1355_8(void) = ConditionalBranch : r1355_7 +# 35| Block 445 +# 35| r35_6231(glval) = VariableAddress[x445] : +# 35| mu35_6232(String) = Uninitialized[x445] : &:r35_6231 +# 35| r35_6233(glval) = FunctionAddress[String] : +# 35| v35_6234(void) = Call[String] : func:r35_6233, this:r35_6231 +# 35| mu35_6235(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6231 +# 35| r35_6237(glval) = VariableAddress[x445] : +# 35| r35_6238(glval) = FunctionAddress[~String] : +# 35| v35_6239(void) = Call[~String] : func:r35_6238, this:r35_6237 +# 35| mu35_6240(unknown) = ^CallSideEffect : ~m? +# 35| v35_6241(void) = ^IndirectReadSideEffect[-1] : &:r35_6237, ~m? +# 35| mu35_6242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6237 +# 35| r35_6243(bool) = Constant[0] : +# 35| v35_6244(void) = ConditionalBranch : r35_6243 #-----| False -> Block 446 #-----| True -> Block 1026 -# 1357| Block 446 -# 1357| r1357_1(glval) = VariableAddress[x446] : -# 1357| mu1357_2(String) = Uninitialized[x446] : &:r1357_1 -# 1357| r1357_3(glval) = FunctionAddress[String] : -# 1357| v1357_4(void) = Call[String] : func:r1357_3, this:r1357_1 -# 1357| mu1357_5(unknown) = ^CallSideEffect : ~m? -# 1357| mu1357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1357_1 -# 1358| r1358_1(glval) = VariableAddress[x446] : -# 1358| r1358_2(glval) = FunctionAddress[~String] : -# 1358| v1358_3(void) = Call[~String] : func:r1358_2, this:r1358_1 -# 1358| mu1358_4(unknown) = ^CallSideEffect : ~m? -# 1358| v1358_5(void) = ^IndirectReadSideEffect[-1] : &:r1358_1, ~m? -# 1358| mu1358_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1358_1 -# 1358| r1358_7(bool) = Constant[0] : -# 1358| v1358_8(void) = ConditionalBranch : r1358_7 +# 35| Block 446 +# 35| r35_6245(glval) = VariableAddress[x446] : +# 35| mu35_6246(String) = Uninitialized[x446] : &:r35_6245 +# 35| r35_6247(glval) = FunctionAddress[String] : +# 35| v35_6248(void) = Call[String] : func:r35_6247, this:r35_6245 +# 35| mu35_6249(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6245 +# 35| r35_6251(glval) = VariableAddress[x446] : +# 35| r35_6252(glval) = FunctionAddress[~String] : +# 35| v35_6253(void) = Call[~String] : func:r35_6252, this:r35_6251 +# 35| mu35_6254(unknown) = ^CallSideEffect : ~m? +# 35| v35_6255(void) = ^IndirectReadSideEffect[-1] : &:r35_6251, ~m? +# 35| mu35_6256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6251 +# 35| r35_6257(bool) = Constant[0] : +# 35| v35_6258(void) = ConditionalBranch : r35_6257 #-----| False -> Block 447 #-----| True -> Block 1026 -# 1360| Block 447 -# 1360| r1360_1(glval) = VariableAddress[x447] : -# 1360| mu1360_2(String) = Uninitialized[x447] : &:r1360_1 -# 1360| r1360_3(glval) = FunctionAddress[String] : -# 1360| v1360_4(void) = Call[String] : func:r1360_3, this:r1360_1 -# 1360| mu1360_5(unknown) = ^CallSideEffect : ~m? -# 1360| mu1360_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1360_1 -# 1361| r1361_1(glval) = VariableAddress[x447] : -# 1361| r1361_2(glval) = FunctionAddress[~String] : -# 1361| v1361_3(void) = Call[~String] : func:r1361_2, this:r1361_1 -# 1361| mu1361_4(unknown) = ^CallSideEffect : ~m? -# 1361| v1361_5(void) = ^IndirectReadSideEffect[-1] : &:r1361_1, ~m? -# 1361| mu1361_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1361_1 -# 1361| r1361_7(bool) = Constant[0] : -# 1361| v1361_8(void) = ConditionalBranch : r1361_7 +# 35| Block 447 +# 35| r35_6259(glval) = VariableAddress[x447] : +# 35| mu35_6260(String) = Uninitialized[x447] : &:r35_6259 +# 35| r35_6261(glval) = FunctionAddress[String] : +# 35| v35_6262(void) = Call[String] : func:r35_6261, this:r35_6259 +# 35| mu35_6263(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6259 +# 35| r35_6265(glval) = VariableAddress[x447] : +# 35| r35_6266(glval) = FunctionAddress[~String] : +# 35| v35_6267(void) = Call[~String] : func:r35_6266, this:r35_6265 +# 35| mu35_6268(unknown) = ^CallSideEffect : ~m? +# 35| v35_6269(void) = ^IndirectReadSideEffect[-1] : &:r35_6265, ~m? +# 35| mu35_6270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6265 +# 35| r35_6271(bool) = Constant[0] : +# 35| v35_6272(void) = ConditionalBranch : r35_6271 #-----| False -> Block 448 #-----| True -> Block 1026 -# 1363| Block 448 -# 1363| r1363_1(glval) = VariableAddress[x448] : -# 1363| mu1363_2(String) = Uninitialized[x448] : &:r1363_1 -# 1363| r1363_3(glval) = FunctionAddress[String] : -# 1363| v1363_4(void) = Call[String] : func:r1363_3, this:r1363_1 -# 1363| mu1363_5(unknown) = ^CallSideEffect : ~m? -# 1363| mu1363_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1363_1 -# 1364| r1364_1(glval) = VariableAddress[x448] : -# 1364| r1364_2(glval) = FunctionAddress[~String] : -# 1364| v1364_3(void) = Call[~String] : func:r1364_2, this:r1364_1 -# 1364| mu1364_4(unknown) = ^CallSideEffect : ~m? -# 1364| v1364_5(void) = ^IndirectReadSideEffect[-1] : &:r1364_1, ~m? -# 1364| mu1364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1364_1 -# 1364| r1364_7(bool) = Constant[0] : -# 1364| v1364_8(void) = ConditionalBranch : r1364_7 +# 35| Block 448 +# 35| r35_6273(glval) = VariableAddress[x448] : +# 35| mu35_6274(String) = Uninitialized[x448] : &:r35_6273 +# 35| r35_6275(glval) = FunctionAddress[String] : +# 35| v35_6276(void) = Call[String] : func:r35_6275, this:r35_6273 +# 35| mu35_6277(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6273 +# 35| r35_6279(glval) = VariableAddress[x448] : +# 35| r35_6280(glval) = FunctionAddress[~String] : +# 35| v35_6281(void) = Call[~String] : func:r35_6280, this:r35_6279 +# 35| mu35_6282(unknown) = ^CallSideEffect : ~m? +# 35| v35_6283(void) = ^IndirectReadSideEffect[-1] : &:r35_6279, ~m? +# 35| mu35_6284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6279 +# 35| r35_6285(bool) = Constant[0] : +# 35| v35_6286(void) = ConditionalBranch : r35_6285 #-----| False -> Block 449 #-----| True -> Block 1026 -# 1366| Block 449 -# 1366| r1366_1(glval) = VariableAddress[x449] : -# 1366| mu1366_2(String) = Uninitialized[x449] : &:r1366_1 -# 1366| r1366_3(glval) = FunctionAddress[String] : -# 1366| v1366_4(void) = Call[String] : func:r1366_3, this:r1366_1 -# 1366| mu1366_5(unknown) = ^CallSideEffect : ~m? -# 1366| mu1366_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1366_1 -# 1367| r1367_1(glval) = VariableAddress[x449] : -# 1367| r1367_2(glval) = FunctionAddress[~String] : -# 1367| v1367_3(void) = Call[~String] : func:r1367_2, this:r1367_1 -# 1367| mu1367_4(unknown) = ^CallSideEffect : ~m? -# 1367| v1367_5(void) = ^IndirectReadSideEffect[-1] : &:r1367_1, ~m? -# 1367| mu1367_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1367_1 -# 1367| r1367_7(bool) = Constant[0] : -# 1367| v1367_8(void) = ConditionalBranch : r1367_7 +# 35| Block 449 +# 35| r35_6287(glval) = VariableAddress[x449] : +# 35| mu35_6288(String) = Uninitialized[x449] : &:r35_6287 +# 35| r35_6289(glval) = FunctionAddress[String] : +# 35| v35_6290(void) = Call[String] : func:r35_6289, this:r35_6287 +# 35| mu35_6291(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6287 +# 35| r35_6293(glval) = VariableAddress[x449] : +# 35| r35_6294(glval) = FunctionAddress[~String] : +# 35| v35_6295(void) = Call[~String] : func:r35_6294, this:r35_6293 +# 35| mu35_6296(unknown) = ^CallSideEffect : ~m? +# 35| v35_6297(void) = ^IndirectReadSideEffect[-1] : &:r35_6293, ~m? +# 35| mu35_6298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6293 +# 35| r35_6299(bool) = Constant[0] : +# 35| v35_6300(void) = ConditionalBranch : r35_6299 #-----| False -> Block 450 #-----| True -> Block 1026 -# 1369| Block 450 -# 1369| r1369_1(glval) = VariableAddress[x450] : -# 1369| mu1369_2(String) = Uninitialized[x450] : &:r1369_1 -# 1369| r1369_3(glval) = FunctionAddress[String] : -# 1369| v1369_4(void) = Call[String] : func:r1369_3, this:r1369_1 -# 1369| mu1369_5(unknown) = ^CallSideEffect : ~m? -# 1369| mu1369_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1369_1 -# 1370| r1370_1(glval) = VariableAddress[x450] : -# 1370| r1370_2(glval) = FunctionAddress[~String] : -# 1370| v1370_3(void) = Call[~String] : func:r1370_2, this:r1370_1 -# 1370| mu1370_4(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_5(void) = ^IndirectReadSideEffect[-1] : &:r1370_1, ~m? -# 1370| mu1370_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_1 -# 1370| r1370_7(bool) = Constant[0] : -# 1370| v1370_8(void) = ConditionalBranch : r1370_7 +# 35| Block 450 +# 35| r35_6301(glval) = VariableAddress[x450] : +# 35| mu35_6302(String) = Uninitialized[x450] : &:r35_6301 +# 35| r35_6303(glval) = FunctionAddress[String] : +# 35| v35_6304(void) = Call[String] : func:r35_6303, this:r35_6301 +# 35| mu35_6305(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6301 +# 35| r35_6307(glval) = VariableAddress[x450] : +# 35| r35_6308(glval) = FunctionAddress[~String] : +# 35| v35_6309(void) = Call[~String] : func:r35_6308, this:r35_6307 +# 35| mu35_6310(unknown) = ^CallSideEffect : ~m? +# 35| v35_6311(void) = ^IndirectReadSideEffect[-1] : &:r35_6307, ~m? +# 35| mu35_6312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6307 +# 35| r35_6313(bool) = Constant[0] : +# 35| v35_6314(void) = ConditionalBranch : r35_6313 #-----| False -> Block 451 #-----| True -> Block 1026 -# 1372| Block 451 -# 1372| r1372_1(glval) = VariableAddress[x451] : -# 1372| mu1372_2(String) = Uninitialized[x451] : &:r1372_1 -# 1372| r1372_3(glval) = FunctionAddress[String] : -# 1372| v1372_4(void) = Call[String] : func:r1372_3, this:r1372_1 -# 1372| mu1372_5(unknown) = ^CallSideEffect : ~m? -# 1372| mu1372_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_1 -# 1373| r1373_1(glval) = VariableAddress[x451] : -# 1373| r1373_2(glval) = FunctionAddress[~String] : -# 1373| v1373_3(void) = Call[~String] : func:r1373_2, this:r1373_1 -# 1373| mu1373_4(unknown) = ^CallSideEffect : ~m? -# 1373| v1373_5(void) = ^IndirectReadSideEffect[-1] : &:r1373_1, ~m? -# 1373| mu1373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| r1373_7(bool) = Constant[0] : -# 1373| v1373_8(void) = ConditionalBranch : r1373_7 +# 35| Block 451 +# 35| r35_6315(glval) = VariableAddress[x451] : +# 35| mu35_6316(String) = Uninitialized[x451] : &:r35_6315 +# 35| r35_6317(glval) = FunctionAddress[String] : +# 35| v35_6318(void) = Call[String] : func:r35_6317, this:r35_6315 +# 35| mu35_6319(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6315 +# 35| r35_6321(glval) = VariableAddress[x451] : +# 35| r35_6322(glval) = FunctionAddress[~String] : +# 35| v35_6323(void) = Call[~String] : func:r35_6322, this:r35_6321 +# 35| mu35_6324(unknown) = ^CallSideEffect : ~m? +# 35| v35_6325(void) = ^IndirectReadSideEffect[-1] : &:r35_6321, ~m? +# 35| mu35_6326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6321 +# 35| r35_6327(bool) = Constant[0] : +# 35| v35_6328(void) = ConditionalBranch : r35_6327 #-----| False -> Block 452 #-----| True -> Block 1026 -# 1375| Block 452 -# 1375| r1375_1(glval) = VariableAddress[x452] : -# 1375| mu1375_2(String) = Uninitialized[x452] : &:r1375_1 -# 1375| r1375_3(glval) = FunctionAddress[String] : -# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 -# 1375| mu1375_5(unknown) = ^CallSideEffect : ~m? -# 1375| mu1375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 -# 1376| r1376_1(glval) = VariableAddress[x452] : -# 1376| r1376_2(glval) = FunctionAddress[~String] : -# 1376| v1376_3(void) = Call[~String] : func:r1376_2, this:r1376_1 -# 1376| mu1376_4(unknown) = ^CallSideEffect : ~m? -# 1376| v1376_5(void) = ^IndirectReadSideEffect[-1] : &:r1376_1, ~m? -# 1376| mu1376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 -# 1376| r1376_7(bool) = Constant[0] : -# 1376| v1376_8(void) = ConditionalBranch : r1376_7 +# 35| Block 452 +# 35| r35_6329(glval) = VariableAddress[x452] : +# 35| mu35_6330(String) = Uninitialized[x452] : &:r35_6329 +# 35| r35_6331(glval) = FunctionAddress[String] : +# 35| v35_6332(void) = Call[String] : func:r35_6331, this:r35_6329 +# 35| mu35_6333(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6329 +# 35| r35_6335(glval) = VariableAddress[x452] : +# 35| r35_6336(glval) = FunctionAddress[~String] : +# 35| v35_6337(void) = Call[~String] : func:r35_6336, this:r35_6335 +# 35| mu35_6338(unknown) = ^CallSideEffect : ~m? +# 35| v35_6339(void) = ^IndirectReadSideEffect[-1] : &:r35_6335, ~m? +# 35| mu35_6340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6335 +# 35| r35_6341(bool) = Constant[0] : +# 35| v35_6342(void) = ConditionalBranch : r35_6341 #-----| False -> Block 453 #-----| True -> Block 1026 -# 1378| Block 453 -# 1378| r1378_1(glval) = VariableAddress[x453] : -# 1378| mu1378_2(String) = Uninitialized[x453] : &:r1378_1 -# 1378| r1378_3(glval) = FunctionAddress[String] : -# 1378| v1378_4(void) = Call[String] : func:r1378_3, this:r1378_1 -# 1378| mu1378_5(unknown) = ^CallSideEffect : ~m? -# 1378| mu1378_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 -# 1379| r1379_1(glval) = VariableAddress[x453] : -# 1379| r1379_2(glval) = FunctionAddress[~String] : -# 1379| v1379_3(void) = Call[~String] : func:r1379_2, this:r1379_1 -# 1379| mu1379_4(unknown) = ^CallSideEffect : ~m? -# 1379| v1379_5(void) = ^IndirectReadSideEffect[-1] : &:r1379_1, ~m? -# 1379| mu1379_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_1 -# 1379| r1379_7(bool) = Constant[0] : -# 1379| v1379_8(void) = ConditionalBranch : r1379_7 +# 35| Block 453 +# 35| r35_6343(glval) = VariableAddress[x453] : +# 35| mu35_6344(String) = Uninitialized[x453] : &:r35_6343 +# 35| r35_6345(glval) = FunctionAddress[String] : +# 35| v35_6346(void) = Call[String] : func:r35_6345, this:r35_6343 +# 35| mu35_6347(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6343 +# 35| r35_6349(glval) = VariableAddress[x453] : +# 35| r35_6350(glval) = FunctionAddress[~String] : +# 35| v35_6351(void) = Call[~String] : func:r35_6350, this:r35_6349 +# 35| mu35_6352(unknown) = ^CallSideEffect : ~m? +# 35| v35_6353(void) = ^IndirectReadSideEffect[-1] : &:r35_6349, ~m? +# 35| mu35_6354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6349 +# 35| r35_6355(bool) = Constant[0] : +# 35| v35_6356(void) = ConditionalBranch : r35_6355 #-----| False -> Block 454 #-----| True -> Block 1026 -# 1381| Block 454 -# 1381| r1381_1(glval) = VariableAddress[x454] : -# 1381| mu1381_2(String) = Uninitialized[x454] : &:r1381_1 -# 1381| r1381_3(glval) = FunctionAddress[String] : -# 1381| v1381_4(void) = Call[String] : func:r1381_3, this:r1381_1 -# 1381| mu1381_5(unknown) = ^CallSideEffect : ~m? -# 1381| mu1381_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1381_1 -# 1382| r1382_1(glval) = VariableAddress[x454] : -# 1382| r1382_2(glval) = FunctionAddress[~String] : -# 1382| v1382_3(void) = Call[~String] : func:r1382_2, this:r1382_1 -# 1382| mu1382_4(unknown) = ^CallSideEffect : ~m? -# 1382| v1382_5(void) = ^IndirectReadSideEffect[-1] : &:r1382_1, ~m? -# 1382| mu1382_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1382_1 -# 1382| r1382_7(bool) = Constant[0] : -# 1382| v1382_8(void) = ConditionalBranch : r1382_7 +# 35| Block 454 +# 35| r35_6357(glval) = VariableAddress[x454] : +# 35| mu35_6358(String) = Uninitialized[x454] : &:r35_6357 +# 35| r35_6359(glval) = FunctionAddress[String] : +# 35| v35_6360(void) = Call[String] : func:r35_6359, this:r35_6357 +# 35| mu35_6361(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6357 +# 35| r35_6363(glval) = VariableAddress[x454] : +# 35| r35_6364(glval) = FunctionAddress[~String] : +# 35| v35_6365(void) = Call[~String] : func:r35_6364, this:r35_6363 +# 35| mu35_6366(unknown) = ^CallSideEffect : ~m? +# 35| v35_6367(void) = ^IndirectReadSideEffect[-1] : &:r35_6363, ~m? +# 35| mu35_6368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6363 +# 35| r35_6369(bool) = Constant[0] : +# 35| v35_6370(void) = ConditionalBranch : r35_6369 #-----| False -> Block 455 #-----| True -> Block 1026 -# 1384| Block 455 -# 1384| r1384_1(glval) = VariableAddress[x455] : -# 1384| mu1384_2(String) = Uninitialized[x455] : &:r1384_1 -# 1384| r1384_3(glval) = FunctionAddress[String] : -# 1384| v1384_4(void) = Call[String] : func:r1384_3, this:r1384_1 -# 1384| mu1384_5(unknown) = ^CallSideEffect : ~m? -# 1384| mu1384_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1384_1 -# 1385| r1385_1(glval) = VariableAddress[x455] : -# 1385| r1385_2(glval) = FunctionAddress[~String] : -# 1385| v1385_3(void) = Call[~String] : func:r1385_2, this:r1385_1 -# 1385| mu1385_4(unknown) = ^CallSideEffect : ~m? -# 1385| v1385_5(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, ~m? -# 1385| mu1385_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1385| r1385_7(bool) = Constant[0] : -# 1385| v1385_8(void) = ConditionalBranch : r1385_7 +# 35| Block 455 +# 35| r35_6371(glval) = VariableAddress[x455] : +# 35| mu35_6372(String) = Uninitialized[x455] : &:r35_6371 +# 35| r35_6373(glval) = FunctionAddress[String] : +# 35| v35_6374(void) = Call[String] : func:r35_6373, this:r35_6371 +# 35| mu35_6375(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6371 +# 35| r35_6377(glval) = VariableAddress[x455] : +# 35| r35_6378(glval) = FunctionAddress[~String] : +# 35| v35_6379(void) = Call[~String] : func:r35_6378, this:r35_6377 +# 35| mu35_6380(unknown) = ^CallSideEffect : ~m? +# 35| v35_6381(void) = ^IndirectReadSideEffect[-1] : &:r35_6377, ~m? +# 35| mu35_6382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6377 +# 35| r35_6383(bool) = Constant[0] : +# 35| v35_6384(void) = ConditionalBranch : r35_6383 #-----| False -> Block 456 #-----| True -> Block 1026 -# 1387| Block 456 -# 1387| r1387_1(glval) = VariableAddress[x456] : -# 1387| mu1387_2(String) = Uninitialized[x456] : &:r1387_1 -# 1387| r1387_3(glval) = FunctionAddress[String] : -# 1387| v1387_4(void) = Call[String] : func:r1387_3, this:r1387_1 -# 1387| mu1387_5(unknown) = ^CallSideEffect : ~m? -# 1387| mu1387_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 -# 1388| r1388_1(glval) = VariableAddress[x456] : -# 1388| r1388_2(glval) = FunctionAddress[~String] : -# 1388| v1388_3(void) = Call[~String] : func:r1388_2, this:r1388_1 -# 1388| mu1388_4(unknown) = ^CallSideEffect : ~m? -# 1388| v1388_5(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? -# 1388| mu1388_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 -# 1388| r1388_7(bool) = Constant[0] : -# 1388| v1388_8(void) = ConditionalBranch : r1388_7 +# 35| Block 456 +# 35| r35_6385(glval) = VariableAddress[x456] : +# 35| mu35_6386(String) = Uninitialized[x456] : &:r35_6385 +# 35| r35_6387(glval) = FunctionAddress[String] : +# 35| v35_6388(void) = Call[String] : func:r35_6387, this:r35_6385 +# 35| mu35_6389(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6385 +# 35| r35_6391(glval) = VariableAddress[x456] : +# 35| r35_6392(glval) = FunctionAddress[~String] : +# 35| v35_6393(void) = Call[~String] : func:r35_6392, this:r35_6391 +# 35| mu35_6394(unknown) = ^CallSideEffect : ~m? +# 35| v35_6395(void) = ^IndirectReadSideEffect[-1] : &:r35_6391, ~m? +# 35| mu35_6396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6391 +# 35| r35_6397(bool) = Constant[0] : +# 35| v35_6398(void) = ConditionalBranch : r35_6397 #-----| False -> Block 457 #-----| True -> Block 1026 -# 1390| Block 457 -# 1390| r1390_1(glval) = VariableAddress[x457] : -# 1390| mu1390_2(String) = Uninitialized[x457] : &:r1390_1 -# 1390| r1390_3(glval) = FunctionAddress[String] : -# 1390| v1390_4(void) = Call[String] : func:r1390_3, this:r1390_1 -# 1390| mu1390_5(unknown) = ^CallSideEffect : ~m? -# 1390| mu1390_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1390_1 -# 1391| r1391_1(glval) = VariableAddress[x457] : -# 1391| r1391_2(glval) = FunctionAddress[~String] : -# 1391| v1391_3(void) = Call[~String] : func:r1391_2, this:r1391_1 -# 1391| mu1391_4(unknown) = ^CallSideEffect : ~m? -# 1391| v1391_5(void) = ^IndirectReadSideEffect[-1] : &:r1391_1, ~m? -# 1391| mu1391_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1391_1 -# 1391| r1391_7(bool) = Constant[0] : -# 1391| v1391_8(void) = ConditionalBranch : r1391_7 +# 35| Block 457 +# 35| r35_6399(glval) = VariableAddress[x457] : +# 35| mu35_6400(String) = Uninitialized[x457] : &:r35_6399 +# 35| r35_6401(glval) = FunctionAddress[String] : +# 35| v35_6402(void) = Call[String] : func:r35_6401, this:r35_6399 +# 35| mu35_6403(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6399 +# 35| r35_6405(glval) = VariableAddress[x457] : +# 35| r35_6406(glval) = FunctionAddress[~String] : +# 35| v35_6407(void) = Call[~String] : func:r35_6406, this:r35_6405 +# 35| mu35_6408(unknown) = ^CallSideEffect : ~m? +# 35| v35_6409(void) = ^IndirectReadSideEffect[-1] : &:r35_6405, ~m? +# 35| mu35_6410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6405 +# 35| r35_6411(bool) = Constant[0] : +# 35| v35_6412(void) = ConditionalBranch : r35_6411 #-----| False -> Block 458 #-----| True -> Block 1026 -# 1393| Block 458 -# 1393| r1393_1(glval) = VariableAddress[x458] : -# 1393| mu1393_2(String) = Uninitialized[x458] : &:r1393_1 -# 1393| r1393_3(glval) = FunctionAddress[String] : -# 1393| v1393_4(void) = Call[String] : func:r1393_3, this:r1393_1 -# 1393| mu1393_5(unknown) = ^CallSideEffect : ~m? -# 1393| mu1393_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1393_1 -# 1394| r1394_1(glval) = VariableAddress[x458] : -# 1394| r1394_2(glval) = FunctionAddress[~String] : -# 1394| v1394_3(void) = Call[~String] : func:r1394_2, this:r1394_1 -# 1394| mu1394_4(unknown) = ^CallSideEffect : ~m? -# 1394| v1394_5(void) = ^IndirectReadSideEffect[-1] : &:r1394_1, ~m? -# 1394| mu1394_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1394| r1394_7(bool) = Constant[0] : -# 1394| v1394_8(void) = ConditionalBranch : r1394_7 +# 35| Block 458 +# 35| r35_6413(glval) = VariableAddress[x458] : +# 35| mu35_6414(String) = Uninitialized[x458] : &:r35_6413 +# 35| r35_6415(glval) = FunctionAddress[String] : +# 35| v35_6416(void) = Call[String] : func:r35_6415, this:r35_6413 +# 35| mu35_6417(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6413 +# 35| r35_6419(glval) = VariableAddress[x458] : +# 35| r35_6420(glval) = FunctionAddress[~String] : +# 35| v35_6421(void) = Call[~String] : func:r35_6420, this:r35_6419 +# 35| mu35_6422(unknown) = ^CallSideEffect : ~m? +# 35| v35_6423(void) = ^IndirectReadSideEffect[-1] : &:r35_6419, ~m? +# 35| mu35_6424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6419 +# 35| r35_6425(bool) = Constant[0] : +# 35| v35_6426(void) = ConditionalBranch : r35_6425 #-----| False -> Block 459 #-----| True -> Block 1026 -# 1396| Block 459 -# 1396| r1396_1(glval) = VariableAddress[x459] : -# 1396| mu1396_2(String) = Uninitialized[x459] : &:r1396_1 -# 1396| r1396_3(glval) = FunctionAddress[String] : -# 1396| v1396_4(void) = Call[String] : func:r1396_3, this:r1396_1 -# 1396| mu1396_5(unknown) = ^CallSideEffect : ~m? -# 1396| mu1396_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 -# 1397| r1397_1(glval) = VariableAddress[x459] : -# 1397| r1397_2(glval) = FunctionAddress[~String] : -# 1397| v1397_3(void) = Call[~String] : func:r1397_2, this:r1397_1 -# 1397| mu1397_4(unknown) = ^CallSideEffect : ~m? -# 1397| v1397_5(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, ~m? -# 1397| mu1397_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| r1397_7(bool) = Constant[0] : -# 1397| v1397_8(void) = ConditionalBranch : r1397_7 +# 35| Block 459 +# 35| r35_6427(glval) = VariableAddress[x459] : +# 35| mu35_6428(String) = Uninitialized[x459] : &:r35_6427 +# 35| r35_6429(glval) = FunctionAddress[String] : +# 35| v35_6430(void) = Call[String] : func:r35_6429, this:r35_6427 +# 35| mu35_6431(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6427 +# 35| r35_6433(glval) = VariableAddress[x459] : +# 35| r35_6434(glval) = FunctionAddress[~String] : +# 35| v35_6435(void) = Call[~String] : func:r35_6434, this:r35_6433 +# 35| mu35_6436(unknown) = ^CallSideEffect : ~m? +# 35| v35_6437(void) = ^IndirectReadSideEffect[-1] : &:r35_6433, ~m? +# 35| mu35_6438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6433 +# 35| r35_6439(bool) = Constant[0] : +# 35| v35_6440(void) = ConditionalBranch : r35_6439 #-----| False -> Block 460 #-----| True -> Block 1026 -# 1399| Block 460 -# 1399| r1399_1(glval) = VariableAddress[x460] : -# 1399| mu1399_2(String) = Uninitialized[x460] : &:r1399_1 -# 1399| r1399_3(glval) = FunctionAddress[String] : -# 1399| v1399_4(void) = Call[String] : func:r1399_3, this:r1399_1 -# 1399| mu1399_5(unknown) = ^CallSideEffect : ~m? -# 1399| mu1399_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1400| r1400_1(glval) = VariableAddress[x460] : -# 1400| r1400_2(glval) = FunctionAddress[~String] : -# 1400| v1400_3(void) = Call[~String] : func:r1400_2, this:r1400_1 -# 1400| mu1400_4(unknown) = ^CallSideEffect : ~m? -# 1400| v1400_5(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, ~m? -# 1400| mu1400_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 -# 1400| r1400_7(bool) = Constant[0] : -# 1400| v1400_8(void) = ConditionalBranch : r1400_7 +# 35| Block 460 +# 35| r35_6441(glval) = VariableAddress[x460] : +# 35| mu35_6442(String) = Uninitialized[x460] : &:r35_6441 +# 35| r35_6443(glval) = FunctionAddress[String] : +# 35| v35_6444(void) = Call[String] : func:r35_6443, this:r35_6441 +# 35| mu35_6445(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6441 +# 35| r35_6447(glval) = VariableAddress[x460] : +# 35| r35_6448(glval) = FunctionAddress[~String] : +# 35| v35_6449(void) = Call[~String] : func:r35_6448, this:r35_6447 +# 35| mu35_6450(unknown) = ^CallSideEffect : ~m? +# 35| v35_6451(void) = ^IndirectReadSideEffect[-1] : &:r35_6447, ~m? +# 35| mu35_6452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6447 +# 35| r35_6453(bool) = Constant[0] : +# 35| v35_6454(void) = ConditionalBranch : r35_6453 #-----| False -> Block 461 #-----| True -> Block 1026 -# 1402| Block 461 -# 1402| r1402_1(glval) = VariableAddress[x461] : -# 1402| mu1402_2(String) = Uninitialized[x461] : &:r1402_1 -# 1402| r1402_3(glval) = FunctionAddress[String] : -# 1402| v1402_4(void) = Call[String] : func:r1402_3, this:r1402_1 -# 1402| mu1402_5(unknown) = ^CallSideEffect : ~m? -# 1402| mu1402_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1402_1 -# 1403| r1403_1(glval) = VariableAddress[x461] : -# 1403| r1403_2(glval) = FunctionAddress[~String] : -# 1403| v1403_3(void) = Call[~String] : func:r1403_2, this:r1403_1 -# 1403| mu1403_4(unknown) = ^CallSideEffect : ~m? -# 1403| v1403_5(void) = ^IndirectReadSideEffect[-1] : &:r1403_1, ~m? -# 1403| mu1403_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1403_1 -# 1403| r1403_7(bool) = Constant[0] : -# 1403| v1403_8(void) = ConditionalBranch : r1403_7 +# 35| Block 461 +# 35| r35_6455(glval) = VariableAddress[x461] : +# 35| mu35_6456(String) = Uninitialized[x461] : &:r35_6455 +# 35| r35_6457(glval) = FunctionAddress[String] : +# 35| v35_6458(void) = Call[String] : func:r35_6457, this:r35_6455 +# 35| mu35_6459(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6455 +# 35| r35_6461(glval) = VariableAddress[x461] : +# 35| r35_6462(glval) = FunctionAddress[~String] : +# 35| v35_6463(void) = Call[~String] : func:r35_6462, this:r35_6461 +# 35| mu35_6464(unknown) = ^CallSideEffect : ~m? +# 35| v35_6465(void) = ^IndirectReadSideEffect[-1] : &:r35_6461, ~m? +# 35| mu35_6466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6461 +# 35| r35_6467(bool) = Constant[0] : +# 35| v35_6468(void) = ConditionalBranch : r35_6467 #-----| False -> Block 462 #-----| True -> Block 1026 -# 1405| Block 462 -# 1405| r1405_1(glval) = VariableAddress[x462] : -# 1405| mu1405_2(String) = Uninitialized[x462] : &:r1405_1 -# 1405| r1405_3(glval) = FunctionAddress[String] : -# 1405| v1405_4(void) = Call[String] : func:r1405_3, this:r1405_1 -# 1405| mu1405_5(unknown) = ^CallSideEffect : ~m? -# 1405| mu1405_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1405_1 -# 1406| r1406_1(glval) = VariableAddress[x462] : -# 1406| r1406_2(glval) = FunctionAddress[~String] : -# 1406| v1406_3(void) = Call[~String] : func:r1406_2, this:r1406_1 -# 1406| mu1406_4(unknown) = ^CallSideEffect : ~m? -# 1406| v1406_5(void) = ^IndirectReadSideEffect[-1] : &:r1406_1, ~m? -# 1406| mu1406_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1406_1 -# 1406| r1406_7(bool) = Constant[0] : -# 1406| v1406_8(void) = ConditionalBranch : r1406_7 +# 35| Block 462 +# 35| r35_6469(glval) = VariableAddress[x462] : +# 35| mu35_6470(String) = Uninitialized[x462] : &:r35_6469 +# 35| r35_6471(glval) = FunctionAddress[String] : +# 35| v35_6472(void) = Call[String] : func:r35_6471, this:r35_6469 +# 35| mu35_6473(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6469 +# 35| r35_6475(glval) = VariableAddress[x462] : +# 35| r35_6476(glval) = FunctionAddress[~String] : +# 35| v35_6477(void) = Call[~String] : func:r35_6476, this:r35_6475 +# 35| mu35_6478(unknown) = ^CallSideEffect : ~m? +# 35| v35_6479(void) = ^IndirectReadSideEffect[-1] : &:r35_6475, ~m? +# 35| mu35_6480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6475 +# 35| r35_6481(bool) = Constant[0] : +# 35| v35_6482(void) = ConditionalBranch : r35_6481 #-----| False -> Block 463 #-----| True -> Block 1026 -# 1408| Block 463 -# 1408| r1408_1(glval) = VariableAddress[x463] : -# 1408| mu1408_2(String) = Uninitialized[x463] : &:r1408_1 -# 1408| r1408_3(glval) = FunctionAddress[String] : -# 1408| v1408_4(void) = Call[String] : func:r1408_3, this:r1408_1 -# 1408| mu1408_5(unknown) = ^CallSideEffect : ~m? -# 1408| mu1408_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1408_1 -# 1409| r1409_1(glval) = VariableAddress[x463] : -# 1409| r1409_2(glval) = FunctionAddress[~String] : -# 1409| v1409_3(void) = Call[~String] : func:r1409_2, this:r1409_1 -# 1409| mu1409_4(unknown) = ^CallSideEffect : ~m? -# 1409| v1409_5(void) = ^IndirectReadSideEffect[-1] : &:r1409_1, ~m? -# 1409| mu1409_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1409_1 -# 1409| r1409_7(bool) = Constant[0] : -# 1409| v1409_8(void) = ConditionalBranch : r1409_7 +# 35| Block 463 +# 35| r35_6483(glval) = VariableAddress[x463] : +# 35| mu35_6484(String) = Uninitialized[x463] : &:r35_6483 +# 35| r35_6485(glval) = FunctionAddress[String] : +# 35| v35_6486(void) = Call[String] : func:r35_6485, this:r35_6483 +# 35| mu35_6487(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6483 +# 35| r35_6489(glval) = VariableAddress[x463] : +# 35| r35_6490(glval) = FunctionAddress[~String] : +# 35| v35_6491(void) = Call[~String] : func:r35_6490, this:r35_6489 +# 35| mu35_6492(unknown) = ^CallSideEffect : ~m? +# 35| v35_6493(void) = ^IndirectReadSideEffect[-1] : &:r35_6489, ~m? +# 35| mu35_6494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6489 +# 35| r35_6495(bool) = Constant[0] : +# 35| v35_6496(void) = ConditionalBranch : r35_6495 #-----| False -> Block 464 #-----| True -> Block 1026 -# 1411| Block 464 -# 1411| r1411_1(glval) = VariableAddress[x464] : -# 1411| mu1411_2(String) = Uninitialized[x464] : &:r1411_1 -# 1411| r1411_3(glval) = FunctionAddress[String] : -# 1411| v1411_4(void) = Call[String] : func:r1411_3, this:r1411_1 -# 1411| mu1411_5(unknown) = ^CallSideEffect : ~m? -# 1411| mu1411_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1411_1 -# 1412| r1412_1(glval) = VariableAddress[x464] : -# 1412| r1412_2(glval) = FunctionAddress[~String] : -# 1412| v1412_3(void) = Call[~String] : func:r1412_2, this:r1412_1 -# 1412| mu1412_4(unknown) = ^CallSideEffect : ~m? -# 1412| v1412_5(void) = ^IndirectReadSideEffect[-1] : &:r1412_1, ~m? -# 1412| mu1412_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1412_1 -# 1412| r1412_7(bool) = Constant[0] : -# 1412| v1412_8(void) = ConditionalBranch : r1412_7 +# 35| Block 464 +# 35| r35_6497(glval) = VariableAddress[x464] : +# 35| mu35_6498(String) = Uninitialized[x464] : &:r35_6497 +# 35| r35_6499(glval) = FunctionAddress[String] : +# 35| v35_6500(void) = Call[String] : func:r35_6499, this:r35_6497 +# 35| mu35_6501(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6497 +# 35| r35_6503(glval) = VariableAddress[x464] : +# 35| r35_6504(glval) = FunctionAddress[~String] : +# 35| v35_6505(void) = Call[~String] : func:r35_6504, this:r35_6503 +# 35| mu35_6506(unknown) = ^CallSideEffect : ~m? +# 35| v35_6507(void) = ^IndirectReadSideEffect[-1] : &:r35_6503, ~m? +# 35| mu35_6508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6503 +# 35| r35_6509(bool) = Constant[0] : +# 35| v35_6510(void) = ConditionalBranch : r35_6509 #-----| False -> Block 465 #-----| True -> Block 1026 -# 1414| Block 465 -# 1414| r1414_1(glval) = VariableAddress[x465] : -# 1414| mu1414_2(String) = Uninitialized[x465] : &:r1414_1 -# 1414| r1414_3(glval) = FunctionAddress[String] : -# 1414| v1414_4(void) = Call[String] : func:r1414_3, this:r1414_1 -# 1414| mu1414_5(unknown) = ^CallSideEffect : ~m? -# 1414| mu1414_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1414_1 -# 1415| r1415_1(glval) = VariableAddress[x465] : -# 1415| r1415_2(glval) = FunctionAddress[~String] : -# 1415| v1415_3(void) = Call[~String] : func:r1415_2, this:r1415_1 -# 1415| mu1415_4(unknown) = ^CallSideEffect : ~m? -# 1415| v1415_5(void) = ^IndirectReadSideEffect[-1] : &:r1415_1, ~m? -# 1415| mu1415_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1415_1 -# 1415| r1415_7(bool) = Constant[0] : -# 1415| v1415_8(void) = ConditionalBranch : r1415_7 +# 35| Block 465 +# 35| r35_6511(glval) = VariableAddress[x465] : +# 35| mu35_6512(String) = Uninitialized[x465] : &:r35_6511 +# 35| r35_6513(glval) = FunctionAddress[String] : +# 35| v35_6514(void) = Call[String] : func:r35_6513, this:r35_6511 +# 35| mu35_6515(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6511 +# 35| r35_6517(glval) = VariableAddress[x465] : +# 35| r35_6518(glval) = FunctionAddress[~String] : +# 35| v35_6519(void) = Call[~String] : func:r35_6518, this:r35_6517 +# 35| mu35_6520(unknown) = ^CallSideEffect : ~m? +# 35| v35_6521(void) = ^IndirectReadSideEffect[-1] : &:r35_6517, ~m? +# 35| mu35_6522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6517 +# 35| r35_6523(bool) = Constant[0] : +# 35| v35_6524(void) = ConditionalBranch : r35_6523 #-----| False -> Block 466 #-----| True -> Block 1026 -# 1417| Block 466 -# 1417| r1417_1(glval) = VariableAddress[x466] : -# 1417| mu1417_2(String) = Uninitialized[x466] : &:r1417_1 -# 1417| r1417_3(glval) = FunctionAddress[String] : -# 1417| v1417_4(void) = Call[String] : func:r1417_3, this:r1417_1 -# 1417| mu1417_5(unknown) = ^CallSideEffect : ~m? -# 1417| mu1417_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1417_1 -# 1418| r1418_1(glval) = VariableAddress[x466] : -# 1418| r1418_2(glval) = FunctionAddress[~String] : -# 1418| v1418_3(void) = Call[~String] : func:r1418_2, this:r1418_1 -# 1418| mu1418_4(unknown) = ^CallSideEffect : ~m? -# 1418| v1418_5(void) = ^IndirectReadSideEffect[-1] : &:r1418_1, ~m? -# 1418| mu1418_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1418_1 -# 1418| r1418_7(bool) = Constant[0] : -# 1418| v1418_8(void) = ConditionalBranch : r1418_7 +# 35| Block 466 +# 35| r35_6525(glval) = VariableAddress[x466] : +# 35| mu35_6526(String) = Uninitialized[x466] : &:r35_6525 +# 35| r35_6527(glval) = FunctionAddress[String] : +# 35| v35_6528(void) = Call[String] : func:r35_6527, this:r35_6525 +# 35| mu35_6529(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6525 +# 35| r35_6531(glval) = VariableAddress[x466] : +# 35| r35_6532(glval) = FunctionAddress[~String] : +# 35| v35_6533(void) = Call[~String] : func:r35_6532, this:r35_6531 +# 35| mu35_6534(unknown) = ^CallSideEffect : ~m? +# 35| v35_6535(void) = ^IndirectReadSideEffect[-1] : &:r35_6531, ~m? +# 35| mu35_6536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6531 +# 35| r35_6537(bool) = Constant[0] : +# 35| v35_6538(void) = ConditionalBranch : r35_6537 #-----| False -> Block 467 #-----| True -> Block 1026 -# 1420| Block 467 -# 1420| r1420_1(glval) = VariableAddress[x467] : -# 1420| mu1420_2(String) = Uninitialized[x467] : &:r1420_1 -# 1420| r1420_3(glval) = FunctionAddress[String] : -# 1420| v1420_4(void) = Call[String] : func:r1420_3, this:r1420_1 -# 1420| mu1420_5(unknown) = ^CallSideEffect : ~m? -# 1420| mu1420_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1420_1 -# 1421| r1421_1(glval) = VariableAddress[x467] : -# 1421| r1421_2(glval) = FunctionAddress[~String] : -# 1421| v1421_3(void) = Call[~String] : func:r1421_2, this:r1421_1 -# 1421| mu1421_4(unknown) = ^CallSideEffect : ~m? -# 1421| v1421_5(void) = ^IndirectReadSideEffect[-1] : &:r1421_1, ~m? -# 1421| mu1421_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_1 -# 1421| r1421_7(bool) = Constant[0] : -# 1421| v1421_8(void) = ConditionalBranch : r1421_7 +# 35| Block 467 +# 35| r35_6539(glval) = VariableAddress[x467] : +# 35| mu35_6540(String) = Uninitialized[x467] : &:r35_6539 +# 35| r35_6541(glval) = FunctionAddress[String] : +# 35| v35_6542(void) = Call[String] : func:r35_6541, this:r35_6539 +# 35| mu35_6543(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6539 +# 35| r35_6545(glval) = VariableAddress[x467] : +# 35| r35_6546(glval) = FunctionAddress[~String] : +# 35| v35_6547(void) = Call[~String] : func:r35_6546, this:r35_6545 +# 35| mu35_6548(unknown) = ^CallSideEffect : ~m? +# 35| v35_6549(void) = ^IndirectReadSideEffect[-1] : &:r35_6545, ~m? +# 35| mu35_6550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6545 +# 35| r35_6551(bool) = Constant[0] : +# 35| v35_6552(void) = ConditionalBranch : r35_6551 #-----| False -> Block 468 #-----| True -> Block 1026 -# 1423| Block 468 -# 1423| r1423_1(glval) = VariableAddress[x468] : -# 1423| mu1423_2(String) = Uninitialized[x468] : &:r1423_1 -# 1423| r1423_3(glval) = FunctionAddress[String] : -# 1423| v1423_4(void) = Call[String] : func:r1423_3, this:r1423_1 -# 1423| mu1423_5(unknown) = ^CallSideEffect : ~m? -# 1423| mu1423_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_1 -# 1424| r1424_1(glval) = VariableAddress[x468] : -# 1424| r1424_2(glval) = FunctionAddress[~String] : -# 1424| v1424_3(void) = Call[~String] : func:r1424_2, this:r1424_1 -# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? -# 1424| v1424_5(void) = ^IndirectReadSideEffect[-1] : &:r1424_1, ~m? -# 1424| mu1424_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_1 -# 1424| r1424_7(bool) = Constant[0] : -# 1424| v1424_8(void) = ConditionalBranch : r1424_7 +# 35| Block 468 +# 35| r35_6553(glval) = VariableAddress[x468] : +# 35| mu35_6554(String) = Uninitialized[x468] : &:r35_6553 +# 35| r35_6555(glval) = FunctionAddress[String] : +# 35| v35_6556(void) = Call[String] : func:r35_6555, this:r35_6553 +# 35| mu35_6557(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6553 +# 35| r35_6559(glval) = VariableAddress[x468] : +# 35| r35_6560(glval) = FunctionAddress[~String] : +# 35| v35_6561(void) = Call[~String] : func:r35_6560, this:r35_6559 +# 35| mu35_6562(unknown) = ^CallSideEffect : ~m? +# 35| v35_6563(void) = ^IndirectReadSideEffect[-1] : &:r35_6559, ~m? +# 35| mu35_6564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6559 +# 35| r35_6565(bool) = Constant[0] : +# 35| v35_6566(void) = ConditionalBranch : r35_6565 #-----| False -> Block 469 #-----| True -> Block 1026 -# 1426| Block 469 -# 1426| r1426_1(glval) = VariableAddress[x469] : -# 1426| mu1426_2(String) = Uninitialized[x469] : &:r1426_1 -# 1426| r1426_3(glval) = FunctionAddress[String] : -# 1426| v1426_4(void) = Call[String] : func:r1426_3, this:r1426_1 -# 1426| mu1426_5(unknown) = ^CallSideEffect : ~m? -# 1426| mu1426_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_1 -# 1427| r1427_1(glval) = VariableAddress[x469] : -# 1427| r1427_2(glval) = FunctionAddress[~String] : -# 1427| v1427_3(void) = Call[~String] : func:r1427_2, this:r1427_1 -# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? -# 1427| v1427_5(void) = ^IndirectReadSideEffect[-1] : &:r1427_1, ~m? -# 1427| mu1427_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1427_1 -# 1427| r1427_7(bool) = Constant[0] : -# 1427| v1427_8(void) = ConditionalBranch : r1427_7 +# 35| Block 469 +# 35| r35_6567(glval) = VariableAddress[x469] : +# 35| mu35_6568(String) = Uninitialized[x469] : &:r35_6567 +# 35| r35_6569(glval) = FunctionAddress[String] : +# 35| v35_6570(void) = Call[String] : func:r35_6569, this:r35_6567 +# 35| mu35_6571(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6567 +# 35| r35_6573(glval) = VariableAddress[x469] : +# 35| r35_6574(glval) = FunctionAddress[~String] : +# 35| v35_6575(void) = Call[~String] : func:r35_6574, this:r35_6573 +# 35| mu35_6576(unknown) = ^CallSideEffect : ~m? +# 35| v35_6577(void) = ^IndirectReadSideEffect[-1] : &:r35_6573, ~m? +# 35| mu35_6578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6573 +# 35| r35_6579(bool) = Constant[0] : +# 35| v35_6580(void) = ConditionalBranch : r35_6579 #-----| False -> Block 470 #-----| True -> Block 1026 -# 1429| Block 470 -# 1429| r1429_1(glval) = VariableAddress[x470] : -# 1429| mu1429_2(String) = Uninitialized[x470] : &:r1429_1 -# 1429| r1429_3(glval) = FunctionAddress[String] : -# 1429| v1429_4(void) = Call[String] : func:r1429_3, this:r1429_1 -# 1429| mu1429_5(unknown) = ^CallSideEffect : ~m? -# 1429| mu1429_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1429_1 -# 1430| r1430_1(glval) = VariableAddress[x470] : -# 1430| r1430_2(glval) = FunctionAddress[~String] : -# 1430| v1430_3(void) = Call[~String] : func:r1430_2, this:r1430_1 -# 1430| mu1430_4(unknown) = ^CallSideEffect : ~m? -# 1430| v1430_5(void) = ^IndirectReadSideEffect[-1] : &:r1430_1, ~m? -# 1430| mu1430_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1430_1 -# 1430| r1430_7(bool) = Constant[0] : -# 1430| v1430_8(void) = ConditionalBranch : r1430_7 +# 35| Block 470 +# 35| r35_6581(glval) = VariableAddress[x470] : +# 35| mu35_6582(String) = Uninitialized[x470] : &:r35_6581 +# 35| r35_6583(glval) = FunctionAddress[String] : +# 35| v35_6584(void) = Call[String] : func:r35_6583, this:r35_6581 +# 35| mu35_6585(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6581 +# 35| r35_6587(glval) = VariableAddress[x470] : +# 35| r35_6588(glval) = FunctionAddress[~String] : +# 35| v35_6589(void) = Call[~String] : func:r35_6588, this:r35_6587 +# 35| mu35_6590(unknown) = ^CallSideEffect : ~m? +# 35| v35_6591(void) = ^IndirectReadSideEffect[-1] : &:r35_6587, ~m? +# 35| mu35_6592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6587 +# 35| r35_6593(bool) = Constant[0] : +# 35| v35_6594(void) = ConditionalBranch : r35_6593 #-----| False -> Block 471 #-----| True -> Block 1026 -# 1432| Block 471 -# 1432| r1432_1(glval) = VariableAddress[x471] : -# 1432| mu1432_2(String) = Uninitialized[x471] : &:r1432_1 -# 1432| r1432_3(glval) = FunctionAddress[String] : -# 1432| v1432_4(void) = Call[String] : func:r1432_3, this:r1432_1 -# 1432| mu1432_5(unknown) = ^CallSideEffect : ~m? -# 1432| mu1432_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1432_1 -# 1433| r1433_1(glval) = VariableAddress[x471] : -# 1433| r1433_2(glval) = FunctionAddress[~String] : -# 1433| v1433_3(void) = Call[~String] : func:r1433_2, this:r1433_1 -# 1433| mu1433_4(unknown) = ^CallSideEffect : ~m? -# 1433| v1433_5(void) = ^IndirectReadSideEffect[-1] : &:r1433_1, ~m? -# 1433| mu1433_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1433_1 -# 1433| r1433_7(bool) = Constant[0] : -# 1433| v1433_8(void) = ConditionalBranch : r1433_7 +# 35| Block 471 +# 35| r35_6595(glval) = VariableAddress[x471] : +# 35| mu35_6596(String) = Uninitialized[x471] : &:r35_6595 +# 35| r35_6597(glval) = FunctionAddress[String] : +# 35| v35_6598(void) = Call[String] : func:r35_6597, this:r35_6595 +# 35| mu35_6599(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6595 +# 35| r35_6601(glval) = VariableAddress[x471] : +# 35| r35_6602(glval) = FunctionAddress[~String] : +# 35| v35_6603(void) = Call[~String] : func:r35_6602, this:r35_6601 +# 35| mu35_6604(unknown) = ^CallSideEffect : ~m? +# 35| v35_6605(void) = ^IndirectReadSideEffect[-1] : &:r35_6601, ~m? +# 35| mu35_6606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6601 +# 35| r35_6607(bool) = Constant[0] : +# 35| v35_6608(void) = ConditionalBranch : r35_6607 #-----| False -> Block 472 #-----| True -> Block 1026 -# 1435| Block 472 -# 1435| r1435_1(glval) = VariableAddress[x472] : -# 1435| mu1435_2(String) = Uninitialized[x472] : &:r1435_1 -# 1435| r1435_3(glval) = FunctionAddress[String] : -# 1435| v1435_4(void) = Call[String] : func:r1435_3, this:r1435_1 -# 1435| mu1435_5(unknown) = ^CallSideEffect : ~m? -# 1435| mu1435_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1435_1 -# 1436| r1436_1(glval) = VariableAddress[x472] : -# 1436| r1436_2(glval) = FunctionAddress[~String] : -# 1436| v1436_3(void) = Call[~String] : func:r1436_2, this:r1436_1 -# 1436| mu1436_4(unknown) = ^CallSideEffect : ~m? -# 1436| v1436_5(void) = ^IndirectReadSideEffect[-1] : &:r1436_1, ~m? -# 1436| mu1436_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1436_1 -# 1436| r1436_7(bool) = Constant[0] : -# 1436| v1436_8(void) = ConditionalBranch : r1436_7 +# 35| Block 472 +# 35| r35_6609(glval) = VariableAddress[x472] : +# 35| mu35_6610(String) = Uninitialized[x472] : &:r35_6609 +# 35| r35_6611(glval) = FunctionAddress[String] : +# 35| v35_6612(void) = Call[String] : func:r35_6611, this:r35_6609 +# 35| mu35_6613(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6609 +# 35| r35_6615(glval) = VariableAddress[x472] : +# 35| r35_6616(glval) = FunctionAddress[~String] : +# 35| v35_6617(void) = Call[~String] : func:r35_6616, this:r35_6615 +# 35| mu35_6618(unknown) = ^CallSideEffect : ~m? +# 35| v35_6619(void) = ^IndirectReadSideEffect[-1] : &:r35_6615, ~m? +# 35| mu35_6620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6615 +# 35| r35_6621(bool) = Constant[0] : +# 35| v35_6622(void) = ConditionalBranch : r35_6621 #-----| False -> Block 473 #-----| True -> Block 1026 -# 1438| Block 473 -# 1438| r1438_1(glval) = VariableAddress[x473] : -# 1438| mu1438_2(String) = Uninitialized[x473] : &:r1438_1 -# 1438| r1438_3(glval) = FunctionAddress[String] : -# 1438| v1438_4(void) = Call[String] : func:r1438_3, this:r1438_1 -# 1438| mu1438_5(unknown) = ^CallSideEffect : ~m? -# 1438| mu1438_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1438_1 -# 1439| r1439_1(glval) = VariableAddress[x473] : -# 1439| r1439_2(glval) = FunctionAddress[~String] : -# 1439| v1439_3(void) = Call[~String] : func:r1439_2, this:r1439_1 -# 1439| mu1439_4(unknown) = ^CallSideEffect : ~m? -# 1439| v1439_5(void) = ^IndirectReadSideEffect[-1] : &:r1439_1, ~m? -# 1439| mu1439_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1439_1 -# 1439| r1439_7(bool) = Constant[0] : -# 1439| v1439_8(void) = ConditionalBranch : r1439_7 +# 35| Block 473 +# 35| r35_6623(glval) = VariableAddress[x473] : +# 35| mu35_6624(String) = Uninitialized[x473] : &:r35_6623 +# 35| r35_6625(glval) = FunctionAddress[String] : +# 35| v35_6626(void) = Call[String] : func:r35_6625, this:r35_6623 +# 35| mu35_6627(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6623 +# 35| r35_6629(glval) = VariableAddress[x473] : +# 35| r35_6630(glval) = FunctionAddress[~String] : +# 35| v35_6631(void) = Call[~String] : func:r35_6630, this:r35_6629 +# 35| mu35_6632(unknown) = ^CallSideEffect : ~m? +# 35| v35_6633(void) = ^IndirectReadSideEffect[-1] : &:r35_6629, ~m? +# 35| mu35_6634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6629 +# 35| r35_6635(bool) = Constant[0] : +# 35| v35_6636(void) = ConditionalBranch : r35_6635 #-----| False -> Block 474 #-----| True -> Block 1026 -# 1441| Block 474 -# 1441| r1441_1(glval) = VariableAddress[x474] : -# 1441| mu1441_2(String) = Uninitialized[x474] : &:r1441_1 -# 1441| r1441_3(glval) = FunctionAddress[String] : -# 1441| v1441_4(void) = Call[String] : func:r1441_3, this:r1441_1 -# 1441| mu1441_5(unknown) = ^CallSideEffect : ~m? -# 1441| mu1441_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1441_1 -# 1442| r1442_1(glval) = VariableAddress[x474] : -# 1442| r1442_2(glval) = FunctionAddress[~String] : -# 1442| v1442_3(void) = Call[~String] : func:r1442_2, this:r1442_1 -# 1442| mu1442_4(unknown) = ^CallSideEffect : ~m? -# 1442| v1442_5(void) = ^IndirectReadSideEffect[-1] : &:r1442_1, ~m? -# 1442| mu1442_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1442_1 -# 1442| r1442_7(bool) = Constant[0] : -# 1442| v1442_8(void) = ConditionalBranch : r1442_7 +# 35| Block 474 +# 35| r35_6637(glval) = VariableAddress[x474] : +# 35| mu35_6638(String) = Uninitialized[x474] : &:r35_6637 +# 35| r35_6639(glval) = FunctionAddress[String] : +# 35| v35_6640(void) = Call[String] : func:r35_6639, this:r35_6637 +# 35| mu35_6641(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6637 +# 35| r35_6643(glval) = VariableAddress[x474] : +# 35| r35_6644(glval) = FunctionAddress[~String] : +# 35| v35_6645(void) = Call[~String] : func:r35_6644, this:r35_6643 +# 35| mu35_6646(unknown) = ^CallSideEffect : ~m? +# 35| v35_6647(void) = ^IndirectReadSideEffect[-1] : &:r35_6643, ~m? +# 35| mu35_6648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6643 +# 35| r35_6649(bool) = Constant[0] : +# 35| v35_6650(void) = ConditionalBranch : r35_6649 #-----| False -> Block 475 #-----| True -> Block 1026 -# 1444| Block 475 -# 1444| r1444_1(glval) = VariableAddress[x475] : -# 1444| mu1444_2(String) = Uninitialized[x475] : &:r1444_1 -# 1444| r1444_3(glval) = FunctionAddress[String] : -# 1444| v1444_4(void) = Call[String] : func:r1444_3, this:r1444_1 -# 1444| mu1444_5(unknown) = ^CallSideEffect : ~m? -# 1444| mu1444_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1444_1 -# 1445| r1445_1(glval) = VariableAddress[x475] : -# 1445| r1445_2(glval) = FunctionAddress[~String] : -# 1445| v1445_3(void) = Call[~String] : func:r1445_2, this:r1445_1 -# 1445| mu1445_4(unknown) = ^CallSideEffect : ~m? -# 1445| v1445_5(void) = ^IndirectReadSideEffect[-1] : &:r1445_1, ~m? -# 1445| mu1445_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1445_1 -# 1445| r1445_7(bool) = Constant[0] : -# 1445| v1445_8(void) = ConditionalBranch : r1445_7 +# 35| Block 475 +# 35| r35_6651(glval) = VariableAddress[x475] : +# 35| mu35_6652(String) = Uninitialized[x475] : &:r35_6651 +# 35| r35_6653(glval) = FunctionAddress[String] : +# 35| v35_6654(void) = Call[String] : func:r35_6653, this:r35_6651 +# 35| mu35_6655(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6651 +# 35| r35_6657(glval) = VariableAddress[x475] : +# 35| r35_6658(glval) = FunctionAddress[~String] : +# 35| v35_6659(void) = Call[~String] : func:r35_6658, this:r35_6657 +# 35| mu35_6660(unknown) = ^CallSideEffect : ~m? +# 35| v35_6661(void) = ^IndirectReadSideEffect[-1] : &:r35_6657, ~m? +# 35| mu35_6662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6657 +# 35| r35_6663(bool) = Constant[0] : +# 35| v35_6664(void) = ConditionalBranch : r35_6663 #-----| False -> Block 476 #-----| True -> Block 1026 -# 1447| Block 476 -# 1447| r1447_1(glval) = VariableAddress[x476] : -# 1447| mu1447_2(String) = Uninitialized[x476] : &:r1447_1 -# 1447| r1447_3(glval) = FunctionAddress[String] : -# 1447| v1447_4(void) = Call[String] : func:r1447_3, this:r1447_1 -# 1447| mu1447_5(unknown) = ^CallSideEffect : ~m? -# 1447| mu1447_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1447_1 -# 1448| r1448_1(glval) = VariableAddress[x476] : -# 1448| r1448_2(glval) = FunctionAddress[~String] : -# 1448| v1448_3(void) = Call[~String] : func:r1448_2, this:r1448_1 -# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? -# 1448| v1448_5(void) = ^IndirectReadSideEffect[-1] : &:r1448_1, ~m? -# 1448| mu1448_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 -# 1448| r1448_7(bool) = Constant[0] : -# 1448| v1448_8(void) = ConditionalBranch : r1448_7 +# 35| Block 476 +# 35| r35_6665(glval) = VariableAddress[x476] : +# 35| mu35_6666(String) = Uninitialized[x476] : &:r35_6665 +# 35| r35_6667(glval) = FunctionAddress[String] : +# 35| v35_6668(void) = Call[String] : func:r35_6667, this:r35_6665 +# 35| mu35_6669(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6665 +# 35| r35_6671(glval) = VariableAddress[x476] : +# 35| r35_6672(glval) = FunctionAddress[~String] : +# 35| v35_6673(void) = Call[~String] : func:r35_6672, this:r35_6671 +# 35| mu35_6674(unknown) = ^CallSideEffect : ~m? +# 35| v35_6675(void) = ^IndirectReadSideEffect[-1] : &:r35_6671, ~m? +# 35| mu35_6676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6671 +# 35| r35_6677(bool) = Constant[0] : +# 35| v35_6678(void) = ConditionalBranch : r35_6677 #-----| False -> Block 477 #-----| True -> Block 1026 -# 1450| Block 477 -# 1450| r1450_1(glval) = VariableAddress[x477] : -# 1450| mu1450_2(String) = Uninitialized[x477] : &:r1450_1 -# 1450| r1450_3(glval) = FunctionAddress[String] : -# 1450| v1450_4(void) = Call[String] : func:r1450_3, this:r1450_1 -# 1450| mu1450_5(unknown) = ^CallSideEffect : ~m? -# 1450| mu1450_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1450_1 -# 1451| r1451_1(glval) = VariableAddress[x477] : -# 1451| r1451_2(glval) = FunctionAddress[~String] : -# 1451| v1451_3(void) = Call[~String] : func:r1451_2, this:r1451_1 -# 1451| mu1451_4(unknown) = ^CallSideEffect : ~m? -# 1451| v1451_5(void) = ^IndirectReadSideEffect[-1] : &:r1451_1, ~m? -# 1451| mu1451_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1451_1 -# 1451| r1451_7(bool) = Constant[0] : -# 1451| v1451_8(void) = ConditionalBranch : r1451_7 +# 35| Block 477 +# 35| r35_6679(glval) = VariableAddress[x477] : +# 35| mu35_6680(String) = Uninitialized[x477] : &:r35_6679 +# 35| r35_6681(glval) = FunctionAddress[String] : +# 35| v35_6682(void) = Call[String] : func:r35_6681, this:r35_6679 +# 35| mu35_6683(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6679 +# 35| r35_6685(glval) = VariableAddress[x477] : +# 35| r35_6686(glval) = FunctionAddress[~String] : +# 35| v35_6687(void) = Call[~String] : func:r35_6686, this:r35_6685 +# 35| mu35_6688(unknown) = ^CallSideEffect : ~m? +# 35| v35_6689(void) = ^IndirectReadSideEffect[-1] : &:r35_6685, ~m? +# 35| mu35_6690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6685 +# 35| r35_6691(bool) = Constant[0] : +# 35| v35_6692(void) = ConditionalBranch : r35_6691 #-----| False -> Block 478 #-----| True -> Block 1026 -# 1453| Block 478 -# 1453| r1453_1(glval) = VariableAddress[x478] : -# 1453| mu1453_2(String) = Uninitialized[x478] : &:r1453_1 -# 1453| r1453_3(glval) = FunctionAddress[String] : -# 1453| v1453_4(void) = Call[String] : func:r1453_3, this:r1453_1 -# 1453| mu1453_5(unknown) = ^CallSideEffect : ~m? -# 1453| mu1453_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1453_1 -# 1454| r1454_1(glval) = VariableAddress[x478] : -# 1454| r1454_2(glval) = FunctionAddress[~String] : -# 1454| v1454_3(void) = Call[~String] : func:r1454_2, this:r1454_1 -# 1454| mu1454_4(unknown) = ^CallSideEffect : ~m? -# 1454| v1454_5(void) = ^IndirectReadSideEffect[-1] : &:r1454_1, ~m? -# 1454| mu1454_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1454_1 -# 1454| r1454_7(bool) = Constant[0] : -# 1454| v1454_8(void) = ConditionalBranch : r1454_7 +# 35| Block 478 +# 35| r35_6693(glval) = VariableAddress[x478] : +# 35| mu35_6694(String) = Uninitialized[x478] : &:r35_6693 +# 35| r35_6695(glval) = FunctionAddress[String] : +# 35| v35_6696(void) = Call[String] : func:r35_6695, this:r35_6693 +# 35| mu35_6697(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6693 +# 35| r35_6699(glval) = VariableAddress[x478] : +# 35| r35_6700(glval) = FunctionAddress[~String] : +# 35| v35_6701(void) = Call[~String] : func:r35_6700, this:r35_6699 +# 35| mu35_6702(unknown) = ^CallSideEffect : ~m? +# 35| v35_6703(void) = ^IndirectReadSideEffect[-1] : &:r35_6699, ~m? +# 35| mu35_6704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6699 +# 35| r35_6705(bool) = Constant[0] : +# 35| v35_6706(void) = ConditionalBranch : r35_6705 #-----| False -> Block 479 #-----| True -> Block 1026 -# 1456| Block 479 -# 1456| r1456_1(glval) = VariableAddress[x479] : -# 1456| mu1456_2(String) = Uninitialized[x479] : &:r1456_1 -# 1456| r1456_3(glval) = FunctionAddress[String] : -# 1456| v1456_4(void) = Call[String] : func:r1456_3, this:r1456_1 -# 1456| mu1456_5(unknown) = ^CallSideEffect : ~m? -# 1456| mu1456_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1456_1 -# 1457| r1457_1(glval) = VariableAddress[x479] : -# 1457| r1457_2(glval) = FunctionAddress[~String] : -# 1457| v1457_3(void) = Call[~String] : func:r1457_2, this:r1457_1 -# 1457| mu1457_4(unknown) = ^CallSideEffect : ~m? -# 1457| v1457_5(void) = ^IndirectReadSideEffect[-1] : &:r1457_1, ~m? -# 1457| mu1457_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1457_1 -# 1457| r1457_7(bool) = Constant[0] : -# 1457| v1457_8(void) = ConditionalBranch : r1457_7 +# 35| Block 479 +# 35| r35_6707(glval) = VariableAddress[x479] : +# 35| mu35_6708(String) = Uninitialized[x479] : &:r35_6707 +# 35| r35_6709(glval) = FunctionAddress[String] : +# 35| v35_6710(void) = Call[String] : func:r35_6709, this:r35_6707 +# 35| mu35_6711(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6707 +# 35| r35_6713(glval) = VariableAddress[x479] : +# 35| r35_6714(glval) = FunctionAddress[~String] : +# 35| v35_6715(void) = Call[~String] : func:r35_6714, this:r35_6713 +# 35| mu35_6716(unknown) = ^CallSideEffect : ~m? +# 35| v35_6717(void) = ^IndirectReadSideEffect[-1] : &:r35_6713, ~m? +# 35| mu35_6718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6713 +# 35| r35_6719(bool) = Constant[0] : +# 35| v35_6720(void) = ConditionalBranch : r35_6719 #-----| False -> Block 480 #-----| True -> Block 1026 -# 1459| Block 480 -# 1459| r1459_1(glval) = VariableAddress[x480] : -# 1459| mu1459_2(String) = Uninitialized[x480] : &:r1459_1 -# 1459| r1459_3(glval) = FunctionAddress[String] : -# 1459| v1459_4(void) = Call[String] : func:r1459_3, this:r1459_1 -# 1459| mu1459_5(unknown) = ^CallSideEffect : ~m? -# 1459| mu1459_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1459_1 -# 1460| r1460_1(glval) = VariableAddress[x480] : -# 1460| r1460_2(glval) = FunctionAddress[~String] : -# 1460| v1460_3(void) = Call[~String] : func:r1460_2, this:r1460_1 -# 1460| mu1460_4(unknown) = ^CallSideEffect : ~m? -# 1460| v1460_5(void) = ^IndirectReadSideEffect[-1] : &:r1460_1, ~m? -# 1460| mu1460_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1460_1 -# 1460| r1460_7(bool) = Constant[0] : -# 1460| v1460_8(void) = ConditionalBranch : r1460_7 +# 35| Block 480 +# 35| r35_6721(glval) = VariableAddress[x480] : +# 35| mu35_6722(String) = Uninitialized[x480] : &:r35_6721 +# 35| r35_6723(glval) = FunctionAddress[String] : +# 35| v35_6724(void) = Call[String] : func:r35_6723, this:r35_6721 +# 35| mu35_6725(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6721 +# 35| r35_6727(glval) = VariableAddress[x480] : +# 35| r35_6728(glval) = FunctionAddress[~String] : +# 35| v35_6729(void) = Call[~String] : func:r35_6728, this:r35_6727 +# 35| mu35_6730(unknown) = ^CallSideEffect : ~m? +# 35| v35_6731(void) = ^IndirectReadSideEffect[-1] : &:r35_6727, ~m? +# 35| mu35_6732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6727 +# 35| r35_6733(bool) = Constant[0] : +# 35| v35_6734(void) = ConditionalBranch : r35_6733 #-----| False -> Block 481 #-----| True -> Block 1026 -# 1462| Block 481 -# 1462| r1462_1(glval) = VariableAddress[x481] : -# 1462| mu1462_2(String) = Uninitialized[x481] : &:r1462_1 -# 1462| r1462_3(glval) = FunctionAddress[String] : -# 1462| v1462_4(void) = Call[String] : func:r1462_3, this:r1462_1 -# 1462| mu1462_5(unknown) = ^CallSideEffect : ~m? -# 1462| mu1462_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1462_1 -# 1463| r1463_1(glval) = VariableAddress[x481] : -# 1463| r1463_2(glval) = FunctionAddress[~String] : -# 1463| v1463_3(void) = Call[~String] : func:r1463_2, this:r1463_1 -# 1463| mu1463_4(unknown) = ^CallSideEffect : ~m? -# 1463| v1463_5(void) = ^IndirectReadSideEffect[-1] : &:r1463_1, ~m? -# 1463| mu1463_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1463_1 -# 1463| r1463_7(bool) = Constant[0] : -# 1463| v1463_8(void) = ConditionalBranch : r1463_7 +# 35| Block 481 +# 35| r35_6735(glval) = VariableAddress[x481] : +# 35| mu35_6736(String) = Uninitialized[x481] : &:r35_6735 +# 35| r35_6737(glval) = FunctionAddress[String] : +# 35| v35_6738(void) = Call[String] : func:r35_6737, this:r35_6735 +# 35| mu35_6739(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6735 +# 35| r35_6741(glval) = VariableAddress[x481] : +# 35| r35_6742(glval) = FunctionAddress[~String] : +# 35| v35_6743(void) = Call[~String] : func:r35_6742, this:r35_6741 +# 35| mu35_6744(unknown) = ^CallSideEffect : ~m? +# 35| v35_6745(void) = ^IndirectReadSideEffect[-1] : &:r35_6741, ~m? +# 35| mu35_6746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6741 +# 35| r35_6747(bool) = Constant[0] : +# 35| v35_6748(void) = ConditionalBranch : r35_6747 #-----| False -> Block 482 #-----| True -> Block 1026 -# 1465| Block 482 -# 1465| r1465_1(glval) = VariableAddress[x482] : -# 1465| mu1465_2(String) = Uninitialized[x482] : &:r1465_1 -# 1465| r1465_3(glval) = FunctionAddress[String] : -# 1465| v1465_4(void) = Call[String] : func:r1465_3, this:r1465_1 -# 1465| mu1465_5(unknown) = ^CallSideEffect : ~m? -# 1465| mu1465_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1465_1 -# 1466| r1466_1(glval) = VariableAddress[x482] : -# 1466| r1466_2(glval) = FunctionAddress[~String] : -# 1466| v1466_3(void) = Call[~String] : func:r1466_2, this:r1466_1 -# 1466| mu1466_4(unknown) = ^CallSideEffect : ~m? -# 1466| v1466_5(void) = ^IndirectReadSideEffect[-1] : &:r1466_1, ~m? -# 1466| mu1466_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1466_1 -# 1466| r1466_7(bool) = Constant[0] : -# 1466| v1466_8(void) = ConditionalBranch : r1466_7 +# 35| Block 482 +# 35| r35_6749(glval) = VariableAddress[x482] : +# 35| mu35_6750(String) = Uninitialized[x482] : &:r35_6749 +# 35| r35_6751(glval) = FunctionAddress[String] : +# 35| v35_6752(void) = Call[String] : func:r35_6751, this:r35_6749 +# 35| mu35_6753(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6749 +# 35| r35_6755(glval) = VariableAddress[x482] : +# 35| r35_6756(glval) = FunctionAddress[~String] : +# 35| v35_6757(void) = Call[~String] : func:r35_6756, this:r35_6755 +# 35| mu35_6758(unknown) = ^CallSideEffect : ~m? +# 35| v35_6759(void) = ^IndirectReadSideEffect[-1] : &:r35_6755, ~m? +# 35| mu35_6760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6755 +# 35| r35_6761(bool) = Constant[0] : +# 35| v35_6762(void) = ConditionalBranch : r35_6761 #-----| False -> Block 483 #-----| True -> Block 1026 -# 1468| Block 483 -# 1468| r1468_1(glval) = VariableAddress[x483] : -# 1468| mu1468_2(String) = Uninitialized[x483] : &:r1468_1 -# 1468| r1468_3(glval) = FunctionAddress[String] : -# 1468| v1468_4(void) = Call[String] : func:r1468_3, this:r1468_1 -# 1468| mu1468_5(unknown) = ^CallSideEffect : ~m? -# 1468| mu1468_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1468_1 -# 1469| r1469_1(glval) = VariableAddress[x483] : -# 1469| r1469_2(glval) = FunctionAddress[~String] : -# 1469| v1469_3(void) = Call[~String] : func:r1469_2, this:r1469_1 -# 1469| mu1469_4(unknown) = ^CallSideEffect : ~m? -# 1469| v1469_5(void) = ^IndirectReadSideEffect[-1] : &:r1469_1, ~m? -# 1469| mu1469_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1469_1 -# 1469| r1469_7(bool) = Constant[0] : -# 1469| v1469_8(void) = ConditionalBranch : r1469_7 +# 35| Block 483 +# 35| r35_6763(glval) = VariableAddress[x483] : +# 35| mu35_6764(String) = Uninitialized[x483] : &:r35_6763 +# 35| r35_6765(glval) = FunctionAddress[String] : +# 35| v35_6766(void) = Call[String] : func:r35_6765, this:r35_6763 +# 35| mu35_6767(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6763 +# 35| r35_6769(glval) = VariableAddress[x483] : +# 35| r35_6770(glval) = FunctionAddress[~String] : +# 35| v35_6771(void) = Call[~String] : func:r35_6770, this:r35_6769 +# 35| mu35_6772(unknown) = ^CallSideEffect : ~m? +# 35| v35_6773(void) = ^IndirectReadSideEffect[-1] : &:r35_6769, ~m? +# 35| mu35_6774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6769 +# 35| r35_6775(bool) = Constant[0] : +# 35| v35_6776(void) = ConditionalBranch : r35_6775 #-----| False -> Block 484 #-----| True -> Block 1026 -# 1471| Block 484 -# 1471| r1471_1(glval) = VariableAddress[x484] : -# 1471| mu1471_2(String) = Uninitialized[x484] : &:r1471_1 -# 1471| r1471_3(glval) = FunctionAddress[String] : -# 1471| v1471_4(void) = Call[String] : func:r1471_3, this:r1471_1 -# 1471| mu1471_5(unknown) = ^CallSideEffect : ~m? -# 1471| mu1471_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1471_1 -# 1472| r1472_1(glval) = VariableAddress[x484] : -# 1472| r1472_2(glval) = FunctionAddress[~String] : -# 1472| v1472_3(void) = Call[~String] : func:r1472_2, this:r1472_1 -# 1472| mu1472_4(unknown) = ^CallSideEffect : ~m? -# 1472| v1472_5(void) = ^IndirectReadSideEffect[-1] : &:r1472_1, ~m? -# 1472| mu1472_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1472_1 -# 1472| r1472_7(bool) = Constant[0] : -# 1472| v1472_8(void) = ConditionalBranch : r1472_7 +# 35| Block 484 +# 35| r35_6777(glval) = VariableAddress[x484] : +# 35| mu35_6778(String) = Uninitialized[x484] : &:r35_6777 +# 35| r35_6779(glval) = FunctionAddress[String] : +# 35| v35_6780(void) = Call[String] : func:r35_6779, this:r35_6777 +# 35| mu35_6781(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6777 +# 35| r35_6783(glval) = VariableAddress[x484] : +# 35| r35_6784(glval) = FunctionAddress[~String] : +# 35| v35_6785(void) = Call[~String] : func:r35_6784, this:r35_6783 +# 35| mu35_6786(unknown) = ^CallSideEffect : ~m? +# 35| v35_6787(void) = ^IndirectReadSideEffect[-1] : &:r35_6783, ~m? +# 35| mu35_6788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6783 +# 35| r35_6789(bool) = Constant[0] : +# 35| v35_6790(void) = ConditionalBranch : r35_6789 #-----| False -> Block 485 #-----| True -> Block 1026 -# 1474| Block 485 -# 1474| r1474_1(glval) = VariableAddress[x485] : -# 1474| mu1474_2(String) = Uninitialized[x485] : &:r1474_1 -# 1474| r1474_3(glval) = FunctionAddress[String] : -# 1474| v1474_4(void) = Call[String] : func:r1474_3, this:r1474_1 -# 1474| mu1474_5(unknown) = ^CallSideEffect : ~m? -# 1474| mu1474_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1474_1 -# 1475| r1475_1(glval) = VariableAddress[x485] : -# 1475| r1475_2(glval) = FunctionAddress[~String] : -# 1475| v1475_3(void) = Call[~String] : func:r1475_2, this:r1475_1 -# 1475| mu1475_4(unknown) = ^CallSideEffect : ~m? -# 1475| v1475_5(void) = ^IndirectReadSideEffect[-1] : &:r1475_1, ~m? -# 1475| mu1475_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1475_1 -# 1475| r1475_7(bool) = Constant[0] : -# 1475| v1475_8(void) = ConditionalBranch : r1475_7 +# 35| Block 485 +# 35| r35_6791(glval) = VariableAddress[x485] : +# 35| mu35_6792(String) = Uninitialized[x485] : &:r35_6791 +# 35| r35_6793(glval) = FunctionAddress[String] : +# 35| v35_6794(void) = Call[String] : func:r35_6793, this:r35_6791 +# 35| mu35_6795(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6791 +# 35| r35_6797(glval) = VariableAddress[x485] : +# 35| r35_6798(glval) = FunctionAddress[~String] : +# 35| v35_6799(void) = Call[~String] : func:r35_6798, this:r35_6797 +# 35| mu35_6800(unknown) = ^CallSideEffect : ~m? +# 35| v35_6801(void) = ^IndirectReadSideEffect[-1] : &:r35_6797, ~m? +# 35| mu35_6802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6797 +# 35| r35_6803(bool) = Constant[0] : +# 35| v35_6804(void) = ConditionalBranch : r35_6803 #-----| False -> Block 486 #-----| True -> Block 1026 -# 1477| Block 486 -# 1477| r1477_1(glval) = VariableAddress[x486] : -# 1477| mu1477_2(String) = Uninitialized[x486] : &:r1477_1 -# 1477| r1477_3(glval) = FunctionAddress[String] : -# 1477| v1477_4(void) = Call[String] : func:r1477_3, this:r1477_1 -# 1477| mu1477_5(unknown) = ^CallSideEffect : ~m? -# 1477| mu1477_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1477_1 -# 1478| r1478_1(glval) = VariableAddress[x486] : -# 1478| r1478_2(glval) = FunctionAddress[~String] : -# 1478| v1478_3(void) = Call[~String] : func:r1478_2, this:r1478_1 -# 1478| mu1478_4(unknown) = ^CallSideEffect : ~m? -# 1478| v1478_5(void) = ^IndirectReadSideEffect[-1] : &:r1478_1, ~m? -# 1478| mu1478_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1478_1 -# 1478| r1478_7(bool) = Constant[0] : -# 1478| v1478_8(void) = ConditionalBranch : r1478_7 +# 35| Block 486 +# 35| r35_6805(glval) = VariableAddress[x486] : +# 35| mu35_6806(String) = Uninitialized[x486] : &:r35_6805 +# 35| r35_6807(glval) = FunctionAddress[String] : +# 35| v35_6808(void) = Call[String] : func:r35_6807, this:r35_6805 +# 35| mu35_6809(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6805 +# 35| r35_6811(glval) = VariableAddress[x486] : +# 35| r35_6812(glval) = FunctionAddress[~String] : +# 35| v35_6813(void) = Call[~String] : func:r35_6812, this:r35_6811 +# 35| mu35_6814(unknown) = ^CallSideEffect : ~m? +# 35| v35_6815(void) = ^IndirectReadSideEffect[-1] : &:r35_6811, ~m? +# 35| mu35_6816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6811 +# 35| r35_6817(bool) = Constant[0] : +# 35| v35_6818(void) = ConditionalBranch : r35_6817 #-----| False -> Block 487 #-----| True -> Block 1026 -# 1480| Block 487 -# 1480| r1480_1(glval) = VariableAddress[x487] : -# 1480| mu1480_2(String) = Uninitialized[x487] : &:r1480_1 -# 1480| r1480_3(glval) = FunctionAddress[String] : -# 1480| v1480_4(void) = Call[String] : func:r1480_3, this:r1480_1 -# 1480| mu1480_5(unknown) = ^CallSideEffect : ~m? -# 1480| mu1480_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1480_1 -# 1481| r1481_1(glval) = VariableAddress[x487] : -# 1481| r1481_2(glval) = FunctionAddress[~String] : -# 1481| v1481_3(void) = Call[~String] : func:r1481_2, this:r1481_1 -# 1481| mu1481_4(unknown) = ^CallSideEffect : ~m? -# 1481| v1481_5(void) = ^IndirectReadSideEffect[-1] : &:r1481_1, ~m? -# 1481| mu1481_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1481_1 -# 1481| r1481_7(bool) = Constant[0] : -# 1481| v1481_8(void) = ConditionalBranch : r1481_7 +# 35| Block 487 +# 35| r35_6819(glval) = VariableAddress[x487] : +# 35| mu35_6820(String) = Uninitialized[x487] : &:r35_6819 +# 35| r35_6821(glval) = FunctionAddress[String] : +# 35| v35_6822(void) = Call[String] : func:r35_6821, this:r35_6819 +# 35| mu35_6823(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6819 +# 35| r35_6825(glval) = VariableAddress[x487] : +# 35| r35_6826(glval) = FunctionAddress[~String] : +# 35| v35_6827(void) = Call[~String] : func:r35_6826, this:r35_6825 +# 35| mu35_6828(unknown) = ^CallSideEffect : ~m? +# 35| v35_6829(void) = ^IndirectReadSideEffect[-1] : &:r35_6825, ~m? +# 35| mu35_6830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6825 +# 35| r35_6831(bool) = Constant[0] : +# 35| v35_6832(void) = ConditionalBranch : r35_6831 #-----| False -> Block 488 #-----| True -> Block 1026 -# 1483| Block 488 -# 1483| r1483_1(glval) = VariableAddress[x488] : -# 1483| mu1483_2(String) = Uninitialized[x488] : &:r1483_1 -# 1483| r1483_3(glval) = FunctionAddress[String] : -# 1483| v1483_4(void) = Call[String] : func:r1483_3, this:r1483_1 -# 1483| mu1483_5(unknown) = ^CallSideEffect : ~m? -# 1483| mu1483_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1483_1 -# 1484| r1484_1(glval) = VariableAddress[x488] : -# 1484| r1484_2(glval) = FunctionAddress[~String] : -# 1484| v1484_3(void) = Call[~String] : func:r1484_2, this:r1484_1 -# 1484| mu1484_4(unknown) = ^CallSideEffect : ~m? -# 1484| v1484_5(void) = ^IndirectReadSideEffect[-1] : &:r1484_1, ~m? -# 1484| mu1484_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1484_1 -# 1484| r1484_7(bool) = Constant[0] : -# 1484| v1484_8(void) = ConditionalBranch : r1484_7 +# 35| Block 488 +# 35| r35_6833(glval) = VariableAddress[x488] : +# 35| mu35_6834(String) = Uninitialized[x488] : &:r35_6833 +# 35| r35_6835(glval) = FunctionAddress[String] : +# 35| v35_6836(void) = Call[String] : func:r35_6835, this:r35_6833 +# 35| mu35_6837(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6833 +# 35| r35_6839(glval) = VariableAddress[x488] : +# 35| r35_6840(glval) = FunctionAddress[~String] : +# 35| v35_6841(void) = Call[~String] : func:r35_6840, this:r35_6839 +# 35| mu35_6842(unknown) = ^CallSideEffect : ~m? +# 35| v35_6843(void) = ^IndirectReadSideEffect[-1] : &:r35_6839, ~m? +# 35| mu35_6844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6839 +# 35| r35_6845(bool) = Constant[0] : +# 35| v35_6846(void) = ConditionalBranch : r35_6845 #-----| False -> Block 489 #-----| True -> Block 1026 -# 1486| Block 489 -# 1486| r1486_1(glval) = VariableAddress[x489] : -# 1486| mu1486_2(String) = Uninitialized[x489] : &:r1486_1 -# 1486| r1486_3(glval) = FunctionAddress[String] : -# 1486| v1486_4(void) = Call[String] : func:r1486_3, this:r1486_1 -# 1486| mu1486_5(unknown) = ^CallSideEffect : ~m? -# 1486| mu1486_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1486_1 -# 1487| r1487_1(glval) = VariableAddress[x489] : -# 1487| r1487_2(glval) = FunctionAddress[~String] : -# 1487| v1487_3(void) = Call[~String] : func:r1487_2, this:r1487_1 -# 1487| mu1487_4(unknown) = ^CallSideEffect : ~m? -# 1487| v1487_5(void) = ^IndirectReadSideEffect[-1] : &:r1487_1, ~m? -# 1487| mu1487_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1487_1 -# 1487| r1487_7(bool) = Constant[0] : -# 1487| v1487_8(void) = ConditionalBranch : r1487_7 +# 35| Block 489 +# 35| r35_6847(glval) = VariableAddress[x489] : +# 35| mu35_6848(String) = Uninitialized[x489] : &:r35_6847 +# 35| r35_6849(glval) = FunctionAddress[String] : +# 35| v35_6850(void) = Call[String] : func:r35_6849, this:r35_6847 +# 35| mu35_6851(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6847 +# 35| r35_6853(glval) = VariableAddress[x489] : +# 35| r35_6854(glval) = FunctionAddress[~String] : +# 35| v35_6855(void) = Call[~String] : func:r35_6854, this:r35_6853 +# 35| mu35_6856(unknown) = ^CallSideEffect : ~m? +# 35| v35_6857(void) = ^IndirectReadSideEffect[-1] : &:r35_6853, ~m? +# 35| mu35_6858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6853 +# 35| r35_6859(bool) = Constant[0] : +# 35| v35_6860(void) = ConditionalBranch : r35_6859 #-----| False -> Block 490 #-----| True -> Block 1026 -# 1489| Block 490 -# 1489| r1489_1(glval) = VariableAddress[x490] : -# 1489| mu1489_2(String) = Uninitialized[x490] : &:r1489_1 -# 1489| r1489_3(glval) = FunctionAddress[String] : -# 1489| v1489_4(void) = Call[String] : func:r1489_3, this:r1489_1 -# 1489| mu1489_5(unknown) = ^CallSideEffect : ~m? -# 1489| mu1489_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1489_1 -# 1490| r1490_1(glval) = VariableAddress[x490] : -# 1490| r1490_2(glval) = FunctionAddress[~String] : -# 1490| v1490_3(void) = Call[~String] : func:r1490_2, this:r1490_1 -# 1490| mu1490_4(unknown) = ^CallSideEffect : ~m? -# 1490| v1490_5(void) = ^IndirectReadSideEffect[-1] : &:r1490_1, ~m? -# 1490| mu1490_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1490_1 -# 1490| r1490_7(bool) = Constant[0] : -# 1490| v1490_8(void) = ConditionalBranch : r1490_7 +# 35| Block 490 +# 35| r35_6861(glval) = VariableAddress[x490] : +# 35| mu35_6862(String) = Uninitialized[x490] : &:r35_6861 +# 35| r35_6863(glval) = FunctionAddress[String] : +# 35| v35_6864(void) = Call[String] : func:r35_6863, this:r35_6861 +# 35| mu35_6865(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6861 +# 35| r35_6867(glval) = VariableAddress[x490] : +# 35| r35_6868(glval) = FunctionAddress[~String] : +# 35| v35_6869(void) = Call[~String] : func:r35_6868, this:r35_6867 +# 35| mu35_6870(unknown) = ^CallSideEffect : ~m? +# 35| v35_6871(void) = ^IndirectReadSideEffect[-1] : &:r35_6867, ~m? +# 35| mu35_6872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6867 +# 35| r35_6873(bool) = Constant[0] : +# 35| v35_6874(void) = ConditionalBranch : r35_6873 #-----| False -> Block 491 #-----| True -> Block 1026 -# 1492| Block 491 -# 1492| r1492_1(glval) = VariableAddress[x491] : -# 1492| mu1492_2(String) = Uninitialized[x491] : &:r1492_1 -# 1492| r1492_3(glval) = FunctionAddress[String] : -# 1492| v1492_4(void) = Call[String] : func:r1492_3, this:r1492_1 -# 1492| mu1492_5(unknown) = ^CallSideEffect : ~m? -# 1492| mu1492_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1492_1 -# 1493| r1493_1(glval) = VariableAddress[x491] : -# 1493| r1493_2(glval) = FunctionAddress[~String] : -# 1493| v1493_3(void) = Call[~String] : func:r1493_2, this:r1493_1 -# 1493| mu1493_4(unknown) = ^CallSideEffect : ~m? -# 1493| v1493_5(void) = ^IndirectReadSideEffect[-1] : &:r1493_1, ~m? -# 1493| mu1493_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1493_1 -# 1493| r1493_7(bool) = Constant[0] : -# 1493| v1493_8(void) = ConditionalBranch : r1493_7 +# 35| Block 491 +# 35| r35_6875(glval) = VariableAddress[x491] : +# 35| mu35_6876(String) = Uninitialized[x491] : &:r35_6875 +# 35| r35_6877(glval) = FunctionAddress[String] : +# 35| v35_6878(void) = Call[String] : func:r35_6877, this:r35_6875 +# 35| mu35_6879(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6875 +# 35| r35_6881(glval) = VariableAddress[x491] : +# 35| r35_6882(glval) = FunctionAddress[~String] : +# 35| v35_6883(void) = Call[~String] : func:r35_6882, this:r35_6881 +# 35| mu35_6884(unknown) = ^CallSideEffect : ~m? +# 35| v35_6885(void) = ^IndirectReadSideEffect[-1] : &:r35_6881, ~m? +# 35| mu35_6886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6881 +# 35| r35_6887(bool) = Constant[0] : +# 35| v35_6888(void) = ConditionalBranch : r35_6887 #-----| False -> Block 492 #-----| True -> Block 1026 -# 1495| Block 492 -# 1495| r1495_1(glval) = VariableAddress[x492] : -# 1495| mu1495_2(String) = Uninitialized[x492] : &:r1495_1 -# 1495| r1495_3(glval) = FunctionAddress[String] : -# 1495| v1495_4(void) = Call[String] : func:r1495_3, this:r1495_1 -# 1495| mu1495_5(unknown) = ^CallSideEffect : ~m? -# 1495| mu1495_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1495_1 -# 1496| r1496_1(glval) = VariableAddress[x492] : -# 1496| r1496_2(glval) = FunctionAddress[~String] : -# 1496| v1496_3(void) = Call[~String] : func:r1496_2, this:r1496_1 -# 1496| mu1496_4(unknown) = ^CallSideEffect : ~m? -# 1496| v1496_5(void) = ^IndirectReadSideEffect[-1] : &:r1496_1, ~m? -# 1496| mu1496_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1496_1 -# 1496| r1496_7(bool) = Constant[0] : -# 1496| v1496_8(void) = ConditionalBranch : r1496_7 +# 35| Block 492 +# 35| r35_6889(glval) = VariableAddress[x492] : +# 35| mu35_6890(String) = Uninitialized[x492] : &:r35_6889 +# 35| r35_6891(glval) = FunctionAddress[String] : +# 35| v35_6892(void) = Call[String] : func:r35_6891, this:r35_6889 +# 35| mu35_6893(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6889 +# 35| r35_6895(glval) = VariableAddress[x492] : +# 35| r35_6896(glval) = FunctionAddress[~String] : +# 35| v35_6897(void) = Call[~String] : func:r35_6896, this:r35_6895 +# 35| mu35_6898(unknown) = ^CallSideEffect : ~m? +# 35| v35_6899(void) = ^IndirectReadSideEffect[-1] : &:r35_6895, ~m? +# 35| mu35_6900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6895 +# 35| r35_6901(bool) = Constant[0] : +# 35| v35_6902(void) = ConditionalBranch : r35_6901 #-----| False -> Block 493 #-----| True -> Block 1026 -# 1498| Block 493 -# 1498| r1498_1(glval) = VariableAddress[x493] : -# 1498| mu1498_2(String) = Uninitialized[x493] : &:r1498_1 -# 1498| r1498_3(glval) = FunctionAddress[String] : -# 1498| v1498_4(void) = Call[String] : func:r1498_3, this:r1498_1 -# 1498| mu1498_5(unknown) = ^CallSideEffect : ~m? -# 1498| mu1498_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1498_1 -# 1499| r1499_1(glval) = VariableAddress[x493] : -# 1499| r1499_2(glval) = FunctionAddress[~String] : -# 1499| v1499_3(void) = Call[~String] : func:r1499_2, this:r1499_1 -# 1499| mu1499_4(unknown) = ^CallSideEffect : ~m? -# 1499| v1499_5(void) = ^IndirectReadSideEffect[-1] : &:r1499_1, ~m? -# 1499| mu1499_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1499_1 -# 1499| r1499_7(bool) = Constant[0] : -# 1499| v1499_8(void) = ConditionalBranch : r1499_7 +# 35| Block 493 +# 35| r35_6903(glval) = VariableAddress[x493] : +# 35| mu35_6904(String) = Uninitialized[x493] : &:r35_6903 +# 35| r35_6905(glval) = FunctionAddress[String] : +# 35| v35_6906(void) = Call[String] : func:r35_6905, this:r35_6903 +# 35| mu35_6907(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6903 +# 35| r35_6909(glval) = VariableAddress[x493] : +# 35| r35_6910(glval) = FunctionAddress[~String] : +# 35| v35_6911(void) = Call[~String] : func:r35_6910, this:r35_6909 +# 35| mu35_6912(unknown) = ^CallSideEffect : ~m? +# 35| v35_6913(void) = ^IndirectReadSideEffect[-1] : &:r35_6909, ~m? +# 35| mu35_6914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6909 +# 35| r35_6915(bool) = Constant[0] : +# 35| v35_6916(void) = ConditionalBranch : r35_6915 #-----| False -> Block 494 #-----| True -> Block 1026 -# 1501| Block 494 -# 1501| r1501_1(glval) = VariableAddress[x494] : -# 1501| mu1501_2(String) = Uninitialized[x494] : &:r1501_1 -# 1501| r1501_3(glval) = FunctionAddress[String] : -# 1501| v1501_4(void) = Call[String] : func:r1501_3, this:r1501_1 -# 1501| mu1501_5(unknown) = ^CallSideEffect : ~m? -# 1501| mu1501_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1501_1 -# 1502| r1502_1(glval) = VariableAddress[x494] : -# 1502| r1502_2(glval) = FunctionAddress[~String] : -# 1502| v1502_3(void) = Call[~String] : func:r1502_2, this:r1502_1 -# 1502| mu1502_4(unknown) = ^CallSideEffect : ~m? -# 1502| v1502_5(void) = ^IndirectReadSideEffect[-1] : &:r1502_1, ~m? -# 1502| mu1502_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 -# 1502| r1502_7(bool) = Constant[0] : -# 1502| v1502_8(void) = ConditionalBranch : r1502_7 +# 35| Block 494 +# 35| r35_6917(glval) = VariableAddress[x494] : +# 35| mu35_6918(String) = Uninitialized[x494] : &:r35_6917 +# 35| r35_6919(glval) = FunctionAddress[String] : +# 35| v35_6920(void) = Call[String] : func:r35_6919, this:r35_6917 +# 35| mu35_6921(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6917 +# 35| r35_6923(glval) = VariableAddress[x494] : +# 35| r35_6924(glval) = FunctionAddress[~String] : +# 35| v35_6925(void) = Call[~String] : func:r35_6924, this:r35_6923 +# 35| mu35_6926(unknown) = ^CallSideEffect : ~m? +# 35| v35_6927(void) = ^IndirectReadSideEffect[-1] : &:r35_6923, ~m? +# 35| mu35_6928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6923 +# 35| r35_6929(bool) = Constant[0] : +# 35| v35_6930(void) = ConditionalBranch : r35_6929 #-----| False -> Block 495 #-----| True -> Block 1026 -# 1504| Block 495 -# 1504| r1504_1(glval) = VariableAddress[x495] : -# 1504| mu1504_2(String) = Uninitialized[x495] : &:r1504_1 -# 1504| r1504_3(glval) = FunctionAddress[String] : -# 1504| v1504_4(void) = Call[String] : func:r1504_3, this:r1504_1 -# 1504| mu1504_5(unknown) = ^CallSideEffect : ~m? -# 1504| mu1504_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1504_1 -# 1505| r1505_1(glval) = VariableAddress[x495] : -# 1505| r1505_2(glval) = FunctionAddress[~String] : -# 1505| v1505_3(void) = Call[~String] : func:r1505_2, this:r1505_1 -# 1505| mu1505_4(unknown) = ^CallSideEffect : ~m? -# 1505| v1505_5(void) = ^IndirectReadSideEffect[-1] : &:r1505_1, ~m? -# 1505| mu1505_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1505_1 -# 1505| r1505_7(bool) = Constant[0] : -# 1505| v1505_8(void) = ConditionalBranch : r1505_7 +# 35| Block 495 +# 35| r35_6931(glval) = VariableAddress[x495] : +# 35| mu35_6932(String) = Uninitialized[x495] : &:r35_6931 +# 35| r35_6933(glval) = FunctionAddress[String] : +# 35| v35_6934(void) = Call[String] : func:r35_6933, this:r35_6931 +# 35| mu35_6935(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6931 +# 35| r35_6937(glval) = VariableAddress[x495] : +# 35| r35_6938(glval) = FunctionAddress[~String] : +# 35| v35_6939(void) = Call[~String] : func:r35_6938, this:r35_6937 +# 35| mu35_6940(unknown) = ^CallSideEffect : ~m? +# 35| v35_6941(void) = ^IndirectReadSideEffect[-1] : &:r35_6937, ~m? +# 35| mu35_6942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6937 +# 35| r35_6943(bool) = Constant[0] : +# 35| v35_6944(void) = ConditionalBranch : r35_6943 #-----| False -> Block 496 #-----| True -> Block 1026 -# 1507| Block 496 -# 1507| r1507_1(glval) = VariableAddress[x496] : -# 1507| mu1507_2(String) = Uninitialized[x496] : &:r1507_1 -# 1507| r1507_3(glval) = FunctionAddress[String] : -# 1507| v1507_4(void) = Call[String] : func:r1507_3, this:r1507_1 -# 1507| mu1507_5(unknown) = ^CallSideEffect : ~m? -# 1507| mu1507_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1507_1 -# 1508| r1508_1(glval) = VariableAddress[x496] : -# 1508| r1508_2(glval) = FunctionAddress[~String] : -# 1508| v1508_3(void) = Call[~String] : func:r1508_2, this:r1508_1 -# 1508| mu1508_4(unknown) = ^CallSideEffect : ~m? -# 1508| v1508_5(void) = ^IndirectReadSideEffect[-1] : &:r1508_1, ~m? -# 1508| mu1508_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1508_1 -# 1508| r1508_7(bool) = Constant[0] : -# 1508| v1508_8(void) = ConditionalBranch : r1508_7 +# 35| Block 496 +# 35| r35_6945(glval) = VariableAddress[x496] : +# 35| mu35_6946(String) = Uninitialized[x496] : &:r35_6945 +# 35| r35_6947(glval) = FunctionAddress[String] : +# 35| v35_6948(void) = Call[String] : func:r35_6947, this:r35_6945 +# 35| mu35_6949(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6945 +# 35| r35_6951(glval) = VariableAddress[x496] : +# 35| r35_6952(glval) = FunctionAddress[~String] : +# 35| v35_6953(void) = Call[~String] : func:r35_6952, this:r35_6951 +# 35| mu35_6954(unknown) = ^CallSideEffect : ~m? +# 35| v35_6955(void) = ^IndirectReadSideEffect[-1] : &:r35_6951, ~m? +# 35| mu35_6956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6951 +# 35| r35_6957(bool) = Constant[0] : +# 35| v35_6958(void) = ConditionalBranch : r35_6957 #-----| False -> Block 497 #-----| True -> Block 1026 -# 1510| Block 497 -# 1510| r1510_1(glval) = VariableAddress[x497] : -# 1510| mu1510_2(String) = Uninitialized[x497] : &:r1510_1 -# 1510| r1510_3(glval) = FunctionAddress[String] : -# 1510| v1510_4(void) = Call[String] : func:r1510_3, this:r1510_1 -# 1510| mu1510_5(unknown) = ^CallSideEffect : ~m? -# 1510| mu1510_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1510_1 -# 1511| r1511_1(glval) = VariableAddress[x497] : -# 1511| r1511_2(glval) = FunctionAddress[~String] : -# 1511| v1511_3(void) = Call[~String] : func:r1511_2, this:r1511_1 -# 1511| mu1511_4(unknown) = ^CallSideEffect : ~m? -# 1511| v1511_5(void) = ^IndirectReadSideEffect[-1] : &:r1511_1, ~m? -# 1511| mu1511_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1511_1 -# 1511| r1511_7(bool) = Constant[0] : -# 1511| v1511_8(void) = ConditionalBranch : r1511_7 +# 35| Block 497 +# 35| r35_6959(glval) = VariableAddress[x497] : +# 35| mu35_6960(String) = Uninitialized[x497] : &:r35_6959 +# 35| r35_6961(glval) = FunctionAddress[String] : +# 35| v35_6962(void) = Call[String] : func:r35_6961, this:r35_6959 +# 35| mu35_6963(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6959 +# 35| r35_6965(glval) = VariableAddress[x497] : +# 35| r35_6966(glval) = FunctionAddress[~String] : +# 35| v35_6967(void) = Call[~String] : func:r35_6966, this:r35_6965 +# 35| mu35_6968(unknown) = ^CallSideEffect : ~m? +# 35| v35_6969(void) = ^IndirectReadSideEffect[-1] : &:r35_6965, ~m? +# 35| mu35_6970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6965 +# 35| r35_6971(bool) = Constant[0] : +# 35| v35_6972(void) = ConditionalBranch : r35_6971 #-----| False -> Block 498 #-----| True -> Block 1026 -# 1513| Block 498 -# 1513| r1513_1(glval) = VariableAddress[x498] : -# 1513| mu1513_2(String) = Uninitialized[x498] : &:r1513_1 -# 1513| r1513_3(glval) = FunctionAddress[String] : -# 1513| v1513_4(void) = Call[String] : func:r1513_3, this:r1513_1 -# 1513| mu1513_5(unknown) = ^CallSideEffect : ~m? -# 1513| mu1513_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1513_1 -# 1514| r1514_1(glval) = VariableAddress[x498] : -# 1514| r1514_2(glval) = FunctionAddress[~String] : -# 1514| v1514_3(void) = Call[~String] : func:r1514_2, this:r1514_1 -# 1514| mu1514_4(unknown) = ^CallSideEffect : ~m? -# 1514| v1514_5(void) = ^IndirectReadSideEffect[-1] : &:r1514_1, ~m? -# 1514| mu1514_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1514_1 -# 1514| r1514_7(bool) = Constant[0] : -# 1514| v1514_8(void) = ConditionalBranch : r1514_7 +# 35| Block 498 +# 35| r35_6973(glval) = VariableAddress[x498] : +# 35| mu35_6974(String) = Uninitialized[x498] : &:r35_6973 +# 35| r35_6975(glval) = FunctionAddress[String] : +# 35| v35_6976(void) = Call[String] : func:r35_6975, this:r35_6973 +# 35| mu35_6977(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6973 +# 35| r35_6979(glval) = VariableAddress[x498] : +# 35| r35_6980(glval) = FunctionAddress[~String] : +# 35| v35_6981(void) = Call[~String] : func:r35_6980, this:r35_6979 +# 35| mu35_6982(unknown) = ^CallSideEffect : ~m? +# 35| v35_6983(void) = ^IndirectReadSideEffect[-1] : &:r35_6979, ~m? +# 35| mu35_6984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6979 +# 35| r35_6985(bool) = Constant[0] : +# 35| v35_6986(void) = ConditionalBranch : r35_6985 #-----| False -> Block 499 #-----| True -> Block 1026 -# 1516| Block 499 -# 1516| r1516_1(glval) = VariableAddress[x499] : -# 1516| mu1516_2(String) = Uninitialized[x499] : &:r1516_1 -# 1516| r1516_3(glval) = FunctionAddress[String] : -# 1516| v1516_4(void) = Call[String] : func:r1516_3, this:r1516_1 -# 1516| mu1516_5(unknown) = ^CallSideEffect : ~m? -# 1516| mu1516_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1516_1 -# 1517| r1517_1(glval) = VariableAddress[x499] : -# 1517| r1517_2(glval) = FunctionAddress[~String] : -# 1517| v1517_3(void) = Call[~String] : func:r1517_2, this:r1517_1 -# 1517| mu1517_4(unknown) = ^CallSideEffect : ~m? -# 1517| v1517_5(void) = ^IndirectReadSideEffect[-1] : &:r1517_1, ~m? -# 1517| mu1517_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1517_1 -# 1517| r1517_7(bool) = Constant[0] : -# 1517| v1517_8(void) = ConditionalBranch : r1517_7 +# 35| Block 499 +# 35| r35_6987(glval) = VariableAddress[x499] : +# 35| mu35_6988(String) = Uninitialized[x499] : &:r35_6987 +# 35| r35_6989(glval) = FunctionAddress[String] : +# 35| v35_6990(void) = Call[String] : func:r35_6989, this:r35_6987 +# 35| mu35_6991(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6987 +# 35| r35_6993(glval) = VariableAddress[x499] : +# 35| r35_6994(glval) = FunctionAddress[~String] : +# 35| v35_6995(void) = Call[~String] : func:r35_6994, this:r35_6993 +# 35| mu35_6996(unknown) = ^CallSideEffect : ~m? +# 35| v35_6997(void) = ^IndirectReadSideEffect[-1] : &:r35_6993, ~m? +# 35| mu35_6998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6993 +# 35| r35_6999(bool) = Constant[0] : +# 35| v35_7000(void) = ConditionalBranch : r35_6999 #-----| False -> Block 500 #-----| True -> Block 1026 -# 1519| Block 500 -# 1519| r1519_1(glval) = VariableAddress[x500] : -# 1519| mu1519_2(String) = Uninitialized[x500] : &:r1519_1 -# 1519| r1519_3(glval) = FunctionAddress[String] : -# 1519| v1519_4(void) = Call[String] : func:r1519_3, this:r1519_1 -# 1519| mu1519_5(unknown) = ^CallSideEffect : ~m? -# 1519| mu1519_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1519_1 -# 1520| r1520_1(glval) = VariableAddress[x500] : -# 1520| r1520_2(glval) = FunctionAddress[~String] : -# 1520| v1520_3(void) = Call[~String] : func:r1520_2, this:r1520_1 -# 1520| mu1520_4(unknown) = ^CallSideEffect : ~m? -# 1520| v1520_5(void) = ^IndirectReadSideEffect[-1] : &:r1520_1, ~m? -# 1520| mu1520_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1520_1 -# 1520| r1520_7(bool) = Constant[0] : -# 1520| v1520_8(void) = ConditionalBranch : r1520_7 +# 35| Block 500 +# 35| r35_7001(glval) = VariableAddress[x500] : +# 35| mu35_7002(String) = Uninitialized[x500] : &:r35_7001 +# 35| r35_7003(glval) = FunctionAddress[String] : +# 35| v35_7004(void) = Call[String] : func:r35_7003, this:r35_7001 +# 35| mu35_7005(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7001 +# 35| r35_7007(glval) = VariableAddress[x500] : +# 35| r35_7008(glval) = FunctionAddress[~String] : +# 35| v35_7009(void) = Call[~String] : func:r35_7008, this:r35_7007 +# 35| mu35_7010(unknown) = ^CallSideEffect : ~m? +# 35| v35_7011(void) = ^IndirectReadSideEffect[-1] : &:r35_7007, ~m? +# 35| mu35_7012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7007 +# 35| r35_7013(bool) = Constant[0] : +# 35| v35_7014(void) = ConditionalBranch : r35_7013 #-----| False -> Block 501 #-----| True -> Block 1026 -# 1522| Block 501 -# 1522| r1522_1(glval) = VariableAddress[x501] : -# 1522| mu1522_2(String) = Uninitialized[x501] : &:r1522_1 -# 1522| r1522_3(glval) = FunctionAddress[String] : -# 1522| v1522_4(void) = Call[String] : func:r1522_3, this:r1522_1 -# 1522| mu1522_5(unknown) = ^CallSideEffect : ~m? -# 1522| mu1522_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1522_1 -# 1523| r1523_1(glval) = VariableAddress[x501] : -# 1523| r1523_2(glval) = FunctionAddress[~String] : -# 1523| v1523_3(void) = Call[~String] : func:r1523_2, this:r1523_1 -# 1523| mu1523_4(unknown) = ^CallSideEffect : ~m? -# 1523| v1523_5(void) = ^IndirectReadSideEffect[-1] : &:r1523_1, ~m? -# 1523| mu1523_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1523_1 -# 1523| r1523_7(bool) = Constant[0] : -# 1523| v1523_8(void) = ConditionalBranch : r1523_7 +# 35| Block 501 +# 35| r35_7015(glval) = VariableAddress[x501] : +# 35| mu35_7016(String) = Uninitialized[x501] : &:r35_7015 +# 35| r35_7017(glval) = FunctionAddress[String] : +# 35| v35_7018(void) = Call[String] : func:r35_7017, this:r35_7015 +# 35| mu35_7019(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7015 +# 35| r35_7021(glval) = VariableAddress[x501] : +# 35| r35_7022(glval) = FunctionAddress[~String] : +# 35| v35_7023(void) = Call[~String] : func:r35_7022, this:r35_7021 +# 35| mu35_7024(unknown) = ^CallSideEffect : ~m? +# 35| v35_7025(void) = ^IndirectReadSideEffect[-1] : &:r35_7021, ~m? +# 35| mu35_7026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7021 +# 35| r35_7027(bool) = Constant[0] : +# 35| v35_7028(void) = ConditionalBranch : r35_7027 #-----| False -> Block 502 #-----| True -> Block 1026 -# 1525| Block 502 -# 1525| r1525_1(glval) = VariableAddress[x502] : -# 1525| mu1525_2(String) = Uninitialized[x502] : &:r1525_1 -# 1525| r1525_3(glval) = FunctionAddress[String] : -# 1525| v1525_4(void) = Call[String] : func:r1525_3, this:r1525_1 -# 1525| mu1525_5(unknown) = ^CallSideEffect : ~m? -# 1525| mu1525_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1525_1 -# 1526| r1526_1(glval) = VariableAddress[x502] : -# 1526| r1526_2(glval) = FunctionAddress[~String] : -# 1526| v1526_3(void) = Call[~String] : func:r1526_2, this:r1526_1 -# 1526| mu1526_4(unknown) = ^CallSideEffect : ~m? -# 1526| v1526_5(void) = ^IndirectReadSideEffect[-1] : &:r1526_1, ~m? -# 1526| mu1526_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1526_1 -# 1526| r1526_7(bool) = Constant[0] : -# 1526| v1526_8(void) = ConditionalBranch : r1526_7 +# 35| Block 502 +# 35| r35_7029(glval) = VariableAddress[x502] : +# 35| mu35_7030(String) = Uninitialized[x502] : &:r35_7029 +# 35| r35_7031(glval) = FunctionAddress[String] : +# 35| v35_7032(void) = Call[String] : func:r35_7031, this:r35_7029 +# 35| mu35_7033(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7029 +# 35| r35_7035(glval) = VariableAddress[x502] : +# 35| r35_7036(glval) = FunctionAddress[~String] : +# 35| v35_7037(void) = Call[~String] : func:r35_7036, this:r35_7035 +# 35| mu35_7038(unknown) = ^CallSideEffect : ~m? +# 35| v35_7039(void) = ^IndirectReadSideEffect[-1] : &:r35_7035, ~m? +# 35| mu35_7040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7035 +# 35| r35_7041(bool) = Constant[0] : +# 35| v35_7042(void) = ConditionalBranch : r35_7041 #-----| False -> Block 503 #-----| True -> Block 1026 -# 1528| Block 503 -# 1528| r1528_1(glval) = VariableAddress[x503] : -# 1528| mu1528_2(String) = Uninitialized[x503] : &:r1528_1 -# 1528| r1528_3(glval) = FunctionAddress[String] : -# 1528| v1528_4(void) = Call[String] : func:r1528_3, this:r1528_1 -# 1528| mu1528_5(unknown) = ^CallSideEffect : ~m? -# 1528| mu1528_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1528_1 -# 1529| r1529_1(glval) = VariableAddress[x503] : -# 1529| r1529_2(glval) = FunctionAddress[~String] : -# 1529| v1529_3(void) = Call[~String] : func:r1529_2, this:r1529_1 -# 1529| mu1529_4(unknown) = ^CallSideEffect : ~m? -# 1529| v1529_5(void) = ^IndirectReadSideEffect[-1] : &:r1529_1, ~m? -# 1529| mu1529_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1529_1 -# 1529| r1529_7(bool) = Constant[0] : -# 1529| v1529_8(void) = ConditionalBranch : r1529_7 +# 35| Block 503 +# 35| r35_7043(glval) = VariableAddress[x503] : +# 35| mu35_7044(String) = Uninitialized[x503] : &:r35_7043 +# 35| r35_7045(glval) = FunctionAddress[String] : +# 35| v35_7046(void) = Call[String] : func:r35_7045, this:r35_7043 +# 35| mu35_7047(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7043 +# 35| r35_7049(glval) = VariableAddress[x503] : +# 35| r35_7050(glval) = FunctionAddress[~String] : +# 35| v35_7051(void) = Call[~String] : func:r35_7050, this:r35_7049 +# 35| mu35_7052(unknown) = ^CallSideEffect : ~m? +# 35| v35_7053(void) = ^IndirectReadSideEffect[-1] : &:r35_7049, ~m? +# 35| mu35_7054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7049 +# 35| r35_7055(bool) = Constant[0] : +# 35| v35_7056(void) = ConditionalBranch : r35_7055 #-----| False -> Block 504 #-----| True -> Block 1026 -# 1531| Block 504 -# 1531| r1531_1(glval) = VariableAddress[x504] : -# 1531| mu1531_2(String) = Uninitialized[x504] : &:r1531_1 -# 1531| r1531_3(glval) = FunctionAddress[String] : -# 1531| v1531_4(void) = Call[String] : func:r1531_3, this:r1531_1 -# 1531| mu1531_5(unknown) = ^CallSideEffect : ~m? -# 1531| mu1531_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1531_1 -# 1532| r1532_1(glval) = VariableAddress[x504] : -# 1532| r1532_2(glval) = FunctionAddress[~String] : -# 1532| v1532_3(void) = Call[~String] : func:r1532_2, this:r1532_1 -# 1532| mu1532_4(unknown) = ^CallSideEffect : ~m? -# 1532| v1532_5(void) = ^IndirectReadSideEffect[-1] : &:r1532_1, ~m? -# 1532| mu1532_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1532_1 -# 1532| r1532_7(bool) = Constant[0] : -# 1532| v1532_8(void) = ConditionalBranch : r1532_7 +# 35| Block 504 +# 35| r35_7057(glval) = VariableAddress[x504] : +# 35| mu35_7058(String) = Uninitialized[x504] : &:r35_7057 +# 35| r35_7059(glval) = FunctionAddress[String] : +# 35| v35_7060(void) = Call[String] : func:r35_7059, this:r35_7057 +# 35| mu35_7061(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7057 +# 35| r35_7063(glval) = VariableAddress[x504] : +# 35| r35_7064(glval) = FunctionAddress[~String] : +# 35| v35_7065(void) = Call[~String] : func:r35_7064, this:r35_7063 +# 35| mu35_7066(unknown) = ^CallSideEffect : ~m? +# 35| v35_7067(void) = ^IndirectReadSideEffect[-1] : &:r35_7063, ~m? +# 35| mu35_7068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7063 +# 35| r35_7069(bool) = Constant[0] : +# 35| v35_7070(void) = ConditionalBranch : r35_7069 #-----| False -> Block 505 #-----| True -> Block 1026 -# 1534| Block 505 -# 1534| r1534_1(glval) = VariableAddress[x505] : -# 1534| mu1534_2(String) = Uninitialized[x505] : &:r1534_1 -# 1534| r1534_3(glval) = FunctionAddress[String] : -# 1534| v1534_4(void) = Call[String] : func:r1534_3, this:r1534_1 -# 1534| mu1534_5(unknown) = ^CallSideEffect : ~m? -# 1534| mu1534_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1534_1 -# 1535| r1535_1(glval) = VariableAddress[x505] : -# 1535| r1535_2(glval) = FunctionAddress[~String] : -# 1535| v1535_3(void) = Call[~String] : func:r1535_2, this:r1535_1 -# 1535| mu1535_4(unknown) = ^CallSideEffect : ~m? -# 1535| v1535_5(void) = ^IndirectReadSideEffect[-1] : &:r1535_1, ~m? -# 1535| mu1535_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1535_1 -# 1535| r1535_7(bool) = Constant[0] : -# 1535| v1535_8(void) = ConditionalBranch : r1535_7 +# 35| Block 505 +# 35| r35_7071(glval) = VariableAddress[x505] : +# 35| mu35_7072(String) = Uninitialized[x505] : &:r35_7071 +# 35| r35_7073(glval) = FunctionAddress[String] : +# 35| v35_7074(void) = Call[String] : func:r35_7073, this:r35_7071 +# 35| mu35_7075(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7071 +# 35| r35_7077(glval) = VariableAddress[x505] : +# 35| r35_7078(glval) = FunctionAddress[~String] : +# 35| v35_7079(void) = Call[~String] : func:r35_7078, this:r35_7077 +# 35| mu35_7080(unknown) = ^CallSideEffect : ~m? +# 35| v35_7081(void) = ^IndirectReadSideEffect[-1] : &:r35_7077, ~m? +# 35| mu35_7082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7077 +# 35| r35_7083(bool) = Constant[0] : +# 35| v35_7084(void) = ConditionalBranch : r35_7083 #-----| False -> Block 506 #-----| True -> Block 1026 -# 1537| Block 506 -# 1537| r1537_1(glval) = VariableAddress[x506] : -# 1537| mu1537_2(String) = Uninitialized[x506] : &:r1537_1 -# 1537| r1537_3(glval) = FunctionAddress[String] : -# 1537| v1537_4(void) = Call[String] : func:r1537_3, this:r1537_1 -# 1537| mu1537_5(unknown) = ^CallSideEffect : ~m? -# 1537| mu1537_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1537_1 -# 1538| r1538_1(glval) = VariableAddress[x506] : -# 1538| r1538_2(glval) = FunctionAddress[~String] : -# 1538| v1538_3(void) = Call[~String] : func:r1538_2, this:r1538_1 -# 1538| mu1538_4(unknown) = ^CallSideEffect : ~m? -# 1538| v1538_5(void) = ^IndirectReadSideEffect[-1] : &:r1538_1, ~m? -# 1538| mu1538_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1538_1 -# 1538| r1538_7(bool) = Constant[0] : -# 1538| v1538_8(void) = ConditionalBranch : r1538_7 +# 35| Block 506 +# 35| r35_7085(glval) = VariableAddress[x506] : +# 35| mu35_7086(String) = Uninitialized[x506] : &:r35_7085 +# 35| r35_7087(glval) = FunctionAddress[String] : +# 35| v35_7088(void) = Call[String] : func:r35_7087, this:r35_7085 +# 35| mu35_7089(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7085 +# 35| r35_7091(glval) = VariableAddress[x506] : +# 35| r35_7092(glval) = FunctionAddress[~String] : +# 35| v35_7093(void) = Call[~String] : func:r35_7092, this:r35_7091 +# 35| mu35_7094(unknown) = ^CallSideEffect : ~m? +# 35| v35_7095(void) = ^IndirectReadSideEffect[-1] : &:r35_7091, ~m? +# 35| mu35_7096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7091 +# 35| r35_7097(bool) = Constant[0] : +# 35| v35_7098(void) = ConditionalBranch : r35_7097 #-----| False -> Block 507 #-----| True -> Block 1026 -# 1540| Block 507 -# 1540| r1540_1(glval) = VariableAddress[x507] : -# 1540| mu1540_2(String) = Uninitialized[x507] : &:r1540_1 -# 1540| r1540_3(glval) = FunctionAddress[String] : -# 1540| v1540_4(void) = Call[String] : func:r1540_3, this:r1540_1 -# 1540| mu1540_5(unknown) = ^CallSideEffect : ~m? -# 1540| mu1540_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1540_1 -# 1541| r1541_1(glval) = VariableAddress[x507] : -# 1541| r1541_2(glval) = FunctionAddress[~String] : -# 1541| v1541_3(void) = Call[~String] : func:r1541_2, this:r1541_1 -# 1541| mu1541_4(unknown) = ^CallSideEffect : ~m? -# 1541| v1541_5(void) = ^IndirectReadSideEffect[-1] : &:r1541_1, ~m? -# 1541| mu1541_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1541_1 -# 1541| r1541_7(bool) = Constant[0] : -# 1541| v1541_8(void) = ConditionalBranch : r1541_7 +# 35| Block 507 +# 35| r35_7099(glval) = VariableAddress[x507] : +# 35| mu35_7100(String) = Uninitialized[x507] : &:r35_7099 +# 35| r35_7101(glval) = FunctionAddress[String] : +# 35| v35_7102(void) = Call[String] : func:r35_7101, this:r35_7099 +# 35| mu35_7103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7099 +# 35| r35_7105(glval) = VariableAddress[x507] : +# 35| r35_7106(glval) = FunctionAddress[~String] : +# 35| v35_7107(void) = Call[~String] : func:r35_7106, this:r35_7105 +# 35| mu35_7108(unknown) = ^CallSideEffect : ~m? +# 35| v35_7109(void) = ^IndirectReadSideEffect[-1] : &:r35_7105, ~m? +# 35| mu35_7110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7105 +# 35| r35_7111(bool) = Constant[0] : +# 35| v35_7112(void) = ConditionalBranch : r35_7111 #-----| False -> Block 508 #-----| True -> Block 1026 -# 1543| Block 508 -# 1543| r1543_1(glval) = VariableAddress[x508] : -# 1543| mu1543_2(String) = Uninitialized[x508] : &:r1543_1 -# 1543| r1543_3(glval) = FunctionAddress[String] : -# 1543| v1543_4(void) = Call[String] : func:r1543_3, this:r1543_1 -# 1543| mu1543_5(unknown) = ^CallSideEffect : ~m? -# 1543| mu1543_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1543_1 -# 1544| r1544_1(glval) = VariableAddress[x508] : -# 1544| r1544_2(glval) = FunctionAddress[~String] : -# 1544| v1544_3(void) = Call[~String] : func:r1544_2, this:r1544_1 -# 1544| mu1544_4(unknown) = ^CallSideEffect : ~m? -# 1544| v1544_5(void) = ^IndirectReadSideEffect[-1] : &:r1544_1, ~m? -# 1544| mu1544_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1544_1 -# 1544| r1544_7(bool) = Constant[0] : -# 1544| v1544_8(void) = ConditionalBranch : r1544_7 +# 35| Block 508 +# 35| r35_7113(glval) = VariableAddress[x508] : +# 35| mu35_7114(String) = Uninitialized[x508] : &:r35_7113 +# 35| r35_7115(glval) = FunctionAddress[String] : +# 35| v35_7116(void) = Call[String] : func:r35_7115, this:r35_7113 +# 35| mu35_7117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7113 +# 35| r35_7119(glval) = VariableAddress[x508] : +# 35| r35_7120(glval) = FunctionAddress[~String] : +# 35| v35_7121(void) = Call[~String] : func:r35_7120, this:r35_7119 +# 35| mu35_7122(unknown) = ^CallSideEffect : ~m? +# 35| v35_7123(void) = ^IndirectReadSideEffect[-1] : &:r35_7119, ~m? +# 35| mu35_7124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7119 +# 35| r35_7125(bool) = Constant[0] : +# 35| v35_7126(void) = ConditionalBranch : r35_7125 #-----| False -> Block 509 #-----| True -> Block 1026 -# 1546| Block 509 -# 1546| r1546_1(glval) = VariableAddress[x509] : -# 1546| mu1546_2(String) = Uninitialized[x509] : &:r1546_1 -# 1546| r1546_3(glval) = FunctionAddress[String] : -# 1546| v1546_4(void) = Call[String] : func:r1546_3, this:r1546_1 -# 1546| mu1546_5(unknown) = ^CallSideEffect : ~m? -# 1546| mu1546_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1546_1 -# 1547| r1547_1(glval) = VariableAddress[x509] : -# 1547| r1547_2(glval) = FunctionAddress[~String] : -# 1547| v1547_3(void) = Call[~String] : func:r1547_2, this:r1547_1 -# 1547| mu1547_4(unknown) = ^CallSideEffect : ~m? -# 1547| v1547_5(void) = ^IndirectReadSideEffect[-1] : &:r1547_1, ~m? -# 1547| mu1547_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1547_1 -# 1547| r1547_7(bool) = Constant[0] : -# 1547| v1547_8(void) = ConditionalBranch : r1547_7 +# 35| Block 509 +# 35| r35_7127(glval) = VariableAddress[x509] : +# 35| mu35_7128(String) = Uninitialized[x509] : &:r35_7127 +# 35| r35_7129(glval) = FunctionAddress[String] : +# 35| v35_7130(void) = Call[String] : func:r35_7129, this:r35_7127 +# 35| mu35_7131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7127 +# 35| r35_7133(glval) = VariableAddress[x509] : +# 35| r35_7134(glval) = FunctionAddress[~String] : +# 35| v35_7135(void) = Call[~String] : func:r35_7134, this:r35_7133 +# 35| mu35_7136(unknown) = ^CallSideEffect : ~m? +# 35| v35_7137(void) = ^IndirectReadSideEffect[-1] : &:r35_7133, ~m? +# 35| mu35_7138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7133 +# 35| r35_7139(bool) = Constant[0] : +# 35| v35_7140(void) = ConditionalBranch : r35_7139 #-----| False -> Block 510 #-----| True -> Block 1026 -# 1549| Block 510 -# 1549| r1549_1(glval) = VariableAddress[x510] : -# 1549| mu1549_2(String) = Uninitialized[x510] : &:r1549_1 -# 1549| r1549_3(glval) = FunctionAddress[String] : -# 1549| v1549_4(void) = Call[String] : func:r1549_3, this:r1549_1 -# 1549| mu1549_5(unknown) = ^CallSideEffect : ~m? -# 1549| mu1549_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1549_1 -# 1550| r1550_1(glval) = VariableAddress[x510] : -# 1550| r1550_2(glval) = FunctionAddress[~String] : -# 1550| v1550_3(void) = Call[~String] : func:r1550_2, this:r1550_1 -# 1550| mu1550_4(unknown) = ^CallSideEffect : ~m? -# 1550| v1550_5(void) = ^IndirectReadSideEffect[-1] : &:r1550_1, ~m? -# 1550| mu1550_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1550_1 -# 1550| r1550_7(bool) = Constant[0] : -# 1550| v1550_8(void) = ConditionalBranch : r1550_7 +# 35| Block 510 +# 35| r35_7141(glval) = VariableAddress[x510] : +# 35| mu35_7142(String) = Uninitialized[x510] : &:r35_7141 +# 35| r35_7143(glval) = FunctionAddress[String] : +# 35| v35_7144(void) = Call[String] : func:r35_7143, this:r35_7141 +# 35| mu35_7145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7141 +# 35| r35_7147(glval) = VariableAddress[x510] : +# 35| r35_7148(glval) = FunctionAddress[~String] : +# 35| v35_7149(void) = Call[~String] : func:r35_7148, this:r35_7147 +# 35| mu35_7150(unknown) = ^CallSideEffect : ~m? +# 35| v35_7151(void) = ^IndirectReadSideEffect[-1] : &:r35_7147, ~m? +# 35| mu35_7152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7147 +# 35| r35_7153(bool) = Constant[0] : +# 35| v35_7154(void) = ConditionalBranch : r35_7153 #-----| False -> Block 511 #-----| True -> Block 1026 -# 1552| Block 511 -# 1552| r1552_1(glval) = VariableAddress[x511] : -# 1552| mu1552_2(String) = Uninitialized[x511] : &:r1552_1 -# 1552| r1552_3(glval) = FunctionAddress[String] : -# 1552| v1552_4(void) = Call[String] : func:r1552_3, this:r1552_1 -# 1552| mu1552_5(unknown) = ^CallSideEffect : ~m? -# 1552| mu1552_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1552_1 -# 1553| r1553_1(glval) = VariableAddress[x511] : -# 1553| r1553_2(glval) = FunctionAddress[~String] : -# 1553| v1553_3(void) = Call[~String] : func:r1553_2, this:r1553_1 -# 1553| mu1553_4(unknown) = ^CallSideEffect : ~m? -# 1553| v1553_5(void) = ^IndirectReadSideEffect[-1] : &:r1553_1, ~m? -# 1553| mu1553_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1553_1 -# 1553| r1553_7(bool) = Constant[0] : -# 1553| v1553_8(void) = ConditionalBranch : r1553_7 +# 35| Block 511 +# 35| r35_7155(glval) = VariableAddress[x511] : +# 35| mu35_7156(String) = Uninitialized[x511] : &:r35_7155 +# 35| r35_7157(glval) = FunctionAddress[String] : +# 35| v35_7158(void) = Call[String] : func:r35_7157, this:r35_7155 +# 35| mu35_7159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7155 +# 35| r35_7161(glval) = VariableAddress[x511] : +# 35| r35_7162(glval) = FunctionAddress[~String] : +# 35| v35_7163(void) = Call[~String] : func:r35_7162, this:r35_7161 +# 35| mu35_7164(unknown) = ^CallSideEffect : ~m? +# 35| v35_7165(void) = ^IndirectReadSideEffect[-1] : &:r35_7161, ~m? +# 35| mu35_7166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7161 +# 35| r35_7167(bool) = Constant[0] : +# 35| v35_7168(void) = ConditionalBranch : r35_7167 #-----| False -> Block 512 #-----| True -> Block 1026 -# 1555| Block 512 -# 1555| r1555_1(glval) = VariableAddress[x512] : -# 1555| mu1555_2(String) = Uninitialized[x512] : &:r1555_1 -# 1555| r1555_3(glval) = FunctionAddress[String] : -# 1555| v1555_4(void) = Call[String] : func:r1555_3, this:r1555_1 -# 1555| mu1555_5(unknown) = ^CallSideEffect : ~m? -# 1555| mu1555_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1555_1 -# 1556| r1556_1(glval) = VariableAddress[x512] : -# 1556| r1556_2(glval) = FunctionAddress[~String] : -# 1556| v1556_3(void) = Call[~String] : func:r1556_2, this:r1556_1 -# 1556| mu1556_4(unknown) = ^CallSideEffect : ~m? -# 1556| v1556_5(void) = ^IndirectReadSideEffect[-1] : &:r1556_1, ~m? -# 1556| mu1556_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1556_1 -# 1556| r1556_7(bool) = Constant[0] : -# 1556| v1556_8(void) = ConditionalBranch : r1556_7 +# 35| Block 512 +# 35| r35_7169(glval) = VariableAddress[x512] : +# 35| mu35_7170(String) = Uninitialized[x512] : &:r35_7169 +# 35| r35_7171(glval) = FunctionAddress[String] : +# 35| v35_7172(void) = Call[String] : func:r35_7171, this:r35_7169 +# 35| mu35_7173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7169 +# 35| r35_7175(glval) = VariableAddress[x512] : +# 35| r35_7176(glval) = FunctionAddress[~String] : +# 35| v35_7177(void) = Call[~String] : func:r35_7176, this:r35_7175 +# 35| mu35_7178(unknown) = ^CallSideEffect : ~m? +# 35| v35_7179(void) = ^IndirectReadSideEffect[-1] : &:r35_7175, ~m? +# 35| mu35_7180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7175 +# 35| r35_7181(bool) = Constant[0] : +# 35| v35_7182(void) = ConditionalBranch : r35_7181 #-----| False -> Block 513 #-----| True -> Block 1026 -# 1558| Block 513 -# 1558| r1558_1(glval) = VariableAddress[x513] : -# 1558| mu1558_2(String) = Uninitialized[x513] : &:r1558_1 -# 1558| r1558_3(glval) = FunctionAddress[String] : -# 1558| v1558_4(void) = Call[String] : func:r1558_3, this:r1558_1 -# 1558| mu1558_5(unknown) = ^CallSideEffect : ~m? -# 1558| mu1558_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1558_1 -# 1559| r1559_1(glval) = VariableAddress[x513] : -# 1559| r1559_2(glval) = FunctionAddress[~String] : -# 1559| v1559_3(void) = Call[~String] : func:r1559_2, this:r1559_1 -# 1559| mu1559_4(unknown) = ^CallSideEffect : ~m? -# 1559| v1559_5(void) = ^IndirectReadSideEffect[-1] : &:r1559_1, ~m? -# 1559| mu1559_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1559_1 -# 1559| r1559_7(bool) = Constant[0] : -# 1559| v1559_8(void) = ConditionalBranch : r1559_7 +# 35| Block 513 +# 35| r35_7183(glval) = VariableAddress[x513] : +# 35| mu35_7184(String) = Uninitialized[x513] : &:r35_7183 +# 35| r35_7185(glval) = FunctionAddress[String] : +# 35| v35_7186(void) = Call[String] : func:r35_7185, this:r35_7183 +# 35| mu35_7187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7183 +# 35| r35_7189(glval) = VariableAddress[x513] : +# 35| r35_7190(glval) = FunctionAddress[~String] : +# 35| v35_7191(void) = Call[~String] : func:r35_7190, this:r35_7189 +# 35| mu35_7192(unknown) = ^CallSideEffect : ~m? +# 35| v35_7193(void) = ^IndirectReadSideEffect[-1] : &:r35_7189, ~m? +# 35| mu35_7194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7189 +# 35| r35_7195(bool) = Constant[0] : +# 35| v35_7196(void) = ConditionalBranch : r35_7195 #-----| False -> Block 514 #-----| True -> Block 1026 -# 1561| Block 514 -# 1561| r1561_1(glval) = VariableAddress[x514] : -# 1561| mu1561_2(String) = Uninitialized[x514] : &:r1561_1 -# 1561| r1561_3(glval) = FunctionAddress[String] : -# 1561| v1561_4(void) = Call[String] : func:r1561_3, this:r1561_1 -# 1561| mu1561_5(unknown) = ^CallSideEffect : ~m? -# 1561| mu1561_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1561_1 -# 1562| r1562_1(glval) = VariableAddress[x514] : -# 1562| r1562_2(glval) = FunctionAddress[~String] : -# 1562| v1562_3(void) = Call[~String] : func:r1562_2, this:r1562_1 -# 1562| mu1562_4(unknown) = ^CallSideEffect : ~m? -# 1562| v1562_5(void) = ^IndirectReadSideEffect[-1] : &:r1562_1, ~m? -# 1562| mu1562_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1562_1 -# 1562| r1562_7(bool) = Constant[0] : -# 1562| v1562_8(void) = ConditionalBranch : r1562_7 +# 35| Block 514 +# 35| r35_7197(glval) = VariableAddress[x514] : +# 35| mu35_7198(String) = Uninitialized[x514] : &:r35_7197 +# 35| r35_7199(glval) = FunctionAddress[String] : +# 35| v35_7200(void) = Call[String] : func:r35_7199, this:r35_7197 +# 35| mu35_7201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7197 +# 35| r35_7203(glval) = VariableAddress[x514] : +# 35| r35_7204(glval) = FunctionAddress[~String] : +# 35| v35_7205(void) = Call[~String] : func:r35_7204, this:r35_7203 +# 35| mu35_7206(unknown) = ^CallSideEffect : ~m? +# 35| v35_7207(void) = ^IndirectReadSideEffect[-1] : &:r35_7203, ~m? +# 35| mu35_7208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7203 +# 35| r35_7209(bool) = Constant[0] : +# 35| v35_7210(void) = ConditionalBranch : r35_7209 #-----| False -> Block 515 #-----| True -> Block 1026 -# 1564| Block 515 -# 1564| r1564_1(glval) = VariableAddress[x515] : -# 1564| mu1564_2(String) = Uninitialized[x515] : &:r1564_1 -# 1564| r1564_3(glval) = FunctionAddress[String] : -# 1564| v1564_4(void) = Call[String] : func:r1564_3, this:r1564_1 -# 1564| mu1564_5(unknown) = ^CallSideEffect : ~m? -# 1564| mu1564_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1564_1 -# 1565| r1565_1(glval) = VariableAddress[x515] : -# 1565| r1565_2(glval) = FunctionAddress[~String] : -# 1565| v1565_3(void) = Call[~String] : func:r1565_2, this:r1565_1 -# 1565| mu1565_4(unknown) = ^CallSideEffect : ~m? -# 1565| v1565_5(void) = ^IndirectReadSideEffect[-1] : &:r1565_1, ~m? -# 1565| mu1565_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1565_1 -# 1565| r1565_7(bool) = Constant[0] : -# 1565| v1565_8(void) = ConditionalBranch : r1565_7 +# 35| Block 515 +# 35| r35_7211(glval) = VariableAddress[x515] : +# 35| mu35_7212(String) = Uninitialized[x515] : &:r35_7211 +# 35| r35_7213(glval) = FunctionAddress[String] : +# 35| v35_7214(void) = Call[String] : func:r35_7213, this:r35_7211 +# 35| mu35_7215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7211 +# 35| r35_7217(glval) = VariableAddress[x515] : +# 35| r35_7218(glval) = FunctionAddress[~String] : +# 35| v35_7219(void) = Call[~String] : func:r35_7218, this:r35_7217 +# 35| mu35_7220(unknown) = ^CallSideEffect : ~m? +# 35| v35_7221(void) = ^IndirectReadSideEffect[-1] : &:r35_7217, ~m? +# 35| mu35_7222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7217 +# 35| r35_7223(bool) = Constant[0] : +# 35| v35_7224(void) = ConditionalBranch : r35_7223 #-----| False -> Block 516 #-----| True -> Block 1026 -# 1567| Block 516 -# 1567| r1567_1(glval) = VariableAddress[x516] : -# 1567| mu1567_2(String) = Uninitialized[x516] : &:r1567_1 -# 1567| r1567_3(glval) = FunctionAddress[String] : -# 1567| v1567_4(void) = Call[String] : func:r1567_3, this:r1567_1 -# 1567| mu1567_5(unknown) = ^CallSideEffect : ~m? -# 1567| mu1567_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1567_1 -# 1568| r1568_1(glval) = VariableAddress[x516] : -# 1568| r1568_2(glval) = FunctionAddress[~String] : -# 1568| v1568_3(void) = Call[~String] : func:r1568_2, this:r1568_1 -# 1568| mu1568_4(unknown) = ^CallSideEffect : ~m? -# 1568| v1568_5(void) = ^IndirectReadSideEffect[-1] : &:r1568_1, ~m? -# 1568| mu1568_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1568_1 -# 1568| r1568_7(bool) = Constant[0] : -# 1568| v1568_8(void) = ConditionalBranch : r1568_7 +# 35| Block 516 +# 35| r35_7225(glval) = VariableAddress[x516] : +# 35| mu35_7226(String) = Uninitialized[x516] : &:r35_7225 +# 35| r35_7227(glval) = FunctionAddress[String] : +# 35| v35_7228(void) = Call[String] : func:r35_7227, this:r35_7225 +# 35| mu35_7229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7225 +# 35| r35_7231(glval) = VariableAddress[x516] : +# 35| r35_7232(glval) = FunctionAddress[~String] : +# 35| v35_7233(void) = Call[~String] : func:r35_7232, this:r35_7231 +# 35| mu35_7234(unknown) = ^CallSideEffect : ~m? +# 35| v35_7235(void) = ^IndirectReadSideEffect[-1] : &:r35_7231, ~m? +# 35| mu35_7236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7231 +# 35| r35_7237(bool) = Constant[0] : +# 35| v35_7238(void) = ConditionalBranch : r35_7237 #-----| False -> Block 517 #-----| True -> Block 1026 -# 1570| Block 517 -# 1570| r1570_1(glval) = VariableAddress[x517] : -# 1570| mu1570_2(String) = Uninitialized[x517] : &:r1570_1 -# 1570| r1570_3(glval) = FunctionAddress[String] : -# 1570| v1570_4(void) = Call[String] : func:r1570_3, this:r1570_1 -# 1570| mu1570_5(unknown) = ^CallSideEffect : ~m? -# 1570| mu1570_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1570_1 -# 1571| r1571_1(glval) = VariableAddress[x517] : -# 1571| r1571_2(glval) = FunctionAddress[~String] : -# 1571| v1571_3(void) = Call[~String] : func:r1571_2, this:r1571_1 -# 1571| mu1571_4(unknown) = ^CallSideEffect : ~m? -# 1571| v1571_5(void) = ^IndirectReadSideEffect[-1] : &:r1571_1, ~m? -# 1571| mu1571_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1571_1 -# 1571| r1571_7(bool) = Constant[0] : -# 1571| v1571_8(void) = ConditionalBranch : r1571_7 +# 35| Block 517 +# 35| r35_7239(glval) = VariableAddress[x517] : +# 35| mu35_7240(String) = Uninitialized[x517] : &:r35_7239 +# 35| r35_7241(glval) = FunctionAddress[String] : +# 35| v35_7242(void) = Call[String] : func:r35_7241, this:r35_7239 +# 35| mu35_7243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7239 +# 35| r35_7245(glval) = VariableAddress[x517] : +# 35| r35_7246(glval) = FunctionAddress[~String] : +# 35| v35_7247(void) = Call[~String] : func:r35_7246, this:r35_7245 +# 35| mu35_7248(unknown) = ^CallSideEffect : ~m? +# 35| v35_7249(void) = ^IndirectReadSideEffect[-1] : &:r35_7245, ~m? +# 35| mu35_7250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7245 +# 35| r35_7251(bool) = Constant[0] : +# 35| v35_7252(void) = ConditionalBranch : r35_7251 #-----| False -> Block 518 #-----| True -> Block 1026 -# 1573| Block 518 -# 1573| r1573_1(glval) = VariableAddress[x518] : -# 1573| mu1573_2(String) = Uninitialized[x518] : &:r1573_1 -# 1573| r1573_3(glval) = FunctionAddress[String] : -# 1573| v1573_4(void) = Call[String] : func:r1573_3, this:r1573_1 -# 1573| mu1573_5(unknown) = ^CallSideEffect : ~m? -# 1573| mu1573_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1573_1 -# 1574| r1574_1(glval) = VariableAddress[x518] : -# 1574| r1574_2(glval) = FunctionAddress[~String] : -# 1574| v1574_3(void) = Call[~String] : func:r1574_2, this:r1574_1 -# 1574| mu1574_4(unknown) = ^CallSideEffect : ~m? -# 1574| v1574_5(void) = ^IndirectReadSideEffect[-1] : &:r1574_1, ~m? -# 1574| mu1574_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1574_1 -# 1574| r1574_7(bool) = Constant[0] : -# 1574| v1574_8(void) = ConditionalBranch : r1574_7 +# 35| Block 518 +# 35| r35_7253(glval) = VariableAddress[x518] : +# 35| mu35_7254(String) = Uninitialized[x518] : &:r35_7253 +# 35| r35_7255(glval) = FunctionAddress[String] : +# 35| v35_7256(void) = Call[String] : func:r35_7255, this:r35_7253 +# 35| mu35_7257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7253 +# 35| r35_7259(glval) = VariableAddress[x518] : +# 35| r35_7260(glval) = FunctionAddress[~String] : +# 35| v35_7261(void) = Call[~String] : func:r35_7260, this:r35_7259 +# 35| mu35_7262(unknown) = ^CallSideEffect : ~m? +# 35| v35_7263(void) = ^IndirectReadSideEffect[-1] : &:r35_7259, ~m? +# 35| mu35_7264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7259 +# 35| r35_7265(bool) = Constant[0] : +# 35| v35_7266(void) = ConditionalBranch : r35_7265 #-----| False -> Block 519 #-----| True -> Block 1026 -# 1576| Block 519 -# 1576| r1576_1(glval) = VariableAddress[x519] : -# 1576| mu1576_2(String) = Uninitialized[x519] : &:r1576_1 -# 1576| r1576_3(glval) = FunctionAddress[String] : -# 1576| v1576_4(void) = Call[String] : func:r1576_3, this:r1576_1 -# 1576| mu1576_5(unknown) = ^CallSideEffect : ~m? -# 1576| mu1576_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1576_1 -# 1577| r1577_1(glval) = VariableAddress[x519] : -# 1577| r1577_2(glval) = FunctionAddress[~String] : -# 1577| v1577_3(void) = Call[~String] : func:r1577_2, this:r1577_1 -# 1577| mu1577_4(unknown) = ^CallSideEffect : ~m? -# 1577| v1577_5(void) = ^IndirectReadSideEffect[-1] : &:r1577_1, ~m? -# 1577| mu1577_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1577_1 -# 1577| r1577_7(bool) = Constant[0] : -# 1577| v1577_8(void) = ConditionalBranch : r1577_7 +# 35| Block 519 +# 35| r35_7267(glval) = VariableAddress[x519] : +# 35| mu35_7268(String) = Uninitialized[x519] : &:r35_7267 +# 35| r35_7269(glval) = FunctionAddress[String] : +# 35| v35_7270(void) = Call[String] : func:r35_7269, this:r35_7267 +# 35| mu35_7271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7267 +# 35| r35_7273(glval) = VariableAddress[x519] : +# 35| r35_7274(glval) = FunctionAddress[~String] : +# 35| v35_7275(void) = Call[~String] : func:r35_7274, this:r35_7273 +# 35| mu35_7276(unknown) = ^CallSideEffect : ~m? +# 35| v35_7277(void) = ^IndirectReadSideEffect[-1] : &:r35_7273, ~m? +# 35| mu35_7278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7273 +# 35| r35_7279(bool) = Constant[0] : +# 35| v35_7280(void) = ConditionalBranch : r35_7279 #-----| False -> Block 520 #-----| True -> Block 1026 -# 1579| Block 520 -# 1579| r1579_1(glval) = VariableAddress[x520] : -# 1579| mu1579_2(String) = Uninitialized[x520] : &:r1579_1 -# 1579| r1579_3(glval) = FunctionAddress[String] : -# 1579| v1579_4(void) = Call[String] : func:r1579_3, this:r1579_1 -# 1579| mu1579_5(unknown) = ^CallSideEffect : ~m? -# 1579| mu1579_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1579_1 -# 1580| r1580_1(glval) = VariableAddress[x520] : -# 1580| r1580_2(glval) = FunctionAddress[~String] : -# 1580| v1580_3(void) = Call[~String] : func:r1580_2, this:r1580_1 -# 1580| mu1580_4(unknown) = ^CallSideEffect : ~m? -# 1580| v1580_5(void) = ^IndirectReadSideEffect[-1] : &:r1580_1, ~m? -# 1580| mu1580_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1580| r1580_7(bool) = Constant[0] : -# 1580| v1580_8(void) = ConditionalBranch : r1580_7 +# 35| Block 520 +# 35| r35_7281(glval) = VariableAddress[x520] : +# 35| mu35_7282(String) = Uninitialized[x520] : &:r35_7281 +# 35| r35_7283(glval) = FunctionAddress[String] : +# 35| v35_7284(void) = Call[String] : func:r35_7283, this:r35_7281 +# 35| mu35_7285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7281 +# 35| r35_7287(glval) = VariableAddress[x520] : +# 35| r35_7288(glval) = FunctionAddress[~String] : +# 35| v35_7289(void) = Call[~String] : func:r35_7288, this:r35_7287 +# 35| mu35_7290(unknown) = ^CallSideEffect : ~m? +# 35| v35_7291(void) = ^IndirectReadSideEffect[-1] : &:r35_7287, ~m? +# 35| mu35_7292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7287 +# 35| r35_7293(bool) = Constant[0] : +# 35| v35_7294(void) = ConditionalBranch : r35_7293 #-----| False -> Block 521 #-----| True -> Block 1026 -# 1582| Block 521 -# 1582| r1582_1(glval) = VariableAddress[x521] : -# 1582| mu1582_2(String) = Uninitialized[x521] : &:r1582_1 -# 1582| r1582_3(glval) = FunctionAddress[String] : -# 1582| v1582_4(void) = Call[String] : func:r1582_3, this:r1582_1 -# 1582| mu1582_5(unknown) = ^CallSideEffect : ~m? -# 1582| mu1582_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 -# 1583| r1583_1(glval) = VariableAddress[x521] : -# 1583| r1583_2(glval) = FunctionAddress[~String] : -# 1583| v1583_3(void) = Call[~String] : func:r1583_2, this:r1583_1 -# 1583| mu1583_4(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_5(void) = ^IndirectReadSideEffect[-1] : &:r1583_1, ~m? -# 1583| mu1583_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1583_1 -# 1583| r1583_7(bool) = Constant[0] : -# 1583| v1583_8(void) = ConditionalBranch : r1583_7 +# 35| Block 521 +# 35| r35_7295(glval) = VariableAddress[x521] : +# 35| mu35_7296(String) = Uninitialized[x521] : &:r35_7295 +# 35| r35_7297(glval) = FunctionAddress[String] : +# 35| v35_7298(void) = Call[String] : func:r35_7297, this:r35_7295 +# 35| mu35_7299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7295 +# 35| r35_7301(glval) = VariableAddress[x521] : +# 35| r35_7302(glval) = FunctionAddress[~String] : +# 35| v35_7303(void) = Call[~String] : func:r35_7302, this:r35_7301 +# 35| mu35_7304(unknown) = ^CallSideEffect : ~m? +# 35| v35_7305(void) = ^IndirectReadSideEffect[-1] : &:r35_7301, ~m? +# 35| mu35_7306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7301 +# 35| r35_7307(bool) = Constant[0] : +# 35| v35_7308(void) = ConditionalBranch : r35_7307 #-----| False -> Block 522 #-----| True -> Block 1026 -# 1585| Block 522 -# 1585| r1585_1(glval) = VariableAddress[x522] : -# 1585| mu1585_2(String) = Uninitialized[x522] : &:r1585_1 -# 1585| r1585_3(glval) = FunctionAddress[String] : -# 1585| v1585_4(void) = Call[String] : func:r1585_3, this:r1585_1 -# 1585| mu1585_5(unknown) = ^CallSideEffect : ~m? -# 1585| mu1585_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1585_1 -# 1586| r1586_1(glval) = VariableAddress[x522] : -# 1586| r1586_2(glval) = FunctionAddress[~String] : -# 1586| v1586_3(void) = Call[~String] : func:r1586_2, this:r1586_1 -# 1586| mu1586_4(unknown) = ^CallSideEffect : ~m? -# 1586| v1586_5(void) = ^IndirectReadSideEffect[-1] : &:r1586_1, ~m? -# 1586| mu1586_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1586_1 -# 1586| r1586_7(bool) = Constant[0] : -# 1586| v1586_8(void) = ConditionalBranch : r1586_7 +# 35| Block 522 +# 35| r35_7309(glval) = VariableAddress[x522] : +# 35| mu35_7310(String) = Uninitialized[x522] : &:r35_7309 +# 35| r35_7311(glval) = FunctionAddress[String] : +# 35| v35_7312(void) = Call[String] : func:r35_7311, this:r35_7309 +# 35| mu35_7313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7309 +# 35| r35_7315(glval) = VariableAddress[x522] : +# 35| r35_7316(glval) = FunctionAddress[~String] : +# 35| v35_7317(void) = Call[~String] : func:r35_7316, this:r35_7315 +# 35| mu35_7318(unknown) = ^CallSideEffect : ~m? +# 35| v35_7319(void) = ^IndirectReadSideEffect[-1] : &:r35_7315, ~m? +# 35| mu35_7320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7315 +# 35| r35_7321(bool) = Constant[0] : +# 35| v35_7322(void) = ConditionalBranch : r35_7321 #-----| False -> Block 523 #-----| True -> Block 1026 -# 1588| Block 523 -# 1588| r1588_1(glval) = VariableAddress[x523] : -# 1588| mu1588_2(String) = Uninitialized[x523] : &:r1588_1 -# 1588| r1588_3(glval) = FunctionAddress[String] : -# 1588| v1588_4(void) = Call[String] : func:r1588_3, this:r1588_1 -# 1588| mu1588_5(unknown) = ^CallSideEffect : ~m? -# 1588| mu1588_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1588_1 -# 1589| r1589_1(glval) = VariableAddress[x523] : -# 1589| r1589_2(glval) = FunctionAddress[~String] : -# 1589| v1589_3(void) = Call[~String] : func:r1589_2, this:r1589_1 -# 1589| mu1589_4(unknown) = ^CallSideEffect : ~m? -# 1589| v1589_5(void) = ^IndirectReadSideEffect[-1] : &:r1589_1, ~m? -# 1589| mu1589_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1589_1 -# 1589| r1589_7(bool) = Constant[0] : -# 1589| v1589_8(void) = ConditionalBranch : r1589_7 +# 35| Block 523 +# 35| r35_7323(glval) = VariableAddress[x523] : +# 35| mu35_7324(String) = Uninitialized[x523] : &:r35_7323 +# 35| r35_7325(glval) = FunctionAddress[String] : +# 35| v35_7326(void) = Call[String] : func:r35_7325, this:r35_7323 +# 35| mu35_7327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7323 +# 35| r35_7329(glval) = VariableAddress[x523] : +# 35| r35_7330(glval) = FunctionAddress[~String] : +# 35| v35_7331(void) = Call[~String] : func:r35_7330, this:r35_7329 +# 35| mu35_7332(unknown) = ^CallSideEffect : ~m? +# 35| v35_7333(void) = ^IndirectReadSideEffect[-1] : &:r35_7329, ~m? +# 35| mu35_7334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7329 +# 35| r35_7335(bool) = Constant[0] : +# 35| v35_7336(void) = ConditionalBranch : r35_7335 #-----| False -> Block 524 #-----| True -> Block 1026 -# 1591| Block 524 -# 1591| r1591_1(glval) = VariableAddress[x524] : -# 1591| mu1591_2(String) = Uninitialized[x524] : &:r1591_1 -# 1591| r1591_3(glval) = FunctionAddress[String] : -# 1591| v1591_4(void) = Call[String] : func:r1591_3, this:r1591_1 -# 1591| mu1591_5(unknown) = ^CallSideEffect : ~m? -# 1591| mu1591_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1591_1 -# 1592| r1592_1(glval) = VariableAddress[x524] : -# 1592| r1592_2(glval) = FunctionAddress[~String] : -# 1592| v1592_3(void) = Call[~String] : func:r1592_2, this:r1592_1 -# 1592| mu1592_4(unknown) = ^CallSideEffect : ~m? -# 1592| v1592_5(void) = ^IndirectReadSideEffect[-1] : &:r1592_1, ~m? -# 1592| mu1592_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1592_1 -# 1592| r1592_7(bool) = Constant[0] : -# 1592| v1592_8(void) = ConditionalBranch : r1592_7 +# 35| Block 524 +# 35| r35_7337(glval) = VariableAddress[x524] : +# 35| mu35_7338(String) = Uninitialized[x524] : &:r35_7337 +# 35| r35_7339(glval) = FunctionAddress[String] : +# 35| v35_7340(void) = Call[String] : func:r35_7339, this:r35_7337 +# 35| mu35_7341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7337 +# 35| r35_7343(glval) = VariableAddress[x524] : +# 35| r35_7344(glval) = FunctionAddress[~String] : +# 35| v35_7345(void) = Call[~String] : func:r35_7344, this:r35_7343 +# 35| mu35_7346(unknown) = ^CallSideEffect : ~m? +# 35| v35_7347(void) = ^IndirectReadSideEffect[-1] : &:r35_7343, ~m? +# 35| mu35_7348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7343 +# 35| r35_7349(bool) = Constant[0] : +# 35| v35_7350(void) = ConditionalBranch : r35_7349 #-----| False -> Block 525 #-----| True -> Block 1026 -# 1594| Block 525 -# 1594| r1594_1(glval) = VariableAddress[x525] : -# 1594| mu1594_2(String) = Uninitialized[x525] : &:r1594_1 -# 1594| r1594_3(glval) = FunctionAddress[String] : -# 1594| v1594_4(void) = Call[String] : func:r1594_3, this:r1594_1 -# 1594| mu1594_5(unknown) = ^CallSideEffect : ~m? -# 1594| mu1594_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1594_1 -# 1595| r1595_1(glval) = VariableAddress[x525] : -# 1595| r1595_2(glval) = FunctionAddress[~String] : -# 1595| v1595_3(void) = Call[~String] : func:r1595_2, this:r1595_1 -# 1595| mu1595_4(unknown) = ^CallSideEffect : ~m? -# 1595| v1595_5(void) = ^IndirectReadSideEffect[-1] : &:r1595_1, ~m? -# 1595| mu1595_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1595_1 -# 1595| r1595_7(bool) = Constant[0] : -# 1595| v1595_8(void) = ConditionalBranch : r1595_7 +# 35| Block 525 +# 35| r35_7351(glval) = VariableAddress[x525] : +# 35| mu35_7352(String) = Uninitialized[x525] : &:r35_7351 +# 35| r35_7353(glval) = FunctionAddress[String] : +# 35| v35_7354(void) = Call[String] : func:r35_7353, this:r35_7351 +# 35| mu35_7355(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7351 +# 35| r35_7357(glval) = VariableAddress[x525] : +# 35| r35_7358(glval) = FunctionAddress[~String] : +# 35| v35_7359(void) = Call[~String] : func:r35_7358, this:r35_7357 +# 35| mu35_7360(unknown) = ^CallSideEffect : ~m? +# 35| v35_7361(void) = ^IndirectReadSideEffect[-1] : &:r35_7357, ~m? +# 35| mu35_7362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7357 +# 35| r35_7363(bool) = Constant[0] : +# 35| v35_7364(void) = ConditionalBranch : r35_7363 #-----| False -> Block 526 #-----| True -> Block 1026 -# 1597| Block 526 -# 1597| r1597_1(glval) = VariableAddress[x526] : -# 1597| mu1597_2(String) = Uninitialized[x526] : &:r1597_1 -# 1597| r1597_3(glval) = FunctionAddress[String] : -# 1597| v1597_4(void) = Call[String] : func:r1597_3, this:r1597_1 -# 1597| mu1597_5(unknown) = ^CallSideEffect : ~m? -# 1597| mu1597_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1597_1 -# 1598| r1598_1(glval) = VariableAddress[x526] : -# 1598| r1598_2(glval) = FunctionAddress[~String] : -# 1598| v1598_3(void) = Call[~String] : func:r1598_2, this:r1598_1 -# 1598| mu1598_4(unknown) = ^CallSideEffect : ~m? -# 1598| v1598_5(void) = ^IndirectReadSideEffect[-1] : &:r1598_1, ~m? -# 1598| mu1598_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1598_1 -# 1598| r1598_7(bool) = Constant[0] : -# 1598| v1598_8(void) = ConditionalBranch : r1598_7 +# 35| Block 526 +# 35| r35_7365(glval) = VariableAddress[x526] : +# 35| mu35_7366(String) = Uninitialized[x526] : &:r35_7365 +# 35| r35_7367(glval) = FunctionAddress[String] : +# 35| v35_7368(void) = Call[String] : func:r35_7367, this:r35_7365 +# 35| mu35_7369(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7365 +# 35| r35_7371(glval) = VariableAddress[x526] : +# 35| r35_7372(glval) = FunctionAddress[~String] : +# 35| v35_7373(void) = Call[~String] : func:r35_7372, this:r35_7371 +# 35| mu35_7374(unknown) = ^CallSideEffect : ~m? +# 35| v35_7375(void) = ^IndirectReadSideEffect[-1] : &:r35_7371, ~m? +# 35| mu35_7376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7371 +# 35| r35_7377(bool) = Constant[0] : +# 35| v35_7378(void) = ConditionalBranch : r35_7377 #-----| False -> Block 527 #-----| True -> Block 1026 -# 1600| Block 527 -# 1600| r1600_1(glval) = VariableAddress[x527] : -# 1600| mu1600_2(String) = Uninitialized[x527] : &:r1600_1 -# 1600| r1600_3(glval) = FunctionAddress[String] : -# 1600| v1600_4(void) = Call[String] : func:r1600_3, this:r1600_1 -# 1600| mu1600_5(unknown) = ^CallSideEffect : ~m? -# 1600| mu1600_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1600_1 -# 1601| r1601_1(glval) = VariableAddress[x527] : -# 1601| r1601_2(glval) = FunctionAddress[~String] : -# 1601| v1601_3(void) = Call[~String] : func:r1601_2, this:r1601_1 -# 1601| mu1601_4(unknown) = ^CallSideEffect : ~m? -# 1601| v1601_5(void) = ^IndirectReadSideEffect[-1] : &:r1601_1, ~m? -# 1601| mu1601_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1601_1 -# 1601| r1601_7(bool) = Constant[0] : -# 1601| v1601_8(void) = ConditionalBranch : r1601_7 +# 35| Block 527 +# 35| r35_7379(glval) = VariableAddress[x527] : +# 35| mu35_7380(String) = Uninitialized[x527] : &:r35_7379 +# 35| r35_7381(glval) = FunctionAddress[String] : +# 35| v35_7382(void) = Call[String] : func:r35_7381, this:r35_7379 +# 35| mu35_7383(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7379 +# 35| r35_7385(glval) = VariableAddress[x527] : +# 35| r35_7386(glval) = FunctionAddress[~String] : +# 35| v35_7387(void) = Call[~String] : func:r35_7386, this:r35_7385 +# 35| mu35_7388(unknown) = ^CallSideEffect : ~m? +# 35| v35_7389(void) = ^IndirectReadSideEffect[-1] : &:r35_7385, ~m? +# 35| mu35_7390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7385 +# 35| r35_7391(bool) = Constant[0] : +# 35| v35_7392(void) = ConditionalBranch : r35_7391 #-----| False -> Block 528 #-----| True -> Block 1026 -# 1603| Block 528 -# 1603| r1603_1(glval) = VariableAddress[x528] : -# 1603| mu1603_2(String) = Uninitialized[x528] : &:r1603_1 -# 1603| r1603_3(glval) = FunctionAddress[String] : -# 1603| v1603_4(void) = Call[String] : func:r1603_3, this:r1603_1 -# 1603| mu1603_5(unknown) = ^CallSideEffect : ~m? -# 1603| mu1603_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1603_1 -# 1604| r1604_1(glval) = VariableAddress[x528] : -# 1604| r1604_2(glval) = FunctionAddress[~String] : -# 1604| v1604_3(void) = Call[~String] : func:r1604_2, this:r1604_1 -# 1604| mu1604_4(unknown) = ^CallSideEffect : ~m? -# 1604| v1604_5(void) = ^IndirectReadSideEffect[-1] : &:r1604_1, ~m? -# 1604| mu1604_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1604_1 -# 1604| r1604_7(bool) = Constant[0] : -# 1604| v1604_8(void) = ConditionalBranch : r1604_7 +# 35| Block 528 +# 35| r35_7393(glval) = VariableAddress[x528] : +# 35| mu35_7394(String) = Uninitialized[x528] : &:r35_7393 +# 35| r35_7395(glval) = FunctionAddress[String] : +# 35| v35_7396(void) = Call[String] : func:r35_7395, this:r35_7393 +# 35| mu35_7397(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7393 +# 35| r35_7399(glval) = VariableAddress[x528] : +# 35| r35_7400(glval) = FunctionAddress[~String] : +# 35| v35_7401(void) = Call[~String] : func:r35_7400, this:r35_7399 +# 35| mu35_7402(unknown) = ^CallSideEffect : ~m? +# 35| v35_7403(void) = ^IndirectReadSideEffect[-1] : &:r35_7399, ~m? +# 35| mu35_7404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7399 +# 35| r35_7405(bool) = Constant[0] : +# 35| v35_7406(void) = ConditionalBranch : r35_7405 #-----| False -> Block 529 #-----| True -> Block 1026 -# 1606| Block 529 -# 1606| r1606_1(glval) = VariableAddress[x529] : -# 1606| mu1606_2(String) = Uninitialized[x529] : &:r1606_1 -# 1606| r1606_3(glval) = FunctionAddress[String] : -# 1606| v1606_4(void) = Call[String] : func:r1606_3, this:r1606_1 -# 1606| mu1606_5(unknown) = ^CallSideEffect : ~m? -# 1606| mu1606_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1606_1 -# 1607| r1607_1(glval) = VariableAddress[x529] : -# 1607| r1607_2(glval) = FunctionAddress[~String] : -# 1607| v1607_3(void) = Call[~String] : func:r1607_2, this:r1607_1 -# 1607| mu1607_4(unknown) = ^CallSideEffect : ~m? -# 1607| v1607_5(void) = ^IndirectReadSideEffect[-1] : &:r1607_1, ~m? -# 1607| mu1607_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1607_1 -# 1607| r1607_7(bool) = Constant[0] : -# 1607| v1607_8(void) = ConditionalBranch : r1607_7 +# 35| Block 529 +# 35| r35_7407(glval) = VariableAddress[x529] : +# 35| mu35_7408(String) = Uninitialized[x529] : &:r35_7407 +# 35| r35_7409(glval) = FunctionAddress[String] : +# 35| v35_7410(void) = Call[String] : func:r35_7409, this:r35_7407 +# 35| mu35_7411(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7407 +# 35| r35_7413(glval) = VariableAddress[x529] : +# 35| r35_7414(glval) = FunctionAddress[~String] : +# 35| v35_7415(void) = Call[~String] : func:r35_7414, this:r35_7413 +# 35| mu35_7416(unknown) = ^CallSideEffect : ~m? +# 35| v35_7417(void) = ^IndirectReadSideEffect[-1] : &:r35_7413, ~m? +# 35| mu35_7418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7413 +# 35| r35_7419(bool) = Constant[0] : +# 35| v35_7420(void) = ConditionalBranch : r35_7419 #-----| False -> Block 530 #-----| True -> Block 1026 -# 1609| Block 530 -# 1609| r1609_1(glval) = VariableAddress[x530] : -# 1609| mu1609_2(String) = Uninitialized[x530] : &:r1609_1 -# 1609| r1609_3(glval) = FunctionAddress[String] : -# 1609| v1609_4(void) = Call[String] : func:r1609_3, this:r1609_1 -# 1609| mu1609_5(unknown) = ^CallSideEffect : ~m? -# 1609| mu1609_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1609_1 -# 1610| r1610_1(glval) = VariableAddress[x530] : -# 1610| r1610_2(glval) = FunctionAddress[~String] : -# 1610| v1610_3(void) = Call[~String] : func:r1610_2, this:r1610_1 -# 1610| mu1610_4(unknown) = ^CallSideEffect : ~m? -# 1610| v1610_5(void) = ^IndirectReadSideEffect[-1] : &:r1610_1, ~m? -# 1610| mu1610_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1610_1 -# 1610| r1610_7(bool) = Constant[0] : -# 1610| v1610_8(void) = ConditionalBranch : r1610_7 +# 35| Block 530 +# 35| r35_7421(glval) = VariableAddress[x530] : +# 35| mu35_7422(String) = Uninitialized[x530] : &:r35_7421 +# 35| r35_7423(glval) = FunctionAddress[String] : +# 35| v35_7424(void) = Call[String] : func:r35_7423, this:r35_7421 +# 35| mu35_7425(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7421 +# 35| r35_7427(glval) = VariableAddress[x530] : +# 35| r35_7428(glval) = FunctionAddress[~String] : +# 35| v35_7429(void) = Call[~String] : func:r35_7428, this:r35_7427 +# 35| mu35_7430(unknown) = ^CallSideEffect : ~m? +# 35| v35_7431(void) = ^IndirectReadSideEffect[-1] : &:r35_7427, ~m? +# 35| mu35_7432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7427 +# 35| r35_7433(bool) = Constant[0] : +# 35| v35_7434(void) = ConditionalBranch : r35_7433 #-----| False -> Block 531 #-----| True -> Block 1026 -# 1612| Block 531 -# 1612| r1612_1(glval) = VariableAddress[x531] : -# 1612| mu1612_2(String) = Uninitialized[x531] : &:r1612_1 -# 1612| r1612_3(glval) = FunctionAddress[String] : -# 1612| v1612_4(void) = Call[String] : func:r1612_3, this:r1612_1 -# 1612| mu1612_5(unknown) = ^CallSideEffect : ~m? -# 1612| mu1612_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1612_1 -# 1613| r1613_1(glval) = VariableAddress[x531] : -# 1613| r1613_2(glval) = FunctionAddress[~String] : -# 1613| v1613_3(void) = Call[~String] : func:r1613_2, this:r1613_1 -# 1613| mu1613_4(unknown) = ^CallSideEffect : ~m? -# 1613| v1613_5(void) = ^IndirectReadSideEffect[-1] : &:r1613_1, ~m? -# 1613| mu1613_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1613_1 -# 1613| r1613_7(bool) = Constant[0] : -# 1613| v1613_8(void) = ConditionalBranch : r1613_7 +# 35| Block 531 +# 35| r35_7435(glval) = VariableAddress[x531] : +# 35| mu35_7436(String) = Uninitialized[x531] : &:r35_7435 +# 35| r35_7437(glval) = FunctionAddress[String] : +# 35| v35_7438(void) = Call[String] : func:r35_7437, this:r35_7435 +# 35| mu35_7439(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7435 +# 35| r35_7441(glval) = VariableAddress[x531] : +# 35| r35_7442(glval) = FunctionAddress[~String] : +# 35| v35_7443(void) = Call[~String] : func:r35_7442, this:r35_7441 +# 35| mu35_7444(unknown) = ^CallSideEffect : ~m? +# 35| v35_7445(void) = ^IndirectReadSideEffect[-1] : &:r35_7441, ~m? +# 35| mu35_7446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7441 +# 35| r35_7447(bool) = Constant[0] : +# 35| v35_7448(void) = ConditionalBranch : r35_7447 #-----| False -> Block 532 #-----| True -> Block 1026 -# 1615| Block 532 -# 1615| r1615_1(glval) = VariableAddress[x532] : -# 1615| mu1615_2(String) = Uninitialized[x532] : &:r1615_1 -# 1615| r1615_3(glval) = FunctionAddress[String] : -# 1615| v1615_4(void) = Call[String] : func:r1615_3, this:r1615_1 -# 1615| mu1615_5(unknown) = ^CallSideEffect : ~m? -# 1615| mu1615_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1615_1 -# 1616| r1616_1(glval) = VariableAddress[x532] : -# 1616| r1616_2(glval) = FunctionAddress[~String] : -# 1616| v1616_3(void) = Call[~String] : func:r1616_2, this:r1616_1 -# 1616| mu1616_4(unknown) = ^CallSideEffect : ~m? -# 1616| v1616_5(void) = ^IndirectReadSideEffect[-1] : &:r1616_1, ~m? -# 1616| mu1616_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1616_1 -# 1616| r1616_7(bool) = Constant[0] : -# 1616| v1616_8(void) = ConditionalBranch : r1616_7 +# 35| Block 532 +# 35| r35_7449(glval) = VariableAddress[x532] : +# 35| mu35_7450(String) = Uninitialized[x532] : &:r35_7449 +# 35| r35_7451(glval) = FunctionAddress[String] : +# 35| v35_7452(void) = Call[String] : func:r35_7451, this:r35_7449 +# 35| mu35_7453(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7449 +# 35| r35_7455(glval) = VariableAddress[x532] : +# 35| r35_7456(glval) = FunctionAddress[~String] : +# 35| v35_7457(void) = Call[~String] : func:r35_7456, this:r35_7455 +# 35| mu35_7458(unknown) = ^CallSideEffect : ~m? +# 35| v35_7459(void) = ^IndirectReadSideEffect[-1] : &:r35_7455, ~m? +# 35| mu35_7460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7455 +# 35| r35_7461(bool) = Constant[0] : +# 35| v35_7462(void) = ConditionalBranch : r35_7461 #-----| False -> Block 533 #-----| True -> Block 1026 -# 1618| Block 533 -# 1618| r1618_1(glval) = VariableAddress[x533] : -# 1618| mu1618_2(String) = Uninitialized[x533] : &:r1618_1 -# 1618| r1618_3(glval) = FunctionAddress[String] : -# 1618| v1618_4(void) = Call[String] : func:r1618_3, this:r1618_1 -# 1618| mu1618_5(unknown) = ^CallSideEffect : ~m? -# 1618| mu1618_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1618_1 -# 1619| r1619_1(glval) = VariableAddress[x533] : -# 1619| r1619_2(glval) = FunctionAddress[~String] : -# 1619| v1619_3(void) = Call[~String] : func:r1619_2, this:r1619_1 -# 1619| mu1619_4(unknown) = ^CallSideEffect : ~m? -# 1619| v1619_5(void) = ^IndirectReadSideEffect[-1] : &:r1619_1, ~m? -# 1619| mu1619_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1619_1 -# 1619| r1619_7(bool) = Constant[0] : -# 1619| v1619_8(void) = ConditionalBranch : r1619_7 +# 35| Block 533 +# 35| r35_7463(glval) = VariableAddress[x533] : +# 35| mu35_7464(String) = Uninitialized[x533] : &:r35_7463 +# 35| r35_7465(glval) = FunctionAddress[String] : +# 35| v35_7466(void) = Call[String] : func:r35_7465, this:r35_7463 +# 35| mu35_7467(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7463 +# 35| r35_7469(glval) = VariableAddress[x533] : +# 35| r35_7470(glval) = FunctionAddress[~String] : +# 35| v35_7471(void) = Call[~String] : func:r35_7470, this:r35_7469 +# 35| mu35_7472(unknown) = ^CallSideEffect : ~m? +# 35| v35_7473(void) = ^IndirectReadSideEffect[-1] : &:r35_7469, ~m? +# 35| mu35_7474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7469 +# 35| r35_7475(bool) = Constant[0] : +# 35| v35_7476(void) = ConditionalBranch : r35_7475 #-----| False -> Block 534 #-----| True -> Block 1026 -# 1621| Block 534 -# 1621| r1621_1(glval) = VariableAddress[x534] : -# 1621| mu1621_2(String) = Uninitialized[x534] : &:r1621_1 -# 1621| r1621_3(glval) = FunctionAddress[String] : -# 1621| v1621_4(void) = Call[String] : func:r1621_3, this:r1621_1 -# 1621| mu1621_5(unknown) = ^CallSideEffect : ~m? -# 1621| mu1621_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1621_1 -# 1622| r1622_1(glval) = VariableAddress[x534] : -# 1622| r1622_2(glval) = FunctionAddress[~String] : -# 1622| v1622_3(void) = Call[~String] : func:r1622_2, this:r1622_1 -# 1622| mu1622_4(unknown) = ^CallSideEffect : ~m? -# 1622| v1622_5(void) = ^IndirectReadSideEffect[-1] : &:r1622_1, ~m? -# 1622| mu1622_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1622_1 -# 1622| r1622_7(bool) = Constant[0] : -# 1622| v1622_8(void) = ConditionalBranch : r1622_7 +# 35| Block 534 +# 35| r35_7477(glval) = VariableAddress[x534] : +# 35| mu35_7478(String) = Uninitialized[x534] : &:r35_7477 +# 35| r35_7479(glval) = FunctionAddress[String] : +# 35| v35_7480(void) = Call[String] : func:r35_7479, this:r35_7477 +# 35| mu35_7481(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7477 +# 35| r35_7483(glval) = VariableAddress[x534] : +# 35| r35_7484(glval) = FunctionAddress[~String] : +# 35| v35_7485(void) = Call[~String] : func:r35_7484, this:r35_7483 +# 35| mu35_7486(unknown) = ^CallSideEffect : ~m? +# 35| v35_7487(void) = ^IndirectReadSideEffect[-1] : &:r35_7483, ~m? +# 35| mu35_7488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7483 +# 35| r35_7489(bool) = Constant[0] : +# 35| v35_7490(void) = ConditionalBranch : r35_7489 #-----| False -> Block 535 #-----| True -> Block 1026 -# 1624| Block 535 -# 1624| r1624_1(glval) = VariableAddress[x535] : -# 1624| mu1624_2(String) = Uninitialized[x535] : &:r1624_1 -# 1624| r1624_3(glval) = FunctionAddress[String] : -# 1624| v1624_4(void) = Call[String] : func:r1624_3, this:r1624_1 -# 1624| mu1624_5(unknown) = ^CallSideEffect : ~m? -# 1624| mu1624_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1624_1 -# 1625| r1625_1(glval) = VariableAddress[x535] : -# 1625| r1625_2(glval) = FunctionAddress[~String] : -# 1625| v1625_3(void) = Call[~String] : func:r1625_2, this:r1625_1 -# 1625| mu1625_4(unknown) = ^CallSideEffect : ~m? -# 1625| v1625_5(void) = ^IndirectReadSideEffect[-1] : &:r1625_1, ~m? -# 1625| mu1625_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1625_1 -# 1625| r1625_7(bool) = Constant[0] : -# 1625| v1625_8(void) = ConditionalBranch : r1625_7 +# 35| Block 535 +# 35| r35_7491(glval) = VariableAddress[x535] : +# 35| mu35_7492(String) = Uninitialized[x535] : &:r35_7491 +# 35| r35_7493(glval) = FunctionAddress[String] : +# 35| v35_7494(void) = Call[String] : func:r35_7493, this:r35_7491 +# 35| mu35_7495(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7491 +# 35| r35_7497(glval) = VariableAddress[x535] : +# 35| r35_7498(glval) = FunctionAddress[~String] : +# 35| v35_7499(void) = Call[~String] : func:r35_7498, this:r35_7497 +# 35| mu35_7500(unknown) = ^CallSideEffect : ~m? +# 35| v35_7501(void) = ^IndirectReadSideEffect[-1] : &:r35_7497, ~m? +# 35| mu35_7502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7497 +# 35| r35_7503(bool) = Constant[0] : +# 35| v35_7504(void) = ConditionalBranch : r35_7503 #-----| False -> Block 536 #-----| True -> Block 1026 -# 1627| Block 536 -# 1627| r1627_1(glval) = VariableAddress[x536] : -# 1627| mu1627_2(String) = Uninitialized[x536] : &:r1627_1 -# 1627| r1627_3(glval) = FunctionAddress[String] : -# 1627| v1627_4(void) = Call[String] : func:r1627_3, this:r1627_1 -# 1627| mu1627_5(unknown) = ^CallSideEffect : ~m? -# 1627| mu1627_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1627_1 -# 1628| r1628_1(glval) = VariableAddress[x536] : -# 1628| r1628_2(glval) = FunctionAddress[~String] : -# 1628| v1628_3(void) = Call[~String] : func:r1628_2, this:r1628_1 -# 1628| mu1628_4(unknown) = ^CallSideEffect : ~m? -# 1628| v1628_5(void) = ^IndirectReadSideEffect[-1] : &:r1628_1, ~m? -# 1628| mu1628_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1628_1 -# 1628| r1628_7(bool) = Constant[0] : -# 1628| v1628_8(void) = ConditionalBranch : r1628_7 +# 35| Block 536 +# 35| r35_7505(glval) = VariableAddress[x536] : +# 35| mu35_7506(String) = Uninitialized[x536] : &:r35_7505 +# 35| r35_7507(glval) = FunctionAddress[String] : +# 35| v35_7508(void) = Call[String] : func:r35_7507, this:r35_7505 +# 35| mu35_7509(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7505 +# 35| r35_7511(glval) = VariableAddress[x536] : +# 35| r35_7512(glval) = FunctionAddress[~String] : +# 35| v35_7513(void) = Call[~String] : func:r35_7512, this:r35_7511 +# 35| mu35_7514(unknown) = ^CallSideEffect : ~m? +# 35| v35_7515(void) = ^IndirectReadSideEffect[-1] : &:r35_7511, ~m? +# 35| mu35_7516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7511 +# 35| r35_7517(bool) = Constant[0] : +# 35| v35_7518(void) = ConditionalBranch : r35_7517 #-----| False -> Block 537 #-----| True -> Block 1026 -# 1630| Block 537 -# 1630| r1630_1(glval) = VariableAddress[x537] : -# 1630| mu1630_2(String) = Uninitialized[x537] : &:r1630_1 -# 1630| r1630_3(glval) = FunctionAddress[String] : -# 1630| v1630_4(void) = Call[String] : func:r1630_3, this:r1630_1 -# 1630| mu1630_5(unknown) = ^CallSideEffect : ~m? -# 1630| mu1630_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1630_1 -# 1631| r1631_1(glval) = VariableAddress[x537] : -# 1631| r1631_2(glval) = FunctionAddress[~String] : -# 1631| v1631_3(void) = Call[~String] : func:r1631_2, this:r1631_1 -# 1631| mu1631_4(unknown) = ^CallSideEffect : ~m? -# 1631| v1631_5(void) = ^IndirectReadSideEffect[-1] : &:r1631_1, ~m? -# 1631| mu1631_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1 -# 1631| r1631_7(bool) = Constant[0] : -# 1631| v1631_8(void) = ConditionalBranch : r1631_7 +# 35| Block 537 +# 35| r35_7519(glval) = VariableAddress[x537] : +# 35| mu35_7520(String) = Uninitialized[x537] : &:r35_7519 +# 35| r35_7521(glval) = FunctionAddress[String] : +# 35| v35_7522(void) = Call[String] : func:r35_7521, this:r35_7519 +# 35| mu35_7523(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7519 +# 35| r35_7525(glval) = VariableAddress[x537] : +# 35| r35_7526(glval) = FunctionAddress[~String] : +# 35| v35_7527(void) = Call[~String] : func:r35_7526, this:r35_7525 +# 35| mu35_7528(unknown) = ^CallSideEffect : ~m? +# 35| v35_7529(void) = ^IndirectReadSideEffect[-1] : &:r35_7525, ~m? +# 35| mu35_7530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7525 +# 35| r35_7531(bool) = Constant[0] : +# 35| v35_7532(void) = ConditionalBranch : r35_7531 #-----| False -> Block 538 #-----| True -> Block 1026 -# 1633| Block 538 -# 1633| r1633_1(glval) = VariableAddress[x538] : -# 1633| mu1633_2(String) = Uninitialized[x538] : &:r1633_1 -# 1633| r1633_3(glval) = FunctionAddress[String] : -# 1633| v1633_4(void) = Call[String] : func:r1633_3, this:r1633_1 -# 1633| mu1633_5(unknown) = ^CallSideEffect : ~m? -# 1633| mu1633_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1633_1 -# 1634| r1634_1(glval) = VariableAddress[x538] : -# 1634| r1634_2(glval) = FunctionAddress[~String] : -# 1634| v1634_3(void) = Call[~String] : func:r1634_2, this:r1634_1 -# 1634| mu1634_4(unknown) = ^CallSideEffect : ~m? -# 1634| v1634_5(void) = ^IndirectReadSideEffect[-1] : &:r1634_1, ~m? -# 1634| mu1634_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1634_1 -# 1634| r1634_7(bool) = Constant[0] : -# 1634| v1634_8(void) = ConditionalBranch : r1634_7 +# 35| Block 538 +# 35| r35_7533(glval) = VariableAddress[x538] : +# 35| mu35_7534(String) = Uninitialized[x538] : &:r35_7533 +# 35| r35_7535(glval) = FunctionAddress[String] : +# 35| v35_7536(void) = Call[String] : func:r35_7535, this:r35_7533 +# 35| mu35_7537(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7533 +# 35| r35_7539(glval) = VariableAddress[x538] : +# 35| r35_7540(glval) = FunctionAddress[~String] : +# 35| v35_7541(void) = Call[~String] : func:r35_7540, this:r35_7539 +# 35| mu35_7542(unknown) = ^CallSideEffect : ~m? +# 35| v35_7543(void) = ^IndirectReadSideEffect[-1] : &:r35_7539, ~m? +# 35| mu35_7544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7539 +# 35| r35_7545(bool) = Constant[0] : +# 35| v35_7546(void) = ConditionalBranch : r35_7545 #-----| False -> Block 539 #-----| True -> Block 1026 -# 1636| Block 539 -# 1636| r1636_1(glval) = VariableAddress[x539] : -# 1636| mu1636_2(String) = Uninitialized[x539] : &:r1636_1 -# 1636| r1636_3(glval) = FunctionAddress[String] : -# 1636| v1636_4(void) = Call[String] : func:r1636_3, this:r1636_1 -# 1636| mu1636_5(unknown) = ^CallSideEffect : ~m? -# 1636| mu1636_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1636_1 -# 1637| r1637_1(glval) = VariableAddress[x539] : -# 1637| r1637_2(glval) = FunctionAddress[~String] : -# 1637| v1637_3(void) = Call[~String] : func:r1637_2, this:r1637_1 -# 1637| mu1637_4(unknown) = ^CallSideEffect : ~m? -# 1637| v1637_5(void) = ^IndirectReadSideEffect[-1] : &:r1637_1, ~m? -# 1637| mu1637_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1637_1 -# 1637| r1637_7(bool) = Constant[0] : -# 1637| v1637_8(void) = ConditionalBranch : r1637_7 +# 35| Block 539 +# 35| r35_7547(glval) = VariableAddress[x539] : +# 35| mu35_7548(String) = Uninitialized[x539] : &:r35_7547 +# 35| r35_7549(glval) = FunctionAddress[String] : +# 35| v35_7550(void) = Call[String] : func:r35_7549, this:r35_7547 +# 35| mu35_7551(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7547 +# 35| r35_7553(glval) = VariableAddress[x539] : +# 35| r35_7554(glval) = FunctionAddress[~String] : +# 35| v35_7555(void) = Call[~String] : func:r35_7554, this:r35_7553 +# 35| mu35_7556(unknown) = ^CallSideEffect : ~m? +# 35| v35_7557(void) = ^IndirectReadSideEffect[-1] : &:r35_7553, ~m? +# 35| mu35_7558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7553 +# 35| r35_7559(bool) = Constant[0] : +# 35| v35_7560(void) = ConditionalBranch : r35_7559 #-----| False -> Block 540 #-----| True -> Block 1026 -# 1639| Block 540 -# 1639| r1639_1(glval) = VariableAddress[x540] : -# 1639| mu1639_2(String) = Uninitialized[x540] : &:r1639_1 -# 1639| r1639_3(glval) = FunctionAddress[String] : -# 1639| v1639_4(void) = Call[String] : func:r1639_3, this:r1639_1 -# 1639| mu1639_5(unknown) = ^CallSideEffect : ~m? -# 1639| mu1639_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1639_1 -# 1640| r1640_1(glval) = VariableAddress[x540] : -# 1640| r1640_2(glval) = FunctionAddress[~String] : -# 1640| v1640_3(void) = Call[~String] : func:r1640_2, this:r1640_1 -# 1640| mu1640_4(unknown) = ^CallSideEffect : ~m? -# 1640| v1640_5(void) = ^IndirectReadSideEffect[-1] : &:r1640_1, ~m? -# 1640| mu1640_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1640_1 -# 1640| r1640_7(bool) = Constant[0] : -# 1640| v1640_8(void) = ConditionalBranch : r1640_7 +# 35| Block 540 +# 35| r35_7561(glval) = VariableAddress[x540] : +# 35| mu35_7562(String) = Uninitialized[x540] : &:r35_7561 +# 35| r35_7563(glval) = FunctionAddress[String] : +# 35| v35_7564(void) = Call[String] : func:r35_7563, this:r35_7561 +# 35| mu35_7565(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7561 +# 35| r35_7567(glval) = VariableAddress[x540] : +# 35| r35_7568(glval) = FunctionAddress[~String] : +# 35| v35_7569(void) = Call[~String] : func:r35_7568, this:r35_7567 +# 35| mu35_7570(unknown) = ^CallSideEffect : ~m? +# 35| v35_7571(void) = ^IndirectReadSideEffect[-1] : &:r35_7567, ~m? +# 35| mu35_7572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7567 +# 35| r35_7573(bool) = Constant[0] : +# 35| v35_7574(void) = ConditionalBranch : r35_7573 #-----| False -> Block 541 #-----| True -> Block 1026 -# 1642| Block 541 -# 1642| r1642_1(glval) = VariableAddress[x541] : -# 1642| mu1642_2(String) = Uninitialized[x541] : &:r1642_1 -# 1642| r1642_3(glval) = FunctionAddress[String] : -# 1642| v1642_4(void) = Call[String] : func:r1642_3, this:r1642_1 -# 1642| mu1642_5(unknown) = ^CallSideEffect : ~m? -# 1642| mu1642_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1642_1 -# 1643| r1643_1(glval) = VariableAddress[x541] : -# 1643| r1643_2(glval) = FunctionAddress[~String] : -# 1643| v1643_3(void) = Call[~String] : func:r1643_2, this:r1643_1 -# 1643| mu1643_4(unknown) = ^CallSideEffect : ~m? -# 1643| v1643_5(void) = ^IndirectReadSideEffect[-1] : &:r1643_1, ~m? -# 1643| mu1643_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1643_1 -# 1643| r1643_7(bool) = Constant[0] : -# 1643| v1643_8(void) = ConditionalBranch : r1643_7 +# 35| Block 541 +# 35| r35_7575(glval) = VariableAddress[x541] : +# 35| mu35_7576(String) = Uninitialized[x541] : &:r35_7575 +# 35| r35_7577(glval) = FunctionAddress[String] : +# 35| v35_7578(void) = Call[String] : func:r35_7577, this:r35_7575 +# 35| mu35_7579(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7575 +# 35| r35_7581(glval) = VariableAddress[x541] : +# 35| r35_7582(glval) = FunctionAddress[~String] : +# 35| v35_7583(void) = Call[~String] : func:r35_7582, this:r35_7581 +# 35| mu35_7584(unknown) = ^CallSideEffect : ~m? +# 35| v35_7585(void) = ^IndirectReadSideEffect[-1] : &:r35_7581, ~m? +# 35| mu35_7586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7581 +# 35| r35_7587(bool) = Constant[0] : +# 35| v35_7588(void) = ConditionalBranch : r35_7587 #-----| False -> Block 542 #-----| True -> Block 1026 -# 1645| Block 542 -# 1645| r1645_1(glval) = VariableAddress[x542] : -# 1645| mu1645_2(String) = Uninitialized[x542] : &:r1645_1 -# 1645| r1645_3(glval) = FunctionAddress[String] : -# 1645| v1645_4(void) = Call[String] : func:r1645_3, this:r1645_1 -# 1645| mu1645_5(unknown) = ^CallSideEffect : ~m? -# 1645| mu1645_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1645_1 -# 1646| r1646_1(glval) = VariableAddress[x542] : -# 1646| r1646_2(glval) = FunctionAddress[~String] : -# 1646| v1646_3(void) = Call[~String] : func:r1646_2, this:r1646_1 -# 1646| mu1646_4(unknown) = ^CallSideEffect : ~m? -# 1646| v1646_5(void) = ^IndirectReadSideEffect[-1] : &:r1646_1, ~m? -# 1646| mu1646_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1646| r1646_7(bool) = Constant[0] : -# 1646| v1646_8(void) = ConditionalBranch : r1646_7 +# 35| Block 542 +# 35| r35_7589(glval) = VariableAddress[x542] : +# 35| mu35_7590(String) = Uninitialized[x542] : &:r35_7589 +# 35| r35_7591(glval) = FunctionAddress[String] : +# 35| v35_7592(void) = Call[String] : func:r35_7591, this:r35_7589 +# 35| mu35_7593(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7589 +# 35| r35_7595(glval) = VariableAddress[x542] : +# 35| r35_7596(glval) = FunctionAddress[~String] : +# 35| v35_7597(void) = Call[~String] : func:r35_7596, this:r35_7595 +# 35| mu35_7598(unknown) = ^CallSideEffect : ~m? +# 35| v35_7599(void) = ^IndirectReadSideEffect[-1] : &:r35_7595, ~m? +# 35| mu35_7600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7595 +# 35| r35_7601(bool) = Constant[0] : +# 35| v35_7602(void) = ConditionalBranch : r35_7601 #-----| False -> Block 543 #-----| True -> Block 1026 -# 1648| Block 543 -# 1648| r1648_1(glval) = VariableAddress[x543] : -# 1648| mu1648_2(String) = Uninitialized[x543] : &:r1648_1 -# 1648| r1648_3(glval) = FunctionAddress[String] : -# 1648| v1648_4(void) = Call[String] : func:r1648_3, this:r1648_1 -# 1648| mu1648_5(unknown) = ^CallSideEffect : ~m? -# 1648| mu1648_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 -# 1649| r1649_1(glval) = VariableAddress[x543] : -# 1649| r1649_2(glval) = FunctionAddress[~String] : -# 1649| v1649_3(void) = Call[~String] : func:r1649_2, this:r1649_1 -# 1649| mu1649_4(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_5(void) = ^IndirectReadSideEffect[-1] : &:r1649_1, ~m? -# 1649| mu1649_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1649_1 -# 1649| r1649_7(bool) = Constant[0] : -# 1649| v1649_8(void) = ConditionalBranch : r1649_7 +# 35| Block 543 +# 35| r35_7603(glval) = VariableAddress[x543] : +# 35| mu35_7604(String) = Uninitialized[x543] : &:r35_7603 +# 35| r35_7605(glval) = FunctionAddress[String] : +# 35| v35_7606(void) = Call[String] : func:r35_7605, this:r35_7603 +# 35| mu35_7607(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7603 +# 35| r35_7609(glval) = VariableAddress[x543] : +# 35| r35_7610(glval) = FunctionAddress[~String] : +# 35| v35_7611(void) = Call[~String] : func:r35_7610, this:r35_7609 +# 35| mu35_7612(unknown) = ^CallSideEffect : ~m? +# 35| v35_7613(void) = ^IndirectReadSideEffect[-1] : &:r35_7609, ~m? +# 35| mu35_7614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7609 +# 35| r35_7615(bool) = Constant[0] : +# 35| v35_7616(void) = ConditionalBranch : r35_7615 #-----| False -> Block 544 #-----| True -> Block 1026 -# 1651| Block 544 -# 1651| r1651_1(glval) = VariableAddress[x544] : -# 1651| mu1651_2(String) = Uninitialized[x544] : &:r1651_1 -# 1651| r1651_3(glval) = FunctionAddress[String] : -# 1651| v1651_4(void) = Call[String] : func:r1651_3, this:r1651_1 -# 1651| mu1651_5(unknown) = ^CallSideEffect : ~m? -# 1651| mu1651_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1651_1 -# 1652| r1652_1(glval) = VariableAddress[x544] : -# 1652| r1652_2(glval) = FunctionAddress[~String] : -# 1652| v1652_3(void) = Call[~String] : func:r1652_2, this:r1652_1 -# 1652| mu1652_4(unknown) = ^CallSideEffect : ~m? -# 1652| v1652_5(void) = ^IndirectReadSideEffect[-1] : &:r1652_1, ~m? -# 1652| mu1652_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1652_1 -# 1652| r1652_7(bool) = Constant[0] : -# 1652| v1652_8(void) = ConditionalBranch : r1652_7 +# 35| Block 544 +# 35| r35_7617(glval) = VariableAddress[x544] : +# 35| mu35_7618(String) = Uninitialized[x544] : &:r35_7617 +# 35| r35_7619(glval) = FunctionAddress[String] : +# 35| v35_7620(void) = Call[String] : func:r35_7619, this:r35_7617 +# 35| mu35_7621(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7617 +# 35| r35_7623(glval) = VariableAddress[x544] : +# 35| r35_7624(glval) = FunctionAddress[~String] : +# 35| v35_7625(void) = Call[~String] : func:r35_7624, this:r35_7623 +# 35| mu35_7626(unknown) = ^CallSideEffect : ~m? +# 35| v35_7627(void) = ^IndirectReadSideEffect[-1] : &:r35_7623, ~m? +# 35| mu35_7628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7623 +# 35| r35_7629(bool) = Constant[0] : +# 35| v35_7630(void) = ConditionalBranch : r35_7629 #-----| False -> Block 545 #-----| True -> Block 1026 -# 1654| Block 545 -# 1654| r1654_1(glval) = VariableAddress[x545] : -# 1654| mu1654_2(String) = Uninitialized[x545] : &:r1654_1 -# 1654| r1654_3(glval) = FunctionAddress[String] : -# 1654| v1654_4(void) = Call[String] : func:r1654_3, this:r1654_1 -# 1654| mu1654_5(unknown) = ^CallSideEffect : ~m? -# 1654| mu1654_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1654_1 -# 1655| r1655_1(glval) = VariableAddress[x545] : -# 1655| r1655_2(glval) = FunctionAddress[~String] : -# 1655| v1655_3(void) = Call[~String] : func:r1655_2, this:r1655_1 -# 1655| mu1655_4(unknown) = ^CallSideEffect : ~m? -# 1655| v1655_5(void) = ^IndirectReadSideEffect[-1] : &:r1655_1, ~m? -# 1655| mu1655_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1655_1 -# 1655| r1655_7(bool) = Constant[0] : -# 1655| v1655_8(void) = ConditionalBranch : r1655_7 +# 35| Block 545 +# 35| r35_7631(glval) = VariableAddress[x545] : +# 35| mu35_7632(String) = Uninitialized[x545] : &:r35_7631 +# 35| r35_7633(glval) = FunctionAddress[String] : +# 35| v35_7634(void) = Call[String] : func:r35_7633, this:r35_7631 +# 35| mu35_7635(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7631 +# 35| r35_7637(glval) = VariableAddress[x545] : +# 35| r35_7638(glval) = FunctionAddress[~String] : +# 35| v35_7639(void) = Call[~String] : func:r35_7638, this:r35_7637 +# 35| mu35_7640(unknown) = ^CallSideEffect : ~m? +# 35| v35_7641(void) = ^IndirectReadSideEffect[-1] : &:r35_7637, ~m? +# 35| mu35_7642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7637 +# 35| r35_7643(bool) = Constant[0] : +# 35| v35_7644(void) = ConditionalBranch : r35_7643 #-----| False -> Block 546 #-----| True -> Block 1026 -# 1657| Block 546 -# 1657| r1657_1(glval) = VariableAddress[x546] : -# 1657| mu1657_2(String) = Uninitialized[x546] : &:r1657_1 -# 1657| r1657_3(glval) = FunctionAddress[String] : -# 1657| v1657_4(void) = Call[String] : func:r1657_3, this:r1657_1 -# 1657| mu1657_5(unknown) = ^CallSideEffect : ~m? -# 1657| mu1657_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1657_1 -# 1658| r1658_1(glval) = VariableAddress[x546] : -# 1658| r1658_2(glval) = FunctionAddress[~String] : -# 1658| v1658_3(void) = Call[~String] : func:r1658_2, this:r1658_1 -# 1658| mu1658_4(unknown) = ^CallSideEffect : ~m? -# 1658| v1658_5(void) = ^IndirectReadSideEffect[-1] : &:r1658_1, ~m? -# 1658| mu1658_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1658_1 -# 1658| r1658_7(bool) = Constant[0] : -# 1658| v1658_8(void) = ConditionalBranch : r1658_7 +# 35| Block 546 +# 35| r35_7645(glval) = VariableAddress[x546] : +# 35| mu35_7646(String) = Uninitialized[x546] : &:r35_7645 +# 35| r35_7647(glval) = FunctionAddress[String] : +# 35| v35_7648(void) = Call[String] : func:r35_7647, this:r35_7645 +# 35| mu35_7649(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7645 +# 35| r35_7651(glval) = VariableAddress[x546] : +# 35| r35_7652(glval) = FunctionAddress[~String] : +# 35| v35_7653(void) = Call[~String] : func:r35_7652, this:r35_7651 +# 35| mu35_7654(unknown) = ^CallSideEffect : ~m? +# 35| v35_7655(void) = ^IndirectReadSideEffect[-1] : &:r35_7651, ~m? +# 35| mu35_7656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7651 +# 35| r35_7657(bool) = Constant[0] : +# 35| v35_7658(void) = ConditionalBranch : r35_7657 #-----| False -> Block 547 #-----| True -> Block 1026 -# 1660| Block 547 -# 1660| r1660_1(glval) = VariableAddress[x547] : -# 1660| mu1660_2(String) = Uninitialized[x547] : &:r1660_1 -# 1660| r1660_3(glval) = FunctionAddress[String] : -# 1660| v1660_4(void) = Call[String] : func:r1660_3, this:r1660_1 -# 1660| mu1660_5(unknown) = ^CallSideEffect : ~m? -# 1660| mu1660_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1660_1 -# 1661| r1661_1(glval) = VariableAddress[x547] : -# 1661| r1661_2(glval) = FunctionAddress[~String] : -# 1661| v1661_3(void) = Call[~String] : func:r1661_2, this:r1661_1 -# 1661| mu1661_4(unknown) = ^CallSideEffect : ~m? -# 1661| v1661_5(void) = ^IndirectReadSideEffect[-1] : &:r1661_1, ~m? -# 1661| mu1661_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1661_1 -# 1661| r1661_7(bool) = Constant[0] : -# 1661| v1661_8(void) = ConditionalBranch : r1661_7 +# 35| Block 547 +# 35| r35_7659(glval) = VariableAddress[x547] : +# 35| mu35_7660(String) = Uninitialized[x547] : &:r35_7659 +# 35| r35_7661(glval) = FunctionAddress[String] : +# 35| v35_7662(void) = Call[String] : func:r35_7661, this:r35_7659 +# 35| mu35_7663(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7659 +# 35| r35_7665(glval) = VariableAddress[x547] : +# 35| r35_7666(glval) = FunctionAddress[~String] : +# 35| v35_7667(void) = Call[~String] : func:r35_7666, this:r35_7665 +# 35| mu35_7668(unknown) = ^CallSideEffect : ~m? +# 35| v35_7669(void) = ^IndirectReadSideEffect[-1] : &:r35_7665, ~m? +# 35| mu35_7670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7665 +# 35| r35_7671(bool) = Constant[0] : +# 35| v35_7672(void) = ConditionalBranch : r35_7671 #-----| False -> Block 548 #-----| True -> Block 1026 -# 1663| Block 548 -# 1663| r1663_1(glval) = VariableAddress[x548] : -# 1663| mu1663_2(String) = Uninitialized[x548] : &:r1663_1 -# 1663| r1663_3(glval) = FunctionAddress[String] : -# 1663| v1663_4(void) = Call[String] : func:r1663_3, this:r1663_1 -# 1663| mu1663_5(unknown) = ^CallSideEffect : ~m? -# 1663| mu1663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1663_1 -# 1664| r1664_1(glval) = VariableAddress[x548] : -# 1664| r1664_2(glval) = FunctionAddress[~String] : -# 1664| v1664_3(void) = Call[~String] : func:r1664_2, this:r1664_1 -# 1664| mu1664_4(unknown) = ^CallSideEffect : ~m? -# 1664| v1664_5(void) = ^IndirectReadSideEffect[-1] : &:r1664_1, ~m? -# 1664| mu1664_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1664_1 -# 1664| r1664_7(bool) = Constant[0] : -# 1664| v1664_8(void) = ConditionalBranch : r1664_7 +# 35| Block 548 +# 35| r35_7673(glval) = VariableAddress[x548] : +# 35| mu35_7674(String) = Uninitialized[x548] : &:r35_7673 +# 35| r35_7675(glval) = FunctionAddress[String] : +# 35| v35_7676(void) = Call[String] : func:r35_7675, this:r35_7673 +# 35| mu35_7677(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7673 +# 35| r35_7679(glval) = VariableAddress[x548] : +# 35| r35_7680(glval) = FunctionAddress[~String] : +# 35| v35_7681(void) = Call[~String] : func:r35_7680, this:r35_7679 +# 35| mu35_7682(unknown) = ^CallSideEffect : ~m? +# 35| v35_7683(void) = ^IndirectReadSideEffect[-1] : &:r35_7679, ~m? +# 35| mu35_7684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7679 +# 35| r35_7685(bool) = Constant[0] : +# 35| v35_7686(void) = ConditionalBranch : r35_7685 #-----| False -> Block 549 #-----| True -> Block 1026 -# 1666| Block 549 -# 1666| r1666_1(glval) = VariableAddress[x549] : -# 1666| mu1666_2(String) = Uninitialized[x549] : &:r1666_1 -# 1666| r1666_3(glval) = FunctionAddress[String] : -# 1666| v1666_4(void) = Call[String] : func:r1666_3, this:r1666_1 -# 1666| mu1666_5(unknown) = ^CallSideEffect : ~m? -# 1666| mu1666_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1666_1 -# 1667| r1667_1(glval) = VariableAddress[x549] : -# 1667| r1667_2(glval) = FunctionAddress[~String] : -# 1667| v1667_3(void) = Call[~String] : func:r1667_2, this:r1667_1 -# 1667| mu1667_4(unknown) = ^CallSideEffect : ~m? -# 1667| v1667_5(void) = ^IndirectReadSideEffect[-1] : &:r1667_1, ~m? -# 1667| mu1667_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1667_1 -# 1667| r1667_7(bool) = Constant[0] : -# 1667| v1667_8(void) = ConditionalBranch : r1667_7 +# 35| Block 549 +# 35| r35_7687(glval) = VariableAddress[x549] : +# 35| mu35_7688(String) = Uninitialized[x549] : &:r35_7687 +# 35| r35_7689(glval) = FunctionAddress[String] : +# 35| v35_7690(void) = Call[String] : func:r35_7689, this:r35_7687 +# 35| mu35_7691(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7687 +# 35| r35_7693(glval) = VariableAddress[x549] : +# 35| r35_7694(glval) = FunctionAddress[~String] : +# 35| v35_7695(void) = Call[~String] : func:r35_7694, this:r35_7693 +# 35| mu35_7696(unknown) = ^CallSideEffect : ~m? +# 35| v35_7697(void) = ^IndirectReadSideEffect[-1] : &:r35_7693, ~m? +# 35| mu35_7698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7693 +# 35| r35_7699(bool) = Constant[0] : +# 35| v35_7700(void) = ConditionalBranch : r35_7699 #-----| False -> Block 550 #-----| True -> Block 1026 -# 1669| Block 550 -# 1669| r1669_1(glval) = VariableAddress[x550] : -# 1669| mu1669_2(String) = Uninitialized[x550] : &:r1669_1 -# 1669| r1669_3(glval) = FunctionAddress[String] : -# 1669| v1669_4(void) = Call[String] : func:r1669_3, this:r1669_1 -# 1669| mu1669_5(unknown) = ^CallSideEffect : ~m? -# 1669| mu1669_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1669_1 -# 1670| r1670_1(glval) = VariableAddress[x550] : -# 1670| r1670_2(glval) = FunctionAddress[~String] : -# 1670| v1670_3(void) = Call[~String] : func:r1670_2, this:r1670_1 -# 1670| mu1670_4(unknown) = ^CallSideEffect : ~m? -# 1670| v1670_5(void) = ^IndirectReadSideEffect[-1] : &:r1670_1, ~m? -# 1670| mu1670_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1670_1 -# 1670| r1670_7(bool) = Constant[0] : -# 1670| v1670_8(void) = ConditionalBranch : r1670_7 +# 35| Block 550 +# 35| r35_7701(glval) = VariableAddress[x550] : +# 35| mu35_7702(String) = Uninitialized[x550] : &:r35_7701 +# 35| r35_7703(glval) = FunctionAddress[String] : +# 35| v35_7704(void) = Call[String] : func:r35_7703, this:r35_7701 +# 35| mu35_7705(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7701 +# 35| r35_7707(glval) = VariableAddress[x550] : +# 35| r35_7708(glval) = FunctionAddress[~String] : +# 35| v35_7709(void) = Call[~String] : func:r35_7708, this:r35_7707 +# 35| mu35_7710(unknown) = ^CallSideEffect : ~m? +# 35| v35_7711(void) = ^IndirectReadSideEffect[-1] : &:r35_7707, ~m? +# 35| mu35_7712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7707 +# 35| r35_7713(bool) = Constant[0] : +# 35| v35_7714(void) = ConditionalBranch : r35_7713 #-----| False -> Block 551 #-----| True -> Block 1026 -# 1672| Block 551 -# 1672| r1672_1(glval) = VariableAddress[x551] : -# 1672| mu1672_2(String) = Uninitialized[x551] : &:r1672_1 -# 1672| r1672_3(glval) = FunctionAddress[String] : -# 1672| v1672_4(void) = Call[String] : func:r1672_3, this:r1672_1 -# 1672| mu1672_5(unknown) = ^CallSideEffect : ~m? -# 1672| mu1672_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1672_1 -# 1673| r1673_1(glval) = VariableAddress[x551] : -# 1673| r1673_2(glval) = FunctionAddress[~String] : -# 1673| v1673_3(void) = Call[~String] : func:r1673_2, this:r1673_1 -# 1673| mu1673_4(unknown) = ^CallSideEffect : ~m? -# 1673| v1673_5(void) = ^IndirectReadSideEffect[-1] : &:r1673_1, ~m? -# 1673| mu1673_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1673_1 -# 1673| r1673_7(bool) = Constant[0] : -# 1673| v1673_8(void) = ConditionalBranch : r1673_7 +# 35| Block 551 +# 35| r35_7715(glval) = VariableAddress[x551] : +# 35| mu35_7716(String) = Uninitialized[x551] : &:r35_7715 +# 35| r35_7717(glval) = FunctionAddress[String] : +# 35| v35_7718(void) = Call[String] : func:r35_7717, this:r35_7715 +# 35| mu35_7719(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7715 +# 35| r35_7721(glval) = VariableAddress[x551] : +# 35| r35_7722(glval) = FunctionAddress[~String] : +# 35| v35_7723(void) = Call[~String] : func:r35_7722, this:r35_7721 +# 35| mu35_7724(unknown) = ^CallSideEffect : ~m? +# 35| v35_7725(void) = ^IndirectReadSideEffect[-1] : &:r35_7721, ~m? +# 35| mu35_7726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7721 +# 35| r35_7727(bool) = Constant[0] : +# 35| v35_7728(void) = ConditionalBranch : r35_7727 #-----| False -> Block 552 #-----| True -> Block 1026 -# 1675| Block 552 -# 1675| r1675_1(glval) = VariableAddress[x552] : -# 1675| mu1675_2(String) = Uninitialized[x552] : &:r1675_1 -# 1675| r1675_3(glval) = FunctionAddress[String] : -# 1675| v1675_4(void) = Call[String] : func:r1675_3, this:r1675_1 -# 1675| mu1675_5(unknown) = ^CallSideEffect : ~m? -# 1675| mu1675_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1675_1 -# 1676| r1676_1(glval) = VariableAddress[x552] : -# 1676| r1676_2(glval) = FunctionAddress[~String] : -# 1676| v1676_3(void) = Call[~String] : func:r1676_2, this:r1676_1 -# 1676| mu1676_4(unknown) = ^CallSideEffect : ~m? -# 1676| v1676_5(void) = ^IndirectReadSideEffect[-1] : &:r1676_1, ~m? -# 1676| mu1676_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1676_1 -# 1676| r1676_7(bool) = Constant[0] : -# 1676| v1676_8(void) = ConditionalBranch : r1676_7 +# 35| Block 552 +# 35| r35_7729(glval) = VariableAddress[x552] : +# 35| mu35_7730(String) = Uninitialized[x552] : &:r35_7729 +# 35| r35_7731(glval) = FunctionAddress[String] : +# 35| v35_7732(void) = Call[String] : func:r35_7731, this:r35_7729 +# 35| mu35_7733(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7729 +# 35| r35_7735(glval) = VariableAddress[x552] : +# 35| r35_7736(glval) = FunctionAddress[~String] : +# 35| v35_7737(void) = Call[~String] : func:r35_7736, this:r35_7735 +# 35| mu35_7738(unknown) = ^CallSideEffect : ~m? +# 35| v35_7739(void) = ^IndirectReadSideEffect[-1] : &:r35_7735, ~m? +# 35| mu35_7740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7735 +# 35| r35_7741(bool) = Constant[0] : +# 35| v35_7742(void) = ConditionalBranch : r35_7741 #-----| False -> Block 553 #-----| True -> Block 1026 -# 1678| Block 553 -# 1678| r1678_1(glval) = VariableAddress[x553] : -# 1678| mu1678_2(String) = Uninitialized[x553] : &:r1678_1 -# 1678| r1678_3(glval) = FunctionAddress[String] : -# 1678| v1678_4(void) = Call[String] : func:r1678_3, this:r1678_1 -# 1678| mu1678_5(unknown) = ^CallSideEffect : ~m? -# 1678| mu1678_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1678_1 -# 1679| r1679_1(glval) = VariableAddress[x553] : -# 1679| r1679_2(glval) = FunctionAddress[~String] : -# 1679| v1679_3(void) = Call[~String] : func:r1679_2, this:r1679_1 -# 1679| mu1679_4(unknown) = ^CallSideEffect : ~m? -# 1679| v1679_5(void) = ^IndirectReadSideEffect[-1] : &:r1679_1, ~m? -# 1679| mu1679_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1679_1 -# 1679| r1679_7(bool) = Constant[0] : -# 1679| v1679_8(void) = ConditionalBranch : r1679_7 +# 35| Block 553 +# 35| r35_7743(glval) = VariableAddress[x553] : +# 35| mu35_7744(String) = Uninitialized[x553] : &:r35_7743 +# 35| r35_7745(glval) = FunctionAddress[String] : +# 35| v35_7746(void) = Call[String] : func:r35_7745, this:r35_7743 +# 35| mu35_7747(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7743 +# 35| r35_7749(glval) = VariableAddress[x553] : +# 35| r35_7750(glval) = FunctionAddress[~String] : +# 35| v35_7751(void) = Call[~String] : func:r35_7750, this:r35_7749 +# 35| mu35_7752(unknown) = ^CallSideEffect : ~m? +# 35| v35_7753(void) = ^IndirectReadSideEffect[-1] : &:r35_7749, ~m? +# 35| mu35_7754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7749 +# 35| r35_7755(bool) = Constant[0] : +# 35| v35_7756(void) = ConditionalBranch : r35_7755 #-----| False -> Block 554 #-----| True -> Block 1026 -# 1681| Block 554 -# 1681| r1681_1(glval) = VariableAddress[x554] : -# 1681| mu1681_2(String) = Uninitialized[x554] : &:r1681_1 -# 1681| r1681_3(glval) = FunctionAddress[String] : -# 1681| v1681_4(void) = Call[String] : func:r1681_3, this:r1681_1 -# 1681| mu1681_5(unknown) = ^CallSideEffect : ~m? -# 1681| mu1681_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1681_1 -# 1682| r1682_1(glval) = VariableAddress[x554] : -# 1682| r1682_2(glval) = FunctionAddress[~String] : -# 1682| v1682_3(void) = Call[~String] : func:r1682_2, this:r1682_1 -# 1682| mu1682_4(unknown) = ^CallSideEffect : ~m? -# 1682| v1682_5(void) = ^IndirectReadSideEffect[-1] : &:r1682_1, ~m? -# 1682| mu1682_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1682_1 -# 1682| r1682_7(bool) = Constant[0] : -# 1682| v1682_8(void) = ConditionalBranch : r1682_7 +# 35| Block 554 +# 35| r35_7757(glval) = VariableAddress[x554] : +# 35| mu35_7758(String) = Uninitialized[x554] : &:r35_7757 +# 35| r35_7759(glval) = FunctionAddress[String] : +# 35| v35_7760(void) = Call[String] : func:r35_7759, this:r35_7757 +# 35| mu35_7761(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7757 +# 35| r35_7763(glval) = VariableAddress[x554] : +# 35| r35_7764(glval) = FunctionAddress[~String] : +# 35| v35_7765(void) = Call[~String] : func:r35_7764, this:r35_7763 +# 35| mu35_7766(unknown) = ^CallSideEffect : ~m? +# 35| v35_7767(void) = ^IndirectReadSideEffect[-1] : &:r35_7763, ~m? +# 35| mu35_7768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7763 +# 35| r35_7769(bool) = Constant[0] : +# 35| v35_7770(void) = ConditionalBranch : r35_7769 #-----| False -> Block 555 #-----| True -> Block 1026 -# 1684| Block 555 -# 1684| r1684_1(glval) = VariableAddress[x555] : -# 1684| mu1684_2(String) = Uninitialized[x555] : &:r1684_1 -# 1684| r1684_3(glval) = FunctionAddress[String] : -# 1684| v1684_4(void) = Call[String] : func:r1684_3, this:r1684_1 -# 1684| mu1684_5(unknown) = ^CallSideEffect : ~m? -# 1684| mu1684_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1684_1 -# 1685| r1685_1(glval) = VariableAddress[x555] : -# 1685| r1685_2(glval) = FunctionAddress[~String] : -# 1685| v1685_3(void) = Call[~String] : func:r1685_2, this:r1685_1 -# 1685| mu1685_4(unknown) = ^CallSideEffect : ~m? -# 1685| v1685_5(void) = ^IndirectReadSideEffect[-1] : &:r1685_1, ~m? -# 1685| mu1685_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1685_1 -# 1685| r1685_7(bool) = Constant[0] : -# 1685| v1685_8(void) = ConditionalBranch : r1685_7 +# 35| Block 555 +# 35| r35_7771(glval) = VariableAddress[x555] : +# 35| mu35_7772(String) = Uninitialized[x555] : &:r35_7771 +# 35| r35_7773(glval) = FunctionAddress[String] : +# 35| v35_7774(void) = Call[String] : func:r35_7773, this:r35_7771 +# 35| mu35_7775(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7771 +# 35| r35_7777(glval) = VariableAddress[x555] : +# 35| r35_7778(glval) = FunctionAddress[~String] : +# 35| v35_7779(void) = Call[~String] : func:r35_7778, this:r35_7777 +# 35| mu35_7780(unknown) = ^CallSideEffect : ~m? +# 35| v35_7781(void) = ^IndirectReadSideEffect[-1] : &:r35_7777, ~m? +# 35| mu35_7782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7777 +# 35| r35_7783(bool) = Constant[0] : +# 35| v35_7784(void) = ConditionalBranch : r35_7783 #-----| False -> Block 556 #-----| True -> Block 1026 -# 1687| Block 556 -# 1687| r1687_1(glval) = VariableAddress[x556] : -# 1687| mu1687_2(String) = Uninitialized[x556] : &:r1687_1 -# 1687| r1687_3(glval) = FunctionAddress[String] : -# 1687| v1687_4(void) = Call[String] : func:r1687_3, this:r1687_1 -# 1687| mu1687_5(unknown) = ^CallSideEffect : ~m? -# 1687| mu1687_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1687_1 -# 1688| r1688_1(glval) = VariableAddress[x556] : -# 1688| r1688_2(glval) = FunctionAddress[~String] : -# 1688| v1688_3(void) = Call[~String] : func:r1688_2, this:r1688_1 -# 1688| mu1688_4(unknown) = ^CallSideEffect : ~m? -# 1688| v1688_5(void) = ^IndirectReadSideEffect[-1] : &:r1688_1, ~m? -# 1688| mu1688_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 -# 1688| r1688_7(bool) = Constant[0] : -# 1688| v1688_8(void) = ConditionalBranch : r1688_7 +# 35| Block 556 +# 35| r35_7785(glval) = VariableAddress[x556] : +# 35| mu35_7786(String) = Uninitialized[x556] : &:r35_7785 +# 35| r35_7787(glval) = FunctionAddress[String] : +# 35| v35_7788(void) = Call[String] : func:r35_7787, this:r35_7785 +# 35| mu35_7789(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7785 +# 35| r35_7791(glval) = VariableAddress[x556] : +# 35| r35_7792(glval) = FunctionAddress[~String] : +# 35| v35_7793(void) = Call[~String] : func:r35_7792, this:r35_7791 +# 35| mu35_7794(unknown) = ^CallSideEffect : ~m? +# 35| v35_7795(void) = ^IndirectReadSideEffect[-1] : &:r35_7791, ~m? +# 35| mu35_7796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7791 +# 35| r35_7797(bool) = Constant[0] : +# 35| v35_7798(void) = ConditionalBranch : r35_7797 #-----| False -> Block 557 #-----| True -> Block 1026 -# 1690| Block 557 -# 1690| r1690_1(glval) = VariableAddress[x557] : -# 1690| mu1690_2(String) = Uninitialized[x557] : &:r1690_1 -# 1690| r1690_3(glval) = FunctionAddress[String] : -# 1690| v1690_4(void) = Call[String] : func:r1690_3, this:r1690_1 -# 1690| mu1690_5(unknown) = ^CallSideEffect : ~m? -# 1690| mu1690_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1690_1 -# 1691| r1691_1(glval) = VariableAddress[x557] : -# 1691| r1691_2(glval) = FunctionAddress[~String] : -# 1691| v1691_3(void) = Call[~String] : func:r1691_2, this:r1691_1 -# 1691| mu1691_4(unknown) = ^CallSideEffect : ~m? -# 1691| v1691_5(void) = ^IndirectReadSideEffect[-1] : &:r1691_1, ~m? -# 1691| mu1691_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1691_1 -# 1691| r1691_7(bool) = Constant[0] : -# 1691| v1691_8(void) = ConditionalBranch : r1691_7 +# 35| Block 557 +# 35| r35_7799(glval) = VariableAddress[x557] : +# 35| mu35_7800(String) = Uninitialized[x557] : &:r35_7799 +# 35| r35_7801(glval) = FunctionAddress[String] : +# 35| v35_7802(void) = Call[String] : func:r35_7801, this:r35_7799 +# 35| mu35_7803(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7799 +# 35| r35_7805(glval) = VariableAddress[x557] : +# 35| r35_7806(glval) = FunctionAddress[~String] : +# 35| v35_7807(void) = Call[~String] : func:r35_7806, this:r35_7805 +# 35| mu35_7808(unknown) = ^CallSideEffect : ~m? +# 35| v35_7809(void) = ^IndirectReadSideEffect[-1] : &:r35_7805, ~m? +# 35| mu35_7810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7805 +# 35| r35_7811(bool) = Constant[0] : +# 35| v35_7812(void) = ConditionalBranch : r35_7811 #-----| False -> Block 558 #-----| True -> Block 1026 -# 1693| Block 558 -# 1693| r1693_1(glval) = VariableAddress[x558] : -# 1693| mu1693_2(String) = Uninitialized[x558] : &:r1693_1 -# 1693| r1693_3(glval) = FunctionAddress[String] : -# 1693| v1693_4(void) = Call[String] : func:r1693_3, this:r1693_1 -# 1693| mu1693_5(unknown) = ^CallSideEffect : ~m? -# 1693| mu1693_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1693_1 -# 1694| r1694_1(glval) = VariableAddress[x558] : -# 1694| r1694_2(glval) = FunctionAddress[~String] : -# 1694| v1694_3(void) = Call[~String] : func:r1694_2, this:r1694_1 -# 1694| mu1694_4(unknown) = ^CallSideEffect : ~m? -# 1694| v1694_5(void) = ^IndirectReadSideEffect[-1] : &:r1694_1, ~m? -# 1694| mu1694_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1694_1 -# 1694| r1694_7(bool) = Constant[0] : -# 1694| v1694_8(void) = ConditionalBranch : r1694_7 +# 35| Block 558 +# 35| r35_7813(glval) = VariableAddress[x558] : +# 35| mu35_7814(String) = Uninitialized[x558] : &:r35_7813 +# 35| r35_7815(glval) = FunctionAddress[String] : +# 35| v35_7816(void) = Call[String] : func:r35_7815, this:r35_7813 +# 35| mu35_7817(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7813 +# 35| r35_7819(glval) = VariableAddress[x558] : +# 35| r35_7820(glval) = FunctionAddress[~String] : +# 35| v35_7821(void) = Call[~String] : func:r35_7820, this:r35_7819 +# 35| mu35_7822(unknown) = ^CallSideEffect : ~m? +# 35| v35_7823(void) = ^IndirectReadSideEffect[-1] : &:r35_7819, ~m? +# 35| mu35_7824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7819 +# 35| r35_7825(bool) = Constant[0] : +# 35| v35_7826(void) = ConditionalBranch : r35_7825 #-----| False -> Block 559 #-----| True -> Block 1026 -# 1696| Block 559 -# 1696| r1696_1(glval) = VariableAddress[x559] : -# 1696| mu1696_2(String) = Uninitialized[x559] : &:r1696_1 -# 1696| r1696_3(glval) = FunctionAddress[String] : -# 1696| v1696_4(void) = Call[String] : func:r1696_3, this:r1696_1 -# 1696| mu1696_5(unknown) = ^CallSideEffect : ~m? -# 1696| mu1696_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1696_1 -# 1697| r1697_1(glval) = VariableAddress[x559] : -# 1697| r1697_2(glval) = FunctionAddress[~String] : -# 1697| v1697_3(void) = Call[~String] : func:r1697_2, this:r1697_1 -# 1697| mu1697_4(unknown) = ^CallSideEffect : ~m? -# 1697| v1697_5(void) = ^IndirectReadSideEffect[-1] : &:r1697_1, ~m? -# 1697| mu1697_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1 -# 1697| r1697_7(bool) = Constant[0] : -# 1697| v1697_8(void) = ConditionalBranch : r1697_7 +# 35| Block 559 +# 35| r35_7827(glval) = VariableAddress[x559] : +# 35| mu35_7828(String) = Uninitialized[x559] : &:r35_7827 +# 35| r35_7829(glval) = FunctionAddress[String] : +# 35| v35_7830(void) = Call[String] : func:r35_7829, this:r35_7827 +# 35| mu35_7831(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7827 +# 35| r35_7833(glval) = VariableAddress[x559] : +# 35| r35_7834(glval) = FunctionAddress[~String] : +# 35| v35_7835(void) = Call[~String] : func:r35_7834, this:r35_7833 +# 35| mu35_7836(unknown) = ^CallSideEffect : ~m? +# 35| v35_7837(void) = ^IndirectReadSideEffect[-1] : &:r35_7833, ~m? +# 35| mu35_7838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7833 +# 35| r35_7839(bool) = Constant[0] : +# 35| v35_7840(void) = ConditionalBranch : r35_7839 #-----| False -> Block 560 #-----| True -> Block 1026 -# 1699| Block 560 -# 1699| r1699_1(glval) = VariableAddress[x560] : -# 1699| mu1699_2(String) = Uninitialized[x560] : &:r1699_1 -# 1699| r1699_3(glval) = FunctionAddress[String] : -# 1699| v1699_4(void) = Call[String] : func:r1699_3, this:r1699_1 -# 1699| mu1699_5(unknown) = ^CallSideEffect : ~m? -# 1699| mu1699_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1699_1 -# 1700| r1700_1(glval) = VariableAddress[x560] : -# 1700| r1700_2(glval) = FunctionAddress[~String] : -# 1700| v1700_3(void) = Call[~String] : func:r1700_2, this:r1700_1 -# 1700| mu1700_4(unknown) = ^CallSideEffect : ~m? -# 1700| v1700_5(void) = ^IndirectReadSideEffect[-1] : &:r1700_1, ~m? -# 1700| mu1700_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1700_1 -# 1700| r1700_7(bool) = Constant[0] : -# 1700| v1700_8(void) = ConditionalBranch : r1700_7 +# 35| Block 560 +# 35| r35_7841(glval) = VariableAddress[x560] : +# 35| mu35_7842(String) = Uninitialized[x560] : &:r35_7841 +# 35| r35_7843(glval) = FunctionAddress[String] : +# 35| v35_7844(void) = Call[String] : func:r35_7843, this:r35_7841 +# 35| mu35_7845(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7841 +# 35| r35_7847(glval) = VariableAddress[x560] : +# 35| r35_7848(glval) = FunctionAddress[~String] : +# 35| v35_7849(void) = Call[~String] : func:r35_7848, this:r35_7847 +# 35| mu35_7850(unknown) = ^CallSideEffect : ~m? +# 35| v35_7851(void) = ^IndirectReadSideEffect[-1] : &:r35_7847, ~m? +# 35| mu35_7852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7847 +# 35| r35_7853(bool) = Constant[0] : +# 35| v35_7854(void) = ConditionalBranch : r35_7853 #-----| False -> Block 561 #-----| True -> Block 1026 -# 1702| Block 561 -# 1702| r1702_1(glval) = VariableAddress[x561] : -# 1702| mu1702_2(String) = Uninitialized[x561] : &:r1702_1 -# 1702| r1702_3(glval) = FunctionAddress[String] : -# 1702| v1702_4(void) = Call[String] : func:r1702_3, this:r1702_1 -# 1702| mu1702_5(unknown) = ^CallSideEffect : ~m? -# 1702| mu1702_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1702_1 -# 1703| r1703_1(glval) = VariableAddress[x561] : -# 1703| r1703_2(glval) = FunctionAddress[~String] : -# 1703| v1703_3(void) = Call[~String] : func:r1703_2, this:r1703_1 -# 1703| mu1703_4(unknown) = ^CallSideEffect : ~m? -# 1703| v1703_5(void) = ^IndirectReadSideEffect[-1] : &:r1703_1, ~m? -# 1703| mu1703_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1703_1 -# 1703| r1703_7(bool) = Constant[0] : -# 1703| v1703_8(void) = ConditionalBranch : r1703_7 +# 35| Block 561 +# 35| r35_7855(glval) = VariableAddress[x561] : +# 35| mu35_7856(String) = Uninitialized[x561] : &:r35_7855 +# 35| r35_7857(glval) = FunctionAddress[String] : +# 35| v35_7858(void) = Call[String] : func:r35_7857, this:r35_7855 +# 35| mu35_7859(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7855 +# 35| r35_7861(glval) = VariableAddress[x561] : +# 35| r35_7862(glval) = FunctionAddress[~String] : +# 35| v35_7863(void) = Call[~String] : func:r35_7862, this:r35_7861 +# 35| mu35_7864(unknown) = ^CallSideEffect : ~m? +# 35| v35_7865(void) = ^IndirectReadSideEffect[-1] : &:r35_7861, ~m? +# 35| mu35_7866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7861 +# 35| r35_7867(bool) = Constant[0] : +# 35| v35_7868(void) = ConditionalBranch : r35_7867 #-----| False -> Block 562 #-----| True -> Block 1026 -# 1705| Block 562 -# 1705| r1705_1(glval) = VariableAddress[x562] : -# 1705| mu1705_2(String) = Uninitialized[x562] : &:r1705_1 -# 1705| r1705_3(glval) = FunctionAddress[String] : -# 1705| v1705_4(void) = Call[String] : func:r1705_3, this:r1705_1 -# 1705| mu1705_5(unknown) = ^CallSideEffect : ~m? -# 1705| mu1705_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1705_1 -# 1706| r1706_1(glval) = VariableAddress[x562] : -# 1706| r1706_2(glval) = FunctionAddress[~String] : -# 1706| v1706_3(void) = Call[~String] : func:r1706_2, this:r1706_1 -# 1706| mu1706_4(unknown) = ^CallSideEffect : ~m? -# 1706| v1706_5(void) = ^IndirectReadSideEffect[-1] : &:r1706_1, ~m? -# 1706| mu1706_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1706_1 -# 1706| r1706_7(bool) = Constant[0] : -# 1706| v1706_8(void) = ConditionalBranch : r1706_7 +# 35| Block 562 +# 35| r35_7869(glval) = VariableAddress[x562] : +# 35| mu35_7870(String) = Uninitialized[x562] : &:r35_7869 +# 35| r35_7871(glval) = FunctionAddress[String] : +# 35| v35_7872(void) = Call[String] : func:r35_7871, this:r35_7869 +# 35| mu35_7873(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7869 +# 35| r35_7875(glval) = VariableAddress[x562] : +# 35| r35_7876(glval) = FunctionAddress[~String] : +# 35| v35_7877(void) = Call[~String] : func:r35_7876, this:r35_7875 +# 35| mu35_7878(unknown) = ^CallSideEffect : ~m? +# 35| v35_7879(void) = ^IndirectReadSideEffect[-1] : &:r35_7875, ~m? +# 35| mu35_7880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7875 +# 35| r35_7881(bool) = Constant[0] : +# 35| v35_7882(void) = ConditionalBranch : r35_7881 #-----| False -> Block 563 #-----| True -> Block 1026 -# 1708| Block 563 -# 1708| r1708_1(glval) = VariableAddress[x563] : -# 1708| mu1708_2(String) = Uninitialized[x563] : &:r1708_1 -# 1708| r1708_3(glval) = FunctionAddress[String] : -# 1708| v1708_4(void) = Call[String] : func:r1708_3, this:r1708_1 -# 1708| mu1708_5(unknown) = ^CallSideEffect : ~m? -# 1708| mu1708_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1708_1 -# 1709| r1709_1(glval) = VariableAddress[x563] : -# 1709| r1709_2(glval) = FunctionAddress[~String] : -# 1709| v1709_3(void) = Call[~String] : func:r1709_2, this:r1709_1 -# 1709| mu1709_4(unknown) = ^CallSideEffect : ~m? -# 1709| v1709_5(void) = ^IndirectReadSideEffect[-1] : &:r1709_1, ~m? -# 1709| mu1709_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1709_1 -# 1709| r1709_7(bool) = Constant[0] : -# 1709| v1709_8(void) = ConditionalBranch : r1709_7 +# 35| Block 563 +# 35| r35_7883(glval) = VariableAddress[x563] : +# 35| mu35_7884(String) = Uninitialized[x563] : &:r35_7883 +# 35| r35_7885(glval) = FunctionAddress[String] : +# 35| v35_7886(void) = Call[String] : func:r35_7885, this:r35_7883 +# 35| mu35_7887(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7883 +# 35| r35_7889(glval) = VariableAddress[x563] : +# 35| r35_7890(glval) = FunctionAddress[~String] : +# 35| v35_7891(void) = Call[~String] : func:r35_7890, this:r35_7889 +# 35| mu35_7892(unknown) = ^CallSideEffect : ~m? +# 35| v35_7893(void) = ^IndirectReadSideEffect[-1] : &:r35_7889, ~m? +# 35| mu35_7894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7889 +# 35| r35_7895(bool) = Constant[0] : +# 35| v35_7896(void) = ConditionalBranch : r35_7895 #-----| False -> Block 564 #-----| True -> Block 1026 -# 1711| Block 564 -# 1711| r1711_1(glval) = VariableAddress[x564] : -# 1711| mu1711_2(String) = Uninitialized[x564] : &:r1711_1 -# 1711| r1711_3(glval) = FunctionAddress[String] : -# 1711| v1711_4(void) = Call[String] : func:r1711_3, this:r1711_1 -# 1711| mu1711_5(unknown) = ^CallSideEffect : ~m? -# 1711| mu1711_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1711_1 -# 1712| r1712_1(glval) = VariableAddress[x564] : -# 1712| r1712_2(glval) = FunctionAddress[~String] : -# 1712| v1712_3(void) = Call[~String] : func:r1712_2, this:r1712_1 -# 1712| mu1712_4(unknown) = ^CallSideEffect : ~m? -# 1712| v1712_5(void) = ^IndirectReadSideEffect[-1] : &:r1712_1, ~m? -# 1712| mu1712_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1712_1 -# 1712| r1712_7(bool) = Constant[0] : -# 1712| v1712_8(void) = ConditionalBranch : r1712_7 +# 35| Block 564 +# 35| r35_7897(glval) = VariableAddress[x564] : +# 35| mu35_7898(String) = Uninitialized[x564] : &:r35_7897 +# 35| r35_7899(glval) = FunctionAddress[String] : +# 35| v35_7900(void) = Call[String] : func:r35_7899, this:r35_7897 +# 35| mu35_7901(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7897 +# 35| r35_7903(glval) = VariableAddress[x564] : +# 35| r35_7904(glval) = FunctionAddress[~String] : +# 35| v35_7905(void) = Call[~String] : func:r35_7904, this:r35_7903 +# 35| mu35_7906(unknown) = ^CallSideEffect : ~m? +# 35| v35_7907(void) = ^IndirectReadSideEffect[-1] : &:r35_7903, ~m? +# 35| mu35_7908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7903 +# 35| r35_7909(bool) = Constant[0] : +# 35| v35_7910(void) = ConditionalBranch : r35_7909 #-----| False -> Block 565 #-----| True -> Block 1026 -# 1714| Block 565 -# 1714| r1714_1(glval) = VariableAddress[x565] : -# 1714| mu1714_2(String) = Uninitialized[x565] : &:r1714_1 -# 1714| r1714_3(glval) = FunctionAddress[String] : -# 1714| v1714_4(void) = Call[String] : func:r1714_3, this:r1714_1 -# 1714| mu1714_5(unknown) = ^CallSideEffect : ~m? -# 1714| mu1714_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1714_1 -# 1715| r1715_1(glval) = VariableAddress[x565] : -# 1715| r1715_2(glval) = FunctionAddress[~String] : -# 1715| v1715_3(void) = Call[~String] : func:r1715_2, this:r1715_1 -# 1715| mu1715_4(unknown) = ^CallSideEffect : ~m? -# 1715| v1715_5(void) = ^IndirectReadSideEffect[-1] : &:r1715_1, ~m? -# 1715| mu1715_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1715_1 -# 1715| r1715_7(bool) = Constant[0] : -# 1715| v1715_8(void) = ConditionalBranch : r1715_7 +# 35| Block 565 +# 35| r35_7911(glval) = VariableAddress[x565] : +# 35| mu35_7912(String) = Uninitialized[x565] : &:r35_7911 +# 35| r35_7913(glval) = FunctionAddress[String] : +# 35| v35_7914(void) = Call[String] : func:r35_7913, this:r35_7911 +# 35| mu35_7915(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7911 +# 35| r35_7917(glval) = VariableAddress[x565] : +# 35| r35_7918(glval) = FunctionAddress[~String] : +# 35| v35_7919(void) = Call[~String] : func:r35_7918, this:r35_7917 +# 35| mu35_7920(unknown) = ^CallSideEffect : ~m? +# 35| v35_7921(void) = ^IndirectReadSideEffect[-1] : &:r35_7917, ~m? +# 35| mu35_7922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7917 +# 35| r35_7923(bool) = Constant[0] : +# 35| v35_7924(void) = ConditionalBranch : r35_7923 #-----| False -> Block 566 #-----| True -> Block 1026 -# 1717| Block 566 -# 1717| r1717_1(glval) = VariableAddress[x566] : -# 1717| mu1717_2(String) = Uninitialized[x566] : &:r1717_1 -# 1717| r1717_3(glval) = FunctionAddress[String] : -# 1717| v1717_4(void) = Call[String] : func:r1717_3, this:r1717_1 -# 1717| mu1717_5(unknown) = ^CallSideEffect : ~m? -# 1717| mu1717_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1717_1 -# 1718| r1718_1(glval) = VariableAddress[x566] : -# 1718| r1718_2(glval) = FunctionAddress[~String] : -# 1718| v1718_3(void) = Call[~String] : func:r1718_2, this:r1718_1 -# 1718| mu1718_4(unknown) = ^CallSideEffect : ~m? -# 1718| v1718_5(void) = ^IndirectReadSideEffect[-1] : &:r1718_1, ~m? -# 1718| mu1718_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1718_1 -# 1718| r1718_7(bool) = Constant[0] : -# 1718| v1718_8(void) = ConditionalBranch : r1718_7 +# 35| Block 566 +# 35| r35_7925(glval) = VariableAddress[x566] : +# 35| mu35_7926(String) = Uninitialized[x566] : &:r35_7925 +# 35| r35_7927(glval) = FunctionAddress[String] : +# 35| v35_7928(void) = Call[String] : func:r35_7927, this:r35_7925 +# 35| mu35_7929(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7925 +# 35| r35_7931(glval) = VariableAddress[x566] : +# 35| r35_7932(glval) = FunctionAddress[~String] : +# 35| v35_7933(void) = Call[~String] : func:r35_7932, this:r35_7931 +# 35| mu35_7934(unknown) = ^CallSideEffect : ~m? +# 35| v35_7935(void) = ^IndirectReadSideEffect[-1] : &:r35_7931, ~m? +# 35| mu35_7936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7931 +# 35| r35_7937(bool) = Constant[0] : +# 35| v35_7938(void) = ConditionalBranch : r35_7937 #-----| False -> Block 567 #-----| True -> Block 1026 -# 1720| Block 567 -# 1720| r1720_1(glval) = VariableAddress[x567] : -# 1720| mu1720_2(String) = Uninitialized[x567] : &:r1720_1 -# 1720| r1720_3(glval) = FunctionAddress[String] : -# 1720| v1720_4(void) = Call[String] : func:r1720_3, this:r1720_1 -# 1720| mu1720_5(unknown) = ^CallSideEffect : ~m? -# 1720| mu1720_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1720_1 -# 1721| r1721_1(glval) = VariableAddress[x567] : -# 1721| r1721_2(glval) = FunctionAddress[~String] : -# 1721| v1721_3(void) = Call[~String] : func:r1721_2, this:r1721_1 -# 1721| mu1721_4(unknown) = ^CallSideEffect : ~m? -# 1721| v1721_5(void) = ^IndirectReadSideEffect[-1] : &:r1721_1, ~m? -# 1721| mu1721_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1721_1 -# 1721| r1721_7(bool) = Constant[0] : -# 1721| v1721_8(void) = ConditionalBranch : r1721_7 +# 35| Block 567 +# 35| r35_7939(glval) = VariableAddress[x567] : +# 35| mu35_7940(String) = Uninitialized[x567] : &:r35_7939 +# 35| r35_7941(glval) = FunctionAddress[String] : +# 35| v35_7942(void) = Call[String] : func:r35_7941, this:r35_7939 +# 35| mu35_7943(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7939 +# 35| r35_7945(glval) = VariableAddress[x567] : +# 35| r35_7946(glval) = FunctionAddress[~String] : +# 35| v35_7947(void) = Call[~String] : func:r35_7946, this:r35_7945 +# 35| mu35_7948(unknown) = ^CallSideEffect : ~m? +# 35| v35_7949(void) = ^IndirectReadSideEffect[-1] : &:r35_7945, ~m? +# 35| mu35_7950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7945 +# 35| r35_7951(bool) = Constant[0] : +# 35| v35_7952(void) = ConditionalBranch : r35_7951 #-----| False -> Block 568 #-----| True -> Block 1026 -# 1723| Block 568 -# 1723| r1723_1(glval) = VariableAddress[x568] : -# 1723| mu1723_2(String) = Uninitialized[x568] : &:r1723_1 -# 1723| r1723_3(glval) = FunctionAddress[String] : -# 1723| v1723_4(void) = Call[String] : func:r1723_3, this:r1723_1 -# 1723| mu1723_5(unknown) = ^CallSideEffect : ~m? -# 1723| mu1723_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1723_1 -# 1724| r1724_1(glval) = VariableAddress[x568] : -# 1724| r1724_2(glval) = FunctionAddress[~String] : -# 1724| v1724_3(void) = Call[~String] : func:r1724_2, this:r1724_1 -# 1724| mu1724_4(unknown) = ^CallSideEffect : ~m? -# 1724| v1724_5(void) = ^IndirectReadSideEffect[-1] : &:r1724_1, ~m? -# 1724| mu1724_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1724_1 -# 1724| r1724_7(bool) = Constant[0] : -# 1724| v1724_8(void) = ConditionalBranch : r1724_7 +# 35| Block 568 +# 35| r35_7953(glval) = VariableAddress[x568] : +# 35| mu35_7954(String) = Uninitialized[x568] : &:r35_7953 +# 35| r35_7955(glval) = FunctionAddress[String] : +# 35| v35_7956(void) = Call[String] : func:r35_7955, this:r35_7953 +# 35| mu35_7957(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7953 +# 35| r35_7959(glval) = VariableAddress[x568] : +# 35| r35_7960(glval) = FunctionAddress[~String] : +# 35| v35_7961(void) = Call[~String] : func:r35_7960, this:r35_7959 +# 35| mu35_7962(unknown) = ^CallSideEffect : ~m? +# 35| v35_7963(void) = ^IndirectReadSideEffect[-1] : &:r35_7959, ~m? +# 35| mu35_7964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7959 +# 35| r35_7965(bool) = Constant[0] : +# 35| v35_7966(void) = ConditionalBranch : r35_7965 #-----| False -> Block 569 #-----| True -> Block 1026 -# 1726| Block 569 -# 1726| r1726_1(glval) = VariableAddress[x569] : -# 1726| mu1726_2(String) = Uninitialized[x569] : &:r1726_1 -# 1726| r1726_3(glval) = FunctionAddress[String] : -# 1726| v1726_4(void) = Call[String] : func:r1726_3, this:r1726_1 -# 1726| mu1726_5(unknown) = ^CallSideEffect : ~m? -# 1726| mu1726_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1726_1 -# 1727| r1727_1(glval) = VariableAddress[x569] : -# 1727| r1727_2(glval) = FunctionAddress[~String] : -# 1727| v1727_3(void) = Call[~String] : func:r1727_2, this:r1727_1 -# 1727| mu1727_4(unknown) = ^CallSideEffect : ~m? -# 1727| v1727_5(void) = ^IndirectReadSideEffect[-1] : &:r1727_1, ~m? -# 1727| mu1727_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1727_1 -# 1727| r1727_7(bool) = Constant[0] : -# 1727| v1727_8(void) = ConditionalBranch : r1727_7 +# 35| Block 569 +# 35| r35_7967(glval) = VariableAddress[x569] : +# 35| mu35_7968(String) = Uninitialized[x569] : &:r35_7967 +# 35| r35_7969(glval) = FunctionAddress[String] : +# 35| v35_7970(void) = Call[String] : func:r35_7969, this:r35_7967 +# 35| mu35_7971(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7967 +# 35| r35_7973(glval) = VariableAddress[x569] : +# 35| r35_7974(glval) = FunctionAddress[~String] : +# 35| v35_7975(void) = Call[~String] : func:r35_7974, this:r35_7973 +# 35| mu35_7976(unknown) = ^CallSideEffect : ~m? +# 35| v35_7977(void) = ^IndirectReadSideEffect[-1] : &:r35_7973, ~m? +# 35| mu35_7978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7973 +# 35| r35_7979(bool) = Constant[0] : +# 35| v35_7980(void) = ConditionalBranch : r35_7979 #-----| False -> Block 570 #-----| True -> Block 1026 -# 1729| Block 570 -# 1729| r1729_1(glval) = VariableAddress[x570] : -# 1729| mu1729_2(String) = Uninitialized[x570] : &:r1729_1 -# 1729| r1729_3(glval) = FunctionAddress[String] : -# 1729| v1729_4(void) = Call[String] : func:r1729_3, this:r1729_1 -# 1729| mu1729_5(unknown) = ^CallSideEffect : ~m? -# 1729| mu1729_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1729_1 -# 1730| r1730_1(glval) = VariableAddress[x570] : -# 1730| r1730_2(glval) = FunctionAddress[~String] : -# 1730| v1730_3(void) = Call[~String] : func:r1730_2, this:r1730_1 -# 1730| mu1730_4(unknown) = ^CallSideEffect : ~m? -# 1730| v1730_5(void) = ^IndirectReadSideEffect[-1] : &:r1730_1, ~m? -# 1730| mu1730_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1730_1 -# 1730| r1730_7(bool) = Constant[0] : -# 1730| v1730_8(void) = ConditionalBranch : r1730_7 +# 35| Block 570 +# 35| r35_7981(glval) = VariableAddress[x570] : +# 35| mu35_7982(String) = Uninitialized[x570] : &:r35_7981 +# 35| r35_7983(glval) = FunctionAddress[String] : +# 35| v35_7984(void) = Call[String] : func:r35_7983, this:r35_7981 +# 35| mu35_7985(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7981 +# 35| r35_7987(glval) = VariableAddress[x570] : +# 35| r35_7988(glval) = FunctionAddress[~String] : +# 35| v35_7989(void) = Call[~String] : func:r35_7988, this:r35_7987 +# 35| mu35_7990(unknown) = ^CallSideEffect : ~m? +# 35| v35_7991(void) = ^IndirectReadSideEffect[-1] : &:r35_7987, ~m? +# 35| mu35_7992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7987 +# 35| r35_7993(bool) = Constant[0] : +# 35| v35_7994(void) = ConditionalBranch : r35_7993 #-----| False -> Block 571 #-----| True -> Block 1026 -# 1732| Block 571 -# 1732| r1732_1(glval) = VariableAddress[x571] : -# 1732| mu1732_2(String) = Uninitialized[x571] : &:r1732_1 -# 1732| r1732_3(glval) = FunctionAddress[String] : -# 1732| v1732_4(void) = Call[String] : func:r1732_3, this:r1732_1 -# 1732| mu1732_5(unknown) = ^CallSideEffect : ~m? -# 1732| mu1732_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1732_1 -# 1733| r1733_1(glval) = VariableAddress[x571] : -# 1733| r1733_2(glval) = FunctionAddress[~String] : -# 1733| v1733_3(void) = Call[~String] : func:r1733_2, this:r1733_1 -# 1733| mu1733_4(unknown) = ^CallSideEffect : ~m? -# 1733| v1733_5(void) = ^IndirectReadSideEffect[-1] : &:r1733_1, ~m? -# 1733| mu1733_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1733_1 -# 1733| r1733_7(bool) = Constant[0] : -# 1733| v1733_8(void) = ConditionalBranch : r1733_7 +# 35| Block 571 +# 35| r35_7995(glval) = VariableAddress[x571] : +# 35| mu35_7996(String) = Uninitialized[x571] : &:r35_7995 +# 35| r35_7997(glval) = FunctionAddress[String] : +# 35| v35_7998(void) = Call[String] : func:r35_7997, this:r35_7995 +# 35| mu35_7999(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7995 +# 35| r35_8001(glval) = VariableAddress[x571] : +# 35| r35_8002(glval) = FunctionAddress[~String] : +# 35| v35_8003(void) = Call[~String] : func:r35_8002, this:r35_8001 +# 35| mu35_8004(unknown) = ^CallSideEffect : ~m? +# 35| v35_8005(void) = ^IndirectReadSideEffect[-1] : &:r35_8001, ~m? +# 35| mu35_8006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8001 +# 35| r35_8007(bool) = Constant[0] : +# 35| v35_8008(void) = ConditionalBranch : r35_8007 #-----| False -> Block 572 #-----| True -> Block 1026 -# 1735| Block 572 -# 1735| r1735_1(glval) = VariableAddress[x572] : -# 1735| mu1735_2(String) = Uninitialized[x572] : &:r1735_1 -# 1735| r1735_3(glval) = FunctionAddress[String] : -# 1735| v1735_4(void) = Call[String] : func:r1735_3, this:r1735_1 -# 1735| mu1735_5(unknown) = ^CallSideEffect : ~m? -# 1735| mu1735_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1735_1 -# 1736| r1736_1(glval) = VariableAddress[x572] : -# 1736| r1736_2(glval) = FunctionAddress[~String] : -# 1736| v1736_3(void) = Call[~String] : func:r1736_2, this:r1736_1 -# 1736| mu1736_4(unknown) = ^CallSideEffect : ~m? -# 1736| v1736_5(void) = ^IndirectReadSideEffect[-1] : &:r1736_1, ~m? -# 1736| mu1736_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1736_1 -# 1736| r1736_7(bool) = Constant[0] : -# 1736| v1736_8(void) = ConditionalBranch : r1736_7 +# 35| Block 572 +# 35| r35_8009(glval) = VariableAddress[x572] : +# 35| mu35_8010(String) = Uninitialized[x572] : &:r35_8009 +# 35| r35_8011(glval) = FunctionAddress[String] : +# 35| v35_8012(void) = Call[String] : func:r35_8011, this:r35_8009 +# 35| mu35_8013(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8009 +# 35| r35_8015(glval) = VariableAddress[x572] : +# 35| r35_8016(glval) = FunctionAddress[~String] : +# 35| v35_8017(void) = Call[~String] : func:r35_8016, this:r35_8015 +# 35| mu35_8018(unknown) = ^CallSideEffect : ~m? +# 35| v35_8019(void) = ^IndirectReadSideEffect[-1] : &:r35_8015, ~m? +# 35| mu35_8020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8015 +# 35| r35_8021(bool) = Constant[0] : +# 35| v35_8022(void) = ConditionalBranch : r35_8021 #-----| False -> Block 573 #-----| True -> Block 1026 -# 1738| Block 573 -# 1738| r1738_1(glval) = VariableAddress[x573] : -# 1738| mu1738_2(String) = Uninitialized[x573] : &:r1738_1 -# 1738| r1738_3(glval) = FunctionAddress[String] : -# 1738| v1738_4(void) = Call[String] : func:r1738_3, this:r1738_1 -# 1738| mu1738_5(unknown) = ^CallSideEffect : ~m? -# 1738| mu1738_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1738_1 -# 1739| r1739_1(glval) = VariableAddress[x573] : -# 1739| r1739_2(glval) = FunctionAddress[~String] : -# 1739| v1739_3(void) = Call[~String] : func:r1739_2, this:r1739_1 -# 1739| mu1739_4(unknown) = ^CallSideEffect : ~m? -# 1739| v1739_5(void) = ^IndirectReadSideEffect[-1] : &:r1739_1, ~m? -# 1739| mu1739_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1739_1 -# 1739| r1739_7(bool) = Constant[0] : -# 1739| v1739_8(void) = ConditionalBranch : r1739_7 +# 35| Block 573 +# 35| r35_8023(glval) = VariableAddress[x573] : +# 35| mu35_8024(String) = Uninitialized[x573] : &:r35_8023 +# 35| r35_8025(glval) = FunctionAddress[String] : +# 35| v35_8026(void) = Call[String] : func:r35_8025, this:r35_8023 +# 35| mu35_8027(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8023 +# 35| r35_8029(glval) = VariableAddress[x573] : +# 35| r35_8030(glval) = FunctionAddress[~String] : +# 35| v35_8031(void) = Call[~String] : func:r35_8030, this:r35_8029 +# 35| mu35_8032(unknown) = ^CallSideEffect : ~m? +# 35| v35_8033(void) = ^IndirectReadSideEffect[-1] : &:r35_8029, ~m? +# 35| mu35_8034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8029 +# 35| r35_8035(bool) = Constant[0] : +# 35| v35_8036(void) = ConditionalBranch : r35_8035 #-----| False -> Block 574 #-----| True -> Block 1026 -# 1741| Block 574 -# 1741| r1741_1(glval) = VariableAddress[x574] : -# 1741| mu1741_2(String) = Uninitialized[x574] : &:r1741_1 -# 1741| r1741_3(glval) = FunctionAddress[String] : -# 1741| v1741_4(void) = Call[String] : func:r1741_3, this:r1741_1 -# 1741| mu1741_5(unknown) = ^CallSideEffect : ~m? -# 1741| mu1741_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1741_1 -# 1742| r1742_1(glval) = VariableAddress[x574] : -# 1742| r1742_2(glval) = FunctionAddress[~String] : -# 1742| v1742_3(void) = Call[~String] : func:r1742_2, this:r1742_1 -# 1742| mu1742_4(unknown) = ^CallSideEffect : ~m? -# 1742| v1742_5(void) = ^IndirectReadSideEffect[-1] : &:r1742_1, ~m? -# 1742| mu1742_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1742_1 -# 1742| r1742_7(bool) = Constant[0] : -# 1742| v1742_8(void) = ConditionalBranch : r1742_7 +# 35| Block 574 +# 35| r35_8037(glval) = VariableAddress[x574] : +# 35| mu35_8038(String) = Uninitialized[x574] : &:r35_8037 +# 35| r35_8039(glval) = FunctionAddress[String] : +# 35| v35_8040(void) = Call[String] : func:r35_8039, this:r35_8037 +# 35| mu35_8041(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8037 +# 35| r35_8043(glval) = VariableAddress[x574] : +# 35| r35_8044(glval) = FunctionAddress[~String] : +# 35| v35_8045(void) = Call[~String] : func:r35_8044, this:r35_8043 +# 35| mu35_8046(unknown) = ^CallSideEffect : ~m? +# 35| v35_8047(void) = ^IndirectReadSideEffect[-1] : &:r35_8043, ~m? +# 35| mu35_8048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8043 +# 35| r35_8049(bool) = Constant[0] : +# 35| v35_8050(void) = ConditionalBranch : r35_8049 #-----| False -> Block 575 #-----| True -> Block 1026 -# 1744| Block 575 -# 1744| r1744_1(glval) = VariableAddress[x575] : -# 1744| mu1744_2(String) = Uninitialized[x575] : &:r1744_1 -# 1744| r1744_3(glval) = FunctionAddress[String] : -# 1744| v1744_4(void) = Call[String] : func:r1744_3, this:r1744_1 -# 1744| mu1744_5(unknown) = ^CallSideEffect : ~m? -# 1744| mu1744_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1744_1 -# 1745| r1745_1(glval) = VariableAddress[x575] : -# 1745| r1745_2(glval) = FunctionAddress[~String] : -# 1745| v1745_3(void) = Call[~String] : func:r1745_2, this:r1745_1 -# 1745| mu1745_4(unknown) = ^CallSideEffect : ~m? -# 1745| v1745_5(void) = ^IndirectReadSideEffect[-1] : &:r1745_1, ~m? -# 1745| mu1745_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1745_1 -# 1745| r1745_7(bool) = Constant[0] : -# 1745| v1745_8(void) = ConditionalBranch : r1745_7 +# 35| Block 575 +# 35| r35_8051(glval) = VariableAddress[x575] : +# 35| mu35_8052(String) = Uninitialized[x575] : &:r35_8051 +# 35| r35_8053(glval) = FunctionAddress[String] : +# 35| v35_8054(void) = Call[String] : func:r35_8053, this:r35_8051 +# 35| mu35_8055(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8051 +# 35| r35_8057(glval) = VariableAddress[x575] : +# 35| r35_8058(glval) = FunctionAddress[~String] : +# 35| v35_8059(void) = Call[~String] : func:r35_8058, this:r35_8057 +# 35| mu35_8060(unknown) = ^CallSideEffect : ~m? +# 35| v35_8061(void) = ^IndirectReadSideEffect[-1] : &:r35_8057, ~m? +# 35| mu35_8062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8057 +# 35| r35_8063(bool) = Constant[0] : +# 35| v35_8064(void) = ConditionalBranch : r35_8063 #-----| False -> Block 576 #-----| True -> Block 1026 -# 1747| Block 576 -# 1747| r1747_1(glval) = VariableAddress[x576] : -# 1747| mu1747_2(String) = Uninitialized[x576] : &:r1747_1 -# 1747| r1747_3(glval) = FunctionAddress[String] : -# 1747| v1747_4(void) = Call[String] : func:r1747_3, this:r1747_1 -# 1747| mu1747_5(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1747_1 -# 1748| r1748_1(glval) = VariableAddress[x576] : -# 1748| r1748_2(glval) = FunctionAddress[~String] : -# 1748| v1748_3(void) = Call[~String] : func:r1748_2, this:r1748_1 -# 1748| mu1748_4(unknown) = ^CallSideEffect : ~m? -# 1748| v1748_5(void) = ^IndirectReadSideEffect[-1] : &:r1748_1, ~m? -# 1748| mu1748_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1748_1 -# 1748| r1748_7(bool) = Constant[0] : -# 1748| v1748_8(void) = ConditionalBranch : r1748_7 +# 35| Block 576 +# 35| r35_8065(glval) = VariableAddress[x576] : +# 35| mu35_8066(String) = Uninitialized[x576] : &:r35_8065 +# 35| r35_8067(glval) = FunctionAddress[String] : +# 35| v35_8068(void) = Call[String] : func:r35_8067, this:r35_8065 +# 35| mu35_8069(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8065 +# 35| r35_8071(glval) = VariableAddress[x576] : +# 35| r35_8072(glval) = FunctionAddress[~String] : +# 35| v35_8073(void) = Call[~String] : func:r35_8072, this:r35_8071 +# 35| mu35_8074(unknown) = ^CallSideEffect : ~m? +# 35| v35_8075(void) = ^IndirectReadSideEffect[-1] : &:r35_8071, ~m? +# 35| mu35_8076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8071 +# 35| r35_8077(bool) = Constant[0] : +# 35| v35_8078(void) = ConditionalBranch : r35_8077 #-----| False -> Block 577 #-----| True -> Block 1026 -# 1750| Block 577 -# 1750| r1750_1(glval) = VariableAddress[x577] : -# 1750| mu1750_2(String) = Uninitialized[x577] : &:r1750_1 -# 1750| r1750_3(glval) = FunctionAddress[String] : -# 1750| v1750_4(void) = Call[String] : func:r1750_3, this:r1750_1 -# 1750| mu1750_5(unknown) = ^CallSideEffect : ~m? -# 1750| mu1750_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1750_1 -# 1751| r1751_1(glval) = VariableAddress[x577] : -# 1751| r1751_2(glval) = FunctionAddress[~String] : -# 1751| v1751_3(void) = Call[~String] : func:r1751_2, this:r1751_1 -# 1751| mu1751_4(unknown) = ^CallSideEffect : ~m? -# 1751| v1751_5(void) = ^IndirectReadSideEffect[-1] : &:r1751_1, ~m? -# 1751| mu1751_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1751_1 -# 1751| r1751_7(bool) = Constant[0] : -# 1751| v1751_8(void) = ConditionalBranch : r1751_7 +# 35| Block 577 +# 35| r35_8079(glval) = VariableAddress[x577] : +# 35| mu35_8080(String) = Uninitialized[x577] : &:r35_8079 +# 35| r35_8081(glval) = FunctionAddress[String] : +# 35| v35_8082(void) = Call[String] : func:r35_8081, this:r35_8079 +# 35| mu35_8083(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8079 +# 35| r35_8085(glval) = VariableAddress[x577] : +# 35| r35_8086(glval) = FunctionAddress[~String] : +# 35| v35_8087(void) = Call[~String] : func:r35_8086, this:r35_8085 +# 35| mu35_8088(unknown) = ^CallSideEffect : ~m? +# 35| v35_8089(void) = ^IndirectReadSideEffect[-1] : &:r35_8085, ~m? +# 35| mu35_8090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8085 +# 35| r35_8091(bool) = Constant[0] : +# 35| v35_8092(void) = ConditionalBranch : r35_8091 #-----| False -> Block 578 #-----| True -> Block 1026 -# 1753| Block 578 -# 1753| r1753_1(glval) = VariableAddress[x578] : -# 1753| mu1753_2(String) = Uninitialized[x578] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[String] : -# 1753| v1753_4(void) = Call[String] : func:r1753_3, this:r1753_1 -# 1753| mu1753_5(unknown) = ^CallSideEffect : ~m? -# 1753| mu1753_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1754| r1754_1(glval) = VariableAddress[x578] : -# 1754| r1754_2(glval) = FunctionAddress[~String] : -# 1754| v1754_3(void) = Call[~String] : func:r1754_2, this:r1754_1 -# 1754| mu1754_4(unknown) = ^CallSideEffect : ~m? -# 1754| v1754_5(void) = ^IndirectReadSideEffect[-1] : &:r1754_1, ~m? -# 1754| mu1754_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1754| r1754_7(bool) = Constant[0] : -# 1754| v1754_8(void) = ConditionalBranch : r1754_7 +# 35| Block 578 +# 35| r35_8093(glval) = VariableAddress[x578] : +# 35| mu35_8094(String) = Uninitialized[x578] : &:r35_8093 +# 35| r35_8095(glval) = FunctionAddress[String] : +# 35| v35_8096(void) = Call[String] : func:r35_8095, this:r35_8093 +# 35| mu35_8097(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8093 +# 35| r35_8099(glval) = VariableAddress[x578] : +# 35| r35_8100(glval) = FunctionAddress[~String] : +# 35| v35_8101(void) = Call[~String] : func:r35_8100, this:r35_8099 +# 35| mu35_8102(unknown) = ^CallSideEffect : ~m? +# 35| v35_8103(void) = ^IndirectReadSideEffect[-1] : &:r35_8099, ~m? +# 35| mu35_8104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8099 +# 35| r35_8105(bool) = Constant[0] : +# 35| v35_8106(void) = ConditionalBranch : r35_8105 #-----| False -> Block 579 #-----| True -> Block 1026 -# 1756| Block 579 -# 1756| r1756_1(glval) = VariableAddress[x579] : -# 1756| mu1756_2(String) = Uninitialized[x579] : &:r1756_1 -# 1756| r1756_3(glval) = FunctionAddress[String] : -# 1756| v1756_4(void) = Call[String] : func:r1756_3, this:r1756_1 -# 1756| mu1756_5(unknown) = ^CallSideEffect : ~m? -# 1756| mu1756_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 -# 1757| r1757_1(glval) = VariableAddress[x579] : -# 1757| r1757_2(glval) = FunctionAddress[~String] : -# 1757| v1757_3(void) = Call[~String] : func:r1757_2, this:r1757_1 -# 1757| mu1757_4(unknown) = ^CallSideEffect : ~m? -# 1757| v1757_5(void) = ^IndirectReadSideEffect[-1] : &:r1757_1, ~m? -# 1757| mu1757_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1757_1 -# 1757| r1757_7(bool) = Constant[0] : -# 1757| v1757_8(void) = ConditionalBranch : r1757_7 +# 35| Block 579 +# 35| r35_8107(glval) = VariableAddress[x579] : +# 35| mu35_8108(String) = Uninitialized[x579] : &:r35_8107 +# 35| r35_8109(glval) = FunctionAddress[String] : +# 35| v35_8110(void) = Call[String] : func:r35_8109, this:r35_8107 +# 35| mu35_8111(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8107 +# 35| r35_8113(glval) = VariableAddress[x579] : +# 35| r35_8114(glval) = FunctionAddress[~String] : +# 35| v35_8115(void) = Call[~String] : func:r35_8114, this:r35_8113 +# 35| mu35_8116(unknown) = ^CallSideEffect : ~m? +# 35| v35_8117(void) = ^IndirectReadSideEffect[-1] : &:r35_8113, ~m? +# 35| mu35_8118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8113 +# 35| r35_8119(bool) = Constant[0] : +# 35| v35_8120(void) = ConditionalBranch : r35_8119 #-----| False -> Block 580 #-----| True -> Block 1026 -# 1759| Block 580 -# 1759| r1759_1(glval) = VariableAddress[x580] : -# 1759| mu1759_2(String) = Uninitialized[x580] : &:r1759_1 -# 1759| r1759_3(glval) = FunctionAddress[String] : -# 1759| v1759_4(void) = Call[String] : func:r1759_3, this:r1759_1 -# 1759| mu1759_5(unknown) = ^CallSideEffect : ~m? -# 1759| mu1759_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1759_1 -# 1760| r1760_1(glval) = VariableAddress[x580] : -# 1760| r1760_2(glval) = FunctionAddress[~String] : -# 1760| v1760_3(void) = Call[~String] : func:r1760_2, this:r1760_1 -# 1760| mu1760_4(unknown) = ^CallSideEffect : ~m? -# 1760| v1760_5(void) = ^IndirectReadSideEffect[-1] : &:r1760_1, ~m? -# 1760| mu1760_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1760_1 -# 1760| r1760_7(bool) = Constant[0] : -# 1760| v1760_8(void) = ConditionalBranch : r1760_7 +# 35| Block 580 +# 35| r35_8121(glval) = VariableAddress[x580] : +# 35| mu35_8122(String) = Uninitialized[x580] : &:r35_8121 +# 35| r35_8123(glval) = FunctionAddress[String] : +# 35| v35_8124(void) = Call[String] : func:r35_8123, this:r35_8121 +# 35| mu35_8125(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8121 +# 35| r35_8127(glval) = VariableAddress[x580] : +# 35| r35_8128(glval) = FunctionAddress[~String] : +# 35| v35_8129(void) = Call[~String] : func:r35_8128, this:r35_8127 +# 35| mu35_8130(unknown) = ^CallSideEffect : ~m? +# 35| v35_8131(void) = ^IndirectReadSideEffect[-1] : &:r35_8127, ~m? +# 35| mu35_8132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8127 +# 35| r35_8133(bool) = Constant[0] : +# 35| v35_8134(void) = ConditionalBranch : r35_8133 #-----| False -> Block 581 #-----| True -> Block 1026 -# 1762| Block 581 -# 1762| r1762_1(glval) = VariableAddress[x581] : -# 1762| mu1762_2(String) = Uninitialized[x581] : &:r1762_1 -# 1762| r1762_3(glval) = FunctionAddress[String] : -# 1762| v1762_4(void) = Call[String] : func:r1762_3, this:r1762_1 -# 1762| mu1762_5(unknown) = ^CallSideEffect : ~m? -# 1762| mu1762_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1762_1 -# 1763| r1763_1(glval) = VariableAddress[x581] : -# 1763| r1763_2(glval) = FunctionAddress[~String] : -# 1763| v1763_3(void) = Call[~String] : func:r1763_2, this:r1763_1 -# 1763| mu1763_4(unknown) = ^CallSideEffect : ~m? -# 1763| v1763_5(void) = ^IndirectReadSideEffect[-1] : &:r1763_1, ~m? -# 1763| mu1763_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1763_1 -# 1763| r1763_7(bool) = Constant[0] : -# 1763| v1763_8(void) = ConditionalBranch : r1763_7 +# 35| Block 581 +# 35| r35_8135(glval) = VariableAddress[x581] : +# 35| mu35_8136(String) = Uninitialized[x581] : &:r35_8135 +# 35| r35_8137(glval) = FunctionAddress[String] : +# 35| v35_8138(void) = Call[String] : func:r35_8137, this:r35_8135 +# 35| mu35_8139(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8135 +# 35| r35_8141(glval) = VariableAddress[x581] : +# 35| r35_8142(glval) = FunctionAddress[~String] : +# 35| v35_8143(void) = Call[~String] : func:r35_8142, this:r35_8141 +# 35| mu35_8144(unknown) = ^CallSideEffect : ~m? +# 35| v35_8145(void) = ^IndirectReadSideEffect[-1] : &:r35_8141, ~m? +# 35| mu35_8146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8141 +# 35| r35_8147(bool) = Constant[0] : +# 35| v35_8148(void) = ConditionalBranch : r35_8147 #-----| False -> Block 582 #-----| True -> Block 1026 -# 1765| Block 582 -# 1765| r1765_1(glval) = VariableAddress[x582] : -# 1765| mu1765_2(String) = Uninitialized[x582] : &:r1765_1 -# 1765| r1765_3(glval) = FunctionAddress[String] : -# 1765| v1765_4(void) = Call[String] : func:r1765_3, this:r1765_1 -# 1765| mu1765_5(unknown) = ^CallSideEffect : ~m? -# 1765| mu1765_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1765_1 -# 1766| r1766_1(glval) = VariableAddress[x582] : -# 1766| r1766_2(glval) = FunctionAddress[~String] : -# 1766| v1766_3(void) = Call[~String] : func:r1766_2, this:r1766_1 -# 1766| mu1766_4(unknown) = ^CallSideEffect : ~m? -# 1766| v1766_5(void) = ^IndirectReadSideEffect[-1] : &:r1766_1, ~m? -# 1766| mu1766_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1766_1 -# 1766| r1766_7(bool) = Constant[0] : -# 1766| v1766_8(void) = ConditionalBranch : r1766_7 +# 35| Block 582 +# 35| r35_8149(glval) = VariableAddress[x582] : +# 35| mu35_8150(String) = Uninitialized[x582] : &:r35_8149 +# 35| r35_8151(glval) = FunctionAddress[String] : +# 35| v35_8152(void) = Call[String] : func:r35_8151, this:r35_8149 +# 35| mu35_8153(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8149 +# 35| r35_8155(glval) = VariableAddress[x582] : +# 35| r35_8156(glval) = FunctionAddress[~String] : +# 35| v35_8157(void) = Call[~String] : func:r35_8156, this:r35_8155 +# 35| mu35_8158(unknown) = ^CallSideEffect : ~m? +# 35| v35_8159(void) = ^IndirectReadSideEffect[-1] : &:r35_8155, ~m? +# 35| mu35_8160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8155 +# 35| r35_8161(bool) = Constant[0] : +# 35| v35_8162(void) = ConditionalBranch : r35_8161 #-----| False -> Block 583 #-----| True -> Block 1026 -# 1768| Block 583 -# 1768| r1768_1(glval) = VariableAddress[x583] : -# 1768| mu1768_2(String) = Uninitialized[x583] : &:r1768_1 -# 1768| r1768_3(glval) = FunctionAddress[String] : -# 1768| v1768_4(void) = Call[String] : func:r1768_3, this:r1768_1 -# 1768| mu1768_5(unknown) = ^CallSideEffect : ~m? -# 1768| mu1768_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1768_1 -# 1769| r1769_1(glval) = VariableAddress[x583] : -# 1769| r1769_2(glval) = FunctionAddress[~String] : -# 1769| v1769_3(void) = Call[~String] : func:r1769_2, this:r1769_1 -# 1769| mu1769_4(unknown) = ^CallSideEffect : ~m? -# 1769| v1769_5(void) = ^IndirectReadSideEffect[-1] : &:r1769_1, ~m? -# 1769| mu1769_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1769_1 -# 1769| r1769_7(bool) = Constant[0] : -# 1769| v1769_8(void) = ConditionalBranch : r1769_7 +# 35| Block 583 +# 35| r35_8163(glval) = VariableAddress[x583] : +# 35| mu35_8164(String) = Uninitialized[x583] : &:r35_8163 +# 35| r35_8165(glval) = FunctionAddress[String] : +# 35| v35_8166(void) = Call[String] : func:r35_8165, this:r35_8163 +# 35| mu35_8167(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8163 +# 35| r35_8169(glval) = VariableAddress[x583] : +# 35| r35_8170(glval) = FunctionAddress[~String] : +# 35| v35_8171(void) = Call[~String] : func:r35_8170, this:r35_8169 +# 35| mu35_8172(unknown) = ^CallSideEffect : ~m? +# 35| v35_8173(void) = ^IndirectReadSideEffect[-1] : &:r35_8169, ~m? +# 35| mu35_8174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8169 +# 35| r35_8175(bool) = Constant[0] : +# 35| v35_8176(void) = ConditionalBranch : r35_8175 #-----| False -> Block 584 #-----| True -> Block 1026 -# 1771| Block 584 -# 1771| r1771_1(glval) = VariableAddress[x584] : -# 1771| mu1771_2(String) = Uninitialized[x584] : &:r1771_1 -# 1771| r1771_3(glval) = FunctionAddress[String] : -# 1771| v1771_4(void) = Call[String] : func:r1771_3, this:r1771_1 -# 1771| mu1771_5(unknown) = ^CallSideEffect : ~m? -# 1771| mu1771_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1771_1 -# 1772| r1772_1(glval) = VariableAddress[x584] : -# 1772| r1772_2(glval) = FunctionAddress[~String] : -# 1772| v1772_3(void) = Call[~String] : func:r1772_2, this:r1772_1 -# 1772| mu1772_4(unknown) = ^CallSideEffect : ~m? -# 1772| v1772_5(void) = ^IndirectReadSideEffect[-1] : &:r1772_1, ~m? -# 1772| mu1772_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1772_1 -# 1772| r1772_7(bool) = Constant[0] : -# 1772| v1772_8(void) = ConditionalBranch : r1772_7 +# 35| Block 584 +# 35| r35_8177(glval) = VariableAddress[x584] : +# 35| mu35_8178(String) = Uninitialized[x584] : &:r35_8177 +# 35| r35_8179(glval) = FunctionAddress[String] : +# 35| v35_8180(void) = Call[String] : func:r35_8179, this:r35_8177 +# 35| mu35_8181(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8177 +# 35| r35_8183(glval) = VariableAddress[x584] : +# 35| r35_8184(glval) = FunctionAddress[~String] : +# 35| v35_8185(void) = Call[~String] : func:r35_8184, this:r35_8183 +# 35| mu35_8186(unknown) = ^CallSideEffect : ~m? +# 35| v35_8187(void) = ^IndirectReadSideEffect[-1] : &:r35_8183, ~m? +# 35| mu35_8188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8183 +# 35| r35_8189(bool) = Constant[0] : +# 35| v35_8190(void) = ConditionalBranch : r35_8189 #-----| False -> Block 585 #-----| True -> Block 1026 -# 1774| Block 585 -# 1774| r1774_1(glval) = VariableAddress[x585] : -# 1774| mu1774_2(String) = Uninitialized[x585] : &:r1774_1 -# 1774| r1774_3(glval) = FunctionAddress[String] : -# 1774| v1774_4(void) = Call[String] : func:r1774_3, this:r1774_1 -# 1774| mu1774_5(unknown) = ^CallSideEffect : ~m? -# 1774| mu1774_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1774_1 -# 1775| r1775_1(glval) = VariableAddress[x585] : -# 1775| r1775_2(glval) = FunctionAddress[~String] : -# 1775| v1775_3(void) = Call[~String] : func:r1775_2, this:r1775_1 -# 1775| mu1775_4(unknown) = ^CallSideEffect : ~m? -# 1775| v1775_5(void) = ^IndirectReadSideEffect[-1] : &:r1775_1, ~m? -# 1775| mu1775_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1775_1 -# 1775| r1775_7(bool) = Constant[0] : -# 1775| v1775_8(void) = ConditionalBranch : r1775_7 +# 35| Block 585 +# 35| r35_8191(glval) = VariableAddress[x585] : +# 35| mu35_8192(String) = Uninitialized[x585] : &:r35_8191 +# 35| r35_8193(glval) = FunctionAddress[String] : +# 35| v35_8194(void) = Call[String] : func:r35_8193, this:r35_8191 +# 35| mu35_8195(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8191 +# 35| r35_8197(glval) = VariableAddress[x585] : +# 35| r35_8198(glval) = FunctionAddress[~String] : +# 35| v35_8199(void) = Call[~String] : func:r35_8198, this:r35_8197 +# 35| mu35_8200(unknown) = ^CallSideEffect : ~m? +# 35| v35_8201(void) = ^IndirectReadSideEffect[-1] : &:r35_8197, ~m? +# 35| mu35_8202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8197 +# 35| r35_8203(bool) = Constant[0] : +# 35| v35_8204(void) = ConditionalBranch : r35_8203 #-----| False -> Block 586 #-----| True -> Block 1026 -# 1777| Block 586 -# 1777| r1777_1(glval) = VariableAddress[x586] : -# 1777| mu1777_2(String) = Uninitialized[x586] : &:r1777_1 -# 1777| r1777_3(glval) = FunctionAddress[String] : -# 1777| v1777_4(void) = Call[String] : func:r1777_3, this:r1777_1 -# 1777| mu1777_5(unknown) = ^CallSideEffect : ~m? -# 1777| mu1777_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1777_1 -# 1778| r1778_1(glval) = VariableAddress[x586] : -# 1778| r1778_2(glval) = FunctionAddress[~String] : -# 1778| v1778_3(void) = Call[~String] : func:r1778_2, this:r1778_1 -# 1778| mu1778_4(unknown) = ^CallSideEffect : ~m? -# 1778| v1778_5(void) = ^IndirectReadSideEffect[-1] : &:r1778_1, ~m? -# 1778| mu1778_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1778_1 -# 1778| r1778_7(bool) = Constant[0] : -# 1778| v1778_8(void) = ConditionalBranch : r1778_7 +# 35| Block 586 +# 35| r35_8205(glval) = VariableAddress[x586] : +# 35| mu35_8206(String) = Uninitialized[x586] : &:r35_8205 +# 35| r35_8207(glval) = FunctionAddress[String] : +# 35| v35_8208(void) = Call[String] : func:r35_8207, this:r35_8205 +# 35| mu35_8209(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8205 +# 35| r35_8211(glval) = VariableAddress[x586] : +# 35| r35_8212(glval) = FunctionAddress[~String] : +# 35| v35_8213(void) = Call[~String] : func:r35_8212, this:r35_8211 +# 35| mu35_8214(unknown) = ^CallSideEffect : ~m? +# 35| v35_8215(void) = ^IndirectReadSideEffect[-1] : &:r35_8211, ~m? +# 35| mu35_8216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8211 +# 35| r35_8217(bool) = Constant[0] : +# 35| v35_8218(void) = ConditionalBranch : r35_8217 #-----| False -> Block 587 #-----| True -> Block 1026 -# 1780| Block 587 -# 1780| r1780_1(glval) = VariableAddress[x587] : -# 1780| mu1780_2(String) = Uninitialized[x587] : &:r1780_1 -# 1780| r1780_3(glval) = FunctionAddress[String] : -# 1780| v1780_4(void) = Call[String] : func:r1780_3, this:r1780_1 -# 1780| mu1780_5(unknown) = ^CallSideEffect : ~m? -# 1780| mu1780_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1780_1 -# 1781| r1781_1(glval) = VariableAddress[x587] : -# 1781| r1781_2(glval) = FunctionAddress[~String] : -# 1781| v1781_3(void) = Call[~String] : func:r1781_2, this:r1781_1 -# 1781| mu1781_4(unknown) = ^CallSideEffect : ~m? -# 1781| v1781_5(void) = ^IndirectReadSideEffect[-1] : &:r1781_1, ~m? -# 1781| mu1781_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1781_1 -# 1781| r1781_7(bool) = Constant[0] : -# 1781| v1781_8(void) = ConditionalBranch : r1781_7 +# 35| Block 587 +# 35| r35_8219(glval) = VariableAddress[x587] : +# 35| mu35_8220(String) = Uninitialized[x587] : &:r35_8219 +# 35| r35_8221(glval) = FunctionAddress[String] : +# 35| v35_8222(void) = Call[String] : func:r35_8221, this:r35_8219 +# 35| mu35_8223(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8219 +# 35| r35_8225(glval) = VariableAddress[x587] : +# 35| r35_8226(glval) = FunctionAddress[~String] : +# 35| v35_8227(void) = Call[~String] : func:r35_8226, this:r35_8225 +# 35| mu35_8228(unknown) = ^CallSideEffect : ~m? +# 35| v35_8229(void) = ^IndirectReadSideEffect[-1] : &:r35_8225, ~m? +# 35| mu35_8230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8225 +# 35| r35_8231(bool) = Constant[0] : +# 35| v35_8232(void) = ConditionalBranch : r35_8231 #-----| False -> Block 588 #-----| True -> Block 1026 -# 1783| Block 588 -# 1783| r1783_1(glval) = VariableAddress[x588] : -# 1783| mu1783_2(String) = Uninitialized[x588] : &:r1783_1 -# 1783| r1783_3(glval) = FunctionAddress[String] : -# 1783| v1783_4(void) = Call[String] : func:r1783_3, this:r1783_1 -# 1783| mu1783_5(unknown) = ^CallSideEffect : ~m? -# 1783| mu1783_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1783_1 -# 1784| r1784_1(glval) = VariableAddress[x588] : -# 1784| r1784_2(glval) = FunctionAddress[~String] : -# 1784| v1784_3(void) = Call[~String] : func:r1784_2, this:r1784_1 -# 1784| mu1784_4(unknown) = ^CallSideEffect : ~m? -# 1784| v1784_5(void) = ^IndirectReadSideEffect[-1] : &:r1784_1, ~m? -# 1784| mu1784_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1784_1 -# 1784| r1784_7(bool) = Constant[0] : -# 1784| v1784_8(void) = ConditionalBranch : r1784_7 +# 35| Block 588 +# 35| r35_8233(glval) = VariableAddress[x588] : +# 35| mu35_8234(String) = Uninitialized[x588] : &:r35_8233 +# 35| r35_8235(glval) = FunctionAddress[String] : +# 35| v35_8236(void) = Call[String] : func:r35_8235, this:r35_8233 +# 35| mu35_8237(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8233 +# 35| r35_8239(glval) = VariableAddress[x588] : +# 35| r35_8240(glval) = FunctionAddress[~String] : +# 35| v35_8241(void) = Call[~String] : func:r35_8240, this:r35_8239 +# 35| mu35_8242(unknown) = ^CallSideEffect : ~m? +# 35| v35_8243(void) = ^IndirectReadSideEffect[-1] : &:r35_8239, ~m? +# 35| mu35_8244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8239 +# 35| r35_8245(bool) = Constant[0] : +# 35| v35_8246(void) = ConditionalBranch : r35_8245 #-----| False -> Block 589 #-----| True -> Block 1026 -# 1786| Block 589 -# 1786| r1786_1(glval) = VariableAddress[x589] : -# 1786| mu1786_2(String) = Uninitialized[x589] : &:r1786_1 -# 1786| r1786_3(glval) = FunctionAddress[String] : -# 1786| v1786_4(void) = Call[String] : func:r1786_3, this:r1786_1 -# 1786| mu1786_5(unknown) = ^CallSideEffect : ~m? -# 1786| mu1786_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1786_1 -# 1787| r1787_1(glval) = VariableAddress[x589] : -# 1787| r1787_2(glval) = FunctionAddress[~String] : -# 1787| v1787_3(void) = Call[~String] : func:r1787_2, this:r1787_1 -# 1787| mu1787_4(unknown) = ^CallSideEffect : ~m? -# 1787| v1787_5(void) = ^IndirectReadSideEffect[-1] : &:r1787_1, ~m? -# 1787| mu1787_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1787_1 -# 1787| r1787_7(bool) = Constant[0] : -# 1787| v1787_8(void) = ConditionalBranch : r1787_7 +# 35| Block 589 +# 35| r35_8247(glval) = VariableAddress[x589] : +# 35| mu35_8248(String) = Uninitialized[x589] : &:r35_8247 +# 35| r35_8249(glval) = FunctionAddress[String] : +# 35| v35_8250(void) = Call[String] : func:r35_8249, this:r35_8247 +# 35| mu35_8251(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8247 +# 35| r35_8253(glval) = VariableAddress[x589] : +# 35| r35_8254(glval) = FunctionAddress[~String] : +# 35| v35_8255(void) = Call[~String] : func:r35_8254, this:r35_8253 +# 35| mu35_8256(unknown) = ^CallSideEffect : ~m? +# 35| v35_8257(void) = ^IndirectReadSideEffect[-1] : &:r35_8253, ~m? +# 35| mu35_8258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8253 +# 35| r35_8259(bool) = Constant[0] : +# 35| v35_8260(void) = ConditionalBranch : r35_8259 #-----| False -> Block 590 #-----| True -> Block 1026 -# 1789| Block 590 -# 1789| r1789_1(glval) = VariableAddress[x590] : -# 1789| mu1789_2(String) = Uninitialized[x590] : &:r1789_1 -# 1789| r1789_3(glval) = FunctionAddress[String] : -# 1789| v1789_4(void) = Call[String] : func:r1789_3, this:r1789_1 -# 1789| mu1789_5(unknown) = ^CallSideEffect : ~m? -# 1789| mu1789_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1789_1 -# 1790| r1790_1(glval) = VariableAddress[x590] : -# 1790| r1790_2(glval) = FunctionAddress[~String] : -# 1790| v1790_3(void) = Call[~String] : func:r1790_2, this:r1790_1 -# 1790| mu1790_4(unknown) = ^CallSideEffect : ~m? -# 1790| v1790_5(void) = ^IndirectReadSideEffect[-1] : &:r1790_1, ~m? -# 1790| mu1790_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1790_1 -# 1790| r1790_7(bool) = Constant[0] : -# 1790| v1790_8(void) = ConditionalBranch : r1790_7 +# 35| Block 590 +# 35| r35_8261(glval) = VariableAddress[x590] : +# 35| mu35_8262(String) = Uninitialized[x590] : &:r35_8261 +# 35| r35_8263(glval) = FunctionAddress[String] : +# 35| v35_8264(void) = Call[String] : func:r35_8263, this:r35_8261 +# 35| mu35_8265(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8261 +# 35| r35_8267(glval) = VariableAddress[x590] : +# 35| r35_8268(glval) = FunctionAddress[~String] : +# 35| v35_8269(void) = Call[~String] : func:r35_8268, this:r35_8267 +# 35| mu35_8270(unknown) = ^CallSideEffect : ~m? +# 35| v35_8271(void) = ^IndirectReadSideEffect[-1] : &:r35_8267, ~m? +# 35| mu35_8272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8267 +# 35| r35_8273(bool) = Constant[0] : +# 35| v35_8274(void) = ConditionalBranch : r35_8273 #-----| False -> Block 591 #-----| True -> Block 1026 -# 1792| Block 591 -# 1792| r1792_1(glval) = VariableAddress[x591] : -# 1792| mu1792_2(String) = Uninitialized[x591] : &:r1792_1 -# 1792| r1792_3(glval) = FunctionAddress[String] : -# 1792| v1792_4(void) = Call[String] : func:r1792_3, this:r1792_1 -# 1792| mu1792_5(unknown) = ^CallSideEffect : ~m? -# 1792| mu1792_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1792_1 -# 1793| r1793_1(glval) = VariableAddress[x591] : -# 1793| r1793_2(glval) = FunctionAddress[~String] : -# 1793| v1793_3(void) = Call[~String] : func:r1793_2, this:r1793_1 -# 1793| mu1793_4(unknown) = ^CallSideEffect : ~m? -# 1793| v1793_5(void) = ^IndirectReadSideEffect[-1] : &:r1793_1, ~m? -# 1793| mu1793_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1793_1 -# 1793| r1793_7(bool) = Constant[0] : -# 1793| v1793_8(void) = ConditionalBranch : r1793_7 +# 35| Block 591 +# 35| r35_8275(glval) = VariableAddress[x591] : +# 35| mu35_8276(String) = Uninitialized[x591] : &:r35_8275 +# 35| r35_8277(glval) = FunctionAddress[String] : +# 35| v35_8278(void) = Call[String] : func:r35_8277, this:r35_8275 +# 35| mu35_8279(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8275 +# 35| r35_8281(glval) = VariableAddress[x591] : +# 35| r35_8282(glval) = FunctionAddress[~String] : +# 35| v35_8283(void) = Call[~String] : func:r35_8282, this:r35_8281 +# 35| mu35_8284(unknown) = ^CallSideEffect : ~m? +# 35| v35_8285(void) = ^IndirectReadSideEffect[-1] : &:r35_8281, ~m? +# 35| mu35_8286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8281 +# 35| r35_8287(bool) = Constant[0] : +# 35| v35_8288(void) = ConditionalBranch : r35_8287 #-----| False -> Block 592 #-----| True -> Block 1026 -# 1795| Block 592 -# 1795| r1795_1(glval) = VariableAddress[x592] : -# 1795| mu1795_2(String) = Uninitialized[x592] : &:r1795_1 -# 1795| r1795_3(glval) = FunctionAddress[String] : -# 1795| v1795_4(void) = Call[String] : func:r1795_3, this:r1795_1 -# 1795| mu1795_5(unknown) = ^CallSideEffect : ~m? -# 1795| mu1795_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1795_1 -# 1796| r1796_1(glval) = VariableAddress[x592] : -# 1796| r1796_2(glval) = FunctionAddress[~String] : -# 1796| v1796_3(void) = Call[~String] : func:r1796_2, this:r1796_1 -# 1796| mu1796_4(unknown) = ^CallSideEffect : ~m? -# 1796| v1796_5(void) = ^IndirectReadSideEffect[-1] : &:r1796_1, ~m? -# 1796| mu1796_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1796_1 -# 1796| r1796_7(bool) = Constant[0] : -# 1796| v1796_8(void) = ConditionalBranch : r1796_7 +# 35| Block 592 +# 35| r35_8289(glval) = VariableAddress[x592] : +# 35| mu35_8290(String) = Uninitialized[x592] : &:r35_8289 +# 35| r35_8291(glval) = FunctionAddress[String] : +# 35| v35_8292(void) = Call[String] : func:r35_8291, this:r35_8289 +# 35| mu35_8293(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8289 +# 35| r35_8295(glval) = VariableAddress[x592] : +# 35| r35_8296(glval) = FunctionAddress[~String] : +# 35| v35_8297(void) = Call[~String] : func:r35_8296, this:r35_8295 +# 35| mu35_8298(unknown) = ^CallSideEffect : ~m? +# 35| v35_8299(void) = ^IndirectReadSideEffect[-1] : &:r35_8295, ~m? +# 35| mu35_8300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8295 +# 35| r35_8301(bool) = Constant[0] : +# 35| v35_8302(void) = ConditionalBranch : r35_8301 #-----| False -> Block 593 #-----| True -> Block 1026 -# 1798| Block 593 -# 1798| r1798_1(glval) = VariableAddress[x593] : -# 1798| mu1798_2(String) = Uninitialized[x593] : &:r1798_1 -# 1798| r1798_3(glval) = FunctionAddress[String] : -# 1798| v1798_4(void) = Call[String] : func:r1798_3, this:r1798_1 -# 1798| mu1798_5(unknown) = ^CallSideEffect : ~m? -# 1798| mu1798_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1798_1 -# 1799| r1799_1(glval) = VariableAddress[x593] : -# 1799| r1799_2(glval) = FunctionAddress[~String] : -# 1799| v1799_3(void) = Call[~String] : func:r1799_2, this:r1799_1 -# 1799| mu1799_4(unknown) = ^CallSideEffect : ~m? -# 1799| v1799_5(void) = ^IndirectReadSideEffect[-1] : &:r1799_1, ~m? -# 1799| mu1799_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1799_1 -# 1799| r1799_7(bool) = Constant[0] : -# 1799| v1799_8(void) = ConditionalBranch : r1799_7 +# 35| Block 593 +# 35| r35_8303(glval) = VariableAddress[x593] : +# 35| mu35_8304(String) = Uninitialized[x593] : &:r35_8303 +# 35| r35_8305(glval) = FunctionAddress[String] : +# 35| v35_8306(void) = Call[String] : func:r35_8305, this:r35_8303 +# 35| mu35_8307(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8303 +# 35| r35_8309(glval) = VariableAddress[x593] : +# 35| r35_8310(glval) = FunctionAddress[~String] : +# 35| v35_8311(void) = Call[~String] : func:r35_8310, this:r35_8309 +# 35| mu35_8312(unknown) = ^CallSideEffect : ~m? +# 35| v35_8313(void) = ^IndirectReadSideEffect[-1] : &:r35_8309, ~m? +# 35| mu35_8314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8309 +# 35| r35_8315(bool) = Constant[0] : +# 35| v35_8316(void) = ConditionalBranch : r35_8315 #-----| False -> Block 594 #-----| True -> Block 1026 -# 1801| Block 594 -# 1801| r1801_1(glval) = VariableAddress[x594] : -# 1801| mu1801_2(String) = Uninitialized[x594] : &:r1801_1 -# 1801| r1801_3(glval) = FunctionAddress[String] : -# 1801| v1801_4(void) = Call[String] : func:r1801_3, this:r1801_1 -# 1801| mu1801_5(unknown) = ^CallSideEffect : ~m? -# 1801| mu1801_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1801_1 -# 1802| r1802_1(glval) = VariableAddress[x594] : -# 1802| r1802_2(glval) = FunctionAddress[~String] : -# 1802| v1802_3(void) = Call[~String] : func:r1802_2, this:r1802_1 -# 1802| mu1802_4(unknown) = ^CallSideEffect : ~m? -# 1802| v1802_5(void) = ^IndirectReadSideEffect[-1] : &:r1802_1, ~m? -# 1802| mu1802_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1802_1 -# 1802| r1802_7(bool) = Constant[0] : -# 1802| v1802_8(void) = ConditionalBranch : r1802_7 +# 35| Block 594 +# 35| r35_8317(glval) = VariableAddress[x594] : +# 35| mu35_8318(String) = Uninitialized[x594] : &:r35_8317 +# 35| r35_8319(glval) = FunctionAddress[String] : +# 35| v35_8320(void) = Call[String] : func:r35_8319, this:r35_8317 +# 35| mu35_8321(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8317 +# 35| r35_8323(glval) = VariableAddress[x594] : +# 35| r35_8324(glval) = FunctionAddress[~String] : +# 35| v35_8325(void) = Call[~String] : func:r35_8324, this:r35_8323 +# 35| mu35_8326(unknown) = ^CallSideEffect : ~m? +# 35| v35_8327(void) = ^IndirectReadSideEffect[-1] : &:r35_8323, ~m? +# 35| mu35_8328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8323 +# 35| r35_8329(bool) = Constant[0] : +# 35| v35_8330(void) = ConditionalBranch : r35_8329 #-----| False -> Block 595 #-----| True -> Block 1026 -# 1804| Block 595 -# 1804| r1804_1(glval) = VariableAddress[x595] : -# 1804| mu1804_2(String) = Uninitialized[x595] : &:r1804_1 -# 1804| r1804_3(glval) = FunctionAddress[String] : -# 1804| v1804_4(void) = Call[String] : func:r1804_3, this:r1804_1 -# 1804| mu1804_5(unknown) = ^CallSideEffect : ~m? -# 1804| mu1804_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1804_1 -# 1805| r1805_1(glval) = VariableAddress[x595] : -# 1805| r1805_2(glval) = FunctionAddress[~String] : -# 1805| v1805_3(void) = Call[~String] : func:r1805_2, this:r1805_1 -# 1805| mu1805_4(unknown) = ^CallSideEffect : ~m? -# 1805| v1805_5(void) = ^IndirectReadSideEffect[-1] : &:r1805_1, ~m? -# 1805| mu1805_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1805_1 -# 1805| r1805_7(bool) = Constant[0] : -# 1805| v1805_8(void) = ConditionalBranch : r1805_7 +# 35| Block 595 +# 35| r35_8331(glval) = VariableAddress[x595] : +# 35| mu35_8332(String) = Uninitialized[x595] : &:r35_8331 +# 35| r35_8333(glval) = FunctionAddress[String] : +# 35| v35_8334(void) = Call[String] : func:r35_8333, this:r35_8331 +# 35| mu35_8335(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8331 +# 35| r35_8337(glval) = VariableAddress[x595] : +# 35| r35_8338(glval) = FunctionAddress[~String] : +# 35| v35_8339(void) = Call[~String] : func:r35_8338, this:r35_8337 +# 35| mu35_8340(unknown) = ^CallSideEffect : ~m? +# 35| v35_8341(void) = ^IndirectReadSideEffect[-1] : &:r35_8337, ~m? +# 35| mu35_8342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8337 +# 35| r35_8343(bool) = Constant[0] : +# 35| v35_8344(void) = ConditionalBranch : r35_8343 #-----| False -> Block 596 #-----| True -> Block 1026 -# 1807| Block 596 -# 1807| r1807_1(glval) = VariableAddress[x596] : -# 1807| mu1807_2(String) = Uninitialized[x596] : &:r1807_1 -# 1807| r1807_3(glval) = FunctionAddress[String] : -# 1807| v1807_4(void) = Call[String] : func:r1807_3, this:r1807_1 -# 1807| mu1807_5(unknown) = ^CallSideEffect : ~m? -# 1807| mu1807_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1807_1 -# 1808| r1808_1(glval) = VariableAddress[x596] : -# 1808| r1808_2(glval) = FunctionAddress[~String] : -# 1808| v1808_3(void) = Call[~String] : func:r1808_2, this:r1808_1 -# 1808| mu1808_4(unknown) = ^CallSideEffect : ~m? -# 1808| v1808_5(void) = ^IndirectReadSideEffect[-1] : &:r1808_1, ~m? -# 1808| mu1808_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1808_1 -# 1808| r1808_7(bool) = Constant[0] : -# 1808| v1808_8(void) = ConditionalBranch : r1808_7 +# 35| Block 596 +# 35| r35_8345(glval) = VariableAddress[x596] : +# 35| mu35_8346(String) = Uninitialized[x596] : &:r35_8345 +# 35| r35_8347(glval) = FunctionAddress[String] : +# 35| v35_8348(void) = Call[String] : func:r35_8347, this:r35_8345 +# 35| mu35_8349(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8345 +# 35| r35_8351(glval) = VariableAddress[x596] : +# 35| r35_8352(glval) = FunctionAddress[~String] : +# 35| v35_8353(void) = Call[~String] : func:r35_8352, this:r35_8351 +# 35| mu35_8354(unknown) = ^CallSideEffect : ~m? +# 35| v35_8355(void) = ^IndirectReadSideEffect[-1] : &:r35_8351, ~m? +# 35| mu35_8356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8351 +# 35| r35_8357(bool) = Constant[0] : +# 35| v35_8358(void) = ConditionalBranch : r35_8357 #-----| False -> Block 597 #-----| True -> Block 1026 -# 1810| Block 597 -# 1810| r1810_1(glval) = VariableAddress[x597] : -# 1810| mu1810_2(String) = Uninitialized[x597] : &:r1810_1 -# 1810| r1810_3(glval) = FunctionAddress[String] : -# 1810| v1810_4(void) = Call[String] : func:r1810_3, this:r1810_1 -# 1810| mu1810_5(unknown) = ^CallSideEffect : ~m? -# 1810| mu1810_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1810_1 -# 1811| r1811_1(glval) = VariableAddress[x597] : -# 1811| r1811_2(glval) = FunctionAddress[~String] : -# 1811| v1811_3(void) = Call[~String] : func:r1811_2, this:r1811_1 -# 1811| mu1811_4(unknown) = ^CallSideEffect : ~m? -# 1811| v1811_5(void) = ^IndirectReadSideEffect[-1] : &:r1811_1, ~m? -# 1811| mu1811_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1811_1 -# 1811| r1811_7(bool) = Constant[0] : -# 1811| v1811_8(void) = ConditionalBranch : r1811_7 +# 35| Block 597 +# 35| r35_8359(glval) = VariableAddress[x597] : +# 35| mu35_8360(String) = Uninitialized[x597] : &:r35_8359 +# 35| r35_8361(glval) = FunctionAddress[String] : +# 35| v35_8362(void) = Call[String] : func:r35_8361, this:r35_8359 +# 35| mu35_8363(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8359 +# 35| r35_8365(glval) = VariableAddress[x597] : +# 35| r35_8366(glval) = FunctionAddress[~String] : +# 35| v35_8367(void) = Call[~String] : func:r35_8366, this:r35_8365 +# 35| mu35_8368(unknown) = ^CallSideEffect : ~m? +# 35| v35_8369(void) = ^IndirectReadSideEffect[-1] : &:r35_8365, ~m? +# 35| mu35_8370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8365 +# 35| r35_8371(bool) = Constant[0] : +# 35| v35_8372(void) = ConditionalBranch : r35_8371 #-----| False -> Block 598 #-----| True -> Block 1026 -# 1813| Block 598 -# 1813| r1813_1(glval) = VariableAddress[x598] : -# 1813| mu1813_2(String) = Uninitialized[x598] : &:r1813_1 -# 1813| r1813_3(glval) = FunctionAddress[String] : -# 1813| v1813_4(void) = Call[String] : func:r1813_3, this:r1813_1 -# 1813| mu1813_5(unknown) = ^CallSideEffect : ~m? -# 1813| mu1813_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1813_1 -# 1814| r1814_1(glval) = VariableAddress[x598] : -# 1814| r1814_2(glval) = FunctionAddress[~String] : -# 1814| v1814_3(void) = Call[~String] : func:r1814_2, this:r1814_1 -# 1814| mu1814_4(unknown) = ^CallSideEffect : ~m? -# 1814| v1814_5(void) = ^IndirectReadSideEffect[-1] : &:r1814_1, ~m? -# 1814| mu1814_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1814_1 -# 1814| r1814_7(bool) = Constant[0] : -# 1814| v1814_8(void) = ConditionalBranch : r1814_7 +# 35| Block 598 +# 35| r35_8373(glval) = VariableAddress[x598] : +# 35| mu35_8374(String) = Uninitialized[x598] : &:r35_8373 +# 35| r35_8375(glval) = FunctionAddress[String] : +# 35| v35_8376(void) = Call[String] : func:r35_8375, this:r35_8373 +# 35| mu35_8377(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8373 +# 35| r35_8379(glval) = VariableAddress[x598] : +# 35| r35_8380(glval) = FunctionAddress[~String] : +# 35| v35_8381(void) = Call[~String] : func:r35_8380, this:r35_8379 +# 35| mu35_8382(unknown) = ^CallSideEffect : ~m? +# 35| v35_8383(void) = ^IndirectReadSideEffect[-1] : &:r35_8379, ~m? +# 35| mu35_8384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8379 +# 35| r35_8385(bool) = Constant[0] : +# 35| v35_8386(void) = ConditionalBranch : r35_8385 #-----| False -> Block 599 #-----| True -> Block 1026 -# 1816| Block 599 -# 1816| r1816_1(glval) = VariableAddress[x599] : -# 1816| mu1816_2(String) = Uninitialized[x599] : &:r1816_1 -# 1816| r1816_3(glval) = FunctionAddress[String] : -# 1816| v1816_4(void) = Call[String] : func:r1816_3, this:r1816_1 -# 1816| mu1816_5(unknown) = ^CallSideEffect : ~m? -# 1816| mu1816_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1816_1 -# 1817| r1817_1(glval) = VariableAddress[x599] : -# 1817| r1817_2(glval) = FunctionAddress[~String] : -# 1817| v1817_3(void) = Call[~String] : func:r1817_2, this:r1817_1 -# 1817| mu1817_4(unknown) = ^CallSideEffect : ~m? -# 1817| v1817_5(void) = ^IndirectReadSideEffect[-1] : &:r1817_1, ~m? -# 1817| mu1817_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1817_1 -# 1817| r1817_7(bool) = Constant[0] : -# 1817| v1817_8(void) = ConditionalBranch : r1817_7 +# 35| Block 599 +# 35| r35_8387(glval) = VariableAddress[x599] : +# 35| mu35_8388(String) = Uninitialized[x599] : &:r35_8387 +# 35| r35_8389(glval) = FunctionAddress[String] : +# 35| v35_8390(void) = Call[String] : func:r35_8389, this:r35_8387 +# 35| mu35_8391(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8387 +# 35| r35_8393(glval) = VariableAddress[x599] : +# 35| r35_8394(glval) = FunctionAddress[~String] : +# 35| v35_8395(void) = Call[~String] : func:r35_8394, this:r35_8393 +# 35| mu35_8396(unknown) = ^CallSideEffect : ~m? +# 35| v35_8397(void) = ^IndirectReadSideEffect[-1] : &:r35_8393, ~m? +# 35| mu35_8398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8393 +# 35| r35_8399(bool) = Constant[0] : +# 35| v35_8400(void) = ConditionalBranch : r35_8399 #-----| False -> Block 600 #-----| True -> Block 1026 -# 1819| Block 600 -# 1819| r1819_1(glval) = VariableAddress[x600] : -# 1819| mu1819_2(String) = Uninitialized[x600] : &:r1819_1 -# 1819| r1819_3(glval) = FunctionAddress[String] : -# 1819| v1819_4(void) = Call[String] : func:r1819_3, this:r1819_1 -# 1819| mu1819_5(unknown) = ^CallSideEffect : ~m? -# 1819| mu1819_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1819_1 -# 1820| r1820_1(glval) = VariableAddress[x600] : -# 1820| r1820_2(glval) = FunctionAddress[~String] : -# 1820| v1820_3(void) = Call[~String] : func:r1820_2, this:r1820_1 -# 1820| mu1820_4(unknown) = ^CallSideEffect : ~m? -# 1820| v1820_5(void) = ^IndirectReadSideEffect[-1] : &:r1820_1, ~m? -# 1820| mu1820_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1820_1 -# 1820| r1820_7(bool) = Constant[0] : -# 1820| v1820_8(void) = ConditionalBranch : r1820_7 +# 35| Block 600 +# 35| r35_8401(glval) = VariableAddress[x600] : +# 35| mu35_8402(String) = Uninitialized[x600] : &:r35_8401 +# 35| r35_8403(glval) = FunctionAddress[String] : +# 35| v35_8404(void) = Call[String] : func:r35_8403, this:r35_8401 +# 35| mu35_8405(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8401 +# 35| r35_8407(glval) = VariableAddress[x600] : +# 35| r35_8408(glval) = FunctionAddress[~String] : +# 35| v35_8409(void) = Call[~String] : func:r35_8408, this:r35_8407 +# 35| mu35_8410(unknown) = ^CallSideEffect : ~m? +# 35| v35_8411(void) = ^IndirectReadSideEffect[-1] : &:r35_8407, ~m? +# 35| mu35_8412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8407 +# 35| r35_8413(bool) = Constant[0] : +# 35| v35_8414(void) = ConditionalBranch : r35_8413 #-----| False -> Block 601 #-----| True -> Block 1026 -# 1822| Block 601 -# 1822| r1822_1(glval) = VariableAddress[x601] : -# 1822| mu1822_2(String) = Uninitialized[x601] : &:r1822_1 -# 1822| r1822_3(glval) = FunctionAddress[String] : -# 1822| v1822_4(void) = Call[String] : func:r1822_3, this:r1822_1 -# 1822| mu1822_5(unknown) = ^CallSideEffect : ~m? -# 1822| mu1822_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1822_1 -# 1823| r1823_1(glval) = VariableAddress[x601] : -# 1823| r1823_2(glval) = FunctionAddress[~String] : -# 1823| v1823_3(void) = Call[~String] : func:r1823_2, this:r1823_1 -# 1823| mu1823_4(unknown) = ^CallSideEffect : ~m? -# 1823| v1823_5(void) = ^IndirectReadSideEffect[-1] : &:r1823_1, ~m? -# 1823| mu1823_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1823_1 -# 1823| r1823_7(bool) = Constant[0] : -# 1823| v1823_8(void) = ConditionalBranch : r1823_7 +# 35| Block 601 +# 35| r35_8415(glval) = VariableAddress[x601] : +# 35| mu35_8416(String) = Uninitialized[x601] : &:r35_8415 +# 35| r35_8417(glval) = FunctionAddress[String] : +# 35| v35_8418(void) = Call[String] : func:r35_8417, this:r35_8415 +# 35| mu35_8419(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8415 +# 35| r35_8421(glval) = VariableAddress[x601] : +# 35| r35_8422(glval) = FunctionAddress[~String] : +# 35| v35_8423(void) = Call[~String] : func:r35_8422, this:r35_8421 +# 35| mu35_8424(unknown) = ^CallSideEffect : ~m? +# 35| v35_8425(void) = ^IndirectReadSideEffect[-1] : &:r35_8421, ~m? +# 35| mu35_8426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8421 +# 35| r35_8427(bool) = Constant[0] : +# 35| v35_8428(void) = ConditionalBranch : r35_8427 #-----| False -> Block 602 #-----| True -> Block 1026 -# 1825| Block 602 -# 1825| r1825_1(glval) = VariableAddress[x602] : -# 1825| mu1825_2(String) = Uninitialized[x602] : &:r1825_1 -# 1825| r1825_3(glval) = FunctionAddress[String] : -# 1825| v1825_4(void) = Call[String] : func:r1825_3, this:r1825_1 -# 1825| mu1825_5(unknown) = ^CallSideEffect : ~m? -# 1825| mu1825_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1825_1 -# 1826| r1826_1(glval) = VariableAddress[x602] : -# 1826| r1826_2(glval) = FunctionAddress[~String] : -# 1826| v1826_3(void) = Call[~String] : func:r1826_2, this:r1826_1 -# 1826| mu1826_4(unknown) = ^CallSideEffect : ~m? -# 1826| v1826_5(void) = ^IndirectReadSideEffect[-1] : &:r1826_1, ~m? -# 1826| mu1826_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1826_1 -# 1826| r1826_7(bool) = Constant[0] : -# 1826| v1826_8(void) = ConditionalBranch : r1826_7 +# 35| Block 602 +# 35| r35_8429(glval) = VariableAddress[x602] : +# 35| mu35_8430(String) = Uninitialized[x602] : &:r35_8429 +# 35| r35_8431(glval) = FunctionAddress[String] : +# 35| v35_8432(void) = Call[String] : func:r35_8431, this:r35_8429 +# 35| mu35_8433(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8429 +# 35| r35_8435(glval) = VariableAddress[x602] : +# 35| r35_8436(glval) = FunctionAddress[~String] : +# 35| v35_8437(void) = Call[~String] : func:r35_8436, this:r35_8435 +# 35| mu35_8438(unknown) = ^CallSideEffect : ~m? +# 35| v35_8439(void) = ^IndirectReadSideEffect[-1] : &:r35_8435, ~m? +# 35| mu35_8440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8435 +# 35| r35_8441(bool) = Constant[0] : +# 35| v35_8442(void) = ConditionalBranch : r35_8441 #-----| False -> Block 603 #-----| True -> Block 1026 -# 1828| Block 603 -# 1828| r1828_1(glval) = VariableAddress[x603] : -# 1828| mu1828_2(String) = Uninitialized[x603] : &:r1828_1 -# 1828| r1828_3(glval) = FunctionAddress[String] : -# 1828| v1828_4(void) = Call[String] : func:r1828_3, this:r1828_1 -# 1828| mu1828_5(unknown) = ^CallSideEffect : ~m? -# 1828| mu1828_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1828_1 -# 1829| r1829_1(glval) = VariableAddress[x603] : -# 1829| r1829_2(glval) = FunctionAddress[~String] : -# 1829| v1829_3(void) = Call[~String] : func:r1829_2, this:r1829_1 -# 1829| mu1829_4(unknown) = ^CallSideEffect : ~m? -# 1829| v1829_5(void) = ^IndirectReadSideEffect[-1] : &:r1829_1, ~m? -# 1829| mu1829_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1829_1 -# 1829| r1829_7(bool) = Constant[0] : -# 1829| v1829_8(void) = ConditionalBranch : r1829_7 +# 35| Block 603 +# 35| r35_8443(glval) = VariableAddress[x603] : +# 35| mu35_8444(String) = Uninitialized[x603] : &:r35_8443 +# 35| r35_8445(glval) = FunctionAddress[String] : +# 35| v35_8446(void) = Call[String] : func:r35_8445, this:r35_8443 +# 35| mu35_8447(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8443 +# 35| r35_8449(glval) = VariableAddress[x603] : +# 35| r35_8450(glval) = FunctionAddress[~String] : +# 35| v35_8451(void) = Call[~String] : func:r35_8450, this:r35_8449 +# 35| mu35_8452(unknown) = ^CallSideEffect : ~m? +# 35| v35_8453(void) = ^IndirectReadSideEffect[-1] : &:r35_8449, ~m? +# 35| mu35_8454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8449 +# 35| r35_8455(bool) = Constant[0] : +# 35| v35_8456(void) = ConditionalBranch : r35_8455 #-----| False -> Block 604 #-----| True -> Block 1026 -# 1831| Block 604 -# 1831| r1831_1(glval) = VariableAddress[x604] : -# 1831| mu1831_2(String) = Uninitialized[x604] : &:r1831_1 -# 1831| r1831_3(glval) = FunctionAddress[String] : -# 1831| v1831_4(void) = Call[String] : func:r1831_3, this:r1831_1 -# 1831| mu1831_5(unknown) = ^CallSideEffect : ~m? -# 1831| mu1831_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1831_1 -# 1832| r1832_1(glval) = VariableAddress[x604] : -# 1832| r1832_2(glval) = FunctionAddress[~String] : -# 1832| v1832_3(void) = Call[~String] : func:r1832_2, this:r1832_1 -# 1832| mu1832_4(unknown) = ^CallSideEffect : ~m? -# 1832| v1832_5(void) = ^IndirectReadSideEffect[-1] : &:r1832_1, ~m? -# 1832| mu1832_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1832_1 -# 1832| r1832_7(bool) = Constant[0] : -# 1832| v1832_8(void) = ConditionalBranch : r1832_7 +# 35| Block 604 +# 35| r35_8457(glval) = VariableAddress[x604] : +# 35| mu35_8458(String) = Uninitialized[x604] : &:r35_8457 +# 35| r35_8459(glval) = FunctionAddress[String] : +# 35| v35_8460(void) = Call[String] : func:r35_8459, this:r35_8457 +# 35| mu35_8461(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8457 +# 35| r35_8463(glval) = VariableAddress[x604] : +# 35| r35_8464(glval) = FunctionAddress[~String] : +# 35| v35_8465(void) = Call[~String] : func:r35_8464, this:r35_8463 +# 35| mu35_8466(unknown) = ^CallSideEffect : ~m? +# 35| v35_8467(void) = ^IndirectReadSideEffect[-1] : &:r35_8463, ~m? +# 35| mu35_8468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8463 +# 35| r35_8469(bool) = Constant[0] : +# 35| v35_8470(void) = ConditionalBranch : r35_8469 #-----| False -> Block 605 #-----| True -> Block 1026 -# 1834| Block 605 -# 1834| r1834_1(glval) = VariableAddress[x605] : -# 1834| mu1834_2(String) = Uninitialized[x605] : &:r1834_1 -# 1834| r1834_3(glval) = FunctionAddress[String] : -# 1834| v1834_4(void) = Call[String] : func:r1834_3, this:r1834_1 -# 1834| mu1834_5(unknown) = ^CallSideEffect : ~m? -# 1834| mu1834_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1834_1 -# 1835| r1835_1(glval) = VariableAddress[x605] : -# 1835| r1835_2(glval) = FunctionAddress[~String] : -# 1835| v1835_3(void) = Call[~String] : func:r1835_2, this:r1835_1 -# 1835| mu1835_4(unknown) = ^CallSideEffect : ~m? -# 1835| v1835_5(void) = ^IndirectReadSideEffect[-1] : &:r1835_1, ~m? -# 1835| mu1835_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1835_1 -# 1835| r1835_7(bool) = Constant[0] : -# 1835| v1835_8(void) = ConditionalBranch : r1835_7 +# 35| Block 605 +# 35| r35_8471(glval) = VariableAddress[x605] : +# 35| mu35_8472(String) = Uninitialized[x605] : &:r35_8471 +# 35| r35_8473(glval) = FunctionAddress[String] : +# 35| v35_8474(void) = Call[String] : func:r35_8473, this:r35_8471 +# 35| mu35_8475(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8471 +# 35| r35_8477(glval) = VariableAddress[x605] : +# 35| r35_8478(glval) = FunctionAddress[~String] : +# 35| v35_8479(void) = Call[~String] : func:r35_8478, this:r35_8477 +# 35| mu35_8480(unknown) = ^CallSideEffect : ~m? +# 35| v35_8481(void) = ^IndirectReadSideEffect[-1] : &:r35_8477, ~m? +# 35| mu35_8482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8477 +# 35| r35_8483(bool) = Constant[0] : +# 35| v35_8484(void) = ConditionalBranch : r35_8483 #-----| False -> Block 606 #-----| True -> Block 1026 -# 1837| Block 606 -# 1837| r1837_1(glval) = VariableAddress[x606] : -# 1837| mu1837_2(String) = Uninitialized[x606] : &:r1837_1 -# 1837| r1837_3(glval) = FunctionAddress[String] : -# 1837| v1837_4(void) = Call[String] : func:r1837_3, this:r1837_1 -# 1837| mu1837_5(unknown) = ^CallSideEffect : ~m? -# 1837| mu1837_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1837_1 -# 1838| r1838_1(glval) = VariableAddress[x606] : -# 1838| r1838_2(glval) = FunctionAddress[~String] : -# 1838| v1838_3(void) = Call[~String] : func:r1838_2, this:r1838_1 -# 1838| mu1838_4(unknown) = ^CallSideEffect : ~m? -# 1838| v1838_5(void) = ^IndirectReadSideEffect[-1] : &:r1838_1, ~m? -# 1838| mu1838_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1838_1 -# 1838| r1838_7(bool) = Constant[0] : -# 1838| v1838_8(void) = ConditionalBranch : r1838_7 +# 35| Block 606 +# 35| r35_8485(glval) = VariableAddress[x606] : +# 35| mu35_8486(String) = Uninitialized[x606] : &:r35_8485 +# 35| r35_8487(glval) = FunctionAddress[String] : +# 35| v35_8488(void) = Call[String] : func:r35_8487, this:r35_8485 +# 35| mu35_8489(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8485 +# 35| r35_8491(glval) = VariableAddress[x606] : +# 35| r35_8492(glval) = FunctionAddress[~String] : +# 35| v35_8493(void) = Call[~String] : func:r35_8492, this:r35_8491 +# 35| mu35_8494(unknown) = ^CallSideEffect : ~m? +# 35| v35_8495(void) = ^IndirectReadSideEffect[-1] : &:r35_8491, ~m? +# 35| mu35_8496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8491 +# 35| r35_8497(bool) = Constant[0] : +# 35| v35_8498(void) = ConditionalBranch : r35_8497 #-----| False -> Block 607 #-----| True -> Block 1026 -# 1840| Block 607 -# 1840| r1840_1(glval) = VariableAddress[x607] : -# 1840| mu1840_2(String) = Uninitialized[x607] : &:r1840_1 -# 1840| r1840_3(glval) = FunctionAddress[String] : -# 1840| v1840_4(void) = Call[String] : func:r1840_3, this:r1840_1 -# 1840| mu1840_5(unknown) = ^CallSideEffect : ~m? -# 1840| mu1840_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1840_1 -# 1841| r1841_1(glval) = VariableAddress[x607] : -# 1841| r1841_2(glval) = FunctionAddress[~String] : -# 1841| v1841_3(void) = Call[~String] : func:r1841_2, this:r1841_1 -# 1841| mu1841_4(unknown) = ^CallSideEffect : ~m? -# 1841| v1841_5(void) = ^IndirectReadSideEffect[-1] : &:r1841_1, ~m? -# 1841| mu1841_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1841_1 -# 1841| r1841_7(bool) = Constant[0] : -# 1841| v1841_8(void) = ConditionalBranch : r1841_7 +# 35| Block 607 +# 35| r35_8499(glval) = VariableAddress[x607] : +# 35| mu35_8500(String) = Uninitialized[x607] : &:r35_8499 +# 35| r35_8501(glval) = FunctionAddress[String] : +# 35| v35_8502(void) = Call[String] : func:r35_8501, this:r35_8499 +# 35| mu35_8503(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8499 +# 35| r35_8505(glval) = VariableAddress[x607] : +# 35| r35_8506(glval) = FunctionAddress[~String] : +# 35| v35_8507(void) = Call[~String] : func:r35_8506, this:r35_8505 +# 35| mu35_8508(unknown) = ^CallSideEffect : ~m? +# 35| v35_8509(void) = ^IndirectReadSideEffect[-1] : &:r35_8505, ~m? +# 35| mu35_8510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8505 +# 35| r35_8511(bool) = Constant[0] : +# 35| v35_8512(void) = ConditionalBranch : r35_8511 #-----| False -> Block 608 #-----| True -> Block 1026 -# 1843| Block 608 -# 1843| r1843_1(glval) = VariableAddress[x608] : -# 1843| mu1843_2(String) = Uninitialized[x608] : &:r1843_1 -# 1843| r1843_3(glval) = FunctionAddress[String] : -# 1843| v1843_4(void) = Call[String] : func:r1843_3, this:r1843_1 -# 1843| mu1843_5(unknown) = ^CallSideEffect : ~m? -# 1843| mu1843_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1843_1 -# 1844| r1844_1(glval) = VariableAddress[x608] : -# 1844| r1844_2(glval) = FunctionAddress[~String] : -# 1844| v1844_3(void) = Call[~String] : func:r1844_2, this:r1844_1 -# 1844| mu1844_4(unknown) = ^CallSideEffect : ~m? -# 1844| v1844_5(void) = ^IndirectReadSideEffect[-1] : &:r1844_1, ~m? -# 1844| mu1844_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| r1844_7(bool) = Constant[0] : -# 1844| v1844_8(void) = ConditionalBranch : r1844_7 +# 35| Block 608 +# 35| r35_8513(glval) = VariableAddress[x608] : +# 35| mu35_8514(String) = Uninitialized[x608] : &:r35_8513 +# 35| r35_8515(glval) = FunctionAddress[String] : +# 35| v35_8516(void) = Call[String] : func:r35_8515, this:r35_8513 +# 35| mu35_8517(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8513 +# 35| r35_8519(glval) = VariableAddress[x608] : +# 35| r35_8520(glval) = FunctionAddress[~String] : +# 35| v35_8521(void) = Call[~String] : func:r35_8520, this:r35_8519 +# 35| mu35_8522(unknown) = ^CallSideEffect : ~m? +# 35| v35_8523(void) = ^IndirectReadSideEffect[-1] : &:r35_8519, ~m? +# 35| mu35_8524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8519 +# 35| r35_8525(bool) = Constant[0] : +# 35| v35_8526(void) = ConditionalBranch : r35_8525 #-----| False -> Block 609 #-----| True -> Block 1026 -# 1846| Block 609 -# 1846| r1846_1(glval) = VariableAddress[x609] : -# 1846| mu1846_2(String) = Uninitialized[x609] : &:r1846_1 -# 1846| r1846_3(glval) = FunctionAddress[String] : -# 1846| v1846_4(void) = Call[String] : func:r1846_3, this:r1846_1 -# 1846| mu1846_5(unknown) = ^CallSideEffect : ~m? -# 1846| mu1846_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 -# 1847| r1847_1(glval) = VariableAddress[x609] : -# 1847| r1847_2(glval) = FunctionAddress[~String] : -# 1847| v1847_3(void) = Call[~String] : func:r1847_2, this:r1847_1 -# 1847| mu1847_4(unknown) = ^CallSideEffect : ~m? -# 1847| v1847_5(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, ~m? -# 1847| mu1847_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 -# 1847| r1847_7(bool) = Constant[0] : -# 1847| v1847_8(void) = ConditionalBranch : r1847_7 +# 35| Block 609 +# 35| r35_8527(glval) = VariableAddress[x609] : +# 35| mu35_8528(String) = Uninitialized[x609] : &:r35_8527 +# 35| r35_8529(glval) = FunctionAddress[String] : +# 35| v35_8530(void) = Call[String] : func:r35_8529, this:r35_8527 +# 35| mu35_8531(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8527 +# 35| r35_8533(glval) = VariableAddress[x609] : +# 35| r35_8534(glval) = FunctionAddress[~String] : +# 35| v35_8535(void) = Call[~String] : func:r35_8534, this:r35_8533 +# 35| mu35_8536(unknown) = ^CallSideEffect : ~m? +# 35| v35_8537(void) = ^IndirectReadSideEffect[-1] : &:r35_8533, ~m? +# 35| mu35_8538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8533 +# 35| r35_8539(bool) = Constant[0] : +# 35| v35_8540(void) = ConditionalBranch : r35_8539 #-----| False -> Block 610 #-----| True -> Block 1026 -# 1849| Block 610 -# 1849| r1849_1(glval) = VariableAddress[x610] : -# 1849| mu1849_2(String) = Uninitialized[x610] : &:r1849_1 -# 1849| r1849_3(glval) = FunctionAddress[String] : -# 1849| v1849_4(void) = Call[String] : func:r1849_3, this:r1849_1 -# 1849| mu1849_5(unknown) = ^CallSideEffect : ~m? -# 1849| mu1849_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1849_1 -# 1850| r1850_1(glval) = VariableAddress[x610] : -# 1850| r1850_2(glval) = FunctionAddress[~String] : -# 1850| v1850_3(void) = Call[~String] : func:r1850_2, this:r1850_1 -# 1850| mu1850_4(unknown) = ^CallSideEffect : ~m? -# 1850| v1850_5(void) = ^IndirectReadSideEffect[-1] : &:r1850_1, ~m? -# 1850| mu1850_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1850_1 -# 1850| r1850_7(bool) = Constant[0] : -# 1850| v1850_8(void) = ConditionalBranch : r1850_7 +# 35| Block 610 +# 35| r35_8541(glval) = VariableAddress[x610] : +# 35| mu35_8542(String) = Uninitialized[x610] : &:r35_8541 +# 35| r35_8543(glval) = FunctionAddress[String] : +# 35| v35_8544(void) = Call[String] : func:r35_8543, this:r35_8541 +# 35| mu35_8545(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8541 +# 35| r35_8547(glval) = VariableAddress[x610] : +# 35| r35_8548(glval) = FunctionAddress[~String] : +# 35| v35_8549(void) = Call[~String] : func:r35_8548, this:r35_8547 +# 35| mu35_8550(unknown) = ^CallSideEffect : ~m? +# 35| v35_8551(void) = ^IndirectReadSideEffect[-1] : &:r35_8547, ~m? +# 35| mu35_8552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8547 +# 35| r35_8553(bool) = Constant[0] : +# 35| v35_8554(void) = ConditionalBranch : r35_8553 #-----| False -> Block 611 #-----| True -> Block 1026 -# 1852| Block 611 -# 1852| r1852_1(glval) = VariableAddress[x611] : -# 1852| mu1852_2(String) = Uninitialized[x611] : &:r1852_1 -# 1852| r1852_3(glval) = FunctionAddress[String] : -# 1852| v1852_4(void) = Call[String] : func:r1852_3, this:r1852_1 -# 1852| mu1852_5(unknown) = ^CallSideEffect : ~m? -# 1852| mu1852_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1852_1 -# 1853| r1853_1(glval) = VariableAddress[x611] : -# 1853| r1853_2(glval) = FunctionAddress[~String] : -# 1853| v1853_3(void) = Call[~String] : func:r1853_2, this:r1853_1 -# 1853| mu1853_4(unknown) = ^CallSideEffect : ~m? -# 1853| v1853_5(void) = ^IndirectReadSideEffect[-1] : &:r1853_1, ~m? -# 1853| mu1853_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1853_1 -# 1853| r1853_7(bool) = Constant[0] : -# 1853| v1853_8(void) = ConditionalBranch : r1853_7 +# 35| Block 611 +# 35| r35_8555(glval) = VariableAddress[x611] : +# 35| mu35_8556(String) = Uninitialized[x611] : &:r35_8555 +# 35| r35_8557(glval) = FunctionAddress[String] : +# 35| v35_8558(void) = Call[String] : func:r35_8557, this:r35_8555 +# 35| mu35_8559(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8555 +# 35| r35_8561(glval) = VariableAddress[x611] : +# 35| r35_8562(glval) = FunctionAddress[~String] : +# 35| v35_8563(void) = Call[~String] : func:r35_8562, this:r35_8561 +# 35| mu35_8564(unknown) = ^CallSideEffect : ~m? +# 35| v35_8565(void) = ^IndirectReadSideEffect[-1] : &:r35_8561, ~m? +# 35| mu35_8566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8561 +# 35| r35_8567(bool) = Constant[0] : +# 35| v35_8568(void) = ConditionalBranch : r35_8567 #-----| False -> Block 612 #-----| True -> Block 1026 -# 1855| Block 612 -# 1855| r1855_1(glval) = VariableAddress[x612] : -# 1855| mu1855_2(String) = Uninitialized[x612] : &:r1855_1 -# 1855| r1855_3(glval) = FunctionAddress[String] : -# 1855| v1855_4(void) = Call[String] : func:r1855_3, this:r1855_1 -# 1855| mu1855_5(unknown) = ^CallSideEffect : ~m? -# 1855| mu1855_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1855_1 -# 1856| r1856_1(glval) = VariableAddress[x612] : -# 1856| r1856_2(glval) = FunctionAddress[~String] : -# 1856| v1856_3(void) = Call[~String] : func:r1856_2, this:r1856_1 -# 1856| mu1856_4(unknown) = ^CallSideEffect : ~m? -# 1856| v1856_5(void) = ^IndirectReadSideEffect[-1] : &:r1856_1, ~m? -# 1856| mu1856_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1856_1 -# 1856| r1856_7(bool) = Constant[0] : -# 1856| v1856_8(void) = ConditionalBranch : r1856_7 +# 35| Block 612 +# 35| r35_8569(glval) = VariableAddress[x612] : +# 35| mu35_8570(String) = Uninitialized[x612] : &:r35_8569 +# 35| r35_8571(glval) = FunctionAddress[String] : +# 35| v35_8572(void) = Call[String] : func:r35_8571, this:r35_8569 +# 35| mu35_8573(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8569 +# 35| r35_8575(glval) = VariableAddress[x612] : +# 35| r35_8576(glval) = FunctionAddress[~String] : +# 35| v35_8577(void) = Call[~String] : func:r35_8576, this:r35_8575 +# 35| mu35_8578(unknown) = ^CallSideEffect : ~m? +# 35| v35_8579(void) = ^IndirectReadSideEffect[-1] : &:r35_8575, ~m? +# 35| mu35_8580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8575 +# 35| r35_8581(bool) = Constant[0] : +# 35| v35_8582(void) = ConditionalBranch : r35_8581 #-----| False -> Block 613 #-----| True -> Block 1026 -# 1858| Block 613 -# 1858| r1858_1(glval) = VariableAddress[x613] : -# 1858| mu1858_2(String) = Uninitialized[x613] : &:r1858_1 -# 1858| r1858_3(glval) = FunctionAddress[String] : -# 1858| v1858_4(void) = Call[String] : func:r1858_3, this:r1858_1 -# 1858| mu1858_5(unknown) = ^CallSideEffect : ~m? -# 1858| mu1858_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1858_1 -# 1859| r1859_1(glval) = VariableAddress[x613] : -# 1859| r1859_2(glval) = FunctionAddress[~String] : -# 1859| v1859_3(void) = Call[~String] : func:r1859_2, this:r1859_1 -# 1859| mu1859_4(unknown) = ^CallSideEffect : ~m? -# 1859| v1859_5(void) = ^IndirectReadSideEffect[-1] : &:r1859_1, ~m? -# 1859| mu1859_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1859_1 -# 1859| r1859_7(bool) = Constant[0] : -# 1859| v1859_8(void) = ConditionalBranch : r1859_7 +# 35| Block 613 +# 35| r35_8583(glval) = VariableAddress[x613] : +# 35| mu35_8584(String) = Uninitialized[x613] : &:r35_8583 +# 35| r35_8585(glval) = FunctionAddress[String] : +# 35| v35_8586(void) = Call[String] : func:r35_8585, this:r35_8583 +# 35| mu35_8587(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8583 +# 35| r35_8589(glval) = VariableAddress[x613] : +# 35| r35_8590(glval) = FunctionAddress[~String] : +# 35| v35_8591(void) = Call[~String] : func:r35_8590, this:r35_8589 +# 35| mu35_8592(unknown) = ^CallSideEffect : ~m? +# 35| v35_8593(void) = ^IndirectReadSideEffect[-1] : &:r35_8589, ~m? +# 35| mu35_8594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8589 +# 35| r35_8595(bool) = Constant[0] : +# 35| v35_8596(void) = ConditionalBranch : r35_8595 #-----| False -> Block 614 #-----| True -> Block 1026 -# 1861| Block 614 -# 1861| r1861_1(glval) = VariableAddress[x614] : -# 1861| mu1861_2(String) = Uninitialized[x614] : &:r1861_1 -# 1861| r1861_3(glval) = FunctionAddress[String] : -# 1861| v1861_4(void) = Call[String] : func:r1861_3, this:r1861_1 -# 1861| mu1861_5(unknown) = ^CallSideEffect : ~m? -# 1861| mu1861_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1861_1 -# 1862| r1862_1(glval) = VariableAddress[x614] : -# 1862| r1862_2(glval) = FunctionAddress[~String] : -# 1862| v1862_3(void) = Call[~String] : func:r1862_2, this:r1862_1 -# 1862| mu1862_4(unknown) = ^CallSideEffect : ~m? -# 1862| v1862_5(void) = ^IndirectReadSideEffect[-1] : &:r1862_1, ~m? -# 1862| mu1862_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1862_1 -# 1862| r1862_7(bool) = Constant[0] : -# 1862| v1862_8(void) = ConditionalBranch : r1862_7 +# 35| Block 614 +# 35| r35_8597(glval) = VariableAddress[x614] : +# 35| mu35_8598(String) = Uninitialized[x614] : &:r35_8597 +# 35| r35_8599(glval) = FunctionAddress[String] : +# 35| v35_8600(void) = Call[String] : func:r35_8599, this:r35_8597 +# 35| mu35_8601(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8597 +# 35| r35_8603(glval) = VariableAddress[x614] : +# 35| r35_8604(glval) = FunctionAddress[~String] : +# 35| v35_8605(void) = Call[~String] : func:r35_8604, this:r35_8603 +# 35| mu35_8606(unknown) = ^CallSideEffect : ~m? +# 35| v35_8607(void) = ^IndirectReadSideEffect[-1] : &:r35_8603, ~m? +# 35| mu35_8608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8603 +# 35| r35_8609(bool) = Constant[0] : +# 35| v35_8610(void) = ConditionalBranch : r35_8609 #-----| False -> Block 615 #-----| True -> Block 1026 -# 1864| Block 615 -# 1864| r1864_1(glval) = VariableAddress[x615] : -# 1864| mu1864_2(String) = Uninitialized[x615] : &:r1864_1 -# 1864| r1864_3(glval) = FunctionAddress[String] : -# 1864| v1864_4(void) = Call[String] : func:r1864_3, this:r1864_1 -# 1864| mu1864_5(unknown) = ^CallSideEffect : ~m? -# 1864| mu1864_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1864_1 -# 1865| r1865_1(glval) = VariableAddress[x615] : -# 1865| r1865_2(glval) = FunctionAddress[~String] : -# 1865| v1865_3(void) = Call[~String] : func:r1865_2, this:r1865_1 -# 1865| mu1865_4(unknown) = ^CallSideEffect : ~m? -# 1865| v1865_5(void) = ^IndirectReadSideEffect[-1] : &:r1865_1, ~m? -# 1865| mu1865_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1865_1 -# 1865| r1865_7(bool) = Constant[0] : -# 1865| v1865_8(void) = ConditionalBranch : r1865_7 +# 35| Block 615 +# 35| r35_8611(glval) = VariableAddress[x615] : +# 35| mu35_8612(String) = Uninitialized[x615] : &:r35_8611 +# 35| r35_8613(glval) = FunctionAddress[String] : +# 35| v35_8614(void) = Call[String] : func:r35_8613, this:r35_8611 +# 35| mu35_8615(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8611 +# 35| r35_8617(glval) = VariableAddress[x615] : +# 35| r35_8618(glval) = FunctionAddress[~String] : +# 35| v35_8619(void) = Call[~String] : func:r35_8618, this:r35_8617 +# 35| mu35_8620(unknown) = ^CallSideEffect : ~m? +# 35| v35_8621(void) = ^IndirectReadSideEffect[-1] : &:r35_8617, ~m? +# 35| mu35_8622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8617 +# 35| r35_8623(bool) = Constant[0] : +# 35| v35_8624(void) = ConditionalBranch : r35_8623 #-----| False -> Block 616 #-----| True -> Block 1026 -# 1867| Block 616 -# 1867| r1867_1(glval) = VariableAddress[x616] : -# 1867| mu1867_2(String) = Uninitialized[x616] : &:r1867_1 -# 1867| r1867_3(glval) = FunctionAddress[String] : -# 1867| v1867_4(void) = Call[String] : func:r1867_3, this:r1867_1 -# 1867| mu1867_5(unknown) = ^CallSideEffect : ~m? -# 1867| mu1867_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1867_1 -# 1868| r1868_1(glval) = VariableAddress[x616] : -# 1868| r1868_2(glval) = FunctionAddress[~String] : -# 1868| v1868_3(void) = Call[~String] : func:r1868_2, this:r1868_1 -# 1868| mu1868_4(unknown) = ^CallSideEffect : ~m? -# 1868| v1868_5(void) = ^IndirectReadSideEffect[-1] : &:r1868_1, ~m? -# 1868| mu1868_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1868_1 -# 1868| r1868_7(bool) = Constant[0] : -# 1868| v1868_8(void) = ConditionalBranch : r1868_7 +# 35| Block 616 +# 35| r35_8625(glval) = VariableAddress[x616] : +# 35| mu35_8626(String) = Uninitialized[x616] : &:r35_8625 +# 35| r35_8627(glval) = FunctionAddress[String] : +# 35| v35_8628(void) = Call[String] : func:r35_8627, this:r35_8625 +# 35| mu35_8629(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8625 +# 35| r35_8631(glval) = VariableAddress[x616] : +# 35| r35_8632(glval) = FunctionAddress[~String] : +# 35| v35_8633(void) = Call[~String] : func:r35_8632, this:r35_8631 +# 35| mu35_8634(unknown) = ^CallSideEffect : ~m? +# 35| v35_8635(void) = ^IndirectReadSideEffect[-1] : &:r35_8631, ~m? +# 35| mu35_8636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8631 +# 35| r35_8637(bool) = Constant[0] : +# 35| v35_8638(void) = ConditionalBranch : r35_8637 #-----| False -> Block 617 #-----| True -> Block 1026 -# 1870| Block 617 -# 1870| r1870_1(glval) = VariableAddress[x617] : -# 1870| mu1870_2(String) = Uninitialized[x617] : &:r1870_1 -# 1870| r1870_3(glval) = FunctionAddress[String] : -# 1870| v1870_4(void) = Call[String] : func:r1870_3, this:r1870_1 -# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m? -# 1870| mu1870_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1871| r1871_1(glval) = VariableAddress[x617] : -# 1871| r1871_2(glval) = FunctionAddress[~String] : -# 1871| v1871_3(void) = Call[~String] : func:r1871_2, this:r1871_1 -# 1871| mu1871_4(unknown) = ^CallSideEffect : ~m? -# 1871| v1871_5(void) = ^IndirectReadSideEffect[-1] : &:r1871_1, ~m? -# 1871| mu1871_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1871_1 -# 1871| r1871_7(bool) = Constant[0] : -# 1871| v1871_8(void) = ConditionalBranch : r1871_7 +# 35| Block 617 +# 35| r35_8639(glval) = VariableAddress[x617] : +# 35| mu35_8640(String) = Uninitialized[x617] : &:r35_8639 +# 35| r35_8641(glval) = FunctionAddress[String] : +# 35| v35_8642(void) = Call[String] : func:r35_8641, this:r35_8639 +# 35| mu35_8643(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8639 +# 35| r35_8645(glval) = VariableAddress[x617] : +# 35| r35_8646(glval) = FunctionAddress[~String] : +# 35| v35_8647(void) = Call[~String] : func:r35_8646, this:r35_8645 +# 35| mu35_8648(unknown) = ^CallSideEffect : ~m? +# 35| v35_8649(void) = ^IndirectReadSideEffect[-1] : &:r35_8645, ~m? +# 35| mu35_8650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8645 +# 35| r35_8651(bool) = Constant[0] : +# 35| v35_8652(void) = ConditionalBranch : r35_8651 #-----| False -> Block 618 #-----| True -> Block 1026 -# 1873| Block 618 -# 1873| r1873_1(glval) = VariableAddress[x618] : -# 1873| mu1873_2(String) = Uninitialized[x618] : &:r1873_1 -# 1873| r1873_3(glval) = FunctionAddress[String] : -# 1873| v1873_4(void) = Call[String] : func:r1873_3, this:r1873_1 -# 1873| mu1873_5(unknown) = ^CallSideEffect : ~m? -# 1873| mu1873_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1873_1 -# 1874| r1874_1(glval) = VariableAddress[x618] : -# 1874| r1874_2(glval) = FunctionAddress[~String] : -# 1874| v1874_3(void) = Call[~String] : func:r1874_2, this:r1874_1 -# 1874| mu1874_4(unknown) = ^CallSideEffect : ~m? -# 1874| v1874_5(void) = ^IndirectReadSideEffect[-1] : &:r1874_1, ~m? -# 1874| mu1874_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1874_1 -# 1874| r1874_7(bool) = Constant[0] : -# 1874| v1874_8(void) = ConditionalBranch : r1874_7 +# 35| Block 618 +# 35| r35_8653(glval) = VariableAddress[x618] : +# 35| mu35_8654(String) = Uninitialized[x618] : &:r35_8653 +# 35| r35_8655(glval) = FunctionAddress[String] : +# 35| v35_8656(void) = Call[String] : func:r35_8655, this:r35_8653 +# 35| mu35_8657(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8653 +# 35| r35_8659(glval) = VariableAddress[x618] : +# 35| r35_8660(glval) = FunctionAddress[~String] : +# 35| v35_8661(void) = Call[~String] : func:r35_8660, this:r35_8659 +# 35| mu35_8662(unknown) = ^CallSideEffect : ~m? +# 35| v35_8663(void) = ^IndirectReadSideEffect[-1] : &:r35_8659, ~m? +# 35| mu35_8664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8659 +# 35| r35_8665(bool) = Constant[0] : +# 35| v35_8666(void) = ConditionalBranch : r35_8665 #-----| False -> Block 619 #-----| True -> Block 1026 -# 1876| Block 619 -# 1876| r1876_1(glval) = VariableAddress[x619] : -# 1876| mu1876_2(String) = Uninitialized[x619] : &:r1876_1 -# 1876| r1876_3(glval) = FunctionAddress[String] : -# 1876| v1876_4(void) = Call[String] : func:r1876_3, this:r1876_1 -# 1876| mu1876_5(unknown) = ^CallSideEffect : ~m? -# 1876| mu1876_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1876_1 -# 1877| r1877_1(glval) = VariableAddress[x619] : -# 1877| r1877_2(glval) = FunctionAddress[~String] : -# 1877| v1877_3(void) = Call[~String] : func:r1877_2, this:r1877_1 -# 1877| mu1877_4(unknown) = ^CallSideEffect : ~m? -# 1877| v1877_5(void) = ^IndirectReadSideEffect[-1] : &:r1877_1, ~m? -# 1877| mu1877_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1877_1 -# 1877| r1877_7(bool) = Constant[0] : -# 1877| v1877_8(void) = ConditionalBranch : r1877_7 +# 35| Block 619 +# 35| r35_8667(glval) = VariableAddress[x619] : +# 35| mu35_8668(String) = Uninitialized[x619] : &:r35_8667 +# 35| r35_8669(glval) = FunctionAddress[String] : +# 35| v35_8670(void) = Call[String] : func:r35_8669, this:r35_8667 +# 35| mu35_8671(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8667 +# 35| r35_8673(glval) = VariableAddress[x619] : +# 35| r35_8674(glval) = FunctionAddress[~String] : +# 35| v35_8675(void) = Call[~String] : func:r35_8674, this:r35_8673 +# 35| mu35_8676(unknown) = ^CallSideEffect : ~m? +# 35| v35_8677(void) = ^IndirectReadSideEffect[-1] : &:r35_8673, ~m? +# 35| mu35_8678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8673 +# 35| r35_8679(bool) = Constant[0] : +# 35| v35_8680(void) = ConditionalBranch : r35_8679 #-----| False -> Block 620 #-----| True -> Block 1026 -# 1879| Block 620 -# 1879| r1879_1(glval) = VariableAddress[x620] : -# 1879| mu1879_2(String) = Uninitialized[x620] : &:r1879_1 -# 1879| r1879_3(glval) = FunctionAddress[String] : -# 1879| v1879_4(void) = Call[String] : func:r1879_3, this:r1879_1 -# 1879| mu1879_5(unknown) = ^CallSideEffect : ~m? -# 1879| mu1879_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1879_1 -# 1880| r1880_1(glval) = VariableAddress[x620] : -# 1880| r1880_2(glval) = FunctionAddress[~String] : -# 1880| v1880_3(void) = Call[~String] : func:r1880_2, this:r1880_1 -# 1880| mu1880_4(unknown) = ^CallSideEffect : ~m? -# 1880| v1880_5(void) = ^IndirectReadSideEffect[-1] : &:r1880_1, ~m? -# 1880| mu1880_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1880_1 -# 1880| r1880_7(bool) = Constant[0] : -# 1880| v1880_8(void) = ConditionalBranch : r1880_7 +# 35| Block 620 +# 35| r35_8681(glval) = VariableAddress[x620] : +# 35| mu35_8682(String) = Uninitialized[x620] : &:r35_8681 +# 35| r35_8683(glval) = FunctionAddress[String] : +# 35| v35_8684(void) = Call[String] : func:r35_8683, this:r35_8681 +# 35| mu35_8685(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8681 +# 35| r35_8687(glval) = VariableAddress[x620] : +# 35| r35_8688(glval) = FunctionAddress[~String] : +# 35| v35_8689(void) = Call[~String] : func:r35_8688, this:r35_8687 +# 35| mu35_8690(unknown) = ^CallSideEffect : ~m? +# 35| v35_8691(void) = ^IndirectReadSideEffect[-1] : &:r35_8687, ~m? +# 35| mu35_8692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8687 +# 35| r35_8693(bool) = Constant[0] : +# 35| v35_8694(void) = ConditionalBranch : r35_8693 #-----| False -> Block 621 #-----| True -> Block 1026 -# 1882| Block 621 -# 1882| r1882_1(glval) = VariableAddress[x621] : -# 1882| mu1882_2(String) = Uninitialized[x621] : &:r1882_1 -# 1882| r1882_3(glval) = FunctionAddress[String] : -# 1882| v1882_4(void) = Call[String] : func:r1882_3, this:r1882_1 -# 1882| mu1882_5(unknown) = ^CallSideEffect : ~m? -# 1882| mu1882_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1882_1 -# 1883| r1883_1(glval) = VariableAddress[x621] : -# 1883| r1883_2(glval) = FunctionAddress[~String] : -# 1883| v1883_3(void) = Call[~String] : func:r1883_2, this:r1883_1 -# 1883| mu1883_4(unknown) = ^CallSideEffect : ~m? -# 1883| v1883_5(void) = ^IndirectReadSideEffect[-1] : &:r1883_1, ~m? -# 1883| mu1883_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1883_1 -# 1883| r1883_7(bool) = Constant[0] : -# 1883| v1883_8(void) = ConditionalBranch : r1883_7 +# 35| Block 621 +# 35| r35_8695(glval) = VariableAddress[x621] : +# 35| mu35_8696(String) = Uninitialized[x621] : &:r35_8695 +# 35| r35_8697(glval) = FunctionAddress[String] : +# 35| v35_8698(void) = Call[String] : func:r35_8697, this:r35_8695 +# 35| mu35_8699(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8695 +# 35| r35_8701(glval) = VariableAddress[x621] : +# 35| r35_8702(glval) = FunctionAddress[~String] : +# 35| v35_8703(void) = Call[~String] : func:r35_8702, this:r35_8701 +# 35| mu35_8704(unknown) = ^CallSideEffect : ~m? +# 35| v35_8705(void) = ^IndirectReadSideEffect[-1] : &:r35_8701, ~m? +# 35| mu35_8706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8701 +# 35| r35_8707(bool) = Constant[0] : +# 35| v35_8708(void) = ConditionalBranch : r35_8707 #-----| False -> Block 622 #-----| True -> Block 1026 -# 1885| Block 622 -# 1885| r1885_1(glval) = VariableAddress[x622] : -# 1885| mu1885_2(String) = Uninitialized[x622] : &:r1885_1 -# 1885| r1885_3(glval) = FunctionAddress[String] : -# 1885| v1885_4(void) = Call[String] : func:r1885_3, this:r1885_1 -# 1885| mu1885_5(unknown) = ^CallSideEffect : ~m? -# 1885| mu1885_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1886| r1886_1(glval) = VariableAddress[x622] : -# 1886| r1886_2(glval) = FunctionAddress[~String] : -# 1886| v1886_3(void) = Call[~String] : func:r1886_2, this:r1886_1 -# 1886| mu1886_4(unknown) = ^CallSideEffect : ~m? -# 1886| v1886_5(void) = ^IndirectReadSideEffect[-1] : &:r1886_1, ~m? -# 1886| mu1886_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1886_1 -# 1886| r1886_7(bool) = Constant[0] : -# 1886| v1886_8(void) = ConditionalBranch : r1886_7 +# 35| Block 622 +# 35| r35_8709(glval) = VariableAddress[x622] : +# 35| mu35_8710(String) = Uninitialized[x622] : &:r35_8709 +# 35| r35_8711(glval) = FunctionAddress[String] : +# 35| v35_8712(void) = Call[String] : func:r35_8711, this:r35_8709 +# 35| mu35_8713(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8709 +# 35| r35_8715(glval) = VariableAddress[x622] : +# 35| r35_8716(glval) = FunctionAddress[~String] : +# 35| v35_8717(void) = Call[~String] : func:r35_8716, this:r35_8715 +# 35| mu35_8718(unknown) = ^CallSideEffect : ~m? +# 35| v35_8719(void) = ^IndirectReadSideEffect[-1] : &:r35_8715, ~m? +# 35| mu35_8720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8715 +# 35| r35_8721(bool) = Constant[0] : +# 35| v35_8722(void) = ConditionalBranch : r35_8721 #-----| False -> Block 623 #-----| True -> Block 1026 -# 1888| Block 623 -# 1888| r1888_1(glval) = VariableAddress[x623] : -# 1888| mu1888_2(String) = Uninitialized[x623] : &:r1888_1 -# 1888| r1888_3(glval) = FunctionAddress[String] : -# 1888| v1888_4(void) = Call[String] : func:r1888_3, this:r1888_1 -# 1888| mu1888_5(unknown) = ^CallSideEffect : ~m? -# 1888| mu1888_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1888_1 -# 1889| r1889_1(glval) = VariableAddress[x623] : -# 1889| r1889_2(glval) = FunctionAddress[~String] : -# 1889| v1889_3(void) = Call[~String] : func:r1889_2, this:r1889_1 -# 1889| mu1889_4(unknown) = ^CallSideEffect : ~m? -# 1889| v1889_5(void) = ^IndirectReadSideEffect[-1] : &:r1889_1, ~m? -# 1889| mu1889_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1889_1 -# 1889| r1889_7(bool) = Constant[0] : -# 1889| v1889_8(void) = ConditionalBranch : r1889_7 +# 35| Block 623 +# 35| r35_8723(glval) = VariableAddress[x623] : +# 35| mu35_8724(String) = Uninitialized[x623] : &:r35_8723 +# 35| r35_8725(glval) = FunctionAddress[String] : +# 35| v35_8726(void) = Call[String] : func:r35_8725, this:r35_8723 +# 35| mu35_8727(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8723 +# 35| r35_8729(glval) = VariableAddress[x623] : +# 35| r35_8730(glval) = FunctionAddress[~String] : +# 35| v35_8731(void) = Call[~String] : func:r35_8730, this:r35_8729 +# 35| mu35_8732(unknown) = ^CallSideEffect : ~m? +# 35| v35_8733(void) = ^IndirectReadSideEffect[-1] : &:r35_8729, ~m? +# 35| mu35_8734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8729 +# 35| r35_8735(bool) = Constant[0] : +# 35| v35_8736(void) = ConditionalBranch : r35_8735 #-----| False -> Block 624 #-----| True -> Block 1026 -# 1891| Block 624 -# 1891| r1891_1(glval) = VariableAddress[x624] : -# 1891| mu1891_2(String) = Uninitialized[x624] : &:r1891_1 -# 1891| r1891_3(glval) = FunctionAddress[String] : -# 1891| v1891_4(void) = Call[String] : func:r1891_3, this:r1891_1 -# 1891| mu1891_5(unknown) = ^CallSideEffect : ~m? -# 1891| mu1891_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1891_1 -# 1892| r1892_1(glval) = VariableAddress[x624] : -# 1892| r1892_2(glval) = FunctionAddress[~String] : -# 1892| v1892_3(void) = Call[~String] : func:r1892_2, this:r1892_1 -# 1892| mu1892_4(unknown) = ^CallSideEffect : ~m? -# 1892| v1892_5(void) = ^IndirectReadSideEffect[-1] : &:r1892_1, ~m? -# 1892| mu1892_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1892_1 -# 1892| r1892_7(bool) = Constant[0] : -# 1892| v1892_8(void) = ConditionalBranch : r1892_7 +# 35| Block 624 +# 35| r35_8737(glval) = VariableAddress[x624] : +# 35| mu35_8738(String) = Uninitialized[x624] : &:r35_8737 +# 35| r35_8739(glval) = FunctionAddress[String] : +# 35| v35_8740(void) = Call[String] : func:r35_8739, this:r35_8737 +# 35| mu35_8741(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8737 +# 35| r35_8743(glval) = VariableAddress[x624] : +# 35| r35_8744(glval) = FunctionAddress[~String] : +# 35| v35_8745(void) = Call[~String] : func:r35_8744, this:r35_8743 +# 35| mu35_8746(unknown) = ^CallSideEffect : ~m? +# 35| v35_8747(void) = ^IndirectReadSideEffect[-1] : &:r35_8743, ~m? +# 35| mu35_8748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8743 +# 35| r35_8749(bool) = Constant[0] : +# 35| v35_8750(void) = ConditionalBranch : r35_8749 #-----| False -> Block 625 #-----| True -> Block 1026 -# 1894| Block 625 -# 1894| r1894_1(glval) = VariableAddress[x625] : -# 1894| mu1894_2(String) = Uninitialized[x625] : &:r1894_1 -# 1894| r1894_3(glval) = FunctionAddress[String] : -# 1894| v1894_4(void) = Call[String] : func:r1894_3, this:r1894_1 -# 1894| mu1894_5(unknown) = ^CallSideEffect : ~m? -# 1894| mu1894_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1894_1 -# 1895| r1895_1(glval) = VariableAddress[x625] : -# 1895| r1895_2(glval) = FunctionAddress[~String] : -# 1895| v1895_3(void) = Call[~String] : func:r1895_2, this:r1895_1 -# 1895| mu1895_4(unknown) = ^CallSideEffect : ~m? -# 1895| v1895_5(void) = ^IndirectReadSideEffect[-1] : &:r1895_1, ~m? -# 1895| mu1895_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1895_1 -# 1895| r1895_7(bool) = Constant[0] : -# 1895| v1895_8(void) = ConditionalBranch : r1895_7 +# 35| Block 625 +# 35| r35_8751(glval) = VariableAddress[x625] : +# 35| mu35_8752(String) = Uninitialized[x625] : &:r35_8751 +# 35| r35_8753(glval) = FunctionAddress[String] : +# 35| v35_8754(void) = Call[String] : func:r35_8753, this:r35_8751 +# 35| mu35_8755(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8751 +# 35| r35_8757(glval) = VariableAddress[x625] : +# 35| r35_8758(glval) = FunctionAddress[~String] : +# 35| v35_8759(void) = Call[~String] : func:r35_8758, this:r35_8757 +# 35| mu35_8760(unknown) = ^CallSideEffect : ~m? +# 35| v35_8761(void) = ^IndirectReadSideEffect[-1] : &:r35_8757, ~m? +# 35| mu35_8762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8757 +# 35| r35_8763(bool) = Constant[0] : +# 35| v35_8764(void) = ConditionalBranch : r35_8763 #-----| False -> Block 626 #-----| True -> Block 1026 -# 1897| Block 626 -# 1897| r1897_1(glval) = VariableAddress[x626] : -# 1897| mu1897_2(String) = Uninitialized[x626] : &:r1897_1 -# 1897| r1897_3(glval) = FunctionAddress[String] : -# 1897| v1897_4(void) = Call[String] : func:r1897_3, this:r1897_1 -# 1897| mu1897_5(unknown) = ^CallSideEffect : ~m? -# 1897| mu1897_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1897_1 -# 1898| r1898_1(glval) = VariableAddress[x626] : -# 1898| r1898_2(glval) = FunctionAddress[~String] : -# 1898| v1898_3(void) = Call[~String] : func:r1898_2, this:r1898_1 -# 1898| mu1898_4(unknown) = ^CallSideEffect : ~m? -# 1898| v1898_5(void) = ^IndirectReadSideEffect[-1] : &:r1898_1, ~m? -# 1898| mu1898_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1898_1 -# 1898| r1898_7(bool) = Constant[0] : -# 1898| v1898_8(void) = ConditionalBranch : r1898_7 +# 35| Block 626 +# 35| r35_8765(glval) = VariableAddress[x626] : +# 35| mu35_8766(String) = Uninitialized[x626] : &:r35_8765 +# 35| r35_8767(glval) = FunctionAddress[String] : +# 35| v35_8768(void) = Call[String] : func:r35_8767, this:r35_8765 +# 35| mu35_8769(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8765 +# 35| r35_8771(glval) = VariableAddress[x626] : +# 35| r35_8772(glval) = FunctionAddress[~String] : +# 35| v35_8773(void) = Call[~String] : func:r35_8772, this:r35_8771 +# 35| mu35_8774(unknown) = ^CallSideEffect : ~m? +# 35| v35_8775(void) = ^IndirectReadSideEffect[-1] : &:r35_8771, ~m? +# 35| mu35_8776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8771 +# 35| r35_8777(bool) = Constant[0] : +# 35| v35_8778(void) = ConditionalBranch : r35_8777 #-----| False -> Block 627 #-----| True -> Block 1026 -# 1900| Block 627 -# 1900| r1900_1(glval) = VariableAddress[x627] : -# 1900| mu1900_2(String) = Uninitialized[x627] : &:r1900_1 -# 1900| r1900_3(glval) = FunctionAddress[String] : -# 1900| v1900_4(void) = Call[String] : func:r1900_3, this:r1900_1 -# 1900| mu1900_5(unknown) = ^CallSideEffect : ~m? -# 1900| mu1900_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1900_1 -# 1901| r1901_1(glval) = VariableAddress[x627] : -# 1901| r1901_2(glval) = FunctionAddress[~String] : -# 1901| v1901_3(void) = Call[~String] : func:r1901_2, this:r1901_1 -# 1901| mu1901_4(unknown) = ^CallSideEffect : ~m? -# 1901| v1901_5(void) = ^IndirectReadSideEffect[-1] : &:r1901_1, ~m? -# 1901| mu1901_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1901_1 -# 1901| r1901_7(bool) = Constant[0] : -# 1901| v1901_8(void) = ConditionalBranch : r1901_7 +# 35| Block 627 +# 35| r35_8779(glval) = VariableAddress[x627] : +# 35| mu35_8780(String) = Uninitialized[x627] : &:r35_8779 +# 35| r35_8781(glval) = FunctionAddress[String] : +# 35| v35_8782(void) = Call[String] : func:r35_8781, this:r35_8779 +# 35| mu35_8783(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8779 +# 35| r35_8785(glval) = VariableAddress[x627] : +# 35| r35_8786(glval) = FunctionAddress[~String] : +# 35| v35_8787(void) = Call[~String] : func:r35_8786, this:r35_8785 +# 35| mu35_8788(unknown) = ^CallSideEffect : ~m? +# 35| v35_8789(void) = ^IndirectReadSideEffect[-1] : &:r35_8785, ~m? +# 35| mu35_8790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8785 +# 35| r35_8791(bool) = Constant[0] : +# 35| v35_8792(void) = ConditionalBranch : r35_8791 #-----| False -> Block 628 #-----| True -> Block 1026 -# 1903| Block 628 -# 1903| r1903_1(glval) = VariableAddress[x628] : -# 1903| mu1903_2(String) = Uninitialized[x628] : &:r1903_1 -# 1903| r1903_3(glval) = FunctionAddress[String] : -# 1903| v1903_4(void) = Call[String] : func:r1903_3, this:r1903_1 -# 1903| mu1903_5(unknown) = ^CallSideEffect : ~m? -# 1903| mu1903_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1903_1 -# 1904| r1904_1(glval) = VariableAddress[x628] : -# 1904| r1904_2(glval) = FunctionAddress[~String] : -# 1904| v1904_3(void) = Call[~String] : func:r1904_2, this:r1904_1 -# 1904| mu1904_4(unknown) = ^CallSideEffect : ~m? -# 1904| v1904_5(void) = ^IndirectReadSideEffect[-1] : &:r1904_1, ~m? -# 1904| mu1904_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1904_1 -# 1904| r1904_7(bool) = Constant[0] : -# 1904| v1904_8(void) = ConditionalBranch : r1904_7 +# 35| Block 628 +# 35| r35_8793(glval) = VariableAddress[x628] : +# 35| mu35_8794(String) = Uninitialized[x628] : &:r35_8793 +# 35| r35_8795(glval) = FunctionAddress[String] : +# 35| v35_8796(void) = Call[String] : func:r35_8795, this:r35_8793 +# 35| mu35_8797(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8793 +# 35| r35_8799(glval) = VariableAddress[x628] : +# 35| r35_8800(glval) = FunctionAddress[~String] : +# 35| v35_8801(void) = Call[~String] : func:r35_8800, this:r35_8799 +# 35| mu35_8802(unknown) = ^CallSideEffect : ~m? +# 35| v35_8803(void) = ^IndirectReadSideEffect[-1] : &:r35_8799, ~m? +# 35| mu35_8804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8799 +# 35| r35_8805(bool) = Constant[0] : +# 35| v35_8806(void) = ConditionalBranch : r35_8805 #-----| False -> Block 629 #-----| True -> Block 1026 -# 1906| Block 629 -# 1906| r1906_1(glval) = VariableAddress[x629] : -# 1906| mu1906_2(String) = Uninitialized[x629] : &:r1906_1 -# 1906| r1906_3(glval) = FunctionAddress[String] : -# 1906| v1906_4(void) = Call[String] : func:r1906_3, this:r1906_1 -# 1906| mu1906_5(unknown) = ^CallSideEffect : ~m? -# 1906| mu1906_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1906_1 -# 1907| r1907_1(glval) = VariableAddress[x629] : -# 1907| r1907_2(glval) = FunctionAddress[~String] : -# 1907| v1907_3(void) = Call[~String] : func:r1907_2, this:r1907_1 -# 1907| mu1907_4(unknown) = ^CallSideEffect : ~m? -# 1907| v1907_5(void) = ^IndirectReadSideEffect[-1] : &:r1907_1, ~m? -# 1907| mu1907_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1907_1 -# 1907| r1907_7(bool) = Constant[0] : -# 1907| v1907_8(void) = ConditionalBranch : r1907_7 +# 35| Block 629 +# 35| r35_8807(glval) = VariableAddress[x629] : +# 35| mu35_8808(String) = Uninitialized[x629] : &:r35_8807 +# 35| r35_8809(glval) = FunctionAddress[String] : +# 35| v35_8810(void) = Call[String] : func:r35_8809, this:r35_8807 +# 35| mu35_8811(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8807 +# 35| r35_8813(glval) = VariableAddress[x629] : +# 35| r35_8814(glval) = FunctionAddress[~String] : +# 35| v35_8815(void) = Call[~String] : func:r35_8814, this:r35_8813 +# 35| mu35_8816(unknown) = ^CallSideEffect : ~m? +# 35| v35_8817(void) = ^IndirectReadSideEffect[-1] : &:r35_8813, ~m? +# 35| mu35_8818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8813 +# 35| r35_8819(bool) = Constant[0] : +# 35| v35_8820(void) = ConditionalBranch : r35_8819 #-----| False -> Block 630 #-----| True -> Block 1026 -# 1909| Block 630 -# 1909| r1909_1(glval) = VariableAddress[x630] : -# 1909| mu1909_2(String) = Uninitialized[x630] : &:r1909_1 -# 1909| r1909_3(glval) = FunctionAddress[String] : -# 1909| v1909_4(void) = Call[String] : func:r1909_3, this:r1909_1 -# 1909| mu1909_5(unknown) = ^CallSideEffect : ~m? -# 1909| mu1909_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1909_1 -# 1910| r1910_1(glval) = VariableAddress[x630] : -# 1910| r1910_2(glval) = FunctionAddress[~String] : -# 1910| v1910_3(void) = Call[~String] : func:r1910_2, this:r1910_1 -# 1910| mu1910_4(unknown) = ^CallSideEffect : ~m? -# 1910| v1910_5(void) = ^IndirectReadSideEffect[-1] : &:r1910_1, ~m? -# 1910| mu1910_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1910_1 -# 1910| r1910_7(bool) = Constant[0] : -# 1910| v1910_8(void) = ConditionalBranch : r1910_7 +# 35| Block 630 +# 35| r35_8821(glval) = VariableAddress[x630] : +# 35| mu35_8822(String) = Uninitialized[x630] : &:r35_8821 +# 35| r35_8823(glval) = FunctionAddress[String] : +# 35| v35_8824(void) = Call[String] : func:r35_8823, this:r35_8821 +# 35| mu35_8825(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8821 +# 35| r35_8827(glval) = VariableAddress[x630] : +# 35| r35_8828(glval) = FunctionAddress[~String] : +# 35| v35_8829(void) = Call[~String] : func:r35_8828, this:r35_8827 +# 35| mu35_8830(unknown) = ^CallSideEffect : ~m? +# 35| v35_8831(void) = ^IndirectReadSideEffect[-1] : &:r35_8827, ~m? +# 35| mu35_8832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8827 +# 35| r35_8833(bool) = Constant[0] : +# 35| v35_8834(void) = ConditionalBranch : r35_8833 #-----| False -> Block 631 #-----| True -> Block 1026 -# 1912| Block 631 -# 1912| r1912_1(glval) = VariableAddress[x631] : -# 1912| mu1912_2(String) = Uninitialized[x631] : &:r1912_1 -# 1912| r1912_3(glval) = FunctionAddress[String] : -# 1912| v1912_4(void) = Call[String] : func:r1912_3, this:r1912_1 -# 1912| mu1912_5(unknown) = ^CallSideEffect : ~m? -# 1912| mu1912_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1912_1 -# 1913| r1913_1(glval) = VariableAddress[x631] : -# 1913| r1913_2(glval) = FunctionAddress[~String] : -# 1913| v1913_3(void) = Call[~String] : func:r1913_2, this:r1913_1 -# 1913| mu1913_4(unknown) = ^CallSideEffect : ~m? -# 1913| v1913_5(void) = ^IndirectReadSideEffect[-1] : &:r1913_1, ~m? -# 1913| mu1913_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1913_1 -# 1913| r1913_7(bool) = Constant[0] : -# 1913| v1913_8(void) = ConditionalBranch : r1913_7 +# 35| Block 631 +# 35| r35_8835(glval) = VariableAddress[x631] : +# 35| mu35_8836(String) = Uninitialized[x631] : &:r35_8835 +# 35| r35_8837(glval) = FunctionAddress[String] : +# 35| v35_8838(void) = Call[String] : func:r35_8837, this:r35_8835 +# 35| mu35_8839(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8835 +# 35| r35_8841(glval) = VariableAddress[x631] : +# 35| r35_8842(glval) = FunctionAddress[~String] : +# 35| v35_8843(void) = Call[~String] : func:r35_8842, this:r35_8841 +# 35| mu35_8844(unknown) = ^CallSideEffect : ~m? +# 35| v35_8845(void) = ^IndirectReadSideEffect[-1] : &:r35_8841, ~m? +# 35| mu35_8846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8841 +# 35| r35_8847(bool) = Constant[0] : +# 35| v35_8848(void) = ConditionalBranch : r35_8847 #-----| False -> Block 632 #-----| True -> Block 1026 -# 1915| Block 632 -# 1915| r1915_1(glval) = VariableAddress[x632] : -# 1915| mu1915_2(String) = Uninitialized[x632] : &:r1915_1 -# 1915| r1915_3(glval) = FunctionAddress[String] : -# 1915| v1915_4(void) = Call[String] : func:r1915_3, this:r1915_1 -# 1915| mu1915_5(unknown) = ^CallSideEffect : ~m? -# 1915| mu1915_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1915_1 -# 1916| r1916_1(glval) = VariableAddress[x632] : -# 1916| r1916_2(glval) = FunctionAddress[~String] : -# 1916| v1916_3(void) = Call[~String] : func:r1916_2, this:r1916_1 -# 1916| mu1916_4(unknown) = ^CallSideEffect : ~m? -# 1916| v1916_5(void) = ^IndirectReadSideEffect[-1] : &:r1916_1, ~m? -# 1916| mu1916_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1916_1 -# 1916| r1916_7(bool) = Constant[0] : -# 1916| v1916_8(void) = ConditionalBranch : r1916_7 +# 35| Block 632 +# 35| r35_8849(glval) = VariableAddress[x632] : +# 35| mu35_8850(String) = Uninitialized[x632] : &:r35_8849 +# 35| r35_8851(glval) = FunctionAddress[String] : +# 35| v35_8852(void) = Call[String] : func:r35_8851, this:r35_8849 +# 35| mu35_8853(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8849 +# 35| r35_8855(glval) = VariableAddress[x632] : +# 35| r35_8856(glval) = FunctionAddress[~String] : +# 35| v35_8857(void) = Call[~String] : func:r35_8856, this:r35_8855 +# 35| mu35_8858(unknown) = ^CallSideEffect : ~m? +# 35| v35_8859(void) = ^IndirectReadSideEffect[-1] : &:r35_8855, ~m? +# 35| mu35_8860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8855 +# 35| r35_8861(bool) = Constant[0] : +# 35| v35_8862(void) = ConditionalBranch : r35_8861 #-----| False -> Block 633 #-----| True -> Block 1026 -# 1918| Block 633 -# 1918| r1918_1(glval) = VariableAddress[x633] : -# 1918| mu1918_2(String) = Uninitialized[x633] : &:r1918_1 -# 1918| r1918_3(glval) = FunctionAddress[String] : -# 1918| v1918_4(void) = Call[String] : func:r1918_3, this:r1918_1 -# 1918| mu1918_5(unknown) = ^CallSideEffect : ~m? -# 1918| mu1918_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1918_1 -# 1919| r1919_1(glval) = VariableAddress[x633] : -# 1919| r1919_2(glval) = FunctionAddress[~String] : -# 1919| v1919_3(void) = Call[~String] : func:r1919_2, this:r1919_1 -# 1919| mu1919_4(unknown) = ^CallSideEffect : ~m? -# 1919| v1919_5(void) = ^IndirectReadSideEffect[-1] : &:r1919_1, ~m? -# 1919| mu1919_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1919| r1919_7(bool) = Constant[0] : -# 1919| v1919_8(void) = ConditionalBranch : r1919_7 +# 35| Block 633 +# 35| r35_8863(glval) = VariableAddress[x633] : +# 35| mu35_8864(String) = Uninitialized[x633] : &:r35_8863 +# 35| r35_8865(glval) = FunctionAddress[String] : +# 35| v35_8866(void) = Call[String] : func:r35_8865, this:r35_8863 +# 35| mu35_8867(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8863 +# 35| r35_8869(glval) = VariableAddress[x633] : +# 35| r35_8870(glval) = FunctionAddress[~String] : +# 35| v35_8871(void) = Call[~String] : func:r35_8870, this:r35_8869 +# 35| mu35_8872(unknown) = ^CallSideEffect : ~m? +# 35| v35_8873(void) = ^IndirectReadSideEffect[-1] : &:r35_8869, ~m? +# 35| mu35_8874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8869 +# 35| r35_8875(bool) = Constant[0] : +# 35| v35_8876(void) = ConditionalBranch : r35_8875 #-----| False -> Block 634 #-----| True -> Block 1026 -# 1921| Block 634 -# 1921| r1921_1(glval) = VariableAddress[x634] : -# 1921| mu1921_2(String) = Uninitialized[x634] : &:r1921_1 -# 1921| r1921_3(glval) = FunctionAddress[String] : -# 1921| v1921_4(void) = Call[String] : func:r1921_3, this:r1921_1 -# 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? -# 1921| mu1921_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 -# 1922| r1922_1(glval) = VariableAddress[x634] : -# 1922| r1922_2(glval) = FunctionAddress[~String] : -# 1922| v1922_3(void) = Call[~String] : func:r1922_2, this:r1922_1 -# 1922| mu1922_4(unknown) = ^CallSideEffect : ~m? -# 1922| v1922_5(void) = ^IndirectReadSideEffect[-1] : &:r1922_1, ~m? -# 1922| mu1922_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1922_1 -# 1922| r1922_7(bool) = Constant[0] : -# 1922| v1922_8(void) = ConditionalBranch : r1922_7 +# 35| Block 634 +# 35| r35_8877(glval) = VariableAddress[x634] : +# 35| mu35_8878(String) = Uninitialized[x634] : &:r35_8877 +# 35| r35_8879(glval) = FunctionAddress[String] : +# 35| v35_8880(void) = Call[String] : func:r35_8879, this:r35_8877 +# 35| mu35_8881(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8877 +# 35| r35_8883(glval) = VariableAddress[x634] : +# 35| r35_8884(glval) = FunctionAddress[~String] : +# 35| v35_8885(void) = Call[~String] : func:r35_8884, this:r35_8883 +# 35| mu35_8886(unknown) = ^CallSideEffect : ~m? +# 35| v35_8887(void) = ^IndirectReadSideEffect[-1] : &:r35_8883, ~m? +# 35| mu35_8888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8883 +# 35| r35_8889(bool) = Constant[0] : +# 35| v35_8890(void) = ConditionalBranch : r35_8889 #-----| False -> Block 635 #-----| True -> Block 1026 -# 1924| Block 635 -# 1924| r1924_1(glval) = VariableAddress[x635] : -# 1924| mu1924_2(String) = Uninitialized[x635] : &:r1924_1 -# 1924| r1924_3(glval) = FunctionAddress[String] : -# 1924| v1924_4(void) = Call[String] : func:r1924_3, this:r1924_1 -# 1924| mu1924_5(unknown) = ^CallSideEffect : ~m? -# 1924| mu1924_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1924_1 -# 1925| r1925_1(glval) = VariableAddress[x635] : -# 1925| r1925_2(glval) = FunctionAddress[~String] : -# 1925| v1925_3(void) = Call[~String] : func:r1925_2, this:r1925_1 -# 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? -# 1925| v1925_5(void) = ^IndirectReadSideEffect[-1] : &:r1925_1, ~m? -# 1925| mu1925_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1925_1 -# 1925| r1925_7(bool) = Constant[0] : -# 1925| v1925_8(void) = ConditionalBranch : r1925_7 +# 35| Block 635 +# 35| r35_8891(glval) = VariableAddress[x635] : +# 35| mu35_8892(String) = Uninitialized[x635] : &:r35_8891 +# 35| r35_8893(glval) = FunctionAddress[String] : +# 35| v35_8894(void) = Call[String] : func:r35_8893, this:r35_8891 +# 35| mu35_8895(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8891 +# 35| r35_8897(glval) = VariableAddress[x635] : +# 35| r35_8898(glval) = FunctionAddress[~String] : +# 35| v35_8899(void) = Call[~String] : func:r35_8898, this:r35_8897 +# 35| mu35_8900(unknown) = ^CallSideEffect : ~m? +# 35| v35_8901(void) = ^IndirectReadSideEffect[-1] : &:r35_8897, ~m? +# 35| mu35_8902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8897 +# 35| r35_8903(bool) = Constant[0] : +# 35| v35_8904(void) = ConditionalBranch : r35_8903 #-----| False -> Block 636 #-----| True -> Block 1026 -# 1927| Block 636 -# 1927| r1927_1(glval) = VariableAddress[x636] : -# 1927| mu1927_2(String) = Uninitialized[x636] : &:r1927_1 -# 1927| r1927_3(glval) = FunctionAddress[String] : -# 1927| v1927_4(void) = Call[String] : func:r1927_3, this:r1927_1 -# 1927| mu1927_5(unknown) = ^CallSideEffect : ~m? -# 1927| mu1927_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1927_1 -# 1928| r1928_1(glval) = VariableAddress[x636] : -# 1928| r1928_2(glval) = FunctionAddress[~String] : -# 1928| v1928_3(void) = Call[~String] : func:r1928_2, this:r1928_1 -# 1928| mu1928_4(unknown) = ^CallSideEffect : ~m? -# 1928| v1928_5(void) = ^IndirectReadSideEffect[-1] : &:r1928_1, ~m? -# 1928| mu1928_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1928_1 -# 1928| r1928_7(bool) = Constant[0] : -# 1928| v1928_8(void) = ConditionalBranch : r1928_7 +# 35| Block 636 +# 35| r35_8905(glval) = VariableAddress[x636] : +# 35| mu35_8906(String) = Uninitialized[x636] : &:r35_8905 +# 35| r35_8907(glval) = FunctionAddress[String] : +# 35| v35_8908(void) = Call[String] : func:r35_8907, this:r35_8905 +# 35| mu35_8909(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8905 +# 35| r35_8911(glval) = VariableAddress[x636] : +# 35| r35_8912(glval) = FunctionAddress[~String] : +# 35| v35_8913(void) = Call[~String] : func:r35_8912, this:r35_8911 +# 35| mu35_8914(unknown) = ^CallSideEffect : ~m? +# 35| v35_8915(void) = ^IndirectReadSideEffect[-1] : &:r35_8911, ~m? +# 35| mu35_8916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8911 +# 35| r35_8917(bool) = Constant[0] : +# 35| v35_8918(void) = ConditionalBranch : r35_8917 #-----| False -> Block 637 #-----| True -> Block 1026 -# 1930| Block 637 -# 1930| r1930_1(glval) = VariableAddress[x637] : -# 1930| mu1930_2(String) = Uninitialized[x637] : &:r1930_1 -# 1930| r1930_3(glval) = FunctionAddress[String] : -# 1930| v1930_4(void) = Call[String] : func:r1930_3, this:r1930_1 -# 1930| mu1930_5(unknown) = ^CallSideEffect : ~m? -# 1930| mu1930_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1930_1 -# 1931| r1931_1(glval) = VariableAddress[x637] : -# 1931| r1931_2(glval) = FunctionAddress[~String] : -# 1931| v1931_3(void) = Call[~String] : func:r1931_2, this:r1931_1 -# 1931| mu1931_4(unknown) = ^CallSideEffect : ~m? -# 1931| v1931_5(void) = ^IndirectReadSideEffect[-1] : &:r1931_1, ~m? -# 1931| mu1931_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1931_1 -# 1931| r1931_7(bool) = Constant[0] : -# 1931| v1931_8(void) = ConditionalBranch : r1931_7 +# 35| Block 637 +# 35| r35_8919(glval) = VariableAddress[x637] : +# 35| mu35_8920(String) = Uninitialized[x637] : &:r35_8919 +# 35| r35_8921(glval) = FunctionAddress[String] : +# 35| v35_8922(void) = Call[String] : func:r35_8921, this:r35_8919 +# 35| mu35_8923(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8919 +# 35| r35_8925(glval) = VariableAddress[x637] : +# 35| r35_8926(glval) = FunctionAddress[~String] : +# 35| v35_8927(void) = Call[~String] : func:r35_8926, this:r35_8925 +# 35| mu35_8928(unknown) = ^CallSideEffect : ~m? +# 35| v35_8929(void) = ^IndirectReadSideEffect[-1] : &:r35_8925, ~m? +# 35| mu35_8930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8925 +# 35| r35_8931(bool) = Constant[0] : +# 35| v35_8932(void) = ConditionalBranch : r35_8931 #-----| False -> Block 638 #-----| True -> Block 1026 -# 1933| Block 638 -# 1933| r1933_1(glval) = VariableAddress[x638] : -# 1933| mu1933_2(String) = Uninitialized[x638] : &:r1933_1 -# 1933| r1933_3(glval) = FunctionAddress[String] : -# 1933| v1933_4(void) = Call[String] : func:r1933_3, this:r1933_1 -# 1933| mu1933_5(unknown) = ^CallSideEffect : ~m? -# 1933| mu1933_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1933_1 -# 1934| r1934_1(glval) = VariableAddress[x638] : -# 1934| r1934_2(glval) = FunctionAddress[~String] : -# 1934| v1934_3(void) = Call[~String] : func:r1934_2, this:r1934_1 -# 1934| mu1934_4(unknown) = ^CallSideEffect : ~m? -# 1934| v1934_5(void) = ^IndirectReadSideEffect[-1] : &:r1934_1, ~m? -# 1934| mu1934_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1934_1 -# 1934| r1934_7(bool) = Constant[0] : -# 1934| v1934_8(void) = ConditionalBranch : r1934_7 +# 35| Block 638 +# 35| r35_8933(glval) = VariableAddress[x638] : +# 35| mu35_8934(String) = Uninitialized[x638] : &:r35_8933 +# 35| r35_8935(glval) = FunctionAddress[String] : +# 35| v35_8936(void) = Call[String] : func:r35_8935, this:r35_8933 +# 35| mu35_8937(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8933 +# 35| r35_8939(glval) = VariableAddress[x638] : +# 35| r35_8940(glval) = FunctionAddress[~String] : +# 35| v35_8941(void) = Call[~String] : func:r35_8940, this:r35_8939 +# 35| mu35_8942(unknown) = ^CallSideEffect : ~m? +# 35| v35_8943(void) = ^IndirectReadSideEffect[-1] : &:r35_8939, ~m? +# 35| mu35_8944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8939 +# 35| r35_8945(bool) = Constant[0] : +# 35| v35_8946(void) = ConditionalBranch : r35_8945 #-----| False -> Block 639 #-----| True -> Block 1026 -# 1936| Block 639 -# 1936| r1936_1(glval) = VariableAddress[x639] : -# 1936| mu1936_2(String) = Uninitialized[x639] : &:r1936_1 -# 1936| r1936_3(glval) = FunctionAddress[String] : -# 1936| v1936_4(void) = Call[String] : func:r1936_3, this:r1936_1 -# 1936| mu1936_5(unknown) = ^CallSideEffect : ~m? -# 1936| mu1936_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1936_1 -# 1937| r1937_1(glval) = VariableAddress[x639] : -# 1937| r1937_2(glval) = FunctionAddress[~String] : -# 1937| v1937_3(void) = Call[~String] : func:r1937_2, this:r1937_1 -# 1937| mu1937_4(unknown) = ^CallSideEffect : ~m? -# 1937| v1937_5(void) = ^IndirectReadSideEffect[-1] : &:r1937_1, ~m? -# 1937| mu1937_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1937_1 -# 1937| r1937_7(bool) = Constant[0] : -# 1937| v1937_8(void) = ConditionalBranch : r1937_7 +# 35| Block 639 +# 35| r35_8947(glval) = VariableAddress[x639] : +# 35| mu35_8948(String) = Uninitialized[x639] : &:r35_8947 +# 35| r35_8949(glval) = FunctionAddress[String] : +# 35| v35_8950(void) = Call[String] : func:r35_8949, this:r35_8947 +# 35| mu35_8951(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8947 +# 35| r35_8953(glval) = VariableAddress[x639] : +# 35| r35_8954(glval) = FunctionAddress[~String] : +# 35| v35_8955(void) = Call[~String] : func:r35_8954, this:r35_8953 +# 35| mu35_8956(unknown) = ^CallSideEffect : ~m? +# 35| v35_8957(void) = ^IndirectReadSideEffect[-1] : &:r35_8953, ~m? +# 35| mu35_8958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8953 +# 35| r35_8959(bool) = Constant[0] : +# 35| v35_8960(void) = ConditionalBranch : r35_8959 #-----| False -> Block 640 #-----| True -> Block 1026 -# 1939| Block 640 -# 1939| r1939_1(glval) = VariableAddress[x640] : -# 1939| mu1939_2(String) = Uninitialized[x640] : &:r1939_1 -# 1939| r1939_3(glval) = FunctionAddress[String] : -# 1939| v1939_4(void) = Call[String] : func:r1939_3, this:r1939_1 -# 1939| mu1939_5(unknown) = ^CallSideEffect : ~m? -# 1939| mu1939_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1939_1 -# 1940| r1940_1(glval) = VariableAddress[x640] : -# 1940| r1940_2(glval) = FunctionAddress[~String] : -# 1940| v1940_3(void) = Call[~String] : func:r1940_2, this:r1940_1 -# 1940| mu1940_4(unknown) = ^CallSideEffect : ~m? -# 1940| v1940_5(void) = ^IndirectReadSideEffect[-1] : &:r1940_1, ~m? -# 1940| mu1940_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1940_1 -# 1940| r1940_7(bool) = Constant[0] : -# 1940| v1940_8(void) = ConditionalBranch : r1940_7 +# 35| Block 640 +# 35| r35_8961(glval) = VariableAddress[x640] : +# 35| mu35_8962(String) = Uninitialized[x640] : &:r35_8961 +# 35| r35_8963(glval) = FunctionAddress[String] : +# 35| v35_8964(void) = Call[String] : func:r35_8963, this:r35_8961 +# 35| mu35_8965(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8961 +# 35| r35_8967(glval) = VariableAddress[x640] : +# 35| r35_8968(glval) = FunctionAddress[~String] : +# 35| v35_8969(void) = Call[~String] : func:r35_8968, this:r35_8967 +# 35| mu35_8970(unknown) = ^CallSideEffect : ~m? +# 35| v35_8971(void) = ^IndirectReadSideEffect[-1] : &:r35_8967, ~m? +# 35| mu35_8972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8967 +# 35| r35_8973(bool) = Constant[0] : +# 35| v35_8974(void) = ConditionalBranch : r35_8973 #-----| False -> Block 641 #-----| True -> Block 1026 -# 1942| Block 641 -# 1942| r1942_1(glval) = VariableAddress[x641] : -# 1942| mu1942_2(String) = Uninitialized[x641] : &:r1942_1 -# 1942| r1942_3(glval) = FunctionAddress[String] : -# 1942| v1942_4(void) = Call[String] : func:r1942_3, this:r1942_1 -# 1942| mu1942_5(unknown) = ^CallSideEffect : ~m? -# 1942| mu1942_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1942_1 -# 1943| r1943_1(glval) = VariableAddress[x641] : -# 1943| r1943_2(glval) = FunctionAddress[~String] : -# 1943| v1943_3(void) = Call[~String] : func:r1943_2, this:r1943_1 -# 1943| mu1943_4(unknown) = ^CallSideEffect : ~m? -# 1943| v1943_5(void) = ^IndirectReadSideEffect[-1] : &:r1943_1, ~m? -# 1943| mu1943_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1943_1 -# 1943| r1943_7(bool) = Constant[0] : -# 1943| v1943_8(void) = ConditionalBranch : r1943_7 +# 35| Block 641 +# 35| r35_8975(glval) = VariableAddress[x641] : +# 35| mu35_8976(String) = Uninitialized[x641] : &:r35_8975 +# 35| r35_8977(glval) = FunctionAddress[String] : +# 35| v35_8978(void) = Call[String] : func:r35_8977, this:r35_8975 +# 35| mu35_8979(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8975 +# 35| r35_8981(glval) = VariableAddress[x641] : +# 35| r35_8982(glval) = FunctionAddress[~String] : +# 35| v35_8983(void) = Call[~String] : func:r35_8982, this:r35_8981 +# 35| mu35_8984(unknown) = ^CallSideEffect : ~m? +# 35| v35_8985(void) = ^IndirectReadSideEffect[-1] : &:r35_8981, ~m? +# 35| mu35_8986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8981 +# 35| r35_8987(bool) = Constant[0] : +# 35| v35_8988(void) = ConditionalBranch : r35_8987 #-----| False -> Block 642 #-----| True -> Block 1026 -# 1945| Block 642 -# 1945| r1945_1(glval) = VariableAddress[x642] : -# 1945| mu1945_2(String) = Uninitialized[x642] : &:r1945_1 -# 1945| r1945_3(glval) = FunctionAddress[String] : -# 1945| v1945_4(void) = Call[String] : func:r1945_3, this:r1945_1 -# 1945| mu1945_5(unknown) = ^CallSideEffect : ~m? -# 1945| mu1945_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1945_1 -# 1946| r1946_1(glval) = VariableAddress[x642] : -# 1946| r1946_2(glval) = FunctionAddress[~String] : -# 1946| v1946_3(void) = Call[~String] : func:r1946_2, this:r1946_1 -# 1946| mu1946_4(unknown) = ^CallSideEffect : ~m? -# 1946| v1946_5(void) = ^IndirectReadSideEffect[-1] : &:r1946_1, ~m? -# 1946| mu1946_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1946_1 -# 1946| r1946_7(bool) = Constant[0] : -# 1946| v1946_8(void) = ConditionalBranch : r1946_7 +# 35| Block 642 +# 35| r35_8989(glval) = VariableAddress[x642] : +# 35| mu35_8990(String) = Uninitialized[x642] : &:r35_8989 +# 35| r35_8991(glval) = FunctionAddress[String] : +# 35| v35_8992(void) = Call[String] : func:r35_8991, this:r35_8989 +# 35| mu35_8993(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8989 +# 35| r35_8995(glval) = VariableAddress[x642] : +# 35| r35_8996(glval) = FunctionAddress[~String] : +# 35| v35_8997(void) = Call[~String] : func:r35_8996, this:r35_8995 +# 35| mu35_8998(unknown) = ^CallSideEffect : ~m? +# 35| v35_8999(void) = ^IndirectReadSideEffect[-1] : &:r35_8995, ~m? +# 35| mu35_9000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8995 +# 35| r35_9001(bool) = Constant[0] : +# 35| v35_9002(void) = ConditionalBranch : r35_9001 #-----| False -> Block 643 #-----| True -> Block 1026 -# 1948| Block 643 -# 1948| r1948_1(glval) = VariableAddress[x643] : -# 1948| mu1948_2(String) = Uninitialized[x643] : &:r1948_1 -# 1948| r1948_3(glval) = FunctionAddress[String] : -# 1948| v1948_4(void) = Call[String] : func:r1948_3, this:r1948_1 -# 1948| mu1948_5(unknown) = ^CallSideEffect : ~m? -# 1948| mu1948_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 -# 1949| r1949_1(glval) = VariableAddress[x643] : -# 1949| r1949_2(glval) = FunctionAddress[~String] : -# 1949| v1949_3(void) = Call[~String] : func:r1949_2, this:r1949_1 -# 1949| mu1949_4(unknown) = ^CallSideEffect : ~m? -# 1949| v1949_5(void) = ^IndirectReadSideEffect[-1] : &:r1949_1, ~m? -# 1949| mu1949_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1949_1 -# 1949| r1949_7(bool) = Constant[0] : -# 1949| v1949_8(void) = ConditionalBranch : r1949_7 +# 35| Block 643 +# 35| r35_9003(glval) = VariableAddress[x643] : +# 35| mu35_9004(String) = Uninitialized[x643] : &:r35_9003 +# 35| r35_9005(glval) = FunctionAddress[String] : +# 35| v35_9006(void) = Call[String] : func:r35_9005, this:r35_9003 +# 35| mu35_9007(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9003 +# 35| r35_9009(glval) = VariableAddress[x643] : +# 35| r35_9010(glval) = FunctionAddress[~String] : +# 35| v35_9011(void) = Call[~String] : func:r35_9010, this:r35_9009 +# 35| mu35_9012(unknown) = ^CallSideEffect : ~m? +# 35| v35_9013(void) = ^IndirectReadSideEffect[-1] : &:r35_9009, ~m? +# 35| mu35_9014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9009 +# 35| r35_9015(bool) = Constant[0] : +# 35| v35_9016(void) = ConditionalBranch : r35_9015 #-----| False -> Block 644 #-----| True -> Block 1026 -# 1951| Block 644 -# 1951| r1951_1(glval) = VariableAddress[x644] : -# 1951| mu1951_2(String) = Uninitialized[x644] : &:r1951_1 -# 1951| r1951_3(glval) = FunctionAddress[String] : -# 1951| v1951_4(void) = Call[String] : func:r1951_3, this:r1951_1 -# 1951| mu1951_5(unknown) = ^CallSideEffect : ~m? -# 1951| mu1951_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1951_1 -# 1952| r1952_1(glval) = VariableAddress[x644] : -# 1952| r1952_2(glval) = FunctionAddress[~String] : -# 1952| v1952_3(void) = Call[~String] : func:r1952_2, this:r1952_1 -# 1952| mu1952_4(unknown) = ^CallSideEffect : ~m? -# 1952| v1952_5(void) = ^IndirectReadSideEffect[-1] : &:r1952_1, ~m? -# 1952| mu1952_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1952_1 -# 1952| r1952_7(bool) = Constant[0] : -# 1952| v1952_8(void) = ConditionalBranch : r1952_7 +# 35| Block 644 +# 35| r35_9017(glval) = VariableAddress[x644] : +# 35| mu35_9018(String) = Uninitialized[x644] : &:r35_9017 +# 35| r35_9019(glval) = FunctionAddress[String] : +# 35| v35_9020(void) = Call[String] : func:r35_9019, this:r35_9017 +# 35| mu35_9021(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9017 +# 35| r35_9023(glval) = VariableAddress[x644] : +# 35| r35_9024(glval) = FunctionAddress[~String] : +# 35| v35_9025(void) = Call[~String] : func:r35_9024, this:r35_9023 +# 35| mu35_9026(unknown) = ^CallSideEffect : ~m? +# 35| v35_9027(void) = ^IndirectReadSideEffect[-1] : &:r35_9023, ~m? +# 35| mu35_9028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9023 +# 35| r35_9029(bool) = Constant[0] : +# 35| v35_9030(void) = ConditionalBranch : r35_9029 #-----| False -> Block 645 #-----| True -> Block 1026 -# 1954| Block 645 -# 1954| r1954_1(glval) = VariableAddress[x645] : -# 1954| mu1954_2(String) = Uninitialized[x645] : &:r1954_1 -# 1954| r1954_3(glval) = FunctionAddress[String] : -# 1954| v1954_4(void) = Call[String] : func:r1954_3, this:r1954_1 -# 1954| mu1954_5(unknown) = ^CallSideEffect : ~m? -# 1954| mu1954_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1954_1 -# 1955| r1955_1(glval) = VariableAddress[x645] : -# 1955| r1955_2(glval) = FunctionAddress[~String] : -# 1955| v1955_3(void) = Call[~String] : func:r1955_2, this:r1955_1 -# 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1955| v1955_5(void) = ^IndirectReadSideEffect[-1] : &:r1955_1, ~m? -# 1955| mu1955_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1955_1 -# 1955| r1955_7(bool) = Constant[0] : -# 1955| v1955_8(void) = ConditionalBranch : r1955_7 +# 35| Block 645 +# 35| r35_9031(glval) = VariableAddress[x645] : +# 35| mu35_9032(String) = Uninitialized[x645] : &:r35_9031 +# 35| r35_9033(glval) = FunctionAddress[String] : +# 35| v35_9034(void) = Call[String] : func:r35_9033, this:r35_9031 +# 35| mu35_9035(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9031 +# 35| r35_9037(glval) = VariableAddress[x645] : +# 35| r35_9038(glval) = FunctionAddress[~String] : +# 35| v35_9039(void) = Call[~String] : func:r35_9038, this:r35_9037 +# 35| mu35_9040(unknown) = ^CallSideEffect : ~m? +# 35| v35_9041(void) = ^IndirectReadSideEffect[-1] : &:r35_9037, ~m? +# 35| mu35_9042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9037 +# 35| r35_9043(bool) = Constant[0] : +# 35| v35_9044(void) = ConditionalBranch : r35_9043 #-----| False -> Block 646 #-----| True -> Block 1026 -# 1957| Block 646 -# 1957| r1957_1(glval) = VariableAddress[x646] : -# 1957| mu1957_2(String) = Uninitialized[x646] : &:r1957_1 -# 1957| r1957_3(glval) = FunctionAddress[String] : -# 1957| v1957_4(void) = Call[String] : func:r1957_3, this:r1957_1 -# 1957| mu1957_5(unknown) = ^CallSideEffect : ~m? -# 1957| mu1957_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1957_1 -# 1958| r1958_1(glval) = VariableAddress[x646] : -# 1958| r1958_2(glval) = FunctionAddress[~String] : -# 1958| v1958_3(void) = Call[~String] : func:r1958_2, this:r1958_1 -# 1958| mu1958_4(unknown) = ^CallSideEffect : ~m? -# 1958| v1958_5(void) = ^IndirectReadSideEffect[-1] : &:r1958_1, ~m? -# 1958| mu1958_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1958_1 -# 1958| r1958_7(bool) = Constant[0] : -# 1958| v1958_8(void) = ConditionalBranch : r1958_7 +# 35| Block 646 +# 35| r35_9045(glval) = VariableAddress[x646] : +# 35| mu35_9046(String) = Uninitialized[x646] : &:r35_9045 +# 35| r35_9047(glval) = FunctionAddress[String] : +# 35| v35_9048(void) = Call[String] : func:r35_9047, this:r35_9045 +# 35| mu35_9049(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9045 +# 35| r35_9051(glval) = VariableAddress[x646] : +# 35| r35_9052(glval) = FunctionAddress[~String] : +# 35| v35_9053(void) = Call[~String] : func:r35_9052, this:r35_9051 +# 35| mu35_9054(unknown) = ^CallSideEffect : ~m? +# 35| v35_9055(void) = ^IndirectReadSideEffect[-1] : &:r35_9051, ~m? +# 35| mu35_9056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9051 +# 35| r35_9057(bool) = Constant[0] : +# 35| v35_9058(void) = ConditionalBranch : r35_9057 #-----| False -> Block 647 #-----| True -> Block 1026 -# 1960| Block 647 -# 1960| r1960_1(glval) = VariableAddress[x647] : -# 1960| mu1960_2(String) = Uninitialized[x647] : &:r1960_1 -# 1960| r1960_3(glval) = FunctionAddress[String] : -# 1960| v1960_4(void) = Call[String] : func:r1960_3, this:r1960_1 -# 1960| mu1960_5(unknown) = ^CallSideEffect : ~m? -# 1960| mu1960_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1960_1 -# 1961| r1961_1(glval) = VariableAddress[x647] : -# 1961| r1961_2(glval) = FunctionAddress[~String] : -# 1961| v1961_3(void) = Call[~String] : func:r1961_2, this:r1961_1 -# 1961| mu1961_4(unknown) = ^CallSideEffect : ~m? -# 1961| v1961_5(void) = ^IndirectReadSideEffect[-1] : &:r1961_1, ~m? -# 1961| mu1961_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1961_1 -# 1961| r1961_7(bool) = Constant[0] : -# 1961| v1961_8(void) = ConditionalBranch : r1961_7 +# 35| Block 647 +# 35| r35_9059(glval) = VariableAddress[x647] : +# 35| mu35_9060(String) = Uninitialized[x647] : &:r35_9059 +# 35| r35_9061(glval) = FunctionAddress[String] : +# 35| v35_9062(void) = Call[String] : func:r35_9061, this:r35_9059 +# 35| mu35_9063(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9059 +# 35| r35_9065(glval) = VariableAddress[x647] : +# 35| r35_9066(glval) = FunctionAddress[~String] : +# 35| v35_9067(void) = Call[~String] : func:r35_9066, this:r35_9065 +# 35| mu35_9068(unknown) = ^CallSideEffect : ~m? +# 35| v35_9069(void) = ^IndirectReadSideEffect[-1] : &:r35_9065, ~m? +# 35| mu35_9070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9065 +# 35| r35_9071(bool) = Constant[0] : +# 35| v35_9072(void) = ConditionalBranch : r35_9071 #-----| False -> Block 648 #-----| True -> Block 1026 -# 1963| Block 648 -# 1963| r1963_1(glval) = VariableAddress[x648] : -# 1963| mu1963_2(String) = Uninitialized[x648] : &:r1963_1 -# 1963| r1963_3(glval) = FunctionAddress[String] : -# 1963| v1963_4(void) = Call[String] : func:r1963_3, this:r1963_1 -# 1963| mu1963_5(unknown) = ^CallSideEffect : ~m? -# 1963| mu1963_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1963_1 -# 1964| r1964_1(glval) = VariableAddress[x648] : -# 1964| r1964_2(glval) = FunctionAddress[~String] : -# 1964| v1964_3(void) = Call[~String] : func:r1964_2, this:r1964_1 -# 1964| mu1964_4(unknown) = ^CallSideEffect : ~m? -# 1964| v1964_5(void) = ^IndirectReadSideEffect[-1] : &:r1964_1, ~m? -# 1964| mu1964_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1964_1 -# 1964| r1964_7(bool) = Constant[0] : -# 1964| v1964_8(void) = ConditionalBranch : r1964_7 +# 35| Block 648 +# 35| r35_9073(glval) = VariableAddress[x648] : +# 35| mu35_9074(String) = Uninitialized[x648] : &:r35_9073 +# 35| r35_9075(glval) = FunctionAddress[String] : +# 35| v35_9076(void) = Call[String] : func:r35_9075, this:r35_9073 +# 35| mu35_9077(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9073 +# 35| r35_9079(glval) = VariableAddress[x648] : +# 35| r35_9080(glval) = FunctionAddress[~String] : +# 35| v35_9081(void) = Call[~String] : func:r35_9080, this:r35_9079 +# 35| mu35_9082(unknown) = ^CallSideEffect : ~m? +# 35| v35_9083(void) = ^IndirectReadSideEffect[-1] : &:r35_9079, ~m? +# 35| mu35_9084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9079 +# 35| r35_9085(bool) = Constant[0] : +# 35| v35_9086(void) = ConditionalBranch : r35_9085 #-----| False -> Block 649 #-----| True -> Block 1026 -# 1966| Block 649 -# 1966| r1966_1(glval) = VariableAddress[x649] : -# 1966| mu1966_2(String) = Uninitialized[x649] : &:r1966_1 -# 1966| r1966_3(glval) = FunctionAddress[String] : -# 1966| v1966_4(void) = Call[String] : func:r1966_3, this:r1966_1 -# 1966| mu1966_5(unknown) = ^CallSideEffect : ~m? -# 1966| mu1966_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1966_1 -# 1967| r1967_1(glval) = VariableAddress[x649] : -# 1967| r1967_2(glval) = FunctionAddress[~String] : -# 1967| v1967_3(void) = Call[~String] : func:r1967_2, this:r1967_1 -# 1967| mu1967_4(unknown) = ^CallSideEffect : ~m? -# 1967| v1967_5(void) = ^IndirectReadSideEffect[-1] : &:r1967_1, ~m? -# 1967| mu1967_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1967_1 -# 1967| r1967_7(bool) = Constant[0] : -# 1967| v1967_8(void) = ConditionalBranch : r1967_7 +# 35| Block 649 +# 35| r35_9087(glval) = VariableAddress[x649] : +# 35| mu35_9088(String) = Uninitialized[x649] : &:r35_9087 +# 35| r35_9089(glval) = FunctionAddress[String] : +# 35| v35_9090(void) = Call[String] : func:r35_9089, this:r35_9087 +# 35| mu35_9091(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9087 +# 35| r35_9093(glval) = VariableAddress[x649] : +# 35| r35_9094(glval) = FunctionAddress[~String] : +# 35| v35_9095(void) = Call[~String] : func:r35_9094, this:r35_9093 +# 35| mu35_9096(unknown) = ^CallSideEffect : ~m? +# 35| v35_9097(void) = ^IndirectReadSideEffect[-1] : &:r35_9093, ~m? +# 35| mu35_9098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9093 +# 35| r35_9099(bool) = Constant[0] : +# 35| v35_9100(void) = ConditionalBranch : r35_9099 #-----| False -> Block 650 #-----| True -> Block 1026 -# 1969| Block 650 -# 1969| r1969_1(glval) = VariableAddress[x650] : -# 1969| mu1969_2(String) = Uninitialized[x650] : &:r1969_1 -# 1969| r1969_3(glval) = FunctionAddress[String] : -# 1969| v1969_4(void) = Call[String] : func:r1969_3, this:r1969_1 -# 1969| mu1969_5(unknown) = ^CallSideEffect : ~m? -# 1969| mu1969_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x650] : -# 1970| r1970_2(glval) = FunctionAddress[~String] : -# 1970| v1970_3(void) = Call[~String] : func:r1970_2, this:r1970_1 -# 1970| mu1970_4(unknown) = ^CallSideEffect : ~m? -# 1970| v1970_5(void) = ^IndirectReadSideEffect[-1] : &:r1970_1, ~m? -# 1970| mu1970_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1970_1 -# 1970| r1970_7(bool) = Constant[0] : -# 1970| v1970_8(void) = ConditionalBranch : r1970_7 +# 35| Block 650 +# 35| r35_9101(glval) = VariableAddress[x650] : +# 35| mu35_9102(String) = Uninitialized[x650] : &:r35_9101 +# 35| r35_9103(glval) = FunctionAddress[String] : +# 35| v35_9104(void) = Call[String] : func:r35_9103, this:r35_9101 +# 35| mu35_9105(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9101 +# 35| r35_9107(glval) = VariableAddress[x650] : +# 35| r35_9108(glval) = FunctionAddress[~String] : +# 35| v35_9109(void) = Call[~String] : func:r35_9108, this:r35_9107 +# 35| mu35_9110(unknown) = ^CallSideEffect : ~m? +# 35| v35_9111(void) = ^IndirectReadSideEffect[-1] : &:r35_9107, ~m? +# 35| mu35_9112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9107 +# 35| r35_9113(bool) = Constant[0] : +# 35| v35_9114(void) = ConditionalBranch : r35_9113 #-----| False -> Block 651 #-----| True -> Block 1026 -# 1972| Block 651 -# 1972| r1972_1(glval) = VariableAddress[x651] : -# 1972| mu1972_2(String) = Uninitialized[x651] : &:r1972_1 -# 1972| r1972_3(glval) = FunctionAddress[String] : -# 1972| v1972_4(void) = Call[String] : func:r1972_3, this:r1972_1 -# 1972| mu1972_5(unknown) = ^CallSideEffect : ~m? -# 1972| mu1972_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1972_1 -# 1973| r1973_1(glval) = VariableAddress[x651] : -# 1973| r1973_2(glval) = FunctionAddress[~String] : -# 1973| v1973_3(void) = Call[~String] : func:r1973_2, this:r1973_1 -# 1973| mu1973_4(unknown) = ^CallSideEffect : ~m? -# 1973| v1973_5(void) = ^IndirectReadSideEffect[-1] : &:r1973_1, ~m? -# 1973| mu1973_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1973_1 -# 1973| r1973_7(bool) = Constant[0] : -# 1973| v1973_8(void) = ConditionalBranch : r1973_7 +# 35| Block 651 +# 35| r35_9115(glval) = VariableAddress[x651] : +# 35| mu35_9116(String) = Uninitialized[x651] : &:r35_9115 +# 35| r35_9117(glval) = FunctionAddress[String] : +# 35| v35_9118(void) = Call[String] : func:r35_9117, this:r35_9115 +# 35| mu35_9119(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9115 +# 35| r35_9121(glval) = VariableAddress[x651] : +# 35| r35_9122(glval) = FunctionAddress[~String] : +# 35| v35_9123(void) = Call[~String] : func:r35_9122, this:r35_9121 +# 35| mu35_9124(unknown) = ^CallSideEffect : ~m? +# 35| v35_9125(void) = ^IndirectReadSideEffect[-1] : &:r35_9121, ~m? +# 35| mu35_9126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9121 +# 35| r35_9127(bool) = Constant[0] : +# 35| v35_9128(void) = ConditionalBranch : r35_9127 #-----| False -> Block 652 #-----| True -> Block 1026 -# 1975| Block 652 -# 1975| r1975_1(glval) = VariableAddress[x652] : -# 1975| mu1975_2(String) = Uninitialized[x652] : &:r1975_1 -# 1975| r1975_3(glval) = FunctionAddress[String] : -# 1975| v1975_4(void) = Call[String] : func:r1975_3, this:r1975_1 -# 1975| mu1975_5(unknown) = ^CallSideEffect : ~m? -# 1975| mu1975_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1975_1 -# 1976| r1976_1(glval) = VariableAddress[x652] : -# 1976| r1976_2(glval) = FunctionAddress[~String] : -# 1976| v1976_3(void) = Call[~String] : func:r1976_2, this:r1976_1 -# 1976| mu1976_4(unknown) = ^CallSideEffect : ~m? -# 1976| v1976_5(void) = ^IndirectReadSideEffect[-1] : &:r1976_1, ~m? -# 1976| mu1976_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1976_1 -# 1976| r1976_7(bool) = Constant[0] : -# 1976| v1976_8(void) = ConditionalBranch : r1976_7 +# 35| Block 652 +# 35| r35_9129(glval) = VariableAddress[x652] : +# 35| mu35_9130(String) = Uninitialized[x652] : &:r35_9129 +# 35| r35_9131(glval) = FunctionAddress[String] : +# 35| v35_9132(void) = Call[String] : func:r35_9131, this:r35_9129 +# 35| mu35_9133(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9129 +# 35| r35_9135(glval) = VariableAddress[x652] : +# 35| r35_9136(glval) = FunctionAddress[~String] : +# 35| v35_9137(void) = Call[~String] : func:r35_9136, this:r35_9135 +# 35| mu35_9138(unknown) = ^CallSideEffect : ~m? +# 35| v35_9139(void) = ^IndirectReadSideEffect[-1] : &:r35_9135, ~m? +# 35| mu35_9140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9135 +# 35| r35_9141(bool) = Constant[0] : +# 35| v35_9142(void) = ConditionalBranch : r35_9141 #-----| False -> Block 653 #-----| True -> Block 1026 -# 1978| Block 653 -# 1978| r1978_1(glval) = VariableAddress[x653] : -# 1978| mu1978_2(String) = Uninitialized[x653] : &:r1978_1 -# 1978| r1978_3(glval) = FunctionAddress[String] : -# 1978| v1978_4(void) = Call[String] : func:r1978_3, this:r1978_1 -# 1978| mu1978_5(unknown) = ^CallSideEffect : ~m? -# 1978| mu1978_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1978_1 -# 1979| r1979_1(glval) = VariableAddress[x653] : -# 1979| r1979_2(glval) = FunctionAddress[~String] : -# 1979| v1979_3(void) = Call[~String] : func:r1979_2, this:r1979_1 -# 1979| mu1979_4(unknown) = ^CallSideEffect : ~m? -# 1979| v1979_5(void) = ^IndirectReadSideEffect[-1] : &:r1979_1, ~m? -# 1979| mu1979_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1979_1 -# 1979| r1979_7(bool) = Constant[0] : -# 1979| v1979_8(void) = ConditionalBranch : r1979_7 +# 35| Block 653 +# 35| r35_9143(glval) = VariableAddress[x653] : +# 35| mu35_9144(String) = Uninitialized[x653] : &:r35_9143 +# 35| r35_9145(glval) = FunctionAddress[String] : +# 35| v35_9146(void) = Call[String] : func:r35_9145, this:r35_9143 +# 35| mu35_9147(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9143 +# 35| r35_9149(glval) = VariableAddress[x653] : +# 35| r35_9150(glval) = FunctionAddress[~String] : +# 35| v35_9151(void) = Call[~String] : func:r35_9150, this:r35_9149 +# 35| mu35_9152(unknown) = ^CallSideEffect : ~m? +# 35| v35_9153(void) = ^IndirectReadSideEffect[-1] : &:r35_9149, ~m? +# 35| mu35_9154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9149 +# 35| r35_9155(bool) = Constant[0] : +# 35| v35_9156(void) = ConditionalBranch : r35_9155 #-----| False -> Block 654 #-----| True -> Block 1026 -# 1981| Block 654 -# 1981| r1981_1(glval) = VariableAddress[x654] : -# 1981| mu1981_2(String) = Uninitialized[x654] : &:r1981_1 -# 1981| r1981_3(glval) = FunctionAddress[String] : -# 1981| v1981_4(void) = Call[String] : func:r1981_3, this:r1981_1 -# 1981| mu1981_5(unknown) = ^CallSideEffect : ~m? -# 1981| mu1981_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1981_1 -# 1982| r1982_1(glval) = VariableAddress[x654] : -# 1982| r1982_2(glval) = FunctionAddress[~String] : -# 1982| v1982_3(void) = Call[~String] : func:r1982_2, this:r1982_1 -# 1982| mu1982_4(unknown) = ^CallSideEffect : ~m? -# 1982| v1982_5(void) = ^IndirectReadSideEffect[-1] : &:r1982_1, ~m? -# 1982| mu1982_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 -# 1982| r1982_7(bool) = Constant[0] : -# 1982| v1982_8(void) = ConditionalBranch : r1982_7 +# 35| Block 654 +# 35| r35_9157(glval) = VariableAddress[x654] : +# 35| mu35_9158(String) = Uninitialized[x654] : &:r35_9157 +# 35| r35_9159(glval) = FunctionAddress[String] : +# 35| v35_9160(void) = Call[String] : func:r35_9159, this:r35_9157 +# 35| mu35_9161(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9157 +# 35| r35_9163(glval) = VariableAddress[x654] : +# 35| r35_9164(glval) = FunctionAddress[~String] : +# 35| v35_9165(void) = Call[~String] : func:r35_9164, this:r35_9163 +# 35| mu35_9166(unknown) = ^CallSideEffect : ~m? +# 35| v35_9167(void) = ^IndirectReadSideEffect[-1] : &:r35_9163, ~m? +# 35| mu35_9168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9163 +# 35| r35_9169(bool) = Constant[0] : +# 35| v35_9170(void) = ConditionalBranch : r35_9169 #-----| False -> Block 655 #-----| True -> Block 1026 -# 1984| Block 655 -# 1984| r1984_1(glval) = VariableAddress[x655] : -# 1984| mu1984_2(String) = Uninitialized[x655] : &:r1984_1 -# 1984| r1984_3(glval) = FunctionAddress[String] : -# 1984| v1984_4(void) = Call[String] : func:r1984_3, this:r1984_1 -# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? -# 1984| mu1984_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1984_1 -# 1985| r1985_1(glval) = VariableAddress[x655] : -# 1985| r1985_2(glval) = FunctionAddress[~String] : -# 1985| v1985_3(void) = Call[~String] : func:r1985_2, this:r1985_1 -# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? -# 1985| v1985_5(void) = ^IndirectReadSideEffect[-1] : &:r1985_1, ~m? -# 1985| mu1985_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1985_1 -# 1985| r1985_7(bool) = Constant[0] : -# 1985| v1985_8(void) = ConditionalBranch : r1985_7 +# 35| Block 655 +# 35| r35_9171(glval) = VariableAddress[x655] : +# 35| mu35_9172(String) = Uninitialized[x655] : &:r35_9171 +# 35| r35_9173(glval) = FunctionAddress[String] : +# 35| v35_9174(void) = Call[String] : func:r35_9173, this:r35_9171 +# 35| mu35_9175(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9171 +# 35| r35_9177(glval) = VariableAddress[x655] : +# 35| r35_9178(glval) = FunctionAddress[~String] : +# 35| v35_9179(void) = Call[~String] : func:r35_9178, this:r35_9177 +# 35| mu35_9180(unknown) = ^CallSideEffect : ~m? +# 35| v35_9181(void) = ^IndirectReadSideEffect[-1] : &:r35_9177, ~m? +# 35| mu35_9182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9177 +# 35| r35_9183(bool) = Constant[0] : +# 35| v35_9184(void) = ConditionalBranch : r35_9183 #-----| False -> Block 656 #-----| True -> Block 1026 -# 1987| Block 656 -# 1987| r1987_1(glval) = VariableAddress[x656] : -# 1987| mu1987_2(String) = Uninitialized[x656] : &:r1987_1 -# 1987| r1987_3(glval) = FunctionAddress[String] : -# 1987| v1987_4(void) = Call[String] : func:r1987_3, this:r1987_1 -# 1987| mu1987_5(unknown) = ^CallSideEffect : ~m? -# 1987| mu1987_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1987_1 -# 1988| r1988_1(glval) = VariableAddress[x656] : -# 1988| r1988_2(glval) = FunctionAddress[~String] : -# 1988| v1988_3(void) = Call[~String] : func:r1988_2, this:r1988_1 -# 1988| mu1988_4(unknown) = ^CallSideEffect : ~m? -# 1988| v1988_5(void) = ^IndirectReadSideEffect[-1] : &:r1988_1, ~m? -# 1988| mu1988_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1988_1 -# 1988| r1988_7(bool) = Constant[0] : -# 1988| v1988_8(void) = ConditionalBranch : r1988_7 +# 35| Block 656 +# 35| r35_9185(glval) = VariableAddress[x656] : +# 35| mu35_9186(String) = Uninitialized[x656] : &:r35_9185 +# 35| r35_9187(glval) = FunctionAddress[String] : +# 35| v35_9188(void) = Call[String] : func:r35_9187, this:r35_9185 +# 35| mu35_9189(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9185 +# 35| r35_9191(glval) = VariableAddress[x656] : +# 35| r35_9192(glval) = FunctionAddress[~String] : +# 35| v35_9193(void) = Call[~String] : func:r35_9192, this:r35_9191 +# 35| mu35_9194(unknown) = ^CallSideEffect : ~m? +# 35| v35_9195(void) = ^IndirectReadSideEffect[-1] : &:r35_9191, ~m? +# 35| mu35_9196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9191 +# 35| r35_9197(bool) = Constant[0] : +# 35| v35_9198(void) = ConditionalBranch : r35_9197 #-----| False -> Block 657 #-----| True -> Block 1026 -# 1990| Block 657 -# 1990| r1990_1(glval) = VariableAddress[x657] : -# 1990| mu1990_2(String) = Uninitialized[x657] : &:r1990_1 -# 1990| r1990_3(glval) = FunctionAddress[String] : -# 1990| v1990_4(void) = Call[String] : func:r1990_3, this:r1990_1 -# 1990| mu1990_5(unknown) = ^CallSideEffect : ~m? -# 1990| mu1990_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1990_1 -# 1991| r1991_1(glval) = VariableAddress[x657] : -# 1991| r1991_2(glval) = FunctionAddress[~String] : -# 1991| v1991_3(void) = Call[~String] : func:r1991_2, this:r1991_1 -# 1991| mu1991_4(unknown) = ^CallSideEffect : ~m? -# 1991| v1991_5(void) = ^IndirectReadSideEffect[-1] : &:r1991_1, ~m? -# 1991| mu1991_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1991| r1991_7(bool) = Constant[0] : -# 1991| v1991_8(void) = ConditionalBranch : r1991_7 +# 35| Block 657 +# 35| r35_9199(glval) = VariableAddress[x657] : +# 35| mu35_9200(String) = Uninitialized[x657] : &:r35_9199 +# 35| r35_9201(glval) = FunctionAddress[String] : +# 35| v35_9202(void) = Call[String] : func:r35_9201, this:r35_9199 +# 35| mu35_9203(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9199 +# 35| r35_9205(glval) = VariableAddress[x657] : +# 35| r35_9206(glval) = FunctionAddress[~String] : +# 35| v35_9207(void) = Call[~String] : func:r35_9206, this:r35_9205 +# 35| mu35_9208(unknown) = ^CallSideEffect : ~m? +# 35| v35_9209(void) = ^IndirectReadSideEffect[-1] : &:r35_9205, ~m? +# 35| mu35_9210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9205 +# 35| r35_9211(bool) = Constant[0] : +# 35| v35_9212(void) = ConditionalBranch : r35_9211 #-----| False -> Block 658 #-----| True -> Block 1026 -# 1993| Block 658 -# 1993| r1993_1(glval) = VariableAddress[x658] : -# 1993| mu1993_2(String) = Uninitialized[x658] : &:r1993_1 -# 1993| r1993_3(glval) = FunctionAddress[String] : -# 1993| v1993_4(void) = Call[String] : func:r1993_3, this:r1993_1 -# 1993| mu1993_5(unknown) = ^CallSideEffect : ~m? -# 1993| mu1993_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 -# 1994| r1994_1(glval) = VariableAddress[x658] : -# 1994| r1994_2(glval) = FunctionAddress[~String] : -# 1994| v1994_3(void) = Call[~String] : func:r1994_2, this:r1994_1 -# 1994| mu1994_4(unknown) = ^CallSideEffect : ~m? -# 1994| v1994_5(void) = ^IndirectReadSideEffect[-1] : &:r1994_1, ~m? -# 1994| mu1994_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1994_1 -# 1994| r1994_7(bool) = Constant[0] : -# 1994| v1994_8(void) = ConditionalBranch : r1994_7 +# 35| Block 658 +# 35| r35_9213(glval) = VariableAddress[x658] : +# 35| mu35_9214(String) = Uninitialized[x658] : &:r35_9213 +# 35| r35_9215(glval) = FunctionAddress[String] : +# 35| v35_9216(void) = Call[String] : func:r35_9215, this:r35_9213 +# 35| mu35_9217(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9213 +# 35| r35_9219(glval) = VariableAddress[x658] : +# 35| r35_9220(glval) = FunctionAddress[~String] : +# 35| v35_9221(void) = Call[~String] : func:r35_9220, this:r35_9219 +# 35| mu35_9222(unknown) = ^CallSideEffect : ~m? +# 35| v35_9223(void) = ^IndirectReadSideEffect[-1] : &:r35_9219, ~m? +# 35| mu35_9224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9219 +# 35| r35_9225(bool) = Constant[0] : +# 35| v35_9226(void) = ConditionalBranch : r35_9225 #-----| False -> Block 659 #-----| True -> Block 1026 -# 1996| Block 659 -# 1996| r1996_1(glval) = VariableAddress[x659] : -# 1996| mu1996_2(String) = Uninitialized[x659] : &:r1996_1 -# 1996| r1996_3(glval) = FunctionAddress[String] : -# 1996| v1996_4(void) = Call[String] : func:r1996_3, this:r1996_1 -# 1996| mu1996_5(unknown) = ^CallSideEffect : ~m? -# 1996| mu1996_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1996_1 -# 1997| r1997_1(glval) = VariableAddress[x659] : -# 1997| r1997_2(glval) = FunctionAddress[~String] : -# 1997| v1997_3(void) = Call[~String] : func:r1997_2, this:r1997_1 -# 1997| mu1997_4(unknown) = ^CallSideEffect : ~m? -# 1997| v1997_5(void) = ^IndirectReadSideEffect[-1] : &:r1997_1, ~m? -# 1997| mu1997_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1997_1 -# 1997| r1997_7(bool) = Constant[0] : -# 1997| v1997_8(void) = ConditionalBranch : r1997_7 +# 35| Block 659 +# 35| r35_9227(glval) = VariableAddress[x659] : +# 35| mu35_9228(String) = Uninitialized[x659] : &:r35_9227 +# 35| r35_9229(glval) = FunctionAddress[String] : +# 35| v35_9230(void) = Call[String] : func:r35_9229, this:r35_9227 +# 35| mu35_9231(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9227 +# 35| r35_9233(glval) = VariableAddress[x659] : +# 35| r35_9234(glval) = FunctionAddress[~String] : +# 35| v35_9235(void) = Call[~String] : func:r35_9234, this:r35_9233 +# 35| mu35_9236(unknown) = ^CallSideEffect : ~m? +# 35| v35_9237(void) = ^IndirectReadSideEffect[-1] : &:r35_9233, ~m? +# 35| mu35_9238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9233 +# 35| r35_9239(bool) = Constant[0] : +# 35| v35_9240(void) = ConditionalBranch : r35_9239 #-----| False -> Block 660 #-----| True -> Block 1026 -# 1999| Block 660 -# 1999| r1999_1(glval) = VariableAddress[x660] : -# 1999| mu1999_2(String) = Uninitialized[x660] : &:r1999_1 -# 1999| r1999_3(glval) = FunctionAddress[String] : -# 1999| v1999_4(void) = Call[String] : func:r1999_3, this:r1999_1 -# 1999| mu1999_5(unknown) = ^CallSideEffect : ~m? -# 1999| mu1999_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1999_1 -# 2000| r2000_1(glval) = VariableAddress[x660] : -# 2000| r2000_2(glval) = FunctionAddress[~String] : -# 2000| v2000_3(void) = Call[~String] : func:r2000_2, this:r2000_1 -# 2000| mu2000_4(unknown) = ^CallSideEffect : ~m? -# 2000| v2000_5(void) = ^IndirectReadSideEffect[-1] : &:r2000_1, ~m? -# 2000| mu2000_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2000_1 -# 2000| r2000_7(bool) = Constant[0] : -# 2000| v2000_8(void) = ConditionalBranch : r2000_7 +# 35| Block 660 +# 35| r35_9241(glval) = VariableAddress[x660] : +# 35| mu35_9242(String) = Uninitialized[x660] : &:r35_9241 +# 35| r35_9243(glval) = FunctionAddress[String] : +# 35| v35_9244(void) = Call[String] : func:r35_9243, this:r35_9241 +# 35| mu35_9245(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9241 +# 35| r35_9247(glval) = VariableAddress[x660] : +# 35| r35_9248(glval) = FunctionAddress[~String] : +# 35| v35_9249(void) = Call[~String] : func:r35_9248, this:r35_9247 +# 35| mu35_9250(unknown) = ^CallSideEffect : ~m? +# 35| v35_9251(void) = ^IndirectReadSideEffect[-1] : &:r35_9247, ~m? +# 35| mu35_9252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9247 +# 35| r35_9253(bool) = Constant[0] : +# 35| v35_9254(void) = ConditionalBranch : r35_9253 #-----| False -> Block 661 #-----| True -> Block 1026 -# 2002| Block 661 -# 2002| r2002_1(glval) = VariableAddress[x661] : -# 2002| mu2002_2(String) = Uninitialized[x661] : &:r2002_1 -# 2002| r2002_3(glval) = FunctionAddress[String] : -# 2002| v2002_4(void) = Call[String] : func:r2002_3, this:r2002_1 -# 2002| mu2002_5(unknown) = ^CallSideEffect : ~m? -# 2002| mu2002_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2002_1 -# 2003| r2003_1(glval) = VariableAddress[x661] : -# 2003| r2003_2(glval) = FunctionAddress[~String] : -# 2003| v2003_3(void) = Call[~String] : func:r2003_2, this:r2003_1 -# 2003| mu2003_4(unknown) = ^CallSideEffect : ~m? -# 2003| v2003_5(void) = ^IndirectReadSideEffect[-1] : &:r2003_1, ~m? -# 2003| mu2003_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2003_1 -# 2003| r2003_7(bool) = Constant[0] : -# 2003| v2003_8(void) = ConditionalBranch : r2003_7 +# 35| Block 661 +# 35| r35_9255(glval) = VariableAddress[x661] : +# 35| mu35_9256(String) = Uninitialized[x661] : &:r35_9255 +# 35| r35_9257(glval) = FunctionAddress[String] : +# 35| v35_9258(void) = Call[String] : func:r35_9257, this:r35_9255 +# 35| mu35_9259(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9255 +# 35| r35_9261(glval) = VariableAddress[x661] : +# 35| r35_9262(glval) = FunctionAddress[~String] : +# 35| v35_9263(void) = Call[~String] : func:r35_9262, this:r35_9261 +# 35| mu35_9264(unknown) = ^CallSideEffect : ~m? +# 35| v35_9265(void) = ^IndirectReadSideEffect[-1] : &:r35_9261, ~m? +# 35| mu35_9266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9261 +# 35| r35_9267(bool) = Constant[0] : +# 35| v35_9268(void) = ConditionalBranch : r35_9267 #-----| False -> Block 662 #-----| True -> Block 1026 -# 2005| Block 662 -# 2005| r2005_1(glval) = VariableAddress[x662] : -# 2005| mu2005_2(String) = Uninitialized[x662] : &:r2005_1 -# 2005| r2005_3(glval) = FunctionAddress[String] : -# 2005| v2005_4(void) = Call[String] : func:r2005_3, this:r2005_1 -# 2005| mu2005_5(unknown) = ^CallSideEffect : ~m? -# 2005| mu2005_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2005_1 -# 2006| r2006_1(glval) = VariableAddress[x662] : -# 2006| r2006_2(glval) = FunctionAddress[~String] : -# 2006| v2006_3(void) = Call[~String] : func:r2006_2, this:r2006_1 -# 2006| mu2006_4(unknown) = ^CallSideEffect : ~m? -# 2006| v2006_5(void) = ^IndirectReadSideEffect[-1] : &:r2006_1, ~m? -# 2006| mu2006_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2006_1 -# 2006| r2006_7(bool) = Constant[0] : -# 2006| v2006_8(void) = ConditionalBranch : r2006_7 +# 35| Block 662 +# 35| r35_9269(glval) = VariableAddress[x662] : +# 35| mu35_9270(String) = Uninitialized[x662] : &:r35_9269 +# 35| r35_9271(glval) = FunctionAddress[String] : +# 35| v35_9272(void) = Call[String] : func:r35_9271, this:r35_9269 +# 35| mu35_9273(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9269 +# 35| r35_9275(glval) = VariableAddress[x662] : +# 35| r35_9276(glval) = FunctionAddress[~String] : +# 35| v35_9277(void) = Call[~String] : func:r35_9276, this:r35_9275 +# 35| mu35_9278(unknown) = ^CallSideEffect : ~m? +# 35| v35_9279(void) = ^IndirectReadSideEffect[-1] : &:r35_9275, ~m? +# 35| mu35_9280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9275 +# 35| r35_9281(bool) = Constant[0] : +# 35| v35_9282(void) = ConditionalBranch : r35_9281 #-----| False -> Block 663 #-----| True -> Block 1026 -# 2008| Block 663 -# 2008| r2008_1(glval) = VariableAddress[x663] : -# 2008| mu2008_2(String) = Uninitialized[x663] : &:r2008_1 -# 2008| r2008_3(glval) = FunctionAddress[String] : -# 2008| v2008_4(void) = Call[String] : func:r2008_3, this:r2008_1 -# 2008| mu2008_5(unknown) = ^CallSideEffect : ~m? -# 2008| mu2008_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2008_1 -# 2009| r2009_1(glval) = VariableAddress[x663] : -# 2009| r2009_2(glval) = FunctionAddress[~String] : -# 2009| v2009_3(void) = Call[~String] : func:r2009_2, this:r2009_1 -# 2009| mu2009_4(unknown) = ^CallSideEffect : ~m? -# 2009| v2009_5(void) = ^IndirectReadSideEffect[-1] : &:r2009_1, ~m? -# 2009| mu2009_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2009_1 -# 2009| r2009_7(bool) = Constant[0] : -# 2009| v2009_8(void) = ConditionalBranch : r2009_7 +# 35| Block 663 +# 35| r35_9283(glval) = VariableAddress[x663] : +# 35| mu35_9284(String) = Uninitialized[x663] : &:r35_9283 +# 35| r35_9285(glval) = FunctionAddress[String] : +# 35| v35_9286(void) = Call[String] : func:r35_9285, this:r35_9283 +# 35| mu35_9287(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9283 +# 35| r35_9289(glval) = VariableAddress[x663] : +# 35| r35_9290(glval) = FunctionAddress[~String] : +# 35| v35_9291(void) = Call[~String] : func:r35_9290, this:r35_9289 +# 35| mu35_9292(unknown) = ^CallSideEffect : ~m? +# 35| v35_9293(void) = ^IndirectReadSideEffect[-1] : &:r35_9289, ~m? +# 35| mu35_9294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9289 +# 35| r35_9295(bool) = Constant[0] : +# 35| v35_9296(void) = ConditionalBranch : r35_9295 #-----| False -> Block 664 #-----| True -> Block 1026 -# 2011| Block 664 -# 2011| r2011_1(glval) = VariableAddress[x664] : -# 2011| mu2011_2(String) = Uninitialized[x664] : &:r2011_1 -# 2011| r2011_3(glval) = FunctionAddress[String] : -# 2011| v2011_4(void) = Call[String] : func:r2011_3, this:r2011_1 -# 2011| mu2011_5(unknown) = ^CallSideEffect : ~m? -# 2011| mu2011_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[x664] : -# 2012| r2012_2(glval) = FunctionAddress[~String] : -# 2012| v2012_3(void) = Call[~String] : func:r2012_2, this:r2012_1 -# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? -# 2012| v2012_5(void) = ^IndirectReadSideEffect[-1] : &:r2012_1, ~m? -# 2012| mu2012_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2012_1 -# 2012| r2012_7(bool) = Constant[0] : -# 2012| v2012_8(void) = ConditionalBranch : r2012_7 +# 35| Block 664 +# 35| r35_9297(glval) = VariableAddress[x664] : +# 35| mu35_9298(String) = Uninitialized[x664] : &:r35_9297 +# 35| r35_9299(glval) = FunctionAddress[String] : +# 35| v35_9300(void) = Call[String] : func:r35_9299, this:r35_9297 +# 35| mu35_9301(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9297 +# 35| r35_9303(glval) = VariableAddress[x664] : +# 35| r35_9304(glval) = FunctionAddress[~String] : +# 35| v35_9305(void) = Call[~String] : func:r35_9304, this:r35_9303 +# 35| mu35_9306(unknown) = ^CallSideEffect : ~m? +# 35| v35_9307(void) = ^IndirectReadSideEffect[-1] : &:r35_9303, ~m? +# 35| mu35_9308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9303 +# 35| r35_9309(bool) = Constant[0] : +# 35| v35_9310(void) = ConditionalBranch : r35_9309 #-----| False -> Block 665 #-----| True -> Block 1026 -# 2014| Block 665 -# 2014| r2014_1(glval) = VariableAddress[x665] : -# 2014| mu2014_2(String) = Uninitialized[x665] : &:r2014_1 -# 2014| r2014_3(glval) = FunctionAddress[String] : -# 2014| v2014_4(void) = Call[String] : func:r2014_3, this:r2014_1 -# 2014| mu2014_5(unknown) = ^CallSideEffect : ~m? -# 2014| mu2014_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2014_1 -# 2015| r2015_1(glval) = VariableAddress[x665] : -# 2015| r2015_2(glval) = FunctionAddress[~String] : -# 2015| v2015_3(void) = Call[~String] : func:r2015_2, this:r2015_1 -# 2015| mu2015_4(unknown) = ^CallSideEffect : ~m? -# 2015| v2015_5(void) = ^IndirectReadSideEffect[-1] : &:r2015_1, ~m? -# 2015| mu2015_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2015_1 -# 2015| r2015_7(bool) = Constant[0] : -# 2015| v2015_8(void) = ConditionalBranch : r2015_7 +# 35| Block 665 +# 35| r35_9311(glval) = VariableAddress[x665] : +# 35| mu35_9312(String) = Uninitialized[x665] : &:r35_9311 +# 35| r35_9313(glval) = FunctionAddress[String] : +# 35| v35_9314(void) = Call[String] : func:r35_9313, this:r35_9311 +# 35| mu35_9315(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9311 +# 35| r35_9317(glval) = VariableAddress[x665] : +# 35| r35_9318(glval) = FunctionAddress[~String] : +# 35| v35_9319(void) = Call[~String] : func:r35_9318, this:r35_9317 +# 35| mu35_9320(unknown) = ^CallSideEffect : ~m? +# 35| v35_9321(void) = ^IndirectReadSideEffect[-1] : &:r35_9317, ~m? +# 35| mu35_9322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9317 +# 35| r35_9323(bool) = Constant[0] : +# 35| v35_9324(void) = ConditionalBranch : r35_9323 #-----| False -> Block 666 #-----| True -> Block 1026 -# 2017| Block 666 -# 2017| r2017_1(glval) = VariableAddress[x666] : -# 2017| mu2017_2(String) = Uninitialized[x666] : &:r2017_1 -# 2017| r2017_3(glval) = FunctionAddress[String] : -# 2017| v2017_4(void) = Call[String] : func:r2017_3, this:r2017_1 -# 2017| mu2017_5(unknown) = ^CallSideEffect : ~m? -# 2017| mu2017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2017_1 -# 2018| r2018_1(glval) = VariableAddress[x666] : -# 2018| r2018_2(glval) = FunctionAddress[~String] : -# 2018| v2018_3(void) = Call[~String] : func:r2018_2, this:r2018_1 -# 2018| mu2018_4(unknown) = ^CallSideEffect : ~m? -# 2018| v2018_5(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, ~m? -# 2018| mu2018_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| r2018_7(bool) = Constant[0] : -# 2018| v2018_8(void) = ConditionalBranch : r2018_7 +# 35| Block 666 +# 35| r35_9325(glval) = VariableAddress[x666] : +# 35| mu35_9326(String) = Uninitialized[x666] : &:r35_9325 +# 35| r35_9327(glval) = FunctionAddress[String] : +# 35| v35_9328(void) = Call[String] : func:r35_9327, this:r35_9325 +# 35| mu35_9329(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9325 +# 35| r35_9331(glval) = VariableAddress[x666] : +# 35| r35_9332(glval) = FunctionAddress[~String] : +# 35| v35_9333(void) = Call[~String] : func:r35_9332, this:r35_9331 +# 35| mu35_9334(unknown) = ^CallSideEffect : ~m? +# 35| v35_9335(void) = ^IndirectReadSideEffect[-1] : &:r35_9331, ~m? +# 35| mu35_9336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9331 +# 35| r35_9337(bool) = Constant[0] : +# 35| v35_9338(void) = ConditionalBranch : r35_9337 #-----| False -> Block 667 #-----| True -> Block 1026 -# 2020| Block 667 -# 2020| r2020_1(glval) = VariableAddress[x667] : -# 2020| mu2020_2(String) = Uninitialized[x667] : &:r2020_1 -# 2020| r2020_3(glval) = FunctionAddress[String] : -# 2020| v2020_4(void) = Call[String] : func:r2020_3, this:r2020_1 -# 2020| mu2020_5(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2021| r2021_1(glval) = VariableAddress[x667] : -# 2021| r2021_2(glval) = FunctionAddress[~String] : -# 2021| v2021_3(void) = Call[~String] : func:r2021_2, this:r2021_1 -# 2021| mu2021_4(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_5(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| mu2021_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_7(bool) = Constant[0] : -# 2021| v2021_8(void) = ConditionalBranch : r2021_7 +# 35| Block 667 +# 35| r35_9339(glval) = VariableAddress[x667] : +# 35| mu35_9340(String) = Uninitialized[x667] : &:r35_9339 +# 35| r35_9341(glval) = FunctionAddress[String] : +# 35| v35_9342(void) = Call[String] : func:r35_9341, this:r35_9339 +# 35| mu35_9343(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9339 +# 35| r35_9345(glval) = VariableAddress[x667] : +# 35| r35_9346(glval) = FunctionAddress[~String] : +# 35| v35_9347(void) = Call[~String] : func:r35_9346, this:r35_9345 +# 35| mu35_9348(unknown) = ^CallSideEffect : ~m? +# 35| v35_9349(void) = ^IndirectReadSideEffect[-1] : &:r35_9345, ~m? +# 35| mu35_9350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9345 +# 35| r35_9351(bool) = Constant[0] : +# 35| v35_9352(void) = ConditionalBranch : r35_9351 #-----| False -> Block 668 #-----| True -> Block 1026 -# 2023| Block 668 -# 2023| r2023_1(glval) = VariableAddress[x668] : -# 2023| mu2023_2(String) = Uninitialized[x668] : &:r2023_1 -# 2023| r2023_3(glval) = FunctionAddress[String] : -# 2023| v2023_4(void) = Call[String] : func:r2023_3, this:r2023_1 -# 2023| mu2023_5(unknown) = ^CallSideEffect : ~m? -# 2023| mu2023_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2024| r2024_1(glval) = VariableAddress[x668] : -# 2024| r2024_2(glval) = FunctionAddress[~String] : -# 2024| v2024_3(void) = Call[~String] : func:r2024_2, this:r2024_1 -# 2024| mu2024_4(unknown) = ^CallSideEffect : ~m? -# 2024| v2024_5(void) = ^IndirectReadSideEffect[-1] : &:r2024_1, ~m? -# 2024| mu2024_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2024_1 -# 2024| r2024_7(bool) = Constant[0] : -# 2024| v2024_8(void) = ConditionalBranch : r2024_7 +# 35| Block 668 +# 35| r35_9353(glval) = VariableAddress[x668] : +# 35| mu35_9354(String) = Uninitialized[x668] : &:r35_9353 +# 35| r35_9355(glval) = FunctionAddress[String] : +# 35| v35_9356(void) = Call[String] : func:r35_9355, this:r35_9353 +# 35| mu35_9357(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9353 +# 35| r35_9359(glval) = VariableAddress[x668] : +# 35| r35_9360(glval) = FunctionAddress[~String] : +# 35| v35_9361(void) = Call[~String] : func:r35_9360, this:r35_9359 +# 35| mu35_9362(unknown) = ^CallSideEffect : ~m? +# 35| v35_9363(void) = ^IndirectReadSideEffect[-1] : &:r35_9359, ~m? +# 35| mu35_9364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9359 +# 35| r35_9365(bool) = Constant[0] : +# 35| v35_9366(void) = ConditionalBranch : r35_9365 #-----| False -> Block 669 #-----| True -> Block 1026 -# 2026| Block 669 -# 2026| r2026_1(glval) = VariableAddress[x669] : -# 2026| mu2026_2(String) = Uninitialized[x669] : &:r2026_1 -# 2026| r2026_3(glval) = FunctionAddress[String] : -# 2026| v2026_4(void) = Call[String] : func:r2026_3, this:r2026_1 -# 2026| mu2026_5(unknown) = ^CallSideEffect : ~m? -# 2026| mu2026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2026_1 -# 2027| r2027_1(glval) = VariableAddress[x669] : -# 2027| r2027_2(glval) = FunctionAddress[~String] : -# 2027| v2027_3(void) = Call[~String] : func:r2027_2, this:r2027_1 -# 2027| mu2027_4(unknown) = ^CallSideEffect : ~m? -# 2027| v2027_5(void) = ^IndirectReadSideEffect[-1] : &:r2027_1, ~m? -# 2027| mu2027_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2027_1 -# 2027| r2027_7(bool) = Constant[0] : -# 2027| v2027_8(void) = ConditionalBranch : r2027_7 +# 35| Block 669 +# 35| r35_9367(glval) = VariableAddress[x669] : +# 35| mu35_9368(String) = Uninitialized[x669] : &:r35_9367 +# 35| r35_9369(glval) = FunctionAddress[String] : +# 35| v35_9370(void) = Call[String] : func:r35_9369, this:r35_9367 +# 35| mu35_9371(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9367 +# 35| r35_9373(glval) = VariableAddress[x669] : +# 35| r35_9374(glval) = FunctionAddress[~String] : +# 35| v35_9375(void) = Call[~String] : func:r35_9374, this:r35_9373 +# 35| mu35_9376(unknown) = ^CallSideEffect : ~m? +# 35| v35_9377(void) = ^IndirectReadSideEffect[-1] : &:r35_9373, ~m? +# 35| mu35_9378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9373 +# 35| r35_9379(bool) = Constant[0] : +# 35| v35_9380(void) = ConditionalBranch : r35_9379 #-----| False -> Block 670 #-----| True -> Block 1026 -# 2029| Block 670 -# 2029| r2029_1(glval) = VariableAddress[x670] : -# 2029| mu2029_2(String) = Uninitialized[x670] : &:r2029_1 -# 2029| r2029_3(glval) = FunctionAddress[String] : -# 2029| v2029_4(void) = Call[String] : func:r2029_3, this:r2029_1 -# 2029| mu2029_5(unknown) = ^CallSideEffect : ~m? -# 2029| mu2029_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2029_1 -# 2030| r2030_1(glval) = VariableAddress[x670] : -# 2030| r2030_2(glval) = FunctionAddress[~String] : -# 2030| v2030_3(void) = Call[~String] : func:r2030_2, this:r2030_1 -# 2030| mu2030_4(unknown) = ^CallSideEffect : ~m? -# 2030| v2030_5(void) = ^IndirectReadSideEffect[-1] : &:r2030_1, ~m? -# 2030| mu2030_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2030_1 -# 2030| r2030_7(bool) = Constant[0] : -# 2030| v2030_8(void) = ConditionalBranch : r2030_7 +# 35| Block 670 +# 35| r35_9381(glval) = VariableAddress[x670] : +# 35| mu35_9382(String) = Uninitialized[x670] : &:r35_9381 +# 35| r35_9383(glval) = FunctionAddress[String] : +# 35| v35_9384(void) = Call[String] : func:r35_9383, this:r35_9381 +# 35| mu35_9385(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9381 +# 35| r35_9387(glval) = VariableAddress[x670] : +# 35| r35_9388(glval) = FunctionAddress[~String] : +# 35| v35_9389(void) = Call[~String] : func:r35_9388, this:r35_9387 +# 35| mu35_9390(unknown) = ^CallSideEffect : ~m? +# 35| v35_9391(void) = ^IndirectReadSideEffect[-1] : &:r35_9387, ~m? +# 35| mu35_9392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9387 +# 35| r35_9393(bool) = Constant[0] : +# 35| v35_9394(void) = ConditionalBranch : r35_9393 #-----| False -> Block 671 #-----| True -> Block 1026 -# 2032| Block 671 -# 2032| r2032_1(glval) = VariableAddress[x671] : -# 2032| mu2032_2(String) = Uninitialized[x671] : &:r2032_1 -# 2032| r2032_3(glval) = FunctionAddress[String] : -# 2032| v2032_4(void) = Call[String] : func:r2032_3, this:r2032_1 -# 2032| mu2032_5(unknown) = ^CallSideEffect : ~m? -# 2032| mu2032_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2032_1 -# 2033| r2033_1(glval) = VariableAddress[x671] : -# 2033| r2033_2(glval) = FunctionAddress[~String] : -# 2033| v2033_3(void) = Call[~String] : func:r2033_2, this:r2033_1 -# 2033| mu2033_4(unknown) = ^CallSideEffect : ~m? -# 2033| v2033_5(void) = ^IndirectReadSideEffect[-1] : &:r2033_1, ~m? -# 2033| mu2033_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2033_1 -# 2033| r2033_7(bool) = Constant[0] : -# 2033| v2033_8(void) = ConditionalBranch : r2033_7 +# 35| Block 671 +# 35| r35_9395(glval) = VariableAddress[x671] : +# 35| mu35_9396(String) = Uninitialized[x671] : &:r35_9395 +# 35| r35_9397(glval) = FunctionAddress[String] : +# 35| v35_9398(void) = Call[String] : func:r35_9397, this:r35_9395 +# 35| mu35_9399(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9395 +# 35| r35_9401(glval) = VariableAddress[x671] : +# 35| r35_9402(glval) = FunctionAddress[~String] : +# 35| v35_9403(void) = Call[~String] : func:r35_9402, this:r35_9401 +# 35| mu35_9404(unknown) = ^CallSideEffect : ~m? +# 35| v35_9405(void) = ^IndirectReadSideEffect[-1] : &:r35_9401, ~m? +# 35| mu35_9406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9401 +# 35| r35_9407(bool) = Constant[0] : +# 35| v35_9408(void) = ConditionalBranch : r35_9407 #-----| False -> Block 672 #-----| True -> Block 1026 -# 2035| Block 672 -# 2035| r2035_1(glval) = VariableAddress[x672] : -# 2035| mu2035_2(String) = Uninitialized[x672] : &:r2035_1 -# 2035| r2035_3(glval) = FunctionAddress[String] : -# 2035| v2035_4(void) = Call[String] : func:r2035_3, this:r2035_1 -# 2035| mu2035_5(unknown) = ^CallSideEffect : ~m? -# 2035| mu2035_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2035_1 -# 2036| r2036_1(glval) = VariableAddress[x672] : -# 2036| r2036_2(glval) = FunctionAddress[~String] : -# 2036| v2036_3(void) = Call[~String] : func:r2036_2, this:r2036_1 -# 2036| mu2036_4(unknown) = ^CallSideEffect : ~m? -# 2036| v2036_5(void) = ^IndirectReadSideEffect[-1] : &:r2036_1, ~m? -# 2036| mu2036_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2036_1 -# 2036| r2036_7(bool) = Constant[0] : -# 2036| v2036_8(void) = ConditionalBranch : r2036_7 +# 35| Block 672 +# 35| r35_9409(glval) = VariableAddress[x672] : +# 35| mu35_9410(String) = Uninitialized[x672] : &:r35_9409 +# 35| r35_9411(glval) = FunctionAddress[String] : +# 35| v35_9412(void) = Call[String] : func:r35_9411, this:r35_9409 +# 35| mu35_9413(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9409 +# 35| r35_9415(glval) = VariableAddress[x672] : +# 35| r35_9416(glval) = FunctionAddress[~String] : +# 35| v35_9417(void) = Call[~String] : func:r35_9416, this:r35_9415 +# 35| mu35_9418(unknown) = ^CallSideEffect : ~m? +# 35| v35_9419(void) = ^IndirectReadSideEffect[-1] : &:r35_9415, ~m? +# 35| mu35_9420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9415 +# 35| r35_9421(bool) = Constant[0] : +# 35| v35_9422(void) = ConditionalBranch : r35_9421 #-----| False -> Block 673 #-----| True -> Block 1026 -# 2038| Block 673 -# 2038| r2038_1(glval) = VariableAddress[x673] : -# 2038| mu2038_2(String) = Uninitialized[x673] : &:r2038_1 -# 2038| r2038_3(glval) = FunctionAddress[String] : -# 2038| v2038_4(void) = Call[String] : func:r2038_3, this:r2038_1 -# 2038| mu2038_5(unknown) = ^CallSideEffect : ~m? -# 2038| mu2038_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2038_1 -# 2039| r2039_1(glval) = VariableAddress[x673] : -# 2039| r2039_2(glval) = FunctionAddress[~String] : -# 2039| v2039_3(void) = Call[~String] : func:r2039_2, this:r2039_1 -# 2039| mu2039_4(unknown) = ^CallSideEffect : ~m? -# 2039| v2039_5(void) = ^IndirectReadSideEffect[-1] : &:r2039_1, ~m? -# 2039| mu2039_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2039_1 -# 2039| r2039_7(bool) = Constant[0] : -# 2039| v2039_8(void) = ConditionalBranch : r2039_7 +# 35| Block 673 +# 35| r35_9423(glval) = VariableAddress[x673] : +# 35| mu35_9424(String) = Uninitialized[x673] : &:r35_9423 +# 35| r35_9425(glval) = FunctionAddress[String] : +# 35| v35_9426(void) = Call[String] : func:r35_9425, this:r35_9423 +# 35| mu35_9427(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9423 +# 35| r35_9429(glval) = VariableAddress[x673] : +# 35| r35_9430(glval) = FunctionAddress[~String] : +# 35| v35_9431(void) = Call[~String] : func:r35_9430, this:r35_9429 +# 35| mu35_9432(unknown) = ^CallSideEffect : ~m? +# 35| v35_9433(void) = ^IndirectReadSideEffect[-1] : &:r35_9429, ~m? +# 35| mu35_9434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9429 +# 35| r35_9435(bool) = Constant[0] : +# 35| v35_9436(void) = ConditionalBranch : r35_9435 #-----| False -> Block 674 #-----| True -> Block 1026 -# 2041| Block 674 -# 2041| r2041_1(glval) = VariableAddress[x674] : -# 2041| mu2041_2(String) = Uninitialized[x674] : &:r2041_1 -# 2041| r2041_3(glval) = FunctionAddress[String] : -# 2041| v2041_4(void) = Call[String] : func:r2041_3, this:r2041_1 -# 2041| mu2041_5(unknown) = ^CallSideEffect : ~m? -# 2041| mu2041_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2041_1 -# 2042| r2042_1(glval) = VariableAddress[x674] : -# 2042| r2042_2(glval) = FunctionAddress[~String] : -# 2042| v2042_3(void) = Call[~String] : func:r2042_2, this:r2042_1 -# 2042| mu2042_4(unknown) = ^CallSideEffect : ~m? -# 2042| v2042_5(void) = ^IndirectReadSideEffect[-1] : &:r2042_1, ~m? -# 2042| mu2042_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2042_1 -# 2042| r2042_7(bool) = Constant[0] : -# 2042| v2042_8(void) = ConditionalBranch : r2042_7 +# 35| Block 674 +# 35| r35_9437(glval) = VariableAddress[x674] : +# 35| mu35_9438(String) = Uninitialized[x674] : &:r35_9437 +# 35| r35_9439(glval) = FunctionAddress[String] : +# 35| v35_9440(void) = Call[String] : func:r35_9439, this:r35_9437 +# 35| mu35_9441(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9437 +# 35| r35_9443(glval) = VariableAddress[x674] : +# 35| r35_9444(glval) = FunctionAddress[~String] : +# 35| v35_9445(void) = Call[~String] : func:r35_9444, this:r35_9443 +# 35| mu35_9446(unknown) = ^CallSideEffect : ~m? +# 35| v35_9447(void) = ^IndirectReadSideEffect[-1] : &:r35_9443, ~m? +# 35| mu35_9448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9443 +# 35| r35_9449(bool) = Constant[0] : +# 35| v35_9450(void) = ConditionalBranch : r35_9449 #-----| False -> Block 675 #-----| True -> Block 1026 -# 2044| Block 675 -# 2044| r2044_1(glval) = VariableAddress[x675] : -# 2044| mu2044_2(String) = Uninitialized[x675] : &:r2044_1 -# 2044| r2044_3(glval) = FunctionAddress[String] : -# 2044| v2044_4(void) = Call[String] : func:r2044_3, this:r2044_1 -# 2044| mu2044_5(unknown) = ^CallSideEffect : ~m? -# 2044| mu2044_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2044_1 -# 2045| r2045_1(glval) = VariableAddress[x675] : -# 2045| r2045_2(glval) = FunctionAddress[~String] : -# 2045| v2045_3(void) = Call[~String] : func:r2045_2, this:r2045_1 -# 2045| mu2045_4(unknown) = ^CallSideEffect : ~m? -# 2045| v2045_5(void) = ^IndirectReadSideEffect[-1] : &:r2045_1, ~m? -# 2045| mu2045_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2045_1 -# 2045| r2045_7(bool) = Constant[0] : -# 2045| v2045_8(void) = ConditionalBranch : r2045_7 +# 35| Block 675 +# 35| r35_9451(glval) = VariableAddress[x675] : +# 35| mu35_9452(String) = Uninitialized[x675] : &:r35_9451 +# 35| r35_9453(glval) = FunctionAddress[String] : +# 35| v35_9454(void) = Call[String] : func:r35_9453, this:r35_9451 +# 35| mu35_9455(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9451 +# 35| r35_9457(glval) = VariableAddress[x675] : +# 35| r35_9458(glval) = FunctionAddress[~String] : +# 35| v35_9459(void) = Call[~String] : func:r35_9458, this:r35_9457 +# 35| mu35_9460(unknown) = ^CallSideEffect : ~m? +# 35| v35_9461(void) = ^IndirectReadSideEffect[-1] : &:r35_9457, ~m? +# 35| mu35_9462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9457 +# 35| r35_9463(bool) = Constant[0] : +# 35| v35_9464(void) = ConditionalBranch : r35_9463 #-----| False -> Block 676 #-----| True -> Block 1026 -# 2047| Block 676 -# 2047| r2047_1(glval) = VariableAddress[x676] : -# 2047| mu2047_2(String) = Uninitialized[x676] : &:r2047_1 -# 2047| r2047_3(glval) = FunctionAddress[String] : -# 2047| v2047_4(void) = Call[String] : func:r2047_3, this:r2047_1 -# 2047| mu2047_5(unknown) = ^CallSideEffect : ~m? -# 2047| mu2047_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2047_1 -# 2048| r2048_1(glval) = VariableAddress[x676] : -# 2048| r2048_2(glval) = FunctionAddress[~String] : -# 2048| v2048_3(void) = Call[~String] : func:r2048_2, this:r2048_1 -# 2048| mu2048_4(unknown) = ^CallSideEffect : ~m? -# 2048| v2048_5(void) = ^IndirectReadSideEffect[-1] : &:r2048_1, ~m? -# 2048| mu2048_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2048_1 -# 2048| r2048_7(bool) = Constant[0] : -# 2048| v2048_8(void) = ConditionalBranch : r2048_7 +# 35| Block 676 +# 35| r35_9465(glval) = VariableAddress[x676] : +# 35| mu35_9466(String) = Uninitialized[x676] : &:r35_9465 +# 35| r35_9467(glval) = FunctionAddress[String] : +# 35| v35_9468(void) = Call[String] : func:r35_9467, this:r35_9465 +# 35| mu35_9469(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9465 +# 35| r35_9471(glval) = VariableAddress[x676] : +# 35| r35_9472(glval) = FunctionAddress[~String] : +# 35| v35_9473(void) = Call[~String] : func:r35_9472, this:r35_9471 +# 35| mu35_9474(unknown) = ^CallSideEffect : ~m? +# 35| v35_9475(void) = ^IndirectReadSideEffect[-1] : &:r35_9471, ~m? +# 35| mu35_9476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9471 +# 35| r35_9477(bool) = Constant[0] : +# 35| v35_9478(void) = ConditionalBranch : r35_9477 #-----| False -> Block 677 #-----| True -> Block 1026 -# 2050| Block 677 -# 2050| r2050_1(glval) = VariableAddress[x677] : -# 2050| mu2050_2(String) = Uninitialized[x677] : &:r2050_1 -# 2050| r2050_3(glval) = FunctionAddress[String] : -# 2050| v2050_4(void) = Call[String] : func:r2050_3, this:r2050_1 -# 2050| mu2050_5(unknown) = ^CallSideEffect : ~m? -# 2050| mu2050_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2050_1 -# 2051| r2051_1(glval) = VariableAddress[x677] : -# 2051| r2051_2(glval) = FunctionAddress[~String] : -# 2051| v2051_3(void) = Call[~String] : func:r2051_2, this:r2051_1 -# 2051| mu2051_4(unknown) = ^CallSideEffect : ~m? -# 2051| v2051_5(void) = ^IndirectReadSideEffect[-1] : &:r2051_1, ~m? -# 2051| mu2051_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2051_1 -# 2051| r2051_7(bool) = Constant[0] : -# 2051| v2051_8(void) = ConditionalBranch : r2051_7 +# 35| Block 677 +# 35| r35_9479(glval) = VariableAddress[x677] : +# 35| mu35_9480(String) = Uninitialized[x677] : &:r35_9479 +# 35| r35_9481(glval) = FunctionAddress[String] : +# 35| v35_9482(void) = Call[String] : func:r35_9481, this:r35_9479 +# 35| mu35_9483(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9479 +# 35| r35_9485(glval) = VariableAddress[x677] : +# 35| r35_9486(glval) = FunctionAddress[~String] : +# 35| v35_9487(void) = Call[~String] : func:r35_9486, this:r35_9485 +# 35| mu35_9488(unknown) = ^CallSideEffect : ~m? +# 35| v35_9489(void) = ^IndirectReadSideEffect[-1] : &:r35_9485, ~m? +# 35| mu35_9490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9485 +# 35| r35_9491(bool) = Constant[0] : +# 35| v35_9492(void) = ConditionalBranch : r35_9491 #-----| False -> Block 678 #-----| True -> Block 1026 -# 2053| Block 678 -# 2053| r2053_1(glval) = VariableAddress[x678] : -# 2053| mu2053_2(String) = Uninitialized[x678] : &:r2053_1 -# 2053| r2053_3(glval) = FunctionAddress[String] : -# 2053| v2053_4(void) = Call[String] : func:r2053_3, this:r2053_1 -# 2053| mu2053_5(unknown) = ^CallSideEffect : ~m? -# 2053| mu2053_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2053_1 -# 2054| r2054_1(glval) = VariableAddress[x678] : -# 2054| r2054_2(glval) = FunctionAddress[~String] : -# 2054| v2054_3(void) = Call[~String] : func:r2054_2, this:r2054_1 -# 2054| mu2054_4(unknown) = ^CallSideEffect : ~m? -# 2054| v2054_5(void) = ^IndirectReadSideEffect[-1] : &:r2054_1, ~m? -# 2054| mu2054_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 -# 2054| r2054_7(bool) = Constant[0] : -# 2054| v2054_8(void) = ConditionalBranch : r2054_7 +# 35| Block 678 +# 35| r35_9493(glval) = VariableAddress[x678] : +# 35| mu35_9494(String) = Uninitialized[x678] : &:r35_9493 +# 35| r35_9495(glval) = FunctionAddress[String] : +# 35| v35_9496(void) = Call[String] : func:r35_9495, this:r35_9493 +# 35| mu35_9497(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9493 +# 35| r35_9499(glval) = VariableAddress[x678] : +# 35| r35_9500(glval) = FunctionAddress[~String] : +# 35| v35_9501(void) = Call[~String] : func:r35_9500, this:r35_9499 +# 35| mu35_9502(unknown) = ^CallSideEffect : ~m? +# 35| v35_9503(void) = ^IndirectReadSideEffect[-1] : &:r35_9499, ~m? +# 35| mu35_9504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9499 +# 35| r35_9505(bool) = Constant[0] : +# 35| v35_9506(void) = ConditionalBranch : r35_9505 #-----| False -> Block 679 #-----| True -> Block 1026 -# 2056| Block 679 -# 2056| r2056_1(glval) = VariableAddress[x679] : -# 2056| mu2056_2(String) = Uninitialized[x679] : &:r2056_1 -# 2056| r2056_3(glval) = FunctionAddress[String] : -# 2056| v2056_4(void) = Call[String] : func:r2056_3, this:r2056_1 -# 2056| mu2056_5(unknown) = ^CallSideEffect : ~m? -# 2056| mu2056_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2056_1 -# 2057| r2057_1(glval) = VariableAddress[x679] : -# 2057| r2057_2(glval) = FunctionAddress[~String] : -# 2057| v2057_3(void) = Call[~String] : func:r2057_2, this:r2057_1 -# 2057| mu2057_4(unknown) = ^CallSideEffect : ~m? -# 2057| v2057_5(void) = ^IndirectReadSideEffect[-1] : &:r2057_1, ~m? -# 2057| mu2057_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2057_1 -# 2057| r2057_7(bool) = Constant[0] : -# 2057| v2057_8(void) = ConditionalBranch : r2057_7 +# 35| Block 679 +# 35| r35_9507(glval) = VariableAddress[x679] : +# 35| mu35_9508(String) = Uninitialized[x679] : &:r35_9507 +# 35| r35_9509(glval) = FunctionAddress[String] : +# 35| v35_9510(void) = Call[String] : func:r35_9509, this:r35_9507 +# 35| mu35_9511(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9507 +# 35| r35_9513(glval) = VariableAddress[x679] : +# 35| r35_9514(glval) = FunctionAddress[~String] : +# 35| v35_9515(void) = Call[~String] : func:r35_9514, this:r35_9513 +# 35| mu35_9516(unknown) = ^CallSideEffect : ~m? +# 35| v35_9517(void) = ^IndirectReadSideEffect[-1] : &:r35_9513, ~m? +# 35| mu35_9518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9513 +# 35| r35_9519(bool) = Constant[0] : +# 35| v35_9520(void) = ConditionalBranch : r35_9519 #-----| False -> Block 680 #-----| True -> Block 1026 -# 2059| Block 680 -# 2059| r2059_1(glval) = VariableAddress[x680] : -# 2059| mu2059_2(String) = Uninitialized[x680] : &:r2059_1 -# 2059| r2059_3(glval) = FunctionAddress[String] : -# 2059| v2059_4(void) = Call[String] : func:r2059_3, this:r2059_1 -# 2059| mu2059_5(unknown) = ^CallSideEffect : ~m? -# 2059| mu2059_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2059_1 -# 2060| r2060_1(glval) = VariableAddress[x680] : -# 2060| r2060_2(glval) = FunctionAddress[~String] : -# 2060| v2060_3(void) = Call[~String] : func:r2060_2, this:r2060_1 -# 2060| mu2060_4(unknown) = ^CallSideEffect : ~m? -# 2060| v2060_5(void) = ^IndirectReadSideEffect[-1] : &:r2060_1, ~m? -# 2060| mu2060_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2060_1 -# 2060| r2060_7(bool) = Constant[0] : -# 2060| v2060_8(void) = ConditionalBranch : r2060_7 +# 35| Block 680 +# 35| r35_9521(glval) = VariableAddress[x680] : +# 35| mu35_9522(String) = Uninitialized[x680] : &:r35_9521 +# 35| r35_9523(glval) = FunctionAddress[String] : +# 35| v35_9524(void) = Call[String] : func:r35_9523, this:r35_9521 +# 35| mu35_9525(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9521 +# 35| r35_9527(glval) = VariableAddress[x680] : +# 35| r35_9528(glval) = FunctionAddress[~String] : +# 35| v35_9529(void) = Call[~String] : func:r35_9528, this:r35_9527 +# 35| mu35_9530(unknown) = ^CallSideEffect : ~m? +# 35| v35_9531(void) = ^IndirectReadSideEffect[-1] : &:r35_9527, ~m? +# 35| mu35_9532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9527 +# 35| r35_9533(bool) = Constant[0] : +# 35| v35_9534(void) = ConditionalBranch : r35_9533 #-----| False -> Block 681 #-----| True -> Block 1026 -# 2062| Block 681 -# 2062| r2062_1(glval) = VariableAddress[x681] : -# 2062| mu2062_2(String) = Uninitialized[x681] : &:r2062_1 -# 2062| r2062_3(glval) = FunctionAddress[String] : -# 2062| v2062_4(void) = Call[String] : func:r2062_3, this:r2062_1 -# 2062| mu2062_5(unknown) = ^CallSideEffect : ~m? -# 2062| mu2062_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2062_1 -# 2063| r2063_1(glval) = VariableAddress[x681] : -# 2063| r2063_2(glval) = FunctionAddress[~String] : -# 2063| v2063_3(void) = Call[~String] : func:r2063_2, this:r2063_1 -# 2063| mu2063_4(unknown) = ^CallSideEffect : ~m? -# 2063| v2063_5(void) = ^IndirectReadSideEffect[-1] : &:r2063_1, ~m? -# 2063| mu2063_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2063_1 -# 2063| r2063_7(bool) = Constant[0] : -# 2063| v2063_8(void) = ConditionalBranch : r2063_7 +# 35| Block 681 +# 35| r35_9535(glval) = VariableAddress[x681] : +# 35| mu35_9536(String) = Uninitialized[x681] : &:r35_9535 +# 35| r35_9537(glval) = FunctionAddress[String] : +# 35| v35_9538(void) = Call[String] : func:r35_9537, this:r35_9535 +# 35| mu35_9539(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9535 +# 35| r35_9541(glval) = VariableAddress[x681] : +# 35| r35_9542(glval) = FunctionAddress[~String] : +# 35| v35_9543(void) = Call[~String] : func:r35_9542, this:r35_9541 +# 35| mu35_9544(unknown) = ^CallSideEffect : ~m? +# 35| v35_9545(void) = ^IndirectReadSideEffect[-1] : &:r35_9541, ~m? +# 35| mu35_9546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9541 +# 35| r35_9547(bool) = Constant[0] : +# 35| v35_9548(void) = ConditionalBranch : r35_9547 #-----| False -> Block 682 #-----| True -> Block 1026 -# 2065| Block 682 -# 2065| r2065_1(glval) = VariableAddress[x682] : -# 2065| mu2065_2(String) = Uninitialized[x682] : &:r2065_1 -# 2065| r2065_3(glval) = FunctionAddress[String] : -# 2065| v2065_4(void) = Call[String] : func:r2065_3, this:r2065_1 -# 2065| mu2065_5(unknown) = ^CallSideEffect : ~m? -# 2065| mu2065_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2065_1 -# 2066| r2066_1(glval) = VariableAddress[x682] : -# 2066| r2066_2(glval) = FunctionAddress[~String] : -# 2066| v2066_3(void) = Call[~String] : func:r2066_2, this:r2066_1 -# 2066| mu2066_4(unknown) = ^CallSideEffect : ~m? -# 2066| v2066_5(void) = ^IndirectReadSideEffect[-1] : &:r2066_1, ~m? -# 2066| mu2066_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2066_1 -# 2066| r2066_7(bool) = Constant[0] : -# 2066| v2066_8(void) = ConditionalBranch : r2066_7 +# 35| Block 682 +# 35| r35_9549(glval) = VariableAddress[x682] : +# 35| mu35_9550(String) = Uninitialized[x682] : &:r35_9549 +# 35| r35_9551(glval) = FunctionAddress[String] : +# 35| v35_9552(void) = Call[String] : func:r35_9551, this:r35_9549 +# 35| mu35_9553(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9549 +# 35| r35_9555(glval) = VariableAddress[x682] : +# 35| r35_9556(glval) = FunctionAddress[~String] : +# 35| v35_9557(void) = Call[~String] : func:r35_9556, this:r35_9555 +# 35| mu35_9558(unknown) = ^CallSideEffect : ~m? +# 35| v35_9559(void) = ^IndirectReadSideEffect[-1] : &:r35_9555, ~m? +# 35| mu35_9560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9555 +# 35| r35_9561(bool) = Constant[0] : +# 35| v35_9562(void) = ConditionalBranch : r35_9561 #-----| False -> Block 683 #-----| True -> Block 1026 -# 2068| Block 683 -# 2068| r2068_1(glval) = VariableAddress[x683] : -# 2068| mu2068_2(String) = Uninitialized[x683] : &:r2068_1 -# 2068| r2068_3(glval) = FunctionAddress[String] : -# 2068| v2068_4(void) = Call[String] : func:r2068_3, this:r2068_1 -# 2068| mu2068_5(unknown) = ^CallSideEffect : ~m? -# 2068| mu2068_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2069| r2069_1(glval) = VariableAddress[x683] : -# 2069| r2069_2(glval) = FunctionAddress[~String] : -# 2069| v2069_3(void) = Call[~String] : func:r2069_2, this:r2069_1 -# 2069| mu2069_4(unknown) = ^CallSideEffect : ~m? -# 2069| v2069_5(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, ~m? -# 2069| mu2069_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| r2069_7(bool) = Constant[0] : -# 2069| v2069_8(void) = ConditionalBranch : r2069_7 +# 35| Block 683 +# 35| r35_9563(glval) = VariableAddress[x683] : +# 35| mu35_9564(String) = Uninitialized[x683] : &:r35_9563 +# 35| r35_9565(glval) = FunctionAddress[String] : +# 35| v35_9566(void) = Call[String] : func:r35_9565, this:r35_9563 +# 35| mu35_9567(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9563 +# 35| r35_9569(glval) = VariableAddress[x683] : +# 35| r35_9570(glval) = FunctionAddress[~String] : +# 35| v35_9571(void) = Call[~String] : func:r35_9570, this:r35_9569 +# 35| mu35_9572(unknown) = ^CallSideEffect : ~m? +# 35| v35_9573(void) = ^IndirectReadSideEffect[-1] : &:r35_9569, ~m? +# 35| mu35_9574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9569 +# 35| r35_9575(bool) = Constant[0] : +# 35| v35_9576(void) = ConditionalBranch : r35_9575 #-----| False -> Block 684 #-----| True -> Block 1026 -# 2071| Block 684 -# 2071| r2071_1(glval) = VariableAddress[x684] : -# 2071| mu2071_2(String) = Uninitialized[x684] : &:r2071_1 -# 2071| r2071_3(glval) = FunctionAddress[String] : -# 2071| v2071_4(void) = Call[String] : func:r2071_3, this:r2071_1 -# 2071| mu2071_5(unknown) = ^CallSideEffect : ~m? -# 2071| mu2071_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2071_1 -# 2072| r2072_1(glval) = VariableAddress[x684] : -# 2072| r2072_2(glval) = FunctionAddress[~String] : -# 2072| v2072_3(void) = Call[~String] : func:r2072_2, this:r2072_1 -# 2072| mu2072_4(unknown) = ^CallSideEffect : ~m? -# 2072| v2072_5(void) = ^IndirectReadSideEffect[-1] : &:r2072_1, ~m? -# 2072| mu2072_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2072_1 -# 2072| r2072_7(bool) = Constant[0] : -# 2072| v2072_8(void) = ConditionalBranch : r2072_7 +# 35| Block 684 +# 35| r35_9577(glval) = VariableAddress[x684] : +# 35| mu35_9578(String) = Uninitialized[x684] : &:r35_9577 +# 35| r35_9579(glval) = FunctionAddress[String] : +# 35| v35_9580(void) = Call[String] : func:r35_9579, this:r35_9577 +# 35| mu35_9581(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9577 +# 35| r35_9583(glval) = VariableAddress[x684] : +# 35| r35_9584(glval) = FunctionAddress[~String] : +# 35| v35_9585(void) = Call[~String] : func:r35_9584, this:r35_9583 +# 35| mu35_9586(unknown) = ^CallSideEffect : ~m? +# 35| v35_9587(void) = ^IndirectReadSideEffect[-1] : &:r35_9583, ~m? +# 35| mu35_9588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9583 +# 35| r35_9589(bool) = Constant[0] : +# 35| v35_9590(void) = ConditionalBranch : r35_9589 #-----| False -> Block 685 #-----| True -> Block 1026 -# 2074| Block 685 -# 2074| r2074_1(glval) = VariableAddress[x685] : -# 2074| mu2074_2(String) = Uninitialized[x685] : &:r2074_1 -# 2074| r2074_3(glval) = FunctionAddress[String] : -# 2074| v2074_4(void) = Call[String] : func:r2074_3, this:r2074_1 -# 2074| mu2074_5(unknown) = ^CallSideEffect : ~m? -# 2074| mu2074_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2074_1 -# 2075| r2075_1(glval) = VariableAddress[x685] : -# 2075| r2075_2(glval) = FunctionAddress[~String] : -# 2075| v2075_3(void) = Call[~String] : func:r2075_2, this:r2075_1 -# 2075| mu2075_4(unknown) = ^CallSideEffect : ~m? -# 2075| v2075_5(void) = ^IndirectReadSideEffect[-1] : &:r2075_1, ~m? -# 2075| mu2075_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2075_1 -# 2075| r2075_7(bool) = Constant[0] : -# 2075| v2075_8(void) = ConditionalBranch : r2075_7 +# 35| Block 685 +# 35| r35_9591(glval) = VariableAddress[x685] : +# 35| mu35_9592(String) = Uninitialized[x685] : &:r35_9591 +# 35| r35_9593(glval) = FunctionAddress[String] : +# 35| v35_9594(void) = Call[String] : func:r35_9593, this:r35_9591 +# 35| mu35_9595(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9591 +# 35| r35_9597(glval) = VariableAddress[x685] : +# 35| r35_9598(glval) = FunctionAddress[~String] : +# 35| v35_9599(void) = Call[~String] : func:r35_9598, this:r35_9597 +# 35| mu35_9600(unknown) = ^CallSideEffect : ~m? +# 35| v35_9601(void) = ^IndirectReadSideEffect[-1] : &:r35_9597, ~m? +# 35| mu35_9602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9597 +# 35| r35_9603(bool) = Constant[0] : +# 35| v35_9604(void) = ConditionalBranch : r35_9603 #-----| False -> Block 686 #-----| True -> Block 1026 -# 2077| Block 686 -# 2077| r2077_1(glval) = VariableAddress[x686] : -# 2077| mu2077_2(String) = Uninitialized[x686] : &:r2077_1 -# 2077| r2077_3(glval) = FunctionAddress[String] : -# 2077| v2077_4(void) = Call[String] : func:r2077_3, this:r2077_1 -# 2077| mu2077_5(unknown) = ^CallSideEffect : ~m? -# 2077| mu2077_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2077_1 -# 2078| r2078_1(glval) = VariableAddress[x686] : -# 2078| r2078_2(glval) = FunctionAddress[~String] : -# 2078| v2078_3(void) = Call[~String] : func:r2078_2, this:r2078_1 -# 2078| mu2078_4(unknown) = ^CallSideEffect : ~m? -# 2078| v2078_5(void) = ^IndirectReadSideEffect[-1] : &:r2078_1, ~m? -# 2078| mu2078_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2078_1 -# 2078| r2078_7(bool) = Constant[0] : -# 2078| v2078_8(void) = ConditionalBranch : r2078_7 +# 35| Block 686 +# 35| r35_9605(glval) = VariableAddress[x686] : +# 35| mu35_9606(String) = Uninitialized[x686] : &:r35_9605 +# 35| r35_9607(glval) = FunctionAddress[String] : +# 35| v35_9608(void) = Call[String] : func:r35_9607, this:r35_9605 +# 35| mu35_9609(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9605 +# 35| r35_9611(glval) = VariableAddress[x686] : +# 35| r35_9612(glval) = FunctionAddress[~String] : +# 35| v35_9613(void) = Call[~String] : func:r35_9612, this:r35_9611 +# 35| mu35_9614(unknown) = ^CallSideEffect : ~m? +# 35| v35_9615(void) = ^IndirectReadSideEffect[-1] : &:r35_9611, ~m? +# 35| mu35_9616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9611 +# 35| r35_9617(bool) = Constant[0] : +# 35| v35_9618(void) = ConditionalBranch : r35_9617 #-----| False -> Block 687 #-----| True -> Block 1026 -# 2080| Block 687 -# 2080| r2080_1(glval) = VariableAddress[x687] : -# 2080| mu2080_2(String) = Uninitialized[x687] : &:r2080_1 -# 2080| r2080_3(glval) = FunctionAddress[String] : -# 2080| v2080_4(void) = Call[String] : func:r2080_3, this:r2080_1 -# 2080| mu2080_5(unknown) = ^CallSideEffect : ~m? -# 2080| mu2080_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2080_1 -# 2081| r2081_1(glval) = VariableAddress[x687] : -# 2081| r2081_2(glval) = FunctionAddress[~String] : -# 2081| v2081_3(void) = Call[~String] : func:r2081_2, this:r2081_1 -# 2081| mu2081_4(unknown) = ^CallSideEffect : ~m? -# 2081| v2081_5(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, ~m? -# 2081| mu2081_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 -# 2081| r2081_7(bool) = Constant[0] : -# 2081| v2081_8(void) = ConditionalBranch : r2081_7 +# 35| Block 687 +# 35| r35_9619(glval) = VariableAddress[x687] : +# 35| mu35_9620(String) = Uninitialized[x687] : &:r35_9619 +# 35| r35_9621(glval) = FunctionAddress[String] : +# 35| v35_9622(void) = Call[String] : func:r35_9621, this:r35_9619 +# 35| mu35_9623(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9619 +# 35| r35_9625(glval) = VariableAddress[x687] : +# 35| r35_9626(glval) = FunctionAddress[~String] : +# 35| v35_9627(void) = Call[~String] : func:r35_9626, this:r35_9625 +# 35| mu35_9628(unknown) = ^CallSideEffect : ~m? +# 35| v35_9629(void) = ^IndirectReadSideEffect[-1] : &:r35_9625, ~m? +# 35| mu35_9630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9625 +# 35| r35_9631(bool) = Constant[0] : +# 35| v35_9632(void) = ConditionalBranch : r35_9631 #-----| False -> Block 688 #-----| True -> Block 1026 -# 2083| Block 688 -# 2083| r2083_1(glval) = VariableAddress[x688] : -# 2083| mu2083_2(String) = Uninitialized[x688] : &:r2083_1 -# 2083| r2083_3(glval) = FunctionAddress[String] : -# 2083| v2083_4(void) = Call[String] : func:r2083_3, this:r2083_1 -# 2083| mu2083_5(unknown) = ^CallSideEffect : ~m? -# 2083| mu2083_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 -# 2084| r2084_1(glval) = VariableAddress[x688] : -# 2084| r2084_2(glval) = FunctionAddress[~String] : -# 2084| v2084_3(void) = Call[~String] : func:r2084_2, this:r2084_1 -# 2084| mu2084_4(unknown) = ^CallSideEffect : ~m? -# 2084| v2084_5(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, ~m? -# 2084| mu2084_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 -# 2084| r2084_7(bool) = Constant[0] : -# 2084| v2084_8(void) = ConditionalBranch : r2084_7 +# 35| Block 688 +# 35| r35_9633(glval) = VariableAddress[x688] : +# 35| mu35_9634(String) = Uninitialized[x688] : &:r35_9633 +# 35| r35_9635(glval) = FunctionAddress[String] : +# 35| v35_9636(void) = Call[String] : func:r35_9635, this:r35_9633 +# 35| mu35_9637(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9633 +# 35| r35_9639(glval) = VariableAddress[x688] : +# 35| r35_9640(glval) = FunctionAddress[~String] : +# 35| v35_9641(void) = Call[~String] : func:r35_9640, this:r35_9639 +# 35| mu35_9642(unknown) = ^CallSideEffect : ~m? +# 35| v35_9643(void) = ^IndirectReadSideEffect[-1] : &:r35_9639, ~m? +# 35| mu35_9644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9639 +# 35| r35_9645(bool) = Constant[0] : +# 35| v35_9646(void) = ConditionalBranch : r35_9645 #-----| False -> Block 689 #-----| True -> Block 1026 -# 2086| Block 689 -# 2086| r2086_1(glval) = VariableAddress[x689] : -# 2086| mu2086_2(String) = Uninitialized[x689] : &:r2086_1 -# 2086| r2086_3(glval) = FunctionAddress[String] : -# 2086| v2086_4(void) = Call[String] : func:r2086_3, this:r2086_1 -# 2086| mu2086_5(unknown) = ^CallSideEffect : ~m? -# 2086| mu2086_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2086_1 -# 2087| r2087_1(glval) = VariableAddress[x689] : -# 2087| r2087_2(glval) = FunctionAddress[~String] : -# 2087| v2087_3(void) = Call[~String] : func:r2087_2, this:r2087_1 -# 2087| mu2087_4(unknown) = ^CallSideEffect : ~m? -# 2087| v2087_5(void) = ^IndirectReadSideEffect[-1] : &:r2087_1, ~m? -# 2087| mu2087_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2087_1 -# 2087| r2087_7(bool) = Constant[0] : -# 2087| v2087_8(void) = ConditionalBranch : r2087_7 +# 35| Block 689 +# 35| r35_9647(glval) = VariableAddress[x689] : +# 35| mu35_9648(String) = Uninitialized[x689] : &:r35_9647 +# 35| r35_9649(glval) = FunctionAddress[String] : +# 35| v35_9650(void) = Call[String] : func:r35_9649, this:r35_9647 +# 35| mu35_9651(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9647 +# 35| r35_9653(glval) = VariableAddress[x689] : +# 35| r35_9654(glval) = FunctionAddress[~String] : +# 35| v35_9655(void) = Call[~String] : func:r35_9654, this:r35_9653 +# 35| mu35_9656(unknown) = ^CallSideEffect : ~m? +# 35| v35_9657(void) = ^IndirectReadSideEffect[-1] : &:r35_9653, ~m? +# 35| mu35_9658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9653 +# 35| r35_9659(bool) = Constant[0] : +# 35| v35_9660(void) = ConditionalBranch : r35_9659 #-----| False -> Block 690 #-----| True -> Block 1026 -# 2089| Block 690 -# 2089| r2089_1(glval) = VariableAddress[x690] : -# 2089| mu2089_2(String) = Uninitialized[x690] : &:r2089_1 -# 2089| r2089_3(glval) = FunctionAddress[String] : -# 2089| v2089_4(void) = Call[String] : func:r2089_3, this:r2089_1 -# 2089| mu2089_5(unknown) = ^CallSideEffect : ~m? -# 2089| mu2089_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2089_1 -# 2090| r2090_1(glval) = VariableAddress[x690] : -# 2090| r2090_2(glval) = FunctionAddress[~String] : -# 2090| v2090_3(void) = Call[~String] : func:r2090_2, this:r2090_1 -# 2090| mu2090_4(unknown) = ^CallSideEffect : ~m? -# 2090| v2090_5(void) = ^IndirectReadSideEffect[-1] : &:r2090_1, ~m? -# 2090| mu2090_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2090_1 -# 2090| r2090_7(bool) = Constant[0] : -# 2090| v2090_8(void) = ConditionalBranch : r2090_7 +# 35| Block 690 +# 35| r35_9661(glval) = VariableAddress[x690] : +# 35| mu35_9662(String) = Uninitialized[x690] : &:r35_9661 +# 35| r35_9663(glval) = FunctionAddress[String] : +# 35| v35_9664(void) = Call[String] : func:r35_9663, this:r35_9661 +# 35| mu35_9665(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9661 +# 35| r35_9667(glval) = VariableAddress[x690] : +# 35| r35_9668(glval) = FunctionAddress[~String] : +# 35| v35_9669(void) = Call[~String] : func:r35_9668, this:r35_9667 +# 35| mu35_9670(unknown) = ^CallSideEffect : ~m? +# 35| v35_9671(void) = ^IndirectReadSideEffect[-1] : &:r35_9667, ~m? +# 35| mu35_9672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9667 +# 35| r35_9673(bool) = Constant[0] : +# 35| v35_9674(void) = ConditionalBranch : r35_9673 #-----| False -> Block 691 #-----| True -> Block 1026 -# 2092| Block 691 -# 2092| r2092_1(glval) = VariableAddress[x691] : -# 2092| mu2092_2(String) = Uninitialized[x691] : &:r2092_1 -# 2092| r2092_3(glval) = FunctionAddress[String] : -# 2092| v2092_4(void) = Call[String] : func:r2092_3, this:r2092_1 -# 2092| mu2092_5(unknown) = ^CallSideEffect : ~m? -# 2092| mu2092_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2092_1 -# 2093| r2093_1(glval) = VariableAddress[x691] : -# 2093| r2093_2(glval) = FunctionAddress[~String] : -# 2093| v2093_3(void) = Call[~String] : func:r2093_2, this:r2093_1 -# 2093| mu2093_4(unknown) = ^CallSideEffect : ~m? -# 2093| v2093_5(void) = ^IndirectReadSideEffect[-1] : &:r2093_1, ~m? -# 2093| mu2093_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2093_1 -# 2093| r2093_7(bool) = Constant[0] : -# 2093| v2093_8(void) = ConditionalBranch : r2093_7 +# 35| Block 691 +# 35| r35_9675(glval) = VariableAddress[x691] : +# 35| mu35_9676(String) = Uninitialized[x691] : &:r35_9675 +# 35| r35_9677(glval) = FunctionAddress[String] : +# 35| v35_9678(void) = Call[String] : func:r35_9677, this:r35_9675 +# 35| mu35_9679(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9675 +# 35| r35_9681(glval) = VariableAddress[x691] : +# 35| r35_9682(glval) = FunctionAddress[~String] : +# 35| v35_9683(void) = Call[~String] : func:r35_9682, this:r35_9681 +# 35| mu35_9684(unknown) = ^CallSideEffect : ~m? +# 35| v35_9685(void) = ^IndirectReadSideEffect[-1] : &:r35_9681, ~m? +# 35| mu35_9686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9681 +# 35| r35_9687(bool) = Constant[0] : +# 35| v35_9688(void) = ConditionalBranch : r35_9687 #-----| False -> Block 692 #-----| True -> Block 1026 -# 2095| Block 692 -# 2095| r2095_1(glval) = VariableAddress[x692] : -# 2095| mu2095_2(String) = Uninitialized[x692] : &:r2095_1 -# 2095| r2095_3(glval) = FunctionAddress[String] : -# 2095| v2095_4(void) = Call[String] : func:r2095_3, this:r2095_1 -# 2095| mu2095_5(unknown) = ^CallSideEffect : ~m? -# 2095| mu2095_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2095_1 -# 2096| r2096_1(glval) = VariableAddress[x692] : -# 2096| r2096_2(glval) = FunctionAddress[~String] : -# 2096| v2096_3(void) = Call[~String] : func:r2096_2, this:r2096_1 -# 2096| mu2096_4(unknown) = ^CallSideEffect : ~m? -# 2096| v2096_5(void) = ^IndirectReadSideEffect[-1] : &:r2096_1, ~m? -# 2096| mu2096_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2096_1 -# 2096| r2096_7(bool) = Constant[0] : -# 2096| v2096_8(void) = ConditionalBranch : r2096_7 +# 35| Block 692 +# 35| r35_9689(glval) = VariableAddress[x692] : +# 35| mu35_9690(String) = Uninitialized[x692] : &:r35_9689 +# 35| r35_9691(glval) = FunctionAddress[String] : +# 35| v35_9692(void) = Call[String] : func:r35_9691, this:r35_9689 +# 35| mu35_9693(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9689 +# 35| r35_9695(glval) = VariableAddress[x692] : +# 35| r35_9696(glval) = FunctionAddress[~String] : +# 35| v35_9697(void) = Call[~String] : func:r35_9696, this:r35_9695 +# 35| mu35_9698(unknown) = ^CallSideEffect : ~m? +# 35| v35_9699(void) = ^IndirectReadSideEffect[-1] : &:r35_9695, ~m? +# 35| mu35_9700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9695 +# 35| r35_9701(bool) = Constant[0] : +# 35| v35_9702(void) = ConditionalBranch : r35_9701 #-----| False -> Block 693 #-----| True -> Block 1026 -# 2098| Block 693 -# 2098| r2098_1(glval) = VariableAddress[x693] : -# 2098| mu2098_2(String) = Uninitialized[x693] : &:r2098_1 -# 2098| r2098_3(glval) = FunctionAddress[String] : -# 2098| v2098_4(void) = Call[String] : func:r2098_3, this:r2098_1 -# 2098| mu2098_5(unknown) = ^CallSideEffect : ~m? -# 2098| mu2098_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2098_1 -# 2099| r2099_1(glval) = VariableAddress[x693] : -# 2099| r2099_2(glval) = FunctionAddress[~String] : -# 2099| v2099_3(void) = Call[~String] : func:r2099_2, this:r2099_1 -# 2099| mu2099_4(unknown) = ^CallSideEffect : ~m? -# 2099| v2099_5(void) = ^IndirectReadSideEffect[-1] : &:r2099_1, ~m? -# 2099| mu2099_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2099_1 -# 2099| r2099_7(bool) = Constant[0] : -# 2099| v2099_8(void) = ConditionalBranch : r2099_7 +# 35| Block 693 +# 35| r35_9703(glval) = VariableAddress[x693] : +# 35| mu35_9704(String) = Uninitialized[x693] : &:r35_9703 +# 35| r35_9705(glval) = FunctionAddress[String] : +# 35| v35_9706(void) = Call[String] : func:r35_9705, this:r35_9703 +# 35| mu35_9707(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9703 +# 35| r35_9709(glval) = VariableAddress[x693] : +# 35| r35_9710(glval) = FunctionAddress[~String] : +# 35| v35_9711(void) = Call[~String] : func:r35_9710, this:r35_9709 +# 35| mu35_9712(unknown) = ^CallSideEffect : ~m? +# 35| v35_9713(void) = ^IndirectReadSideEffect[-1] : &:r35_9709, ~m? +# 35| mu35_9714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9709 +# 35| r35_9715(bool) = Constant[0] : +# 35| v35_9716(void) = ConditionalBranch : r35_9715 #-----| False -> Block 694 #-----| True -> Block 1026 -# 2101| Block 694 -# 2101| r2101_1(glval) = VariableAddress[x694] : -# 2101| mu2101_2(String) = Uninitialized[x694] : &:r2101_1 -# 2101| r2101_3(glval) = FunctionAddress[String] : -# 2101| v2101_4(void) = Call[String] : func:r2101_3, this:r2101_1 -# 2101| mu2101_5(unknown) = ^CallSideEffect : ~m? -# 2101| mu2101_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2101_1 -# 2102| r2102_1(glval) = VariableAddress[x694] : -# 2102| r2102_2(glval) = FunctionAddress[~String] : -# 2102| v2102_3(void) = Call[~String] : func:r2102_2, this:r2102_1 -# 2102| mu2102_4(unknown) = ^CallSideEffect : ~m? -# 2102| v2102_5(void) = ^IndirectReadSideEffect[-1] : &:r2102_1, ~m? -# 2102| mu2102_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2102_1 -# 2102| r2102_7(bool) = Constant[0] : -# 2102| v2102_8(void) = ConditionalBranch : r2102_7 +# 35| Block 694 +# 35| r35_9717(glval) = VariableAddress[x694] : +# 35| mu35_9718(String) = Uninitialized[x694] : &:r35_9717 +# 35| r35_9719(glval) = FunctionAddress[String] : +# 35| v35_9720(void) = Call[String] : func:r35_9719, this:r35_9717 +# 35| mu35_9721(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9717 +# 35| r35_9723(glval) = VariableAddress[x694] : +# 35| r35_9724(glval) = FunctionAddress[~String] : +# 35| v35_9725(void) = Call[~String] : func:r35_9724, this:r35_9723 +# 35| mu35_9726(unknown) = ^CallSideEffect : ~m? +# 35| v35_9727(void) = ^IndirectReadSideEffect[-1] : &:r35_9723, ~m? +# 35| mu35_9728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9723 +# 35| r35_9729(bool) = Constant[0] : +# 35| v35_9730(void) = ConditionalBranch : r35_9729 #-----| False -> Block 695 #-----| True -> Block 1026 -# 2104| Block 695 -# 2104| r2104_1(glval) = VariableAddress[x695] : -# 2104| mu2104_2(String) = Uninitialized[x695] : &:r2104_1 -# 2104| r2104_3(glval) = FunctionAddress[String] : -# 2104| v2104_4(void) = Call[String] : func:r2104_3, this:r2104_1 -# 2104| mu2104_5(unknown) = ^CallSideEffect : ~m? -# 2104| mu2104_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2104_1 -# 2105| r2105_1(glval) = VariableAddress[x695] : -# 2105| r2105_2(glval) = FunctionAddress[~String] : -# 2105| v2105_3(void) = Call[~String] : func:r2105_2, this:r2105_1 -# 2105| mu2105_4(unknown) = ^CallSideEffect : ~m? -# 2105| v2105_5(void) = ^IndirectReadSideEffect[-1] : &:r2105_1, ~m? -# 2105| mu2105_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2105_1 -# 2105| r2105_7(bool) = Constant[0] : -# 2105| v2105_8(void) = ConditionalBranch : r2105_7 +# 35| Block 695 +# 35| r35_9731(glval) = VariableAddress[x695] : +# 35| mu35_9732(String) = Uninitialized[x695] : &:r35_9731 +# 35| r35_9733(glval) = FunctionAddress[String] : +# 35| v35_9734(void) = Call[String] : func:r35_9733, this:r35_9731 +# 35| mu35_9735(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9731 +# 35| r35_9737(glval) = VariableAddress[x695] : +# 35| r35_9738(glval) = FunctionAddress[~String] : +# 35| v35_9739(void) = Call[~String] : func:r35_9738, this:r35_9737 +# 35| mu35_9740(unknown) = ^CallSideEffect : ~m? +# 35| v35_9741(void) = ^IndirectReadSideEffect[-1] : &:r35_9737, ~m? +# 35| mu35_9742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9737 +# 35| r35_9743(bool) = Constant[0] : +# 35| v35_9744(void) = ConditionalBranch : r35_9743 #-----| False -> Block 696 #-----| True -> Block 1026 -# 2107| Block 696 -# 2107| r2107_1(glval) = VariableAddress[x696] : -# 2107| mu2107_2(String) = Uninitialized[x696] : &:r2107_1 -# 2107| r2107_3(glval) = FunctionAddress[String] : -# 2107| v2107_4(void) = Call[String] : func:r2107_3, this:r2107_1 -# 2107| mu2107_5(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2107_1 -# 2108| r2108_1(glval) = VariableAddress[x696] : -# 2108| r2108_2(glval) = FunctionAddress[~String] : -# 2108| v2108_3(void) = Call[~String] : func:r2108_2, this:r2108_1 -# 2108| mu2108_4(unknown) = ^CallSideEffect : ~m? -# 2108| v2108_5(void) = ^IndirectReadSideEffect[-1] : &:r2108_1, ~m? -# 2108| mu2108_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2108_1 -# 2108| r2108_7(bool) = Constant[0] : -# 2108| v2108_8(void) = ConditionalBranch : r2108_7 +# 35| Block 696 +# 35| r35_9745(glval) = VariableAddress[x696] : +# 35| mu35_9746(String) = Uninitialized[x696] : &:r35_9745 +# 35| r35_9747(glval) = FunctionAddress[String] : +# 35| v35_9748(void) = Call[String] : func:r35_9747, this:r35_9745 +# 35| mu35_9749(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9745 +# 35| r35_9751(glval) = VariableAddress[x696] : +# 35| r35_9752(glval) = FunctionAddress[~String] : +# 35| v35_9753(void) = Call[~String] : func:r35_9752, this:r35_9751 +# 35| mu35_9754(unknown) = ^CallSideEffect : ~m? +# 35| v35_9755(void) = ^IndirectReadSideEffect[-1] : &:r35_9751, ~m? +# 35| mu35_9756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9751 +# 35| r35_9757(bool) = Constant[0] : +# 35| v35_9758(void) = ConditionalBranch : r35_9757 #-----| False -> Block 697 #-----| True -> Block 1026 -# 2110| Block 697 -# 2110| r2110_1(glval) = VariableAddress[x697] : -# 2110| mu2110_2(String) = Uninitialized[x697] : &:r2110_1 -# 2110| r2110_3(glval) = FunctionAddress[String] : -# 2110| v2110_4(void) = Call[String] : func:r2110_3, this:r2110_1 -# 2110| mu2110_5(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[x697] : -# 2111| r2111_2(glval) = FunctionAddress[~String] : -# 2111| v2111_3(void) = Call[~String] : func:r2111_2, this:r2111_1 -# 2111| mu2111_4(unknown) = ^CallSideEffect : ~m? -# 2111| v2111_5(void) = ^IndirectReadSideEffect[-1] : &:r2111_1, ~m? -# 2111| mu2111_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2111_1 -# 2111| r2111_7(bool) = Constant[0] : -# 2111| v2111_8(void) = ConditionalBranch : r2111_7 +# 35| Block 697 +# 35| r35_9759(glval) = VariableAddress[x697] : +# 35| mu35_9760(String) = Uninitialized[x697] : &:r35_9759 +# 35| r35_9761(glval) = FunctionAddress[String] : +# 35| v35_9762(void) = Call[String] : func:r35_9761, this:r35_9759 +# 35| mu35_9763(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9759 +# 35| r35_9765(glval) = VariableAddress[x697] : +# 35| r35_9766(glval) = FunctionAddress[~String] : +# 35| v35_9767(void) = Call[~String] : func:r35_9766, this:r35_9765 +# 35| mu35_9768(unknown) = ^CallSideEffect : ~m? +# 35| v35_9769(void) = ^IndirectReadSideEffect[-1] : &:r35_9765, ~m? +# 35| mu35_9770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9765 +# 35| r35_9771(bool) = Constant[0] : +# 35| v35_9772(void) = ConditionalBranch : r35_9771 #-----| False -> Block 698 #-----| True -> Block 1026 -# 2113| Block 698 -# 2113| r2113_1(glval) = VariableAddress[x698] : -# 2113| mu2113_2(String) = Uninitialized[x698] : &:r2113_1 -# 2113| r2113_3(glval) = FunctionAddress[String] : -# 2113| v2113_4(void) = Call[String] : func:r2113_3, this:r2113_1 -# 2113| mu2113_5(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2113_1 -# 2114| r2114_1(glval) = VariableAddress[x698] : -# 2114| r2114_2(glval) = FunctionAddress[~String] : -# 2114| v2114_3(void) = Call[~String] : func:r2114_2, this:r2114_1 -# 2114| mu2114_4(unknown) = ^CallSideEffect : ~m? -# 2114| v2114_5(void) = ^IndirectReadSideEffect[-1] : &:r2114_1, ~m? -# 2114| mu2114_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2114_1 -# 2114| r2114_7(bool) = Constant[0] : -# 2114| v2114_8(void) = ConditionalBranch : r2114_7 +# 35| Block 698 +# 35| r35_9773(glval) = VariableAddress[x698] : +# 35| mu35_9774(String) = Uninitialized[x698] : &:r35_9773 +# 35| r35_9775(glval) = FunctionAddress[String] : +# 35| v35_9776(void) = Call[String] : func:r35_9775, this:r35_9773 +# 35| mu35_9777(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9773 +# 35| r35_9779(glval) = VariableAddress[x698] : +# 35| r35_9780(glval) = FunctionAddress[~String] : +# 35| v35_9781(void) = Call[~String] : func:r35_9780, this:r35_9779 +# 35| mu35_9782(unknown) = ^CallSideEffect : ~m? +# 35| v35_9783(void) = ^IndirectReadSideEffect[-1] : &:r35_9779, ~m? +# 35| mu35_9784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9779 +# 35| r35_9785(bool) = Constant[0] : +# 35| v35_9786(void) = ConditionalBranch : r35_9785 #-----| False -> Block 699 #-----| True -> Block 1026 -# 2116| Block 699 -# 2116| r2116_1(glval) = VariableAddress[x699] : -# 2116| mu2116_2(String) = Uninitialized[x699] : &:r2116_1 -# 2116| r2116_3(glval) = FunctionAddress[String] : -# 2116| v2116_4(void) = Call[String] : func:r2116_3, this:r2116_1 -# 2116| mu2116_5(unknown) = ^CallSideEffect : ~m? -# 2116| mu2116_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2116_1 -# 2117| r2117_1(glval) = VariableAddress[x699] : -# 2117| r2117_2(glval) = FunctionAddress[~String] : -# 2117| v2117_3(void) = Call[~String] : func:r2117_2, this:r2117_1 -# 2117| mu2117_4(unknown) = ^CallSideEffect : ~m? -# 2117| v2117_5(void) = ^IndirectReadSideEffect[-1] : &:r2117_1, ~m? -# 2117| mu2117_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2117_1 -# 2117| r2117_7(bool) = Constant[0] : -# 2117| v2117_8(void) = ConditionalBranch : r2117_7 +# 35| Block 699 +# 35| r35_9787(glval) = VariableAddress[x699] : +# 35| mu35_9788(String) = Uninitialized[x699] : &:r35_9787 +# 35| r35_9789(glval) = FunctionAddress[String] : +# 35| v35_9790(void) = Call[String] : func:r35_9789, this:r35_9787 +# 35| mu35_9791(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9787 +# 35| r35_9793(glval) = VariableAddress[x699] : +# 35| r35_9794(glval) = FunctionAddress[~String] : +# 35| v35_9795(void) = Call[~String] : func:r35_9794, this:r35_9793 +# 35| mu35_9796(unknown) = ^CallSideEffect : ~m? +# 35| v35_9797(void) = ^IndirectReadSideEffect[-1] : &:r35_9793, ~m? +# 35| mu35_9798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9793 +# 35| r35_9799(bool) = Constant[0] : +# 35| v35_9800(void) = ConditionalBranch : r35_9799 #-----| False -> Block 700 #-----| True -> Block 1026 -# 2119| Block 700 -# 2119| r2119_1(glval) = VariableAddress[x700] : -# 2119| mu2119_2(String) = Uninitialized[x700] : &:r2119_1 -# 2119| r2119_3(glval) = FunctionAddress[String] : -# 2119| v2119_4(void) = Call[String] : func:r2119_3, this:r2119_1 -# 2119| mu2119_5(unknown) = ^CallSideEffect : ~m? -# 2119| mu2119_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2119_1 -# 2120| r2120_1(glval) = VariableAddress[x700] : -# 2120| r2120_2(glval) = FunctionAddress[~String] : -# 2120| v2120_3(void) = Call[~String] : func:r2120_2, this:r2120_1 -# 2120| mu2120_4(unknown) = ^CallSideEffect : ~m? -# 2120| v2120_5(void) = ^IndirectReadSideEffect[-1] : &:r2120_1, ~m? -# 2120| mu2120_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2120_1 -# 2120| r2120_7(bool) = Constant[0] : -# 2120| v2120_8(void) = ConditionalBranch : r2120_7 +# 35| Block 700 +# 35| r35_9801(glval) = VariableAddress[x700] : +# 35| mu35_9802(String) = Uninitialized[x700] : &:r35_9801 +# 35| r35_9803(glval) = FunctionAddress[String] : +# 35| v35_9804(void) = Call[String] : func:r35_9803, this:r35_9801 +# 35| mu35_9805(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9801 +# 35| r35_9807(glval) = VariableAddress[x700] : +# 35| r35_9808(glval) = FunctionAddress[~String] : +# 35| v35_9809(void) = Call[~String] : func:r35_9808, this:r35_9807 +# 35| mu35_9810(unknown) = ^CallSideEffect : ~m? +# 35| v35_9811(void) = ^IndirectReadSideEffect[-1] : &:r35_9807, ~m? +# 35| mu35_9812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9807 +# 35| r35_9813(bool) = Constant[0] : +# 35| v35_9814(void) = ConditionalBranch : r35_9813 #-----| False -> Block 701 #-----| True -> Block 1026 -# 2122| Block 701 -# 2122| r2122_1(glval) = VariableAddress[x701] : -# 2122| mu2122_2(String) = Uninitialized[x701] : &:r2122_1 -# 2122| r2122_3(glval) = FunctionAddress[String] : -# 2122| v2122_4(void) = Call[String] : func:r2122_3, this:r2122_1 -# 2122| mu2122_5(unknown) = ^CallSideEffect : ~m? -# 2122| mu2122_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2122_1 -# 2123| r2123_1(glval) = VariableAddress[x701] : -# 2123| r2123_2(glval) = FunctionAddress[~String] : -# 2123| v2123_3(void) = Call[~String] : func:r2123_2, this:r2123_1 -# 2123| mu2123_4(unknown) = ^CallSideEffect : ~m? -# 2123| v2123_5(void) = ^IndirectReadSideEffect[-1] : &:r2123_1, ~m? -# 2123| mu2123_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2123_1 -# 2123| r2123_7(bool) = Constant[0] : -# 2123| v2123_8(void) = ConditionalBranch : r2123_7 +# 35| Block 701 +# 35| r35_9815(glval) = VariableAddress[x701] : +# 35| mu35_9816(String) = Uninitialized[x701] : &:r35_9815 +# 35| r35_9817(glval) = FunctionAddress[String] : +# 35| v35_9818(void) = Call[String] : func:r35_9817, this:r35_9815 +# 35| mu35_9819(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9815 +# 35| r35_9821(glval) = VariableAddress[x701] : +# 35| r35_9822(glval) = FunctionAddress[~String] : +# 35| v35_9823(void) = Call[~String] : func:r35_9822, this:r35_9821 +# 35| mu35_9824(unknown) = ^CallSideEffect : ~m? +# 35| v35_9825(void) = ^IndirectReadSideEffect[-1] : &:r35_9821, ~m? +# 35| mu35_9826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9821 +# 35| r35_9827(bool) = Constant[0] : +# 35| v35_9828(void) = ConditionalBranch : r35_9827 #-----| False -> Block 702 #-----| True -> Block 1026 -# 2125| Block 702 -# 2125| r2125_1(glval) = VariableAddress[x702] : -# 2125| mu2125_2(String) = Uninitialized[x702] : &:r2125_1 -# 2125| r2125_3(glval) = FunctionAddress[String] : -# 2125| v2125_4(void) = Call[String] : func:r2125_3, this:r2125_1 -# 2125| mu2125_5(unknown) = ^CallSideEffect : ~m? -# 2125| mu2125_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2125_1 -# 2126| r2126_1(glval) = VariableAddress[x702] : -# 2126| r2126_2(glval) = FunctionAddress[~String] : -# 2126| v2126_3(void) = Call[~String] : func:r2126_2, this:r2126_1 -# 2126| mu2126_4(unknown) = ^CallSideEffect : ~m? -# 2126| v2126_5(void) = ^IndirectReadSideEffect[-1] : &:r2126_1, ~m? -# 2126| mu2126_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2126_1 -# 2126| r2126_7(bool) = Constant[0] : -# 2126| v2126_8(void) = ConditionalBranch : r2126_7 +# 35| Block 702 +# 35| r35_9829(glval) = VariableAddress[x702] : +# 35| mu35_9830(String) = Uninitialized[x702] : &:r35_9829 +# 35| r35_9831(glval) = FunctionAddress[String] : +# 35| v35_9832(void) = Call[String] : func:r35_9831, this:r35_9829 +# 35| mu35_9833(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9829 +# 35| r35_9835(glval) = VariableAddress[x702] : +# 35| r35_9836(glval) = FunctionAddress[~String] : +# 35| v35_9837(void) = Call[~String] : func:r35_9836, this:r35_9835 +# 35| mu35_9838(unknown) = ^CallSideEffect : ~m? +# 35| v35_9839(void) = ^IndirectReadSideEffect[-1] : &:r35_9835, ~m? +# 35| mu35_9840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9835 +# 35| r35_9841(bool) = Constant[0] : +# 35| v35_9842(void) = ConditionalBranch : r35_9841 #-----| False -> Block 703 #-----| True -> Block 1026 -# 2128| Block 703 -# 2128| r2128_1(glval) = VariableAddress[x703] : -# 2128| mu2128_2(String) = Uninitialized[x703] : &:r2128_1 -# 2128| r2128_3(glval) = FunctionAddress[String] : -# 2128| v2128_4(void) = Call[String] : func:r2128_3, this:r2128_1 -# 2128| mu2128_5(unknown) = ^CallSideEffect : ~m? -# 2128| mu2128_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2128_1 -# 2129| r2129_1(glval) = VariableAddress[x703] : -# 2129| r2129_2(glval) = FunctionAddress[~String] : -# 2129| v2129_3(void) = Call[~String] : func:r2129_2, this:r2129_1 -# 2129| mu2129_4(unknown) = ^CallSideEffect : ~m? -# 2129| v2129_5(void) = ^IndirectReadSideEffect[-1] : &:r2129_1, ~m? -# 2129| mu2129_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2129_1 -# 2129| r2129_7(bool) = Constant[0] : -# 2129| v2129_8(void) = ConditionalBranch : r2129_7 +# 35| Block 703 +# 35| r35_9843(glval) = VariableAddress[x703] : +# 35| mu35_9844(String) = Uninitialized[x703] : &:r35_9843 +# 35| r35_9845(glval) = FunctionAddress[String] : +# 35| v35_9846(void) = Call[String] : func:r35_9845, this:r35_9843 +# 35| mu35_9847(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9843 +# 35| r35_9849(glval) = VariableAddress[x703] : +# 35| r35_9850(glval) = FunctionAddress[~String] : +# 35| v35_9851(void) = Call[~String] : func:r35_9850, this:r35_9849 +# 35| mu35_9852(unknown) = ^CallSideEffect : ~m? +# 35| v35_9853(void) = ^IndirectReadSideEffect[-1] : &:r35_9849, ~m? +# 35| mu35_9854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9849 +# 35| r35_9855(bool) = Constant[0] : +# 35| v35_9856(void) = ConditionalBranch : r35_9855 #-----| False -> Block 704 #-----| True -> Block 1026 -# 2131| Block 704 -# 2131| r2131_1(glval) = VariableAddress[x704] : -# 2131| mu2131_2(String) = Uninitialized[x704] : &:r2131_1 -# 2131| r2131_3(glval) = FunctionAddress[String] : -# 2131| v2131_4(void) = Call[String] : func:r2131_3, this:r2131_1 -# 2131| mu2131_5(unknown) = ^CallSideEffect : ~m? -# 2131| mu2131_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2131_1 -# 2132| r2132_1(glval) = VariableAddress[x704] : -# 2132| r2132_2(glval) = FunctionAddress[~String] : -# 2132| v2132_3(void) = Call[~String] : func:r2132_2, this:r2132_1 -# 2132| mu2132_4(unknown) = ^CallSideEffect : ~m? -# 2132| v2132_5(void) = ^IndirectReadSideEffect[-1] : &:r2132_1, ~m? -# 2132| mu2132_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2132_1 -# 2132| r2132_7(bool) = Constant[0] : -# 2132| v2132_8(void) = ConditionalBranch : r2132_7 +# 35| Block 704 +# 35| r35_9857(glval) = VariableAddress[x704] : +# 35| mu35_9858(String) = Uninitialized[x704] : &:r35_9857 +# 35| r35_9859(glval) = FunctionAddress[String] : +# 35| v35_9860(void) = Call[String] : func:r35_9859, this:r35_9857 +# 35| mu35_9861(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9857 +# 35| r35_9863(glval) = VariableAddress[x704] : +# 35| r35_9864(glval) = FunctionAddress[~String] : +# 35| v35_9865(void) = Call[~String] : func:r35_9864, this:r35_9863 +# 35| mu35_9866(unknown) = ^CallSideEffect : ~m? +# 35| v35_9867(void) = ^IndirectReadSideEffect[-1] : &:r35_9863, ~m? +# 35| mu35_9868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9863 +# 35| r35_9869(bool) = Constant[0] : +# 35| v35_9870(void) = ConditionalBranch : r35_9869 #-----| False -> Block 705 #-----| True -> Block 1026 -# 2134| Block 705 -# 2134| r2134_1(glval) = VariableAddress[x705] : -# 2134| mu2134_2(String) = Uninitialized[x705] : &:r2134_1 -# 2134| r2134_3(glval) = FunctionAddress[String] : -# 2134| v2134_4(void) = Call[String] : func:r2134_3, this:r2134_1 -# 2134| mu2134_5(unknown) = ^CallSideEffect : ~m? -# 2134| mu2134_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2134_1 -# 2135| r2135_1(glval) = VariableAddress[x705] : -# 2135| r2135_2(glval) = FunctionAddress[~String] : -# 2135| v2135_3(void) = Call[~String] : func:r2135_2, this:r2135_1 -# 2135| mu2135_4(unknown) = ^CallSideEffect : ~m? -# 2135| v2135_5(void) = ^IndirectReadSideEffect[-1] : &:r2135_1, ~m? -# 2135| mu2135_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2135_1 -# 2135| r2135_7(bool) = Constant[0] : -# 2135| v2135_8(void) = ConditionalBranch : r2135_7 +# 35| Block 705 +# 35| r35_9871(glval) = VariableAddress[x705] : +# 35| mu35_9872(String) = Uninitialized[x705] : &:r35_9871 +# 35| r35_9873(glval) = FunctionAddress[String] : +# 35| v35_9874(void) = Call[String] : func:r35_9873, this:r35_9871 +# 35| mu35_9875(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9871 +# 35| r35_9877(glval) = VariableAddress[x705] : +# 35| r35_9878(glval) = FunctionAddress[~String] : +# 35| v35_9879(void) = Call[~String] : func:r35_9878, this:r35_9877 +# 35| mu35_9880(unknown) = ^CallSideEffect : ~m? +# 35| v35_9881(void) = ^IndirectReadSideEffect[-1] : &:r35_9877, ~m? +# 35| mu35_9882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9877 +# 35| r35_9883(bool) = Constant[0] : +# 35| v35_9884(void) = ConditionalBranch : r35_9883 #-----| False -> Block 706 #-----| True -> Block 1026 -# 2137| Block 706 -# 2137| r2137_1(glval) = VariableAddress[x706] : -# 2137| mu2137_2(String) = Uninitialized[x706] : &:r2137_1 -# 2137| r2137_3(glval) = FunctionAddress[String] : -# 2137| v2137_4(void) = Call[String] : func:r2137_3, this:r2137_1 -# 2137| mu2137_5(unknown) = ^CallSideEffect : ~m? -# 2137| mu2137_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 -# 2138| r2138_1(glval) = VariableAddress[x706] : -# 2138| r2138_2(glval) = FunctionAddress[~String] : -# 2138| v2138_3(void) = Call[~String] : func:r2138_2, this:r2138_1 -# 2138| mu2138_4(unknown) = ^CallSideEffect : ~m? -# 2138| v2138_5(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? -# 2138| mu2138_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -# 2138| r2138_7(bool) = Constant[0] : -# 2138| v2138_8(void) = ConditionalBranch : r2138_7 +# 35| Block 706 +# 35| r35_9885(glval) = VariableAddress[x706] : +# 35| mu35_9886(String) = Uninitialized[x706] : &:r35_9885 +# 35| r35_9887(glval) = FunctionAddress[String] : +# 35| v35_9888(void) = Call[String] : func:r35_9887, this:r35_9885 +# 35| mu35_9889(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9885 +# 35| r35_9891(glval) = VariableAddress[x706] : +# 35| r35_9892(glval) = FunctionAddress[~String] : +# 35| v35_9893(void) = Call[~String] : func:r35_9892, this:r35_9891 +# 35| mu35_9894(unknown) = ^CallSideEffect : ~m? +# 35| v35_9895(void) = ^IndirectReadSideEffect[-1] : &:r35_9891, ~m? +# 35| mu35_9896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9891 +# 35| r35_9897(bool) = Constant[0] : +# 35| v35_9898(void) = ConditionalBranch : r35_9897 #-----| False -> Block 707 #-----| True -> Block 1026 -# 2140| Block 707 -# 2140| r2140_1(glval) = VariableAddress[x707] : -# 2140| mu2140_2(String) = Uninitialized[x707] : &:r2140_1 -# 2140| r2140_3(glval) = FunctionAddress[String] : -# 2140| v2140_4(void) = Call[String] : func:r2140_3, this:r2140_1 -# 2140| mu2140_5(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2140_1 -# 2141| r2141_1(glval) = VariableAddress[x707] : -# 2141| r2141_2(glval) = FunctionAddress[~String] : -# 2141| v2141_3(void) = Call[~String] : func:r2141_2, this:r2141_1 -# 2141| mu2141_4(unknown) = ^CallSideEffect : ~m? -# 2141| v2141_5(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, ~m? -# 2141| mu2141_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 -# 2141| r2141_7(bool) = Constant[0] : -# 2141| v2141_8(void) = ConditionalBranch : r2141_7 +# 35| Block 707 +# 35| r35_9899(glval) = VariableAddress[x707] : +# 35| mu35_9900(String) = Uninitialized[x707] : &:r35_9899 +# 35| r35_9901(glval) = FunctionAddress[String] : +# 35| v35_9902(void) = Call[String] : func:r35_9901, this:r35_9899 +# 35| mu35_9903(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9899 +# 35| r35_9905(glval) = VariableAddress[x707] : +# 35| r35_9906(glval) = FunctionAddress[~String] : +# 35| v35_9907(void) = Call[~String] : func:r35_9906, this:r35_9905 +# 35| mu35_9908(unknown) = ^CallSideEffect : ~m? +# 35| v35_9909(void) = ^IndirectReadSideEffect[-1] : &:r35_9905, ~m? +# 35| mu35_9910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9905 +# 35| r35_9911(bool) = Constant[0] : +# 35| v35_9912(void) = ConditionalBranch : r35_9911 #-----| False -> Block 708 #-----| True -> Block 1026 -# 2143| Block 708 -# 2143| r2143_1(glval) = VariableAddress[x708] : -# 2143| mu2143_2(String) = Uninitialized[x708] : &:r2143_1 -# 2143| r2143_3(glval) = FunctionAddress[String] : -# 2143| v2143_4(void) = Call[String] : func:r2143_3, this:r2143_1 -# 2143| mu2143_5(unknown) = ^CallSideEffect : ~m? -# 2143| mu2143_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 -# 2144| r2144_1(glval) = VariableAddress[x708] : -# 2144| r2144_2(glval) = FunctionAddress[~String] : -# 2144| v2144_3(void) = Call[~String] : func:r2144_2, this:r2144_1 -# 2144| mu2144_4(unknown) = ^CallSideEffect : ~m? -# 2144| v2144_5(void) = ^IndirectReadSideEffect[-1] : &:r2144_1, ~m? -# 2144| mu2144_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 -# 2144| r2144_7(bool) = Constant[0] : -# 2144| v2144_8(void) = ConditionalBranch : r2144_7 +# 35| Block 708 +# 35| r35_9913(glval) = VariableAddress[x708] : +# 35| mu35_9914(String) = Uninitialized[x708] : &:r35_9913 +# 35| r35_9915(glval) = FunctionAddress[String] : +# 35| v35_9916(void) = Call[String] : func:r35_9915, this:r35_9913 +# 35| mu35_9917(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9913 +# 35| r35_9919(glval) = VariableAddress[x708] : +# 35| r35_9920(glval) = FunctionAddress[~String] : +# 35| v35_9921(void) = Call[~String] : func:r35_9920, this:r35_9919 +# 35| mu35_9922(unknown) = ^CallSideEffect : ~m? +# 35| v35_9923(void) = ^IndirectReadSideEffect[-1] : &:r35_9919, ~m? +# 35| mu35_9924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9919 +# 35| r35_9925(bool) = Constant[0] : +# 35| v35_9926(void) = ConditionalBranch : r35_9925 #-----| False -> Block 709 #-----| True -> Block 1026 -# 2146| Block 709 -# 2146| r2146_1(glval) = VariableAddress[x709] : -# 2146| mu2146_2(String) = Uninitialized[x709] : &:r2146_1 -# 2146| r2146_3(glval) = FunctionAddress[String] : -# 2146| v2146_4(void) = Call[String] : func:r2146_3, this:r2146_1 -# 2146| mu2146_5(unknown) = ^CallSideEffect : ~m? -# 2146| mu2146_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 -# 2147| r2147_1(glval) = VariableAddress[x709] : -# 2147| r2147_2(glval) = FunctionAddress[~String] : -# 2147| v2147_3(void) = Call[~String] : func:r2147_2, this:r2147_1 -# 2147| mu2147_4(unknown) = ^CallSideEffect : ~m? -# 2147| v2147_5(void) = ^IndirectReadSideEffect[-1] : &:r2147_1, ~m? -# 2147| mu2147_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2147_1 -# 2147| r2147_7(bool) = Constant[0] : -# 2147| v2147_8(void) = ConditionalBranch : r2147_7 +# 35| Block 709 +# 35| r35_9927(glval) = VariableAddress[x709] : +# 35| mu35_9928(String) = Uninitialized[x709] : &:r35_9927 +# 35| r35_9929(glval) = FunctionAddress[String] : +# 35| v35_9930(void) = Call[String] : func:r35_9929, this:r35_9927 +# 35| mu35_9931(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9927 +# 35| r35_9933(glval) = VariableAddress[x709] : +# 35| r35_9934(glval) = FunctionAddress[~String] : +# 35| v35_9935(void) = Call[~String] : func:r35_9934, this:r35_9933 +# 35| mu35_9936(unknown) = ^CallSideEffect : ~m? +# 35| v35_9937(void) = ^IndirectReadSideEffect[-1] : &:r35_9933, ~m? +# 35| mu35_9938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9933 +# 35| r35_9939(bool) = Constant[0] : +# 35| v35_9940(void) = ConditionalBranch : r35_9939 #-----| False -> Block 710 #-----| True -> Block 1026 -# 2149| Block 710 -# 2149| r2149_1(glval) = VariableAddress[x710] : -# 2149| mu2149_2(String) = Uninitialized[x710] : &:r2149_1 -# 2149| r2149_3(glval) = FunctionAddress[String] : -# 2149| v2149_4(void) = Call[String] : func:r2149_3, this:r2149_1 -# 2149| mu2149_5(unknown) = ^CallSideEffect : ~m? -# 2149| mu2149_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 -# 2150| r2150_1(glval) = VariableAddress[x710] : -# 2150| r2150_2(glval) = FunctionAddress[~String] : -# 2150| v2150_3(void) = Call[~String] : func:r2150_2, this:r2150_1 -# 2150| mu2150_4(unknown) = ^CallSideEffect : ~m? -# 2150| v2150_5(void) = ^IndirectReadSideEffect[-1] : &:r2150_1, ~m? -# 2150| mu2150_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2150_1 -# 2150| r2150_7(bool) = Constant[0] : -# 2150| v2150_8(void) = ConditionalBranch : r2150_7 +# 35| Block 710 +# 35| r35_9941(glval) = VariableAddress[x710] : +# 35| mu35_9942(String) = Uninitialized[x710] : &:r35_9941 +# 35| r35_9943(glval) = FunctionAddress[String] : +# 35| v35_9944(void) = Call[String] : func:r35_9943, this:r35_9941 +# 35| mu35_9945(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9941 +# 35| r35_9947(glval) = VariableAddress[x710] : +# 35| r35_9948(glval) = FunctionAddress[~String] : +# 35| v35_9949(void) = Call[~String] : func:r35_9948, this:r35_9947 +# 35| mu35_9950(unknown) = ^CallSideEffect : ~m? +# 35| v35_9951(void) = ^IndirectReadSideEffect[-1] : &:r35_9947, ~m? +# 35| mu35_9952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9947 +# 35| r35_9953(bool) = Constant[0] : +# 35| v35_9954(void) = ConditionalBranch : r35_9953 #-----| False -> Block 711 #-----| True -> Block 1026 -# 2152| Block 711 -# 2152| r2152_1(glval) = VariableAddress[x711] : -# 2152| mu2152_2(String) = Uninitialized[x711] : &:r2152_1 -# 2152| r2152_3(glval) = FunctionAddress[String] : -# 2152| v2152_4(void) = Call[String] : func:r2152_3, this:r2152_1 -# 2152| mu2152_5(unknown) = ^CallSideEffect : ~m? -# 2152| mu2152_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 -# 2153| r2153_1(glval) = VariableAddress[x711] : -# 2153| r2153_2(glval) = FunctionAddress[~String] : -# 2153| v2153_3(void) = Call[~String] : func:r2153_2, this:r2153_1 -# 2153| mu2153_4(unknown) = ^CallSideEffect : ~m? -# 2153| v2153_5(void) = ^IndirectReadSideEffect[-1] : &:r2153_1, ~m? -# 2153| mu2153_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2153| r2153_7(bool) = Constant[0] : -# 2153| v2153_8(void) = ConditionalBranch : r2153_7 +# 35| Block 711 +# 35| r35_9955(glval) = VariableAddress[x711] : +# 35| mu35_9956(String) = Uninitialized[x711] : &:r35_9955 +# 35| r35_9957(glval) = FunctionAddress[String] : +# 35| v35_9958(void) = Call[String] : func:r35_9957, this:r35_9955 +# 35| mu35_9959(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9955 +# 35| r35_9961(glval) = VariableAddress[x711] : +# 35| r35_9962(glval) = FunctionAddress[~String] : +# 35| v35_9963(void) = Call[~String] : func:r35_9962, this:r35_9961 +# 35| mu35_9964(unknown) = ^CallSideEffect : ~m? +# 35| v35_9965(void) = ^IndirectReadSideEffect[-1] : &:r35_9961, ~m? +# 35| mu35_9966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9961 +# 35| r35_9967(bool) = Constant[0] : +# 35| v35_9968(void) = ConditionalBranch : r35_9967 #-----| False -> Block 712 #-----| True -> Block 1026 -# 2155| Block 712 -# 2155| r2155_1(glval) = VariableAddress[x712] : -# 2155| mu2155_2(String) = Uninitialized[x712] : &:r2155_1 -# 2155| r2155_3(glval) = FunctionAddress[String] : -# 2155| v2155_4(void) = Call[String] : func:r2155_3, this:r2155_1 -# 2155| mu2155_5(unknown) = ^CallSideEffect : ~m? -# 2155| mu2155_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 -# 2156| r2156_1(glval) = VariableAddress[x712] : -# 2156| r2156_2(glval) = FunctionAddress[~String] : -# 2156| v2156_3(void) = Call[~String] : func:r2156_2, this:r2156_1 -# 2156| mu2156_4(unknown) = ^CallSideEffect : ~m? -# 2156| v2156_5(void) = ^IndirectReadSideEffect[-1] : &:r2156_1, ~m? -# 2156| mu2156_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2156_1 -# 2156| r2156_7(bool) = Constant[0] : -# 2156| v2156_8(void) = ConditionalBranch : r2156_7 +# 35| Block 712 +# 35| r35_9969(glval) = VariableAddress[x712] : +# 35| mu35_9970(String) = Uninitialized[x712] : &:r35_9969 +# 35| r35_9971(glval) = FunctionAddress[String] : +# 35| v35_9972(void) = Call[String] : func:r35_9971, this:r35_9969 +# 35| mu35_9973(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9969 +# 35| r35_9975(glval) = VariableAddress[x712] : +# 35| r35_9976(glval) = FunctionAddress[~String] : +# 35| v35_9977(void) = Call[~String] : func:r35_9976, this:r35_9975 +# 35| mu35_9978(unknown) = ^CallSideEffect : ~m? +# 35| v35_9979(void) = ^IndirectReadSideEffect[-1] : &:r35_9975, ~m? +# 35| mu35_9980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9975 +# 35| r35_9981(bool) = Constant[0] : +# 35| v35_9982(void) = ConditionalBranch : r35_9981 #-----| False -> Block 713 #-----| True -> Block 1026 -# 2158| Block 713 -# 2158| r2158_1(glval) = VariableAddress[x713] : -# 2158| mu2158_2(String) = Uninitialized[x713] : &:r2158_1 -# 2158| r2158_3(glval) = FunctionAddress[String] : -# 2158| v2158_4(void) = Call[String] : func:r2158_3, this:r2158_1 -# 2158| mu2158_5(unknown) = ^CallSideEffect : ~m? -# 2158| mu2158_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 -# 2159| r2159_1(glval) = VariableAddress[x713] : -# 2159| r2159_2(glval) = FunctionAddress[~String] : -# 2159| v2159_3(void) = Call[~String] : func:r2159_2, this:r2159_1 -# 2159| mu2159_4(unknown) = ^CallSideEffect : ~m? -# 2159| v2159_5(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, ~m? -# 2159| mu2159_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 -# 2159| r2159_7(bool) = Constant[0] : -# 2159| v2159_8(void) = ConditionalBranch : r2159_7 +# 35| Block 713 +# 35| r35_9983(glval) = VariableAddress[x713] : +# 35| mu35_9984(String) = Uninitialized[x713] : &:r35_9983 +# 35| r35_9985(glval) = FunctionAddress[String] : +# 35| v35_9986(void) = Call[String] : func:r35_9985, this:r35_9983 +# 35| mu35_9987(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9983 +# 35| r35_9989(glval) = VariableAddress[x713] : +# 35| r35_9990(glval) = FunctionAddress[~String] : +# 35| v35_9991(void) = Call[~String] : func:r35_9990, this:r35_9989 +# 35| mu35_9992(unknown) = ^CallSideEffect : ~m? +# 35| v35_9993(void) = ^IndirectReadSideEffect[-1] : &:r35_9989, ~m? +# 35| mu35_9994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9989 +# 35| r35_9995(bool) = Constant[0] : +# 35| v35_9996(void) = ConditionalBranch : r35_9995 #-----| False -> Block 714 #-----| True -> Block 1026 -# 2161| Block 714 -# 2161| r2161_1(glval) = VariableAddress[x714] : -# 2161| mu2161_2(String) = Uninitialized[x714] : &:r2161_1 -# 2161| r2161_3(glval) = FunctionAddress[String] : -# 2161| v2161_4(void) = Call[String] : func:r2161_3, this:r2161_1 -# 2161| mu2161_5(unknown) = ^CallSideEffect : ~m? -# 2161| mu2161_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2161_1 -# 2162| r2162_1(glval) = VariableAddress[x714] : -# 2162| r2162_2(glval) = FunctionAddress[~String] : -# 2162| v2162_3(void) = Call[~String] : func:r2162_2, this:r2162_1 -# 2162| mu2162_4(unknown) = ^CallSideEffect : ~m? -# 2162| v2162_5(void) = ^IndirectReadSideEffect[-1] : &:r2162_1, ~m? -# 2162| mu2162_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2162_1 -# 2162| r2162_7(bool) = Constant[0] : -# 2162| v2162_8(void) = ConditionalBranch : r2162_7 +# 35| Block 714 +# 35| r35_9997(glval) = VariableAddress[x714] : +# 35| mu35_9998(String) = Uninitialized[x714] : &:r35_9997 +# 35| r35_9999(glval) = FunctionAddress[String] : +# 35| v35_10000(void) = Call[String] : func:r35_9999, this:r35_9997 +# 35| mu35_10001(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9997 +# 35| r35_10003(glval) = VariableAddress[x714] : +# 35| r35_10004(glval) = FunctionAddress[~String] : +# 35| v35_10005(void) = Call[~String] : func:r35_10004, this:r35_10003 +# 35| mu35_10006(unknown) = ^CallSideEffect : ~m? +# 35| v35_10007(void) = ^IndirectReadSideEffect[-1] : &:r35_10003, ~m? +# 35| mu35_10008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10003 +# 35| r35_10009(bool) = Constant[0] : +# 35| v35_10010(void) = ConditionalBranch : r35_10009 #-----| False -> Block 715 #-----| True -> Block 1026 -# 2164| Block 715 -# 2164| r2164_1(glval) = VariableAddress[x715] : -# 2164| mu2164_2(String) = Uninitialized[x715] : &:r2164_1 -# 2164| r2164_3(glval) = FunctionAddress[String] : -# 2164| v2164_4(void) = Call[String] : func:r2164_3, this:r2164_1 -# 2164| mu2164_5(unknown) = ^CallSideEffect : ~m? -# 2164| mu2164_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2164_1 -# 2165| r2165_1(glval) = VariableAddress[x715] : -# 2165| r2165_2(glval) = FunctionAddress[~String] : -# 2165| v2165_3(void) = Call[~String] : func:r2165_2, this:r2165_1 -# 2165| mu2165_4(unknown) = ^CallSideEffect : ~m? -# 2165| v2165_5(void) = ^IndirectReadSideEffect[-1] : &:r2165_1, ~m? -# 2165| mu2165_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2165_1 -# 2165| r2165_7(bool) = Constant[0] : -# 2165| v2165_8(void) = ConditionalBranch : r2165_7 +# 35| Block 715 +# 35| r35_10011(glval) = VariableAddress[x715] : +# 35| mu35_10012(String) = Uninitialized[x715] : &:r35_10011 +# 35| r35_10013(glval) = FunctionAddress[String] : +# 35| v35_10014(void) = Call[String] : func:r35_10013, this:r35_10011 +# 35| mu35_10015(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10011 +# 35| r35_10017(glval) = VariableAddress[x715] : +# 35| r35_10018(glval) = FunctionAddress[~String] : +# 35| v35_10019(void) = Call[~String] : func:r35_10018, this:r35_10017 +# 35| mu35_10020(unknown) = ^CallSideEffect : ~m? +# 35| v35_10021(void) = ^IndirectReadSideEffect[-1] : &:r35_10017, ~m? +# 35| mu35_10022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10017 +# 35| r35_10023(bool) = Constant[0] : +# 35| v35_10024(void) = ConditionalBranch : r35_10023 #-----| False -> Block 716 #-----| True -> Block 1026 -# 2167| Block 716 -# 2167| r2167_1(glval) = VariableAddress[x716] : -# 2167| mu2167_2(String) = Uninitialized[x716] : &:r2167_1 -# 2167| r2167_3(glval) = FunctionAddress[String] : -# 2167| v2167_4(void) = Call[String] : func:r2167_3, this:r2167_1 -# 2167| mu2167_5(unknown) = ^CallSideEffect : ~m? -# 2167| mu2167_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2167_1 -# 2168| r2168_1(glval) = VariableAddress[x716] : -# 2168| r2168_2(glval) = FunctionAddress[~String] : -# 2168| v2168_3(void) = Call[~String] : func:r2168_2, this:r2168_1 -# 2168| mu2168_4(unknown) = ^CallSideEffect : ~m? -# 2168| v2168_5(void) = ^IndirectReadSideEffect[-1] : &:r2168_1, ~m? -# 2168| mu2168_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| r2168_7(bool) = Constant[0] : -# 2168| v2168_8(void) = ConditionalBranch : r2168_7 +# 35| Block 716 +# 35| r35_10025(glval) = VariableAddress[x716] : +# 35| mu35_10026(String) = Uninitialized[x716] : &:r35_10025 +# 35| r35_10027(glval) = FunctionAddress[String] : +# 35| v35_10028(void) = Call[String] : func:r35_10027, this:r35_10025 +# 35| mu35_10029(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10025 +# 35| r35_10031(glval) = VariableAddress[x716] : +# 35| r35_10032(glval) = FunctionAddress[~String] : +# 35| v35_10033(void) = Call[~String] : func:r35_10032, this:r35_10031 +# 35| mu35_10034(unknown) = ^CallSideEffect : ~m? +# 35| v35_10035(void) = ^IndirectReadSideEffect[-1] : &:r35_10031, ~m? +# 35| mu35_10036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10031 +# 35| r35_10037(bool) = Constant[0] : +# 35| v35_10038(void) = ConditionalBranch : r35_10037 #-----| False -> Block 717 #-----| True -> Block 1026 -# 2170| Block 717 -# 2170| r2170_1(glval) = VariableAddress[x717] : -# 2170| mu2170_2(String) = Uninitialized[x717] : &:r2170_1 -# 2170| r2170_3(glval) = FunctionAddress[String] : -# 2170| v2170_4(void) = Call[String] : func:r2170_3, this:r2170_1 -# 2170| mu2170_5(unknown) = ^CallSideEffect : ~m? -# 2170| mu2170_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1 -# 2171| r2171_1(glval) = VariableAddress[x717] : -# 2171| r2171_2(glval) = FunctionAddress[~String] : -# 2171| v2171_3(void) = Call[~String] : func:r2171_2, this:r2171_1 -# 2171| mu2171_4(unknown) = ^CallSideEffect : ~m? -# 2171| v2171_5(void) = ^IndirectReadSideEffect[-1] : &:r2171_1, ~m? -# 2171| mu2171_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2171_1 -# 2171| r2171_7(bool) = Constant[0] : -# 2171| v2171_8(void) = ConditionalBranch : r2171_7 +# 35| Block 717 +# 35| r35_10039(glval) = VariableAddress[x717] : +# 35| mu35_10040(String) = Uninitialized[x717] : &:r35_10039 +# 35| r35_10041(glval) = FunctionAddress[String] : +# 35| v35_10042(void) = Call[String] : func:r35_10041, this:r35_10039 +# 35| mu35_10043(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10039 +# 35| r35_10045(glval) = VariableAddress[x717] : +# 35| r35_10046(glval) = FunctionAddress[~String] : +# 35| v35_10047(void) = Call[~String] : func:r35_10046, this:r35_10045 +# 35| mu35_10048(unknown) = ^CallSideEffect : ~m? +# 35| v35_10049(void) = ^IndirectReadSideEffect[-1] : &:r35_10045, ~m? +# 35| mu35_10050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10045 +# 35| r35_10051(bool) = Constant[0] : +# 35| v35_10052(void) = ConditionalBranch : r35_10051 #-----| False -> Block 718 #-----| True -> Block 1026 -# 2173| Block 718 -# 2173| r2173_1(glval) = VariableAddress[x718] : -# 2173| mu2173_2(String) = Uninitialized[x718] : &:r2173_1 -# 2173| r2173_3(glval) = FunctionAddress[String] : -# 2173| v2173_4(void) = Call[String] : func:r2173_3, this:r2173_1 -# 2173| mu2173_5(unknown) = ^CallSideEffect : ~m? -# 2173| mu2173_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2173_1 -# 2174| r2174_1(glval) = VariableAddress[x718] : -# 2174| r2174_2(glval) = FunctionAddress[~String] : -# 2174| v2174_3(void) = Call[~String] : func:r2174_2, this:r2174_1 -# 2174| mu2174_4(unknown) = ^CallSideEffect : ~m? -# 2174| v2174_5(void) = ^IndirectReadSideEffect[-1] : &:r2174_1, ~m? -# 2174| mu2174_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2174_1 -# 2174| r2174_7(bool) = Constant[0] : -# 2174| v2174_8(void) = ConditionalBranch : r2174_7 +# 35| Block 718 +# 35| r35_10053(glval) = VariableAddress[x718] : +# 35| mu35_10054(String) = Uninitialized[x718] : &:r35_10053 +# 35| r35_10055(glval) = FunctionAddress[String] : +# 35| v35_10056(void) = Call[String] : func:r35_10055, this:r35_10053 +# 35| mu35_10057(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10053 +# 35| r35_10059(glval) = VariableAddress[x718] : +# 35| r35_10060(glval) = FunctionAddress[~String] : +# 35| v35_10061(void) = Call[~String] : func:r35_10060, this:r35_10059 +# 35| mu35_10062(unknown) = ^CallSideEffect : ~m? +# 35| v35_10063(void) = ^IndirectReadSideEffect[-1] : &:r35_10059, ~m? +# 35| mu35_10064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10059 +# 35| r35_10065(bool) = Constant[0] : +# 35| v35_10066(void) = ConditionalBranch : r35_10065 #-----| False -> Block 719 #-----| True -> Block 1026 -# 2176| Block 719 -# 2176| r2176_1(glval) = VariableAddress[x719] : -# 2176| mu2176_2(String) = Uninitialized[x719] : &:r2176_1 -# 2176| r2176_3(glval) = FunctionAddress[String] : -# 2176| v2176_4(void) = Call[String] : func:r2176_3, this:r2176_1 -# 2176| mu2176_5(unknown) = ^CallSideEffect : ~m? -# 2176| mu2176_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2176_1 -# 2177| r2177_1(glval) = VariableAddress[x719] : -# 2177| r2177_2(glval) = FunctionAddress[~String] : -# 2177| v2177_3(void) = Call[~String] : func:r2177_2, this:r2177_1 -# 2177| mu2177_4(unknown) = ^CallSideEffect : ~m? -# 2177| v2177_5(void) = ^IndirectReadSideEffect[-1] : &:r2177_1, ~m? -# 2177| mu2177_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2177_1 -# 2177| r2177_7(bool) = Constant[0] : -# 2177| v2177_8(void) = ConditionalBranch : r2177_7 +# 35| Block 719 +# 35| r35_10067(glval) = VariableAddress[x719] : +# 35| mu35_10068(String) = Uninitialized[x719] : &:r35_10067 +# 35| r35_10069(glval) = FunctionAddress[String] : +# 35| v35_10070(void) = Call[String] : func:r35_10069, this:r35_10067 +# 35| mu35_10071(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10067 +# 35| r35_10073(glval) = VariableAddress[x719] : +# 35| r35_10074(glval) = FunctionAddress[~String] : +# 35| v35_10075(void) = Call[~String] : func:r35_10074, this:r35_10073 +# 35| mu35_10076(unknown) = ^CallSideEffect : ~m? +# 35| v35_10077(void) = ^IndirectReadSideEffect[-1] : &:r35_10073, ~m? +# 35| mu35_10078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10073 +# 35| r35_10079(bool) = Constant[0] : +# 35| v35_10080(void) = ConditionalBranch : r35_10079 #-----| False -> Block 720 #-----| True -> Block 1026 -# 2179| Block 720 -# 2179| r2179_1(glval) = VariableAddress[x720] : -# 2179| mu2179_2(String) = Uninitialized[x720] : &:r2179_1 -# 2179| r2179_3(glval) = FunctionAddress[String] : -# 2179| v2179_4(void) = Call[String] : func:r2179_3, this:r2179_1 -# 2179| mu2179_5(unknown) = ^CallSideEffect : ~m? -# 2179| mu2179_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2179_1 -# 2180| r2180_1(glval) = VariableAddress[x720] : -# 2180| r2180_2(glval) = FunctionAddress[~String] : -# 2180| v2180_3(void) = Call[~String] : func:r2180_2, this:r2180_1 -# 2180| mu2180_4(unknown) = ^CallSideEffect : ~m? -# 2180| v2180_5(void) = ^IndirectReadSideEffect[-1] : &:r2180_1, ~m? -# 2180| mu2180_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2180_1 -# 2180| r2180_7(bool) = Constant[0] : -# 2180| v2180_8(void) = ConditionalBranch : r2180_7 +# 35| Block 720 +# 35| r35_10081(glval) = VariableAddress[x720] : +# 35| mu35_10082(String) = Uninitialized[x720] : &:r35_10081 +# 35| r35_10083(glval) = FunctionAddress[String] : +# 35| v35_10084(void) = Call[String] : func:r35_10083, this:r35_10081 +# 35| mu35_10085(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10081 +# 35| r35_10087(glval) = VariableAddress[x720] : +# 35| r35_10088(glval) = FunctionAddress[~String] : +# 35| v35_10089(void) = Call[~String] : func:r35_10088, this:r35_10087 +# 35| mu35_10090(unknown) = ^CallSideEffect : ~m? +# 35| v35_10091(void) = ^IndirectReadSideEffect[-1] : &:r35_10087, ~m? +# 35| mu35_10092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10087 +# 35| r35_10093(bool) = Constant[0] : +# 35| v35_10094(void) = ConditionalBranch : r35_10093 #-----| False -> Block 721 #-----| True -> Block 1026 -# 2182| Block 721 -# 2182| r2182_1(glval) = VariableAddress[x721] : -# 2182| mu2182_2(String) = Uninitialized[x721] : &:r2182_1 -# 2182| r2182_3(glval) = FunctionAddress[String] : -# 2182| v2182_4(void) = Call[String] : func:r2182_3, this:r2182_1 -# 2182| mu2182_5(unknown) = ^CallSideEffect : ~m? -# 2182| mu2182_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2182_1 -# 2183| r2183_1(glval) = VariableAddress[x721] : -# 2183| r2183_2(glval) = FunctionAddress[~String] : -# 2183| v2183_3(void) = Call[~String] : func:r2183_2, this:r2183_1 -# 2183| mu2183_4(unknown) = ^CallSideEffect : ~m? -# 2183| v2183_5(void) = ^IndirectReadSideEffect[-1] : &:r2183_1, ~m? -# 2183| mu2183_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2183_1 -# 2183| r2183_7(bool) = Constant[0] : -# 2183| v2183_8(void) = ConditionalBranch : r2183_7 +# 35| Block 721 +# 35| r35_10095(glval) = VariableAddress[x721] : +# 35| mu35_10096(String) = Uninitialized[x721] : &:r35_10095 +# 35| r35_10097(glval) = FunctionAddress[String] : +# 35| v35_10098(void) = Call[String] : func:r35_10097, this:r35_10095 +# 35| mu35_10099(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10095 +# 35| r35_10101(glval) = VariableAddress[x721] : +# 35| r35_10102(glval) = FunctionAddress[~String] : +# 35| v35_10103(void) = Call[~String] : func:r35_10102, this:r35_10101 +# 35| mu35_10104(unknown) = ^CallSideEffect : ~m? +# 35| v35_10105(void) = ^IndirectReadSideEffect[-1] : &:r35_10101, ~m? +# 35| mu35_10106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10101 +# 35| r35_10107(bool) = Constant[0] : +# 35| v35_10108(void) = ConditionalBranch : r35_10107 #-----| False -> Block 722 #-----| True -> Block 1026 -# 2185| Block 722 -# 2185| r2185_1(glval) = VariableAddress[x722] : -# 2185| mu2185_2(String) = Uninitialized[x722] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[String] : -# 2185| v2185_4(void) = Call[String] : func:r2185_3, this:r2185_1 -# 2185| mu2185_5(unknown) = ^CallSideEffect : ~m? -# 2185| mu2185_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2186| r2186_1(glval) = VariableAddress[x722] : -# 2186| r2186_2(glval) = FunctionAddress[~String] : -# 2186| v2186_3(void) = Call[~String] : func:r2186_2, this:r2186_1 -# 2186| mu2186_4(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_5(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, ~m? -# 2186| mu2186_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| r2186_7(bool) = Constant[0] : -# 2186| v2186_8(void) = ConditionalBranch : r2186_7 +# 35| Block 722 +# 35| r35_10109(glval) = VariableAddress[x722] : +# 35| mu35_10110(String) = Uninitialized[x722] : &:r35_10109 +# 35| r35_10111(glval) = FunctionAddress[String] : +# 35| v35_10112(void) = Call[String] : func:r35_10111, this:r35_10109 +# 35| mu35_10113(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10109 +# 35| r35_10115(glval) = VariableAddress[x722] : +# 35| r35_10116(glval) = FunctionAddress[~String] : +# 35| v35_10117(void) = Call[~String] : func:r35_10116, this:r35_10115 +# 35| mu35_10118(unknown) = ^CallSideEffect : ~m? +# 35| v35_10119(void) = ^IndirectReadSideEffect[-1] : &:r35_10115, ~m? +# 35| mu35_10120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10115 +# 35| r35_10121(bool) = Constant[0] : +# 35| v35_10122(void) = ConditionalBranch : r35_10121 #-----| False -> Block 723 #-----| True -> Block 1026 -# 2188| Block 723 -# 2188| r2188_1(glval) = VariableAddress[x723] : -# 2188| mu2188_2(String) = Uninitialized[x723] : &:r2188_1 -# 2188| r2188_3(glval) = FunctionAddress[String] : -# 2188| v2188_4(void) = Call[String] : func:r2188_3, this:r2188_1 -# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? -# 2188| mu2188_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2188_1 -# 2189| r2189_1(glval) = VariableAddress[x723] : -# 2189| r2189_2(glval) = FunctionAddress[~String] : -# 2189| v2189_3(void) = Call[~String] : func:r2189_2, this:r2189_1 -# 2189| mu2189_4(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_5(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, ~m? -# 2189| mu2189_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 -# 2189| r2189_7(bool) = Constant[0] : -# 2189| v2189_8(void) = ConditionalBranch : r2189_7 +# 35| Block 723 +# 35| r35_10123(glval) = VariableAddress[x723] : +# 35| mu35_10124(String) = Uninitialized[x723] : &:r35_10123 +# 35| r35_10125(glval) = FunctionAddress[String] : +# 35| v35_10126(void) = Call[String] : func:r35_10125, this:r35_10123 +# 35| mu35_10127(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10123 +# 35| r35_10129(glval) = VariableAddress[x723] : +# 35| r35_10130(glval) = FunctionAddress[~String] : +# 35| v35_10131(void) = Call[~String] : func:r35_10130, this:r35_10129 +# 35| mu35_10132(unknown) = ^CallSideEffect : ~m? +# 35| v35_10133(void) = ^IndirectReadSideEffect[-1] : &:r35_10129, ~m? +# 35| mu35_10134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10129 +# 35| r35_10135(bool) = Constant[0] : +# 35| v35_10136(void) = ConditionalBranch : r35_10135 #-----| False -> Block 724 #-----| True -> Block 1026 -# 2191| Block 724 -# 2191| r2191_1(glval) = VariableAddress[x724] : -# 2191| mu2191_2(String) = Uninitialized[x724] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[String] : -# 2191| v2191_4(void) = Call[String] : func:r2191_3, this:r2191_1 -# 2191| mu2191_5(unknown) = ^CallSideEffect : ~m? -# 2191| mu2191_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2192| r2192_1(glval) = VariableAddress[x724] : -# 2192| r2192_2(glval) = FunctionAddress[~String] : -# 2192| v2192_3(void) = Call[~String] : func:r2192_2, this:r2192_1 -# 2192| mu2192_4(unknown) = ^CallSideEffect : ~m? -# 2192| v2192_5(void) = ^IndirectReadSideEffect[-1] : &:r2192_1, ~m? -# 2192| mu2192_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2192_1 -# 2192| r2192_7(bool) = Constant[0] : -# 2192| v2192_8(void) = ConditionalBranch : r2192_7 +# 35| Block 724 +# 35| r35_10137(glval) = VariableAddress[x724] : +# 35| mu35_10138(String) = Uninitialized[x724] : &:r35_10137 +# 35| r35_10139(glval) = FunctionAddress[String] : +# 35| v35_10140(void) = Call[String] : func:r35_10139, this:r35_10137 +# 35| mu35_10141(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10137 +# 35| r35_10143(glval) = VariableAddress[x724] : +# 35| r35_10144(glval) = FunctionAddress[~String] : +# 35| v35_10145(void) = Call[~String] : func:r35_10144, this:r35_10143 +# 35| mu35_10146(unknown) = ^CallSideEffect : ~m? +# 35| v35_10147(void) = ^IndirectReadSideEffect[-1] : &:r35_10143, ~m? +# 35| mu35_10148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10143 +# 35| r35_10149(bool) = Constant[0] : +# 35| v35_10150(void) = ConditionalBranch : r35_10149 #-----| False -> Block 725 #-----| True -> Block 1026 -# 2194| Block 725 -# 2194| r2194_1(glval) = VariableAddress[x725] : -# 2194| mu2194_2(String) = Uninitialized[x725] : &:r2194_1 -# 2194| r2194_3(glval) = FunctionAddress[String] : -# 2194| v2194_4(void) = Call[String] : func:r2194_3, this:r2194_1 -# 2194| mu2194_5(unknown) = ^CallSideEffect : ~m? -# 2194| mu2194_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2194_1 -# 2195| r2195_1(glval) = VariableAddress[x725] : -# 2195| r2195_2(glval) = FunctionAddress[~String] : -# 2195| v2195_3(void) = Call[~String] : func:r2195_2, this:r2195_1 -# 2195| mu2195_4(unknown) = ^CallSideEffect : ~m? -# 2195| v2195_5(void) = ^IndirectReadSideEffect[-1] : &:r2195_1, ~m? -# 2195| mu2195_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2195_1 -# 2195| r2195_7(bool) = Constant[0] : -# 2195| v2195_8(void) = ConditionalBranch : r2195_7 +# 35| Block 725 +# 35| r35_10151(glval) = VariableAddress[x725] : +# 35| mu35_10152(String) = Uninitialized[x725] : &:r35_10151 +# 35| r35_10153(glval) = FunctionAddress[String] : +# 35| v35_10154(void) = Call[String] : func:r35_10153, this:r35_10151 +# 35| mu35_10155(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10151 +# 35| r35_10157(glval) = VariableAddress[x725] : +# 35| r35_10158(glval) = FunctionAddress[~String] : +# 35| v35_10159(void) = Call[~String] : func:r35_10158, this:r35_10157 +# 35| mu35_10160(unknown) = ^CallSideEffect : ~m? +# 35| v35_10161(void) = ^IndirectReadSideEffect[-1] : &:r35_10157, ~m? +# 35| mu35_10162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10157 +# 35| r35_10163(bool) = Constant[0] : +# 35| v35_10164(void) = ConditionalBranch : r35_10163 #-----| False -> Block 726 #-----| True -> Block 1026 -# 2197| Block 726 -# 2197| r2197_1(glval) = VariableAddress[x726] : -# 2197| mu2197_2(String) = Uninitialized[x726] : &:r2197_1 -# 2197| r2197_3(glval) = FunctionAddress[String] : -# 2197| v2197_4(void) = Call[String] : func:r2197_3, this:r2197_1 -# 2197| mu2197_5(unknown) = ^CallSideEffect : ~m? -# 2197| mu2197_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2197_1 -# 2198| r2198_1(glval) = VariableAddress[x726] : -# 2198| r2198_2(glval) = FunctionAddress[~String] : -# 2198| v2198_3(void) = Call[~String] : func:r2198_2, this:r2198_1 -# 2198| mu2198_4(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_5(void) = ^IndirectReadSideEffect[-1] : &:r2198_1, ~m? -# 2198| mu2198_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2198_1 -# 2198| r2198_7(bool) = Constant[0] : -# 2198| v2198_8(void) = ConditionalBranch : r2198_7 +# 35| Block 726 +# 35| r35_10165(glval) = VariableAddress[x726] : +# 35| mu35_10166(String) = Uninitialized[x726] : &:r35_10165 +# 35| r35_10167(glval) = FunctionAddress[String] : +# 35| v35_10168(void) = Call[String] : func:r35_10167, this:r35_10165 +# 35| mu35_10169(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10165 +# 35| r35_10171(glval) = VariableAddress[x726] : +# 35| r35_10172(glval) = FunctionAddress[~String] : +# 35| v35_10173(void) = Call[~String] : func:r35_10172, this:r35_10171 +# 35| mu35_10174(unknown) = ^CallSideEffect : ~m? +# 35| v35_10175(void) = ^IndirectReadSideEffect[-1] : &:r35_10171, ~m? +# 35| mu35_10176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10171 +# 35| r35_10177(bool) = Constant[0] : +# 35| v35_10178(void) = ConditionalBranch : r35_10177 #-----| False -> Block 727 #-----| True -> Block 1026 -# 2200| Block 727 -# 2200| r2200_1(glval) = VariableAddress[x727] : -# 2200| mu2200_2(String) = Uninitialized[x727] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[String] : -# 2200| v2200_4(void) = Call[String] : func:r2200_3, this:r2200_1 -# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? -# 2200| mu2200_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2201| r2201_1(glval) = VariableAddress[x727] : -# 2201| r2201_2(glval) = FunctionAddress[~String] : -# 2201| v2201_3(void) = Call[~String] : func:r2201_2, this:r2201_1 -# 2201| mu2201_4(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_5(void) = ^IndirectReadSideEffect[-1] : &:r2201_1, ~m? -# 2201| mu2201_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| r2201_7(bool) = Constant[0] : -# 2201| v2201_8(void) = ConditionalBranch : r2201_7 +# 35| Block 727 +# 35| r35_10179(glval) = VariableAddress[x727] : +# 35| mu35_10180(String) = Uninitialized[x727] : &:r35_10179 +# 35| r35_10181(glval) = FunctionAddress[String] : +# 35| v35_10182(void) = Call[String] : func:r35_10181, this:r35_10179 +# 35| mu35_10183(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10179 +# 35| r35_10185(glval) = VariableAddress[x727] : +# 35| r35_10186(glval) = FunctionAddress[~String] : +# 35| v35_10187(void) = Call[~String] : func:r35_10186, this:r35_10185 +# 35| mu35_10188(unknown) = ^CallSideEffect : ~m? +# 35| v35_10189(void) = ^IndirectReadSideEffect[-1] : &:r35_10185, ~m? +# 35| mu35_10190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10185 +# 35| r35_10191(bool) = Constant[0] : +# 35| v35_10192(void) = ConditionalBranch : r35_10191 #-----| False -> Block 728 #-----| True -> Block 1026 -# 2203| Block 728 -# 2203| r2203_1(glval) = VariableAddress[x728] : -# 2203| mu2203_2(String) = Uninitialized[x728] : &:r2203_1 -# 2203| r2203_3(glval) = FunctionAddress[String] : -# 2203| v2203_4(void) = Call[String] : func:r2203_3, this:r2203_1 -# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? -# 2203| mu2203_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 -# 2204| r2204_1(glval) = VariableAddress[x728] : -# 2204| r2204_2(glval) = FunctionAddress[~String] : -# 2204| v2204_3(void) = Call[~String] : func:r2204_2, this:r2204_1 -# 2204| mu2204_4(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_5(void) = ^IndirectReadSideEffect[-1] : &:r2204_1, ~m? -# 2204| mu2204_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| r2204_7(bool) = Constant[0] : -# 2204| v2204_8(void) = ConditionalBranch : r2204_7 +# 35| Block 728 +# 35| r35_10193(glval) = VariableAddress[x728] : +# 35| mu35_10194(String) = Uninitialized[x728] : &:r35_10193 +# 35| r35_10195(glval) = FunctionAddress[String] : +# 35| v35_10196(void) = Call[String] : func:r35_10195, this:r35_10193 +# 35| mu35_10197(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10193 +# 35| r35_10199(glval) = VariableAddress[x728] : +# 35| r35_10200(glval) = FunctionAddress[~String] : +# 35| v35_10201(void) = Call[~String] : func:r35_10200, this:r35_10199 +# 35| mu35_10202(unknown) = ^CallSideEffect : ~m? +# 35| v35_10203(void) = ^IndirectReadSideEffect[-1] : &:r35_10199, ~m? +# 35| mu35_10204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10199 +# 35| r35_10205(bool) = Constant[0] : +# 35| v35_10206(void) = ConditionalBranch : r35_10205 #-----| False -> Block 729 #-----| True -> Block 1026 -# 2206| Block 729 -# 2206| r2206_1(glval) = VariableAddress[x729] : -# 2206| mu2206_2(String) = Uninitialized[x729] : &:r2206_1 -# 2206| r2206_3(glval) = FunctionAddress[String] : -# 2206| v2206_4(void) = Call[String] : func:r2206_3, this:r2206_1 -# 2206| mu2206_5(unknown) = ^CallSideEffect : ~m? -# 2206| mu2206_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2207| r2207_1(glval) = VariableAddress[x729] : -# 2207| r2207_2(glval) = FunctionAddress[~String] : -# 2207| v2207_3(void) = Call[~String] : func:r2207_2, this:r2207_1 -# 2207| mu2207_4(unknown) = ^CallSideEffect : ~m? -# 2207| v2207_5(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, ~m? -# 2207| mu2207_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 -# 2207| r2207_7(bool) = Constant[0] : -# 2207| v2207_8(void) = ConditionalBranch : r2207_7 +# 35| Block 729 +# 35| r35_10207(glval) = VariableAddress[x729] : +# 35| mu35_10208(String) = Uninitialized[x729] : &:r35_10207 +# 35| r35_10209(glval) = FunctionAddress[String] : +# 35| v35_10210(void) = Call[String] : func:r35_10209, this:r35_10207 +# 35| mu35_10211(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10207 +# 35| r35_10213(glval) = VariableAddress[x729] : +# 35| r35_10214(glval) = FunctionAddress[~String] : +# 35| v35_10215(void) = Call[~String] : func:r35_10214, this:r35_10213 +# 35| mu35_10216(unknown) = ^CallSideEffect : ~m? +# 35| v35_10217(void) = ^IndirectReadSideEffect[-1] : &:r35_10213, ~m? +# 35| mu35_10218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10213 +# 35| r35_10219(bool) = Constant[0] : +# 35| v35_10220(void) = ConditionalBranch : r35_10219 #-----| False -> Block 730 #-----| True -> Block 1026 -# 2209| Block 730 -# 2209| r2209_1(glval) = VariableAddress[x730] : -# 2209| mu2209_2(String) = Uninitialized[x730] : &:r2209_1 -# 2209| r2209_3(glval) = FunctionAddress[String] : -# 2209| v2209_4(void) = Call[String] : func:r2209_3, this:r2209_1 -# 2209| mu2209_5(unknown) = ^CallSideEffect : ~m? -# 2209| mu2209_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2209_1 -# 2210| r2210_1(glval) = VariableAddress[x730] : -# 2210| r2210_2(glval) = FunctionAddress[~String] : -# 2210| v2210_3(void) = Call[~String] : func:r2210_2, this:r2210_1 -# 2210| mu2210_4(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_5(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, ~m? -# 2210| mu2210_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| r2210_7(bool) = Constant[0] : -# 2210| v2210_8(void) = ConditionalBranch : r2210_7 +# 35| Block 730 +# 35| r35_10221(glval) = VariableAddress[x730] : +# 35| mu35_10222(String) = Uninitialized[x730] : &:r35_10221 +# 35| r35_10223(glval) = FunctionAddress[String] : +# 35| v35_10224(void) = Call[String] : func:r35_10223, this:r35_10221 +# 35| mu35_10225(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10221 +# 35| r35_10227(glval) = VariableAddress[x730] : +# 35| r35_10228(glval) = FunctionAddress[~String] : +# 35| v35_10229(void) = Call[~String] : func:r35_10228, this:r35_10227 +# 35| mu35_10230(unknown) = ^CallSideEffect : ~m? +# 35| v35_10231(void) = ^IndirectReadSideEffect[-1] : &:r35_10227, ~m? +# 35| mu35_10232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10227 +# 35| r35_10233(bool) = Constant[0] : +# 35| v35_10234(void) = ConditionalBranch : r35_10233 #-----| False -> Block 731 #-----| True -> Block 1026 -# 2212| Block 731 -# 2212| r2212_1(glval) = VariableAddress[x731] : -# 2212| mu2212_2(String) = Uninitialized[x731] : &:r2212_1 -# 2212| r2212_3(glval) = FunctionAddress[String] : -# 2212| v2212_4(void) = Call[String] : func:r2212_3, this:r2212_1 -# 2212| mu2212_5(unknown) = ^CallSideEffect : ~m? -# 2212| mu2212_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2212_1 -# 2213| r2213_1(glval) = VariableAddress[x731] : -# 2213| r2213_2(glval) = FunctionAddress[~String] : -# 2213| v2213_3(void) = Call[~String] : func:r2213_2, this:r2213_1 -# 2213| mu2213_4(unknown) = ^CallSideEffect : ~m? -# 2213| v2213_5(void) = ^IndirectReadSideEffect[-1] : &:r2213_1, ~m? -# 2213| mu2213_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2213_1 -# 2213| r2213_7(bool) = Constant[0] : -# 2213| v2213_8(void) = ConditionalBranch : r2213_7 +# 35| Block 731 +# 35| r35_10235(glval) = VariableAddress[x731] : +# 35| mu35_10236(String) = Uninitialized[x731] : &:r35_10235 +# 35| r35_10237(glval) = FunctionAddress[String] : +# 35| v35_10238(void) = Call[String] : func:r35_10237, this:r35_10235 +# 35| mu35_10239(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10235 +# 35| r35_10241(glval) = VariableAddress[x731] : +# 35| r35_10242(glval) = FunctionAddress[~String] : +# 35| v35_10243(void) = Call[~String] : func:r35_10242, this:r35_10241 +# 35| mu35_10244(unknown) = ^CallSideEffect : ~m? +# 35| v35_10245(void) = ^IndirectReadSideEffect[-1] : &:r35_10241, ~m? +# 35| mu35_10246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10241 +# 35| r35_10247(bool) = Constant[0] : +# 35| v35_10248(void) = ConditionalBranch : r35_10247 #-----| False -> Block 732 #-----| True -> Block 1026 -# 2215| Block 732 -# 2215| r2215_1(glval) = VariableAddress[x732] : -# 2215| mu2215_2(String) = Uninitialized[x732] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[String] : -# 2215| v2215_4(void) = Call[String] : func:r2215_3, this:r2215_1 -# 2215| mu2215_5(unknown) = ^CallSideEffect : ~m? -# 2215| mu2215_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2216| r2216_1(glval) = VariableAddress[x732] : -# 2216| r2216_2(glval) = FunctionAddress[~String] : -# 2216| v2216_3(void) = Call[~String] : func:r2216_2, this:r2216_1 -# 2216| mu2216_4(unknown) = ^CallSideEffect : ~m? -# 2216| v2216_5(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, ~m? -# 2216| mu2216_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2216| r2216_7(bool) = Constant[0] : -# 2216| v2216_8(void) = ConditionalBranch : r2216_7 +# 35| Block 732 +# 35| r35_10249(glval) = VariableAddress[x732] : +# 35| mu35_10250(String) = Uninitialized[x732] : &:r35_10249 +# 35| r35_10251(glval) = FunctionAddress[String] : +# 35| v35_10252(void) = Call[String] : func:r35_10251, this:r35_10249 +# 35| mu35_10253(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10249 +# 35| r35_10255(glval) = VariableAddress[x732] : +# 35| r35_10256(glval) = FunctionAddress[~String] : +# 35| v35_10257(void) = Call[~String] : func:r35_10256, this:r35_10255 +# 35| mu35_10258(unknown) = ^CallSideEffect : ~m? +# 35| v35_10259(void) = ^IndirectReadSideEffect[-1] : &:r35_10255, ~m? +# 35| mu35_10260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10255 +# 35| r35_10261(bool) = Constant[0] : +# 35| v35_10262(void) = ConditionalBranch : r35_10261 #-----| False -> Block 733 #-----| True -> Block 1026 -# 2218| Block 733 -# 2218| r2218_1(glval) = VariableAddress[x733] : -# 2218| mu2218_2(String) = Uninitialized[x733] : &:r2218_1 -# 2218| r2218_3(glval) = FunctionAddress[String] : -# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 -# 2218| mu2218_5(unknown) = ^CallSideEffect : ~m? -# 2218| mu2218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2219| r2219_1(glval) = VariableAddress[x733] : -# 2219| r2219_2(glval) = FunctionAddress[~String] : -# 2219| v2219_3(void) = Call[~String] : func:r2219_2, this:r2219_1 -# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? -# 2219| mu2219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| r2219_7(bool) = Constant[0] : -# 2219| v2219_8(void) = ConditionalBranch : r2219_7 +# 35| Block 733 +# 35| r35_10263(glval) = VariableAddress[x733] : +# 35| mu35_10264(String) = Uninitialized[x733] : &:r35_10263 +# 35| r35_10265(glval) = FunctionAddress[String] : +# 35| v35_10266(void) = Call[String] : func:r35_10265, this:r35_10263 +# 35| mu35_10267(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10263 +# 35| r35_10269(glval) = VariableAddress[x733] : +# 35| r35_10270(glval) = FunctionAddress[~String] : +# 35| v35_10271(void) = Call[~String] : func:r35_10270, this:r35_10269 +# 35| mu35_10272(unknown) = ^CallSideEffect : ~m? +# 35| v35_10273(void) = ^IndirectReadSideEffect[-1] : &:r35_10269, ~m? +# 35| mu35_10274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10269 +# 35| r35_10275(bool) = Constant[0] : +# 35| v35_10276(void) = ConditionalBranch : r35_10275 #-----| False -> Block 734 #-----| True -> Block 1026 -# 2221| Block 734 -# 2221| r2221_1(glval) = VariableAddress[x734] : -# 2221| mu2221_2(String) = Uninitialized[x734] : &:r2221_1 -# 2221| r2221_3(glval) = FunctionAddress[String] : -# 2221| v2221_4(void) = Call[String] : func:r2221_3, this:r2221_1 -# 2221| mu2221_5(unknown) = ^CallSideEffect : ~m? -# 2221| mu2221_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2221_1 -# 2222| r2222_1(glval) = VariableAddress[x734] : -# 2222| r2222_2(glval) = FunctionAddress[~String] : -# 2222| v2222_3(void) = Call[~String] : func:r2222_2, this:r2222_1 -# 2222| mu2222_4(unknown) = ^CallSideEffect : ~m? -# 2222| v2222_5(void) = ^IndirectReadSideEffect[-1] : &:r2222_1, ~m? -# 2222| mu2222_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2222| r2222_7(bool) = Constant[0] : -# 2222| v2222_8(void) = ConditionalBranch : r2222_7 +# 35| Block 734 +# 35| r35_10277(glval) = VariableAddress[x734] : +# 35| mu35_10278(String) = Uninitialized[x734] : &:r35_10277 +# 35| r35_10279(glval) = FunctionAddress[String] : +# 35| v35_10280(void) = Call[String] : func:r35_10279, this:r35_10277 +# 35| mu35_10281(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10277 +# 35| r35_10283(glval) = VariableAddress[x734] : +# 35| r35_10284(glval) = FunctionAddress[~String] : +# 35| v35_10285(void) = Call[~String] : func:r35_10284, this:r35_10283 +# 35| mu35_10286(unknown) = ^CallSideEffect : ~m? +# 35| v35_10287(void) = ^IndirectReadSideEffect[-1] : &:r35_10283, ~m? +# 35| mu35_10288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10283 +# 35| r35_10289(bool) = Constant[0] : +# 35| v35_10290(void) = ConditionalBranch : r35_10289 #-----| False -> Block 735 #-----| True -> Block 1026 -# 2224| Block 735 -# 2224| r2224_1(glval) = VariableAddress[x735] : -# 2224| mu2224_2(String) = Uninitialized[x735] : &:r2224_1 -# 2224| r2224_3(glval) = FunctionAddress[String] : -# 2224| v2224_4(void) = Call[String] : func:r2224_3, this:r2224_1 -# 2224| mu2224_5(unknown) = ^CallSideEffect : ~m? -# 2224| mu2224_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 -# 2225| r2225_1(glval) = VariableAddress[x735] : -# 2225| r2225_2(glval) = FunctionAddress[~String] : -# 2225| v2225_3(void) = Call[~String] : func:r2225_2, this:r2225_1 -# 2225| mu2225_4(unknown) = ^CallSideEffect : ~m? -# 2225| v2225_5(void) = ^IndirectReadSideEffect[-1] : &:r2225_1, ~m? -# 2225| mu2225_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2225_1 -# 2225| r2225_7(bool) = Constant[0] : -# 2225| v2225_8(void) = ConditionalBranch : r2225_7 +# 35| Block 735 +# 35| r35_10291(glval) = VariableAddress[x735] : +# 35| mu35_10292(String) = Uninitialized[x735] : &:r35_10291 +# 35| r35_10293(glval) = FunctionAddress[String] : +# 35| v35_10294(void) = Call[String] : func:r35_10293, this:r35_10291 +# 35| mu35_10295(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10291 +# 35| r35_10297(glval) = VariableAddress[x735] : +# 35| r35_10298(glval) = FunctionAddress[~String] : +# 35| v35_10299(void) = Call[~String] : func:r35_10298, this:r35_10297 +# 35| mu35_10300(unknown) = ^CallSideEffect : ~m? +# 35| v35_10301(void) = ^IndirectReadSideEffect[-1] : &:r35_10297, ~m? +# 35| mu35_10302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10297 +# 35| r35_10303(bool) = Constant[0] : +# 35| v35_10304(void) = ConditionalBranch : r35_10303 #-----| False -> Block 736 #-----| True -> Block 1026 -# 2227| Block 736 -# 2227| r2227_1(glval) = VariableAddress[x736] : -# 2227| mu2227_2(String) = Uninitialized[x736] : &:r2227_1 -# 2227| r2227_3(glval) = FunctionAddress[String] : -# 2227| v2227_4(void) = Call[String] : func:r2227_3, this:r2227_1 -# 2227| mu2227_5(unknown) = ^CallSideEffect : ~m? -# 2227| mu2227_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2227_1 -# 2228| r2228_1(glval) = VariableAddress[x736] : -# 2228| r2228_2(glval) = FunctionAddress[~String] : -# 2228| v2228_3(void) = Call[~String] : func:r2228_2, this:r2228_1 -# 2228| mu2228_4(unknown) = ^CallSideEffect : ~m? -# 2228| v2228_5(void) = ^IndirectReadSideEffect[-1] : &:r2228_1, ~m? -# 2228| mu2228_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2228_1 -# 2228| r2228_7(bool) = Constant[0] : -# 2228| v2228_8(void) = ConditionalBranch : r2228_7 +# 35| Block 736 +# 35| r35_10305(glval) = VariableAddress[x736] : +# 35| mu35_10306(String) = Uninitialized[x736] : &:r35_10305 +# 35| r35_10307(glval) = FunctionAddress[String] : +# 35| v35_10308(void) = Call[String] : func:r35_10307, this:r35_10305 +# 35| mu35_10309(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10305 +# 35| r35_10311(glval) = VariableAddress[x736] : +# 35| r35_10312(glval) = FunctionAddress[~String] : +# 35| v35_10313(void) = Call[~String] : func:r35_10312, this:r35_10311 +# 35| mu35_10314(unknown) = ^CallSideEffect : ~m? +# 35| v35_10315(void) = ^IndirectReadSideEffect[-1] : &:r35_10311, ~m? +# 35| mu35_10316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10311 +# 35| r35_10317(bool) = Constant[0] : +# 35| v35_10318(void) = ConditionalBranch : r35_10317 #-----| False -> Block 737 #-----| True -> Block 1026 -# 2230| Block 737 -# 2230| r2230_1(glval) = VariableAddress[x737] : -# 2230| mu2230_2(String) = Uninitialized[x737] : &:r2230_1 -# 2230| r2230_3(glval) = FunctionAddress[String] : -# 2230| v2230_4(void) = Call[String] : func:r2230_3, this:r2230_1 -# 2230| mu2230_5(unknown) = ^CallSideEffect : ~m? -# 2230| mu2230_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 -# 2231| r2231_1(glval) = VariableAddress[x737] : -# 2231| r2231_2(glval) = FunctionAddress[~String] : -# 2231| v2231_3(void) = Call[~String] : func:r2231_2, this:r2231_1 -# 2231| mu2231_4(unknown) = ^CallSideEffect : ~m? -# 2231| v2231_5(void) = ^IndirectReadSideEffect[-1] : &:r2231_1, ~m? -# 2231| mu2231_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 -# 2231| r2231_7(bool) = Constant[0] : -# 2231| v2231_8(void) = ConditionalBranch : r2231_7 +# 35| Block 737 +# 35| r35_10319(glval) = VariableAddress[x737] : +# 35| mu35_10320(String) = Uninitialized[x737] : &:r35_10319 +# 35| r35_10321(glval) = FunctionAddress[String] : +# 35| v35_10322(void) = Call[String] : func:r35_10321, this:r35_10319 +# 35| mu35_10323(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10319 +# 35| r35_10325(glval) = VariableAddress[x737] : +# 35| r35_10326(glval) = FunctionAddress[~String] : +# 35| v35_10327(void) = Call[~String] : func:r35_10326, this:r35_10325 +# 35| mu35_10328(unknown) = ^CallSideEffect : ~m? +# 35| v35_10329(void) = ^IndirectReadSideEffect[-1] : &:r35_10325, ~m? +# 35| mu35_10330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10325 +# 35| r35_10331(bool) = Constant[0] : +# 35| v35_10332(void) = ConditionalBranch : r35_10331 #-----| False -> Block 738 #-----| True -> Block 1026 -# 2233| Block 738 -# 2233| r2233_1(glval) = VariableAddress[x738] : -# 2233| mu2233_2(String) = Uninitialized[x738] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[String] : -# 2233| v2233_4(void) = Call[String] : func:r2233_3, this:r2233_1 -# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? -# 2233| mu2233_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2234| r2234_1(glval) = VariableAddress[x738] : -# 2234| r2234_2(glval) = FunctionAddress[~String] : -# 2234| v2234_3(void) = Call[~String] : func:r2234_2, this:r2234_1 -# 2234| mu2234_4(unknown) = ^CallSideEffect : ~m? -# 2234| v2234_5(void) = ^IndirectReadSideEffect[-1] : &:r2234_1, ~m? -# 2234| mu2234_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 -# 2234| r2234_7(bool) = Constant[0] : -# 2234| v2234_8(void) = ConditionalBranch : r2234_7 +# 35| Block 738 +# 35| r35_10333(glval) = VariableAddress[x738] : +# 35| mu35_10334(String) = Uninitialized[x738] : &:r35_10333 +# 35| r35_10335(glval) = FunctionAddress[String] : +# 35| v35_10336(void) = Call[String] : func:r35_10335, this:r35_10333 +# 35| mu35_10337(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10333 +# 35| r35_10339(glval) = VariableAddress[x738] : +# 35| r35_10340(glval) = FunctionAddress[~String] : +# 35| v35_10341(void) = Call[~String] : func:r35_10340, this:r35_10339 +# 35| mu35_10342(unknown) = ^CallSideEffect : ~m? +# 35| v35_10343(void) = ^IndirectReadSideEffect[-1] : &:r35_10339, ~m? +# 35| mu35_10344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10339 +# 35| r35_10345(bool) = Constant[0] : +# 35| v35_10346(void) = ConditionalBranch : r35_10345 #-----| False -> Block 739 #-----| True -> Block 1026 -# 2236| Block 739 -# 2236| r2236_1(glval) = VariableAddress[x739] : -# 2236| mu2236_2(String) = Uninitialized[x739] : &:r2236_1 -# 2236| r2236_3(glval) = FunctionAddress[String] : -# 2236| v2236_4(void) = Call[String] : func:r2236_3, this:r2236_1 -# 2236| mu2236_5(unknown) = ^CallSideEffect : ~m? -# 2236| mu2236_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 -# 2237| r2237_1(glval) = VariableAddress[x739] : -# 2237| r2237_2(glval) = FunctionAddress[~String] : -# 2237| v2237_3(void) = Call[~String] : func:r2237_2, this:r2237_1 -# 2237| mu2237_4(unknown) = ^CallSideEffect : ~m? -# 2237| v2237_5(void) = ^IndirectReadSideEffect[-1] : &:r2237_1, ~m? -# 2237| mu2237_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2237_1 -# 2237| r2237_7(bool) = Constant[0] : -# 2237| v2237_8(void) = ConditionalBranch : r2237_7 +# 35| Block 739 +# 35| r35_10347(glval) = VariableAddress[x739] : +# 35| mu35_10348(String) = Uninitialized[x739] : &:r35_10347 +# 35| r35_10349(glval) = FunctionAddress[String] : +# 35| v35_10350(void) = Call[String] : func:r35_10349, this:r35_10347 +# 35| mu35_10351(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10347 +# 35| r35_10353(glval) = VariableAddress[x739] : +# 35| r35_10354(glval) = FunctionAddress[~String] : +# 35| v35_10355(void) = Call[~String] : func:r35_10354, this:r35_10353 +# 35| mu35_10356(unknown) = ^CallSideEffect : ~m? +# 35| v35_10357(void) = ^IndirectReadSideEffect[-1] : &:r35_10353, ~m? +# 35| mu35_10358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10353 +# 35| r35_10359(bool) = Constant[0] : +# 35| v35_10360(void) = ConditionalBranch : r35_10359 #-----| False -> Block 740 #-----| True -> Block 1026 -# 2239| Block 740 -# 2239| r2239_1(glval) = VariableAddress[x740] : -# 2239| mu2239_2(String) = Uninitialized[x740] : &:r2239_1 -# 2239| r2239_3(glval) = FunctionAddress[String] : -# 2239| v2239_4(void) = Call[String] : func:r2239_3, this:r2239_1 -# 2239| mu2239_5(unknown) = ^CallSideEffect : ~m? -# 2239| mu2239_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2239_1 -# 2240| r2240_1(glval) = VariableAddress[x740] : -# 2240| r2240_2(glval) = FunctionAddress[~String] : -# 2240| v2240_3(void) = Call[~String] : func:r2240_2, this:r2240_1 -# 2240| mu2240_4(unknown) = ^CallSideEffect : ~m? -# 2240| v2240_5(void) = ^IndirectReadSideEffect[-1] : &:r2240_1, ~m? -# 2240| mu2240_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2240_1 -# 2240| r2240_7(bool) = Constant[0] : -# 2240| v2240_8(void) = ConditionalBranch : r2240_7 +# 35| Block 740 +# 35| r35_10361(glval) = VariableAddress[x740] : +# 35| mu35_10362(String) = Uninitialized[x740] : &:r35_10361 +# 35| r35_10363(glval) = FunctionAddress[String] : +# 35| v35_10364(void) = Call[String] : func:r35_10363, this:r35_10361 +# 35| mu35_10365(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10361 +# 35| r35_10367(glval) = VariableAddress[x740] : +# 35| r35_10368(glval) = FunctionAddress[~String] : +# 35| v35_10369(void) = Call[~String] : func:r35_10368, this:r35_10367 +# 35| mu35_10370(unknown) = ^CallSideEffect : ~m? +# 35| v35_10371(void) = ^IndirectReadSideEffect[-1] : &:r35_10367, ~m? +# 35| mu35_10372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10367 +# 35| r35_10373(bool) = Constant[0] : +# 35| v35_10374(void) = ConditionalBranch : r35_10373 #-----| False -> Block 741 #-----| True -> Block 1026 -# 2242| Block 741 -# 2242| r2242_1(glval) = VariableAddress[x741] : -# 2242| mu2242_2(String) = Uninitialized[x741] : &:r2242_1 -# 2242| r2242_3(glval) = FunctionAddress[String] : -# 2242| v2242_4(void) = Call[String] : func:r2242_3, this:r2242_1 -# 2242| mu2242_5(unknown) = ^CallSideEffect : ~m? -# 2242| mu2242_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 -# 2243| r2243_1(glval) = VariableAddress[x741] : -# 2243| r2243_2(glval) = FunctionAddress[~String] : -# 2243| v2243_3(void) = Call[~String] : func:r2243_2, this:r2243_1 -# 2243| mu2243_4(unknown) = ^CallSideEffect : ~m? -# 2243| v2243_5(void) = ^IndirectReadSideEffect[-1] : &:r2243_1, ~m? -# 2243| mu2243_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2243_1 -# 2243| r2243_7(bool) = Constant[0] : -# 2243| v2243_8(void) = ConditionalBranch : r2243_7 +# 35| Block 741 +# 35| r35_10375(glval) = VariableAddress[x741] : +# 35| mu35_10376(String) = Uninitialized[x741] : &:r35_10375 +# 35| r35_10377(glval) = FunctionAddress[String] : +# 35| v35_10378(void) = Call[String] : func:r35_10377, this:r35_10375 +# 35| mu35_10379(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10375 +# 35| r35_10381(glval) = VariableAddress[x741] : +# 35| r35_10382(glval) = FunctionAddress[~String] : +# 35| v35_10383(void) = Call[~String] : func:r35_10382, this:r35_10381 +# 35| mu35_10384(unknown) = ^CallSideEffect : ~m? +# 35| v35_10385(void) = ^IndirectReadSideEffect[-1] : &:r35_10381, ~m? +# 35| mu35_10386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10381 +# 35| r35_10387(bool) = Constant[0] : +# 35| v35_10388(void) = ConditionalBranch : r35_10387 #-----| False -> Block 742 #-----| True -> Block 1026 -# 2245| Block 742 -# 2245| r2245_1(glval) = VariableAddress[x742] : -# 2245| mu2245_2(String) = Uninitialized[x742] : &:r2245_1 -# 2245| r2245_3(glval) = FunctionAddress[String] : -# 2245| v2245_4(void) = Call[String] : func:r2245_3, this:r2245_1 -# 2245| mu2245_5(unknown) = ^CallSideEffect : ~m? -# 2245| mu2245_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2245_1 -# 2246| r2246_1(glval) = VariableAddress[x742] : -# 2246| r2246_2(glval) = FunctionAddress[~String] : -# 2246| v2246_3(void) = Call[~String] : func:r2246_2, this:r2246_1 -# 2246| mu2246_4(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_5(void) = ^IndirectReadSideEffect[-1] : &:r2246_1, ~m? -# 2246| mu2246_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 -# 2246| r2246_7(bool) = Constant[0] : -# 2246| v2246_8(void) = ConditionalBranch : r2246_7 +# 35| Block 742 +# 35| r35_10389(glval) = VariableAddress[x742] : +# 35| mu35_10390(String) = Uninitialized[x742] : &:r35_10389 +# 35| r35_10391(glval) = FunctionAddress[String] : +# 35| v35_10392(void) = Call[String] : func:r35_10391, this:r35_10389 +# 35| mu35_10393(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10389 +# 35| r35_10395(glval) = VariableAddress[x742] : +# 35| r35_10396(glval) = FunctionAddress[~String] : +# 35| v35_10397(void) = Call[~String] : func:r35_10396, this:r35_10395 +# 35| mu35_10398(unknown) = ^CallSideEffect : ~m? +# 35| v35_10399(void) = ^IndirectReadSideEffect[-1] : &:r35_10395, ~m? +# 35| mu35_10400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10395 +# 35| r35_10401(bool) = Constant[0] : +# 35| v35_10402(void) = ConditionalBranch : r35_10401 #-----| False -> Block 743 #-----| True -> Block 1026 -# 2248| Block 743 -# 2248| r2248_1(glval) = VariableAddress[x743] : -# 2248| mu2248_2(String) = Uninitialized[x743] : &:r2248_1 -# 2248| r2248_3(glval) = FunctionAddress[String] : -# 2248| v2248_4(void) = Call[String] : func:r2248_3, this:r2248_1 -# 2248| mu2248_5(unknown) = ^CallSideEffect : ~m? -# 2248| mu2248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 -# 2249| r2249_1(glval) = VariableAddress[x743] : -# 2249| r2249_2(glval) = FunctionAddress[~String] : -# 2249| v2249_3(void) = Call[~String] : func:r2249_2, this:r2249_1 -# 2249| mu2249_4(unknown) = ^CallSideEffect : ~m? -# 2249| v2249_5(void) = ^IndirectReadSideEffect[-1] : &:r2249_1, ~m? -# 2249| mu2249_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2249| r2249_7(bool) = Constant[0] : -# 2249| v2249_8(void) = ConditionalBranch : r2249_7 +# 35| Block 743 +# 35| r35_10403(glval) = VariableAddress[x743] : +# 35| mu35_10404(String) = Uninitialized[x743] : &:r35_10403 +# 35| r35_10405(glval) = FunctionAddress[String] : +# 35| v35_10406(void) = Call[String] : func:r35_10405, this:r35_10403 +# 35| mu35_10407(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10403 +# 35| r35_10409(glval) = VariableAddress[x743] : +# 35| r35_10410(glval) = FunctionAddress[~String] : +# 35| v35_10411(void) = Call[~String] : func:r35_10410, this:r35_10409 +# 35| mu35_10412(unknown) = ^CallSideEffect : ~m? +# 35| v35_10413(void) = ^IndirectReadSideEffect[-1] : &:r35_10409, ~m? +# 35| mu35_10414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10409 +# 35| r35_10415(bool) = Constant[0] : +# 35| v35_10416(void) = ConditionalBranch : r35_10415 #-----| False -> Block 744 #-----| True -> Block 1026 -# 2251| Block 744 -# 2251| r2251_1(glval) = VariableAddress[x744] : -# 2251| mu2251_2(String) = Uninitialized[x744] : &:r2251_1 -# 2251| r2251_3(glval) = FunctionAddress[String] : -# 2251| v2251_4(void) = Call[String] : func:r2251_3, this:r2251_1 -# 2251| mu2251_5(unknown) = ^CallSideEffect : ~m? -# 2251| mu2251_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2251_1 -# 2252| r2252_1(glval) = VariableAddress[x744] : -# 2252| r2252_2(glval) = FunctionAddress[~String] : -# 2252| v2252_3(void) = Call[~String] : func:r2252_2, this:r2252_1 -# 2252| mu2252_4(unknown) = ^CallSideEffect : ~m? -# 2252| v2252_5(void) = ^IndirectReadSideEffect[-1] : &:r2252_1, ~m? -# 2252| mu2252_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2252_1 -# 2252| r2252_7(bool) = Constant[0] : -# 2252| v2252_8(void) = ConditionalBranch : r2252_7 +# 35| Block 744 +# 35| r35_10417(glval) = VariableAddress[x744] : +# 35| mu35_10418(String) = Uninitialized[x744] : &:r35_10417 +# 35| r35_10419(glval) = FunctionAddress[String] : +# 35| v35_10420(void) = Call[String] : func:r35_10419, this:r35_10417 +# 35| mu35_10421(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10417 +# 35| r35_10423(glval) = VariableAddress[x744] : +# 35| r35_10424(glval) = FunctionAddress[~String] : +# 35| v35_10425(void) = Call[~String] : func:r35_10424, this:r35_10423 +# 35| mu35_10426(unknown) = ^CallSideEffect : ~m? +# 35| v35_10427(void) = ^IndirectReadSideEffect[-1] : &:r35_10423, ~m? +# 35| mu35_10428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10423 +# 35| r35_10429(bool) = Constant[0] : +# 35| v35_10430(void) = ConditionalBranch : r35_10429 #-----| False -> Block 745 #-----| True -> Block 1026 -# 2254| Block 745 -# 2254| r2254_1(glval) = VariableAddress[x745] : -# 2254| mu2254_2(String) = Uninitialized[x745] : &:r2254_1 -# 2254| r2254_3(glval) = FunctionAddress[String] : -# 2254| v2254_4(void) = Call[String] : func:r2254_3, this:r2254_1 -# 2254| mu2254_5(unknown) = ^CallSideEffect : ~m? -# 2254| mu2254_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2254_1 -# 2255| r2255_1(glval) = VariableAddress[x745] : -# 2255| r2255_2(glval) = FunctionAddress[~String] : -# 2255| v2255_3(void) = Call[~String] : func:r2255_2, this:r2255_1 -# 2255| mu2255_4(unknown) = ^CallSideEffect : ~m? -# 2255| v2255_5(void) = ^IndirectReadSideEffect[-1] : &:r2255_1, ~m? -# 2255| mu2255_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2255_1 -# 2255| r2255_7(bool) = Constant[0] : -# 2255| v2255_8(void) = ConditionalBranch : r2255_7 +# 35| Block 745 +# 35| r35_10431(glval) = VariableAddress[x745] : +# 35| mu35_10432(String) = Uninitialized[x745] : &:r35_10431 +# 35| r35_10433(glval) = FunctionAddress[String] : +# 35| v35_10434(void) = Call[String] : func:r35_10433, this:r35_10431 +# 35| mu35_10435(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10431 +# 35| r35_10437(glval) = VariableAddress[x745] : +# 35| r35_10438(glval) = FunctionAddress[~String] : +# 35| v35_10439(void) = Call[~String] : func:r35_10438, this:r35_10437 +# 35| mu35_10440(unknown) = ^CallSideEffect : ~m? +# 35| v35_10441(void) = ^IndirectReadSideEffect[-1] : &:r35_10437, ~m? +# 35| mu35_10442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10437 +# 35| r35_10443(bool) = Constant[0] : +# 35| v35_10444(void) = ConditionalBranch : r35_10443 #-----| False -> Block 746 #-----| True -> Block 1026 -# 2257| Block 746 -# 2257| r2257_1(glval) = VariableAddress[x746] : -# 2257| mu2257_2(String) = Uninitialized[x746] : &:r2257_1 -# 2257| r2257_3(glval) = FunctionAddress[String] : -# 2257| v2257_4(void) = Call[String] : func:r2257_3, this:r2257_1 -# 2257| mu2257_5(unknown) = ^CallSideEffect : ~m? -# 2257| mu2257_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2257_1 -# 2258| r2258_1(glval) = VariableAddress[x746] : -# 2258| r2258_2(glval) = FunctionAddress[~String] : -# 2258| v2258_3(void) = Call[~String] : func:r2258_2, this:r2258_1 -# 2258| mu2258_4(unknown) = ^CallSideEffect : ~m? -# 2258| v2258_5(void) = ^IndirectReadSideEffect[-1] : &:r2258_1, ~m? -# 2258| mu2258_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2258_1 -# 2258| r2258_7(bool) = Constant[0] : -# 2258| v2258_8(void) = ConditionalBranch : r2258_7 +# 35| Block 746 +# 35| r35_10445(glval) = VariableAddress[x746] : +# 35| mu35_10446(String) = Uninitialized[x746] : &:r35_10445 +# 35| r35_10447(glval) = FunctionAddress[String] : +# 35| v35_10448(void) = Call[String] : func:r35_10447, this:r35_10445 +# 35| mu35_10449(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10445 +# 35| r35_10451(glval) = VariableAddress[x746] : +# 35| r35_10452(glval) = FunctionAddress[~String] : +# 35| v35_10453(void) = Call[~String] : func:r35_10452, this:r35_10451 +# 35| mu35_10454(unknown) = ^CallSideEffect : ~m? +# 35| v35_10455(void) = ^IndirectReadSideEffect[-1] : &:r35_10451, ~m? +# 35| mu35_10456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10451 +# 35| r35_10457(bool) = Constant[0] : +# 35| v35_10458(void) = ConditionalBranch : r35_10457 #-----| False -> Block 747 #-----| True -> Block 1026 -# 2260| Block 747 -# 2260| r2260_1(glval) = VariableAddress[x747] : -# 2260| mu2260_2(String) = Uninitialized[x747] : &:r2260_1 -# 2260| r2260_3(glval) = FunctionAddress[String] : -# 2260| v2260_4(void) = Call[String] : func:r2260_3, this:r2260_1 -# 2260| mu2260_5(unknown) = ^CallSideEffect : ~m? -# 2260| mu2260_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2260_1 -# 2261| r2261_1(glval) = VariableAddress[x747] : -# 2261| r2261_2(glval) = FunctionAddress[~String] : -# 2261| v2261_3(void) = Call[~String] : func:r2261_2, this:r2261_1 -# 2261| mu2261_4(unknown) = ^CallSideEffect : ~m? -# 2261| v2261_5(void) = ^IndirectReadSideEffect[-1] : &:r2261_1, ~m? -# 2261| mu2261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2261| r2261_7(bool) = Constant[0] : -# 2261| v2261_8(void) = ConditionalBranch : r2261_7 +# 35| Block 747 +# 35| r35_10459(glval) = VariableAddress[x747] : +# 35| mu35_10460(String) = Uninitialized[x747] : &:r35_10459 +# 35| r35_10461(glval) = FunctionAddress[String] : +# 35| v35_10462(void) = Call[String] : func:r35_10461, this:r35_10459 +# 35| mu35_10463(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10459 +# 35| r35_10465(glval) = VariableAddress[x747] : +# 35| r35_10466(glval) = FunctionAddress[~String] : +# 35| v35_10467(void) = Call[~String] : func:r35_10466, this:r35_10465 +# 35| mu35_10468(unknown) = ^CallSideEffect : ~m? +# 35| v35_10469(void) = ^IndirectReadSideEffect[-1] : &:r35_10465, ~m? +# 35| mu35_10470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10465 +# 35| r35_10471(bool) = Constant[0] : +# 35| v35_10472(void) = ConditionalBranch : r35_10471 #-----| False -> Block 748 #-----| True -> Block 1026 -# 2263| Block 748 -# 2263| r2263_1(glval) = VariableAddress[x748] : -# 2263| mu2263_2(String) = Uninitialized[x748] : &:r2263_1 -# 2263| r2263_3(glval) = FunctionAddress[String] : -# 2263| v2263_4(void) = Call[String] : func:r2263_3, this:r2263_1 -# 2263| mu2263_5(unknown) = ^CallSideEffect : ~m? -# 2263| mu2263_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 -# 2264| r2264_1(glval) = VariableAddress[x748] : -# 2264| r2264_2(glval) = FunctionAddress[~String] : -# 2264| v2264_3(void) = Call[~String] : func:r2264_2, this:r2264_1 -# 2264| mu2264_4(unknown) = ^CallSideEffect : ~m? -# 2264| v2264_5(void) = ^IndirectReadSideEffect[-1] : &:r2264_1, ~m? -# 2264| mu2264_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2264_1 -# 2264| r2264_7(bool) = Constant[0] : -# 2264| v2264_8(void) = ConditionalBranch : r2264_7 +# 35| Block 748 +# 35| r35_10473(glval) = VariableAddress[x748] : +# 35| mu35_10474(String) = Uninitialized[x748] : &:r35_10473 +# 35| r35_10475(glval) = FunctionAddress[String] : +# 35| v35_10476(void) = Call[String] : func:r35_10475, this:r35_10473 +# 35| mu35_10477(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10473 +# 35| r35_10479(glval) = VariableAddress[x748] : +# 35| r35_10480(glval) = FunctionAddress[~String] : +# 35| v35_10481(void) = Call[~String] : func:r35_10480, this:r35_10479 +# 35| mu35_10482(unknown) = ^CallSideEffect : ~m? +# 35| v35_10483(void) = ^IndirectReadSideEffect[-1] : &:r35_10479, ~m? +# 35| mu35_10484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10479 +# 35| r35_10485(bool) = Constant[0] : +# 35| v35_10486(void) = ConditionalBranch : r35_10485 #-----| False -> Block 749 #-----| True -> Block 1026 -# 2266| Block 749 -# 2266| r2266_1(glval) = VariableAddress[x749] : -# 2266| mu2266_2(String) = Uninitialized[x749] : &:r2266_1 -# 2266| r2266_3(glval) = FunctionAddress[String] : -# 2266| v2266_4(void) = Call[String] : func:r2266_3, this:r2266_1 -# 2266| mu2266_5(unknown) = ^CallSideEffect : ~m? -# 2266| mu2266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2267| r2267_1(glval) = VariableAddress[x749] : -# 2267| r2267_2(glval) = FunctionAddress[~String] : -# 2267| v2267_3(void) = Call[~String] : func:r2267_2, this:r2267_1 -# 2267| mu2267_4(unknown) = ^CallSideEffect : ~m? -# 2267| v2267_5(void) = ^IndirectReadSideEffect[-1] : &:r2267_1, ~m? -# 2267| mu2267_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2267_1 -# 2267| r2267_7(bool) = Constant[0] : -# 2267| v2267_8(void) = ConditionalBranch : r2267_7 +# 35| Block 749 +# 35| r35_10487(glval) = VariableAddress[x749] : +# 35| mu35_10488(String) = Uninitialized[x749] : &:r35_10487 +# 35| r35_10489(glval) = FunctionAddress[String] : +# 35| v35_10490(void) = Call[String] : func:r35_10489, this:r35_10487 +# 35| mu35_10491(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10487 +# 35| r35_10493(glval) = VariableAddress[x749] : +# 35| r35_10494(glval) = FunctionAddress[~String] : +# 35| v35_10495(void) = Call[~String] : func:r35_10494, this:r35_10493 +# 35| mu35_10496(unknown) = ^CallSideEffect : ~m? +# 35| v35_10497(void) = ^IndirectReadSideEffect[-1] : &:r35_10493, ~m? +# 35| mu35_10498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10493 +# 35| r35_10499(bool) = Constant[0] : +# 35| v35_10500(void) = ConditionalBranch : r35_10499 #-----| False -> Block 750 #-----| True -> Block 1026 -# 2269| Block 750 -# 2269| r2269_1(glval) = VariableAddress[x750] : -# 2269| mu2269_2(String) = Uninitialized[x750] : &:r2269_1 -# 2269| r2269_3(glval) = FunctionAddress[String] : -# 2269| v2269_4(void) = Call[String] : func:r2269_3, this:r2269_1 -# 2269| mu2269_5(unknown) = ^CallSideEffect : ~m? -# 2269| mu2269_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2269_1 -# 2270| r2270_1(glval) = VariableAddress[x750] : -# 2270| r2270_2(glval) = FunctionAddress[~String] : -# 2270| v2270_3(void) = Call[~String] : func:r2270_2, this:r2270_1 -# 2270| mu2270_4(unknown) = ^CallSideEffect : ~m? -# 2270| v2270_5(void) = ^IndirectReadSideEffect[-1] : &:r2270_1, ~m? -# 2270| mu2270_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2270_1 -# 2270| r2270_7(bool) = Constant[0] : -# 2270| v2270_8(void) = ConditionalBranch : r2270_7 +# 35| Block 750 +# 35| r35_10501(glval) = VariableAddress[x750] : +# 35| mu35_10502(String) = Uninitialized[x750] : &:r35_10501 +# 35| r35_10503(glval) = FunctionAddress[String] : +# 35| v35_10504(void) = Call[String] : func:r35_10503, this:r35_10501 +# 35| mu35_10505(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10501 +# 35| r35_10507(glval) = VariableAddress[x750] : +# 35| r35_10508(glval) = FunctionAddress[~String] : +# 35| v35_10509(void) = Call[~String] : func:r35_10508, this:r35_10507 +# 35| mu35_10510(unknown) = ^CallSideEffect : ~m? +# 35| v35_10511(void) = ^IndirectReadSideEffect[-1] : &:r35_10507, ~m? +# 35| mu35_10512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10507 +# 35| r35_10513(bool) = Constant[0] : +# 35| v35_10514(void) = ConditionalBranch : r35_10513 #-----| False -> Block 751 #-----| True -> Block 1026 -# 2272| Block 751 -# 2272| r2272_1(glval) = VariableAddress[x751] : -# 2272| mu2272_2(String) = Uninitialized[x751] : &:r2272_1 -# 2272| r2272_3(glval) = FunctionAddress[String] : -# 2272| v2272_4(void) = Call[String] : func:r2272_3, this:r2272_1 -# 2272| mu2272_5(unknown) = ^CallSideEffect : ~m? -# 2272| mu2272_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2272_1 -# 2273| r2273_1(glval) = VariableAddress[x751] : -# 2273| r2273_2(glval) = FunctionAddress[~String] : -# 2273| v2273_3(void) = Call[~String] : func:r2273_2, this:r2273_1 -# 2273| mu2273_4(unknown) = ^CallSideEffect : ~m? -# 2273| v2273_5(void) = ^IndirectReadSideEffect[-1] : &:r2273_1, ~m? -# 2273| mu2273_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2273_1 -# 2273| r2273_7(bool) = Constant[0] : -# 2273| v2273_8(void) = ConditionalBranch : r2273_7 +# 35| Block 751 +# 35| r35_10515(glval) = VariableAddress[x751] : +# 35| mu35_10516(String) = Uninitialized[x751] : &:r35_10515 +# 35| r35_10517(glval) = FunctionAddress[String] : +# 35| v35_10518(void) = Call[String] : func:r35_10517, this:r35_10515 +# 35| mu35_10519(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10515 +# 35| r35_10521(glval) = VariableAddress[x751] : +# 35| r35_10522(glval) = FunctionAddress[~String] : +# 35| v35_10523(void) = Call[~String] : func:r35_10522, this:r35_10521 +# 35| mu35_10524(unknown) = ^CallSideEffect : ~m? +# 35| v35_10525(void) = ^IndirectReadSideEffect[-1] : &:r35_10521, ~m? +# 35| mu35_10526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10521 +# 35| r35_10527(bool) = Constant[0] : +# 35| v35_10528(void) = ConditionalBranch : r35_10527 #-----| False -> Block 752 #-----| True -> Block 1026 -# 2275| Block 752 -# 2275| r2275_1(glval) = VariableAddress[x752] : -# 2275| mu2275_2(String) = Uninitialized[x752] : &: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[x752] : -# 2276| r2276_2(glval) = FunctionAddress[~String] : -# 2276| v2276_3(void) = Call[~String] : func:r2276_2, this:r2276_1 -# 2276| mu2276_4(unknown) = ^CallSideEffect : ~m? -# 2276| v2276_5(void) = ^IndirectReadSideEffect[-1] : &:r2276_1, ~m? -# 2276| mu2276_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2276_1 -# 2276| r2276_7(bool) = Constant[0] : -# 2276| v2276_8(void) = ConditionalBranch : r2276_7 +# 35| Block 752 +# 35| r35_10529(glval) = VariableAddress[x752] : +# 35| mu35_10530(String) = Uninitialized[x752] : &:r35_10529 +# 35| r35_10531(glval) = FunctionAddress[String] : +# 35| v35_10532(void) = Call[String] : func:r35_10531, this:r35_10529 +# 35| mu35_10533(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10529 +# 35| r35_10535(glval) = VariableAddress[x752] : +# 35| r35_10536(glval) = FunctionAddress[~String] : +# 35| v35_10537(void) = Call[~String] : func:r35_10536, this:r35_10535 +# 35| mu35_10538(unknown) = ^CallSideEffect : ~m? +# 35| v35_10539(void) = ^IndirectReadSideEffect[-1] : &:r35_10535, ~m? +# 35| mu35_10540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10535 +# 35| r35_10541(bool) = Constant[0] : +# 35| v35_10542(void) = ConditionalBranch : r35_10541 #-----| False -> Block 753 #-----| True -> Block 1026 -# 2278| Block 753 -# 2278| r2278_1(glval) = VariableAddress[x753] : -# 2278| mu2278_2(String) = Uninitialized[x753] : &: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[x753] : -# 2279| r2279_2(glval) = FunctionAddress[~String] : -# 2279| v2279_3(void) = Call[~String] : func:r2279_2, this:r2279_1 -# 2279| mu2279_4(unknown) = ^CallSideEffect : ~m? -# 2279| v2279_5(void) = ^IndirectReadSideEffect[-1] : &:r2279_1, ~m? -# 2279| mu2279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 -# 2279| r2279_7(bool) = Constant[0] : -# 2279| v2279_8(void) = ConditionalBranch : r2279_7 +# 35| Block 753 +# 35| r35_10543(glval) = VariableAddress[x753] : +# 35| mu35_10544(String) = Uninitialized[x753] : &:r35_10543 +# 35| r35_10545(glval) = FunctionAddress[String] : +# 35| v35_10546(void) = Call[String] : func:r35_10545, this:r35_10543 +# 35| mu35_10547(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10543 +# 35| r35_10549(glval) = VariableAddress[x753] : +# 35| r35_10550(glval) = FunctionAddress[~String] : +# 35| v35_10551(void) = Call[~String] : func:r35_10550, this:r35_10549 +# 35| mu35_10552(unknown) = ^CallSideEffect : ~m? +# 35| v35_10553(void) = ^IndirectReadSideEffect[-1] : &:r35_10549, ~m? +# 35| mu35_10554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10549 +# 35| r35_10555(bool) = Constant[0] : +# 35| v35_10556(void) = ConditionalBranch : r35_10555 #-----| False -> Block 754 #-----| True -> Block 1026 -# 2281| Block 754 -# 2281| r2281_1(glval) = VariableAddress[x754] : -# 2281| mu2281_2(String) = Uninitialized[x754] : &:r2281_1 -# 2281| r2281_3(glval) = FunctionAddress[String] : -# 2281| v2281_4(void) = Call[String] : func:r2281_3, this:r2281_1 -# 2281| mu2281_5(unknown) = ^CallSideEffect : ~m? -# 2281| mu2281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 -# 2282| r2282_1(glval) = VariableAddress[x754] : -# 2282| r2282_2(glval) = FunctionAddress[~String] : -# 2282| v2282_3(void) = Call[~String] : func:r2282_2, this:r2282_1 -# 2282| mu2282_4(unknown) = ^CallSideEffect : ~m? -# 2282| v2282_5(void) = ^IndirectReadSideEffect[-1] : &:r2282_1, ~m? -# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2282| r2282_7(bool) = Constant[0] : -# 2282| v2282_8(void) = ConditionalBranch : r2282_7 +# 35| Block 754 +# 35| r35_10557(glval) = VariableAddress[x754] : +# 35| mu35_10558(String) = Uninitialized[x754] : &:r35_10557 +# 35| r35_10559(glval) = FunctionAddress[String] : +# 35| v35_10560(void) = Call[String] : func:r35_10559, this:r35_10557 +# 35| mu35_10561(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10557 +# 35| r35_10563(glval) = VariableAddress[x754] : +# 35| r35_10564(glval) = FunctionAddress[~String] : +# 35| v35_10565(void) = Call[~String] : func:r35_10564, this:r35_10563 +# 35| mu35_10566(unknown) = ^CallSideEffect : ~m? +# 35| v35_10567(void) = ^IndirectReadSideEffect[-1] : &:r35_10563, ~m? +# 35| mu35_10568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10563 +# 35| r35_10569(bool) = Constant[0] : +# 35| v35_10570(void) = ConditionalBranch : r35_10569 #-----| False -> Block 755 #-----| True -> Block 1026 -# 2284| Block 755 -# 2284| r2284_1(glval) = VariableAddress[x755] : -# 2284| mu2284_2(String) = Uninitialized[x755] : &: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| r2285_1(glval) = VariableAddress[x755] : -# 2285| r2285_2(glval) = FunctionAddress[~String] : -# 2285| v2285_3(void) = Call[~String] : func:r2285_2, this:r2285_1 -# 2285| mu2285_4(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_5(void) = ^IndirectReadSideEffect[-1] : &:r2285_1, ~m? -# 2285| mu2285_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_1 -# 2285| r2285_7(bool) = Constant[0] : -# 2285| v2285_8(void) = ConditionalBranch : r2285_7 +# 35| Block 755 +# 35| r35_10571(glval) = VariableAddress[x755] : +# 35| mu35_10572(String) = Uninitialized[x755] : &:r35_10571 +# 35| r35_10573(glval) = FunctionAddress[String] : +# 35| v35_10574(void) = Call[String] : func:r35_10573, this:r35_10571 +# 35| mu35_10575(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10571 +# 35| r35_10577(glval) = VariableAddress[x755] : +# 35| r35_10578(glval) = FunctionAddress[~String] : +# 35| v35_10579(void) = Call[~String] : func:r35_10578, this:r35_10577 +# 35| mu35_10580(unknown) = ^CallSideEffect : ~m? +# 35| v35_10581(void) = ^IndirectReadSideEffect[-1] : &:r35_10577, ~m? +# 35| mu35_10582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10577 +# 35| r35_10583(bool) = Constant[0] : +# 35| v35_10584(void) = ConditionalBranch : r35_10583 #-----| False -> Block 756 #-----| True -> Block 1026 -# 2287| Block 756 -# 2287| r2287_1(glval) = VariableAddress[x756] : -# 2287| mu2287_2(String) = Uninitialized[x756] : &:r2287_1 -# 2287| r2287_3(glval) = FunctionAddress[String] : -# 2287| v2287_4(void) = Call[String] : func:r2287_3, this:r2287_1 -# 2287| mu2287_5(unknown) = ^CallSideEffect : ~m? -# 2287| mu2287_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2287_1 -# 2288| r2288_1(glval) = VariableAddress[x756] : -# 2288| r2288_2(glval) = FunctionAddress[~String] : -# 2288| v2288_3(void) = Call[~String] : func:r2288_2, this:r2288_1 -# 2288| mu2288_4(unknown) = ^CallSideEffect : ~m? -# 2288| v2288_5(void) = ^IndirectReadSideEffect[-1] : &:r2288_1, ~m? -# 2288| mu2288_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2288_1 -# 2288| r2288_7(bool) = Constant[0] : -# 2288| v2288_8(void) = ConditionalBranch : r2288_7 +# 35| Block 756 +# 35| r35_10585(glval) = VariableAddress[x756] : +# 35| mu35_10586(String) = Uninitialized[x756] : &:r35_10585 +# 35| r35_10587(glval) = FunctionAddress[String] : +# 35| v35_10588(void) = Call[String] : func:r35_10587, this:r35_10585 +# 35| mu35_10589(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10585 +# 35| r35_10591(glval) = VariableAddress[x756] : +# 35| r35_10592(glval) = FunctionAddress[~String] : +# 35| v35_10593(void) = Call[~String] : func:r35_10592, this:r35_10591 +# 35| mu35_10594(unknown) = ^CallSideEffect : ~m? +# 35| v35_10595(void) = ^IndirectReadSideEffect[-1] : &:r35_10591, ~m? +# 35| mu35_10596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10591 +# 35| r35_10597(bool) = Constant[0] : +# 35| v35_10598(void) = ConditionalBranch : r35_10597 #-----| False -> Block 757 #-----| True -> Block 1026 -# 2290| Block 757 -# 2290| r2290_1(glval) = VariableAddress[x757] : -# 2290| mu2290_2(String) = Uninitialized[x757] : &: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[x757] : -# 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 -# 2291| r2291_7(bool) = Constant[0] : -# 2291| v2291_8(void) = ConditionalBranch : r2291_7 +# 35| Block 757 +# 35| r35_10599(glval) = VariableAddress[x757] : +# 35| mu35_10600(String) = Uninitialized[x757] : &:r35_10599 +# 35| r35_10601(glval) = FunctionAddress[String] : +# 35| v35_10602(void) = Call[String] : func:r35_10601, this:r35_10599 +# 35| mu35_10603(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10599 +# 35| r35_10605(glval) = VariableAddress[x757] : +# 35| r35_10606(glval) = FunctionAddress[~String] : +# 35| v35_10607(void) = Call[~String] : func:r35_10606, this:r35_10605 +# 35| mu35_10608(unknown) = ^CallSideEffect : ~m? +# 35| v35_10609(void) = ^IndirectReadSideEffect[-1] : &:r35_10605, ~m? +# 35| mu35_10610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10605 +# 35| r35_10611(bool) = Constant[0] : +# 35| v35_10612(void) = ConditionalBranch : r35_10611 #-----| False -> Block 758 #-----| True -> Block 1026 -# 2293| Block 758 -# 2293| r2293_1(glval) = VariableAddress[x758] : -# 2293| mu2293_2(String) = Uninitialized[x758] : &:r2293_1 -# 2293| r2293_3(glval) = FunctionAddress[String] : -# 2293| v2293_4(void) = Call[String] : func:r2293_3, this:r2293_1 -# 2293| mu2293_5(unknown) = ^CallSideEffect : ~m? -# 2293| mu2293_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_1 -# 2294| r2294_1(glval) = VariableAddress[x758] : -# 2294| r2294_2(glval) = FunctionAddress[~String] : -# 2294| v2294_3(void) = Call[~String] : func:r2294_2, this:r2294_1 -# 2294| mu2294_4(unknown) = ^CallSideEffect : ~m? -# 2294| v2294_5(void) = ^IndirectReadSideEffect[-1] : &:r2294_1, ~m? -# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2294| r2294_7(bool) = Constant[0] : -# 2294| v2294_8(void) = ConditionalBranch : r2294_7 +# 35| Block 758 +# 35| r35_10613(glval) = VariableAddress[x758] : +# 35| mu35_10614(String) = Uninitialized[x758] : &:r35_10613 +# 35| r35_10615(glval) = FunctionAddress[String] : +# 35| v35_10616(void) = Call[String] : func:r35_10615, this:r35_10613 +# 35| mu35_10617(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10613 +# 35| r35_10619(glval) = VariableAddress[x758] : +# 35| r35_10620(glval) = FunctionAddress[~String] : +# 35| v35_10621(void) = Call[~String] : func:r35_10620, this:r35_10619 +# 35| mu35_10622(unknown) = ^CallSideEffect : ~m? +# 35| v35_10623(void) = ^IndirectReadSideEffect[-1] : &:r35_10619, ~m? +# 35| mu35_10624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10619 +# 35| r35_10625(bool) = Constant[0] : +# 35| v35_10626(void) = ConditionalBranch : r35_10625 #-----| False -> Block 759 #-----| True -> Block 1026 -# 2296| Block 759 -# 2296| r2296_1(glval) = VariableAddress[x759] : -# 2296| mu2296_2(String) = Uninitialized[x759] : &: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[x759] : -# 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 -# 2297| r2297_7(bool) = Constant[0] : -# 2297| v2297_8(void) = ConditionalBranch : r2297_7 +# 35| Block 759 +# 35| r35_10627(glval) = VariableAddress[x759] : +# 35| mu35_10628(String) = Uninitialized[x759] : &:r35_10627 +# 35| r35_10629(glval) = FunctionAddress[String] : +# 35| v35_10630(void) = Call[String] : func:r35_10629, this:r35_10627 +# 35| mu35_10631(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10627 +# 35| r35_10633(glval) = VariableAddress[x759] : +# 35| r35_10634(glval) = FunctionAddress[~String] : +# 35| v35_10635(void) = Call[~String] : func:r35_10634, this:r35_10633 +# 35| mu35_10636(unknown) = ^CallSideEffect : ~m? +# 35| v35_10637(void) = ^IndirectReadSideEffect[-1] : &:r35_10633, ~m? +# 35| mu35_10638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10633 +# 35| r35_10639(bool) = Constant[0] : +# 35| v35_10640(void) = ConditionalBranch : r35_10639 #-----| False -> Block 760 #-----| True -> Block 1026 -# 2299| Block 760 -# 2299| r2299_1(glval) = VariableAddress[x760] : -# 2299| mu2299_2(String) = Uninitialized[x760] : &:r2299_1 -# 2299| r2299_3(glval) = FunctionAddress[String] : -# 2299| v2299_4(void) = Call[String] : func:r2299_3, this:r2299_1 -# 2299| mu2299_5(unknown) = ^CallSideEffect : ~m? -# 2299| mu2299_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_1 -# 2300| r2300_1(glval) = VariableAddress[x760] : -# 2300| r2300_2(glval) = FunctionAddress[~String] : -# 2300| v2300_3(void) = Call[~String] : func:r2300_2, this:r2300_1 -# 2300| mu2300_4(unknown) = ^CallSideEffect : ~m? -# 2300| v2300_5(void) = ^IndirectReadSideEffect[-1] : &:r2300_1, ~m? -# 2300| mu2300_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2300_1 -# 2300| r2300_7(bool) = Constant[0] : -# 2300| v2300_8(void) = ConditionalBranch : r2300_7 +# 35| Block 760 +# 35| r35_10641(glval) = VariableAddress[x760] : +# 35| mu35_10642(String) = Uninitialized[x760] : &:r35_10641 +# 35| r35_10643(glval) = FunctionAddress[String] : +# 35| v35_10644(void) = Call[String] : func:r35_10643, this:r35_10641 +# 35| mu35_10645(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10641 +# 35| r35_10647(glval) = VariableAddress[x760] : +# 35| r35_10648(glval) = FunctionAddress[~String] : +# 35| v35_10649(void) = Call[~String] : func:r35_10648, this:r35_10647 +# 35| mu35_10650(unknown) = ^CallSideEffect : ~m? +# 35| v35_10651(void) = ^IndirectReadSideEffect[-1] : &:r35_10647, ~m? +# 35| mu35_10652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10647 +# 35| r35_10653(bool) = Constant[0] : +# 35| v35_10654(void) = ConditionalBranch : r35_10653 #-----| False -> Block 761 #-----| True -> Block 1026 -# 2302| Block 761 -# 2302| r2302_1(glval) = VariableAddress[x761] : -# 2302| mu2302_2(String) = Uninitialized[x761] : &:r2302_1 -# 2302| r2302_3(glval) = FunctionAddress[String] : -# 2302| v2302_4(void) = Call[String] : func:r2302_3, this:r2302_1 -# 2302| mu2302_5(unknown) = ^CallSideEffect : ~m? -# 2302| mu2302_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_1 -# 2303| r2303_1(glval) = VariableAddress[x761] : -# 2303| r2303_2(glval) = FunctionAddress[~String] : -# 2303| v2303_3(void) = Call[~String] : func:r2303_2, this:r2303_1 -# 2303| mu2303_4(unknown) = ^CallSideEffect : ~m? -# 2303| v2303_5(void) = ^IndirectReadSideEffect[-1] : &:r2303_1, ~m? -# 2303| mu2303_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 -# 2303| r2303_7(bool) = Constant[0] : -# 2303| v2303_8(void) = ConditionalBranch : r2303_7 +# 35| Block 761 +# 35| r35_10655(glval) = VariableAddress[x761] : +# 35| mu35_10656(String) = Uninitialized[x761] : &:r35_10655 +# 35| r35_10657(glval) = FunctionAddress[String] : +# 35| v35_10658(void) = Call[String] : func:r35_10657, this:r35_10655 +# 35| mu35_10659(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10655 +# 35| r35_10661(glval) = VariableAddress[x761] : +# 35| r35_10662(glval) = FunctionAddress[~String] : +# 35| v35_10663(void) = Call[~String] : func:r35_10662, this:r35_10661 +# 35| mu35_10664(unknown) = ^CallSideEffect : ~m? +# 35| v35_10665(void) = ^IndirectReadSideEffect[-1] : &:r35_10661, ~m? +# 35| mu35_10666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10661 +# 35| r35_10667(bool) = Constant[0] : +# 35| v35_10668(void) = ConditionalBranch : r35_10667 #-----| False -> Block 762 #-----| True -> Block 1026 -# 2305| Block 762 -# 2305| r2305_1(glval) = VariableAddress[x762] : -# 2305| mu2305_2(String) = Uninitialized[x762] : &:r2305_1 -# 2305| r2305_3(glval) = FunctionAddress[String] : -# 2305| v2305_4(void) = Call[String] : func:r2305_3, this:r2305_1 -# 2305| mu2305_5(unknown) = ^CallSideEffect : ~m? -# 2305| mu2305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 -# 2306| r2306_1(glval) = VariableAddress[x762] : -# 2306| r2306_2(glval) = FunctionAddress[~String] : -# 2306| v2306_3(void) = Call[~String] : func:r2306_2, this:r2306_1 -# 2306| mu2306_4(unknown) = ^CallSideEffect : ~m? -# 2306| v2306_5(void) = ^IndirectReadSideEffect[-1] : &:r2306_1, ~m? -# 2306| mu2306_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_1 -# 2306| r2306_7(bool) = Constant[0] : -# 2306| v2306_8(void) = ConditionalBranch : r2306_7 +# 35| Block 762 +# 35| r35_10669(glval) = VariableAddress[x762] : +# 35| mu35_10670(String) = Uninitialized[x762] : &:r35_10669 +# 35| r35_10671(glval) = FunctionAddress[String] : +# 35| v35_10672(void) = Call[String] : func:r35_10671, this:r35_10669 +# 35| mu35_10673(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10669 +# 35| r35_10675(glval) = VariableAddress[x762] : +# 35| r35_10676(glval) = FunctionAddress[~String] : +# 35| v35_10677(void) = Call[~String] : func:r35_10676, this:r35_10675 +# 35| mu35_10678(unknown) = ^CallSideEffect : ~m? +# 35| v35_10679(void) = ^IndirectReadSideEffect[-1] : &:r35_10675, ~m? +# 35| mu35_10680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10675 +# 35| r35_10681(bool) = Constant[0] : +# 35| v35_10682(void) = ConditionalBranch : r35_10681 #-----| False -> Block 763 #-----| True -> Block 1026 -# 2308| Block 763 -# 2308| r2308_1(glval) = VariableAddress[x763] : -# 2308| mu2308_2(String) = Uninitialized[x763] : &: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[x763] : -# 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 -# 2309| r2309_7(bool) = Constant[0] : -# 2309| v2309_8(void) = ConditionalBranch : r2309_7 +# 35| Block 763 +# 35| r35_10683(glval) = VariableAddress[x763] : +# 35| mu35_10684(String) = Uninitialized[x763] : &:r35_10683 +# 35| r35_10685(glval) = FunctionAddress[String] : +# 35| v35_10686(void) = Call[String] : func:r35_10685, this:r35_10683 +# 35| mu35_10687(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10683 +# 35| r35_10689(glval) = VariableAddress[x763] : +# 35| r35_10690(glval) = FunctionAddress[~String] : +# 35| v35_10691(void) = Call[~String] : func:r35_10690, this:r35_10689 +# 35| mu35_10692(unknown) = ^CallSideEffect : ~m? +# 35| v35_10693(void) = ^IndirectReadSideEffect[-1] : &:r35_10689, ~m? +# 35| mu35_10694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10689 +# 35| r35_10695(bool) = Constant[0] : +# 35| v35_10696(void) = ConditionalBranch : r35_10695 #-----| False -> Block 764 #-----| True -> Block 1026 -# 2311| Block 764 -# 2311| r2311_1(glval) = VariableAddress[x764] : -# 2311| mu2311_2(String) = Uninitialized[x764] : &:r2311_1 -# 2311| r2311_3(glval) = FunctionAddress[String] : -# 2311| v2311_4(void) = Call[String] : func:r2311_3, this:r2311_1 -# 2311| mu2311_5(unknown) = ^CallSideEffect : ~m? -# 2311| mu2311_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 -# 2312| r2312_1(glval) = VariableAddress[x764] : -# 2312| r2312_2(glval) = FunctionAddress[~String] : -# 2312| v2312_3(void) = Call[~String] : func:r2312_2, this:r2312_1 -# 2312| mu2312_4(unknown) = ^CallSideEffect : ~m? -# 2312| v2312_5(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, ~m? -# 2312| mu2312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 -# 2312| r2312_7(bool) = Constant[0] : -# 2312| v2312_8(void) = ConditionalBranch : r2312_7 +# 35| Block 764 +# 35| r35_10697(glval) = VariableAddress[x764] : +# 35| mu35_10698(String) = Uninitialized[x764] : &:r35_10697 +# 35| r35_10699(glval) = FunctionAddress[String] : +# 35| v35_10700(void) = Call[String] : func:r35_10699, this:r35_10697 +# 35| mu35_10701(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10697 +# 35| r35_10703(glval) = VariableAddress[x764] : +# 35| r35_10704(glval) = FunctionAddress[~String] : +# 35| v35_10705(void) = Call[~String] : func:r35_10704, this:r35_10703 +# 35| mu35_10706(unknown) = ^CallSideEffect : ~m? +# 35| v35_10707(void) = ^IndirectReadSideEffect[-1] : &:r35_10703, ~m? +# 35| mu35_10708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10703 +# 35| r35_10709(bool) = Constant[0] : +# 35| v35_10710(void) = ConditionalBranch : r35_10709 #-----| False -> Block 765 #-----| True -> Block 1026 -# 2314| Block 765 -# 2314| r2314_1(glval) = VariableAddress[x765] : -# 2314| mu2314_2(String) = Uninitialized[x765] : &:r2314_1 -# 2314| r2314_3(glval) = FunctionAddress[String] : -# 2314| v2314_4(void) = Call[String] : func:r2314_3, this:r2314_1 -# 2314| mu2314_5(unknown) = ^CallSideEffect : ~m? -# 2314| mu2314_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_1 -# 2315| r2315_1(glval) = VariableAddress[x765] : -# 2315| r2315_2(glval) = FunctionAddress[~String] : -# 2315| v2315_3(void) = Call[~String] : func:r2315_2, this:r2315_1 -# 2315| mu2315_4(unknown) = ^CallSideEffect : ~m? -# 2315| v2315_5(void) = ^IndirectReadSideEffect[-1] : &:r2315_1, ~m? -# 2315| mu2315_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2315_1 -# 2315| r2315_7(bool) = Constant[0] : -# 2315| v2315_8(void) = ConditionalBranch : r2315_7 +# 35| Block 765 +# 35| r35_10711(glval) = VariableAddress[x765] : +# 35| mu35_10712(String) = Uninitialized[x765] : &:r35_10711 +# 35| r35_10713(glval) = FunctionAddress[String] : +# 35| v35_10714(void) = Call[String] : func:r35_10713, this:r35_10711 +# 35| mu35_10715(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10711 +# 35| r35_10717(glval) = VariableAddress[x765] : +# 35| r35_10718(glval) = FunctionAddress[~String] : +# 35| v35_10719(void) = Call[~String] : func:r35_10718, this:r35_10717 +# 35| mu35_10720(unknown) = ^CallSideEffect : ~m? +# 35| v35_10721(void) = ^IndirectReadSideEffect[-1] : &:r35_10717, ~m? +# 35| mu35_10722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10717 +# 35| r35_10723(bool) = Constant[0] : +# 35| v35_10724(void) = ConditionalBranch : r35_10723 #-----| False -> Block 766 #-----| True -> Block 1026 -# 2317| Block 766 -# 2317| r2317_1(glval) = VariableAddress[x766] : -# 2317| mu2317_2(String) = Uninitialized[x766] : &:r2317_1 -# 2317| r2317_3(glval) = FunctionAddress[String] : -# 2317| v2317_4(void) = Call[String] : func:r2317_3, this:r2317_1 -# 2317| mu2317_5(unknown) = ^CallSideEffect : ~m? -# 2317| mu2317_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 -# 2318| r2318_1(glval) = VariableAddress[x766] : -# 2318| r2318_2(glval) = FunctionAddress[~String] : -# 2318| v2318_3(void) = Call[~String] : func:r2318_2, this:r2318_1 -# 2318| mu2318_4(unknown) = ^CallSideEffect : ~m? -# 2318| v2318_5(void) = ^IndirectReadSideEffect[-1] : &:r2318_1, ~m? -# 2318| mu2318_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| r2318_7(bool) = Constant[0] : -# 2318| v2318_8(void) = ConditionalBranch : r2318_7 +# 35| Block 766 +# 35| r35_10725(glval) = VariableAddress[x766] : +# 35| mu35_10726(String) = Uninitialized[x766] : &:r35_10725 +# 35| r35_10727(glval) = FunctionAddress[String] : +# 35| v35_10728(void) = Call[String] : func:r35_10727, this:r35_10725 +# 35| mu35_10729(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10725 +# 35| r35_10731(glval) = VariableAddress[x766] : +# 35| r35_10732(glval) = FunctionAddress[~String] : +# 35| v35_10733(void) = Call[~String] : func:r35_10732, this:r35_10731 +# 35| mu35_10734(unknown) = ^CallSideEffect : ~m? +# 35| v35_10735(void) = ^IndirectReadSideEffect[-1] : &:r35_10731, ~m? +# 35| mu35_10736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10731 +# 35| r35_10737(bool) = Constant[0] : +# 35| v35_10738(void) = ConditionalBranch : r35_10737 #-----| False -> Block 767 #-----| True -> Block 1026 -# 2320| Block 767 -# 2320| r2320_1(glval) = VariableAddress[x767] : -# 2320| mu2320_2(String) = Uninitialized[x767] : &:r2320_1 -# 2320| r2320_3(glval) = FunctionAddress[String] : -# 2320| v2320_4(void) = Call[String] : func:r2320_3, this:r2320_1 -# 2320| mu2320_5(unknown) = ^CallSideEffect : ~m? -# 2320| mu2320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -# 2321| r2321_1(glval) = VariableAddress[x767] : -# 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 -# 2321| r2321_7(bool) = Constant[0] : -# 2321| v2321_8(void) = ConditionalBranch : r2321_7 +# 35| Block 767 +# 35| r35_10739(glval) = VariableAddress[x767] : +# 35| mu35_10740(String) = Uninitialized[x767] : &:r35_10739 +# 35| r35_10741(glval) = FunctionAddress[String] : +# 35| v35_10742(void) = Call[String] : func:r35_10741, this:r35_10739 +# 35| mu35_10743(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10739 +# 35| r35_10745(glval) = VariableAddress[x767] : +# 35| r35_10746(glval) = FunctionAddress[~String] : +# 35| v35_10747(void) = Call[~String] : func:r35_10746, this:r35_10745 +# 35| mu35_10748(unknown) = ^CallSideEffect : ~m? +# 35| v35_10749(void) = ^IndirectReadSideEffect[-1] : &:r35_10745, ~m? +# 35| mu35_10750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10745 +# 35| r35_10751(bool) = Constant[0] : +# 35| v35_10752(void) = ConditionalBranch : r35_10751 #-----| False -> Block 768 #-----| True -> Block 1026 -# 2323| Block 768 -# 2323| r2323_1(glval) = VariableAddress[x768] : -# 2323| mu2323_2(String) = Uninitialized[x768] : &:r2323_1 -# 2323| r2323_3(glval) = FunctionAddress[String] : -# 2323| v2323_4(void) = Call[String] : func:r2323_3, this:r2323_1 -# 2323| mu2323_5(unknown) = ^CallSideEffect : ~m? -# 2323| mu2323_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2323_1 -# 2324| r2324_1(glval) = VariableAddress[x768] : -# 2324| r2324_2(glval) = FunctionAddress[~String] : -# 2324| v2324_3(void) = Call[~String] : func:r2324_2, this:r2324_1 -# 2324| mu2324_4(unknown) = ^CallSideEffect : ~m? -# 2324| v2324_5(void) = ^IndirectReadSideEffect[-1] : &:r2324_1, ~m? -# 2324| mu2324_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2324_1 -# 2324| r2324_7(bool) = Constant[0] : -# 2324| v2324_8(void) = ConditionalBranch : r2324_7 +# 35| Block 768 +# 35| r35_10753(glval) = VariableAddress[x768] : +# 35| mu35_10754(String) = Uninitialized[x768] : &:r35_10753 +# 35| r35_10755(glval) = FunctionAddress[String] : +# 35| v35_10756(void) = Call[String] : func:r35_10755, this:r35_10753 +# 35| mu35_10757(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10753 +# 35| r35_10759(glval) = VariableAddress[x768] : +# 35| r35_10760(glval) = FunctionAddress[~String] : +# 35| v35_10761(void) = Call[~String] : func:r35_10760, this:r35_10759 +# 35| mu35_10762(unknown) = ^CallSideEffect : ~m? +# 35| v35_10763(void) = ^IndirectReadSideEffect[-1] : &:r35_10759, ~m? +# 35| mu35_10764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10759 +# 35| r35_10765(bool) = Constant[0] : +# 35| v35_10766(void) = ConditionalBranch : r35_10765 #-----| False -> Block 769 #-----| True -> Block 1026 -# 2326| Block 769 -# 2326| r2326_1(glval) = VariableAddress[x769] : -# 2326| mu2326_2(String) = Uninitialized[x769] : &:r2326_1 -# 2326| r2326_3(glval) = FunctionAddress[String] : -# 2326| v2326_4(void) = Call[String] : func:r2326_3, this:r2326_1 -# 2326| mu2326_5(unknown) = ^CallSideEffect : ~m? -# 2326| mu2326_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2326_1 -# 2327| r2327_1(glval) = VariableAddress[x769] : -# 2327| r2327_2(glval) = FunctionAddress[~String] : -# 2327| v2327_3(void) = Call[~String] : func:r2327_2, this:r2327_1 -# 2327| mu2327_4(unknown) = ^CallSideEffect : ~m? -# 2327| v2327_5(void) = ^IndirectReadSideEffect[-1] : &:r2327_1, ~m? -# 2327| mu2327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 -# 2327| r2327_7(bool) = Constant[0] : -# 2327| v2327_8(void) = ConditionalBranch : r2327_7 +# 35| Block 769 +# 35| r35_10767(glval) = VariableAddress[x769] : +# 35| mu35_10768(String) = Uninitialized[x769] : &:r35_10767 +# 35| r35_10769(glval) = FunctionAddress[String] : +# 35| v35_10770(void) = Call[String] : func:r35_10769, this:r35_10767 +# 35| mu35_10771(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10767 +# 35| r35_10773(glval) = VariableAddress[x769] : +# 35| r35_10774(glval) = FunctionAddress[~String] : +# 35| v35_10775(void) = Call[~String] : func:r35_10774, this:r35_10773 +# 35| mu35_10776(unknown) = ^CallSideEffect : ~m? +# 35| v35_10777(void) = ^IndirectReadSideEffect[-1] : &:r35_10773, ~m? +# 35| mu35_10778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10773 +# 35| r35_10779(bool) = Constant[0] : +# 35| v35_10780(void) = ConditionalBranch : r35_10779 #-----| False -> Block 770 #-----| True -> Block 1026 -# 2329| Block 770 -# 2329| r2329_1(glval) = VariableAddress[x770] : -# 2329| mu2329_2(String) = Uninitialized[x770] : &:r2329_1 -# 2329| r2329_3(glval) = FunctionAddress[String] : -# 2329| v2329_4(void) = Call[String] : func:r2329_3, this:r2329_1 -# 2329| mu2329_5(unknown) = ^CallSideEffect : ~m? -# 2329| mu2329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2329_1 -# 2330| r2330_1(glval) = VariableAddress[x770] : -# 2330| r2330_2(glval) = FunctionAddress[~String] : -# 2330| v2330_3(void) = Call[~String] : func:r2330_2, this:r2330_1 -# 2330| mu2330_4(unknown) = ^CallSideEffect : ~m? -# 2330| v2330_5(void) = ^IndirectReadSideEffect[-1] : &:r2330_1, ~m? -# 2330| mu2330_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2330_1 -# 2330| r2330_7(bool) = Constant[0] : -# 2330| v2330_8(void) = ConditionalBranch : r2330_7 +# 35| Block 770 +# 35| r35_10781(glval) = VariableAddress[x770] : +# 35| mu35_10782(String) = Uninitialized[x770] : &:r35_10781 +# 35| r35_10783(glval) = FunctionAddress[String] : +# 35| v35_10784(void) = Call[String] : func:r35_10783, this:r35_10781 +# 35| mu35_10785(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10781 +# 35| r35_10787(glval) = VariableAddress[x770] : +# 35| r35_10788(glval) = FunctionAddress[~String] : +# 35| v35_10789(void) = Call[~String] : func:r35_10788, this:r35_10787 +# 35| mu35_10790(unknown) = ^CallSideEffect : ~m? +# 35| v35_10791(void) = ^IndirectReadSideEffect[-1] : &:r35_10787, ~m? +# 35| mu35_10792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10787 +# 35| r35_10793(bool) = Constant[0] : +# 35| v35_10794(void) = ConditionalBranch : r35_10793 #-----| False -> Block 771 #-----| True -> Block 1026 -# 2332| Block 771 -# 2332| r2332_1(glval) = VariableAddress[x771] : -# 2332| mu2332_2(String) = Uninitialized[x771] : &:r2332_1 -# 2332| r2332_3(glval) = FunctionAddress[String] : -# 2332| v2332_4(void) = Call[String] : func:r2332_3, this:r2332_1 -# 2332| mu2332_5(unknown) = ^CallSideEffect : ~m? -# 2332| mu2332_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 -# 2333| r2333_1(glval) = VariableAddress[x771] : -# 2333| r2333_2(glval) = FunctionAddress[~String] : -# 2333| v2333_3(void) = Call[~String] : func:r2333_2, this:r2333_1 -# 2333| mu2333_4(unknown) = ^CallSideEffect : ~m? -# 2333| v2333_5(void) = ^IndirectReadSideEffect[-1] : &:r2333_1, ~m? -# 2333| mu2333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 -# 2333| r2333_7(bool) = Constant[0] : -# 2333| v2333_8(void) = ConditionalBranch : r2333_7 +# 35| Block 771 +# 35| r35_10795(glval) = VariableAddress[x771] : +# 35| mu35_10796(String) = Uninitialized[x771] : &:r35_10795 +# 35| r35_10797(glval) = FunctionAddress[String] : +# 35| v35_10798(void) = Call[String] : func:r35_10797, this:r35_10795 +# 35| mu35_10799(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10795 +# 35| r35_10801(glval) = VariableAddress[x771] : +# 35| r35_10802(glval) = FunctionAddress[~String] : +# 35| v35_10803(void) = Call[~String] : func:r35_10802, this:r35_10801 +# 35| mu35_10804(unknown) = ^CallSideEffect : ~m? +# 35| v35_10805(void) = ^IndirectReadSideEffect[-1] : &:r35_10801, ~m? +# 35| mu35_10806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10801 +# 35| r35_10807(bool) = Constant[0] : +# 35| v35_10808(void) = ConditionalBranch : r35_10807 #-----| False -> Block 772 #-----| True -> Block 1026 -# 2335| Block 772 -# 2335| r2335_1(glval) = VariableAddress[x772] : -# 2335| mu2335_2(String) = Uninitialized[x772] : &: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[x772] : -# 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 -# 2336| r2336_7(bool) = Constant[0] : -# 2336| v2336_8(void) = ConditionalBranch : r2336_7 +# 35| Block 772 +# 35| r35_10809(glval) = VariableAddress[x772] : +# 35| mu35_10810(String) = Uninitialized[x772] : &:r35_10809 +# 35| r35_10811(glval) = FunctionAddress[String] : +# 35| v35_10812(void) = Call[String] : func:r35_10811, this:r35_10809 +# 35| mu35_10813(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10809 +# 35| r35_10815(glval) = VariableAddress[x772] : +# 35| r35_10816(glval) = FunctionAddress[~String] : +# 35| v35_10817(void) = Call[~String] : func:r35_10816, this:r35_10815 +# 35| mu35_10818(unknown) = ^CallSideEffect : ~m? +# 35| v35_10819(void) = ^IndirectReadSideEffect[-1] : &:r35_10815, ~m? +# 35| mu35_10820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10815 +# 35| r35_10821(bool) = Constant[0] : +# 35| v35_10822(void) = ConditionalBranch : r35_10821 #-----| False -> Block 773 #-----| True -> Block 1026 -# 2338| Block 773 -# 2338| r2338_1(glval) = VariableAddress[x773] : -# 2338| mu2338_2(String) = Uninitialized[x773] : &:r2338_1 -# 2338| r2338_3(glval) = FunctionAddress[String] : -# 2338| v2338_4(void) = Call[String] : func:r2338_3, this:r2338_1 -# 2338| mu2338_5(unknown) = ^CallSideEffect : ~m? -# 2338| mu2338_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2338_1 -# 2339| r2339_1(glval) = VariableAddress[x773] : -# 2339| r2339_2(glval) = FunctionAddress[~String] : -# 2339| v2339_3(void) = Call[~String] : func:r2339_2, this:r2339_1 -# 2339| mu2339_4(unknown) = ^CallSideEffect : ~m? -# 2339| v2339_5(void) = ^IndirectReadSideEffect[-1] : &:r2339_1, ~m? -# 2339| mu2339_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2339_1 -# 2339| r2339_7(bool) = Constant[0] : -# 2339| v2339_8(void) = ConditionalBranch : r2339_7 +# 35| Block 773 +# 35| r35_10823(glval) = VariableAddress[x773] : +# 35| mu35_10824(String) = Uninitialized[x773] : &:r35_10823 +# 35| r35_10825(glval) = FunctionAddress[String] : +# 35| v35_10826(void) = Call[String] : func:r35_10825, this:r35_10823 +# 35| mu35_10827(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10823 +# 35| r35_10829(glval) = VariableAddress[x773] : +# 35| r35_10830(glval) = FunctionAddress[~String] : +# 35| v35_10831(void) = Call[~String] : func:r35_10830, this:r35_10829 +# 35| mu35_10832(unknown) = ^CallSideEffect : ~m? +# 35| v35_10833(void) = ^IndirectReadSideEffect[-1] : &:r35_10829, ~m? +# 35| mu35_10834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10829 +# 35| r35_10835(bool) = Constant[0] : +# 35| v35_10836(void) = ConditionalBranch : r35_10835 #-----| False -> Block 774 #-----| True -> Block 1026 -# 2341| Block 774 -# 2341| r2341_1(glval) = VariableAddress[x774] : -# 2341| mu2341_2(String) = Uninitialized[x774] : &: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 -# 2342| r2342_1(glval) = VariableAddress[x774] : -# 2342| r2342_2(glval) = FunctionAddress[~String] : -# 2342| v2342_3(void) = Call[~String] : func:r2342_2, this:r2342_1 -# 2342| mu2342_4(unknown) = ^CallSideEffect : ~m? -# 2342| v2342_5(void) = ^IndirectReadSideEffect[-1] : &:r2342_1, ~m? -# 2342| mu2342_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2342_1 -# 2342| r2342_7(bool) = Constant[0] : -# 2342| v2342_8(void) = ConditionalBranch : r2342_7 +# 35| Block 774 +# 35| r35_10837(glval) = VariableAddress[x774] : +# 35| mu35_10838(String) = Uninitialized[x774] : &:r35_10837 +# 35| r35_10839(glval) = FunctionAddress[String] : +# 35| v35_10840(void) = Call[String] : func:r35_10839, this:r35_10837 +# 35| mu35_10841(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10837 +# 35| r35_10843(glval) = VariableAddress[x774] : +# 35| r35_10844(glval) = FunctionAddress[~String] : +# 35| v35_10845(void) = Call[~String] : func:r35_10844, this:r35_10843 +# 35| mu35_10846(unknown) = ^CallSideEffect : ~m? +# 35| v35_10847(void) = ^IndirectReadSideEffect[-1] : &:r35_10843, ~m? +# 35| mu35_10848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10843 +# 35| r35_10849(bool) = Constant[0] : +# 35| v35_10850(void) = ConditionalBranch : r35_10849 #-----| False -> Block 775 #-----| True -> Block 1026 -# 2344| Block 775 -# 2344| r2344_1(glval) = VariableAddress[x775] : -# 2344| mu2344_2(String) = Uninitialized[x775] : &:r2344_1 -# 2344| r2344_3(glval) = FunctionAddress[String] : -# 2344| v2344_4(void) = Call[String] : func:r2344_3, this:r2344_1 -# 2344| mu2344_5(unknown) = ^CallSideEffect : ~m? -# 2344| mu2344_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2344_1 -# 2345| r2345_1(glval) = VariableAddress[x775] : -# 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 -# 2345| r2345_7(bool) = Constant[0] : -# 2345| v2345_8(void) = ConditionalBranch : r2345_7 +# 35| Block 775 +# 35| r35_10851(glval) = VariableAddress[x775] : +# 35| mu35_10852(String) = Uninitialized[x775] : &:r35_10851 +# 35| r35_10853(glval) = FunctionAddress[String] : +# 35| v35_10854(void) = Call[String] : func:r35_10853, this:r35_10851 +# 35| mu35_10855(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10851 +# 35| r35_10857(glval) = VariableAddress[x775] : +# 35| r35_10858(glval) = FunctionAddress[~String] : +# 35| v35_10859(void) = Call[~String] : func:r35_10858, this:r35_10857 +# 35| mu35_10860(unknown) = ^CallSideEffect : ~m? +# 35| v35_10861(void) = ^IndirectReadSideEffect[-1] : &:r35_10857, ~m? +# 35| mu35_10862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10857 +# 35| r35_10863(bool) = Constant[0] : +# 35| v35_10864(void) = ConditionalBranch : r35_10863 #-----| False -> Block 776 #-----| True -> Block 1026 -# 2347| Block 776 -# 2347| r2347_1(glval) = VariableAddress[x776] : -# 2347| mu2347_2(String) = Uninitialized[x776] : &:r2347_1 -# 2347| r2347_3(glval) = FunctionAddress[String] : -# 2347| v2347_4(void) = Call[String] : func:r2347_3, this:r2347_1 -# 2347| mu2347_5(unknown) = ^CallSideEffect : ~m? -# 2347| mu2347_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2347_1 -# 2348| r2348_1(glval) = VariableAddress[x776] : -# 2348| r2348_2(glval) = FunctionAddress[~String] : -# 2348| v2348_3(void) = Call[~String] : func:r2348_2, this:r2348_1 -# 2348| mu2348_4(unknown) = ^CallSideEffect : ~m? -# 2348| v2348_5(void) = ^IndirectReadSideEffect[-1] : &:r2348_1, ~m? -# 2348| mu2348_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 -# 2348| r2348_7(bool) = Constant[0] : -# 2348| v2348_8(void) = ConditionalBranch : r2348_7 +# 35| Block 776 +# 35| r35_10865(glval) = VariableAddress[x776] : +# 35| mu35_10866(String) = Uninitialized[x776] : &:r35_10865 +# 35| r35_10867(glval) = FunctionAddress[String] : +# 35| v35_10868(void) = Call[String] : func:r35_10867, this:r35_10865 +# 35| mu35_10869(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10865 +# 35| r35_10871(glval) = VariableAddress[x776] : +# 35| r35_10872(glval) = FunctionAddress[~String] : +# 35| v35_10873(void) = Call[~String] : func:r35_10872, this:r35_10871 +# 35| mu35_10874(unknown) = ^CallSideEffect : ~m? +# 35| v35_10875(void) = ^IndirectReadSideEffect[-1] : &:r35_10871, ~m? +# 35| mu35_10876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10871 +# 35| r35_10877(bool) = Constant[0] : +# 35| v35_10878(void) = ConditionalBranch : r35_10877 #-----| False -> Block 777 #-----| True -> Block 1026 -# 2350| Block 777 -# 2350| r2350_1(glval) = VariableAddress[x777] : -# 2350| mu2350_2(String) = Uninitialized[x777] : &:r2350_1 -# 2350| r2350_3(glval) = FunctionAddress[String] : -# 2350| v2350_4(void) = Call[String] : func:r2350_3, this:r2350_1 -# 2350| mu2350_5(unknown) = ^CallSideEffect : ~m? -# 2350| mu2350_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 -# 2351| r2351_1(glval) = VariableAddress[x777] : -# 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 -# 2351| r2351_7(bool) = Constant[0] : -# 2351| v2351_8(void) = ConditionalBranch : r2351_7 +# 35| Block 777 +# 35| r35_10879(glval) = VariableAddress[x777] : +# 35| mu35_10880(String) = Uninitialized[x777] : &:r35_10879 +# 35| r35_10881(glval) = FunctionAddress[String] : +# 35| v35_10882(void) = Call[String] : func:r35_10881, this:r35_10879 +# 35| mu35_10883(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10879 +# 35| r35_10885(glval) = VariableAddress[x777] : +# 35| r35_10886(glval) = FunctionAddress[~String] : +# 35| v35_10887(void) = Call[~String] : func:r35_10886, this:r35_10885 +# 35| mu35_10888(unknown) = ^CallSideEffect : ~m? +# 35| v35_10889(void) = ^IndirectReadSideEffect[-1] : &:r35_10885, ~m? +# 35| mu35_10890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10885 +# 35| r35_10891(bool) = Constant[0] : +# 35| v35_10892(void) = ConditionalBranch : r35_10891 #-----| False -> Block 778 #-----| True -> Block 1026 -# 2353| Block 778 -# 2353| r2353_1(glval) = VariableAddress[x778] : -# 2353| mu2353_2(String) = Uninitialized[x778] : &:r2353_1 -# 2353| r2353_3(glval) = FunctionAddress[String] : -# 2353| v2353_4(void) = Call[String] : func:r2353_3, this:r2353_1 -# 2353| mu2353_5(unknown) = ^CallSideEffect : ~m? -# 2353| mu2353_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2353_1 -# 2354| r2354_1(glval) = VariableAddress[x778] : -# 2354| r2354_2(glval) = FunctionAddress[~String] : -# 2354| v2354_3(void) = Call[~String] : func:r2354_2, this:r2354_1 -# 2354| mu2354_4(unknown) = ^CallSideEffect : ~m? -# 2354| v2354_5(void) = ^IndirectReadSideEffect[-1] : &:r2354_1, ~m? -# 2354| mu2354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2354| r2354_7(bool) = Constant[0] : -# 2354| v2354_8(void) = ConditionalBranch : r2354_7 +# 35| Block 778 +# 35| r35_10893(glval) = VariableAddress[x778] : +# 35| mu35_10894(String) = Uninitialized[x778] : &:r35_10893 +# 35| r35_10895(glval) = FunctionAddress[String] : +# 35| v35_10896(void) = Call[String] : func:r35_10895, this:r35_10893 +# 35| mu35_10897(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10893 +# 35| r35_10899(glval) = VariableAddress[x778] : +# 35| r35_10900(glval) = FunctionAddress[~String] : +# 35| v35_10901(void) = Call[~String] : func:r35_10900, this:r35_10899 +# 35| mu35_10902(unknown) = ^CallSideEffect : ~m? +# 35| v35_10903(void) = ^IndirectReadSideEffect[-1] : &:r35_10899, ~m? +# 35| mu35_10904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10899 +# 35| r35_10905(bool) = Constant[0] : +# 35| v35_10906(void) = ConditionalBranch : r35_10905 #-----| False -> Block 779 #-----| True -> Block 1026 -# 2356| Block 779 -# 2356| r2356_1(glval) = VariableAddress[x779] : -# 2356| mu2356_2(String) = Uninitialized[x779] : &:r2356_1 -# 2356| r2356_3(glval) = FunctionAddress[String] : -# 2356| v2356_4(void) = Call[String] : func:r2356_3, this:r2356_1 -# 2356| mu2356_5(unknown) = ^CallSideEffect : ~m? -# 2356| mu2356_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2356_1 -# 2357| r2357_1(glval) = VariableAddress[x779] : -# 2357| r2357_2(glval) = FunctionAddress[~String] : -# 2357| v2357_3(void) = Call[~String] : func:r2357_2, this:r2357_1 -# 2357| mu2357_4(unknown) = ^CallSideEffect : ~m? -# 2357| v2357_5(void) = ^IndirectReadSideEffect[-1] : &:r2357_1, ~m? -# 2357| mu2357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 -# 2357| r2357_7(bool) = Constant[0] : -# 2357| v2357_8(void) = ConditionalBranch : r2357_7 +# 35| Block 779 +# 35| r35_10907(glval) = VariableAddress[x779] : +# 35| mu35_10908(String) = Uninitialized[x779] : &:r35_10907 +# 35| r35_10909(glval) = FunctionAddress[String] : +# 35| v35_10910(void) = Call[String] : func:r35_10909, this:r35_10907 +# 35| mu35_10911(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10907 +# 35| r35_10913(glval) = VariableAddress[x779] : +# 35| r35_10914(glval) = FunctionAddress[~String] : +# 35| v35_10915(void) = Call[~String] : func:r35_10914, this:r35_10913 +# 35| mu35_10916(unknown) = ^CallSideEffect : ~m? +# 35| v35_10917(void) = ^IndirectReadSideEffect[-1] : &:r35_10913, ~m? +# 35| mu35_10918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10913 +# 35| r35_10919(bool) = Constant[0] : +# 35| v35_10920(void) = ConditionalBranch : r35_10919 #-----| False -> Block 780 #-----| True -> Block 1026 -# 2359| Block 780 -# 2359| r2359_1(glval) = VariableAddress[x780] : -# 2359| mu2359_2(String) = Uninitialized[x780] : &:r2359_1 -# 2359| r2359_3(glval) = FunctionAddress[String] : -# 2359| v2359_4(void) = Call[String] : func:r2359_3, this:r2359_1 -# 2359| mu2359_5(unknown) = ^CallSideEffect : ~m? -# 2359| mu2359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 -# 2360| r2360_1(glval) = VariableAddress[x780] : -# 2360| r2360_2(glval) = FunctionAddress[~String] : -# 2360| v2360_3(void) = Call[~String] : func:r2360_2, this:r2360_1 -# 2360| mu2360_4(unknown) = ^CallSideEffect : ~m? -# 2360| v2360_5(void) = ^IndirectReadSideEffect[-1] : &:r2360_1, ~m? -# 2360| mu2360_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2360_1 -# 2360| r2360_7(bool) = Constant[0] : -# 2360| v2360_8(void) = ConditionalBranch : r2360_7 +# 35| Block 780 +# 35| r35_10921(glval) = VariableAddress[x780] : +# 35| mu35_10922(String) = Uninitialized[x780] : &:r35_10921 +# 35| r35_10923(glval) = FunctionAddress[String] : +# 35| v35_10924(void) = Call[String] : func:r35_10923, this:r35_10921 +# 35| mu35_10925(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10921 +# 35| r35_10927(glval) = VariableAddress[x780] : +# 35| r35_10928(glval) = FunctionAddress[~String] : +# 35| v35_10929(void) = Call[~String] : func:r35_10928, this:r35_10927 +# 35| mu35_10930(unknown) = ^CallSideEffect : ~m? +# 35| v35_10931(void) = ^IndirectReadSideEffect[-1] : &:r35_10927, ~m? +# 35| mu35_10932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10927 +# 35| r35_10933(bool) = Constant[0] : +# 35| v35_10934(void) = ConditionalBranch : r35_10933 #-----| False -> Block 781 #-----| True -> Block 1026 -# 2362| Block 781 -# 2362| r2362_1(glval) = VariableAddress[x781] : -# 2362| mu2362_2(String) = Uninitialized[x781] : &: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) = VariableAddress[x781] : -# 2363| r2363_2(glval) = FunctionAddress[~String] : -# 2363| v2363_3(void) = Call[~String] : func:r2363_2, this:r2363_1 -# 2363| mu2363_4(unknown) = ^CallSideEffect : ~m? -# 2363| v2363_5(void) = ^IndirectReadSideEffect[-1] : &:r2363_1, ~m? -# 2363| mu2363_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2363_1 -# 2363| r2363_7(bool) = Constant[0] : -# 2363| v2363_8(void) = ConditionalBranch : r2363_7 +# 35| Block 781 +# 35| r35_10935(glval) = VariableAddress[x781] : +# 35| mu35_10936(String) = Uninitialized[x781] : &:r35_10935 +# 35| r35_10937(glval) = FunctionAddress[String] : +# 35| v35_10938(void) = Call[String] : func:r35_10937, this:r35_10935 +# 35| mu35_10939(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10935 +# 35| r35_10941(glval) = VariableAddress[x781] : +# 35| r35_10942(glval) = FunctionAddress[~String] : +# 35| v35_10943(void) = Call[~String] : func:r35_10942, this:r35_10941 +# 35| mu35_10944(unknown) = ^CallSideEffect : ~m? +# 35| v35_10945(void) = ^IndirectReadSideEffect[-1] : &:r35_10941, ~m? +# 35| mu35_10946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10941 +# 35| r35_10947(bool) = Constant[0] : +# 35| v35_10948(void) = ConditionalBranch : r35_10947 #-----| False -> Block 782 #-----| True -> Block 1026 -# 2365| Block 782 -# 2365| r2365_1(glval) = VariableAddress[x782] : -# 2365| mu2365_2(String) = Uninitialized[x782] : &:r2365_1 -# 2365| r2365_3(glval) = FunctionAddress[String] : -# 2365| v2365_4(void) = Call[String] : func:r2365_3, this:r2365_1 -# 2365| mu2365_5(unknown) = ^CallSideEffect : ~m? -# 2365| mu2365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 -# 2366| r2366_1(glval) = VariableAddress[x782] : -# 2366| r2366_2(glval) = FunctionAddress[~String] : -# 2366| v2366_3(void) = Call[~String] : func:r2366_2, this:r2366_1 -# 2366| mu2366_4(unknown) = ^CallSideEffect : ~m? -# 2366| v2366_5(void) = ^IndirectReadSideEffect[-1] : &:r2366_1, ~m? -# 2366| mu2366_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2366_1 -# 2366| r2366_7(bool) = Constant[0] : -# 2366| v2366_8(void) = ConditionalBranch : r2366_7 +# 35| Block 782 +# 35| r35_10949(glval) = VariableAddress[x782] : +# 35| mu35_10950(String) = Uninitialized[x782] : &:r35_10949 +# 35| r35_10951(glval) = FunctionAddress[String] : +# 35| v35_10952(void) = Call[String] : func:r35_10951, this:r35_10949 +# 35| mu35_10953(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10949 +# 35| r35_10955(glval) = VariableAddress[x782] : +# 35| r35_10956(glval) = FunctionAddress[~String] : +# 35| v35_10957(void) = Call[~String] : func:r35_10956, this:r35_10955 +# 35| mu35_10958(unknown) = ^CallSideEffect : ~m? +# 35| v35_10959(void) = ^IndirectReadSideEffect[-1] : &:r35_10955, ~m? +# 35| mu35_10960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10955 +# 35| r35_10961(bool) = Constant[0] : +# 35| v35_10962(void) = ConditionalBranch : r35_10961 #-----| False -> Block 783 #-----| True -> Block 1026 -# 2368| Block 783 -# 2368| r2368_1(glval) = VariableAddress[x783] : -# 2368| mu2368_2(String) = Uninitialized[x783] : &: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[x783] : -# 2369| r2369_2(glval) = FunctionAddress[~String] : -# 2369| v2369_3(void) = Call[~String] : func:r2369_2, this:r2369_1 -# 2369| mu2369_4(unknown) = ^CallSideEffect : ~m? -# 2369| v2369_5(void) = ^IndirectReadSideEffect[-1] : &:r2369_1, ~m? -# 2369| mu2369_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2369_1 -# 2369| r2369_7(bool) = Constant[0] : -# 2369| v2369_8(void) = ConditionalBranch : r2369_7 +# 35| Block 783 +# 35| r35_10963(glval) = VariableAddress[x783] : +# 35| mu35_10964(String) = Uninitialized[x783] : &:r35_10963 +# 35| r35_10965(glval) = FunctionAddress[String] : +# 35| v35_10966(void) = Call[String] : func:r35_10965, this:r35_10963 +# 35| mu35_10967(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10963 +# 35| r35_10969(glval) = VariableAddress[x783] : +# 35| r35_10970(glval) = FunctionAddress[~String] : +# 35| v35_10971(void) = Call[~String] : func:r35_10970, this:r35_10969 +# 35| mu35_10972(unknown) = ^CallSideEffect : ~m? +# 35| v35_10973(void) = ^IndirectReadSideEffect[-1] : &:r35_10969, ~m? +# 35| mu35_10974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10969 +# 35| r35_10975(bool) = Constant[0] : +# 35| v35_10976(void) = ConditionalBranch : r35_10975 #-----| False -> Block 784 #-----| True -> Block 1026 -# 2371| Block 784 -# 2371| r2371_1(glval) = VariableAddress[x784] : -# 2371| mu2371_2(String) = Uninitialized[x784] : &:r2371_1 -# 2371| r2371_3(glval) = FunctionAddress[String] : -# 2371| v2371_4(void) = Call[String] : func:r2371_3, this:r2371_1 -# 2371| mu2371_5(unknown) = ^CallSideEffect : ~m? -# 2371| mu2371_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2371_1 -# 2372| r2372_1(glval) = VariableAddress[x784] : -# 2372| r2372_2(glval) = FunctionAddress[~String] : -# 2372| v2372_3(void) = Call[~String] : func:r2372_2, this:r2372_1 -# 2372| mu2372_4(unknown) = ^CallSideEffect : ~m? -# 2372| v2372_5(void) = ^IndirectReadSideEffect[-1] : &:r2372_1, ~m? -# 2372| mu2372_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2372_1 -# 2372| r2372_7(bool) = Constant[0] : -# 2372| v2372_8(void) = ConditionalBranch : r2372_7 +# 35| Block 784 +# 35| r35_10977(glval) = VariableAddress[x784] : +# 35| mu35_10978(String) = Uninitialized[x784] : &:r35_10977 +# 35| r35_10979(glval) = FunctionAddress[String] : +# 35| v35_10980(void) = Call[String] : func:r35_10979, this:r35_10977 +# 35| mu35_10981(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10977 +# 35| r35_10983(glval) = VariableAddress[x784] : +# 35| r35_10984(glval) = FunctionAddress[~String] : +# 35| v35_10985(void) = Call[~String] : func:r35_10984, this:r35_10983 +# 35| mu35_10986(unknown) = ^CallSideEffect : ~m? +# 35| v35_10987(void) = ^IndirectReadSideEffect[-1] : &:r35_10983, ~m? +# 35| mu35_10988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10983 +# 35| r35_10989(bool) = Constant[0] : +# 35| v35_10990(void) = ConditionalBranch : r35_10989 #-----| False -> Block 785 #-----| True -> Block 1026 -# 2374| Block 785 -# 2374| r2374_1(glval) = VariableAddress[x785] : -# 2374| mu2374_2(String) = Uninitialized[x785] : &:r2374_1 -# 2374| r2374_3(glval) = FunctionAddress[String] : -# 2374| v2374_4(void) = Call[String] : func:r2374_3, this:r2374_1 -# 2374| mu2374_5(unknown) = ^CallSideEffect : ~m? -# 2374| mu2374_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2374_1 -# 2375| r2375_1(glval) = VariableAddress[x785] : -# 2375| r2375_2(glval) = FunctionAddress[~String] : -# 2375| v2375_3(void) = Call[~String] : func:r2375_2, this:r2375_1 -# 2375| mu2375_4(unknown) = ^CallSideEffect : ~m? -# 2375| v2375_5(void) = ^IndirectReadSideEffect[-1] : &:r2375_1, ~m? -# 2375| mu2375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2375_1 -# 2375| r2375_7(bool) = Constant[0] : -# 2375| v2375_8(void) = ConditionalBranch : r2375_7 +# 35| Block 785 +# 35| r35_10991(glval) = VariableAddress[x785] : +# 35| mu35_10992(String) = Uninitialized[x785] : &:r35_10991 +# 35| r35_10993(glval) = FunctionAddress[String] : +# 35| v35_10994(void) = Call[String] : func:r35_10993, this:r35_10991 +# 35| mu35_10995(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10991 +# 35| r35_10997(glval) = VariableAddress[x785] : +# 35| r35_10998(glval) = FunctionAddress[~String] : +# 35| v35_10999(void) = Call[~String] : func:r35_10998, this:r35_10997 +# 35| mu35_11000(unknown) = ^CallSideEffect : ~m? +# 35| v35_11001(void) = ^IndirectReadSideEffect[-1] : &:r35_10997, ~m? +# 35| mu35_11002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10997 +# 35| r35_11003(bool) = Constant[0] : +# 35| v35_11004(void) = ConditionalBranch : r35_11003 #-----| False -> Block 786 #-----| True -> Block 1026 -# 2377| Block 786 -# 2377| r2377_1(glval) = VariableAddress[x786] : -# 2377| mu2377_2(String) = Uninitialized[x786] : &:r2377_1 -# 2377| r2377_3(glval) = FunctionAddress[String] : -# 2377| v2377_4(void) = Call[String] : func:r2377_3, this:r2377_1 -# 2377| mu2377_5(unknown) = ^CallSideEffect : ~m? -# 2377| mu2377_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2377_1 -# 2378| r2378_1(glval) = VariableAddress[x786] : -# 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 -# 2378| r2378_7(bool) = Constant[0] : -# 2378| v2378_8(void) = ConditionalBranch : r2378_7 +# 35| Block 786 +# 35| r35_11005(glval) = VariableAddress[x786] : +# 35| mu35_11006(String) = Uninitialized[x786] : &:r35_11005 +# 35| r35_11007(glval) = FunctionAddress[String] : +# 35| v35_11008(void) = Call[String] : func:r35_11007, this:r35_11005 +# 35| mu35_11009(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11005 +# 35| r35_11011(glval) = VariableAddress[x786] : +# 35| r35_11012(glval) = FunctionAddress[~String] : +# 35| v35_11013(void) = Call[~String] : func:r35_11012, this:r35_11011 +# 35| mu35_11014(unknown) = ^CallSideEffect : ~m? +# 35| v35_11015(void) = ^IndirectReadSideEffect[-1] : &:r35_11011, ~m? +# 35| mu35_11016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11011 +# 35| r35_11017(bool) = Constant[0] : +# 35| v35_11018(void) = ConditionalBranch : r35_11017 #-----| False -> Block 787 #-----| True -> Block 1026 -# 2380| Block 787 -# 2380| r2380_1(glval) = VariableAddress[x787] : -# 2380| mu2380_2(String) = Uninitialized[x787] : &:r2380_1 -# 2380| r2380_3(glval) = FunctionAddress[String] : -# 2380| v2380_4(void) = Call[String] : func:r2380_3, this:r2380_1 -# 2380| mu2380_5(unknown) = ^CallSideEffect : ~m? -# 2380| mu2380_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2380_1 -# 2381| r2381_1(glval) = VariableAddress[x787] : -# 2381| r2381_2(glval) = FunctionAddress[~String] : -# 2381| v2381_3(void) = Call[~String] : func:r2381_2, this:r2381_1 -# 2381| mu2381_4(unknown) = ^CallSideEffect : ~m? -# 2381| v2381_5(void) = ^IndirectReadSideEffect[-1] : &:r2381_1, ~m? -# 2381| mu2381_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2381_1 -# 2381| r2381_7(bool) = Constant[0] : -# 2381| v2381_8(void) = ConditionalBranch : r2381_7 +# 35| Block 787 +# 35| r35_11019(glval) = VariableAddress[x787] : +# 35| mu35_11020(String) = Uninitialized[x787] : &:r35_11019 +# 35| r35_11021(glval) = FunctionAddress[String] : +# 35| v35_11022(void) = Call[String] : func:r35_11021, this:r35_11019 +# 35| mu35_11023(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11019 +# 35| r35_11025(glval) = VariableAddress[x787] : +# 35| r35_11026(glval) = FunctionAddress[~String] : +# 35| v35_11027(void) = Call[~String] : func:r35_11026, this:r35_11025 +# 35| mu35_11028(unknown) = ^CallSideEffect : ~m? +# 35| v35_11029(void) = ^IndirectReadSideEffect[-1] : &:r35_11025, ~m? +# 35| mu35_11030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11025 +# 35| r35_11031(bool) = Constant[0] : +# 35| v35_11032(void) = ConditionalBranch : r35_11031 #-----| False -> Block 788 #-----| True -> Block 1026 -# 2383| Block 788 -# 2383| r2383_1(glval) = VariableAddress[x788] : -# 2383| mu2383_2(String) = Uninitialized[x788] : &:r2383_1 -# 2383| r2383_3(glval) = FunctionAddress[String] : -# 2383| v2383_4(void) = Call[String] : func:r2383_3, this:r2383_1 -# 2383| mu2383_5(unknown) = ^CallSideEffect : ~m? -# 2383| mu2383_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2383_1 -# 2384| r2384_1(glval) = VariableAddress[x788] : -# 2384| r2384_2(glval) = FunctionAddress[~String] : -# 2384| v2384_3(void) = Call[~String] : func:r2384_2, this:r2384_1 -# 2384| mu2384_4(unknown) = ^CallSideEffect : ~m? -# 2384| v2384_5(void) = ^IndirectReadSideEffect[-1] : &:r2384_1, ~m? -# 2384| mu2384_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2384_1 -# 2384| r2384_7(bool) = Constant[0] : -# 2384| v2384_8(void) = ConditionalBranch : r2384_7 +# 35| Block 788 +# 35| r35_11033(glval) = VariableAddress[x788] : +# 35| mu35_11034(String) = Uninitialized[x788] : &:r35_11033 +# 35| r35_11035(glval) = FunctionAddress[String] : +# 35| v35_11036(void) = Call[String] : func:r35_11035, this:r35_11033 +# 35| mu35_11037(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11033 +# 35| r35_11039(glval) = VariableAddress[x788] : +# 35| r35_11040(glval) = FunctionAddress[~String] : +# 35| v35_11041(void) = Call[~String] : func:r35_11040, this:r35_11039 +# 35| mu35_11042(unknown) = ^CallSideEffect : ~m? +# 35| v35_11043(void) = ^IndirectReadSideEffect[-1] : &:r35_11039, ~m? +# 35| mu35_11044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11039 +# 35| r35_11045(bool) = Constant[0] : +# 35| v35_11046(void) = ConditionalBranch : r35_11045 #-----| False -> Block 789 #-----| True -> Block 1026 -# 2386| Block 789 -# 2386| r2386_1(glval) = VariableAddress[x789] : -# 2386| mu2386_2(String) = Uninitialized[x789] : &:r2386_1 -# 2386| r2386_3(glval) = FunctionAddress[String] : -# 2386| v2386_4(void) = Call[String] : func:r2386_3, this:r2386_1 -# 2386| mu2386_5(unknown) = ^CallSideEffect : ~m? -# 2386| mu2386_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2386_1 -# 2387| r2387_1(glval) = VariableAddress[x789] : -# 2387| r2387_2(glval) = FunctionAddress[~String] : -# 2387| v2387_3(void) = Call[~String] : func:r2387_2, this:r2387_1 -# 2387| mu2387_4(unknown) = ^CallSideEffect : ~m? -# 2387| v2387_5(void) = ^IndirectReadSideEffect[-1] : &:r2387_1, ~m? -# 2387| mu2387_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2387_1 -# 2387| r2387_7(bool) = Constant[0] : -# 2387| v2387_8(void) = ConditionalBranch : r2387_7 +# 35| Block 789 +# 35| r35_11047(glval) = VariableAddress[x789] : +# 35| mu35_11048(String) = Uninitialized[x789] : &:r35_11047 +# 35| r35_11049(glval) = FunctionAddress[String] : +# 35| v35_11050(void) = Call[String] : func:r35_11049, this:r35_11047 +# 35| mu35_11051(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11047 +# 35| r35_11053(glval) = VariableAddress[x789] : +# 35| r35_11054(glval) = FunctionAddress[~String] : +# 35| v35_11055(void) = Call[~String] : func:r35_11054, this:r35_11053 +# 35| mu35_11056(unknown) = ^CallSideEffect : ~m? +# 35| v35_11057(void) = ^IndirectReadSideEffect[-1] : &:r35_11053, ~m? +# 35| mu35_11058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11053 +# 35| r35_11059(bool) = Constant[0] : +# 35| v35_11060(void) = ConditionalBranch : r35_11059 #-----| False -> Block 790 #-----| True -> Block 1026 -# 2389| Block 790 -# 2389| r2389_1(glval) = VariableAddress[x790] : -# 2389| mu2389_2(String) = Uninitialized[x790] : &:r2389_1 -# 2389| r2389_3(glval) = FunctionAddress[String] : -# 2389| v2389_4(void) = Call[String] : func:r2389_3, this:r2389_1 -# 2389| mu2389_5(unknown) = ^CallSideEffect : ~m? -# 2389| mu2389_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2389_1 -# 2390| r2390_1(glval) = VariableAddress[x790] : -# 2390| r2390_2(glval) = FunctionAddress[~String] : -# 2390| v2390_3(void) = Call[~String] : func:r2390_2, this:r2390_1 -# 2390| mu2390_4(unknown) = ^CallSideEffect : ~m? -# 2390| v2390_5(void) = ^IndirectReadSideEffect[-1] : &:r2390_1, ~m? -# 2390| mu2390_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2390_1 -# 2390| r2390_7(bool) = Constant[0] : -# 2390| v2390_8(void) = ConditionalBranch : r2390_7 +# 35| Block 790 +# 35| r35_11061(glval) = VariableAddress[x790] : +# 35| mu35_11062(String) = Uninitialized[x790] : &:r35_11061 +# 35| r35_11063(glval) = FunctionAddress[String] : +# 35| v35_11064(void) = Call[String] : func:r35_11063, this:r35_11061 +# 35| mu35_11065(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11061 +# 35| r35_11067(glval) = VariableAddress[x790] : +# 35| r35_11068(glval) = FunctionAddress[~String] : +# 35| v35_11069(void) = Call[~String] : func:r35_11068, this:r35_11067 +# 35| mu35_11070(unknown) = ^CallSideEffect : ~m? +# 35| v35_11071(void) = ^IndirectReadSideEffect[-1] : &:r35_11067, ~m? +# 35| mu35_11072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11067 +# 35| r35_11073(bool) = Constant[0] : +# 35| v35_11074(void) = ConditionalBranch : r35_11073 #-----| False -> Block 791 #-----| True -> Block 1026 -# 2392| Block 791 -# 2392| r2392_1(glval) = VariableAddress[x791] : -# 2392| mu2392_2(String) = Uninitialized[x791] : &:r2392_1 -# 2392| r2392_3(glval) = FunctionAddress[String] : -# 2392| v2392_4(void) = Call[String] : func:r2392_3, this:r2392_1 -# 2392| mu2392_5(unknown) = ^CallSideEffect : ~m? -# 2392| mu2392_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2392_1 -# 2393| r2393_1(glval) = VariableAddress[x791] : -# 2393| r2393_2(glval) = FunctionAddress[~String] : -# 2393| v2393_3(void) = Call[~String] : func:r2393_2, this:r2393_1 -# 2393| mu2393_4(unknown) = ^CallSideEffect : ~m? -# 2393| v2393_5(void) = ^IndirectReadSideEffect[-1] : &:r2393_1, ~m? -# 2393| mu2393_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2393_1 -# 2393| r2393_7(bool) = Constant[0] : -# 2393| v2393_8(void) = ConditionalBranch : r2393_7 +# 35| Block 791 +# 35| r35_11075(glval) = VariableAddress[x791] : +# 35| mu35_11076(String) = Uninitialized[x791] : &:r35_11075 +# 35| r35_11077(glval) = FunctionAddress[String] : +# 35| v35_11078(void) = Call[String] : func:r35_11077, this:r35_11075 +# 35| mu35_11079(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11075 +# 35| r35_11081(glval) = VariableAddress[x791] : +# 35| r35_11082(glval) = FunctionAddress[~String] : +# 35| v35_11083(void) = Call[~String] : func:r35_11082, this:r35_11081 +# 35| mu35_11084(unknown) = ^CallSideEffect : ~m? +# 35| v35_11085(void) = ^IndirectReadSideEffect[-1] : &:r35_11081, ~m? +# 35| mu35_11086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11081 +# 35| r35_11087(bool) = Constant[0] : +# 35| v35_11088(void) = ConditionalBranch : r35_11087 #-----| False -> Block 792 #-----| True -> Block 1026 -# 2395| Block 792 -# 2395| r2395_1(glval) = VariableAddress[x792] : -# 2395| mu2395_2(String) = Uninitialized[x792] : &:r2395_1 -# 2395| r2395_3(glval) = FunctionAddress[String] : -# 2395| v2395_4(void) = Call[String] : func:r2395_3, this:r2395_1 -# 2395| mu2395_5(unknown) = ^CallSideEffect : ~m? -# 2395| mu2395_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2395_1 -# 2396| r2396_1(glval) = VariableAddress[x792] : -# 2396| r2396_2(glval) = FunctionAddress[~String] : -# 2396| v2396_3(void) = Call[~String] : func:r2396_2, this:r2396_1 -# 2396| mu2396_4(unknown) = ^CallSideEffect : ~m? -# 2396| v2396_5(void) = ^IndirectReadSideEffect[-1] : &:r2396_1, ~m? -# 2396| mu2396_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2396_1 -# 2396| r2396_7(bool) = Constant[0] : -# 2396| v2396_8(void) = ConditionalBranch : r2396_7 +# 35| Block 792 +# 35| r35_11089(glval) = VariableAddress[x792] : +# 35| mu35_11090(String) = Uninitialized[x792] : &:r35_11089 +# 35| r35_11091(glval) = FunctionAddress[String] : +# 35| v35_11092(void) = Call[String] : func:r35_11091, this:r35_11089 +# 35| mu35_11093(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11089 +# 35| r35_11095(glval) = VariableAddress[x792] : +# 35| r35_11096(glval) = FunctionAddress[~String] : +# 35| v35_11097(void) = Call[~String] : func:r35_11096, this:r35_11095 +# 35| mu35_11098(unknown) = ^CallSideEffect : ~m? +# 35| v35_11099(void) = ^IndirectReadSideEffect[-1] : &:r35_11095, ~m? +# 35| mu35_11100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11095 +# 35| r35_11101(bool) = Constant[0] : +# 35| v35_11102(void) = ConditionalBranch : r35_11101 #-----| False -> Block 793 #-----| True -> Block 1026 -# 2398| Block 793 -# 2398| r2398_1(glval) = VariableAddress[x793] : -# 2398| mu2398_2(String) = Uninitialized[x793] : &:r2398_1 -# 2398| r2398_3(glval) = FunctionAddress[String] : -# 2398| v2398_4(void) = Call[String] : func:r2398_3, this:r2398_1 -# 2398| mu2398_5(unknown) = ^CallSideEffect : ~m? -# 2398| mu2398_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2398_1 -# 2399| r2399_1(glval) = VariableAddress[x793] : -# 2399| r2399_2(glval) = FunctionAddress[~String] : -# 2399| v2399_3(void) = Call[~String] : func:r2399_2, this:r2399_1 -# 2399| mu2399_4(unknown) = ^CallSideEffect : ~m? -# 2399| v2399_5(void) = ^IndirectReadSideEffect[-1] : &:r2399_1, ~m? -# 2399| mu2399_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2399_1 -# 2399| r2399_7(bool) = Constant[0] : -# 2399| v2399_8(void) = ConditionalBranch : r2399_7 +# 35| Block 793 +# 35| r35_11103(glval) = VariableAddress[x793] : +# 35| mu35_11104(String) = Uninitialized[x793] : &:r35_11103 +# 35| r35_11105(glval) = FunctionAddress[String] : +# 35| v35_11106(void) = Call[String] : func:r35_11105, this:r35_11103 +# 35| mu35_11107(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11103 +# 35| r35_11109(glval) = VariableAddress[x793] : +# 35| r35_11110(glval) = FunctionAddress[~String] : +# 35| v35_11111(void) = Call[~String] : func:r35_11110, this:r35_11109 +# 35| mu35_11112(unknown) = ^CallSideEffect : ~m? +# 35| v35_11113(void) = ^IndirectReadSideEffect[-1] : &:r35_11109, ~m? +# 35| mu35_11114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11109 +# 35| r35_11115(bool) = Constant[0] : +# 35| v35_11116(void) = ConditionalBranch : r35_11115 #-----| False -> Block 794 #-----| True -> Block 1026 -# 2401| Block 794 -# 2401| r2401_1(glval) = VariableAddress[x794] : -# 2401| mu2401_2(String) = Uninitialized[x794] : &:r2401_1 -# 2401| r2401_3(glval) = FunctionAddress[String] : -# 2401| v2401_4(void) = Call[String] : func:r2401_3, this:r2401_1 -# 2401| mu2401_5(unknown) = ^CallSideEffect : ~m? -# 2401| mu2401_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2401_1 -# 2402| r2402_1(glval) = VariableAddress[x794] : -# 2402| r2402_2(glval) = FunctionAddress[~String] : -# 2402| v2402_3(void) = Call[~String] : func:r2402_2, this:r2402_1 -# 2402| mu2402_4(unknown) = ^CallSideEffect : ~m? -# 2402| v2402_5(void) = ^IndirectReadSideEffect[-1] : &:r2402_1, ~m? -# 2402| mu2402_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2402_1 -# 2402| r2402_7(bool) = Constant[0] : -# 2402| v2402_8(void) = ConditionalBranch : r2402_7 +# 35| Block 794 +# 35| r35_11117(glval) = VariableAddress[x794] : +# 35| mu35_11118(String) = Uninitialized[x794] : &:r35_11117 +# 35| r35_11119(glval) = FunctionAddress[String] : +# 35| v35_11120(void) = Call[String] : func:r35_11119, this:r35_11117 +# 35| mu35_11121(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11117 +# 35| r35_11123(glval) = VariableAddress[x794] : +# 35| r35_11124(glval) = FunctionAddress[~String] : +# 35| v35_11125(void) = Call[~String] : func:r35_11124, this:r35_11123 +# 35| mu35_11126(unknown) = ^CallSideEffect : ~m? +# 35| v35_11127(void) = ^IndirectReadSideEffect[-1] : &:r35_11123, ~m? +# 35| mu35_11128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11123 +# 35| r35_11129(bool) = Constant[0] : +# 35| v35_11130(void) = ConditionalBranch : r35_11129 #-----| False -> Block 795 #-----| True -> Block 1026 -# 2404| Block 795 -# 2404| r2404_1(glval) = VariableAddress[x795] : -# 2404| mu2404_2(String) = Uninitialized[x795] : &:r2404_1 -# 2404| r2404_3(glval) = FunctionAddress[String] : -# 2404| v2404_4(void) = Call[String] : func:r2404_3, this:r2404_1 -# 2404| mu2404_5(unknown) = ^CallSideEffect : ~m? -# 2404| mu2404_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2404_1 -# 2405| r2405_1(glval) = VariableAddress[x795] : -# 2405| r2405_2(glval) = FunctionAddress[~String] : -# 2405| v2405_3(void) = Call[~String] : func:r2405_2, this:r2405_1 -# 2405| mu2405_4(unknown) = ^CallSideEffect : ~m? -# 2405| v2405_5(void) = ^IndirectReadSideEffect[-1] : &:r2405_1, ~m? -# 2405| mu2405_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2405_1 -# 2405| r2405_7(bool) = Constant[0] : -# 2405| v2405_8(void) = ConditionalBranch : r2405_7 +# 35| Block 795 +# 35| r35_11131(glval) = VariableAddress[x795] : +# 35| mu35_11132(String) = Uninitialized[x795] : &:r35_11131 +# 35| r35_11133(glval) = FunctionAddress[String] : +# 35| v35_11134(void) = Call[String] : func:r35_11133, this:r35_11131 +# 35| mu35_11135(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11131 +# 35| r35_11137(glval) = VariableAddress[x795] : +# 35| r35_11138(glval) = FunctionAddress[~String] : +# 35| v35_11139(void) = Call[~String] : func:r35_11138, this:r35_11137 +# 35| mu35_11140(unknown) = ^CallSideEffect : ~m? +# 35| v35_11141(void) = ^IndirectReadSideEffect[-1] : &:r35_11137, ~m? +# 35| mu35_11142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11137 +# 35| r35_11143(bool) = Constant[0] : +# 35| v35_11144(void) = ConditionalBranch : r35_11143 #-----| False -> Block 796 #-----| True -> Block 1026 -# 2407| Block 796 -# 2407| r2407_1(glval) = VariableAddress[x796] : -# 2407| mu2407_2(String) = Uninitialized[x796] : &:r2407_1 -# 2407| r2407_3(glval) = FunctionAddress[String] : -# 2407| v2407_4(void) = Call[String] : func:r2407_3, this:r2407_1 -# 2407| mu2407_5(unknown) = ^CallSideEffect : ~m? -# 2407| mu2407_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2407_1 -# 2408| r2408_1(glval) = VariableAddress[x796] : -# 2408| r2408_2(glval) = FunctionAddress[~String] : -# 2408| v2408_3(void) = Call[~String] : func:r2408_2, this:r2408_1 -# 2408| mu2408_4(unknown) = ^CallSideEffect : ~m? -# 2408| v2408_5(void) = ^IndirectReadSideEffect[-1] : &:r2408_1, ~m? -# 2408| mu2408_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2408_1 -# 2408| r2408_7(bool) = Constant[0] : -# 2408| v2408_8(void) = ConditionalBranch : r2408_7 +# 35| Block 796 +# 35| r35_11145(glval) = VariableAddress[x796] : +# 35| mu35_11146(String) = Uninitialized[x796] : &:r35_11145 +# 35| r35_11147(glval) = FunctionAddress[String] : +# 35| v35_11148(void) = Call[String] : func:r35_11147, this:r35_11145 +# 35| mu35_11149(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11145 +# 35| r35_11151(glval) = VariableAddress[x796] : +# 35| r35_11152(glval) = FunctionAddress[~String] : +# 35| v35_11153(void) = Call[~String] : func:r35_11152, this:r35_11151 +# 35| mu35_11154(unknown) = ^CallSideEffect : ~m? +# 35| v35_11155(void) = ^IndirectReadSideEffect[-1] : &:r35_11151, ~m? +# 35| mu35_11156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11151 +# 35| r35_11157(bool) = Constant[0] : +# 35| v35_11158(void) = ConditionalBranch : r35_11157 #-----| False -> Block 797 #-----| True -> Block 1026 -# 2410| Block 797 -# 2410| r2410_1(glval) = VariableAddress[x797] : -# 2410| mu2410_2(String) = Uninitialized[x797] : &:r2410_1 -# 2410| r2410_3(glval) = FunctionAddress[String] : -# 2410| v2410_4(void) = Call[String] : func:r2410_3, this:r2410_1 -# 2410| mu2410_5(unknown) = ^CallSideEffect : ~m? -# 2410| mu2410_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2410_1 -# 2411| r2411_1(glval) = VariableAddress[x797] : -# 2411| r2411_2(glval) = FunctionAddress[~String] : -# 2411| v2411_3(void) = Call[~String] : func:r2411_2, this:r2411_1 -# 2411| mu2411_4(unknown) = ^CallSideEffect : ~m? -# 2411| v2411_5(void) = ^IndirectReadSideEffect[-1] : &:r2411_1, ~m? -# 2411| mu2411_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2411_1 -# 2411| r2411_7(bool) = Constant[0] : -# 2411| v2411_8(void) = ConditionalBranch : r2411_7 +# 35| Block 797 +# 35| r35_11159(glval) = VariableAddress[x797] : +# 35| mu35_11160(String) = Uninitialized[x797] : &:r35_11159 +# 35| r35_11161(glval) = FunctionAddress[String] : +# 35| v35_11162(void) = Call[String] : func:r35_11161, this:r35_11159 +# 35| mu35_11163(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11159 +# 35| r35_11165(glval) = VariableAddress[x797] : +# 35| r35_11166(glval) = FunctionAddress[~String] : +# 35| v35_11167(void) = Call[~String] : func:r35_11166, this:r35_11165 +# 35| mu35_11168(unknown) = ^CallSideEffect : ~m? +# 35| v35_11169(void) = ^IndirectReadSideEffect[-1] : &:r35_11165, ~m? +# 35| mu35_11170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11165 +# 35| r35_11171(bool) = Constant[0] : +# 35| v35_11172(void) = ConditionalBranch : r35_11171 #-----| False -> Block 798 #-----| True -> Block 1026 -# 2413| Block 798 -# 2413| r2413_1(glval) = VariableAddress[x798] : -# 2413| mu2413_2(String) = Uninitialized[x798] : &:r2413_1 -# 2413| r2413_3(glval) = FunctionAddress[String] : -# 2413| v2413_4(void) = Call[String] : func:r2413_3, this:r2413_1 -# 2413| mu2413_5(unknown) = ^CallSideEffect : ~m? -# 2413| mu2413_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2413_1 -# 2414| r2414_1(glval) = VariableAddress[x798] : -# 2414| r2414_2(glval) = FunctionAddress[~String] : -# 2414| v2414_3(void) = Call[~String] : func:r2414_2, this:r2414_1 -# 2414| mu2414_4(unknown) = ^CallSideEffect : ~m? -# 2414| v2414_5(void) = ^IndirectReadSideEffect[-1] : &:r2414_1, ~m? -# 2414| mu2414_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2414_1 -# 2414| r2414_7(bool) = Constant[0] : -# 2414| v2414_8(void) = ConditionalBranch : r2414_7 +# 35| Block 798 +# 35| r35_11173(glval) = VariableAddress[x798] : +# 35| mu35_11174(String) = Uninitialized[x798] : &:r35_11173 +# 35| r35_11175(glval) = FunctionAddress[String] : +# 35| v35_11176(void) = Call[String] : func:r35_11175, this:r35_11173 +# 35| mu35_11177(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11173 +# 35| r35_11179(glval) = VariableAddress[x798] : +# 35| r35_11180(glval) = FunctionAddress[~String] : +# 35| v35_11181(void) = Call[~String] : func:r35_11180, this:r35_11179 +# 35| mu35_11182(unknown) = ^CallSideEffect : ~m? +# 35| v35_11183(void) = ^IndirectReadSideEffect[-1] : &:r35_11179, ~m? +# 35| mu35_11184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11179 +# 35| r35_11185(bool) = Constant[0] : +# 35| v35_11186(void) = ConditionalBranch : r35_11185 #-----| False -> Block 799 #-----| True -> Block 1026 -# 2416| Block 799 -# 2416| r2416_1(glval) = VariableAddress[x799] : -# 2416| mu2416_2(String) = Uninitialized[x799] : &:r2416_1 -# 2416| r2416_3(glval) = FunctionAddress[String] : -# 2416| v2416_4(void) = Call[String] : func:r2416_3, this:r2416_1 -# 2416| mu2416_5(unknown) = ^CallSideEffect : ~m? -# 2416| mu2416_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2416_1 -# 2417| r2417_1(glval) = VariableAddress[x799] : -# 2417| r2417_2(glval) = FunctionAddress[~String] : -# 2417| v2417_3(void) = Call[~String] : func:r2417_2, this:r2417_1 -# 2417| mu2417_4(unknown) = ^CallSideEffect : ~m? -# 2417| v2417_5(void) = ^IndirectReadSideEffect[-1] : &:r2417_1, ~m? -# 2417| mu2417_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2417_1 -# 2417| r2417_7(bool) = Constant[0] : -# 2417| v2417_8(void) = ConditionalBranch : r2417_7 +# 35| Block 799 +# 35| r35_11187(glval) = VariableAddress[x799] : +# 35| mu35_11188(String) = Uninitialized[x799] : &:r35_11187 +# 35| r35_11189(glval) = FunctionAddress[String] : +# 35| v35_11190(void) = Call[String] : func:r35_11189, this:r35_11187 +# 35| mu35_11191(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11187 +# 35| r35_11193(glval) = VariableAddress[x799] : +# 35| r35_11194(glval) = FunctionAddress[~String] : +# 35| v35_11195(void) = Call[~String] : func:r35_11194, this:r35_11193 +# 35| mu35_11196(unknown) = ^CallSideEffect : ~m? +# 35| v35_11197(void) = ^IndirectReadSideEffect[-1] : &:r35_11193, ~m? +# 35| mu35_11198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11193 +# 35| r35_11199(bool) = Constant[0] : +# 35| v35_11200(void) = ConditionalBranch : r35_11199 #-----| False -> Block 800 #-----| True -> Block 1026 -# 2419| Block 800 -# 2419| r2419_1(glval) = VariableAddress[x800] : -# 2419| mu2419_2(String) = Uninitialized[x800] : &:r2419_1 -# 2419| r2419_3(glval) = FunctionAddress[String] : -# 2419| v2419_4(void) = Call[String] : func:r2419_3, this:r2419_1 -# 2419| mu2419_5(unknown) = ^CallSideEffect : ~m? -# 2419| mu2419_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2419_1 -# 2420| r2420_1(glval) = VariableAddress[x800] : -# 2420| r2420_2(glval) = FunctionAddress[~String] : -# 2420| v2420_3(void) = Call[~String] : func:r2420_2, this:r2420_1 -# 2420| mu2420_4(unknown) = ^CallSideEffect : ~m? -# 2420| v2420_5(void) = ^IndirectReadSideEffect[-1] : &:r2420_1, ~m? -# 2420| mu2420_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2420_1 -# 2420| r2420_7(bool) = Constant[0] : -# 2420| v2420_8(void) = ConditionalBranch : r2420_7 +# 35| Block 800 +# 35| r35_11201(glval) = VariableAddress[x800] : +# 35| mu35_11202(String) = Uninitialized[x800] : &:r35_11201 +# 35| r35_11203(glval) = FunctionAddress[String] : +# 35| v35_11204(void) = Call[String] : func:r35_11203, this:r35_11201 +# 35| mu35_11205(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11201 +# 35| r35_11207(glval) = VariableAddress[x800] : +# 35| r35_11208(glval) = FunctionAddress[~String] : +# 35| v35_11209(void) = Call[~String] : func:r35_11208, this:r35_11207 +# 35| mu35_11210(unknown) = ^CallSideEffect : ~m? +# 35| v35_11211(void) = ^IndirectReadSideEffect[-1] : &:r35_11207, ~m? +# 35| mu35_11212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11207 +# 35| r35_11213(bool) = Constant[0] : +# 35| v35_11214(void) = ConditionalBranch : r35_11213 #-----| False -> Block 801 #-----| True -> Block 1026 -# 2422| Block 801 -# 2422| r2422_1(glval) = VariableAddress[x801] : -# 2422| mu2422_2(String) = Uninitialized[x801] : &:r2422_1 -# 2422| r2422_3(glval) = FunctionAddress[String] : -# 2422| v2422_4(void) = Call[String] : func:r2422_3, this:r2422_1 -# 2422| mu2422_5(unknown) = ^CallSideEffect : ~m? -# 2422| mu2422_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2422_1 -# 2423| r2423_1(glval) = VariableAddress[x801] : -# 2423| r2423_2(glval) = FunctionAddress[~String] : -# 2423| v2423_3(void) = Call[~String] : func:r2423_2, this:r2423_1 -# 2423| mu2423_4(unknown) = ^CallSideEffect : ~m? -# 2423| v2423_5(void) = ^IndirectReadSideEffect[-1] : &:r2423_1, ~m? -# 2423| mu2423_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2423_1 -# 2423| r2423_7(bool) = Constant[0] : -# 2423| v2423_8(void) = ConditionalBranch : r2423_7 +# 35| Block 801 +# 35| r35_11215(glval) = VariableAddress[x801] : +# 35| mu35_11216(String) = Uninitialized[x801] : &:r35_11215 +# 35| r35_11217(glval) = FunctionAddress[String] : +# 35| v35_11218(void) = Call[String] : func:r35_11217, this:r35_11215 +# 35| mu35_11219(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11215 +# 35| r35_11221(glval) = VariableAddress[x801] : +# 35| r35_11222(glval) = FunctionAddress[~String] : +# 35| v35_11223(void) = Call[~String] : func:r35_11222, this:r35_11221 +# 35| mu35_11224(unknown) = ^CallSideEffect : ~m? +# 35| v35_11225(void) = ^IndirectReadSideEffect[-1] : &:r35_11221, ~m? +# 35| mu35_11226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11221 +# 35| r35_11227(bool) = Constant[0] : +# 35| v35_11228(void) = ConditionalBranch : r35_11227 #-----| False -> Block 802 #-----| True -> Block 1026 -# 2425| Block 802 -# 2425| r2425_1(glval) = VariableAddress[x802] : -# 2425| mu2425_2(String) = Uninitialized[x802] : &:r2425_1 -# 2425| r2425_3(glval) = FunctionAddress[String] : -# 2425| v2425_4(void) = Call[String] : func:r2425_3, this:r2425_1 -# 2425| mu2425_5(unknown) = ^CallSideEffect : ~m? -# 2425| mu2425_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2425_1 -# 2426| r2426_1(glval) = VariableAddress[x802] : -# 2426| r2426_2(glval) = FunctionAddress[~String] : -# 2426| v2426_3(void) = Call[~String] : func:r2426_2, this:r2426_1 -# 2426| mu2426_4(unknown) = ^CallSideEffect : ~m? -# 2426| v2426_5(void) = ^IndirectReadSideEffect[-1] : &:r2426_1, ~m? -# 2426| mu2426_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2426_1 -# 2426| r2426_7(bool) = Constant[0] : -# 2426| v2426_8(void) = ConditionalBranch : r2426_7 +# 35| Block 802 +# 35| r35_11229(glval) = VariableAddress[x802] : +# 35| mu35_11230(String) = Uninitialized[x802] : &:r35_11229 +# 35| r35_11231(glval) = FunctionAddress[String] : +# 35| v35_11232(void) = Call[String] : func:r35_11231, this:r35_11229 +# 35| mu35_11233(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11229 +# 35| r35_11235(glval) = VariableAddress[x802] : +# 35| r35_11236(glval) = FunctionAddress[~String] : +# 35| v35_11237(void) = Call[~String] : func:r35_11236, this:r35_11235 +# 35| mu35_11238(unknown) = ^CallSideEffect : ~m? +# 35| v35_11239(void) = ^IndirectReadSideEffect[-1] : &:r35_11235, ~m? +# 35| mu35_11240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11235 +# 35| r35_11241(bool) = Constant[0] : +# 35| v35_11242(void) = ConditionalBranch : r35_11241 #-----| False -> Block 803 #-----| True -> Block 1026 -# 2428| Block 803 -# 2428| r2428_1(glval) = VariableAddress[x803] : -# 2428| mu2428_2(String) = Uninitialized[x803] : &:r2428_1 -# 2428| r2428_3(glval) = FunctionAddress[String] : -# 2428| v2428_4(void) = Call[String] : func:r2428_3, this:r2428_1 -# 2428| mu2428_5(unknown) = ^CallSideEffect : ~m? -# 2428| mu2428_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2428_1 -# 2429| r2429_1(glval) = VariableAddress[x803] : -# 2429| r2429_2(glval) = FunctionAddress[~String] : -# 2429| v2429_3(void) = Call[~String] : func:r2429_2, this:r2429_1 -# 2429| mu2429_4(unknown) = ^CallSideEffect : ~m? -# 2429| v2429_5(void) = ^IndirectReadSideEffect[-1] : &:r2429_1, ~m? -# 2429| mu2429_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2429_1 -# 2429| r2429_7(bool) = Constant[0] : -# 2429| v2429_8(void) = ConditionalBranch : r2429_7 +# 35| Block 803 +# 35| r35_11243(glval) = VariableAddress[x803] : +# 35| mu35_11244(String) = Uninitialized[x803] : &:r35_11243 +# 35| r35_11245(glval) = FunctionAddress[String] : +# 35| v35_11246(void) = Call[String] : func:r35_11245, this:r35_11243 +# 35| mu35_11247(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11243 +# 35| r35_11249(glval) = VariableAddress[x803] : +# 35| r35_11250(glval) = FunctionAddress[~String] : +# 35| v35_11251(void) = Call[~String] : func:r35_11250, this:r35_11249 +# 35| mu35_11252(unknown) = ^CallSideEffect : ~m? +# 35| v35_11253(void) = ^IndirectReadSideEffect[-1] : &:r35_11249, ~m? +# 35| mu35_11254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11249 +# 35| r35_11255(bool) = Constant[0] : +# 35| v35_11256(void) = ConditionalBranch : r35_11255 #-----| False -> Block 804 #-----| True -> Block 1026 -# 2431| Block 804 -# 2431| r2431_1(glval) = VariableAddress[x804] : -# 2431| mu2431_2(String) = Uninitialized[x804] : &:r2431_1 -# 2431| r2431_3(glval) = FunctionAddress[String] : -# 2431| v2431_4(void) = Call[String] : func:r2431_3, this:r2431_1 -# 2431| mu2431_5(unknown) = ^CallSideEffect : ~m? -# 2431| mu2431_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2431_1 -# 2432| r2432_1(glval) = VariableAddress[x804] : -# 2432| r2432_2(glval) = FunctionAddress[~String] : -# 2432| v2432_3(void) = Call[~String] : func:r2432_2, this:r2432_1 -# 2432| mu2432_4(unknown) = ^CallSideEffect : ~m? -# 2432| v2432_5(void) = ^IndirectReadSideEffect[-1] : &:r2432_1, ~m? -# 2432| mu2432_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2432_1 -# 2432| r2432_7(bool) = Constant[0] : -# 2432| v2432_8(void) = ConditionalBranch : r2432_7 +# 35| Block 804 +# 35| r35_11257(glval) = VariableAddress[x804] : +# 35| mu35_11258(String) = Uninitialized[x804] : &:r35_11257 +# 35| r35_11259(glval) = FunctionAddress[String] : +# 35| v35_11260(void) = Call[String] : func:r35_11259, this:r35_11257 +# 35| mu35_11261(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11257 +# 35| r35_11263(glval) = VariableAddress[x804] : +# 35| r35_11264(glval) = FunctionAddress[~String] : +# 35| v35_11265(void) = Call[~String] : func:r35_11264, this:r35_11263 +# 35| mu35_11266(unknown) = ^CallSideEffect : ~m? +# 35| v35_11267(void) = ^IndirectReadSideEffect[-1] : &:r35_11263, ~m? +# 35| mu35_11268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11263 +# 35| r35_11269(bool) = Constant[0] : +# 35| v35_11270(void) = ConditionalBranch : r35_11269 #-----| False -> Block 805 #-----| True -> Block 1026 -# 2434| Block 805 -# 2434| r2434_1(glval) = VariableAddress[x805] : -# 2434| mu2434_2(String) = Uninitialized[x805] : &:r2434_1 -# 2434| r2434_3(glval) = FunctionAddress[String] : -# 2434| v2434_4(void) = Call[String] : func:r2434_3, this:r2434_1 -# 2434| mu2434_5(unknown) = ^CallSideEffect : ~m? -# 2434| mu2434_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2434_1 -# 2435| r2435_1(glval) = VariableAddress[x805] : -# 2435| r2435_2(glval) = FunctionAddress[~String] : -# 2435| v2435_3(void) = Call[~String] : func:r2435_2, this:r2435_1 -# 2435| mu2435_4(unknown) = ^CallSideEffect : ~m? -# 2435| v2435_5(void) = ^IndirectReadSideEffect[-1] : &:r2435_1, ~m? -# 2435| mu2435_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2435_1 -# 2435| r2435_7(bool) = Constant[0] : -# 2435| v2435_8(void) = ConditionalBranch : r2435_7 +# 35| Block 805 +# 35| r35_11271(glval) = VariableAddress[x805] : +# 35| mu35_11272(String) = Uninitialized[x805] : &:r35_11271 +# 35| r35_11273(glval) = FunctionAddress[String] : +# 35| v35_11274(void) = Call[String] : func:r35_11273, this:r35_11271 +# 35| mu35_11275(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11271 +# 35| r35_11277(glval) = VariableAddress[x805] : +# 35| r35_11278(glval) = FunctionAddress[~String] : +# 35| v35_11279(void) = Call[~String] : func:r35_11278, this:r35_11277 +# 35| mu35_11280(unknown) = ^CallSideEffect : ~m? +# 35| v35_11281(void) = ^IndirectReadSideEffect[-1] : &:r35_11277, ~m? +# 35| mu35_11282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11277 +# 35| r35_11283(bool) = Constant[0] : +# 35| v35_11284(void) = ConditionalBranch : r35_11283 #-----| False -> Block 806 #-----| True -> Block 1026 -# 2437| Block 806 -# 2437| r2437_1(glval) = VariableAddress[x806] : -# 2437| mu2437_2(String) = Uninitialized[x806] : &:r2437_1 -# 2437| r2437_3(glval) = FunctionAddress[String] : -# 2437| v2437_4(void) = Call[String] : func:r2437_3, this:r2437_1 -# 2437| mu2437_5(unknown) = ^CallSideEffect : ~m? -# 2437| mu2437_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2437_1 -# 2438| r2438_1(glval) = VariableAddress[x806] : -# 2438| r2438_2(glval) = FunctionAddress[~String] : -# 2438| v2438_3(void) = Call[~String] : func:r2438_2, this:r2438_1 -# 2438| mu2438_4(unknown) = ^CallSideEffect : ~m? -# 2438| v2438_5(void) = ^IndirectReadSideEffect[-1] : &:r2438_1, ~m? -# 2438| mu2438_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2438_1 -# 2438| r2438_7(bool) = Constant[0] : -# 2438| v2438_8(void) = ConditionalBranch : r2438_7 +# 35| Block 806 +# 35| r35_11285(glval) = VariableAddress[x806] : +# 35| mu35_11286(String) = Uninitialized[x806] : &:r35_11285 +# 35| r35_11287(glval) = FunctionAddress[String] : +# 35| v35_11288(void) = Call[String] : func:r35_11287, this:r35_11285 +# 35| mu35_11289(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11285 +# 35| r35_11291(glval) = VariableAddress[x806] : +# 35| r35_11292(glval) = FunctionAddress[~String] : +# 35| v35_11293(void) = Call[~String] : func:r35_11292, this:r35_11291 +# 35| mu35_11294(unknown) = ^CallSideEffect : ~m? +# 35| v35_11295(void) = ^IndirectReadSideEffect[-1] : &:r35_11291, ~m? +# 35| mu35_11296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11291 +# 35| r35_11297(bool) = Constant[0] : +# 35| v35_11298(void) = ConditionalBranch : r35_11297 #-----| False -> Block 807 #-----| True -> Block 1026 -# 2440| Block 807 -# 2440| r2440_1(glval) = VariableAddress[x807] : -# 2440| mu2440_2(String) = Uninitialized[x807] : &:r2440_1 -# 2440| r2440_3(glval) = FunctionAddress[String] : -# 2440| v2440_4(void) = Call[String] : func:r2440_3, this:r2440_1 -# 2440| mu2440_5(unknown) = ^CallSideEffect : ~m? -# 2440| mu2440_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2440_1 -# 2441| r2441_1(glval) = VariableAddress[x807] : -# 2441| r2441_2(glval) = FunctionAddress[~String] : -# 2441| v2441_3(void) = Call[~String] : func:r2441_2, this:r2441_1 -# 2441| mu2441_4(unknown) = ^CallSideEffect : ~m? -# 2441| v2441_5(void) = ^IndirectReadSideEffect[-1] : &:r2441_1, ~m? -# 2441| mu2441_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2441_1 -# 2441| r2441_7(bool) = Constant[0] : -# 2441| v2441_8(void) = ConditionalBranch : r2441_7 +# 35| Block 807 +# 35| r35_11299(glval) = VariableAddress[x807] : +# 35| mu35_11300(String) = Uninitialized[x807] : &:r35_11299 +# 35| r35_11301(glval) = FunctionAddress[String] : +# 35| v35_11302(void) = Call[String] : func:r35_11301, this:r35_11299 +# 35| mu35_11303(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11299 +# 35| r35_11305(glval) = VariableAddress[x807] : +# 35| r35_11306(glval) = FunctionAddress[~String] : +# 35| v35_11307(void) = Call[~String] : func:r35_11306, this:r35_11305 +# 35| mu35_11308(unknown) = ^CallSideEffect : ~m? +# 35| v35_11309(void) = ^IndirectReadSideEffect[-1] : &:r35_11305, ~m? +# 35| mu35_11310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11305 +# 35| r35_11311(bool) = Constant[0] : +# 35| v35_11312(void) = ConditionalBranch : r35_11311 #-----| False -> Block 808 #-----| True -> Block 1026 -# 2443| Block 808 -# 2443| r2443_1(glval) = VariableAddress[x808] : -# 2443| mu2443_2(String) = Uninitialized[x808] : &:r2443_1 -# 2443| r2443_3(glval) = FunctionAddress[String] : -# 2443| v2443_4(void) = Call[String] : func:r2443_3, this:r2443_1 -# 2443| mu2443_5(unknown) = ^CallSideEffect : ~m? -# 2443| mu2443_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2443_1 -# 2444| r2444_1(glval) = VariableAddress[x808] : -# 2444| r2444_2(glval) = FunctionAddress[~String] : -# 2444| v2444_3(void) = Call[~String] : func:r2444_2, this:r2444_1 -# 2444| mu2444_4(unknown) = ^CallSideEffect : ~m? -# 2444| v2444_5(void) = ^IndirectReadSideEffect[-1] : &:r2444_1, ~m? -# 2444| mu2444_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2444_1 -# 2444| r2444_7(bool) = Constant[0] : -# 2444| v2444_8(void) = ConditionalBranch : r2444_7 +# 35| Block 808 +# 35| r35_11313(glval) = VariableAddress[x808] : +# 35| mu35_11314(String) = Uninitialized[x808] : &:r35_11313 +# 35| r35_11315(glval) = FunctionAddress[String] : +# 35| v35_11316(void) = Call[String] : func:r35_11315, this:r35_11313 +# 35| mu35_11317(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11313 +# 35| r35_11319(glval) = VariableAddress[x808] : +# 35| r35_11320(glval) = FunctionAddress[~String] : +# 35| v35_11321(void) = Call[~String] : func:r35_11320, this:r35_11319 +# 35| mu35_11322(unknown) = ^CallSideEffect : ~m? +# 35| v35_11323(void) = ^IndirectReadSideEffect[-1] : &:r35_11319, ~m? +# 35| mu35_11324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11319 +# 35| r35_11325(bool) = Constant[0] : +# 35| v35_11326(void) = ConditionalBranch : r35_11325 #-----| False -> Block 809 #-----| True -> Block 1026 -# 2446| Block 809 -# 2446| r2446_1(glval) = VariableAddress[x809] : -# 2446| mu2446_2(String) = Uninitialized[x809] : &:r2446_1 -# 2446| r2446_3(glval) = FunctionAddress[String] : -# 2446| v2446_4(void) = Call[String] : func:r2446_3, this:r2446_1 -# 2446| mu2446_5(unknown) = ^CallSideEffect : ~m? -# 2446| mu2446_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2446_1 -# 2447| r2447_1(glval) = VariableAddress[x809] : -# 2447| r2447_2(glval) = FunctionAddress[~String] : -# 2447| v2447_3(void) = Call[~String] : func:r2447_2, this:r2447_1 -# 2447| mu2447_4(unknown) = ^CallSideEffect : ~m? -# 2447| v2447_5(void) = ^IndirectReadSideEffect[-1] : &:r2447_1, ~m? -# 2447| mu2447_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2447_1 -# 2447| r2447_7(bool) = Constant[0] : -# 2447| v2447_8(void) = ConditionalBranch : r2447_7 +# 35| Block 809 +# 35| r35_11327(glval) = VariableAddress[x809] : +# 35| mu35_11328(String) = Uninitialized[x809] : &:r35_11327 +# 35| r35_11329(glval) = FunctionAddress[String] : +# 35| v35_11330(void) = Call[String] : func:r35_11329, this:r35_11327 +# 35| mu35_11331(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11327 +# 35| r35_11333(glval) = VariableAddress[x809] : +# 35| r35_11334(glval) = FunctionAddress[~String] : +# 35| v35_11335(void) = Call[~String] : func:r35_11334, this:r35_11333 +# 35| mu35_11336(unknown) = ^CallSideEffect : ~m? +# 35| v35_11337(void) = ^IndirectReadSideEffect[-1] : &:r35_11333, ~m? +# 35| mu35_11338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11333 +# 35| r35_11339(bool) = Constant[0] : +# 35| v35_11340(void) = ConditionalBranch : r35_11339 #-----| False -> Block 810 #-----| True -> Block 1026 -# 2449| Block 810 -# 2449| r2449_1(glval) = VariableAddress[x810] : -# 2449| mu2449_2(String) = Uninitialized[x810] : &:r2449_1 -# 2449| r2449_3(glval) = FunctionAddress[String] : -# 2449| v2449_4(void) = Call[String] : func:r2449_3, this:r2449_1 -# 2449| mu2449_5(unknown) = ^CallSideEffect : ~m? -# 2449| mu2449_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2449_1 -# 2450| r2450_1(glval) = VariableAddress[x810] : -# 2450| r2450_2(glval) = FunctionAddress[~String] : -# 2450| v2450_3(void) = Call[~String] : func:r2450_2, this:r2450_1 -# 2450| mu2450_4(unknown) = ^CallSideEffect : ~m? -# 2450| v2450_5(void) = ^IndirectReadSideEffect[-1] : &:r2450_1, ~m? -# 2450| mu2450_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2450_1 -# 2450| r2450_7(bool) = Constant[0] : -# 2450| v2450_8(void) = ConditionalBranch : r2450_7 +# 35| Block 810 +# 35| r35_11341(glval) = VariableAddress[x810] : +# 35| mu35_11342(String) = Uninitialized[x810] : &:r35_11341 +# 35| r35_11343(glval) = FunctionAddress[String] : +# 35| v35_11344(void) = Call[String] : func:r35_11343, this:r35_11341 +# 35| mu35_11345(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11341 +# 35| r35_11347(glval) = VariableAddress[x810] : +# 35| r35_11348(glval) = FunctionAddress[~String] : +# 35| v35_11349(void) = Call[~String] : func:r35_11348, this:r35_11347 +# 35| mu35_11350(unknown) = ^CallSideEffect : ~m? +# 35| v35_11351(void) = ^IndirectReadSideEffect[-1] : &:r35_11347, ~m? +# 35| mu35_11352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11347 +# 35| r35_11353(bool) = Constant[0] : +# 35| v35_11354(void) = ConditionalBranch : r35_11353 #-----| False -> Block 811 #-----| True -> Block 1026 -# 2452| Block 811 -# 2452| r2452_1(glval) = VariableAddress[x811] : -# 2452| mu2452_2(String) = Uninitialized[x811] : &:r2452_1 -# 2452| r2452_3(glval) = FunctionAddress[String] : -# 2452| v2452_4(void) = Call[String] : func:r2452_3, this:r2452_1 -# 2452| mu2452_5(unknown) = ^CallSideEffect : ~m? -# 2452| mu2452_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2452_1 -# 2453| r2453_1(glval) = VariableAddress[x811] : -# 2453| r2453_2(glval) = FunctionAddress[~String] : -# 2453| v2453_3(void) = Call[~String] : func:r2453_2, this:r2453_1 -# 2453| mu2453_4(unknown) = ^CallSideEffect : ~m? -# 2453| v2453_5(void) = ^IndirectReadSideEffect[-1] : &:r2453_1, ~m? -# 2453| mu2453_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2453_1 -# 2453| r2453_7(bool) = Constant[0] : -# 2453| v2453_8(void) = ConditionalBranch : r2453_7 +# 35| Block 811 +# 35| r35_11355(glval) = VariableAddress[x811] : +# 35| mu35_11356(String) = Uninitialized[x811] : &:r35_11355 +# 35| r35_11357(glval) = FunctionAddress[String] : +# 35| v35_11358(void) = Call[String] : func:r35_11357, this:r35_11355 +# 35| mu35_11359(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11355 +# 35| r35_11361(glval) = VariableAddress[x811] : +# 35| r35_11362(glval) = FunctionAddress[~String] : +# 35| v35_11363(void) = Call[~String] : func:r35_11362, this:r35_11361 +# 35| mu35_11364(unknown) = ^CallSideEffect : ~m? +# 35| v35_11365(void) = ^IndirectReadSideEffect[-1] : &:r35_11361, ~m? +# 35| mu35_11366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11361 +# 35| r35_11367(bool) = Constant[0] : +# 35| v35_11368(void) = ConditionalBranch : r35_11367 #-----| False -> Block 812 #-----| True -> Block 1026 -# 2455| Block 812 -# 2455| r2455_1(glval) = VariableAddress[x812] : -# 2455| mu2455_2(String) = Uninitialized[x812] : &:r2455_1 -# 2455| r2455_3(glval) = FunctionAddress[String] : -# 2455| v2455_4(void) = Call[String] : func:r2455_3, this:r2455_1 -# 2455| mu2455_5(unknown) = ^CallSideEffect : ~m? -# 2455| mu2455_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2455_1 -# 2456| r2456_1(glval) = VariableAddress[x812] : -# 2456| r2456_2(glval) = FunctionAddress[~String] : -# 2456| v2456_3(void) = Call[~String] : func:r2456_2, this:r2456_1 -# 2456| mu2456_4(unknown) = ^CallSideEffect : ~m? -# 2456| v2456_5(void) = ^IndirectReadSideEffect[-1] : &:r2456_1, ~m? -# 2456| mu2456_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2456_1 -# 2456| r2456_7(bool) = Constant[0] : -# 2456| v2456_8(void) = ConditionalBranch : r2456_7 +# 35| Block 812 +# 35| r35_11369(glval) = VariableAddress[x812] : +# 35| mu35_11370(String) = Uninitialized[x812] : &:r35_11369 +# 35| r35_11371(glval) = FunctionAddress[String] : +# 35| v35_11372(void) = Call[String] : func:r35_11371, this:r35_11369 +# 35| mu35_11373(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11369 +# 35| r35_11375(glval) = VariableAddress[x812] : +# 35| r35_11376(glval) = FunctionAddress[~String] : +# 35| v35_11377(void) = Call[~String] : func:r35_11376, this:r35_11375 +# 35| mu35_11378(unknown) = ^CallSideEffect : ~m? +# 35| v35_11379(void) = ^IndirectReadSideEffect[-1] : &:r35_11375, ~m? +# 35| mu35_11380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11375 +# 35| r35_11381(bool) = Constant[0] : +# 35| v35_11382(void) = ConditionalBranch : r35_11381 #-----| False -> Block 813 #-----| True -> Block 1026 -# 2458| Block 813 -# 2458| r2458_1(glval) = VariableAddress[x813] : -# 2458| mu2458_2(String) = Uninitialized[x813] : &:r2458_1 -# 2458| r2458_3(glval) = FunctionAddress[String] : -# 2458| v2458_4(void) = Call[String] : func:r2458_3, this:r2458_1 -# 2458| mu2458_5(unknown) = ^CallSideEffect : ~m? -# 2458| mu2458_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2458_1 -# 2459| r2459_1(glval) = VariableAddress[x813] : -# 2459| r2459_2(glval) = FunctionAddress[~String] : -# 2459| v2459_3(void) = Call[~String] : func:r2459_2, this:r2459_1 -# 2459| mu2459_4(unknown) = ^CallSideEffect : ~m? -# 2459| v2459_5(void) = ^IndirectReadSideEffect[-1] : &:r2459_1, ~m? -# 2459| mu2459_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2459_1 -# 2459| r2459_7(bool) = Constant[0] : -# 2459| v2459_8(void) = ConditionalBranch : r2459_7 +# 35| Block 813 +# 35| r35_11383(glval) = VariableAddress[x813] : +# 35| mu35_11384(String) = Uninitialized[x813] : &:r35_11383 +# 35| r35_11385(glval) = FunctionAddress[String] : +# 35| v35_11386(void) = Call[String] : func:r35_11385, this:r35_11383 +# 35| mu35_11387(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11383 +# 35| r35_11389(glval) = VariableAddress[x813] : +# 35| r35_11390(glval) = FunctionAddress[~String] : +# 35| v35_11391(void) = Call[~String] : func:r35_11390, this:r35_11389 +# 35| mu35_11392(unknown) = ^CallSideEffect : ~m? +# 35| v35_11393(void) = ^IndirectReadSideEffect[-1] : &:r35_11389, ~m? +# 35| mu35_11394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11389 +# 35| r35_11395(bool) = Constant[0] : +# 35| v35_11396(void) = ConditionalBranch : r35_11395 #-----| False -> Block 814 #-----| True -> Block 1026 -# 2461| Block 814 -# 2461| r2461_1(glval) = VariableAddress[x814] : -# 2461| mu2461_2(String) = Uninitialized[x814] : &:r2461_1 -# 2461| r2461_3(glval) = FunctionAddress[String] : -# 2461| v2461_4(void) = Call[String] : func:r2461_3, this:r2461_1 -# 2461| mu2461_5(unknown) = ^CallSideEffect : ~m? -# 2461| mu2461_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2461_1 -# 2462| r2462_1(glval) = VariableAddress[x814] : -# 2462| r2462_2(glval) = FunctionAddress[~String] : -# 2462| v2462_3(void) = Call[~String] : func:r2462_2, this:r2462_1 -# 2462| mu2462_4(unknown) = ^CallSideEffect : ~m? -# 2462| v2462_5(void) = ^IndirectReadSideEffect[-1] : &:r2462_1, ~m? -# 2462| mu2462_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2462_1 -# 2462| r2462_7(bool) = Constant[0] : -# 2462| v2462_8(void) = ConditionalBranch : r2462_7 +# 35| Block 814 +# 35| r35_11397(glval) = VariableAddress[x814] : +# 35| mu35_11398(String) = Uninitialized[x814] : &:r35_11397 +# 35| r35_11399(glval) = FunctionAddress[String] : +# 35| v35_11400(void) = Call[String] : func:r35_11399, this:r35_11397 +# 35| mu35_11401(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11397 +# 35| r35_11403(glval) = VariableAddress[x814] : +# 35| r35_11404(glval) = FunctionAddress[~String] : +# 35| v35_11405(void) = Call[~String] : func:r35_11404, this:r35_11403 +# 35| mu35_11406(unknown) = ^CallSideEffect : ~m? +# 35| v35_11407(void) = ^IndirectReadSideEffect[-1] : &:r35_11403, ~m? +# 35| mu35_11408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11403 +# 35| r35_11409(bool) = Constant[0] : +# 35| v35_11410(void) = ConditionalBranch : r35_11409 #-----| False -> Block 815 #-----| True -> Block 1026 -# 2464| Block 815 -# 2464| r2464_1(glval) = VariableAddress[x815] : -# 2464| mu2464_2(String) = Uninitialized[x815] : &:r2464_1 -# 2464| r2464_3(glval) = FunctionAddress[String] : -# 2464| v2464_4(void) = Call[String] : func:r2464_3, this:r2464_1 -# 2464| mu2464_5(unknown) = ^CallSideEffect : ~m? -# 2464| mu2464_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2464_1 -# 2465| r2465_1(glval) = VariableAddress[x815] : -# 2465| r2465_2(glval) = FunctionAddress[~String] : -# 2465| v2465_3(void) = Call[~String] : func:r2465_2, this:r2465_1 -# 2465| mu2465_4(unknown) = ^CallSideEffect : ~m? -# 2465| v2465_5(void) = ^IndirectReadSideEffect[-1] : &:r2465_1, ~m? -# 2465| mu2465_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2465_1 -# 2465| r2465_7(bool) = Constant[0] : -# 2465| v2465_8(void) = ConditionalBranch : r2465_7 +# 35| Block 815 +# 35| r35_11411(glval) = VariableAddress[x815] : +# 35| mu35_11412(String) = Uninitialized[x815] : &:r35_11411 +# 35| r35_11413(glval) = FunctionAddress[String] : +# 35| v35_11414(void) = Call[String] : func:r35_11413, this:r35_11411 +# 35| mu35_11415(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11411 +# 35| r35_11417(glval) = VariableAddress[x815] : +# 35| r35_11418(glval) = FunctionAddress[~String] : +# 35| v35_11419(void) = Call[~String] : func:r35_11418, this:r35_11417 +# 35| mu35_11420(unknown) = ^CallSideEffect : ~m? +# 35| v35_11421(void) = ^IndirectReadSideEffect[-1] : &:r35_11417, ~m? +# 35| mu35_11422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11417 +# 35| r35_11423(bool) = Constant[0] : +# 35| v35_11424(void) = ConditionalBranch : r35_11423 #-----| False -> Block 816 #-----| True -> Block 1026 -# 2467| Block 816 -# 2467| r2467_1(glval) = VariableAddress[x816] : -# 2467| mu2467_2(String) = Uninitialized[x816] : &:r2467_1 -# 2467| r2467_3(glval) = FunctionAddress[String] : -# 2467| v2467_4(void) = Call[String] : func:r2467_3, this:r2467_1 -# 2467| mu2467_5(unknown) = ^CallSideEffect : ~m? -# 2467| mu2467_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2467_1 -# 2468| r2468_1(glval) = VariableAddress[x816] : -# 2468| r2468_2(glval) = FunctionAddress[~String] : -# 2468| v2468_3(void) = Call[~String] : func:r2468_2, this:r2468_1 -# 2468| mu2468_4(unknown) = ^CallSideEffect : ~m? -# 2468| v2468_5(void) = ^IndirectReadSideEffect[-1] : &:r2468_1, ~m? -# 2468| mu2468_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2468_1 -# 2468| r2468_7(bool) = Constant[0] : -# 2468| v2468_8(void) = ConditionalBranch : r2468_7 +# 35| Block 816 +# 35| r35_11425(glval) = VariableAddress[x816] : +# 35| mu35_11426(String) = Uninitialized[x816] : &:r35_11425 +# 35| r35_11427(glval) = FunctionAddress[String] : +# 35| v35_11428(void) = Call[String] : func:r35_11427, this:r35_11425 +# 35| mu35_11429(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11425 +# 35| r35_11431(glval) = VariableAddress[x816] : +# 35| r35_11432(glval) = FunctionAddress[~String] : +# 35| v35_11433(void) = Call[~String] : func:r35_11432, this:r35_11431 +# 35| mu35_11434(unknown) = ^CallSideEffect : ~m? +# 35| v35_11435(void) = ^IndirectReadSideEffect[-1] : &:r35_11431, ~m? +# 35| mu35_11436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11431 +# 35| r35_11437(bool) = Constant[0] : +# 35| v35_11438(void) = ConditionalBranch : r35_11437 #-----| False -> Block 817 #-----| True -> Block 1026 -# 2470| Block 817 -# 2470| r2470_1(glval) = VariableAddress[x817] : -# 2470| mu2470_2(String) = Uninitialized[x817] : &:r2470_1 -# 2470| r2470_3(glval) = FunctionAddress[String] : -# 2470| v2470_4(void) = Call[String] : func:r2470_3, this:r2470_1 -# 2470| mu2470_5(unknown) = ^CallSideEffect : ~m? -# 2470| mu2470_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2470_1 -# 2471| r2471_1(glval) = VariableAddress[x817] : -# 2471| r2471_2(glval) = FunctionAddress[~String] : -# 2471| v2471_3(void) = Call[~String] : func:r2471_2, this:r2471_1 -# 2471| mu2471_4(unknown) = ^CallSideEffect : ~m? -# 2471| v2471_5(void) = ^IndirectReadSideEffect[-1] : &:r2471_1, ~m? -# 2471| mu2471_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2471_1 -# 2471| r2471_7(bool) = Constant[0] : -# 2471| v2471_8(void) = ConditionalBranch : r2471_7 +# 35| Block 817 +# 35| r35_11439(glval) = VariableAddress[x817] : +# 35| mu35_11440(String) = Uninitialized[x817] : &:r35_11439 +# 35| r35_11441(glval) = FunctionAddress[String] : +# 35| v35_11442(void) = Call[String] : func:r35_11441, this:r35_11439 +# 35| mu35_11443(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11439 +# 35| r35_11445(glval) = VariableAddress[x817] : +# 35| r35_11446(glval) = FunctionAddress[~String] : +# 35| v35_11447(void) = Call[~String] : func:r35_11446, this:r35_11445 +# 35| mu35_11448(unknown) = ^CallSideEffect : ~m? +# 35| v35_11449(void) = ^IndirectReadSideEffect[-1] : &:r35_11445, ~m? +# 35| mu35_11450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11445 +# 35| r35_11451(bool) = Constant[0] : +# 35| v35_11452(void) = ConditionalBranch : r35_11451 #-----| False -> Block 818 #-----| True -> Block 1026 -# 2473| Block 818 -# 2473| r2473_1(glval) = VariableAddress[x818] : -# 2473| mu2473_2(String) = Uninitialized[x818] : &:r2473_1 -# 2473| r2473_3(glval) = FunctionAddress[String] : -# 2473| v2473_4(void) = Call[String] : func:r2473_3, this:r2473_1 -# 2473| mu2473_5(unknown) = ^CallSideEffect : ~m? -# 2473| mu2473_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2473_1 -# 2474| r2474_1(glval) = VariableAddress[x818] : -# 2474| r2474_2(glval) = FunctionAddress[~String] : -# 2474| v2474_3(void) = Call[~String] : func:r2474_2, this:r2474_1 -# 2474| mu2474_4(unknown) = ^CallSideEffect : ~m? -# 2474| v2474_5(void) = ^IndirectReadSideEffect[-1] : &:r2474_1, ~m? -# 2474| mu2474_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2474_1 -# 2474| r2474_7(bool) = Constant[0] : -# 2474| v2474_8(void) = ConditionalBranch : r2474_7 +# 35| Block 818 +# 35| r35_11453(glval) = VariableAddress[x818] : +# 35| mu35_11454(String) = Uninitialized[x818] : &:r35_11453 +# 35| r35_11455(glval) = FunctionAddress[String] : +# 35| v35_11456(void) = Call[String] : func:r35_11455, this:r35_11453 +# 35| mu35_11457(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11453 +# 35| r35_11459(glval) = VariableAddress[x818] : +# 35| r35_11460(glval) = FunctionAddress[~String] : +# 35| v35_11461(void) = Call[~String] : func:r35_11460, this:r35_11459 +# 35| mu35_11462(unknown) = ^CallSideEffect : ~m? +# 35| v35_11463(void) = ^IndirectReadSideEffect[-1] : &:r35_11459, ~m? +# 35| mu35_11464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11459 +# 35| r35_11465(bool) = Constant[0] : +# 35| v35_11466(void) = ConditionalBranch : r35_11465 #-----| False -> Block 819 #-----| True -> Block 1026 -# 2476| Block 819 -# 2476| r2476_1(glval) = VariableAddress[x819] : -# 2476| mu2476_2(String) = Uninitialized[x819] : &:r2476_1 -# 2476| r2476_3(glval) = FunctionAddress[String] : -# 2476| v2476_4(void) = Call[String] : func:r2476_3, this:r2476_1 -# 2476| mu2476_5(unknown) = ^CallSideEffect : ~m? -# 2476| mu2476_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2476_1 -# 2477| r2477_1(glval) = VariableAddress[x819] : -# 2477| r2477_2(glval) = FunctionAddress[~String] : -# 2477| v2477_3(void) = Call[~String] : func:r2477_2, this:r2477_1 -# 2477| mu2477_4(unknown) = ^CallSideEffect : ~m? -# 2477| v2477_5(void) = ^IndirectReadSideEffect[-1] : &:r2477_1, ~m? -# 2477| mu2477_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2477_1 -# 2477| r2477_7(bool) = Constant[0] : -# 2477| v2477_8(void) = ConditionalBranch : r2477_7 +# 35| Block 819 +# 35| r35_11467(glval) = VariableAddress[x819] : +# 35| mu35_11468(String) = Uninitialized[x819] : &:r35_11467 +# 35| r35_11469(glval) = FunctionAddress[String] : +# 35| v35_11470(void) = Call[String] : func:r35_11469, this:r35_11467 +# 35| mu35_11471(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11467 +# 35| r35_11473(glval) = VariableAddress[x819] : +# 35| r35_11474(glval) = FunctionAddress[~String] : +# 35| v35_11475(void) = Call[~String] : func:r35_11474, this:r35_11473 +# 35| mu35_11476(unknown) = ^CallSideEffect : ~m? +# 35| v35_11477(void) = ^IndirectReadSideEffect[-1] : &:r35_11473, ~m? +# 35| mu35_11478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11473 +# 35| r35_11479(bool) = Constant[0] : +# 35| v35_11480(void) = ConditionalBranch : r35_11479 #-----| False -> Block 820 #-----| True -> Block 1026 -# 2479| Block 820 -# 2479| r2479_1(glval) = VariableAddress[x820] : -# 2479| mu2479_2(String) = Uninitialized[x820] : &:r2479_1 -# 2479| r2479_3(glval) = FunctionAddress[String] : -# 2479| v2479_4(void) = Call[String] : func:r2479_3, this:r2479_1 -# 2479| mu2479_5(unknown) = ^CallSideEffect : ~m? -# 2479| mu2479_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2479_1 -# 2480| r2480_1(glval) = VariableAddress[x820] : -# 2480| r2480_2(glval) = FunctionAddress[~String] : -# 2480| v2480_3(void) = Call[~String] : func:r2480_2, this:r2480_1 -# 2480| mu2480_4(unknown) = ^CallSideEffect : ~m? -# 2480| v2480_5(void) = ^IndirectReadSideEffect[-1] : &:r2480_1, ~m? -# 2480| mu2480_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2480_1 -# 2480| r2480_7(bool) = Constant[0] : -# 2480| v2480_8(void) = ConditionalBranch : r2480_7 +# 35| Block 820 +# 35| r35_11481(glval) = VariableAddress[x820] : +# 35| mu35_11482(String) = Uninitialized[x820] : &:r35_11481 +# 35| r35_11483(glval) = FunctionAddress[String] : +# 35| v35_11484(void) = Call[String] : func:r35_11483, this:r35_11481 +# 35| mu35_11485(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11481 +# 35| r35_11487(glval) = VariableAddress[x820] : +# 35| r35_11488(glval) = FunctionAddress[~String] : +# 35| v35_11489(void) = Call[~String] : func:r35_11488, this:r35_11487 +# 35| mu35_11490(unknown) = ^CallSideEffect : ~m? +# 35| v35_11491(void) = ^IndirectReadSideEffect[-1] : &:r35_11487, ~m? +# 35| mu35_11492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11487 +# 35| r35_11493(bool) = Constant[0] : +# 35| v35_11494(void) = ConditionalBranch : r35_11493 #-----| False -> Block 821 #-----| True -> Block 1026 -# 2482| Block 821 -# 2482| r2482_1(glval) = VariableAddress[x821] : -# 2482| mu2482_2(String) = Uninitialized[x821] : &:r2482_1 -# 2482| r2482_3(glval) = FunctionAddress[String] : -# 2482| v2482_4(void) = Call[String] : func:r2482_3, this:r2482_1 -# 2482| mu2482_5(unknown) = ^CallSideEffect : ~m? -# 2482| mu2482_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2482_1 -# 2483| r2483_1(glval) = VariableAddress[x821] : -# 2483| r2483_2(glval) = FunctionAddress[~String] : -# 2483| v2483_3(void) = Call[~String] : func:r2483_2, this:r2483_1 -# 2483| mu2483_4(unknown) = ^CallSideEffect : ~m? -# 2483| v2483_5(void) = ^IndirectReadSideEffect[-1] : &:r2483_1, ~m? -# 2483| mu2483_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2483_1 -# 2483| r2483_7(bool) = Constant[0] : -# 2483| v2483_8(void) = ConditionalBranch : r2483_7 +# 35| Block 821 +# 35| r35_11495(glval) = VariableAddress[x821] : +# 35| mu35_11496(String) = Uninitialized[x821] : &:r35_11495 +# 35| r35_11497(glval) = FunctionAddress[String] : +# 35| v35_11498(void) = Call[String] : func:r35_11497, this:r35_11495 +# 35| mu35_11499(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11495 +# 35| r35_11501(glval) = VariableAddress[x821] : +# 35| r35_11502(glval) = FunctionAddress[~String] : +# 35| v35_11503(void) = Call[~String] : func:r35_11502, this:r35_11501 +# 35| mu35_11504(unknown) = ^CallSideEffect : ~m? +# 35| v35_11505(void) = ^IndirectReadSideEffect[-1] : &:r35_11501, ~m? +# 35| mu35_11506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11501 +# 35| r35_11507(bool) = Constant[0] : +# 35| v35_11508(void) = ConditionalBranch : r35_11507 #-----| False -> Block 822 #-----| True -> Block 1026 -# 2485| Block 822 -# 2485| r2485_1(glval) = VariableAddress[x822] : -# 2485| mu2485_2(String) = Uninitialized[x822] : &:r2485_1 -# 2485| r2485_3(glval) = FunctionAddress[String] : -# 2485| v2485_4(void) = Call[String] : func:r2485_3, this:r2485_1 -# 2485| mu2485_5(unknown) = ^CallSideEffect : ~m? -# 2485| mu2485_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2485_1 -# 2486| r2486_1(glval) = VariableAddress[x822] : -# 2486| r2486_2(glval) = FunctionAddress[~String] : -# 2486| v2486_3(void) = Call[~String] : func:r2486_2, this:r2486_1 -# 2486| mu2486_4(unknown) = ^CallSideEffect : ~m? -# 2486| v2486_5(void) = ^IndirectReadSideEffect[-1] : &:r2486_1, ~m? -# 2486| mu2486_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2486_1 -# 2486| r2486_7(bool) = Constant[0] : -# 2486| v2486_8(void) = ConditionalBranch : r2486_7 +# 35| Block 822 +# 35| r35_11509(glval) = VariableAddress[x822] : +# 35| mu35_11510(String) = Uninitialized[x822] : &:r35_11509 +# 35| r35_11511(glval) = FunctionAddress[String] : +# 35| v35_11512(void) = Call[String] : func:r35_11511, this:r35_11509 +# 35| mu35_11513(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11509 +# 35| r35_11515(glval) = VariableAddress[x822] : +# 35| r35_11516(glval) = FunctionAddress[~String] : +# 35| v35_11517(void) = Call[~String] : func:r35_11516, this:r35_11515 +# 35| mu35_11518(unknown) = ^CallSideEffect : ~m? +# 35| v35_11519(void) = ^IndirectReadSideEffect[-1] : &:r35_11515, ~m? +# 35| mu35_11520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11515 +# 35| r35_11521(bool) = Constant[0] : +# 35| v35_11522(void) = ConditionalBranch : r35_11521 #-----| False -> Block 823 #-----| True -> Block 1026 -# 2488| Block 823 -# 2488| r2488_1(glval) = VariableAddress[x823] : -# 2488| mu2488_2(String) = Uninitialized[x823] : &:r2488_1 -# 2488| r2488_3(glval) = FunctionAddress[String] : -# 2488| v2488_4(void) = Call[String] : func:r2488_3, this:r2488_1 -# 2488| mu2488_5(unknown) = ^CallSideEffect : ~m? -# 2488| mu2488_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2488_1 -# 2489| r2489_1(glval) = VariableAddress[x823] : -# 2489| r2489_2(glval) = FunctionAddress[~String] : -# 2489| v2489_3(void) = Call[~String] : func:r2489_2, this:r2489_1 -# 2489| mu2489_4(unknown) = ^CallSideEffect : ~m? -# 2489| v2489_5(void) = ^IndirectReadSideEffect[-1] : &:r2489_1, ~m? -# 2489| mu2489_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2489_1 -# 2489| r2489_7(bool) = Constant[0] : -# 2489| v2489_8(void) = ConditionalBranch : r2489_7 +# 35| Block 823 +# 35| r35_11523(glval) = VariableAddress[x823] : +# 35| mu35_11524(String) = Uninitialized[x823] : &:r35_11523 +# 35| r35_11525(glval) = FunctionAddress[String] : +# 35| v35_11526(void) = Call[String] : func:r35_11525, this:r35_11523 +# 35| mu35_11527(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11523 +# 35| r35_11529(glval) = VariableAddress[x823] : +# 35| r35_11530(glval) = FunctionAddress[~String] : +# 35| v35_11531(void) = Call[~String] : func:r35_11530, this:r35_11529 +# 35| mu35_11532(unknown) = ^CallSideEffect : ~m? +# 35| v35_11533(void) = ^IndirectReadSideEffect[-1] : &:r35_11529, ~m? +# 35| mu35_11534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11529 +# 35| r35_11535(bool) = Constant[0] : +# 35| v35_11536(void) = ConditionalBranch : r35_11535 #-----| False -> Block 824 #-----| True -> Block 1026 -# 2491| Block 824 -# 2491| r2491_1(glval) = VariableAddress[x824] : -# 2491| mu2491_2(String) = Uninitialized[x824] : &:r2491_1 -# 2491| r2491_3(glval) = FunctionAddress[String] : -# 2491| v2491_4(void) = Call[String] : func:r2491_3, this:r2491_1 -# 2491| mu2491_5(unknown) = ^CallSideEffect : ~m? -# 2491| mu2491_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2491_1 -# 2492| r2492_1(glval) = VariableAddress[x824] : -# 2492| r2492_2(glval) = FunctionAddress[~String] : -# 2492| v2492_3(void) = Call[~String] : func:r2492_2, this:r2492_1 -# 2492| mu2492_4(unknown) = ^CallSideEffect : ~m? -# 2492| v2492_5(void) = ^IndirectReadSideEffect[-1] : &:r2492_1, ~m? -# 2492| mu2492_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2492_1 -# 2492| r2492_7(bool) = Constant[0] : -# 2492| v2492_8(void) = ConditionalBranch : r2492_7 +# 35| Block 824 +# 35| r35_11537(glval) = VariableAddress[x824] : +# 35| mu35_11538(String) = Uninitialized[x824] : &:r35_11537 +# 35| r35_11539(glval) = FunctionAddress[String] : +# 35| v35_11540(void) = Call[String] : func:r35_11539, this:r35_11537 +# 35| mu35_11541(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11537 +# 35| r35_11543(glval) = VariableAddress[x824] : +# 35| r35_11544(glval) = FunctionAddress[~String] : +# 35| v35_11545(void) = Call[~String] : func:r35_11544, this:r35_11543 +# 35| mu35_11546(unknown) = ^CallSideEffect : ~m? +# 35| v35_11547(void) = ^IndirectReadSideEffect[-1] : &:r35_11543, ~m? +# 35| mu35_11548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11543 +# 35| r35_11549(bool) = Constant[0] : +# 35| v35_11550(void) = ConditionalBranch : r35_11549 #-----| False -> Block 825 #-----| True -> Block 1026 -# 2494| Block 825 -# 2494| r2494_1(glval) = VariableAddress[x825] : -# 2494| mu2494_2(String) = Uninitialized[x825] : &:r2494_1 -# 2494| r2494_3(glval) = FunctionAddress[String] : -# 2494| v2494_4(void) = Call[String] : func:r2494_3, this:r2494_1 -# 2494| mu2494_5(unknown) = ^CallSideEffect : ~m? -# 2494| mu2494_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2494_1 -# 2495| r2495_1(glval) = VariableAddress[x825] : -# 2495| r2495_2(glval) = FunctionAddress[~String] : -# 2495| v2495_3(void) = Call[~String] : func:r2495_2, this:r2495_1 -# 2495| mu2495_4(unknown) = ^CallSideEffect : ~m? -# 2495| v2495_5(void) = ^IndirectReadSideEffect[-1] : &:r2495_1, ~m? -# 2495| mu2495_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2495_1 -# 2495| r2495_7(bool) = Constant[0] : -# 2495| v2495_8(void) = ConditionalBranch : r2495_7 +# 35| Block 825 +# 35| r35_11551(glval) = VariableAddress[x825] : +# 35| mu35_11552(String) = Uninitialized[x825] : &:r35_11551 +# 35| r35_11553(glval) = FunctionAddress[String] : +# 35| v35_11554(void) = Call[String] : func:r35_11553, this:r35_11551 +# 35| mu35_11555(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11551 +# 35| r35_11557(glval) = VariableAddress[x825] : +# 35| r35_11558(glval) = FunctionAddress[~String] : +# 35| v35_11559(void) = Call[~String] : func:r35_11558, this:r35_11557 +# 35| mu35_11560(unknown) = ^CallSideEffect : ~m? +# 35| v35_11561(void) = ^IndirectReadSideEffect[-1] : &:r35_11557, ~m? +# 35| mu35_11562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11557 +# 35| r35_11563(bool) = Constant[0] : +# 35| v35_11564(void) = ConditionalBranch : r35_11563 #-----| False -> Block 826 #-----| True -> Block 1026 -# 2497| Block 826 -# 2497| r2497_1(glval) = VariableAddress[x826] : -# 2497| mu2497_2(String) = Uninitialized[x826] : &:r2497_1 -# 2497| r2497_3(glval) = FunctionAddress[String] : -# 2497| v2497_4(void) = Call[String] : func:r2497_3, this:r2497_1 -# 2497| mu2497_5(unknown) = ^CallSideEffect : ~m? -# 2497| mu2497_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2497_1 -# 2498| r2498_1(glval) = VariableAddress[x826] : -# 2498| r2498_2(glval) = FunctionAddress[~String] : -# 2498| v2498_3(void) = Call[~String] : func:r2498_2, this:r2498_1 -# 2498| mu2498_4(unknown) = ^CallSideEffect : ~m? -# 2498| v2498_5(void) = ^IndirectReadSideEffect[-1] : &:r2498_1, ~m? -# 2498| mu2498_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2498_1 -# 2498| r2498_7(bool) = Constant[0] : -# 2498| v2498_8(void) = ConditionalBranch : r2498_7 +# 35| Block 826 +# 35| r35_11565(glval) = VariableAddress[x826] : +# 35| mu35_11566(String) = Uninitialized[x826] : &:r35_11565 +# 35| r35_11567(glval) = FunctionAddress[String] : +# 35| v35_11568(void) = Call[String] : func:r35_11567, this:r35_11565 +# 35| mu35_11569(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11565 +# 35| r35_11571(glval) = VariableAddress[x826] : +# 35| r35_11572(glval) = FunctionAddress[~String] : +# 35| v35_11573(void) = Call[~String] : func:r35_11572, this:r35_11571 +# 35| mu35_11574(unknown) = ^CallSideEffect : ~m? +# 35| v35_11575(void) = ^IndirectReadSideEffect[-1] : &:r35_11571, ~m? +# 35| mu35_11576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11571 +# 35| r35_11577(bool) = Constant[0] : +# 35| v35_11578(void) = ConditionalBranch : r35_11577 #-----| False -> Block 827 #-----| True -> Block 1026 -# 2500| Block 827 -# 2500| r2500_1(glval) = VariableAddress[x827] : -# 2500| mu2500_2(String) = Uninitialized[x827] : &:r2500_1 -# 2500| r2500_3(glval) = FunctionAddress[String] : -# 2500| v2500_4(void) = Call[String] : func:r2500_3, this:r2500_1 -# 2500| mu2500_5(unknown) = ^CallSideEffect : ~m? -# 2500| mu2500_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2500_1 -# 2501| r2501_1(glval) = VariableAddress[x827] : -# 2501| r2501_2(glval) = FunctionAddress[~String] : -# 2501| v2501_3(void) = Call[~String] : func:r2501_2, this:r2501_1 -# 2501| mu2501_4(unknown) = ^CallSideEffect : ~m? -# 2501| v2501_5(void) = ^IndirectReadSideEffect[-1] : &:r2501_1, ~m? -# 2501| mu2501_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2501_1 -# 2501| r2501_7(bool) = Constant[0] : -# 2501| v2501_8(void) = ConditionalBranch : r2501_7 +# 35| Block 827 +# 35| r35_11579(glval) = VariableAddress[x827] : +# 35| mu35_11580(String) = Uninitialized[x827] : &:r35_11579 +# 35| r35_11581(glval) = FunctionAddress[String] : +# 35| v35_11582(void) = Call[String] : func:r35_11581, this:r35_11579 +# 35| mu35_11583(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11579 +# 35| r35_11585(glval) = VariableAddress[x827] : +# 35| r35_11586(glval) = FunctionAddress[~String] : +# 35| v35_11587(void) = Call[~String] : func:r35_11586, this:r35_11585 +# 35| mu35_11588(unknown) = ^CallSideEffect : ~m? +# 35| v35_11589(void) = ^IndirectReadSideEffect[-1] : &:r35_11585, ~m? +# 35| mu35_11590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11585 +# 35| r35_11591(bool) = Constant[0] : +# 35| v35_11592(void) = ConditionalBranch : r35_11591 #-----| False -> Block 828 #-----| True -> Block 1026 -# 2503| Block 828 -# 2503| r2503_1(glval) = VariableAddress[x828] : -# 2503| mu2503_2(String) = Uninitialized[x828] : &:r2503_1 -# 2503| r2503_3(glval) = FunctionAddress[String] : -# 2503| v2503_4(void) = Call[String] : func:r2503_3, this:r2503_1 -# 2503| mu2503_5(unknown) = ^CallSideEffect : ~m? -# 2503| mu2503_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2503_1 -# 2504| r2504_1(glval) = VariableAddress[x828] : -# 2504| r2504_2(glval) = FunctionAddress[~String] : -# 2504| v2504_3(void) = Call[~String] : func:r2504_2, this:r2504_1 -# 2504| mu2504_4(unknown) = ^CallSideEffect : ~m? -# 2504| v2504_5(void) = ^IndirectReadSideEffect[-1] : &:r2504_1, ~m? -# 2504| mu2504_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2504_1 -# 2504| r2504_7(bool) = Constant[0] : -# 2504| v2504_8(void) = ConditionalBranch : r2504_7 +# 35| Block 828 +# 35| r35_11593(glval) = VariableAddress[x828] : +# 35| mu35_11594(String) = Uninitialized[x828] : &:r35_11593 +# 35| r35_11595(glval) = FunctionAddress[String] : +# 35| v35_11596(void) = Call[String] : func:r35_11595, this:r35_11593 +# 35| mu35_11597(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11593 +# 35| r35_11599(glval) = VariableAddress[x828] : +# 35| r35_11600(glval) = FunctionAddress[~String] : +# 35| v35_11601(void) = Call[~String] : func:r35_11600, this:r35_11599 +# 35| mu35_11602(unknown) = ^CallSideEffect : ~m? +# 35| v35_11603(void) = ^IndirectReadSideEffect[-1] : &:r35_11599, ~m? +# 35| mu35_11604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11599 +# 35| r35_11605(bool) = Constant[0] : +# 35| v35_11606(void) = ConditionalBranch : r35_11605 #-----| False -> Block 829 #-----| True -> Block 1026 -# 2506| Block 829 -# 2506| r2506_1(glval) = VariableAddress[x829] : -# 2506| mu2506_2(String) = Uninitialized[x829] : &:r2506_1 -# 2506| r2506_3(glval) = FunctionAddress[String] : -# 2506| v2506_4(void) = Call[String] : func:r2506_3, this:r2506_1 -# 2506| mu2506_5(unknown) = ^CallSideEffect : ~m? -# 2506| mu2506_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2506_1 -# 2507| r2507_1(glval) = VariableAddress[x829] : -# 2507| r2507_2(glval) = FunctionAddress[~String] : -# 2507| v2507_3(void) = Call[~String] : func:r2507_2, this:r2507_1 -# 2507| mu2507_4(unknown) = ^CallSideEffect : ~m? -# 2507| v2507_5(void) = ^IndirectReadSideEffect[-1] : &:r2507_1, ~m? -# 2507| mu2507_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2507_1 -# 2507| r2507_7(bool) = Constant[0] : -# 2507| v2507_8(void) = ConditionalBranch : r2507_7 +# 35| Block 829 +# 35| r35_11607(glval) = VariableAddress[x829] : +# 35| mu35_11608(String) = Uninitialized[x829] : &:r35_11607 +# 35| r35_11609(glval) = FunctionAddress[String] : +# 35| v35_11610(void) = Call[String] : func:r35_11609, this:r35_11607 +# 35| mu35_11611(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11607 +# 35| r35_11613(glval) = VariableAddress[x829] : +# 35| r35_11614(glval) = FunctionAddress[~String] : +# 35| v35_11615(void) = Call[~String] : func:r35_11614, this:r35_11613 +# 35| mu35_11616(unknown) = ^CallSideEffect : ~m? +# 35| v35_11617(void) = ^IndirectReadSideEffect[-1] : &:r35_11613, ~m? +# 35| mu35_11618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11613 +# 35| r35_11619(bool) = Constant[0] : +# 35| v35_11620(void) = ConditionalBranch : r35_11619 #-----| False -> Block 830 #-----| True -> Block 1026 -# 2509| Block 830 -# 2509| r2509_1(glval) = VariableAddress[x830] : -# 2509| mu2509_2(String) = Uninitialized[x830] : &:r2509_1 -# 2509| r2509_3(glval) = FunctionAddress[String] : -# 2509| v2509_4(void) = Call[String] : func:r2509_3, this:r2509_1 -# 2509| mu2509_5(unknown) = ^CallSideEffect : ~m? -# 2509| mu2509_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2509_1 -# 2510| r2510_1(glval) = VariableAddress[x830] : -# 2510| r2510_2(glval) = FunctionAddress[~String] : -# 2510| v2510_3(void) = Call[~String] : func:r2510_2, this:r2510_1 -# 2510| mu2510_4(unknown) = ^CallSideEffect : ~m? -# 2510| v2510_5(void) = ^IndirectReadSideEffect[-1] : &:r2510_1, ~m? -# 2510| mu2510_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2510_1 -# 2510| r2510_7(bool) = Constant[0] : -# 2510| v2510_8(void) = ConditionalBranch : r2510_7 +# 35| Block 830 +# 35| r35_11621(glval) = VariableAddress[x830] : +# 35| mu35_11622(String) = Uninitialized[x830] : &:r35_11621 +# 35| r35_11623(glval) = FunctionAddress[String] : +# 35| v35_11624(void) = Call[String] : func:r35_11623, this:r35_11621 +# 35| mu35_11625(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11621 +# 35| r35_11627(glval) = VariableAddress[x830] : +# 35| r35_11628(glval) = FunctionAddress[~String] : +# 35| v35_11629(void) = Call[~String] : func:r35_11628, this:r35_11627 +# 35| mu35_11630(unknown) = ^CallSideEffect : ~m? +# 35| v35_11631(void) = ^IndirectReadSideEffect[-1] : &:r35_11627, ~m? +# 35| mu35_11632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11627 +# 35| r35_11633(bool) = Constant[0] : +# 35| v35_11634(void) = ConditionalBranch : r35_11633 #-----| False -> Block 831 #-----| True -> Block 1026 -# 2512| Block 831 -# 2512| r2512_1(glval) = VariableAddress[x831] : -# 2512| mu2512_2(String) = Uninitialized[x831] : &:r2512_1 -# 2512| r2512_3(glval) = FunctionAddress[String] : -# 2512| v2512_4(void) = Call[String] : func:r2512_3, this:r2512_1 -# 2512| mu2512_5(unknown) = ^CallSideEffect : ~m? -# 2512| mu2512_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2512_1 -# 2513| r2513_1(glval) = VariableAddress[x831] : -# 2513| r2513_2(glval) = FunctionAddress[~String] : -# 2513| v2513_3(void) = Call[~String] : func:r2513_2, this:r2513_1 -# 2513| mu2513_4(unknown) = ^CallSideEffect : ~m? -# 2513| v2513_5(void) = ^IndirectReadSideEffect[-1] : &:r2513_1, ~m? -# 2513| mu2513_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2513_1 -# 2513| r2513_7(bool) = Constant[0] : -# 2513| v2513_8(void) = ConditionalBranch : r2513_7 +# 35| Block 831 +# 35| r35_11635(glval) = VariableAddress[x831] : +# 35| mu35_11636(String) = Uninitialized[x831] : &:r35_11635 +# 35| r35_11637(glval) = FunctionAddress[String] : +# 35| v35_11638(void) = Call[String] : func:r35_11637, this:r35_11635 +# 35| mu35_11639(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11635 +# 35| r35_11641(glval) = VariableAddress[x831] : +# 35| r35_11642(glval) = FunctionAddress[~String] : +# 35| v35_11643(void) = Call[~String] : func:r35_11642, this:r35_11641 +# 35| mu35_11644(unknown) = ^CallSideEffect : ~m? +# 35| v35_11645(void) = ^IndirectReadSideEffect[-1] : &:r35_11641, ~m? +# 35| mu35_11646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11641 +# 35| r35_11647(bool) = Constant[0] : +# 35| v35_11648(void) = ConditionalBranch : r35_11647 #-----| False -> Block 832 #-----| True -> Block 1026 -# 2515| Block 832 -# 2515| r2515_1(glval) = VariableAddress[x832] : -# 2515| mu2515_2(String) = Uninitialized[x832] : &:r2515_1 -# 2515| r2515_3(glval) = FunctionAddress[String] : -# 2515| v2515_4(void) = Call[String] : func:r2515_3, this:r2515_1 -# 2515| mu2515_5(unknown) = ^CallSideEffect : ~m? -# 2515| mu2515_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2515_1 -# 2516| r2516_1(glval) = VariableAddress[x832] : -# 2516| r2516_2(glval) = FunctionAddress[~String] : -# 2516| v2516_3(void) = Call[~String] : func:r2516_2, this:r2516_1 -# 2516| mu2516_4(unknown) = ^CallSideEffect : ~m? -# 2516| v2516_5(void) = ^IndirectReadSideEffect[-1] : &:r2516_1, ~m? -# 2516| mu2516_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2516_1 -# 2516| r2516_7(bool) = Constant[0] : -# 2516| v2516_8(void) = ConditionalBranch : r2516_7 +# 35| Block 832 +# 35| r35_11649(glval) = VariableAddress[x832] : +# 35| mu35_11650(String) = Uninitialized[x832] : &:r35_11649 +# 35| r35_11651(glval) = FunctionAddress[String] : +# 35| v35_11652(void) = Call[String] : func:r35_11651, this:r35_11649 +# 35| mu35_11653(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11649 +# 35| r35_11655(glval) = VariableAddress[x832] : +# 35| r35_11656(glval) = FunctionAddress[~String] : +# 35| v35_11657(void) = Call[~String] : func:r35_11656, this:r35_11655 +# 35| mu35_11658(unknown) = ^CallSideEffect : ~m? +# 35| v35_11659(void) = ^IndirectReadSideEffect[-1] : &:r35_11655, ~m? +# 35| mu35_11660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11655 +# 35| r35_11661(bool) = Constant[0] : +# 35| v35_11662(void) = ConditionalBranch : r35_11661 #-----| False -> Block 833 #-----| True -> Block 1026 -# 2518| Block 833 -# 2518| r2518_1(glval) = VariableAddress[x833] : -# 2518| mu2518_2(String) = Uninitialized[x833] : &:r2518_1 -# 2518| r2518_3(glval) = FunctionAddress[String] : -# 2518| v2518_4(void) = Call[String] : func:r2518_3, this:r2518_1 -# 2518| mu2518_5(unknown) = ^CallSideEffect : ~m? -# 2518| mu2518_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2518_1 -# 2519| r2519_1(glval) = VariableAddress[x833] : -# 2519| r2519_2(glval) = FunctionAddress[~String] : -# 2519| v2519_3(void) = Call[~String] : func:r2519_2, this:r2519_1 -# 2519| mu2519_4(unknown) = ^CallSideEffect : ~m? -# 2519| v2519_5(void) = ^IndirectReadSideEffect[-1] : &:r2519_1, ~m? -# 2519| mu2519_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2519_1 -# 2519| r2519_7(bool) = Constant[0] : -# 2519| v2519_8(void) = ConditionalBranch : r2519_7 +# 35| Block 833 +# 35| r35_11663(glval) = VariableAddress[x833] : +# 35| mu35_11664(String) = Uninitialized[x833] : &:r35_11663 +# 35| r35_11665(glval) = FunctionAddress[String] : +# 35| v35_11666(void) = Call[String] : func:r35_11665, this:r35_11663 +# 35| mu35_11667(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11663 +# 35| r35_11669(glval) = VariableAddress[x833] : +# 35| r35_11670(glval) = FunctionAddress[~String] : +# 35| v35_11671(void) = Call[~String] : func:r35_11670, this:r35_11669 +# 35| mu35_11672(unknown) = ^CallSideEffect : ~m? +# 35| v35_11673(void) = ^IndirectReadSideEffect[-1] : &:r35_11669, ~m? +# 35| mu35_11674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11669 +# 35| r35_11675(bool) = Constant[0] : +# 35| v35_11676(void) = ConditionalBranch : r35_11675 #-----| False -> Block 834 #-----| True -> Block 1026 -# 2521| Block 834 -# 2521| r2521_1(glval) = VariableAddress[x834] : -# 2521| mu2521_2(String) = Uninitialized[x834] : &:r2521_1 -# 2521| r2521_3(glval) = FunctionAddress[String] : -# 2521| v2521_4(void) = Call[String] : func:r2521_3, this:r2521_1 -# 2521| mu2521_5(unknown) = ^CallSideEffect : ~m? -# 2521| mu2521_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2521_1 -# 2522| r2522_1(glval) = VariableAddress[x834] : -# 2522| r2522_2(glval) = FunctionAddress[~String] : -# 2522| v2522_3(void) = Call[~String] : func:r2522_2, this:r2522_1 -# 2522| mu2522_4(unknown) = ^CallSideEffect : ~m? -# 2522| v2522_5(void) = ^IndirectReadSideEffect[-1] : &:r2522_1, ~m? -# 2522| mu2522_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2522_1 -# 2522| r2522_7(bool) = Constant[0] : -# 2522| v2522_8(void) = ConditionalBranch : r2522_7 +# 35| Block 834 +# 35| r35_11677(glval) = VariableAddress[x834] : +# 35| mu35_11678(String) = Uninitialized[x834] : &:r35_11677 +# 35| r35_11679(glval) = FunctionAddress[String] : +# 35| v35_11680(void) = Call[String] : func:r35_11679, this:r35_11677 +# 35| mu35_11681(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11677 +# 35| r35_11683(glval) = VariableAddress[x834] : +# 35| r35_11684(glval) = FunctionAddress[~String] : +# 35| v35_11685(void) = Call[~String] : func:r35_11684, this:r35_11683 +# 35| mu35_11686(unknown) = ^CallSideEffect : ~m? +# 35| v35_11687(void) = ^IndirectReadSideEffect[-1] : &:r35_11683, ~m? +# 35| mu35_11688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11683 +# 35| r35_11689(bool) = Constant[0] : +# 35| v35_11690(void) = ConditionalBranch : r35_11689 #-----| False -> Block 835 #-----| True -> Block 1026 -# 2524| Block 835 -# 2524| r2524_1(glval) = VariableAddress[x835] : -# 2524| mu2524_2(String) = Uninitialized[x835] : &:r2524_1 -# 2524| r2524_3(glval) = FunctionAddress[String] : -# 2524| v2524_4(void) = Call[String] : func:r2524_3, this:r2524_1 -# 2524| mu2524_5(unknown) = ^CallSideEffect : ~m? -# 2524| mu2524_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2524_1 -# 2525| r2525_1(glval) = VariableAddress[x835] : -# 2525| r2525_2(glval) = FunctionAddress[~String] : -# 2525| v2525_3(void) = Call[~String] : func:r2525_2, this:r2525_1 -# 2525| mu2525_4(unknown) = ^CallSideEffect : ~m? -# 2525| v2525_5(void) = ^IndirectReadSideEffect[-1] : &:r2525_1, ~m? -# 2525| mu2525_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2525_1 -# 2525| r2525_7(bool) = Constant[0] : -# 2525| v2525_8(void) = ConditionalBranch : r2525_7 +# 35| Block 835 +# 35| r35_11691(glval) = VariableAddress[x835] : +# 35| mu35_11692(String) = Uninitialized[x835] : &:r35_11691 +# 35| r35_11693(glval) = FunctionAddress[String] : +# 35| v35_11694(void) = Call[String] : func:r35_11693, this:r35_11691 +# 35| mu35_11695(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11691 +# 35| r35_11697(glval) = VariableAddress[x835] : +# 35| r35_11698(glval) = FunctionAddress[~String] : +# 35| v35_11699(void) = Call[~String] : func:r35_11698, this:r35_11697 +# 35| mu35_11700(unknown) = ^CallSideEffect : ~m? +# 35| v35_11701(void) = ^IndirectReadSideEffect[-1] : &:r35_11697, ~m? +# 35| mu35_11702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11697 +# 35| r35_11703(bool) = Constant[0] : +# 35| v35_11704(void) = ConditionalBranch : r35_11703 #-----| False -> Block 836 #-----| True -> Block 1026 -# 2527| Block 836 -# 2527| r2527_1(glval) = VariableAddress[x836] : -# 2527| mu2527_2(String) = Uninitialized[x836] : &:r2527_1 -# 2527| r2527_3(glval) = FunctionAddress[String] : -# 2527| v2527_4(void) = Call[String] : func:r2527_3, this:r2527_1 -# 2527| mu2527_5(unknown) = ^CallSideEffect : ~m? -# 2527| mu2527_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2527_1 -# 2528| r2528_1(glval) = VariableAddress[x836] : -# 2528| r2528_2(glval) = FunctionAddress[~String] : -# 2528| v2528_3(void) = Call[~String] : func:r2528_2, this:r2528_1 -# 2528| mu2528_4(unknown) = ^CallSideEffect : ~m? -# 2528| v2528_5(void) = ^IndirectReadSideEffect[-1] : &:r2528_1, ~m? -# 2528| mu2528_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2528_1 -# 2528| r2528_7(bool) = Constant[0] : -# 2528| v2528_8(void) = ConditionalBranch : r2528_7 +# 35| Block 836 +# 35| r35_11705(glval) = VariableAddress[x836] : +# 35| mu35_11706(String) = Uninitialized[x836] : &:r35_11705 +# 35| r35_11707(glval) = FunctionAddress[String] : +# 35| v35_11708(void) = Call[String] : func:r35_11707, this:r35_11705 +# 35| mu35_11709(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11705 +# 35| r35_11711(glval) = VariableAddress[x836] : +# 35| r35_11712(glval) = FunctionAddress[~String] : +# 35| v35_11713(void) = Call[~String] : func:r35_11712, this:r35_11711 +# 35| mu35_11714(unknown) = ^CallSideEffect : ~m? +# 35| v35_11715(void) = ^IndirectReadSideEffect[-1] : &:r35_11711, ~m? +# 35| mu35_11716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11711 +# 35| r35_11717(bool) = Constant[0] : +# 35| v35_11718(void) = ConditionalBranch : r35_11717 #-----| False -> Block 837 #-----| True -> Block 1026 -# 2530| Block 837 -# 2530| r2530_1(glval) = VariableAddress[x837] : -# 2530| mu2530_2(String) = Uninitialized[x837] : &:r2530_1 -# 2530| r2530_3(glval) = FunctionAddress[String] : -# 2530| v2530_4(void) = Call[String] : func:r2530_3, this:r2530_1 -# 2530| mu2530_5(unknown) = ^CallSideEffect : ~m? -# 2530| mu2530_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2530_1 -# 2531| r2531_1(glval) = VariableAddress[x837] : -# 2531| r2531_2(glval) = FunctionAddress[~String] : -# 2531| v2531_3(void) = Call[~String] : func:r2531_2, this:r2531_1 -# 2531| mu2531_4(unknown) = ^CallSideEffect : ~m? -# 2531| v2531_5(void) = ^IndirectReadSideEffect[-1] : &:r2531_1, ~m? -# 2531| mu2531_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2531_1 -# 2531| r2531_7(bool) = Constant[0] : -# 2531| v2531_8(void) = ConditionalBranch : r2531_7 +# 35| Block 837 +# 35| r35_11719(glval) = VariableAddress[x837] : +# 35| mu35_11720(String) = Uninitialized[x837] : &:r35_11719 +# 35| r35_11721(glval) = FunctionAddress[String] : +# 35| v35_11722(void) = Call[String] : func:r35_11721, this:r35_11719 +# 35| mu35_11723(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11719 +# 35| r35_11725(glval) = VariableAddress[x837] : +# 35| r35_11726(glval) = FunctionAddress[~String] : +# 35| v35_11727(void) = Call[~String] : func:r35_11726, this:r35_11725 +# 35| mu35_11728(unknown) = ^CallSideEffect : ~m? +# 35| v35_11729(void) = ^IndirectReadSideEffect[-1] : &:r35_11725, ~m? +# 35| mu35_11730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11725 +# 35| r35_11731(bool) = Constant[0] : +# 35| v35_11732(void) = ConditionalBranch : r35_11731 #-----| False -> Block 838 #-----| True -> Block 1026 -# 2533| Block 838 -# 2533| r2533_1(glval) = VariableAddress[x838] : -# 2533| mu2533_2(String) = Uninitialized[x838] : &:r2533_1 -# 2533| r2533_3(glval) = FunctionAddress[String] : -# 2533| v2533_4(void) = Call[String] : func:r2533_3, this:r2533_1 -# 2533| mu2533_5(unknown) = ^CallSideEffect : ~m? -# 2533| mu2533_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2533_1 -# 2534| r2534_1(glval) = VariableAddress[x838] : -# 2534| r2534_2(glval) = FunctionAddress[~String] : -# 2534| v2534_3(void) = Call[~String] : func:r2534_2, this:r2534_1 -# 2534| mu2534_4(unknown) = ^CallSideEffect : ~m? -# 2534| v2534_5(void) = ^IndirectReadSideEffect[-1] : &:r2534_1, ~m? -# 2534| mu2534_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2534_1 -# 2534| r2534_7(bool) = Constant[0] : -# 2534| v2534_8(void) = ConditionalBranch : r2534_7 +# 35| Block 838 +# 35| r35_11733(glval) = VariableAddress[x838] : +# 35| mu35_11734(String) = Uninitialized[x838] : &:r35_11733 +# 35| r35_11735(glval) = FunctionAddress[String] : +# 35| v35_11736(void) = Call[String] : func:r35_11735, this:r35_11733 +# 35| mu35_11737(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11733 +# 35| r35_11739(glval) = VariableAddress[x838] : +# 35| r35_11740(glval) = FunctionAddress[~String] : +# 35| v35_11741(void) = Call[~String] : func:r35_11740, this:r35_11739 +# 35| mu35_11742(unknown) = ^CallSideEffect : ~m? +# 35| v35_11743(void) = ^IndirectReadSideEffect[-1] : &:r35_11739, ~m? +# 35| mu35_11744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11739 +# 35| r35_11745(bool) = Constant[0] : +# 35| v35_11746(void) = ConditionalBranch : r35_11745 #-----| False -> Block 839 #-----| True -> Block 1026 -# 2536| Block 839 -# 2536| r2536_1(glval) = VariableAddress[x839] : -# 2536| mu2536_2(String) = Uninitialized[x839] : &:r2536_1 -# 2536| r2536_3(glval) = FunctionAddress[String] : -# 2536| v2536_4(void) = Call[String] : func:r2536_3, this:r2536_1 -# 2536| mu2536_5(unknown) = ^CallSideEffect : ~m? -# 2536| mu2536_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2536_1 -# 2537| r2537_1(glval) = VariableAddress[x839] : -# 2537| r2537_2(glval) = FunctionAddress[~String] : -# 2537| v2537_3(void) = Call[~String] : func:r2537_2, this:r2537_1 -# 2537| mu2537_4(unknown) = ^CallSideEffect : ~m? -# 2537| v2537_5(void) = ^IndirectReadSideEffect[-1] : &:r2537_1, ~m? -# 2537| mu2537_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2537_1 -# 2537| r2537_7(bool) = Constant[0] : -# 2537| v2537_8(void) = ConditionalBranch : r2537_7 +# 35| Block 839 +# 35| r35_11747(glval) = VariableAddress[x839] : +# 35| mu35_11748(String) = Uninitialized[x839] : &:r35_11747 +# 35| r35_11749(glval) = FunctionAddress[String] : +# 35| v35_11750(void) = Call[String] : func:r35_11749, this:r35_11747 +# 35| mu35_11751(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11747 +# 35| r35_11753(glval) = VariableAddress[x839] : +# 35| r35_11754(glval) = FunctionAddress[~String] : +# 35| v35_11755(void) = Call[~String] : func:r35_11754, this:r35_11753 +# 35| mu35_11756(unknown) = ^CallSideEffect : ~m? +# 35| v35_11757(void) = ^IndirectReadSideEffect[-1] : &:r35_11753, ~m? +# 35| mu35_11758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11753 +# 35| r35_11759(bool) = Constant[0] : +# 35| v35_11760(void) = ConditionalBranch : r35_11759 #-----| False -> Block 840 #-----| True -> Block 1026 -# 2539| Block 840 -# 2539| r2539_1(glval) = VariableAddress[x840] : -# 2539| mu2539_2(String) = Uninitialized[x840] : &:r2539_1 -# 2539| r2539_3(glval) = FunctionAddress[String] : -# 2539| v2539_4(void) = Call[String] : func:r2539_3, this:r2539_1 -# 2539| mu2539_5(unknown) = ^CallSideEffect : ~m? -# 2539| mu2539_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2539_1 -# 2540| r2540_1(glval) = VariableAddress[x840] : -# 2540| r2540_2(glval) = FunctionAddress[~String] : -# 2540| v2540_3(void) = Call[~String] : func:r2540_2, this:r2540_1 -# 2540| mu2540_4(unknown) = ^CallSideEffect : ~m? -# 2540| v2540_5(void) = ^IndirectReadSideEffect[-1] : &:r2540_1, ~m? -# 2540| mu2540_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2540_1 -# 2540| r2540_7(bool) = Constant[0] : -# 2540| v2540_8(void) = ConditionalBranch : r2540_7 +# 35| Block 840 +# 35| r35_11761(glval) = VariableAddress[x840] : +# 35| mu35_11762(String) = Uninitialized[x840] : &:r35_11761 +# 35| r35_11763(glval) = FunctionAddress[String] : +# 35| v35_11764(void) = Call[String] : func:r35_11763, this:r35_11761 +# 35| mu35_11765(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11761 +# 35| r35_11767(glval) = VariableAddress[x840] : +# 35| r35_11768(glval) = FunctionAddress[~String] : +# 35| v35_11769(void) = Call[~String] : func:r35_11768, this:r35_11767 +# 35| mu35_11770(unknown) = ^CallSideEffect : ~m? +# 35| v35_11771(void) = ^IndirectReadSideEffect[-1] : &:r35_11767, ~m? +# 35| mu35_11772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11767 +# 35| r35_11773(bool) = Constant[0] : +# 35| v35_11774(void) = ConditionalBranch : r35_11773 #-----| False -> Block 841 #-----| True -> Block 1026 -# 2542| Block 841 -# 2542| r2542_1(glval) = VariableAddress[x841] : -# 2542| mu2542_2(String) = Uninitialized[x841] : &:r2542_1 -# 2542| r2542_3(glval) = FunctionAddress[String] : -# 2542| v2542_4(void) = Call[String] : func:r2542_3, this:r2542_1 -# 2542| mu2542_5(unknown) = ^CallSideEffect : ~m? -# 2542| mu2542_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2542_1 -# 2543| r2543_1(glval) = VariableAddress[x841] : -# 2543| r2543_2(glval) = FunctionAddress[~String] : -# 2543| v2543_3(void) = Call[~String] : func:r2543_2, this:r2543_1 -# 2543| mu2543_4(unknown) = ^CallSideEffect : ~m? -# 2543| v2543_5(void) = ^IndirectReadSideEffect[-1] : &:r2543_1, ~m? -# 2543| mu2543_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2543_1 -# 2543| r2543_7(bool) = Constant[0] : -# 2543| v2543_8(void) = ConditionalBranch : r2543_7 +# 35| Block 841 +# 35| r35_11775(glval) = VariableAddress[x841] : +# 35| mu35_11776(String) = Uninitialized[x841] : &:r35_11775 +# 35| r35_11777(glval) = FunctionAddress[String] : +# 35| v35_11778(void) = Call[String] : func:r35_11777, this:r35_11775 +# 35| mu35_11779(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11775 +# 35| r35_11781(glval) = VariableAddress[x841] : +# 35| r35_11782(glval) = FunctionAddress[~String] : +# 35| v35_11783(void) = Call[~String] : func:r35_11782, this:r35_11781 +# 35| mu35_11784(unknown) = ^CallSideEffect : ~m? +# 35| v35_11785(void) = ^IndirectReadSideEffect[-1] : &:r35_11781, ~m? +# 35| mu35_11786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11781 +# 35| r35_11787(bool) = Constant[0] : +# 35| v35_11788(void) = ConditionalBranch : r35_11787 #-----| False -> Block 842 #-----| True -> Block 1026 -# 2545| Block 842 -# 2545| r2545_1(glval) = VariableAddress[x842] : -# 2545| mu2545_2(String) = Uninitialized[x842] : &:r2545_1 -# 2545| r2545_3(glval) = FunctionAddress[String] : -# 2545| v2545_4(void) = Call[String] : func:r2545_3, this:r2545_1 -# 2545| mu2545_5(unknown) = ^CallSideEffect : ~m? -# 2545| mu2545_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2545_1 -# 2546| r2546_1(glval) = VariableAddress[x842] : -# 2546| r2546_2(glval) = FunctionAddress[~String] : -# 2546| v2546_3(void) = Call[~String] : func:r2546_2, this:r2546_1 -# 2546| mu2546_4(unknown) = ^CallSideEffect : ~m? -# 2546| v2546_5(void) = ^IndirectReadSideEffect[-1] : &:r2546_1, ~m? -# 2546| mu2546_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2546_1 -# 2546| r2546_7(bool) = Constant[0] : -# 2546| v2546_8(void) = ConditionalBranch : r2546_7 +# 35| Block 842 +# 35| r35_11789(glval) = VariableAddress[x842] : +# 35| mu35_11790(String) = Uninitialized[x842] : &:r35_11789 +# 35| r35_11791(glval) = FunctionAddress[String] : +# 35| v35_11792(void) = Call[String] : func:r35_11791, this:r35_11789 +# 35| mu35_11793(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11789 +# 35| r35_11795(glval) = VariableAddress[x842] : +# 35| r35_11796(glval) = FunctionAddress[~String] : +# 35| v35_11797(void) = Call[~String] : func:r35_11796, this:r35_11795 +# 35| mu35_11798(unknown) = ^CallSideEffect : ~m? +# 35| v35_11799(void) = ^IndirectReadSideEffect[-1] : &:r35_11795, ~m? +# 35| mu35_11800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11795 +# 35| r35_11801(bool) = Constant[0] : +# 35| v35_11802(void) = ConditionalBranch : r35_11801 #-----| False -> Block 843 #-----| True -> Block 1026 -# 2548| Block 843 -# 2548| r2548_1(glval) = VariableAddress[x843] : -# 2548| mu2548_2(String) = Uninitialized[x843] : &:r2548_1 -# 2548| r2548_3(glval) = FunctionAddress[String] : -# 2548| v2548_4(void) = Call[String] : func:r2548_3, this:r2548_1 -# 2548| mu2548_5(unknown) = ^CallSideEffect : ~m? -# 2548| mu2548_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2548_1 -# 2549| r2549_1(glval) = VariableAddress[x843] : -# 2549| r2549_2(glval) = FunctionAddress[~String] : -# 2549| v2549_3(void) = Call[~String] : func:r2549_2, this:r2549_1 -# 2549| mu2549_4(unknown) = ^CallSideEffect : ~m? -# 2549| v2549_5(void) = ^IndirectReadSideEffect[-1] : &:r2549_1, ~m? -# 2549| mu2549_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2549_1 -# 2549| r2549_7(bool) = Constant[0] : -# 2549| v2549_8(void) = ConditionalBranch : r2549_7 +# 35| Block 843 +# 35| r35_11803(glval) = VariableAddress[x843] : +# 35| mu35_11804(String) = Uninitialized[x843] : &:r35_11803 +# 35| r35_11805(glval) = FunctionAddress[String] : +# 35| v35_11806(void) = Call[String] : func:r35_11805, this:r35_11803 +# 35| mu35_11807(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11803 +# 35| r35_11809(glval) = VariableAddress[x843] : +# 35| r35_11810(glval) = FunctionAddress[~String] : +# 35| v35_11811(void) = Call[~String] : func:r35_11810, this:r35_11809 +# 35| mu35_11812(unknown) = ^CallSideEffect : ~m? +# 35| v35_11813(void) = ^IndirectReadSideEffect[-1] : &:r35_11809, ~m? +# 35| mu35_11814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11809 +# 35| r35_11815(bool) = Constant[0] : +# 35| v35_11816(void) = ConditionalBranch : r35_11815 #-----| False -> Block 844 #-----| True -> Block 1026 -# 2551| Block 844 -# 2551| r2551_1(glval) = VariableAddress[x844] : -# 2551| mu2551_2(String) = Uninitialized[x844] : &:r2551_1 -# 2551| r2551_3(glval) = FunctionAddress[String] : -# 2551| v2551_4(void) = Call[String] : func:r2551_3, this:r2551_1 -# 2551| mu2551_5(unknown) = ^CallSideEffect : ~m? -# 2551| mu2551_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2551_1 -# 2552| r2552_1(glval) = VariableAddress[x844] : -# 2552| r2552_2(glval) = FunctionAddress[~String] : -# 2552| v2552_3(void) = Call[~String] : func:r2552_2, this:r2552_1 -# 2552| mu2552_4(unknown) = ^CallSideEffect : ~m? -# 2552| v2552_5(void) = ^IndirectReadSideEffect[-1] : &:r2552_1, ~m? -# 2552| mu2552_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2552_1 -# 2552| r2552_7(bool) = Constant[0] : -# 2552| v2552_8(void) = ConditionalBranch : r2552_7 +# 35| Block 844 +# 35| r35_11817(glval) = VariableAddress[x844] : +# 35| mu35_11818(String) = Uninitialized[x844] : &:r35_11817 +# 35| r35_11819(glval) = FunctionAddress[String] : +# 35| v35_11820(void) = Call[String] : func:r35_11819, this:r35_11817 +# 35| mu35_11821(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11817 +# 35| r35_11823(glval) = VariableAddress[x844] : +# 35| r35_11824(glval) = FunctionAddress[~String] : +# 35| v35_11825(void) = Call[~String] : func:r35_11824, this:r35_11823 +# 35| mu35_11826(unknown) = ^CallSideEffect : ~m? +# 35| v35_11827(void) = ^IndirectReadSideEffect[-1] : &:r35_11823, ~m? +# 35| mu35_11828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11823 +# 35| r35_11829(bool) = Constant[0] : +# 35| v35_11830(void) = ConditionalBranch : r35_11829 #-----| False -> Block 845 #-----| True -> Block 1026 -# 2554| Block 845 -# 2554| r2554_1(glval) = VariableAddress[x845] : -# 2554| mu2554_2(String) = Uninitialized[x845] : &:r2554_1 -# 2554| r2554_3(glval) = FunctionAddress[String] : -# 2554| v2554_4(void) = Call[String] : func:r2554_3, this:r2554_1 -# 2554| mu2554_5(unknown) = ^CallSideEffect : ~m? -# 2554| mu2554_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2554_1 -# 2555| r2555_1(glval) = VariableAddress[x845] : -# 2555| r2555_2(glval) = FunctionAddress[~String] : -# 2555| v2555_3(void) = Call[~String] : func:r2555_2, this:r2555_1 -# 2555| mu2555_4(unknown) = ^CallSideEffect : ~m? -# 2555| v2555_5(void) = ^IndirectReadSideEffect[-1] : &:r2555_1, ~m? -# 2555| mu2555_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2555_1 -# 2555| r2555_7(bool) = Constant[0] : -# 2555| v2555_8(void) = ConditionalBranch : r2555_7 +# 35| Block 845 +# 35| r35_11831(glval) = VariableAddress[x845] : +# 35| mu35_11832(String) = Uninitialized[x845] : &:r35_11831 +# 35| r35_11833(glval) = FunctionAddress[String] : +# 35| v35_11834(void) = Call[String] : func:r35_11833, this:r35_11831 +# 35| mu35_11835(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11831 +# 35| r35_11837(glval) = VariableAddress[x845] : +# 35| r35_11838(glval) = FunctionAddress[~String] : +# 35| v35_11839(void) = Call[~String] : func:r35_11838, this:r35_11837 +# 35| mu35_11840(unknown) = ^CallSideEffect : ~m? +# 35| v35_11841(void) = ^IndirectReadSideEffect[-1] : &:r35_11837, ~m? +# 35| mu35_11842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11837 +# 35| r35_11843(bool) = Constant[0] : +# 35| v35_11844(void) = ConditionalBranch : r35_11843 #-----| False -> Block 846 #-----| True -> Block 1026 -# 2557| Block 846 -# 2557| r2557_1(glval) = VariableAddress[x846] : -# 2557| mu2557_2(String) = Uninitialized[x846] : &:r2557_1 -# 2557| r2557_3(glval) = FunctionAddress[String] : -# 2557| v2557_4(void) = Call[String] : func:r2557_3, this:r2557_1 -# 2557| mu2557_5(unknown) = ^CallSideEffect : ~m? -# 2557| mu2557_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2557_1 -# 2558| r2558_1(glval) = VariableAddress[x846] : -# 2558| r2558_2(glval) = FunctionAddress[~String] : -# 2558| v2558_3(void) = Call[~String] : func:r2558_2, this:r2558_1 -# 2558| mu2558_4(unknown) = ^CallSideEffect : ~m? -# 2558| v2558_5(void) = ^IndirectReadSideEffect[-1] : &:r2558_1, ~m? -# 2558| mu2558_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2558_1 -# 2558| r2558_7(bool) = Constant[0] : -# 2558| v2558_8(void) = ConditionalBranch : r2558_7 +# 35| Block 846 +# 35| r35_11845(glval) = VariableAddress[x846] : +# 35| mu35_11846(String) = Uninitialized[x846] : &:r35_11845 +# 35| r35_11847(glval) = FunctionAddress[String] : +# 35| v35_11848(void) = Call[String] : func:r35_11847, this:r35_11845 +# 35| mu35_11849(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11845 +# 35| r35_11851(glval) = VariableAddress[x846] : +# 35| r35_11852(glval) = FunctionAddress[~String] : +# 35| v35_11853(void) = Call[~String] : func:r35_11852, this:r35_11851 +# 35| mu35_11854(unknown) = ^CallSideEffect : ~m? +# 35| v35_11855(void) = ^IndirectReadSideEffect[-1] : &:r35_11851, ~m? +# 35| mu35_11856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11851 +# 35| r35_11857(bool) = Constant[0] : +# 35| v35_11858(void) = ConditionalBranch : r35_11857 #-----| False -> Block 847 #-----| True -> Block 1026 -# 2560| Block 847 -# 2560| r2560_1(glval) = VariableAddress[x847] : -# 2560| mu2560_2(String) = Uninitialized[x847] : &:r2560_1 -# 2560| r2560_3(glval) = FunctionAddress[String] : -# 2560| v2560_4(void) = Call[String] : func:r2560_3, this:r2560_1 -# 2560| mu2560_5(unknown) = ^CallSideEffect : ~m? -# 2560| mu2560_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2560_1 -# 2561| r2561_1(glval) = VariableAddress[x847] : -# 2561| r2561_2(glval) = FunctionAddress[~String] : -# 2561| v2561_3(void) = Call[~String] : func:r2561_2, this:r2561_1 -# 2561| mu2561_4(unknown) = ^CallSideEffect : ~m? -# 2561| v2561_5(void) = ^IndirectReadSideEffect[-1] : &:r2561_1, ~m? -# 2561| mu2561_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2561_1 -# 2561| r2561_7(bool) = Constant[0] : -# 2561| v2561_8(void) = ConditionalBranch : r2561_7 +# 35| Block 847 +# 35| r35_11859(glval) = VariableAddress[x847] : +# 35| mu35_11860(String) = Uninitialized[x847] : &:r35_11859 +# 35| r35_11861(glval) = FunctionAddress[String] : +# 35| v35_11862(void) = Call[String] : func:r35_11861, this:r35_11859 +# 35| mu35_11863(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11859 +# 35| r35_11865(glval) = VariableAddress[x847] : +# 35| r35_11866(glval) = FunctionAddress[~String] : +# 35| v35_11867(void) = Call[~String] : func:r35_11866, this:r35_11865 +# 35| mu35_11868(unknown) = ^CallSideEffect : ~m? +# 35| v35_11869(void) = ^IndirectReadSideEffect[-1] : &:r35_11865, ~m? +# 35| mu35_11870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11865 +# 35| r35_11871(bool) = Constant[0] : +# 35| v35_11872(void) = ConditionalBranch : r35_11871 #-----| False -> Block 848 #-----| True -> Block 1026 -# 2563| Block 848 -# 2563| r2563_1(glval) = VariableAddress[x848] : -# 2563| mu2563_2(String) = Uninitialized[x848] : &:r2563_1 -# 2563| r2563_3(glval) = FunctionAddress[String] : -# 2563| v2563_4(void) = Call[String] : func:r2563_3, this:r2563_1 -# 2563| mu2563_5(unknown) = ^CallSideEffect : ~m? -# 2563| mu2563_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2563_1 -# 2564| r2564_1(glval) = VariableAddress[x848] : -# 2564| r2564_2(glval) = FunctionAddress[~String] : -# 2564| v2564_3(void) = Call[~String] : func:r2564_2, this:r2564_1 -# 2564| mu2564_4(unknown) = ^CallSideEffect : ~m? -# 2564| v2564_5(void) = ^IndirectReadSideEffect[-1] : &:r2564_1, ~m? -# 2564| mu2564_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2564_1 -# 2564| r2564_7(bool) = Constant[0] : -# 2564| v2564_8(void) = ConditionalBranch : r2564_7 +# 35| Block 848 +# 35| r35_11873(glval) = VariableAddress[x848] : +# 35| mu35_11874(String) = Uninitialized[x848] : &:r35_11873 +# 35| r35_11875(glval) = FunctionAddress[String] : +# 35| v35_11876(void) = Call[String] : func:r35_11875, this:r35_11873 +# 35| mu35_11877(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11873 +# 35| r35_11879(glval) = VariableAddress[x848] : +# 35| r35_11880(glval) = FunctionAddress[~String] : +# 35| v35_11881(void) = Call[~String] : func:r35_11880, this:r35_11879 +# 35| mu35_11882(unknown) = ^CallSideEffect : ~m? +# 35| v35_11883(void) = ^IndirectReadSideEffect[-1] : &:r35_11879, ~m? +# 35| mu35_11884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11879 +# 35| r35_11885(bool) = Constant[0] : +# 35| v35_11886(void) = ConditionalBranch : r35_11885 #-----| False -> Block 849 #-----| True -> Block 1026 -# 2566| Block 849 -# 2566| r2566_1(glval) = VariableAddress[x849] : -# 2566| mu2566_2(String) = Uninitialized[x849] : &:r2566_1 -# 2566| r2566_3(glval) = FunctionAddress[String] : -# 2566| v2566_4(void) = Call[String] : func:r2566_3, this:r2566_1 -# 2566| mu2566_5(unknown) = ^CallSideEffect : ~m? -# 2566| mu2566_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2566_1 -# 2567| r2567_1(glval) = VariableAddress[x849] : -# 2567| r2567_2(glval) = FunctionAddress[~String] : -# 2567| v2567_3(void) = Call[~String] : func:r2567_2, this:r2567_1 -# 2567| mu2567_4(unknown) = ^CallSideEffect : ~m? -# 2567| v2567_5(void) = ^IndirectReadSideEffect[-1] : &:r2567_1, ~m? -# 2567| mu2567_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2567_1 -# 2567| r2567_7(bool) = Constant[0] : -# 2567| v2567_8(void) = ConditionalBranch : r2567_7 +# 35| Block 849 +# 35| r35_11887(glval) = VariableAddress[x849] : +# 35| mu35_11888(String) = Uninitialized[x849] : &:r35_11887 +# 35| r35_11889(glval) = FunctionAddress[String] : +# 35| v35_11890(void) = Call[String] : func:r35_11889, this:r35_11887 +# 35| mu35_11891(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11887 +# 35| r35_11893(glval) = VariableAddress[x849] : +# 35| r35_11894(glval) = FunctionAddress[~String] : +# 35| v35_11895(void) = Call[~String] : func:r35_11894, this:r35_11893 +# 35| mu35_11896(unknown) = ^CallSideEffect : ~m? +# 35| v35_11897(void) = ^IndirectReadSideEffect[-1] : &:r35_11893, ~m? +# 35| mu35_11898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11893 +# 35| r35_11899(bool) = Constant[0] : +# 35| v35_11900(void) = ConditionalBranch : r35_11899 #-----| False -> Block 850 #-----| True -> Block 1026 -# 2569| Block 850 -# 2569| r2569_1(glval) = VariableAddress[x850] : -# 2569| mu2569_2(String) = Uninitialized[x850] : &:r2569_1 -# 2569| r2569_3(glval) = FunctionAddress[String] : -# 2569| v2569_4(void) = Call[String] : func:r2569_3, this:r2569_1 -# 2569| mu2569_5(unknown) = ^CallSideEffect : ~m? -# 2569| mu2569_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2569_1 -# 2570| r2570_1(glval) = VariableAddress[x850] : -# 2570| r2570_2(glval) = FunctionAddress[~String] : -# 2570| v2570_3(void) = Call[~String] : func:r2570_2, this:r2570_1 -# 2570| mu2570_4(unknown) = ^CallSideEffect : ~m? -# 2570| v2570_5(void) = ^IndirectReadSideEffect[-1] : &:r2570_1, ~m? -# 2570| mu2570_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2570_1 -# 2570| r2570_7(bool) = Constant[0] : -# 2570| v2570_8(void) = ConditionalBranch : r2570_7 +# 35| Block 850 +# 35| r35_11901(glval) = VariableAddress[x850] : +# 35| mu35_11902(String) = Uninitialized[x850] : &:r35_11901 +# 35| r35_11903(glval) = FunctionAddress[String] : +# 35| v35_11904(void) = Call[String] : func:r35_11903, this:r35_11901 +# 35| mu35_11905(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11901 +# 35| r35_11907(glval) = VariableAddress[x850] : +# 35| r35_11908(glval) = FunctionAddress[~String] : +# 35| v35_11909(void) = Call[~String] : func:r35_11908, this:r35_11907 +# 35| mu35_11910(unknown) = ^CallSideEffect : ~m? +# 35| v35_11911(void) = ^IndirectReadSideEffect[-1] : &:r35_11907, ~m? +# 35| mu35_11912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11907 +# 35| r35_11913(bool) = Constant[0] : +# 35| v35_11914(void) = ConditionalBranch : r35_11913 #-----| False -> Block 851 #-----| True -> Block 1026 -# 2572| Block 851 -# 2572| r2572_1(glval) = VariableAddress[x851] : -# 2572| mu2572_2(String) = Uninitialized[x851] : &:r2572_1 -# 2572| r2572_3(glval) = FunctionAddress[String] : -# 2572| v2572_4(void) = Call[String] : func:r2572_3, this:r2572_1 -# 2572| mu2572_5(unknown) = ^CallSideEffect : ~m? -# 2572| mu2572_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2572_1 -# 2573| r2573_1(glval) = VariableAddress[x851] : -# 2573| r2573_2(glval) = FunctionAddress[~String] : -# 2573| v2573_3(void) = Call[~String] : func:r2573_2, this:r2573_1 -# 2573| mu2573_4(unknown) = ^CallSideEffect : ~m? -# 2573| v2573_5(void) = ^IndirectReadSideEffect[-1] : &:r2573_1, ~m? -# 2573| mu2573_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2573_1 -# 2573| r2573_7(bool) = Constant[0] : -# 2573| v2573_8(void) = ConditionalBranch : r2573_7 +# 35| Block 851 +# 35| r35_11915(glval) = VariableAddress[x851] : +# 35| mu35_11916(String) = Uninitialized[x851] : &:r35_11915 +# 35| r35_11917(glval) = FunctionAddress[String] : +# 35| v35_11918(void) = Call[String] : func:r35_11917, this:r35_11915 +# 35| mu35_11919(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11915 +# 35| r35_11921(glval) = VariableAddress[x851] : +# 35| r35_11922(glval) = FunctionAddress[~String] : +# 35| v35_11923(void) = Call[~String] : func:r35_11922, this:r35_11921 +# 35| mu35_11924(unknown) = ^CallSideEffect : ~m? +# 35| v35_11925(void) = ^IndirectReadSideEffect[-1] : &:r35_11921, ~m? +# 35| mu35_11926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11921 +# 35| r35_11927(bool) = Constant[0] : +# 35| v35_11928(void) = ConditionalBranch : r35_11927 #-----| False -> Block 852 #-----| True -> Block 1026 -# 2575| Block 852 -# 2575| r2575_1(glval) = VariableAddress[x852] : -# 2575| mu2575_2(String) = Uninitialized[x852] : &:r2575_1 -# 2575| r2575_3(glval) = FunctionAddress[String] : -# 2575| v2575_4(void) = Call[String] : func:r2575_3, this:r2575_1 -# 2575| mu2575_5(unknown) = ^CallSideEffect : ~m? -# 2575| mu2575_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2575_1 -# 2576| r2576_1(glval) = VariableAddress[x852] : -# 2576| r2576_2(glval) = FunctionAddress[~String] : -# 2576| v2576_3(void) = Call[~String] : func:r2576_2, this:r2576_1 -# 2576| mu2576_4(unknown) = ^CallSideEffect : ~m? -# 2576| v2576_5(void) = ^IndirectReadSideEffect[-1] : &:r2576_1, ~m? -# 2576| mu2576_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2576_1 -# 2576| r2576_7(bool) = Constant[0] : -# 2576| v2576_8(void) = ConditionalBranch : r2576_7 +# 35| Block 852 +# 35| r35_11929(glval) = VariableAddress[x852] : +# 35| mu35_11930(String) = Uninitialized[x852] : &:r35_11929 +# 35| r35_11931(glval) = FunctionAddress[String] : +# 35| v35_11932(void) = Call[String] : func:r35_11931, this:r35_11929 +# 35| mu35_11933(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11929 +# 35| r35_11935(glval) = VariableAddress[x852] : +# 35| r35_11936(glval) = FunctionAddress[~String] : +# 35| v35_11937(void) = Call[~String] : func:r35_11936, this:r35_11935 +# 35| mu35_11938(unknown) = ^CallSideEffect : ~m? +# 35| v35_11939(void) = ^IndirectReadSideEffect[-1] : &:r35_11935, ~m? +# 35| mu35_11940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11935 +# 35| r35_11941(bool) = Constant[0] : +# 35| v35_11942(void) = ConditionalBranch : r35_11941 #-----| False -> Block 853 #-----| True -> Block 1026 -# 2578| Block 853 -# 2578| r2578_1(glval) = VariableAddress[x853] : -# 2578| mu2578_2(String) = Uninitialized[x853] : &:r2578_1 -# 2578| r2578_3(glval) = FunctionAddress[String] : -# 2578| v2578_4(void) = Call[String] : func:r2578_3, this:r2578_1 -# 2578| mu2578_5(unknown) = ^CallSideEffect : ~m? -# 2578| mu2578_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2578_1 -# 2579| r2579_1(glval) = VariableAddress[x853] : -# 2579| r2579_2(glval) = FunctionAddress[~String] : -# 2579| v2579_3(void) = Call[~String] : func:r2579_2, this:r2579_1 -# 2579| mu2579_4(unknown) = ^CallSideEffect : ~m? -# 2579| v2579_5(void) = ^IndirectReadSideEffect[-1] : &:r2579_1, ~m? -# 2579| mu2579_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2579_1 -# 2579| r2579_7(bool) = Constant[0] : -# 2579| v2579_8(void) = ConditionalBranch : r2579_7 +# 35| Block 853 +# 35| r35_11943(glval) = VariableAddress[x853] : +# 35| mu35_11944(String) = Uninitialized[x853] : &:r35_11943 +# 35| r35_11945(glval) = FunctionAddress[String] : +# 35| v35_11946(void) = Call[String] : func:r35_11945, this:r35_11943 +# 35| mu35_11947(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11943 +# 35| r35_11949(glval) = VariableAddress[x853] : +# 35| r35_11950(glval) = FunctionAddress[~String] : +# 35| v35_11951(void) = Call[~String] : func:r35_11950, this:r35_11949 +# 35| mu35_11952(unknown) = ^CallSideEffect : ~m? +# 35| v35_11953(void) = ^IndirectReadSideEffect[-1] : &:r35_11949, ~m? +# 35| mu35_11954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11949 +# 35| r35_11955(bool) = Constant[0] : +# 35| v35_11956(void) = ConditionalBranch : r35_11955 #-----| False -> Block 854 #-----| True -> Block 1026 -# 2581| Block 854 -# 2581| r2581_1(glval) = VariableAddress[x854] : -# 2581| mu2581_2(String) = Uninitialized[x854] : &:r2581_1 -# 2581| r2581_3(glval) = FunctionAddress[String] : -# 2581| v2581_4(void) = Call[String] : func:r2581_3, this:r2581_1 -# 2581| mu2581_5(unknown) = ^CallSideEffect : ~m? -# 2581| mu2581_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2581_1 -# 2582| r2582_1(glval) = VariableAddress[x854] : -# 2582| r2582_2(glval) = FunctionAddress[~String] : -# 2582| v2582_3(void) = Call[~String] : func:r2582_2, this:r2582_1 -# 2582| mu2582_4(unknown) = ^CallSideEffect : ~m? -# 2582| v2582_5(void) = ^IndirectReadSideEffect[-1] : &:r2582_1, ~m? -# 2582| mu2582_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2582_1 -# 2582| r2582_7(bool) = Constant[0] : -# 2582| v2582_8(void) = ConditionalBranch : r2582_7 +# 35| Block 854 +# 35| r35_11957(glval) = VariableAddress[x854] : +# 35| mu35_11958(String) = Uninitialized[x854] : &:r35_11957 +# 35| r35_11959(glval) = FunctionAddress[String] : +# 35| v35_11960(void) = Call[String] : func:r35_11959, this:r35_11957 +# 35| mu35_11961(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11957 +# 35| r35_11963(glval) = VariableAddress[x854] : +# 35| r35_11964(glval) = FunctionAddress[~String] : +# 35| v35_11965(void) = Call[~String] : func:r35_11964, this:r35_11963 +# 35| mu35_11966(unknown) = ^CallSideEffect : ~m? +# 35| v35_11967(void) = ^IndirectReadSideEffect[-1] : &:r35_11963, ~m? +# 35| mu35_11968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11963 +# 35| r35_11969(bool) = Constant[0] : +# 35| v35_11970(void) = ConditionalBranch : r35_11969 #-----| False -> Block 855 #-----| True -> Block 1026 -# 2584| Block 855 -# 2584| r2584_1(glval) = VariableAddress[x855] : -# 2584| mu2584_2(String) = Uninitialized[x855] : &:r2584_1 -# 2584| r2584_3(glval) = FunctionAddress[String] : -# 2584| v2584_4(void) = Call[String] : func:r2584_3, this:r2584_1 -# 2584| mu2584_5(unknown) = ^CallSideEffect : ~m? -# 2584| mu2584_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2584_1 -# 2585| r2585_1(glval) = VariableAddress[x855] : -# 2585| r2585_2(glval) = FunctionAddress[~String] : -# 2585| v2585_3(void) = Call[~String] : func:r2585_2, this:r2585_1 -# 2585| mu2585_4(unknown) = ^CallSideEffect : ~m? -# 2585| v2585_5(void) = ^IndirectReadSideEffect[-1] : &:r2585_1, ~m? -# 2585| mu2585_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2585_1 -# 2585| r2585_7(bool) = Constant[0] : -# 2585| v2585_8(void) = ConditionalBranch : r2585_7 +# 35| Block 855 +# 35| r35_11971(glval) = VariableAddress[x855] : +# 35| mu35_11972(String) = Uninitialized[x855] : &:r35_11971 +# 35| r35_11973(glval) = FunctionAddress[String] : +# 35| v35_11974(void) = Call[String] : func:r35_11973, this:r35_11971 +# 35| mu35_11975(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11971 +# 35| r35_11977(glval) = VariableAddress[x855] : +# 35| r35_11978(glval) = FunctionAddress[~String] : +# 35| v35_11979(void) = Call[~String] : func:r35_11978, this:r35_11977 +# 35| mu35_11980(unknown) = ^CallSideEffect : ~m? +# 35| v35_11981(void) = ^IndirectReadSideEffect[-1] : &:r35_11977, ~m? +# 35| mu35_11982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11977 +# 35| r35_11983(bool) = Constant[0] : +# 35| v35_11984(void) = ConditionalBranch : r35_11983 #-----| False -> Block 856 #-----| True -> Block 1026 -# 2587| Block 856 -# 2587| r2587_1(glval) = VariableAddress[x856] : -# 2587| mu2587_2(String) = Uninitialized[x856] : &:r2587_1 -# 2587| r2587_3(glval) = FunctionAddress[String] : -# 2587| v2587_4(void) = Call[String] : func:r2587_3, this:r2587_1 -# 2587| mu2587_5(unknown) = ^CallSideEffect : ~m? -# 2587| mu2587_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2587_1 -# 2588| r2588_1(glval) = VariableAddress[x856] : -# 2588| r2588_2(glval) = FunctionAddress[~String] : -# 2588| v2588_3(void) = Call[~String] : func:r2588_2, this:r2588_1 -# 2588| mu2588_4(unknown) = ^CallSideEffect : ~m? -# 2588| v2588_5(void) = ^IndirectReadSideEffect[-1] : &:r2588_1, ~m? -# 2588| mu2588_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2588_1 -# 2588| r2588_7(bool) = Constant[0] : -# 2588| v2588_8(void) = ConditionalBranch : r2588_7 +# 35| Block 856 +# 35| r35_11985(glval) = VariableAddress[x856] : +# 35| mu35_11986(String) = Uninitialized[x856] : &:r35_11985 +# 35| r35_11987(glval) = FunctionAddress[String] : +# 35| v35_11988(void) = Call[String] : func:r35_11987, this:r35_11985 +# 35| mu35_11989(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11985 +# 35| r35_11991(glval) = VariableAddress[x856] : +# 35| r35_11992(glval) = FunctionAddress[~String] : +# 35| v35_11993(void) = Call[~String] : func:r35_11992, this:r35_11991 +# 35| mu35_11994(unknown) = ^CallSideEffect : ~m? +# 35| v35_11995(void) = ^IndirectReadSideEffect[-1] : &:r35_11991, ~m? +# 35| mu35_11996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11991 +# 35| r35_11997(bool) = Constant[0] : +# 35| v35_11998(void) = ConditionalBranch : r35_11997 #-----| False -> Block 857 #-----| True -> Block 1026 -# 2590| Block 857 -# 2590| r2590_1(glval) = VariableAddress[x857] : -# 2590| mu2590_2(String) = Uninitialized[x857] : &:r2590_1 -# 2590| r2590_3(glval) = FunctionAddress[String] : -# 2590| v2590_4(void) = Call[String] : func:r2590_3, this:r2590_1 -# 2590| mu2590_5(unknown) = ^CallSideEffect : ~m? -# 2590| mu2590_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2590_1 -# 2591| r2591_1(glval) = VariableAddress[x857] : -# 2591| r2591_2(glval) = FunctionAddress[~String] : -# 2591| v2591_3(void) = Call[~String] : func:r2591_2, this:r2591_1 -# 2591| mu2591_4(unknown) = ^CallSideEffect : ~m? -# 2591| v2591_5(void) = ^IndirectReadSideEffect[-1] : &:r2591_1, ~m? -# 2591| mu2591_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2591_1 -# 2591| r2591_7(bool) = Constant[0] : -# 2591| v2591_8(void) = ConditionalBranch : r2591_7 +# 35| Block 857 +# 35| r35_11999(glval) = VariableAddress[x857] : +# 35| mu35_12000(String) = Uninitialized[x857] : &:r35_11999 +# 35| r35_12001(glval) = FunctionAddress[String] : +# 35| v35_12002(void) = Call[String] : func:r35_12001, this:r35_11999 +# 35| mu35_12003(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11999 +# 35| r35_12005(glval) = VariableAddress[x857] : +# 35| r35_12006(glval) = FunctionAddress[~String] : +# 35| v35_12007(void) = Call[~String] : func:r35_12006, this:r35_12005 +# 35| mu35_12008(unknown) = ^CallSideEffect : ~m? +# 35| v35_12009(void) = ^IndirectReadSideEffect[-1] : &:r35_12005, ~m? +# 35| mu35_12010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12005 +# 35| r35_12011(bool) = Constant[0] : +# 35| v35_12012(void) = ConditionalBranch : r35_12011 #-----| False -> Block 858 #-----| True -> Block 1026 -# 2593| Block 858 -# 2593| r2593_1(glval) = VariableAddress[x858] : -# 2593| mu2593_2(String) = Uninitialized[x858] : &:r2593_1 -# 2593| r2593_3(glval) = FunctionAddress[String] : -# 2593| v2593_4(void) = Call[String] : func:r2593_3, this:r2593_1 -# 2593| mu2593_5(unknown) = ^CallSideEffect : ~m? -# 2593| mu2593_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2593_1 -# 2594| r2594_1(glval) = VariableAddress[x858] : -# 2594| r2594_2(glval) = FunctionAddress[~String] : -# 2594| v2594_3(void) = Call[~String] : func:r2594_2, this:r2594_1 -# 2594| mu2594_4(unknown) = ^CallSideEffect : ~m? -# 2594| v2594_5(void) = ^IndirectReadSideEffect[-1] : &:r2594_1, ~m? -# 2594| mu2594_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2594_1 -# 2594| r2594_7(bool) = Constant[0] : -# 2594| v2594_8(void) = ConditionalBranch : r2594_7 +# 35| Block 858 +# 35| r35_12013(glval) = VariableAddress[x858] : +# 35| mu35_12014(String) = Uninitialized[x858] : &:r35_12013 +# 35| r35_12015(glval) = FunctionAddress[String] : +# 35| v35_12016(void) = Call[String] : func:r35_12015, this:r35_12013 +# 35| mu35_12017(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12013 +# 35| r35_12019(glval) = VariableAddress[x858] : +# 35| r35_12020(glval) = FunctionAddress[~String] : +# 35| v35_12021(void) = Call[~String] : func:r35_12020, this:r35_12019 +# 35| mu35_12022(unknown) = ^CallSideEffect : ~m? +# 35| v35_12023(void) = ^IndirectReadSideEffect[-1] : &:r35_12019, ~m? +# 35| mu35_12024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12019 +# 35| r35_12025(bool) = Constant[0] : +# 35| v35_12026(void) = ConditionalBranch : r35_12025 #-----| False -> Block 859 #-----| True -> Block 1026 -# 2596| Block 859 -# 2596| r2596_1(glval) = VariableAddress[x859] : -# 2596| mu2596_2(String) = Uninitialized[x859] : &:r2596_1 -# 2596| r2596_3(glval) = FunctionAddress[String] : -# 2596| v2596_4(void) = Call[String] : func:r2596_3, this:r2596_1 -# 2596| mu2596_5(unknown) = ^CallSideEffect : ~m? -# 2596| mu2596_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2596_1 -# 2597| r2597_1(glval) = VariableAddress[x859] : -# 2597| r2597_2(glval) = FunctionAddress[~String] : -# 2597| v2597_3(void) = Call[~String] : func:r2597_2, this:r2597_1 -# 2597| mu2597_4(unknown) = ^CallSideEffect : ~m? -# 2597| v2597_5(void) = ^IndirectReadSideEffect[-1] : &:r2597_1, ~m? -# 2597| mu2597_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2597_1 -# 2597| r2597_7(bool) = Constant[0] : -# 2597| v2597_8(void) = ConditionalBranch : r2597_7 +# 35| Block 859 +# 35| r35_12027(glval) = VariableAddress[x859] : +# 35| mu35_12028(String) = Uninitialized[x859] : &:r35_12027 +# 35| r35_12029(glval) = FunctionAddress[String] : +# 35| v35_12030(void) = Call[String] : func:r35_12029, this:r35_12027 +# 35| mu35_12031(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12027 +# 35| r35_12033(glval) = VariableAddress[x859] : +# 35| r35_12034(glval) = FunctionAddress[~String] : +# 35| v35_12035(void) = Call[~String] : func:r35_12034, this:r35_12033 +# 35| mu35_12036(unknown) = ^CallSideEffect : ~m? +# 35| v35_12037(void) = ^IndirectReadSideEffect[-1] : &:r35_12033, ~m? +# 35| mu35_12038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12033 +# 35| r35_12039(bool) = Constant[0] : +# 35| v35_12040(void) = ConditionalBranch : r35_12039 #-----| False -> Block 860 #-----| True -> Block 1026 -# 2599| Block 860 -# 2599| r2599_1(glval) = VariableAddress[x860] : -# 2599| mu2599_2(String) = Uninitialized[x860] : &:r2599_1 -# 2599| r2599_3(glval) = FunctionAddress[String] : -# 2599| v2599_4(void) = Call[String] : func:r2599_3, this:r2599_1 -# 2599| mu2599_5(unknown) = ^CallSideEffect : ~m? -# 2599| mu2599_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2599_1 -# 2600| r2600_1(glval) = VariableAddress[x860] : -# 2600| r2600_2(glval) = FunctionAddress[~String] : -# 2600| v2600_3(void) = Call[~String] : func:r2600_2, this:r2600_1 -# 2600| mu2600_4(unknown) = ^CallSideEffect : ~m? -# 2600| v2600_5(void) = ^IndirectReadSideEffect[-1] : &:r2600_1, ~m? -# 2600| mu2600_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2600_1 -# 2600| r2600_7(bool) = Constant[0] : -# 2600| v2600_8(void) = ConditionalBranch : r2600_7 +# 35| Block 860 +# 35| r35_12041(glval) = VariableAddress[x860] : +# 35| mu35_12042(String) = Uninitialized[x860] : &:r35_12041 +# 35| r35_12043(glval) = FunctionAddress[String] : +# 35| v35_12044(void) = Call[String] : func:r35_12043, this:r35_12041 +# 35| mu35_12045(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12041 +# 35| r35_12047(glval) = VariableAddress[x860] : +# 35| r35_12048(glval) = FunctionAddress[~String] : +# 35| v35_12049(void) = Call[~String] : func:r35_12048, this:r35_12047 +# 35| mu35_12050(unknown) = ^CallSideEffect : ~m? +# 35| v35_12051(void) = ^IndirectReadSideEffect[-1] : &:r35_12047, ~m? +# 35| mu35_12052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12047 +# 35| r35_12053(bool) = Constant[0] : +# 35| v35_12054(void) = ConditionalBranch : r35_12053 #-----| False -> Block 861 #-----| True -> Block 1026 -# 2602| Block 861 -# 2602| r2602_1(glval) = VariableAddress[x861] : -# 2602| mu2602_2(String) = Uninitialized[x861] : &:r2602_1 -# 2602| r2602_3(glval) = FunctionAddress[String] : -# 2602| v2602_4(void) = Call[String] : func:r2602_3, this:r2602_1 -# 2602| mu2602_5(unknown) = ^CallSideEffect : ~m? -# 2602| mu2602_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2602_1 -# 2603| r2603_1(glval) = VariableAddress[x861] : -# 2603| r2603_2(glval) = FunctionAddress[~String] : -# 2603| v2603_3(void) = Call[~String] : func:r2603_2, this:r2603_1 -# 2603| mu2603_4(unknown) = ^CallSideEffect : ~m? -# 2603| v2603_5(void) = ^IndirectReadSideEffect[-1] : &:r2603_1, ~m? -# 2603| mu2603_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2603_1 -# 2603| r2603_7(bool) = Constant[0] : -# 2603| v2603_8(void) = ConditionalBranch : r2603_7 +# 35| Block 861 +# 35| r35_12055(glval) = VariableAddress[x861] : +# 35| mu35_12056(String) = Uninitialized[x861] : &:r35_12055 +# 35| r35_12057(glval) = FunctionAddress[String] : +# 35| v35_12058(void) = Call[String] : func:r35_12057, this:r35_12055 +# 35| mu35_12059(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12055 +# 35| r35_12061(glval) = VariableAddress[x861] : +# 35| r35_12062(glval) = FunctionAddress[~String] : +# 35| v35_12063(void) = Call[~String] : func:r35_12062, this:r35_12061 +# 35| mu35_12064(unknown) = ^CallSideEffect : ~m? +# 35| v35_12065(void) = ^IndirectReadSideEffect[-1] : &:r35_12061, ~m? +# 35| mu35_12066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12061 +# 35| r35_12067(bool) = Constant[0] : +# 35| v35_12068(void) = ConditionalBranch : r35_12067 #-----| False -> Block 862 #-----| True -> Block 1026 -# 2605| Block 862 -# 2605| r2605_1(glval) = VariableAddress[x862] : -# 2605| mu2605_2(String) = Uninitialized[x862] : &:r2605_1 -# 2605| r2605_3(glval) = FunctionAddress[String] : -# 2605| v2605_4(void) = Call[String] : func:r2605_3, this:r2605_1 -# 2605| mu2605_5(unknown) = ^CallSideEffect : ~m? -# 2605| mu2605_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2605_1 -# 2606| r2606_1(glval) = VariableAddress[x862] : -# 2606| r2606_2(glval) = FunctionAddress[~String] : -# 2606| v2606_3(void) = Call[~String] : func:r2606_2, this:r2606_1 -# 2606| mu2606_4(unknown) = ^CallSideEffect : ~m? -# 2606| v2606_5(void) = ^IndirectReadSideEffect[-1] : &:r2606_1, ~m? -# 2606| mu2606_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2606_1 -# 2606| r2606_7(bool) = Constant[0] : -# 2606| v2606_8(void) = ConditionalBranch : r2606_7 +# 35| Block 862 +# 35| r35_12069(glval) = VariableAddress[x862] : +# 35| mu35_12070(String) = Uninitialized[x862] : &:r35_12069 +# 35| r35_12071(glval) = FunctionAddress[String] : +# 35| v35_12072(void) = Call[String] : func:r35_12071, this:r35_12069 +# 35| mu35_12073(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12069 +# 35| r35_12075(glval) = VariableAddress[x862] : +# 35| r35_12076(glval) = FunctionAddress[~String] : +# 35| v35_12077(void) = Call[~String] : func:r35_12076, this:r35_12075 +# 35| mu35_12078(unknown) = ^CallSideEffect : ~m? +# 35| v35_12079(void) = ^IndirectReadSideEffect[-1] : &:r35_12075, ~m? +# 35| mu35_12080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12075 +# 35| r35_12081(bool) = Constant[0] : +# 35| v35_12082(void) = ConditionalBranch : r35_12081 #-----| False -> Block 863 #-----| True -> Block 1026 -# 2608| Block 863 -# 2608| r2608_1(glval) = VariableAddress[x863] : -# 2608| mu2608_2(String) = Uninitialized[x863] : &:r2608_1 -# 2608| r2608_3(glval) = FunctionAddress[String] : -# 2608| v2608_4(void) = Call[String] : func:r2608_3, this:r2608_1 -# 2608| mu2608_5(unknown) = ^CallSideEffect : ~m? -# 2608| mu2608_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2608_1 -# 2609| r2609_1(glval) = VariableAddress[x863] : -# 2609| r2609_2(glval) = FunctionAddress[~String] : -# 2609| v2609_3(void) = Call[~String] : func:r2609_2, this:r2609_1 -# 2609| mu2609_4(unknown) = ^CallSideEffect : ~m? -# 2609| v2609_5(void) = ^IndirectReadSideEffect[-1] : &:r2609_1, ~m? -# 2609| mu2609_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2609_1 -# 2609| r2609_7(bool) = Constant[0] : -# 2609| v2609_8(void) = ConditionalBranch : r2609_7 +# 35| Block 863 +# 35| r35_12083(glval) = VariableAddress[x863] : +# 35| mu35_12084(String) = Uninitialized[x863] : &:r35_12083 +# 35| r35_12085(glval) = FunctionAddress[String] : +# 35| v35_12086(void) = Call[String] : func:r35_12085, this:r35_12083 +# 35| mu35_12087(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12083 +# 35| r35_12089(glval) = VariableAddress[x863] : +# 35| r35_12090(glval) = FunctionAddress[~String] : +# 35| v35_12091(void) = Call[~String] : func:r35_12090, this:r35_12089 +# 35| mu35_12092(unknown) = ^CallSideEffect : ~m? +# 35| v35_12093(void) = ^IndirectReadSideEffect[-1] : &:r35_12089, ~m? +# 35| mu35_12094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12089 +# 35| r35_12095(bool) = Constant[0] : +# 35| v35_12096(void) = ConditionalBranch : r35_12095 #-----| False -> Block 864 #-----| True -> Block 1026 -# 2611| Block 864 -# 2611| r2611_1(glval) = VariableAddress[x864] : -# 2611| mu2611_2(String) = Uninitialized[x864] : &:r2611_1 -# 2611| r2611_3(glval) = FunctionAddress[String] : -# 2611| v2611_4(void) = Call[String] : func:r2611_3, this:r2611_1 -# 2611| mu2611_5(unknown) = ^CallSideEffect : ~m? -# 2611| mu2611_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2611_1 -# 2612| r2612_1(glval) = VariableAddress[x864] : -# 2612| r2612_2(glval) = FunctionAddress[~String] : -# 2612| v2612_3(void) = Call[~String] : func:r2612_2, this:r2612_1 -# 2612| mu2612_4(unknown) = ^CallSideEffect : ~m? -# 2612| v2612_5(void) = ^IndirectReadSideEffect[-1] : &:r2612_1, ~m? -# 2612| mu2612_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2612_1 -# 2612| r2612_7(bool) = Constant[0] : -# 2612| v2612_8(void) = ConditionalBranch : r2612_7 +# 35| Block 864 +# 35| r35_12097(glval) = VariableAddress[x864] : +# 35| mu35_12098(String) = Uninitialized[x864] : &:r35_12097 +# 35| r35_12099(glval) = FunctionAddress[String] : +# 35| v35_12100(void) = Call[String] : func:r35_12099, this:r35_12097 +# 35| mu35_12101(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12097 +# 35| r35_12103(glval) = VariableAddress[x864] : +# 35| r35_12104(glval) = FunctionAddress[~String] : +# 35| v35_12105(void) = Call[~String] : func:r35_12104, this:r35_12103 +# 35| mu35_12106(unknown) = ^CallSideEffect : ~m? +# 35| v35_12107(void) = ^IndirectReadSideEffect[-1] : &:r35_12103, ~m? +# 35| mu35_12108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12103 +# 35| r35_12109(bool) = Constant[0] : +# 35| v35_12110(void) = ConditionalBranch : r35_12109 #-----| False -> Block 865 #-----| True -> Block 1026 -# 2614| Block 865 -# 2614| r2614_1(glval) = VariableAddress[x865] : -# 2614| mu2614_2(String) = Uninitialized[x865] : &:r2614_1 -# 2614| r2614_3(glval) = FunctionAddress[String] : -# 2614| v2614_4(void) = Call[String] : func:r2614_3, this:r2614_1 -# 2614| mu2614_5(unknown) = ^CallSideEffect : ~m? -# 2614| mu2614_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2614_1 -# 2615| r2615_1(glval) = VariableAddress[x865] : -# 2615| r2615_2(glval) = FunctionAddress[~String] : -# 2615| v2615_3(void) = Call[~String] : func:r2615_2, this:r2615_1 -# 2615| mu2615_4(unknown) = ^CallSideEffect : ~m? -# 2615| v2615_5(void) = ^IndirectReadSideEffect[-1] : &:r2615_1, ~m? -# 2615| mu2615_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2615_1 -# 2615| r2615_7(bool) = Constant[0] : -# 2615| v2615_8(void) = ConditionalBranch : r2615_7 +# 35| Block 865 +# 35| r35_12111(glval) = VariableAddress[x865] : +# 35| mu35_12112(String) = Uninitialized[x865] : &:r35_12111 +# 35| r35_12113(glval) = FunctionAddress[String] : +# 35| v35_12114(void) = Call[String] : func:r35_12113, this:r35_12111 +# 35| mu35_12115(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12111 +# 35| r35_12117(glval) = VariableAddress[x865] : +# 35| r35_12118(glval) = FunctionAddress[~String] : +# 35| v35_12119(void) = Call[~String] : func:r35_12118, this:r35_12117 +# 35| mu35_12120(unknown) = ^CallSideEffect : ~m? +# 35| v35_12121(void) = ^IndirectReadSideEffect[-1] : &:r35_12117, ~m? +# 35| mu35_12122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12117 +# 35| r35_12123(bool) = Constant[0] : +# 35| v35_12124(void) = ConditionalBranch : r35_12123 #-----| False -> Block 866 #-----| True -> Block 1026 -# 2617| Block 866 -# 2617| r2617_1(glval) = VariableAddress[x866] : -# 2617| mu2617_2(String) = Uninitialized[x866] : &:r2617_1 -# 2617| r2617_3(glval) = FunctionAddress[String] : -# 2617| v2617_4(void) = Call[String] : func:r2617_3, this:r2617_1 -# 2617| mu2617_5(unknown) = ^CallSideEffect : ~m? -# 2617| mu2617_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2617_1 -# 2618| r2618_1(glval) = VariableAddress[x866] : -# 2618| r2618_2(glval) = FunctionAddress[~String] : -# 2618| v2618_3(void) = Call[~String] : func:r2618_2, this:r2618_1 -# 2618| mu2618_4(unknown) = ^CallSideEffect : ~m? -# 2618| v2618_5(void) = ^IndirectReadSideEffect[-1] : &:r2618_1, ~m? -# 2618| mu2618_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2618_1 -# 2618| r2618_7(bool) = Constant[0] : -# 2618| v2618_8(void) = ConditionalBranch : r2618_7 +# 35| Block 866 +# 35| r35_12125(glval) = VariableAddress[x866] : +# 35| mu35_12126(String) = Uninitialized[x866] : &:r35_12125 +# 35| r35_12127(glval) = FunctionAddress[String] : +# 35| v35_12128(void) = Call[String] : func:r35_12127, this:r35_12125 +# 35| mu35_12129(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12125 +# 35| r35_12131(glval) = VariableAddress[x866] : +# 35| r35_12132(glval) = FunctionAddress[~String] : +# 35| v35_12133(void) = Call[~String] : func:r35_12132, this:r35_12131 +# 35| mu35_12134(unknown) = ^CallSideEffect : ~m? +# 35| v35_12135(void) = ^IndirectReadSideEffect[-1] : &:r35_12131, ~m? +# 35| mu35_12136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12131 +# 35| r35_12137(bool) = Constant[0] : +# 35| v35_12138(void) = ConditionalBranch : r35_12137 #-----| False -> Block 867 #-----| True -> Block 1026 -# 2620| Block 867 -# 2620| r2620_1(glval) = VariableAddress[x867] : -# 2620| mu2620_2(String) = Uninitialized[x867] : &:r2620_1 -# 2620| r2620_3(glval) = FunctionAddress[String] : -# 2620| v2620_4(void) = Call[String] : func:r2620_3, this:r2620_1 -# 2620| mu2620_5(unknown) = ^CallSideEffect : ~m? -# 2620| mu2620_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2620_1 -# 2621| r2621_1(glval) = VariableAddress[x867] : -# 2621| r2621_2(glval) = FunctionAddress[~String] : -# 2621| v2621_3(void) = Call[~String] : func:r2621_2, this:r2621_1 -# 2621| mu2621_4(unknown) = ^CallSideEffect : ~m? -# 2621| v2621_5(void) = ^IndirectReadSideEffect[-1] : &:r2621_1, ~m? -# 2621| mu2621_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2621_1 -# 2621| r2621_7(bool) = Constant[0] : -# 2621| v2621_8(void) = ConditionalBranch : r2621_7 +# 35| Block 867 +# 35| r35_12139(glval) = VariableAddress[x867] : +# 35| mu35_12140(String) = Uninitialized[x867] : &:r35_12139 +# 35| r35_12141(glval) = FunctionAddress[String] : +# 35| v35_12142(void) = Call[String] : func:r35_12141, this:r35_12139 +# 35| mu35_12143(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12139 +# 35| r35_12145(glval) = VariableAddress[x867] : +# 35| r35_12146(glval) = FunctionAddress[~String] : +# 35| v35_12147(void) = Call[~String] : func:r35_12146, this:r35_12145 +# 35| mu35_12148(unknown) = ^CallSideEffect : ~m? +# 35| v35_12149(void) = ^IndirectReadSideEffect[-1] : &:r35_12145, ~m? +# 35| mu35_12150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12145 +# 35| r35_12151(bool) = Constant[0] : +# 35| v35_12152(void) = ConditionalBranch : r35_12151 #-----| False -> Block 868 #-----| True -> Block 1026 -# 2623| Block 868 -# 2623| r2623_1(glval) = VariableAddress[x868] : -# 2623| mu2623_2(String) = Uninitialized[x868] : &:r2623_1 -# 2623| r2623_3(glval) = FunctionAddress[String] : -# 2623| v2623_4(void) = Call[String] : func:r2623_3, this:r2623_1 -# 2623| mu2623_5(unknown) = ^CallSideEffect : ~m? -# 2623| mu2623_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2623_1 -# 2624| r2624_1(glval) = VariableAddress[x868] : -# 2624| r2624_2(glval) = FunctionAddress[~String] : -# 2624| v2624_3(void) = Call[~String] : func:r2624_2, this:r2624_1 -# 2624| mu2624_4(unknown) = ^CallSideEffect : ~m? -# 2624| v2624_5(void) = ^IndirectReadSideEffect[-1] : &:r2624_1, ~m? -# 2624| mu2624_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2624_1 -# 2624| r2624_7(bool) = Constant[0] : -# 2624| v2624_8(void) = ConditionalBranch : r2624_7 +# 35| Block 868 +# 35| r35_12153(glval) = VariableAddress[x868] : +# 35| mu35_12154(String) = Uninitialized[x868] : &:r35_12153 +# 35| r35_12155(glval) = FunctionAddress[String] : +# 35| v35_12156(void) = Call[String] : func:r35_12155, this:r35_12153 +# 35| mu35_12157(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12153 +# 35| r35_12159(glval) = VariableAddress[x868] : +# 35| r35_12160(glval) = FunctionAddress[~String] : +# 35| v35_12161(void) = Call[~String] : func:r35_12160, this:r35_12159 +# 35| mu35_12162(unknown) = ^CallSideEffect : ~m? +# 35| v35_12163(void) = ^IndirectReadSideEffect[-1] : &:r35_12159, ~m? +# 35| mu35_12164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12159 +# 35| r35_12165(bool) = Constant[0] : +# 35| v35_12166(void) = ConditionalBranch : r35_12165 #-----| False -> Block 869 #-----| True -> Block 1026 -# 2626| Block 869 -# 2626| r2626_1(glval) = VariableAddress[x869] : -# 2626| mu2626_2(String) = Uninitialized[x869] : &:r2626_1 -# 2626| r2626_3(glval) = FunctionAddress[String] : -# 2626| v2626_4(void) = Call[String] : func:r2626_3, this:r2626_1 -# 2626| mu2626_5(unknown) = ^CallSideEffect : ~m? -# 2626| mu2626_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2626_1 -# 2627| r2627_1(glval) = VariableAddress[x869] : -# 2627| r2627_2(glval) = FunctionAddress[~String] : -# 2627| v2627_3(void) = Call[~String] : func:r2627_2, this:r2627_1 -# 2627| mu2627_4(unknown) = ^CallSideEffect : ~m? -# 2627| v2627_5(void) = ^IndirectReadSideEffect[-1] : &:r2627_1, ~m? -# 2627| mu2627_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2627_1 -# 2627| r2627_7(bool) = Constant[0] : -# 2627| v2627_8(void) = ConditionalBranch : r2627_7 +# 35| Block 869 +# 35| r35_12167(glval) = VariableAddress[x869] : +# 35| mu35_12168(String) = Uninitialized[x869] : &:r35_12167 +# 35| r35_12169(glval) = FunctionAddress[String] : +# 35| v35_12170(void) = Call[String] : func:r35_12169, this:r35_12167 +# 35| mu35_12171(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12167 +# 35| r35_12173(glval) = VariableAddress[x869] : +# 35| r35_12174(glval) = FunctionAddress[~String] : +# 35| v35_12175(void) = Call[~String] : func:r35_12174, this:r35_12173 +# 35| mu35_12176(unknown) = ^CallSideEffect : ~m? +# 35| v35_12177(void) = ^IndirectReadSideEffect[-1] : &:r35_12173, ~m? +# 35| mu35_12178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12173 +# 35| r35_12179(bool) = Constant[0] : +# 35| v35_12180(void) = ConditionalBranch : r35_12179 #-----| False -> Block 870 #-----| True -> Block 1026 -# 2629| Block 870 -# 2629| r2629_1(glval) = VariableAddress[x870] : -# 2629| mu2629_2(String) = Uninitialized[x870] : &:r2629_1 -# 2629| r2629_3(glval) = FunctionAddress[String] : -# 2629| v2629_4(void) = Call[String] : func:r2629_3, this:r2629_1 -# 2629| mu2629_5(unknown) = ^CallSideEffect : ~m? -# 2629| mu2629_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2629_1 -# 2630| r2630_1(glval) = VariableAddress[x870] : -# 2630| r2630_2(glval) = FunctionAddress[~String] : -# 2630| v2630_3(void) = Call[~String] : func:r2630_2, this:r2630_1 -# 2630| mu2630_4(unknown) = ^CallSideEffect : ~m? -# 2630| v2630_5(void) = ^IndirectReadSideEffect[-1] : &:r2630_1, ~m? -# 2630| mu2630_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2630_1 -# 2630| r2630_7(bool) = Constant[0] : -# 2630| v2630_8(void) = ConditionalBranch : r2630_7 +# 35| Block 870 +# 35| r35_12181(glval) = VariableAddress[x870] : +# 35| mu35_12182(String) = Uninitialized[x870] : &:r35_12181 +# 35| r35_12183(glval) = FunctionAddress[String] : +# 35| v35_12184(void) = Call[String] : func:r35_12183, this:r35_12181 +# 35| mu35_12185(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12181 +# 35| r35_12187(glval) = VariableAddress[x870] : +# 35| r35_12188(glval) = FunctionAddress[~String] : +# 35| v35_12189(void) = Call[~String] : func:r35_12188, this:r35_12187 +# 35| mu35_12190(unknown) = ^CallSideEffect : ~m? +# 35| v35_12191(void) = ^IndirectReadSideEffect[-1] : &:r35_12187, ~m? +# 35| mu35_12192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12187 +# 35| r35_12193(bool) = Constant[0] : +# 35| v35_12194(void) = ConditionalBranch : r35_12193 #-----| False -> Block 871 #-----| True -> Block 1026 -# 2632| Block 871 -# 2632| r2632_1(glval) = VariableAddress[x871] : -# 2632| mu2632_2(String) = Uninitialized[x871] : &:r2632_1 -# 2632| r2632_3(glval) = FunctionAddress[String] : -# 2632| v2632_4(void) = Call[String] : func:r2632_3, this:r2632_1 -# 2632| mu2632_5(unknown) = ^CallSideEffect : ~m? -# 2632| mu2632_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2632_1 -# 2633| r2633_1(glval) = VariableAddress[x871] : -# 2633| r2633_2(glval) = FunctionAddress[~String] : -# 2633| v2633_3(void) = Call[~String] : func:r2633_2, this:r2633_1 -# 2633| mu2633_4(unknown) = ^CallSideEffect : ~m? -# 2633| v2633_5(void) = ^IndirectReadSideEffect[-1] : &:r2633_1, ~m? -# 2633| mu2633_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2633_1 -# 2633| r2633_7(bool) = Constant[0] : -# 2633| v2633_8(void) = ConditionalBranch : r2633_7 +# 35| Block 871 +# 35| r35_12195(glval) = VariableAddress[x871] : +# 35| mu35_12196(String) = Uninitialized[x871] : &:r35_12195 +# 35| r35_12197(glval) = FunctionAddress[String] : +# 35| v35_12198(void) = Call[String] : func:r35_12197, this:r35_12195 +# 35| mu35_12199(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12195 +# 35| r35_12201(glval) = VariableAddress[x871] : +# 35| r35_12202(glval) = FunctionAddress[~String] : +# 35| v35_12203(void) = Call[~String] : func:r35_12202, this:r35_12201 +# 35| mu35_12204(unknown) = ^CallSideEffect : ~m? +# 35| v35_12205(void) = ^IndirectReadSideEffect[-1] : &:r35_12201, ~m? +# 35| mu35_12206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12201 +# 35| r35_12207(bool) = Constant[0] : +# 35| v35_12208(void) = ConditionalBranch : r35_12207 #-----| False -> Block 872 #-----| True -> Block 1026 -# 2635| Block 872 -# 2635| r2635_1(glval) = VariableAddress[x872] : -# 2635| mu2635_2(String) = Uninitialized[x872] : &:r2635_1 -# 2635| r2635_3(glval) = FunctionAddress[String] : -# 2635| v2635_4(void) = Call[String] : func:r2635_3, this:r2635_1 -# 2635| mu2635_5(unknown) = ^CallSideEffect : ~m? -# 2635| mu2635_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2635_1 -# 2636| r2636_1(glval) = VariableAddress[x872] : -# 2636| r2636_2(glval) = FunctionAddress[~String] : -# 2636| v2636_3(void) = Call[~String] : func:r2636_2, this:r2636_1 -# 2636| mu2636_4(unknown) = ^CallSideEffect : ~m? -# 2636| v2636_5(void) = ^IndirectReadSideEffect[-1] : &:r2636_1, ~m? -# 2636| mu2636_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2636_1 -# 2636| r2636_7(bool) = Constant[0] : -# 2636| v2636_8(void) = ConditionalBranch : r2636_7 +# 35| Block 872 +# 35| r35_12209(glval) = VariableAddress[x872] : +# 35| mu35_12210(String) = Uninitialized[x872] : &:r35_12209 +# 35| r35_12211(glval) = FunctionAddress[String] : +# 35| v35_12212(void) = Call[String] : func:r35_12211, this:r35_12209 +# 35| mu35_12213(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12209 +# 35| r35_12215(glval) = VariableAddress[x872] : +# 35| r35_12216(glval) = FunctionAddress[~String] : +# 35| v35_12217(void) = Call[~String] : func:r35_12216, this:r35_12215 +# 35| mu35_12218(unknown) = ^CallSideEffect : ~m? +# 35| v35_12219(void) = ^IndirectReadSideEffect[-1] : &:r35_12215, ~m? +# 35| mu35_12220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12215 +# 35| r35_12221(bool) = Constant[0] : +# 35| v35_12222(void) = ConditionalBranch : r35_12221 #-----| False -> Block 873 #-----| True -> Block 1026 -# 2638| Block 873 -# 2638| r2638_1(glval) = VariableAddress[x873] : -# 2638| mu2638_2(String) = Uninitialized[x873] : &:r2638_1 -# 2638| r2638_3(glval) = FunctionAddress[String] : -# 2638| v2638_4(void) = Call[String] : func:r2638_3, this:r2638_1 -# 2638| mu2638_5(unknown) = ^CallSideEffect : ~m? -# 2638| mu2638_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2638_1 -# 2639| r2639_1(glval) = VariableAddress[x873] : -# 2639| r2639_2(glval) = FunctionAddress[~String] : -# 2639| v2639_3(void) = Call[~String] : func:r2639_2, this:r2639_1 -# 2639| mu2639_4(unknown) = ^CallSideEffect : ~m? -# 2639| v2639_5(void) = ^IndirectReadSideEffect[-1] : &:r2639_1, ~m? -# 2639| mu2639_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2639_1 -# 2639| r2639_7(bool) = Constant[0] : -# 2639| v2639_8(void) = ConditionalBranch : r2639_7 +# 35| Block 873 +# 35| r35_12223(glval) = VariableAddress[x873] : +# 35| mu35_12224(String) = Uninitialized[x873] : &:r35_12223 +# 35| r35_12225(glval) = FunctionAddress[String] : +# 35| v35_12226(void) = Call[String] : func:r35_12225, this:r35_12223 +# 35| mu35_12227(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12223 +# 35| r35_12229(glval) = VariableAddress[x873] : +# 35| r35_12230(glval) = FunctionAddress[~String] : +# 35| v35_12231(void) = Call[~String] : func:r35_12230, this:r35_12229 +# 35| mu35_12232(unknown) = ^CallSideEffect : ~m? +# 35| v35_12233(void) = ^IndirectReadSideEffect[-1] : &:r35_12229, ~m? +# 35| mu35_12234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12229 +# 35| r35_12235(bool) = Constant[0] : +# 35| v35_12236(void) = ConditionalBranch : r35_12235 #-----| False -> Block 874 #-----| True -> Block 1026 -# 2641| Block 874 -# 2641| r2641_1(glval) = VariableAddress[x874] : -# 2641| mu2641_2(String) = Uninitialized[x874] : &:r2641_1 -# 2641| r2641_3(glval) = FunctionAddress[String] : -# 2641| v2641_4(void) = Call[String] : func:r2641_3, this:r2641_1 -# 2641| mu2641_5(unknown) = ^CallSideEffect : ~m? -# 2641| mu2641_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2641_1 -# 2642| r2642_1(glval) = VariableAddress[x874] : -# 2642| r2642_2(glval) = FunctionAddress[~String] : -# 2642| v2642_3(void) = Call[~String] : func:r2642_2, this:r2642_1 -# 2642| mu2642_4(unknown) = ^CallSideEffect : ~m? -# 2642| v2642_5(void) = ^IndirectReadSideEffect[-1] : &:r2642_1, ~m? -# 2642| mu2642_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2642_1 -# 2642| r2642_7(bool) = Constant[0] : -# 2642| v2642_8(void) = ConditionalBranch : r2642_7 +# 35| Block 874 +# 35| r35_12237(glval) = VariableAddress[x874] : +# 35| mu35_12238(String) = Uninitialized[x874] : &:r35_12237 +# 35| r35_12239(glval) = FunctionAddress[String] : +# 35| v35_12240(void) = Call[String] : func:r35_12239, this:r35_12237 +# 35| mu35_12241(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12237 +# 35| r35_12243(glval) = VariableAddress[x874] : +# 35| r35_12244(glval) = FunctionAddress[~String] : +# 35| v35_12245(void) = Call[~String] : func:r35_12244, this:r35_12243 +# 35| mu35_12246(unknown) = ^CallSideEffect : ~m? +# 35| v35_12247(void) = ^IndirectReadSideEffect[-1] : &:r35_12243, ~m? +# 35| mu35_12248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12243 +# 35| r35_12249(bool) = Constant[0] : +# 35| v35_12250(void) = ConditionalBranch : r35_12249 #-----| False -> Block 875 #-----| True -> Block 1026 -# 2644| Block 875 -# 2644| r2644_1(glval) = VariableAddress[x875] : -# 2644| mu2644_2(String) = Uninitialized[x875] : &:r2644_1 -# 2644| r2644_3(glval) = FunctionAddress[String] : -# 2644| v2644_4(void) = Call[String] : func:r2644_3, this:r2644_1 -# 2644| mu2644_5(unknown) = ^CallSideEffect : ~m? -# 2644| mu2644_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2644_1 -# 2645| r2645_1(glval) = VariableAddress[x875] : -# 2645| r2645_2(glval) = FunctionAddress[~String] : -# 2645| v2645_3(void) = Call[~String] : func:r2645_2, this:r2645_1 -# 2645| mu2645_4(unknown) = ^CallSideEffect : ~m? -# 2645| v2645_5(void) = ^IndirectReadSideEffect[-1] : &:r2645_1, ~m? -# 2645| mu2645_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2645_1 -# 2645| r2645_7(bool) = Constant[0] : -# 2645| v2645_8(void) = ConditionalBranch : r2645_7 +# 35| Block 875 +# 35| r35_12251(glval) = VariableAddress[x875] : +# 35| mu35_12252(String) = Uninitialized[x875] : &:r35_12251 +# 35| r35_12253(glval) = FunctionAddress[String] : +# 35| v35_12254(void) = Call[String] : func:r35_12253, this:r35_12251 +# 35| mu35_12255(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12251 +# 35| r35_12257(glval) = VariableAddress[x875] : +# 35| r35_12258(glval) = FunctionAddress[~String] : +# 35| v35_12259(void) = Call[~String] : func:r35_12258, this:r35_12257 +# 35| mu35_12260(unknown) = ^CallSideEffect : ~m? +# 35| v35_12261(void) = ^IndirectReadSideEffect[-1] : &:r35_12257, ~m? +# 35| mu35_12262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12257 +# 35| r35_12263(bool) = Constant[0] : +# 35| v35_12264(void) = ConditionalBranch : r35_12263 #-----| False -> Block 876 #-----| True -> Block 1026 -# 2647| Block 876 -# 2647| r2647_1(glval) = VariableAddress[x876] : -# 2647| mu2647_2(String) = Uninitialized[x876] : &:r2647_1 -# 2647| r2647_3(glval) = FunctionAddress[String] : -# 2647| v2647_4(void) = Call[String] : func:r2647_3, this:r2647_1 -# 2647| mu2647_5(unknown) = ^CallSideEffect : ~m? -# 2647| mu2647_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2647_1 -# 2648| r2648_1(glval) = VariableAddress[x876] : -# 2648| r2648_2(glval) = FunctionAddress[~String] : -# 2648| v2648_3(void) = Call[~String] : func:r2648_2, this:r2648_1 -# 2648| mu2648_4(unknown) = ^CallSideEffect : ~m? -# 2648| v2648_5(void) = ^IndirectReadSideEffect[-1] : &:r2648_1, ~m? -# 2648| mu2648_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2648_1 -# 2648| r2648_7(bool) = Constant[0] : -# 2648| v2648_8(void) = ConditionalBranch : r2648_7 +# 35| Block 876 +# 35| r35_12265(glval) = VariableAddress[x876] : +# 35| mu35_12266(String) = Uninitialized[x876] : &:r35_12265 +# 35| r35_12267(glval) = FunctionAddress[String] : +# 35| v35_12268(void) = Call[String] : func:r35_12267, this:r35_12265 +# 35| mu35_12269(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12265 +# 35| r35_12271(glval) = VariableAddress[x876] : +# 35| r35_12272(glval) = FunctionAddress[~String] : +# 35| v35_12273(void) = Call[~String] : func:r35_12272, this:r35_12271 +# 35| mu35_12274(unknown) = ^CallSideEffect : ~m? +# 35| v35_12275(void) = ^IndirectReadSideEffect[-1] : &:r35_12271, ~m? +# 35| mu35_12276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12271 +# 35| r35_12277(bool) = Constant[0] : +# 35| v35_12278(void) = ConditionalBranch : r35_12277 #-----| False -> Block 877 #-----| True -> Block 1026 -# 2650| Block 877 -# 2650| r2650_1(glval) = VariableAddress[x877] : -# 2650| mu2650_2(String) = Uninitialized[x877] : &:r2650_1 -# 2650| r2650_3(glval) = FunctionAddress[String] : -# 2650| v2650_4(void) = Call[String] : func:r2650_3, this:r2650_1 -# 2650| mu2650_5(unknown) = ^CallSideEffect : ~m? -# 2650| mu2650_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2650_1 -# 2651| r2651_1(glval) = VariableAddress[x877] : -# 2651| r2651_2(glval) = FunctionAddress[~String] : -# 2651| v2651_3(void) = Call[~String] : func:r2651_2, this:r2651_1 -# 2651| mu2651_4(unknown) = ^CallSideEffect : ~m? -# 2651| v2651_5(void) = ^IndirectReadSideEffect[-1] : &:r2651_1, ~m? -# 2651| mu2651_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2651_1 -# 2651| r2651_7(bool) = Constant[0] : -# 2651| v2651_8(void) = ConditionalBranch : r2651_7 +# 35| Block 877 +# 35| r35_12279(glval) = VariableAddress[x877] : +# 35| mu35_12280(String) = Uninitialized[x877] : &:r35_12279 +# 35| r35_12281(glval) = FunctionAddress[String] : +# 35| v35_12282(void) = Call[String] : func:r35_12281, this:r35_12279 +# 35| mu35_12283(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12279 +# 35| r35_12285(glval) = VariableAddress[x877] : +# 35| r35_12286(glval) = FunctionAddress[~String] : +# 35| v35_12287(void) = Call[~String] : func:r35_12286, this:r35_12285 +# 35| mu35_12288(unknown) = ^CallSideEffect : ~m? +# 35| v35_12289(void) = ^IndirectReadSideEffect[-1] : &:r35_12285, ~m? +# 35| mu35_12290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12285 +# 35| r35_12291(bool) = Constant[0] : +# 35| v35_12292(void) = ConditionalBranch : r35_12291 #-----| False -> Block 878 #-----| True -> Block 1026 -# 2653| Block 878 -# 2653| r2653_1(glval) = VariableAddress[x878] : -# 2653| mu2653_2(String) = Uninitialized[x878] : &:r2653_1 -# 2653| r2653_3(glval) = FunctionAddress[String] : -# 2653| v2653_4(void) = Call[String] : func:r2653_3, this:r2653_1 -# 2653| mu2653_5(unknown) = ^CallSideEffect : ~m? -# 2653| mu2653_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2653_1 -# 2654| r2654_1(glval) = VariableAddress[x878] : -# 2654| r2654_2(glval) = FunctionAddress[~String] : -# 2654| v2654_3(void) = Call[~String] : func:r2654_2, this:r2654_1 -# 2654| mu2654_4(unknown) = ^CallSideEffect : ~m? -# 2654| v2654_5(void) = ^IndirectReadSideEffect[-1] : &:r2654_1, ~m? -# 2654| mu2654_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2654_1 -# 2654| r2654_7(bool) = Constant[0] : -# 2654| v2654_8(void) = ConditionalBranch : r2654_7 +# 35| Block 878 +# 35| r35_12293(glval) = VariableAddress[x878] : +# 35| mu35_12294(String) = Uninitialized[x878] : &:r35_12293 +# 35| r35_12295(glval) = FunctionAddress[String] : +# 35| v35_12296(void) = Call[String] : func:r35_12295, this:r35_12293 +# 35| mu35_12297(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12293 +# 35| r35_12299(glval) = VariableAddress[x878] : +# 35| r35_12300(glval) = FunctionAddress[~String] : +# 35| v35_12301(void) = Call[~String] : func:r35_12300, this:r35_12299 +# 35| mu35_12302(unknown) = ^CallSideEffect : ~m? +# 35| v35_12303(void) = ^IndirectReadSideEffect[-1] : &:r35_12299, ~m? +# 35| mu35_12304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12299 +# 35| r35_12305(bool) = Constant[0] : +# 35| v35_12306(void) = ConditionalBranch : r35_12305 #-----| False -> Block 879 #-----| True -> Block 1026 -# 2656| Block 879 -# 2656| r2656_1(glval) = VariableAddress[x879] : -# 2656| mu2656_2(String) = Uninitialized[x879] : &:r2656_1 -# 2656| r2656_3(glval) = FunctionAddress[String] : -# 2656| v2656_4(void) = Call[String] : func:r2656_3, this:r2656_1 -# 2656| mu2656_5(unknown) = ^CallSideEffect : ~m? -# 2656| mu2656_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2656_1 -# 2657| r2657_1(glval) = VariableAddress[x879] : -# 2657| r2657_2(glval) = FunctionAddress[~String] : -# 2657| v2657_3(void) = Call[~String] : func:r2657_2, this:r2657_1 -# 2657| mu2657_4(unknown) = ^CallSideEffect : ~m? -# 2657| v2657_5(void) = ^IndirectReadSideEffect[-1] : &:r2657_1, ~m? -# 2657| mu2657_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2657_1 -# 2657| r2657_7(bool) = Constant[0] : -# 2657| v2657_8(void) = ConditionalBranch : r2657_7 +# 35| Block 879 +# 35| r35_12307(glval) = VariableAddress[x879] : +# 35| mu35_12308(String) = Uninitialized[x879] : &:r35_12307 +# 35| r35_12309(glval) = FunctionAddress[String] : +# 35| v35_12310(void) = Call[String] : func:r35_12309, this:r35_12307 +# 35| mu35_12311(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12307 +# 35| r35_12313(glval) = VariableAddress[x879] : +# 35| r35_12314(glval) = FunctionAddress[~String] : +# 35| v35_12315(void) = Call[~String] : func:r35_12314, this:r35_12313 +# 35| mu35_12316(unknown) = ^CallSideEffect : ~m? +# 35| v35_12317(void) = ^IndirectReadSideEffect[-1] : &:r35_12313, ~m? +# 35| mu35_12318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12313 +# 35| r35_12319(bool) = Constant[0] : +# 35| v35_12320(void) = ConditionalBranch : r35_12319 #-----| False -> Block 880 #-----| True -> Block 1026 -# 2659| Block 880 -# 2659| r2659_1(glval) = VariableAddress[x880] : -# 2659| mu2659_2(String) = Uninitialized[x880] : &:r2659_1 -# 2659| r2659_3(glval) = FunctionAddress[String] : -# 2659| v2659_4(void) = Call[String] : func:r2659_3, this:r2659_1 -# 2659| mu2659_5(unknown) = ^CallSideEffect : ~m? -# 2659| mu2659_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2659_1 -# 2660| r2660_1(glval) = VariableAddress[x880] : -# 2660| r2660_2(glval) = FunctionAddress[~String] : -# 2660| v2660_3(void) = Call[~String] : func:r2660_2, this:r2660_1 -# 2660| mu2660_4(unknown) = ^CallSideEffect : ~m? -# 2660| v2660_5(void) = ^IndirectReadSideEffect[-1] : &:r2660_1, ~m? -# 2660| mu2660_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2660_1 -# 2660| r2660_7(bool) = Constant[0] : -# 2660| v2660_8(void) = ConditionalBranch : r2660_7 +# 35| Block 880 +# 35| r35_12321(glval) = VariableAddress[x880] : +# 35| mu35_12322(String) = Uninitialized[x880] : &:r35_12321 +# 35| r35_12323(glval) = FunctionAddress[String] : +# 35| v35_12324(void) = Call[String] : func:r35_12323, this:r35_12321 +# 35| mu35_12325(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12321 +# 35| r35_12327(glval) = VariableAddress[x880] : +# 35| r35_12328(glval) = FunctionAddress[~String] : +# 35| v35_12329(void) = Call[~String] : func:r35_12328, this:r35_12327 +# 35| mu35_12330(unknown) = ^CallSideEffect : ~m? +# 35| v35_12331(void) = ^IndirectReadSideEffect[-1] : &:r35_12327, ~m? +# 35| mu35_12332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12327 +# 35| r35_12333(bool) = Constant[0] : +# 35| v35_12334(void) = ConditionalBranch : r35_12333 #-----| False -> Block 881 #-----| True -> Block 1026 -# 2662| Block 881 -# 2662| r2662_1(glval) = VariableAddress[x881] : -# 2662| mu2662_2(String) = Uninitialized[x881] : &:r2662_1 -# 2662| r2662_3(glval) = FunctionAddress[String] : -# 2662| v2662_4(void) = Call[String] : func:r2662_3, this:r2662_1 -# 2662| mu2662_5(unknown) = ^CallSideEffect : ~m? -# 2662| mu2662_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2662_1 -# 2663| r2663_1(glval) = VariableAddress[x881] : -# 2663| r2663_2(glval) = FunctionAddress[~String] : -# 2663| v2663_3(void) = Call[~String] : func:r2663_2, this:r2663_1 -# 2663| mu2663_4(unknown) = ^CallSideEffect : ~m? -# 2663| v2663_5(void) = ^IndirectReadSideEffect[-1] : &:r2663_1, ~m? -# 2663| mu2663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2663_1 -# 2663| r2663_7(bool) = Constant[0] : -# 2663| v2663_8(void) = ConditionalBranch : r2663_7 +# 35| Block 881 +# 35| r35_12335(glval) = VariableAddress[x881] : +# 35| mu35_12336(String) = Uninitialized[x881] : &:r35_12335 +# 35| r35_12337(glval) = FunctionAddress[String] : +# 35| v35_12338(void) = Call[String] : func:r35_12337, this:r35_12335 +# 35| mu35_12339(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12335 +# 35| r35_12341(glval) = VariableAddress[x881] : +# 35| r35_12342(glval) = FunctionAddress[~String] : +# 35| v35_12343(void) = Call[~String] : func:r35_12342, this:r35_12341 +# 35| mu35_12344(unknown) = ^CallSideEffect : ~m? +# 35| v35_12345(void) = ^IndirectReadSideEffect[-1] : &:r35_12341, ~m? +# 35| mu35_12346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12341 +# 35| r35_12347(bool) = Constant[0] : +# 35| v35_12348(void) = ConditionalBranch : r35_12347 #-----| False -> Block 882 #-----| True -> Block 1026 -# 2665| Block 882 -# 2665| r2665_1(glval) = VariableAddress[x882] : -# 2665| mu2665_2(String) = Uninitialized[x882] : &:r2665_1 -# 2665| r2665_3(glval) = FunctionAddress[String] : -# 2665| v2665_4(void) = Call[String] : func:r2665_3, this:r2665_1 -# 2665| mu2665_5(unknown) = ^CallSideEffect : ~m? -# 2665| mu2665_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2665_1 -# 2666| r2666_1(glval) = VariableAddress[x882] : -# 2666| r2666_2(glval) = FunctionAddress[~String] : -# 2666| v2666_3(void) = Call[~String] : func:r2666_2, this:r2666_1 -# 2666| mu2666_4(unknown) = ^CallSideEffect : ~m? -# 2666| v2666_5(void) = ^IndirectReadSideEffect[-1] : &:r2666_1, ~m? -# 2666| mu2666_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2666_1 -# 2666| r2666_7(bool) = Constant[0] : -# 2666| v2666_8(void) = ConditionalBranch : r2666_7 +# 35| Block 882 +# 35| r35_12349(glval) = VariableAddress[x882] : +# 35| mu35_12350(String) = Uninitialized[x882] : &:r35_12349 +# 35| r35_12351(glval) = FunctionAddress[String] : +# 35| v35_12352(void) = Call[String] : func:r35_12351, this:r35_12349 +# 35| mu35_12353(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12349 +# 35| r35_12355(glval) = VariableAddress[x882] : +# 35| r35_12356(glval) = FunctionAddress[~String] : +# 35| v35_12357(void) = Call[~String] : func:r35_12356, this:r35_12355 +# 35| mu35_12358(unknown) = ^CallSideEffect : ~m? +# 35| v35_12359(void) = ^IndirectReadSideEffect[-1] : &:r35_12355, ~m? +# 35| mu35_12360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12355 +# 35| r35_12361(bool) = Constant[0] : +# 35| v35_12362(void) = ConditionalBranch : r35_12361 #-----| False -> Block 883 #-----| True -> Block 1026 -# 2668| Block 883 -# 2668| r2668_1(glval) = VariableAddress[x883] : -# 2668| mu2668_2(String) = Uninitialized[x883] : &:r2668_1 -# 2668| r2668_3(glval) = FunctionAddress[String] : -# 2668| v2668_4(void) = Call[String] : func:r2668_3, this:r2668_1 -# 2668| mu2668_5(unknown) = ^CallSideEffect : ~m? -# 2668| mu2668_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2668_1 -# 2669| r2669_1(glval) = VariableAddress[x883] : -# 2669| r2669_2(glval) = FunctionAddress[~String] : -# 2669| v2669_3(void) = Call[~String] : func:r2669_2, this:r2669_1 -# 2669| mu2669_4(unknown) = ^CallSideEffect : ~m? -# 2669| v2669_5(void) = ^IndirectReadSideEffect[-1] : &:r2669_1, ~m? -# 2669| mu2669_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2669_1 -# 2669| r2669_7(bool) = Constant[0] : -# 2669| v2669_8(void) = ConditionalBranch : r2669_7 +# 35| Block 883 +# 35| r35_12363(glval) = VariableAddress[x883] : +# 35| mu35_12364(String) = Uninitialized[x883] : &:r35_12363 +# 35| r35_12365(glval) = FunctionAddress[String] : +# 35| v35_12366(void) = Call[String] : func:r35_12365, this:r35_12363 +# 35| mu35_12367(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12363 +# 35| r35_12369(glval) = VariableAddress[x883] : +# 35| r35_12370(glval) = FunctionAddress[~String] : +# 35| v35_12371(void) = Call[~String] : func:r35_12370, this:r35_12369 +# 35| mu35_12372(unknown) = ^CallSideEffect : ~m? +# 35| v35_12373(void) = ^IndirectReadSideEffect[-1] : &:r35_12369, ~m? +# 35| mu35_12374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12369 +# 35| r35_12375(bool) = Constant[0] : +# 35| v35_12376(void) = ConditionalBranch : r35_12375 #-----| False -> Block 884 #-----| True -> Block 1026 -# 2671| Block 884 -# 2671| r2671_1(glval) = VariableAddress[x884] : -# 2671| mu2671_2(String) = Uninitialized[x884] : &:r2671_1 -# 2671| r2671_3(glval) = FunctionAddress[String] : -# 2671| v2671_4(void) = Call[String] : func:r2671_3, this:r2671_1 -# 2671| mu2671_5(unknown) = ^CallSideEffect : ~m? -# 2671| mu2671_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2671_1 -# 2672| r2672_1(glval) = VariableAddress[x884] : -# 2672| r2672_2(glval) = FunctionAddress[~String] : -# 2672| v2672_3(void) = Call[~String] : func:r2672_2, this:r2672_1 -# 2672| mu2672_4(unknown) = ^CallSideEffect : ~m? -# 2672| v2672_5(void) = ^IndirectReadSideEffect[-1] : &:r2672_1, ~m? -# 2672| mu2672_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2672_1 -# 2672| r2672_7(bool) = Constant[0] : -# 2672| v2672_8(void) = ConditionalBranch : r2672_7 +# 35| Block 884 +# 35| r35_12377(glval) = VariableAddress[x884] : +# 35| mu35_12378(String) = Uninitialized[x884] : &:r35_12377 +# 35| r35_12379(glval) = FunctionAddress[String] : +# 35| v35_12380(void) = Call[String] : func:r35_12379, this:r35_12377 +# 35| mu35_12381(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12377 +# 35| r35_12383(glval) = VariableAddress[x884] : +# 35| r35_12384(glval) = FunctionAddress[~String] : +# 35| v35_12385(void) = Call[~String] : func:r35_12384, this:r35_12383 +# 35| mu35_12386(unknown) = ^CallSideEffect : ~m? +# 35| v35_12387(void) = ^IndirectReadSideEffect[-1] : &:r35_12383, ~m? +# 35| mu35_12388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12383 +# 35| r35_12389(bool) = Constant[0] : +# 35| v35_12390(void) = ConditionalBranch : r35_12389 #-----| False -> Block 885 #-----| True -> Block 1026 -# 2674| Block 885 -# 2674| r2674_1(glval) = VariableAddress[x885] : -# 2674| mu2674_2(String) = Uninitialized[x885] : &:r2674_1 -# 2674| r2674_3(glval) = FunctionAddress[String] : -# 2674| v2674_4(void) = Call[String] : func:r2674_3, this:r2674_1 -# 2674| mu2674_5(unknown) = ^CallSideEffect : ~m? -# 2674| mu2674_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2674_1 -# 2675| r2675_1(glval) = VariableAddress[x885] : -# 2675| r2675_2(glval) = FunctionAddress[~String] : -# 2675| v2675_3(void) = Call[~String] : func:r2675_2, this:r2675_1 -# 2675| mu2675_4(unknown) = ^CallSideEffect : ~m? -# 2675| v2675_5(void) = ^IndirectReadSideEffect[-1] : &:r2675_1, ~m? -# 2675| mu2675_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2675_1 -# 2675| r2675_7(bool) = Constant[0] : -# 2675| v2675_8(void) = ConditionalBranch : r2675_7 +# 35| Block 885 +# 35| r35_12391(glval) = VariableAddress[x885] : +# 35| mu35_12392(String) = Uninitialized[x885] : &:r35_12391 +# 35| r35_12393(glval) = FunctionAddress[String] : +# 35| v35_12394(void) = Call[String] : func:r35_12393, this:r35_12391 +# 35| mu35_12395(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12391 +# 35| r35_12397(glval) = VariableAddress[x885] : +# 35| r35_12398(glval) = FunctionAddress[~String] : +# 35| v35_12399(void) = Call[~String] : func:r35_12398, this:r35_12397 +# 35| mu35_12400(unknown) = ^CallSideEffect : ~m? +# 35| v35_12401(void) = ^IndirectReadSideEffect[-1] : &:r35_12397, ~m? +# 35| mu35_12402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12397 +# 35| r35_12403(bool) = Constant[0] : +# 35| v35_12404(void) = ConditionalBranch : r35_12403 #-----| False -> Block 886 #-----| True -> Block 1026 -# 2677| Block 886 -# 2677| r2677_1(glval) = VariableAddress[x886] : -# 2677| mu2677_2(String) = Uninitialized[x886] : &:r2677_1 -# 2677| r2677_3(glval) = FunctionAddress[String] : -# 2677| v2677_4(void) = Call[String] : func:r2677_3, this:r2677_1 -# 2677| mu2677_5(unknown) = ^CallSideEffect : ~m? -# 2677| mu2677_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2677_1 -# 2678| r2678_1(glval) = VariableAddress[x886] : -# 2678| r2678_2(glval) = FunctionAddress[~String] : -# 2678| v2678_3(void) = Call[~String] : func:r2678_2, this:r2678_1 -# 2678| mu2678_4(unknown) = ^CallSideEffect : ~m? -# 2678| v2678_5(void) = ^IndirectReadSideEffect[-1] : &:r2678_1, ~m? -# 2678| mu2678_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2678_1 -# 2678| r2678_7(bool) = Constant[0] : -# 2678| v2678_8(void) = ConditionalBranch : r2678_7 +# 35| Block 886 +# 35| r35_12405(glval) = VariableAddress[x886] : +# 35| mu35_12406(String) = Uninitialized[x886] : &:r35_12405 +# 35| r35_12407(glval) = FunctionAddress[String] : +# 35| v35_12408(void) = Call[String] : func:r35_12407, this:r35_12405 +# 35| mu35_12409(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12405 +# 35| r35_12411(glval) = VariableAddress[x886] : +# 35| r35_12412(glval) = FunctionAddress[~String] : +# 35| v35_12413(void) = Call[~String] : func:r35_12412, this:r35_12411 +# 35| mu35_12414(unknown) = ^CallSideEffect : ~m? +# 35| v35_12415(void) = ^IndirectReadSideEffect[-1] : &:r35_12411, ~m? +# 35| mu35_12416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12411 +# 35| r35_12417(bool) = Constant[0] : +# 35| v35_12418(void) = ConditionalBranch : r35_12417 #-----| False -> Block 887 #-----| True -> Block 1026 -# 2680| Block 887 -# 2680| r2680_1(glval) = VariableAddress[x887] : -# 2680| mu2680_2(String) = Uninitialized[x887] : &:r2680_1 -# 2680| r2680_3(glval) = FunctionAddress[String] : -# 2680| v2680_4(void) = Call[String] : func:r2680_3, this:r2680_1 -# 2680| mu2680_5(unknown) = ^CallSideEffect : ~m? -# 2680| mu2680_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2680_1 -# 2681| r2681_1(glval) = VariableAddress[x887] : -# 2681| r2681_2(glval) = FunctionAddress[~String] : -# 2681| v2681_3(void) = Call[~String] : func:r2681_2, this:r2681_1 -# 2681| mu2681_4(unknown) = ^CallSideEffect : ~m? -# 2681| v2681_5(void) = ^IndirectReadSideEffect[-1] : &:r2681_1, ~m? -# 2681| mu2681_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2681_1 -# 2681| r2681_7(bool) = Constant[0] : -# 2681| v2681_8(void) = ConditionalBranch : r2681_7 +# 35| Block 887 +# 35| r35_12419(glval) = VariableAddress[x887] : +# 35| mu35_12420(String) = Uninitialized[x887] : &:r35_12419 +# 35| r35_12421(glval) = FunctionAddress[String] : +# 35| v35_12422(void) = Call[String] : func:r35_12421, this:r35_12419 +# 35| mu35_12423(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12419 +# 35| r35_12425(glval) = VariableAddress[x887] : +# 35| r35_12426(glval) = FunctionAddress[~String] : +# 35| v35_12427(void) = Call[~String] : func:r35_12426, this:r35_12425 +# 35| mu35_12428(unknown) = ^CallSideEffect : ~m? +# 35| v35_12429(void) = ^IndirectReadSideEffect[-1] : &:r35_12425, ~m? +# 35| mu35_12430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12425 +# 35| r35_12431(bool) = Constant[0] : +# 35| v35_12432(void) = ConditionalBranch : r35_12431 #-----| False -> Block 888 #-----| True -> Block 1026 -# 2683| Block 888 -# 2683| r2683_1(glval) = VariableAddress[x888] : -# 2683| mu2683_2(String) = Uninitialized[x888] : &:r2683_1 -# 2683| r2683_3(glval) = FunctionAddress[String] : -# 2683| v2683_4(void) = Call[String] : func:r2683_3, this:r2683_1 -# 2683| mu2683_5(unknown) = ^CallSideEffect : ~m? -# 2683| mu2683_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2683_1 -# 2684| r2684_1(glval) = VariableAddress[x888] : -# 2684| r2684_2(glval) = FunctionAddress[~String] : -# 2684| v2684_3(void) = Call[~String] : func:r2684_2, this:r2684_1 -# 2684| mu2684_4(unknown) = ^CallSideEffect : ~m? -# 2684| v2684_5(void) = ^IndirectReadSideEffect[-1] : &:r2684_1, ~m? -# 2684| mu2684_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2684_1 -# 2684| r2684_7(bool) = Constant[0] : -# 2684| v2684_8(void) = ConditionalBranch : r2684_7 +# 35| Block 888 +# 35| r35_12433(glval) = VariableAddress[x888] : +# 35| mu35_12434(String) = Uninitialized[x888] : &:r35_12433 +# 35| r35_12435(glval) = FunctionAddress[String] : +# 35| v35_12436(void) = Call[String] : func:r35_12435, this:r35_12433 +# 35| mu35_12437(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12433 +# 35| r35_12439(glval) = VariableAddress[x888] : +# 35| r35_12440(glval) = FunctionAddress[~String] : +# 35| v35_12441(void) = Call[~String] : func:r35_12440, this:r35_12439 +# 35| mu35_12442(unknown) = ^CallSideEffect : ~m? +# 35| v35_12443(void) = ^IndirectReadSideEffect[-1] : &:r35_12439, ~m? +# 35| mu35_12444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12439 +# 35| r35_12445(bool) = Constant[0] : +# 35| v35_12446(void) = ConditionalBranch : r35_12445 #-----| False -> Block 889 #-----| True -> Block 1026 -# 2686| Block 889 -# 2686| r2686_1(glval) = VariableAddress[x889] : -# 2686| mu2686_2(String) = Uninitialized[x889] : &:r2686_1 -# 2686| r2686_3(glval) = FunctionAddress[String] : -# 2686| v2686_4(void) = Call[String] : func:r2686_3, this:r2686_1 -# 2686| mu2686_5(unknown) = ^CallSideEffect : ~m? -# 2686| mu2686_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2686_1 -# 2687| r2687_1(glval) = VariableAddress[x889] : -# 2687| r2687_2(glval) = FunctionAddress[~String] : -# 2687| v2687_3(void) = Call[~String] : func:r2687_2, this:r2687_1 -# 2687| mu2687_4(unknown) = ^CallSideEffect : ~m? -# 2687| v2687_5(void) = ^IndirectReadSideEffect[-1] : &:r2687_1, ~m? -# 2687| mu2687_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2687_1 -# 2687| r2687_7(bool) = Constant[0] : -# 2687| v2687_8(void) = ConditionalBranch : r2687_7 +# 35| Block 889 +# 35| r35_12447(glval) = VariableAddress[x889] : +# 35| mu35_12448(String) = Uninitialized[x889] : &:r35_12447 +# 35| r35_12449(glval) = FunctionAddress[String] : +# 35| v35_12450(void) = Call[String] : func:r35_12449, this:r35_12447 +# 35| mu35_12451(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12447 +# 35| r35_12453(glval) = VariableAddress[x889] : +# 35| r35_12454(glval) = FunctionAddress[~String] : +# 35| v35_12455(void) = Call[~String] : func:r35_12454, this:r35_12453 +# 35| mu35_12456(unknown) = ^CallSideEffect : ~m? +# 35| v35_12457(void) = ^IndirectReadSideEffect[-1] : &:r35_12453, ~m? +# 35| mu35_12458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12453 +# 35| r35_12459(bool) = Constant[0] : +# 35| v35_12460(void) = ConditionalBranch : r35_12459 #-----| False -> Block 890 #-----| True -> Block 1026 -# 2689| Block 890 -# 2689| r2689_1(glval) = VariableAddress[x890] : -# 2689| mu2689_2(String) = Uninitialized[x890] : &:r2689_1 -# 2689| r2689_3(glval) = FunctionAddress[String] : -# 2689| v2689_4(void) = Call[String] : func:r2689_3, this:r2689_1 -# 2689| mu2689_5(unknown) = ^CallSideEffect : ~m? -# 2689| mu2689_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2689_1 -# 2690| r2690_1(glval) = VariableAddress[x890] : -# 2690| r2690_2(glval) = FunctionAddress[~String] : -# 2690| v2690_3(void) = Call[~String] : func:r2690_2, this:r2690_1 -# 2690| mu2690_4(unknown) = ^CallSideEffect : ~m? -# 2690| v2690_5(void) = ^IndirectReadSideEffect[-1] : &:r2690_1, ~m? -# 2690| mu2690_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2690_1 -# 2690| r2690_7(bool) = Constant[0] : -# 2690| v2690_8(void) = ConditionalBranch : r2690_7 +# 35| Block 890 +# 35| r35_12461(glval) = VariableAddress[x890] : +# 35| mu35_12462(String) = Uninitialized[x890] : &:r35_12461 +# 35| r35_12463(glval) = FunctionAddress[String] : +# 35| v35_12464(void) = Call[String] : func:r35_12463, this:r35_12461 +# 35| mu35_12465(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12461 +# 35| r35_12467(glval) = VariableAddress[x890] : +# 35| r35_12468(glval) = FunctionAddress[~String] : +# 35| v35_12469(void) = Call[~String] : func:r35_12468, this:r35_12467 +# 35| mu35_12470(unknown) = ^CallSideEffect : ~m? +# 35| v35_12471(void) = ^IndirectReadSideEffect[-1] : &:r35_12467, ~m? +# 35| mu35_12472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12467 +# 35| r35_12473(bool) = Constant[0] : +# 35| v35_12474(void) = ConditionalBranch : r35_12473 #-----| False -> Block 891 #-----| True -> Block 1026 -# 2692| Block 891 -# 2692| r2692_1(glval) = VariableAddress[x891] : -# 2692| mu2692_2(String) = Uninitialized[x891] : &:r2692_1 -# 2692| r2692_3(glval) = FunctionAddress[String] : -# 2692| v2692_4(void) = Call[String] : func:r2692_3, this:r2692_1 -# 2692| mu2692_5(unknown) = ^CallSideEffect : ~m? -# 2692| mu2692_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2692_1 -# 2693| r2693_1(glval) = VariableAddress[x891] : -# 2693| r2693_2(glval) = FunctionAddress[~String] : -# 2693| v2693_3(void) = Call[~String] : func:r2693_2, this:r2693_1 -# 2693| mu2693_4(unknown) = ^CallSideEffect : ~m? -# 2693| v2693_5(void) = ^IndirectReadSideEffect[-1] : &:r2693_1, ~m? -# 2693| mu2693_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2693_1 -# 2693| r2693_7(bool) = Constant[0] : -# 2693| v2693_8(void) = ConditionalBranch : r2693_7 +# 35| Block 891 +# 35| r35_12475(glval) = VariableAddress[x891] : +# 35| mu35_12476(String) = Uninitialized[x891] : &:r35_12475 +# 35| r35_12477(glval) = FunctionAddress[String] : +# 35| v35_12478(void) = Call[String] : func:r35_12477, this:r35_12475 +# 35| mu35_12479(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12475 +# 35| r35_12481(glval) = VariableAddress[x891] : +# 35| r35_12482(glval) = FunctionAddress[~String] : +# 35| v35_12483(void) = Call[~String] : func:r35_12482, this:r35_12481 +# 35| mu35_12484(unknown) = ^CallSideEffect : ~m? +# 35| v35_12485(void) = ^IndirectReadSideEffect[-1] : &:r35_12481, ~m? +# 35| mu35_12486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12481 +# 35| r35_12487(bool) = Constant[0] : +# 35| v35_12488(void) = ConditionalBranch : r35_12487 #-----| False -> Block 892 #-----| True -> Block 1026 -# 2695| Block 892 -# 2695| r2695_1(glval) = VariableAddress[x892] : -# 2695| mu2695_2(String) = Uninitialized[x892] : &:r2695_1 -# 2695| r2695_3(glval) = FunctionAddress[String] : -# 2695| v2695_4(void) = Call[String] : func:r2695_3, this:r2695_1 -# 2695| mu2695_5(unknown) = ^CallSideEffect : ~m? -# 2695| mu2695_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2695_1 -# 2696| r2696_1(glval) = VariableAddress[x892] : -# 2696| r2696_2(glval) = FunctionAddress[~String] : -# 2696| v2696_3(void) = Call[~String] : func:r2696_2, this:r2696_1 -# 2696| mu2696_4(unknown) = ^CallSideEffect : ~m? -# 2696| v2696_5(void) = ^IndirectReadSideEffect[-1] : &:r2696_1, ~m? -# 2696| mu2696_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2696_1 -# 2696| r2696_7(bool) = Constant[0] : -# 2696| v2696_8(void) = ConditionalBranch : r2696_7 +# 35| Block 892 +# 35| r35_12489(glval) = VariableAddress[x892] : +# 35| mu35_12490(String) = Uninitialized[x892] : &:r35_12489 +# 35| r35_12491(glval) = FunctionAddress[String] : +# 35| v35_12492(void) = Call[String] : func:r35_12491, this:r35_12489 +# 35| mu35_12493(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12489 +# 35| r35_12495(glval) = VariableAddress[x892] : +# 35| r35_12496(glval) = FunctionAddress[~String] : +# 35| v35_12497(void) = Call[~String] : func:r35_12496, this:r35_12495 +# 35| mu35_12498(unknown) = ^CallSideEffect : ~m? +# 35| v35_12499(void) = ^IndirectReadSideEffect[-1] : &:r35_12495, ~m? +# 35| mu35_12500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12495 +# 35| r35_12501(bool) = Constant[0] : +# 35| v35_12502(void) = ConditionalBranch : r35_12501 #-----| False -> Block 893 #-----| True -> Block 1026 -# 2698| Block 893 -# 2698| r2698_1(glval) = VariableAddress[x893] : -# 2698| mu2698_2(String) = Uninitialized[x893] : &:r2698_1 -# 2698| r2698_3(glval) = FunctionAddress[String] : -# 2698| v2698_4(void) = Call[String] : func:r2698_3, this:r2698_1 -# 2698| mu2698_5(unknown) = ^CallSideEffect : ~m? -# 2698| mu2698_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2698_1 -# 2699| r2699_1(glval) = VariableAddress[x893] : -# 2699| r2699_2(glval) = FunctionAddress[~String] : -# 2699| v2699_3(void) = Call[~String] : func:r2699_2, this:r2699_1 -# 2699| mu2699_4(unknown) = ^CallSideEffect : ~m? -# 2699| v2699_5(void) = ^IndirectReadSideEffect[-1] : &:r2699_1, ~m? -# 2699| mu2699_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2699_1 -# 2699| r2699_7(bool) = Constant[0] : -# 2699| v2699_8(void) = ConditionalBranch : r2699_7 +# 35| Block 893 +# 35| r35_12503(glval) = VariableAddress[x893] : +# 35| mu35_12504(String) = Uninitialized[x893] : &:r35_12503 +# 35| r35_12505(glval) = FunctionAddress[String] : +# 35| v35_12506(void) = Call[String] : func:r35_12505, this:r35_12503 +# 35| mu35_12507(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12503 +# 35| r35_12509(glval) = VariableAddress[x893] : +# 35| r35_12510(glval) = FunctionAddress[~String] : +# 35| v35_12511(void) = Call[~String] : func:r35_12510, this:r35_12509 +# 35| mu35_12512(unknown) = ^CallSideEffect : ~m? +# 35| v35_12513(void) = ^IndirectReadSideEffect[-1] : &:r35_12509, ~m? +# 35| mu35_12514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12509 +# 35| r35_12515(bool) = Constant[0] : +# 35| v35_12516(void) = ConditionalBranch : r35_12515 #-----| False -> Block 894 #-----| True -> Block 1026 -# 2701| Block 894 -# 2701| r2701_1(glval) = VariableAddress[x894] : -# 2701| mu2701_2(String) = Uninitialized[x894] : &:r2701_1 -# 2701| r2701_3(glval) = FunctionAddress[String] : -# 2701| v2701_4(void) = Call[String] : func:r2701_3, this:r2701_1 -# 2701| mu2701_5(unknown) = ^CallSideEffect : ~m? -# 2701| mu2701_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2701_1 -# 2702| r2702_1(glval) = VariableAddress[x894] : -# 2702| r2702_2(glval) = FunctionAddress[~String] : -# 2702| v2702_3(void) = Call[~String] : func:r2702_2, this:r2702_1 -# 2702| mu2702_4(unknown) = ^CallSideEffect : ~m? -# 2702| v2702_5(void) = ^IndirectReadSideEffect[-1] : &:r2702_1, ~m? -# 2702| mu2702_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2702_1 -# 2702| r2702_7(bool) = Constant[0] : -# 2702| v2702_8(void) = ConditionalBranch : r2702_7 +# 35| Block 894 +# 35| r35_12517(glval) = VariableAddress[x894] : +# 35| mu35_12518(String) = Uninitialized[x894] : &:r35_12517 +# 35| r35_12519(glval) = FunctionAddress[String] : +# 35| v35_12520(void) = Call[String] : func:r35_12519, this:r35_12517 +# 35| mu35_12521(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12517 +# 35| r35_12523(glval) = VariableAddress[x894] : +# 35| r35_12524(glval) = FunctionAddress[~String] : +# 35| v35_12525(void) = Call[~String] : func:r35_12524, this:r35_12523 +# 35| mu35_12526(unknown) = ^CallSideEffect : ~m? +# 35| v35_12527(void) = ^IndirectReadSideEffect[-1] : &:r35_12523, ~m? +# 35| mu35_12528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12523 +# 35| r35_12529(bool) = Constant[0] : +# 35| v35_12530(void) = ConditionalBranch : r35_12529 #-----| False -> Block 895 #-----| True -> Block 1026 -# 2704| Block 895 -# 2704| r2704_1(glval) = VariableAddress[x895] : -# 2704| mu2704_2(String) = Uninitialized[x895] : &:r2704_1 -# 2704| r2704_3(glval) = FunctionAddress[String] : -# 2704| v2704_4(void) = Call[String] : func:r2704_3, this:r2704_1 -# 2704| mu2704_5(unknown) = ^CallSideEffect : ~m? -# 2704| mu2704_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2704_1 -# 2705| r2705_1(glval) = VariableAddress[x895] : -# 2705| r2705_2(glval) = FunctionAddress[~String] : -# 2705| v2705_3(void) = Call[~String] : func:r2705_2, this:r2705_1 -# 2705| mu2705_4(unknown) = ^CallSideEffect : ~m? -# 2705| v2705_5(void) = ^IndirectReadSideEffect[-1] : &:r2705_1, ~m? -# 2705| mu2705_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2705_1 -# 2705| r2705_7(bool) = Constant[0] : -# 2705| v2705_8(void) = ConditionalBranch : r2705_7 +# 35| Block 895 +# 35| r35_12531(glval) = VariableAddress[x895] : +# 35| mu35_12532(String) = Uninitialized[x895] : &:r35_12531 +# 35| r35_12533(glval) = FunctionAddress[String] : +# 35| v35_12534(void) = Call[String] : func:r35_12533, this:r35_12531 +# 35| mu35_12535(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12531 +# 35| r35_12537(glval) = VariableAddress[x895] : +# 35| r35_12538(glval) = FunctionAddress[~String] : +# 35| v35_12539(void) = Call[~String] : func:r35_12538, this:r35_12537 +# 35| mu35_12540(unknown) = ^CallSideEffect : ~m? +# 35| v35_12541(void) = ^IndirectReadSideEffect[-1] : &:r35_12537, ~m? +# 35| mu35_12542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12537 +# 35| r35_12543(bool) = Constant[0] : +# 35| v35_12544(void) = ConditionalBranch : r35_12543 #-----| False -> Block 896 #-----| True -> Block 1026 -# 2707| Block 896 -# 2707| r2707_1(glval) = VariableAddress[x896] : -# 2707| mu2707_2(String) = Uninitialized[x896] : &:r2707_1 -# 2707| r2707_3(glval) = FunctionAddress[String] : -# 2707| v2707_4(void) = Call[String] : func:r2707_3, this:r2707_1 -# 2707| mu2707_5(unknown) = ^CallSideEffect : ~m? -# 2707| mu2707_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2707_1 -# 2708| r2708_1(glval) = VariableAddress[x896] : -# 2708| r2708_2(glval) = FunctionAddress[~String] : -# 2708| v2708_3(void) = Call[~String] : func:r2708_2, this:r2708_1 -# 2708| mu2708_4(unknown) = ^CallSideEffect : ~m? -# 2708| v2708_5(void) = ^IndirectReadSideEffect[-1] : &:r2708_1, ~m? -# 2708| mu2708_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2708_1 -# 2708| r2708_7(bool) = Constant[0] : -# 2708| v2708_8(void) = ConditionalBranch : r2708_7 +# 35| Block 896 +# 35| r35_12545(glval) = VariableAddress[x896] : +# 35| mu35_12546(String) = Uninitialized[x896] : &:r35_12545 +# 35| r35_12547(glval) = FunctionAddress[String] : +# 35| v35_12548(void) = Call[String] : func:r35_12547, this:r35_12545 +# 35| mu35_12549(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12545 +# 35| r35_12551(glval) = VariableAddress[x896] : +# 35| r35_12552(glval) = FunctionAddress[~String] : +# 35| v35_12553(void) = Call[~String] : func:r35_12552, this:r35_12551 +# 35| mu35_12554(unknown) = ^CallSideEffect : ~m? +# 35| v35_12555(void) = ^IndirectReadSideEffect[-1] : &:r35_12551, ~m? +# 35| mu35_12556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12551 +# 35| r35_12557(bool) = Constant[0] : +# 35| v35_12558(void) = ConditionalBranch : r35_12557 #-----| False -> Block 897 #-----| True -> Block 1026 -# 2710| Block 897 -# 2710| r2710_1(glval) = VariableAddress[x897] : -# 2710| mu2710_2(String) = Uninitialized[x897] : &:r2710_1 -# 2710| r2710_3(glval) = FunctionAddress[String] : -# 2710| v2710_4(void) = Call[String] : func:r2710_3, this:r2710_1 -# 2710| mu2710_5(unknown) = ^CallSideEffect : ~m? -# 2710| mu2710_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2710_1 -# 2711| r2711_1(glval) = VariableAddress[x897] : -# 2711| r2711_2(glval) = FunctionAddress[~String] : -# 2711| v2711_3(void) = Call[~String] : func:r2711_2, this:r2711_1 -# 2711| mu2711_4(unknown) = ^CallSideEffect : ~m? -# 2711| v2711_5(void) = ^IndirectReadSideEffect[-1] : &:r2711_1, ~m? -# 2711| mu2711_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2711_1 -# 2711| r2711_7(bool) = Constant[0] : -# 2711| v2711_8(void) = ConditionalBranch : r2711_7 +# 35| Block 897 +# 35| r35_12559(glval) = VariableAddress[x897] : +# 35| mu35_12560(String) = Uninitialized[x897] : &:r35_12559 +# 35| r35_12561(glval) = FunctionAddress[String] : +# 35| v35_12562(void) = Call[String] : func:r35_12561, this:r35_12559 +# 35| mu35_12563(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12559 +# 35| r35_12565(glval) = VariableAddress[x897] : +# 35| r35_12566(glval) = FunctionAddress[~String] : +# 35| v35_12567(void) = Call[~String] : func:r35_12566, this:r35_12565 +# 35| mu35_12568(unknown) = ^CallSideEffect : ~m? +# 35| v35_12569(void) = ^IndirectReadSideEffect[-1] : &:r35_12565, ~m? +# 35| mu35_12570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12565 +# 35| r35_12571(bool) = Constant[0] : +# 35| v35_12572(void) = ConditionalBranch : r35_12571 #-----| False -> Block 898 #-----| True -> Block 1026 -# 2713| Block 898 -# 2713| r2713_1(glval) = VariableAddress[x898] : -# 2713| mu2713_2(String) = Uninitialized[x898] : &:r2713_1 -# 2713| r2713_3(glval) = FunctionAddress[String] : -# 2713| v2713_4(void) = Call[String] : func:r2713_3, this:r2713_1 -# 2713| mu2713_5(unknown) = ^CallSideEffect : ~m? -# 2713| mu2713_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2713_1 -# 2714| r2714_1(glval) = VariableAddress[x898] : -# 2714| r2714_2(glval) = FunctionAddress[~String] : -# 2714| v2714_3(void) = Call[~String] : func:r2714_2, this:r2714_1 -# 2714| mu2714_4(unknown) = ^CallSideEffect : ~m? -# 2714| v2714_5(void) = ^IndirectReadSideEffect[-1] : &:r2714_1, ~m? -# 2714| mu2714_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2714_1 -# 2714| r2714_7(bool) = Constant[0] : -# 2714| v2714_8(void) = ConditionalBranch : r2714_7 +# 35| Block 898 +# 35| r35_12573(glval) = VariableAddress[x898] : +# 35| mu35_12574(String) = Uninitialized[x898] : &:r35_12573 +# 35| r35_12575(glval) = FunctionAddress[String] : +# 35| v35_12576(void) = Call[String] : func:r35_12575, this:r35_12573 +# 35| mu35_12577(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12573 +# 35| r35_12579(glval) = VariableAddress[x898] : +# 35| r35_12580(glval) = FunctionAddress[~String] : +# 35| v35_12581(void) = Call[~String] : func:r35_12580, this:r35_12579 +# 35| mu35_12582(unknown) = ^CallSideEffect : ~m? +# 35| v35_12583(void) = ^IndirectReadSideEffect[-1] : &:r35_12579, ~m? +# 35| mu35_12584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12579 +# 35| r35_12585(bool) = Constant[0] : +# 35| v35_12586(void) = ConditionalBranch : r35_12585 #-----| False -> Block 899 #-----| True -> Block 1026 -# 2716| Block 899 -# 2716| r2716_1(glval) = VariableAddress[x899] : -# 2716| mu2716_2(String) = Uninitialized[x899] : &:r2716_1 -# 2716| r2716_3(glval) = FunctionAddress[String] : -# 2716| v2716_4(void) = Call[String] : func:r2716_3, this:r2716_1 -# 2716| mu2716_5(unknown) = ^CallSideEffect : ~m? -# 2716| mu2716_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2716_1 -# 2717| r2717_1(glval) = VariableAddress[x899] : -# 2717| r2717_2(glval) = FunctionAddress[~String] : -# 2717| v2717_3(void) = Call[~String] : func:r2717_2, this:r2717_1 -# 2717| mu2717_4(unknown) = ^CallSideEffect : ~m? -# 2717| v2717_5(void) = ^IndirectReadSideEffect[-1] : &:r2717_1, ~m? -# 2717| mu2717_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2717_1 -# 2717| r2717_7(bool) = Constant[0] : -# 2717| v2717_8(void) = ConditionalBranch : r2717_7 +# 35| Block 899 +# 35| r35_12587(glval) = VariableAddress[x899] : +# 35| mu35_12588(String) = Uninitialized[x899] : &:r35_12587 +# 35| r35_12589(glval) = FunctionAddress[String] : +# 35| v35_12590(void) = Call[String] : func:r35_12589, this:r35_12587 +# 35| mu35_12591(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12587 +# 35| r35_12593(glval) = VariableAddress[x899] : +# 35| r35_12594(glval) = FunctionAddress[~String] : +# 35| v35_12595(void) = Call[~String] : func:r35_12594, this:r35_12593 +# 35| mu35_12596(unknown) = ^CallSideEffect : ~m? +# 35| v35_12597(void) = ^IndirectReadSideEffect[-1] : &:r35_12593, ~m? +# 35| mu35_12598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12593 +# 35| r35_12599(bool) = Constant[0] : +# 35| v35_12600(void) = ConditionalBranch : r35_12599 #-----| False -> Block 900 #-----| True -> Block 1026 -# 2719| Block 900 -# 2719| r2719_1(glval) = VariableAddress[x900] : -# 2719| mu2719_2(String) = Uninitialized[x900] : &:r2719_1 -# 2719| r2719_3(glval) = FunctionAddress[String] : -# 2719| v2719_4(void) = Call[String] : func:r2719_3, this:r2719_1 -# 2719| mu2719_5(unknown) = ^CallSideEffect : ~m? -# 2719| mu2719_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2719_1 -# 2720| r2720_1(glval) = VariableAddress[x900] : -# 2720| r2720_2(glval) = FunctionAddress[~String] : -# 2720| v2720_3(void) = Call[~String] : func:r2720_2, this:r2720_1 -# 2720| mu2720_4(unknown) = ^CallSideEffect : ~m? -# 2720| v2720_5(void) = ^IndirectReadSideEffect[-1] : &:r2720_1, ~m? -# 2720| mu2720_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2720_1 -# 2720| r2720_7(bool) = Constant[0] : -# 2720| v2720_8(void) = ConditionalBranch : r2720_7 +# 35| Block 900 +# 35| r35_12601(glval) = VariableAddress[x900] : +# 35| mu35_12602(String) = Uninitialized[x900] : &:r35_12601 +# 35| r35_12603(glval) = FunctionAddress[String] : +# 35| v35_12604(void) = Call[String] : func:r35_12603, this:r35_12601 +# 35| mu35_12605(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12601 +# 35| r35_12607(glval) = VariableAddress[x900] : +# 35| r35_12608(glval) = FunctionAddress[~String] : +# 35| v35_12609(void) = Call[~String] : func:r35_12608, this:r35_12607 +# 35| mu35_12610(unknown) = ^CallSideEffect : ~m? +# 35| v35_12611(void) = ^IndirectReadSideEffect[-1] : &:r35_12607, ~m? +# 35| mu35_12612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12607 +# 35| r35_12613(bool) = Constant[0] : +# 35| v35_12614(void) = ConditionalBranch : r35_12613 #-----| False -> Block 901 #-----| True -> Block 1026 -# 2722| Block 901 -# 2722| r2722_1(glval) = VariableAddress[x901] : -# 2722| mu2722_2(String) = Uninitialized[x901] : &:r2722_1 -# 2722| r2722_3(glval) = FunctionAddress[String] : -# 2722| v2722_4(void) = Call[String] : func:r2722_3, this:r2722_1 -# 2722| mu2722_5(unknown) = ^CallSideEffect : ~m? -# 2722| mu2722_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2722_1 -# 2723| r2723_1(glval) = VariableAddress[x901] : -# 2723| r2723_2(glval) = FunctionAddress[~String] : -# 2723| v2723_3(void) = Call[~String] : func:r2723_2, this:r2723_1 -# 2723| mu2723_4(unknown) = ^CallSideEffect : ~m? -# 2723| v2723_5(void) = ^IndirectReadSideEffect[-1] : &:r2723_1, ~m? -# 2723| mu2723_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2723_1 -# 2723| r2723_7(bool) = Constant[0] : -# 2723| v2723_8(void) = ConditionalBranch : r2723_7 +# 35| Block 901 +# 35| r35_12615(glval) = VariableAddress[x901] : +# 35| mu35_12616(String) = Uninitialized[x901] : &:r35_12615 +# 35| r35_12617(glval) = FunctionAddress[String] : +# 35| v35_12618(void) = Call[String] : func:r35_12617, this:r35_12615 +# 35| mu35_12619(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12615 +# 35| r35_12621(glval) = VariableAddress[x901] : +# 35| r35_12622(glval) = FunctionAddress[~String] : +# 35| v35_12623(void) = Call[~String] : func:r35_12622, this:r35_12621 +# 35| mu35_12624(unknown) = ^CallSideEffect : ~m? +# 35| v35_12625(void) = ^IndirectReadSideEffect[-1] : &:r35_12621, ~m? +# 35| mu35_12626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12621 +# 35| r35_12627(bool) = Constant[0] : +# 35| v35_12628(void) = ConditionalBranch : r35_12627 #-----| False -> Block 902 #-----| True -> Block 1026 -# 2725| Block 902 -# 2725| r2725_1(glval) = VariableAddress[x902] : -# 2725| mu2725_2(String) = Uninitialized[x902] : &:r2725_1 -# 2725| r2725_3(glval) = FunctionAddress[String] : -# 2725| v2725_4(void) = Call[String] : func:r2725_3, this:r2725_1 -# 2725| mu2725_5(unknown) = ^CallSideEffect : ~m? -# 2725| mu2725_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2725_1 -# 2726| r2726_1(glval) = VariableAddress[x902] : -# 2726| r2726_2(glval) = FunctionAddress[~String] : -# 2726| v2726_3(void) = Call[~String] : func:r2726_2, this:r2726_1 -# 2726| mu2726_4(unknown) = ^CallSideEffect : ~m? -# 2726| v2726_5(void) = ^IndirectReadSideEffect[-1] : &:r2726_1, ~m? -# 2726| mu2726_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2726_1 -# 2726| r2726_7(bool) = Constant[0] : -# 2726| v2726_8(void) = ConditionalBranch : r2726_7 +# 35| Block 902 +# 35| r35_12629(glval) = VariableAddress[x902] : +# 35| mu35_12630(String) = Uninitialized[x902] : &:r35_12629 +# 35| r35_12631(glval) = FunctionAddress[String] : +# 35| v35_12632(void) = Call[String] : func:r35_12631, this:r35_12629 +# 35| mu35_12633(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12629 +# 35| r35_12635(glval) = VariableAddress[x902] : +# 35| r35_12636(glval) = FunctionAddress[~String] : +# 35| v35_12637(void) = Call[~String] : func:r35_12636, this:r35_12635 +# 35| mu35_12638(unknown) = ^CallSideEffect : ~m? +# 35| v35_12639(void) = ^IndirectReadSideEffect[-1] : &:r35_12635, ~m? +# 35| mu35_12640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12635 +# 35| r35_12641(bool) = Constant[0] : +# 35| v35_12642(void) = ConditionalBranch : r35_12641 #-----| False -> Block 903 #-----| True -> Block 1026 -# 2728| Block 903 -# 2728| r2728_1(glval) = VariableAddress[x903] : -# 2728| mu2728_2(String) = Uninitialized[x903] : &:r2728_1 -# 2728| r2728_3(glval) = FunctionAddress[String] : -# 2728| v2728_4(void) = Call[String] : func:r2728_3, this:r2728_1 -# 2728| mu2728_5(unknown) = ^CallSideEffect : ~m? -# 2728| mu2728_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2728_1 -# 2729| r2729_1(glval) = VariableAddress[x903] : -# 2729| r2729_2(glval) = FunctionAddress[~String] : -# 2729| v2729_3(void) = Call[~String] : func:r2729_2, this:r2729_1 -# 2729| mu2729_4(unknown) = ^CallSideEffect : ~m? -# 2729| v2729_5(void) = ^IndirectReadSideEffect[-1] : &:r2729_1, ~m? -# 2729| mu2729_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2729_1 -# 2729| r2729_7(bool) = Constant[0] : -# 2729| v2729_8(void) = ConditionalBranch : r2729_7 +# 35| Block 903 +# 35| r35_12643(glval) = VariableAddress[x903] : +# 35| mu35_12644(String) = Uninitialized[x903] : &:r35_12643 +# 35| r35_12645(glval) = FunctionAddress[String] : +# 35| v35_12646(void) = Call[String] : func:r35_12645, this:r35_12643 +# 35| mu35_12647(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12643 +# 35| r35_12649(glval) = VariableAddress[x903] : +# 35| r35_12650(glval) = FunctionAddress[~String] : +# 35| v35_12651(void) = Call[~String] : func:r35_12650, this:r35_12649 +# 35| mu35_12652(unknown) = ^CallSideEffect : ~m? +# 35| v35_12653(void) = ^IndirectReadSideEffect[-1] : &:r35_12649, ~m? +# 35| mu35_12654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12649 +# 35| r35_12655(bool) = Constant[0] : +# 35| v35_12656(void) = ConditionalBranch : r35_12655 #-----| False -> Block 904 #-----| True -> Block 1026 -# 2731| Block 904 -# 2731| r2731_1(glval) = VariableAddress[x904] : -# 2731| mu2731_2(String) = Uninitialized[x904] : &:r2731_1 -# 2731| r2731_3(glval) = FunctionAddress[String] : -# 2731| v2731_4(void) = Call[String] : func:r2731_3, this:r2731_1 -# 2731| mu2731_5(unknown) = ^CallSideEffect : ~m? -# 2731| mu2731_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2731_1 -# 2732| r2732_1(glval) = VariableAddress[x904] : -# 2732| r2732_2(glval) = FunctionAddress[~String] : -# 2732| v2732_3(void) = Call[~String] : func:r2732_2, this:r2732_1 -# 2732| mu2732_4(unknown) = ^CallSideEffect : ~m? -# 2732| v2732_5(void) = ^IndirectReadSideEffect[-1] : &:r2732_1, ~m? -# 2732| mu2732_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2732_1 -# 2732| r2732_7(bool) = Constant[0] : -# 2732| v2732_8(void) = ConditionalBranch : r2732_7 +# 35| Block 904 +# 35| r35_12657(glval) = VariableAddress[x904] : +# 35| mu35_12658(String) = Uninitialized[x904] : &:r35_12657 +# 35| r35_12659(glval) = FunctionAddress[String] : +# 35| v35_12660(void) = Call[String] : func:r35_12659, this:r35_12657 +# 35| mu35_12661(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12657 +# 35| r35_12663(glval) = VariableAddress[x904] : +# 35| r35_12664(glval) = FunctionAddress[~String] : +# 35| v35_12665(void) = Call[~String] : func:r35_12664, this:r35_12663 +# 35| mu35_12666(unknown) = ^CallSideEffect : ~m? +# 35| v35_12667(void) = ^IndirectReadSideEffect[-1] : &:r35_12663, ~m? +# 35| mu35_12668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12663 +# 35| r35_12669(bool) = Constant[0] : +# 35| v35_12670(void) = ConditionalBranch : r35_12669 #-----| False -> Block 905 #-----| True -> Block 1026 -# 2734| Block 905 -# 2734| r2734_1(glval) = VariableAddress[x905] : -# 2734| mu2734_2(String) = Uninitialized[x905] : &:r2734_1 -# 2734| r2734_3(glval) = FunctionAddress[String] : -# 2734| v2734_4(void) = Call[String] : func:r2734_3, this:r2734_1 -# 2734| mu2734_5(unknown) = ^CallSideEffect : ~m? -# 2734| mu2734_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2734_1 -# 2735| r2735_1(glval) = VariableAddress[x905] : -# 2735| r2735_2(glval) = FunctionAddress[~String] : -# 2735| v2735_3(void) = Call[~String] : func:r2735_2, this:r2735_1 -# 2735| mu2735_4(unknown) = ^CallSideEffect : ~m? -# 2735| v2735_5(void) = ^IndirectReadSideEffect[-1] : &:r2735_1, ~m? -# 2735| mu2735_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2735_1 -# 2735| r2735_7(bool) = Constant[0] : -# 2735| v2735_8(void) = ConditionalBranch : r2735_7 +# 35| Block 905 +# 35| r35_12671(glval) = VariableAddress[x905] : +# 35| mu35_12672(String) = Uninitialized[x905] : &:r35_12671 +# 35| r35_12673(glval) = FunctionAddress[String] : +# 35| v35_12674(void) = Call[String] : func:r35_12673, this:r35_12671 +# 35| mu35_12675(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12671 +# 35| r35_12677(glval) = VariableAddress[x905] : +# 35| r35_12678(glval) = FunctionAddress[~String] : +# 35| v35_12679(void) = Call[~String] : func:r35_12678, this:r35_12677 +# 35| mu35_12680(unknown) = ^CallSideEffect : ~m? +# 35| v35_12681(void) = ^IndirectReadSideEffect[-1] : &:r35_12677, ~m? +# 35| mu35_12682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12677 +# 35| r35_12683(bool) = Constant[0] : +# 35| v35_12684(void) = ConditionalBranch : r35_12683 #-----| False -> Block 906 #-----| True -> Block 1026 -# 2737| Block 906 -# 2737| r2737_1(glval) = VariableAddress[x906] : -# 2737| mu2737_2(String) = Uninitialized[x906] : &:r2737_1 -# 2737| r2737_3(glval) = FunctionAddress[String] : -# 2737| v2737_4(void) = Call[String] : func:r2737_3, this:r2737_1 -# 2737| mu2737_5(unknown) = ^CallSideEffect : ~m? -# 2737| mu2737_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2737_1 -# 2738| r2738_1(glval) = VariableAddress[x906] : -# 2738| r2738_2(glval) = FunctionAddress[~String] : -# 2738| v2738_3(void) = Call[~String] : func:r2738_2, this:r2738_1 -# 2738| mu2738_4(unknown) = ^CallSideEffect : ~m? -# 2738| v2738_5(void) = ^IndirectReadSideEffect[-1] : &:r2738_1, ~m? -# 2738| mu2738_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2738_1 -# 2738| r2738_7(bool) = Constant[0] : -# 2738| v2738_8(void) = ConditionalBranch : r2738_7 +# 35| Block 906 +# 35| r35_12685(glval) = VariableAddress[x906] : +# 35| mu35_12686(String) = Uninitialized[x906] : &:r35_12685 +# 35| r35_12687(glval) = FunctionAddress[String] : +# 35| v35_12688(void) = Call[String] : func:r35_12687, this:r35_12685 +# 35| mu35_12689(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12685 +# 35| r35_12691(glval) = VariableAddress[x906] : +# 35| r35_12692(glval) = FunctionAddress[~String] : +# 35| v35_12693(void) = Call[~String] : func:r35_12692, this:r35_12691 +# 35| mu35_12694(unknown) = ^CallSideEffect : ~m? +# 35| v35_12695(void) = ^IndirectReadSideEffect[-1] : &:r35_12691, ~m? +# 35| mu35_12696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12691 +# 35| r35_12697(bool) = Constant[0] : +# 35| v35_12698(void) = ConditionalBranch : r35_12697 #-----| False -> Block 907 #-----| True -> Block 1026 -# 2740| Block 907 -# 2740| r2740_1(glval) = VariableAddress[x907] : -# 2740| mu2740_2(String) = Uninitialized[x907] : &:r2740_1 -# 2740| r2740_3(glval) = FunctionAddress[String] : -# 2740| v2740_4(void) = Call[String] : func:r2740_3, this:r2740_1 -# 2740| mu2740_5(unknown) = ^CallSideEffect : ~m? -# 2740| mu2740_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2740_1 -# 2741| r2741_1(glval) = VariableAddress[x907] : -# 2741| r2741_2(glval) = FunctionAddress[~String] : -# 2741| v2741_3(void) = Call[~String] : func:r2741_2, this:r2741_1 -# 2741| mu2741_4(unknown) = ^CallSideEffect : ~m? -# 2741| v2741_5(void) = ^IndirectReadSideEffect[-1] : &:r2741_1, ~m? -# 2741| mu2741_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2741_1 -# 2741| r2741_7(bool) = Constant[0] : -# 2741| v2741_8(void) = ConditionalBranch : r2741_7 +# 35| Block 907 +# 35| r35_12699(glval) = VariableAddress[x907] : +# 35| mu35_12700(String) = Uninitialized[x907] : &:r35_12699 +# 35| r35_12701(glval) = FunctionAddress[String] : +# 35| v35_12702(void) = Call[String] : func:r35_12701, this:r35_12699 +# 35| mu35_12703(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12699 +# 35| r35_12705(glval) = VariableAddress[x907] : +# 35| r35_12706(glval) = FunctionAddress[~String] : +# 35| v35_12707(void) = Call[~String] : func:r35_12706, this:r35_12705 +# 35| mu35_12708(unknown) = ^CallSideEffect : ~m? +# 35| v35_12709(void) = ^IndirectReadSideEffect[-1] : &:r35_12705, ~m? +# 35| mu35_12710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12705 +# 35| r35_12711(bool) = Constant[0] : +# 35| v35_12712(void) = ConditionalBranch : r35_12711 #-----| False -> Block 908 #-----| True -> Block 1026 -# 2743| Block 908 -# 2743| r2743_1(glval) = VariableAddress[x908] : -# 2743| mu2743_2(String) = Uninitialized[x908] : &:r2743_1 -# 2743| r2743_3(glval) = FunctionAddress[String] : -# 2743| v2743_4(void) = Call[String] : func:r2743_3, this:r2743_1 -# 2743| mu2743_5(unknown) = ^CallSideEffect : ~m? -# 2743| mu2743_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2743_1 -# 2744| r2744_1(glval) = VariableAddress[x908] : -# 2744| r2744_2(glval) = FunctionAddress[~String] : -# 2744| v2744_3(void) = Call[~String] : func:r2744_2, this:r2744_1 -# 2744| mu2744_4(unknown) = ^CallSideEffect : ~m? -# 2744| v2744_5(void) = ^IndirectReadSideEffect[-1] : &:r2744_1, ~m? -# 2744| mu2744_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2744_1 -# 2744| r2744_7(bool) = Constant[0] : -# 2744| v2744_8(void) = ConditionalBranch : r2744_7 +# 35| Block 908 +# 35| r35_12713(glval) = VariableAddress[x908] : +# 35| mu35_12714(String) = Uninitialized[x908] : &:r35_12713 +# 35| r35_12715(glval) = FunctionAddress[String] : +# 35| v35_12716(void) = Call[String] : func:r35_12715, this:r35_12713 +# 35| mu35_12717(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12713 +# 35| r35_12719(glval) = VariableAddress[x908] : +# 35| r35_12720(glval) = FunctionAddress[~String] : +# 35| v35_12721(void) = Call[~String] : func:r35_12720, this:r35_12719 +# 35| mu35_12722(unknown) = ^CallSideEffect : ~m? +# 35| v35_12723(void) = ^IndirectReadSideEffect[-1] : &:r35_12719, ~m? +# 35| mu35_12724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12719 +# 35| r35_12725(bool) = Constant[0] : +# 35| v35_12726(void) = ConditionalBranch : r35_12725 #-----| False -> Block 909 #-----| True -> Block 1026 -# 2746| Block 909 -# 2746| r2746_1(glval) = VariableAddress[x909] : -# 2746| mu2746_2(String) = Uninitialized[x909] : &:r2746_1 -# 2746| r2746_3(glval) = FunctionAddress[String] : -# 2746| v2746_4(void) = Call[String] : func:r2746_3, this:r2746_1 -# 2746| mu2746_5(unknown) = ^CallSideEffect : ~m? -# 2746| mu2746_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2746_1 -# 2747| r2747_1(glval) = VariableAddress[x909] : -# 2747| r2747_2(glval) = FunctionAddress[~String] : -# 2747| v2747_3(void) = Call[~String] : func:r2747_2, this:r2747_1 -# 2747| mu2747_4(unknown) = ^CallSideEffect : ~m? -# 2747| v2747_5(void) = ^IndirectReadSideEffect[-1] : &:r2747_1, ~m? -# 2747| mu2747_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2747_1 -# 2747| r2747_7(bool) = Constant[0] : -# 2747| v2747_8(void) = ConditionalBranch : r2747_7 +# 35| Block 909 +# 35| r35_12727(glval) = VariableAddress[x909] : +# 35| mu35_12728(String) = Uninitialized[x909] : &:r35_12727 +# 35| r35_12729(glval) = FunctionAddress[String] : +# 35| v35_12730(void) = Call[String] : func:r35_12729, this:r35_12727 +# 35| mu35_12731(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12727 +# 35| r35_12733(glval) = VariableAddress[x909] : +# 35| r35_12734(glval) = FunctionAddress[~String] : +# 35| v35_12735(void) = Call[~String] : func:r35_12734, this:r35_12733 +# 35| mu35_12736(unknown) = ^CallSideEffect : ~m? +# 35| v35_12737(void) = ^IndirectReadSideEffect[-1] : &:r35_12733, ~m? +# 35| mu35_12738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12733 +# 35| r35_12739(bool) = Constant[0] : +# 35| v35_12740(void) = ConditionalBranch : r35_12739 #-----| False -> Block 910 #-----| True -> Block 1026 -# 2749| Block 910 -# 2749| r2749_1(glval) = VariableAddress[x910] : -# 2749| mu2749_2(String) = Uninitialized[x910] : &:r2749_1 -# 2749| r2749_3(glval) = FunctionAddress[String] : -# 2749| v2749_4(void) = Call[String] : func:r2749_3, this:r2749_1 -# 2749| mu2749_5(unknown) = ^CallSideEffect : ~m? -# 2749| mu2749_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2749_1 -# 2750| r2750_1(glval) = VariableAddress[x910] : -# 2750| r2750_2(glval) = FunctionAddress[~String] : -# 2750| v2750_3(void) = Call[~String] : func:r2750_2, this:r2750_1 -# 2750| mu2750_4(unknown) = ^CallSideEffect : ~m? -# 2750| v2750_5(void) = ^IndirectReadSideEffect[-1] : &:r2750_1, ~m? -# 2750| mu2750_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2750_1 -# 2750| r2750_7(bool) = Constant[0] : -# 2750| v2750_8(void) = ConditionalBranch : r2750_7 +# 35| Block 910 +# 35| r35_12741(glval) = VariableAddress[x910] : +# 35| mu35_12742(String) = Uninitialized[x910] : &:r35_12741 +# 35| r35_12743(glval) = FunctionAddress[String] : +# 35| v35_12744(void) = Call[String] : func:r35_12743, this:r35_12741 +# 35| mu35_12745(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12741 +# 35| r35_12747(glval) = VariableAddress[x910] : +# 35| r35_12748(glval) = FunctionAddress[~String] : +# 35| v35_12749(void) = Call[~String] : func:r35_12748, this:r35_12747 +# 35| mu35_12750(unknown) = ^CallSideEffect : ~m? +# 35| v35_12751(void) = ^IndirectReadSideEffect[-1] : &:r35_12747, ~m? +# 35| mu35_12752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12747 +# 35| r35_12753(bool) = Constant[0] : +# 35| v35_12754(void) = ConditionalBranch : r35_12753 #-----| False -> Block 911 #-----| True -> Block 1026 -# 2752| Block 911 -# 2752| r2752_1(glval) = VariableAddress[x911] : -# 2752| mu2752_2(String) = Uninitialized[x911] : &:r2752_1 -# 2752| r2752_3(glval) = FunctionAddress[String] : -# 2752| v2752_4(void) = Call[String] : func:r2752_3, this:r2752_1 -# 2752| mu2752_5(unknown) = ^CallSideEffect : ~m? -# 2752| mu2752_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2752_1 -# 2753| r2753_1(glval) = VariableAddress[x911] : -# 2753| r2753_2(glval) = FunctionAddress[~String] : -# 2753| v2753_3(void) = Call[~String] : func:r2753_2, this:r2753_1 -# 2753| mu2753_4(unknown) = ^CallSideEffect : ~m? -# 2753| v2753_5(void) = ^IndirectReadSideEffect[-1] : &:r2753_1, ~m? -# 2753| mu2753_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2753_1 -# 2753| r2753_7(bool) = Constant[0] : -# 2753| v2753_8(void) = ConditionalBranch : r2753_7 +# 35| Block 911 +# 35| r35_12755(glval) = VariableAddress[x911] : +# 35| mu35_12756(String) = Uninitialized[x911] : &:r35_12755 +# 35| r35_12757(glval) = FunctionAddress[String] : +# 35| v35_12758(void) = Call[String] : func:r35_12757, this:r35_12755 +# 35| mu35_12759(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12755 +# 35| r35_12761(glval) = VariableAddress[x911] : +# 35| r35_12762(glval) = FunctionAddress[~String] : +# 35| v35_12763(void) = Call[~String] : func:r35_12762, this:r35_12761 +# 35| mu35_12764(unknown) = ^CallSideEffect : ~m? +# 35| v35_12765(void) = ^IndirectReadSideEffect[-1] : &:r35_12761, ~m? +# 35| mu35_12766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12761 +# 35| r35_12767(bool) = Constant[0] : +# 35| v35_12768(void) = ConditionalBranch : r35_12767 #-----| False -> Block 912 #-----| True -> Block 1026 -# 2755| Block 912 -# 2755| r2755_1(glval) = VariableAddress[x912] : -# 2755| mu2755_2(String) = Uninitialized[x912] : &:r2755_1 -# 2755| r2755_3(glval) = FunctionAddress[String] : -# 2755| v2755_4(void) = Call[String] : func:r2755_3, this:r2755_1 -# 2755| mu2755_5(unknown) = ^CallSideEffect : ~m? -# 2755| mu2755_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2755_1 -# 2756| r2756_1(glval) = VariableAddress[x912] : -# 2756| r2756_2(glval) = FunctionAddress[~String] : -# 2756| v2756_3(void) = Call[~String] : func:r2756_2, this:r2756_1 -# 2756| mu2756_4(unknown) = ^CallSideEffect : ~m? -# 2756| v2756_5(void) = ^IndirectReadSideEffect[-1] : &:r2756_1, ~m? -# 2756| mu2756_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2756_1 -# 2756| r2756_7(bool) = Constant[0] : -# 2756| v2756_8(void) = ConditionalBranch : r2756_7 +# 35| Block 912 +# 35| r35_12769(glval) = VariableAddress[x912] : +# 35| mu35_12770(String) = Uninitialized[x912] : &:r35_12769 +# 35| r35_12771(glval) = FunctionAddress[String] : +# 35| v35_12772(void) = Call[String] : func:r35_12771, this:r35_12769 +# 35| mu35_12773(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12769 +# 35| r35_12775(glval) = VariableAddress[x912] : +# 35| r35_12776(glval) = FunctionAddress[~String] : +# 35| v35_12777(void) = Call[~String] : func:r35_12776, this:r35_12775 +# 35| mu35_12778(unknown) = ^CallSideEffect : ~m? +# 35| v35_12779(void) = ^IndirectReadSideEffect[-1] : &:r35_12775, ~m? +# 35| mu35_12780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12775 +# 35| r35_12781(bool) = Constant[0] : +# 35| v35_12782(void) = ConditionalBranch : r35_12781 #-----| False -> Block 913 #-----| True -> Block 1026 -# 2758| Block 913 -# 2758| r2758_1(glval) = VariableAddress[x913] : -# 2758| mu2758_2(String) = Uninitialized[x913] : &:r2758_1 -# 2758| r2758_3(glval) = FunctionAddress[String] : -# 2758| v2758_4(void) = Call[String] : func:r2758_3, this:r2758_1 -# 2758| mu2758_5(unknown) = ^CallSideEffect : ~m? -# 2758| mu2758_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2758_1 -# 2759| r2759_1(glval) = VariableAddress[x913] : -# 2759| r2759_2(glval) = FunctionAddress[~String] : -# 2759| v2759_3(void) = Call[~String] : func:r2759_2, this:r2759_1 -# 2759| mu2759_4(unknown) = ^CallSideEffect : ~m? -# 2759| v2759_5(void) = ^IndirectReadSideEffect[-1] : &:r2759_1, ~m? -# 2759| mu2759_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2759_1 -# 2759| r2759_7(bool) = Constant[0] : -# 2759| v2759_8(void) = ConditionalBranch : r2759_7 +# 35| Block 913 +# 35| r35_12783(glval) = VariableAddress[x913] : +# 35| mu35_12784(String) = Uninitialized[x913] : &:r35_12783 +# 35| r35_12785(glval) = FunctionAddress[String] : +# 35| v35_12786(void) = Call[String] : func:r35_12785, this:r35_12783 +# 35| mu35_12787(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12783 +# 35| r35_12789(glval) = VariableAddress[x913] : +# 35| r35_12790(glval) = FunctionAddress[~String] : +# 35| v35_12791(void) = Call[~String] : func:r35_12790, this:r35_12789 +# 35| mu35_12792(unknown) = ^CallSideEffect : ~m? +# 35| v35_12793(void) = ^IndirectReadSideEffect[-1] : &:r35_12789, ~m? +# 35| mu35_12794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12789 +# 35| r35_12795(bool) = Constant[0] : +# 35| v35_12796(void) = ConditionalBranch : r35_12795 #-----| False -> Block 914 #-----| True -> Block 1026 -# 2761| Block 914 -# 2761| r2761_1(glval) = VariableAddress[x914] : -# 2761| mu2761_2(String) = Uninitialized[x914] : &:r2761_1 -# 2761| r2761_3(glval) = FunctionAddress[String] : -# 2761| v2761_4(void) = Call[String] : func:r2761_3, this:r2761_1 -# 2761| mu2761_5(unknown) = ^CallSideEffect : ~m? -# 2761| mu2761_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2761_1 -# 2762| r2762_1(glval) = VariableAddress[x914] : -# 2762| r2762_2(glval) = FunctionAddress[~String] : -# 2762| v2762_3(void) = Call[~String] : func:r2762_2, this:r2762_1 -# 2762| mu2762_4(unknown) = ^CallSideEffect : ~m? -# 2762| v2762_5(void) = ^IndirectReadSideEffect[-1] : &:r2762_1, ~m? -# 2762| mu2762_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2762_1 -# 2762| r2762_7(bool) = Constant[0] : -# 2762| v2762_8(void) = ConditionalBranch : r2762_7 +# 35| Block 914 +# 35| r35_12797(glval) = VariableAddress[x914] : +# 35| mu35_12798(String) = Uninitialized[x914] : &:r35_12797 +# 35| r35_12799(glval) = FunctionAddress[String] : +# 35| v35_12800(void) = Call[String] : func:r35_12799, this:r35_12797 +# 35| mu35_12801(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12797 +# 35| r35_12803(glval) = VariableAddress[x914] : +# 35| r35_12804(glval) = FunctionAddress[~String] : +# 35| v35_12805(void) = Call[~String] : func:r35_12804, this:r35_12803 +# 35| mu35_12806(unknown) = ^CallSideEffect : ~m? +# 35| v35_12807(void) = ^IndirectReadSideEffect[-1] : &:r35_12803, ~m? +# 35| mu35_12808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12803 +# 35| r35_12809(bool) = Constant[0] : +# 35| v35_12810(void) = ConditionalBranch : r35_12809 #-----| False -> Block 915 #-----| True -> Block 1026 -# 2764| Block 915 -# 2764| r2764_1(glval) = VariableAddress[x915] : -# 2764| mu2764_2(String) = Uninitialized[x915] : &:r2764_1 -# 2764| r2764_3(glval) = FunctionAddress[String] : -# 2764| v2764_4(void) = Call[String] : func:r2764_3, this:r2764_1 -# 2764| mu2764_5(unknown) = ^CallSideEffect : ~m? -# 2764| mu2764_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2764_1 -# 2765| r2765_1(glval) = VariableAddress[x915] : -# 2765| r2765_2(glval) = FunctionAddress[~String] : -# 2765| v2765_3(void) = Call[~String] : func:r2765_2, this:r2765_1 -# 2765| mu2765_4(unknown) = ^CallSideEffect : ~m? -# 2765| v2765_5(void) = ^IndirectReadSideEffect[-1] : &:r2765_1, ~m? -# 2765| mu2765_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2765_1 -# 2765| r2765_7(bool) = Constant[0] : -# 2765| v2765_8(void) = ConditionalBranch : r2765_7 +# 35| Block 915 +# 35| r35_12811(glval) = VariableAddress[x915] : +# 35| mu35_12812(String) = Uninitialized[x915] : &:r35_12811 +# 35| r35_12813(glval) = FunctionAddress[String] : +# 35| v35_12814(void) = Call[String] : func:r35_12813, this:r35_12811 +# 35| mu35_12815(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12811 +# 35| r35_12817(glval) = VariableAddress[x915] : +# 35| r35_12818(glval) = FunctionAddress[~String] : +# 35| v35_12819(void) = Call[~String] : func:r35_12818, this:r35_12817 +# 35| mu35_12820(unknown) = ^CallSideEffect : ~m? +# 35| v35_12821(void) = ^IndirectReadSideEffect[-1] : &:r35_12817, ~m? +# 35| mu35_12822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12817 +# 35| r35_12823(bool) = Constant[0] : +# 35| v35_12824(void) = ConditionalBranch : r35_12823 #-----| False -> Block 916 #-----| True -> Block 1026 -# 2767| Block 916 -# 2767| r2767_1(glval) = VariableAddress[x916] : -# 2767| mu2767_2(String) = Uninitialized[x916] : &:r2767_1 -# 2767| r2767_3(glval) = FunctionAddress[String] : -# 2767| v2767_4(void) = Call[String] : func:r2767_3, this:r2767_1 -# 2767| mu2767_5(unknown) = ^CallSideEffect : ~m? -# 2767| mu2767_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2767_1 -# 2768| r2768_1(glval) = VariableAddress[x916] : -# 2768| r2768_2(glval) = FunctionAddress[~String] : -# 2768| v2768_3(void) = Call[~String] : func:r2768_2, this:r2768_1 -# 2768| mu2768_4(unknown) = ^CallSideEffect : ~m? -# 2768| v2768_5(void) = ^IndirectReadSideEffect[-1] : &:r2768_1, ~m? -# 2768| mu2768_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2768_1 -# 2768| r2768_7(bool) = Constant[0] : -# 2768| v2768_8(void) = ConditionalBranch : r2768_7 +# 35| Block 916 +# 35| r35_12825(glval) = VariableAddress[x916] : +# 35| mu35_12826(String) = Uninitialized[x916] : &:r35_12825 +# 35| r35_12827(glval) = FunctionAddress[String] : +# 35| v35_12828(void) = Call[String] : func:r35_12827, this:r35_12825 +# 35| mu35_12829(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12825 +# 35| r35_12831(glval) = VariableAddress[x916] : +# 35| r35_12832(glval) = FunctionAddress[~String] : +# 35| v35_12833(void) = Call[~String] : func:r35_12832, this:r35_12831 +# 35| mu35_12834(unknown) = ^CallSideEffect : ~m? +# 35| v35_12835(void) = ^IndirectReadSideEffect[-1] : &:r35_12831, ~m? +# 35| mu35_12836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12831 +# 35| r35_12837(bool) = Constant[0] : +# 35| v35_12838(void) = ConditionalBranch : r35_12837 #-----| False -> Block 917 #-----| True -> Block 1026 -# 2770| Block 917 -# 2770| r2770_1(glval) = VariableAddress[x917] : -# 2770| mu2770_2(String) = Uninitialized[x917] : &:r2770_1 -# 2770| r2770_3(glval) = FunctionAddress[String] : -# 2770| v2770_4(void) = Call[String] : func:r2770_3, this:r2770_1 -# 2770| mu2770_5(unknown) = ^CallSideEffect : ~m? -# 2770| mu2770_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2770_1 -# 2771| r2771_1(glval) = VariableAddress[x917] : -# 2771| r2771_2(glval) = FunctionAddress[~String] : -# 2771| v2771_3(void) = Call[~String] : func:r2771_2, this:r2771_1 -# 2771| mu2771_4(unknown) = ^CallSideEffect : ~m? -# 2771| v2771_5(void) = ^IndirectReadSideEffect[-1] : &:r2771_1, ~m? -# 2771| mu2771_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2771_1 -# 2771| r2771_7(bool) = Constant[0] : -# 2771| v2771_8(void) = ConditionalBranch : r2771_7 +# 35| Block 917 +# 35| r35_12839(glval) = VariableAddress[x917] : +# 35| mu35_12840(String) = Uninitialized[x917] : &:r35_12839 +# 35| r35_12841(glval) = FunctionAddress[String] : +# 35| v35_12842(void) = Call[String] : func:r35_12841, this:r35_12839 +# 35| mu35_12843(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12839 +# 35| r35_12845(glval) = VariableAddress[x917] : +# 35| r35_12846(glval) = FunctionAddress[~String] : +# 35| v35_12847(void) = Call[~String] : func:r35_12846, this:r35_12845 +# 35| mu35_12848(unknown) = ^CallSideEffect : ~m? +# 35| v35_12849(void) = ^IndirectReadSideEffect[-1] : &:r35_12845, ~m? +# 35| mu35_12850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12845 +# 35| r35_12851(bool) = Constant[0] : +# 35| v35_12852(void) = ConditionalBranch : r35_12851 #-----| False -> Block 918 #-----| True -> Block 1026 -# 2773| Block 918 -# 2773| r2773_1(glval) = VariableAddress[x918] : -# 2773| mu2773_2(String) = Uninitialized[x918] : &:r2773_1 -# 2773| r2773_3(glval) = FunctionAddress[String] : -# 2773| v2773_4(void) = Call[String] : func:r2773_3, this:r2773_1 -# 2773| mu2773_5(unknown) = ^CallSideEffect : ~m? -# 2773| mu2773_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2773_1 -# 2774| r2774_1(glval) = VariableAddress[x918] : -# 2774| r2774_2(glval) = FunctionAddress[~String] : -# 2774| v2774_3(void) = Call[~String] : func:r2774_2, this:r2774_1 -# 2774| mu2774_4(unknown) = ^CallSideEffect : ~m? -# 2774| v2774_5(void) = ^IndirectReadSideEffect[-1] : &:r2774_1, ~m? -# 2774| mu2774_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2774_1 -# 2774| r2774_7(bool) = Constant[0] : -# 2774| v2774_8(void) = ConditionalBranch : r2774_7 +# 35| Block 918 +# 35| r35_12853(glval) = VariableAddress[x918] : +# 35| mu35_12854(String) = Uninitialized[x918] : &:r35_12853 +# 35| r35_12855(glval) = FunctionAddress[String] : +# 35| v35_12856(void) = Call[String] : func:r35_12855, this:r35_12853 +# 35| mu35_12857(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12853 +# 35| r35_12859(glval) = VariableAddress[x918] : +# 35| r35_12860(glval) = FunctionAddress[~String] : +# 35| v35_12861(void) = Call[~String] : func:r35_12860, this:r35_12859 +# 35| mu35_12862(unknown) = ^CallSideEffect : ~m? +# 35| v35_12863(void) = ^IndirectReadSideEffect[-1] : &:r35_12859, ~m? +# 35| mu35_12864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12859 +# 35| r35_12865(bool) = Constant[0] : +# 35| v35_12866(void) = ConditionalBranch : r35_12865 #-----| False -> Block 919 #-----| True -> Block 1026 -# 2776| Block 919 -# 2776| r2776_1(glval) = VariableAddress[x919] : -# 2776| mu2776_2(String) = Uninitialized[x919] : &:r2776_1 -# 2776| r2776_3(glval) = FunctionAddress[String] : -# 2776| v2776_4(void) = Call[String] : func:r2776_3, this:r2776_1 -# 2776| mu2776_5(unknown) = ^CallSideEffect : ~m? -# 2776| mu2776_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2776_1 -# 2777| r2777_1(glval) = VariableAddress[x919] : -# 2777| r2777_2(glval) = FunctionAddress[~String] : -# 2777| v2777_3(void) = Call[~String] : func:r2777_2, this:r2777_1 -# 2777| mu2777_4(unknown) = ^CallSideEffect : ~m? -# 2777| v2777_5(void) = ^IndirectReadSideEffect[-1] : &:r2777_1, ~m? -# 2777| mu2777_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2777_1 -# 2777| r2777_7(bool) = Constant[0] : -# 2777| v2777_8(void) = ConditionalBranch : r2777_7 +# 35| Block 919 +# 35| r35_12867(glval) = VariableAddress[x919] : +# 35| mu35_12868(String) = Uninitialized[x919] : &:r35_12867 +# 35| r35_12869(glval) = FunctionAddress[String] : +# 35| v35_12870(void) = Call[String] : func:r35_12869, this:r35_12867 +# 35| mu35_12871(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12867 +# 35| r35_12873(glval) = VariableAddress[x919] : +# 35| r35_12874(glval) = FunctionAddress[~String] : +# 35| v35_12875(void) = Call[~String] : func:r35_12874, this:r35_12873 +# 35| mu35_12876(unknown) = ^CallSideEffect : ~m? +# 35| v35_12877(void) = ^IndirectReadSideEffect[-1] : &:r35_12873, ~m? +# 35| mu35_12878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12873 +# 35| r35_12879(bool) = Constant[0] : +# 35| v35_12880(void) = ConditionalBranch : r35_12879 #-----| False -> Block 920 #-----| True -> Block 1026 -# 2779| Block 920 -# 2779| r2779_1(glval) = VariableAddress[x920] : -# 2779| mu2779_2(String) = Uninitialized[x920] : &:r2779_1 -# 2779| r2779_3(glval) = FunctionAddress[String] : -# 2779| v2779_4(void) = Call[String] : func:r2779_3, this:r2779_1 -# 2779| mu2779_5(unknown) = ^CallSideEffect : ~m? -# 2779| mu2779_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2779_1 -# 2780| r2780_1(glval) = VariableAddress[x920] : -# 2780| r2780_2(glval) = FunctionAddress[~String] : -# 2780| v2780_3(void) = Call[~String] : func:r2780_2, this:r2780_1 -# 2780| mu2780_4(unknown) = ^CallSideEffect : ~m? -# 2780| v2780_5(void) = ^IndirectReadSideEffect[-1] : &:r2780_1, ~m? -# 2780| mu2780_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2780_1 -# 2780| r2780_7(bool) = Constant[0] : -# 2780| v2780_8(void) = ConditionalBranch : r2780_7 +# 35| Block 920 +# 35| r35_12881(glval) = VariableAddress[x920] : +# 35| mu35_12882(String) = Uninitialized[x920] : &:r35_12881 +# 35| r35_12883(glval) = FunctionAddress[String] : +# 35| v35_12884(void) = Call[String] : func:r35_12883, this:r35_12881 +# 35| mu35_12885(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12881 +# 35| r35_12887(glval) = VariableAddress[x920] : +# 35| r35_12888(glval) = FunctionAddress[~String] : +# 35| v35_12889(void) = Call[~String] : func:r35_12888, this:r35_12887 +# 35| mu35_12890(unknown) = ^CallSideEffect : ~m? +# 35| v35_12891(void) = ^IndirectReadSideEffect[-1] : &:r35_12887, ~m? +# 35| mu35_12892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12887 +# 35| r35_12893(bool) = Constant[0] : +# 35| v35_12894(void) = ConditionalBranch : r35_12893 #-----| False -> Block 921 #-----| True -> Block 1026 -# 2782| Block 921 -# 2782| r2782_1(glval) = VariableAddress[x921] : -# 2782| mu2782_2(String) = Uninitialized[x921] : &:r2782_1 -# 2782| r2782_3(glval) = FunctionAddress[String] : -# 2782| v2782_4(void) = Call[String] : func:r2782_3, this:r2782_1 -# 2782| mu2782_5(unknown) = ^CallSideEffect : ~m? -# 2782| mu2782_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2782_1 -# 2783| r2783_1(glval) = VariableAddress[x921] : -# 2783| r2783_2(glval) = FunctionAddress[~String] : -# 2783| v2783_3(void) = Call[~String] : func:r2783_2, this:r2783_1 -# 2783| mu2783_4(unknown) = ^CallSideEffect : ~m? -# 2783| v2783_5(void) = ^IndirectReadSideEffect[-1] : &:r2783_1, ~m? -# 2783| mu2783_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2783_1 -# 2783| r2783_7(bool) = Constant[0] : -# 2783| v2783_8(void) = ConditionalBranch : r2783_7 +# 35| Block 921 +# 35| r35_12895(glval) = VariableAddress[x921] : +# 35| mu35_12896(String) = Uninitialized[x921] : &:r35_12895 +# 35| r35_12897(glval) = FunctionAddress[String] : +# 35| v35_12898(void) = Call[String] : func:r35_12897, this:r35_12895 +# 35| mu35_12899(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12895 +# 35| r35_12901(glval) = VariableAddress[x921] : +# 35| r35_12902(glval) = FunctionAddress[~String] : +# 35| v35_12903(void) = Call[~String] : func:r35_12902, this:r35_12901 +# 35| mu35_12904(unknown) = ^CallSideEffect : ~m? +# 35| v35_12905(void) = ^IndirectReadSideEffect[-1] : &:r35_12901, ~m? +# 35| mu35_12906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12901 +# 35| r35_12907(bool) = Constant[0] : +# 35| v35_12908(void) = ConditionalBranch : r35_12907 #-----| False -> Block 922 #-----| True -> Block 1026 -# 2785| Block 922 -# 2785| r2785_1(glval) = VariableAddress[x922] : -# 2785| mu2785_2(String) = Uninitialized[x922] : &:r2785_1 -# 2785| r2785_3(glval) = FunctionAddress[String] : -# 2785| v2785_4(void) = Call[String] : func:r2785_3, this:r2785_1 -# 2785| mu2785_5(unknown) = ^CallSideEffect : ~m? -# 2785| mu2785_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2785_1 -# 2786| r2786_1(glval) = VariableAddress[x922] : -# 2786| r2786_2(glval) = FunctionAddress[~String] : -# 2786| v2786_3(void) = Call[~String] : func:r2786_2, this:r2786_1 -# 2786| mu2786_4(unknown) = ^CallSideEffect : ~m? -# 2786| v2786_5(void) = ^IndirectReadSideEffect[-1] : &:r2786_1, ~m? -# 2786| mu2786_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2786_1 -# 2786| r2786_7(bool) = Constant[0] : -# 2786| v2786_8(void) = ConditionalBranch : r2786_7 +# 35| Block 922 +# 35| r35_12909(glval) = VariableAddress[x922] : +# 35| mu35_12910(String) = Uninitialized[x922] : &:r35_12909 +# 35| r35_12911(glval) = FunctionAddress[String] : +# 35| v35_12912(void) = Call[String] : func:r35_12911, this:r35_12909 +# 35| mu35_12913(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12909 +# 35| r35_12915(glval) = VariableAddress[x922] : +# 35| r35_12916(glval) = FunctionAddress[~String] : +# 35| v35_12917(void) = Call[~String] : func:r35_12916, this:r35_12915 +# 35| mu35_12918(unknown) = ^CallSideEffect : ~m? +# 35| v35_12919(void) = ^IndirectReadSideEffect[-1] : &:r35_12915, ~m? +# 35| mu35_12920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12915 +# 35| r35_12921(bool) = Constant[0] : +# 35| v35_12922(void) = ConditionalBranch : r35_12921 #-----| False -> Block 923 #-----| True -> Block 1026 -# 2788| Block 923 -# 2788| r2788_1(glval) = VariableAddress[x923] : -# 2788| mu2788_2(String) = Uninitialized[x923] : &:r2788_1 -# 2788| r2788_3(glval) = FunctionAddress[String] : -# 2788| v2788_4(void) = Call[String] : func:r2788_3, this:r2788_1 -# 2788| mu2788_5(unknown) = ^CallSideEffect : ~m? -# 2788| mu2788_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2788_1 -# 2789| r2789_1(glval) = VariableAddress[x923] : -# 2789| r2789_2(glval) = FunctionAddress[~String] : -# 2789| v2789_3(void) = Call[~String] : func:r2789_2, this:r2789_1 -# 2789| mu2789_4(unknown) = ^CallSideEffect : ~m? -# 2789| v2789_5(void) = ^IndirectReadSideEffect[-1] : &:r2789_1, ~m? -# 2789| mu2789_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2789_1 -# 2789| r2789_7(bool) = Constant[0] : -# 2789| v2789_8(void) = ConditionalBranch : r2789_7 +# 35| Block 923 +# 35| r35_12923(glval) = VariableAddress[x923] : +# 35| mu35_12924(String) = Uninitialized[x923] : &:r35_12923 +# 35| r35_12925(glval) = FunctionAddress[String] : +# 35| v35_12926(void) = Call[String] : func:r35_12925, this:r35_12923 +# 35| mu35_12927(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12923 +# 35| r35_12929(glval) = VariableAddress[x923] : +# 35| r35_12930(glval) = FunctionAddress[~String] : +# 35| v35_12931(void) = Call[~String] : func:r35_12930, this:r35_12929 +# 35| mu35_12932(unknown) = ^CallSideEffect : ~m? +# 35| v35_12933(void) = ^IndirectReadSideEffect[-1] : &:r35_12929, ~m? +# 35| mu35_12934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12929 +# 35| r35_12935(bool) = Constant[0] : +# 35| v35_12936(void) = ConditionalBranch : r35_12935 #-----| False -> Block 924 #-----| True -> Block 1026 -# 2791| Block 924 -# 2791| r2791_1(glval) = VariableAddress[x924] : -# 2791| mu2791_2(String) = Uninitialized[x924] : &:r2791_1 -# 2791| r2791_3(glval) = FunctionAddress[String] : -# 2791| v2791_4(void) = Call[String] : func:r2791_3, this:r2791_1 -# 2791| mu2791_5(unknown) = ^CallSideEffect : ~m? -# 2791| mu2791_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2791_1 -# 2792| r2792_1(glval) = VariableAddress[x924] : -# 2792| r2792_2(glval) = FunctionAddress[~String] : -# 2792| v2792_3(void) = Call[~String] : func:r2792_2, this:r2792_1 -# 2792| mu2792_4(unknown) = ^CallSideEffect : ~m? -# 2792| v2792_5(void) = ^IndirectReadSideEffect[-1] : &:r2792_1, ~m? -# 2792| mu2792_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2792_1 -# 2792| r2792_7(bool) = Constant[0] : -# 2792| v2792_8(void) = ConditionalBranch : r2792_7 +# 35| Block 924 +# 35| r35_12937(glval) = VariableAddress[x924] : +# 35| mu35_12938(String) = Uninitialized[x924] : &:r35_12937 +# 35| r35_12939(glval) = FunctionAddress[String] : +# 35| v35_12940(void) = Call[String] : func:r35_12939, this:r35_12937 +# 35| mu35_12941(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12937 +# 35| r35_12943(glval) = VariableAddress[x924] : +# 35| r35_12944(glval) = FunctionAddress[~String] : +# 35| v35_12945(void) = Call[~String] : func:r35_12944, this:r35_12943 +# 35| mu35_12946(unknown) = ^CallSideEffect : ~m? +# 35| v35_12947(void) = ^IndirectReadSideEffect[-1] : &:r35_12943, ~m? +# 35| mu35_12948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12943 +# 35| r35_12949(bool) = Constant[0] : +# 35| v35_12950(void) = ConditionalBranch : r35_12949 #-----| False -> Block 925 #-----| True -> Block 1026 -# 2794| Block 925 -# 2794| r2794_1(glval) = VariableAddress[x925] : -# 2794| mu2794_2(String) = Uninitialized[x925] : &:r2794_1 -# 2794| r2794_3(glval) = FunctionAddress[String] : -# 2794| v2794_4(void) = Call[String] : func:r2794_3, this:r2794_1 -# 2794| mu2794_5(unknown) = ^CallSideEffect : ~m? -# 2794| mu2794_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2794_1 -# 2795| r2795_1(glval) = VariableAddress[x925] : -# 2795| r2795_2(glval) = FunctionAddress[~String] : -# 2795| v2795_3(void) = Call[~String] : func:r2795_2, this:r2795_1 -# 2795| mu2795_4(unknown) = ^CallSideEffect : ~m? -# 2795| v2795_5(void) = ^IndirectReadSideEffect[-1] : &:r2795_1, ~m? -# 2795| mu2795_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2795_1 -# 2795| r2795_7(bool) = Constant[0] : -# 2795| v2795_8(void) = ConditionalBranch : r2795_7 +# 35| Block 925 +# 35| r35_12951(glval) = VariableAddress[x925] : +# 35| mu35_12952(String) = Uninitialized[x925] : &:r35_12951 +# 35| r35_12953(glval) = FunctionAddress[String] : +# 35| v35_12954(void) = Call[String] : func:r35_12953, this:r35_12951 +# 35| mu35_12955(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12951 +# 35| r35_12957(glval) = VariableAddress[x925] : +# 35| r35_12958(glval) = FunctionAddress[~String] : +# 35| v35_12959(void) = Call[~String] : func:r35_12958, this:r35_12957 +# 35| mu35_12960(unknown) = ^CallSideEffect : ~m? +# 35| v35_12961(void) = ^IndirectReadSideEffect[-1] : &:r35_12957, ~m? +# 35| mu35_12962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12957 +# 35| r35_12963(bool) = Constant[0] : +# 35| v35_12964(void) = ConditionalBranch : r35_12963 #-----| False -> Block 926 #-----| True -> Block 1026 -# 2797| Block 926 -# 2797| r2797_1(glval) = VariableAddress[x926] : -# 2797| mu2797_2(String) = Uninitialized[x926] : &:r2797_1 -# 2797| r2797_3(glval) = FunctionAddress[String] : -# 2797| v2797_4(void) = Call[String] : func:r2797_3, this:r2797_1 -# 2797| mu2797_5(unknown) = ^CallSideEffect : ~m? -# 2797| mu2797_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2797_1 -# 2798| r2798_1(glval) = VariableAddress[x926] : -# 2798| r2798_2(glval) = FunctionAddress[~String] : -# 2798| v2798_3(void) = Call[~String] : func:r2798_2, this:r2798_1 -# 2798| mu2798_4(unknown) = ^CallSideEffect : ~m? -# 2798| v2798_5(void) = ^IndirectReadSideEffect[-1] : &:r2798_1, ~m? -# 2798| mu2798_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2798_1 -# 2798| r2798_7(bool) = Constant[0] : -# 2798| v2798_8(void) = ConditionalBranch : r2798_7 +# 35| Block 926 +# 35| r35_12965(glval) = VariableAddress[x926] : +# 35| mu35_12966(String) = Uninitialized[x926] : &:r35_12965 +# 35| r35_12967(glval) = FunctionAddress[String] : +# 35| v35_12968(void) = Call[String] : func:r35_12967, this:r35_12965 +# 35| mu35_12969(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12965 +# 35| r35_12971(glval) = VariableAddress[x926] : +# 35| r35_12972(glval) = FunctionAddress[~String] : +# 35| v35_12973(void) = Call[~String] : func:r35_12972, this:r35_12971 +# 35| mu35_12974(unknown) = ^CallSideEffect : ~m? +# 35| v35_12975(void) = ^IndirectReadSideEffect[-1] : &:r35_12971, ~m? +# 35| mu35_12976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12971 +# 35| r35_12977(bool) = Constant[0] : +# 35| v35_12978(void) = ConditionalBranch : r35_12977 #-----| False -> Block 927 #-----| True -> Block 1026 -# 2800| Block 927 -# 2800| r2800_1(glval) = VariableAddress[x927] : -# 2800| mu2800_2(String) = Uninitialized[x927] : &:r2800_1 -# 2800| r2800_3(glval) = FunctionAddress[String] : -# 2800| v2800_4(void) = Call[String] : func:r2800_3, this:r2800_1 -# 2800| mu2800_5(unknown) = ^CallSideEffect : ~m? -# 2800| mu2800_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2800_1 -# 2801| r2801_1(glval) = VariableAddress[x927] : -# 2801| r2801_2(glval) = FunctionAddress[~String] : -# 2801| v2801_3(void) = Call[~String] : func:r2801_2, this:r2801_1 -# 2801| mu2801_4(unknown) = ^CallSideEffect : ~m? -# 2801| v2801_5(void) = ^IndirectReadSideEffect[-1] : &:r2801_1, ~m? -# 2801| mu2801_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2801_1 -# 2801| r2801_7(bool) = Constant[0] : -# 2801| v2801_8(void) = ConditionalBranch : r2801_7 +# 35| Block 927 +# 35| r35_12979(glval) = VariableAddress[x927] : +# 35| mu35_12980(String) = Uninitialized[x927] : &:r35_12979 +# 35| r35_12981(glval) = FunctionAddress[String] : +# 35| v35_12982(void) = Call[String] : func:r35_12981, this:r35_12979 +# 35| mu35_12983(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12979 +# 35| r35_12985(glval) = VariableAddress[x927] : +# 35| r35_12986(glval) = FunctionAddress[~String] : +# 35| v35_12987(void) = Call[~String] : func:r35_12986, this:r35_12985 +# 35| mu35_12988(unknown) = ^CallSideEffect : ~m? +# 35| v35_12989(void) = ^IndirectReadSideEffect[-1] : &:r35_12985, ~m? +# 35| mu35_12990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12985 +# 35| r35_12991(bool) = Constant[0] : +# 35| v35_12992(void) = ConditionalBranch : r35_12991 #-----| False -> Block 928 #-----| True -> Block 1026 -# 2803| Block 928 -# 2803| r2803_1(glval) = VariableAddress[x928] : -# 2803| mu2803_2(String) = Uninitialized[x928] : &:r2803_1 -# 2803| r2803_3(glval) = FunctionAddress[String] : -# 2803| v2803_4(void) = Call[String] : func:r2803_3, this:r2803_1 -# 2803| mu2803_5(unknown) = ^CallSideEffect : ~m? -# 2803| mu2803_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2803_1 -# 2804| r2804_1(glval) = VariableAddress[x928] : -# 2804| r2804_2(glval) = FunctionAddress[~String] : -# 2804| v2804_3(void) = Call[~String] : func:r2804_2, this:r2804_1 -# 2804| mu2804_4(unknown) = ^CallSideEffect : ~m? -# 2804| v2804_5(void) = ^IndirectReadSideEffect[-1] : &:r2804_1, ~m? -# 2804| mu2804_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2804_1 -# 2804| r2804_7(bool) = Constant[0] : -# 2804| v2804_8(void) = ConditionalBranch : r2804_7 +# 35| Block 928 +# 35| r35_12993(glval) = VariableAddress[x928] : +# 35| mu35_12994(String) = Uninitialized[x928] : &:r35_12993 +# 35| r35_12995(glval) = FunctionAddress[String] : +# 35| v35_12996(void) = Call[String] : func:r35_12995, this:r35_12993 +# 35| mu35_12997(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12993 +# 35| r35_12999(glval) = VariableAddress[x928] : +# 35| r35_13000(glval) = FunctionAddress[~String] : +# 35| v35_13001(void) = Call[~String] : func:r35_13000, this:r35_12999 +# 35| mu35_13002(unknown) = ^CallSideEffect : ~m? +# 35| v35_13003(void) = ^IndirectReadSideEffect[-1] : &:r35_12999, ~m? +# 35| mu35_13004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12999 +# 35| r35_13005(bool) = Constant[0] : +# 35| v35_13006(void) = ConditionalBranch : r35_13005 #-----| False -> Block 929 #-----| True -> Block 1026 -# 2806| Block 929 -# 2806| r2806_1(glval) = VariableAddress[x929] : -# 2806| mu2806_2(String) = Uninitialized[x929] : &:r2806_1 -# 2806| r2806_3(glval) = FunctionAddress[String] : -# 2806| v2806_4(void) = Call[String] : func:r2806_3, this:r2806_1 -# 2806| mu2806_5(unknown) = ^CallSideEffect : ~m? -# 2806| mu2806_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2806_1 -# 2807| r2807_1(glval) = VariableAddress[x929] : -# 2807| r2807_2(glval) = FunctionAddress[~String] : -# 2807| v2807_3(void) = Call[~String] : func:r2807_2, this:r2807_1 -# 2807| mu2807_4(unknown) = ^CallSideEffect : ~m? -# 2807| v2807_5(void) = ^IndirectReadSideEffect[-1] : &:r2807_1, ~m? -# 2807| mu2807_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2807_1 -# 2807| r2807_7(bool) = Constant[0] : -# 2807| v2807_8(void) = ConditionalBranch : r2807_7 +# 35| Block 929 +# 35| r35_13007(glval) = VariableAddress[x929] : +# 35| mu35_13008(String) = Uninitialized[x929] : &:r35_13007 +# 35| r35_13009(glval) = FunctionAddress[String] : +# 35| v35_13010(void) = Call[String] : func:r35_13009, this:r35_13007 +# 35| mu35_13011(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13007 +# 35| r35_13013(glval) = VariableAddress[x929] : +# 35| r35_13014(glval) = FunctionAddress[~String] : +# 35| v35_13015(void) = Call[~String] : func:r35_13014, this:r35_13013 +# 35| mu35_13016(unknown) = ^CallSideEffect : ~m? +# 35| v35_13017(void) = ^IndirectReadSideEffect[-1] : &:r35_13013, ~m? +# 35| mu35_13018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13013 +# 35| r35_13019(bool) = Constant[0] : +# 35| v35_13020(void) = ConditionalBranch : r35_13019 #-----| False -> Block 930 #-----| True -> Block 1026 -# 2809| Block 930 -# 2809| r2809_1(glval) = VariableAddress[x930] : -# 2809| mu2809_2(String) = Uninitialized[x930] : &:r2809_1 -# 2809| r2809_3(glval) = FunctionAddress[String] : -# 2809| v2809_4(void) = Call[String] : func:r2809_3, this:r2809_1 -# 2809| mu2809_5(unknown) = ^CallSideEffect : ~m? -# 2809| mu2809_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2809_1 -# 2810| r2810_1(glval) = VariableAddress[x930] : -# 2810| r2810_2(glval) = FunctionAddress[~String] : -# 2810| v2810_3(void) = Call[~String] : func:r2810_2, this:r2810_1 -# 2810| mu2810_4(unknown) = ^CallSideEffect : ~m? -# 2810| v2810_5(void) = ^IndirectReadSideEffect[-1] : &:r2810_1, ~m? -# 2810| mu2810_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2810_1 -# 2810| r2810_7(bool) = Constant[0] : -# 2810| v2810_8(void) = ConditionalBranch : r2810_7 +# 35| Block 930 +# 35| r35_13021(glval) = VariableAddress[x930] : +# 35| mu35_13022(String) = Uninitialized[x930] : &:r35_13021 +# 35| r35_13023(glval) = FunctionAddress[String] : +# 35| v35_13024(void) = Call[String] : func:r35_13023, this:r35_13021 +# 35| mu35_13025(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13021 +# 35| r35_13027(glval) = VariableAddress[x930] : +# 35| r35_13028(glval) = FunctionAddress[~String] : +# 35| v35_13029(void) = Call[~String] : func:r35_13028, this:r35_13027 +# 35| mu35_13030(unknown) = ^CallSideEffect : ~m? +# 35| v35_13031(void) = ^IndirectReadSideEffect[-1] : &:r35_13027, ~m? +# 35| mu35_13032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13027 +# 35| r35_13033(bool) = Constant[0] : +# 35| v35_13034(void) = ConditionalBranch : r35_13033 #-----| False -> Block 931 #-----| True -> Block 1026 -# 2812| Block 931 -# 2812| r2812_1(glval) = VariableAddress[x931] : -# 2812| mu2812_2(String) = Uninitialized[x931] : &:r2812_1 -# 2812| r2812_3(glval) = FunctionAddress[String] : -# 2812| v2812_4(void) = Call[String] : func:r2812_3, this:r2812_1 -# 2812| mu2812_5(unknown) = ^CallSideEffect : ~m? -# 2812| mu2812_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2812_1 -# 2813| r2813_1(glval) = VariableAddress[x931] : -# 2813| r2813_2(glval) = FunctionAddress[~String] : -# 2813| v2813_3(void) = Call[~String] : func:r2813_2, this:r2813_1 -# 2813| mu2813_4(unknown) = ^CallSideEffect : ~m? -# 2813| v2813_5(void) = ^IndirectReadSideEffect[-1] : &:r2813_1, ~m? -# 2813| mu2813_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2813_1 -# 2813| r2813_7(bool) = Constant[0] : -# 2813| v2813_8(void) = ConditionalBranch : r2813_7 +# 35| Block 931 +# 35| r35_13035(glval) = VariableAddress[x931] : +# 35| mu35_13036(String) = Uninitialized[x931] : &:r35_13035 +# 35| r35_13037(glval) = FunctionAddress[String] : +# 35| v35_13038(void) = Call[String] : func:r35_13037, this:r35_13035 +# 35| mu35_13039(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13035 +# 35| r35_13041(glval) = VariableAddress[x931] : +# 35| r35_13042(glval) = FunctionAddress[~String] : +# 35| v35_13043(void) = Call[~String] : func:r35_13042, this:r35_13041 +# 35| mu35_13044(unknown) = ^CallSideEffect : ~m? +# 35| v35_13045(void) = ^IndirectReadSideEffect[-1] : &:r35_13041, ~m? +# 35| mu35_13046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13041 +# 35| r35_13047(bool) = Constant[0] : +# 35| v35_13048(void) = ConditionalBranch : r35_13047 #-----| False -> Block 932 #-----| True -> Block 1026 -# 2815| Block 932 -# 2815| r2815_1(glval) = VariableAddress[x932] : -# 2815| mu2815_2(String) = Uninitialized[x932] : &:r2815_1 -# 2815| r2815_3(glval) = FunctionAddress[String] : -# 2815| v2815_4(void) = Call[String] : func:r2815_3, this:r2815_1 -# 2815| mu2815_5(unknown) = ^CallSideEffect : ~m? -# 2815| mu2815_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2815_1 -# 2816| r2816_1(glval) = VariableAddress[x932] : -# 2816| r2816_2(glval) = FunctionAddress[~String] : -# 2816| v2816_3(void) = Call[~String] : func:r2816_2, this:r2816_1 -# 2816| mu2816_4(unknown) = ^CallSideEffect : ~m? -# 2816| v2816_5(void) = ^IndirectReadSideEffect[-1] : &:r2816_1, ~m? -# 2816| mu2816_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2816_1 -# 2816| r2816_7(bool) = Constant[0] : -# 2816| v2816_8(void) = ConditionalBranch : r2816_7 +# 35| Block 932 +# 35| r35_13049(glval) = VariableAddress[x932] : +# 35| mu35_13050(String) = Uninitialized[x932] : &:r35_13049 +# 35| r35_13051(glval) = FunctionAddress[String] : +# 35| v35_13052(void) = Call[String] : func:r35_13051, this:r35_13049 +# 35| mu35_13053(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13049 +# 35| r35_13055(glval) = VariableAddress[x932] : +# 35| r35_13056(glval) = FunctionAddress[~String] : +# 35| v35_13057(void) = Call[~String] : func:r35_13056, this:r35_13055 +# 35| mu35_13058(unknown) = ^CallSideEffect : ~m? +# 35| v35_13059(void) = ^IndirectReadSideEffect[-1] : &:r35_13055, ~m? +# 35| mu35_13060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13055 +# 35| r35_13061(bool) = Constant[0] : +# 35| v35_13062(void) = ConditionalBranch : r35_13061 #-----| False -> Block 933 #-----| True -> Block 1026 -# 2818| Block 933 -# 2818| r2818_1(glval) = VariableAddress[x933] : -# 2818| mu2818_2(String) = Uninitialized[x933] : &:r2818_1 -# 2818| r2818_3(glval) = FunctionAddress[String] : -# 2818| v2818_4(void) = Call[String] : func:r2818_3, this:r2818_1 -# 2818| mu2818_5(unknown) = ^CallSideEffect : ~m? -# 2818| mu2818_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2818_1 -# 2819| r2819_1(glval) = VariableAddress[x933] : -# 2819| r2819_2(glval) = FunctionAddress[~String] : -# 2819| v2819_3(void) = Call[~String] : func:r2819_2, this:r2819_1 -# 2819| mu2819_4(unknown) = ^CallSideEffect : ~m? -# 2819| v2819_5(void) = ^IndirectReadSideEffect[-1] : &:r2819_1, ~m? -# 2819| mu2819_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2819_1 -# 2819| r2819_7(bool) = Constant[0] : -# 2819| v2819_8(void) = ConditionalBranch : r2819_7 +# 35| Block 933 +# 35| r35_13063(glval) = VariableAddress[x933] : +# 35| mu35_13064(String) = Uninitialized[x933] : &:r35_13063 +# 35| r35_13065(glval) = FunctionAddress[String] : +# 35| v35_13066(void) = Call[String] : func:r35_13065, this:r35_13063 +# 35| mu35_13067(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13063 +# 35| r35_13069(glval) = VariableAddress[x933] : +# 35| r35_13070(glval) = FunctionAddress[~String] : +# 35| v35_13071(void) = Call[~String] : func:r35_13070, this:r35_13069 +# 35| mu35_13072(unknown) = ^CallSideEffect : ~m? +# 35| v35_13073(void) = ^IndirectReadSideEffect[-1] : &:r35_13069, ~m? +# 35| mu35_13074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13069 +# 35| r35_13075(bool) = Constant[0] : +# 35| v35_13076(void) = ConditionalBranch : r35_13075 #-----| False -> Block 934 #-----| True -> Block 1026 -# 2821| Block 934 -# 2821| r2821_1(glval) = VariableAddress[x934] : -# 2821| mu2821_2(String) = Uninitialized[x934] : &:r2821_1 -# 2821| r2821_3(glval) = FunctionAddress[String] : -# 2821| v2821_4(void) = Call[String] : func:r2821_3, this:r2821_1 -# 2821| mu2821_5(unknown) = ^CallSideEffect : ~m? -# 2821| mu2821_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2821_1 -# 2822| r2822_1(glval) = VariableAddress[x934] : -# 2822| r2822_2(glval) = FunctionAddress[~String] : -# 2822| v2822_3(void) = Call[~String] : func:r2822_2, this:r2822_1 -# 2822| mu2822_4(unknown) = ^CallSideEffect : ~m? -# 2822| v2822_5(void) = ^IndirectReadSideEffect[-1] : &:r2822_1, ~m? -# 2822| mu2822_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2822_1 -# 2822| r2822_7(bool) = Constant[0] : -# 2822| v2822_8(void) = ConditionalBranch : r2822_7 +# 35| Block 934 +# 35| r35_13077(glval) = VariableAddress[x934] : +# 35| mu35_13078(String) = Uninitialized[x934] : &:r35_13077 +# 35| r35_13079(glval) = FunctionAddress[String] : +# 35| v35_13080(void) = Call[String] : func:r35_13079, this:r35_13077 +# 35| mu35_13081(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13077 +# 35| r35_13083(glval) = VariableAddress[x934] : +# 35| r35_13084(glval) = FunctionAddress[~String] : +# 35| v35_13085(void) = Call[~String] : func:r35_13084, this:r35_13083 +# 35| mu35_13086(unknown) = ^CallSideEffect : ~m? +# 35| v35_13087(void) = ^IndirectReadSideEffect[-1] : &:r35_13083, ~m? +# 35| mu35_13088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13083 +# 35| r35_13089(bool) = Constant[0] : +# 35| v35_13090(void) = ConditionalBranch : r35_13089 #-----| False -> Block 935 #-----| True -> Block 1026 -# 2824| Block 935 -# 2824| r2824_1(glval) = VariableAddress[x935] : -# 2824| mu2824_2(String) = Uninitialized[x935] : &:r2824_1 -# 2824| r2824_3(glval) = FunctionAddress[String] : -# 2824| v2824_4(void) = Call[String] : func:r2824_3, this:r2824_1 -# 2824| mu2824_5(unknown) = ^CallSideEffect : ~m? -# 2824| mu2824_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2824_1 -# 2825| r2825_1(glval) = VariableAddress[x935] : -# 2825| r2825_2(glval) = FunctionAddress[~String] : -# 2825| v2825_3(void) = Call[~String] : func:r2825_2, this:r2825_1 -# 2825| mu2825_4(unknown) = ^CallSideEffect : ~m? -# 2825| v2825_5(void) = ^IndirectReadSideEffect[-1] : &:r2825_1, ~m? -# 2825| mu2825_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2825_1 -# 2825| r2825_7(bool) = Constant[0] : -# 2825| v2825_8(void) = ConditionalBranch : r2825_7 +# 35| Block 935 +# 35| r35_13091(glval) = VariableAddress[x935] : +# 35| mu35_13092(String) = Uninitialized[x935] : &:r35_13091 +# 35| r35_13093(glval) = FunctionAddress[String] : +# 35| v35_13094(void) = Call[String] : func:r35_13093, this:r35_13091 +# 35| mu35_13095(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13091 +# 35| r35_13097(glval) = VariableAddress[x935] : +# 35| r35_13098(glval) = FunctionAddress[~String] : +# 35| v35_13099(void) = Call[~String] : func:r35_13098, this:r35_13097 +# 35| mu35_13100(unknown) = ^CallSideEffect : ~m? +# 35| v35_13101(void) = ^IndirectReadSideEffect[-1] : &:r35_13097, ~m? +# 35| mu35_13102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13097 +# 35| r35_13103(bool) = Constant[0] : +# 35| v35_13104(void) = ConditionalBranch : r35_13103 #-----| False -> Block 936 #-----| True -> Block 1026 -# 2827| Block 936 -# 2827| r2827_1(glval) = VariableAddress[x936] : -# 2827| mu2827_2(String) = Uninitialized[x936] : &:r2827_1 -# 2827| r2827_3(glval) = FunctionAddress[String] : -# 2827| v2827_4(void) = Call[String] : func:r2827_3, this:r2827_1 -# 2827| mu2827_5(unknown) = ^CallSideEffect : ~m? -# 2827| mu2827_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2827_1 -# 2828| r2828_1(glval) = VariableAddress[x936] : -# 2828| r2828_2(glval) = FunctionAddress[~String] : -# 2828| v2828_3(void) = Call[~String] : func:r2828_2, this:r2828_1 -# 2828| mu2828_4(unknown) = ^CallSideEffect : ~m? -# 2828| v2828_5(void) = ^IndirectReadSideEffect[-1] : &:r2828_1, ~m? -# 2828| mu2828_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2828_1 -# 2828| r2828_7(bool) = Constant[0] : -# 2828| v2828_8(void) = ConditionalBranch : r2828_7 +# 35| Block 936 +# 35| r35_13105(glval) = VariableAddress[x936] : +# 35| mu35_13106(String) = Uninitialized[x936] : &:r35_13105 +# 35| r35_13107(glval) = FunctionAddress[String] : +# 35| v35_13108(void) = Call[String] : func:r35_13107, this:r35_13105 +# 35| mu35_13109(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13105 +# 35| r35_13111(glval) = VariableAddress[x936] : +# 35| r35_13112(glval) = FunctionAddress[~String] : +# 35| v35_13113(void) = Call[~String] : func:r35_13112, this:r35_13111 +# 35| mu35_13114(unknown) = ^CallSideEffect : ~m? +# 35| v35_13115(void) = ^IndirectReadSideEffect[-1] : &:r35_13111, ~m? +# 35| mu35_13116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13111 +# 35| r35_13117(bool) = Constant[0] : +# 35| v35_13118(void) = ConditionalBranch : r35_13117 #-----| False -> Block 937 #-----| True -> Block 1026 -# 2830| Block 937 -# 2830| r2830_1(glval) = VariableAddress[x937] : -# 2830| mu2830_2(String) = Uninitialized[x937] : &:r2830_1 -# 2830| r2830_3(glval) = FunctionAddress[String] : -# 2830| v2830_4(void) = Call[String] : func:r2830_3, this:r2830_1 -# 2830| mu2830_5(unknown) = ^CallSideEffect : ~m? -# 2830| mu2830_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2830_1 -# 2831| r2831_1(glval) = VariableAddress[x937] : -# 2831| r2831_2(glval) = FunctionAddress[~String] : -# 2831| v2831_3(void) = Call[~String] : func:r2831_2, this:r2831_1 -# 2831| mu2831_4(unknown) = ^CallSideEffect : ~m? -# 2831| v2831_5(void) = ^IndirectReadSideEffect[-1] : &:r2831_1, ~m? -# 2831| mu2831_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2831_1 -# 2831| r2831_7(bool) = Constant[0] : -# 2831| v2831_8(void) = ConditionalBranch : r2831_7 +# 35| Block 937 +# 35| r35_13119(glval) = VariableAddress[x937] : +# 35| mu35_13120(String) = Uninitialized[x937] : &:r35_13119 +# 35| r35_13121(glval) = FunctionAddress[String] : +# 35| v35_13122(void) = Call[String] : func:r35_13121, this:r35_13119 +# 35| mu35_13123(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13119 +# 35| r35_13125(glval) = VariableAddress[x937] : +# 35| r35_13126(glval) = FunctionAddress[~String] : +# 35| v35_13127(void) = Call[~String] : func:r35_13126, this:r35_13125 +# 35| mu35_13128(unknown) = ^CallSideEffect : ~m? +# 35| v35_13129(void) = ^IndirectReadSideEffect[-1] : &:r35_13125, ~m? +# 35| mu35_13130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13125 +# 35| r35_13131(bool) = Constant[0] : +# 35| v35_13132(void) = ConditionalBranch : r35_13131 #-----| False -> Block 938 #-----| True -> Block 1026 -# 2833| Block 938 -# 2833| r2833_1(glval) = VariableAddress[x938] : -# 2833| mu2833_2(String) = Uninitialized[x938] : &:r2833_1 -# 2833| r2833_3(glval) = FunctionAddress[String] : -# 2833| v2833_4(void) = Call[String] : func:r2833_3, this:r2833_1 -# 2833| mu2833_5(unknown) = ^CallSideEffect : ~m? -# 2833| mu2833_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2833_1 -# 2834| r2834_1(glval) = VariableAddress[x938] : -# 2834| r2834_2(glval) = FunctionAddress[~String] : -# 2834| v2834_3(void) = Call[~String] : func:r2834_2, this:r2834_1 -# 2834| mu2834_4(unknown) = ^CallSideEffect : ~m? -# 2834| v2834_5(void) = ^IndirectReadSideEffect[-1] : &:r2834_1, ~m? -# 2834| mu2834_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2834_1 -# 2834| r2834_7(bool) = Constant[0] : -# 2834| v2834_8(void) = ConditionalBranch : r2834_7 +# 35| Block 938 +# 35| r35_13133(glval) = VariableAddress[x938] : +# 35| mu35_13134(String) = Uninitialized[x938] : &:r35_13133 +# 35| r35_13135(glval) = FunctionAddress[String] : +# 35| v35_13136(void) = Call[String] : func:r35_13135, this:r35_13133 +# 35| mu35_13137(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13133 +# 35| r35_13139(glval) = VariableAddress[x938] : +# 35| r35_13140(glval) = FunctionAddress[~String] : +# 35| v35_13141(void) = Call[~String] : func:r35_13140, this:r35_13139 +# 35| mu35_13142(unknown) = ^CallSideEffect : ~m? +# 35| v35_13143(void) = ^IndirectReadSideEffect[-1] : &:r35_13139, ~m? +# 35| mu35_13144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13139 +# 35| r35_13145(bool) = Constant[0] : +# 35| v35_13146(void) = ConditionalBranch : r35_13145 #-----| False -> Block 939 #-----| True -> Block 1026 -# 2836| Block 939 -# 2836| r2836_1(glval) = VariableAddress[x939] : -# 2836| mu2836_2(String) = Uninitialized[x939] : &:r2836_1 -# 2836| r2836_3(glval) = FunctionAddress[String] : -# 2836| v2836_4(void) = Call[String] : func:r2836_3, this:r2836_1 -# 2836| mu2836_5(unknown) = ^CallSideEffect : ~m? -# 2836| mu2836_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2836_1 -# 2837| r2837_1(glval) = VariableAddress[x939] : -# 2837| r2837_2(glval) = FunctionAddress[~String] : -# 2837| v2837_3(void) = Call[~String] : func:r2837_2, this:r2837_1 -# 2837| mu2837_4(unknown) = ^CallSideEffect : ~m? -# 2837| v2837_5(void) = ^IndirectReadSideEffect[-1] : &:r2837_1, ~m? -# 2837| mu2837_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2837_1 -# 2837| r2837_7(bool) = Constant[0] : -# 2837| v2837_8(void) = ConditionalBranch : r2837_7 +# 35| Block 939 +# 35| r35_13147(glval) = VariableAddress[x939] : +# 35| mu35_13148(String) = Uninitialized[x939] : &:r35_13147 +# 35| r35_13149(glval) = FunctionAddress[String] : +# 35| v35_13150(void) = Call[String] : func:r35_13149, this:r35_13147 +# 35| mu35_13151(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13147 +# 35| r35_13153(glval) = VariableAddress[x939] : +# 35| r35_13154(glval) = FunctionAddress[~String] : +# 35| v35_13155(void) = Call[~String] : func:r35_13154, this:r35_13153 +# 35| mu35_13156(unknown) = ^CallSideEffect : ~m? +# 35| v35_13157(void) = ^IndirectReadSideEffect[-1] : &:r35_13153, ~m? +# 35| mu35_13158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13153 +# 35| r35_13159(bool) = Constant[0] : +# 35| v35_13160(void) = ConditionalBranch : r35_13159 #-----| False -> Block 940 #-----| True -> Block 1026 -# 2839| Block 940 -# 2839| r2839_1(glval) = VariableAddress[x940] : -# 2839| mu2839_2(String) = Uninitialized[x940] : &:r2839_1 -# 2839| r2839_3(glval) = FunctionAddress[String] : -# 2839| v2839_4(void) = Call[String] : func:r2839_3, this:r2839_1 -# 2839| mu2839_5(unknown) = ^CallSideEffect : ~m? -# 2839| mu2839_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2839_1 -# 2840| r2840_1(glval) = VariableAddress[x940] : -# 2840| r2840_2(glval) = FunctionAddress[~String] : -# 2840| v2840_3(void) = Call[~String] : func:r2840_2, this:r2840_1 -# 2840| mu2840_4(unknown) = ^CallSideEffect : ~m? -# 2840| v2840_5(void) = ^IndirectReadSideEffect[-1] : &:r2840_1, ~m? -# 2840| mu2840_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2840_1 -# 2840| r2840_7(bool) = Constant[0] : -# 2840| v2840_8(void) = ConditionalBranch : r2840_7 +# 35| Block 940 +# 35| r35_13161(glval) = VariableAddress[x940] : +# 35| mu35_13162(String) = Uninitialized[x940] : &:r35_13161 +# 35| r35_13163(glval) = FunctionAddress[String] : +# 35| v35_13164(void) = Call[String] : func:r35_13163, this:r35_13161 +# 35| mu35_13165(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13161 +# 35| r35_13167(glval) = VariableAddress[x940] : +# 35| r35_13168(glval) = FunctionAddress[~String] : +# 35| v35_13169(void) = Call[~String] : func:r35_13168, this:r35_13167 +# 35| mu35_13170(unknown) = ^CallSideEffect : ~m? +# 35| v35_13171(void) = ^IndirectReadSideEffect[-1] : &:r35_13167, ~m? +# 35| mu35_13172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13167 +# 35| r35_13173(bool) = Constant[0] : +# 35| v35_13174(void) = ConditionalBranch : r35_13173 #-----| False -> Block 941 #-----| True -> Block 1026 -# 2842| Block 941 -# 2842| r2842_1(glval) = VariableAddress[x941] : -# 2842| mu2842_2(String) = Uninitialized[x941] : &:r2842_1 -# 2842| r2842_3(glval) = FunctionAddress[String] : -# 2842| v2842_4(void) = Call[String] : func:r2842_3, this:r2842_1 -# 2842| mu2842_5(unknown) = ^CallSideEffect : ~m? -# 2842| mu2842_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2842_1 -# 2843| r2843_1(glval) = VariableAddress[x941] : -# 2843| r2843_2(glval) = FunctionAddress[~String] : -# 2843| v2843_3(void) = Call[~String] : func:r2843_2, this:r2843_1 -# 2843| mu2843_4(unknown) = ^CallSideEffect : ~m? -# 2843| v2843_5(void) = ^IndirectReadSideEffect[-1] : &:r2843_1, ~m? -# 2843| mu2843_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2843_1 -# 2843| r2843_7(bool) = Constant[0] : -# 2843| v2843_8(void) = ConditionalBranch : r2843_7 +# 35| Block 941 +# 35| r35_13175(glval) = VariableAddress[x941] : +# 35| mu35_13176(String) = Uninitialized[x941] : &:r35_13175 +# 35| r35_13177(glval) = FunctionAddress[String] : +# 35| v35_13178(void) = Call[String] : func:r35_13177, this:r35_13175 +# 35| mu35_13179(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13175 +# 35| r35_13181(glval) = VariableAddress[x941] : +# 35| r35_13182(glval) = FunctionAddress[~String] : +# 35| v35_13183(void) = Call[~String] : func:r35_13182, this:r35_13181 +# 35| mu35_13184(unknown) = ^CallSideEffect : ~m? +# 35| v35_13185(void) = ^IndirectReadSideEffect[-1] : &:r35_13181, ~m? +# 35| mu35_13186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13181 +# 35| r35_13187(bool) = Constant[0] : +# 35| v35_13188(void) = ConditionalBranch : r35_13187 #-----| False -> Block 942 #-----| True -> Block 1026 -# 2845| Block 942 -# 2845| r2845_1(glval) = VariableAddress[x942] : -# 2845| mu2845_2(String) = Uninitialized[x942] : &:r2845_1 -# 2845| r2845_3(glval) = FunctionAddress[String] : -# 2845| v2845_4(void) = Call[String] : func:r2845_3, this:r2845_1 -# 2845| mu2845_5(unknown) = ^CallSideEffect : ~m? -# 2845| mu2845_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2845_1 -# 2846| r2846_1(glval) = VariableAddress[x942] : -# 2846| r2846_2(glval) = FunctionAddress[~String] : -# 2846| v2846_3(void) = Call[~String] : func:r2846_2, this:r2846_1 -# 2846| mu2846_4(unknown) = ^CallSideEffect : ~m? -# 2846| v2846_5(void) = ^IndirectReadSideEffect[-1] : &:r2846_1, ~m? -# 2846| mu2846_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2846_1 -# 2846| r2846_7(bool) = Constant[0] : -# 2846| v2846_8(void) = ConditionalBranch : r2846_7 +# 35| Block 942 +# 35| r35_13189(glval) = VariableAddress[x942] : +# 35| mu35_13190(String) = Uninitialized[x942] : &:r35_13189 +# 35| r35_13191(glval) = FunctionAddress[String] : +# 35| v35_13192(void) = Call[String] : func:r35_13191, this:r35_13189 +# 35| mu35_13193(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13189 +# 35| r35_13195(glval) = VariableAddress[x942] : +# 35| r35_13196(glval) = FunctionAddress[~String] : +# 35| v35_13197(void) = Call[~String] : func:r35_13196, this:r35_13195 +# 35| mu35_13198(unknown) = ^CallSideEffect : ~m? +# 35| v35_13199(void) = ^IndirectReadSideEffect[-1] : &:r35_13195, ~m? +# 35| mu35_13200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13195 +# 35| r35_13201(bool) = Constant[0] : +# 35| v35_13202(void) = ConditionalBranch : r35_13201 #-----| False -> Block 943 #-----| True -> Block 1026 -# 2848| Block 943 -# 2848| r2848_1(glval) = VariableAddress[x943] : -# 2848| mu2848_2(String) = Uninitialized[x943] : &:r2848_1 -# 2848| r2848_3(glval) = FunctionAddress[String] : -# 2848| v2848_4(void) = Call[String] : func:r2848_3, this:r2848_1 -# 2848| mu2848_5(unknown) = ^CallSideEffect : ~m? -# 2848| mu2848_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2848_1 -# 2849| r2849_1(glval) = VariableAddress[x943] : -# 2849| r2849_2(glval) = FunctionAddress[~String] : -# 2849| v2849_3(void) = Call[~String] : func:r2849_2, this:r2849_1 -# 2849| mu2849_4(unknown) = ^CallSideEffect : ~m? -# 2849| v2849_5(void) = ^IndirectReadSideEffect[-1] : &:r2849_1, ~m? -# 2849| mu2849_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2849_1 -# 2849| r2849_7(bool) = Constant[0] : -# 2849| v2849_8(void) = ConditionalBranch : r2849_7 +# 35| Block 943 +# 35| r35_13203(glval) = VariableAddress[x943] : +# 35| mu35_13204(String) = Uninitialized[x943] : &:r35_13203 +# 35| r35_13205(glval) = FunctionAddress[String] : +# 35| v35_13206(void) = Call[String] : func:r35_13205, this:r35_13203 +# 35| mu35_13207(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13203 +# 35| r35_13209(glval) = VariableAddress[x943] : +# 35| r35_13210(glval) = FunctionAddress[~String] : +# 35| v35_13211(void) = Call[~String] : func:r35_13210, this:r35_13209 +# 35| mu35_13212(unknown) = ^CallSideEffect : ~m? +# 35| v35_13213(void) = ^IndirectReadSideEffect[-1] : &:r35_13209, ~m? +# 35| mu35_13214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13209 +# 35| r35_13215(bool) = Constant[0] : +# 35| v35_13216(void) = ConditionalBranch : r35_13215 #-----| False -> Block 944 #-----| True -> Block 1026 -# 2851| Block 944 -# 2851| r2851_1(glval) = VariableAddress[x944] : -# 2851| mu2851_2(String) = Uninitialized[x944] : &:r2851_1 -# 2851| r2851_3(glval) = FunctionAddress[String] : -# 2851| v2851_4(void) = Call[String] : func:r2851_3, this:r2851_1 -# 2851| mu2851_5(unknown) = ^CallSideEffect : ~m? -# 2851| mu2851_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2851_1 -# 2852| r2852_1(glval) = VariableAddress[x944] : -# 2852| r2852_2(glval) = FunctionAddress[~String] : -# 2852| v2852_3(void) = Call[~String] : func:r2852_2, this:r2852_1 -# 2852| mu2852_4(unknown) = ^CallSideEffect : ~m? -# 2852| v2852_5(void) = ^IndirectReadSideEffect[-1] : &:r2852_1, ~m? -# 2852| mu2852_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2852_1 -# 2852| r2852_7(bool) = Constant[0] : -# 2852| v2852_8(void) = ConditionalBranch : r2852_7 +# 35| Block 944 +# 35| r35_13217(glval) = VariableAddress[x944] : +# 35| mu35_13218(String) = Uninitialized[x944] : &:r35_13217 +# 35| r35_13219(glval) = FunctionAddress[String] : +# 35| v35_13220(void) = Call[String] : func:r35_13219, this:r35_13217 +# 35| mu35_13221(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13217 +# 35| r35_13223(glval) = VariableAddress[x944] : +# 35| r35_13224(glval) = FunctionAddress[~String] : +# 35| v35_13225(void) = Call[~String] : func:r35_13224, this:r35_13223 +# 35| mu35_13226(unknown) = ^CallSideEffect : ~m? +# 35| v35_13227(void) = ^IndirectReadSideEffect[-1] : &:r35_13223, ~m? +# 35| mu35_13228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13223 +# 35| r35_13229(bool) = Constant[0] : +# 35| v35_13230(void) = ConditionalBranch : r35_13229 #-----| False -> Block 945 #-----| True -> Block 1026 -# 2854| Block 945 -# 2854| r2854_1(glval) = VariableAddress[x945] : -# 2854| mu2854_2(String) = Uninitialized[x945] : &:r2854_1 -# 2854| r2854_3(glval) = FunctionAddress[String] : -# 2854| v2854_4(void) = Call[String] : func:r2854_3, this:r2854_1 -# 2854| mu2854_5(unknown) = ^CallSideEffect : ~m? -# 2854| mu2854_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2854_1 -# 2855| r2855_1(glval) = VariableAddress[x945] : -# 2855| r2855_2(glval) = FunctionAddress[~String] : -# 2855| v2855_3(void) = Call[~String] : func:r2855_2, this:r2855_1 -# 2855| mu2855_4(unknown) = ^CallSideEffect : ~m? -# 2855| v2855_5(void) = ^IndirectReadSideEffect[-1] : &:r2855_1, ~m? -# 2855| mu2855_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2855_1 -# 2855| r2855_7(bool) = Constant[0] : -# 2855| v2855_8(void) = ConditionalBranch : r2855_7 +# 35| Block 945 +# 35| r35_13231(glval) = VariableAddress[x945] : +# 35| mu35_13232(String) = Uninitialized[x945] : &:r35_13231 +# 35| r35_13233(glval) = FunctionAddress[String] : +# 35| v35_13234(void) = Call[String] : func:r35_13233, this:r35_13231 +# 35| mu35_13235(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13231 +# 35| r35_13237(glval) = VariableAddress[x945] : +# 35| r35_13238(glval) = FunctionAddress[~String] : +# 35| v35_13239(void) = Call[~String] : func:r35_13238, this:r35_13237 +# 35| mu35_13240(unknown) = ^CallSideEffect : ~m? +# 35| v35_13241(void) = ^IndirectReadSideEffect[-1] : &:r35_13237, ~m? +# 35| mu35_13242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13237 +# 35| r35_13243(bool) = Constant[0] : +# 35| v35_13244(void) = ConditionalBranch : r35_13243 #-----| False -> Block 946 #-----| True -> Block 1026 -# 2857| Block 946 -# 2857| r2857_1(glval) = VariableAddress[x946] : -# 2857| mu2857_2(String) = Uninitialized[x946] : &:r2857_1 -# 2857| r2857_3(glval) = FunctionAddress[String] : -# 2857| v2857_4(void) = Call[String] : func:r2857_3, this:r2857_1 -# 2857| mu2857_5(unknown) = ^CallSideEffect : ~m? -# 2857| mu2857_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2857_1 -# 2858| r2858_1(glval) = VariableAddress[x946] : -# 2858| r2858_2(glval) = FunctionAddress[~String] : -# 2858| v2858_3(void) = Call[~String] : func:r2858_2, this:r2858_1 -# 2858| mu2858_4(unknown) = ^CallSideEffect : ~m? -# 2858| v2858_5(void) = ^IndirectReadSideEffect[-1] : &:r2858_1, ~m? -# 2858| mu2858_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2858_1 -# 2858| r2858_7(bool) = Constant[0] : -# 2858| v2858_8(void) = ConditionalBranch : r2858_7 +# 35| Block 946 +# 35| r35_13245(glval) = VariableAddress[x946] : +# 35| mu35_13246(String) = Uninitialized[x946] : &:r35_13245 +# 35| r35_13247(glval) = FunctionAddress[String] : +# 35| v35_13248(void) = Call[String] : func:r35_13247, this:r35_13245 +# 35| mu35_13249(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13245 +# 35| r35_13251(glval) = VariableAddress[x946] : +# 35| r35_13252(glval) = FunctionAddress[~String] : +# 35| v35_13253(void) = Call[~String] : func:r35_13252, this:r35_13251 +# 35| mu35_13254(unknown) = ^CallSideEffect : ~m? +# 35| v35_13255(void) = ^IndirectReadSideEffect[-1] : &:r35_13251, ~m? +# 35| mu35_13256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13251 +# 35| r35_13257(bool) = Constant[0] : +# 35| v35_13258(void) = ConditionalBranch : r35_13257 #-----| False -> Block 947 #-----| True -> Block 1026 -# 2860| Block 947 -# 2860| r2860_1(glval) = VariableAddress[x947] : -# 2860| mu2860_2(String) = Uninitialized[x947] : &:r2860_1 -# 2860| r2860_3(glval) = FunctionAddress[String] : -# 2860| v2860_4(void) = Call[String] : func:r2860_3, this:r2860_1 -# 2860| mu2860_5(unknown) = ^CallSideEffect : ~m? -# 2860| mu2860_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2860_1 -# 2861| r2861_1(glval) = VariableAddress[x947] : -# 2861| r2861_2(glval) = FunctionAddress[~String] : -# 2861| v2861_3(void) = Call[~String] : func:r2861_2, this:r2861_1 -# 2861| mu2861_4(unknown) = ^CallSideEffect : ~m? -# 2861| v2861_5(void) = ^IndirectReadSideEffect[-1] : &:r2861_1, ~m? -# 2861| mu2861_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2861_1 -# 2861| r2861_7(bool) = Constant[0] : -# 2861| v2861_8(void) = ConditionalBranch : r2861_7 +# 35| Block 947 +# 35| r35_13259(glval) = VariableAddress[x947] : +# 35| mu35_13260(String) = Uninitialized[x947] : &:r35_13259 +# 35| r35_13261(glval) = FunctionAddress[String] : +# 35| v35_13262(void) = Call[String] : func:r35_13261, this:r35_13259 +# 35| mu35_13263(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13259 +# 35| r35_13265(glval) = VariableAddress[x947] : +# 35| r35_13266(glval) = FunctionAddress[~String] : +# 35| v35_13267(void) = Call[~String] : func:r35_13266, this:r35_13265 +# 35| mu35_13268(unknown) = ^CallSideEffect : ~m? +# 35| v35_13269(void) = ^IndirectReadSideEffect[-1] : &:r35_13265, ~m? +# 35| mu35_13270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13265 +# 35| r35_13271(bool) = Constant[0] : +# 35| v35_13272(void) = ConditionalBranch : r35_13271 #-----| False -> Block 948 #-----| True -> Block 1026 -# 2863| Block 948 -# 2863| r2863_1(glval) = VariableAddress[x948] : -# 2863| mu2863_2(String) = Uninitialized[x948] : &:r2863_1 -# 2863| r2863_3(glval) = FunctionAddress[String] : -# 2863| v2863_4(void) = Call[String] : func:r2863_3, this:r2863_1 -# 2863| mu2863_5(unknown) = ^CallSideEffect : ~m? -# 2863| mu2863_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2863_1 -# 2864| r2864_1(glval) = VariableAddress[x948] : -# 2864| r2864_2(glval) = FunctionAddress[~String] : -# 2864| v2864_3(void) = Call[~String] : func:r2864_2, this:r2864_1 -# 2864| mu2864_4(unknown) = ^CallSideEffect : ~m? -# 2864| v2864_5(void) = ^IndirectReadSideEffect[-1] : &:r2864_1, ~m? -# 2864| mu2864_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2864_1 -# 2864| r2864_7(bool) = Constant[0] : -# 2864| v2864_8(void) = ConditionalBranch : r2864_7 +# 35| Block 948 +# 35| r35_13273(glval) = VariableAddress[x948] : +# 35| mu35_13274(String) = Uninitialized[x948] : &:r35_13273 +# 35| r35_13275(glval) = FunctionAddress[String] : +# 35| v35_13276(void) = Call[String] : func:r35_13275, this:r35_13273 +# 35| mu35_13277(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13273 +# 35| r35_13279(glval) = VariableAddress[x948] : +# 35| r35_13280(glval) = FunctionAddress[~String] : +# 35| v35_13281(void) = Call[~String] : func:r35_13280, this:r35_13279 +# 35| mu35_13282(unknown) = ^CallSideEffect : ~m? +# 35| v35_13283(void) = ^IndirectReadSideEffect[-1] : &:r35_13279, ~m? +# 35| mu35_13284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13279 +# 35| r35_13285(bool) = Constant[0] : +# 35| v35_13286(void) = ConditionalBranch : r35_13285 #-----| False -> Block 949 #-----| True -> Block 1026 -# 2866| Block 949 -# 2866| r2866_1(glval) = VariableAddress[x949] : -# 2866| mu2866_2(String) = Uninitialized[x949] : &:r2866_1 -# 2866| r2866_3(glval) = FunctionAddress[String] : -# 2866| v2866_4(void) = Call[String] : func:r2866_3, this:r2866_1 -# 2866| mu2866_5(unknown) = ^CallSideEffect : ~m? -# 2866| mu2866_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2866_1 -# 2867| r2867_1(glval) = VariableAddress[x949] : -# 2867| r2867_2(glval) = FunctionAddress[~String] : -# 2867| v2867_3(void) = Call[~String] : func:r2867_2, this:r2867_1 -# 2867| mu2867_4(unknown) = ^CallSideEffect : ~m? -# 2867| v2867_5(void) = ^IndirectReadSideEffect[-1] : &:r2867_1, ~m? -# 2867| mu2867_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2867_1 -# 2867| r2867_7(bool) = Constant[0] : -# 2867| v2867_8(void) = ConditionalBranch : r2867_7 +# 35| Block 949 +# 35| r35_13287(glval) = VariableAddress[x949] : +# 35| mu35_13288(String) = Uninitialized[x949] : &:r35_13287 +# 35| r35_13289(glval) = FunctionAddress[String] : +# 35| v35_13290(void) = Call[String] : func:r35_13289, this:r35_13287 +# 35| mu35_13291(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13287 +# 35| r35_13293(glval) = VariableAddress[x949] : +# 35| r35_13294(glval) = FunctionAddress[~String] : +# 35| v35_13295(void) = Call[~String] : func:r35_13294, this:r35_13293 +# 35| mu35_13296(unknown) = ^CallSideEffect : ~m? +# 35| v35_13297(void) = ^IndirectReadSideEffect[-1] : &:r35_13293, ~m? +# 35| mu35_13298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13293 +# 35| r35_13299(bool) = Constant[0] : +# 35| v35_13300(void) = ConditionalBranch : r35_13299 #-----| False -> Block 950 #-----| True -> Block 1026 -# 2869| Block 950 -# 2869| r2869_1(glval) = VariableAddress[x950] : -# 2869| mu2869_2(String) = Uninitialized[x950] : &:r2869_1 -# 2869| r2869_3(glval) = FunctionAddress[String] : -# 2869| v2869_4(void) = Call[String] : func:r2869_3, this:r2869_1 -# 2869| mu2869_5(unknown) = ^CallSideEffect : ~m? -# 2869| mu2869_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2869_1 -# 2870| r2870_1(glval) = VariableAddress[x950] : -# 2870| r2870_2(glval) = FunctionAddress[~String] : -# 2870| v2870_3(void) = Call[~String] : func:r2870_2, this:r2870_1 -# 2870| mu2870_4(unknown) = ^CallSideEffect : ~m? -# 2870| v2870_5(void) = ^IndirectReadSideEffect[-1] : &:r2870_1, ~m? -# 2870| mu2870_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2870_1 -# 2870| r2870_7(bool) = Constant[0] : -# 2870| v2870_8(void) = ConditionalBranch : r2870_7 +# 35| Block 950 +# 35| r35_13301(glval) = VariableAddress[x950] : +# 35| mu35_13302(String) = Uninitialized[x950] : &:r35_13301 +# 35| r35_13303(glval) = FunctionAddress[String] : +# 35| v35_13304(void) = Call[String] : func:r35_13303, this:r35_13301 +# 35| mu35_13305(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13301 +# 35| r35_13307(glval) = VariableAddress[x950] : +# 35| r35_13308(glval) = FunctionAddress[~String] : +# 35| v35_13309(void) = Call[~String] : func:r35_13308, this:r35_13307 +# 35| mu35_13310(unknown) = ^CallSideEffect : ~m? +# 35| v35_13311(void) = ^IndirectReadSideEffect[-1] : &:r35_13307, ~m? +# 35| mu35_13312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13307 +# 35| r35_13313(bool) = Constant[0] : +# 35| v35_13314(void) = ConditionalBranch : r35_13313 #-----| False -> Block 951 #-----| True -> Block 1026 -# 2872| Block 951 -# 2872| r2872_1(glval) = VariableAddress[x951] : -# 2872| mu2872_2(String) = Uninitialized[x951] : &:r2872_1 -# 2872| r2872_3(glval) = FunctionAddress[String] : -# 2872| v2872_4(void) = Call[String] : func:r2872_3, this:r2872_1 -# 2872| mu2872_5(unknown) = ^CallSideEffect : ~m? -# 2872| mu2872_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2872_1 -# 2873| r2873_1(glval) = VariableAddress[x951] : -# 2873| r2873_2(glval) = FunctionAddress[~String] : -# 2873| v2873_3(void) = Call[~String] : func:r2873_2, this:r2873_1 -# 2873| mu2873_4(unknown) = ^CallSideEffect : ~m? -# 2873| v2873_5(void) = ^IndirectReadSideEffect[-1] : &:r2873_1, ~m? -# 2873| mu2873_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2873_1 -# 2873| r2873_7(bool) = Constant[0] : -# 2873| v2873_8(void) = ConditionalBranch : r2873_7 +# 35| Block 951 +# 35| r35_13315(glval) = VariableAddress[x951] : +# 35| mu35_13316(String) = Uninitialized[x951] : &:r35_13315 +# 35| r35_13317(glval) = FunctionAddress[String] : +# 35| v35_13318(void) = Call[String] : func:r35_13317, this:r35_13315 +# 35| mu35_13319(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13315 +# 35| r35_13321(glval) = VariableAddress[x951] : +# 35| r35_13322(glval) = FunctionAddress[~String] : +# 35| v35_13323(void) = Call[~String] : func:r35_13322, this:r35_13321 +# 35| mu35_13324(unknown) = ^CallSideEffect : ~m? +# 35| v35_13325(void) = ^IndirectReadSideEffect[-1] : &:r35_13321, ~m? +# 35| mu35_13326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13321 +# 35| r35_13327(bool) = Constant[0] : +# 35| v35_13328(void) = ConditionalBranch : r35_13327 #-----| False -> Block 952 #-----| True -> Block 1026 -# 2875| Block 952 -# 2875| r2875_1(glval) = VariableAddress[x952] : -# 2875| mu2875_2(String) = Uninitialized[x952] : &:r2875_1 -# 2875| r2875_3(glval) = FunctionAddress[String] : -# 2875| v2875_4(void) = Call[String] : func:r2875_3, this:r2875_1 -# 2875| mu2875_5(unknown) = ^CallSideEffect : ~m? -# 2875| mu2875_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2875_1 -# 2876| r2876_1(glval) = VariableAddress[x952] : -# 2876| r2876_2(glval) = FunctionAddress[~String] : -# 2876| v2876_3(void) = Call[~String] : func:r2876_2, this:r2876_1 -# 2876| mu2876_4(unknown) = ^CallSideEffect : ~m? -# 2876| v2876_5(void) = ^IndirectReadSideEffect[-1] : &:r2876_1, ~m? -# 2876| mu2876_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2876_1 -# 2876| r2876_7(bool) = Constant[0] : -# 2876| v2876_8(void) = ConditionalBranch : r2876_7 +# 35| Block 952 +# 35| r35_13329(glval) = VariableAddress[x952] : +# 35| mu35_13330(String) = Uninitialized[x952] : &:r35_13329 +# 35| r35_13331(glval) = FunctionAddress[String] : +# 35| v35_13332(void) = Call[String] : func:r35_13331, this:r35_13329 +# 35| mu35_13333(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13329 +# 35| r35_13335(glval) = VariableAddress[x952] : +# 35| r35_13336(glval) = FunctionAddress[~String] : +# 35| v35_13337(void) = Call[~String] : func:r35_13336, this:r35_13335 +# 35| mu35_13338(unknown) = ^CallSideEffect : ~m? +# 35| v35_13339(void) = ^IndirectReadSideEffect[-1] : &:r35_13335, ~m? +# 35| mu35_13340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13335 +# 35| r35_13341(bool) = Constant[0] : +# 35| v35_13342(void) = ConditionalBranch : r35_13341 #-----| False -> Block 953 #-----| True -> Block 1026 -# 2878| Block 953 -# 2878| r2878_1(glval) = VariableAddress[x953] : -# 2878| mu2878_2(String) = Uninitialized[x953] : &:r2878_1 -# 2878| r2878_3(glval) = FunctionAddress[String] : -# 2878| v2878_4(void) = Call[String] : func:r2878_3, this:r2878_1 -# 2878| mu2878_5(unknown) = ^CallSideEffect : ~m? -# 2878| mu2878_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2878_1 -# 2879| r2879_1(glval) = VariableAddress[x953] : -# 2879| r2879_2(glval) = FunctionAddress[~String] : -# 2879| v2879_3(void) = Call[~String] : func:r2879_2, this:r2879_1 -# 2879| mu2879_4(unknown) = ^CallSideEffect : ~m? -# 2879| v2879_5(void) = ^IndirectReadSideEffect[-1] : &:r2879_1, ~m? -# 2879| mu2879_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2879_1 -# 2879| r2879_7(bool) = Constant[0] : -# 2879| v2879_8(void) = ConditionalBranch : r2879_7 +# 35| Block 953 +# 35| r35_13343(glval) = VariableAddress[x953] : +# 35| mu35_13344(String) = Uninitialized[x953] : &:r35_13343 +# 35| r35_13345(glval) = FunctionAddress[String] : +# 35| v35_13346(void) = Call[String] : func:r35_13345, this:r35_13343 +# 35| mu35_13347(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13343 +# 35| r35_13349(glval) = VariableAddress[x953] : +# 35| r35_13350(glval) = FunctionAddress[~String] : +# 35| v35_13351(void) = Call[~String] : func:r35_13350, this:r35_13349 +# 35| mu35_13352(unknown) = ^CallSideEffect : ~m? +# 35| v35_13353(void) = ^IndirectReadSideEffect[-1] : &:r35_13349, ~m? +# 35| mu35_13354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13349 +# 35| r35_13355(bool) = Constant[0] : +# 35| v35_13356(void) = ConditionalBranch : r35_13355 #-----| False -> Block 954 #-----| True -> Block 1026 -# 2881| Block 954 -# 2881| r2881_1(glval) = VariableAddress[x954] : -# 2881| mu2881_2(String) = Uninitialized[x954] : &:r2881_1 -# 2881| r2881_3(glval) = FunctionAddress[String] : -# 2881| v2881_4(void) = Call[String] : func:r2881_3, this:r2881_1 -# 2881| mu2881_5(unknown) = ^CallSideEffect : ~m? -# 2881| mu2881_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2881_1 -# 2882| r2882_1(glval) = VariableAddress[x954] : -# 2882| r2882_2(glval) = FunctionAddress[~String] : -# 2882| v2882_3(void) = Call[~String] : func:r2882_2, this:r2882_1 -# 2882| mu2882_4(unknown) = ^CallSideEffect : ~m? -# 2882| v2882_5(void) = ^IndirectReadSideEffect[-1] : &:r2882_1, ~m? -# 2882| mu2882_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2882_1 -# 2882| r2882_7(bool) = Constant[0] : -# 2882| v2882_8(void) = ConditionalBranch : r2882_7 +# 35| Block 954 +# 35| r35_13357(glval) = VariableAddress[x954] : +# 35| mu35_13358(String) = Uninitialized[x954] : &:r35_13357 +# 35| r35_13359(glval) = FunctionAddress[String] : +# 35| v35_13360(void) = Call[String] : func:r35_13359, this:r35_13357 +# 35| mu35_13361(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13357 +# 35| r35_13363(glval) = VariableAddress[x954] : +# 35| r35_13364(glval) = FunctionAddress[~String] : +# 35| v35_13365(void) = Call[~String] : func:r35_13364, this:r35_13363 +# 35| mu35_13366(unknown) = ^CallSideEffect : ~m? +# 35| v35_13367(void) = ^IndirectReadSideEffect[-1] : &:r35_13363, ~m? +# 35| mu35_13368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13363 +# 35| r35_13369(bool) = Constant[0] : +# 35| v35_13370(void) = ConditionalBranch : r35_13369 #-----| False -> Block 955 #-----| True -> Block 1026 -# 2884| Block 955 -# 2884| r2884_1(glval) = VariableAddress[x955] : -# 2884| mu2884_2(String) = Uninitialized[x955] : &:r2884_1 -# 2884| r2884_3(glval) = FunctionAddress[String] : -# 2884| v2884_4(void) = Call[String] : func:r2884_3, this:r2884_1 -# 2884| mu2884_5(unknown) = ^CallSideEffect : ~m? -# 2884| mu2884_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2884_1 -# 2885| r2885_1(glval) = VariableAddress[x955] : -# 2885| r2885_2(glval) = FunctionAddress[~String] : -# 2885| v2885_3(void) = Call[~String] : func:r2885_2, this:r2885_1 -# 2885| mu2885_4(unknown) = ^CallSideEffect : ~m? -# 2885| v2885_5(void) = ^IndirectReadSideEffect[-1] : &:r2885_1, ~m? -# 2885| mu2885_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2885_1 -# 2885| r2885_7(bool) = Constant[0] : -# 2885| v2885_8(void) = ConditionalBranch : r2885_7 +# 35| Block 955 +# 35| r35_13371(glval) = VariableAddress[x955] : +# 35| mu35_13372(String) = Uninitialized[x955] : &:r35_13371 +# 35| r35_13373(glval) = FunctionAddress[String] : +# 35| v35_13374(void) = Call[String] : func:r35_13373, this:r35_13371 +# 35| mu35_13375(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13371 +# 35| r35_13377(glval) = VariableAddress[x955] : +# 35| r35_13378(glval) = FunctionAddress[~String] : +# 35| v35_13379(void) = Call[~String] : func:r35_13378, this:r35_13377 +# 35| mu35_13380(unknown) = ^CallSideEffect : ~m? +# 35| v35_13381(void) = ^IndirectReadSideEffect[-1] : &:r35_13377, ~m? +# 35| mu35_13382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13377 +# 35| r35_13383(bool) = Constant[0] : +# 35| v35_13384(void) = ConditionalBranch : r35_13383 #-----| False -> Block 956 #-----| True -> Block 1026 -# 2887| Block 956 -# 2887| r2887_1(glval) = VariableAddress[x956] : -# 2887| mu2887_2(String) = Uninitialized[x956] : &:r2887_1 -# 2887| r2887_3(glval) = FunctionAddress[String] : -# 2887| v2887_4(void) = Call[String] : func:r2887_3, this:r2887_1 -# 2887| mu2887_5(unknown) = ^CallSideEffect : ~m? -# 2887| mu2887_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2887_1 -# 2888| r2888_1(glval) = VariableAddress[x956] : -# 2888| r2888_2(glval) = FunctionAddress[~String] : -# 2888| v2888_3(void) = Call[~String] : func:r2888_2, this:r2888_1 -# 2888| mu2888_4(unknown) = ^CallSideEffect : ~m? -# 2888| v2888_5(void) = ^IndirectReadSideEffect[-1] : &:r2888_1, ~m? -# 2888| mu2888_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2888_1 -# 2888| r2888_7(bool) = Constant[0] : -# 2888| v2888_8(void) = ConditionalBranch : r2888_7 +# 35| Block 956 +# 35| r35_13385(glval) = VariableAddress[x956] : +# 35| mu35_13386(String) = Uninitialized[x956] : &:r35_13385 +# 35| r35_13387(glval) = FunctionAddress[String] : +# 35| v35_13388(void) = Call[String] : func:r35_13387, this:r35_13385 +# 35| mu35_13389(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13385 +# 35| r35_13391(glval) = VariableAddress[x956] : +# 35| r35_13392(glval) = FunctionAddress[~String] : +# 35| v35_13393(void) = Call[~String] : func:r35_13392, this:r35_13391 +# 35| mu35_13394(unknown) = ^CallSideEffect : ~m? +# 35| v35_13395(void) = ^IndirectReadSideEffect[-1] : &:r35_13391, ~m? +# 35| mu35_13396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13391 +# 35| r35_13397(bool) = Constant[0] : +# 35| v35_13398(void) = ConditionalBranch : r35_13397 #-----| False -> Block 957 #-----| True -> Block 1026 -# 2890| Block 957 -# 2890| r2890_1(glval) = VariableAddress[x957] : -# 2890| mu2890_2(String) = Uninitialized[x957] : &:r2890_1 -# 2890| r2890_3(glval) = FunctionAddress[String] : -# 2890| v2890_4(void) = Call[String] : func:r2890_3, this:r2890_1 -# 2890| mu2890_5(unknown) = ^CallSideEffect : ~m? -# 2890| mu2890_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2890_1 -# 2891| r2891_1(glval) = VariableAddress[x957] : -# 2891| r2891_2(glval) = FunctionAddress[~String] : -# 2891| v2891_3(void) = Call[~String] : func:r2891_2, this:r2891_1 -# 2891| mu2891_4(unknown) = ^CallSideEffect : ~m? -# 2891| v2891_5(void) = ^IndirectReadSideEffect[-1] : &:r2891_1, ~m? -# 2891| mu2891_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2891_1 -# 2891| r2891_7(bool) = Constant[0] : -# 2891| v2891_8(void) = ConditionalBranch : r2891_7 +# 35| Block 957 +# 35| r35_13399(glval) = VariableAddress[x957] : +# 35| mu35_13400(String) = Uninitialized[x957] : &:r35_13399 +# 35| r35_13401(glval) = FunctionAddress[String] : +# 35| v35_13402(void) = Call[String] : func:r35_13401, this:r35_13399 +# 35| mu35_13403(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13399 +# 35| r35_13405(glval) = VariableAddress[x957] : +# 35| r35_13406(glval) = FunctionAddress[~String] : +# 35| v35_13407(void) = Call[~String] : func:r35_13406, this:r35_13405 +# 35| mu35_13408(unknown) = ^CallSideEffect : ~m? +# 35| v35_13409(void) = ^IndirectReadSideEffect[-1] : &:r35_13405, ~m? +# 35| mu35_13410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13405 +# 35| r35_13411(bool) = Constant[0] : +# 35| v35_13412(void) = ConditionalBranch : r35_13411 #-----| False -> Block 958 #-----| True -> Block 1026 -# 2893| Block 958 -# 2893| r2893_1(glval) = VariableAddress[x958] : -# 2893| mu2893_2(String) = Uninitialized[x958] : &:r2893_1 -# 2893| r2893_3(glval) = FunctionAddress[String] : -# 2893| v2893_4(void) = Call[String] : func:r2893_3, this:r2893_1 -# 2893| mu2893_5(unknown) = ^CallSideEffect : ~m? -# 2893| mu2893_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2893_1 -# 2894| r2894_1(glval) = VariableAddress[x958] : -# 2894| r2894_2(glval) = FunctionAddress[~String] : -# 2894| v2894_3(void) = Call[~String] : func:r2894_2, this:r2894_1 -# 2894| mu2894_4(unknown) = ^CallSideEffect : ~m? -# 2894| v2894_5(void) = ^IndirectReadSideEffect[-1] : &:r2894_1, ~m? -# 2894| mu2894_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2894_1 -# 2894| r2894_7(bool) = Constant[0] : -# 2894| v2894_8(void) = ConditionalBranch : r2894_7 +# 35| Block 958 +# 35| r35_13413(glval) = VariableAddress[x958] : +# 35| mu35_13414(String) = Uninitialized[x958] : &:r35_13413 +# 35| r35_13415(glval) = FunctionAddress[String] : +# 35| v35_13416(void) = Call[String] : func:r35_13415, this:r35_13413 +# 35| mu35_13417(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13413 +# 35| r35_13419(glval) = VariableAddress[x958] : +# 35| r35_13420(glval) = FunctionAddress[~String] : +# 35| v35_13421(void) = Call[~String] : func:r35_13420, this:r35_13419 +# 35| mu35_13422(unknown) = ^CallSideEffect : ~m? +# 35| v35_13423(void) = ^IndirectReadSideEffect[-1] : &:r35_13419, ~m? +# 35| mu35_13424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13419 +# 35| r35_13425(bool) = Constant[0] : +# 35| v35_13426(void) = ConditionalBranch : r35_13425 #-----| False -> Block 959 #-----| True -> Block 1026 -# 2896| Block 959 -# 2896| r2896_1(glval) = VariableAddress[x959] : -# 2896| mu2896_2(String) = Uninitialized[x959] : &:r2896_1 -# 2896| r2896_3(glval) = FunctionAddress[String] : -# 2896| v2896_4(void) = Call[String] : func:r2896_3, this:r2896_1 -# 2896| mu2896_5(unknown) = ^CallSideEffect : ~m? -# 2896| mu2896_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2896_1 -# 2897| r2897_1(glval) = VariableAddress[x959] : -# 2897| r2897_2(glval) = FunctionAddress[~String] : -# 2897| v2897_3(void) = Call[~String] : func:r2897_2, this:r2897_1 -# 2897| mu2897_4(unknown) = ^CallSideEffect : ~m? -# 2897| v2897_5(void) = ^IndirectReadSideEffect[-1] : &:r2897_1, ~m? -# 2897| mu2897_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2897_1 -# 2897| r2897_7(bool) = Constant[0] : -# 2897| v2897_8(void) = ConditionalBranch : r2897_7 +# 35| Block 959 +# 35| r35_13427(glval) = VariableAddress[x959] : +# 35| mu35_13428(String) = Uninitialized[x959] : &:r35_13427 +# 35| r35_13429(glval) = FunctionAddress[String] : +# 35| v35_13430(void) = Call[String] : func:r35_13429, this:r35_13427 +# 35| mu35_13431(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13427 +# 35| r35_13433(glval) = VariableAddress[x959] : +# 35| r35_13434(glval) = FunctionAddress[~String] : +# 35| v35_13435(void) = Call[~String] : func:r35_13434, this:r35_13433 +# 35| mu35_13436(unknown) = ^CallSideEffect : ~m? +# 35| v35_13437(void) = ^IndirectReadSideEffect[-1] : &:r35_13433, ~m? +# 35| mu35_13438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13433 +# 35| r35_13439(bool) = Constant[0] : +# 35| v35_13440(void) = ConditionalBranch : r35_13439 #-----| False -> Block 960 #-----| True -> Block 1026 -# 2899| Block 960 -# 2899| r2899_1(glval) = VariableAddress[x960] : -# 2899| mu2899_2(String) = Uninitialized[x960] : &:r2899_1 -# 2899| r2899_3(glval) = FunctionAddress[String] : -# 2899| v2899_4(void) = Call[String] : func:r2899_3, this:r2899_1 -# 2899| mu2899_5(unknown) = ^CallSideEffect : ~m? -# 2899| mu2899_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2899_1 -# 2900| r2900_1(glval) = VariableAddress[x960] : -# 2900| r2900_2(glval) = FunctionAddress[~String] : -# 2900| v2900_3(void) = Call[~String] : func:r2900_2, this:r2900_1 -# 2900| mu2900_4(unknown) = ^CallSideEffect : ~m? -# 2900| v2900_5(void) = ^IndirectReadSideEffect[-1] : &:r2900_1, ~m? -# 2900| mu2900_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2900_1 -# 2900| r2900_7(bool) = Constant[0] : -# 2900| v2900_8(void) = ConditionalBranch : r2900_7 +# 35| Block 960 +# 35| r35_13441(glval) = VariableAddress[x960] : +# 35| mu35_13442(String) = Uninitialized[x960] : &:r35_13441 +# 35| r35_13443(glval) = FunctionAddress[String] : +# 35| v35_13444(void) = Call[String] : func:r35_13443, this:r35_13441 +# 35| mu35_13445(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13441 +# 35| r35_13447(glval) = VariableAddress[x960] : +# 35| r35_13448(glval) = FunctionAddress[~String] : +# 35| v35_13449(void) = Call[~String] : func:r35_13448, this:r35_13447 +# 35| mu35_13450(unknown) = ^CallSideEffect : ~m? +# 35| v35_13451(void) = ^IndirectReadSideEffect[-1] : &:r35_13447, ~m? +# 35| mu35_13452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13447 +# 35| r35_13453(bool) = Constant[0] : +# 35| v35_13454(void) = ConditionalBranch : r35_13453 #-----| False -> Block 961 #-----| True -> Block 1026 -# 2902| Block 961 -# 2902| r2902_1(glval) = VariableAddress[x961] : -# 2902| mu2902_2(String) = Uninitialized[x961] : &:r2902_1 -# 2902| r2902_3(glval) = FunctionAddress[String] : -# 2902| v2902_4(void) = Call[String] : func:r2902_3, this:r2902_1 -# 2902| mu2902_5(unknown) = ^CallSideEffect : ~m? -# 2902| mu2902_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2902_1 -# 2903| r2903_1(glval) = VariableAddress[x961] : -# 2903| r2903_2(glval) = FunctionAddress[~String] : -# 2903| v2903_3(void) = Call[~String] : func:r2903_2, this:r2903_1 -# 2903| mu2903_4(unknown) = ^CallSideEffect : ~m? -# 2903| v2903_5(void) = ^IndirectReadSideEffect[-1] : &:r2903_1, ~m? -# 2903| mu2903_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2903_1 -# 2903| r2903_7(bool) = Constant[0] : -# 2903| v2903_8(void) = ConditionalBranch : r2903_7 +# 35| Block 961 +# 35| r35_13455(glval) = VariableAddress[x961] : +# 35| mu35_13456(String) = Uninitialized[x961] : &:r35_13455 +# 35| r35_13457(glval) = FunctionAddress[String] : +# 35| v35_13458(void) = Call[String] : func:r35_13457, this:r35_13455 +# 35| mu35_13459(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13455 +# 35| r35_13461(glval) = VariableAddress[x961] : +# 35| r35_13462(glval) = FunctionAddress[~String] : +# 35| v35_13463(void) = Call[~String] : func:r35_13462, this:r35_13461 +# 35| mu35_13464(unknown) = ^CallSideEffect : ~m? +# 35| v35_13465(void) = ^IndirectReadSideEffect[-1] : &:r35_13461, ~m? +# 35| mu35_13466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13461 +# 35| r35_13467(bool) = Constant[0] : +# 35| v35_13468(void) = ConditionalBranch : r35_13467 #-----| False -> Block 962 #-----| True -> Block 1026 -# 2905| Block 962 -# 2905| r2905_1(glval) = VariableAddress[x962] : -# 2905| mu2905_2(String) = Uninitialized[x962] : &:r2905_1 -# 2905| r2905_3(glval) = FunctionAddress[String] : -# 2905| v2905_4(void) = Call[String] : func:r2905_3, this:r2905_1 -# 2905| mu2905_5(unknown) = ^CallSideEffect : ~m? -# 2905| mu2905_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2905_1 -# 2906| r2906_1(glval) = VariableAddress[x962] : -# 2906| r2906_2(glval) = FunctionAddress[~String] : -# 2906| v2906_3(void) = Call[~String] : func:r2906_2, this:r2906_1 -# 2906| mu2906_4(unknown) = ^CallSideEffect : ~m? -# 2906| v2906_5(void) = ^IndirectReadSideEffect[-1] : &:r2906_1, ~m? -# 2906| mu2906_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2906_1 -# 2906| r2906_7(bool) = Constant[0] : -# 2906| v2906_8(void) = ConditionalBranch : r2906_7 +# 35| Block 962 +# 35| r35_13469(glval) = VariableAddress[x962] : +# 35| mu35_13470(String) = Uninitialized[x962] : &:r35_13469 +# 35| r35_13471(glval) = FunctionAddress[String] : +# 35| v35_13472(void) = Call[String] : func:r35_13471, this:r35_13469 +# 35| mu35_13473(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13469 +# 35| r35_13475(glval) = VariableAddress[x962] : +# 35| r35_13476(glval) = FunctionAddress[~String] : +# 35| v35_13477(void) = Call[~String] : func:r35_13476, this:r35_13475 +# 35| mu35_13478(unknown) = ^CallSideEffect : ~m? +# 35| v35_13479(void) = ^IndirectReadSideEffect[-1] : &:r35_13475, ~m? +# 35| mu35_13480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13475 +# 35| r35_13481(bool) = Constant[0] : +# 35| v35_13482(void) = ConditionalBranch : r35_13481 #-----| False -> Block 963 #-----| True -> Block 1026 -# 2908| Block 963 -# 2908| r2908_1(glval) = VariableAddress[x963] : -# 2908| mu2908_2(String) = Uninitialized[x963] : &:r2908_1 -# 2908| r2908_3(glval) = FunctionAddress[String] : -# 2908| v2908_4(void) = Call[String] : func:r2908_3, this:r2908_1 -# 2908| mu2908_5(unknown) = ^CallSideEffect : ~m? -# 2908| mu2908_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2908_1 -# 2909| r2909_1(glval) = VariableAddress[x963] : -# 2909| r2909_2(glval) = FunctionAddress[~String] : -# 2909| v2909_3(void) = Call[~String] : func:r2909_2, this:r2909_1 -# 2909| mu2909_4(unknown) = ^CallSideEffect : ~m? -# 2909| v2909_5(void) = ^IndirectReadSideEffect[-1] : &:r2909_1, ~m? -# 2909| mu2909_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2909_1 -# 2909| r2909_7(bool) = Constant[0] : -# 2909| v2909_8(void) = ConditionalBranch : r2909_7 +# 35| Block 963 +# 35| r35_13483(glval) = VariableAddress[x963] : +# 35| mu35_13484(String) = Uninitialized[x963] : &:r35_13483 +# 35| r35_13485(glval) = FunctionAddress[String] : +# 35| v35_13486(void) = Call[String] : func:r35_13485, this:r35_13483 +# 35| mu35_13487(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13483 +# 35| r35_13489(glval) = VariableAddress[x963] : +# 35| r35_13490(glval) = FunctionAddress[~String] : +# 35| v35_13491(void) = Call[~String] : func:r35_13490, this:r35_13489 +# 35| mu35_13492(unknown) = ^CallSideEffect : ~m? +# 35| v35_13493(void) = ^IndirectReadSideEffect[-1] : &:r35_13489, ~m? +# 35| mu35_13494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13489 +# 35| r35_13495(bool) = Constant[0] : +# 35| v35_13496(void) = ConditionalBranch : r35_13495 #-----| False -> Block 964 #-----| True -> Block 1026 -# 2911| Block 964 -# 2911| r2911_1(glval) = VariableAddress[x964] : -# 2911| mu2911_2(String) = Uninitialized[x964] : &:r2911_1 -# 2911| r2911_3(glval) = FunctionAddress[String] : -# 2911| v2911_4(void) = Call[String] : func:r2911_3, this:r2911_1 -# 2911| mu2911_5(unknown) = ^CallSideEffect : ~m? -# 2911| mu2911_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2911_1 -# 2912| r2912_1(glval) = VariableAddress[x964] : -# 2912| r2912_2(glval) = FunctionAddress[~String] : -# 2912| v2912_3(void) = Call[~String] : func:r2912_2, this:r2912_1 -# 2912| mu2912_4(unknown) = ^CallSideEffect : ~m? -# 2912| v2912_5(void) = ^IndirectReadSideEffect[-1] : &:r2912_1, ~m? -# 2912| mu2912_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2912_1 -# 2912| r2912_7(bool) = Constant[0] : -# 2912| v2912_8(void) = ConditionalBranch : r2912_7 +# 35| Block 964 +# 35| r35_13497(glval) = VariableAddress[x964] : +# 35| mu35_13498(String) = Uninitialized[x964] : &:r35_13497 +# 35| r35_13499(glval) = FunctionAddress[String] : +# 35| v35_13500(void) = Call[String] : func:r35_13499, this:r35_13497 +# 35| mu35_13501(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13497 +# 35| r35_13503(glval) = VariableAddress[x964] : +# 35| r35_13504(glval) = FunctionAddress[~String] : +# 35| v35_13505(void) = Call[~String] : func:r35_13504, this:r35_13503 +# 35| mu35_13506(unknown) = ^CallSideEffect : ~m? +# 35| v35_13507(void) = ^IndirectReadSideEffect[-1] : &:r35_13503, ~m? +# 35| mu35_13508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13503 +# 35| r35_13509(bool) = Constant[0] : +# 35| v35_13510(void) = ConditionalBranch : r35_13509 #-----| False -> Block 965 #-----| True -> Block 1026 -# 2914| Block 965 -# 2914| r2914_1(glval) = VariableAddress[x965] : -# 2914| mu2914_2(String) = Uninitialized[x965] : &:r2914_1 -# 2914| r2914_3(glval) = FunctionAddress[String] : -# 2914| v2914_4(void) = Call[String] : func:r2914_3, this:r2914_1 -# 2914| mu2914_5(unknown) = ^CallSideEffect : ~m? -# 2914| mu2914_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2914_1 -# 2915| r2915_1(glval) = VariableAddress[x965] : -# 2915| r2915_2(glval) = FunctionAddress[~String] : -# 2915| v2915_3(void) = Call[~String] : func:r2915_2, this:r2915_1 -# 2915| mu2915_4(unknown) = ^CallSideEffect : ~m? -# 2915| v2915_5(void) = ^IndirectReadSideEffect[-1] : &:r2915_1, ~m? -# 2915| mu2915_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2915_1 -# 2915| r2915_7(bool) = Constant[0] : -# 2915| v2915_8(void) = ConditionalBranch : r2915_7 +# 35| Block 965 +# 35| r35_13511(glval) = VariableAddress[x965] : +# 35| mu35_13512(String) = Uninitialized[x965] : &:r35_13511 +# 35| r35_13513(glval) = FunctionAddress[String] : +# 35| v35_13514(void) = Call[String] : func:r35_13513, this:r35_13511 +# 35| mu35_13515(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13511 +# 35| r35_13517(glval) = VariableAddress[x965] : +# 35| r35_13518(glval) = FunctionAddress[~String] : +# 35| v35_13519(void) = Call[~String] : func:r35_13518, this:r35_13517 +# 35| mu35_13520(unknown) = ^CallSideEffect : ~m? +# 35| v35_13521(void) = ^IndirectReadSideEffect[-1] : &:r35_13517, ~m? +# 35| mu35_13522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13517 +# 35| r35_13523(bool) = Constant[0] : +# 35| v35_13524(void) = ConditionalBranch : r35_13523 #-----| False -> Block 966 #-----| True -> Block 1026 -# 2917| Block 966 -# 2917| r2917_1(glval) = VariableAddress[x966] : -# 2917| mu2917_2(String) = Uninitialized[x966] : &:r2917_1 -# 2917| r2917_3(glval) = FunctionAddress[String] : -# 2917| v2917_4(void) = Call[String] : func:r2917_3, this:r2917_1 -# 2917| mu2917_5(unknown) = ^CallSideEffect : ~m? -# 2917| mu2917_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2917_1 -# 2918| r2918_1(glval) = VariableAddress[x966] : -# 2918| r2918_2(glval) = FunctionAddress[~String] : -# 2918| v2918_3(void) = Call[~String] : func:r2918_2, this:r2918_1 -# 2918| mu2918_4(unknown) = ^CallSideEffect : ~m? -# 2918| v2918_5(void) = ^IndirectReadSideEffect[-1] : &:r2918_1, ~m? -# 2918| mu2918_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2918_1 -# 2918| r2918_7(bool) = Constant[0] : -# 2918| v2918_8(void) = ConditionalBranch : r2918_7 +# 35| Block 966 +# 35| r35_13525(glval) = VariableAddress[x966] : +# 35| mu35_13526(String) = Uninitialized[x966] : &:r35_13525 +# 35| r35_13527(glval) = FunctionAddress[String] : +# 35| v35_13528(void) = Call[String] : func:r35_13527, this:r35_13525 +# 35| mu35_13529(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13525 +# 35| r35_13531(glval) = VariableAddress[x966] : +# 35| r35_13532(glval) = FunctionAddress[~String] : +# 35| v35_13533(void) = Call[~String] : func:r35_13532, this:r35_13531 +# 35| mu35_13534(unknown) = ^CallSideEffect : ~m? +# 35| v35_13535(void) = ^IndirectReadSideEffect[-1] : &:r35_13531, ~m? +# 35| mu35_13536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13531 +# 35| r35_13537(bool) = Constant[0] : +# 35| v35_13538(void) = ConditionalBranch : r35_13537 #-----| False -> Block 967 #-----| True -> Block 1026 -# 2920| Block 967 -# 2920| r2920_1(glval) = VariableAddress[x967] : -# 2920| mu2920_2(String) = Uninitialized[x967] : &:r2920_1 -# 2920| r2920_3(glval) = FunctionAddress[String] : -# 2920| v2920_4(void) = Call[String] : func:r2920_3, this:r2920_1 -# 2920| mu2920_5(unknown) = ^CallSideEffect : ~m? -# 2920| mu2920_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2920_1 -# 2921| r2921_1(glval) = VariableAddress[x967] : -# 2921| r2921_2(glval) = FunctionAddress[~String] : -# 2921| v2921_3(void) = Call[~String] : func:r2921_2, this:r2921_1 -# 2921| mu2921_4(unknown) = ^CallSideEffect : ~m? -# 2921| v2921_5(void) = ^IndirectReadSideEffect[-1] : &:r2921_1, ~m? -# 2921| mu2921_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2921_1 -# 2921| r2921_7(bool) = Constant[0] : -# 2921| v2921_8(void) = ConditionalBranch : r2921_7 +# 35| Block 967 +# 35| r35_13539(glval) = VariableAddress[x967] : +# 35| mu35_13540(String) = Uninitialized[x967] : &:r35_13539 +# 35| r35_13541(glval) = FunctionAddress[String] : +# 35| v35_13542(void) = Call[String] : func:r35_13541, this:r35_13539 +# 35| mu35_13543(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13539 +# 35| r35_13545(glval) = VariableAddress[x967] : +# 35| r35_13546(glval) = FunctionAddress[~String] : +# 35| v35_13547(void) = Call[~String] : func:r35_13546, this:r35_13545 +# 35| mu35_13548(unknown) = ^CallSideEffect : ~m? +# 35| v35_13549(void) = ^IndirectReadSideEffect[-1] : &:r35_13545, ~m? +# 35| mu35_13550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13545 +# 35| r35_13551(bool) = Constant[0] : +# 35| v35_13552(void) = ConditionalBranch : r35_13551 #-----| False -> Block 968 #-----| True -> Block 1026 -# 2923| Block 968 -# 2923| r2923_1(glval) = VariableAddress[x968] : -# 2923| mu2923_2(String) = Uninitialized[x968] : &:r2923_1 -# 2923| r2923_3(glval) = FunctionAddress[String] : -# 2923| v2923_4(void) = Call[String] : func:r2923_3, this:r2923_1 -# 2923| mu2923_5(unknown) = ^CallSideEffect : ~m? -# 2923| mu2923_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2923_1 -# 2924| r2924_1(glval) = VariableAddress[x968] : -# 2924| r2924_2(glval) = FunctionAddress[~String] : -# 2924| v2924_3(void) = Call[~String] : func:r2924_2, this:r2924_1 -# 2924| mu2924_4(unknown) = ^CallSideEffect : ~m? -# 2924| v2924_5(void) = ^IndirectReadSideEffect[-1] : &:r2924_1, ~m? -# 2924| mu2924_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2924_1 -# 2924| r2924_7(bool) = Constant[0] : -# 2924| v2924_8(void) = ConditionalBranch : r2924_7 +# 35| Block 968 +# 35| r35_13553(glval) = VariableAddress[x968] : +# 35| mu35_13554(String) = Uninitialized[x968] : &:r35_13553 +# 35| r35_13555(glval) = FunctionAddress[String] : +# 35| v35_13556(void) = Call[String] : func:r35_13555, this:r35_13553 +# 35| mu35_13557(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13553 +# 35| r35_13559(glval) = VariableAddress[x968] : +# 35| r35_13560(glval) = FunctionAddress[~String] : +# 35| v35_13561(void) = Call[~String] : func:r35_13560, this:r35_13559 +# 35| mu35_13562(unknown) = ^CallSideEffect : ~m? +# 35| v35_13563(void) = ^IndirectReadSideEffect[-1] : &:r35_13559, ~m? +# 35| mu35_13564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13559 +# 35| r35_13565(bool) = Constant[0] : +# 35| v35_13566(void) = ConditionalBranch : r35_13565 #-----| False -> Block 969 #-----| True -> Block 1026 -# 2926| Block 969 -# 2926| r2926_1(glval) = VariableAddress[x969] : -# 2926| mu2926_2(String) = Uninitialized[x969] : &:r2926_1 -# 2926| r2926_3(glval) = FunctionAddress[String] : -# 2926| v2926_4(void) = Call[String] : func:r2926_3, this:r2926_1 -# 2926| mu2926_5(unknown) = ^CallSideEffect : ~m? -# 2926| mu2926_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2926_1 -# 2927| r2927_1(glval) = VariableAddress[x969] : -# 2927| r2927_2(glval) = FunctionAddress[~String] : -# 2927| v2927_3(void) = Call[~String] : func:r2927_2, this:r2927_1 -# 2927| mu2927_4(unknown) = ^CallSideEffect : ~m? -# 2927| v2927_5(void) = ^IndirectReadSideEffect[-1] : &:r2927_1, ~m? -# 2927| mu2927_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2927_1 -# 2927| r2927_7(bool) = Constant[0] : -# 2927| v2927_8(void) = ConditionalBranch : r2927_7 +# 35| Block 969 +# 35| r35_13567(glval) = VariableAddress[x969] : +# 35| mu35_13568(String) = Uninitialized[x969] : &:r35_13567 +# 35| r35_13569(glval) = FunctionAddress[String] : +# 35| v35_13570(void) = Call[String] : func:r35_13569, this:r35_13567 +# 35| mu35_13571(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13567 +# 35| r35_13573(glval) = VariableAddress[x969] : +# 35| r35_13574(glval) = FunctionAddress[~String] : +# 35| v35_13575(void) = Call[~String] : func:r35_13574, this:r35_13573 +# 35| mu35_13576(unknown) = ^CallSideEffect : ~m? +# 35| v35_13577(void) = ^IndirectReadSideEffect[-1] : &:r35_13573, ~m? +# 35| mu35_13578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13573 +# 35| r35_13579(bool) = Constant[0] : +# 35| v35_13580(void) = ConditionalBranch : r35_13579 #-----| False -> Block 970 #-----| True -> Block 1026 -# 2929| Block 970 -# 2929| r2929_1(glval) = VariableAddress[x970] : -# 2929| mu2929_2(String) = Uninitialized[x970] : &:r2929_1 -# 2929| r2929_3(glval) = FunctionAddress[String] : -# 2929| v2929_4(void) = Call[String] : func:r2929_3, this:r2929_1 -# 2929| mu2929_5(unknown) = ^CallSideEffect : ~m? -# 2929| mu2929_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2929_1 -# 2930| r2930_1(glval) = VariableAddress[x970] : -# 2930| r2930_2(glval) = FunctionAddress[~String] : -# 2930| v2930_3(void) = Call[~String] : func:r2930_2, this:r2930_1 -# 2930| mu2930_4(unknown) = ^CallSideEffect : ~m? -# 2930| v2930_5(void) = ^IndirectReadSideEffect[-1] : &:r2930_1, ~m? -# 2930| mu2930_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2930_1 -# 2930| r2930_7(bool) = Constant[0] : -# 2930| v2930_8(void) = ConditionalBranch : r2930_7 +# 35| Block 970 +# 35| r35_13581(glval) = VariableAddress[x970] : +# 35| mu35_13582(String) = Uninitialized[x970] : &:r35_13581 +# 35| r35_13583(glval) = FunctionAddress[String] : +# 35| v35_13584(void) = Call[String] : func:r35_13583, this:r35_13581 +# 35| mu35_13585(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13581 +# 35| r35_13587(glval) = VariableAddress[x970] : +# 35| r35_13588(glval) = FunctionAddress[~String] : +# 35| v35_13589(void) = Call[~String] : func:r35_13588, this:r35_13587 +# 35| mu35_13590(unknown) = ^CallSideEffect : ~m? +# 35| v35_13591(void) = ^IndirectReadSideEffect[-1] : &:r35_13587, ~m? +# 35| mu35_13592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13587 +# 35| r35_13593(bool) = Constant[0] : +# 35| v35_13594(void) = ConditionalBranch : r35_13593 #-----| False -> Block 971 #-----| True -> Block 1026 -# 2932| Block 971 -# 2932| r2932_1(glval) = VariableAddress[x971] : -# 2932| mu2932_2(String) = Uninitialized[x971] : &:r2932_1 -# 2932| r2932_3(glval) = FunctionAddress[String] : -# 2932| v2932_4(void) = Call[String] : func:r2932_3, this:r2932_1 -# 2932| mu2932_5(unknown) = ^CallSideEffect : ~m? -# 2932| mu2932_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2932_1 -# 2933| r2933_1(glval) = VariableAddress[x971] : -# 2933| r2933_2(glval) = FunctionAddress[~String] : -# 2933| v2933_3(void) = Call[~String] : func:r2933_2, this:r2933_1 -# 2933| mu2933_4(unknown) = ^CallSideEffect : ~m? -# 2933| v2933_5(void) = ^IndirectReadSideEffect[-1] : &:r2933_1, ~m? -# 2933| mu2933_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2933_1 -# 2933| r2933_7(bool) = Constant[0] : -# 2933| v2933_8(void) = ConditionalBranch : r2933_7 +# 35| Block 971 +# 35| r35_13595(glval) = VariableAddress[x971] : +# 35| mu35_13596(String) = Uninitialized[x971] : &:r35_13595 +# 35| r35_13597(glval) = FunctionAddress[String] : +# 35| v35_13598(void) = Call[String] : func:r35_13597, this:r35_13595 +# 35| mu35_13599(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13595 +# 35| r35_13601(glval) = VariableAddress[x971] : +# 35| r35_13602(glval) = FunctionAddress[~String] : +# 35| v35_13603(void) = Call[~String] : func:r35_13602, this:r35_13601 +# 35| mu35_13604(unknown) = ^CallSideEffect : ~m? +# 35| v35_13605(void) = ^IndirectReadSideEffect[-1] : &:r35_13601, ~m? +# 35| mu35_13606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13601 +# 35| r35_13607(bool) = Constant[0] : +# 35| v35_13608(void) = ConditionalBranch : r35_13607 #-----| False -> Block 972 #-----| True -> Block 1026 -# 2935| Block 972 -# 2935| r2935_1(glval) = VariableAddress[x972] : -# 2935| mu2935_2(String) = Uninitialized[x972] : &:r2935_1 -# 2935| r2935_3(glval) = FunctionAddress[String] : -# 2935| v2935_4(void) = Call[String] : func:r2935_3, this:r2935_1 -# 2935| mu2935_5(unknown) = ^CallSideEffect : ~m? -# 2935| mu2935_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2935_1 -# 2936| r2936_1(glval) = VariableAddress[x972] : -# 2936| r2936_2(glval) = FunctionAddress[~String] : -# 2936| v2936_3(void) = Call[~String] : func:r2936_2, this:r2936_1 -# 2936| mu2936_4(unknown) = ^CallSideEffect : ~m? -# 2936| v2936_5(void) = ^IndirectReadSideEffect[-1] : &:r2936_1, ~m? -# 2936| mu2936_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2936_1 -# 2936| r2936_7(bool) = Constant[0] : -# 2936| v2936_8(void) = ConditionalBranch : r2936_7 +# 35| Block 972 +# 35| r35_13609(glval) = VariableAddress[x972] : +# 35| mu35_13610(String) = Uninitialized[x972] : &:r35_13609 +# 35| r35_13611(glval) = FunctionAddress[String] : +# 35| v35_13612(void) = Call[String] : func:r35_13611, this:r35_13609 +# 35| mu35_13613(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13609 +# 35| r35_13615(glval) = VariableAddress[x972] : +# 35| r35_13616(glval) = FunctionAddress[~String] : +# 35| v35_13617(void) = Call[~String] : func:r35_13616, this:r35_13615 +# 35| mu35_13618(unknown) = ^CallSideEffect : ~m? +# 35| v35_13619(void) = ^IndirectReadSideEffect[-1] : &:r35_13615, ~m? +# 35| mu35_13620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13615 +# 35| r35_13621(bool) = Constant[0] : +# 35| v35_13622(void) = ConditionalBranch : r35_13621 #-----| False -> Block 973 #-----| True -> Block 1026 -# 2938| Block 973 -# 2938| r2938_1(glval) = VariableAddress[x973] : -# 2938| mu2938_2(String) = Uninitialized[x973] : &:r2938_1 -# 2938| r2938_3(glval) = FunctionAddress[String] : -# 2938| v2938_4(void) = Call[String] : func:r2938_3, this:r2938_1 -# 2938| mu2938_5(unknown) = ^CallSideEffect : ~m? -# 2938| mu2938_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2938_1 -# 2939| r2939_1(glval) = VariableAddress[x973] : -# 2939| r2939_2(glval) = FunctionAddress[~String] : -# 2939| v2939_3(void) = Call[~String] : func:r2939_2, this:r2939_1 -# 2939| mu2939_4(unknown) = ^CallSideEffect : ~m? -# 2939| v2939_5(void) = ^IndirectReadSideEffect[-1] : &:r2939_1, ~m? -# 2939| mu2939_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2939_1 -# 2939| r2939_7(bool) = Constant[0] : -# 2939| v2939_8(void) = ConditionalBranch : r2939_7 +# 35| Block 973 +# 35| r35_13623(glval) = VariableAddress[x973] : +# 35| mu35_13624(String) = Uninitialized[x973] : &:r35_13623 +# 35| r35_13625(glval) = FunctionAddress[String] : +# 35| v35_13626(void) = Call[String] : func:r35_13625, this:r35_13623 +# 35| mu35_13627(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13623 +# 35| r35_13629(glval) = VariableAddress[x973] : +# 35| r35_13630(glval) = FunctionAddress[~String] : +# 35| v35_13631(void) = Call[~String] : func:r35_13630, this:r35_13629 +# 35| mu35_13632(unknown) = ^CallSideEffect : ~m? +# 35| v35_13633(void) = ^IndirectReadSideEffect[-1] : &:r35_13629, ~m? +# 35| mu35_13634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13629 +# 35| r35_13635(bool) = Constant[0] : +# 35| v35_13636(void) = ConditionalBranch : r35_13635 #-----| False -> Block 974 #-----| True -> Block 1026 -# 2941| Block 974 -# 2941| r2941_1(glval) = VariableAddress[x974] : -# 2941| mu2941_2(String) = Uninitialized[x974] : &:r2941_1 -# 2941| r2941_3(glval) = FunctionAddress[String] : -# 2941| v2941_4(void) = Call[String] : func:r2941_3, this:r2941_1 -# 2941| mu2941_5(unknown) = ^CallSideEffect : ~m? -# 2941| mu2941_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2941_1 -# 2942| r2942_1(glval) = VariableAddress[x974] : -# 2942| r2942_2(glval) = FunctionAddress[~String] : -# 2942| v2942_3(void) = Call[~String] : func:r2942_2, this:r2942_1 -# 2942| mu2942_4(unknown) = ^CallSideEffect : ~m? -# 2942| v2942_5(void) = ^IndirectReadSideEffect[-1] : &:r2942_1, ~m? -# 2942| mu2942_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2942_1 -# 2942| r2942_7(bool) = Constant[0] : -# 2942| v2942_8(void) = ConditionalBranch : r2942_7 +# 35| Block 974 +# 35| r35_13637(glval) = VariableAddress[x974] : +# 35| mu35_13638(String) = Uninitialized[x974] : &:r35_13637 +# 35| r35_13639(glval) = FunctionAddress[String] : +# 35| v35_13640(void) = Call[String] : func:r35_13639, this:r35_13637 +# 35| mu35_13641(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13637 +# 35| r35_13643(glval) = VariableAddress[x974] : +# 35| r35_13644(glval) = FunctionAddress[~String] : +# 35| v35_13645(void) = Call[~String] : func:r35_13644, this:r35_13643 +# 35| mu35_13646(unknown) = ^CallSideEffect : ~m? +# 35| v35_13647(void) = ^IndirectReadSideEffect[-1] : &:r35_13643, ~m? +# 35| mu35_13648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13643 +# 35| r35_13649(bool) = Constant[0] : +# 35| v35_13650(void) = ConditionalBranch : r35_13649 #-----| False -> Block 975 #-----| True -> Block 1026 -# 2944| Block 975 -# 2944| r2944_1(glval) = VariableAddress[x975] : -# 2944| mu2944_2(String) = Uninitialized[x975] : &:r2944_1 -# 2944| r2944_3(glval) = FunctionAddress[String] : -# 2944| v2944_4(void) = Call[String] : func:r2944_3, this:r2944_1 -# 2944| mu2944_5(unknown) = ^CallSideEffect : ~m? -# 2944| mu2944_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2944_1 -# 2945| r2945_1(glval) = VariableAddress[x975] : -# 2945| r2945_2(glval) = FunctionAddress[~String] : -# 2945| v2945_3(void) = Call[~String] : func:r2945_2, this:r2945_1 -# 2945| mu2945_4(unknown) = ^CallSideEffect : ~m? -# 2945| v2945_5(void) = ^IndirectReadSideEffect[-1] : &:r2945_1, ~m? -# 2945| mu2945_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2945_1 -# 2945| r2945_7(bool) = Constant[0] : -# 2945| v2945_8(void) = ConditionalBranch : r2945_7 +# 35| Block 975 +# 35| r35_13651(glval) = VariableAddress[x975] : +# 35| mu35_13652(String) = Uninitialized[x975] : &:r35_13651 +# 35| r35_13653(glval) = FunctionAddress[String] : +# 35| v35_13654(void) = Call[String] : func:r35_13653, this:r35_13651 +# 35| mu35_13655(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13651 +# 35| r35_13657(glval) = VariableAddress[x975] : +# 35| r35_13658(glval) = FunctionAddress[~String] : +# 35| v35_13659(void) = Call[~String] : func:r35_13658, this:r35_13657 +# 35| mu35_13660(unknown) = ^CallSideEffect : ~m? +# 35| v35_13661(void) = ^IndirectReadSideEffect[-1] : &:r35_13657, ~m? +# 35| mu35_13662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13657 +# 35| r35_13663(bool) = Constant[0] : +# 35| v35_13664(void) = ConditionalBranch : r35_13663 #-----| False -> Block 976 #-----| True -> Block 1026 -# 2947| Block 976 -# 2947| r2947_1(glval) = VariableAddress[x976] : -# 2947| mu2947_2(String) = Uninitialized[x976] : &:r2947_1 -# 2947| r2947_3(glval) = FunctionAddress[String] : -# 2947| v2947_4(void) = Call[String] : func:r2947_3, this:r2947_1 -# 2947| mu2947_5(unknown) = ^CallSideEffect : ~m? -# 2947| mu2947_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2947_1 -# 2948| r2948_1(glval) = VariableAddress[x976] : -# 2948| r2948_2(glval) = FunctionAddress[~String] : -# 2948| v2948_3(void) = Call[~String] : func:r2948_2, this:r2948_1 -# 2948| mu2948_4(unknown) = ^CallSideEffect : ~m? -# 2948| v2948_5(void) = ^IndirectReadSideEffect[-1] : &:r2948_1, ~m? -# 2948| mu2948_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2948_1 -# 2948| r2948_7(bool) = Constant[0] : -# 2948| v2948_8(void) = ConditionalBranch : r2948_7 +# 35| Block 976 +# 35| r35_13665(glval) = VariableAddress[x976] : +# 35| mu35_13666(String) = Uninitialized[x976] : &:r35_13665 +# 35| r35_13667(glval) = FunctionAddress[String] : +# 35| v35_13668(void) = Call[String] : func:r35_13667, this:r35_13665 +# 35| mu35_13669(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13665 +# 35| r35_13671(glval) = VariableAddress[x976] : +# 35| r35_13672(glval) = FunctionAddress[~String] : +# 35| v35_13673(void) = Call[~String] : func:r35_13672, this:r35_13671 +# 35| mu35_13674(unknown) = ^CallSideEffect : ~m? +# 35| v35_13675(void) = ^IndirectReadSideEffect[-1] : &:r35_13671, ~m? +# 35| mu35_13676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13671 +# 35| r35_13677(bool) = Constant[0] : +# 35| v35_13678(void) = ConditionalBranch : r35_13677 #-----| False -> Block 977 #-----| True -> Block 1026 -# 2950| Block 977 -# 2950| r2950_1(glval) = VariableAddress[x977] : -# 2950| mu2950_2(String) = Uninitialized[x977] : &:r2950_1 -# 2950| r2950_3(glval) = FunctionAddress[String] : -# 2950| v2950_4(void) = Call[String] : func:r2950_3, this:r2950_1 -# 2950| mu2950_5(unknown) = ^CallSideEffect : ~m? -# 2950| mu2950_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2950_1 -# 2951| r2951_1(glval) = VariableAddress[x977] : -# 2951| r2951_2(glval) = FunctionAddress[~String] : -# 2951| v2951_3(void) = Call[~String] : func:r2951_2, this:r2951_1 -# 2951| mu2951_4(unknown) = ^CallSideEffect : ~m? -# 2951| v2951_5(void) = ^IndirectReadSideEffect[-1] : &:r2951_1, ~m? -# 2951| mu2951_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2951_1 -# 2951| r2951_7(bool) = Constant[0] : -# 2951| v2951_8(void) = ConditionalBranch : r2951_7 +# 35| Block 977 +# 35| r35_13679(glval) = VariableAddress[x977] : +# 35| mu35_13680(String) = Uninitialized[x977] : &:r35_13679 +# 35| r35_13681(glval) = FunctionAddress[String] : +# 35| v35_13682(void) = Call[String] : func:r35_13681, this:r35_13679 +# 35| mu35_13683(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13679 +# 35| r35_13685(glval) = VariableAddress[x977] : +# 35| r35_13686(glval) = FunctionAddress[~String] : +# 35| v35_13687(void) = Call[~String] : func:r35_13686, this:r35_13685 +# 35| mu35_13688(unknown) = ^CallSideEffect : ~m? +# 35| v35_13689(void) = ^IndirectReadSideEffect[-1] : &:r35_13685, ~m? +# 35| mu35_13690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13685 +# 35| r35_13691(bool) = Constant[0] : +# 35| v35_13692(void) = ConditionalBranch : r35_13691 #-----| False -> Block 978 #-----| True -> Block 1026 -# 2953| Block 978 -# 2953| r2953_1(glval) = VariableAddress[x978] : -# 2953| mu2953_2(String) = Uninitialized[x978] : &:r2953_1 -# 2953| r2953_3(glval) = FunctionAddress[String] : -# 2953| v2953_4(void) = Call[String] : func:r2953_3, this:r2953_1 -# 2953| mu2953_5(unknown) = ^CallSideEffect : ~m? -# 2953| mu2953_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2953_1 -# 2954| r2954_1(glval) = VariableAddress[x978] : -# 2954| r2954_2(glval) = FunctionAddress[~String] : -# 2954| v2954_3(void) = Call[~String] : func:r2954_2, this:r2954_1 -# 2954| mu2954_4(unknown) = ^CallSideEffect : ~m? -# 2954| v2954_5(void) = ^IndirectReadSideEffect[-1] : &:r2954_1, ~m? -# 2954| mu2954_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2954_1 -# 2954| r2954_7(bool) = Constant[0] : -# 2954| v2954_8(void) = ConditionalBranch : r2954_7 +# 35| Block 978 +# 35| r35_13693(glval) = VariableAddress[x978] : +# 35| mu35_13694(String) = Uninitialized[x978] : &:r35_13693 +# 35| r35_13695(glval) = FunctionAddress[String] : +# 35| v35_13696(void) = Call[String] : func:r35_13695, this:r35_13693 +# 35| mu35_13697(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13693 +# 35| r35_13699(glval) = VariableAddress[x978] : +# 35| r35_13700(glval) = FunctionAddress[~String] : +# 35| v35_13701(void) = Call[~String] : func:r35_13700, this:r35_13699 +# 35| mu35_13702(unknown) = ^CallSideEffect : ~m? +# 35| v35_13703(void) = ^IndirectReadSideEffect[-1] : &:r35_13699, ~m? +# 35| mu35_13704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13699 +# 35| r35_13705(bool) = Constant[0] : +# 35| v35_13706(void) = ConditionalBranch : r35_13705 #-----| False -> Block 979 #-----| True -> Block 1026 -# 2956| Block 979 -# 2956| r2956_1(glval) = VariableAddress[x979] : -# 2956| mu2956_2(String) = Uninitialized[x979] : &:r2956_1 -# 2956| r2956_3(glval) = FunctionAddress[String] : -# 2956| v2956_4(void) = Call[String] : func:r2956_3, this:r2956_1 -# 2956| mu2956_5(unknown) = ^CallSideEffect : ~m? -# 2956| mu2956_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2956_1 -# 2957| r2957_1(glval) = VariableAddress[x979] : -# 2957| r2957_2(glval) = FunctionAddress[~String] : -# 2957| v2957_3(void) = Call[~String] : func:r2957_2, this:r2957_1 -# 2957| mu2957_4(unknown) = ^CallSideEffect : ~m? -# 2957| v2957_5(void) = ^IndirectReadSideEffect[-1] : &:r2957_1, ~m? -# 2957| mu2957_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2957_1 -# 2957| r2957_7(bool) = Constant[0] : -# 2957| v2957_8(void) = ConditionalBranch : r2957_7 +# 35| Block 979 +# 35| r35_13707(glval) = VariableAddress[x979] : +# 35| mu35_13708(String) = Uninitialized[x979] : &:r35_13707 +# 35| r35_13709(glval) = FunctionAddress[String] : +# 35| v35_13710(void) = Call[String] : func:r35_13709, this:r35_13707 +# 35| mu35_13711(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13707 +# 35| r35_13713(glval) = VariableAddress[x979] : +# 35| r35_13714(glval) = FunctionAddress[~String] : +# 35| v35_13715(void) = Call[~String] : func:r35_13714, this:r35_13713 +# 35| mu35_13716(unknown) = ^CallSideEffect : ~m? +# 35| v35_13717(void) = ^IndirectReadSideEffect[-1] : &:r35_13713, ~m? +# 35| mu35_13718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13713 +# 35| r35_13719(bool) = Constant[0] : +# 35| v35_13720(void) = ConditionalBranch : r35_13719 #-----| False -> Block 980 #-----| True -> Block 1026 -# 2959| Block 980 -# 2959| r2959_1(glval) = VariableAddress[x980] : -# 2959| mu2959_2(String) = Uninitialized[x980] : &:r2959_1 -# 2959| r2959_3(glval) = FunctionAddress[String] : -# 2959| v2959_4(void) = Call[String] : func:r2959_3, this:r2959_1 -# 2959| mu2959_5(unknown) = ^CallSideEffect : ~m? -# 2959| mu2959_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2959_1 -# 2960| r2960_1(glval) = VariableAddress[x980] : -# 2960| r2960_2(glval) = FunctionAddress[~String] : -# 2960| v2960_3(void) = Call[~String] : func:r2960_2, this:r2960_1 -# 2960| mu2960_4(unknown) = ^CallSideEffect : ~m? -# 2960| v2960_5(void) = ^IndirectReadSideEffect[-1] : &:r2960_1, ~m? -# 2960| mu2960_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2960_1 -# 2960| r2960_7(bool) = Constant[0] : -# 2960| v2960_8(void) = ConditionalBranch : r2960_7 +# 35| Block 980 +# 35| r35_13721(glval) = VariableAddress[x980] : +# 35| mu35_13722(String) = Uninitialized[x980] : &:r35_13721 +# 35| r35_13723(glval) = FunctionAddress[String] : +# 35| v35_13724(void) = Call[String] : func:r35_13723, this:r35_13721 +# 35| mu35_13725(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13721 +# 35| r35_13727(glval) = VariableAddress[x980] : +# 35| r35_13728(glval) = FunctionAddress[~String] : +# 35| v35_13729(void) = Call[~String] : func:r35_13728, this:r35_13727 +# 35| mu35_13730(unknown) = ^CallSideEffect : ~m? +# 35| v35_13731(void) = ^IndirectReadSideEffect[-1] : &:r35_13727, ~m? +# 35| mu35_13732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13727 +# 35| r35_13733(bool) = Constant[0] : +# 35| v35_13734(void) = ConditionalBranch : r35_13733 #-----| False -> Block 981 #-----| True -> Block 1026 -# 2962| Block 981 -# 2962| r2962_1(glval) = VariableAddress[x981] : -# 2962| mu2962_2(String) = Uninitialized[x981] : &:r2962_1 -# 2962| r2962_3(glval) = FunctionAddress[String] : -# 2962| v2962_4(void) = Call[String] : func:r2962_3, this:r2962_1 -# 2962| mu2962_5(unknown) = ^CallSideEffect : ~m? -# 2962| mu2962_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2962_1 -# 2963| r2963_1(glval) = VariableAddress[x981] : -# 2963| r2963_2(glval) = FunctionAddress[~String] : -# 2963| v2963_3(void) = Call[~String] : func:r2963_2, this:r2963_1 -# 2963| mu2963_4(unknown) = ^CallSideEffect : ~m? -# 2963| v2963_5(void) = ^IndirectReadSideEffect[-1] : &:r2963_1, ~m? -# 2963| mu2963_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2963_1 -# 2963| r2963_7(bool) = Constant[0] : -# 2963| v2963_8(void) = ConditionalBranch : r2963_7 +# 35| Block 981 +# 35| r35_13735(glval) = VariableAddress[x981] : +# 35| mu35_13736(String) = Uninitialized[x981] : &:r35_13735 +# 35| r35_13737(glval) = FunctionAddress[String] : +# 35| v35_13738(void) = Call[String] : func:r35_13737, this:r35_13735 +# 35| mu35_13739(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13735 +# 35| r35_13741(glval) = VariableAddress[x981] : +# 35| r35_13742(glval) = FunctionAddress[~String] : +# 35| v35_13743(void) = Call[~String] : func:r35_13742, this:r35_13741 +# 35| mu35_13744(unknown) = ^CallSideEffect : ~m? +# 35| v35_13745(void) = ^IndirectReadSideEffect[-1] : &:r35_13741, ~m? +# 35| mu35_13746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13741 +# 35| r35_13747(bool) = Constant[0] : +# 35| v35_13748(void) = ConditionalBranch : r35_13747 #-----| False -> Block 982 #-----| True -> Block 1026 -# 2965| Block 982 -# 2965| r2965_1(glval) = VariableAddress[x982] : -# 2965| mu2965_2(String) = Uninitialized[x982] : &:r2965_1 -# 2965| r2965_3(glval) = FunctionAddress[String] : -# 2965| v2965_4(void) = Call[String] : func:r2965_3, this:r2965_1 -# 2965| mu2965_5(unknown) = ^CallSideEffect : ~m? -# 2965| mu2965_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2965_1 -# 2966| r2966_1(glval) = VariableAddress[x982] : -# 2966| r2966_2(glval) = FunctionAddress[~String] : -# 2966| v2966_3(void) = Call[~String] : func:r2966_2, this:r2966_1 -# 2966| mu2966_4(unknown) = ^CallSideEffect : ~m? -# 2966| v2966_5(void) = ^IndirectReadSideEffect[-1] : &:r2966_1, ~m? -# 2966| mu2966_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2966_1 -# 2966| r2966_7(bool) = Constant[0] : -# 2966| v2966_8(void) = ConditionalBranch : r2966_7 +# 35| Block 982 +# 35| r35_13749(glval) = VariableAddress[x982] : +# 35| mu35_13750(String) = Uninitialized[x982] : &:r35_13749 +# 35| r35_13751(glval) = FunctionAddress[String] : +# 35| v35_13752(void) = Call[String] : func:r35_13751, this:r35_13749 +# 35| mu35_13753(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13749 +# 35| r35_13755(glval) = VariableAddress[x982] : +# 35| r35_13756(glval) = FunctionAddress[~String] : +# 35| v35_13757(void) = Call[~String] : func:r35_13756, this:r35_13755 +# 35| mu35_13758(unknown) = ^CallSideEffect : ~m? +# 35| v35_13759(void) = ^IndirectReadSideEffect[-1] : &:r35_13755, ~m? +# 35| mu35_13760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13755 +# 35| r35_13761(bool) = Constant[0] : +# 35| v35_13762(void) = ConditionalBranch : r35_13761 #-----| False -> Block 983 #-----| True -> Block 1026 -# 2968| Block 983 -# 2968| r2968_1(glval) = VariableAddress[x983] : -# 2968| mu2968_2(String) = Uninitialized[x983] : &:r2968_1 -# 2968| r2968_3(glval) = FunctionAddress[String] : -# 2968| v2968_4(void) = Call[String] : func:r2968_3, this:r2968_1 -# 2968| mu2968_5(unknown) = ^CallSideEffect : ~m? -# 2968| mu2968_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2968_1 -# 2969| r2969_1(glval) = VariableAddress[x983] : -# 2969| r2969_2(glval) = FunctionAddress[~String] : -# 2969| v2969_3(void) = Call[~String] : func:r2969_2, this:r2969_1 -# 2969| mu2969_4(unknown) = ^CallSideEffect : ~m? -# 2969| v2969_5(void) = ^IndirectReadSideEffect[-1] : &:r2969_1, ~m? -# 2969| mu2969_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2969_1 -# 2969| r2969_7(bool) = Constant[0] : -# 2969| v2969_8(void) = ConditionalBranch : r2969_7 +# 35| Block 983 +# 35| r35_13763(glval) = VariableAddress[x983] : +# 35| mu35_13764(String) = Uninitialized[x983] : &:r35_13763 +# 35| r35_13765(glval) = FunctionAddress[String] : +# 35| v35_13766(void) = Call[String] : func:r35_13765, this:r35_13763 +# 35| mu35_13767(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13763 +# 35| r35_13769(glval) = VariableAddress[x983] : +# 35| r35_13770(glval) = FunctionAddress[~String] : +# 35| v35_13771(void) = Call[~String] : func:r35_13770, this:r35_13769 +# 35| mu35_13772(unknown) = ^CallSideEffect : ~m? +# 35| v35_13773(void) = ^IndirectReadSideEffect[-1] : &:r35_13769, ~m? +# 35| mu35_13774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13769 +# 35| r35_13775(bool) = Constant[0] : +# 35| v35_13776(void) = ConditionalBranch : r35_13775 #-----| False -> Block 984 #-----| True -> Block 1026 -# 2971| Block 984 -# 2971| r2971_1(glval) = VariableAddress[x984] : -# 2971| mu2971_2(String) = Uninitialized[x984] : &:r2971_1 -# 2971| r2971_3(glval) = FunctionAddress[String] : -# 2971| v2971_4(void) = Call[String] : func:r2971_3, this:r2971_1 -# 2971| mu2971_5(unknown) = ^CallSideEffect : ~m? -# 2971| mu2971_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2971_1 -# 2972| r2972_1(glval) = VariableAddress[x984] : -# 2972| r2972_2(glval) = FunctionAddress[~String] : -# 2972| v2972_3(void) = Call[~String] : func:r2972_2, this:r2972_1 -# 2972| mu2972_4(unknown) = ^CallSideEffect : ~m? -# 2972| v2972_5(void) = ^IndirectReadSideEffect[-1] : &:r2972_1, ~m? -# 2972| mu2972_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2972_1 -# 2972| r2972_7(bool) = Constant[0] : -# 2972| v2972_8(void) = ConditionalBranch : r2972_7 +# 35| Block 984 +# 35| r35_13777(glval) = VariableAddress[x984] : +# 35| mu35_13778(String) = Uninitialized[x984] : &:r35_13777 +# 35| r35_13779(glval) = FunctionAddress[String] : +# 35| v35_13780(void) = Call[String] : func:r35_13779, this:r35_13777 +# 35| mu35_13781(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13777 +# 35| r35_13783(glval) = VariableAddress[x984] : +# 35| r35_13784(glval) = FunctionAddress[~String] : +# 35| v35_13785(void) = Call[~String] : func:r35_13784, this:r35_13783 +# 35| mu35_13786(unknown) = ^CallSideEffect : ~m? +# 35| v35_13787(void) = ^IndirectReadSideEffect[-1] : &:r35_13783, ~m? +# 35| mu35_13788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13783 +# 35| r35_13789(bool) = Constant[0] : +# 35| v35_13790(void) = ConditionalBranch : r35_13789 #-----| False -> Block 985 #-----| True -> Block 1026 -# 2974| Block 985 -# 2974| r2974_1(glval) = VariableAddress[x985] : -# 2974| mu2974_2(String) = Uninitialized[x985] : &:r2974_1 -# 2974| r2974_3(glval) = FunctionAddress[String] : -# 2974| v2974_4(void) = Call[String] : func:r2974_3, this:r2974_1 -# 2974| mu2974_5(unknown) = ^CallSideEffect : ~m? -# 2974| mu2974_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2974_1 -# 2975| r2975_1(glval) = VariableAddress[x985] : -# 2975| r2975_2(glval) = FunctionAddress[~String] : -# 2975| v2975_3(void) = Call[~String] : func:r2975_2, this:r2975_1 -# 2975| mu2975_4(unknown) = ^CallSideEffect : ~m? -# 2975| v2975_5(void) = ^IndirectReadSideEffect[-1] : &:r2975_1, ~m? -# 2975| mu2975_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2975_1 -# 2975| r2975_7(bool) = Constant[0] : -# 2975| v2975_8(void) = ConditionalBranch : r2975_7 +# 35| Block 985 +# 35| r35_13791(glval) = VariableAddress[x985] : +# 35| mu35_13792(String) = Uninitialized[x985] : &:r35_13791 +# 35| r35_13793(glval) = FunctionAddress[String] : +# 35| v35_13794(void) = Call[String] : func:r35_13793, this:r35_13791 +# 35| mu35_13795(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13791 +# 35| r35_13797(glval) = VariableAddress[x985] : +# 35| r35_13798(glval) = FunctionAddress[~String] : +# 35| v35_13799(void) = Call[~String] : func:r35_13798, this:r35_13797 +# 35| mu35_13800(unknown) = ^CallSideEffect : ~m? +# 35| v35_13801(void) = ^IndirectReadSideEffect[-1] : &:r35_13797, ~m? +# 35| mu35_13802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13797 +# 35| r35_13803(bool) = Constant[0] : +# 35| v35_13804(void) = ConditionalBranch : r35_13803 #-----| False -> Block 986 #-----| True -> Block 1026 -# 2977| Block 986 -# 2977| r2977_1(glval) = VariableAddress[x986] : -# 2977| mu2977_2(String) = Uninitialized[x986] : &:r2977_1 -# 2977| r2977_3(glval) = FunctionAddress[String] : -# 2977| v2977_4(void) = Call[String] : func:r2977_3, this:r2977_1 -# 2977| mu2977_5(unknown) = ^CallSideEffect : ~m? -# 2977| mu2977_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2977_1 -# 2978| r2978_1(glval) = VariableAddress[x986] : -# 2978| r2978_2(glval) = FunctionAddress[~String] : -# 2978| v2978_3(void) = Call[~String] : func:r2978_2, this:r2978_1 -# 2978| mu2978_4(unknown) = ^CallSideEffect : ~m? -# 2978| v2978_5(void) = ^IndirectReadSideEffect[-1] : &:r2978_1, ~m? -# 2978| mu2978_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2978_1 -# 2978| r2978_7(bool) = Constant[0] : -# 2978| v2978_8(void) = ConditionalBranch : r2978_7 +# 35| Block 986 +# 35| r35_13805(glval) = VariableAddress[x986] : +# 35| mu35_13806(String) = Uninitialized[x986] : &:r35_13805 +# 35| r35_13807(glval) = FunctionAddress[String] : +# 35| v35_13808(void) = Call[String] : func:r35_13807, this:r35_13805 +# 35| mu35_13809(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13805 +# 35| r35_13811(glval) = VariableAddress[x986] : +# 35| r35_13812(glval) = FunctionAddress[~String] : +# 35| v35_13813(void) = Call[~String] : func:r35_13812, this:r35_13811 +# 35| mu35_13814(unknown) = ^CallSideEffect : ~m? +# 35| v35_13815(void) = ^IndirectReadSideEffect[-1] : &:r35_13811, ~m? +# 35| mu35_13816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13811 +# 35| r35_13817(bool) = Constant[0] : +# 35| v35_13818(void) = ConditionalBranch : r35_13817 #-----| False -> Block 987 #-----| True -> Block 1026 -# 2980| Block 987 -# 2980| r2980_1(glval) = VariableAddress[x987] : -# 2980| mu2980_2(String) = Uninitialized[x987] : &:r2980_1 -# 2980| r2980_3(glval) = FunctionAddress[String] : -# 2980| v2980_4(void) = Call[String] : func:r2980_3, this:r2980_1 -# 2980| mu2980_5(unknown) = ^CallSideEffect : ~m? -# 2980| mu2980_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2980_1 -# 2981| r2981_1(glval) = VariableAddress[x987] : -# 2981| r2981_2(glval) = FunctionAddress[~String] : -# 2981| v2981_3(void) = Call[~String] : func:r2981_2, this:r2981_1 -# 2981| mu2981_4(unknown) = ^CallSideEffect : ~m? -# 2981| v2981_5(void) = ^IndirectReadSideEffect[-1] : &:r2981_1, ~m? -# 2981| mu2981_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2981_1 -# 2981| r2981_7(bool) = Constant[0] : -# 2981| v2981_8(void) = ConditionalBranch : r2981_7 +# 35| Block 987 +# 35| r35_13819(glval) = VariableAddress[x987] : +# 35| mu35_13820(String) = Uninitialized[x987] : &:r35_13819 +# 35| r35_13821(glval) = FunctionAddress[String] : +# 35| v35_13822(void) = Call[String] : func:r35_13821, this:r35_13819 +# 35| mu35_13823(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13819 +# 35| r35_13825(glval) = VariableAddress[x987] : +# 35| r35_13826(glval) = FunctionAddress[~String] : +# 35| v35_13827(void) = Call[~String] : func:r35_13826, this:r35_13825 +# 35| mu35_13828(unknown) = ^CallSideEffect : ~m? +# 35| v35_13829(void) = ^IndirectReadSideEffect[-1] : &:r35_13825, ~m? +# 35| mu35_13830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13825 +# 35| r35_13831(bool) = Constant[0] : +# 35| v35_13832(void) = ConditionalBranch : r35_13831 #-----| False -> Block 988 #-----| True -> Block 1026 -# 2983| Block 988 -# 2983| r2983_1(glval) = VariableAddress[x988] : -# 2983| mu2983_2(String) = Uninitialized[x988] : &:r2983_1 -# 2983| r2983_3(glval) = FunctionAddress[String] : -# 2983| v2983_4(void) = Call[String] : func:r2983_3, this:r2983_1 -# 2983| mu2983_5(unknown) = ^CallSideEffect : ~m? -# 2983| mu2983_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2983_1 -# 2984| r2984_1(glval) = VariableAddress[x988] : -# 2984| r2984_2(glval) = FunctionAddress[~String] : -# 2984| v2984_3(void) = Call[~String] : func:r2984_2, this:r2984_1 -# 2984| mu2984_4(unknown) = ^CallSideEffect : ~m? -# 2984| v2984_5(void) = ^IndirectReadSideEffect[-1] : &:r2984_1, ~m? -# 2984| mu2984_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2984_1 -# 2984| r2984_7(bool) = Constant[0] : -# 2984| v2984_8(void) = ConditionalBranch : r2984_7 +# 35| Block 988 +# 35| r35_13833(glval) = VariableAddress[x988] : +# 35| mu35_13834(String) = Uninitialized[x988] : &:r35_13833 +# 35| r35_13835(glval) = FunctionAddress[String] : +# 35| v35_13836(void) = Call[String] : func:r35_13835, this:r35_13833 +# 35| mu35_13837(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13833 +# 35| r35_13839(glval) = VariableAddress[x988] : +# 35| r35_13840(glval) = FunctionAddress[~String] : +# 35| v35_13841(void) = Call[~String] : func:r35_13840, this:r35_13839 +# 35| mu35_13842(unknown) = ^CallSideEffect : ~m? +# 35| v35_13843(void) = ^IndirectReadSideEffect[-1] : &:r35_13839, ~m? +# 35| mu35_13844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13839 +# 35| r35_13845(bool) = Constant[0] : +# 35| v35_13846(void) = ConditionalBranch : r35_13845 #-----| False -> Block 989 #-----| True -> Block 1026 -# 2986| Block 989 -# 2986| r2986_1(glval) = VariableAddress[x989] : -# 2986| mu2986_2(String) = Uninitialized[x989] : &:r2986_1 -# 2986| r2986_3(glval) = FunctionAddress[String] : -# 2986| v2986_4(void) = Call[String] : func:r2986_3, this:r2986_1 -# 2986| mu2986_5(unknown) = ^CallSideEffect : ~m? -# 2986| mu2986_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2986_1 -# 2987| r2987_1(glval) = VariableAddress[x989] : -# 2987| r2987_2(glval) = FunctionAddress[~String] : -# 2987| v2987_3(void) = Call[~String] : func:r2987_2, this:r2987_1 -# 2987| mu2987_4(unknown) = ^CallSideEffect : ~m? -# 2987| v2987_5(void) = ^IndirectReadSideEffect[-1] : &:r2987_1, ~m? -# 2987| mu2987_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2987_1 -# 2987| r2987_7(bool) = Constant[0] : -# 2987| v2987_8(void) = ConditionalBranch : r2987_7 +# 35| Block 989 +# 35| r35_13847(glval) = VariableAddress[x989] : +# 35| mu35_13848(String) = Uninitialized[x989] : &:r35_13847 +# 35| r35_13849(glval) = FunctionAddress[String] : +# 35| v35_13850(void) = Call[String] : func:r35_13849, this:r35_13847 +# 35| mu35_13851(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13847 +# 35| r35_13853(glval) = VariableAddress[x989] : +# 35| r35_13854(glval) = FunctionAddress[~String] : +# 35| v35_13855(void) = Call[~String] : func:r35_13854, this:r35_13853 +# 35| mu35_13856(unknown) = ^CallSideEffect : ~m? +# 35| v35_13857(void) = ^IndirectReadSideEffect[-1] : &:r35_13853, ~m? +# 35| mu35_13858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13853 +# 35| r35_13859(bool) = Constant[0] : +# 35| v35_13860(void) = ConditionalBranch : r35_13859 #-----| False -> Block 990 #-----| True -> Block 1026 -# 2989| Block 990 -# 2989| r2989_1(glval) = VariableAddress[x990] : -# 2989| mu2989_2(String) = Uninitialized[x990] : &:r2989_1 -# 2989| r2989_3(glval) = FunctionAddress[String] : -# 2989| v2989_4(void) = Call[String] : func:r2989_3, this:r2989_1 -# 2989| mu2989_5(unknown) = ^CallSideEffect : ~m? -# 2989| mu2989_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2989_1 -# 2990| r2990_1(glval) = VariableAddress[x990] : -# 2990| r2990_2(glval) = FunctionAddress[~String] : -# 2990| v2990_3(void) = Call[~String] : func:r2990_2, this:r2990_1 -# 2990| mu2990_4(unknown) = ^CallSideEffect : ~m? -# 2990| v2990_5(void) = ^IndirectReadSideEffect[-1] : &:r2990_1, ~m? -# 2990| mu2990_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2990_1 -# 2990| r2990_7(bool) = Constant[0] : -# 2990| v2990_8(void) = ConditionalBranch : r2990_7 +# 35| Block 990 +# 35| r35_13861(glval) = VariableAddress[x990] : +# 35| mu35_13862(String) = Uninitialized[x990] : &:r35_13861 +# 35| r35_13863(glval) = FunctionAddress[String] : +# 35| v35_13864(void) = Call[String] : func:r35_13863, this:r35_13861 +# 35| mu35_13865(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13861 +# 35| r35_13867(glval) = VariableAddress[x990] : +# 35| r35_13868(glval) = FunctionAddress[~String] : +# 35| v35_13869(void) = Call[~String] : func:r35_13868, this:r35_13867 +# 35| mu35_13870(unknown) = ^CallSideEffect : ~m? +# 35| v35_13871(void) = ^IndirectReadSideEffect[-1] : &:r35_13867, ~m? +# 35| mu35_13872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13867 +# 35| r35_13873(bool) = Constant[0] : +# 35| v35_13874(void) = ConditionalBranch : r35_13873 #-----| False -> Block 991 #-----| True -> Block 1026 -# 2992| Block 991 -# 2992| r2992_1(glval) = VariableAddress[x991] : -# 2992| mu2992_2(String) = Uninitialized[x991] : &:r2992_1 -# 2992| r2992_3(glval) = FunctionAddress[String] : -# 2992| v2992_4(void) = Call[String] : func:r2992_3, this:r2992_1 -# 2992| mu2992_5(unknown) = ^CallSideEffect : ~m? -# 2992| mu2992_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2992_1 -# 2993| r2993_1(glval) = VariableAddress[x991] : -# 2993| r2993_2(glval) = FunctionAddress[~String] : -# 2993| v2993_3(void) = Call[~String] : func:r2993_2, this:r2993_1 -# 2993| mu2993_4(unknown) = ^CallSideEffect : ~m? -# 2993| v2993_5(void) = ^IndirectReadSideEffect[-1] : &:r2993_1, ~m? -# 2993| mu2993_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2993_1 -# 2993| r2993_7(bool) = Constant[0] : -# 2993| v2993_8(void) = ConditionalBranch : r2993_7 +# 35| Block 991 +# 35| r35_13875(glval) = VariableAddress[x991] : +# 35| mu35_13876(String) = Uninitialized[x991] : &:r35_13875 +# 35| r35_13877(glval) = FunctionAddress[String] : +# 35| v35_13878(void) = Call[String] : func:r35_13877, this:r35_13875 +# 35| mu35_13879(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13875 +# 35| r35_13881(glval) = VariableAddress[x991] : +# 35| r35_13882(glval) = FunctionAddress[~String] : +# 35| v35_13883(void) = Call[~String] : func:r35_13882, this:r35_13881 +# 35| mu35_13884(unknown) = ^CallSideEffect : ~m? +# 35| v35_13885(void) = ^IndirectReadSideEffect[-1] : &:r35_13881, ~m? +# 35| mu35_13886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13881 +# 35| r35_13887(bool) = Constant[0] : +# 35| v35_13888(void) = ConditionalBranch : r35_13887 #-----| False -> Block 992 #-----| True -> Block 1026 -# 2995| Block 992 -# 2995| r2995_1(glval) = VariableAddress[x992] : -# 2995| mu2995_2(String) = Uninitialized[x992] : &:r2995_1 -# 2995| r2995_3(glval) = FunctionAddress[String] : -# 2995| v2995_4(void) = Call[String] : func:r2995_3, this:r2995_1 -# 2995| mu2995_5(unknown) = ^CallSideEffect : ~m? -# 2995| mu2995_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2995_1 -# 2996| r2996_1(glval) = VariableAddress[x992] : -# 2996| r2996_2(glval) = FunctionAddress[~String] : -# 2996| v2996_3(void) = Call[~String] : func:r2996_2, this:r2996_1 -# 2996| mu2996_4(unknown) = ^CallSideEffect : ~m? -# 2996| v2996_5(void) = ^IndirectReadSideEffect[-1] : &:r2996_1, ~m? -# 2996| mu2996_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2996_1 -# 2996| r2996_7(bool) = Constant[0] : -# 2996| v2996_8(void) = ConditionalBranch : r2996_7 +# 35| Block 992 +# 35| r35_13889(glval) = VariableAddress[x992] : +# 35| mu35_13890(String) = Uninitialized[x992] : &:r35_13889 +# 35| r35_13891(glval) = FunctionAddress[String] : +# 35| v35_13892(void) = Call[String] : func:r35_13891, this:r35_13889 +# 35| mu35_13893(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13889 +# 35| r35_13895(glval) = VariableAddress[x992] : +# 35| r35_13896(glval) = FunctionAddress[~String] : +# 35| v35_13897(void) = Call[~String] : func:r35_13896, this:r35_13895 +# 35| mu35_13898(unknown) = ^CallSideEffect : ~m? +# 35| v35_13899(void) = ^IndirectReadSideEffect[-1] : &:r35_13895, ~m? +# 35| mu35_13900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13895 +# 35| r35_13901(bool) = Constant[0] : +# 35| v35_13902(void) = ConditionalBranch : r35_13901 #-----| False -> Block 993 #-----| True -> Block 1026 -# 2998| Block 993 -# 2998| r2998_1(glval) = VariableAddress[x993] : -# 2998| mu2998_2(String) = Uninitialized[x993] : &:r2998_1 -# 2998| r2998_3(glval) = FunctionAddress[String] : -# 2998| v2998_4(void) = Call[String] : func:r2998_3, this:r2998_1 -# 2998| mu2998_5(unknown) = ^CallSideEffect : ~m? -# 2998| mu2998_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2998_1 -# 2999| r2999_1(glval) = VariableAddress[x993] : -# 2999| r2999_2(glval) = FunctionAddress[~String] : -# 2999| v2999_3(void) = Call[~String] : func:r2999_2, this:r2999_1 -# 2999| mu2999_4(unknown) = ^CallSideEffect : ~m? -# 2999| v2999_5(void) = ^IndirectReadSideEffect[-1] : &:r2999_1, ~m? -# 2999| mu2999_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2999_1 -# 2999| r2999_7(bool) = Constant[0] : -# 2999| v2999_8(void) = ConditionalBranch : r2999_7 +# 35| Block 993 +# 35| r35_13903(glval) = VariableAddress[x993] : +# 35| mu35_13904(String) = Uninitialized[x993] : &:r35_13903 +# 35| r35_13905(glval) = FunctionAddress[String] : +# 35| v35_13906(void) = Call[String] : func:r35_13905, this:r35_13903 +# 35| mu35_13907(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13903 +# 35| r35_13909(glval) = VariableAddress[x993] : +# 35| r35_13910(glval) = FunctionAddress[~String] : +# 35| v35_13911(void) = Call[~String] : func:r35_13910, this:r35_13909 +# 35| mu35_13912(unknown) = ^CallSideEffect : ~m? +# 35| v35_13913(void) = ^IndirectReadSideEffect[-1] : &:r35_13909, ~m? +# 35| mu35_13914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13909 +# 35| r35_13915(bool) = Constant[0] : +# 35| v35_13916(void) = ConditionalBranch : r35_13915 #-----| False -> Block 994 #-----| True -> Block 1026 -# 3001| Block 994 -# 3001| r3001_1(glval) = VariableAddress[x994] : -# 3001| mu3001_2(String) = Uninitialized[x994] : &:r3001_1 -# 3001| r3001_3(glval) = FunctionAddress[String] : -# 3001| v3001_4(void) = Call[String] : func:r3001_3, this:r3001_1 -# 3001| mu3001_5(unknown) = ^CallSideEffect : ~m? -# 3001| mu3001_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3001_1 -# 3002| r3002_1(glval) = VariableAddress[x994] : -# 3002| r3002_2(glval) = FunctionAddress[~String] : -# 3002| v3002_3(void) = Call[~String] : func:r3002_2, this:r3002_1 -# 3002| mu3002_4(unknown) = ^CallSideEffect : ~m? -# 3002| v3002_5(void) = ^IndirectReadSideEffect[-1] : &:r3002_1, ~m? -# 3002| mu3002_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3002_1 -# 3002| r3002_7(bool) = Constant[0] : -# 3002| v3002_8(void) = ConditionalBranch : r3002_7 +# 35| Block 994 +# 35| r35_13917(glval) = VariableAddress[x994] : +# 35| mu35_13918(String) = Uninitialized[x994] : &:r35_13917 +# 35| r35_13919(glval) = FunctionAddress[String] : +# 35| v35_13920(void) = Call[String] : func:r35_13919, this:r35_13917 +# 35| mu35_13921(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13917 +# 35| r35_13923(glval) = VariableAddress[x994] : +# 35| r35_13924(glval) = FunctionAddress[~String] : +# 35| v35_13925(void) = Call[~String] : func:r35_13924, this:r35_13923 +# 35| mu35_13926(unknown) = ^CallSideEffect : ~m? +# 35| v35_13927(void) = ^IndirectReadSideEffect[-1] : &:r35_13923, ~m? +# 35| mu35_13928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13923 +# 35| r35_13929(bool) = Constant[0] : +# 35| v35_13930(void) = ConditionalBranch : r35_13929 #-----| False -> Block 995 #-----| True -> Block 1026 -# 3004| Block 995 -# 3004| r3004_1(glval) = VariableAddress[x995] : -# 3004| mu3004_2(String) = Uninitialized[x995] : &:r3004_1 -# 3004| r3004_3(glval) = FunctionAddress[String] : -# 3004| v3004_4(void) = Call[String] : func:r3004_3, this:r3004_1 -# 3004| mu3004_5(unknown) = ^CallSideEffect : ~m? -# 3004| mu3004_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3004_1 -# 3005| r3005_1(glval) = VariableAddress[x995] : -# 3005| r3005_2(glval) = FunctionAddress[~String] : -# 3005| v3005_3(void) = Call[~String] : func:r3005_2, this:r3005_1 -# 3005| mu3005_4(unknown) = ^CallSideEffect : ~m? -# 3005| v3005_5(void) = ^IndirectReadSideEffect[-1] : &:r3005_1, ~m? -# 3005| mu3005_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3005_1 -# 3005| r3005_7(bool) = Constant[0] : -# 3005| v3005_8(void) = ConditionalBranch : r3005_7 +# 35| Block 995 +# 35| r35_13931(glval) = VariableAddress[x995] : +# 35| mu35_13932(String) = Uninitialized[x995] : &:r35_13931 +# 35| r35_13933(glval) = FunctionAddress[String] : +# 35| v35_13934(void) = Call[String] : func:r35_13933, this:r35_13931 +# 35| mu35_13935(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13931 +# 35| r35_13937(glval) = VariableAddress[x995] : +# 35| r35_13938(glval) = FunctionAddress[~String] : +# 35| v35_13939(void) = Call[~String] : func:r35_13938, this:r35_13937 +# 35| mu35_13940(unknown) = ^CallSideEffect : ~m? +# 35| v35_13941(void) = ^IndirectReadSideEffect[-1] : &:r35_13937, ~m? +# 35| mu35_13942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13937 +# 35| r35_13943(bool) = Constant[0] : +# 35| v35_13944(void) = ConditionalBranch : r35_13943 #-----| False -> Block 996 #-----| True -> Block 1026 -# 3007| Block 996 -# 3007| r3007_1(glval) = VariableAddress[x996] : -# 3007| mu3007_2(String) = Uninitialized[x996] : &:r3007_1 -# 3007| r3007_3(glval) = FunctionAddress[String] : -# 3007| v3007_4(void) = Call[String] : func:r3007_3, this:r3007_1 -# 3007| mu3007_5(unknown) = ^CallSideEffect : ~m? -# 3007| mu3007_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3007_1 -# 3008| r3008_1(glval) = VariableAddress[x996] : -# 3008| r3008_2(glval) = FunctionAddress[~String] : -# 3008| v3008_3(void) = Call[~String] : func:r3008_2, this:r3008_1 -# 3008| mu3008_4(unknown) = ^CallSideEffect : ~m? -# 3008| v3008_5(void) = ^IndirectReadSideEffect[-1] : &:r3008_1, ~m? -# 3008| mu3008_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3008_1 -# 3008| r3008_7(bool) = Constant[0] : -# 3008| v3008_8(void) = ConditionalBranch : r3008_7 +# 35| Block 996 +# 35| r35_13945(glval) = VariableAddress[x996] : +# 35| mu35_13946(String) = Uninitialized[x996] : &:r35_13945 +# 35| r35_13947(glval) = FunctionAddress[String] : +# 35| v35_13948(void) = Call[String] : func:r35_13947, this:r35_13945 +# 35| mu35_13949(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13945 +# 35| r35_13951(glval) = VariableAddress[x996] : +# 35| r35_13952(glval) = FunctionAddress[~String] : +# 35| v35_13953(void) = Call[~String] : func:r35_13952, this:r35_13951 +# 35| mu35_13954(unknown) = ^CallSideEffect : ~m? +# 35| v35_13955(void) = ^IndirectReadSideEffect[-1] : &:r35_13951, ~m? +# 35| mu35_13956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13951 +# 35| r35_13957(bool) = Constant[0] : +# 35| v35_13958(void) = ConditionalBranch : r35_13957 #-----| False -> Block 997 #-----| True -> Block 1026 -# 3010| Block 997 -# 3010| r3010_1(glval) = VariableAddress[x997] : -# 3010| mu3010_2(String) = Uninitialized[x997] : &:r3010_1 -# 3010| r3010_3(glval) = FunctionAddress[String] : -# 3010| v3010_4(void) = Call[String] : func:r3010_3, this:r3010_1 -# 3010| mu3010_5(unknown) = ^CallSideEffect : ~m? -# 3010| mu3010_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3010_1 -# 3011| r3011_1(glval) = VariableAddress[x997] : -# 3011| r3011_2(glval) = FunctionAddress[~String] : -# 3011| v3011_3(void) = Call[~String] : func:r3011_2, this:r3011_1 -# 3011| mu3011_4(unknown) = ^CallSideEffect : ~m? -# 3011| v3011_5(void) = ^IndirectReadSideEffect[-1] : &:r3011_1, ~m? -# 3011| mu3011_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3011_1 -# 3011| r3011_7(bool) = Constant[0] : -# 3011| v3011_8(void) = ConditionalBranch : r3011_7 +# 35| Block 997 +# 35| r35_13959(glval) = VariableAddress[x997] : +# 35| mu35_13960(String) = Uninitialized[x997] : &:r35_13959 +# 35| r35_13961(glval) = FunctionAddress[String] : +# 35| v35_13962(void) = Call[String] : func:r35_13961, this:r35_13959 +# 35| mu35_13963(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13959 +# 35| r35_13965(glval) = VariableAddress[x997] : +# 35| r35_13966(glval) = FunctionAddress[~String] : +# 35| v35_13967(void) = Call[~String] : func:r35_13966, this:r35_13965 +# 35| mu35_13968(unknown) = ^CallSideEffect : ~m? +# 35| v35_13969(void) = ^IndirectReadSideEffect[-1] : &:r35_13965, ~m? +# 35| mu35_13970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13965 +# 35| r35_13971(bool) = Constant[0] : +# 35| v35_13972(void) = ConditionalBranch : r35_13971 #-----| False -> Block 998 #-----| True -> Block 1026 -# 3013| Block 998 -# 3013| r3013_1(glval) = VariableAddress[x998] : -# 3013| mu3013_2(String) = Uninitialized[x998] : &:r3013_1 -# 3013| r3013_3(glval) = FunctionAddress[String] : -# 3013| v3013_4(void) = Call[String] : func:r3013_3, this:r3013_1 -# 3013| mu3013_5(unknown) = ^CallSideEffect : ~m? -# 3013| mu3013_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3013_1 -# 3014| r3014_1(glval) = VariableAddress[x998] : -# 3014| r3014_2(glval) = FunctionAddress[~String] : -# 3014| v3014_3(void) = Call[~String] : func:r3014_2, this:r3014_1 -# 3014| mu3014_4(unknown) = ^CallSideEffect : ~m? -# 3014| v3014_5(void) = ^IndirectReadSideEffect[-1] : &:r3014_1, ~m? -# 3014| mu3014_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3014_1 -# 3014| r3014_7(bool) = Constant[0] : -# 3014| v3014_8(void) = ConditionalBranch : r3014_7 +# 35| Block 998 +# 35| r35_13973(glval) = VariableAddress[x998] : +# 35| mu35_13974(String) = Uninitialized[x998] : &:r35_13973 +# 35| r35_13975(glval) = FunctionAddress[String] : +# 35| v35_13976(void) = Call[String] : func:r35_13975, this:r35_13973 +# 35| mu35_13977(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13973 +# 35| r35_13979(glval) = VariableAddress[x998] : +# 35| r35_13980(glval) = FunctionAddress[~String] : +# 35| v35_13981(void) = Call[~String] : func:r35_13980, this:r35_13979 +# 35| mu35_13982(unknown) = ^CallSideEffect : ~m? +# 35| v35_13983(void) = ^IndirectReadSideEffect[-1] : &:r35_13979, ~m? +# 35| mu35_13984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13979 +# 35| r35_13985(bool) = Constant[0] : +# 35| v35_13986(void) = ConditionalBranch : r35_13985 #-----| False -> Block 999 #-----| True -> Block 1026 -# 3016| Block 999 -# 3016| r3016_1(glval) = VariableAddress[x999] : -# 3016| mu3016_2(String) = Uninitialized[x999] : &:r3016_1 -# 3016| r3016_3(glval) = FunctionAddress[String] : -# 3016| v3016_4(void) = Call[String] : func:r3016_3, this:r3016_1 -# 3016| mu3016_5(unknown) = ^CallSideEffect : ~m? -# 3016| mu3016_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3016_1 -# 3017| r3017_1(glval) = VariableAddress[x999] : -# 3017| r3017_2(glval) = FunctionAddress[~String] : -# 3017| v3017_3(void) = Call[~String] : func:r3017_2, this:r3017_1 -# 3017| mu3017_4(unknown) = ^CallSideEffect : ~m? -# 3017| v3017_5(void) = ^IndirectReadSideEffect[-1] : &:r3017_1, ~m? -# 3017| mu3017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3017_1 -# 3017| r3017_7(bool) = Constant[0] : -# 3017| v3017_8(void) = ConditionalBranch : r3017_7 +# 35| Block 999 +# 35| r35_13987(glval) = VariableAddress[x999] : +# 35| mu35_13988(String) = Uninitialized[x999] : &:r35_13987 +# 35| r35_13989(glval) = FunctionAddress[String] : +# 35| v35_13990(void) = Call[String] : func:r35_13989, this:r35_13987 +# 35| mu35_13991(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13987 +# 35| r35_13993(glval) = VariableAddress[x999] : +# 35| r35_13994(glval) = FunctionAddress[~String] : +# 35| v35_13995(void) = Call[~String] : func:r35_13994, this:r35_13993 +# 35| mu35_13996(unknown) = ^CallSideEffect : ~m? +# 35| v35_13997(void) = ^IndirectReadSideEffect[-1] : &:r35_13993, ~m? +# 35| mu35_13998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13993 +# 35| r35_13999(bool) = Constant[0] : +# 35| v35_14000(void) = ConditionalBranch : r35_13999 #-----| False -> Block 1000 #-----| True -> Block 1026 -# 3019| Block 1000 -# 3019| r3019_1(glval) = VariableAddress[x1000] : -# 3019| mu3019_2(String) = Uninitialized[x1000] : &:r3019_1 -# 3019| r3019_3(glval) = FunctionAddress[String] : -# 3019| v3019_4(void) = Call[String] : func:r3019_3, this:r3019_1 -# 3019| mu3019_5(unknown) = ^CallSideEffect : ~m? -# 3019| mu3019_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3019_1 -# 3020| r3020_1(glval) = VariableAddress[x1000] : -# 3020| r3020_2(glval) = FunctionAddress[~String] : -# 3020| v3020_3(void) = Call[~String] : func:r3020_2, this:r3020_1 -# 3020| mu3020_4(unknown) = ^CallSideEffect : ~m? -# 3020| v3020_5(void) = ^IndirectReadSideEffect[-1] : &:r3020_1, ~m? -# 3020| mu3020_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3020_1 -# 3020| r3020_7(bool) = Constant[0] : -# 3020| v3020_8(void) = ConditionalBranch : r3020_7 +# 35| Block 1000 +# 35| r35_14001(glval) = VariableAddress[x1000] : +# 35| mu35_14002(String) = Uninitialized[x1000] : &:r35_14001 +# 35| r35_14003(glval) = FunctionAddress[String] : +# 35| v35_14004(void) = Call[String] : func:r35_14003, this:r35_14001 +# 35| mu35_14005(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14001 +# 35| r35_14007(glval) = VariableAddress[x1000] : +# 35| r35_14008(glval) = FunctionAddress[~String] : +# 35| v35_14009(void) = Call[~String] : func:r35_14008, this:r35_14007 +# 35| mu35_14010(unknown) = ^CallSideEffect : ~m? +# 35| v35_14011(void) = ^IndirectReadSideEffect[-1] : &:r35_14007, ~m? +# 35| mu35_14012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14007 +# 35| r35_14013(bool) = Constant[0] : +# 35| v35_14014(void) = ConditionalBranch : r35_14013 #-----| False -> Block 1001 #-----| True -> Block 1026 -# 3022| Block 1001 -# 3022| r3022_1(glval) = VariableAddress[x1001] : -# 3022| mu3022_2(String) = Uninitialized[x1001] : &:r3022_1 -# 3022| r3022_3(glval) = FunctionAddress[String] : -# 3022| v3022_4(void) = Call[String] : func:r3022_3, this:r3022_1 -# 3022| mu3022_5(unknown) = ^CallSideEffect : ~m? -# 3022| mu3022_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3022_1 -# 3023| r3023_1(glval) = VariableAddress[x1001] : -# 3023| r3023_2(glval) = FunctionAddress[~String] : -# 3023| v3023_3(void) = Call[~String] : func:r3023_2, this:r3023_1 -# 3023| mu3023_4(unknown) = ^CallSideEffect : ~m? -# 3023| v3023_5(void) = ^IndirectReadSideEffect[-1] : &:r3023_1, ~m? -# 3023| mu3023_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3023_1 -# 3023| r3023_7(bool) = Constant[0] : -# 3023| v3023_8(void) = ConditionalBranch : r3023_7 +# 35| Block 1001 +# 35| r35_14015(glval) = VariableAddress[x1001] : +# 35| mu35_14016(String) = Uninitialized[x1001] : &:r35_14015 +# 35| r35_14017(glval) = FunctionAddress[String] : +# 35| v35_14018(void) = Call[String] : func:r35_14017, this:r35_14015 +# 35| mu35_14019(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14015 +# 35| r35_14021(glval) = VariableAddress[x1001] : +# 35| r35_14022(glval) = FunctionAddress[~String] : +# 35| v35_14023(void) = Call[~String] : func:r35_14022, this:r35_14021 +# 35| mu35_14024(unknown) = ^CallSideEffect : ~m? +# 35| v35_14025(void) = ^IndirectReadSideEffect[-1] : &:r35_14021, ~m? +# 35| mu35_14026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14021 +# 35| r35_14027(bool) = Constant[0] : +# 35| v35_14028(void) = ConditionalBranch : r35_14027 #-----| False -> Block 1002 #-----| True -> Block 1026 -# 3025| Block 1002 -# 3025| r3025_1(glval) = VariableAddress[x1002] : -# 3025| mu3025_2(String) = Uninitialized[x1002] : &:r3025_1 -# 3025| r3025_3(glval) = FunctionAddress[String] : -# 3025| v3025_4(void) = Call[String] : func:r3025_3, this:r3025_1 -# 3025| mu3025_5(unknown) = ^CallSideEffect : ~m? -# 3025| mu3025_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3025_1 -# 3026| r3026_1(glval) = VariableAddress[x1002] : -# 3026| r3026_2(glval) = FunctionAddress[~String] : -# 3026| v3026_3(void) = Call[~String] : func:r3026_2, this:r3026_1 -# 3026| mu3026_4(unknown) = ^CallSideEffect : ~m? -# 3026| v3026_5(void) = ^IndirectReadSideEffect[-1] : &:r3026_1, ~m? -# 3026| mu3026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3026_1 -# 3026| r3026_7(bool) = Constant[0] : -# 3026| v3026_8(void) = ConditionalBranch : r3026_7 +# 35| Block 1002 +# 35| r35_14029(glval) = VariableAddress[x1002] : +# 35| mu35_14030(String) = Uninitialized[x1002] : &:r35_14029 +# 35| r35_14031(glval) = FunctionAddress[String] : +# 35| v35_14032(void) = Call[String] : func:r35_14031, this:r35_14029 +# 35| mu35_14033(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14029 +# 35| r35_14035(glval) = VariableAddress[x1002] : +# 35| r35_14036(glval) = FunctionAddress[~String] : +# 35| v35_14037(void) = Call[~String] : func:r35_14036, this:r35_14035 +# 35| mu35_14038(unknown) = ^CallSideEffect : ~m? +# 35| v35_14039(void) = ^IndirectReadSideEffect[-1] : &:r35_14035, ~m? +# 35| mu35_14040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14035 +# 35| r35_14041(bool) = Constant[0] : +# 35| v35_14042(void) = ConditionalBranch : r35_14041 #-----| False -> Block 1003 #-----| True -> Block 1026 -# 3028| Block 1003 -# 3028| r3028_1(glval) = VariableAddress[x1003] : -# 3028| mu3028_2(String) = Uninitialized[x1003] : &:r3028_1 -# 3028| r3028_3(glval) = FunctionAddress[String] : -# 3028| v3028_4(void) = Call[String] : func:r3028_3, this:r3028_1 -# 3028| mu3028_5(unknown) = ^CallSideEffect : ~m? -# 3028| mu3028_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3028_1 -# 3029| r3029_1(glval) = VariableAddress[x1003] : -# 3029| r3029_2(glval) = FunctionAddress[~String] : -# 3029| v3029_3(void) = Call[~String] : func:r3029_2, this:r3029_1 -# 3029| mu3029_4(unknown) = ^CallSideEffect : ~m? -# 3029| v3029_5(void) = ^IndirectReadSideEffect[-1] : &:r3029_1, ~m? -# 3029| mu3029_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3029_1 -# 3029| r3029_7(bool) = Constant[0] : -# 3029| v3029_8(void) = ConditionalBranch : r3029_7 +# 35| Block 1003 +# 35| r35_14043(glval) = VariableAddress[x1003] : +# 35| mu35_14044(String) = Uninitialized[x1003] : &:r35_14043 +# 35| r35_14045(glval) = FunctionAddress[String] : +# 35| v35_14046(void) = Call[String] : func:r35_14045, this:r35_14043 +# 35| mu35_14047(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14043 +# 35| r35_14049(glval) = VariableAddress[x1003] : +# 35| r35_14050(glval) = FunctionAddress[~String] : +# 35| v35_14051(void) = Call[~String] : func:r35_14050, this:r35_14049 +# 35| mu35_14052(unknown) = ^CallSideEffect : ~m? +# 35| v35_14053(void) = ^IndirectReadSideEffect[-1] : &:r35_14049, ~m? +# 35| mu35_14054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14049 +# 35| r35_14055(bool) = Constant[0] : +# 35| v35_14056(void) = ConditionalBranch : r35_14055 #-----| False -> Block 1004 #-----| True -> Block 1026 -# 3031| Block 1004 -# 3031| r3031_1(glval) = VariableAddress[x1004] : -# 3031| mu3031_2(String) = Uninitialized[x1004] : &:r3031_1 -# 3031| r3031_3(glval) = FunctionAddress[String] : -# 3031| v3031_4(void) = Call[String] : func:r3031_3, this:r3031_1 -# 3031| mu3031_5(unknown) = ^CallSideEffect : ~m? -# 3031| mu3031_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3031_1 -# 3032| r3032_1(glval) = VariableAddress[x1004] : -# 3032| r3032_2(glval) = FunctionAddress[~String] : -# 3032| v3032_3(void) = Call[~String] : func:r3032_2, this:r3032_1 -# 3032| mu3032_4(unknown) = ^CallSideEffect : ~m? -# 3032| v3032_5(void) = ^IndirectReadSideEffect[-1] : &:r3032_1, ~m? -# 3032| mu3032_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3032_1 -# 3032| r3032_7(bool) = Constant[0] : -# 3032| v3032_8(void) = ConditionalBranch : r3032_7 +# 35| Block 1004 +# 35| r35_14057(glval) = VariableAddress[x1004] : +# 35| mu35_14058(String) = Uninitialized[x1004] : &:r35_14057 +# 35| r35_14059(glval) = FunctionAddress[String] : +# 35| v35_14060(void) = Call[String] : func:r35_14059, this:r35_14057 +# 35| mu35_14061(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14057 +# 35| r35_14063(glval) = VariableAddress[x1004] : +# 35| r35_14064(glval) = FunctionAddress[~String] : +# 35| v35_14065(void) = Call[~String] : func:r35_14064, this:r35_14063 +# 35| mu35_14066(unknown) = ^CallSideEffect : ~m? +# 35| v35_14067(void) = ^IndirectReadSideEffect[-1] : &:r35_14063, ~m? +# 35| mu35_14068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14063 +# 35| r35_14069(bool) = Constant[0] : +# 35| v35_14070(void) = ConditionalBranch : r35_14069 #-----| False -> Block 1005 #-----| True -> Block 1026 -# 3034| Block 1005 -# 3034| r3034_1(glval) = VariableAddress[x1005] : -# 3034| mu3034_2(String) = Uninitialized[x1005] : &:r3034_1 -# 3034| r3034_3(glval) = FunctionAddress[String] : -# 3034| v3034_4(void) = Call[String] : func:r3034_3, this:r3034_1 -# 3034| mu3034_5(unknown) = ^CallSideEffect : ~m? -# 3034| mu3034_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3034_1 -# 3035| r3035_1(glval) = VariableAddress[x1005] : -# 3035| r3035_2(glval) = FunctionAddress[~String] : -# 3035| v3035_3(void) = Call[~String] : func:r3035_2, this:r3035_1 -# 3035| mu3035_4(unknown) = ^CallSideEffect : ~m? -# 3035| v3035_5(void) = ^IndirectReadSideEffect[-1] : &:r3035_1, ~m? -# 3035| mu3035_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3035_1 -# 3035| r3035_7(bool) = Constant[0] : -# 3035| v3035_8(void) = ConditionalBranch : r3035_7 +# 35| Block 1005 +# 35| r35_14071(glval) = VariableAddress[x1005] : +# 35| mu35_14072(String) = Uninitialized[x1005] : &:r35_14071 +# 35| r35_14073(glval) = FunctionAddress[String] : +# 35| v35_14074(void) = Call[String] : func:r35_14073, this:r35_14071 +# 35| mu35_14075(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14071 +# 35| r35_14077(glval) = VariableAddress[x1005] : +# 35| r35_14078(glval) = FunctionAddress[~String] : +# 35| v35_14079(void) = Call[~String] : func:r35_14078, this:r35_14077 +# 35| mu35_14080(unknown) = ^CallSideEffect : ~m? +# 35| v35_14081(void) = ^IndirectReadSideEffect[-1] : &:r35_14077, ~m? +# 35| mu35_14082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14077 +# 35| r35_14083(bool) = Constant[0] : +# 35| v35_14084(void) = ConditionalBranch : r35_14083 #-----| False -> Block 1006 #-----| True -> Block 1026 -# 3037| Block 1006 -# 3037| r3037_1(glval) = VariableAddress[x1006] : -# 3037| mu3037_2(String) = Uninitialized[x1006] : &:r3037_1 -# 3037| r3037_3(glval) = FunctionAddress[String] : -# 3037| v3037_4(void) = Call[String] : func:r3037_3, this:r3037_1 -# 3037| mu3037_5(unknown) = ^CallSideEffect : ~m? -# 3037| mu3037_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3037_1 -# 3038| r3038_1(glval) = VariableAddress[x1006] : -# 3038| r3038_2(glval) = FunctionAddress[~String] : -# 3038| v3038_3(void) = Call[~String] : func:r3038_2, this:r3038_1 -# 3038| mu3038_4(unknown) = ^CallSideEffect : ~m? -# 3038| v3038_5(void) = ^IndirectReadSideEffect[-1] : &:r3038_1, ~m? -# 3038| mu3038_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3038_1 -# 3038| r3038_7(bool) = Constant[0] : -# 3038| v3038_8(void) = ConditionalBranch : r3038_7 +# 35| Block 1006 +# 35| r35_14085(glval) = VariableAddress[x1006] : +# 35| mu35_14086(String) = Uninitialized[x1006] : &:r35_14085 +# 35| r35_14087(glval) = FunctionAddress[String] : +# 35| v35_14088(void) = Call[String] : func:r35_14087, this:r35_14085 +# 35| mu35_14089(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14085 +# 35| r35_14091(glval) = VariableAddress[x1006] : +# 35| r35_14092(glval) = FunctionAddress[~String] : +# 35| v35_14093(void) = Call[~String] : func:r35_14092, this:r35_14091 +# 35| mu35_14094(unknown) = ^CallSideEffect : ~m? +# 35| v35_14095(void) = ^IndirectReadSideEffect[-1] : &:r35_14091, ~m? +# 35| mu35_14096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14091 +# 35| r35_14097(bool) = Constant[0] : +# 35| v35_14098(void) = ConditionalBranch : r35_14097 #-----| False -> Block 1007 #-----| True -> Block 1026 -# 3040| Block 1007 -# 3040| r3040_1(glval) = VariableAddress[x1007] : -# 3040| mu3040_2(String) = Uninitialized[x1007] : &:r3040_1 -# 3040| r3040_3(glval) = FunctionAddress[String] : -# 3040| v3040_4(void) = Call[String] : func:r3040_3, this:r3040_1 -# 3040| mu3040_5(unknown) = ^CallSideEffect : ~m? -# 3040| mu3040_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3040_1 -# 3041| r3041_1(glval) = VariableAddress[x1007] : -# 3041| r3041_2(glval) = FunctionAddress[~String] : -# 3041| v3041_3(void) = Call[~String] : func:r3041_2, this:r3041_1 -# 3041| mu3041_4(unknown) = ^CallSideEffect : ~m? -# 3041| v3041_5(void) = ^IndirectReadSideEffect[-1] : &:r3041_1, ~m? -# 3041| mu3041_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3041_1 -# 3041| r3041_7(bool) = Constant[0] : -# 3041| v3041_8(void) = ConditionalBranch : r3041_7 +# 35| Block 1007 +# 35| r35_14099(glval) = VariableAddress[x1007] : +# 35| mu35_14100(String) = Uninitialized[x1007] : &:r35_14099 +# 35| r35_14101(glval) = FunctionAddress[String] : +# 35| v35_14102(void) = Call[String] : func:r35_14101, this:r35_14099 +# 35| mu35_14103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14099 +# 35| r35_14105(glval) = VariableAddress[x1007] : +# 35| r35_14106(glval) = FunctionAddress[~String] : +# 35| v35_14107(void) = Call[~String] : func:r35_14106, this:r35_14105 +# 35| mu35_14108(unknown) = ^CallSideEffect : ~m? +# 35| v35_14109(void) = ^IndirectReadSideEffect[-1] : &:r35_14105, ~m? +# 35| mu35_14110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14105 +# 35| r35_14111(bool) = Constant[0] : +# 35| v35_14112(void) = ConditionalBranch : r35_14111 #-----| False -> Block 1008 #-----| True -> Block 1026 -# 3043| Block 1008 -# 3043| r3043_1(glval) = VariableAddress[x1008] : -# 3043| mu3043_2(String) = Uninitialized[x1008] : &:r3043_1 -# 3043| r3043_3(glval) = FunctionAddress[String] : -# 3043| v3043_4(void) = Call[String] : func:r3043_3, this:r3043_1 -# 3043| mu3043_5(unknown) = ^CallSideEffect : ~m? -# 3043| mu3043_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3043_1 -# 3044| r3044_1(glval) = VariableAddress[x1008] : -# 3044| r3044_2(glval) = FunctionAddress[~String] : -# 3044| v3044_3(void) = Call[~String] : func:r3044_2, this:r3044_1 -# 3044| mu3044_4(unknown) = ^CallSideEffect : ~m? -# 3044| v3044_5(void) = ^IndirectReadSideEffect[-1] : &:r3044_1, ~m? -# 3044| mu3044_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3044_1 -# 3044| r3044_7(bool) = Constant[0] : -# 3044| v3044_8(void) = ConditionalBranch : r3044_7 +# 35| Block 1008 +# 35| r35_14113(glval) = VariableAddress[x1008] : +# 35| mu35_14114(String) = Uninitialized[x1008] : &:r35_14113 +# 35| r35_14115(glval) = FunctionAddress[String] : +# 35| v35_14116(void) = Call[String] : func:r35_14115, this:r35_14113 +# 35| mu35_14117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14113 +# 35| r35_14119(glval) = VariableAddress[x1008] : +# 35| r35_14120(glval) = FunctionAddress[~String] : +# 35| v35_14121(void) = Call[~String] : func:r35_14120, this:r35_14119 +# 35| mu35_14122(unknown) = ^CallSideEffect : ~m? +# 35| v35_14123(void) = ^IndirectReadSideEffect[-1] : &:r35_14119, ~m? +# 35| mu35_14124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14119 +# 35| r35_14125(bool) = Constant[0] : +# 35| v35_14126(void) = ConditionalBranch : r35_14125 #-----| False -> Block 1009 #-----| True -> Block 1026 -# 3046| Block 1009 -# 3046| r3046_1(glval) = VariableAddress[x1009] : -# 3046| mu3046_2(String) = Uninitialized[x1009] : &:r3046_1 -# 3046| r3046_3(glval) = FunctionAddress[String] : -# 3046| v3046_4(void) = Call[String] : func:r3046_3, this:r3046_1 -# 3046| mu3046_5(unknown) = ^CallSideEffect : ~m? -# 3046| mu3046_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3046_1 -# 3047| r3047_1(glval) = VariableAddress[x1009] : -# 3047| r3047_2(glval) = FunctionAddress[~String] : -# 3047| v3047_3(void) = Call[~String] : func:r3047_2, this:r3047_1 -# 3047| mu3047_4(unknown) = ^CallSideEffect : ~m? -# 3047| v3047_5(void) = ^IndirectReadSideEffect[-1] : &:r3047_1, ~m? -# 3047| mu3047_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3047_1 -# 3047| r3047_7(bool) = Constant[0] : -# 3047| v3047_8(void) = ConditionalBranch : r3047_7 +# 35| Block 1009 +# 35| r35_14127(glval) = VariableAddress[x1009] : +# 35| mu35_14128(String) = Uninitialized[x1009] : &:r35_14127 +# 35| r35_14129(glval) = FunctionAddress[String] : +# 35| v35_14130(void) = Call[String] : func:r35_14129, this:r35_14127 +# 35| mu35_14131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14127 +# 35| r35_14133(glval) = VariableAddress[x1009] : +# 35| r35_14134(glval) = FunctionAddress[~String] : +# 35| v35_14135(void) = Call[~String] : func:r35_14134, this:r35_14133 +# 35| mu35_14136(unknown) = ^CallSideEffect : ~m? +# 35| v35_14137(void) = ^IndirectReadSideEffect[-1] : &:r35_14133, ~m? +# 35| mu35_14138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14133 +# 35| r35_14139(bool) = Constant[0] : +# 35| v35_14140(void) = ConditionalBranch : r35_14139 #-----| False -> Block 1010 #-----| True -> Block 1026 -# 3049| Block 1010 -# 3049| r3049_1(glval) = VariableAddress[x1010] : -# 3049| mu3049_2(String) = Uninitialized[x1010] : &:r3049_1 -# 3049| r3049_3(glval) = FunctionAddress[String] : -# 3049| v3049_4(void) = Call[String] : func:r3049_3, this:r3049_1 -# 3049| mu3049_5(unknown) = ^CallSideEffect : ~m? -# 3049| mu3049_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3049_1 -# 3050| r3050_1(glval) = VariableAddress[x1010] : -# 3050| r3050_2(glval) = FunctionAddress[~String] : -# 3050| v3050_3(void) = Call[~String] : func:r3050_2, this:r3050_1 -# 3050| mu3050_4(unknown) = ^CallSideEffect : ~m? -# 3050| v3050_5(void) = ^IndirectReadSideEffect[-1] : &:r3050_1, ~m? -# 3050| mu3050_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3050_1 -# 3050| r3050_7(bool) = Constant[0] : -# 3050| v3050_8(void) = ConditionalBranch : r3050_7 +# 35| Block 1010 +# 35| r35_14141(glval) = VariableAddress[x1010] : +# 35| mu35_14142(String) = Uninitialized[x1010] : &:r35_14141 +# 35| r35_14143(glval) = FunctionAddress[String] : +# 35| v35_14144(void) = Call[String] : func:r35_14143, this:r35_14141 +# 35| mu35_14145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14141 +# 35| r35_14147(glval) = VariableAddress[x1010] : +# 35| r35_14148(glval) = FunctionAddress[~String] : +# 35| v35_14149(void) = Call[~String] : func:r35_14148, this:r35_14147 +# 35| mu35_14150(unknown) = ^CallSideEffect : ~m? +# 35| v35_14151(void) = ^IndirectReadSideEffect[-1] : &:r35_14147, ~m? +# 35| mu35_14152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14147 +# 35| r35_14153(bool) = Constant[0] : +# 35| v35_14154(void) = ConditionalBranch : r35_14153 #-----| False -> Block 1011 #-----| True -> Block 1026 -# 3052| Block 1011 -# 3052| r3052_1(glval) = VariableAddress[x1011] : -# 3052| mu3052_2(String) = Uninitialized[x1011] : &:r3052_1 -# 3052| r3052_3(glval) = FunctionAddress[String] : -# 3052| v3052_4(void) = Call[String] : func:r3052_3, this:r3052_1 -# 3052| mu3052_5(unknown) = ^CallSideEffect : ~m? -# 3052| mu3052_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3052_1 -# 3053| r3053_1(glval) = VariableAddress[x1011] : -# 3053| r3053_2(glval) = FunctionAddress[~String] : -# 3053| v3053_3(void) = Call[~String] : func:r3053_2, this:r3053_1 -# 3053| mu3053_4(unknown) = ^CallSideEffect : ~m? -# 3053| v3053_5(void) = ^IndirectReadSideEffect[-1] : &:r3053_1, ~m? -# 3053| mu3053_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3053_1 -# 3053| r3053_7(bool) = Constant[0] : -# 3053| v3053_8(void) = ConditionalBranch : r3053_7 +# 35| Block 1011 +# 35| r35_14155(glval) = VariableAddress[x1011] : +# 35| mu35_14156(String) = Uninitialized[x1011] : &:r35_14155 +# 35| r35_14157(glval) = FunctionAddress[String] : +# 35| v35_14158(void) = Call[String] : func:r35_14157, this:r35_14155 +# 35| mu35_14159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14155 +# 35| r35_14161(glval) = VariableAddress[x1011] : +# 35| r35_14162(glval) = FunctionAddress[~String] : +# 35| v35_14163(void) = Call[~String] : func:r35_14162, this:r35_14161 +# 35| mu35_14164(unknown) = ^CallSideEffect : ~m? +# 35| v35_14165(void) = ^IndirectReadSideEffect[-1] : &:r35_14161, ~m? +# 35| mu35_14166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14161 +# 35| r35_14167(bool) = Constant[0] : +# 35| v35_14168(void) = ConditionalBranch : r35_14167 #-----| False -> Block 1012 #-----| True -> Block 1026 -# 3055| Block 1012 -# 3055| r3055_1(glval) = VariableAddress[x1012] : -# 3055| mu3055_2(String) = Uninitialized[x1012] : &:r3055_1 -# 3055| r3055_3(glval) = FunctionAddress[String] : -# 3055| v3055_4(void) = Call[String] : func:r3055_3, this:r3055_1 -# 3055| mu3055_5(unknown) = ^CallSideEffect : ~m? -# 3055| mu3055_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3055_1 -# 3056| r3056_1(glval) = VariableAddress[x1012] : -# 3056| r3056_2(glval) = FunctionAddress[~String] : -# 3056| v3056_3(void) = Call[~String] : func:r3056_2, this:r3056_1 -# 3056| mu3056_4(unknown) = ^CallSideEffect : ~m? -# 3056| v3056_5(void) = ^IndirectReadSideEffect[-1] : &:r3056_1, ~m? -# 3056| mu3056_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3056_1 -# 3056| r3056_7(bool) = Constant[0] : -# 3056| v3056_8(void) = ConditionalBranch : r3056_7 +# 35| Block 1012 +# 35| r35_14169(glval) = VariableAddress[x1012] : +# 35| mu35_14170(String) = Uninitialized[x1012] : &:r35_14169 +# 35| r35_14171(glval) = FunctionAddress[String] : +# 35| v35_14172(void) = Call[String] : func:r35_14171, this:r35_14169 +# 35| mu35_14173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14169 +# 35| r35_14175(glval) = VariableAddress[x1012] : +# 35| r35_14176(glval) = FunctionAddress[~String] : +# 35| v35_14177(void) = Call[~String] : func:r35_14176, this:r35_14175 +# 35| mu35_14178(unknown) = ^CallSideEffect : ~m? +# 35| v35_14179(void) = ^IndirectReadSideEffect[-1] : &:r35_14175, ~m? +# 35| mu35_14180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14175 +# 35| r35_14181(bool) = Constant[0] : +# 35| v35_14182(void) = ConditionalBranch : r35_14181 #-----| False -> Block 1013 #-----| True -> Block 1026 -# 3058| Block 1013 -# 3058| r3058_1(glval) = VariableAddress[x1013] : -# 3058| mu3058_2(String) = Uninitialized[x1013] : &:r3058_1 -# 3058| r3058_3(glval) = FunctionAddress[String] : -# 3058| v3058_4(void) = Call[String] : func:r3058_3, this:r3058_1 -# 3058| mu3058_5(unknown) = ^CallSideEffect : ~m? -# 3058| mu3058_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3058_1 -# 3059| r3059_1(glval) = VariableAddress[x1013] : -# 3059| r3059_2(glval) = FunctionAddress[~String] : -# 3059| v3059_3(void) = Call[~String] : func:r3059_2, this:r3059_1 -# 3059| mu3059_4(unknown) = ^CallSideEffect : ~m? -# 3059| v3059_5(void) = ^IndirectReadSideEffect[-1] : &:r3059_1, ~m? -# 3059| mu3059_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3059_1 -# 3059| r3059_7(bool) = Constant[0] : -# 3059| v3059_8(void) = ConditionalBranch : r3059_7 +# 35| Block 1013 +# 35| r35_14183(glval) = VariableAddress[x1013] : +# 35| mu35_14184(String) = Uninitialized[x1013] : &:r35_14183 +# 35| r35_14185(glval) = FunctionAddress[String] : +# 35| v35_14186(void) = Call[String] : func:r35_14185, this:r35_14183 +# 35| mu35_14187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14183 +# 35| r35_14189(glval) = VariableAddress[x1013] : +# 35| r35_14190(glval) = FunctionAddress[~String] : +# 35| v35_14191(void) = Call[~String] : func:r35_14190, this:r35_14189 +# 35| mu35_14192(unknown) = ^CallSideEffect : ~m? +# 35| v35_14193(void) = ^IndirectReadSideEffect[-1] : &:r35_14189, ~m? +# 35| mu35_14194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14189 +# 35| r35_14195(bool) = Constant[0] : +# 35| v35_14196(void) = ConditionalBranch : r35_14195 #-----| False -> Block 1014 #-----| True -> Block 1026 -# 3061| Block 1014 -# 3061| r3061_1(glval) = VariableAddress[x1014] : -# 3061| mu3061_2(String) = Uninitialized[x1014] : &:r3061_1 -# 3061| r3061_3(glval) = FunctionAddress[String] : -# 3061| v3061_4(void) = Call[String] : func:r3061_3, this:r3061_1 -# 3061| mu3061_5(unknown) = ^CallSideEffect : ~m? -# 3061| mu3061_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3061_1 -# 3062| r3062_1(glval) = VariableAddress[x1014] : -# 3062| r3062_2(glval) = FunctionAddress[~String] : -# 3062| v3062_3(void) = Call[~String] : func:r3062_2, this:r3062_1 -# 3062| mu3062_4(unknown) = ^CallSideEffect : ~m? -# 3062| v3062_5(void) = ^IndirectReadSideEffect[-1] : &:r3062_1, ~m? -# 3062| mu3062_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3062_1 -# 3062| r3062_7(bool) = Constant[0] : -# 3062| v3062_8(void) = ConditionalBranch : r3062_7 +# 35| Block 1014 +# 35| r35_14197(glval) = VariableAddress[x1014] : +# 35| mu35_14198(String) = Uninitialized[x1014] : &:r35_14197 +# 35| r35_14199(glval) = FunctionAddress[String] : +# 35| v35_14200(void) = Call[String] : func:r35_14199, this:r35_14197 +# 35| mu35_14201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14197 +# 35| r35_14203(glval) = VariableAddress[x1014] : +# 35| r35_14204(glval) = FunctionAddress[~String] : +# 35| v35_14205(void) = Call[~String] : func:r35_14204, this:r35_14203 +# 35| mu35_14206(unknown) = ^CallSideEffect : ~m? +# 35| v35_14207(void) = ^IndirectReadSideEffect[-1] : &:r35_14203, ~m? +# 35| mu35_14208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14203 +# 35| r35_14209(bool) = Constant[0] : +# 35| v35_14210(void) = ConditionalBranch : r35_14209 #-----| False -> Block 1015 #-----| True -> Block 1026 -# 3064| Block 1015 -# 3064| r3064_1(glval) = VariableAddress[x1015] : -# 3064| mu3064_2(String) = Uninitialized[x1015] : &:r3064_1 -# 3064| r3064_3(glval) = FunctionAddress[String] : -# 3064| v3064_4(void) = Call[String] : func:r3064_3, this:r3064_1 -# 3064| mu3064_5(unknown) = ^CallSideEffect : ~m? -# 3064| mu3064_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3064_1 -# 3065| r3065_1(glval) = VariableAddress[x1015] : -# 3065| r3065_2(glval) = FunctionAddress[~String] : -# 3065| v3065_3(void) = Call[~String] : func:r3065_2, this:r3065_1 -# 3065| mu3065_4(unknown) = ^CallSideEffect : ~m? -# 3065| v3065_5(void) = ^IndirectReadSideEffect[-1] : &:r3065_1, ~m? -# 3065| mu3065_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3065_1 -# 3065| r3065_7(bool) = Constant[0] : -# 3065| v3065_8(void) = ConditionalBranch : r3065_7 +# 35| Block 1015 +# 35| r35_14211(glval) = VariableAddress[x1015] : +# 35| mu35_14212(String) = Uninitialized[x1015] : &:r35_14211 +# 35| r35_14213(glval) = FunctionAddress[String] : +# 35| v35_14214(void) = Call[String] : func:r35_14213, this:r35_14211 +# 35| mu35_14215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14211 +# 35| r35_14217(glval) = VariableAddress[x1015] : +# 35| r35_14218(glval) = FunctionAddress[~String] : +# 35| v35_14219(void) = Call[~String] : func:r35_14218, this:r35_14217 +# 35| mu35_14220(unknown) = ^CallSideEffect : ~m? +# 35| v35_14221(void) = ^IndirectReadSideEffect[-1] : &:r35_14217, ~m? +# 35| mu35_14222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14217 +# 35| r35_14223(bool) = Constant[0] : +# 35| v35_14224(void) = ConditionalBranch : r35_14223 #-----| False -> Block 1016 #-----| True -> Block 1026 -# 3067| Block 1016 -# 3067| r3067_1(glval) = VariableAddress[x1016] : -# 3067| mu3067_2(String) = Uninitialized[x1016] : &:r3067_1 -# 3067| r3067_3(glval) = FunctionAddress[String] : -# 3067| v3067_4(void) = Call[String] : func:r3067_3, this:r3067_1 -# 3067| mu3067_5(unknown) = ^CallSideEffect : ~m? -# 3067| mu3067_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3067_1 -# 3068| r3068_1(glval) = VariableAddress[x1016] : -# 3068| r3068_2(glval) = FunctionAddress[~String] : -# 3068| v3068_3(void) = Call[~String] : func:r3068_2, this:r3068_1 -# 3068| mu3068_4(unknown) = ^CallSideEffect : ~m? -# 3068| v3068_5(void) = ^IndirectReadSideEffect[-1] : &:r3068_1, ~m? -# 3068| mu3068_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3068_1 -# 3068| r3068_7(bool) = Constant[0] : -# 3068| v3068_8(void) = ConditionalBranch : r3068_7 +# 35| Block 1016 +# 35| r35_14225(glval) = VariableAddress[x1016] : +# 35| mu35_14226(String) = Uninitialized[x1016] : &:r35_14225 +# 35| r35_14227(glval) = FunctionAddress[String] : +# 35| v35_14228(void) = Call[String] : func:r35_14227, this:r35_14225 +# 35| mu35_14229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14225 +# 35| r35_14231(glval) = VariableAddress[x1016] : +# 35| r35_14232(glval) = FunctionAddress[~String] : +# 35| v35_14233(void) = Call[~String] : func:r35_14232, this:r35_14231 +# 35| mu35_14234(unknown) = ^CallSideEffect : ~m? +# 35| v35_14235(void) = ^IndirectReadSideEffect[-1] : &:r35_14231, ~m? +# 35| mu35_14236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14231 +# 35| r35_14237(bool) = Constant[0] : +# 35| v35_14238(void) = ConditionalBranch : r35_14237 #-----| False -> Block 1017 #-----| True -> Block 1026 -# 3070| Block 1017 -# 3070| r3070_1(glval) = VariableAddress[x1017] : -# 3070| mu3070_2(String) = Uninitialized[x1017] : &:r3070_1 -# 3070| r3070_3(glval) = FunctionAddress[String] : -# 3070| v3070_4(void) = Call[String] : func:r3070_3, this:r3070_1 -# 3070| mu3070_5(unknown) = ^CallSideEffect : ~m? -# 3070| mu3070_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3070_1 -# 3071| r3071_1(glval) = VariableAddress[x1017] : -# 3071| r3071_2(glval) = FunctionAddress[~String] : -# 3071| v3071_3(void) = Call[~String] : func:r3071_2, this:r3071_1 -# 3071| mu3071_4(unknown) = ^CallSideEffect : ~m? -# 3071| v3071_5(void) = ^IndirectReadSideEffect[-1] : &:r3071_1, ~m? -# 3071| mu3071_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3071_1 -# 3071| r3071_7(bool) = Constant[0] : -# 3071| v3071_8(void) = ConditionalBranch : r3071_7 +# 35| Block 1017 +# 35| r35_14239(glval) = VariableAddress[x1017] : +# 35| mu35_14240(String) = Uninitialized[x1017] : &:r35_14239 +# 35| r35_14241(glval) = FunctionAddress[String] : +# 35| v35_14242(void) = Call[String] : func:r35_14241, this:r35_14239 +# 35| mu35_14243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14239 +# 35| r35_14245(glval) = VariableAddress[x1017] : +# 35| r35_14246(glval) = FunctionAddress[~String] : +# 35| v35_14247(void) = Call[~String] : func:r35_14246, this:r35_14245 +# 35| mu35_14248(unknown) = ^CallSideEffect : ~m? +# 35| v35_14249(void) = ^IndirectReadSideEffect[-1] : &:r35_14245, ~m? +# 35| mu35_14250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14245 +# 35| r35_14251(bool) = Constant[0] : +# 35| v35_14252(void) = ConditionalBranch : r35_14251 #-----| False -> Block 1018 #-----| True -> Block 1026 -# 3073| Block 1018 -# 3073| r3073_1(glval) = VariableAddress[x1018] : -# 3073| mu3073_2(String) = Uninitialized[x1018] : &:r3073_1 -# 3073| r3073_3(glval) = FunctionAddress[String] : -# 3073| v3073_4(void) = Call[String] : func:r3073_3, this:r3073_1 -# 3073| mu3073_5(unknown) = ^CallSideEffect : ~m? -# 3073| mu3073_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3073_1 -# 3074| r3074_1(glval) = VariableAddress[x1018] : -# 3074| r3074_2(glval) = FunctionAddress[~String] : -# 3074| v3074_3(void) = Call[~String] : func:r3074_2, this:r3074_1 -# 3074| mu3074_4(unknown) = ^CallSideEffect : ~m? -# 3074| v3074_5(void) = ^IndirectReadSideEffect[-1] : &:r3074_1, ~m? -# 3074| mu3074_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3074_1 -# 3074| r3074_7(bool) = Constant[0] : -# 3074| v3074_8(void) = ConditionalBranch : r3074_7 +# 35| Block 1018 +# 35| r35_14253(glval) = VariableAddress[x1018] : +# 35| mu35_14254(String) = Uninitialized[x1018] : &:r35_14253 +# 35| r35_14255(glval) = FunctionAddress[String] : +# 35| v35_14256(void) = Call[String] : func:r35_14255, this:r35_14253 +# 35| mu35_14257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14253 +# 35| r35_14259(glval) = VariableAddress[x1018] : +# 35| r35_14260(glval) = FunctionAddress[~String] : +# 35| v35_14261(void) = Call[~String] : func:r35_14260, this:r35_14259 +# 35| mu35_14262(unknown) = ^CallSideEffect : ~m? +# 35| v35_14263(void) = ^IndirectReadSideEffect[-1] : &:r35_14259, ~m? +# 35| mu35_14264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14259 +# 35| r35_14265(bool) = Constant[0] : +# 35| v35_14266(void) = ConditionalBranch : r35_14265 #-----| False -> Block 1019 #-----| True -> Block 1026 -# 3076| Block 1019 -# 3076| r3076_1(glval) = VariableAddress[x1019] : -# 3076| mu3076_2(String) = Uninitialized[x1019] : &:r3076_1 -# 3076| r3076_3(glval) = FunctionAddress[String] : -# 3076| v3076_4(void) = Call[String] : func:r3076_3, this:r3076_1 -# 3076| mu3076_5(unknown) = ^CallSideEffect : ~m? -# 3076| mu3076_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3076_1 -# 3077| r3077_1(glval) = VariableAddress[x1019] : -# 3077| r3077_2(glval) = FunctionAddress[~String] : -# 3077| v3077_3(void) = Call[~String] : func:r3077_2, this:r3077_1 -# 3077| mu3077_4(unknown) = ^CallSideEffect : ~m? -# 3077| v3077_5(void) = ^IndirectReadSideEffect[-1] : &:r3077_1, ~m? -# 3077| mu3077_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3077_1 -# 3077| r3077_7(bool) = Constant[0] : -# 3077| v3077_8(void) = ConditionalBranch : r3077_7 +# 35| Block 1019 +# 35| r35_14267(glval) = VariableAddress[x1019] : +# 35| mu35_14268(String) = Uninitialized[x1019] : &:r35_14267 +# 35| r35_14269(glval) = FunctionAddress[String] : +# 35| v35_14270(void) = Call[String] : func:r35_14269, this:r35_14267 +# 35| mu35_14271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14267 +# 35| r35_14273(glval) = VariableAddress[x1019] : +# 35| r35_14274(glval) = FunctionAddress[~String] : +# 35| v35_14275(void) = Call[~String] : func:r35_14274, this:r35_14273 +# 35| mu35_14276(unknown) = ^CallSideEffect : ~m? +# 35| v35_14277(void) = ^IndirectReadSideEffect[-1] : &:r35_14273, ~m? +# 35| mu35_14278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14273 +# 35| r35_14279(bool) = Constant[0] : +# 35| v35_14280(void) = ConditionalBranch : r35_14279 #-----| False -> Block 1020 #-----| True -> Block 1026 -# 3079| Block 1020 -# 3079| r3079_1(glval) = VariableAddress[x1020] : -# 3079| mu3079_2(String) = Uninitialized[x1020] : &:r3079_1 -# 3079| r3079_3(glval) = FunctionAddress[String] : -# 3079| v3079_4(void) = Call[String] : func:r3079_3, this:r3079_1 -# 3079| mu3079_5(unknown) = ^CallSideEffect : ~m? -# 3079| mu3079_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3079_1 -# 3080| r3080_1(glval) = VariableAddress[x1020] : -# 3080| r3080_2(glval) = FunctionAddress[~String] : -# 3080| v3080_3(void) = Call[~String] : func:r3080_2, this:r3080_1 -# 3080| mu3080_4(unknown) = ^CallSideEffect : ~m? -# 3080| v3080_5(void) = ^IndirectReadSideEffect[-1] : &:r3080_1, ~m? -# 3080| mu3080_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3080_1 -# 3080| r3080_7(bool) = Constant[0] : -# 3080| v3080_8(void) = ConditionalBranch : r3080_7 +# 35| Block 1020 +# 35| r35_14281(glval) = VariableAddress[x1020] : +# 35| mu35_14282(String) = Uninitialized[x1020] : &:r35_14281 +# 35| r35_14283(glval) = FunctionAddress[String] : +# 35| v35_14284(void) = Call[String] : func:r35_14283, this:r35_14281 +# 35| mu35_14285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14281 +# 35| r35_14287(glval) = VariableAddress[x1020] : +# 35| r35_14288(glval) = FunctionAddress[~String] : +# 35| v35_14289(void) = Call[~String] : func:r35_14288, this:r35_14287 +# 35| mu35_14290(unknown) = ^CallSideEffect : ~m? +# 35| v35_14291(void) = ^IndirectReadSideEffect[-1] : &:r35_14287, ~m? +# 35| mu35_14292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14287 +# 35| r35_14293(bool) = Constant[0] : +# 35| v35_14294(void) = ConditionalBranch : r35_14293 #-----| False -> Block 1021 #-----| True -> Block 1026 -# 3082| Block 1021 -# 3082| r3082_1(glval) = VariableAddress[x1021] : -# 3082| mu3082_2(String) = Uninitialized[x1021] : &:r3082_1 -# 3082| r3082_3(glval) = FunctionAddress[String] : -# 3082| v3082_4(void) = Call[String] : func:r3082_3, this:r3082_1 -# 3082| mu3082_5(unknown) = ^CallSideEffect : ~m? -# 3082| mu3082_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3082_1 -# 3083| r3083_1(glval) = VariableAddress[x1021] : -# 3083| r3083_2(glval) = FunctionAddress[~String] : -# 3083| v3083_3(void) = Call[~String] : func:r3083_2, this:r3083_1 -# 3083| mu3083_4(unknown) = ^CallSideEffect : ~m? -# 3083| v3083_5(void) = ^IndirectReadSideEffect[-1] : &:r3083_1, ~m? -# 3083| mu3083_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3083_1 -# 3083| r3083_7(bool) = Constant[0] : -# 3083| v3083_8(void) = ConditionalBranch : r3083_7 +# 35| Block 1021 +# 35| r35_14295(glval) = VariableAddress[x1021] : +# 35| mu35_14296(String) = Uninitialized[x1021] : &:r35_14295 +# 35| r35_14297(glval) = FunctionAddress[String] : +# 35| v35_14298(void) = Call[String] : func:r35_14297, this:r35_14295 +# 35| mu35_14299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14295 +# 35| r35_14301(glval) = VariableAddress[x1021] : +# 35| r35_14302(glval) = FunctionAddress[~String] : +# 35| v35_14303(void) = Call[~String] : func:r35_14302, this:r35_14301 +# 35| mu35_14304(unknown) = ^CallSideEffect : ~m? +# 35| v35_14305(void) = ^IndirectReadSideEffect[-1] : &:r35_14301, ~m? +# 35| mu35_14306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14301 +# 35| r35_14307(bool) = Constant[0] : +# 35| v35_14308(void) = ConditionalBranch : r35_14307 #-----| False -> Block 1022 #-----| True -> Block 1026 -# 3085| Block 1022 -# 3085| r3085_1(glval) = VariableAddress[x1022] : -# 3085| mu3085_2(String) = Uninitialized[x1022] : &:r3085_1 -# 3085| r3085_3(glval) = FunctionAddress[String] : -# 3085| v3085_4(void) = Call[String] : func:r3085_3, this:r3085_1 -# 3085| mu3085_5(unknown) = ^CallSideEffect : ~m? -# 3085| mu3085_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3085_1 -# 3086| r3086_1(glval) = VariableAddress[x1022] : -# 3086| r3086_2(glval) = FunctionAddress[~String] : -# 3086| v3086_3(void) = Call[~String] : func:r3086_2, this:r3086_1 -# 3086| mu3086_4(unknown) = ^CallSideEffect : ~m? -# 3086| v3086_5(void) = ^IndirectReadSideEffect[-1] : &:r3086_1, ~m? -# 3086| mu3086_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3086_1 -# 3086| r3086_7(bool) = Constant[0] : -# 3086| v3086_8(void) = ConditionalBranch : r3086_7 +# 35| Block 1022 +# 35| r35_14309(glval) = VariableAddress[x1022] : +# 35| mu35_14310(String) = Uninitialized[x1022] : &:r35_14309 +# 35| r35_14311(glval) = FunctionAddress[String] : +# 35| v35_14312(void) = Call[String] : func:r35_14311, this:r35_14309 +# 35| mu35_14313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14309 +# 35| r35_14315(glval) = VariableAddress[x1022] : +# 35| r35_14316(glval) = FunctionAddress[~String] : +# 35| v35_14317(void) = Call[~String] : func:r35_14316, this:r35_14315 +# 35| mu35_14318(unknown) = ^CallSideEffect : ~m? +# 35| v35_14319(void) = ^IndirectReadSideEffect[-1] : &:r35_14315, ~m? +# 35| mu35_14320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14315 +# 35| r35_14321(bool) = Constant[0] : +# 35| v35_14322(void) = ConditionalBranch : r35_14321 #-----| False -> Block 1023 #-----| True -> Block 1026 -# 3088| Block 1023 -# 3088| r3088_1(glval) = VariableAddress[x1023] : -# 3088| mu3088_2(String) = Uninitialized[x1023] : &:r3088_1 -# 3088| r3088_3(glval) = FunctionAddress[String] : -# 3088| v3088_4(void) = Call[String] : func:r3088_3, this:r3088_1 -# 3088| mu3088_5(unknown) = ^CallSideEffect : ~m? -# 3088| mu3088_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3088_1 -# 3089| r3089_1(glval) = VariableAddress[x1023] : -# 3089| r3089_2(glval) = FunctionAddress[~String] : -# 3089| v3089_3(void) = Call[~String] : func:r3089_2, this:r3089_1 -# 3089| mu3089_4(unknown) = ^CallSideEffect : ~m? -# 3089| v3089_5(void) = ^IndirectReadSideEffect[-1] : &:r3089_1, ~m? -# 3089| mu3089_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3089_1 -# 3089| r3089_7(bool) = Constant[0] : -# 3089| v3089_8(void) = ConditionalBranch : r3089_7 +# 35| Block 1023 +# 35| r35_14323(glval) = VariableAddress[x1023] : +# 35| mu35_14324(String) = Uninitialized[x1023] : &:r35_14323 +# 35| r35_14325(glval) = FunctionAddress[String] : +# 35| v35_14326(void) = Call[String] : func:r35_14325, this:r35_14323 +# 35| mu35_14327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14323 +# 35| r35_14329(glval) = VariableAddress[x1023] : +# 35| r35_14330(glval) = FunctionAddress[~String] : +# 35| v35_14331(void) = Call[~String] : func:r35_14330, this:r35_14329 +# 35| mu35_14332(unknown) = ^CallSideEffect : ~m? +# 35| v35_14333(void) = ^IndirectReadSideEffect[-1] : &:r35_14329, ~m? +# 35| mu35_14334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14329 +# 35| r35_14335(bool) = Constant[0] : +# 35| v35_14336(void) = ConditionalBranch : r35_14335 #-----| False -> Block 1024 #-----| True -> Block 1026 -# 3091| Block 1024 -# 3091| r3091_1(glval) = VariableAddress[x1024] : -# 3091| mu3091_2(String) = Uninitialized[x1024] : &:r3091_1 -# 3091| r3091_3(glval) = FunctionAddress[String] : -# 3091| v3091_4(void) = Call[String] : func:r3091_3, this:r3091_1 -# 3091| mu3091_5(unknown) = ^CallSideEffect : ~m? -# 3091| mu3091_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3091_1 -# 3092| r3092_1(glval) = VariableAddress[x1024] : -# 3092| r3092_2(glval) = FunctionAddress[~String] : -# 3092| v3092_3(void) = Call[~String] : func:r3092_2, this:r3092_1 -# 3092| mu3092_4(unknown) = ^CallSideEffect : ~m? -# 3092| v3092_5(void) = ^IndirectReadSideEffect[-1] : &:r3092_1, ~m? -# 3092| mu3092_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3092_1 -# 3092| r3092_7(bool) = Constant[0] : -# 3092| v3092_8(void) = ConditionalBranch : r3092_7 +# 35| Block 1024 +# 35| r35_14337(glval) = VariableAddress[x1024] : +# 35| mu35_14338(String) = Uninitialized[x1024] : &:r35_14337 +# 35| r35_14339(glval) = FunctionAddress[String] : +# 35| v35_14340(void) = Call[String] : func:r35_14339, this:r35_14337 +# 35| mu35_14341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14337 +# 35| r35_14343(glval) = VariableAddress[x1024] : +# 35| r35_14344(glval) = FunctionAddress[~String] : +# 35| v35_14345(void) = Call[~String] : func:r35_14344, this:r35_14343 +# 35| mu35_14346(unknown) = ^CallSideEffect : ~m? +# 35| v35_14347(void) = ^IndirectReadSideEffect[-1] : &:r35_14343, ~m? +# 35| mu35_14348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14343 +# 35| r35_14349(bool) = Constant[0] : +# 35| v35_14350(void) = ConditionalBranch : r35_14349 #-----| False -> Block 1025 #-----| True -> Block 1026 -# 3093| Block 1025 -# 3093| v3093_1(void) = NoOp : -# 17| v17_4(void) = ReturnVoid : -# 17| v17_5(void) = AliasedUse : ~m? -# 17| v17_6(void) = ExitFunction : +# 36| Block 1025 +# 36| v36_1(void) = NoOp : +# 34| v34_4(void) = ReturnVoid : +# 34| v34_5(void) = AliasedUse : ~m? +# 34| v34_6(void) = ExitFunction : -# 17| Block 1026 -# 17| v17_7(void) = Unreached : +# 34| Block 1026 +# 34| v34_7(void) = Unreached : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/many-defs-per-use.cpp b/cpp/ql/test/library-tests/ir/ir/many-defs-per-use.cpp index f3be4b878b7..46e9f2f3b44 100644 --- a/cpp/ql/test/library-tests/ir/ir/many-defs-per-use.cpp +++ b/cpp/ql/test/library-tests/ir/ir/many-defs-per-use.cpp @@ -14,3082 +14,25 @@ private: const char* p; }; +#define CONCAT(a, b) CONCAT_INNER(a, b) +#define CONCAT_INNER(a, b) a ## b + +#define READ do { String CONCAT(x, __COUNTER__); } while(0) + +#define READ2 READ; READ +#define READ4 READ2; READ2 +#define READ8 READ4; READ4 +#define READ16 READ8; READ8 +#define READ32 READ16; READ16 +#define READ64 READ32; READ32 +#define READ128 READ64; READ64 +#define READ256 READ128; READ128 +#define READ512 READ256; READ256 +#define READ1024 READ512; READ512 +#define READ1025 READ1024; READ + void many_defs_per_use() { - do { - String x0; - } while (0); - do { - String x1; - } while (0); - do { - String x2; - } while (0); - do { - String x3; - } while (0); - do { - String x4; - } while (0); - do { - String x5; - } while (0); - do { - String x6; - } while (0); - do { - String x7; - } while (0); - do { - String x8; - } while (0); - do { - String x9; - } while (0); - do { - String x10; - } while (0); - do { - String x11; - } while (0); - do { - String x12; - } while (0); - do { - String x13; - } while (0); - do { - String x14; - } while (0); - do { - String x15; - } while (0); - do { - String x16; - } while (0); - do { - String x17; - } while (0); - do { - String x18; - } while (0); - do { - String x19; - } while (0); - do { - String x20; - } while (0); - do { - String x21; - } while (0); - do { - String x22; - } while (0); - do { - String x23; - } while (0); - do { - String x24; - } while (0); - do { - String x25; - } while (0); - do { - String x26; - } while (0); - do { - String x27; - } while (0); - do { - String x28; - } while (0); - do { - String x29; - } while (0); - do { - String x30; - } while (0); - do { - String x31; - } while (0); - do { - String x32; - } while (0); - do { - String x33; - } while (0); - do { - String x34; - } while (0); - do { - String x35; - } while (0); - do { - String x36; - } while (0); - do { - String x37; - } while (0); - do { - String x38; - } while (0); - do { - String x39; - } while (0); - do { - String x40; - } while (0); - do { - String x41; - } while (0); - do { - String x42; - } while (0); - do { - String x43; - } while (0); - do { - String x44; - } while (0); - do { - String x45; - } while (0); - do { - String x46; - } while (0); - do { - String x47; - } while (0); - do { - String x48; - } while (0); - do { - String x49; - } while (0); - do { - String x50; - } while (0); - do { - String x51; - } while (0); - do { - String x52; - } while (0); - do { - String x53; - } while (0); - do { - String x54; - } while (0); - do { - String x55; - } while (0); - do { - String x56; - } while (0); - do { - String x57; - } while (0); - do { - String x58; - } while (0); - do { - String x59; - } while (0); - do { - String x60; - } while (0); - do { - String x61; - } while (0); - do { - String x62; - } while (0); - do { - String x63; - } while (0); - do { - String x64; - } while (0); - do { - String x65; - } while (0); - do { - String x66; - } while (0); - do { - String x67; - } while (0); - do { - String x68; - } while (0); - do { - String x69; - } while (0); - do { - String x70; - } while (0); - do { - String x71; - } while (0); - do { - String x72; - } while (0); - do { - String x73; - } while (0); - do { - String x74; - } while (0); - do { - String x75; - } while (0); - do { - String x76; - } while (0); - do { - String x77; - } while (0); - do { - String x78; - } while (0); - do { - String x79; - } while (0); - do { - String x80; - } while (0); - do { - String x81; - } while (0); - do { - String x82; - } while (0); - do { - String x83; - } while (0); - do { - String x84; - } while (0); - do { - String x85; - } while (0); - do { - String x86; - } while (0); - do { - String x87; - } while (0); - do { - String x88; - } while (0); - do { - String x89; - } while (0); - do { - String x90; - } while (0); - do { - String x91; - } while (0); - do { - String x92; - } while (0); - do { - String x93; - } while (0); - do { - String x94; - } while (0); - do { - String x95; - } while (0); - do { - String x96; - } while (0); - do { - String x97; - } while (0); - do { - String x98; - } while (0); - do { - String x99; - } while (0); - do { - String x100; - } while (0); - do { - String x101; - } while (0); - do { - String x102; - } while (0); - do { - String x103; - } while (0); - do { - String x104; - } while (0); - do { - String x105; - } while (0); - do { - String x106; - } while (0); - do { - String x107; - } while (0); - do { - String x108; - } while (0); - do { - String x109; - } while (0); - do { - String x110; - } while (0); - do { - String x111; - } while (0); - do { - String x112; - } while (0); - do { - String x113; - } while (0); - do { - String x114; - } while (0); - do { - String x115; - } while (0); - do { - String x116; - } while (0); - do { - String x117; - } while (0); - do { - String x118; - } while (0); - do { - String x119; - } while (0); - do { - String x120; - } while (0); - do { - String x121; - } while (0); - do { - String x122; - } while (0); - do { - String x123; - } while (0); - do { - String x124; - } while (0); - do { - String x125; - } while (0); - do { - String x126; - } while (0); - do { - String x127; - } while (0); - do { - String x128; - } while (0); - do { - String x129; - } while (0); - do { - String x130; - } while (0); - do { - String x131; - } while (0); - do { - String x132; - } while (0); - do { - String x133; - } while (0); - do { - String x134; - } while (0); - do { - String x135; - } while (0); - do { - String x136; - } while (0); - do { - String x137; - } while (0); - do { - String x138; - } while (0); - do { - String x139; - } while (0); - do { - String x140; - } while (0); - do { - String x141; - } while (0); - do { - String x142; - } while (0); - do { - String x143; - } while (0); - do { - String x144; - } while (0); - do { - String x145; - } while (0); - do { - String x146; - } while (0); - do { - String x147; - } while (0); - do { - String x148; - } while (0); - do { - String x149; - } while (0); - do { - String x150; - } while (0); - do { - String x151; - } while (0); - do { - String x152; - } while (0); - do { - String x153; - } while (0); - do { - String x154; - } while (0); - do { - String x155; - } while (0); - do { - String x156; - } while (0); - do { - String x157; - } while (0); - do { - String x158; - } while (0); - do { - String x159; - } while (0); - do { - String x160; - } while (0); - do { - String x161; - } while (0); - do { - String x162; - } while (0); - do { - String x163; - } while (0); - do { - String x164; - } while (0); - do { - String x165; - } while (0); - do { - String x166; - } while (0); - do { - String x167; - } while (0); - do { - String x168; - } while (0); - do { - String x169; - } while (0); - do { - String x170; - } while (0); - do { - String x171; - } while (0); - do { - String x172; - } while (0); - do { - String x173; - } while (0); - do { - String x174; - } while (0); - do { - String x175; - } while (0); - do { - String x176; - } while (0); - do { - String x177; - } while (0); - do { - String x178; - } while (0); - do { - String x179; - } while (0); - do { - String x180; - } while (0); - do { - String x181; - } while (0); - do { - String x182; - } while (0); - do { - String x183; - } while (0); - do { - String x184; - } while (0); - do { - String x185; - } while (0); - do { - String x186; - } while (0); - do { - String x187; - } while (0); - do { - String x188; - } while (0); - do { - String x189; - } while (0); - do { - String x190; - } while (0); - do { - String x191; - } while (0); - do { - String x192; - } while (0); - do { - String x193; - } while (0); - do { - String x194; - } while (0); - do { - String x195; - } while (0); - do { - String x196; - } while (0); - do { - String x197; - } while (0); - do { - String x198; - } while (0); - do { - String x199; - } while (0); - do { - String x200; - } while (0); - do { - String x201; - } while (0); - do { - String x202; - } while (0); - do { - String x203; - } while (0); - do { - String x204; - } while (0); - do { - String x205; - } while (0); - do { - String x206; - } while (0); - do { - String x207; - } while (0); - do { - String x208; - } while (0); - do { - String x209; - } while (0); - do { - String x210; - } while (0); - do { - String x211; - } while (0); - do { - String x212; - } while (0); - do { - String x213; - } while (0); - do { - String x214; - } while (0); - do { - String x215; - } while (0); - do { - String x216; - } while (0); - do { - String x217; - } while (0); - do { - String x218; - } while (0); - do { - String x219; - } while (0); - do { - String x220; - } while (0); - do { - String x221; - } while (0); - do { - String x222; - } while (0); - do { - String x223; - } while (0); - do { - String x224; - } while (0); - do { - String x225; - } while (0); - do { - String x226; - } while (0); - do { - String x227; - } while (0); - do { - String x228; - } while (0); - do { - String x229; - } while (0); - do { - String x230; - } while (0); - do { - String x231; - } while (0); - do { - String x232; - } while (0); - do { - String x233; - } while (0); - do { - String x234; - } while (0); - do { - String x235; - } while (0); - do { - String x236; - } while (0); - do { - String x237; - } while (0); - do { - String x238; - } while (0); - do { - String x239; - } while (0); - do { - String x240; - } while (0); - do { - String x241; - } while (0); - do { - String x242; - } while (0); - do { - String x243; - } while (0); - do { - String x244; - } while (0); - do { - String x245; - } while (0); - do { - String x246; - } while (0); - do { - String x247; - } while (0); - do { - String x248; - } while (0); - do { - String x249; - } while (0); - do { - String x250; - } while (0); - do { - String x251; - } while (0); - do { - String x252; - } while (0); - do { - String x253; - } while (0); - do { - String x254; - } while (0); - do { - String x255; - } while (0); - do { - String x256; - } while (0); - do { - String x257; - } while (0); - do { - String x258; - } while (0); - do { - String x259; - } while (0); - do { - String x260; - } while (0); - do { - String x261; - } while (0); - do { - String x262; - } while (0); - do { - String x263; - } while (0); - do { - String x264; - } while (0); - do { - String x265; - } while (0); - do { - String x266; - } while (0); - do { - String x267; - } while (0); - do { - String x268; - } while (0); - do { - String x269; - } while (0); - do { - String x270; - } while (0); - do { - String x271; - } while (0); - do { - String x272; - } while (0); - do { - String x273; - } while (0); - do { - String x274; - } while (0); - do { - String x275; - } while (0); - do { - String x276; - } while (0); - do { - String x277; - } while (0); - do { - String x278; - } while (0); - do { - String x279; - } while (0); - do { - String x280; - } while (0); - do { - String x281; - } while (0); - do { - String x282; - } while (0); - do { - String x283; - } while (0); - do { - String x284; - } while (0); - do { - String x285; - } while (0); - do { - String x286; - } while (0); - do { - String x287; - } while (0); - do { - String x288; - } while (0); - do { - String x289; - } while (0); - do { - String x290; - } while (0); - do { - String x291; - } while (0); - do { - String x292; - } while (0); - do { - String x293; - } while (0); - do { - String x294; - } while (0); - do { - String x295; - } while (0); - do { - String x296; - } while (0); - do { - String x297; - } while (0); - do { - String x298; - } while (0); - do { - String x299; - } while (0); - do { - String x300; - } while (0); - do { - String x301; - } while (0); - do { - String x302; - } while (0); - do { - String x303; - } while (0); - do { - String x304; - } while (0); - do { - String x305; - } while (0); - do { - String x306; - } while (0); - do { - String x307; - } while (0); - do { - String x308; - } while (0); - do { - String x309; - } while (0); - do { - String x310; - } while (0); - do { - String x311; - } while (0); - do { - String x312; - } while (0); - do { - String x313; - } while (0); - do { - String x314; - } while (0); - do { - String x315; - } while (0); - do { - String x316; - } while (0); - do { - String x317; - } while (0); - do { - String x318; - } while (0); - do { - String x319; - } while (0); - do { - String x320; - } while (0); - do { - String x321; - } while (0); - do { - String x322; - } while (0); - do { - String x323; - } while (0); - do { - String x324; - } while (0); - do { - String x325; - } while (0); - do { - String x326; - } while (0); - do { - String x327; - } while (0); - do { - String x328; - } while (0); - do { - String x329; - } while (0); - do { - String x330; - } while (0); - do { - String x331; - } while (0); - do { - String x332; - } while (0); - do { - String x333; - } while (0); - do { - String x334; - } while (0); - do { - String x335; - } while (0); - do { - String x336; - } while (0); - do { - String x337; - } while (0); - do { - String x338; - } while (0); - do { - String x339; - } while (0); - do { - String x340; - } while (0); - do { - String x341; - } while (0); - do { - String x342; - } while (0); - do { - String x343; - } while (0); - do { - String x344; - } while (0); - do { - String x345; - } while (0); - do { - String x346; - } while (0); - do { - String x347; - } while (0); - do { - String x348; - } while (0); - do { - String x349; - } while (0); - do { - String x350; - } while (0); - do { - String x351; - } while (0); - do { - String x352; - } while (0); - do { - String x353; - } while (0); - do { - String x354; - } while (0); - do { - String x355; - } while (0); - do { - String x356; - } while (0); - do { - String x357; - } while (0); - do { - String x358; - } while (0); - do { - String x359; - } while (0); - do { - String x360; - } while (0); - do { - String x361; - } while (0); - do { - String x362; - } while (0); - do { - String x363; - } while (0); - do { - String x364; - } while (0); - do { - String x365; - } while (0); - do { - String x366; - } while (0); - do { - String x367; - } while (0); - do { - String x368; - } while (0); - do { - String x369; - } while (0); - do { - String x370; - } while (0); - do { - String x371; - } while (0); - do { - String x372; - } while (0); - do { - String x373; - } while (0); - do { - String x374; - } while (0); - do { - String x375; - } while (0); - do { - String x376; - } while (0); - do { - String x377; - } while (0); - do { - String x378; - } while (0); - do { - String x379; - } while (0); - do { - String x380; - } while (0); - do { - String x381; - } while (0); - do { - String x382; - } while (0); - do { - String x383; - } while (0); - do { - String x384; - } while (0); - do { - String x385; - } while (0); - do { - String x386; - } while (0); - do { - String x387; - } while (0); - do { - String x388; - } while (0); - do { - String x389; - } while (0); - do { - String x390; - } while (0); - do { - String x391; - } while (0); - do { - String x392; - } while (0); - do { - String x393; - } while (0); - do { - String x394; - } while (0); - do { - String x395; - } while (0); - do { - String x396; - } while (0); - do { - String x397; - } while (0); - do { - String x398; - } while (0); - do { - String x399; - } while (0); - do { - String x400; - } while (0); - do { - String x401; - } while (0); - do { - String x402; - } while (0); - do { - String x403; - } while (0); - do { - String x404; - } while (0); - do { - String x405; - } while (0); - do { - String x406; - } while (0); - do { - String x407; - } while (0); - do { - String x408; - } while (0); - do { - String x409; - } while (0); - do { - String x410; - } while (0); - do { - String x411; - } while (0); - do { - String x412; - } while (0); - do { - String x413; - } while (0); - do { - String x414; - } while (0); - do { - String x415; - } while (0); - do { - String x416; - } while (0); - do { - String x417; - } while (0); - do { - String x418; - } while (0); - do { - String x419; - } while (0); - do { - String x420; - } while (0); - do { - String x421; - } while (0); - do { - String x422; - } while (0); - do { - String x423; - } while (0); - do { - String x424; - } while (0); - do { - String x425; - } while (0); - do { - String x426; - } while (0); - do { - String x427; - } while (0); - do { - String x428; - } while (0); - do { - String x429; - } while (0); - do { - String x430; - } while (0); - do { - String x431; - } while (0); - do { - String x432; - } while (0); - do { - String x433; - } while (0); - do { - String x434; - } while (0); - do { - String x435; - } while (0); - do { - String x436; - } while (0); - do { - String x437; - } while (0); - do { - String x438; - } while (0); - do { - String x439; - } while (0); - do { - String x440; - } while (0); - do { - String x441; - } while (0); - do { - String x442; - } while (0); - do { - String x443; - } while (0); - do { - String x444; - } while (0); - do { - String x445; - } while (0); - do { - String x446; - } while (0); - do { - String x447; - } while (0); - do { - String x448; - } while (0); - do { - String x449; - } while (0); - do { - String x450; - } while (0); - do { - String x451; - } while (0); - do { - String x452; - } while (0); - do { - String x453; - } while (0); - do { - String x454; - } while (0); - do { - String x455; - } while (0); - do { - String x456; - } while (0); - do { - String x457; - } while (0); - do { - String x458; - } while (0); - do { - String x459; - } while (0); - do { - String x460; - } while (0); - do { - String x461; - } while (0); - do { - String x462; - } while (0); - do { - String x463; - } while (0); - do { - String x464; - } while (0); - do { - String x465; - } while (0); - do { - String x466; - } while (0); - do { - String x467; - } while (0); - do { - String x468; - } while (0); - do { - String x469; - } while (0); - do { - String x470; - } while (0); - do { - String x471; - } while (0); - do { - String x472; - } while (0); - do { - String x473; - } while (0); - do { - String x474; - } while (0); - do { - String x475; - } while (0); - do { - String x476; - } while (0); - do { - String x477; - } while (0); - do { - String x478; - } while (0); - do { - String x479; - } while (0); - do { - String x480; - } while (0); - do { - String x481; - } while (0); - do { - String x482; - } while (0); - do { - String x483; - } while (0); - do { - String x484; - } while (0); - do { - String x485; - } while (0); - do { - String x486; - } while (0); - do { - String x487; - } while (0); - do { - String x488; - } while (0); - do { - String x489; - } while (0); - do { - String x490; - } while (0); - do { - String x491; - } while (0); - do { - String x492; - } while (0); - do { - String x493; - } while (0); - do { - String x494; - } while (0); - do { - String x495; - } while (0); - do { - String x496; - } while (0); - do { - String x497; - } while (0); - do { - String x498; - } while (0); - do { - String x499; - } while (0); - do { - String x500; - } while (0); - do { - String x501; - } while (0); - do { - String x502; - } while (0); - do { - String x503; - } while (0); - do { - String x504; - } while (0); - do { - String x505; - } while (0); - do { - String x506; - } while (0); - do { - String x507; - } while (0); - do { - String x508; - } while (0); - do { - String x509; - } while (0); - do { - String x510; - } while (0); - do { - String x511; - } while (0); - do { - String x512; - } while (0); - do { - String x513; - } while (0); - do { - String x514; - } while (0); - do { - String x515; - } while (0); - do { - String x516; - } while (0); - do { - String x517; - } while (0); - do { - String x518; - } while (0); - do { - String x519; - } while (0); - do { - String x520; - } while (0); - do { - String x521; - } while (0); - do { - String x522; - } while (0); - do { - String x523; - } while (0); - do { - String x524; - } while (0); - do { - String x525; - } while (0); - do { - String x526; - } while (0); - do { - String x527; - } while (0); - do { - String x528; - } while (0); - do { - String x529; - } while (0); - do { - String x530; - } while (0); - do { - String x531; - } while (0); - do { - String x532; - } while (0); - do { - String x533; - } while (0); - do { - String x534; - } while (0); - do { - String x535; - } while (0); - do { - String x536; - } while (0); - do { - String x537; - } while (0); - do { - String x538; - } while (0); - do { - String x539; - } while (0); - do { - String x540; - } while (0); - do { - String x541; - } while (0); - do { - String x542; - } while (0); - do { - String x543; - } while (0); - do { - String x544; - } while (0); - do { - String x545; - } while (0); - do { - String x546; - } while (0); - do { - String x547; - } while (0); - do { - String x548; - } while (0); - do { - String x549; - } while (0); - do { - String x550; - } while (0); - do { - String x551; - } while (0); - do { - String x552; - } while (0); - do { - String x553; - } while (0); - do { - String x554; - } while (0); - do { - String x555; - } while (0); - do { - String x556; - } while (0); - do { - String x557; - } while (0); - do { - String x558; - } while (0); - do { - String x559; - } while (0); - do { - String x560; - } while (0); - do { - String x561; - } while (0); - do { - String x562; - } while (0); - do { - String x563; - } while (0); - do { - String x564; - } while (0); - do { - String x565; - } while (0); - do { - String x566; - } while (0); - do { - String x567; - } while (0); - do { - String x568; - } while (0); - do { - String x569; - } while (0); - do { - String x570; - } while (0); - do { - String x571; - } while (0); - do { - String x572; - } while (0); - do { - String x573; - } while (0); - do { - String x574; - } while (0); - do { - String x575; - } while (0); - do { - String x576; - } while (0); - do { - String x577; - } while (0); - do { - String x578; - } while (0); - do { - String x579; - } while (0); - do { - String x580; - } while (0); - do { - String x581; - } while (0); - do { - String x582; - } while (0); - do { - String x583; - } while (0); - do { - String x584; - } while (0); - do { - String x585; - } while (0); - do { - String x586; - } while (0); - do { - String x587; - } while (0); - do { - String x588; - } while (0); - do { - String x589; - } while (0); - do { - String x590; - } while (0); - do { - String x591; - } while (0); - do { - String x592; - } while (0); - do { - String x593; - } while (0); - do { - String x594; - } while (0); - do { - String x595; - } while (0); - do { - String x596; - } while (0); - do { - String x597; - } while (0); - do { - String x598; - } while (0); - do { - String x599; - } while (0); - do { - String x600; - } while (0); - do { - String x601; - } while (0); - do { - String x602; - } while (0); - do { - String x603; - } while (0); - do { - String x604; - } while (0); - do { - String x605; - } while (0); - do { - String x606; - } while (0); - do { - String x607; - } while (0); - do { - String x608; - } while (0); - do { - String x609; - } while (0); - do { - String x610; - } while (0); - do { - String x611; - } while (0); - do { - String x612; - } while (0); - do { - String x613; - } while (0); - do { - String x614; - } while (0); - do { - String x615; - } while (0); - do { - String x616; - } while (0); - do { - String x617; - } while (0); - do { - String x618; - } while (0); - do { - String x619; - } while (0); - do { - String x620; - } while (0); - do { - String x621; - } while (0); - do { - String x622; - } while (0); - do { - String x623; - } while (0); - do { - String x624; - } while (0); - do { - String x625; - } while (0); - do { - String x626; - } while (0); - do { - String x627; - } while (0); - do { - String x628; - } while (0); - do { - String x629; - } while (0); - do { - String x630; - } while (0); - do { - String x631; - } while (0); - do { - String x632; - } while (0); - do { - String x633; - } while (0); - do { - String x634; - } while (0); - do { - String x635; - } while (0); - do { - String x636; - } while (0); - do { - String x637; - } while (0); - do { - String x638; - } while (0); - do { - String x639; - } while (0); - do { - String x640; - } while (0); - do { - String x641; - } while (0); - do { - String x642; - } while (0); - do { - String x643; - } while (0); - do { - String x644; - } while (0); - do { - String x645; - } while (0); - do { - String x646; - } while (0); - do { - String x647; - } while (0); - do { - String x648; - } while (0); - do { - String x649; - } while (0); - do { - String x650; - } while (0); - do { - String x651; - } while (0); - do { - String x652; - } while (0); - do { - String x653; - } while (0); - do { - String x654; - } while (0); - do { - String x655; - } while (0); - do { - String x656; - } while (0); - do { - String x657; - } while (0); - do { - String x658; - } while (0); - do { - String x659; - } while (0); - do { - String x660; - } while (0); - do { - String x661; - } while (0); - do { - String x662; - } while (0); - do { - String x663; - } while (0); - do { - String x664; - } while (0); - do { - String x665; - } while (0); - do { - String x666; - } while (0); - do { - String x667; - } while (0); - do { - String x668; - } while (0); - do { - String x669; - } while (0); - do { - String x670; - } while (0); - do { - String x671; - } while (0); - do { - String x672; - } while (0); - do { - String x673; - } while (0); - do { - String x674; - } while (0); - do { - String x675; - } while (0); - do { - String x676; - } while (0); - do { - String x677; - } while (0); - do { - String x678; - } while (0); - do { - String x679; - } while (0); - do { - String x680; - } while (0); - do { - String x681; - } while (0); - do { - String x682; - } while (0); - do { - String x683; - } while (0); - do { - String x684; - } while (0); - do { - String x685; - } while (0); - do { - String x686; - } while (0); - do { - String x687; - } while (0); - do { - String x688; - } while (0); - do { - String x689; - } while (0); - do { - String x690; - } while (0); - do { - String x691; - } while (0); - do { - String x692; - } while (0); - do { - String x693; - } while (0); - do { - String x694; - } while (0); - do { - String x695; - } while (0); - do { - String x696; - } while (0); - do { - String x697; - } while (0); - do { - String x698; - } while (0); - do { - String x699; - } while (0); - do { - String x700; - } while (0); - do { - String x701; - } while (0); - do { - String x702; - } while (0); - do { - String x703; - } while (0); - do { - String x704; - } while (0); - do { - String x705; - } while (0); - do { - String x706; - } while (0); - do { - String x707; - } while (0); - do { - String x708; - } while (0); - do { - String x709; - } while (0); - do { - String x710; - } while (0); - do { - String x711; - } while (0); - do { - String x712; - } while (0); - do { - String x713; - } while (0); - do { - String x714; - } while (0); - do { - String x715; - } while (0); - do { - String x716; - } while (0); - do { - String x717; - } while (0); - do { - String x718; - } while (0); - do { - String x719; - } while (0); - do { - String x720; - } while (0); - do { - String x721; - } while (0); - do { - String x722; - } while (0); - do { - String x723; - } while (0); - do { - String x724; - } while (0); - do { - String x725; - } while (0); - do { - String x726; - } while (0); - do { - String x727; - } while (0); - do { - String x728; - } while (0); - do { - String x729; - } while (0); - do { - String x730; - } while (0); - do { - String x731; - } while (0); - do { - String x732; - } while (0); - do { - String x733; - } while (0); - do { - String x734; - } while (0); - do { - String x735; - } while (0); - do { - String x736; - } while (0); - do { - String x737; - } while (0); - do { - String x738; - } while (0); - do { - String x739; - } while (0); - do { - String x740; - } while (0); - do { - String x741; - } while (0); - do { - String x742; - } while (0); - do { - String x743; - } while (0); - do { - String x744; - } while (0); - do { - String x745; - } while (0); - do { - String x746; - } while (0); - do { - String x747; - } while (0); - do { - String x748; - } while (0); - do { - String x749; - } while (0); - do { - String x750; - } while (0); - do { - String x751; - } while (0); - do { - String x752; - } while (0); - do { - String x753; - } while (0); - do { - String x754; - } while (0); - do { - String x755; - } while (0); - do { - String x756; - } while (0); - do { - String x757; - } while (0); - do { - String x758; - } while (0); - do { - String x759; - } while (0); - do { - String x760; - } while (0); - do { - String x761; - } while (0); - do { - String x762; - } while (0); - do { - String x763; - } while (0); - do { - String x764; - } while (0); - do { - String x765; - } while (0); - do { - String x766; - } while (0); - do { - String x767; - } while (0); - do { - String x768; - } while (0); - do { - String x769; - } while (0); - do { - String x770; - } while (0); - do { - String x771; - } while (0); - do { - String x772; - } while (0); - do { - String x773; - } while (0); - do { - String x774; - } while (0); - do { - String x775; - } while (0); - do { - String x776; - } while (0); - do { - String x777; - } while (0); - do { - String x778; - } while (0); - do { - String x779; - } while (0); - do { - String x780; - } while (0); - do { - String x781; - } while (0); - do { - String x782; - } while (0); - do { - String x783; - } while (0); - do { - String x784; - } while (0); - do { - String x785; - } while (0); - do { - String x786; - } while (0); - do { - String x787; - } while (0); - do { - String x788; - } while (0); - do { - String x789; - } while (0); - do { - String x790; - } while (0); - do { - String x791; - } while (0); - do { - String x792; - } while (0); - do { - String x793; - } while (0); - do { - String x794; - } while (0); - do { - String x795; - } while (0); - do { - String x796; - } while (0); - do { - String x797; - } while (0); - do { - String x798; - } while (0); - do { - String x799; - } while (0); - do { - String x800; - } while (0); - do { - String x801; - } while (0); - do { - String x802; - } while (0); - do { - String x803; - } while (0); - do { - String x804; - } while (0); - do { - String x805; - } while (0); - do { - String x806; - } while (0); - do { - String x807; - } while (0); - do { - String x808; - } while (0); - do { - String x809; - } while (0); - do { - String x810; - } while (0); - do { - String x811; - } while (0); - do { - String x812; - } while (0); - do { - String x813; - } while (0); - do { - String x814; - } while (0); - do { - String x815; - } while (0); - do { - String x816; - } while (0); - do { - String x817; - } while (0); - do { - String x818; - } while (0); - do { - String x819; - } while (0); - do { - String x820; - } while (0); - do { - String x821; - } while (0); - do { - String x822; - } while (0); - do { - String x823; - } while (0); - do { - String x824; - } while (0); - do { - String x825; - } while (0); - do { - String x826; - } while (0); - do { - String x827; - } while (0); - do { - String x828; - } while (0); - do { - String x829; - } while (0); - do { - String x830; - } while (0); - do { - String x831; - } while (0); - do { - String x832; - } while (0); - do { - String x833; - } while (0); - do { - String x834; - } while (0); - do { - String x835; - } while (0); - do { - String x836; - } while (0); - do { - String x837; - } while (0); - do { - String x838; - } while (0); - do { - String x839; - } while (0); - do { - String x840; - } while (0); - do { - String x841; - } while (0); - do { - String x842; - } while (0); - do { - String x843; - } while (0); - do { - String x844; - } while (0); - do { - String x845; - } while (0); - do { - String x846; - } while (0); - do { - String x847; - } while (0); - do { - String x848; - } while (0); - do { - String x849; - } while (0); - do { - String x850; - } while (0); - do { - String x851; - } while (0); - do { - String x852; - } while (0); - do { - String x853; - } while (0); - do { - String x854; - } while (0); - do { - String x855; - } while (0); - do { - String x856; - } while (0); - do { - String x857; - } while (0); - do { - String x858; - } while (0); - do { - String x859; - } while (0); - do { - String x860; - } while (0); - do { - String x861; - } while (0); - do { - String x862; - } while (0); - do { - String x863; - } while (0); - do { - String x864; - } while (0); - do { - String x865; - } while (0); - do { - String x866; - } while (0); - do { - String x867; - } while (0); - do { - String x868; - } while (0); - do { - String x869; - } while (0); - do { - String x870; - } while (0); - do { - String x871; - } while (0); - do { - String x872; - } while (0); - do { - String x873; - } while (0); - do { - String x874; - } while (0); - do { - String x875; - } while (0); - do { - String x876; - } while (0); - do { - String x877; - } while (0); - do { - String x878; - } while (0); - do { - String x879; - } while (0); - do { - String x880; - } while (0); - do { - String x881; - } while (0); - do { - String x882; - } while (0); - do { - String x883; - } while (0); - do { - String x884; - } while (0); - do { - String x885; - } while (0); - do { - String x886; - } while (0); - do { - String x887; - } while (0); - do { - String x888; - } while (0); - do { - String x889; - } while (0); - do { - String x890; - } while (0); - do { - String x891; - } while (0); - do { - String x892; - } while (0); - do { - String x893; - } while (0); - do { - String x894; - } while (0); - do { - String x895; - } while (0); - do { - String x896; - } while (0); - do { - String x897; - } while (0); - do { - String x898; - } while (0); - do { - String x899; - } while (0); - do { - String x900; - } while (0); - do { - String x901; - } while (0); - do { - String x902; - } while (0); - do { - String x903; - } while (0); - do { - String x904; - } while (0); - do { - String x905; - } while (0); - do { - String x906; - } while (0); - do { - String x907; - } while (0); - do { - String x908; - } while (0); - do { - String x909; - } while (0); - do { - String x910; - } while (0); - do { - String x911; - } while (0); - do { - String x912; - } while (0); - do { - String x913; - } while (0); - do { - String x914; - } while (0); - do { - String x915; - } while (0); - do { - String x916; - } while (0); - do { - String x917; - } while (0); - do { - String x918; - } while (0); - do { - String x919; - } while (0); - do { - String x920; - } while (0); - do { - String x921; - } while (0); - do { - String x922; - } while (0); - do { - String x923; - } while (0); - do { - String x924; - } while (0); - do { - String x925; - } while (0); - do { - String x926; - } while (0); - do { - String x927; - } while (0); - do { - String x928; - } while (0); - do { - String x929; - } while (0); - do { - String x930; - } while (0); - do { - String x931; - } while (0); - do { - String x932; - } while (0); - do { - String x933; - } while (0); - do { - String x934; - } while (0); - do { - String x935; - } while (0); - do { - String x936; - } while (0); - do { - String x937; - } while (0); - do { - String x938; - } while (0); - do { - String x939; - } while (0); - do { - String x940; - } while (0); - do { - String x941; - } while (0); - do { - String x942; - } while (0); - do { - String x943; - } while (0); - do { - String x944; - } while (0); - do { - String x945; - } while (0); - do { - String x946; - } while (0); - do { - String x947; - } while (0); - do { - String x948; - } while (0); - do { - String x949; - } while (0); - do { - String x950; - } while (0); - do { - String x951; - } while (0); - do { - String x952; - } while (0); - do { - String x953; - } while (0); - do { - String x954; - } while (0); - do { - String x955; - } while (0); - do { - String x956; - } while (0); - do { - String x957; - } while (0); - do { - String x958; - } while (0); - do { - String x959; - } while (0); - do { - String x960; - } while (0); - do { - String x961; - } while (0); - do { - String x962; - } while (0); - do { - String x963; - } while (0); - do { - String x964; - } while (0); - do { - String x965; - } while (0); - do { - String x966; - } while (0); - do { - String x967; - } while (0); - do { - String x968; - } while (0); - do { - String x969; - } while (0); - do { - String x970; - } while (0); - do { - String x971; - } while (0); - do { - String x972; - } while (0); - do { - String x973; - } while (0); - do { - String x974; - } while (0); - do { - String x975; - } while (0); - do { - String x976; - } while (0); - do { - String x977; - } while (0); - do { - String x978; - } while (0); - do { - String x979; - } while (0); - do { - String x980; - } while (0); - do { - String x981; - } while (0); - do { - String x982; - } while (0); - do { - String x983; - } while (0); - do { - String x984; - } while (0); - do { - String x985; - } while (0); - do { - String x986; - } while (0); - do { - String x987; - } while (0); - do { - String x988; - } while (0); - do { - String x989; - } while (0); - do { - String x990; - } while (0); - do { - String x991; - } while (0); - do { - String x992; - } while (0); - do { - String x993; - } while (0); - do { - String x994; - } while (0); - do { - String x995; - } while (0); - do { - String x996; - } while (0); - do { - String x997; - } while (0); - do { - String x998; - } while (0); - do { - String x999; - } while (0); - do { - String x1000; - } while (0); - do { - String x1001; - } while (0); - do { - String x1002; - } while (0); - do { - String x1003; - } while (0); - do { - String x1004; - } while (0); - do { - String x1005; - } while (0); - do { - String x1006; - } while (0); - do { - String x1007; - } while (0); - do { - String x1008; - } while (0); - do { - String x1009; - } while (0); - do { - String x1010; - } while (0); - do { - String x1011; - } while (0); - do { - String x1012; - } while (0); - do { - String x1013; - } while (0); - do { - String x1014; - } while (0); - do { - String x1015; - } while (0); - do { - String x1016; - } while (0); - do { - String x1017; - } while (0); - do { - String x1018; - } while (0); - do { - String x1019; - } while (0); - do { - String x1020; - } while (0); - do { - String x1021; - } while (0); - do { - String x1022; - } while (0); - do { - String x1023; - } while (0); - do { - String x1024; - } while (0); + READ1025; } // semmle-extractor-options: -std=c++20 --clang 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 b5f1c4c4e63..32421057d22 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -17300,18468 +17300,18468 @@ ir.cpp: # 2684| v2684_8(void) = ExitFunction : many-defs-per-use.cpp: -# 17| void many_defs_per_use() -# 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| mu17_2(unknown) = AliasedDefinition : -# 17| mu17_3(unknown) = InitializeNonLocal : +# 34| void many_defs_per_use() +# 34| Block 0 +# 34| v34_1(void) = EnterFunction : +# 34| mu34_2(unknown) = AliasedDefinition : +# 34| mu34_3(unknown) = InitializeNonLocal : #-----| Goto -> Block 1 -# 19| Block 1 -# 19| r19_1(glval) = VariableAddress[x0] : -# 19| mu19_2(String) = Uninitialized[x0] : &:r19_1 -# 19| r19_3(glval) = FunctionAddress[String] : -# 19| v19_4(void) = Call[String] : func:r19_3, this:r19_1 -# 19| mu19_5(unknown) = ^CallSideEffect : ~m? -# 19| mu19_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r19_1 -# 20| r20_1(glval) = VariableAddress[x0] : -# 20| r20_2(glval) = FunctionAddress[~String] : -# 20| v20_3(void) = Call[~String] : func:r20_2, this:r20_1 -# 20| mu20_4(unknown) = ^CallSideEffect : ~m? -# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_1, ~m? -# 20| mu20_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r20_1 -# 20| r20_7(bool) = Constant[0] : -# 20| v20_8(void) = ConditionalBranch : r20_7 +# 35| Block 1 +# 35| r35_1(glval) = VariableAddress[x0] : +# 35| mu35_2(String) = Uninitialized[x0] : &:r35_1 +# 35| r35_3(glval) = FunctionAddress[String] : +# 35| v35_4(void) = Call[String] : func:r35_3, this:r35_1 +# 35| mu35_5(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1 +# 35| r35_7(glval) = VariableAddress[x0] : +# 35| r35_8(glval) = FunctionAddress[~String] : +# 35| v35_9(void) = Call[~String] : func:r35_8, this:r35_7 +# 35| mu35_10(unknown) = ^CallSideEffect : ~m? +# 35| v35_11(void) = ^IndirectReadSideEffect[-1] : &:r35_7, ~m? +# 35| mu35_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7 +# 35| r35_13(bool) = Constant[0] : +# 35| v35_14(void) = ConditionalBranch : r35_13 #-----| False -> Block 2 #-----| True (back edge) -> Block 1 -# 22| Block 2 -# 22| r22_1(glval) = VariableAddress[x1] : -# 22| mu22_2(String) = Uninitialized[x1] : &:r22_1 -# 22| r22_3(glval) = FunctionAddress[String] : -# 22| v22_4(void) = Call[String] : func:r22_3, this:r22_1 -# 22| mu22_5(unknown) = ^CallSideEffect : ~m? -# 22| mu22_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r22_1 -# 23| r23_1(glval) = VariableAddress[x1] : -# 23| r23_2(glval) = FunctionAddress[~String] : -# 23| v23_3(void) = Call[~String] : func:r23_2, this:r23_1 -# 23| mu23_4(unknown) = ^CallSideEffect : ~m? -# 23| v23_5(void) = ^IndirectReadSideEffect[-1] : &:r23_1, ~m? -# 23| mu23_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r23_1 -# 23| r23_7(bool) = Constant[0] : -# 23| v23_8(void) = ConditionalBranch : r23_7 +# 35| Block 2 +# 35| r35_15(glval) = VariableAddress[x1] : +# 35| mu35_16(String) = Uninitialized[x1] : &:r35_15 +# 35| r35_17(glval) = FunctionAddress[String] : +# 35| v35_18(void) = Call[String] : func:r35_17, this:r35_15 +# 35| mu35_19(unknown) = ^CallSideEffect : ~m? +# 35| mu35_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_15 +# 35| r35_21(glval) = VariableAddress[x1] : +# 35| r35_22(glval) = FunctionAddress[~String] : +# 35| v35_23(void) = Call[~String] : func:r35_22, this:r35_21 +# 35| mu35_24(unknown) = ^CallSideEffect : ~m? +# 35| v35_25(void) = ^IndirectReadSideEffect[-1] : &:r35_21, ~m? +# 35| mu35_26(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_21 +# 35| r35_27(bool) = Constant[0] : +# 35| v35_28(void) = ConditionalBranch : r35_27 #-----| False -> Block 3 #-----| True (back edge) -> Block 2 -# 25| Block 3 -# 25| r25_1(glval) = VariableAddress[x2] : -# 25| mu25_2(String) = Uninitialized[x2] : &:r25_1 -# 25| r25_3(glval) = FunctionAddress[String] : -# 25| v25_4(void) = Call[String] : func:r25_3, this:r25_1 -# 25| mu25_5(unknown) = ^CallSideEffect : ~m? -# 25| mu25_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r25_1 -# 26| r26_1(glval) = VariableAddress[x2] : -# 26| r26_2(glval) = FunctionAddress[~String] : -# 26| v26_3(void) = Call[~String] : func:r26_2, this:r26_1 -# 26| mu26_4(unknown) = ^CallSideEffect : ~m? -# 26| v26_5(void) = ^IndirectReadSideEffect[-1] : &:r26_1, ~m? -# 26| mu26_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r26_1 -# 26| r26_7(bool) = Constant[0] : -# 26| v26_8(void) = ConditionalBranch : r26_7 +# 35| Block 3 +# 35| r35_29(glval) = VariableAddress[x2] : +# 35| mu35_30(String) = Uninitialized[x2] : &:r35_29 +# 35| r35_31(glval) = FunctionAddress[String] : +# 35| v35_32(void) = Call[String] : func:r35_31, this:r35_29 +# 35| mu35_33(unknown) = ^CallSideEffect : ~m? +# 35| mu35_34(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_29 +# 35| r35_35(glval) = VariableAddress[x2] : +# 35| r35_36(glval) = FunctionAddress[~String] : +# 35| v35_37(void) = Call[~String] : func:r35_36, this:r35_35 +# 35| mu35_38(unknown) = ^CallSideEffect : ~m? +# 35| v35_39(void) = ^IndirectReadSideEffect[-1] : &:r35_35, ~m? +# 35| mu35_40(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_35 +# 35| r35_41(bool) = Constant[0] : +# 35| v35_42(void) = ConditionalBranch : r35_41 #-----| False -> Block 4 #-----| True (back edge) -> Block 3 -# 28| Block 4 -# 28| r28_1(glval) = VariableAddress[x3] : -# 28| mu28_2(String) = Uninitialized[x3] : &:r28_1 -# 28| r28_3(glval) = FunctionAddress[String] : -# 28| v28_4(void) = Call[String] : func:r28_3, this:r28_1 -# 28| mu28_5(unknown) = ^CallSideEffect : ~m? -# 28| mu28_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r28_1 -# 29| r29_1(glval) = VariableAddress[x3] : -# 29| r29_2(glval) = FunctionAddress[~String] : -# 29| v29_3(void) = Call[~String] : func:r29_2, this:r29_1 -# 29| mu29_4(unknown) = ^CallSideEffect : ~m? -# 29| v29_5(void) = ^IndirectReadSideEffect[-1] : &:r29_1, ~m? -# 29| mu29_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r29_1 -# 29| r29_7(bool) = Constant[0] : -# 29| v29_8(void) = ConditionalBranch : r29_7 +# 35| Block 4 +# 35| r35_43(glval) = VariableAddress[x3] : +# 35| mu35_44(String) = Uninitialized[x3] : &:r35_43 +# 35| r35_45(glval) = FunctionAddress[String] : +# 35| v35_46(void) = Call[String] : func:r35_45, this:r35_43 +# 35| mu35_47(unknown) = ^CallSideEffect : ~m? +# 35| mu35_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_43 +# 35| r35_49(glval) = VariableAddress[x3] : +# 35| r35_50(glval) = FunctionAddress[~String] : +# 35| v35_51(void) = Call[~String] : func:r35_50, this:r35_49 +# 35| mu35_52(unknown) = ^CallSideEffect : ~m? +# 35| v35_53(void) = ^IndirectReadSideEffect[-1] : &:r35_49, ~m? +# 35| mu35_54(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_49 +# 35| r35_55(bool) = Constant[0] : +# 35| v35_56(void) = ConditionalBranch : r35_55 #-----| False -> Block 5 #-----| True (back edge) -> Block 4 -# 31| Block 5 -# 31| r31_1(glval) = VariableAddress[x4] : -# 31| mu31_2(String) = Uninitialized[x4] : &:r31_1 -# 31| r31_3(glval) = FunctionAddress[String] : -# 31| v31_4(void) = Call[String] : func:r31_3, this:r31_1 -# 31| mu31_5(unknown) = ^CallSideEffect : ~m? -# 31| mu31_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r31_1 -# 32| r32_1(glval) = VariableAddress[x4] : -# 32| r32_2(glval) = FunctionAddress[~String] : -# 32| v32_3(void) = Call[~String] : func:r32_2, this:r32_1 -# 32| mu32_4(unknown) = ^CallSideEffect : ~m? -# 32| v32_5(void) = ^IndirectReadSideEffect[-1] : &:r32_1, ~m? -# 32| mu32_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r32_1 -# 32| r32_7(bool) = Constant[0] : -# 32| v32_8(void) = ConditionalBranch : r32_7 +# 35| Block 5 +# 35| r35_57(glval) = VariableAddress[x4] : +# 35| mu35_58(String) = Uninitialized[x4] : &:r35_57 +# 35| r35_59(glval) = FunctionAddress[String] : +# 35| v35_60(void) = Call[String] : func:r35_59, this:r35_57 +# 35| mu35_61(unknown) = ^CallSideEffect : ~m? +# 35| mu35_62(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_57 +# 35| r35_63(glval) = VariableAddress[x4] : +# 35| r35_64(glval) = FunctionAddress[~String] : +# 35| v35_65(void) = Call[~String] : func:r35_64, this:r35_63 +# 35| mu35_66(unknown) = ^CallSideEffect : ~m? +# 35| v35_67(void) = ^IndirectReadSideEffect[-1] : &:r35_63, ~m? +# 35| mu35_68(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_63 +# 35| r35_69(bool) = Constant[0] : +# 35| v35_70(void) = ConditionalBranch : r35_69 #-----| False -> Block 6 #-----| True (back edge) -> Block 5 -# 34| Block 6 -# 34| r34_1(glval) = VariableAddress[x5] : -# 34| mu34_2(String) = Uninitialized[x5] : &:r34_1 -# 34| r34_3(glval) = FunctionAddress[String] : -# 34| v34_4(void) = Call[String] : func:r34_3, this:r34_1 -# 34| mu34_5(unknown) = ^CallSideEffect : ~m? -# 34| mu34_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 -# 35| r35_1(glval) = VariableAddress[x5] : -# 35| r35_2(glval) = FunctionAddress[~String] : -# 35| v35_3(void) = Call[~String] : func:r35_2, this:r35_1 -# 35| mu35_4(unknown) = ^CallSideEffect : ~m? -# 35| v35_5(void) = ^IndirectReadSideEffect[-1] : &:r35_1, ~m? -# 35| mu35_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1 -# 35| r35_7(bool) = Constant[0] : -# 35| v35_8(void) = ConditionalBranch : r35_7 +# 35| Block 6 +# 35| r35_71(glval) = VariableAddress[x5] : +# 35| mu35_72(String) = Uninitialized[x5] : &:r35_71 +# 35| r35_73(glval) = FunctionAddress[String] : +# 35| v35_74(void) = Call[String] : func:r35_73, this:r35_71 +# 35| mu35_75(unknown) = ^CallSideEffect : ~m? +# 35| mu35_76(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_71 +# 35| r35_77(glval) = VariableAddress[x5] : +# 35| r35_78(glval) = FunctionAddress[~String] : +# 35| v35_79(void) = Call[~String] : func:r35_78, this:r35_77 +# 35| mu35_80(unknown) = ^CallSideEffect : ~m? +# 35| v35_81(void) = ^IndirectReadSideEffect[-1] : &:r35_77, ~m? +# 35| mu35_82(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_77 +# 35| r35_83(bool) = Constant[0] : +# 35| v35_84(void) = ConditionalBranch : r35_83 #-----| False -> Block 7 #-----| True (back edge) -> Block 6 -# 37| Block 7 -# 37| r37_1(glval) = VariableAddress[x6] : -# 37| mu37_2(String) = Uninitialized[x6] : &:r37_1 -# 37| r37_3(glval) = FunctionAddress[String] : -# 37| v37_4(void) = Call[String] : func:r37_3, this:r37_1 -# 37| mu37_5(unknown) = ^CallSideEffect : ~m? -# 37| mu37_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r37_1 -# 38| r38_1(glval) = VariableAddress[x6] : -# 38| r38_2(glval) = FunctionAddress[~String] : -# 38| v38_3(void) = Call[~String] : func:r38_2, this:r38_1 -# 38| mu38_4(unknown) = ^CallSideEffect : ~m? -# 38| v38_5(void) = ^IndirectReadSideEffect[-1] : &:r38_1, ~m? -# 38| mu38_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r38_1 -# 38| r38_7(bool) = Constant[0] : -# 38| v38_8(void) = ConditionalBranch : r38_7 +# 35| Block 7 +# 35| r35_85(glval) = VariableAddress[x6] : +# 35| mu35_86(String) = Uninitialized[x6] : &:r35_85 +# 35| r35_87(glval) = FunctionAddress[String] : +# 35| v35_88(void) = Call[String] : func:r35_87, this:r35_85 +# 35| mu35_89(unknown) = ^CallSideEffect : ~m? +# 35| mu35_90(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_85 +# 35| r35_91(glval) = VariableAddress[x6] : +# 35| r35_92(glval) = FunctionAddress[~String] : +# 35| v35_93(void) = Call[~String] : func:r35_92, this:r35_91 +# 35| mu35_94(unknown) = ^CallSideEffect : ~m? +# 35| v35_95(void) = ^IndirectReadSideEffect[-1] : &:r35_91, ~m? +# 35| mu35_96(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_91 +# 35| r35_97(bool) = Constant[0] : +# 35| v35_98(void) = ConditionalBranch : r35_97 #-----| False -> Block 8 #-----| True (back edge) -> Block 7 -# 40| Block 8 -# 40| r40_1(glval) = VariableAddress[x7] : -# 40| mu40_2(String) = Uninitialized[x7] : &:r40_1 -# 40| r40_3(glval) = FunctionAddress[String] : -# 40| v40_4(void) = Call[String] : func:r40_3, this:r40_1 -# 40| mu40_5(unknown) = ^CallSideEffect : ~m? -# 40| mu40_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r40_1 -# 41| r41_1(glval) = VariableAddress[x7] : -# 41| r41_2(glval) = FunctionAddress[~String] : -# 41| v41_3(void) = Call[~String] : func:r41_2, this:r41_1 -# 41| mu41_4(unknown) = ^CallSideEffect : ~m? -# 41| v41_5(void) = ^IndirectReadSideEffect[-1] : &:r41_1, ~m? -# 41| mu41_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r41_1 -# 41| r41_7(bool) = Constant[0] : -# 41| v41_8(void) = ConditionalBranch : r41_7 +# 35| Block 8 +# 35| r35_99(glval) = VariableAddress[x7] : +# 35| mu35_100(String) = Uninitialized[x7] : &:r35_99 +# 35| r35_101(glval) = FunctionAddress[String] : +# 35| v35_102(void) = Call[String] : func:r35_101, this:r35_99 +# 35| mu35_103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_99 +# 35| r35_105(glval) = VariableAddress[x7] : +# 35| r35_106(glval) = FunctionAddress[~String] : +# 35| v35_107(void) = Call[~String] : func:r35_106, this:r35_105 +# 35| mu35_108(unknown) = ^CallSideEffect : ~m? +# 35| v35_109(void) = ^IndirectReadSideEffect[-1] : &:r35_105, ~m? +# 35| mu35_110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_105 +# 35| r35_111(bool) = Constant[0] : +# 35| v35_112(void) = ConditionalBranch : r35_111 #-----| False -> Block 9 #-----| True (back edge) -> Block 8 -# 43| Block 9 -# 43| r43_1(glval) = VariableAddress[x8] : -# 43| mu43_2(String) = Uninitialized[x8] : &:r43_1 -# 43| r43_3(glval) = FunctionAddress[String] : -# 43| v43_4(void) = Call[String] : func:r43_3, this:r43_1 -# 43| mu43_5(unknown) = ^CallSideEffect : ~m? -# 43| mu43_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 -# 44| r44_1(glval) = VariableAddress[x8] : -# 44| r44_2(glval) = FunctionAddress[~String] : -# 44| v44_3(void) = Call[~String] : func:r44_2, this:r44_1 -# 44| mu44_4(unknown) = ^CallSideEffect : ~m? -# 44| v44_5(void) = ^IndirectReadSideEffect[-1] : &:r44_1, ~m? -# 44| mu44_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r44_1 -# 44| r44_7(bool) = Constant[0] : -# 44| v44_8(void) = ConditionalBranch : r44_7 +# 35| Block 9 +# 35| r35_113(glval) = VariableAddress[x8] : +# 35| mu35_114(String) = Uninitialized[x8] : &:r35_113 +# 35| r35_115(glval) = FunctionAddress[String] : +# 35| v35_116(void) = Call[String] : func:r35_115, this:r35_113 +# 35| mu35_117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_113 +# 35| r35_119(glval) = VariableAddress[x8] : +# 35| r35_120(glval) = FunctionAddress[~String] : +# 35| v35_121(void) = Call[~String] : func:r35_120, this:r35_119 +# 35| mu35_122(unknown) = ^CallSideEffect : ~m? +# 35| v35_123(void) = ^IndirectReadSideEffect[-1] : &:r35_119, ~m? +# 35| mu35_124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_119 +# 35| r35_125(bool) = Constant[0] : +# 35| v35_126(void) = ConditionalBranch : r35_125 #-----| False -> Block 10 #-----| True (back edge) -> Block 9 -# 46| Block 10 -# 46| r46_1(glval) = VariableAddress[x9] : -# 46| mu46_2(String) = Uninitialized[x9] : &:r46_1 -# 46| r46_3(glval) = FunctionAddress[String] : -# 46| v46_4(void) = Call[String] : func:r46_3, this:r46_1 -# 46| mu46_5(unknown) = ^CallSideEffect : ~m? -# 46| mu46_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r46_1 -# 47| r47_1(glval) = VariableAddress[x9] : -# 47| r47_2(glval) = FunctionAddress[~String] : -# 47| v47_3(void) = Call[~String] : func:r47_2, this:r47_1 -# 47| mu47_4(unknown) = ^CallSideEffect : ~m? -# 47| v47_5(void) = ^IndirectReadSideEffect[-1] : &:r47_1, ~m? -# 47| mu47_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r47_1 -# 47| r47_7(bool) = Constant[0] : -# 47| v47_8(void) = ConditionalBranch : r47_7 +# 35| Block 10 +# 35| r35_127(glval) = VariableAddress[x9] : +# 35| mu35_128(String) = Uninitialized[x9] : &:r35_127 +# 35| r35_129(glval) = FunctionAddress[String] : +# 35| v35_130(void) = Call[String] : func:r35_129, this:r35_127 +# 35| mu35_131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_127 +# 35| r35_133(glval) = VariableAddress[x9] : +# 35| r35_134(glval) = FunctionAddress[~String] : +# 35| v35_135(void) = Call[~String] : func:r35_134, this:r35_133 +# 35| mu35_136(unknown) = ^CallSideEffect : ~m? +# 35| v35_137(void) = ^IndirectReadSideEffect[-1] : &:r35_133, ~m? +# 35| mu35_138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_133 +# 35| r35_139(bool) = Constant[0] : +# 35| v35_140(void) = ConditionalBranch : r35_139 #-----| False -> Block 11 #-----| True (back edge) -> Block 10 -# 49| Block 11 -# 49| r49_1(glval) = VariableAddress[x10] : -# 49| mu49_2(String) = Uninitialized[x10] : &:r49_1 -# 49| r49_3(glval) = FunctionAddress[String] : -# 49| v49_4(void) = Call[String] : func:r49_3, this:r49_1 -# 49| mu49_5(unknown) = ^CallSideEffect : ~m? -# 49| mu49_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r49_1 -# 50| r50_1(glval) = VariableAddress[x10] : -# 50| r50_2(glval) = FunctionAddress[~String] : -# 50| v50_3(void) = Call[~String] : func:r50_2, this:r50_1 -# 50| mu50_4(unknown) = ^CallSideEffect : ~m? -# 50| v50_5(void) = ^IndirectReadSideEffect[-1] : &:r50_1, ~m? -# 50| mu50_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 -# 50| r50_7(bool) = Constant[0] : -# 50| v50_8(void) = ConditionalBranch : r50_7 +# 35| Block 11 +# 35| r35_141(glval) = VariableAddress[x10] : +# 35| mu35_142(String) = Uninitialized[x10] : &:r35_141 +# 35| r35_143(glval) = FunctionAddress[String] : +# 35| v35_144(void) = Call[String] : func:r35_143, this:r35_141 +# 35| mu35_145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_141 +# 35| r35_147(glval) = VariableAddress[x10] : +# 35| r35_148(glval) = FunctionAddress[~String] : +# 35| v35_149(void) = Call[~String] : func:r35_148, this:r35_147 +# 35| mu35_150(unknown) = ^CallSideEffect : ~m? +# 35| v35_151(void) = ^IndirectReadSideEffect[-1] : &:r35_147, ~m? +# 35| mu35_152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_147 +# 35| r35_153(bool) = Constant[0] : +# 35| v35_154(void) = ConditionalBranch : r35_153 #-----| False -> Block 12 #-----| True (back edge) -> Block 11 -# 52| Block 12 -# 52| r52_1(glval) = VariableAddress[x11] : -# 52| mu52_2(String) = Uninitialized[x11] : &:r52_1 -# 52| r52_3(glval) = FunctionAddress[String] : -# 52| v52_4(void) = Call[String] : func:r52_3, this:r52_1 -# 52| mu52_5(unknown) = ^CallSideEffect : ~m? -# 52| mu52_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r52_1 -# 53| r53_1(glval) = VariableAddress[x11] : -# 53| r53_2(glval) = FunctionAddress[~String] : -# 53| v53_3(void) = Call[~String] : func:r53_2, this:r53_1 -# 53| mu53_4(unknown) = ^CallSideEffect : ~m? -# 53| v53_5(void) = ^IndirectReadSideEffect[-1] : &:r53_1, ~m? -# 53| mu53_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r53_1 -# 53| r53_7(bool) = Constant[0] : -# 53| v53_8(void) = ConditionalBranch : r53_7 +# 35| Block 12 +# 35| r35_155(glval) = VariableAddress[x11] : +# 35| mu35_156(String) = Uninitialized[x11] : &:r35_155 +# 35| r35_157(glval) = FunctionAddress[String] : +# 35| v35_158(void) = Call[String] : func:r35_157, this:r35_155 +# 35| mu35_159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_155 +# 35| r35_161(glval) = VariableAddress[x11] : +# 35| r35_162(glval) = FunctionAddress[~String] : +# 35| v35_163(void) = Call[~String] : func:r35_162, this:r35_161 +# 35| mu35_164(unknown) = ^CallSideEffect : ~m? +# 35| v35_165(void) = ^IndirectReadSideEffect[-1] : &:r35_161, ~m? +# 35| mu35_166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_161 +# 35| r35_167(bool) = Constant[0] : +# 35| v35_168(void) = ConditionalBranch : r35_167 #-----| False -> Block 13 #-----| True (back edge) -> Block 12 -# 55| Block 13 -# 55| r55_1(glval) = VariableAddress[x12] : -# 55| mu55_2(String) = Uninitialized[x12] : &:r55_1 -# 55| r55_3(glval) = FunctionAddress[String] : -# 55| v55_4(void) = Call[String] : func:r55_3, this:r55_1 -# 55| mu55_5(unknown) = ^CallSideEffect : ~m? -# 55| mu55_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r55_1 -# 56| r56_1(glval) = VariableAddress[x12] : -# 56| r56_2(glval) = FunctionAddress[~String] : -# 56| v56_3(void) = Call[~String] : func:r56_2, this:r56_1 -# 56| mu56_4(unknown) = ^CallSideEffect : ~m? -# 56| v56_5(void) = ^IndirectReadSideEffect[-1] : &:r56_1, ~m? -# 56| mu56_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r56_1 -# 56| r56_7(bool) = Constant[0] : -# 56| v56_8(void) = ConditionalBranch : r56_7 +# 35| Block 13 +# 35| r35_169(glval) = VariableAddress[x12] : +# 35| mu35_170(String) = Uninitialized[x12] : &:r35_169 +# 35| r35_171(glval) = FunctionAddress[String] : +# 35| v35_172(void) = Call[String] : func:r35_171, this:r35_169 +# 35| mu35_173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_169 +# 35| r35_175(glval) = VariableAddress[x12] : +# 35| r35_176(glval) = FunctionAddress[~String] : +# 35| v35_177(void) = Call[~String] : func:r35_176, this:r35_175 +# 35| mu35_178(unknown) = ^CallSideEffect : ~m? +# 35| v35_179(void) = ^IndirectReadSideEffect[-1] : &:r35_175, ~m? +# 35| mu35_180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_175 +# 35| r35_181(bool) = Constant[0] : +# 35| v35_182(void) = ConditionalBranch : r35_181 #-----| False -> Block 14 #-----| True (back edge) -> Block 13 -# 58| Block 14 -# 58| r58_1(glval) = VariableAddress[x13] : -# 58| mu58_2(String) = Uninitialized[x13] : &:r58_1 -# 58| r58_3(glval) = FunctionAddress[String] : -# 58| v58_4(void) = Call[String] : func:r58_3, this:r58_1 -# 58| mu58_5(unknown) = ^CallSideEffect : ~m? -# 58| mu58_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r58_1 -# 59| r59_1(glval) = VariableAddress[x13] : -# 59| r59_2(glval) = FunctionAddress[~String] : -# 59| v59_3(void) = Call[~String] : func:r59_2, this:r59_1 -# 59| mu59_4(unknown) = ^CallSideEffect : ~m? -# 59| v59_5(void) = ^IndirectReadSideEffect[-1] : &:r59_1, ~m? -# 59| mu59_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r59_1 -# 59| r59_7(bool) = Constant[0] : -# 59| v59_8(void) = ConditionalBranch : r59_7 +# 35| Block 14 +# 35| r35_183(glval) = VariableAddress[x13] : +# 35| mu35_184(String) = Uninitialized[x13] : &:r35_183 +# 35| r35_185(glval) = FunctionAddress[String] : +# 35| v35_186(void) = Call[String] : func:r35_185, this:r35_183 +# 35| mu35_187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_183 +# 35| r35_189(glval) = VariableAddress[x13] : +# 35| r35_190(glval) = FunctionAddress[~String] : +# 35| v35_191(void) = Call[~String] : func:r35_190, this:r35_189 +# 35| mu35_192(unknown) = ^CallSideEffect : ~m? +# 35| v35_193(void) = ^IndirectReadSideEffect[-1] : &:r35_189, ~m? +# 35| mu35_194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_189 +# 35| r35_195(bool) = Constant[0] : +# 35| v35_196(void) = ConditionalBranch : r35_195 #-----| False -> Block 15 #-----| True (back edge) -> Block 14 -# 61| Block 15 -# 61| r61_1(glval) = VariableAddress[x14] : -# 61| mu61_2(String) = Uninitialized[x14] : &:r61_1 -# 61| r61_3(glval) = FunctionAddress[String] : -# 61| v61_4(void) = Call[String] : func:r61_3, this:r61_1 -# 61| mu61_5(unknown) = ^CallSideEffect : ~m? -# 61| mu61_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r61_1 -# 62| r62_1(glval) = VariableAddress[x14] : -# 62| r62_2(glval) = FunctionAddress[~String] : -# 62| v62_3(void) = Call[~String] : func:r62_2, this:r62_1 -# 62| mu62_4(unknown) = ^CallSideEffect : ~m? -# 62| v62_5(void) = ^IndirectReadSideEffect[-1] : &:r62_1, ~m? -# 62| mu62_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r62_1 -# 62| r62_7(bool) = Constant[0] : -# 62| v62_8(void) = ConditionalBranch : r62_7 +# 35| Block 15 +# 35| r35_197(glval) = VariableAddress[x14] : +# 35| mu35_198(String) = Uninitialized[x14] : &:r35_197 +# 35| r35_199(glval) = FunctionAddress[String] : +# 35| v35_200(void) = Call[String] : func:r35_199, this:r35_197 +# 35| mu35_201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_197 +# 35| r35_203(glval) = VariableAddress[x14] : +# 35| r35_204(glval) = FunctionAddress[~String] : +# 35| v35_205(void) = Call[~String] : func:r35_204, this:r35_203 +# 35| mu35_206(unknown) = ^CallSideEffect : ~m? +# 35| v35_207(void) = ^IndirectReadSideEffect[-1] : &:r35_203, ~m? +# 35| mu35_208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_203 +# 35| r35_209(bool) = Constant[0] : +# 35| v35_210(void) = ConditionalBranch : r35_209 #-----| False -> Block 16 #-----| True (back edge) -> Block 15 -# 64| Block 16 -# 64| r64_1(glval) = VariableAddress[x15] : -# 64| mu64_2(String) = Uninitialized[x15] : &:r64_1 -# 64| r64_3(glval) = FunctionAddress[String] : -# 64| v64_4(void) = Call[String] : func:r64_3, this:r64_1 -# 64| mu64_5(unknown) = ^CallSideEffect : ~m? -# 64| mu64_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r64_1 -# 65| r65_1(glval) = VariableAddress[x15] : -# 65| r65_2(glval) = FunctionAddress[~String] : -# 65| v65_3(void) = Call[~String] : func:r65_2, this:r65_1 -# 65| mu65_4(unknown) = ^CallSideEffect : ~m? -# 65| v65_5(void) = ^IndirectReadSideEffect[-1] : &:r65_1, ~m? -# 65| mu65_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r65_1 -# 65| r65_7(bool) = Constant[0] : -# 65| v65_8(void) = ConditionalBranch : r65_7 +# 35| Block 16 +# 35| r35_211(glval) = VariableAddress[x15] : +# 35| mu35_212(String) = Uninitialized[x15] : &:r35_211 +# 35| r35_213(glval) = FunctionAddress[String] : +# 35| v35_214(void) = Call[String] : func:r35_213, this:r35_211 +# 35| mu35_215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_211 +# 35| r35_217(glval) = VariableAddress[x15] : +# 35| r35_218(glval) = FunctionAddress[~String] : +# 35| v35_219(void) = Call[~String] : func:r35_218, this:r35_217 +# 35| mu35_220(unknown) = ^CallSideEffect : ~m? +# 35| v35_221(void) = ^IndirectReadSideEffect[-1] : &:r35_217, ~m? +# 35| mu35_222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_217 +# 35| r35_223(bool) = Constant[0] : +# 35| v35_224(void) = ConditionalBranch : r35_223 #-----| False -> Block 17 #-----| True (back edge) -> Block 16 -# 67| Block 17 -# 67| r67_1(glval) = VariableAddress[x16] : -# 67| mu67_2(String) = Uninitialized[x16] : &:r67_1 -# 67| r67_3(glval) = FunctionAddress[String] : -# 67| v67_4(void) = Call[String] : func:r67_3, this:r67_1 -# 67| mu67_5(unknown) = ^CallSideEffect : ~m? -# 67| mu67_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r67_1 -# 68| r68_1(glval) = VariableAddress[x16] : -# 68| r68_2(glval) = FunctionAddress[~String] : -# 68| v68_3(void) = Call[~String] : func:r68_2, this:r68_1 -# 68| mu68_4(unknown) = ^CallSideEffect : ~m? -# 68| v68_5(void) = ^IndirectReadSideEffect[-1] : &:r68_1, ~m? -# 68| mu68_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r68_1 -# 68| r68_7(bool) = Constant[0] : -# 68| v68_8(void) = ConditionalBranch : r68_7 +# 35| Block 17 +# 35| r35_225(glval) = VariableAddress[x16] : +# 35| mu35_226(String) = Uninitialized[x16] : &:r35_225 +# 35| r35_227(glval) = FunctionAddress[String] : +# 35| v35_228(void) = Call[String] : func:r35_227, this:r35_225 +# 35| mu35_229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_225 +# 35| r35_231(glval) = VariableAddress[x16] : +# 35| r35_232(glval) = FunctionAddress[~String] : +# 35| v35_233(void) = Call[~String] : func:r35_232, this:r35_231 +# 35| mu35_234(unknown) = ^CallSideEffect : ~m? +# 35| v35_235(void) = ^IndirectReadSideEffect[-1] : &:r35_231, ~m? +# 35| mu35_236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_231 +# 35| r35_237(bool) = Constant[0] : +# 35| v35_238(void) = ConditionalBranch : r35_237 #-----| False -> Block 18 #-----| True (back edge) -> Block 17 -# 70| Block 18 -# 70| r70_1(glval) = VariableAddress[x17] : -# 70| mu70_2(String) = Uninitialized[x17] : &:r70_1 -# 70| r70_3(glval) = FunctionAddress[String] : -# 70| v70_4(void) = Call[String] : func:r70_3, this:r70_1 -# 70| mu70_5(unknown) = ^CallSideEffect : ~m? -# 70| mu70_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r70_1 -# 71| r71_1(glval) = VariableAddress[x17] : -# 71| r71_2(glval) = FunctionAddress[~String] : -# 71| v71_3(void) = Call[~String] : func:r71_2, this:r71_1 -# 71| mu71_4(unknown) = ^CallSideEffect : ~m? -# 71| v71_5(void) = ^IndirectReadSideEffect[-1] : &:r71_1, ~m? -# 71| mu71_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r71_1 -# 71| r71_7(bool) = Constant[0] : -# 71| v71_8(void) = ConditionalBranch : r71_7 +# 35| Block 18 +# 35| r35_239(glval) = VariableAddress[x17] : +# 35| mu35_240(String) = Uninitialized[x17] : &:r35_239 +# 35| r35_241(glval) = FunctionAddress[String] : +# 35| v35_242(void) = Call[String] : func:r35_241, this:r35_239 +# 35| mu35_243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_239 +# 35| r35_245(glval) = VariableAddress[x17] : +# 35| r35_246(glval) = FunctionAddress[~String] : +# 35| v35_247(void) = Call[~String] : func:r35_246, this:r35_245 +# 35| mu35_248(unknown) = ^CallSideEffect : ~m? +# 35| v35_249(void) = ^IndirectReadSideEffect[-1] : &:r35_245, ~m? +# 35| mu35_250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_245 +# 35| r35_251(bool) = Constant[0] : +# 35| v35_252(void) = ConditionalBranch : r35_251 #-----| False -> Block 19 #-----| True (back edge) -> Block 18 -# 73| Block 19 -# 73| r73_1(glval) = VariableAddress[x18] : -# 73| mu73_2(String) = Uninitialized[x18] : &:r73_1 -# 73| r73_3(glval) = FunctionAddress[String] : -# 73| v73_4(void) = Call[String] : func:r73_3, this:r73_1 -# 73| mu73_5(unknown) = ^CallSideEffect : ~m? -# 73| mu73_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r73_1 -# 74| r74_1(glval) = VariableAddress[x18] : -# 74| r74_2(glval) = FunctionAddress[~String] : -# 74| v74_3(void) = Call[~String] : func:r74_2, this:r74_1 -# 74| mu74_4(unknown) = ^CallSideEffect : ~m? -# 74| v74_5(void) = ^IndirectReadSideEffect[-1] : &:r74_1, ~m? -# 74| mu74_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r74_1 -# 74| r74_7(bool) = Constant[0] : -# 74| v74_8(void) = ConditionalBranch : r74_7 +# 35| Block 19 +# 35| r35_253(glval) = VariableAddress[x18] : +# 35| mu35_254(String) = Uninitialized[x18] : &:r35_253 +# 35| r35_255(glval) = FunctionAddress[String] : +# 35| v35_256(void) = Call[String] : func:r35_255, this:r35_253 +# 35| mu35_257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_253 +# 35| r35_259(glval) = VariableAddress[x18] : +# 35| r35_260(glval) = FunctionAddress[~String] : +# 35| v35_261(void) = Call[~String] : func:r35_260, this:r35_259 +# 35| mu35_262(unknown) = ^CallSideEffect : ~m? +# 35| v35_263(void) = ^IndirectReadSideEffect[-1] : &:r35_259, ~m? +# 35| mu35_264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_259 +# 35| r35_265(bool) = Constant[0] : +# 35| v35_266(void) = ConditionalBranch : r35_265 #-----| False -> Block 20 #-----| True (back edge) -> Block 19 -# 76| Block 20 -# 76| r76_1(glval) = VariableAddress[x19] : -# 76| mu76_2(String) = Uninitialized[x19] : &:r76_1 -# 76| r76_3(glval) = FunctionAddress[String] : -# 76| v76_4(void) = Call[String] : func:r76_3, this:r76_1 -# 76| mu76_5(unknown) = ^CallSideEffect : ~m? -# 76| mu76_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r76_1 -# 77| r77_1(glval) = VariableAddress[x19] : -# 77| r77_2(glval) = FunctionAddress[~String] : -# 77| v77_3(void) = Call[~String] : func:r77_2, this:r77_1 -# 77| mu77_4(unknown) = ^CallSideEffect : ~m? -# 77| v77_5(void) = ^IndirectReadSideEffect[-1] : &:r77_1, ~m? -# 77| mu77_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r77_1 -# 77| r77_7(bool) = Constant[0] : -# 77| v77_8(void) = ConditionalBranch : r77_7 +# 35| Block 20 +# 35| r35_267(glval) = VariableAddress[x19] : +# 35| mu35_268(String) = Uninitialized[x19] : &:r35_267 +# 35| r35_269(glval) = FunctionAddress[String] : +# 35| v35_270(void) = Call[String] : func:r35_269, this:r35_267 +# 35| mu35_271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_267 +# 35| r35_273(glval) = VariableAddress[x19] : +# 35| r35_274(glval) = FunctionAddress[~String] : +# 35| v35_275(void) = Call[~String] : func:r35_274, this:r35_273 +# 35| mu35_276(unknown) = ^CallSideEffect : ~m? +# 35| v35_277(void) = ^IndirectReadSideEffect[-1] : &:r35_273, ~m? +# 35| mu35_278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_273 +# 35| r35_279(bool) = Constant[0] : +# 35| v35_280(void) = ConditionalBranch : r35_279 #-----| False -> Block 21 #-----| True (back edge) -> Block 20 -# 79| Block 21 -# 79| r79_1(glval) = VariableAddress[x20] : -# 79| mu79_2(String) = Uninitialized[x20] : &:r79_1 -# 79| r79_3(glval) = FunctionAddress[String] : -# 79| v79_4(void) = Call[String] : func:r79_3, this:r79_1 -# 79| mu79_5(unknown) = ^CallSideEffect : ~m? -# 79| mu79_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r79_1 -# 80| r80_1(glval) = VariableAddress[x20] : -# 80| r80_2(glval) = FunctionAddress[~String] : -# 80| v80_3(void) = Call[~String] : func:r80_2, this:r80_1 -# 80| mu80_4(unknown) = ^CallSideEffect : ~m? -# 80| v80_5(void) = ^IndirectReadSideEffect[-1] : &:r80_1, ~m? -# 80| mu80_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r80_1 -# 80| r80_7(bool) = Constant[0] : -# 80| v80_8(void) = ConditionalBranch : r80_7 +# 35| Block 21 +# 35| r35_281(glval) = VariableAddress[x20] : +# 35| mu35_282(String) = Uninitialized[x20] : &:r35_281 +# 35| r35_283(glval) = FunctionAddress[String] : +# 35| v35_284(void) = Call[String] : func:r35_283, this:r35_281 +# 35| mu35_285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_281 +# 35| r35_287(glval) = VariableAddress[x20] : +# 35| r35_288(glval) = FunctionAddress[~String] : +# 35| v35_289(void) = Call[~String] : func:r35_288, this:r35_287 +# 35| mu35_290(unknown) = ^CallSideEffect : ~m? +# 35| v35_291(void) = ^IndirectReadSideEffect[-1] : &:r35_287, ~m? +# 35| mu35_292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_287 +# 35| r35_293(bool) = Constant[0] : +# 35| v35_294(void) = ConditionalBranch : r35_293 #-----| False -> Block 22 #-----| True (back edge) -> Block 21 -# 82| Block 22 -# 82| r82_1(glval) = VariableAddress[x21] : -# 82| mu82_2(String) = Uninitialized[x21] : &:r82_1 -# 82| r82_3(glval) = FunctionAddress[String] : -# 82| v82_4(void) = Call[String] : func:r82_3, this:r82_1 -# 82| mu82_5(unknown) = ^CallSideEffect : ~m? -# 82| mu82_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r82_1 -# 83| r83_1(glval) = VariableAddress[x21] : -# 83| r83_2(glval) = FunctionAddress[~String] : -# 83| v83_3(void) = Call[~String] : func:r83_2, this:r83_1 -# 83| mu83_4(unknown) = ^CallSideEffect : ~m? -# 83| v83_5(void) = ^IndirectReadSideEffect[-1] : &:r83_1, ~m? -# 83| mu83_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r83_1 -# 83| r83_7(bool) = Constant[0] : -# 83| v83_8(void) = ConditionalBranch : r83_7 +# 35| Block 22 +# 35| r35_295(glval) = VariableAddress[x21] : +# 35| mu35_296(String) = Uninitialized[x21] : &:r35_295 +# 35| r35_297(glval) = FunctionAddress[String] : +# 35| v35_298(void) = Call[String] : func:r35_297, this:r35_295 +# 35| mu35_299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_295 +# 35| r35_301(glval) = VariableAddress[x21] : +# 35| r35_302(glval) = FunctionAddress[~String] : +# 35| v35_303(void) = Call[~String] : func:r35_302, this:r35_301 +# 35| mu35_304(unknown) = ^CallSideEffect : ~m? +# 35| v35_305(void) = ^IndirectReadSideEffect[-1] : &:r35_301, ~m? +# 35| mu35_306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_301 +# 35| r35_307(bool) = Constant[0] : +# 35| v35_308(void) = ConditionalBranch : r35_307 #-----| False -> Block 23 #-----| True (back edge) -> Block 22 -# 85| Block 23 -# 85| r85_1(glval) = VariableAddress[x22] : -# 85| mu85_2(String) = Uninitialized[x22] : &:r85_1 -# 85| r85_3(glval) = FunctionAddress[String] : -# 85| v85_4(void) = Call[String] : func:r85_3, this:r85_1 -# 85| mu85_5(unknown) = ^CallSideEffect : ~m? -# 85| mu85_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r85_1 -# 86| r86_1(glval) = VariableAddress[x22] : -# 86| r86_2(glval) = FunctionAddress[~String] : -# 86| v86_3(void) = Call[~String] : func:r86_2, this:r86_1 -# 86| mu86_4(unknown) = ^CallSideEffect : ~m? -# 86| v86_5(void) = ^IndirectReadSideEffect[-1] : &:r86_1, ~m? -# 86| mu86_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r86_1 -# 86| r86_7(bool) = Constant[0] : -# 86| v86_8(void) = ConditionalBranch : r86_7 +# 35| Block 23 +# 35| r35_309(glval) = VariableAddress[x22] : +# 35| mu35_310(String) = Uninitialized[x22] : &:r35_309 +# 35| r35_311(glval) = FunctionAddress[String] : +# 35| v35_312(void) = Call[String] : func:r35_311, this:r35_309 +# 35| mu35_313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_309 +# 35| r35_315(glval) = VariableAddress[x22] : +# 35| r35_316(glval) = FunctionAddress[~String] : +# 35| v35_317(void) = Call[~String] : func:r35_316, this:r35_315 +# 35| mu35_318(unknown) = ^CallSideEffect : ~m? +# 35| v35_319(void) = ^IndirectReadSideEffect[-1] : &:r35_315, ~m? +# 35| mu35_320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_315 +# 35| r35_321(bool) = Constant[0] : +# 35| v35_322(void) = ConditionalBranch : r35_321 #-----| False -> Block 24 #-----| True (back edge) -> Block 23 -# 88| Block 24 -# 88| r88_1(glval) = VariableAddress[x23] : -# 88| mu88_2(String) = Uninitialized[x23] : &:r88_1 -# 88| r88_3(glval) = FunctionAddress[String] : -# 88| v88_4(void) = Call[String] : func:r88_3, this:r88_1 -# 88| mu88_5(unknown) = ^CallSideEffect : ~m? -# 88| mu88_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r88_1 -# 89| r89_1(glval) = VariableAddress[x23] : -# 89| r89_2(glval) = FunctionAddress[~String] : -# 89| v89_3(void) = Call[~String] : func:r89_2, this:r89_1 -# 89| mu89_4(unknown) = ^CallSideEffect : ~m? -# 89| v89_5(void) = ^IndirectReadSideEffect[-1] : &:r89_1, ~m? -# 89| mu89_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r89_1 -# 89| r89_7(bool) = Constant[0] : -# 89| v89_8(void) = ConditionalBranch : r89_7 +# 35| Block 24 +# 35| r35_323(glval) = VariableAddress[x23] : +# 35| mu35_324(String) = Uninitialized[x23] : &:r35_323 +# 35| r35_325(glval) = FunctionAddress[String] : +# 35| v35_326(void) = Call[String] : func:r35_325, this:r35_323 +# 35| mu35_327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_323 +# 35| r35_329(glval) = VariableAddress[x23] : +# 35| r35_330(glval) = FunctionAddress[~String] : +# 35| v35_331(void) = Call[~String] : func:r35_330, this:r35_329 +# 35| mu35_332(unknown) = ^CallSideEffect : ~m? +# 35| v35_333(void) = ^IndirectReadSideEffect[-1] : &:r35_329, ~m? +# 35| mu35_334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_329 +# 35| r35_335(bool) = Constant[0] : +# 35| v35_336(void) = ConditionalBranch : r35_335 #-----| False -> Block 25 #-----| True (back edge) -> Block 24 -# 91| Block 25 -# 91| r91_1(glval) = VariableAddress[x24] : -# 91| mu91_2(String) = Uninitialized[x24] : &:r91_1 -# 91| r91_3(glval) = FunctionAddress[String] : -# 91| v91_4(void) = Call[String] : func:r91_3, this:r91_1 -# 91| mu91_5(unknown) = ^CallSideEffect : ~m? -# 91| mu91_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r91_1 -# 92| r92_1(glval) = VariableAddress[x24] : -# 92| r92_2(glval) = FunctionAddress[~String] : -# 92| v92_3(void) = Call[~String] : func:r92_2, this:r92_1 -# 92| mu92_4(unknown) = ^CallSideEffect : ~m? -# 92| v92_5(void) = ^IndirectReadSideEffect[-1] : &:r92_1, ~m? -# 92| mu92_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r92_1 -# 92| r92_7(bool) = Constant[0] : -# 92| v92_8(void) = ConditionalBranch : r92_7 +# 35| Block 25 +# 35| r35_337(glval) = VariableAddress[x24] : +# 35| mu35_338(String) = Uninitialized[x24] : &:r35_337 +# 35| r35_339(glval) = FunctionAddress[String] : +# 35| v35_340(void) = Call[String] : func:r35_339, this:r35_337 +# 35| mu35_341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_337 +# 35| r35_343(glval) = VariableAddress[x24] : +# 35| r35_344(glval) = FunctionAddress[~String] : +# 35| v35_345(void) = Call[~String] : func:r35_344, this:r35_343 +# 35| mu35_346(unknown) = ^CallSideEffect : ~m? +# 35| v35_347(void) = ^IndirectReadSideEffect[-1] : &:r35_343, ~m? +# 35| mu35_348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_343 +# 35| r35_349(bool) = Constant[0] : +# 35| v35_350(void) = ConditionalBranch : r35_349 #-----| False -> Block 26 #-----| True (back edge) -> Block 25 -# 94| Block 26 -# 94| r94_1(glval) = VariableAddress[x25] : -# 94| mu94_2(String) = Uninitialized[x25] : &:r94_1 -# 94| r94_3(glval) = FunctionAddress[String] : -# 94| v94_4(void) = Call[String] : func:r94_3, this:r94_1 -# 94| mu94_5(unknown) = ^CallSideEffect : ~m? -# 94| mu94_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r94_1 -# 95| r95_1(glval) = VariableAddress[x25] : -# 95| r95_2(glval) = FunctionAddress[~String] : -# 95| v95_3(void) = Call[~String] : func:r95_2, this:r95_1 -# 95| mu95_4(unknown) = ^CallSideEffect : ~m? -# 95| v95_5(void) = ^IndirectReadSideEffect[-1] : &:r95_1, ~m? -# 95| mu95_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r95_1 -# 95| r95_7(bool) = Constant[0] : -# 95| v95_8(void) = ConditionalBranch : r95_7 +# 35| Block 26 +# 35| r35_351(glval) = VariableAddress[x25] : +# 35| mu35_352(String) = Uninitialized[x25] : &:r35_351 +# 35| r35_353(glval) = FunctionAddress[String] : +# 35| v35_354(void) = Call[String] : func:r35_353, this:r35_351 +# 35| mu35_355(unknown) = ^CallSideEffect : ~m? +# 35| mu35_356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_351 +# 35| r35_357(glval) = VariableAddress[x25] : +# 35| r35_358(glval) = FunctionAddress[~String] : +# 35| v35_359(void) = Call[~String] : func:r35_358, this:r35_357 +# 35| mu35_360(unknown) = ^CallSideEffect : ~m? +# 35| v35_361(void) = ^IndirectReadSideEffect[-1] : &:r35_357, ~m? +# 35| mu35_362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_357 +# 35| r35_363(bool) = Constant[0] : +# 35| v35_364(void) = ConditionalBranch : r35_363 #-----| False -> Block 27 #-----| True (back edge) -> Block 26 -# 97| Block 27 -# 97| r97_1(glval) = VariableAddress[x26] : -# 97| mu97_2(String) = Uninitialized[x26] : &:r97_1 -# 97| r97_3(glval) = FunctionAddress[String] : -# 97| v97_4(void) = Call[String] : func:r97_3, this:r97_1 -# 97| mu97_5(unknown) = ^CallSideEffect : ~m? -# 97| mu97_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r97_1 -# 98| r98_1(glval) = VariableAddress[x26] : -# 98| r98_2(glval) = FunctionAddress[~String] : -# 98| v98_3(void) = Call[~String] : func:r98_2, this:r98_1 -# 98| mu98_4(unknown) = ^CallSideEffect : ~m? -# 98| v98_5(void) = ^IndirectReadSideEffect[-1] : &:r98_1, ~m? -# 98| mu98_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r98_1 -# 98| r98_7(bool) = Constant[0] : -# 98| v98_8(void) = ConditionalBranch : r98_7 +# 35| Block 27 +# 35| r35_365(glval) = VariableAddress[x26] : +# 35| mu35_366(String) = Uninitialized[x26] : &:r35_365 +# 35| r35_367(glval) = FunctionAddress[String] : +# 35| v35_368(void) = Call[String] : func:r35_367, this:r35_365 +# 35| mu35_369(unknown) = ^CallSideEffect : ~m? +# 35| mu35_370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_365 +# 35| r35_371(glval) = VariableAddress[x26] : +# 35| r35_372(glval) = FunctionAddress[~String] : +# 35| v35_373(void) = Call[~String] : func:r35_372, this:r35_371 +# 35| mu35_374(unknown) = ^CallSideEffect : ~m? +# 35| v35_375(void) = ^IndirectReadSideEffect[-1] : &:r35_371, ~m? +# 35| mu35_376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_371 +# 35| r35_377(bool) = Constant[0] : +# 35| v35_378(void) = ConditionalBranch : r35_377 #-----| False -> Block 28 #-----| True (back edge) -> Block 27 -# 100| Block 28 -# 100| r100_1(glval) = VariableAddress[x27] : -# 100| mu100_2(String) = Uninitialized[x27] : &:r100_1 -# 100| r100_3(glval) = FunctionAddress[String] : -# 100| v100_4(void) = Call[String] : func:r100_3, this:r100_1 -# 100| mu100_5(unknown) = ^CallSideEffect : ~m? -# 100| mu100_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 -# 101| r101_1(glval) = VariableAddress[x27] : -# 101| r101_2(glval) = FunctionAddress[~String] : -# 101| v101_3(void) = Call[~String] : func:r101_2, this:r101_1 -# 101| mu101_4(unknown) = ^CallSideEffect : ~m? -# 101| v101_5(void) = ^IndirectReadSideEffect[-1] : &:r101_1, ~m? -# 101| mu101_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r101_1 -# 101| r101_7(bool) = Constant[0] : -# 101| v101_8(void) = ConditionalBranch : r101_7 +# 35| Block 28 +# 35| r35_379(glval) = VariableAddress[x27] : +# 35| mu35_380(String) = Uninitialized[x27] : &:r35_379 +# 35| r35_381(glval) = FunctionAddress[String] : +# 35| v35_382(void) = Call[String] : func:r35_381, this:r35_379 +# 35| mu35_383(unknown) = ^CallSideEffect : ~m? +# 35| mu35_384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_379 +# 35| r35_385(glval) = VariableAddress[x27] : +# 35| r35_386(glval) = FunctionAddress[~String] : +# 35| v35_387(void) = Call[~String] : func:r35_386, this:r35_385 +# 35| mu35_388(unknown) = ^CallSideEffect : ~m? +# 35| v35_389(void) = ^IndirectReadSideEffect[-1] : &:r35_385, ~m? +# 35| mu35_390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_385 +# 35| r35_391(bool) = Constant[0] : +# 35| v35_392(void) = ConditionalBranch : r35_391 #-----| False -> Block 29 #-----| True (back edge) -> Block 28 -# 103| Block 29 -# 103| r103_1(glval) = VariableAddress[x28] : -# 103| mu103_2(String) = Uninitialized[x28] : &:r103_1 -# 103| r103_3(glval) = FunctionAddress[String] : -# 103| v103_4(void) = Call[String] : func:r103_3, this:r103_1 -# 103| mu103_5(unknown) = ^CallSideEffect : ~m? -# 103| mu103_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r103_1 -# 104| r104_1(glval) = VariableAddress[x28] : -# 104| r104_2(glval) = FunctionAddress[~String] : -# 104| v104_3(void) = Call[~String] : func:r104_2, this:r104_1 -# 104| mu104_4(unknown) = ^CallSideEffect : ~m? -# 104| v104_5(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m? -# 104| mu104_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 -# 104| r104_7(bool) = Constant[0] : -# 104| v104_8(void) = ConditionalBranch : r104_7 +# 35| Block 29 +# 35| r35_393(glval) = VariableAddress[x28] : +# 35| mu35_394(String) = Uninitialized[x28] : &:r35_393 +# 35| r35_395(glval) = FunctionAddress[String] : +# 35| v35_396(void) = Call[String] : func:r35_395, this:r35_393 +# 35| mu35_397(unknown) = ^CallSideEffect : ~m? +# 35| mu35_398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_393 +# 35| r35_399(glval) = VariableAddress[x28] : +# 35| r35_400(glval) = FunctionAddress[~String] : +# 35| v35_401(void) = Call[~String] : func:r35_400, this:r35_399 +# 35| mu35_402(unknown) = ^CallSideEffect : ~m? +# 35| v35_403(void) = ^IndirectReadSideEffect[-1] : &:r35_399, ~m? +# 35| mu35_404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_399 +# 35| r35_405(bool) = Constant[0] : +# 35| v35_406(void) = ConditionalBranch : r35_405 #-----| False -> Block 30 #-----| True (back edge) -> Block 29 -# 106| Block 30 -# 106| r106_1(glval) = VariableAddress[x29] : -# 106| mu106_2(String) = Uninitialized[x29] : &:r106_1 -# 106| r106_3(glval) = FunctionAddress[String] : -# 106| v106_4(void) = Call[String] : func:r106_3, this:r106_1 -# 106| mu106_5(unknown) = ^CallSideEffect : ~m? -# 106| mu106_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r106_1 -# 107| r107_1(glval) = VariableAddress[x29] : -# 107| r107_2(glval) = FunctionAddress[~String] : -# 107| v107_3(void) = Call[~String] : func:r107_2, this:r107_1 -# 107| mu107_4(unknown) = ^CallSideEffect : ~m? -# 107| v107_5(void) = ^IndirectReadSideEffect[-1] : &:r107_1, ~m? -# 107| mu107_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r107_1 -# 107| r107_7(bool) = Constant[0] : -# 107| v107_8(void) = ConditionalBranch : r107_7 +# 35| Block 30 +# 35| r35_407(glval) = VariableAddress[x29] : +# 35| mu35_408(String) = Uninitialized[x29] : &:r35_407 +# 35| r35_409(glval) = FunctionAddress[String] : +# 35| v35_410(void) = Call[String] : func:r35_409, this:r35_407 +# 35| mu35_411(unknown) = ^CallSideEffect : ~m? +# 35| mu35_412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_407 +# 35| r35_413(glval) = VariableAddress[x29] : +# 35| r35_414(glval) = FunctionAddress[~String] : +# 35| v35_415(void) = Call[~String] : func:r35_414, this:r35_413 +# 35| mu35_416(unknown) = ^CallSideEffect : ~m? +# 35| v35_417(void) = ^IndirectReadSideEffect[-1] : &:r35_413, ~m? +# 35| mu35_418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_413 +# 35| r35_419(bool) = Constant[0] : +# 35| v35_420(void) = ConditionalBranch : r35_419 #-----| False -> Block 31 #-----| True (back edge) -> Block 30 -# 109| Block 31 -# 109| r109_1(glval) = VariableAddress[x30] : -# 109| mu109_2(String) = Uninitialized[x30] : &:r109_1 -# 109| r109_3(glval) = FunctionAddress[String] : -# 109| v109_4(void) = Call[String] : func:r109_3, this:r109_1 -# 109| mu109_5(unknown) = ^CallSideEffect : ~m? -# 109| mu109_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 -# 110| r110_1(glval) = VariableAddress[x30] : -# 110| r110_2(glval) = FunctionAddress[~String] : -# 110| v110_3(void) = Call[~String] : func:r110_2, this:r110_1 -# 110| mu110_4(unknown) = ^CallSideEffect : ~m? -# 110| v110_5(void) = ^IndirectReadSideEffect[-1] : &:r110_1, ~m? -# 110| mu110_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r110_1 -# 110| r110_7(bool) = Constant[0] : -# 110| v110_8(void) = ConditionalBranch : r110_7 +# 35| Block 31 +# 35| r35_421(glval) = VariableAddress[x30] : +# 35| mu35_422(String) = Uninitialized[x30] : &:r35_421 +# 35| r35_423(glval) = FunctionAddress[String] : +# 35| v35_424(void) = Call[String] : func:r35_423, this:r35_421 +# 35| mu35_425(unknown) = ^CallSideEffect : ~m? +# 35| mu35_426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_421 +# 35| r35_427(glval) = VariableAddress[x30] : +# 35| r35_428(glval) = FunctionAddress[~String] : +# 35| v35_429(void) = Call[~String] : func:r35_428, this:r35_427 +# 35| mu35_430(unknown) = ^CallSideEffect : ~m? +# 35| v35_431(void) = ^IndirectReadSideEffect[-1] : &:r35_427, ~m? +# 35| mu35_432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_427 +# 35| r35_433(bool) = Constant[0] : +# 35| v35_434(void) = ConditionalBranch : r35_433 #-----| False -> Block 32 #-----| True (back edge) -> Block 31 -# 112| Block 32 -# 112| r112_1(glval) = VariableAddress[x31] : -# 112| mu112_2(String) = Uninitialized[x31] : &:r112_1 -# 112| r112_3(glval) = FunctionAddress[String] : -# 112| v112_4(void) = Call[String] : func:r112_3, this:r112_1 -# 112| mu112_5(unknown) = ^CallSideEffect : ~m? -# 112| mu112_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r112_1 -# 113| r113_1(glval) = VariableAddress[x31] : -# 113| r113_2(glval) = FunctionAddress[~String] : -# 113| v113_3(void) = Call[~String] : func:r113_2, this:r113_1 -# 113| mu113_4(unknown) = ^CallSideEffect : ~m? -# 113| v113_5(void) = ^IndirectReadSideEffect[-1] : &:r113_1, ~m? -# 113| mu113_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r113_1 -# 113| r113_7(bool) = Constant[0] : -# 113| v113_8(void) = ConditionalBranch : r113_7 +# 35| Block 32 +# 35| r35_435(glval) = VariableAddress[x31] : +# 35| mu35_436(String) = Uninitialized[x31] : &:r35_435 +# 35| r35_437(glval) = FunctionAddress[String] : +# 35| v35_438(void) = Call[String] : func:r35_437, this:r35_435 +# 35| mu35_439(unknown) = ^CallSideEffect : ~m? +# 35| mu35_440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_435 +# 35| r35_441(glval) = VariableAddress[x31] : +# 35| r35_442(glval) = FunctionAddress[~String] : +# 35| v35_443(void) = Call[~String] : func:r35_442, this:r35_441 +# 35| mu35_444(unknown) = ^CallSideEffect : ~m? +# 35| v35_445(void) = ^IndirectReadSideEffect[-1] : &:r35_441, ~m? +# 35| mu35_446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_441 +# 35| r35_447(bool) = Constant[0] : +# 35| v35_448(void) = ConditionalBranch : r35_447 #-----| False -> Block 33 #-----| True (back edge) -> Block 32 -# 115| Block 33 -# 115| r115_1(glval) = VariableAddress[x32] : -# 115| mu115_2(String) = Uninitialized[x32] : &:r115_1 -# 115| r115_3(glval) = FunctionAddress[String] : -# 115| v115_4(void) = Call[String] : func:r115_3, this:r115_1 -# 115| mu115_5(unknown) = ^CallSideEffect : ~m? -# 115| mu115_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r115_1 -# 116| r116_1(glval) = VariableAddress[x32] : -# 116| r116_2(glval) = FunctionAddress[~String] : -# 116| v116_3(void) = Call[~String] : func:r116_2, this:r116_1 -# 116| mu116_4(unknown) = ^CallSideEffect : ~m? -# 116| v116_5(void) = ^IndirectReadSideEffect[-1] : &:r116_1, ~m? -# 116| mu116_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r116_1 -# 116| r116_7(bool) = Constant[0] : -# 116| v116_8(void) = ConditionalBranch : r116_7 +# 35| Block 33 +# 35| r35_449(glval) = VariableAddress[x32] : +# 35| mu35_450(String) = Uninitialized[x32] : &:r35_449 +# 35| r35_451(glval) = FunctionAddress[String] : +# 35| v35_452(void) = Call[String] : func:r35_451, this:r35_449 +# 35| mu35_453(unknown) = ^CallSideEffect : ~m? +# 35| mu35_454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_449 +# 35| r35_455(glval) = VariableAddress[x32] : +# 35| r35_456(glval) = FunctionAddress[~String] : +# 35| v35_457(void) = Call[~String] : func:r35_456, this:r35_455 +# 35| mu35_458(unknown) = ^CallSideEffect : ~m? +# 35| v35_459(void) = ^IndirectReadSideEffect[-1] : &:r35_455, ~m? +# 35| mu35_460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_455 +# 35| r35_461(bool) = Constant[0] : +# 35| v35_462(void) = ConditionalBranch : r35_461 #-----| False -> Block 34 #-----| True (back edge) -> Block 33 -# 118| Block 34 -# 118| r118_1(glval) = VariableAddress[x33] : -# 118| mu118_2(String) = Uninitialized[x33] : &:r118_1 -# 118| r118_3(glval) = FunctionAddress[String] : -# 118| v118_4(void) = Call[String] : func:r118_3, this:r118_1 -# 118| mu118_5(unknown) = ^CallSideEffect : ~m? -# 118| mu118_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r118_1 -# 119| r119_1(glval) = VariableAddress[x33] : -# 119| r119_2(glval) = FunctionAddress[~String] : -# 119| v119_3(void) = Call[~String] : func:r119_2, this:r119_1 -# 119| mu119_4(unknown) = ^CallSideEffect : ~m? -# 119| v119_5(void) = ^IndirectReadSideEffect[-1] : &:r119_1, ~m? -# 119| mu119_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r119_1 -# 119| r119_7(bool) = Constant[0] : -# 119| v119_8(void) = ConditionalBranch : r119_7 +# 35| Block 34 +# 35| r35_463(glval) = VariableAddress[x33] : +# 35| mu35_464(String) = Uninitialized[x33] : &:r35_463 +# 35| r35_465(glval) = FunctionAddress[String] : +# 35| v35_466(void) = Call[String] : func:r35_465, this:r35_463 +# 35| mu35_467(unknown) = ^CallSideEffect : ~m? +# 35| mu35_468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_463 +# 35| r35_469(glval) = VariableAddress[x33] : +# 35| r35_470(glval) = FunctionAddress[~String] : +# 35| v35_471(void) = Call[~String] : func:r35_470, this:r35_469 +# 35| mu35_472(unknown) = ^CallSideEffect : ~m? +# 35| v35_473(void) = ^IndirectReadSideEffect[-1] : &:r35_469, ~m? +# 35| mu35_474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_469 +# 35| r35_475(bool) = Constant[0] : +# 35| v35_476(void) = ConditionalBranch : r35_475 #-----| False -> Block 35 #-----| True (back edge) -> Block 34 -# 121| Block 35 -# 121| r121_1(glval) = VariableAddress[x34] : -# 121| mu121_2(String) = Uninitialized[x34] : &:r121_1 -# 121| r121_3(glval) = FunctionAddress[String] : -# 121| v121_4(void) = Call[String] : func:r121_3, this:r121_1 -# 121| mu121_5(unknown) = ^CallSideEffect : ~m? -# 121| mu121_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r121_1 -# 122| r122_1(glval) = VariableAddress[x34] : -# 122| r122_2(glval) = FunctionAddress[~String] : -# 122| v122_3(void) = Call[~String] : func:r122_2, this:r122_1 -# 122| mu122_4(unknown) = ^CallSideEffect : ~m? -# 122| v122_5(void) = ^IndirectReadSideEffect[-1] : &:r122_1, ~m? -# 122| mu122_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r122_1 -# 122| r122_7(bool) = Constant[0] : -# 122| v122_8(void) = ConditionalBranch : r122_7 +# 35| Block 35 +# 35| r35_477(glval) = VariableAddress[x34] : +# 35| mu35_478(String) = Uninitialized[x34] : &:r35_477 +# 35| r35_479(glval) = FunctionAddress[String] : +# 35| v35_480(void) = Call[String] : func:r35_479, this:r35_477 +# 35| mu35_481(unknown) = ^CallSideEffect : ~m? +# 35| mu35_482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_477 +# 35| r35_483(glval) = VariableAddress[x34] : +# 35| r35_484(glval) = FunctionAddress[~String] : +# 35| v35_485(void) = Call[~String] : func:r35_484, this:r35_483 +# 35| mu35_486(unknown) = ^CallSideEffect : ~m? +# 35| v35_487(void) = ^IndirectReadSideEffect[-1] : &:r35_483, ~m? +# 35| mu35_488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_483 +# 35| r35_489(bool) = Constant[0] : +# 35| v35_490(void) = ConditionalBranch : r35_489 #-----| False -> Block 36 #-----| True (back edge) -> Block 35 -# 124| Block 36 -# 124| r124_1(glval) = VariableAddress[x35] : -# 124| mu124_2(String) = Uninitialized[x35] : &:r124_1 -# 124| r124_3(glval) = FunctionAddress[String] : -# 124| v124_4(void) = Call[String] : func:r124_3, this:r124_1 -# 124| mu124_5(unknown) = ^CallSideEffect : ~m? -# 124| mu124_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r124_1 -# 125| r125_1(glval) = VariableAddress[x35] : -# 125| r125_2(glval) = FunctionAddress[~String] : -# 125| v125_3(void) = Call[~String] : func:r125_2, this:r125_1 -# 125| mu125_4(unknown) = ^CallSideEffect : ~m? -# 125| v125_5(void) = ^IndirectReadSideEffect[-1] : &:r125_1, ~m? -# 125| mu125_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r125_1 -# 125| r125_7(bool) = Constant[0] : -# 125| v125_8(void) = ConditionalBranch : r125_7 +# 35| Block 36 +# 35| r35_491(glval) = VariableAddress[x35] : +# 35| mu35_492(String) = Uninitialized[x35] : &:r35_491 +# 35| r35_493(glval) = FunctionAddress[String] : +# 35| v35_494(void) = Call[String] : func:r35_493, this:r35_491 +# 35| mu35_495(unknown) = ^CallSideEffect : ~m? +# 35| mu35_496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_491 +# 35| r35_497(glval) = VariableAddress[x35] : +# 35| r35_498(glval) = FunctionAddress[~String] : +# 35| v35_499(void) = Call[~String] : func:r35_498, this:r35_497 +# 35| mu35_500(unknown) = ^CallSideEffect : ~m? +# 35| v35_501(void) = ^IndirectReadSideEffect[-1] : &:r35_497, ~m? +# 35| mu35_502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_497 +# 35| r35_503(bool) = Constant[0] : +# 35| v35_504(void) = ConditionalBranch : r35_503 #-----| False -> Block 37 #-----| True (back edge) -> Block 36 -# 127| Block 37 -# 127| r127_1(glval) = VariableAddress[x36] : -# 127| mu127_2(String) = Uninitialized[x36] : &:r127_1 -# 127| r127_3(glval) = FunctionAddress[String] : -# 127| v127_4(void) = Call[String] : func:r127_3, this:r127_1 -# 127| mu127_5(unknown) = ^CallSideEffect : ~m? -# 127| mu127_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r127_1 -# 128| r128_1(glval) = VariableAddress[x36] : -# 128| r128_2(glval) = FunctionAddress[~String] : -# 128| v128_3(void) = Call[~String] : func:r128_2, this:r128_1 -# 128| mu128_4(unknown) = ^CallSideEffect : ~m? -# 128| v128_5(void) = ^IndirectReadSideEffect[-1] : &:r128_1, ~m? -# 128| mu128_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r128_1 -# 128| r128_7(bool) = Constant[0] : -# 128| v128_8(void) = ConditionalBranch : r128_7 +# 35| Block 37 +# 35| r35_505(glval) = VariableAddress[x36] : +# 35| mu35_506(String) = Uninitialized[x36] : &:r35_505 +# 35| r35_507(glval) = FunctionAddress[String] : +# 35| v35_508(void) = Call[String] : func:r35_507, this:r35_505 +# 35| mu35_509(unknown) = ^CallSideEffect : ~m? +# 35| mu35_510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_505 +# 35| r35_511(glval) = VariableAddress[x36] : +# 35| r35_512(glval) = FunctionAddress[~String] : +# 35| v35_513(void) = Call[~String] : func:r35_512, this:r35_511 +# 35| mu35_514(unknown) = ^CallSideEffect : ~m? +# 35| v35_515(void) = ^IndirectReadSideEffect[-1] : &:r35_511, ~m? +# 35| mu35_516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_511 +# 35| r35_517(bool) = Constant[0] : +# 35| v35_518(void) = ConditionalBranch : r35_517 #-----| False -> Block 38 #-----| True (back edge) -> Block 37 -# 130| Block 38 -# 130| r130_1(glval) = VariableAddress[x37] : -# 130| mu130_2(String) = Uninitialized[x37] : &:r130_1 -# 130| r130_3(glval) = FunctionAddress[String] : -# 130| v130_4(void) = Call[String] : func:r130_3, this:r130_1 -# 130| mu130_5(unknown) = ^CallSideEffect : ~m? -# 130| mu130_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r130_1 -# 131| r131_1(glval) = VariableAddress[x37] : -# 131| r131_2(glval) = FunctionAddress[~String] : -# 131| v131_3(void) = Call[~String] : func:r131_2, this:r131_1 -# 131| mu131_4(unknown) = ^CallSideEffect : ~m? -# 131| v131_5(void) = ^IndirectReadSideEffect[-1] : &:r131_1, ~m? -# 131| mu131_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r131_1 -# 131| r131_7(bool) = Constant[0] : -# 131| v131_8(void) = ConditionalBranch : r131_7 +# 35| Block 38 +# 35| r35_519(glval) = VariableAddress[x37] : +# 35| mu35_520(String) = Uninitialized[x37] : &:r35_519 +# 35| r35_521(glval) = FunctionAddress[String] : +# 35| v35_522(void) = Call[String] : func:r35_521, this:r35_519 +# 35| mu35_523(unknown) = ^CallSideEffect : ~m? +# 35| mu35_524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_519 +# 35| r35_525(glval) = VariableAddress[x37] : +# 35| r35_526(glval) = FunctionAddress[~String] : +# 35| v35_527(void) = Call[~String] : func:r35_526, this:r35_525 +# 35| mu35_528(unknown) = ^CallSideEffect : ~m? +# 35| v35_529(void) = ^IndirectReadSideEffect[-1] : &:r35_525, ~m? +# 35| mu35_530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_525 +# 35| r35_531(bool) = Constant[0] : +# 35| v35_532(void) = ConditionalBranch : r35_531 #-----| False -> Block 39 #-----| True (back edge) -> Block 38 -# 133| Block 39 -# 133| r133_1(glval) = VariableAddress[x38] : -# 133| mu133_2(String) = Uninitialized[x38] : &:r133_1 -# 133| r133_3(glval) = FunctionAddress[String] : -# 133| v133_4(void) = Call[String] : func:r133_3, this:r133_1 -# 133| mu133_5(unknown) = ^CallSideEffect : ~m? -# 133| mu133_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r133_1 -# 134| r134_1(glval) = VariableAddress[x38] : -# 134| r134_2(glval) = FunctionAddress[~String] : -# 134| v134_3(void) = Call[~String] : func:r134_2, this:r134_1 -# 134| mu134_4(unknown) = ^CallSideEffect : ~m? -# 134| v134_5(void) = ^IndirectReadSideEffect[-1] : &:r134_1, ~m? -# 134| mu134_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r134_1 -# 134| r134_7(bool) = Constant[0] : -# 134| v134_8(void) = ConditionalBranch : r134_7 +# 35| Block 39 +# 35| r35_533(glval) = VariableAddress[x38] : +# 35| mu35_534(String) = Uninitialized[x38] : &:r35_533 +# 35| r35_535(glval) = FunctionAddress[String] : +# 35| v35_536(void) = Call[String] : func:r35_535, this:r35_533 +# 35| mu35_537(unknown) = ^CallSideEffect : ~m? +# 35| mu35_538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_533 +# 35| r35_539(glval) = VariableAddress[x38] : +# 35| r35_540(glval) = FunctionAddress[~String] : +# 35| v35_541(void) = Call[~String] : func:r35_540, this:r35_539 +# 35| mu35_542(unknown) = ^CallSideEffect : ~m? +# 35| v35_543(void) = ^IndirectReadSideEffect[-1] : &:r35_539, ~m? +# 35| mu35_544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_539 +# 35| r35_545(bool) = Constant[0] : +# 35| v35_546(void) = ConditionalBranch : r35_545 #-----| False -> Block 40 #-----| True (back edge) -> Block 39 -# 136| Block 40 -# 136| r136_1(glval) = VariableAddress[x39] : -# 136| mu136_2(String) = Uninitialized[x39] : &:r136_1 -# 136| r136_3(glval) = FunctionAddress[String] : -# 136| v136_4(void) = Call[String] : func:r136_3, this:r136_1 -# 136| mu136_5(unknown) = ^CallSideEffect : ~m? -# 136| mu136_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r136_1 -# 137| r137_1(glval) = VariableAddress[x39] : -# 137| r137_2(glval) = FunctionAddress[~String] : -# 137| v137_3(void) = Call[~String] : func:r137_2, this:r137_1 -# 137| mu137_4(unknown) = ^CallSideEffect : ~m? -# 137| v137_5(void) = ^IndirectReadSideEffect[-1] : &:r137_1, ~m? -# 137| mu137_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r137_1 -# 137| r137_7(bool) = Constant[0] : -# 137| v137_8(void) = ConditionalBranch : r137_7 +# 35| Block 40 +# 35| r35_547(glval) = VariableAddress[x39] : +# 35| mu35_548(String) = Uninitialized[x39] : &:r35_547 +# 35| r35_549(glval) = FunctionAddress[String] : +# 35| v35_550(void) = Call[String] : func:r35_549, this:r35_547 +# 35| mu35_551(unknown) = ^CallSideEffect : ~m? +# 35| mu35_552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_547 +# 35| r35_553(glval) = VariableAddress[x39] : +# 35| r35_554(glval) = FunctionAddress[~String] : +# 35| v35_555(void) = Call[~String] : func:r35_554, this:r35_553 +# 35| mu35_556(unknown) = ^CallSideEffect : ~m? +# 35| v35_557(void) = ^IndirectReadSideEffect[-1] : &:r35_553, ~m? +# 35| mu35_558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_553 +# 35| r35_559(bool) = Constant[0] : +# 35| v35_560(void) = ConditionalBranch : r35_559 #-----| False -> Block 41 #-----| True (back edge) -> Block 40 -# 139| Block 41 -# 139| r139_1(glval) = VariableAddress[x40] : -# 139| mu139_2(String) = Uninitialized[x40] : &:r139_1 -# 139| r139_3(glval) = FunctionAddress[String] : -# 139| v139_4(void) = Call[String] : func:r139_3, this:r139_1 -# 139| mu139_5(unknown) = ^CallSideEffect : ~m? -# 139| mu139_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r139_1 -# 140| r140_1(glval) = VariableAddress[x40] : -# 140| r140_2(glval) = FunctionAddress[~String] : -# 140| v140_3(void) = Call[~String] : func:r140_2, this:r140_1 -# 140| mu140_4(unknown) = ^CallSideEffect : ~m? -# 140| v140_5(void) = ^IndirectReadSideEffect[-1] : &:r140_1, ~m? -# 140| mu140_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r140_1 -# 140| r140_7(bool) = Constant[0] : -# 140| v140_8(void) = ConditionalBranch : r140_7 +# 35| Block 41 +# 35| r35_561(glval) = VariableAddress[x40] : +# 35| mu35_562(String) = Uninitialized[x40] : &:r35_561 +# 35| r35_563(glval) = FunctionAddress[String] : +# 35| v35_564(void) = Call[String] : func:r35_563, this:r35_561 +# 35| mu35_565(unknown) = ^CallSideEffect : ~m? +# 35| mu35_566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_561 +# 35| r35_567(glval) = VariableAddress[x40] : +# 35| r35_568(glval) = FunctionAddress[~String] : +# 35| v35_569(void) = Call[~String] : func:r35_568, this:r35_567 +# 35| mu35_570(unknown) = ^CallSideEffect : ~m? +# 35| v35_571(void) = ^IndirectReadSideEffect[-1] : &:r35_567, ~m? +# 35| mu35_572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_567 +# 35| r35_573(bool) = Constant[0] : +# 35| v35_574(void) = ConditionalBranch : r35_573 #-----| False -> Block 42 #-----| True (back edge) -> Block 41 -# 142| Block 42 -# 142| r142_1(glval) = VariableAddress[x41] : -# 142| mu142_2(String) = Uninitialized[x41] : &:r142_1 -# 142| r142_3(glval) = FunctionAddress[String] : -# 142| v142_4(void) = Call[String] : func:r142_3, this:r142_1 -# 142| mu142_5(unknown) = ^CallSideEffect : ~m? -# 142| mu142_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r142_1 -# 143| r143_1(glval) = VariableAddress[x41] : -# 143| r143_2(glval) = FunctionAddress[~String] : -# 143| v143_3(void) = Call[~String] : func:r143_2, this:r143_1 -# 143| mu143_4(unknown) = ^CallSideEffect : ~m? -# 143| v143_5(void) = ^IndirectReadSideEffect[-1] : &:r143_1, ~m? -# 143| mu143_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r143_1 -# 143| r143_7(bool) = Constant[0] : -# 143| v143_8(void) = ConditionalBranch : r143_7 +# 35| Block 42 +# 35| r35_575(glval) = VariableAddress[x41] : +# 35| mu35_576(String) = Uninitialized[x41] : &:r35_575 +# 35| r35_577(glval) = FunctionAddress[String] : +# 35| v35_578(void) = Call[String] : func:r35_577, this:r35_575 +# 35| mu35_579(unknown) = ^CallSideEffect : ~m? +# 35| mu35_580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_575 +# 35| r35_581(glval) = VariableAddress[x41] : +# 35| r35_582(glval) = FunctionAddress[~String] : +# 35| v35_583(void) = Call[~String] : func:r35_582, this:r35_581 +# 35| mu35_584(unknown) = ^CallSideEffect : ~m? +# 35| v35_585(void) = ^IndirectReadSideEffect[-1] : &:r35_581, ~m? +# 35| mu35_586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_581 +# 35| r35_587(bool) = Constant[0] : +# 35| v35_588(void) = ConditionalBranch : r35_587 #-----| False -> Block 43 #-----| True (back edge) -> Block 42 -# 145| Block 43 -# 145| r145_1(glval) = VariableAddress[x42] : -# 145| mu145_2(String) = Uninitialized[x42] : &:r145_1 -# 145| r145_3(glval) = FunctionAddress[String] : -# 145| v145_4(void) = Call[String] : func:r145_3, this:r145_1 -# 145| mu145_5(unknown) = ^CallSideEffect : ~m? -# 145| mu145_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r145_1 -# 146| r146_1(glval) = VariableAddress[x42] : -# 146| r146_2(glval) = FunctionAddress[~String] : -# 146| v146_3(void) = Call[~String] : func:r146_2, this:r146_1 -# 146| mu146_4(unknown) = ^CallSideEffect : ~m? -# 146| v146_5(void) = ^IndirectReadSideEffect[-1] : &:r146_1, ~m? -# 146| mu146_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r146_1 -# 146| r146_7(bool) = Constant[0] : -# 146| v146_8(void) = ConditionalBranch : r146_7 +# 35| Block 43 +# 35| r35_589(glval) = VariableAddress[x42] : +# 35| mu35_590(String) = Uninitialized[x42] : &:r35_589 +# 35| r35_591(glval) = FunctionAddress[String] : +# 35| v35_592(void) = Call[String] : func:r35_591, this:r35_589 +# 35| mu35_593(unknown) = ^CallSideEffect : ~m? +# 35| mu35_594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_589 +# 35| r35_595(glval) = VariableAddress[x42] : +# 35| r35_596(glval) = FunctionAddress[~String] : +# 35| v35_597(void) = Call[~String] : func:r35_596, this:r35_595 +# 35| mu35_598(unknown) = ^CallSideEffect : ~m? +# 35| v35_599(void) = ^IndirectReadSideEffect[-1] : &:r35_595, ~m? +# 35| mu35_600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_595 +# 35| r35_601(bool) = Constant[0] : +# 35| v35_602(void) = ConditionalBranch : r35_601 #-----| False -> Block 44 #-----| True (back edge) -> Block 43 -# 148| Block 44 -# 148| r148_1(glval) = VariableAddress[x43] : -# 148| mu148_2(String) = Uninitialized[x43] : &:r148_1 -# 148| r148_3(glval) = FunctionAddress[String] : -# 148| v148_4(void) = Call[String] : func:r148_3, this:r148_1 -# 148| mu148_5(unknown) = ^CallSideEffect : ~m? -# 148| mu148_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r148_1 -# 149| r149_1(glval) = VariableAddress[x43] : -# 149| r149_2(glval) = FunctionAddress[~String] : -# 149| v149_3(void) = Call[~String] : func:r149_2, this:r149_1 -# 149| mu149_4(unknown) = ^CallSideEffect : ~m? -# 149| v149_5(void) = ^IndirectReadSideEffect[-1] : &:r149_1, ~m? -# 149| mu149_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r149_1 -# 149| r149_7(bool) = Constant[0] : -# 149| v149_8(void) = ConditionalBranch : r149_7 +# 35| Block 44 +# 35| r35_603(glval) = VariableAddress[x43] : +# 35| mu35_604(String) = Uninitialized[x43] : &:r35_603 +# 35| r35_605(glval) = FunctionAddress[String] : +# 35| v35_606(void) = Call[String] : func:r35_605, this:r35_603 +# 35| mu35_607(unknown) = ^CallSideEffect : ~m? +# 35| mu35_608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_603 +# 35| r35_609(glval) = VariableAddress[x43] : +# 35| r35_610(glval) = FunctionAddress[~String] : +# 35| v35_611(void) = Call[~String] : func:r35_610, this:r35_609 +# 35| mu35_612(unknown) = ^CallSideEffect : ~m? +# 35| v35_613(void) = ^IndirectReadSideEffect[-1] : &:r35_609, ~m? +# 35| mu35_614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_609 +# 35| r35_615(bool) = Constant[0] : +# 35| v35_616(void) = ConditionalBranch : r35_615 #-----| False -> Block 45 #-----| True (back edge) -> Block 44 -# 151| Block 45 -# 151| r151_1(glval) = VariableAddress[x44] : -# 151| mu151_2(String) = Uninitialized[x44] : &:r151_1 -# 151| r151_3(glval) = FunctionAddress[String] : -# 151| v151_4(void) = Call[String] : func:r151_3, this:r151_1 -# 151| mu151_5(unknown) = ^CallSideEffect : ~m? -# 151| mu151_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r151_1 -# 152| r152_1(glval) = VariableAddress[x44] : -# 152| r152_2(glval) = FunctionAddress[~String] : -# 152| v152_3(void) = Call[~String] : func:r152_2, this:r152_1 -# 152| mu152_4(unknown) = ^CallSideEffect : ~m? -# 152| v152_5(void) = ^IndirectReadSideEffect[-1] : &:r152_1, ~m? -# 152| mu152_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r152_1 -# 152| r152_7(bool) = Constant[0] : -# 152| v152_8(void) = ConditionalBranch : r152_7 +# 35| Block 45 +# 35| r35_617(glval) = VariableAddress[x44] : +# 35| mu35_618(String) = Uninitialized[x44] : &:r35_617 +# 35| r35_619(glval) = FunctionAddress[String] : +# 35| v35_620(void) = Call[String] : func:r35_619, this:r35_617 +# 35| mu35_621(unknown) = ^CallSideEffect : ~m? +# 35| mu35_622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_617 +# 35| r35_623(glval) = VariableAddress[x44] : +# 35| r35_624(glval) = FunctionAddress[~String] : +# 35| v35_625(void) = Call[~String] : func:r35_624, this:r35_623 +# 35| mu35_626(unknown) = ^CallSideEffect : ~m? +# 35| v35_627(void) = ^IndirectReadSideEffect[-1] : &:r35_623, ~m? +# 35| mu35_628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_623 +# 35| r35_629(bool) = Constant[0] : +# 35| v35_630(void) = ConditionalBranch : r35_629 #-----| False -> Block 46 #-----| True (back edge) -> Block 45 -# 154| Block 46 -# 154| r154_1(glval) = VariableAddress[x45] : -# 154| mu154_2(String) = Uninitialized[x45] : &:r154_1 -# 154| r154_3(glval) = FunctionAddress[String] : -# 154| v154_4(void) = Call[String] : func:r154_3, this:r154_1 -# 154| mu154_5(unknown) = ^CallSideEffect : ~m? -# 154| mu154_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r154_1 -# 155| r155_1(glval) = VariableAddress[x45] : -# 155| r155_2(glval) = FunctionAddress[~String] : -# 155| v155_3(void) = Call[~String] : func:r155_2, this:r155_1 -# 155| mu155_4(unknown) = ^CallSideEffect : ~m? -# 155| v155_5(void) = ^IndirectReadSideEffect[-1] : &:r155_1, ~m? -# 155| mu155_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r155_1 -# 155| r155_7(bool) = Constant[0] : -# 155| v155_8(void) = ConditionalBranch : r155_7 +# 35| Block 46 +# 35| r35_631(glval) = VariableAddress[x45] : +# 35| mu35_632(String) = Uninitialized[x45] : &:r35_631 +# 35| r35_633(glval) = FunctionAddress[String] : +# 35| v35_634(void) = Call[String] : func:r35_633, this:r35_631 +# 35| mu35_635(unknown) = ^CallSideEffect : ~m? +# 35| mu35_636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_631 +# 35| r35_637(glval) = VariableAddress[x45] : +# 35| r35_638(glval) = FunctionAddress[~String] : +# 35| v35_639(void) = Call[~String] : func:r35_638, this:r35_637 +# 35| mu35_640(unknown) = ^CallSideEffect : ~m? +# 35| v35_641(void) = ^IndirectReadSideEffect[-1] : &:r35_637, ~m? +# 35| mu35_642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_637 +# 35| r35_643(bool) = Constant[0] : +# 35| v35_644(void) = ConditionalBranch : r35_643 #-----| False -> Block 47 #-----| True (back edge) -> Block 46 -# 157| Block 47 -# 157| r157_1(glval) = VariableAddress[x46] : -# 157| mu157_2(String) = Uninitialized[x46] : &:r157_1 -# 157| r157_3(glval) = FunctionAddress[String] : -# 157| v157_4(void) = Call[String] : func:r157_3, this:r157_1 -# 157| mu157_5(unknown) = ^CallSideEffect : ~m? -# 157| mu157_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r157_1 -# 158| r158_1(glval) = VariableAddress[x46] : -# 158| r158_2(glval) = FunctionAddress[~String] : -# 158| v158_3(void) = Call[~String] : func:r158_2, this:r158_1 -# 158| mu158_4(unknown) = ^CallSideEffect : ~m? -# 158| v158_5(void) = ^IndirectReadSideEffect[-1] : &:r158_1, ~m? -# 158| mu158_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r158_1 -# 158| r158_7(bool) = Constant[0] : -# 158| v158_8(void) = ConditionalBranch : r158_7 +# 35| Block 47 +# 35| r35_645(glval) = VariableAddress[x46] : +# 35| mu35_646(String) = Uninitialized[x46] : &:r35_645 +# 35| r35_647(glval) = FunctionAddress[String] : +# 35| v35_648(void) = Call[String] : func:r35_647, this:r35_645 +# 35| mu35_649(unknown) = ^CallSideEffect : ~m? +# 35| mu35_650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_645 +# 35| r35_651(glval) = VariableAddress[x46] : +# 35| r35_652(glval) = FunctionAddress[~String] : +# 35| v35_653(void) = Call[~String] : func:r35_652, this:r35_651 +# 35| mu35_654(unknown) = ^CallSideEffect : ~m? +# 35| v35_655(void) = ^IndirectReadSideEffect[-1] : &:r35_651, ~m? +# 35| mu35_656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_651 +# 35| r35_657(bool) = Constant[0] : +# 35| v35_658(void) = ConditionalBranch : r35_657 #-----| False -> Block 48 #-----| True (back edge) -> Block 47 -# 160| Block 48 -# 160| r160_1(glval) = VariableAddress[x47] : -# 160| mu160_2(String) = Uninitialized[x47] : &:r160_1 -# 160| r160_3(glval) = FunctionAddress[String] : -# 160| v160_4(void) = Call[String] : func:r160_3, this:r160_1 -# 160| mu160_5(unknown) = ^CallSideEffect : ~m? -# 160| mu160_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r160_1 -# 161| r161_1(glval) = VariableAddress[x47] : -# 161| r161_2(glval) = FunctionAddress[~String] : -# 161| v161_3(void) = Call[~String] : func:r161_2, this:r161_1 -# 161| mu161_4(unknown) = ^CallSideEffect : ~m? -# 161| v161_5(void) = ^IndirectReadSideEffect[-1] : &:r161_1, ~m? -# 161| mu161_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r161_1 -# 161| r161_7(bool) = Constant[0] : -# 161| v161_8(void) = ConditionalBranch : r161_7 +# 35| Block 48 +# 35| r35_659(glval) = VariableAddress[x47] : +# 35| mu35_660(String) = Uninitialized[x47] : &:r35_659 +# 35| r35_661(glval) = FunctionAddress[String] : +# 35| v35_662(void) = Call[String] : func:r35_661, this:r35_659 +# 35| mu35_663(unknown) = ^CallSideEffect : ~m? +# 35| mu35_664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_659 +# 35| r35_665(glval) = VariableAddress[x47] : +# 35| r35_666(glval) = FunctionAddress[~String] : +# 35| v35_667(void) = Call[~String] : func:r35_666, this:r35_665 +# 35| mu35_668(unknown) = ^CallSideEffect : ~m? +# 35| v35_669(void) = ^IndirectReadSideEffect[-1] : &:r35_665, ~m? +# 35| mu35_670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_665 +# 35| r35_671(bool) = Constant[0] : +# 35| v35_672(void) = ConditionalBranch : r35_671 #-----| False -> Block 49 #-----| True (back edge) -> Block 48 -# 163| Block 49 -# 163| r163_1(glval) = VariableAddress[x48] : -# 163| mu163_2(String) = Uninitialized[x48] : &:r163_1 -# 163| r163_3(glval) = FunctionAddress[String] : -# 163| v163_4(void) = Call[String] : func:r163_3, this:r163_1 -# 163| mu163_5(unknown) = ^CallSideEffect : ~m? -# 163| mu163_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r163_1 -# 164| r164_1(glval) = VariableAddress[x48] : -# 164| r164_2(glval) = FunctionAddress[~String] : -# 164| v164_3(void) = Call[~String] : func:r164_2, this:r164_1 -# 164| mu164_4(unknown) = ^CallSideEffect : ~m? -# 164| v164_5(void) = ^IndirectReadSideEffect[-1] : &:r164_1, ~m? -# 164| mu164_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r164_1 -# 164| r164_7(bool) = Constant[0] : -# 164| v164_8(void) = ConditionalBranch : r164_7 +# 35| Block 49 +# 35| r35_673(glval) = VariableAddress[x48] : +# 35| mu35_674(String) = Uninitialized[x48] : &:r35_673 +# 35| r35_675(glval) = FunctionAddress[String] : +# 35| v35_676(void) = Call[String] : func:r35_675, this:r35_673 +# 35| mu35_677(unknown) = ^CallSideEffect : ~m? +# 35| mu35_678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_673 +# 35| r35_679(glval) = VariableAddress[x48] : +# 35| r35_680(glval) = FunctionAddress[~String] : +# 35| v35_681(void) = Call[~String] : func:r35_680, this:r35_679 +# 35| mu35_682(unknown) = ^CallSideEffect : ~m? +# 35| v35_683(void) = ^IndirectReadSideEffect[-1] : &:r35_679, ~m? +# 35| mu35_684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_679 +# 35| r35_685(bool) = Constant[0] : +# 35| v35_686(void) = ConditionalBranch : r35_685 #-----| False -> Block 50 #-----| True (back edge) -> Block 49 -# 166| Block 50 -# 166| r166_1(glval) = VariableAddress[x49] : -# 166| mu166_2(String) = Uninitialized[x49] : &:r166_1 -# 166| r166_3(glval) = FunctionAddress[String] : -# 166| v166_4(void) = Call[String] : func:r166_3, this:r166_1 -# 166| mu166_5(unknown) = ^CallSideEffect : ~m? -# 166| mu166_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r166_1 -# 167| r167_1(glval) = VariableAddress[x49] : -# 167| r167_2(glval) = FunctionAddress[~String] : -# 167| v167_3(void) = Call[~String] : func:r167_2, this:r167_1 -# 167| mu167_4(unknown) = ^CallSideEffect : ~m? -# 167| v167_5(void) = ^IndirectReadSideEffect[-1] : &:r167_1, ~m? -# 167| mu167_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r167_1 -# 167| r167_7(bool) = Constant[0] : -# 167| v167_8(void) = ConditionalBranch : r167_7 +# 35| Block 50 +# 35| r35_687(glval) = VariableAddress[x49] : +# 35| mu35_688(String) = Uninitialized[x49] : &:r35_687 +# 35| r35_689(glval) = FunctionAddress[String] : +# 35| v35_690(void) = Call[String] : func:r35_689, this:r35_687 +# 35| mu35_691(unknown) = ^CallSideEffect : ~m? +# 35| mu35_692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_687 +# 35| r35_693(glval) = VariableAddress[x49] : +# 35| r35_694(glval) = FunctionAddress[~String] : +# 35| v35_695(void) = Call[~String] : func:r35_694, this:r35_693 +# 35| mu35_696(unknown) = ^CallSideEffect : ~m? +# 35| v35_697(void) = ^IndirectReadSideEffect[-1] : &:r35_693, ~m? +# 35| mu35_698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_693 +# 35| r35_699(bool) = Constant[0] : +# 35| v35_700(void) = ConditionalBranch : r35_699 #-----| False -> Block 51 #-----| True (back edge) -> Block 50 -# 169| Block 51 -# 169| r169_1(glval) = VariableAddress[x50] : -# 169| mu169_2(String) = Uninitialized[x50] : &:r169_1 -# 169| r169_3(glval) = FunctionAddress[String] : -# 169| v169_4(void) = Call[String] : func:r169_3, this:r169_1 -# 169| mu169_5(unknown) = ^CallSideEffect : ~m? -# 169| mu169_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r169_1 -# 170| r170_1(glval) = VariableAddress[x50] : -# 170| r170_2(glval) = FunctionAddress[~String] : -# 170| v170_3(void) = Call[~String] : func:r170_2, this:r170_1 -# 170| mu170_4(unknown) = ^CallSideEffect : ~m? -# 170| v170_5(void) = ^IndirectReadSideEffect[-1] : &:r170_1, ~m? -# 170| mu170_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r170_1 -# 170| r170_7(bool) = Constant[0] : -# 170| v170_8(void) = ConditionalBranch : r170_7 +# 35| Block 51 +# 35| r35_701(glval) = VariableAddress[x50] : +# 35| mu35_702(String) = Uninitialized[x50] : &:r35_701 +# 35| r35_703(glval) = FunctionAddress[String] : +# 35| v35_704(void) = Call[String] : func:r35_703, this:r35_701 +# 35| mu35_705(unknown) = ^CallSideEffect : ~m? +# 35| mu35_706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_701 +# 35| r35_707(glval) = VariableAddress[x50] : +# 35| r35_708(glval) = FunctionAddress[~String] : +# 35| v35_709(void) = Call[~String] : func:r35_708, this:r35_707 +# 35| mu35_710(unknown) = ^CallSideEffect : ~m? +# 35| v35_711(void) = ^IndirectReadSideEffect[-1] : &:r35_707, ~m? +# 35| mu35_712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_707 +# 35| r35_713(bool) = Constant[0] : +# 35| v35_714(void) = ConditionalBranch : r35_713 #-----| False -> Block 52 #-----| True (back edge) -> Block 51 -# 172| Block 52 -# 172| r172_1(glval) = VariableAddress[x51] : -# 172| mu172_2(String) = Uninitialized[x51] : &:r172_1 -# 172| r172_3(glval) = FunctionAddress[String] : -# 172| v172_4(void) = Call[String] : func:r172_3, this:r172_1 -# 172| mu172_5(unknown) = ^CallSideEffect : ~m? -# 172| mu172_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r172_1 -# 173| r173_1(glval) = VariableAddress[x51] : -# 173| r173_2(glval) = FunctionAddress[~String] : -# 173| v173_3(void) = Call[~String] : func:r173_2, this:r173_1 -# 173| mu173_4(unknown) = ^CallSideEffect : ~m? -# 173| v173_5(void) = ^IndirectReadSideEffect[-1] : &:r173_1, ~m? -# 173| mu173_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r173_1 -# 173| r173_7(bool) = Constant[0] : -# 173| v173_8(void) = ConditionalBranch : r173_7 +# 35| Block 52 +# 35| r35_715(glval) = VariableAddress[x51] : +# 35| mu35_716(String) = Uninitialized[x51] : &:r35_715 +# 35| r35_717(glval) = FunctionAddress[String] : +# 35| v35_718(void) = Call[String] : func:r35_717, this:r35_715 +# 35| mu35_719(unknown) = ^CallSideEffect : ~m? +# 35| mu35_720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_715 +# 35| r35_721(glval) = VariableAddress[x51] : +# 35| r35_722(glval) = FunctionAddress[~String] : +# 35| v35_723(void) = Call[~String] : func:r35_722, this:r35_721 +# 35| mu35_724(unknown) = ^CallSideEffect : ~m? +# 35| v35_725(void) = ^IndirectReadSideEffect[-1] : &:r35_721, ~m? +# 35| mu35_726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_721 +# 35| r35_727(bool) = Constant[0] : +# 35| v35_728(void) = ConditionalBranch : r35_727 #-----| False -> Block 53 #-----| True (back edge) -> Block 52 -# 175| Block 53 -# 175| r175_1(glval) = VariableAddress[x52] : -# 175| mu175_2(String) = Uninitialized[x52] : &:r175_1 -# 175| r175_3(glval) = FunctionAddress[String] : -# 175| v175_4(void) = Call[String] : func:r175_3, this:r175_1 -# 175| mu175_5(unknown) = ^CallSideEffect : ~m? -# 175| mu175_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r175_1 -# 176| r176_1(glval) = VariableAddress[x52] : -# 176| r176_2(glval) = FunctionAddress[~String] : -# 176| v176_3(void) = Call[~String] : func:r176_2, this:r176_1 -# 176| mu176_4(unknown) = ^CallSideEffect : ~m? -# 176| v176_5(void) = ^IndirectReadSideEffect[-1] : &:r176_1, ~m? -# 176| mu176_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r176_1 -# 176| r176_7(bool) = Constant[0] : -# 176| v176_8(void) = ConditionalBranch : r176_7 +# 35| Block 53 +# 35| r35_729(glval) = VariableAddress[x52] : +# 35| mu35_730(String) = Uninitialized[x52] : &:r35_729 +# 35| r35_731(glval) = FunctionAddress[String] : +# 35| v35_732(void) = Call[String] : func:r35_731, this:r35_729 +# 35| mu35_733(unknown) = ^CallSideEffect : ~m? +# 35| mu35_734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_729 +# 35| r35_735(glval) = VariableAddress[x52] : +# 35| r35_736(glval) = FunctionAddress[~String] : +# 35| v35_737(void) = Call[~String] : func:r35_736, this:r35_735 +# 35| mu35_738(unknown) = ^CallSideEffect : ~m? +# 35| v35_739(void) = ^IndirectReadSideEffect[-1] : &:r35_735, ~m? +# 35| mu35_740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_735 +# 35| r35_741(bool) = Constant[0] : +# 35| v35_742(void) = ConditionalBranch : r35_741 #-----| False -> Block 54 #-----| True (back edge) -> Block 53 -# 178| Block 54 -# 178| r178_1(glval) = VariableAddress[x53] : -# 178| mu178_2(String) = Uninitialized[x53] : &:r178_1 -# 178| r178_3(glval) = FunctionAddress[String] : -# 178| v178_4(void) = Call[String] : func:r178_3, this:r178_1 -# 178| mu178_5(unknown) = ^CallSideEffect : ~m? -# 178| mu178_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r178_1 -# 179| r179_1(glval) = VariableAddress[x53] : -# 179| r179_2(glval) = FunctionAddress[~String] : -# 179| v179_3(void) = Call[~String] : func:r179_2, this:r179_1 -# 179| mu179_4(unknown) = ^CallSideEffect : ~m? -# 179| v179_5(void) = ^IndirectReadSideEffect[-1] : &:r179_1, ~m? -# 179| mu179_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r179_1 -# 179| r179_7(bool) = Constant[0] : -# 179| v179_8(void) = ConditionalBranch : r179_7 +# 35| Block 54 +# 35| r35_743(glval) = VariableAddress[x53] : +# 35| mu35_744(String) = Uninitialized[x53] : &:r35_743 +# 35| r35_745(glval) = FunctionAddress[String] : +# 35| v35_746(void) = Call[String] : func:r35_745, this:r35_743 +# 35| mu35_747(unknown) = ^CallSideEffect : ~m? +# 35| mu35_748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_743 +# 35| r35_749(glval) = VariableAddress[x53] : +# 35| r35_750(glval) = FunctionAddress[~String] : +# 35| v35_751(void) = Call[~String] : func:r35_750, this:r35_749 +# 35| mu35_752(unknown) = ^CallSideEffect : ~m? +# 35| v35_753(void) = ^IndirectReadSideEffect[-1] : &:r35_749, ~m? +# 35| mu35_754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_749 +# 35| r35_755(bool) = Constant[0] : +# 35| v35_756(void) = ConditionalBranch : r35_755 #-----| False -> Block 55 #-----| True (back edge) -> Block 54 -# 181| Block 55 -# 181| r181_1(glval) = VariableAddress[x54] : -# 181| mu181_2(String) = Uninitialized[x54] : &:r181_1 -# 181| r181_3(glval) = FunctionAddress[String] : -# 181| v181_4(void) = Call[String] : func:r181_3, this:r181_1 -# 181| mu181_5(unknown) = ^CallSideEffect : ~m? -# 181| mu181_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r181_1 -# 182| r182_1(glval) = VariableAddress[x54] : -# 182| r182_2(glval) = FunctionAddress[~String] : -# 182| v182_3(void) = Call[~String] : func:r182_2, this:r182_1 -# 182| mu182_4(unknown) = ^CallSideEffect : ~m? -# 182| v182_5(void) = ^IndirectReadSideEffect[-1] : &:r182_1, ~m? -# 182| mu182_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r182_1 -# 182| r182_7(bool) = Constant[0] : -# 182| v182_8(void) = ConditionalBranch : r182_7 +# 35| Block 55 +# 35| r35_757(glval) = VariableAddress[x54] : +# 35| mu35_758(String) = Uninitialized[x54] : &:r35_757 +# 35| r35_759(glval) = FunctionAddress[String] : +# 35| v35_760(void) = Call[String] : func:r35_759, this:r35_757 +# 35| mu35_761(unknown) = ^CallSideEffect : ~m? +# 35| mu35_762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_757 +# 35| r35_763(glval) = VariableAddress[x54] : +# 35| r35_764(glval) = FunctionAddress[~String] : +# 35| v35_765(void) = Call[~String] : func:r35_764, this:r35_763 +# 35| mu35_766(unknown) = ^CallSideEffect : ~m? +# 35| v35_767(void) = ^IndirectReadSideEffect[-1] : &:r35_763, ~m? +# 35| mu35_768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_763 +# 35| r35_769(bool) = Constant[0] : +# 35| v35_770(void) = ConditionalBranch : r35_769 #-----| False -> Block 56 #-----| True (back edge) -> Block 55 -# 184| Block 56 -# 184| r184_1(glval) = VariableAddress[x55] : -# 184| mu184_2(String) = Uninitialized[x55] : &:r184_1 -# 184| r184_3(glval) = FunctionAddress[String] : -# 184| v184_4(void) = Call[String] : func:r184_3, this:r184_1 -# 184| mu184_5(unknown) = ^CallSideEffect : ~m? -# 184| mu184_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r184_1 -# 185| r185_1(glval) = VariableAddress[x55] : -# 185| r185_2(glval) = FunctionAddress[~String] : -# 185| v185_3(void) = Call[~String] : func:r185_2, this:r185_1 -# 185| mu185_4(unknown) = ^CallSideEffect : ~m? -# 185| v185_5(void) = ^IndirectReadSideEffect[-1] : &:r185_1, ~m? -# 185| mu185_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r185_1 -# 185| r185_7(bool) = Constant[0] : -# 185| v185_8(void) = ConditionalBranch : r185_7 +# 35| Block 56 +# 35| r35_771(glval) = VariableAddress[x55] : +# 35| mu35_772(String) = Uninitialized[x55] : &:r35_771 +# 35| r35_773(glval) = FunctionAddress[String] : +# 35| v35_774(void) = Call[String] : func:r35_773, this:r35_771 +# 35| mu35_775(unknown) = ^CallSideEffect : ~m? +# 35| mu35_776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_771 +# 35| r35_777(glval) = VariableAddress[x55] : +# 35| r35_778(glval) = FunctionAddress[~String] : +# 35| v35_779(void) = Call[~String] : func:r35_778, this:r35_777 +# 35| mu35_780(unknown) = ^CallSideEffect : ~m? +# 35| v35_781(void) = ^IndirectReadSideEffect[-1] : &:r35_777, ~m? +# 35| mu35_782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_777 +# 35| r35_783(bool) = Constant[0] : +# 35| v35_784(void) = ConditionalBranch : r35_783 #-----| False -> Block 57 #-----| True (back edge) -> Block 56 -# 187| Block 57 -# 187| r187_1(glval) = VariableAddress[x56] : -# 187| mu187_2(String) = Uninitialized[x56] : &:r187_1 -# 187| r187_3(glval) = FunctionAddress[String] : -# 187| v187_4(void) = Call[String] : func:r187_3, this:r187_1 -# 187| mu187_5(unknown) = ^CallSideEffect : ~m? -# 187| mu187_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r187_1 -# 188| r188_1(glval) = VariableAddress[x56] : -# 188| r188_2(glval) = FunctionAddress[~String] : -# 188| v188_3(void) = Call[~String] : func:r188_2, this:r188_1 -# 188| mu188_4(unknown) = ^CallSideEffect : ~m? -# 188| v188_5(void) = ^IndirectReadSideEffect[-1] : &:r188_1, ~m? -# 188| mu188_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r188_1 -# 188| r188_7(bool) = Constant[0] : -# 188| v188_8(void) = ConditionalBranch : r188_7 +# 35| Block 57 +# 35| r35_785(glval) = VariableAddress[x56] : +# 35| mu35_786(String) = Uninitialized[x56] : &:r35_785 +# 35| r35_787(glval) = FunctionAddress[String] : +# 35| v35_788(void) = Call[String] : func:r35_787, this:r35_785 +# 35| mu35_789(unknown) = ^CallSideEffect : ~m? +# 35| mu35_790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_785 +# 35| r35_791(glval) = VariableAddress[x56] : +# 35| r35_792(glval) = FunctionAddress[~String] : +# 35| v35_793(void) = Call[~String] : func:r35_792, this:r35_791 +# 35| mu35_794(unknown) = ^CallSideEffect : ~m? +# 35| v35_795(void) = ^IndirectReadSideEffect[-1] : &:r35_791, ~m? +# 35| mu35_796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_791 +# 35| r35_797(bool) = Constant[0] : +# 35| v35_798(void) = ConditionalBranch : r35_797 #-----| False -> Block 58 #-----| True (back edge) -> Block 57 -# 190| Block 58 -# 190| r190_1(glval) = VariableAddress[x57] : -# 190| mu190_2(String) = Uninitialized[x57] : &:r190_1 -# 190| r190_3(glval) = FunctionAddress[String] : -# 190| v190_4(void) = Call[String] : func:r190_3, this:r190_1 -# 190| mu190_5(unknown) = ^CallSideEffect : ~m? -# 190| mu190_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r190_1 -# 191| r191_1(glval) = VariableAddress[x57] : -# 191| r191_2(glval) = FunctionAddress[~String] : -# 191| v191_3(void) = Call[~String] : func:r191_2, this:r191_1 -# 191| mu191_4(unknown) = ^CallSideEffect : ~m? -# 191| v191_5(void) = ^IndirectReadSideEffect[-1] : &:r191_1, ~m? -# 191| mu191_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r191_1 -# 191| r191_7(bool) = Constant[0] : -# 191| v191_8(void) = ConditionalBranch : r191_7 +# 35| Block 58 +# 35| r35_799(glval) = VariableAddress[x57] : +# 35| mu35_800(String) = Uninitialized[x57] : &:r35_799 +# 35| r35_801(glval) = FunctionAddress[String] : +# 35| v35_802(void) = Call[String] : func:r35_801, this:r35_799 +# 35| mu35_803(unknown) = ^CallSideEffect : ~m? +# 35| mu35_804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_799 +# 35| r35_805(glval) = VariableAddress[x57] : +# 35| r35_806(glval) = FunctionAddress[~String] : +# 35| v35_807(void) = Call[~String] : func:r35_806, this:r35_805 +# 35| mu35_808(unknown) = ^CallSideEffect : ~m? +# 35| v35_809(void) = ^IndirectReadSideEffect[-1] : &:r35_805, ~m? +# 35| mu35_810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_805 +# 35| r35_811(bool) = Constant[0] : +# 35| v35_812(void) = ConditionalBranch : r35_811 #-----| False -> Block 59 #-----| True (back edge) -> Block 58 -# 193| Block 59 -# 193| r193_1(glval) = VariableAddress[x58] : -# 193| mu193_2(String) = Uninitialized[x58] : &:r193_1 -# 193| r193_3(glval) = FunctionAddress[String] : -# 193| v193_4(void) = Call[String] : func:r193_3, this:r193_1 -# 193| mu193_5(unknown) = ^CallSideEffect : ~m? -# 193| mu193_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r193_1 -# 194| r194_1(glval) = VariableAddress[x58] : -# 194| r194_2(glval) = FunctionAddress[~String] : -# 194| v194_3(void) = Call[~String] : func:r194_2, this:r194_1 -# 194| mu194_4(unknown) = ^CallSideEffect : ~m? -# 194| v194_5(void) = ^IndirectReadSideEffect[-1] : &:r194_1, ~m? -# 194| mu194_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r194_1 -# 194| r194_7(bool) = Constant[0] : -# 194| v194_8(void) = ConditionalBranch : r194_7 +# 35| Block 59 +# 35| r35_813(glval) = VariableAddress[x58] : +# 35| mu35_814(String) = Uninitialized[x58] : &:r35_813 +# 35| r35_815(glval) = FunctionAddress[String] : +# 35| v35_816(void) = Call[String] : func:r35_815, this:r35_813 +# 35| mu35_817(unknown) = ^CallSideEffect : ~m? +# 35| mu35_818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_813 +# 35| r35_819(glval) = VariableAddress[x58] : +# 35| r35_820(glval) = FunctionAddress[~String] : +# 35| v35_821(void) = Call[~String] : func:r35_820, this:r35_819 +# 35| mu35_822(unknown) = ^CallSideEffect : ~m? +# 35| v35_823(void) = ^IndirectReadSideEffect[-1] : &:r35_819, ~m? +# 35| mu35_824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_819 +# 35| r35_825(bool) = Constant[0] : +# 35| v35_826(void) = ConditionalBranch : r35_825 #-----| False -> Block 60 #-----| True (back edge) -> Block 59 -# 196| Block 60 -# 196| r196_1(glval) = VariableAddress[x59] : -# 196| mu196_2(String) = Uninitialized[x59] : &:r196_1 -# 196| r196_3(glval) = FunctionAddress[String] : -# 196| v196_4(void) = Call[String] : func:r196_3, this:r196_1 -# 196| mu196_5(unknown) = ^CallSideEffect : ~m? -# 196| mu196_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r196_1 -# 197| r197_1(glval) = VariableAddress[x59] : -# 197| r197_2(glval) = FunctionAddress[~String] : -# 197| v197_3(void) = Call[~String] : func:r197_2, this:r197_1 -# 197| mu197_4(unknown) = ^CallSideEffect : ~m? -# 197| v197_5(void) = ^IndirectReadSideEffect[-1] : &:r197_1, ~m? -# 197| mu197_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r197_1 -# 197| r197_7(bool) = Constant[0] : -# 197| v197_8(void) = ConditionalBranch : r197_7 +# 35| Block 60 +# 35| r35_827(glval) = VariableAddress[x59] : +# 35| mu35_828(String) = Uninitialized[x59] : &:r35_827 +# 35| r35_829(glval) = FunctionAddress[String] : +# 35| v35_830(void) = Call[String] : func:r35_829, this:r35_827 +# 35| mu35_831(unknown) = ^CallSideEffect : ~m? +# 35| mu35_832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_827 +# 35| r35_833(glval) = VariableAddress[x59] : +# 35| r35_834(glval) = FunctionAddress[~String] : +# 35| v35_835(void) = Call[~String] : func:r35_834, this:r35_833 +# 35| mu35_836(unknown) = ^CallSideEffect : ~m? +# 35| v35_837(void) = ^IndirectReadSideEffect[-1] : &:r35_833, ~m? +# 35| mu35_838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_833 +# 35| r35_839(bool) = Constant[0] : +# 35| v35_840(void) = ConditionalBranch : r35_839 #-----| False -> Block 61 #-----| True (back edge) -> Block 60 -# 199| Block 61 -# 199| r199_1(glval) = VariableAddress[x60] : -# 199| mu199_2(String) = Uninitialized[x60] : &:r199_1 -# 199| r199_3(glval) = FunctionAddress[String] : -# 199| v199_4(void) = Call[String] : func:r199_3, this:r199_1 -# 199| mu199_5(unknown) = ^CallSideEffect : ~m? -# 199| mu199_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r199_1 -# 200| r200_1(glval) = VariableAddress[x60] : -# 200| r200_2(glval) = FunctionAddress[~String] : -# 200| v200_3(void) = Call[~String] : func:r200_2, this:r200_1 -# 200| mu200_4(unknown) = ^CallSideEffect : ~m? -# 200| v200_5(void) = ^IndirectReadSideEffect[-1] : &:r200_1, ~m? -# 200| mu200_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r200_1 -# 200| r200_7(bool) = Constant[0] : -# 200| v200_8(void) = ConditionalBranch : r200_7 +# 35| Block 61 +# 35| r35_841(glval) = VariableAddress[x60] : +# 35| mu35_842(String) = Uninitialized[x60] : &:r35_841 +# 35| r35_843(glval) = FunctionAddress[String] : +# 35| v35_844(void) = Call[String] : func:r35_843, this:r35_841 +# 35| mu35_845(unknown) = ^CallSideEffect : ~m? +# 35| mu35_846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_841 +# 35| r35_847(glval) = VariableAddress[x60] : +# 35| r35_848(glval) = FunctionAddress[~String] : +# 35| v35_849(void) = Call[~String] : func:r35_848, this:r35_847 +# 35| mu35_850(unknown) = ^CallSideEffect : ~m? +# 35| v35_851(void) = ^IndirectReadSideEffect[-1] : &:r35_847, ~m? +# 35| mu35_852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_847 +# 35| r35_853(bool) = Constant[0] : +# 35| v35_854(void) = ConditionalBranch : r35_853 #-----| False -> Block 62 #-----| True (back edge) -> Block 61 -# 202| Block 62 -# 202| r202_1(glval) = VariableAddress[x61] : -# 202| mu202_2(String) = Uninitialized[x61] : &:r202_1 -# 202| r202_3(glval) = FunctionAddress[String] : -# 202| v202_4(void) = Call[String] : func:r202_3, this:r202_1 -# 202| mu202_5(unknown) = ^CallSideEffect : ~m? -# 202| mu202_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r202_1 -# 203| r203_1(glval) = VariableAddress[x61] : -# 203| r203_2(glval) = FunctionAddress[~String] : -# 203| v203_3(void) = Call[~String] : func:r203_2, this:r203_1 -# 203| mu203_4(unknown) = ^CallSideEffect : ~m? -# 203| v203_5(void) = ^IndirectReadSideEffect[-1] : &:r203_1, ~m? -# 203| mu203_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r203_1 -# 203| r203_7(bool) = Constant[0] : -# 203| v203_8(void) = ConditionalBranch : r203_7 +# 35| Block 62 +# 35| r35_855(glval) = VariableAddress[x61] : +# 35| mu35_856(String) = Uninitialized[x61] : &:r35_855 +# 35| r35_857(glval) = FunctionAddress[String] : +# 35| v35_858(void) = Call[String] : func:r35_857, this:r35_855 +# 35| mu35_859(unknown) = ^CallSideEffect : ~m? +# 35| mu35_860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_855 +# 35| r35_861(glval) = VariableAddress[x61] : +# 35| r35_862(glval) = FunctionAddress[~String] : +# 35| v35_863(void) = Call[~String] : func:r35_862, this:r35_861 +# 35| mu35_864(unknown) = ^CallSideEffect : ~m? +# 35| v35_865(void) = ^IndirectReadSideEffect[-1] : &:r35_861, ~m? +# 35| mu35_866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_861 +# 35| r35_867(bool) = Constant[0] : +# 35| v35_868(void) = ConditionalBranch : r35_867 #-----| False -> Block 63 #-----| True (back edge) -> Block 62 -# 205| Block 63 -# 205| r205_1(glval) = VariableAddress[x62] : -# 205| mu205_2(String) = Uninitialized[x62] : &:r205_1 -# 205| r205_3(glval) = FunctionAddress[String] : -# 205| v205_4(void) = Call[String] : func:r205_3, this:r205_1 -# 205| mu205_5(unknown) = ^CallSideEffect : ~m? -# 205| mu205_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r205_1 -# 206| r206_1(glval) = VariableAddress[x62] : -# 206| r206_2(glval) = FunctionAddress[~String] : -# 206| v206_3(void) = Call[~String] : func:r206_2, this:r206_1 -# 206| mu206_4(unknown) = ^CallSideEffect : ~m? -# 206| v206_5(void) = ^IndirectReadSideEffect[-1] : &:r206_1, ~m? -# 206| mu206_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r206_1 -# 206| r206_7(bool) = Constant[0] : -# 206| v206_8(void) = ConditionalBranch : r206_7 +# 35| Block 63 +# 35| r35_869(glval) = VariableAddress[x62] : +# 35| mu35_870(String) = Uninitialized[x62] : &:r35_869 +# 35| r35_871(glval) = FunctionAddress[String] : +# 35| v35_872(void) = Call[String] : func:r35_871, this:r35_869 +# 35| mu35_873(unknown) = ^CallSideEffect : ~m? +# 35| mu35_874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_869 +# 35| r35_875(glval) = VariableAddress[x62] : +# 35| r35_876(glval) = FunctionAddress[~String] : +# 35| v35_877(void) = Call[~String] : func:r35_876, this:r35_875 +# 35| mu35_878(unknown) = ^CallSideEffect : ~m? +# 35| v35_879(void) = ^IndirectReadSideEffect[-1] : &:r35_875, ~m? +# 35| mu35_880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_875 +# 35| r35_881(bool) = Constant[0] : +# 35| v35_882(void) = ConditionalBranch : r35_881 #-----| False -> Block 64 #-----| True (back edge) -> Block 63 -# 208| Block 64 -# 208| r208_1(glval) = VariableAddress[x63] : -# 208| mu208_2(String) = Uninitialized[x63] : &:r208_1 -# 208| r208_3(glval) = FunctionAddress[String] : -# 208| v208_4(void) = Call[String] : func:r208_3, this:r208_1 -# 208| mu208_5(unknown) = ^CallSideEffect : ~m? -# 208| mu208_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r208_1 -# 209| r209_1(glval) = VariableAddress[x63] : -# 209| r209_2(glval) = FunctionAddress[~String] : -# 209| v209_3(void) = Call[~String] : func:r209_2, this:r209_1 -# 209| mu209_4(unknown) = ^CallSideEffect : ~m? -# 209| v209_5(void) = ^IndirectReadSideEffect[-1] : &:r209_1, ~m? -# 209| mu209_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r209_1 -# 209| r209_7(bool) = Constant[0] : -# 209| v209_8(void) = ConditionalBranch : r209_7 +# 35| Block 64 +# 35| r35_883(glval) = VariableAddress[x63] : +# 35| mu35_884(String) = Uninitialized[x63] : &:r35_883 +# 35| r35_885(glval) = FunctionAddress[String] : +# 35| v35_886(void) = Call[String] : func:r35_885, this:r35_883 +# 35| mu35_887(unknown) = ^CallSideEffect : ~m? +# 35| mu35_888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_883 +# 35| r35_889(glval) = VariableAddress[x63] : +# 35| r35_890(glval) = FunctionAddress[~String] : +# 35| v35_891(void) = Call[~String] : func:r35_890, this:r35_889 +# 35| mu35_892(unknown) = ^CallSideEffect : ~m? +# 35| v35_893(void) = ^IndirectReadSideEffect[-1] : &:r35_889, ~m? +# 35| mu35_894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_889 +# 35| r35_895(bool) = Constant[0] : +# 35| v35_896(void) = ConditionalBranch : r35_895 #-----| False -> Block 65 #-----| True (back edge) -> Block 64 -# 211| Block 65 -# 211| r211_1(glval) = VariableAddress[x64] : -# 211| mu211_2(String) = Uninitialized[x64] : &:r211_1 -# 211| r211_3(glval) = FunctionAddress[String] : -# 211| v211_4(void) = Call[String] : func:r211_3, this:r211_1 -# 211| mu211_5(unknown) = ^CallSideEffect : ~m? -# 211| mu211_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r211_1 -# 212| r212_1(glval) = VariableAddress[x64] : -# 212| r212_2(glval) = FunctionAddress[~String] : -# 212| v212_3(void) = Call[~String] : func:r212_2, this:r212_1 -# 212| mu212_4(unknown) = ^CallSideEffect : ~m? -# 212| v212_5(void) = ^IndirectReadSideEffect[-1] : &:r212_1, ~m? -# 212| mu212_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r212_1 -# 212| r212_7(bool) = Constant[0] : -# 212| v212_8(void) = ConditionalBranch : r212_7 +# 35| Block 65 +# 35| r35_897(glval) = VariableAddress[x64] : +# 35| mu35_898(String) = Uninitialized[x64] : &:r35_897 +# 35| r35_899(glval) = FunctionAddress[String] : +# 35| v35_900(void) = Call[String] : func:r35_899, this:r35_897 +# 35| mu35_901(unknown) = ^CallSideEffect : ~m? +# 35| mu35_902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_897 +# 35| r35_903(glval) = VariableAddress[x64] : +# 35| r35_904(glval) = FunctionAddress[~String] : +# 35| v35_905(void) = Call[~String] : func:r35_904, this:r35_903 +# 35| mu35_906(unknown) = ^CallSideEffect : ~m? +# 35| v35_907(void) = ^IndirectReadSideEffect[-1] : &:r35_903, ~m? +# 35| mu35_908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_903 +# 35| r35_909(bool) = Constant[0] : +# 35| v35_910(void) = ConditionalBranch : r35_909 #-----| False -> Block 66 #-----| True (back edge) -> Block 65 -# 214| Block 66 -# 214| r214_1(glval) = VariableAddress[x65] : -# 214| mu214_2(String) = Uninitialized[x65] : &:r214_1 -# 214| r214_3(glval) = FunctionAddress[String] : -# 214| v214_4(void) = Call[String] : func:r214_3, this:r214_1 -# 214| mu214_5(unknown) = ^CallSideEffect : ~m? -# 214| mu214_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r214_1 -# 215| r215_1(glval) = VariableAddress[x65] : -# 215| r215_2(glval) = FunctionAddress[~String] : -# 215| v215_3(void) = Call[~String] : func:r215_2, this:r215_1 -# 215| mu215_4(unknown) = ^CallSideEffect : ~m? -# 215| v215_5(void) = ^IndirectReadSideEffect[-1] : &:r215_1, ~m? -# 215| mu215_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r215_1 -# 215| r215_7(bool) = Constant[0] : -# 215| v215_8(void) = ConditionalBranch : r215_7 +# 35| Block 66 +# 35| r35_911(glval) = VariableAddress[x65] : +# 35| mu35_912(String) = Uninitialized[x65] : &:r35_911 +# 35| r35_913(glval) = FunctionAddress[String] : +# 35| v35_914(void) = Call[String] : func:r35_913, this:r35_911 +# 35| mu35_915(unknown) = ^CallSideEffect : ~m? +# 35| mu35_916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_911 +# 35| r35_917(glval) = VariableAddress[x65] : +# 35| r35_918(glval) = FunctionAddress[~String] : +# 35| v35_919(void) = Call[~String] : func:r35_918, this:r35_917 +# 35| mu35_920(unknown) = ^CallSideEffect : ~m? +# 35| v35_921(void) = ^IndirectReadSideEffect[-1] : &:r35_917, ~m? +# 35| mu35_922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_917 +# 35| r35_923(bool) = Constant[0] : +# 35| v35_924(void) = ConditionalBranch : r35_923 #-----| False -> Block 67 #-----| True (back edge) -> Block 66 -# 217| Block 67 -# 217| r217_1(glval) = VariableAddress[x66] : -# 217| mu217_2(String) = Uninitialized[x66] : &:r217_1 -# 217| r217_3(glval) = FunctionAddress[String] : -# 217| v217_4(void) = Call[String] : func:r217_3, this:r217_1 -# 217| mu217_5(unknown) = ^CallSideEffect : ~m? -# 217| mu217_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r217_1 -# 218| r218_1(glval) = VariableAddress[x66] : -# 218| r218_2(glval) = FunctionAddress[~String] : -# 218| v218_3(void) = Call[~String] : func:r218_2, this:r218_1 -# 218| mu218_4(unknown) = ^CallSideEffect : ~m? -# 218| v218_5(void) = ^IndirectReadSideEffect[-1] : &:r218_1, ~m? -# 218| mu218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r218_1 -# 218| r218_7(bool) = Constant[0] : -# 218| v218_8(void) = ConditionalBranch : r218_7 +# 35| Block 67 +# 35| r35_925(glval) = VariableAddress[x66] : +# 35| mu35_926(String) = Uninitialized[x66] : &:r35_925 +# 35| r35_927(glval) = FunctionAddress[String] : +# 35| v35_928(void) = Call[String] : func:r35_927, this:r35_925 +# 35| mu35_929(unknown) = ^CallSideEffect : ~m? +# 35| mu35_930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_925 +# 35| r35_931(glval) = VariableAddress[x66] : +# 35| r35_932(glval) = FunctionAddress[~String] : +# 35| v35_933(void) = Call[~String] : func:r35_932, this:r35_931 +# 35| mu35_934(unknown) = ^CallSideEffect : ~m? +# 35| v35_935(void) = ^IndirectReadSideEffect[-1] : &:r35_931, ~m? +# 35| mu35_936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_931 +# 35| r35_937(bool) = Constant[0] : +# 35| v35_938(void) = ConditionalBranch : r35_937 #-----| False -> Block 68 #-----| True (back edge) -> Block 67 -# 220| Block 68 -# 220| r220_1(glval) = VariableAddress[x67] : -# 220| mu220_2(String) = Uninitialized[x67] : &:r220_1 -# 220| r220_3(glval) = FunctionAddress[String] : -# 220| v220_4(void) = Call[String] : func:r220_3, this:r220_1 -# 220| mu220_5(unknown) = ^CallSideEffect : ~m? -# 220| mu220_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r220_1 -# 221| r221_1(glval) = VariableAddress[x67] : -# 221| r221_2(glval) = FunctionAddress[~String] : -# 221| v221_3(void) = Call[~String] : func:r221_2, this:r221_1 -# 221| mu221_4(unknown) = ^CallSideEffect : ~m? -# 221| v221_5(void) = ^IndirectReadSideEffect[-1] : &:r221_1, ~m? -# 221| mu221_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r221_1 -# 221| r221_7(bool) = Constant[0] : -# 221| v221_8(void) = ConditionalBranch : r221_7 +# 35| Block 68 +# 35| r35_939(glval) = VariableAddress[x67] : +# 35| mu35_940(String) = Uninitialized[x67] : &:r35_939 +# 35| r35_941(glval) = FunctionAddress[String] : +# 35| v35_942(void) = Call[String] : func:r35_941, this:r35_939 +# 35| mu35_943(unknown) = ^CallSideEffect : ~m? +# 35| mu35_944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_939 +# 35| r35_945(glval) = VariableAddress[x67] : +# 35| r35_946(glval) = FunctionAddress[~String] : +# 35| v35_947(void) = Call[~String] : func:r35_946, this:r35_945 +# 35| mu35_948(unknown) = ^CallSideEffect : ~m? +# 35| v35_949(void) = ^IndirectReadSideEffect[-1] : &:r35_945, ~m? +# 35| mu35_950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_945 +# 35| r35_951(bool) = Constant[0] : +# 35| v35_952(void) = ConditionalBranch : r35_951 #-----| False -> Block 69 #-----| True (back edge) -> Block 68 -# 223| Block 69 -# 223| r223_1(glval) = VariableAddress[x68] : -# 223| mu223_2(String) = Uninitialized[x68] : &:r223_1 -# 223| r223_3(glval) = FunctionAddress[String] : -# 223| v223_4(void) = Call[String] : func:r223_3, this:r223_1 -# 223| mu223_5(unknown) = ^CallSideEffect : ~m? -# 223| mu223_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r223_1 -# 224| r224_1(glval) = VariableAddress[x68] : -# 224| r224_2(glval) = FunctionAddress[~String] : -# 224| v224_3(void) = Call[~String] : func:r224_2, this:r224_1 -# 224| mu224_4(unknown) = ^CallSideEffect : ~m? -# 224| v224_5(void) = ^IndirectReadSideEffect[-1] : &:r224_1, ~m? -# 224| mu224_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r224_1 -# 224| r224_7(bool) = Constant[0] : -# 224| v224_8(void) = ConditionalBranch : r224_7 +# 35| Block 69 +# 35| r35_953(glval) = VariableAddress[x68] : +# 35| mu35_954(String) = Uninitialized[x68] : &:r35_953 +# 35| r35_955(glval) = FunctionAddress[String] : +# 35| v35_956(void) = Call[String] : func:r35_955, this:r35_953 +# 35| mu35_957(unknown) = ^CallSideEffect : ~m? +# 35| mu35_958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_953 +# 35| r35_959(glval) = VariableAddress[x68] : +# 35| r35_960(glval) = FunctionAddress[~String] : +# 35| v35_961(void) = Call[~String] : func:r35_960, this:r35_959 +# 35| mu35_962(unknown) = ^CallSideEffect : ~m? +# 35| v35_963(void) = ^IndirectReadSideEffect[-1] : &:r35_959, ~m? +# 35| mu35_964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_959 +# 35| r35_965(bool) = Constant[0] : +# 35| v35_966(void) = ConditionalBranch : r35_965 #-----| False -> Block 70 #-----| True (back edge) -> Block 69 -# 226| Block 70 -# 226| r226_1(glval) = VariableAddress[x69] : -# 226| mu226_2(String) = Uninitialized[x69] : &:r226_1 -# 226| r226_3(glval) = FunctionAddress[String] : -# 226| v226_4(void) = Call[String] : func:r226_3, this:r226_1 -# 226| mu226_5(unknown) = ^CallSideEffect : ~m? -# 226| mu226_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r226_1 -# 227| r227_1(glval) = VariableAddress[x69] : -# 227| r227_2(glval) = FunctionAddress[~String] : -# 227| v227_3(void) = Call[~String] : func:r227_2, this:r227_1 -# 227| mu227_4(unknown) = ^CallSideEffect : ~m? -# 227| v227_5(void) = ^IndirectReadSideEffect[-1] : &:r227_1, ~m? -# 227| mu227_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r227_1 -# 227| r227_7(bool) = Constant[0] : -# 227| v227_8(void) = ConditionalBranch : r227_7 +# 35| Block 70 +# 35| r35_967(glval) = VariableAddress[x69] : +# 35| mu35_968(String) = Uninitialized[x69] : &:r35_967 +# 35| r35_969(glval) = FunctionAddress[String] : +# 35| v35_970(void) = Call[String] : func:r35_969, this:r35_967 +# 35| mu35_971(unknown) = ^CallSideEffect : ~m? +# 35| mu35_972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_967 +# 35| r35_973(glval) = VariableAddress[x69] : +# 35| r35_974(glval) = FunctionAddress[~String] : +# 35| v35_975(void) = Call[~String] : func:r35_974, this:r35_973 +# 35| mu35_976(unknown) = ^CallSideEffect : ~m? +# 35| v35_977(void) = ^IndirectReadSideEffect[-1] : &:r35_973, ~m? +# 35| mu35_978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_973 +# 35| r35_979(bool) = Constant[0] : +# 35| v35_980(void) = ConditionalBranch : r35_979 #-----| False -> Block 71 #-----| True (back edge) -> Block 70 -# 229| Block 71 -# 229| r229_1(glval) = VariableAddress[x70] : -# 229| mu229_2(String) = Uninitialized[x70] : &:r229_1 -# 229| r229_3(glval) = FunctionAddress[String] : -# 229| v229_4(void) = Call[String] : func:r229_3, this:r229_1 -# 229| mu229_5(unknown) = ^CallSideEffect : ~m? -# 229| mu229_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r229_1 -# 230| r230_1(glval) = VariableAddress[x70] : -# 230| r230_2(glval) = FunctionAddress[~String] : -# 230| v230_3(void) = Call[~String] : func:r230_2, this:r230_1 -# 230| mu230_4(unknown) = ^CallSideEffect : ~m? -# 230| v230_5(void) = ^IndirectReadSideEffect[-1] : &:r230_1, ~m? -# 230| mu230_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r230_1 -# 230| r230_7(bool) = Constant[0] : -# 230| v230_8(void) = ConditionalBranch : r230_7 +# 35| Block 71 +# 35| r35_981(glval) = VariableAddress[x70] : +# 35| mu35_982(String) = Uninitialized[x70] : &:r35_981 +# 35| r35_983(glval) = FunctionAddress[String] : +# 35| v35_984(void) = Call[String] : func:r35_983, this:r35_981 +# 35| mu35_985(unknown) = ^CallSideEffect : ~m? +# 35| mu35_986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_981 +# 35| r35_987(glval) = VariableAddress[x70] : +# 35| r35_988(glval) = FunctionAddress[~String] : +# 35| v35_989(void) = Call[~String] : func:r35_988, this:r35_987 +# 35| mu35_990(unknown) = ^CallSideEffect : ~m? +# 35| v35_991(void) = ^IndirectReadSideEffect[-1] : &:r35_987, ~m? +# 35| mu35_992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_987 +# 35| r35_993(bool) = Constant[0] : +# 35| v35_994(void) = ConditionalBranch : r35_993 #-----| False -> Block 72 #-----| True (back edge) -> Block 71 -# 232| Block 72 -# 232| r232_1(glval) = VariableAddress[x71] : -# 232| mu232_2(String) = Uninitialized[x71] : &:r232_1 -# 232| r232_3(glval) = FunctionAddress[String] : -# 232| v232_4(void) = Call[String] : func:r232_3, this:r232_1 -# 232| mu232_5(unknown) = ^CallSideEffect : ~m? -# 232| mu232_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r232_1 -# 233| r233_1(glval) = VariableAddress[x71] : -# 233| r233_2(glval) = FunctionAddress[~String] : -# 233| v233_3(void) = Call[~String] : func:r233_2, this:r233_1 -# 233| mu233_4(unknown) = ^CallSideEffect : ~m? -# 233| v233_5(void) = ^IndirectReadSideEffect[-1] : &:r233_1, ~m? -# 233| mu233_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r233_1 -# 233| r233_7(bool) = Constant[0] : -# 233| v233_8(void) = ConditionalBranch : r233_7 +# 35| Block 72 +# 35| r35_995(glval) = VariableAddress[x71] : +# 35| mu35_996(String) = Uninitialized[x71] : &:r35_995 +# 35| r35_997(glval) = FunctionAddress[String] : +# 35| v35_998(void) = Call[String] : func:r35_997, this:r35_995 +# 35| mu35_999(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_995 +# 35| r35_1001(glval) = VariableAddress[x71] : +# 35| r35_1002(glval) = FunctionAddress[~String] : +# 35| v35_1003(void) = Call[~String] : func:r35_1002, this:r35_1001 +# 35| mu35_1004(unknown) = ^CallSideEffect : ~m? +# 35| v35_1005(void) = ^IndirectReadSideEffect[-1] : &:r35_1001, ~m? +# 35| mu35_1006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1001 +# 35| r35_1007(bool) = Constant[0] : +# 35| v35_1008(void) = ConditionalBranch : r35_1007 #-----| False -> Block 73 #-----| True (back edge) -> Block 72 -# 235| Block 73 -# 235| r235_1(glval) = VariableAddress[x72] : -# 235| mu235_2(String) = Uninitialized[x72] : &:r235_1 -# 235| r235_3(glval) = FunctionAddress[String] : -# 235| v235_4(void) = Call[String] : func:r235_3, this:r235_1 -# 235| mu235_5(unknown) = ^CallSideEffect : ~m? -# 235| mu235_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r235_1 -# 236| r236_1(glval) = VariableAddress[x72] : -# 236| r236_2(glval) = FunctionAddress[~String] : -# 236| v236_3(void) = Call[~String] : func:r236_2, this:r236_1 -# 236| mu236_4(unknown) = ^CallSideEffect : ~m? -# 236| v236_5(void) = ^IndirectReadSideEffect[-1] : &:r236_1, ~m? -# 236| mu236_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r236_1 -# 236| r236_7(bool) = Constant[0] : -# 236| v236_8(void) = ConditionalBranch : r236_7 +# 35| Block 73 +# 35| r35_1009(glval) = VariableAddress[x72] : +# 35| mu35_1010(String) = Uninitialized[x72] : &:r35_1009 +# 35| r35_1011(glval) = FunctionAddress[String] : +# 35| v35_1012(void) = Call[String] : func:r35_1011, this:r35_1009 +# 35| mu35_1013(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1009 +# 35| r35_1015(glval) = VariableAddress[x72] : +# 35| r35_1016(glval) = FunctionAddress[~String] : +# 35| v35_1017(void) = Call[~String] : func:r35_1016, this:r35_1015 +# 35| mu35_1018(unknown) = ^CallSideEffect : ~m? +# 35| v35_1019(void) = ^IndirectReadSideEffect[-1] : &:r35_1015, ~m? +# 35| mu35_1020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1015 +# 35| r35_1021(bool) = Constant[0] : +# 35| v35_1022(void) = ConditionalBranch : r35_1021 #-----| False -> Block 74 #-----| True (back edge) -> Block 73 -# 238| Block 74 -# 238| r238_1(glval) = VariableAddress[x73] : -# 238| mu238_2(String) = Uninitialized[x73] : &:r238_1 -# 238| r238_3(glval) = FunctionAddress[String] : -# 238| v238_4(void) = Call[String] : func:r238_3, this:r238_1 -# 238| mu238_5(unknown) = ^CallSideEffect : ~m? -# 238| mu238_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r238_1 -# 239| r239_1(glval) = VariableAddress[x73] : -# 239| r239_2(glval) = FunctionAddress[~String] : -# 239| v239_3(void) = Call[~String] : func:r239_2, this:r239_1 -# 239| mu239_4(unknown) = ^CallSideEffect : ~m? -# 239| v239_5(void) = ^IndirectReadSideEffect[-1] : &:r239_1, ~m? -# 239| mu239_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r239_1 -# 239| r239_7(bool) = Constant[0] : -# 239| v239_8(void) = ConditionalBranch : r239_7 +# 35| Block 74 +# 35| r35_1023(glval) = VariableAddress[x73] : +# 35| mu35_1024(String) = Uninitialized[x73] : &:r35_1023 +# 35| r35_1025(glval) = FunctionAddress[String] : +# 35| v35_1026(void) = Call[String] : func:r35_1025, this:r35_1023 +# 35| mu35_1027(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1023 +# 35| r35_1029(glval) = VariableAddress[x73] : +# 35| r35_1030(glval) = FunctionAddress[~String] : +# 35| v35_1031(void) = Call[~String] : func:r35_1030, this:r35_1029 +# 35| mu35_1032(unknown) = ^CallSideEffect : ~m? +# 35| v35_1033(void) = ^IndirectReadSideEffect[-1] : &:r35_1029, ~m? +# 35| mu35_1034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1029 +# 35| r35_1035(bool) = Constant[0] : +# 35| v35_1036(void) = ConditionalBranch : r35_1035 #-----| False -> Block 75 #-----| True (back edge) -> Block 74 -# 241| Block 75 -# 241| r241_1(glval) = VariableAddress[x74] : -# 241| mu241_2(String) = Uninitialized[x74] : &:r241_1 -# 241| r241_3(glval) = FunctionAddress[String] : -# 241| v241_4(void) = Call[String] : func:r241_3, this:r241_1 -# 241| mu241_5(unknown) = ^CallSideEffect : ~m? -# 241| mu241_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r241_1 -# 242| r242_1(glval) = VariableAddress[x74] : -# 242| r242_2(glval) = FunctionAddress[~String] : -# 242| v242_3(void) = Call[~String] : func:r242_2, this:r242_1 -# 242| mu242_4(unknown) = ^CallSideEffect : ~m? -# 242| v242_5(void) = ^IndirectReadSideEffect[-1] : &:r242_1, ~m? -# 242| mu242_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r242_1 -# 242| r242_7(bool) = Constant[0] : -# 242| v242_8(void) = ConditionalBranch : r242_7 +# 35| Block 75 +# 35| r35_1037(glval) = VariableAddress[x74] : +# 35| mu35_1038(String) = Uninitialized[x74] : &:r35_1037 +# 35| r35_1039(glval) = FunctionAddress[String] : +# 35| v35_1040(void) = Call[String] : func:r35_1039, this:r35_1037 +# 35| mu35_1041(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1037 +# 35| r35_1043(glval) = VariableAddress[x74] : +# 35| r35_1044(glval) = FunctionAddress[~String] : +# 35| v35_1045(void) = Call[~String] : func:r35_1044, this:r35_1043 +# 35| mu35_1046(unknown) = ^CallSideEffect : ~m? +# 35| v35_1047(void) = ^IndirectReadSideEffect[-1] : &:r35_1043, ~m? +# 35| mu35_1048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1043 +# 35| r35_1049(bool) = Constant[0] : +# 35| v35_1050(void) = ConditionalBranch : r35_1049 #-----| False -> Block 76 #-----| True (back edge) -> Block 75 -# 244| Block 76 -# 244| r244_1(glval) = VariableAddress[x75] : -# 244| mu244_2(String) = Uninitialized[x75] : &:r244_1 -# 244| r244_3(glval) = FunctionAddress[String] : -# 244| v244_4(void) = Call[String] : func:r244_3, this:r244_1 -# 244| mu244_5(unknown) = ^CallSideEffect : ~m? -# 244| mu244_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r244_1 -# 245| r245_1(glval) = VariableAddress[x75] : -# 245| r245_2(glval) = FunctionAddress[~String] : -# 245| v245_3(void) = Call[~String] : func:r245_2, this:r245_1 -# 245| mu245_4(unknown) = ^CallSideEffect : ~m? -# 245| v245_5(void) = ^IndirectReadSideEffect[-1] : &:r245_1, ~m? -# 245| mu245_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r245_1 -# 245| r245_7(bool) = Constant[0] : -# 245| v245_8(void) = ConditionalBranch : r245_7 +# 35| Block 76 +# 35| r35_1051(glval) = VariableAddress[x75] : +# 35| mu35_1052(String) = Uninitialized[x75] : &:r35_1051 +# 35| r35_1053(glval) = FunctionAddress[String] : +# 35| v35_1054(void) = Call[String] : func:r35_1053, this:r35_1051 +# 35| mu35_1055(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1051 +# 35| r35_1057(glval) = VariableAddress[x75] : +# 35| r35_1058(glval) = FunctionAddress[~String] : +# 35| v35_1059(void) = Call[~String] : func:r35_1058, this:r35_1057 +# 35| mu35_1060(unknown) = ^CallSideEffect : ~m? +# 35| v35_1061(void) = ^IndirectReadSideEffect[-1] : &:r35_1057, ~m? +# 35| mu35_1062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1057 +# 35| r35_1063(bool) = Constant[0] : +# 35| v35_1064(void) = ConditionalBranch : r35_1063 #-----| False -> Block 77 #-----| True (back edge) -> Block 76 -# 247| Block 77 -# 247| r247_1(glval) = VariableAddress[x76] : -# 247| mu247_2(String) = Uninitialized[x76] : &:r247_1 -# 247| r247_3(glval) = FunctionAddress[String] : -# 247| v247_4(void) = Call[String] : func:r247_3, this:r247_1 -# 247| mu247_5(unknown) = ^CallSideEffect : ~m? -# 247| mu247_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r247_1 -# 248| r248_1(glval) = VariableAddress[x76] : -# 248| r248_2(glval) = FunctionAddress[~String] : -# 248| v248_3(void) = Call[~String] : func:r248_2, this:r248_1 -# 248| mu248_4(unknown) = ^CallSideEffect : ~m? -# 248| v248_5(void) = ^IndirectReadSideEffect[-1] : &:r248_1, ~m? -# 248| mu248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r248_1 -# 248| r248_7(bool) = Constant[0] : -# 248| v248_8(void) = ConditionalBranch : r248_7 +# 35| Block 77 +# 35| r35_1065(glval) = VariableAddress[x76] : +# 35| mu35_1066(String) = Uninitialized[x76] : &:r35_1065 +# 35| r35_1067(glval) = FunctionAddress[String] : +# 35| v35_1068(void) = Call[String] : func:r35_1067, this:r35_1065 +# 35| mu35_1069(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1065 +# 35| r35_1071(glval) = VariableAddress[x76] : +# 35| r35_1072(glval) = FunctionAddress[~String] : +# 35| v35_1073(void) = Call[~String] : func:r35_1072, this:r35_1071 +# 35| mu35_1074(unknown) = ^CallSideEffect : ~m? +# 35| v35_1075(void) = ^IndirectReadSideEffect[-1] : &:r35_1071, ~m? +# 35| mu35_1076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1071 +# 35| r35_1077(bool) = Constant[0] : +# 35| v35_1078(void) = ConditionalBranch : r35_1077 #-----| False -> Block 78 #-----| True (back edge) -> Block 77 -# 250| Block 78 -# 250| r250_1(glval) = VariableAddress[x77] : -# 250| mu250_2(String) = Uninitialized[x77] : &:r250_1 -# 250| r250_3(glval) = FunctionAddress[String] : -# 250| v250_4(void) = Call[String] : func:r250_3, this:r250_1 -# 250| mu250_5(unknown) = ^CallSideEffect : ~m? -# 250| mu250_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r250_1 -# 251| r251_1(glval) = VariableAddress[x77] : -# 251| r251_2(glval) = FunctionAddress[~String] : -# 251| v251_3(void) = Call[~String] : func:r251_2, this:r251_1 -# 251| mu251_4(unknown) = ^CallSideEffect : ~m? -# 251| v251_5(void) = ^IndirectReadSideEffect[-1] : &:r251_1, ~m? -# 251| mu251_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r251_1 -# 251| r251_7(bool) = Constant[0] : -# 251| v251_8(void) = ConditionalBranch : r251_7 +# 35| Block 78 +# 35| r35_1079(glval) = VariableAddress[x77] : +# 35| mu35_1080(String) = Uninitialized[x77] : &:r35_1079 +# 35| r35_1081(glval) = FunctionAddress[String] : +# 35| v35_1082(void) = Call[String] : func:r35_1081, this:r35_1079 +# 35| mu35_1083(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1079 +# 35| r35_1085(glval) = VariableAddress[x77] : +# 35| r35_1086(glval) = FunctionAddress[~String] : +# 35| v35_1087(void) = Call[~String] : func:r35_1086, this:r35_1085 +# 35| mu35_1088(unknown) = ^CallSideEffect : ~m? +# 35| v35_1089(void) = ^IndirectReadSideEffect[-1] : &:r35_1085, ~m? +# 35| mu35_1090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1085 +# 35| r35_1091(bool) = Constant[0] : +# 35| v35_1092(void) = ConditionalBranch : r35_1091 #-----| False -> Block 79 #-----| True (back edge) -> Block 78 -# 253| Block 79 -# 253| r253_1(glval) = VariableAddress[x78] : -# 253| mu253_2(String) = Uninitialized[x78] : &:r253_1 -# 253| r253_3(glval) = FunctionAddress[String] : -# 253| v253_4(void) = Call[String] : func:r253_3, this:r253_1 -# 253| mu253_5(unknown) = ^CallSideEffect : ~m? -# 253| mu253_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r253_1 -# 254| r254_1(glval) = VariableAddress[x78] : -# 254| r254_2(glval) = FunctionAddress[~String] : -# 254| v254_3(void) = Call[~String] : func:r254_2, this:r254_1 -# 254| mu254_4(unknown) = ^CallSideEffect : ~m? -# 254| v254_5(void) = ^IndirectReadSideEffect[-1] : &:r254_1, ~m? -# 254| mu254_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r254_1 -# 254| r254_7(bool) = Constant[0] : -# 254| v254_8(void) = ConditionalBranch : r254_7 +# 35| Block 79 +# 35| r35_1093(glval) = VariableAddress[x78] : +# 35| mu35_1094(String) = Uninitialized[x78] : &:r35_1093 +# 35| r35_1095(glval) = FunctionAddress[String] : +# 35| v35_1096(void) = Call[String] : func:r35_1095, this:r35_1093 +# 35| mu35_1097(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1093 +# 35| r35_1099(glval) = VariableAddress[x78] : +# 35| r35_1100(glval) = FunctionAddress[~String] : +# 35| v35_1101(void) = Call[~String] : func:r35_1100, this:r35_1099 +# 35| mu35_1102(unknown) = ^CallSideEffect : ~m? +# 35| v35_1103(void) = ^IndirectReadSideEffect[-1] : &:r35_1099, ~m? +# 35| mu35_1104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1099 +# 35| r35_1105(bool) = Constant[0] : +# 35| v35_1106(void) = ConditionalBranch : r35_1105 #-----| False -> Block 80 #-----| True (back edge) -> Block 79 -# 256| Block 80 -# 256| r256_1(glval) = VariableAddress[x79] : -# 256| mu256_2(String) = Uninitialized[x79] : &:r256_1 -# 256| r256_3(glval) = FunctionAddress[String] : -# 256| v256_4(void) = Call[String] : func:r256_3, this:r256_1 -# 256| mu256_5(unknown) = ^CallSideEffect : ~m? -# 256| mu256_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r256_1 -# 257| r257_1(glval) = VariableAddress[x79] : -# 257| r257_2(glval) = FunctionAddress[~String] : -# 257| v257_3(void) = Call[~String] : func:r257_2, this:r257_1 -# 257| mu257_4(unknown) = ^CallSideEffect : ~m? -# 257| v257_5(void) = ^IndirectReadSideEffect[-1] : &:r257_1, ~m? -# 257| mu257_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r257_1 -# 257| r257_7(bool) = Constant[0] : -# 257| v257_8(void) = ConditionalBranch : r257_7 +# 35| Block 80 +# 35| r35_1107(glval) = VariableAddress[x79] : +# 35| mu35_1108(String) = Uninitialized[x79] : &:r35_1107 +# 35| r35_1109(glval) = FunctionAddress[String] : +# 35| v35_1110(void) = Call[String] : func:r35_1109, this:r35_1107 +# 35| mu35_1111(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1107 +# 35| r35_1113(glval) = VariableAddress[x79] : +# 35| r35_1114(glval) = FunctionAddress[~String] : +# 35| v35_1115(void) = Call[~String] : func:r35_1114, this:r35_1113 +# 35| mu35_1116(unknown) = ^CallSideEffect : ~m? +# 35| v35_1117(void) = ^IndirectReadSideEffect[-1] : &:r35_1113, ~m? +# 35| mu35_1118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1113 +# 35| r35_1119(bool) = Constant[0] : +# 35| v35_1120(void) = ConditionalBranch : r35_1119 #-----| False -> Block 81 #-----| True (back edge) -> Block 80 -# 259| Block 81 -# 259| r259_1(glval) = VariableAddress[x80] : -# 259| mu259_2(String) = Uninitialized[x80] : &:r259_1 -# 259| r259_3(glval) = FunctionAddress[String] : -# 259| v259_4(void) = Call[String] : func:r259_3, this:r259_1 -# 259| mu259_5(unknown) = ^CallSideEffect : ~m? -# 259| mu259_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r259_1 -# 260| r260_1(glval) = VariableAddress[x80] : -# 260| r260_2(glval) = FunctionAddress[~String] : -# 260| v260_3(void) = Call[~String] : func:r260_2, this:r260_1 -# 260| mu260_4(unknown) = ^CallSideEffect : ~m? -# 260| v260_5(void) = ^IndirectReadSideEffect[-1] : &:r260_1, ~m? -# 260| mu260_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r260_1 -# 260| r260_7(bool) = Constant[0] : -# 260| v260_8(void) = ConditionalBranch : r260_7 +# 35| Block 81 +# 35| r35_1121(glval) = VariableAddress[x80] : +# 35| mu35_1122(String) = Uninitialized[x80] : &:r35_1121 +# 35| r35_1123(glval) = FunctionAddress[String] : +# 35| v35_1124(void) = Call[String] : func:r35_1123, this:r35_1121 +# 35| mu35_1125(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1121 +# 35| r35_1127(glval) = VariableAddress[x80] : +# 35| r35_1128(glval) = FunctionAddress[~String] : +# 35| v35_1129(void) = Call[~String] : func:r35_1128, this:r35_1127 +# 35| mu35_1130(unknown) = ^CallSideEffect : ~m? +# 35| v35_1131(void) = ^IndirectReadSideEffect[-1] : &:r35_1127, ~m? +# 35| mu35_1132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1127 +# 35| r35_1133(bool) = Constant[0] : +# 35| v35_1134(void) = ConditionalBranch : r35_1133 #-----| False -> Block 82 #-----| True (back edge) -> Block 81 -# 262| Block 82 -# 262| r262_1(glval) = VariableAddress[x81] : -# 262| mu262_2(String) = Uninitialized[x81] : &:r262_1 -# 262| r262_3(glval) = FunctionAddress[String] : -# 262| v262_4(void) = Call[String] : func:r262_3, this:r262_1 -# 262| mu262_5(unknown) = ^CallSideEffect : ~m? -# 262| mu262_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r262_1 -# 263| r263_1(glval) = VariableAddress[x81] : -# 263| r263_2(glval) = FunctionAddress[~String] : -# 263| v263_3(void) = Call[~String] : func:r263_2, this:r263_1 -# 263| mu263_4(unknown) = ^CallSideEffect : ~m? -# 263| v263_5(void) = ^IndirectReadSideEffect[-1] : &:r263_1, ~m? -# 263| mu263_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r263_1 -# 263| r263_7(bool) = Constant[0] : -# 263| v263_8(void) = ConditionalBranch : r263_7 +# 35| Block 82 +# 35| r35_1135(glval) = VariableAddress[x81] : +# 35| mu35_1136(String) = Uninitialized[x81] : &:r35_1135 +# 35| r35_1137(glval) = FunctionAddress[String] : +# 35| v35_1138(void) = Call[String] : func:r35_1137, this:r35_1135 +# 35| mu35_1139(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1135 +# 35| r35_1141(glval) = VariableAddress[x81] : +# 35| r35_1142(glval) = FunctionAddress[~String] : +# 35| v35_1143(void) = Call[~String] : func:r35_1142, this:r35_1141 +# 35| mu35_1144(unknown) = ^CallSideEffect : ~m? +# 35| v35_1145(void) = ^IndirectReadSideEffect[-1] : &:r35_1141, ~m? +# 35| mu35_1146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1141 +# 35| r35_1147(bool) = Constant[0] : +# 35| v35_1148(void) = ConditionalBranch : r35_1147 #-----| False -> Block 83 #-----| True (back edge) -> Block 82 -# 265| Block 83 -# 265| r265_1(glval) = VariableAddress[x82] : -# 265| mu265_2(String) = Uninitialized[x82] : &:r265_1 -# 265| r265_3(glval) = FunctionAddress[String] : -# 265| v265_4(void) = Call[String] : func:r265_3, this:r265_1 -# 265| mu265_5(unknown) = ^CallSideEffect : ~m? -# 265| mu265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r265_1 -# 266| r266_1(glval) = VariableAddress[x82] : -# 266| r266_2(glval) = FunctionAddress[~String] : -# 266| v266_3(void) = Call[~String] : func:r266_2, this:r266_1 -# 266| mu266_4(unknown) = ^CallSideEffect : ~m? -# 266| v266_5(void) = ^IndirectReadSideEffect[-1] : &:r266_1, ~m? -# 266| mu266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r266_1 -# 266| r266_7(bool) = Constant[0] : -# 266| v266_8(void) = ConditionalBranch : r266_7 +# 35| Block 83 +# 35| r35_1149(glval) = VariableAddress[x82] : +# 35| mu35_1150(String) = Uninitialized[x82] : &:r35_1149 +# 35| r35_1151(glval) = FunctionAddress[String] : +# 35| v35_1152(void) = Call[String] : func:r35_1151, this:r35_1149 +# 35| mu35_1153(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1149 +# 35| r35_1155(glval) = VariableAddress[x82] : +# 35| r35_1156(glval) = FunctionAddress[~String] : +# 35| v35_1157(void) = Call[~String] : func:r35_1156, this:r35_1155 +# 35| mu35_1158(unknown) = ^CallSideEffect : ~m? +# 35| v35_1159(void) = ^IndirectReadSideEffect[-1] : &:r35_1155, ~m? +# 35| mu35_1160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1155 +# 35| r35_1161(bool) = Constant[0] : +# 35| v35_1162(void) = ConditionalBranch : r35_1161 #-----| False -> Block 84 #-----| True (back edge) -> Block 83 -# 268| Block 84 -# 268| r268_1(glval) = VariableAddress[x83] : -# 268| mu268_2(String) = Uninitialized[x83] : &:r268_1 -# 268| r268_3(glval) = FunctionAddress[String] : -# 268| v268_4(void) = Call[String] : func:r268_3, this:r268_1 -# 268| mu268_5(unknown) = ^CallSideEffect : ~m? -# 268| mu268_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r268_1 -# 269| r269_1(glval) = VariableAddress[x83] : -# 269| r269_2(glval) = FunctionAddress[~String] : -# 269| v269_3(void) = Call[~String] : func:r269_2, this:r269_1 -# 269| mu269_4(unknown) = ^CallSideEffect : ~m? -# 269| v269_5(void) = ^IndirectReadSideEffect[-1] : &:r269_1, ~m? -# 269| mu269_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r269_1 -# 269| r269_7(bool) = Constant[0] : -# 269| v269_8(void) = ConditionalBranch : r269_7 +# 35| Block 84 +# 35| r35_1163(glval) = VariableAddress[x83] : +# 35| mu35_1164(String) = Uninitialized[x83] : &:r35_1163 +# 35| r35_1165(glval) = FunctionAddress[String] : +# 35| v35_1166(void) = Call[String] : func:r35_1165, this:r35_1163 +# 35| mu35_1167(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1163 +# 35| r35_1169(glval) = VariableAddress[x83] : +# 35| r35_1170(glval) = FunctionAddress[~String] : +# 35| v35_1171(void) = Call[~String] : func:r35_1170, this:r35_1169 +# 35| mu35_1172(unknown) = ^CallSideEffect : ~m? +# 35| v35_1173(void) = ^IndirectReadSideEffect[-1] : &:r35_1169, ~m? +# 35| mu35_1174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1169 +# 35| r35_1175(bool) = Constant[0] : +# 35| v35_1176(void) = ConditionalBranch : r35_1175 #-----| False -> Block 85 #-----| True (back edge) -> Block 84 -# 271| Block 85 -# 271| r271_1(glval) = VariableAddress[x84] : -# 271| mu271_2(String) = Uninitialized[x84] : &:r271_1 -# 271| r271_3(glval) = FunctionAddress[String] : -# 271| v271_4(void) = Call[String] : func:r271_3, this:r271_1 -# 271| mu271_5(unknown) = ^CallSideEffect : ~m? -# 271| mu271_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r271_1 -# 272| r272_1(glval) = VariableAddress[x84] : -# 272| r272_2(glval) = FunctionAddress[~String] : -# 272| v272_3(void) = Call[~String] : func:r272_2, this:r272_1 -# 272| mu272_4(unknown) = ^CallSideEffect : ~m? -# 272| v272_5(void) = ^IndirectReadSideEffect[-1] : &:r272_1, ~m? -# 272| mu272_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r272_1 -# 272| r272_7(bool) = Constant[0] : -# 272| v272_8(void) = ConditionalBranch : r272_7 +# 35| Block 85 +# 35| r35_1177(glval) = VariableAddress[x84] : +# 35| mu35_1178(String) = Uninitialized[x84] : &:r35_1177 +# 35| r35_1179(glval) = FunctionAddress[String] : +# 35| v35_1180(void) = Call[String] : func:r35_1179, this:r35_1177 +# 35| mu35_1181(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1177 +# 35| r35_1183(glval) = VariableAddress[x84] : +# 35| r35_1184(glval) = FunctionAddress[~String] : +# 35| v35_1185(void) = Call[~String] : func:r35_1184, this:r35_1183 +# 35| mu35_1186(unknown) = ^CallSideEffect : ~m? +# 35| v35_1187(void) = ^IndirectReadSideEffect[-1] : &:r35_1183, ~m? +# 35| mu35_1188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1183 +# 35| r35_1189(bool) = Constant[0] : +# 35| v35_1190(void) = ConditionalBranch : r35_1189 #-----| False -> Block 86 #-----| True (back edge) -> Block 85 -# 274| Block 86 -# 274| r274_1(glval) = VariableAddress[x85] : -# 274| mu274_2(String) = Uninitialized[x85] : &:r274_1 -# 274| r274_3(glval) = FunctionAddress[String] : -# 274| v274_4(void) = Call[String] : func:r274_3, this:r274_1 -# 274| mu274_5(unknown) = ^CallSideEffect : ~m? -# 274| mu274_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r274_1 -# 275| r275_1(glval) = VariableAddress[x85] : -# 275| r275_2(glval) = FunctionAddress[~String] : -# 275| v275_3(void) = Call[~String] : func:r275_2, this:r275_1 -# 275| mu275_4(unknown) = ^CallSideEffect : ~m? -# 275| v275_5(void) = ^IndirectReadSideEffect[-1] : &:r275_1, ~m? -# 275| mu275_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r275_1 -# 275| r275_7(bool) = Constant[0] : -# 275| v275_8(void) = ConditionalBranch : r275_7 +# 35| Block 86 +# 35| r35_1191(glval) = VariableAddress[x85] : +# 35| mu35_1192(String) = Uninitialized[x85] : &:r35_1191 +# 35| r35_1193(glval) = FunctionAddress[String] : +# 35| v35_1194(void) = Call[String] : func:r35_1193, this:r35_1191 +# 35| mu35_1195(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1191 +# 35| r35_1197(glval) = VariableAddress[x85] : +# 35| r35_1198(glval) = FunctionAddress[~String] : +# 35| v35_1199(void) = Call[~String] : func:r35_1198, this:r35_1197 +# 35| mu35_1200(unknown) = ^CallSideEffect : ~m? +# 35| v35_1201(void) = ^IndirectReadSideEffect[-1] : &:r35_1197, ~m? +# 35| mu35_1202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1197 +# 35| r35_1203(bool) = Constant[0] : +# 35| v35_1204(void) = ConditionalBranch : r35_1203 #-----| False -> Block 87 #-----| True (back edge) -> Block 86 -# 277| Block 87 -# 277| r277_1(glval) = VariableAddress[x86] : -# 277| mu277_2(String) = Uninitialized[x86] : &:r277_1 -# 277| r277_3(glval) = FunctionAddress[String] : -# 277| v277_4(void) = Call[String] : func:r277_3, this:r277_1 -# 277| mu277_5(unknown) = ^CallSideEffect : ~m? -# 277| mu277_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r277_1 -# 278| r278_1(glval) = VariableAddress[x86] : -# 278| r278_2(glval) = FunctionAddress[~String] : -# 278| v278_3(void) = Call[~String] : func:r278_2, this:r278_1 -# 278| mu278_4(unknown) = ^CallSideEffect : ~m? -# 278| v278_5(void) = ^IndirectReadSideEffect[-1] : &:r278_1, ~m? -# 278| mu278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r278_1 -# 278| r278_7(bool) = Constant[0] : -# 278| v278_8(void) = ConditionalBranch : r278_7 +# 35| Block 87 +# 35| r35_1205(glval) = VariableAddress[x86] : +# 35| mu35_1206(String) = Uninitialized[x86] : &:r35_1205 +# 35| r35_1207(glval) = FunctionAddress[String] : +# 35| v35_1208(void) = Call[String] : func:r35_1207, this:r35_1205 +# 35| mu35_1209(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1205 +# 35| r35_1211(glval) = VariableAddress[x86] : +# 35| r35_1212(glval) = FunctionAddress[~String] : +# 35| v35_1213(void) = Call[~String] : func:r35_1212, this:r35_1211 +# 35| mu35_1214(unknown) = ^CallSideEffect : ~m? +# 35| v35_1215(void) = ^IndirectReadSideEffect[-1] : &:r35_1211, ~m? +# 35| mu35_1216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1211 +# 35| r35_1217(bool) = Constant[0] : +# 35| v35_1218(void) = ConditionalBranch : r35_1217 #-----| False -> Block 88 #-----| True (back edge) -> Block 87 -# 280| Block 88 -# 280| r280_1(glval) = VariableAddress[x87] : -# 280| mu280_2(String) = Uninitialized[x87] : &:r280_1 -# 280| r280_3(glval) = FunctionAddress[String] : -# 280| v280_4(void) = Call[String] : func:r280_3, this:r280_1 -# 280| mu280_5(unknown) = ^CallSideEffect : ~m? -# 280| mu280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r280_1 -# 281| r281_1(glval) = VariableAddress[x87] : -# 281| r281_2(glval) = FunctionAddress[~String] : -# 281| v281_3(void) = Call[~String] : func:r281_2, this:r281_1 -# 281| mu281_4(unknown) = ^CallSideEffect : ~m? -# 281| v281_5(void) = ^IndirectReadSideEffect[-1] : &:r281_1, ~m? -# 281| mu281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r281_1 -# 281| r281_7(bool) = Constant[0] : -# 281| v281_8(void) = ConditionalBranch : r281_7 +# 35| Block 88 +# 35| r35_1219(glval) = VariableAddress[x87] : +# 35| mu35_1220(String) = Uninitialized[x87] : &:r35_1219 +# 35| r35_1221(glval) = FunctionAddress[String] : +# 35| v35_1222(void) = Call[String] : func:r35_1221, this:r35_1219 +# 35| mu35_1223(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1219 +# 35| r35_1225(glval) = VariableAddress[x87] : +# 35| r35_1226(glval) = FunctionAddress[~String] : +# 35| v35_1227(void) = Call[~String] : func:r35_1226, this:r35_1225 +# 35| mu35_1228(unknown) = ^CallSideEffect : ~m? +# 35| v35_1229(void) = ^IndirectReadSideEffect[-1] : &:r35_1225, ~m? +# 35| mu35_1230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1225 +# 35| r35_1231(bool) = Constant[0] : +# 35| v35_1232(void) = ConditionalBranch : r35_1231 #-----| False -> Block 89 #-----| True (back edge) -> Block 88 -# 283| Block 89 -# 283| r283_1(glval) = VariableAddress[x88] : -# 283| mu283_2(String) = Uninitialized[x88] : &:r283_1 -# 283| r283_3(glval) = FunctionAddress[String] : -# 283| v283_4(void) = Call[String] : func:r283_3, this:r283_1 -# 283| mu283_5(unknown) = ^CallSideEffect : ~m? -# 283| mu283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r283_1 -# 284| r284_1(glval) = VariableAddress[x88] : -# 284| r284_2(glval) = FunctionAddress[~String] : -# 284| v284_3(void) = Call[~String] : func:r284_2, this:r284_1 -# 284| mu284_4(unknown) = ^CallSideEffect : ~m? -# 284| v284_5(void) = ^IndirectReadSideEffect[-1] : &:r284_1, ~m? -# 284| mu284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r284_1 -# 284| r284_7(bool) = Constant[0] : -# 284| v284_8(void) = ConditionalBranch : r284_7 +# 35| Block 89 +# 35| r35_1233(glval) = VariableAddress[x88] : +# 35| mu35_1234(String) = Uninitialized[x88] : &:r35_1233 +# 35| r35_1235(glval) = FunctionAddress[String] : +# 35| v35_1236(void) = Call[String] : func:r35_1235, this:r35_1233 +# 35| mu35_1237(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1233 +# 35| r35_1239(glval) = VariableAddress[x88] : +# 35| r35_1240(glval) = FunctionAddress[~String] : +# 35| v35_1241(void) = Call[~String] : func:r35_1240, this:r35_1239 +# 35| mu35_1242(unknown) = ^CallSideEffect : ~m? +# 35| v35_1243(void) = ^IndirectReadSideEffect[-1] : &:r35_1239, ~m? +# 35| mu35_1244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1239 +# 35| r35_1245(bool) = Constant[0] : +# 35| v35_1246(void) = ConditionalBranch : r35_1245 #-----| False -> Block 90 #-----| True (back edge) -> Block 89 -# 286| Block 90 -# 286| r286_1(glval) = VariableAddress[x89] : -# 286| mu286_2(String) = Uninitialized[x89] : &:r286_1 -# 286| r286_3(glval) = FunctionAddress[String] : -# 286| v286_4(void) = Call[String] : func:r286_3, this:r286_1 -# 286| mu286_5(unknown) = ^CallSideEffect : ~m? -# 286| mu286_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r286_1 -# 287| r287_1(glval) = VariableAddress[x89] : -# 287| r287_2(glval) = FunctionAddress[~String] : -# 287| v287_3(void) = Call[~String] : func:r287_2, this:r287_1 -# 287| mu287_4(unknown) = ^CallSideEffect : ~m? -# 287| v287_5(void) = ^IndirectReadSideEffect[-1] : &:r287_1, ~m? -# 287| mu287_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r287_1 -# 287| r287_7(bool) = Constant[0] : -# 287| v287_8(void) = ConditionalBranch : r287_7 +# 35| Block 90 +# 35| r35_1247(glval) = VariableAddress[x89] : +# 35| mu35_1248(String) = Uninitialized[x89] : &:r35_1247 +# 35| r35_1249(glval) = FunctionAddress[String] : +# 35| v35_1250(void) = Call[String] : func:r35_1249, this:r35_1247 +# 35| mu35_1251(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1247 +# 35| r35_1253(glval) = VariableAddress[x89] : +# 35| r35_1254(glval) = FunctionAddress[~String] : +# 35| v35_1255(void) = Call[~String] : func:r35_1254, this:r35_1253 +# 35| mu35_1256(unknown) = ^CallSideEffect : ~m? +# 35| v35_1257(void) = ^IndirectReadSideEffect[-1] : &:r35_1253, ~m? +# 35| mu35_1258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1253 +# 35| r35_1259(bool) = Constant[0] : +# 35| v35_1260(void) = ConditionalBranch : r35_1259 #-----| False -> Block 91 #-----| True (back edge) -> Block 90 -# 289| Block 91 -# 289| r289_1(glval) = VariableAddress[x90] : -# 289| mu289_2(String) = Uninitialized[x90] : &:r289_1 -# 289| r289_3(glval) = FunctionAddress[String] : -# 289| v289_4(void) = Call[String] : func:r289_3, this:r289_1 -# 289| mu289_5(unknown) = ^CallSideEffect : ~m? -# 289| mu289_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r289_1 -# 290| r290_1(glval) = VariableAddress[x90] : -# 290| r290_2(glval) = FunctionAddress[~String] : -# 290| v290_3(void) = Call[~String] : func:r290_2, this:r290_1 -# 290| mu290_4(unknown) = ^CallSideEffect : ~m? -# 290| v290_5(void) = ^IndirectReadSideEffect[-1] : &:r290_1, ~m? -# 290| mu290_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r290_1 -# 290| r290_7(bool) = Constant[0] : -# 290| v290_8(void) = ConditionalBranch : r290_7 +# 35| Block 91 +# 35| r35_1261(glval) = VariableAddress[x90] : +# 35| mu35_1262(String) = Uninitialized[x90] : &:r35_1261 +# 35| r35_1263(glval) = FunctionAddress[String] : +# 35| v35_1264(void) = Call[String] : func:r35_1263, this:r35_1261 +# 35| mu35_1265(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1261 +# 35| r35_1267(glval) = VariableAddress[x90] : +# 35| r35_1268(glval) = FunctionAddress[~String] : +# 35| v35_1269(void) = Call[~String] : func:r35_1268, this:r35_1267 +# 35| mu35_1270(unknown) = ^CallSideEffect : ~m? +# 35| v35_1271(void) = ^IndirectReadSideEffect[-1] : &:r35_1267, ~m? +# 35| mu35_1272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1267 +# 35| r35_1273(bool) = Constant[0] : +# 35| v35_1274(void) = ConditionalBranch : r35_1273 #-----| False -> Block 92 #-----| True (back edge) -> Block 91 -# 292| Block 92 -# 292| r292_1(glval) = VariableAddress[x91] : -# 292| mu292_2(String) = Uninitialized[x91] : &:r292_1 -# 292| r292_3(glval) = FunctionAddress[String] : -# 292| v292_4(void) = Call[String] : func:r292_3, this:r292_1 -# 292| mu292_5(unknown) = ^CallSideEffect : ~m? -# 292| mu292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r292_1 -# 293| r293_1(glval) = VariableAddress[x91] : -# 293| r293_2(glval) = FunctionAddress[~String] : -# 293| v293_3(void) = Call[~String] : func:r293_2, this:r293_1 -# 293| mu293_4(unknown) = ^CallSideEffect : ~m? -# 293| v293_5(void) = ^IndirectReadSideEffect[-1] : &:r293_1, ~m? -# 293| mu293_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r293_1 -# 293| r293_7(bool) = Constant[0] : -# 293| v293_8(void) = ConditionalBranch : r293_7 +# 35| Block 92 +# 35| r35_1275(glval) = VariableAddress[x91] : +# 35| mu35_1276(String) = Uninitialized[x91] : &:r35_1275 +# 35| r35_1277(glval) = FunctionAddress[String] : +# 35| v35_1278(void) = Call[String] : func:r35_1277, this:r35_1275 +# 35| mu35_1279(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1275 +# 35| r35_1281(glval) = VariableAddress[x91] : +# 35| r35_1282(glval) = FunctionAddress[~String] : +# 35| v35_1283(void) = Call[~String] : func:r35_1282, this:r35_1281 +# 35| mu35_1284(unknown) = ^CallSideEffect : ~m? +# 35| v35_1285(void) = ^IndirectReadSideEffect[-1] : &:r35_1281, ~m? +# 35| mu35_1286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1281 +# 35| r35_1287(bool) = Constant[0] : +# 35| v35_1288(void) = ConditionalBranch : r35_1287 #-----| False -> Block 93 #-----| True (back edge) -> Block 92 -# 295| Block 93 -# 295| r295_1(glval) = VariableAddress[x92] : -# 295| mu295_2(String) = Uninitialized[x92] : &:r295_1 -# 295| r295_3(glval) = FunctionAddress[String] : -# 295| v295_4(void) = Call[String] : func:r295_3, this:r295_1 -# 295| mu295_5(unknown) = ^CallSideEffect : ~m? -# 295| mu295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r295_1 -# 296| r296_1(glval) = VariableAddress[x92] : -# 296| r296_2(glval) = FunctionAddress[~String] : -# 296| v296_3(void) = Call[~String] : func:r296_2, this:r296_1 -# 296| mu296_4(unknown) = ^CallSideEffect : ~m? -# 296| v296_5(void) = ^IndirectReadSideEffect[-1] : &:r296_1, ~m? -# 296| mu296_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r296_1 -# 296| r296_7(bool) = Constant[0] : -# 296| v296_8(void) = ConditionalBranch : r296_7 +# 35| Block 93 +# 35| r35_1289(glval) = VariableAddress[x92] : +# 35| mu35_1290(String) = Uninitialized[x92] : &:r35_1289 +# 35| r35_1291(glval) = FunctionAddress[String] : +# 35| v35_1292(void) = Call[String] : func:r35_1291, this:r35_1289 +# 35| mu35_1293(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1289 +# 35| r35_1295(glval) = VariableAddress[x92] : +# 35| r35_1296(glval) = FunctionAddress[~String] : +# 35| v35_1297(void) = Call[~String] : func:r35_1296, this:r35_1295 +# 35| mu35_1298(unknown) = ^CallSideEffect : ~m? +# 35| v35_1299(void) = ^IndirectReadSideEffect[-1] : &:r35_1295, ~m? +# 35| mu35_1300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1295 +# 35| r35_1301(bool) = Constant[0] : +# 35| v35_1302(void) = ConditionalBranch : r35_1301 #-----| False -> Block 94 #-----| True (back edge) -> Block 93 -# 298| Block 94 -# 298| r298_1(glval) = VariableAddress[x93] : -# 298| mu298_2(String) = Uninitialized[x93] : &:r298_1 -# 298| r298_3(glval) = FunctionAddress[String] : -# 298| v298_4(void) = Call[String] : func:r298_3, this:r298_1 -# 298| mu298_5(unknown) = ^CallSideEffect : ~m? -# 298| mu298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r298_1 -# 299| r299_1(glval) = VariableAddress[x93] : -# 299| r299_2(glval) = FunctionAddress[~String] : -# 299| v299_3(void) = Call[~String] : func:r299_2, this:r299_1 -# 299| mu299_4(unknown) = ^CallSideEffect : ~m? -# 299| v299_5(void) = ^IndirectReadSideEffect[-1] : &:r299_1, ~m? -# 299| mu299_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r299_1 -# 299| r299_7(bool) = Constant[0] : -# 299| v299_8(void) = ConditionalBranch : r299_7 +# 35| Block 94 +# 35| r35_1303(glval) = VariableAddress[x93] : +# 35| mu35_1304(String) = Uninitialized[x93] : &:r35_1303 +# 35| r35_1305(glval) = FunctionAddress[String] : +# 35| v35_1306(void) = Call[String] : func:r35_1305, this:r35_1303 +# 35| mu35_1307(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1303 +# 35| r35_1309(glval) = VariableAddress[x93] : +# 35| r35_1310(glval) = FunctionAddress[~String] : +# 35| v35_1311(void) = Call[~String] : func:r35_1310, this:r35_1309 +# 35| mu35_1312(unknown) = ^CallSideEffect : ~m? +# 35| v35_1313(void) = ^IndirectReadSideEffect[-1] : &:r35_1309, ~m? +# 35| mu35_1314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1309 +# 35| r35_1315(bool) = Constant[0] : +# 35| v35_1316(void) = ConditionalBranch : r35_1315 #-----| False -> Block 95 #-----| True (back edge) -> Block 94 -# 301| Block 95 -# 301| r301_1(glval) = VariableAddress[x94] : -# 301| mu301_2(String) = Uninitialized[x94] : &:r301_1 -# 301| r301_3(glval) = FunctionAddress[String] : -# 301| v301_4(void) = Call[String] : func:r301_3, this:r301_1 -# 301| mu301_5(unknown) = ^CallSideEffect : ~m? -# 301| mu301_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r301_1 -# 302| r302_1(glval) = VariableAddress[x94] : -# 302| r302_2(glval) = FunctionAddress[~String] : -# 302| v302_3(void) = Call[~String] : func:r302_2, this:r302_1 -# 302| mu302_4(unknown) = ^CallSideEffect : ~m? -# 302| v302_5(void) = ^IndirectReadSideEffect[-1] : &:r302_1, ~m? -# 302| mu302_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r302_1 -# 302| r302_7(bool) = Constant[0] : -# 302| v302_8(void) = ConditionalBranch : r302_7 +# 35| Block 95 +# 35| r35_1317(glval) = VariableAddress[x94] : +# 35| mu35_1318(String) = Uninitialized[x94] : &:r35_1317 +# 35| r35_1319(glval) = FunctionAddress[String] : +# 35| v35_1320(void) = Call[String] : func:r35_1319, this:r35_1317 +# 35| mu35_1321(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1317 +# 35| r35_1323(glval) = VariableAddress[x94] : +# 35| r35_1324(glval) = FunctionAddress[~String] : +# 35| v35_1325(void) = Call[~String] : func:r35_1324, this:r35_1323 +# 35| mu35_1326(unknown) = ^CallSideEffect : ~m? +# 35| v35_1327(void) = ^IndirectReadSideEffect[-1] : &:r35_1323, ~m? +# 35| mu35_1328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1323 +# 35| r35_1329(bool) = Constant[0] : +# 35| v35_1330(void) = ConditionalBranch : r35_1329 #-----| False -> Block 96 #-----| True (back edge) -> Block 95 -# 304| Block 96 -# 304| r304_1(glval) = VariableAddress[x95] : -# 304| mu304_2(String) = Uninitialized[x95] : &:r304_1 -# 304| r304_3(glval) = FunctionAddress[String] : -# 304| v304_4(void) = Call[String] : func:r304_3, this:r304_1 -# 304| mu304_5(unknown) = ^CallSideEffect : ~m? -# 304| mu304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r304_1 -# 305| r305_1(glval) = VariableAddress[x95] : -# 305| r305_2(glval) = FunctionAddress[~String] : -# 305| v305_3(void) = Call[~String] : func:r305_2, this:r305_1 -# 305| mu305_4(unknown) = ^CallSideEffect : ~m? -# 305| v305_5(void) = ^IndirectReadSideEffect[-1] : &:r305_1, ~m? -# 305| mu305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r305_1 -# 305| r305_7(bool) = Constant[0] : -# 305| v305_8(void) = ConditionalBranch : r305_7 +# 35| Block 96 +# 35| r35_1331(glval) = VariableAddress[x95] : +# 35| mu35_1332(String) = Uninitialized[x95] : &:r35_1331 +# 35| r35_1333(glval) = FunctionAddress[String] : +# 35| v35_1334(void) = Call[String] : func:r35_1333, this:r35_1331 +# 35| mu35_1335(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1331 +# 35| r35_1337(glval) = VariableAddress[x95] : +# 35| r35_1338(glval) = FunctionAddress[~String] : +# 35| v35_1339(void) = Call[~String] : func:r35_1338, this:r35_1337 +# 35| mu35_1340(unknown) = ^CallSideEffect : ~m? +# 35| v35_1341(void) = ^IndirectReadSideEffect[-1] : &:r35_1337, ~m? +# 35| mu35_1342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1337 +# 35| r35_1343(bool) = Constant[0] : +# 35| v35_1344(void) = ConditionalBranch : r35_1343 #-----| False -> Block 97 #-----| True (back edge) -> Block 96 -# 307| Block 97 -# 307| r307_1(glval) = VariableAddress[x96] : -# 307| mu307_2(String) = Uninitialized[x96] : &:r307_1 -# 307| r307_3(glval) = FunctionAddress[String] : -# 307| v307_4(void) = Call[String] : func:r307_3, this:r307_1 -# 307| mu307_5(unknown) = ^CallSideEffect : ~m? -# 307| mu307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r307_1 -# 308| r308_1(glval) = VariableAddress[x96] : -# 308| r308_2(glval) = FunctionAddress[~String] : -# 308| v308_3(void) = Call[~String] : func:r308_2, this:r308_1 -# 308| mu308_4(unknown) = ^CallSideEffect : ~m? -# 308| v308_5(void) = ^IndirectReadSideEffect[-1] : &:r308_1, ~m? -# 308| mu308_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r308_1 -# 308| r308_7(bool) = Constant[0] : -# 308| v308_8(void) = ConditionalBranch : r308_7 +# 35| Block 97 +# 35| r35_1345(glval) = VariableAddress[x96] : +# 35| mu35_1346(String) = Uninitialized[x96] : &:r35_1345 +# 35| r35_1347(glval) = FunctionAddress[String] : +# 35| v35_1348(void) = Call[String] : func:r35_1347, this:r35_1345 +# 35| mu35_1349(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1345 +# 35| r35_1351(glval) = VariableAddress[x96] : +# 35| r35_1352(glval) = FunctionAddress[~String] : +# 35| v35_1353(void) = Call[~String] : func:r35_1352, this:r35_1351 +# 35| mu35_1354(unknown) = ^CallSideEffect : ~m? +# 35| v35_1355(void) = ^IndirectReadSideEffect[-1] : &:r35_1351, ~m? +# 35| mu35_1356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1351 +# 35| r35_1357(bool) = Constant[0] : +# 35| v35_1358(void) = ConditionalBranch : r35_1357 #-----| False -> Block 98 #-----| True (back edge) -> Block 97 -# 310| Block 98 -# 310| r310_1(glval) = VariableAddress[x97] : -# 310| mu310_2(String) = Uninitialized[x97] : &:r310_1 -# 310| r310_3(glval) = FunctionAddress[String] : -# 310| v310_4(void) = Call[String] : func:r310_3, this:r310_1 -# 310| mu310_5(unknown) = ^CallSideEffect : ~m? -# 310| mu310_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r310_1 -# 311| r311_1(glval) = VariableAddress[x97] : -# 311| r311_2(glval) = FunctionAddress[~String] : -# 311| v311_3(void) = Call[~String] : func:r311_2, this:r311_1 -# 311| mu311_4(unknown) = ^CallSideEffect : ~m? -# 311| v311_5(void) = ^IndirectReadSideEffect[-1] : &:r311_1, ~m? -# 311| mu311_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r311_1 -# 311| r311_7(bool) = Constant[0] : -# 311| v311_8(void) = ConditionalBranch : r311_7 +# 35| Block 98 +# 35| r35_1359(glval) = VariableAddress[x97] : +# 35| mu35_1360(String) = Uninitialized[x97] : &:r35_1359 +# 35| r35_1361(glval) = FunctionAddress[String] : +# 35| v35_1362(void) = Call[String] : func:r35_1361, this:r35_1359 +# 35| mu35_1363(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1359 +# 35| r35_1365(glval) = VariableAddress[x97] : +# 35| r35_1366(glval) = FunctionAddress[~String] : +# 35| v35_1367(void) = Call[~String] : func:r35_1366, this:r35_1365 +# 35| mu35_1368(unknown) = ^CallSideEffect : ~m? +# 35| v35_1369(void) = ^IndirectReadSideEffect[-1] : &:r35_1365, ~m? +# 35| mu35_1370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1365 +# 35| r35_1371(bool) = Constant[0] : +# 35| v35_1372(void) = ConditionalBranch : r35_1371 #-----| False -> Block 99 #-----| True (back edge) -> Block 98 -# 313| Block 99 -# 313| r313_1(glval) = VariableAddress[x98] : -# 313| mu313_2(String) = Uninitialized[x98] : &:r313_1 -# 313| r313_3(glval) = FunctionAddress[String] : -# 313| v313_4(void) = Call[String] : func:r313_3, this:r313_1 -# 313| mu313_5(unknown) = ^CallSideEffect : ~m? -# 313| mu313_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r313_1 -# 314| r314_1(glval) = VariableAddress[x98] : -# 314| r314_2(glval) = FunctionAddress[~String] : -# 314| v314_3(void) = Call[~String] : func:r314_2, this:r314_1 -# 314| mu314_4(unknown) = ^CallSideEffect : ~m? -# 314| v314_5(void) = ^IndirectReadSideEffect[-1] : &:r314_1, ~m? -# 314| mu314_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r314_1 -# 314| r314_7(bool) = Constant[0] : -# 314| v314_8(void) = ConditionalBranch : r314_7 +# 35| Block 99 +# 35| r35_1373(glval) = VariableAddress[x98] : +# 35| mu35_1374(String) = Uninitialized[x98] : &:r35_1373 +# 35| r35_1375(glval) = FunctionAddress[String] : +# 35| v35_1376(void) = Call[String] : func:r35_1375, this:r35_1373 +# 35| mu35_1377(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1373 +# 35| r35_1379(glval) = VariableAddress[x98] : +# 35| r35_1380(glval) = FunctionAddress[~String] : +# 35| v35_1381(void) = Call[~String] : func:r35_1380, this:r35_1379 +# 35| mu35_1382(unknown) = ^CallSideEffect : ~m? +# 35| v35_1383(void) = ^IndirectReadSideEffect[-1] : &:r35_1379, ~m? +# 35| mu35_1384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1379 +# 35| r35_1385(bool) = Constant[0] : +# 35| v35_1386(void) = ConditionalBranch : r35_1385 #-----| False -> Block 100 #-----| True (back edge) -> Block 99 -# 316| Block 100 -# 316| r316_1(glval) = VariableAddress[x99] : -# 316| mu316_2(String) = Uninitialized[x99] : &:r316_1 -# 316| r316_3(glval) = FunctionAddress[String] : -# 316| v316_4(void) = Call[String] : func:r316_3, this:r316_1 -# 316| mu316_5(unknown) = ^CallSideEffect : ~m? -# 316| mu316_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r316_1 -# 317| r317_1(glval) = VariableAddress[x99] : -# 317| r317_2(glval) = FunctionAddress[~String] : -# 317| v317_3(void) = Call[~String] : func:r317_2, this:r317_1 -# 317| mu317_4(unknown) = ^CallSideEffect : ~m? -# 317| v317_5(void) = ^IndirectReadSideEffect[-1] : &:r317_1, ~m? -# 317| mu317_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r317_1 -# 317| r317_7(bool) = Constant[0] : -# 317| v317_8(void) = ConditionalBranch : r317_7 +# 35| Block 100 +# 35| r35_1387(glval) = VariableAddress[x99] : +# 35| mu35_1388(String) = Uninitialized[x99] : &:r35_1387 +# 35| r35_1389(glval) = FunctionAddress[String] : +# 35| v35_1390(void) = Call[String] : func:r35_1389, this:r35_1387 +# 35| mu35_1391(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1387 +# 35| r35_1393(glval) = VariableAddress[x99] : +# 35| r35_1394(glval) = FunctionAddress[~String] : +# 35| v35_1395(void) = Call[~String] : func:r35_1394, this:r35_1393 +# 35| mu35_1396(unknown) = ^CallSideEffect : ~m? +# 35| v35_1397(void) = ^IndirectReadSideEffect[-1] : &:r35_1393, ~m? +# 35| mu35_1398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1393 +# 35| r35_1399(bool) = Constant[0] : +# 35| v35_1400(void) = ConditionalBranch : r35_1399 #-----| False -> Block 101 #-----| True (back edge) -> Block 100 -# 319| Block 101 -# 319| r319_1(glval) = VariableAddress[x100] : -# 319| mu319_2(String) = Uninitialized[x100] : &:r319_1 -# 319| r319_3(glval) = FunctionAddress[String] : -# 319| v319_4(void) = Call[String] : func:r319_3, this:r319_1 -# 319| mu319_5(unknown) = ^CallSideEffect : ~m? -# 319| mu319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r319_1 -# 320| r320_1(glval) = VariableAddress[x100] : -# 320| r320_2(glval) = FunctionAddress[~String] : -# 320| v320_3(void) = Call[~String] : func:r320_2, this:r320_1 -# 320| mu320_4(unknown) = ^CallSideEffect : ~m? -# 320| v320_5(void) = ^IndirectReadSideEffect[-1] : &:r320_1, ~m? -# 320| mu320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r320_1 -# 320| r320_7(bool) = Constant[0] : -# 320| v320_8(void) = ConditionalBranch : r320_7 +# 35| Block 101 +# 35| r35_1401(glval) = VariableAddress[x100] : +# 35| mu35_1402(String) = Uninitialized[x100] : &:r35_1401 +# 35| r35_1403(glval) = FunctionAddress[String] : +# 35| v35_1404(void) = Call[String] : func:r35_1403, this:r35_1401 +# 35| mu35_1405(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1401 +# 35| r35_1407(glval) = VariableAddress[x100] : +# 35| r35_1408(glval) = FunctionAddress[~String] : +# 35| v35_1409(void) = Call[~String] : func:r35_1408, this:r35_1407 +# 35| mu35_1410(unknown) = ^CallSideEffect : ~m? +# 35| v35_1411(void) = ^IndirectReadSideEffect[-1] : &:r35_1407, ~m? +# 35| mu35_1412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1407 +# 35| r35_1413(bool) = Constant[0] : +# 35| v35_1414(void) = ConditionalBranch : r35_1413 #-----| False -> Block 102 #-----| True (back edge) -> Block 101 -# 322| Block 102 -# 322| r322_1(glval) = VariableAddress[x101] : -# 322| mu322_2(String) = Uninitialized[x101] : &:r322_1 -# 322| r322_3(glval) = FunctionAddress[String] : -# 322| v322_4(void) = Call[String] : func:r322_3, this:r322_1 -# 322| mu322_5(unknown) = ^CallSideEffect : ~m? -# 322| mu322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r322_1 -# 323| r323_1(glval) = VariableAddress[x101] : -# 323| r323_2(glval) = FunctionAddress[~String] : -# 323| v323_3(void) = Call[~String] : func:r323_2, this:r323_1 -# 323| mu323_4(unknown) = ^CallSideEffect : ~m? -# 323| v323_5(void) = ^IndirectReadSideEffect[-1] : &:r323_1, ~m? -# 323| mu323_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r323_1 -# 323| r323_7(bool) = Constant[0] : -# 323| v323_8(void) = ConditionalBranch : r323_7 +# 35| Block 102 +# 35| r35_1415(glval) = VariableAddress[x101] : +# 35| mu35_1416(String) = Uninitialized[x101] : &:r35_1415 +# 35| r35_1417(glval) = FunctionAddress[String] : +# 35| v35_1418(void) = Call[String] : func:r35_1417, this:r35_1415 +# 35| mu35_1419(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1415 +# 35| r35_1421(glval) = VariableAddress[x101] : +# 35| r35_1422(glval) = FunctionAddress[~String] : +# 35| v35_1423(void) = Call[~String] : func:r35_1422, this:r35_1421 +# 35| mu35_1424(unknown) = ^CallSideEffect : ~m? +# 35| v35_1425(void) = ^IndirectReadSideEffect[-1] : &:r35_1421, ~m? +# 35| mu35_1426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1421 +# 35| r35_1427(bool) = Constant[0] : +# 35| v35_1428(void) = ConditionalBranch : r35_1427 #-----| False -> Block 103 #-----| True (back edge) -> Block 102 -# 325| Block 103 -# 325| r325_1(glval) = VariableAddress[x102] : -# 325| mu325_2(String) = Uninitialized[x102] : &:r325_1 -# 325| r325_3(glval) = FunctionAddress[String] : -# 325| v325_4(void) = Call[String] : func:r325_3, this:r325_1 -# 325| mu325_5(unknown) = ^CallSideEffect : ~m? -# 325| mu325_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r325_1 -# 326| r326_1(glval) = VariableAddress[x102] : -# 326| r326_2(glval) = FunctionAddress[~String] : -# 326| v326_3(void) = Call[~String] : func:r326_2, this:r326_1 -# 326| mu326_4(unknown) = ^CallSideEffect : ~m? -# 326| v326_5(void) = ^IndirectReadSideEffect[-1] : &:r326_1, ~m? -# 326| mu326_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r326_1 -# 326| r326_7(bool) = Constant[0] : -# 326| v326_8(void) = ConditionalBranch : r326_7 +# 35| Block 103 +# 35| r35_1429(glval) = VariableAddress[x102] : +# 35| mu35_1430(String) = Uninitialized[x102] : &:r35_1429 +# 35| r35_1431(glval) = FunctionAddress[String] : +# 35| v35_1432(void) = Call[String] : func:r35_1431, this:r35_1429 +# 35| mu35_1433(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1429 +# 35| r35_1435(glval) = VariableAddress[x102] : +# 35| r35_1436(glval) = FunctionAddress[~String] : +# 35| v35_1437(void) = Call[~String] : func:r35_1436, this:r35_1435 +# 35| mu35_1438(unknown) = ^CallSideEffect : ~m? +# 35| v35_1439(void) = ^IndirectReadSideEffect[-1] : &:r35_1435, ~m? +# 35| mu35_1440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1435 +# 35| r35_1441(bool) = Constant[0] : +# 35| v35_1442(void) = ConditionalBranch : r35_1441 #-----| False -> Block 104 #-----| True (back edge) -> Block 103 -# 328| Block 104 -# 328| r328_1(glval) = VariableAddress[x103] : -# 328| mu328_2(String) = Uninitialized[x103] : &:r328_1 -# 328| r328_3(glval) = FunctionAddress[String] : -# 328| v328_4(void) = Call[String] : func:r328_3, this:r328_1 -# 328| mu328_5(unknown) = ^CallSideEffect : ~m? -# 328| mu328_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r328_1 -# 329| r329_1(glval) = VariableAddress[x103] : -# 329| r329_2(glval) = FunctionAddress[~String] : -# 329| v329_3(void) = Call[~String] : func:r329_2, this:r329_1 -# 329| mu329_4(unknown) = ^CallSideEffect : ~m? -# 329| v329_5(void) = ^IndirectReadSideEffect[-1] : &:r329_1, ~m? -# 329| mu329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r329_1 -# 329| r329_7(bool) = Constant[0] : -# 329| v329_8(void) = ConditionalBranch : r329_7 +# 35| Block 104 +# 35| r35_1443(glval) = VariableAddress[x103] : +# 35| mu35_1444(String) = Uninitialized[x103] : &:r35_1443 +# 35| r35_1445(glval) = FunctionAddress[String] : +# 35| v35_1446(void) = Call[String] : func:r35_1445, this:r35_1443 +# 35| mu35_1447(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1443 +# 35| r35_1449(glval) = VariableAddress[x103] : +# 35| r35_1450(glval) = FunctionAddress[~String] : +# 35| v35_1451(void) = Call[~String] : func:r35_1450, this:r35_1449 +# 35| mu35_1452(unknown) = ^CallSideEffect : ~m? +# 35| v35_1453(void) = ^IndirectReadSideEffect[-1] : &:r35_1449, ~m? +# 35| mu35_1454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1449 +# 35| r35_1455(bool) = Constant[0] : +# 35| v35_1456(void) = ConditionalBranch : r35_1455 #-----| False -> Block 105 #-----| True (back edge) -> Block 104 -# 331| Block 105 -# 331| r331_1(glval) = VariableAddress[x104] : -# 331| mu331_2(String) = Uninitialized[x104] : &:r331_1 -# 331| r331_3(glval) = FunctionAddress[String] : -# 331| v331_4(void) = Call[String] : func:r331_3, this:r331_1 -# 331| mu331_5(unknown) = ^CallSideEffect : ~m? -# 331| mu331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r331_1 -# 332| r332_1(glval) = VariableAddress[x104] : -# 332| r332_2(glval) = FunctionAddress[~String] : -# 332| v332_3(void) = Call[~String] : func:r332_2, this:r332_1 -# 332| mu332_4(unknown) = ^CallSideEffect : ~m? -# 332| v332_5(void) = ^IndirectReadSideEffect[-1] : &:r332_1, ~m? -# 332| mu332_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r332_1 -# 332| r332_7(bool) = Constant[0] : -# 332| v332_8(void) = ConditionalBranch : r332_7 +# 35| Block 105 +# 35| r35_1457(glval) = VariableAddress[x104] : +# 35| mu35_1458(String) = Uninitialized[x104] : &:r35_1457 +# 35| r35_1459(glval) = FunctionAddress[String] : +# 35| v35_1460(void) = Call[String] : func:r35_1459, this:r35_1457 +# 35| mu35_1461(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1457 +# 35| r35_1463(glval) = VariableAddress[x104] : +# 35| r35_1464(glval) = FunctionAddress[~String] : +# 35| v35_1465(void) = Call[~String] : func:r35_1464, this:r35_1463 +# 35| mu35_1466(unknown) = ^CallSideEffect : ~m? +# 35| v35_1467(void) = ^IndirectReadSideEffect[-1] : &:r35_1463, ~m? +# 35| mu35_1468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1463 +# 35| r35_1469(bool) = Constant[0] : +# 35| v35_1470(void) = ConditionalBranch : r35_1469 #-----| False -> Block 106 #-----| True (back edge) -> Block 105 -# 334| Block 106 -# 334| r334_1(glval) = VariableAddress[x105] : -# 334| mu334_2(String) = Uninitialized[x105] : &:r334_1 -# 334| r334_3(glval) = FunctionAddress[String] : -# 334| v334_4(void) = Call[String] : func:r334_3, this:r334_1 -# 334| mu334_5(unknown) = ^CallSideEffect : ~m? -# 334| mu334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r334_1 -# 335| r335_1(glval) = VariableAddress[x105] : -# 335| r335_2(glval) = FunctionAddress[~String] : -# 335| v335_3(void) = Call[~String] : func:r335_2, this:r335_1 -# 335| mu335_4(unknown) = ^CallSideEffect : ~m? -# 335| v335_5(void) = ^IndirectReadSideEffect[-1] : &:r335_1, ~m? -# 335| mu335_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r335_1 -# 335| r335_7(bool) = Constant[0] : -# 335| v335_8(void) = ConditionalBranch : r335_7 +# 35| Block 106 +# 35| r35_1471(glval) = VariableAddress[x105] : +# 35| mu35_1472(String) = Uninitialized[x105] : &:r35_1471 +# 35| r35_1473(glval) = FunctionAddress[String] : +# 35| v35_1474(void) = Call[String] : func:r35_1473, this:r35_1471 +# 35| mu35_1475(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1471 +# 35| r35_1477(glval) = VariableAddress[x105] : +# 35| r35_1478(glval) = FunctionAddress[~String] : +# 35| v35_1479(void) = Call[~String] : func:r35_1478, this:r35_1477 +# 35| mu35_1480(unknown) = ^CallSideEffect : ~m? +# 35| v35_1481(void) = ^IndirectReadSideEffect[-1] : &:r35_1477, ~m? +# 35| mu35_1482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1477 +# 35| r35_1483(bool) = Constant[0] : +# 35| v35_1484(void) = ConditionalBranch : r35_1483 #-----| False -> Block 107 #-----| True (back edge) -> Block 106 -# 337| Block 107 -# 337| r337_1(glval) = VariableAddress[x106] : -# 337| mu337_2(String) = Uninitialized[x106] : &:r337_1 -# 337| r337_3(glval) = FunctionAddress[String] : -# 337| v337_4(void) = Call[String] : func:r337_3, this:r337_1 -# 337| mu337_5(unknown) = ^CallSideEffect : ~m? -# 337| mu337_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r337_1 -# 338| r338_1(glval) = VariableAddress[x106] : -# 338| r338_2(glval) = FunctionAddress[~String] : -# 338| v338_3(void) = Call[~String] : func:r338_2, this:r338_1 -# 338| mu338_4(unknown) = ^CallSideEffect : ~m? -# 338| v338_5(void) = ^IndirectReadSideEffect[-1] : &:r338_1, ~m? -# 338| mu338_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r338_1 -# 338| r338_7(bool) = Constant[0] : -# 338| v338_8(void) = ConditionalBranch : r338_7 +# 35| Block 107 +# 35| r35_1485(glval) = VariableAddress[x106] : +# 35| mu35_1486(String) = Uninitialized[x106] : &:r35_1485 +# 35| r35_1487(glval) = FunctionAddress[String] : +# 35| v35_1488(void) = Call[String] : func:r35_1487, this:r35_1485 +# 35| mu35_1489(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1485 +# 35| r35_1491(glval) = VariableAddress[x106] : +# 35| r35_1492(glval) = FunctionAddress[~String] : +# 35| v35_1493(void) = Call[~String] : func:r35_1492, this:r35_1491 +# 35| mu35_1494(unknown) = ^CallSideEffect : ~m? +# 35| v35_1495(void) = ^IndirectReadSideEffect[-1] : &:r35_1491, ~m? +# 35| mu35_1496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1491 +# 35| r35_1497(bool) = Constant[0] : +# 35| v35_1498(void) = ConditionalBranch : r35_1497 #-----| False -> Block 108 #-----| True (back edge) -> Block 107 -# 340| Block 108 -# 340| r340_1(glval) = VariableAddress[x107] : -# 340| mu340_2(String) = Uninitialized[x107] : &:r340_1 -# 340| r340_3(glval) = FunctionAddress[String] : -# 340| v340_4(void) = Call[String] : func:r340_3, this:r340_1 -# 340| mu340_5(unknown) = ^CallSideEffect : ~m? -# 340| mu340_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r340_1 -# 341| r341_1(glval) = VariableAddress[x107] : -# 341| r341_2(glval) = FunctionAddress[~String] : -# 341| v341_3(void) = Call[~String] : func:r341_2, this:r341_1 -# 341| mu341_4(unknown) = ^CallSideEffect : ~m? -# 341| v341_5(void) = ^IndirectReadSideEffect[-1] : &:r341_1, ~m? -# 341| mu341_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r341_1 -# 341| r341_7(bool) = Constant[0] : -# 341| v341_8(void) = ConditionalBranch : r341_7 +# 35| Block 108 +# 35| r35_1499(glval) = VariableAddress[x107] : +# 35| mu35_1500(String) = Uninitialized[x107] : &:r35_1499 +# 35| r35_1501(glval) = FunctionAddress[String] : +# 35| v35_1502(void) = Call[String] : func:r35_1501, this:r35_1499 +# 35| mu35_1503(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1499 +# 35| r35_1505(glval) = VariableAddress[x107] : +# 35| r35_1506(glval) = FunctionAddress[~String] : +# 35| v35_1507(void) = Call[~String] : func:r35_1506, this:r35_1505 +# 35| mu35_1508(unknown) = ^CallSideEffect : ~m? +# 35| v35_1509(void) = ^IndirectReadSideEffect[-1] : &:r35_1505, ~m? +# 35| mu35_1510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1505 +# 35| r35_1511(bool) = Constant[0] : +# 35| v35_1512(void) = ConditionalBranch : r35_1511 #-----| False -> Block 109 #-----| True (back edge) -> Block 108 -# 343| Block 109 -# 343| r343_1(glval) = VariableAddress[x108] : -# 343| mu343_2(String) = Uninitialized[x108] : &:r343_1 -# 343| r343_3(glval) = FunctionAddress[String] : -# 343| v343_4(void) = Call[String] : func:r343_3, this:r343_1 -# 343| mu343_5(unknown) = ^CallSideEffect : ~m? -# 343| mu343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r343_1 -# 344| r344_1(glval) = VariableAddress[x108] : -# 344| r344_2(glval) = FunctionAddress[~String] : -# 344| v344_3(void) = Call[~String] : func:r344_2, this:r344_1 -# 344| mu344_4(unknown) = ^CallSideEffect : ~m? -# 344| v344_5(void) = ^IndirectReadSideEffect[-1] : &:r344_1, ~m? -# 344| mu344_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r344_1 -# 344| r344_7(bool) = Constant[0] : -# 344| v344_8(void) = ConditionalBranch : r344_7 +# 35| Block 109 +# 35| r35_1513(glval) = VariableAddress[x108] : +# 35| mu35_1514(String) = Uninitialized[x108] : &:r35_1513 +# 35| r35_1515(glval) = FunctionAddress[String] : +# 35| v35_1516(void) = Call[String] : func:r35_1515, this:r35_1513 +# 35| mu35_1517(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1513 +# 35| r35_1519(glval) = VariableAddress[x108] : +# 35| r35_1520(glval) = FunctionAddress[~String] : +# 35| v35_1521(void) = Call[~String] : func:r35_1520, this:r35_1519 +# 35| mu35_1522(unknown) = ^CallSideEffect : ~m? +# 35| v35_1523(void) = ^IndirectReadSideEffect[-1] : &:r35_1519, ~m? +# 35| mu35_1524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1519 +# 35| r35_1525(bool) = Constant[0] : +# 35| v35_1526(void) = ConditionalBranch : r35_1525 #-----| False -> Block 110 #-----| True (back edge) -> Block 109 -# 346| Block 110 -# 346| r346_1(glval) = VariableAddress[x109] : -# 346| mu346_2(String) = Uninitialized[x109] : &:r346_1 -# 346| r346_3(glval) = FunctionAddress[String] : -# 346| v346_4(void) = Call[String] : func:r346_3, this:r346_1 -# 346| mu346_5(unknown) = ^CallSideEffect : ~m? -# 346| mu346_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r346_1 -# 347| r347_1(glval) = VariableAddress[x109] : -# 347| r347_2(glval) = FunctionAddress[~String] : -# 347| v347_3(void) = Call[~String] : func:r347_2, this:r347_1 -# 347| mu347_4(unknown) = ^CallSideEffect : ~m? -# 347| v347_5(void) = ^IndirectReadSideEffect[-1] : &:r347_1, ~m? -# 347| mu347_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r347_1 -# 347| r347_7(bool) = Constant[0] : -# 347| v347_8(void) = ConditionalBranch : r347_7 +# 35| Block 110 +# 35| r35_1527(glval) = VariableAddress[x109] : +# 35| mu35_1528(String) = Uninitialized[x109] : &:r35_1527 +# 35| r35_1529(glval) = FunctionAddress[String] : +# 35| v35_1530(void) = Call[String] : func:r35_1529, this:r35_1527 +# 35| mu35_1531(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1527 +# 35| r35_1533(glval) = VariableAddress[x109] : +# 35| r35_1534(glval) = FunctionAddress[~String] : +# 35| v35_1535(void) = Call[~String] : func:r35_1534, this:r35_1533 +# 35| mu35_1536(unknown) = ^CallSideEffect : ~m? +# 35| v35_1537(void) = ^IndirectReadSideEffect[-1] : &:r35_1533, ~m? +# 35| mu35_1538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1533 +# 35| r35_1539(bool) = Constant[0] : +# 35| v35_1540(void) = ConditionalBranch : r35_1539 #-----| False -> Block 111 #-----| True (back edge) -> Block 110 -# 349| Block 111 -# 349| r349_1(glval) = VariableAddress[x110] : -# 349| mu349_2(String) = Uninitialized[x110] : &:r349_1 -# 349| r349_3(glval) = FunctionAddress[String] : -# 349| v349_4(void) = Call[String] : func:r349_3, this:r349_1 -# 349| mu349_5(unknown) = ^CallSideEffect : ~m? -# 349| mu349_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r349_1 -# 350| r350_1(glval) = VariableAddress[x110] : -# 350| r350_2(glval) = FunctionAddress[~String] : -# 350| v350_3(void) = Call[~String] : func:r350_2, this:r350_1 -# 350| mu350_4(unknown) = ^CallSideEffect : ~m? -# 350| v350_5(void) = ^IndirectReadSideEffect[-1] : &:r350_1, ~m? -# 350| mu350_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r350_1 -# 350| r350_7(bool) = Constant[0] : -# 350| v350_8(void) = ConditionalBranch : r350_7 +# 35| Block 111 +# 35| r35_1541(glval) = VariableAddress[x110] : +# 35| mu35_1542(String) = Uninitialized[x110] : &:r35_1541 +# 35| r35_1543(glval) = FunctionAddress[String] : +# 35| v35_1544(void) = Call[String] : func:r35_1543, this:r35_1541 +# 35| mu35_1545(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1541 +# 35| r35_1547(glval) = VariableAddress[x110] : +# 35| r35_1548(glval) = FunctionAddress[~String] : +# 35| v35_1549(void) = Call[~String] : func:r35_1548, this:r35_1547 +# 35| mu35_1550(unknown) = ^CallSideEffect : ~m? +# 35| v35_1551(void) = ^IndirectReadSideEffect[-1] : &:r35_1547, ~m? +# 35| mu35_1552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1547 +# 35| r35_1553(bool) = Constant[0] : +# 35| v35_1554(void) = ConditionalBranch : r35_1553 #-----| False -> Block 112 #-----| True (back edge) -> Block 111 -# 352| Block 112 -# 352| r352_1(glval) = VariableAddress[x111] : -# 352| mu352_2(String) = Uninitialized[x111] : &:r352_1 -# 352| r352_3(glval) = FunctionAddress[String] : -# 352| v352_4(void) = Call[String] : func:r352_3, this:r352_1 -# 352| mu352_5(unknown) = ^CallSideEffect : ~m? -# 352| mu352_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r352_1 -# 353| r353_1(glval) = VariableAddress[x111] : -# 353| r353_2(glval) = FunctionAddress[~String] : -# 353| v353_3(void) = Call[~String] : func:r353_2, this:r353_1 -# 353| mu353_4(unknown) = ^CallSideEffect : ~m? -# 353| v353_5(void) = ^IndirectReadSideEffect[-1] : &:r353_1, ~m? -# 353| mu353_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r353_1 -# 353| r353_7(bool) = Constant[0] : -# 353| v353_8(void) = ConditionalBranch : r353_7 +# 35| Block 112 +# 35| r35_1555(glval) = VariableAddress[x111] : +# 35| mu35_1556(String) = Uninitialized[x111] : &:r35_1555 +# 35| r35_1557(glval) = FunctionAddress[String] : +# 35| v35_1558(void) = Call[String] : func:r35_1557, this:r35_1555 +# 35| mu35_1559(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1555 +# 35| r35_1561(glval) = VariableAddress[x111] : +# 35| r35_1562(glval) = FunctionAddress[~String] : +# 35| v35_1563(void) = Call[~String] : func:r35_1562, this:r35_1561 +# 35| mu35_1564(unknown) = ^CallSideEffect : ~m? +# 35| v35_1565(void) = ^IndirectReadSideEffect[-1] : &:r35_1561, ~m? +# 35| mu35_1566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1561 +# 35| r35_1567(bool) = Constant[0] : +# 35| v35_1568(void) = ConditionalBranch : r35_1567 #-----| False -> Block 113 #-----| True (back edge) -> Block 112 -# 355| Block 113 -# 355| r355_1(glval) = VariableAddress[x112] : -# 355| mu355_2(String) = Uninitialized[x112] : &:r355_1 -# 355| r355_3(glval) = FunctionAddress[String] : -# 355| v355_4(void) = Call[String] : func:r355_3, this:r355_1 -# 355| mu355_5(unknown) = ^CallSideEffect : ~m? -# 355| mu355_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r355_1 -# 356| r356_1(glval) = VariableAddress[x112] : -# 356| r356_2(glval) = FunctionAddress[~String] : -# 356| v356_3(void) = Call[~String] : func:r356_2, this:r356_1 -# 356| mu356_4(unknown) = ^CallSideEffect : ~m? -# 356| v356_5(void) = ^IndirectReadSideEffect[-1] : &:r356_1, ~m? -# 356| mu356_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r356_1 -# 356| r356_7(bool) = Constant[0] : -# 356| v356_8(void) = ConditionalBranch : r356_7 +# 35| Block 113 +# 35| r35_1569(glval) = VariableAddress[x112] : +# 35| mu35_1570(String) = Uninitialized[x112] : &:r35_1569 +# 35| r35_1571(glval) = FunctionAddress[String] : +# 35| v35_1572(void) = Call[String] : func:r35_1571, this:r35_1569 +# 35| mu35_1573(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1569 +# 35| r35_1575(glval) = VariableAddress[x112] : +# 35| r35_1576(glval) = FunctionAddress[~String] : +# 35| v35_1577(void) = Call[~String] : func:r35_1576, this:r35_1575 +# 35| mu35_1578(unknown) = ^CallSideEffect : ~m? +# 35| v35_1579(void) = ^IndirectReadSideEffect[-1] : &:r35_1575, ~m? +# 35| mu35_1580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1575 +# 35| r35_1581(bool) = Constant[0] : +# 35| v35_1582(void) = ConditionalBranch : r35_1581 #-----| False -> Block 114 #-----| True (back edge) -> Block 113 -# 358| Block 114 -# 358| r358_1(glval) = VariableAddress[x113] : -# 358| mu358_2(String) = Uninitialized[x113] : &:r358_1 -# 358| r358_3(glval) = FunctionAddress[String] : -# 358| v358_4(void) = Call[String] : func:r358_3, this:r358_1 -# 358| mu358_5(unknown) = ^CallSideEffect : ~m? -# 358| mu358_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r358_1 -# 359| r359_1(glval) = VariableAddress[x113] : -# 359| r359_2(glval) = FunctionAddress[~String] : -# 359| v359_3(void) = Call[~String] : func:r359_2, this:r359_1 -# 359| mu359_4(unknown) = ^CallSideEffect : ~m? -# 359| v359_5(void) = ^IndirectReadSideEffect[-1] : &:r359_1, ~m? -# 359| mu359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r359_1 -# 359| r359_7(bool) = Constant[0] : -# 359| v359_8(void) = ConditionalBranch : r359_7 +# 35| Block 114 +# 35| r35_1583(glval) = VariableAddress[x113] : +# 35| mu35_1584(String) = Uninitialized[x113] : &:r35_1583 +# 35| r35_1585(glval) = FunctionAddress[String] : +# 35| v35_1586(void) = Call[String] : func:r35_1585, this:r35_1583 +# 35| mu35_1587(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1583 +# 35| r35_1589(glval) = VariableAddress[x113] : +# 35| r35_1590(glval) = FunctionAddress[~String] : +# 35| v35_1591(void) = Call[~String] : func:r35_1590, this:r35_1589 +# 35| mu35_1592(unknown) = ^CallSideEffect : ~m? +# 35| v35_1593(void) = ^IndirectReadSideEffect[-1] : &:r35_1589, ~m? +# 35| mu35_1594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1589 +# 35| r35_1595(bool) = Constant[0] : +# 35| v35_1596(void) = ConditionalBranch : r35_1595 #-----| False -> Block 115 #-----| True (back edge) -> Block 114 -# 361| Block 115 -# 361| r361_1(glval) = VariableAddress[x114] : -# 361| mu361_2(String) = Uninitialized[x114] : &:r361_1 -# 361| r361_3(glval) = FunctionAddress[String] : -# 361| v361_4(void) = Call[String] : func:r361_3, this:r361_1 -# 361| mu361_5(unknown) = ^CallSideEffect : ~m? -# 361| mu361_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r361_1 -# 362| r362_1(glval) = VariableAddress[x114] : -# 362| r362_2(glval) = FunctionAddress[~String] : -# 362| v362_3(void) = Call[~String] : func:r362_2, this:r362_1 -# 362| mu362_4(unknown) = ^CallSideEffect : ~m? -# 362| v362_5(void) = ^IndirectReadSideEffect[-1] : &:r362_1, ~m? -# 362| mu362_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r362_1 -# 362| r362_7(bool) = Constant[0] : -# 362| v362_8(void) = ConditionalBranch : r362_7 +# 35| Block 115 +# 35| r35_1597(glval) = VariableAddress[x114] : +# 35| mu35_1598(String) = Uninitialized[x114] : &:r35_1597 +# 35| r35_1599(glval) = FunctionAddress[String] : +# 35| v35_1600(void) = Call[String] : func:r35_1599, this:r35_1597 +# 35| mu35_1601(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1597 +# 35| r35_1603(glval) = VariableAddress[x114] : +# 35| r35_1604(glval) = FunctionAddress[~String] : +# 35| v35_1605(void) = Call[~String] : func:r35_1604, this:r35_1603 +# 35| mu35_1606(unknown) = ^CallSideEffect : ~m? +# 35| v35_1607(void) = ^IndirectReadSideEffect[-1] : &:r35_1603, ~m? +# 35| mu35_1608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1603 +# 35| r35_1609(bool) = Constant[0] : +# 35| v35_1610(void) = ConditionalBranch : r35_1609 #-----| False -> Block 116 #-----| True (back edge) -> Block 115 -# 364| Block 116 -# 364| r364_1(glval) = VariableAddress[x115] : -# 364| mu364_2(String) = Uninitialized[x115] : &:r364_1 -# 364| r364_3(glval) = FunctionAddress[String] : -# 364| v364_4(void) = Call[String] : func:r364_3, this:r364_1 -# 364| mu364_5(unknown) = ^CallSideEffect : ~m? -# 364| mu364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r364_1 -# 365| r365_1(glval) = VariableAddress[x115] : -# 365| r365_2(glval) = FunctionAddress[~String] : -# 365| v365_3(void) = Call[~String] : func:r365_2, this:r365_1 -# 365| mu365_4(unknown) = ^CallSideEffect : ~m? -# 365| v365_5(void) = ^IndirectReadSideEffect[-1] : &:r365_1, ~m? -# 365| mu365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r365_1 -# 365| r365_7(bool) = Constant[0] : -# 365| v365_8(void) = ConditionalBranch : r365_7 +# 35| Block 116 +# 35| r35_1611(glval) = VariableAddress[x115] : +# 35| mu35_1612(String) = Uninitialized[x115] : &:r35_1611 +# 35| r35_1613(glval) = FunctionAddress[String] : +# 35| v35_1614(void) = Call[String] : func:r35_1613, this:r35_1611 +# 35| mu35_1615(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1611 +# 35| r35_1617(glval) = VariableAddress[x115] : +# 35| r35_1618(glval) = FunctionAddress[~String] : +# 35| v35_1619(void) = Call[~String] : func:r35_1618, this:r35_1617 +# 35| mu35_1620(unknown) = ^CallSideEffect : ~m? +# 35| v35_1621(void) = ^IndirectReadSideEffect[-1] : &:r35_1617, ~m? +# 35| mu35_1622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1617 +# 35| r35_1623(bool) = Constant[0] : +# 35| v35_1624(void) = ConditionalBranch : r35_1623 #-----| False -> Block 117 #-----| True (back edge) -> Block 116 -# 367| Block 117 -# 367| r367_1(glval) = VariableAddress[x116] : -# 367| mu367_2(String) = Uninitialized[x116] : &:r367_1 -# 367| r367_3(glval) = FunctionAddress[String] : -# 367| v367_4(void) = Call[String] : func:r367_3, this:r367_1 -# 367| mu367_5(unknown) = ^CallSideEffect : ~m? -# 367| mu367_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r367_1 -# 368| r368_1(glval) = VariableAddress[x116] : -# 368| r368_2(glval) = FunctionAddress[~String] : -# 368| v368_3(void) = Call[~String] : func:r368_2, this:r368_1 -# 368| mu368_4(unknown) = ^CallSideEffect : ~m? -# 368| v368_5(void) = ^IndirectReadSideEffect[-1] : &:r368_1, ~m? -# 368| mu368_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r368_1 -# 368| r368_7(bool) = Constant[0] : -# 368| v368_8(void) = ConditionalBranch : r368_7 +# 35| Block 117 +# 35| r35_1625(glval) = VariableAddress[x116] : +# 35| mu35_1626(String) = Uninitialized[x116] : &:r35_1625 +# 35| r35_1627(glval) = FunctionAddress[String] : +# 35| v35_1628(void) = Call[String] : func:r35_1627, this:r35_1625 +# 35| mu35_1629(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1625 +# 35| r35_1631(glval) = VariableAddress[x116] : +# 35| r35_1632(glval) = FunctionAddress[~String] : +# 35| v35_1633(void) = Call[~String] : func:r35_1632, this:r35_1631 +# 35| mu35_1634(unknown) = ^CallSideEffect : ~m? +# 35| v35_1635(void) = ^IndirectReadSideEffect[-1] : &:r35_1631, ~m? +# 35| mu35_1636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1631 +# 35| r35_1637(bool) = Constant[0] : +# 35| v35_1638(void) = ConditionalBranch : r35_1637 #-----| False -> Block 118 #-----| True (back edge) -> Block 117 -# 370| Block 118 -# 370| r370_1(glval) = VariableAddress[x117] : -# 370| mu370_2(String) = Uninitialized[x117] : &:r370_1 -# 370| r370_3(glval) = FunctionAddress[String] : -# 370| v370_4(void) = Call[String] : func:r370_3, this:r370_1 -# 370| mu370_5(unknown) = ^CallSideEffect : ~m? -# 370| mu370_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r370_1 -# 371| r371_1(glval) = VariableAddress[x117] : -# 371| r371_2(glval) = FunctionAddress[~String] : -# 371| v371_3(void) = Call[~String] : func:r371_2, this:r371_1 -# 371| mu371_4(unknown) = ^CallSideEffect : ~m? -# 371| v371_5(void) = ^IndirectReadSideEffect[-1] : &:r371_1, ~m? -# 371| mu371_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r371_1 -# 371| r371_7(bool) = Constant[0] : -# 371| v371_8(void) = ConditionalBranch : r371_7 +# 35| Block 118 +# 35| r35_1639(glval) = VariableAddress[x117] : +# 35| mu35_1640(String) = Uninitialized[x117] : &:r35_1639 +# 35| r35_1641(glval) = FunctionAddress[String] : +# 35| v35_1642(void) = Call[String] : func:r35_1641, this:r35_1639 +# 35| mu35_1643(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1639 +# 35| r35_1645(glval) = VariableAddress[x117] : +# 35| r35_1646(glval) = FunctionAddress[~String] : +# 35| v35_1647(void) = Call[~String] : func:r35_1646, this:r35_1645 +# 35| mu35_1648(unknown) = ^CallSideEffect : ~m? +# 35| v35_1649(void) = ^IndirectReadSideEffect[-1] : &:r35_1645, ~m? +# 35| mu35_1650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1645 +# 35| r35_1651(bool) = Constant[0] : +# 35| v35_1652(void) = ConditionalBranch : r35_1651 #-----| False -> Block 119 #-----| True (back edge) -> Block 118 -# 373| Block 119 -# 373| r373_1(glval) = VariableAddress[x118] : -# 373| mu373_2(String) = Uninitialized[x118] : &:r373_1 -# 373| r373_3(glval) = FunctionAddress[String] : -# 373| v373_4(void) = Call[String] : func:r373_3, this:r373_1 -# 373| mu373_5(unknown) = ^CallSideEffect : ~m? -# 373| mu373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r373_1 -# 374| r374_1(glval) = VariableAddress[x118] : -# 374| r374_2(glval) = FunctionAddress[~String] : -# 374| v374_3(void) = Call[~String] : func:r374_2, this:r374_1 -# 374| mu374_4(unknown) = ^CallSideEffect : ~m? -# 374| v374_5(void) = ^IndirectReadSideEffect[-1] : &:r374_1, ~m? -# 374| mu374_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r374_1 -# 374| r374_7(bool) = Constant[0] : -# 374| v374_8(void) = ConditionalBranch : r374_7 +# 35| Block 119 +# 35| r35_1653(glval) = VariableAddress[x118] : +# 35| mu35_1654(String) = Uninitialized[x118] : &:r35_1653 +# 35| r35_1655(glval) = FunctionAddress[String] : +# 35| v35_1656(void) = Call[String] : func:r35_1655, this:r35_1653 +# 35| mu35_1657(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1653 +# 35| r35_1659(glval) = VariableAddress[x118] : +# 35| r35_1660(glval) = FunctionAddress[~String] : +# 35| v35_1661(void) = Call[~String] : func:r35_1660, this:r35_1659 +# 35| mu35_1662(unknown) = ^CallSideEffect : ~m? +# 35| v35_1663(void) = ^IndirectReadSideEffect[-1] : &:r35_1659, ~m? +# 35| mu35_1664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1659 +# 35| r35_1665(bool) = Constant[0] : +# 35| v35_1666(void) = ConditionalBranch : r35_1665 #-----| False -> Block 120 #-----| True (back edge) -> Block 119 -# 376| Block 120 -# 376| r376_1(glval) = VariableAddress[x119] : -# 376| mu376_2(String) = Uninitialized[x119] : &:r376_1 -# 376| r376_3(glval) = FunctionAddress[String] : -# 376| v376_4(void) = Call[String] : func:r376_3, this:r376_1 -# 376| mu376_5(unknown) = ^CallSideEffect : ~m? -# 376| mu376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r376_1 -# 377| r377_1(glval) = VariableAddress[x119] : -# 377| r377_2(glval) = FunctionAddress[~String] : -# 377| v377_3(void) = Call[~String] : func:r377_2, this:r377_1 -# 377| mu377_4(unknown) = ^CallSideEffect : ~m? -# 377| v377_5(void) = ^IndirectReadSideEffect[-1] : &:r377_1, ~m? -# 377| mu377_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r377_1 -# 377| r377_7(bool) = Constant[0] : -# 377| v377_8(void) = ConditionalBranch : r377_7 +# 35| Block 120 +# 35| r35_1667(glval) = VariableAddress[x119] : +# 35| mu35_1668(String) = Uninitialized[x119] : &:r35_1667 +# 35| r35_1669(glval) = FunctionAddress[String] : +# 35| v35_1670(void) = Call[String] : func:r35_1669, this:r35_1667 +# 35| mu35_1671(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1667 +# 35| r35_1673(glval) = VariableAddress[x119] : +# 35| r35_1674(glval) = FunctionAddress[~String] : +# 35| v35_1675(void) = Call[~String] : func:r35_1674, this:r35_1673 +# 35| mu35_1676(unknown) = ^CallSideEffect : ~m? +# 35| v35_1677(void) = ^IndirectReadSideEffect[-1] : &:r35_1673, ~m? +# 35| mu35_1678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1673 +# 35| r35_1679(bool) = Constant[0] : +# 35| v35_1680(void) = ConditionalBranch : r35_1679 #-----| False -> Block 121 #-----| True (back edge) -> Block 120 -# 379| Block 121 -# 379| r379_1(glval) = VariableAddress[x120] : -# 379| mu379_2(String) = Uninitialized[x120] : &:r379_1 -# 379| r379_3(glval) = FunctionAddress[String] : -# 379| v379_4(void) = Call[String] : func:r379_3, this:r379_1 -# 379| mu379_5(unknown) = ^CallSideEffect : ~m? -# 379| mu379_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r379_1 -# 380| r380_1(glval) = VariableAddress[x120] : -# 380| r380_2(glval) = FunctionAddress[~String] : -# 380| v380_3(void) = Call[~String] : func:r380_2, this:r380_1 -# 380| mu380_4(unknown) = ^CallSideEffect : ~m? -# 380| v380_5(void) = ^IndirectReadSideEffect[-1] : &:r380_1, ~m? -# 380| mu380_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r380_1 -# 380| r380_7(bool) = Constant[0] : -# 380| v380_8(void) = ConditionalBranch : r380_7 +# 35| Block 121 +# 35| r35_1681(glval) = VariableAddress[x120] : +# 35| mu35_1682(String) = Uninitialized[x120] : &:r35_1681 +# 35| r35_1683(glval) = FunctionAddress[String] : +# 35| v35_1684(void) = Call[String] : func:r35_1683, this:r35_1681 +# 35| mu35_1685(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1681 +# 35| r35_1687(glval) = VariableAddress[x120] : +# 35| r35_1688(glval) = FunctionAddress[~String] : +# 35| v35_1689(void) = Call[~String] : func:r35_1688, this:r35_1687 +# 35| mu35_1690(unknown) = ^CallSideEffect : ~m? +# 35| v35_1691(void) = ^IndirectReadSideEffect[-1] : &:r35_1687, ~m? +# 35| mu35_1692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1687 +# 35| r35_1693(bool) = Constant[0] : +# 35| v35_1694(void) = ConditionalBranch : r35_1693 #-----| False -> Block 122 #-----| True (back edge) -> Block 121 -# 382| Block 122 -# 382| r382_1(glval) = VariableAddress[x121] : -# 382| mu382_2(String) = Uninitialized[x121] : &:r382_1 -# 382| r382_3(glval) = FunctionAddress[String] : -# 382| v382_4(void) = Call[String] : func:r382_3, this:r382_1 -# 382| mu382_5(unknown) = ^CallSideEffect : ~m? -# 382| mu382_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r382_1 -# 383| r383_1(glval) = VariableAddress[x121] : -# 383| r383_2(glval) = FunctionAddress[~String] : -# 383| v383_3(void) = Call[~String] : func:r383_2, this:r383_1 -# 383| mu383_4(unknown) = ^CallSideEffect : ~m? -# 383| v383_5(void) = ^IndirectReadSideEffect[-1] : &:r383_1, ~m? -# 383| mu383_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r383_1 -# 383| r383_7(bool) = Constant[0] : -# 383| v383_8(void) = ConditionalBranch : r383_7 +# 35| Block 122 +# 35| r35_1695(glval) = VariableAddress[x121] : +# 35| mu35_1696(String) = Uninitialized[x121] : &:r35_1695 +# 35| r35_1697(glval) = FunctionAddress[String] : +# 35| v35_1698(void) = Call[String] : func:r35_1697, this:r35_1695 +# 35| mu35_1699(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1695 +# 35| r35_1701(glval) = VariableAddress[x121] : +# 35| r35_1702(glval) = FunctionAddress[~String] : +# 35| v35_1703(void) = Call[~String] : func:r35_1702, this:r35_1701 +# 35| mu35_1704(unknown) = ^CallSideEffect : ~m? +# 35| v35_1705(void) = ^IndirectReadSideEffect[-1] : &:r35_1701, ~m? +# 35| mu35_1706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1701 +# 35| r35_1707(bool) = Constant[0] : +# 35| v35_1708(void) = ConditionalBranch : r35_1707 #-----| False -> Block 123 #-----| True (back edge) -> Block 122 -# 385| Block 123 -# 385| r385_1(glval) = VariableAddress[x122] : -# 385| mu385_2(String) = Uninitialized[x122] : &:r385_1 -# 385| r385_3(glval) = FunctionAddress[String] : -# 385| v385_4(void) = Call[String] : func:r385_3, this:r385_1 -# 385| mu385_5(unknown) = ^CallSideEffect : ~m? -# 385| mu385_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r385_1 -# 386| r386_1(glval) = VariableAddress[x122] : -# 386| r386_2(glval) = FunctionAddress[~String] : -# 386| v386_3(void) = Call[~String] : func:r386_2, this:r386_1 -# 386| mu386_4(unknown) = ^CallSideEffect : ~m? -# 386| v386_5(void) = ^IndirectReadSideEffect[-1] : &:r386_1, ~m? -# 386| mu386_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r386_1 -# 386| r386_7(bool) = Constant[0] : -# 386| v386_8(void) = ConditionalBranch : r386_7 +# 35| Block 123 +# 35| r35_1709(glval) = VariableAddress[x122] : +# 35| mu35_1710(String) = Uninitialized[x122] : &:r35_1709 +# 35| r35_1711(glval) = FunctionAddress[String] : +# 35| v35_1712(void) = Call[String] : func:r35_1711, this:r35_1709 +# 35| mu35_1713(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1709 +# 35| r35_1715(glval) = VariableAddress[x122] : +# 35| r35_1716(glval) = FunctionAddress[~String] : +# 35| v35_1717(void) = Call[~String] : func:r35_1716, this:r35_1715 +# 35| mu35_1718(unknown) = ^CallSideEffect : ~m? +# 35| v35_1719(void) = ^IndirectReadSideEffect[-1] : &:r35_1715, ~m? +# 35| mu35_1720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1715 +# 35| r35_1721(bool) = Constant[0] : +# 35| v35_1722(void) = ConditionalBranch : r35_1721 #-----| False -> Block 124 #-----| True (back edge) -> Block 123 -# 388| Block 124 -# 388| r388_1(glval) = VariableAddress[x123] : -# 388| mu388_2(String) = Uninitialized[x123] : &:r388_1 -# 388| r388_3(glval) = FunctionAddress[String] : -# 388| v388_4(void) = Call[String] : func:r388_3, this:r388_1 -# 388| mu388_5(unknown) = ^CallSideEffect : ~m? -# 388| mu388_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r388_1 -# 389| r389_1(glval) = VariableAddress[x123] : -# 389| r389_2(glval) = FunctionAddress[~String] : -# 389| v389_3(void) = Call[~String] : func:r389_2, this:r389_1 -# 389| mu389_4(unknown) = ^CallSideEffect : ~m? -# 389| v389_5(void) = ^IndirectReadSideEffect[-1] : &:r389_1, ~m? -# 389| mu389_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r389_1 -# 389| r389_7(bool) = Constant[0] : -# 389| v389_8(void) = ConditionalBranch : r389_7 +# 35| Block 124 +# 35| r35_1723(glval) = VariableAddress[x123] : +# 35| mu35_1724(String) = Uninitialized[x123] : &:r35_1723 +# 35| r35_1725(glval) = FunctionAddress[String] : +# 35| v35_1726(void) = Call[String] : func:r35_1725, this:r35_1723 +# 35| mu35_1727(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1723 +# 35| r35_1729(glval) = VariableAddress[x123] : +# 35| r35_1730(glval) = FunctionAddress[~String] : +# 35| v35_1731(void) = Call[~String] : func:r35_1730, this:r35_1729 +# 35| mu35_1732(unknown) = ^CallSideEffect : ~m? +# 35| v35_1733(void) = ^IndirectReadSideEffect[-1] : &:r35_1729, ~m? +# 35| mu35_1734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1729 +# 35| r35_1735(bool) = Constant[0] : +# 35| v35_1736(void) = ConditionalBranch : r35_1735 #-----| False -> Block 125 #-----| True (back edge) -> Block 124 -# 391| Block 125 -# 391| r391_1(glval) = VariableAddress[x124] : -# 391| mu391_2(String) = Uninitialized[x124] : &:r391_1 -# 391| r391_3(glval) = FunctionAddress[String] : -# 391| v391_4(void) = Call[String] : func:r391_3, this:r391_1 -# 391| mu391_5(unknown) = ^CallSideEffect : ~m? -# 391| mu391_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r391_1 -# 392| r392_1(glval) = VariableAddress[x124] : -# 392| r392_2(glval) = FunctionAddress[~String] : -# 392| v392_3(void) = Call[~String] : func:r392_2, this:r392_1 -# 392| mu392_4(unknown) = ^CallSideEffect : ~m? -# 392| v392_5(void) = ^IndirectReadSideEffect[-1] : &:r392_1, ~m? -# 392| mu392_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r392_1 -# 392| r392_7(bool) = Constant[0] : -# 392| v392_8(void) = ConditionalBranch : r392_7 +# 35| Block 125 +# 35| r35_1737(glval) = VariableAddress[x124] : +# 35| mu35_1738(String) = Uninitialized[x124] : &:r35_1737 +# 35| r35_1739(glval) = FunctionAddress[String] : +# 35| v35_1740(void) = Call[String] : func:r35_1739, this:r35_1737 +# 35| mu35_1741(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1737 +# 35| r35_1743(glval) = VariableAddress[x124] : +# 35| r35_1744(glval) = FunctionAddress[~String] : +# 35| v35_1745(void) = Call[~String] : func:r35_1744, this:r35_1743 +# 35| mu35_1746(unknown) = ^CallSideEffect : ~m? +# 35| v35_1747(void) = ^IndirectReadSideEffect[-1] : &:r35_1743, ~m? +# 35| mu35_1748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1743 +# 35| r35_1749(bool) = Constant[0] : +# 35| v35_1750(void) = ConditionalBranch : r35_1749 #-----| False -> Block 126 #-----| True (back edge) -> Block 125 -# 394| Block 126 -# 394| r394_1(glval) = VariableAddress[x125] : -# 394| mu394_2(String) = Uninitialized[x125] : &:r394_1 -# 394| r394_3(glval) = FunctionAddress[String] : -# 394| v394_4(void) = Call[String] : func:r394_3, this:r394_1 -# 394| mu394_5(unknown) = ^CallSideEffect : ~m? -# 394| mu394_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r394_1 -# 395| r395_1(glval) = VariableAddress[x125] : -# 395| r395_2(glval) = FunctionAddress[~String] : -# 395| v395_3(void) = Call[~String] : func:r395_2, this:r395_1 -# 395| mu395_4(unknown) = ^CallSideEffect : ~m? -# 395| v395_5(void) = ^IndirectReadSideEffect[-1] : &:r395_1, ~m? -# 395| mu395_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r395_1 -# 395| r395_7(bool) = Constant[0] : -# 395| v395_8(void) = ConditionalBranch : r395_7 +# 35| Block 126 +# 35| r35_1751(glval) = VariableAddress[x125] : +# 35| mu35_1752(String) = Uninitialized[x125] : &:r35_1751 +# 35| r35_1753(glval) = FunctionAddress[String] : +# 35| v35_1754(void) = Call[String] : func:r35_1753, this:r35_1751 +# 35| mu35_1755(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1751 +# 35| r35_1757(glval) = VariableAddress[x125] : +# 35| r35_1758(glval) = FunctionAddress[~String] : +# 35| v35_1759(void) = Call[~String] : func:r35_1758, this:r35_1757 +# 35| mu35_1760(unknown) = ^CallSideEffect : ~m? +# 35| v35_1761(void) = ^IndirectReadSideEffect[-1] : &:r35_1757, ~m? +# 35| mu35_1762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1757 +# 35| r35_1763(bool) = Constant[0] : +# 35| v35_1764(void) = ConditionalBranch : r35_1763 #-----| False -> Block 127 #-----| True (back edge) -> Block 126 -# 397| Block 127 -# 397| r397_1(glval) = VariableAddress[x126] : -# 397| mu397_2(String) = Uninitialized[x126] : &:r397_1 -# 397| r397_3(glval) = FunctionAddress[String] : -# 397| v397_4(void) = Call[String] : func:r397_3, this:r397_1 -# 397| mu397_5(unknown) = ^CallSideEffect : ~m? -# 397| mu397_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r397_1 -# 398| r398_1(glval) = VariableAddress[x126] : -# 398| r398_2(glval) = FunctionAddress[~String] : -# 398| v398_3(void) = Call[~String] : func:r398_2, this:r398_1 -# 398| mu398_4(unknown) = ^CallSideEffect : ~m? -# 398| v398_5(void) = ^IndirectReadSideEffect[-1] : &:r398_1, ~m? -# 398| mu398_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r398_1 -# 398| r398_7(bool) = Constant[0] : -# 398| v398_8(void) = ConditionalBranch : r398_7 +# 35| Block 127 +# 35| r35_1765(glval) = VariableAddress[x126] : +# 35| mu35_1766(String) = Uninitialized[x126] : &:r35_1765 +# 35| r35_1767(glval) = FunctionAddress[String] : +# 35| v35_1768(void) = Call[String] : func:r35_1767, this:r35_1765 +# 35| mu35_1769(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1765 +# 35| r35_1771(glval) = VariableAddress[x126] : +# 35| r35_1772(glval) = FunctionAddress[~String] : +# 35| v35_1773(void) = Call[~String] : func:r35_1772, this:r35_1771 +# 35| mu35_1774(unknown) = ^CallSideEffect : ~m? +# 35| v35_1775(void) = ^IndirectReadSideEffect[-1] : &:r35_1771, ~m? +# 35| mu35_1776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1771 +# 35| r35_1777(bool) = Constant[0] : +# 35| v35_1778(void) = ConditionalBranch : r35_1777 #-----| False -> Block 128 #-----| True (back edge) -> Block 127 -# 400| Block 128 -# 400| r400_1(glval) = VariableAddress[x127] : -# 400| mu400_2(String) = Uninitialized[x127] : &:r400_1 -# 400| r400_3(glval) = FunctionAddress[String] : -# 400| v400_4(void) = Call[String] : func:r400_3, this:r400_1 -# 400| mu400_5(unknown) = ^CallSideEffect : ~m? -# 400| mu400_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r400_1 -# 401| r401_1(glval) = VariableAddress[x127] : -# 401| r401_2(glval) = FunctionAddress[~String] : -# 401| v401_3(void) = Call[~String] : func:r401_2, this:r401_1 -# 401| mu401_4(unknown) = ^CallSideEffect : ~m? -# 401| v401_5(void) = ^IndirectReadSideEffect[-1] : &:r401_1, ~m? -# 401| mu401_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r401_1 -# 401| r401_7(bool) = Constant[0] : -# 401| v401_8(void) = ConditionalBranch : r401_7 +# 35| Block 128 +# 35| r35_1779(glval) = VariableAddress[x127] : +# 35| mu35_1780(String) = Uninitialized[x127] : &:r35_1779 +# 35| r35_1781(glval) = FunctionAddress[String] : +# 35| v35_1782(void) = Call[String] : func:r35_1781, this:r35_1779 +# 35| mu35_1783(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1779 +# 35| r35_1785(glval) = VariableAddress[x127] : +# 35| r35_1786(glval) = FunctionAddress[~String] : +# 35| v35_1787(void) = Call[~String] : func:r35_1786, this:r35_1785 +# 35| mu35_1788(unknown) = ^CallSideEffect : ~m? +# 35| v35_1789(void) = ^IndirectReadSideEffect[-1] : &:r35_1785, ~m? +# 35| mu35_1790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1785 +# 35| r35_1791(bool) = Constant[0] : +# 35| v35_1792(void) = ConditionalBranch : r35_1791 #-----| False -> Block 129 #-----| True (back edge) -> Block 128 -# 403| Block 129 -# 403| r403_1(glval) = VariableAddress[x128] : -# 403| mu403_2(String) = Uninitialized[x128] : &:r403_1 -# 403| r403_3(glval) = FunctionAddress[String] : -# 403| v403_4(void) = Call[String] : func:r403_3, this:r403_1 -# 403| mu403_5(unknown) = ^CallSideEffect : ~m? -# 403| mu403_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r403_1 -# 404| r404_1(glval) = VariableAddress[x128] : -# 404| r404_2(glval) = FunctionAddress[~String] : -# 404| v404_3(void) = Call[~String] : func:r404_2, this:r404_1 -# 404| mu404_4(unknown) = ^CallSideEffect : ~m? -# 404| v404_5(void) = ^IndirectReadSideEffect[-1] : &:r404_1, ~m? -# 404| mu404_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r404_1 -# 404| r404_7(bool) = Constant[0] : -# 404| v404_8(void) = ConditionalBranch : r404_7 +# 35| Block 129 +# 35| r35_1793(glval) = VariableAddress[x128] : +# 35| mu35_1794(String) = Uninitialized[x128] : &:r35_1793 +# 35| r35_1795(glval) = FunctionAddress[String] : +# 35| v35_1796(void) = Call[String] : func:r35_1795, this:r35_1793 +# 35| mu35_1797(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1793 +# 35| r35_1799(glval) = VariableAddress[x128] : +# 35| r35_1800(glval) = FunctionAddress[~String] : +# 35| v35_1801(void) = Call[~String] : func:r35_1800, this:r35_1799 +# 35| mu35_1802(unknown) = ^CallSideEffect : ~m? +# 35| v35_1803(void) = ^IndirectReadSideEffect[-1] : &:r35_1799, ~m? +# 35| mu35_1804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1799 +# 35| r35_1805(bool) = Constant[0] : +# 35| v35_1806(void) = ConditionalBranch : r35_1805 #-----| False -> Block 130 #-----| True (back edge) -> Block 129 -# 406| Block 130 -# 406| r406_1(glval) = VariableAddress[x129] : -# 406| mu406_2(String) = Uninitialized[x129] : &:r406_1 -# 406| r406_3(glval) = FunctionAddress[String] : -# 406| v406_4(void) = Call[String] : func:r406_3, this:r406_1 -# 406| mu406_5(unknown) = ^CallSideEffect : ~m? -# 406| mu406_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r406_1 -# 407| r407_1(glval) = VariableAddress[x129] : -# 407| r407_2(glval) = FunctionAddress[~String] : -# 407| v407_3(void) = Call[~String] : func:r407_2, this:r407_1 -# 407| mu407_4(unknown) = ^CallSideEffect : ~m? -# 407| v407_5(void) = ^IndirectReadSideEffect[-1] : &:r407_1, ~m? -# 407| mu407_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r407_1 -# 407| r407_7(bool) = Constant[0] : -# 407| v407_8(void) = ConditionalBranch : r407_7 +# 35| Block 130 +# 35| r35_1807(glval) = VariableAddress[x129] : +# 35| mu35_1808(String) = Uninitialized[x129] : &:r35_1807 +# 35| r35_1809(glval) = FunctionAddress[String] : +# 35| v35_1810(void) = Call[String] : func:r35_1809, this:r35_1807 +# 35| mu35_1811(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1807 +# 35| r35_1813(glval) = VariableAddress[x129] : +# 35| r35_1814(glval) = FunctionAddress[~String] : +# 35| v35_1815(void) = Call[~String] : func:r35_1814, this:r35_1813 +# 35| mu35_1816(unknown) = ^CallSideEffect : ~m? +# 35| v35_1817(void) = ^IndirectReadSideEffect[-1] : &:r35_1813, ~m? +# 35| mu35_1818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1813 +# 35| r35_1819(bool) = Constant[0] : +# 35| v35_1820(void) = ConditionalBranch : r35_1819 #-----| False -> Block 131 #-----| True (back edge) -> Block 130 -# 409| Block 131 -# 409| r409_1(glval) = VariableAddress[x130] : -# 409| mu409_2(String) = Uninitialized[x130] : &:r409_1 -# 409| r409_3(glval) = FunctionAddress[String] : -# 409| v409_4(void) = Call[String] : func:r409_3, this:r409_1 -# 409| mu409_5(unknown) = ^CallSideEffect : ~m? -# 409| mu409_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r409_1 -# 410| r410_1(glval) = VariableAddress[x130] : -# 410| r410_2(glval) = FunctionAddress[~String] : -# 410| v410_3(void) = Call[~String] : func:r410_2, this:r410_1 -# 410| mu410_4(unknown) = ^CallSideEffect : ~m? -# 410| v410_5(void) = ^IndirectReadSideEffect[-1] : &:r410_1, ~m? -# 410| mu410_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r410_1 -# 410| r410_7(bool) = Constant[0] : -# 410| v410_8(void) = ConditionalBranch : r410_7 +# 35| Block 131 +# 35| r35_1821(glval) = VariableAddress[x130] : +# 35| mu35_1822(String) = Uninitialized[x130] : &:r35_1821 +# 35| r35_1823(glval) = FunctionAddress[String] : +# 35| v35_1824(void) = Call[String] : func:r35_1823, this:r35_1821 +# 35| mu35_1825(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1821 +# 35| r35_1827(glval) = VariableAddress[x130] : +# 35| r35_1828(glval) = FunctionAddress[~String] : +# 35| v35_1829(void) = Call[~String] : func:r35_1828, this:r35_1827 +# 35| mu35_1830(unknown) = ^CallSideEffect : ~m? +# 35| v35_1831(void) = ^IndirectReadSideEffect[-1] : &:r35_1827, ~m? +# 35| mu35_1832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1827 +# 35| r35_1833(bool) = Constant[0] : +# 35| v35_1834(void) = ConditionalBranch : r35_1833 #-----| False -> Block 132 #-----| True (back edge) -> Block 131 -# 412| Block 132 -# 412| r412_1(glval) = VariableAddress[x131] : -# 412| mu412_2(String) = Uninitialized[x131] : &:r412_1 -# 412| r412_3(glval) = FunctionAddress[String] : -# 412| v412_4(void) = Call[String] : func:r412_3, this:r412_1 -# 412| mu412_5(unknown) = ^CallSideEffect : ~m? -# 412| mu412_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r412_1 -# 413| r413_1(glval) = VariableAddress[x131] : -# 413| r413_2(glval) = FunctionAddress[~String] : -# 413| v413_3(void) = Call[~String] : func:r413_2, this:r413_1 -# 413| mu413_4(unknown) = ^CallSideEffect : ~m? -# 413| v413_5(void) = ^IndirectReadSideEffect[-1] : &:r413_1, ~m? -# 413| mu413_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r413_1 -# 413| r413_7(bool) = Constant[0] : -# 413| v413_8(void) = ConditionalBranch : r413_7 +# 35| Block 132 +# 35| r35_1835(glval) = VariableAddress[x131] : +# 35| mu35_1836(String) = Uninitialized[x131] : &:r35_1835 +# 35| r35_1837(glval) = FunctionAddress[String] : +# 35| v35_1838(void) = Call[String] : func:r35_1837, this:r35_1835 +# 35| mu35_1839(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1835 +# 35| r35_1841(glval) = VariableAddress[x131] : +# 35| r35_1842(glval) = FunctionAddress[~String] : +# 35| v35_1843(void) = Call[~String] : func:r35_1842, this:r35_1841 +# 35| mu35_1844(unknown) = ^CallSideEffect : ~m? +# 35| v35_1845(void) = ^IndirectReadSideEffect[-1] : &:r35_1841, ~m? +# 35| mu35_1846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1841 +# 35| r35_1847(bool) = Constant[0] : +# 35| v35_1848(void) = ConditionalBranch : r35_1847 #-----| False -> Block 133 #-----| True (back edge) -> Block 132 -# 415| Block 133 -# 415| r415_1(glval) = VariableAddress[x132] : -# 415| mu415_2(String) = Uninitialized[x132] : &:r415_1 -# 415| r415_3(glval) = FunctionAddress[String] : -# 415| v415_4(void) = Call[String] : func:r415_3, this:r415_1 -# 415| mu415_5(unknown) = ^CallSideEffect : ~m? -# 415| mu415_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r415_1 -# 416| r416_1(glval) = VariableAddress[x132] : -# 416| r416_2(glval) = FunctionAddress[~String] : -# 416| v416_3(void) = Call[~String] : func:r416_2, this:r416_1 -# 416| mu416_4(unknown) = ^CallSideEffect : ~m? -# 416| v416_5(void) = ^IndirectReadSideEffect[-1] : &:r416_1, ~m? -# 416| mu416_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r416_1 -# 416| r416_7(bool) = Constant[0] : -# 416| v416_8(void) = ConditionalBranch : r416_7 +# 35| Block 133 +# 35| r35_1849(glval) = VariableAddress[x132] : +# 35| mu35_1850(String) = Uninitialized[x132] : &:r35_1849 +# 35| r35_1851(glval) = FunctionAddress[String] : +# 35| v35_1852(void) = Call[String] : func:r35_1851, this:r35_1849 +# 35| mu35_1853(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1849 +# 35| r35_1855(glval) = VariableAddress[x132] : +# 35| r35_1856(glval) = FunctionAddress[~String] : +# 35| v35_1857(void) = Call[~String] : func:r35_1856, this:r35_1855 +# 35| mu35_1858(unknown) = ^CallSideEffect : ~m? +# 35| v35_1859(void) = ^IndirectReadSideEffect[-1] : &:r35_1855, ~m? +# 35| mu35_1860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1855 +# 35| r35_1861(bool) = Constant[0] : +# 35| v35_1862(void) = ConditionalBranch : r35_1861 #-----| False -> Block 134 #-----| True (back edge) -> Block 133 -# 418| Block 134 -# 418| r418_1(glval) = VariableAddress[x133] : -# 418| mu418_2(String) = Uninitialized[x133] : &:r418_1 -# 418| r418_3(glval) = FunctionAddress[String] : -# 418| v418_4(void) = Call[String] : func:r418_3, this:r418_1 -# 418| mu418_5(unknown) = ^CallSideEffect : ~m? -# 418| mu418_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r418_1 -# 419| r419_1(glval) = VariableAddress[x133] : -# 419| r419_2(glval) = FunctionAddress[~String] : -# 419| v419_3(void) = Call[~String] : func:r419_2, this:r419_1 -# 419| mu419_4(unknown) = ^CallSideEffect : ~m? -# 419| v419_5(void) = ^IndirectReadSideEffect[-1] : &:r419_1, ~m? -# 419| mu419_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r419_1 -# 419| r419_7(bool) = Constant[0] : -# 419| v419_8(void) = ConditionalBranch : r419_7 +# 35| Block 134 +# 35| r35_1863(glval) = VariableAddress[x133] : +# 35| mu35_1864(String) = Uninitialized[x133] : &:r35_1863 +# 35| r35_1865(glval) = FunctionAddress[String] : +# 35| v35_1866(void) = Call[String] : func:r35_1865, this:r35_1863 +# 35| mu35_1867(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1863 +# 35| r35_1869(glval) = VariableAddress[x133] : +# 35| r35_1870(glval) = FunctionAddress[~String] : +# 35| v35_1871(void) = Call[~String] : func:r35_1870, this:r35_1869 +# 35| mu35_1872(unknown) = ^CallSideEffect : ~m? +# 35| v35_1873(void) = ^IndirectReadSideEffect[-1] : &:r35_1869, ~m? +# 35| mu35_1874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1869 +# 35| r35_1875(bool) = Constant[0] : +# 35| v35_1876(void) = ConditionalBranch : r35_1875 #-----| False -> Block 135 #-----| True (back edge) -> Block 134 -# 421| Block 135 -# 421| r421_1(glval) = VariableAddress[x134] : -# 421| mu421_2(String) = Uninitialized[x134] : &:r421_1 -# 421| r421_3(glval) = FunctionAddress[String] : -# 421| v421_4(void) = Call[String] : func:r421_3, this:r421_1 -# 421| mu421_5(unknown) = ^CallSideEffect : ~m? -# 421| mu421_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r421_1 -# 422| r422_1(glval) = VariableAddress[x134] : -# 422| r422_2(glval) = FunctionAddress[~String] : -# 422| v422_3(void) = Call[~String] : func:r422_2, this:r422_1 -# 422| mu422_4(unknown) = ^CallSideEffect : ~m? -# 422| v422_5(void) = ^IndirectReadSideEffect[-1] : &:r422_1, ~m? -# 422| mu422_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r422_1 -# 422| r422_7(bool) = Constant[0] : -# 422| v422_8(void) = ConditionalBranch : r422_7 +# 35| Block 135 +# 35| r35_1877(glval) = VariableAddress[x134] : +# 35| mu35_1878(String) = Uninitialized[x134] : &:r35_1877 +# 35| r35_1879(glval) = FunctionAddress[String] : +# 35| v35_1880(void) = Call[String] : func:r35_1879, this:r35_1877 +# 35| mu35_1881(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1877 +# 35| r35_1883(glval) = VariableAddress[x134] : +# 35| r35_1884(glval) = FunctionAddress[~String] : +# 35| v35_1885(void) = Call[~String] : func:r35_1884, this:r35_1883 +# 35| mu35_1886(unknown) = ^CallSideEffect : ~m? +# 35| v35_1887(void) = ^IndirectReadSideEffect[-1] : &:r35_1883, ~m? +# 35| mu35_1888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1883 +# 35| r35_1889(bool) = Constant[0] : +# 35| v35_1890(void) = ConditionalBranch : r35_1889 #-----| False -> Block 136 #-----| True (back edge) -> Block 135 -# 424| Block 136 -# 424| r424_1(glval) = VariableAddress[x135] : -# 424| mu424_2(String) = Uninitialized[x135] : &:r424_1 -# 424| r424_3(glval) = FunctionAddress[String] : -# 424| v424_4(void) = Call[String] : func:r424_3, this:r424_1 -# 424| mu424_5(unknown) = ^CallSideEffect : ~m? -# 424| mu424_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r424_1 -# 425| r425_1(glval) = VariableAddress[x135] : -# 425| r425_2(glval) = FunctionAddress[~String] : -# 425| v425_3(void) = Call[~String] : func:r425_2, this:r425_1 -# 425| mu425_4(unknown) = ^CallSideEffect : ~m? -# 425| v425_5(void) = ^IndirectReadSideEffect[-1] : &:r425_1, ~m? -# 425| mu425_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r425_1 -# 425| r425_7(bool) = Constant[0] : -# 425| v425_8(void) = ConditionalBranch : r425_7 +# 35| Block 136 +# 35| r35_1891(glval) = VariableAddress[x135] : +# 35| mu35_1892(String) = Uninitialized[x135] : &:r35_1891 +# 35| r35_1893(glval) = FunctionAddress[String] : +# 35| v35_1894(void) = Call[String] : func:r35_1893, this:r35_1891 +# 35| mu35_1895(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1891 +# 35| r35_1897(glval) = VariableAddress[x135] : +# 35| r35_1898(glval) = FunctionAddress[~String] : +# 35| v35_1899(void) = Call[~String] : func:r35_1898, this:r35_1897 +# 35| mu35_1900(unknown) = ^CallSideEffect : ~m? +# 35| v35_1901(void) = ^IndirectReadSideEffect[-1] : &:r35_1897, ~m? +# 35| mu35_1902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1897 +# 35| r35_1903(bool) = Constant[0] : +# 35| v35_1904(void) = ConditionalBranch : r35_1903 #-----| False -> Block 137 #-----| True (back edge) -> Block 136 -# 427| Block 137 -# 427| r427_1(glval) = VariableAddress[x136] : -# 427| mu427_2(String) = Uninitialized[x136] : &:r427_1 -# 427| r427_3(glval) = FunctionAddress[String] : -# 427| v427_4(void) = Call[String] : func:r427_3, this:r427_1 -# 427| mu427_5(unknown) = ^CallSideEffect : ~m? -# 427| mu427_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r427_1 -# 428| r428_1(glval) = VariableAddress[x136] : -# 428| r428_2(glval) = FunctionAddress[~String] : -# 428| v428_3(void) = Call[~String] : func:r428_2, this:r428_1 -# 428| mu428_4(unknown) = ^CallSideEffect : ~m? -# 428| v428_5(void) = ^IndirectReadSideEffect[-1] : &:r428_1, ~m? -# 428| mu428_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r428_1 -# 428| r428_7(bool) = Constant[0] : -# 428| v428_8(void) = ConditionalBranch : r428_7 +# 35| Block 137 +# 35| r35_1905(glval) = VariableAddress[x136] : +# 35| mu35_1906(String) = Uninitialized[x136] : &:r35_1905 +# 35| r35_1907(glval) = FunctionAddress[String] : +# 35| v35_1908(void) = Call[String] : func:r35_1907, this:r35_1905 +# 35| mu35_1909(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1905 +# 35| r35_1911(glval) = VariableAddress[x136] : +# 35| r35_1912(glval) = FunctionAddress[~String] : +# 35| v35_1913(void) = Call[~String] : func:r35_1912, this:r35_1911 +# 35| mu35_1914(unknown) = ^CallSideEffect : ~m? +# 35| v35_1915(void) = ^IndirectReadSideEffect[-1] : &:r35_1911, ~m? +# 35| mu35_1916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1911 +# 35| r35_1917(bool) = Constant[0] : +# 35| v35_1918(void) = ConditionalBranch : r35_1917 #-----| False -> Block 138 #-----| True (back edge) -> Block 137 -# 430| Block 138 -# 430| r430_1(glval) = VariableAddress[x137] : -# 430| mu430_2(String) = Uninitialized[x137] : &:r430_1 -# 430| r430_3(glval) = FunctionAddress[String] : -# 430| v430_4(void) = Call[String] : func:r430_3, this:r430_1 -# 430| mu430_5(unknown) = ^CallSideEffect : ~m? -# 430| mu430_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r430_1 -# 431| r431_1(glval) = VariableAddress[x137] : -# 431| r431_2(glval) = FunctionAddress[~String] : -# 431| v431_3(void) = Call[~String] : func:r431_2, this:r431_1 -# 431| mu431_4(unknown) = ^CallSideEffect : ~m? -# 431| v431_5(void) = ^IndirectReadSideEffect[-1] : &:r431_1, ~m? -# 431| mu431_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r431_1 -# 431| r431_7(bool) = Constant[0] : -# 431| v431_8(void) = ConditionalBranch : r431_7 +# 35| Block 138 +# 35| r35_1919(glval) = VariableAddress[x137] : +# 35| mu35_1920(String) = Uninitialized[x137] : &:r35_1919 +# 35| r35_1921(glval) = FunctionAddress[String] : +# 35| v35_1922(void) = Call[String] : func:r35_1921, this:r35_1919 +# 35| mu35_1923(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1919 +# 35| r35_1925(glval) = VariableAddress[x137] : +# 35| r35_1926(glval) = FunctionAddress[~String] : +# 35| v35_1927(void) = Call[~String] : func:r35_1926, this:r35_1925 +# 35| mu35_1928(unknown) = ^CallSideEffect : ~m? +# 35| v35_1929(void) = ^IndirectReadSideEffect[-1] : &:r35_1925, ~m? +# 35| mu35_1930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1925 +# 35| r35_1931(bool) = Constant[0] : +# 35| v35_1932(void) = ConditionalBranch : r35_1931 #-----| False -> Block 139 #-----| True (back edge) -> Block 138 -# 433| Block 139 -# 433| r433_1(glval) = VariableAddress[x138] : -# 433| mu433_2(String) = Uninitialized[x138] : &:r433_1 -# 433| r433_3(glval) = FunctionAddress[String] : -# 433| v433_4(void) = Call[String] : func:r433_3, this:r433_1 -# 433| mu433_5(unknown) = ^CallSideEffect : ~m? -# 433| mu433_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r433_1 -# 434| r434_1(glval) = VariableAddress[x138] : -# 434| r434_2(glval) = FunctionAddress[~String] : -# 434| v434_3(void) = Call[~String] : func:r434_2, this:r434_1 -# 434| mu434_4(unknown) = ^CallSideEffect : ~m? -# 434| v434_5(void) = ^IndirectReadSideEffect[-1] : &:r434_1, ~m? -# 434| mu434_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r434_1 -# 434| r434_7(bool) = Constant[0] : -# 434| v434_8(void) = ConditionalBranch : r434_7 +# 35| Block 139 +# 35| r35_1933(glval) = VariableAddress[x138] : +# 35| mu35_1934(String) = Uninitialized[x138] : &:r35_1933 +# 35| r35_1935(glval) = FunctionAddress[String] : +# 35| v35_1936(void) = Call[String] : func:r35_1935, this:r35_1933 +# 35| mu35_1937(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1933 +# 35| r35_1939(glval) = VariableAddress[x138] : +# 35| r35_1940(glval) = FunctionAddress[~String] : +# 35| v35_1941(void) = Call[~String] : func:r35_1940, this:r35_1939 +# 35| mu35_1942(unknown) = ^CallSideEffect : ~m? +# 35| v35_1943(void) = ^IndirectReadSideEffect[-1] : &:r35_1939, ~m? +# 35| mu35_1944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1939 +# 35| r35_1945(bool) = Constant[0] : +# 35| v35_1946(void) = ConditionalBranch : r35_1945 #-----| False -> Block 140 #-----| True (back edge) -> Block 139 -# 436| Block 140 -# 436| r436_1(glval) = VariableAddress[x139] : -# 436| mu436_2(String) = Uninitialized[x139] : &:r436_1 -# 436| r436_3(glval) = FunctionAddress[String] : -# 436| v436_4(void) = Call[String] : func:r436_3, this:r436_1 -# 436| mu436_5(unknown) = ^CallSideEffect : ~m? -# 436| mu436_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r436_1 -# 437| r437_1(glval) = VariableAddress[x139] : -# 437| r437_2(glval) = FunctionAddress[~String] : -# 437| v437_3(void) = Call[~String] : func:r437_2, this:r437_1 -# 437| mu437_4(unknown) = ^CallSideEffect : ~m? -# 437| v437_5(void) = ^IndirectReadSideEffect[-1] : &:r437_1, ~m? -# 437| mu437_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r437_1 -# 437| r437_7(bool) = Constant[0] : -# 437| v437_8(void) = ConditionalBranch : r437_7 +# 35| Block 140 +# 35| r35_1947(glval) = VariableAddress[x139] : +# 35| mu35_1948(String) = Uninitialized[x139] : &:r35_1947 +# 35| r35_1949(glval) = FunctionAddress[String] : +# 35| v35_1950(void) = Call[String] : func:r35_1949, this:r35_1947 +# 35| mu35_1951(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1947 +# 35| r35_1953(glval) = VariableAddress[x139] : +# 35| r35_1954(glval) = FunctionAddress[~String] : +# 35| v35_1955(void) = Call[~String] : func:r35_1954, this:r35_1953 +# 35| mu35_1956(unknown) = ^CallSideEffect : ~m? +# 35| v35_1957(void) = ^IndirectReadSideEffect[-1] : &:r35_1953, ~m? +# 35| mu35_1958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1953 +# 35| r35_1959(bool) = Constant[0] : +# 35| v35_1960(void) = ConditionalBranch : r35_1959 #-----| False -> Block 141 #-----| True (back edge) -> Block 140 -# 439| Block 141 -# 439| r439_1(glval) = VariableAddress[x140] : -# 439| mu439_2(String) = Uninitialized[x140] : &:r439_1 -# 439| r439_3(glval) = FunctionAddress[String] : -# 439| v439_4(void) = Call[String] : func:r439_3, this:r439_1 -# 439| mu439_5(unknown) = ^CallSideEffect : ~m? -# 439| mu439_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r439_1 -# 440| r440_1(glval) = VariableAddress[x140] : -# 440| r440_2(glval) = FunctionAddress[~String] : -# 440| v440_3(void) = Call[~String] : func:r440_2, this:r440_1 -# 440| mu440_4(unknown) = ^CallSideEffect : ~m? -# 440| v440_5(void) = ^IndirectReadSideEffect[-1] : &:r440_1, ~m? -# 440| mu440_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r440_1 -# 440| r440_7(bool) = Constant[0] : -# 440| v440_8(void) = ConditionalBranch : r440_7 +# 35| Block 141 +# 35| r35_1961(glval) = VariableAddress[x140] : +# 35| mu35_1962(String) = Uninitialized[x140] : &:r35_1961 +# 35| r35_1963(glval) = FunctionAddress[String] : +# 35| v35_1964(void) = Call[String] : func:r35_1963, this:r35_1961 +# 35| mu35_1965(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1961 +# 35| r35_1967(glval) = VariableAddress[x140] : +# 35| r35_1968(glval) = FunctionAddress[~String] : +# 35| v35_1969(void) = Call[~String] : func:r35_1968, this:r35_1967 +# 35| mu35_1970(unknown) = ^CallSideEffect : ~m? +# 35| v35_1971(void) = ^IndirectReadSideEffect[-1] : &:r35_1967, ~m? +# 35| mu35_1972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1967 +# 35| r35_1973(bool) = Constant[0] : +# 35| v35_1974(void) = ConditionalBranch : r35_1973 #-----| False -> Block 142 #-----| True (back edge) -> Block 141 -# 442| Block 142 -# 442| r442_1(glval) = VariableAddress[x141] : -# 442| mu442_2(String) = Uninitialized[x141] : &:r442_1 -# 442| r442_3(glval) = FunctionAddress[String] : -# 442| v442_4(void) = Call[String] : func:r442_3, this:r442_1 -# 442| mu442_5(unknown) = ^CallSideEffect : ~m? -# 442| mu442_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r442_1 -# 443| r443_1(glval) = VariableAddress[x141] : -# 443| r443_2(glval) = FunctionAddress[~String] : -# 443| v443_3(void) = Call[~String] : func:r443_2, this:r443_1 -# 443| mu443_4(unknown) = ^CallSideEffect : ~m? -# 443| v443_5(void) = ^IndirectReadSideEffect[-1] : &:r443_1, ~m? -# 443| mu443_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r443_1 -# 443| r443_7(bool) = Constant[0] : -# 443| v443_8(void) = ConditionalBranch : r443_7 +# 35| Block 142 +# 35| r35_1975(glval) = VariableAddress[x141] : +# 35| mu35_1976(String) = Uninitialized[x141] : &:r35_1975 +# 35| r35_1977(glval) = FunctionAddress[String] : +# 35| v35_1978(void) = Call[String] : func:r35_1977, this:r35_1975 +# 35| mu35_1979(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1975 +# 35| r35_1981(glval) = VariableAddress[x141] : +# 35| r35_1982(glval) = FunctionAddress[~String] : +# 35| v35_1983(void) = Call[~String] : func:r35_1982, this:r35_1981 +# 35| mu35_1984(unknown) = ^CallSideEffect : ~m? +# 35| v35_1985(void) = ^IndirectReadSideEffect[-1] : &:r35_1981, ~m? +# 35| mu35_1986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1981 +# 35| r35_1987(bool) = Constant[0] : +# 35| v35_1988(void) = ConditionalBranch : r35_1987 #-----| False -> Block 143 #-----| True (back edge) -> Block 142 -# 445| Block 143 -# 445| r445_1(glval) = VariableAddress[x142] : -# 445| mu445_2(String) = Uninitialized[x142] : &:r445_1 -# 445| r445_3(glval) = FunctionAddress[String] : -# 445| v445_4(void) = Call[String] : func:r445_3, this:r445_1 -# 445| mu445_5(unknown) = ^CallSideEffect : ~m? -# 445| mu445_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r445_1 -# 446| r446_1(glval) = VariableAddress[x142] : -# 446| r446_2(glval) = FunctionAddress[~String] : -# 446| v446_3(void) = Call[~String] : func:r446_2, this:r446_1 -# 446| mu446_4(unknown) = ^CallSideEffect : ~m? -# 446| v446_5(void) = ^IndirectReadSideEffect[-1] : &:r446_1, ~m? -# 446| mu446_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r446_1 -# 446| r446_7(bool) = Constant[0] : -# 446| v446_8(void) = ConditionalBranch : r446_7 +# 35| Block 143 +# 35| r35_1989(glval) = VariableAddress[x142] : +# 35| mu35_1990(String) = Uninitialized[x142] : &:r35_1989 +# 35| r35_1991(glval) = FunctionAddress[String] : +# 35| v35_1992(void) = Call[String] : func:r35_1991, this:r35_1989 +# 35| mu35_1993(unknown) = ^CallSideEffect : ~m? +# 35| mu35_1994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1989 +# 35| r35_1995(glval) = VariableAddress[x142] : +# 35| r35_1996(glval) = FunctionAddress[~String] : +# 35| v35_1997(void) = Call[~String] : func:r35_1996, this:r35_1995 +# 35| mu35_1998(unknown) = ^CallSideEffect : ~m? +# 35| v35_1999(void) = ^IndirectReadSideEffect[-1] : &:r35_1995, ~m? +# 35| mu35_2000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_1995 +# 35| r35_2001(bool) = Constant[0] : +# 35| v35_2002(void) = ConditionalBranch : r35_2001 #-----| False -> Block 144 #-----| True (back edge) -> Block 143 -# 448| Block 144 -# 448| r448_1(glval) = VariableAddress[x143] : -# 448| mu448_2(String) = Uninitialized[x143] : &:r448_1 -# 448| r448_3(glval) = FunctionAddress[String] : -# 448| v448_4(void) = Call[String] : func:r448_3, this:r448_1 -# 448| mu448_5(unknown) = ^CallSideEffect : ~m? -# 448| mu448_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r448_1 -# 449| r449_1(glval) = VariableAddress[x143] : -# 449| r449_2(glval) = FunctionAddress[~String] : -# 449| v449_3(void) = Call[~String] : func:r449_2, this:r449_1 -# 449| mu449_4(unknown) = ^CallSideEffect : ~m? -# 449| v449_5(void) = ^IndirectReadSideEffect[-1] : &:r449_1, ~m? -# 449| mu449_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r449_1 -# 449| r449_7(bool) = Constant[0] : -# 449| v449_8(void) = ConditionalBranch : r449_7 +# 35| Block 144 +# 35| r35_2003(glval) = VariableAddress[x143] : +# 35| mu35_2004(String) = Uninitialized[x143] : &:r35_2003 +# 35| r35_2005(glval) = FunctionAddress[String] : +# 35| v35_2006(void) = Call[String] : func:r35_2005, this:r35_2003 +# 35| mu35_2007(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2003 +# 35| r35_2009(glval) = VariableAddress[x143] : +# 35| r35_2010(glval) = FunctionAddress[~String] : +# 35| v35_2011(void) = Call[~String] : func:r35_2010, this:r35_2009 +# 35| mu35_2012(unknown) = ^CallSideEffect : ~m? +# 35| v35_2013(void) = ^IndirectReadSideEffect[-1] : &:r35_2009, ~m? +# 35| mu35_2014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2009 +# 35| r35_2015(bool) = Constant[0] : +# 35| v35_2016(void) = ConditionalBranch : r35_2015 #-----| False -> Block 145 #-----| True (back edge) -> Block 144 -# 451| Block 145 -# 451| r451_1(glval) = VariableAddress[x144] : -# 451| mu451_2(String) = Uninitialized[x144] : &:r451_1 -# 451| r451_3(glval) = FunctionAddress[String] : -# 451| v451_4(void) = Call[String] : func:r451_3, this:r451_1 -# 451| mu451_5(unknown) = ^CallSideEffect : ~m? -# 451| mu451_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r451_1 -# 452| r452_1(glval) = VariableAddress[x144] : -# 452| r452_2(glval) = FunctionAddress[~String] : -# 452| v452_3(void) = Call[~String] : func:r452_2, this:r452_1 -# 452| mu452_4(unknown) = ^CallSideEffect : ~m? -# 452| v452_5(void) = ^IndirectReadSideEffect[-1] : &:r452_1, ~m? -# 452| mu452_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r452_1 -# 452| r452_7(bool) = Constant[0] : -# 452| v452_8(void) = ConditionalBranch : r452_7 +# 35| Block 145 +# 35| r35_2017(glval) = VariableAddress[x144] : +# 35| mu35_2018(String) = Uninitialized[x144] : &:r35_2017 +# 35| r35_2019(glval) = FunctionAddress[String] : +# 35| v35_2020(void) = Call[String] : func:r35_2019, this:r35_2017 +# 35| mu35_2021(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2017 +# 35| r35_2023(glval) = VariableAddress[x144] : +# 35| r35_2024(glval) = FunctionAddress[~String] : +# 35| v35_2025(void) = Call[~String] : func:r35_2024, this:r35_2023 +# 35| mu35_2026(unknown) = ^CallSideEffect : ~m? +# 35| v35_2027(void) = ^IndirectReadSideEffect[-1] : &:r35_2023, ~m? +# 35| mu35_2028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2023 +# 35| r35_2029(bool) = Constant[0] : +# 35| v35_2030(void) = ConditionalBranch : r35_2029 #-----| False -> Block 146 #-----| True (back edge) -> Block 145 -# 454| Block 146 -# 454| r454_1(glval) = VariableAddress[x145] : -# 454| mu454_2(String) = Uninitialized[x145] : &:r454_1 -# 454| r454_3(glval) = FunctionAddress[String] : -# 454| v454_4(void) = Call[String] : func:r454_3, this:r454_1 -# 454| mu454_5(unknown) = ^CallSideEffect : ~m? -# 454| mu454_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r454_1 -# 455| r455_1(glval) = VariableAddress[x145] : -# 455| r455_2(glval) = FunctionAddress[~String] : -# 455| v455_3(void) = Call[~String] : func:r455_2, this:r455_1 -# 455| mu455_4(unknown) = ^CallSideEffect : ~m? -# 455| v455_5(void) = ^IndirectReadSideEffect[-1] : &:r455_1, ~m? -# 455| mu455_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r455_1 -# 455| r455_7(bool) = Constant[0] : -# 455| v455_8(void) = ConditionalBranch : r455_7 +# 35| Block 146 +# 35| r35_2031(glval) = VariableAddress[x145] : +# 35| mu35_2032(String) = Uninitialized[x145] : &:r35_2031 +# 35| r35_2033(glval) = FunctionAddress[String] : +# 35| v35_2034(void) = Call[String] : func:r35_2033, this:r35_2031 +# 35| mu35_2035(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2031 +# 35| r35_2037(glval) = VariableAddress[x145] : +# 35| r35_2038(glval) = FunctionAddress[~String] : +# 35| v35_2039(void) = Call[~String] : func:r35_2038, this:r35_2037 +# 35| mu35_2040(unknown) = ^CallSideEffect : ~m? +# 35| v35_2041(void) = ^IndirectReadSideEffect[-1] : &:r35_2037, ~m? +# 35| mu35_2042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2037 +# 35| r35_2043(bool) = Constant[0] : +# 35| v35_2044(void) = ConditionalBranch : r35_2043 #-----| False -> Block 147 #-----| True (back edge) -> Block 146 -# 457| Block 147 -# 457| r457_1(glval) = VariableAddress[x146] : -# 457| mu457_2(String) = Uninitialized[x146] : &:r457_1 -# 457| r457_3(glval) = FunctionAddress[String] : -# 457| v457_4(void) = Call[String] : func:r457_3, this:r457_1 -# 457| mu457_5(unknown) = ^CallSideEffect : ~m? -# 457| mu457_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r457_1 -# 458| r458_1(glval) = VariableAddress[x146] : -# 458| r458_2(glval) = FunctionAddress[~String] : -# 458| v458_3(void) = Call[~String] : func:r458_2, this:r458_1 -# 458| mu458_4(unknown) = ^CallSideEffect : ~m? -# 458| v458_5(void) = ^IndirectReadSideEffect[-1] : &:r458_1, ~m? -# 458| mu458_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r458_1 -# 458| r458_7(bool) = Constant[0] : -# 458| v458_8(void) = ConditionalBranch : r458_7 +# 35| Block 147 +# 35| r35_2045(glval) = VariableAddress[x146] : +# 35| mu35_2046(String) = Uninitialized[x146] : &:r35_2045 +# 35| r35_2047(glval) = FunctionAddress[String] : +# 35| v35_2048(void) = Call[String] : func:r35_2047, this:r35_2045 +# 35| mu35_2049(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2045 +# 35| r35_2051(glval) = VariableAddress[x146] : +# 35| r35_2052(glval) = FunctionAddress[~String] : +# 35| v35_2053(void) = Call[~String] : func:r35_2052, this:r35_2051 +# 35| mu35_2054(unknown) = ^CallSideEffect : ~m? +# 35| v35_2055(void) = ^IndirectReadSideEffect[-1] : &:r35_2051, ~m? +# 35| mu35_2056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2051 +# 35| r35_2057(bool) = Constant[0] : +# 35| v35_2058(void) = ConditionalBranch : r35_2057 #-----| False -> Block 148 #-----| True (back edge) -> Block 147 -# 460| Block 148 -# 460| r460_1(glval) = VariableAddress[x147] : -# 460| mu460_2(String) = Uninitialized[x147] : &:r460_1 -# 460| r460_3(glval) = FunctionAddress[String] : -# 460| v460_4(void) = Call[String] : func:r460_3, this:r460_1 -# 460| mu460_5(unknown) = ^CallSideEffect : ~m? -# 460| mu460_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r460_1 -# 461| r461_1(glval) = VariableAddress[x147] : -# 461| r461_2(glval) = FunctionAddress[~String] : -# 461| v461_3(void) = Call[~String] : func:r461_2, this:r461_1 -# 461| mu461_4(unknown) = ^CallSideEffect : ~m? -# 461| v461_5(void) = ^IndirectReadSideEffect[-1] : &:r461_1, ~m? -# 461| mu461_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r461_1 -# 461| r461_7(bool) = Constant[0] : -# 461| v461_8(void) = ConditionalBranch : r461_7 +# 35| Block 148 +# 35| r35_2059(glval) = VariableAddress[x147] : +# 35| mu35_2060(String) = Uninitialized[x147] : &:r35_2059 +# 35| r35_2061(glval) = FunctionAddress[String] : +# 35| v35_2062(void) = Call[String] : func:r35_2061, this:r35_2059 +# 35| mu35_2063(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2059 +# 35| r35_2065(glval) = VariableAddress[x147] : +# 35| r35_2066(glval) = FunctionAddress[~String] : +# 35| v35_2067(void) = Call[~String] : func:r35_2066, this:r35_2065 +# 35| mu35_2068(unknown) = ^CallSideEffect : ~m? +# 35| v35_2069(void) = ^IndirectReadSideEffect[-1] : &:r35_2065, ~m? +# 35| mu35_2070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2065 +# 35| r35_2071(bool) = Constant[0] : +# 35| v35_2072(void) = ConditionalBranch : r35_2071 #-----| False -> Block 149 #-----| True (back edge) -> Block 148 -# 463| Block 149 -# 463| r463_1(glval) = VariableAddress[x148] : -# 463| mu463_2(String) = Uninitialized[x148] : &:r463_1 -# 463| r463_3(glval) = FunctionAddress[String] : -# 463| v463_4(void) = Call[String] : func:r463_3, this:r463_1 -# 463| mu463_5(unknown) = ^CallSideEffect : ~m? -# 463| mu463_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r463_1 -# 464| r464_1(glval) = VariableAddress[x148] : -# 464| r464_2(glval) = FunctionAddress[~String] : -# 464| v464_3(void) = Call[~String] : func:r464_2, this:r464_1 -# 464| mu464_4(unknown) = ^CallSideEffect : ~m? -# 464| v464_5(void) = ^IndirectReadSideEffect[-1] : &:r464_1, ~m? -# 464| mu464_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r464_1 -# 464| r464_7(bool) = Constant[0] : -# 464| v464_8(void) = ConditionalBranch : r464_7 +# 35| Block 149 +# 35| r35_2073(glval) = VariableAddress[x148] : +# 35| mu35_2074(String) = Uninitialized[x148] : &:r35_2073 +# 35| r35_2075(glval) = FunctionAddress[String] : +# 35| v35_2076(void) = Call[String] : func:r35_2075, this:r35_2073 +# 35| mu35_2077(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2073 +# 35| r35_2079(glval) = VariableAddress[x148] : +# 35| r35_2080(glval) = FunctionAddress[~String] : +# 35| v35_2081(void) = Call[~String] : func:r35_2080, this:r35_2079 +# 35| mu35_2082(unknown) = ^CallSideEffect : ~m? +# 35| v35_2083(void) = ^IndirectReadSideEffect[-1] : &:r35_2079, ~m? +# 35| mu35_2084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2079 +# 35| r35_2085(bool) = Constant[0] : +# 35| v35_2086(void) = ConditionalBranch : r35_2085 #-----| False -> Block 150 #-----| True (back edge) -> Block 149 -# 466| Block 150 -# 466| r466_1(glval) = VariableAddress[x149] : -# 466| mu466_2(String) = Uninitialized[x149] : &:r466_1 -# 466| r466_3(glval) = FunctionAddress[String] : -# 466| v466_4(void) = Call[String] : func:r466_3, this:r466_1 -# 466| mu466_5(unknown) = ^CallSideEffect : ~m? -# 466| mu466_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r466_1 -# 467| r467_1(glval) = VariableAddress[x149] : -# 467| r467_2(glval) = FunctionAddress[~String] : -# 467| v467_3(void) = Call[~String] : func:r467_2, this:r467_1 -# 467| mu467_4(unknown) = ^CallSideEffect : ~m? -# 467| v467_5(void) = ^IndirectReadSideEffect[-1] : &:r467_1, ~m? -# 467| mu467_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r467_1 -# 467| r467_7(bool) = Constant[0] : -# 467| v467_8(void) = ConditionalBranch : r467_7 +# 35| Block 150 +# 35| r35_2087(glval) = VariableAddress[x149] : +# 35| mu35_2088(String) = Uninitialized[x149] : &:r35_2087 +# 35| r35_2089(glval) = FunctionAddress[String] : +# 35| v35_2090(void) = Call[String] : func:r35_2089, this:r35_2087 +# 35| mu35_2091(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2087 +# 35| r35_2093(glval) = VariableAddress[x149] : +# 35| r35_2094(glval) = FunctionAddress[~String] : +# 35| v35_2095(void) = Call[~String] : func:r35_2094, this:r35_2093 +# 35| mu35_2096(unknown) = ^CallSideEffect : ~m? +# 35| v35_2097(void) = ^IndirectReadSideEffect[-1] : &:r35_2093, ~m? +# 35| mu35_2098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2093 +# 35| r35_2099(bool) = Constant[0] : +# 35| v35_2100(void) = ConditionalBranch : r35_2099 #-----| False -> Block 151 #-----| True (back edge) -> Block 150 -# 469| Block 151 -# 469| r469_1(glval) = VariableAddress[x150] : -# 469| mu469_2(String) = Uninitialized[x150] : &:r469_1 -# 469| r469_3(glval) = FunctionAddress[String] : -# 469| v469_4(void) = Call[String] : func:r469_3, this:r469_1 -# 469| mu469_5(unknown) = ^CallSideEffect : ~m? -# 469| mu469_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r469_1 -# 470| r470_1(glval) = VariableAddress[x150] : -# 470| r470_2(glval) = FunctionAddress[~String] : -# 470| v470_3(void) = Call[~String] : func:r470_2, this:r470_1 -# 470| mu470_4(unknown) = ^CallSideEffect : ~m? -# 470| v470_5(void) = ^IndirectReadSideEffect[-1] : &:r470_1, ~m? -# 470| mu470_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r470_1 -# 470| r470_7(bool) = Constant[0] : -# 470| v470_8(void) = ConditionalBranch : r470_7 +# 35| Block 151 +# 35| r35_2101(glval) = VariableAddress[x150] : +# 35| mu35_2102(String) = Uninitialized[x150] : &:r35_2101 +# 35| r35_2103(glval) = FunctionAddress[String] : +# 35| v35_2104(void) = Call[String] : func:r35_2103, this:r35_2101 +# 35| mu35_2105(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2101 +# 35| r35_2107(glval) = VariableAddress[x150] : +# 35| r35_2108(glval) = FunctionAddress[~String] : +# 35| v35_2109(void) = Call[~String] : func:r35_2108, this:r35_2107 +# 35| mu35_2110(unknown) = ^CallSideEffect : ~m? +# 35| v35_2111(void) = ^IndirectReadSideEffect[-1] : &:r35_2107, ~m? +# 35| mu35_2112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2107 +# 35| r35_2113(bool) = Constant[0] : +# 35| v35_2114(void) = ConditionalBranch : r35_2113 #-----| False -> Block 152 #-----| True (back edge) -> Block 151 -# 472| Block 152 -# 472| r472_1(glval) = VariableAddress[x151] : -# 472| mu472_2(String) = Uninitialized[x151] : &:r472_1 -# 472| r472_3(glval) = FunctionAddress[String] : -# 472| v472_4(void) = Call[String] : func:r472_3, this:r472_1 -# 472| mu472_5(unknown) = ^CallSideEffect : ~m? -# 472| mu472_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r472_1 -# 473| r473_1(glval) = VariableAddress[x151] : -# 473| r473_2(glval) = FunctionAddress[~String] : -# 473| v473_3(void) = Call[~String] : func:r473_2, this:r473_1 -# 473| mu473_4(unknown) = ^CallSideEffect : ~m? -# 473| v473_5(void) = ^IndirectReadSideEffect[-1] : &:r473_1, ~m? -# 473| mu473_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r473_1 -# 473| r473_7(bool) = Constant[0] : -# 473| v473_8(void) = ConditionalBranch : r473_7 +# 35| Block 152 +# 35| r35_2115(glval) = VariableAddress[x151] : +# 35| mu35_2116(String) = Uninitialized[x151] : &:r35_2115 +# 35| r35_2117(glval) = FunctionAddress[String] : +# 35| v35_2118(void) = Call[String] : func:r35_2117, this:r35_2115 +# 35| mu35_2119(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2115 +# 35| r35_2121(glval) = VariableAddress[x151] : +# 35| r35_2122(glval) = FunctionAddress[~String] : +# 35| v35_2123(void) = Call[~String] : func:r35_2122, this:r35_2121 +# 35| mu35_2124(unknown) = ^CallSideEffect : ~m? +# 35| v35_2125(void) = ^IndirectReadSideEffect[-1] : &:r35_2121, ~m? +# 35| mu35_2126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2121 +# 35| r35_2127(bool) = Constant[0] : +# 35| v35_2128(void) = ConditionalBranch : r35_2127 #-----| False -> Block 153 #-----| True (back edge) -> Block 152 -# 475| Block 153 -# 475| r475_1(glval) = VariableAddress[x152] : -# 475| mu475_2(String) = Uninitialized[x152] : &:r475_1 -# 475| r475_3(glval) = FunctionAddress[String] : -# 475| v475_4(void) = Call[String] : func:r475_3, this:r475_1 -# 475| mu475_5(unknown) = ^CallSideEffect : ~m? -# 475| mu475_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r475_1 -# 476| r476_1(glval) = VariableAddress[x152] : -# 476| r476_2(glval) = FunctionAddress[~String] : -# 476| v476_3(void) = Call[~String] : func:r476_2, this:r476_1 -# 476| mu476_4(unknown) = ^CallSideEffect : ~m? -# 476| v476_5(void) = ^IndirectReadSideEffect[-1] : &:r476_1, ~m? -# 476| mu476_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r476_1 -# 476| r476_7(bool) = Constant[0] : -# 476| v476_8(void) = ConditionalBranch : r476_7 +# 35| Block 153 +# 35| r35_2129(glval) = VariableAddress[x152] : +# 35| mu35_2130(String) = Uninitialized[x152] : &:r35_2129 +# 35| r35_2131(glval) = FunctionAddress[String] : +# 35| v35_2132(void) = Call[String] : func:r35_2131, this:r35_2129 +# 35| mu35_2133(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2129 +# 35| r35_2135(glval) = VariableAddress[x152] : +# 35| r35_2136(glval) = FunctionAddress[~String] : +# 35| v35_2137(void) = Call[~String] : func:r35_2136, this:r35_2135 +# 35| mu35_2138(unknown) = ^CallSideEffect : ~m? +# 35| v35_2139(void) = ^IndirectReadSideEffect[-1] : &:r35_2135, ~m? +# 35| mu35_2140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2135 +# 35| r35_2141(bool) = Constant[0] : +# 35| v35_2142(void) = ConditionalBranch : r35_2141 #-----| False -> Block 154 #-----| True (back edge) -> Block 153 -# 478| Block 154 -# 478| r478_1(glval) = VariableAddress[x153] : -# 478| mu478_2(String) = Uninitialized[x153] : &:r478_1 -# 478| r478_3(glval) = FunctionAddress[String] : -# 478| v478_4(void) = Call[String] : func:r478_3, this:r478_1 -# 478| mu478_5(unknown) = ^CallSideEffect : ~m? -# 478| mu478_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r478_1 -# 479| r479_1(glval) = VariableAddress[x153] : -# 479| r479_2(glval) = FunctionAddress[~String] : -# 479| v479_3(void) = Call[~String] : func:r479_2, this:r479_1 -# 479| mu479_4(unknown) = ^CallSideEffect : ~m? -# 479| v479_5(void) = ^IndirectReadSideEffect[-1] : &:r479_1, ~m? -# 479| mu479_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r479_1 -# 479| r479_7(bool) = Constant[0] : -# 479| v479_8(void) = ConditionalBranch : r479_7 +# 35| Block 154 +# 35| r35_2143(glval) = VariableAddress[x153] : +# 35| mu35_2144(String) = Uninitialized[x153] : &:r35_2143 +# 35| r35_2145(glval) = FunctionAddress[String] : +# 35| v35_2146(void) = Call[String] : func:r35_2145, this:r35_2143 +# 35| mu35_2147(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2143 +# 35| r35_2149(glval) = VariableAddress[x153] : +# 35| r35_2150(glval) = FunctionAddress[~String] : +# 35| v35_2151(void) = Call[~String] : func:r35_2150, this:r35_2149 +# 35| mu35_2152(unknown) = ^CallSideEffect : ~m? +# 35| v35_2153(void) = ^IndirectReadSideEffect[-1] : &:r35_2149, ~m? +# 35| mu35_2154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2149 +# 35| r35_2155(bool) = Constant[0] : +# 35| v35_2156(void) = ConditionalBranch : r35_2155 #-----| False -> Block 155 #-----| True (back edge) -> Block 154 -# 481| Block 155 -# 481| r481_1(glval) = VariableAddress[x154] : -# 481| mu481_2(String) = Uninitialized[x154] : &:r481_1 -# 481| r481_3(glval) = FunctionAddress[String] : -# 481| v481_4(void) = Call[String] : func:r481_3, this:r481_1 -# 481| mu481_5(unknown) = ^CallSideEffect : ~m? -# 481| mu481_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r481_1 -# 482| r482_1(glval) = VariableAddress[x154] : -# 482| r482_2(glval) = FunctionAddress[~String] : -# 482| v482_3(void) = Call[~String] : func:r482_2, this:r482_1 -# 482| mu482_4(unknown) = ^CallSideEffect : ~m? -# 482| v482_5(void) = ^IndirectReadSideEffect[-1] : &:r482_1, ~m? -# 482| mu482_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r482_1 -# 482| r482_7(bool) = Constant[0] : -# 482| v482_8(void) = ConditionalBranch : r482_7 +# 35| Block 155 +# 35| r35_2157(glval) = VariableAddress[x154] : +# 35| mu35_2158(String) = Uninitialized[x154] : &:r35_2157 +# 35| r35_2159(glval) = FunctionAddress[String] : +# 35| v35_2160(void) = Call[String] : func:r35_2159, this:r35_2157 +# 35| mu35_2161(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2157 +# 35| r35_2163(glval) = VariableAddress[x154] : +# 35| r35_2164(glval) = FunctionAddress[~String] : +# 35| v35_2165(void) = Call[~String] : func:r35_2164, this:r35_2163 +# 35| mu35_2166(unknown) = ^CallSideEffect : ~m? +# 35| v35_2167(void) = ^IndirectReadSideEffect[-1] : &:r35_2163, ~m? +# 35| mu35_2168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2163 +# 35| r35_2169(bool) = Constant[0] : +# 35| v35_2170(void) = ConditionalBranch : r35_2169 #-----| False -> Block 156 #-----| True (back edge) -> Block 155 -# 484| Block 156 -# 484| r484_1(glval) = VariableAddress[x155] : -# 484| mu484_2(String) = Uninitialized[x155] : &:r484_1 -# 484| r484_3(glval) = FunctionAddress[String] : -# 484| v484_4(void) = Call[String] : func:r484_3, this:r484_1 -# 484| mu484_5(unknown) = ^CallSideEffect : ~m? -# 484| mu484_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r484_1 -# 485| r485_1(glval) = VariableAddress[x155] : -# 485| r485_2(glval) = FunctionAddress[~String] : -# 485| v485_3(void) = Call[~String] : func:r485_2, this:r485_1 -# 485| mu485_4(unknown) = ^CallSideEffect : ~m? -# 485| v485_5(void) = ^IndirectReadSideEffect[-1] : &:r485_1, ~m? -# 485| mu485_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r485_1 -# 485| r485_7(bool) = Constant[0] : -# 485| v485_8(void) = ConditionalBranch : r485_7 +# 35| Block 156 +# 35| r35_2171(glval) = VariableAddress[x155] : +# 35| mu35_2172(String) = Uninitialized[x155] : &:r35_2171 +# 35| r35_2173(glval) = FunctionAddress[String] : +# 35| v35_2174(void) = Call[String] : func:r35_2173, this:r35_2171 +# 35| mu35_2175(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2171 +# 35| r35_2177(glval) = VariableAddress[x155] : +# 35| r35_2178(glval) = FunctionAddress[~String] : +# 35| v35_2179(void) = Call[~String] : func:r35_2178, this:r35_2177 +# 35| mu35_2180(unknown) = ^CallSideEffect : ~m? +# 35| v35_2181(void) = ^IndirectReadSideEffect[-1] : &:r35_2177, ~m? +# 35| mu35_2182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2177 +# 35| r35_2183(bool) = Constant[0] : +# 35| v35_2184(void) = ConditionalBranch : r35_2183 #-----| False -> Block 157 #-----| True (back edge) -> Block 156 -# 487| Block 157 -# 487| r487_1(glval) = VariableAddress[x156] : -# 487| mu487_2(String) = Uninitialized[x156] : &:r487_1 -# 487| r487_3(glval) = FunctionAddress[String] : -# 487| v487_4(void) = Call[String] : func:r487_3, this:r487_1 -# 487| mu487_5(unknown) = ^CallSideEffect : ~m? -# 487| mu487_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r487_1 -# 488| r488_1(glval) = VariableAddress[x156] : -# 488| r488_2(glval) = FunctionAddress[~String] : -# 488| v488_3(void) = Call[~String] : func:r488_2, this:r488_1 -# 488| mu488_4(unknown) = ^CallSideEffect : ~m? -# 488| v488_5(void) = ^IndirectReadSideEffect[-1] : &:r488_1, ~m? -# 488| mu488_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r488_1 -# 488| r488_7(bool) = Constant[0] : -# 488| v488_8(void) = ConditionalBranch : r488_7 +# 35| Block 157 +# 35| r35_2185(glval) = VariableAddress[x156] : +# 35| mu35_2186(String) = Uninitialized[x156] : &:r35_2185 +# 35| r35_2187(glval) = FunctionAddress[String] : +# 35| v35_2188(void) = Call[String] : func:r35_2187, this:r35_2185 +# 35| mu35_2189(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2185 +# 35| r35_2191(glval) = VariableAddress[x156] : +# 35| r35_2192(glval) = FunctionAddress[~String] : +# 35| v35_2193(void) = Call[~String] : func:r35_2192, this:r35_2191 +# 35| mu35_2194(unknown) = ^CallSideEffect : ~m? +# 35| v35_2195(void) = ^IndirectReadSideEffect[-1] : &:r35_2191, ~m? +# 35| mu35_2196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2191 +# 35| r35_2197(bool) = Constant[0] : +# 35| v35_2198(void) = ConditionalBranch : r35_2197 #-----| False -> Block 158 #-----| True (back edge) -> Block 157 -# 490| Block 158 -# 490| r490_1(glval) = VariableAddress[x157] : -# 490| mu490_2(String) = Uninitialized[x157] : &:r490_1 -# 490| r490_3(glval) = FunctionAddress[String] : -# 490| v490_4(void) = Call[String] : func:r490_3, this:r490_1 -# 490| mu490_5(unknown) = ^CallSideEffect : ~m? -# 490| mu490_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r490_1 -# 491| r491_1(glval) = VariableAddress[x157] : -# 491| r491_2(glval) = FunctionAddress[~String] : -# 491| v491_3(void) = Call[~String] : func:r491_2, this:r491_1 -# 491| mu491_4(unknown) = ^CallSideEffect : ~m? -# 491| v491_5(void) = ^IndirectReadSideEffect[-1] : &:r491_1, ~m? -# 491| mu491_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r491_1 -# 491| r491_7(bool) = Constant[0] : -# 491| v491_8(void) = ConditionalBranch : r491_7 +# 35| Block 158 +# 35| r35_2199(glval) = VariableAddress[x157] : +# 35| mu35_2200(String) = Uninitialized[x157] : &:r35_2199 +# 35| r35_2201(glval) = FunctionAddress[String] : +# 35| v35_2202(void) = Call[String] : func:r35_2201, this:r35_2199 +# 35| mu35_2203(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2199 +# 35| r35_2205(glval) = VariableAddress[x157] : +# 35| r35_2206(glval) = FunctionAddress[~String] : +# 35| v35_2207(void) = Call[~String] : func:r35_2206, this:r35_2205 +# 35| mu35_2208(unknown) = ^CallSideEffect : ~m? +# 35| v35_2209(void) = ^IndirectReadSideEffect[-1] : &:r35_2205, ~m? +# 35| mu35_2210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2205 +# 35| r35_2211(bool) = Constant[0] : +# 35| v35_2212(void) = ConditionalBranch : r35_2211 #-----| False -> Block 159 #-----| True (back edge) -> Block 158 -# 493| Block 159 -# 493| r493_1(glval) = VariableAddress[x158] : -# 493| mu493_2(String) = Uninitialized[x158] : &:r493_1 -# 493| r493_3(glval) = FunctionAddress[String] : -# 493| v493_4(void) = Call[String] : func:r493_3, this:r493_1 -# 493| mu493_5(unknown) = ^CallSideEffect : ~m? -# 493| mu493_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r493_1 -# 494| r494_1(glval) = VariableAddress[x158] : -# 494| r494_2(glval) = FunctionAddress[~String] : -# 494| v494_3(void) = Call[~String] : func:r494_2, this:r494_1 -# 494| mu494_4(unknown) = ^CallSideEffect : ~m? -# 494| v494_5(void) = ^IndirectReadSideEffect[-1] : &:r494_1, ~m? -# 494| mu494_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r494_1 -# 494| r494_7(bool) = Constant[0] : -# 494| v494_8(void) = ConditionalBranch : r494_7 +# 35| Block 159 +# 35| r35_2213(glval) = VariableAddress[x158] : +# 35| mu35_2214(String) = Uninitialized[x158] : &:r35_2213 +# 35| r35_2215(glval) = FunctionAddress[String] : +# 35| v35_2216(void) = Call[String] : func:r35_2215, this:r35_2213 +# 35| mu35_2217(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2213 +# 35| r35_2219(glval) = VariableAddress[x158] : +# 35| r35_2220(glval) = FunctionAddress[~String] : +# 35| v35_2221(void) = Call[~String] : func:r35_2220, this:r35_2219 +# 35| mu35_2222(unknown) = ^CallSideEffect : ~m? +# 35| v35_2223(void) = ^IndirectReadSideEffect[-1] : &:r35_2219, ~m? +# 35| mu35_2224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2219 +# 35| r35_2225(bool) = Constant[0] : +# 35| v35_2226(void) = ConditionalBranch : r35_2225 #-----| False -> Block 160 #-----| True (back edge) -> Block 159 -# 496| Block 160 -# 496| r496_1(glval) = VariableAddress[x159] : -# 496| mu496_2(String) = Uninitialized[x159] : &:r496_1 -# 496| r496_3(glval) = FunctionAddress[String] : -# 496| v496_4(void) = Call[String] : func:r496_3, this:r496_1 -# 496| mu496_5(unknown) = ^CallSideEffect : ~m? -# 496| mu496_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r496_1 -# 497| r497_1(glval) = VariableAddress[x159] : -# 497| r497_2(glval) = FunctionAddress[~String] : -# 497| v497_3(void) = Call[~String] : func:r497_2, this:r497_1 -# 497| mu497_4(unknown) = ^CallSideEffect : ~m? -# 497| v497_5(void) = ^IndirectReadSideEffect[-1] : &:r497_1, ~m? -# 497| mu497_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r497_1 -# 497| r497_7(bool) = Constant[0] : -# 497| v497_8(void) = ConditionalBranch : r497_7 +# 35| Block 160 +# 35| r35_2227(glval) = VariableAddress[x159] : +# 35| mu35_2228(String) = Uninitialized[x159] : &:r35_2227 +# 35| r35_2229(glval) = FunctionAddress[String] : +# 35| v35_2230(void) = Call[String] : func:r35_2229, this:r35_2227 +# 35| mu35_2231(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2227 +# 35| r35_2233(glval) = VariableAddress[x159] : +# 35| r35_2234(glval) = FunctionAddress[~String] : +# 35| v35_2235(void) = Call[~String] : func:r35_2234, this:r35_2233 +# 35| mu35_2236(unknown) = ^CallSideEffect : ~m? +# 35| v35_2237(void) = ^IndirectReadSideEffect[-1] : &:r35_2233, ~m? +# 35| mu35_2238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2233 +# 35| r35_2239(bool) = Constant[0] : +# 35| v35_2240(void) = ConditionalBranch : r35_2239 #-----| False -> Block 161 #-----| True (back edge) -> Block 160 -# 499| Block 161 -# 499| r499_1(glval) = VariableAddress[x160] : -# 499| mu499_2(String) = Uninitialized[x160] : &:r499_1 -# 499| r499_3(glval) = FunctionAddress[String] : -# 499| v499_4(void) = Call[String] : func:r499_3, this:r499_1 -# 499| mu499_5(unknown) = ^CallSideEffect : ~m? -# 499| mu499_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r499_1 -# 500| r500_1(glval) = VariableAddress[x160] : -# 500| r500_2(glval) = FunctionAddress[~String] : -# 500| v500_3(void) = Call[~String] : func:r500_2, this:r500_1 -# 500| mu500_4(unknown) = ^CallSideEffect : ~m? -# 500| v500_5(void) = ^IndirectReadSideEffect[-1] : &:r500_1, ~m? -# 500| mu500_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r500_1 -# 500| r500_7(bool) = Constant[0] : -# 500| v500_8(void) = ConditionalBranch : r500_7 +# 35| Block 161 +# 35| r35_2241(glval) = VariableAddress[x160] : +# 35| mu35_2242(String) = Uninitialized[x160] : &:r35_2241 +# 35| r35_2243(glval) = FunctionAddress[String] : +# 35| v35_2244(void) = Call[String] : func:r35_2243, this:r35_2241 +# 35| mu35_2245(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2241 +# 35| r35_2247(glval) = VariableAddress[x160] : +# 35| r35_2248(glval) = FunctionAddress[~String] : +# 35| v35_2249(void) = Call[~String] : func:r35_2248, this:r35_2247 +# 35| mu35_2250(unknown) = ^CallSideEffect : ~m? +# 35| v35_2251(void) = ^IndirectReadSideEffect[-1] : &:r35_2247, ~m? +# 35| mu35_2252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2247 +# 35| r35_2253(bool) = Constant[0] : +# 35| v35_2254(void) = ConditionalBranch : r35_2253 #-----| False -> Block 162 #-----| True (back edge) -> Block 161 -# 502| Block 162 -# 502| r502_1(glval) = VariableAddress[x161] : -# 502| mu502_2(String) = Uninitialized[x161] : &:r502_1 -# 502| r502_3(glval) = FunctionAddress[String] : -# 502| v502_4(void) = Call[String] : func:r502_3, this:r502_1 -# 502| mu502_5(unknown) = ^CallSideEffect : ~m? -# 502| mu502_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r502_1 -# 503| r503_1(glval) = VariableAddress[x161] : -# 503| r503_2(glval) = FunctionAddress[~String] : -# 503| v503_3(void) = Call[~String] : func:r503_2, this:r503_1 -# 503| mu503_4(unknown) = ^CallSideEffect : ~m? -# 503| v503_5(void) = ^IndirectReadSideEffect[-1] : &:r503_1, ~m? -# 503| mu503_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r503_1 -# 503| r503_7(bool) = Constant[0] : -# 503| v503_8(void) = ConditionalBranch : r503_7 +# 35| Block 162 +# 35| r35_2255(glval) = VariableAddress[x161] : +# 35| mu35_2256(String) = Uninitialized[x161] : &:r35_2255 +# 35| r35_2257(glval) = FunctionAddress[String] : +# 35| v35_2258(void) = Call[String] : func:r35_2257, this:r35_2255 +# 35| mu35_2259(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2255 +# 35| r35_2261(glval) = VariableAddress[x161] : +# 35| r35_2262(glval) = FunctionAddress[~String] : +# 35| v35_2263(void) = Call[~String] : func:r35_2262, this:r35_2261 +# 35| mu35_2264(unknown) = ^CallSideEffect : ~m? +# 35| v35_2265(void) = ^IndirectReadSideEffect[-1] : &:r35_2261, ~m? +# 35| mu35_2266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2261 +# 35| r35_2267(bool) = Constant[0] : +# 35| v35_2268(void) = ConditionalBranch : r35_2267 #-----| False -> Block 163 #-----| True (back edge) -> Block 162 -# 505| Block 163 -# 505| r505_1(glval) = VariableAddress[x162] : -# 505| mu505_2(String) = Uninitialized[x162] : &:r505_1 -# 505| r505_3(glval) = FunctionAddress[String] : -# 505| v505_4(void) = Call[String] : func:r505_3, this:r505_1 -# 505| mu505_5(unknown) = ^CallSideEffect : ~m? -# 505| mu505_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r505_1 -# 506| r506_1(glval) = VariableAddress[x162] : -# 506| r506_2(glval) = FunctionAddress[~String] : -# 506| v506_3(void) = Call[~String] : func:r506_2, this:r506_1 -# 506| mu506_4(unknown) = ^CallSideEffect : ~m? -# 506| v506_5(void) = ^IndirectReadSideEffect[-1] : &:r506_1, ~m? -# 506| mu506_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r506_1 -# 506| r506_7(bool) = Constant[0] : -# 506| v506_8(void) = ConditionalBranch : r506_7 +# 35| Block 163 +# 35| r35_2269(glval) = VariableAddress[x162] : +# 35| mu35_2270(String) = Uninitialized[x162] : &:r35_2269 +# 35| r35_2271(glval) = FunctionAddress[String] : +# 35| v35_2272(void) = Call[String] : func:r35_2271, this:r35_2269 +# 35| mu35_2273(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2269 +# 35| r35_2275(glval) = VariableAddress[x162] : +# 35| r35_2276(glval) = FunctionAddress[~String] : +# 35| v35_2277(void) = Call[~String] : func:r35_2276, this:r35_2275 +# 35| mu35_2278(unknown) = ^CallSideEffect : ~m? +# 35| v35_2279(void) = ^IndirectReadSideEffect[-1] : &:r35_2275, ~m? +# 35| mu35_2280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2275 +# 35| r35_2281(bool) = Constant[0] : +# 35| v35_2282(void) = ConditionalBranch : r35_2281 #-----| False -> Block 164 #-----| True (back edge) -> Block 163 -# 508| Block 164 -# 508| r508_1(glval) = VariableAddress[x163] : -# 508| mu508_2(String) = Uninitialized[x163] : &:r508_1 -# 508| r508_3(glval) = FunctionAddress[String] : -# 508| v508_4(void) = Call[String] : func:r508_3, this:r508_1 -# 508| mu508_5(unknown) = ^CallSideEffect : ~m? -# 508| mu508_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r508_1 -# 509| r509_1(glval) = VariableAddress[x163] : -# 509| r509_2(glval) = FunctionAddress[~String] : -# 509| v509_3(void) = Call[~String] : func:r509_2, this:r509_1 -# 509| mu509_4(unknown) = ^CallSideEffect : ~m? -# 509| v509_5(void) = ^IndirectReadSideEffect[-1] : &:r509_1, ~m? -# 509| mu509_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r509_1 -# 509| r509_7(bool) = Constant[0] : -# 509| v509_8(void) = ConditionalBranch : r509_7 +# 35| Block 164 +# 35| r35_2283(glval) = VariableAddress[x163] : +# 35| mu35_2284(String) = Uninitialized[x163] : &:r35_2283 +# 35| r35_2285(glval) = FunctionAddress[String] : +# 35| v35_2286(void) = Call[String] : func:r35_2285, this:r35_2283 +# 35| mu35_2287(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2283 +# 35| r35_2289(glval) = VariableAddress[x163] : +# 35| r35_2290(glval) = FunctionAddress[~String] : +# 35| v35_2291(void) = Call[~String] : func:r35_2290, this:r35_2289 +# 35| mu35_2292(unknown) = ^CallSideEffect : ~m? +# 35| v35_2293(void) = ^IndirectReadSideEffect[-1] : &:r35_2289, ~m? +# 35| mu35_2294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2289 +# 35| r35_2295(bool) = Constant[0] : +# 35| v35_2296(void) = ConditionalBranch : r35_2295 #-----| False -> Block 165 #-----| True (back edge) -> Block 164 -# 511| Block 165 -# 511| r511_1(glval) = VariableAddress[x164] : -# 511| mu511_2(String) = Uninitialized[x164] : &:r511_1 -# 511| r511_3(glval) = FunctionAddress[String] : -# 511| v511_4(void) = Call[String] : func:r511_3, this:r511_1 -# 511| mu511_5(unknown) = ^CallSideEffect : ~m? -# 511| mu511_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r511_1 -# 512| r512_1(glval) = VariableAddress[x164] : -# 512| r512_2(glval) = FunctionAddress[~String] : -# 512| v512_3(void) = Call[~String] : func:r512_2, this:r512_1 -# 512| mu512_4(unknown) = ^CallSideEffect : ~m? -# 512| v512_5(void) = ^IndirectReadSideEffect[-1] : &:r512_1, ~m? -# 512| mu512_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r512_1 -# 512| r512_7(bool) = Constant[0] : -# 512| v512_8(void) = ConditionalBranch : r512_7 +# 35| Block 165 +# 35| r35_2297(glval) = VariableAddress[x164] : +# 35| mu35_2298(String) = Uninitialized[x164] : &:r35_2297 +# 35| r35_2299(glval) = FunctionAddress[String] : +# 35| v35_2300(void) = Call[String] : func:r35_2299, this:r35_2297 +# 35| mu35_2301(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2297 +# 35| r35_2303(glval) = VariableAddress[x164] : +# 35| r35_2304(glval) = FunctionAddress[~String] : +# 35| v35_2305(void) = Call[~String] : func:r35_2304, this:r35_2303 +# 35| mu35_2306(unknown) = ^CallSideEffect : ~m? +# 35| v35_2307(void) = ^IndirectReadSideEffect[-1] : &:r35_2303, ~m? +# 35| mu35_2308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2303 +# 35| r35_2309(bool) = Constant[0] : +# 35| v35_2310(void) = ConditionalBranch : r35_2309 #-----| False -> Block 166 #-----| True (back edge) -> Block 165 -# 514| Block 166 -# 514| r514_1(glval) = VariableAddress[x165] : -# 514| mu514_2(String) = Uninitialized[x165] : &:r514_1 -# 514| r514_3(glval) = FunctionAddress[String] : -# 514| v514_4(void) = Call[String] : func:r514_3, this:r514_1 -# 514| mu514_5(unknown) = ^CallSideEffect : ~m? -# 514| mu514_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r514_1 -# 515| r515_1(glval) = VariableAddress[x165] : -# 515| r515_2(glval) = FunctionAddress[~String] : -# 515| v515_3(void) = Call[~String] : func:r515_2, this:r515_1 -# 515| mu515_4(unknown) = ^CallSideEffect : ~m? -# 515| v515_5(void) = ^IndirectReadSideEffect[-1] : &:r515_1, ~m? -# 515| mu515_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r515_1 -# 515| r515_7(bool) = Constant[0] : -# 515| v515_8(void) = ConditionalBranch : r515_7 +# 35| Block 166 +# 35| r35_2311(glval) = VariableAddress[x165] : +# 35| mu35_2312(String) = Uninitialized[x165] : &:r35_2311 +# 35| r35_2313(glval) = FunctionAddress[String] : +# 35| v35_2314(void) = Call[String] : func:r35_2313, this:r35_2311 +# 35| mu35_2315(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2311 +# 35| r35_2317(glval) = VariableAddress[x165] : +# 35| r35_2318(glval) = FunctionAddress[~String] : +# 35| v35_2319(void) = Call[~String] : func:r35_2318, this:r35_2317 +# 35| mu35_2320(unknown) = ^CallSideEffect : ~m? +# 35| v35_2321(void) = ^IndirectReadSideEffect[-1] : &:r35_2317, ~m? +# 35| mu35_2322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2317 +# 35| r35_2323(bool) = Constant[0] : +# 35| v35_2324(void) = ConditionalBranch : r35_2323 #-----| False -> Block 167 #-----| True (back edge) -> Block 166 -# 517| Block 167 -# 517| r517_1(glval) = VariableAddress[x166] : -# 517| mu517_2(String) = Uninitialized[x166] : &:r517_1 -# 517| r517_3(glval) = FunctionAddress[String] : -# 517| v517_4(void) = Call[String] : func:r517_3, this:r517_1 -# 517| mu517_5(unknown) = ^CallSideEffect : ~m? -# 517| mu517_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r517_1 -# 518| r518_1(glval) = VariableAddress[x166] : -# 518| r518_2(glval) = FunctionAddress[~String] : -# 518| v518_3(void) = Call[~String] : func:r518_2, this:r518_1 -# 518| mu518_4(unknown) = ^CallSideEffect : ~m? -# 518| v518_5(void) = ^IndirectReadSideEffect[-1] : &:r518_1, ~m? -# 518| mu518_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r518_1 -# 518| r518_7(bool) = Constant[0] : -# 518| v518_8(void) = ConditionalBranch : r518_7 +# 35| Block 167 +# 35| r35_2325(glval) = VariableAddress[x166] : +# 35| mu35_2326(String) = Uninitialized[x166] : &:r35_2325 +# 35| r35_2327(glval) = FunctionAddress[String] : +# 35| v35_2328(void) = Call[String] : func:r35_2327, this:r35_2325 +# 35| mu35_2329(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2325 +# 35| r35_2331(glval) = VariableAddress[x166] : +# 35| r35_2332(glval) = FunctionAddress[~String] : +# 35| v35_2333(void) = Call[~String] : func:r35_2332, this:r35_2331 +# 35| mu35_2334(unknown) = ^CallSideEffect : ~m? +# 35| v35_2335(void) = ^IndirectReadSideEffect[-1] : &:r35_2331, ~m? +# 35| mu35_2336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2331 +# 35| r35_2337(bool) = Constant[0] : +# 35| v35_2338(void) = ConditionalBranch : r35_2337 #-----| False -> Block 168 #-----| True (back edge) -> Block 167 -# 520| Block 168 -# 520| r520_1(glval) = VariableAddress[x167] : -# 520| mu520_2(String) = Uninitialized[x167] : &:r520_1 -# 520| r520_3(glval) = FunctionAddress[String] : -# 520| v520_4(void) = Call[String] : func:r520_3, this:r520_1 -# 520| mu520_5(unknown) = ^CallSideEffect : ~m? -# 520| mu520_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r520_1 -# 521| r521_1(glval) = VariableAddress[x167] : -# 521| r521_2(glval) = FunctionAddress[~String] : -# 521| v521_3(void) = Call[~String] : func:r521_2, this:r521_1 -# 521| mu521_4(unknown) = ^CallSideEffect : ~m? -# 521| v521_5(void) = ^IndirectReadSideEffect[-1] : &:r521_1, ~m? -# 521| mu521_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r521_1 -# 521| r521_7(bool) = Constant[0] : -# 521| v521_8(void) = ConditionalBranch : r521_7 +# 35| Block 168 +# 35| r35_2339(glval) = VariableAddress[x167] : +# 35| mu35_2340(String) = Uninitialized[x167] : &:r35_2339 +# 35| r35_2341(glval) = FunctionAddress[String] : +# 35| v35_2342(void) = Call[String] : func:r35_2341, this:r35_2339 +# 35| mu35_2343(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2339 +# 35| r35_2345(glval) = VariableAddress[x167] : +# 35| r35_2346(glval) = FunctionAddress[~String] : +# 35| v35_2347(void) = Call[~String] : func:r35_2346, this:r35_2345 +# 35| mu35_2348(unknown) = ^CallSideEffect : ~m? +# 35| v35_2349(void) = ^IndirectReadSideEffect[-1] : &:r35_2345, ~m? +# 35| mu35_2350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2345 +# 35| r35_2351(bool) = Constant[0] : +# 35| v35_2352(void) = ConditionalBranch : r35_2351 #-----| False -> Block 169 #-----| True (back edge) -> Block 168 -# 523| Block 169 -# 523| r523_1(glval) = VariableAddress[x168] : -# 523| mu523_2(String) = Uninitialized[x168] : &:r523_1 -# 523| r523_3(glval) = FunctionAddress[String] : -# 523| v523_4(void) = Call[String] : func:r523_3, this:r523_1 -# 523| mu523_5(unknown) = ^CallSideEffect : ~m? -# 523| mu523_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r523_1 -# 524| r524_1(glval) = VariableAddress[x168] : -# 524| r524_2(glval) = FunctionAddress[~String] : -# 524| v524_3(void) = Call[~String] : func:r524_2, this:r524_1 -# 524| mu524_4(unknown) = ^CallSideEffect : ~m? -# 524| v524_5(void) = ^IndirectReadSideEffect[-1] : &:r524_1, ~m? -# 524| mu524_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r524_1 -# 524| r524_7(bool) = Constant[0] : -# 524| v524_8(void) = ConditionalBranch : r524_7 +# 35| Block 169 +# 35| r35_2353(glval) = VariableAddress[x168] : +# 35| mu35_2354(String) = Uninitialized[x168] : &:r35_2353 +# 35| r35_2355(glval) = FunctionAddress[String] : +# 35| v35_2356(void) = Call[String] : func:r35_2355, this:r35_2353 +# 35| mu35_2357(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2353 +# 35| r35_2359(glval) = VariableAddress[x168] : +# 35| r35_2360(glval) = FunctionAddress[~String] : +# 35| v35_2361(void) = Call[~String] : func:r35_2360, this:r35_2359 +# 35| mu35_2362(unknown) = ^CallSideEffect : ~m? +# 35| v35_2363(void) = ^IndirectReadSideEffect[-1] : &:r35_2359, ~m? +# 35| mu35_2364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2359 +# 35| r35_2365(bool) = Constant[0] : +# 35| v35_2366(void) = ConditionalBranch : r35_2365 #-----| False -> Block 170 #-----| True (back edge) -> Block 169 -# 526| Block 170 -# 526| r526_1(glval) = VariableAddress[x169] : -# 526| mu526_2(String) = Uninitialized[x169] : &:r526_1 -# 526| r526_3(glval) = FunctionAddress[String] : -# 526| v526_4(void) = Call[String] : func:r526_3, this:r526_1 -# 526| mu526_5(unknown) = ^CallSideEffect : ~m? -# 526| mu526_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r526_1 -# 527| r527_1(glval) = VariableAddress[x169] : -# 527| r527_2(glval) = FunctionAddress[~String] : -# 527| v527_3(void) = Call[~String] : func:r527_2, this:r527_1 -# 527| mu527_4(unknown) = ^CallSideEffect : ~m? -# 527| v527_5(void) = ^IndirectReadSideEffect[-1] : &:r527_1, ~m? -# 527| mu527_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r527_1 -# 527| r527_7(bool) = Constant[0] : -# 527| v527_8(void) = ConditionalBranch : r527_7 +# 35| Block 170 +# 35| r35_2367(glval) = VariableAddress[x169] : +# 35| mu35_2368(String) = Uninitialized[x169] : &:r35_2367 +# 35| r35_2369(glval) = FunctionAddress[String] : +# 35| v35_2370(void) = Call[String] : func:r35_2369, this:r35_2367 +# 35| mu35_2371(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2367 +# 35| r35_2373(glval) = VariableAddress[x169] : +# 35| r35_2374(glval) = FunctionAddress[~String] : +# 35| v35_2375(void) = Call[~String] : func:r35_2374, this:r35_2373 +# 35| mu35_2376(unknown) = ^CallSideEffect : ~m? +# 35| v35_2377(void) = ^IndirectReadSideEffect[-1] : &:r35_2373, ~m? +# 35| mu35_2378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2373 +# 35| r35_2379(bool) = Constant[0] : +# 35| v35_2380(void) = ConditionalBranch : r35_2379 #-----| False -> Block 171 #-----| True (back edge) -> Block 170 -# 529| Block 171 -# 529| r529_1(glval) = VariableAddress[x170] : -# 529| mu529_2(String) = Uninitialized[x170] : &:r529_1 -# 529| r529_3(glval) = FunctionAddress[String] : -# 529| v529_4(void) = Call[String] : func:r529_3, this:r529_1 -# 529| mu529_5(unknown) = ^CallSideEffect : ~m? -# 529| mu529_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r529_1 -# 530| r530_1(glval) = VariableAddress[x170] : -# 530| r530_2(glval) = FunctionAddress[~String] : -# 530| v530_3(void) = Call[~String] : func:r530_2, this:r530_1 -# 530| mu530_4(unknown) = ^CallSideEffect : ~m? -# 530| v530_5(void) = ^IndirectReadSideEffect[-1] : &:r530_1, ~m? -# 530| mu530_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r530_1 -# 530| r530_7(bool) = Constant[0] : -# 530| v530_8(void) = ConditionalBranch : r530_7 +# 35| Block 171 +# 35| r35_2381(glval) = VariableAddress[x170] : +# 35| mu35_2382(String) = Uninitialized[x170] : &:r35_2381 +# 35| r35_2383(glval) = FunctionAddress[String] : +# 35| v35_2384(void) = Call[String] : func:r35_2383, this:r35_2381 +# 35| mu35_2385(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2381 +# 35| r35_2387(glval) = VariableAddress[x170] : +# 35| r35_2388(glval) = FunctionAddress[~String] : +# 35| v35_2389(void) = Call[~String] : func:r35_2388, this:r35_2387 +# 35| mu35_2390(unknown) = ^CallSideEffect : ~m? +# 35| v35_2391(void) = ^IndirectReadSideEffect[-1] : &:r35_2387, ~m? +# 35| mu35_2392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2387 +# 35| r35_2393(bool) = Constant[0] : +# 35| v35_2394(void) = ConditionalBranch : r35_2393 #-----| False -> Block 172 #-----| True (back edge) -> Block 171 -# 532| Block 172 -# 532| r532_1(glval) = VariableAddress[x171] : -# 532| mu532_2(String) = Uninitialized[x171] : &:r532_1 -# 532| r532_3(glval) = FunctionAddress[String] : -# 532| v532_4(void) = Call[String] : func:r532_3, this:r532_1 -# 532| mu532_5(unknown) = ^CallSideEffect : ~m? -# 532| mu532_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r532_1 -# 533| r533_1(glval) = VariableAddress[x171] : -# 533| r533_2(glval) = FunctionAddress[~String] : -# 533| v533_3(void) = Call[~String] : func:r533_2, this:r533_1 -# 533| mu533_4(unknown) = ^CallSideEffect : ~m? -# 533| v533_5(void) = ^IndirectReadSideEffect[-1] : &:r533_1, ~m? -# 533| mu533_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r533_1 -# 533| r533_7(bool) = Constant[0] : -# 533| v533_8(void) = ConditionalBranch : r533_7 +# 35| Block 172 +# 35| r35_2395(glval) = VariableAddress[x171] : +# 35| mu35_2396(String) = Uninitialized[x171] : &:r35_2395 +# 35| r35_2397(glval) = FunctionAddress[String] : +# 35| v35_2398(void) = Call[String] : func:r35_2397, this:r35_2395 +# 35| mu35_2399(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2395 +# 35| r35_2401(glval) = VariableAddress[x171] : +# 35| r35_2402(glval) = FunctionAddress[~String] : +# 35| v35_2403(void) = Call[~String] : func:r35_2402, this:r35_2401 +# 35| mu35_2404(unknown) = ^CallSideEffect : ~m? +# 35| v35_2405(void) = ^IndirectReadSideEffect[-1] : &:r35_2401, ~m? +# 35| mu35_2406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2401 +# 35| r35_2407(bool) = Constant[0] : +# 35| v35_2408(void) = ConditionalBranch : r35_2407 #-----| False -> Block 173 #-----| True (back edge) -> Block 172 -# 535| Block 173 -# 535| r535_1(glval) = VariableAddress[x172] : -# 535| mu535_2(String) = Uninitialized[x172] : &:r535_1 -# 535| r535_3(glval) = FunctionAddress[String] : -# 535| v535_4(void) = Call[String] : func:r535_3, this:r535_1 -# 535| mu535_5(unknown) = ^CallSideEffect : ~m? -# 535| mu535_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r535_1 -# 536| r536_1(glval) = VariableAddress[x172] : -# 536| r536_2(glval) = FunctionAddress[~String] : -# 536| v536_3(void) = Call[~String] : func:r536_2, this:r536_1 -# 536| mu536_4(unknown) = ^CallSideEffect : ~m? -# 536| v536_5(void) = ^IndirectReadSideEffect[-1] : &:r536_1, ~m? -# 536| mu536_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r536_1 -# 536| r536_7(bool) = Constant[0] : -# 536| v536_8(void) = ConditionalBranch : r536_7 +# 35| Block 173 +# 35| r35_2409(glval) = VariableAddress[x172] : +# 35| mu35_2410(String) = Uninitialized[x172] : &:r35_2409 +# 35| r35_2411(glval) = FunctionAddress[String] : +# 35| v35_2412(void) = Call[String] : func:r35_2411, this:r35_2409 +# 35| mu35_2413(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2409 +# 35| r35_2415(glval) = VariableAddress[x172] : +# 35| r35_2416(glval) = FunctionAddress[~String] : +# 35| v35_2417(void) = Call[~String] : func:r35_2416, this:r35_2415 +# 35| mu35_2418(unknown) = ^CallSideEffect : ~m? +# 35| v35_2419(void) = ^IndirectReadSideEffect[-1] : &:r35_2415, ~m? +# 35| mu35_2420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2415 +# 35| r35_2421(bool) = Constant[0] : +# 35| v35_2422(void) = ConditionalBranch : r35_2421 #-----| False -> Block 174 #-----| True (back edge) -> Block 173 -# 538| Block 174 -# 538| r538_1(glval) = VariableAddress[x173] : -# 538| mu538_2(String) = Uninitialized[x173] : &:r538_1 -# 538| r538_3(glval) = FunctionAddress[String] : -# 538| v538_4(void) = Call[String] : func:r538_3, this:r538_1 -# 538| mu538_5(unknown) = ^CallSideEffect : ~m? -# 538| mu538_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r538_1 -# 539| r539_1(glval) = VariableAddress[x173] : -# 539| r539_2(glval) = FunctionAddress[~String] : -# 539| v539_3(void) = Call[~String] : func:r539_2, this:r539_1 -# 539| mu539_4(unknown) = ^CallSideEffect : ~m? -# 539| v539_5(void) = ^IndirectReadSideEffect[-1] : &:r539_1, ~m? -# 539| mu539_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r539_1 -# 539| r539_7(bool) = Constant[0] : -# 539| v539_8(void) = ConditionalBranch : r539_7 +# 35| Block 174 +# 35| r35_2423(glval) = VariableAddress[x173] : +# 35| mu35_2424(String) = Uninitialized[x173] : &:r35_2423 +# 35| r35_2425(glval) = FunctionAddress[String] : +# 35| v35_2426(void) = Call[String] : func:r35_2425, this:r35_2423 +# 35| mu35_2427(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2423 +# 35| r35_2429(glval) = VariableAddress[x173] : +# 35| r35_2430(glval) = FunctionAddress[~String] : +# 35| v35_2431(void) = Call[~String] : func:r35_2430, this:r35_2429 +# 35| mu35_2432(unknown) = ^CallSideEffect : ~m? +# 35| v35_2433(void) = ^IndirectReadSideEffect[-1] : &:r35_2429, ~m? +# 35| mu35_2434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2429 +# 35| r35_2435(bool) = Constant[0] : +# 35| v35_2436(void) = ConditionalBranch : r35_2435 #-----| False -> Block 175 #-----| True (back edge) -> Block 174 -# 541| Block 175 -# 541| r541_1(glval) = VariableAddress[x174] : -# 541| mu541_2(String) = Uninitialized[x174] : &:r541_1 -# 541| r541_3(glval) = FunctionAddress[String] : -# 541| v541_4(void) = Call[String] : func:r541_3, this:r541_1 -# 541| mu541_5(unknown) = ^CallSideEffect : ~m? -# 541| mu541_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r541_1 -# 542| r542_1(glval) = VariableAddress[x174] : -# 542| r542_2(glval) = FunctionAddress[~String] : -# 542| v542_3(void) = Call[~String] : func:r542_2, this:r542_1 -# 542| mu542_4(unknown) = ^CallSideEffect : ~m? -# 542| v542_5(void) = ^IndirectReadSideEffect[-1] : &:r542_1, ~m? -# 542| mu542_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r542_1 -# 542| r542_7(bool) = Constant[0] : -# 542| v542_8(void) = ConditionalBranch : r542_7 +# 35| Block 175 +# 35| r35_2437(glval) = VariableAddress[x174] : +# 35| mu35_2438(String) = Uninitialized[x174] : &:r35_2437 +# 35| r35_2439(glval) = FunctionAddress[String] : +# 35| v35_2440(void) = Call[String] : func:r35_2439, this:r35_2437 +# 35| mu35_2441(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2437 +# 35| r35_2443(glval) = VariableAddress[x174] : +# 35| r35_2444(glval) = FunctionAddress[~String] : +# 35| v35_2445(void) = Call[~String] : func:r35_2444, this:r35_2443 +# 35| mu35_2446(unknown) = ^CallSideEffect : ~m? +# 35| v35_2447(void) = ^IndirectReadSideEffect[-1] : &:r35_2443, ~m? +# 35| mu35_2448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2443 +# 35| r35_2449(bool) = Constant[0] : +# 35| v35_2450(void) = ConditionalBranch : r35_2449 #-----| False -> Block 176 #-----| True (back edge) -> Block 175 -# 544| Block 176 -# 544| r544_1(glval) = VariableAddress[x175] : -# 544| mu544_2(String) = Uninitialized[x175] : &:r544_1 -# 544| r544_3(glval) = FunctionAddress[String] : -# 544| v544_4(void) = Call[String] : func:r544_3, this:r544_1 -# 544| mu544_5(unknown) = ^CallSideEffect : ~m? -# 544| mu544_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r544_1 -# 545| r545_1(glval) = VariableAddress[x175] : -# 545| r545_2(glval) = FunctionAddress[~String] : -# 545| v545_3(void) = Call[~String] : func:r545_2, this:r545_1 -# 545| mu545_4(unknown) = ^CallSideEffect : ~m? -# 545| v545_5(void) = ^IndirectReadSideEffect[-1] : &:r545_1, ~m? -# 545| mu545_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r545_1 -# 545| r545_7(bool) = Constant[0] : -# 545| v545_8(void) = ConditionalBranch : r545_7 +# 35| Block 176 +# 35| r35_2451(glval) = VariableAddress[x175] : +# 35| mu35_2452(String) = Uninitialized[x175] : &:r35_2451 +# 35| r35_2453(glval) = FunctionAddress[String] : +# 35| v35_2454(void) = Call[String] : func:r35_2453, this:r35_2451 +# 35| mu35_2455(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2451 +# 35| r35_2457(glval) = VariableAddress[x175] : +# 35| r35_2458(glval) = FunctionAddress[~String] : +# 35| v35_2459(void) = Call[~String] : func:r35_2458, this:r35_2457 +# 35| mu35_2460(unknown) = ^CallSideEffect : ~m? +# 35| v35_2461(void) = ^IndirectReadSideEffect[-1] : &:r35_2457, ~m? +# 35| mu35_2462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2457 +# 35| r35_2463(bool) = Constant[0] : +# 35| v35_2464(void) = ConditionalBranch : r35_2463 #-----| False -> Block 177 #-----| True (back edge) -> Block 176 -# 547| Block 177 -# 547| r547_1(glval) = VariableAddress[x176] : -# 547| mu547_2(String) = Uninitialized[x176] : &:r547_1 -# 547| r547_3(glval) = FunctionAddress[String] : -# 547| v547_4(void) = Call[String] : func:r547_3, this:r547_1 -# 547| mu547_5(unknown) = ^CallSideEffect : ~m? -# 547| mu547_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r547_1 -# 548| r548_1(glval) = VariableAddress[x176] : -# 548| r548_2(glval) = FunctionAddress[~String] : -# 548| v548_3(void) = Call[~String] : func:r548_2, this:r548_1 -# 548| mu548_4(unknown) = ^CallSideEffect : ~m? -# 548| v548_5(void) = ^IndirectReadSideEffect[-1] : &:r548_1, ~m? -# 548| mu548_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r548_1 -# 548| r548_7(bool) = Constant[0] : -# 548| v548_8(void) = ConditionalBranch : r548_7 +# 35| Block 177 +# 35| r35_2465(glval) = VariableAddress[x176] : +# 35| mu35_2466(String) = Uninitialized[x176] : &:r35_2465 +# 35| r35_2467(glval) = FunctionAddress[String] : +# 35| v35_2468(void) = Call[String] : func:r35_2467, this:r35_2465 +# 35| mu35_2469(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2465 +# 35| r35_2471(glval) = VariableAddress[x176] : +# 35| r35_2472(glval) = FunctionAddress[~String] : +# 35| v35_2473(void) = Call[~String] : func:r35_2472, this:r35_2471 +# 35| mu35_2474(unknown) = ^CallSideEffect : ~m? +# 35| v35_2475(void) = ^IndirectReadSideEffect[-1] : &:r35_2471, ~m? +# 35| mu35_2476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2471 +# 35| r35_2477(bool) = Constant[0] : +# 35| v35_2478(void) = ConditionalBranch : r35_2477 #-----| False -> Block 178 #-----| True (back edge) -> Block 177 -# 550| Block 178 -# 550| r550_1(glval) = VariableAddress[x177] : -# 550| mu550_2(String) = Uninitialized[x177] : &:r550_1 -# 550| r550_3(glval) = FunctionAddress[String] : -# 550| v550_4(void) = Call[String] : func:r550_3, this:r550_1 -# 550| mu550_5(unknown) = ^CallSideEffect : ~m? -# 550| mu550_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r550_1 -# 551| r551_1(glval) = VariableAddress[x177] : -# 551| r551_2(glval) = FunctionAddress[~String] : -# 551| v551_3(void) = Call[~String] : func:r551_2, this:r551_1 -# 551| mu551_4(unknown) = ^CallSideEffect : ~m? -# 551| v551_5(void) = ^IndirectReadSideEffect[-1] : &:r551_1, ~m? -# 551| mu551_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r551_1 -# 551| r551_7(bool) = Constant[0] : -# 551| v551_8(void) = ConditionalBranch : r551_7 +# 35| Block 178 +# 35| r35_2479(glval) = VariableAddress[x177] : +# 35| mu35_2480(String) = Uninitialized[x177] : &:r35_2479 +# 35| r35_2481(glval) = FunctionAddress[String] : +# 35| v35_2482(void) = Call[String] : func:r35_2481, this:r35_2479 +# 35| mu35_2483(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2479 +# 35| r35_2485(glval) = VariableAddress[x177] : +# 35| r35_2486(glval) = FunctionAddress[~String] : +# 35| v35_2487(void) = Call[~String] : func:r35_2486, this:r35_2485 +# 35| mu35_2488(unknown) = ^CallSideEffect : ~m? +# 35| v35_2489(void) = ^IndirectReadSideEffect[-1] : &:r35_2485, ~m? +# 35| mu35_2490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2485 +# 35| r35_2491(bool) = Constant[0] : +# 35| v35_2492(void) = ConditionalBranch : r35_2491 #-----| False -> Block 179 #-----| True (back edge) -> Block 178 -# 553| Block 179 -# 553| r553_1(glval) = VariableAddress[x178] : -# 553| mu553_2(String) = Uninitialized[x178] : &:r553_1 -# 553| r553_3(glval) = FunctionAddress[String] : -# 553| v553_4(void) = Call[String] : func:r553_3, this:r553_1 -# 553| mu553_5(unknown) = ^CallSideEffect : ~m? -# 553| mu553_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r553_1 -# 554| r554_1(glval) = VariableAddress[x178] : -# 554| r554_2(glval) = FunctionAddress[~String] : -# 554| v554_3(void) = Call[~String] : func:r554_2, this:r554_1 -# 554| mu554_4(unknown) = ^CallSideEffect : ~m? -# 554| v554_5(void) = ^IndirectReadSideEffect[-1] : &:r554_1, ~m? -# 554| mu554_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r554_1 -# 554| r554_7(bool) = Constant[0] : -# 554| v554_8(void) = ConditionalBranch : r554_7 +# 35| Block 179 +# 35| r35_2493(glval) = VariableAddress[x178] : +# 35| mu35_2494(String) = Uninitialized[x178] : &:r35_2493 +# 35| r35_2495(glval) = FunctionAddress[String] : +# 35| v35_2496(void) = Call[String] : func:r35_2495, this:r35_2493 +# 35| mu35_2497(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2493 +# 35| r35_2499(glval) = VariableAddress[x178] : +# 35| r35_2500(glval) = FunctionAddress[~String] : +# 35| v35_2501(void) = Call[~String] : func:r35_2500, this:r35_2499 +# 35| mu35_2502(unknown) = ^CallSideEffect : ~m? +# 35| v35_2503(void) = ^IndirectReadSideEffect[-1] : &:r35_2499, ~m? +# 35| mu35_2504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2499 +# 35| r35_2505(bool) = Constant[0] : +# 35| v35_2506(void) = ConditionalBranch : r35_2505 #-----| False -> Block 180 #-----| True (back edge) -> Block 179 -# 556| Block 180 -# 556| r556_1(glval) = VariableAddress[x179] : -# 556| mu556_2(String) = Uninitialized[x179] : &:r556_1 -# 556| r556_3(glval) = FunctionAddress[String] : -# 556| v556_4(void) = Call[String] : func:r556_3, this:r556_1 -# 556| mu556_5(unknown) = ^CallSideEffect : ~m? -# 556| mu556_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r556_1 -# 557| r557_1(glval) = VariableAddress[x179] : -# 557| r557_2(glval) = FunctionAddress[~String] : -# 557| v557_3(void) = Call[~String] : func:r557_2, this:r557_1 -# 557| mu557_4(unknown) = ^CallSideEffect : ~m? -# 557| v557_5(void) = ^IndirectReadSideEffect[-1] : &:r557_1, ~m? -# 557| mu557_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r557_1 -# 557| r557_7(bool) = Constant[0] : -# 557| v557_8(void) = ConditionalBranch : r557_7 +# 35| Block 180 +# 35| r35_2507(glval) = VariableAddress[x179] : +# 35| mu35_2508(String) = Uninitialized[x179] : &:r35_2507 +# 35| r35_2509(glval) = FunctionAddress[String] : +# 35| v35_2510(void) = Call[String] : func:r35_2509, this:r35_2507 +# 35| mu35_2511(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2507 +# 35| r35_2513(glval) = VariableAddress[x179] : +# 35| r35_2514(glval) = FunctionAddress[~String] : +# 35| v35_2515(void) = Call[~String] : func:r35_2514, this:r35_2513 +# 35| mu35_2516(unknown) = ^CallSideEffect : ~m? +# 35| v35_2517(void) = ^IndirectReadSideEffect[-1] : &:r35_2513, ~m? +# 35| mu35_2518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2513 +# 35| r35_2519(bool) = Constant[0] : +# 35| v35_2520(void) = ConditionalBranch : r35_2519 #-----| False -> Block 181 #-----| True (back edge) -> Block 180 -# 559| Block 181 -# 559| r559_1(glval) = VariableAddress[x180] : -# 559| mu559_2(String) = Uninitialized[x180] : &:r559_1 -# 559| r559_3(glval) = FunctionAddress[String] : -# 559| v559_4(void) = Call[String] : func:r559_3, this:r559_1 -# 559| mu559_5(unknown) = ^CallSideEffect : ~m? -# 559| mu559_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r559_1 -# 560| r560_1(glval) = VariableAddress[x180] : -# 560| r560_2(glval) = FunctionAddress[~String] : -# 560| v560_3(void) = Call[~String] : func:r560_2, this:r560_1 -# 560| mu560_4(unknown) = ^CallSideEffect : ~m? -# 560| v560_5(void) = ^IndirectReadSideEffect[-1] : &:r560_1, ~m? -# 560| mu560_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r560_1 -# 560| r560_7(bool) = Constant[0] : -# 560| v560_8(void) = ConditionalBranch : r560_7 +# 35| Block 181 +# 35| r35_2521(glval) = VariableAddress[x180] : +# 35| mu35_2522(String) = Uninitialized[x180] : &:r35_2521 +# 35| r35_2523(glval) = FunctionAddress[String] : +# 35| v35_2524(void) = Call[String] : func:r35_2523, this:r35_2521 +# 35| mu35_2525(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2521 +# 35| r35_2527(glval) = VariableAddress[x180] : +# 35| r35_2528(glval) = FunctionAddress[~String] : +# 35| v35_2529(void) = Call[~String] : func:r35_2528, this:r35_2527 +# 35| mu35_2530(unknown) = ^CallSideEffect : ~m? +# 35| v35_2531(void) = ^IndirectReadSideEffect[-1] : &:r35_2527, ~m? +# 35| mu35_2532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2527 +# 35| r35_2533(bool) = Constant[0] : +# 35| v35_2534(void) = ConditionalBranch : r35_2533 #-----| False -> Block 182 #-----| True (back edge) -> Block 181 -# 562| Block 182 -# 562| r562_1(glval) = VariableAddress[x181] : -# 562| mu562_2(String) = Uninitialized[x181] : &:r562_1 -# 562| r562_3(glval) = FunctionAddress[String] : -# 562| v562_4(void) = Call[String] : func:r562_3, this:r562_1 -# 562| mu562_5(unknown) = ^CallSideEffect : ~m? -# 562| mu562_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r562_1 -# 563| r563_1(glval) = VariableAddress[x181] : -# 563| r563_2(glval) = FunctionAddress[~String] : -# 563| v563_3(void) = Call[~String] : func:r563_2, this:r563_1 -# 563| mu563_4(unknown) = ^CallSideEffect : ~m? -# 563| v563_5(void) = ^IndirectReadSideEffect[-1] : &:r563_1, ~m? -# 563| mu563_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r563_1 -# 563| r563_7(bool) = Constant[0] : -# 563| v563_8(void) = ConditionalBranch : r563_7 +# 35| Block 182 +# 35| r35_2535(glval) = VariableAddress[x181] : +# 35| mu35_2536(String) = Uninitialized[x181] : &:r35_2535 +# 35| r35_2537(glval) = FunctionAddress[String] : +# 35| v35_2538(void) = Call[String] : func:r35_2537, this:r35_2535 +# 35| mu35_2539(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2535 +# 35| r35_2541(glval) = VariableAddress[x181] : +# 35| r35_2542(glval) = FunctionAddress[~String] : +# 35| v35_2543(void) = Call[~String] : func:r35_2542, this:r35_2541 +# 35| mu35_2544(unknown) = ^CallSideEffect : ~m? +# 35| v35_2545(void) = ^IndirectReadSideEffect[-1] : &:r35_2541, ~m? +# 35| mu35_2546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2541 +# 35| r35_2547(bool) = Constant[0] : +# 35| v35_2548(void) = ConditionalBranch : r35_2547 #-----| False -> Block 183 #-----| True (back edge) -> Block 182 -# 565| Block 183 -# 565| r565_1(glval) = VariableAddress[x182] : -# 565| mu565_2(String) = Uninitialized[x182] : &:r565_1 -# 565| r565_3(glval) = FunctionAddress[String] : -# 565| v565_4(void) = Call[String] : func:r565_3, this:r565_1 -# 565| mu565_5(unknown) = ^CallSideEffect : ~m? -# 565| mu565_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r565_1 -# 566| r566_1(glval) = VariableAddress[x182] : -# 566| r566_2(glval) = FunctionAddress[~String] : -# 566| v566_3(void) = Call[~String] : func:r566_2, this:r566_1 -# 566| mu566_4(unknown) = ^CallSideEffect : ~m? -# 566| v566_5(void) = ^IndirectReadSideEffect[-1] : &:r566_1, ~m? -# 566| mu566_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r566_1 -# 566| r566_7(bool) = Constant[0] : -# 566| v566_8(void) = ConditionalBranch : r566_7 +# 35| Block 183 +# 35| r35_2549(glval) = VariableAddress[x182] : +# 35| mu35_2550(String) = Uninitialized[x182] : &:r35_2549 +# 35| r35_2551(glval) = FunctionAddress[String] : +# 35| v35_2552(void) = Call[String] : func:r35_2551, this:r35_2549 +# 35| mu35_2553(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2549 +# 35| r35_2555(glval) = VariableAddress[x182] : +# 35| r35_2556(glval) = FunctionAddress[~String] : +# 35| v35_2557(void) = Call[~String] : func:r35_2556, this:r35_2555 +# 35| mu35_2558(unknown) = ^CallSideEffect : ~m? +# 35| v35_2559(void) = ^IndirectReadSideEffect[-1] : &:r35_2555, ~m? +# 35| mu35_2560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2555 +# 35| r35_2561(bool) = Constant[0] : +# 35| v35_2562(void) = ConditionalBranch : r35_2561 #-----| False -> Block 184 #-----| True (back edge) -> Block 183 -# 568| Block 184 -# 568| r568_1(glval) = VariableAddress[x183] : -# 568| mu568_2(String) = Uninitialized[x183] : &:r568_1 -# 568| r568_3(glval) = FunctionAddress[String] : -# 568| v568_4(void) = Call[String] : func:r568_3, this:r568_1 -# 568| mu568_5(unknown) = ^CallSideEffect : ~m? -# 568| mu568_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r568_1 -# 569| r569_1(glval) = VariableAddress[x183] : -# 569| r569_2(glval) = FunctionAddress[~String] : -# 569| v569_3(void) = Call[~String] : func:r569_2, this:r569_1 -# 569| mu569_4(unknown) = ^CallSideEffect : ~m? -# 569| v569_5(void) = ^IndirectReadSideEffect[-1] : &:r569_1, ~m? -# 569| mu569_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r569_1 -# 569| r569_7(bool) = Constant[0] : -# 569| v569_8(void) = ConditionalBranch : r569_7 +# 35| Block 184 +# 35| r35_2563(glval) = VariableAddress[x183] : +# 35| mu35_2564(String) = Uninitialized[x183] : &:r35_2563 +# 35| r35_2565(glval) = FunctionAddress[String] : +# 35| v35_2566(void) = Call[String] : func:r35_2565, this:r35_2563 +# 35| mu35_2567(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2563 +# 35| r35_2569(glval) = VariableAddress[x183] : +# 35| r35_2570(glval) = FunctionAddress[~String] : +# 35| v35_2571(void) = Call[~String] : func:r35_2570, this:r35_2569 +# 35| mu35_2572(unknown) = ^CallSideEffect : ~m? +# 35| v35_2573(void) = ^IndirectReadSideEffect[-1] : &:r35_2569, ~m? +# 35| mu35_2574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2569 +# 35| r35_2575(bool) = Constant[0] : +# 35| v35_2576(void) = ConditionalBranch : r35_2575 #-----| False -> Block 185 #-----| True (back edge) -> Block 184 -# 571| Block 185 -# 571| r571_1(glval) = VariableAddress[x184] : -# 571| mu571_2(String) = Uninitialized[x184] : &:r571_1 -# 571| r571_3(glval) = FunctionAddress[String] : -# 571| v571_4(void) = Call[String] : func:r571_3, this:r571_1 -# 571| mu571_5(unknown) = ^CallSideEffect : ~m? -# 571| mu571_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r571_1 -# 572| r572_1(glval) = VariableAddress[x184] : -# 572| r572_2(glval) = FunctionAddress[~String] : -# 572| v572_3(void) = Call[~String] : func:r572_2, this:r572_1 -# 572| mu572_4(unknown) = ^CallSideEffect : ~m? -# 572| v572_5(void) = ^IndirectReadSideEffect[-1] : &:r572_1, ~m? -# 572| mu572_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r572_1 -# 572| r572_7(bool) = Constant[0] : -# 572| v572_8(void) = ConditionalBranch : r572_7 +# 35| Block 185 +# 35| r35_2577(glval) = VariableAddress[x184] : +# 35| mu35_2578(String) = Uninitialized[x184] : &:r35_2577 +# 35| r35_2579(glval) = FunctionAddress[String] : +# 35| v35_2580(void) = Call[String] : func:r35_2579, this:r35_2577 +# 35| mu35_2581(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2577 +# 35| r35_2583(glval) = VariableAddress[x184] : +# 35| r35_2584(glval) = FunctionAddress[~String] : +# 35| v35_2585(void) = Call[~String] : func:r35_2584, this:r35_2583 +# 35| mu35_2586(unknown) = ^CallSideEffect : ~m? +# 35| v35_2587(void) = ^IndirectReadSideEffect[-1] : &:r35_2583, ~m? +# 35| mu35_2588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2583 +# 35| r35_2589(bool) = Constant[0] : +# 35| v35_2590(void) = ConditionalBranch : r35_2589 #-----| False -> Block 186 #-----| True (back edge) -> Block 185 -# 574| Block 186 -# 574| r574_1(glval) = VariableAddress[x185] : -# 574| mu574_2(String) = Uninitialized[x185] : &:r574_1 -# 574| r574_3(glval) = FunctionAddress[String] : -# 574| v574_4(void) = Call[String] : func:r574_3, this:r574_1 -# 574| mu574_5(unknown) = ^CallSideEffect : ~m? -# 574| mu574_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r574_1 -# 575| r575_1(glval) = VariableAddress[x185] : -# 575| r575_2(glval) = FunctionAddress[~String] : -# 575| v575_3(void) = Call[~String] : func:r575_2, this:r575_1 -# 575| mu575_4(unknown) = ^CallSideEffect : ~m? -# 575| v575_5(void) = ^IndirectReadSideEffect[-1] : &:r575_1, ~m? -# 575| mu575_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r575_1 -# 575| r575_7(bool) = Constant[0] : -# 575| v575_8(void) = ConditionalBranch : r575_7 +# 35| Block 186 +# 35| r35_2591(glval) = VariableAddress[x185] : +# 35| mu35_2592(String) = Uninitialized[x185] : &:r35_2591 +# 35| r35_2593(glval) = FunctionAddress[String] : +# 35| v35_2594(void) = Call[String] : func:r35_2593, this:r35_2591 +# 35| mu35_2595(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2591 +# 35| r35_2597(glval) = VariableAddress[x185] : +# 35| r35_2598(glval) = FunctionAddress[~String] : +# 35| v35_2599(void) = Call[~String] : func:r35_2598, this:r35_2597 +# 35| mu35_2600(unknown) = ^CallSideEffect : ~m? +# 35| v35_2601(void) = ^IndirectReadSideEffect[-1] : &:r35_2597, ~m? +# 35| mu35_2602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2597 +# 35| r35_2603(bool) = Constant[0] : +# 35| v35_2604(void) = ConditionalBranch : r35_2603 #-----| False -> Block 187 #-----| True (back edge) -> Block 186 -# 577| Block 187 -# 577| r577_1(glval) = VariableAddress[x186] : -# 577| mu577_2(String) = Uninitialized[x186] : &:r577_1 -# 577| r577_3(glval) = FunctionAddress[String] : -# 577| v577_4(void) = Call[String] : func:r577_3, this:r577_1 -# 577| mu577_5(unknown) = ^CallSideEffect : ~m? -# 577| mu577_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r577_1 -# 578| r578_1(glval) = VariableAddress[x186] : -# 578| r578_2(glval) = FunctionAddress[~String] : -# 578| v578_3(void) = Call[~String] : func:r578_2, this:r578_1 -# 578| mu578_4(unknown) = ^CallSideEffect : ~m? -# 578| v578_5(void) = ^IndirectReadSideEffect[-1] : &:r578_1, ~m? -# 578| mu578_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r578_1 -# 578| r578_7(bool) = Constant[0] : -# 578| v578_8(void) = ConditionalBranch : r578_7 +# 35| Block 187 +# 35| r35_2605(glval) = VariableAddress[x186] : +# 35| mu35_2606(String) = Uninitialized[x186] : &:r35_2605 +# 35| r35_2607(glval) = FunctionAddress[String] : +# 35| v35_2608(void) = Call[String] : func:r35_2607, this:r35_2605 +# 35| mu35_2609(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2605 +# 35| r35_2611(glval) = VariableAddress[x186] : +# 35| r35_2612(glval) = FunctionAddress[~String] : +# 35| v35_2613(void) = Call[~String] : func:r35_2612, this:r35_2611 +# 35| mu35_2614(unknown) = ^CallSideEffect : ~m? +# 35| v35_2615(void) = ^IndirectReadSideEffect[-1] : &:r35_2611, ~m? +# 35| mu35_2616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2611 +# 35| r35_2617(bool) = Constant[0] : +# 35| v35_2618(void) = ConditionalBranch : r35_2617 #-----| False -> Block 188 #-----| True (back edge) -> Block 187 -# 580| Block 188 -# 580| r580_1(glval) = VariableAddress[x187] : -# 580| mu580_2(String) = Uninitialized[x187] : &:r580_1 -# 580| r580_3(glval) = FunctionAddress[String] : -# 580| v580_4(void) = Call[String] : func:r580_3, this:r580_1 -# 580| mu580_5(unknown) = ^CallSideEffect : ~m? -# 580| mu580_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r580_1 -# 581| r581_1(glval) = VariableAddress[x187] : -# 581| r581_2(glval) = FunctionAddress[~String] : -# 581| v581_3(void) = Call[~String] : func:r581_2, this:r581_1 -# 581| mu581_4(unknown) = ^CallSideEffect : ~m? -# 581| v581_5(void) = ^IndirectReadSideEffect[-1] : &:r581_1, ~m? -# 581| mu581_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r581_1 -# 581| r581_7(bool) = Constant[0] : -# 581| v581_8(void) = ConditionalBranch : r581_7 +# 35| Block 188 +# 35| r35_2619(glval) = VariableAddress[x187] : +# 35| mu35_2620(String) = Uninitialized[x187] : &:r35_2619 +# 35| r35_2621(glval) = FunctionAddress[String] : +# 35| v35_2622(void) = Call[String] : func:r35_2621, this:r35_2619 +# 35| mu35_2623(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2619 +# 35| r35_2625(glval) = VariableAddress[x187] : +# 35| r35_2626(glval) = FunctionAddress[~String] : +# 35| v35_2627(void) = Call[~String] : func:r35_2626, this:r35_2625 +# 35| mu35_2628(unknown) = ^CallSideEffect : ~m? +# 35| v35_2629(void) = ^IndirectReadSideEffect[-1] : &:r35_2625, ~m? +# 35| mu35_2630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2625 +# 35| r35_2631(bool) = Constant[0] : +# 35| v35_2632(void) = ConditionalBranch : r35_2631 #-----| False -> Block 189 #-----| True (back edge) -> Block 188 -# 583| Block 189 -# 583| r583_1(glval) = VariableAddress[x188] : -# 583| mu583_2(String) = Uninitialized[x188] : &:r583_1 -# 583| r583_3(glval) = FunctionAddress[String] : -# 583| v583_4(void) = Call[String] : func:r583_3, this:r583_1 -# 583| mu583_5(unknown) = ^CallSideEffect : ~m? -# 583| mu583_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r583_1 -# 584| r584_1(glval) = VariableAddress[x188] : -# 584| r584_2(glval) = FunctionAddress[~String] : -# 584| v584_3(void) = Call[~String] : func:r584_2, this:r584_1 -# 584| mu584_4(unknown) = ^CallSideEffect : ~m? -# 584| v584_5(void) = ^IndirectReadSideEffect[-1] : &:r584_1, ~m? -# 584| mu584_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r584_1 -# 584| r584_7(bool) = Constant[0] : -# 584| v584_8(void) = ConditionalBranch : r584_7 +# 35| Block 189 +# 35| r35_2633(glval) = VariableAddress[x188] : +# 35| mu35_2634(String) = Uninitialized[x188] : &:r35_2633 +# 35| r35_2635(glval) = FunctionAddress[String] : +# 35| v35_2636(void) = Call[String] : func:r35_2635, this:r35_2633 +# 35| mu35_2637(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2633 +# 35| r35_2639(glval) = VariableAddress[x188] : +# 35| r35_2640(glval) = FunctionAddress[~String] : +# 35| v35_2641(void) = Call[~String] : func:r35_2640, this:r35_2639 +# 35| mu35_2642(unknown) = ^CallSideEffect : ~m? +# 35| v35_2643(void) = ^IndirectReadSideEffect[-1] : &:r35_2639, ~m? +# 35| mu35_2644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2639 +# 35| r35_2645(bool) = Constant[0] : +# 35| v35_2646(void) = ConditionalBranch : r35_2645 #-----| False -> Block 190 #-----| True (back edge) -> Block 189 -# 586| Block 190 -# 586| r586_1(glval) = VariableAddress[x189] : -# 586| mu586_2(String) = Uninitialized[x189] : &:r586_1 -# 586| r586_3(glval) = FunctionAddress[String] : -# 586| v586_4(void) = Call[String] : func:r586_3, this:r586_1 -# 586| mu586_5(unknown) = ^CallSideEffect : ~m? -# 586| mu586_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r586_1 -# 587| r587_1(glval) = VariableAddress[x189] : -# 587| r587_2(glval) = FunctionAddress[~String] : -# 587| v587_3(void) = Call[~String] : func:r587_2, this:r587_1 -# 587| mu587_4(unknown) = ^CallSideEffect : ~m? -# 587| v587_5(void) = ^IndirectReadSideEffect[-1] : &:r587_1, ~m? -# 587| mu587_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r587_1 -# 587| r587_7(bool) = Constant[0] : -# 587| v587_8(void) = ConditionalBranch : r587_7 +# 35| Block 190 +# 35| r35_2647(glval) = VariableAddress[x189] : +# 35| mu35_2648(String) = Uninitialized[x189] : &:r35_2647 +# 35| r35_2649(glval) = FunctionAddress[String] : +# 35| v35_2650(void) = Call[String] : func:r35_2649, this:r35_2647 +# 35| mu35_2651(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2647 +# 35| r35_2653(glval) = VariableAddress[x189] : +# 35| r35_2654(glval) = FunctionAddress[~String] : +# 35| v35_2655(void) = Call[~String] : func:r35_2654, this:r35_2653 +# 35| mu35_2656(unknown) = ^CallSideEffect : ~m? +# 35| v35_2657(void) = ^IndirectReadSideEffect[-1] : &:r35_2653, ~m? +# 35| mu35_2658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2653 +# 35| r35_2659(bool) = Constant[0] : +# 35| v35_2660(void) = ConditionalBranch : r35_2659 #-----| False -> Block 191 #-----| True (back edge) -> Block 190 -# 589| Block 191 -# 589| r589_1(glval) = VariableAddress[x190] : -# 589| mu589_2(String) = Uninitialized[x190] : &:r589_1 -# 589| r589_3(glval) = FunctionAddress[String] : -# 589| v589_4(void) = Call[String] : func:r589_3, this:r589_1 -# 589| mu589_5(unknown) = ^CallSideEffect : ~m? -# 589| mu589_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r589_1 -# 590| r590_1(glval) = VariableAddress[x190] : -# 590| r590_2(glval) = FunctionAddress[~String] : -# 590| v590_3(void) = Call[~String] : func:r590_2, this:r590_1 -# 590| mu590_4(unknown) = ^CallSideEffect : ~m? -# 590| v590_5(void) = ^IndirectReadSideEffect[-1] : &:r590_1, ~m? -# 590| mu590_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r590_1 -# 590| r590_7(bool) = Constant[0] : -# 590| v590_8(void) = ConditionalBranch : r590_7 +# 35| Block 191 +# 35| r35_2661(glval) = VariableAddress[x190] : +# 35| mu35_2662(String) = Uninitialized[x190] : &:r35_2661 +# 35| r35_2663(glval) = FunctionAddress[String] : +# 35| v35_2664(void) = Call[String] : func:r35_2663, this:r35_2661 +# 35| mu35_2665(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2661 +# 35| r35_2667(glval) = VariableAddress[x190] : +# 35| r35_2668(glval) = FunctionAddress[~String] : +# 35| v35_2669(void) = Call[~String] : func:r35_2668, this:r35_2667 +# 35| mu35_2670(unknown) = ^CallSideEffect : ~m? +# 35| v35_2671(void) = ^IndirectReadSideEffect[-1] : &:r35_2667, ~m? +# 35| mu35_2672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2667 +# 35| r35_2673(bool) = Constant[0] : +# 35| v35_2674(void) = ConditionalBranch : r35_2673 #-----| False -> Block 192 #-----| True (back edge) -> Block 191 -# 592| Block 192 -# 592| r592_1(glval) = VariableAddress[x191] : -# 592| mu592_2(String) = Uninitialized[x191] : &:r592_1 -# 592| r592_3(glval) = FunctionAddress[String] : -# 592| v592_4(void) = Call[String] : func:r592_3, this:r592_1 -# 592| mu592_5(unknown) = ^CallSideEffect : ~m? -# 592| mu592_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r592_1 -# 593| r593_1(glval) = VariableAddress[x191] : -# 593| r593_2(glval) = FunctionAddress[~String] : -# 593| v593_3(void) = Call[~String] : func:r593_2, this:r593_1 -# 593| mu593_4(unknown) = ^CallSideEffect : ~m? -# 593| v593_5(void) = ^IndirectReadSideEffect[-1] : &:r593_1, ~m? -# 593| mu593_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r593_1 -# 593| r593_7(bool) = Constant[0] : -# 593| v593_8(void) = ConditionalBranch : r593_7 +# 35| Block 192 +# 35| r35_2675(glval) = VariableAddress[x191] : +# 35| mu35_2676(String) = Uninitialized[x191] : &:r35_2675 +# 35| r35_2677(glval) = FunctionAddress[String] : +# 35| v35_2678(void) = Call[String] : func:r35_2677, this:r35_2675 +# 35| mu35_2679(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2675 +# 35| r35_2681(glval) = VariableAddress[x191] : +# 35| r35_2682(glval) = FunctionAddress[~String] : +# 35| v35_2683(void) = Call[~String] : func:r35_2682, this:r35_2681 +# 35| mu35_2684(unknown) = ^CallSideEffect : ~m? +# 35| v35_2685(void) = ^IndirectReadSideEffect[-1] : &:r35_2681, ~m? +# 35| mu35_2686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2681 +# 35| r35_2687(bool) = Constant[0] : +# 35| v35_2688(void) = ConditionalBranch : r35_2687 #-----| False -> Block 193 #-----| True (back edge) -> Block 192 -# 595| Block 193 -# 595| r595_1(glval) = VariableAddress[x192] : -# 595| mu595_2(String) = Uninitialized[x192] : &:r595_1 -# 595| r595_3(glval) = FunctionAddress[String] : -# 595| v595_4(void) = Call[String] : func:r595_3, this:r595_1 -# 595| mu595_5(unknown) = ^CallSideEffect : ~m? -# 595| mu595_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r595_1 -# 596| r596_1(glval) = VariableAddress[x192] : -# 596| r596_2(glval) = FunctionAddress[~String] : -# 596| v596_3(void) = Call[~String] : func:r596_2, this:r596_1 -# 596| mu596_4(unknown) = ^CallSideEffect : ~m? -# 596| v596_5(void) = ^IndirectReadSideEffect[-1] : &:r596_1, ~m? -# 596| mu596_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r596_1 -# 596| r596_7(bool) = Constant[0] : -# 596| v596_8(void) = ConditionalBranch : r596_7 +# 35| Block 193 +# 35| r35_2689(glval) = VariableAddress[x192] : +# 35| mu35_2690(String) = Uninitialized[x192] : &:r35_2689 +# 35| r35_2691(glval) = FunctionAddress[String] : +# 35| v35_2692(void) = Call[String] : func:r35_2691, this:r35_2689 +# 35| mu35_2693(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2689 +# 35| r35_2695(glval) = VariableAddress[x192] : +# 35| r35_2696(glval) = FunctionAddress[~String] : +# 35| v35_2697(void) = Call[~String] : func:r35_2696, this:r35_2695 +# 35| mu35_2698(unknown) = ^CallSideEffect : ~m? +# 35| v35_2699(void) = ^IndirectReadSideEffect[-1] : &:r35_2695, ~m? +# 35| mu35_2700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2695 +# 35| r35_2701(bool) = Constant[0] : +# 35| v35_2702(void) = ConditionalBranch : r35_2701 #-----| False -> Block 194 #-----| True (back edge) -> Block 193 -# 598| Block 194 -# 598| r598_1(glval) = VariableAddress[x193] : -# 598| mu598_2(String) = Uninitialized[x193] : &:r598_1 -# 598| r598_3(glval) = FunctionAddress[String] : -# 598| v598_4(void) = Call[String] : func:r598_3, this:r598_1 -# 598| mu598_5(unknown) = ^CallSideEffect : ~m? -# 598| mu598_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r598_1 -# 599| r599_1(glval) = VariableAddress[x193] : -# 599| r599_2(glval) = FunctionAddress[~String] : -# 599| v599_3(void) = Call[~String] : func:r599_2, this:r599_1 -# 599| mu599_4(unknown) = ^CallSideEffect : ~m? -# 599| v599_5(void) = ^IndirectReadSideEffect[-1] : &:r599_1, ~m? -# 599| mu599_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r599_1 -# 599| r599_7(bool) = Constant[0] : -# 599| v599_8(void) = ConditionalBranch : r599_7 +# 35| Block 194 +# 35| r35_2703(glval) = VariableAddress[x193] : +# 35| mu35_2704(String) = Uninitialized[x193] : &:r35_2703 +# 35| r35_2705(glval) = FunctionAddress[String] : +# 35| v35_2706(void) = Call[String] : func:r35_2705, this:r35_2703 +# 35| mu35_2707(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2703 +# 35| r35_2709(glval) = VariableAddress[x193] : +# 35| r35_2710(glval) = FunctionAddress[~String] : +# 35| v35_2711(void) = Call[~String] : func:r35_2710, this:r35_2709 +# 35| mu35_2712(unknown) = ^CallSideEffect : ~m? +# 35| v35_2713(void) = ^IndirectReadSideEffect[-1] : &:r35_2709, ~m? +# 35| mu35_2714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2709 +# 35| r35_2715(bool) = Constant[0] : +# 35| v35_2716(void) = ConditionalBranch : r35_2715 #-----| False -> Block 195 #-----| True (back edge) -> Block 194 -# 601| Block 195 -# 601| r601_1(glval) = VariableAddress[x194] : -# 601| mu601_2(String) = Uninitialized[x194] : &:r601_1 -# 601| r601_3(glval) = FunctionAddress[String] : -# 601| v601_4(void) = Call[String] : func:r601_3, this:r601_1 -# 601| mu601_5(unknown) = ^CallSideEffect : ~m? -# 601| mu601_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r601_1 -# 602| r602_1(glval) = VariableAddress[x194] : -# 602| r602_2(glval) = FunctionAddress[~String] : -# 602| v602_3(void) = Call[~String] : func:r602_2, this:r602_1 -# 602| mu602_4(unknown) = ^CallSideEffect : ~m? -# 602| v602_5(void) = ^IndirectReadSideEffect[-1] : &:r602_1, ~m? -# 602| mu602_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r602_1 -# 602| r602_7(bool) = Constant[0] : -# 602| v602_8(void) = ConditionalBranch : r602_7 +# 35| Block 195 +# 35| r35_2717(glval) = VariableAddress[x194] : +# 35| mu35_2718(String) = Uninitialized[x194] : &:r35_2717 +# 35| r35_2719(glval) = FunctionAddress[String] : +# 35| v35_2720(void) = Call[String] : func:r35_2719, this:r35_2717 +# 35| mu35_2721(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2717 +# 35| r35_2723(glval) = VariableAddress[x194] : +# 35| r35_2724(glval) = FunctionAddress[~String] : +# 35| v35_2725(void) = Call[~String] : func:r35_2724, this:r35_2723 +# 35| mu35_2726(unknown) = ^CallSideEffect : ~m? +# 35| v35_2727(void) = ^IndirectReadSideEffect[-1] : &:r35_2723, ~m? +# 35| mu35_2728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2723 +# 35| r35_2729(bool) = Constant[0] : +# 35| v35_2730(void) = ConditionalBranch : r35_2729 #-----| False -> Block 196 #-----| True (back edge) -> Block 195 -# 604| Block 196 -# 604| r604_1(glval) = VariableAddress[x195] : -# 604| mu604_2(String) = Uninitialized[x195] : &:r604_1 -# 604| r604_3(glval) = FunctionAddress[String] : -# 604| v604_4(void) = Call[String] : func:r604_3, this:r604_1 -# 604| mu604_5(unknown) = ^CallSideEffect : ~m? -# 604| mu604_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r604_1 -# 605| r605_1(glval) = VariableAddress[x195] : -# 605| r605_2(glval) = FunctionAddress[~String] : -# 605| v605_3(void) = Call[~String] : func:r605_2, this:r605_1 -# 605| mu605_4(unknown) = ^CallSideEffect : ~m? -# 605| v605_5(void) = ^IndirectReadSideEffect[-1] : &:r605_1, ~m? -# 605| mu605_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r605_1 -# 605| r605_7(bool) = Constant[0] : -# 605| v605_8(void) = ConditionalBranch : r605_7 +# 35| Block 196 +# 35| r35_2731(glval) = VariableAddress[x195] : +# 35| mu35_2732(String) = Uninitialized[x195] : &:r35_2731 +# 35| r35_2733(glval) = FunctionAddress[String] : +# 35| v35_2734(void) = Call[String] : func:r35_2733, this:r35_2731 +# 35| mu35_2735(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2731 +# 35| r35_2737(glval) = VariableAddress[x195] : +# 35| r35_2738(glval) = FunctionAddress[~String] : +# 35| v35_2739(void) = Call[~String] : func:r35_2738, this:r35_2737 +# 35| mu35_2740(unknown) = ^CallSideEffect : ~m? +# 35| v35_2741(void) = ^IndirectReadSideEffect[-1] : &:r35_2737, ~m? +# 35| mu35_2742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2737 +# 35| r35_2743(bool) = Constant[0] : +# 35| v35_2744(void) = ConditionalBranch : r35_2743 #-----| False -> Block 197 #-----| True (back edge) -> Block 196 -# 607| Block 197 -# 607| r607_1(glval) = VariableAddress[x196] : -# 607| mu607_2(String) = Uninitialized[x196] : &:r607_1 -# 607| r607_3(glval) = FunctionAddress[String] : -# 607| v607_4(void) = Call[String] : func:r607_3, this:r607_1 -# 607| mu607_5(unknown) = ^CallSideEffect : ~m? -# 607| mu607_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r607_1 -# 608| r608_1(glval) = VariableAddress[x196] : -# 608| r608_2(glval) = FunctionAddress[~String] : -# 608| v608_3(void) = Call[~String] : func:r608_2, this:r608_1 -# 608| mu608_4(unknown) = ^CallSideEffect : ~m? -# 608| v608_5(void) = ^IndirectReadSideEffect[-1] : &:r608_1, ~m? -# 608| mu608_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r608_1 -# 608| r608_7(bool) = Constant[0] : -# 608| v608_8(void) = ConditionalBranch : r608_7 +# 35| Block 197 +# 35| r35_2745(glval) = VariableAddress[x196] : +# 35| mu35_2746(String) = Uninitialized[x196] : &:r35_2745 +# 35| r35_2747(glval) = FunctionAddress[String] : +# 35| v35_2748(void) = Call[String] : func:r35_2747, this:r35_2745 +# 35| mu35_2749(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2745 +# 35| r35_2751(glval) = VariableAddress[x196] : +# 35| r35_2752(glval) = FunctionAddress[~String] : +# 35| v35_2753(void) = Call[~String] : func:r35_2752, this:r35_2751 +# 35| mu35_2754(unknown) = ^CallSideEffect : ~m? +# 35| v35_2755(void) = ^IndirectReadSideEffect[-1] : &:r35_2751, ~m? +# 35| mu35_2756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2751 +# 35| r35_2757(bool) = Constant[0] : +# 35| v35_2758(void) = ConditionalBranch : r35_2757 #-----| False -> Block 198 #-----| True (back edge) -> Block 197 -# 610| Block 198 -# 610| r610_1(glval) = VariableAddress[x197] : -# 610| mu610_2(String) = Uninitialized[x197] : &:r610_1 -# 610| r610_3(glval) = FunctionAddress[String] : -# 610| v610_4(void) = Call[String] : func:r610_3, this:r610_1 -# 610| mu610_5(unknown) = ^CallSideEffect : ~m? -# 610| mu610_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r610_1 -# 611| r611_1(glval) = VariableAddress[x197] : -# 611| r611_2(glval) = FunctionAddress[~String] : -# 611| v611_3(void) = Call[~String] : func:r611_2, this:r611_1 -# 611| mu611_4(unknown) = ^CallSideEffect : ~m? -# 611| v611_5(void) = ^IndirectReadSideEffect[-1] : &:r611_1, ~m? -# 611| mu611_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r611_1 -# 611| r611_7(bool) = Constant[0] : -# 611| v611_8(void) = ConditionalBranch : r611_7 +# 35| Block 198 +# 35| r35_2759(glval) = VariableAddress[x197] : +# 35| mu35_2760(String) = Uninitialized[x197] : &:r35_2759 +# 35| r35_2761(glval) = FunctionAddress[String] : +# 35| v35_2762(void) = Call[String] : func:r35_2761, this:r35_2759 +# 35| mu35_2763(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2759 +# 35| r35_2765(glval) = VariableAddress[x197] : +# 35| r35_2766(glval) = FunctionAddress[~String] : +# 35| v35_2767(void) = Call[~String] : func:r35_2766, this:r35_2765 +# 35| mu35_2768(unknown) = ^CallSideEffect : ~m? +# 35| v35_2769(void) = ^IndirectReadSideEffect[-1] : &:r35_2765, ~m? +# 35| mu35_2770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2765 +# 35| r35_2771(bool) = Constant[0] : +# 35| v35_2772(void) = ConditionalBranch : r35_2771 #-----| False -> Block 199 #-----| True (back edge) -> Block 198 -# 613| Block 199 -# 613| r613_1(glval) = VariableAddress[x198] : -# 613| mu613_2(String) = Uninitialized[x198] : &:r613_1 -# 613| r613_3(glval) = FunctionAddress[String] : -# 613| v613_4(void) = Call[String] : func:r613_3, this:r613_1 -# 613| mu613_5(unknown) = ^CallSideEffect : ~m? -# 613| mu613_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r613_1 -# 614| r614_1(glval) = VariableAddress[x198] : -# 614| r614_2(glval) = FunctionAddress[~String] : -# 614| v614_3(void) = Call[~String] : func:r614_2, this:r614_1 -# 614| mu614_4(unknown) = ^CallSideEffect : ~m? -# 614| v614_5(void) = ^IndirectReadSideEffect[-1] : &:r614_1, ~m? -# 614| mu614_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r614_1 -# 614| r614_7(bool) = Constant[0] : -# 614| v614_8(void) = ConditionalBranch : r614_7 +# 35| Block 199 +# 35| r35_2773(glval) = VariableAddress[x198] : +# 35| mu35_2774(String) = Uninitialized[x198] : &:r35_2773 +# 35| r35_2775(glval) = FunctionAddress[String] : +# 35| v35_2776(void) = Call[String] : func:r35_2775, this:r35_2773 +# 35| mu35_2777(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2773 +# 35| r35_2779(glval) = VariableAddress[x198] : +# 35| r35_2780(glval) = FunctionAddress[~String] : +# 35| v35_2781(void) = Call[~String] : func:r35_2780, this:r35_2779 +# 35| mu35_2782(unknown) = ^CallSideEffect : ~m? +# 35| v35_2783(void) = ^IndirectReadSideEffect[-1] : &:r35_2779, ~m? +# 35| mu35_2784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2779 +# 35| r35_2785(bool) = Constant[0] : +# 35| v35_2786(void) = ConditionalBranch : r35_2785 #-----| False -> Block 200 #-----| True (back edge) -> Block 199 -# 616| Block 200 -# 616| r616_1(glval) = VariableAddress[x199] : -# 616| mu616_2(String) = Uninitialized[x199] : &:r616_1 -# 616| r616_3(glval) = FunctionAddress[String] : -# 616| v616_4(void) = Call[String] : func:r616_3, this:r616_1 -# 616| mu616_5(unknown) = ^CallSideEffect : ~m? -# 616| mu616_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r616_1 -# 617| r617_1(glval) = VariableAddress[x199] : -# 617| r617_2(glval) = FunctionAddress[~String] : -# 617| v617_3(void) = Call[~String] : func:r617_2, this:r617_1 -# 617| mu617_4(unknown) = ^CallSideEffect : ~m? -# 617| v617_5(void) = ^IndirectReadSideEffect[-1] : &:r617_1, ~m? -# 617| mu617_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r617_1 -# 617| r617_7(bool) = Constant[0] : -# 617| v617_8(void) = ConditionalBranch : r617_7 +# 35| Block 200 +# 35| r35_2787(glval) = VariableAddress[x199] : +# 35| mu35_2788(String) = Uninitialized[x199] : &:r35_2787 +# 35| r35_2789(glval) = FunctionAddress[String] : +# 35| v35_2790(void) = Call[String] : func:r35_2789, this:r35_2787 +# 35| mu35_2791(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2787 +# 35| r35_2793(glval) = VariableAddress[x199] : +# 35| r35_2794(glval) = FunctionAddress[~String] : +# 35| v35_2795(void) = Call[~String] : func:r35_2794, this:r35_2793 +# 35| mu35_2796(unknown) = ^CallSideEffect : ~m? +# 35| v35_2797(void) = ^IndirectReadSideEffect[-1] : &:r35_2793, ~m? +# 35| mu35_2798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2793 +# 35| r35_2799(bool) = Constant[0] : +# 35| v35_2800(void) = ConditionalBranch : r35_2799 #-----| False -> Block 201 #-----| True (back edge) -> Block 200 -# 619| Block 201 -# 619| r619_1(glval) = VariableAddress[x200] : -# 619| mu619_2(String) = Uninitialized[x200] : &:r619_1 -# 619| r619_3(glval) = FunctionAddress[String] : -# 619| v619_4(void) = Call[String] : func:r619_3, this:r619_1 -# 619| mu619_5(unknown) = ^CallSideEffect : ~m? -# 619| mu619_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r619_1 -# 620| r620_1(glval) = VariableAddress[x200] : -# 620| r620_2(glval) = FunctionAddress[~String] : -# 620| v620_3(void) = Call[~String] : func:r620_2, this:r620_1 -# 620| mu620_4(unknown) = ^CallSideEffect : ~m? -# 620| v620_5(void) = ^IndirectReadSideEffect[-1] : &:r620_1, ~m? -# 620| mu620_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r620_1 -# 620| r620_7(bool) = Constant[0] : -# 620| v620_8(void) = ConditionalBranch : r620_7 +# 35| Block 201 +# 35| r35_2801(glval) = VariableAddress[x200] : +# 35| mu35_2802(String) = Uninitialized[x200] : &:r35_2801 +# 35| r35_2803(glval) = FunctionAddress[String] : +# 35| v35_2804(void) = Call[String] : func:r35_2803, this:r35_2801 +# 35| mu35_2805(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2801 +# 35| r35_2807(glval) = VariableAddress[x200] : +# 35| r35_2808(glval) = FunctionAddress[~String] : +# 35| v35_2809(void) = Call[~String] : func:r35_2808, this:r35_2807 +# 35| mu35_2810(unknown) = ^CallSideEffect : ~m? +# 35| v35_2811(void) = ^IndirectReadSideEffect[-1] : &:r35_2807, ~m? +# 35| mu35_2812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2807 +# 35| r35_2813(bool) = Constant[0] : +# 35| v35_2814(void) = ConditionalBranch : r35_2813 #-----| False -> Block 202 #-----| True (back edge) -> Block 201 -# 622| Block 202 -# 622| r622_1(glval) = VariableAddress[x201] : -# 622| mu622_2(String) = Uninitialized[x201] : &:r622_1 -# 622| r622_3(glval) = FunctionAddress[String] : -# 622| v622_4(void) = Call[String] : func:r622_3, this:r622_1 -# 622| mu622_5(unknown) = ^CallSideEffect : ~m? -# 622| mu622_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r622_1 -# 623| r623_1(glval) = VariableAddress[x201] : -# 623| r623_2(glval) = FunctionAddress[~String] : -# 623| v623_3(void) = Call[~String] : func:r623_2, this:r623_1 -# 623| mu623_4(unknown) = ^CallSideEffect : ~m? -# 623| v623_5(void) = ^IndirectReadSideEffect[-1] : &:r623_1, ~m? -# 623| mu623_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r623_1 -# 623| r623_7(bool) = Constant[0] : -# 623| v623_8(void) = ConditionalBranch : r623_7 +# 35| Block 202 +# 35| r35_2815(glval) = VariableAddress[x201] : +# 35| mu35_2816(String) = Uninitialized[x201] : &:r35_2815 +# 35| r35_2817(glval) = FunctionAddress[String] : +# 35| v35_2818(void) = Call[String] : func:r35_2817, this:r35_2815 +# 35| mu35_2819(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2815 +# 35| r35_2821(glval) = VariableAddress[x201] : +# 35| r35_2822(glval) = FunctionAddress[~String] : +# 35| v35_2823(void) = Call[~String] : func:r35_2822, this:r35_2821 +# 35| mu35_2824(unknown) = ^CallSideEffect : ~m? +# 35| v35_2825(void) = ^IndirectReadSideEffect[-1] : &:r35_2821, ~m? +# 35| mu35_2826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2821 +# 35| r35_2827(bool) = Constant[0] : +# 35| v35_2828(void) = ConditionalBranch : r35_2827 #-----| False -> Block 203 #-----| True (back edge) -> Block 202 -# 625| Block 203 -# 625| r625_1(glval) = VariableAddress[x202] : -# 625| mu625_2(String) = Uninitialized[x202] : &:r625_1 -# 625| r625_3(glval) = FunctionAddress[String] : -# 625| v625_4(void) = Call[String] : func:r625_3, this:r625_1 -# 625| mu625_5(unknown) = ^CallSideEffect : ~m? -# 625| mu625_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r625_1 -# 626| r626_1(glval) = VariableAddress[x202] : -# 626| r626_2(glval) = FunctionAddress[~String] : -# 626| v626_3(void) = Call[~String] : func:r626_2, this:r626_1 -# 626| mu626_4(unknown) = ^CallSideEffect : ~m? -# 626| v626_5(void) = ^IndirectReadSideEffect[-1] : &:r626_1, ~m? -# 626| mu626_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r626_1 -# 626| r626_7(bool) = Constant[0] : -# 626| v626_8(void) = ConditionalBranch : r626_7 +# 35| Block 203 +# 35| r35_2829(glval) = VariableAddress[x202] : +# 35| mu35_2830(String) = Uninitialized[x202] : &:r35_2829 +# 35| r35_2831(glval) = FunctionAddress[String] : +# 35| v35_2832(void) = Call[String] : func:r35_2831, this:r35_2829 +# 35| mu35_2833(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2829 +# 35| r35_2835(glval) = VariableAddress[x202] : +# 35| r35_2836(glval) = FunctionAddress[~String] : +# 35| v35_2837(void) = Call[~String] : func:r35_2836, this:r35_2835 +# 35| mu35_2838(unknown) = ^CallSideEffect : ~m? +# 35| v35_2839(void) = ^IndirectReadSideEffect[-1] : &:r35_2835, ~m? +# 35| mu35_2840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2835 +# 35| r35_2841(bool) = Constant[0] : +# 35| v35_2842(void) = ConditionalBranch : r35_2841 #-----| False -> Block 204 #-----| True (back edge) -> Block 203 -# 628| Block 204 -# 628| r628_1(glval) = VariableAddress[x203] : -# 628| mu628_2(String) = Uninitialized[x203] : &:r628_1 -# 628| r628_3(glval) = FunctionAddress[String] : -# 628| v628_4(void) = Call[String] : func:r628_3, this:r628_1 -# 628| mu628_5(unknown) = ^CallSideEffect : ~m? -# 628| mu628_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r628_1 -# 629| r629_1(glval) = VariableAddress[x203] : -# 629| r629_2(glval) = FunctionAddress[~String] : -# 629| v629_3(void) = Call[~String] : func:r629_2, this:r629_1 -# 629| mu629_4(unknown) = ^CallSideEffect : ~m? -# 629| v629_5(void) = ^IndirectReadSideEffect[-1] : &:r629_1, ~m? -# 629| mu629_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r629_1 -# 629| r629_7(bool) = Constant[0] : -# 629| v629_8(void) = ConditionalBranch : r629_7 +# 35| Block 204 +# 35| r35_2843(glval) = VariableAddress[x203] : +# 35| mu35_2844(String) = Uninitialized[x203] : &:r35_2843 +# 35| r35_2845(glval) = FunctionAddress[String] : +# 35| v35_2846(void) = Call[String] : func:r35_2845, this:r35_2843 +# 35| mu35_2847(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2843 +# 35| r35_2849(glval) = VariableAddress[x203] : +# 35| r35_2850(glval) = FunctionAddress[~String] : +# 35| v35_2851(void) = Call[~String] : func:r35_2850, this:r35_2849 +# 35| mu35_2852(unknown) = ^CallSideEffect : ~m? +# 35| v35_2853(void) = ^IndirectReadSideEffect[-1] : &:r35_2849, ~m? +# 35| mu35_2854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2849 +# 35| r35_2855(bool) = Constant[0] : +# 35| v35_2856(void) = ConditionalBranch : r35_2855 #-----| False -> Block 205 #-----| True (back edge) -> Block 204 -# 631| Block 205 -# 631| r631_1(glval) = VariableAddress[x204] : -# 631| mu631_2(String) = Uninitialized[x204] : &:r631_1 -# 631| r631_3(glval) = FunctionAddress[String] : -# 631| v631_4(void) = Call[String] : func:r631_3, this:r631_1 -# 631| mu631_5(unknown) = ^CallSideEffect : ~m? -# 631| mu631_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r631_1 -# 632| r632_1(glval) = VariableAddress[x204] : -# 632| r632_2(glval) = FunctionAddress[~String] : -# 632| v632_3(void) = Call[~String] : func:r632_2, this:r632_1 -# 632| mu632_4(unknown) = ^CallSideEffect : ~m? -# 632| v632_5(void) = ^IndirectReadSideEffect[-1] : &:r632_1, ~m? -# 632| mu632_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r632_1 -# 632| r632_7(bool) = Constant[0] : -# 632| v632_8(void) = ConditionalBranch : r632_7 +# 35| Block 205 +# 35| r35_2857(glval) = VariableAddress[x204] : +# 35| mu35_2858(String) = Uninitialized[x204] : &:r35_2857 +# 35| r35_2859(glval) = FunctionAddress[String] : +# 35| v35_2860(void) = Call[String] : func:r35_2859, this:r35_2857 +# 35| mu35_2861(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2857 +# 35| r35_2863(glval) = VariableAddress[x204] : +# 35| r35_2864(glval) = FunctionAddress[~String] : +# 35| v35_2865(void) = Call[~String] : func:r35_2864, this:r35_2863 +# 35| mu35_2866(unknown) = ^CallSideEffect : ~m? +# 35| v35_2867(void) = ^IndirectReadSideEffect[-1] : &:r35_2863, ~m? +# 35| mu35_2868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2863 +# 35| r35_2869(bool) = Constant[0] : +# 35| v35_2870(void) = ConditionalBranch : r35_2869 #-----| False -> Block 206 #-----| True (back edge) -> Block 205 -# 634| Block 206 -# 634| r634_1(glval) = VariableAddress[x205] : -# 634| mu634_2(String) = Uninitialized[x205] : &:r634_1 -# 634| r634_3(glval) = FunctionAddress[String] : -# 634| v634_4(void) = Call[String] : func:r634_3, this:r634_1 -# 634| mu634_5(unknown) = ^CallSideEffect : ~m? -# 634| mu634_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r634_1 -# 635| r635_1(glval) = VariableAddress[x205] : -# 635| r635_2(glval) = FunctionAddress[~String] : -# 635| v635_3(void) = Call[~String] : func:r635_2, this:r635_1 -# 635| mu635_4(unknown) = ^CallSideEffect : ~m? -# 635| v635_5(void) = ^IndirectReadSideEffect[-1] : &:r635_1, ~m? -# 635| mu635_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r635_1 -# 635| r635_7(bool) = Constant[0] : -# 635| v635_8(void) = ConditionalBranch : r635_7 +# 35| Block 206 +# 35| r35_2871(glval) = VariableAddress[x205] : +# 35| mu35_2872(String) = Uninitialized[x205] : &:r35_2871 +# 35| r35_2873(glval) = FunctionAddress[String] : +# 35| v35_2874(void) = Call[String] : func:r35_2873, this:r35_2871 +# 35| mu35_2875(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2871 +# 35| r35_2877(glval) = VariableAddress[x205] : +# 35| r35_2878(glval) = FunctionAddress[~String] : +# 35| v35_2879(void) = Call[~String] : func:r35_2878, this:r35_2877 +# 35| mu35_2880(unknown) = ^CallSideEffect : ~m? +# 35| v35_2881(void) = ^IndirectReadSideEffect[-1] : &:r35_2877, ~m? +# 35| mu35_2882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2877 +# 35| r35_2883(bool) = Constant[0] : +# 35| v35_2884(void) = ConditionalBranch : r35_2883 #-----| False -> Block 207 #-----| True (back edge) -> Block 206 -# 637| Block 207 -# 637| r637_1(glval) = VariableAddress[x206] : -# 637| mu637_2(String) = Uninitialized[x206] : &:r637_1 -# 637| r637_3(glval) = FunctionAddress[String] : -# 637| v637_4(void) = Call[String] : func:r637_3, this:r637_1 -# 637| mu637_5(unknown) = ^CallSideEffect : ~m? -# 637| mu637_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r637_1 -# 638| r638_1(glval) = VariableAddress[x206] : -# 638| r638_2(glval) = FunctionAddress[~String] : -# 638| v638_3(void) = Call[~String] : func:r638_2, this:r638_1 -# 638| mu638_4(unknown) = ^CallSideEffect : ~m? -# 638| v638_5(void) = ^IndirectReadSideEffect[-1] : &:r638_1, ~m? -# 638| mu638_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r638_1 -# 638| r638_7(bool) = Constant[0] : -# 638| v638_8(void) = ConditionalBranch : r638_7 +# 35| Block 207 +# 35| r35_2885(glval) = VariableAddress[x206] : +# 35| mu35_2886(String) = Uninitialized[x206] : &:r35_2885 +# 35| r35_2887(glval) = FunctionAddress[String] : +# 35| v35_2888(void) = Call[String] : func:r35_2887, this:r35_2885 +# 35| mu35_2889(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2885 +# 35| r35_2891(glval) = VariableAddress[x206] : +# 35| r35_2892(glval) = FunctionAddress[~String] : +# 35| v35_2893(void) = Call[~String] : func:r35_2892, this:r35_2891 +# 35| mu35_2894(unknown) = ^CallSideEffect : ~m? +# 35| v35_2895(void) = ^IndirectReadSideEffect[-1] : &:r35_2891, ~m? +# 35| mu35_2896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2891 +# 35| r35_2897(bool) = Constant[0] : +# 35| v35_2898(void) = ConditionalBranch : r35_2897 #-----| False -> Block 208 #-----| True (back edge) -> Block 207 -# 640| Block 208 -# 640| r640_1(glval) = VariableAddress[x207] : -# 640| mu640_2(String) = Uninitialized[x207] : &:r640_1 -# 640| r640_3(glval) = FunctionAddress[String] : -# 640| v640_4(void) = Call[String] : func:r640_3, this:r640_1 -# 640| mu640_5(unknown) = ^CallSideEffect : ~m? -# 640| mu640_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r640_1 -# 641| r641_1(glval) = VariableAddress[x207] : -# 641| r641_2(glval) = FunctionAddress[~String] : -# 641| v641_3(void) = Call[~String] : func:r641_2, this:r641_1 -# 641| mu641_4(unknown) = ^CallSideEffect : ~m? -# 641| v641_5(void) = ^IndirectReadSideEffect[-1] : &:r641_1, ~m? -# 641| mu641_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r641_1 -# 641| r641_7(bool) = Constant[0] : -# 641| v641_8(void) = ConditionalBranch : r641_7 +# 35| Block 208 +# 35| r35_2899(glval) = VariableAddress[x207] : +# 35| mu35_2900(String) = Uninitialized[x207] : &:r35_2899 +# 35| r35_2901(glval) = FunctionAddress[String] : +# 35| v35_2902(void) = Call[String] : func:r35_2901, this:r35_2899 +# 35| mu35_2903(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2899 +# 35| r35_2905(glval) = VariableAddress[x207] : +# 35| r35_2906(glval) = FunctionAddress[~String] : +# 35| v35_2907(void) = Call[~String] : func:r35_2906, this:r35_2905 +# 35| mu35_2908(unknown) = ^CallSideEffect : ~m? +# 35| v35_2909(void) = ^IndirectReadSideEffect[-1] : &:r35_2905, ~m? +# 35| mu35_2910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2905 +# 35| r35_2911(bool) = Constant[0] : +# 35| v35_2912(void) = ConditionalBranch : r35_2911 #-----| False -> Block 209 #-----| True (back edge) -> Block 208 -# 643| Block 209 -# 643| r643_1(glval) = VariableAddress[x208] : -# 643| mu643_2(String) = Uninitialized[x208] : &:r643_1 -# 643| r643_3(glval) = FunctionAddress[String] : -# 643| v643_4(void) = Call[String] : func:r643_3, this:r643_1 -# 643| mu643_5(unknown) = ^CallSideEffect : ~m? -# 643| mu643_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r643_1 -# 644| r644_1(glval) = VariableAddress[x208] : -# 644| r644_2(glval) = FunctionAddress[~String] : -# 644| v644_3(void) = Call[~String] : func:r644_2, this:r644_1 -# 644| mu644_4(unknown) = ^CallSideEffect : ~m? -# 644| v644_5(void) = ^IndirectReadSideEffect[-1] : &:r644_1, ~m? -# 644| mu644_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r644_1 -# 644| r644_7(bool) = Constant[0] : -# 644| v644_8(void) = ConditionalBranch : r644_7 +# 35| Block 209 +# 35| r35_2913(glval) = VariableAddress[x208] : +# 35| mu35_2914(String) = Uninitialized[x208] : &:r35_2913 +# 35| r35_2915(glval) = FunctionAddress[String] : +# 35| v35_2916(void) = Call[String] : func:r35_2915, this:r35_2913 +# 35| mu35_2917(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2913 +# 35| r35_2919(glval) = VariableAddress[x208] : +# 35| r35_2920(glval) = FunctionAddress[~String] : +# 35| v35_2921(void) = Call[~String] : func:r35_2920, this:r35_2919 +# 35| mu35_2922(unknown) = ^CallSideEffect : ~m? +# 35| v35_2923(void) = ^IndirectReadSideEffect[-1] : &:r35_2919, ~m? +# 35| mu35_2924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2919 +# 35| r35_2925(bool) = Constant[0] : +# 35| v35_2926(void) = ConditionalBranch : r35_2925 #-----| False -> Block 210 #-----| True (back edge) -> Block 209 -# 646| Block 210 -# 646| r646_1(glval) = VariableAddress[x209] : -# 646| mu646_2(String) = Uninitialized[x209] : &:r646_1 -# 646| r646_3(glval) = FunctionAddress[String] : -# 646| v646_4(void) = Call[String] : func:r646_3, this:r646_1 -# 646| mu646_5(unknown) = ^CallSideEffect : ~m? -# 646| mu646_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r646_1 -# 647| r647_1(glval) = VariableAddress[x209] : -# 647| r647_2(glval) = FunctionAddress[~String] : -# 647| v647_3(void) = Call[~String] : func:r647_2, this:r647_1 -# 647| mu647_4(unknown) = ^CallSideEffect : ~m? -# 647| v647_5(void) = ^IndirectReadSideEffect[-1] : &:r647_1, ~m? -# 647| mu647_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r647_1 -# 647| r647_7(bool) = Constant[0] : -# 647| v647_8(void) = ConditionalBranch : r647_7 +# 35| Block 210 +# 35| r35_2927(glval) = VariableAddress[x209] : +# 35| mu35_2928(String) = Uninitialized[x209] : &:r35_2927 +# 35| r35_2929(glval) = FunctionAddress[String] : +# 35| v35_2930(void) = Call[String] : func:r35_2929, this:r35_2927 +# 35| mu35_2931(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2927 +# 35| r35_2933(glval) = VariableAddress[x209] : +# 35| r35_2934(glval) = FunctionAddress[~String] : +# 35| v35_2935(void) = Call[~String] : func:r35_2934, this:r35_2933 +# 35| mu35_2936(unknown) = ^CallSideEffect : ~m? +# 35| v35_2937(void) = ^IndirectReadSideEffect[-1] : &:r35_2933, ~m? +# 35| mu35_2938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2933 +# 35| r35_2939(bool) = Constant[0] : +# 35| v35_2940(void) = ConditionalBranch : r35_2939 #-----| False -> Block 211 #-----| True (back edge) -> Block 210 -# 649| Block 211 -# 649| r649_1(glval) = VariableAddress[x210] : -# 649| mu649_2(String) = Uninitialized[x210] : &:r649_1 -# 649| r649_3(glval) = FunctionAddress[String] : -# 649| v649_4(void) = Call[String] : func:r649_3, this:r649_1 -# 649| mu649_5(unknown) = ^CallSideEffect : ~m? -# 649| mu649_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r649_1 -# 650| r650_1(glval) = VariableAddress[x210] : -# 650| r650_2(glval) = FunctionAddress[~String] : -# 650| v650_3(void) = Call[~String] : func:r650_2, this:r650_1 -# 650| mu650_4(unknown) = ^CallSideEffect : ~m? -# 650| v650_5(void) = ^IndirectReadSideEffect[-1] : &:r650_1, ~m? -# 650| mu650_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r650_1 -# 650| r650_7(bool) = Constant[0] : -# 650| v650_8(void) = ConditionalBranch : r650_7 +# 35| Block 211 +# 35| r35_2941(glval) = VariableAddress[x210] : +# 35| mu35_2942(String) = Uninitialized[x210] : &:r35_2941 +# 35| r35_2943(glval) = FunctionAddress[String] : +# 35| v35_2944(void) = Call[String] : func:r35_2943, this:r35_2941 +# 35| mu35_2945(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2941 +# 35| r35_2947(glval) = VariableAddress[x210] : +# 35| r35_2948(glval) = FunctionAddress[~String] : +# 35| v35_2949(void) = Call[~String] : func:r35_2948, this:r35_2947 +# 35| mu35_2950(unknown) = ^CallSideEffect : ~m? +# 35| v35_2951(void) = ^IndirectReadSideEffect[-1] : &:r35_2947, ~m? +# 35| mu35_2952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2947 +# 35| r35_2953(bool) = Constant[0] : +# 35| v35_2954(void) = ConditionalBranch : r35_2953 #-----| False -> Block 212 #-----| True (back edge) -> Block 211 -# 652| Block 212 -# 652| r652_1(glval) = VariableAddress[x211] : -# 652| mu652_2(String) = Uninitialized[x211] : &:r652_1 -# 652| r652_3(glval) = FunctionAddress[String] : -# 652| v652_4(void) = Call[String] : func:r652_3, this:r652_1 -# 652| mu652_5(unknown) = ^CallSideEffect : ~m? -# 652| mu652_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r652_1 -# 653| r653_1(glval) = VariableAddress[x211] : -# 653| r653_2(glval) = FunctionAddress[~String] : -# 653| v653_3(void) = Call[~String] : func:r653_2, this:r653_1 -# 653| mu653_4(unknown) = ^CallSideEffect : ~m? -# 653| v653_5(void) = ^IndirectReadSideEffect[-1] : &:r653_1, ~m? -# 653| mu653_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r653_1 -# 653| r653_7(bool) = Constant[0] : -# 653| v653_8(void) = ConditionalBranch : r653_7 +# 35| Block 212 +# 35| r35_2955(glval) = VariableAddress[x211] : +# 35| mu35_2956(String) = Uninitialized[x211] : &:r35_2955 +# 35| r35_2957(glval) = FunctionAddress[String] : +# 35| v35_2958(void) = Call[String] : func:r35_2957, this:r35_2955 +# 35| mu35_2959(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2955 +# 35| r35_2961(glval) = VariableAddress[x211] : +# 35| r35_2962(glval) = FunctionAddress[~String] : +# 35| v35_2963(void) = Call[~String] : func:r35_2962, this:r35_2961 +# 35| mu35_2964(unknown) = ^CallSideEffect : ~m? +# 35| v35_2965(void) = ^IndirectReadSideEffect[-1] : &:r35_2961, ~m? +# 35| mu35_2966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2961 +# 35| r35_2967(bool) = Constant[0] : +# 35| v35_2968(void) = ConditionalBranch : r35_2967 #-----| False -> Block 213 #-----| True (back edge) -> Block 212 -# 655| Block 213 -# 655| r655_1(glval) = VariableAddress[x212] : -# 655| mu655_2(String) = Uninitialized[x212] : &:r655_1 -# 655| r655_3(glval) = FunctionAddress[String] : -# 655| v655_4(void) = Call[String] : func:r655_3, this:r655_1 -# 655| mu655_5(unknown) = ^CallSideEffect : ~m? -# 655| mu655_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r655_1 -# 656| r656_1(glval) = VariableAddress[x212] : -# 656| r656_2(glval) = FunctionAddress[~String] : -# 656| v656_3(void) = Call[~String] : func:r656_2, this:r656_1 -# 656| mu656_4(unknown) = ^CallSideEffect : ~m? -# 656| v656_5(void) = ^IndirectReadSideEffect[-1] : &:r656_1, ~m? -# 656| mu656_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r656_1 -# 656| r656_7(bool) = Constant[0] : -# 656| v656_8(void) = ConditionalBranch : r656_7 +# 35| Block 213 +# 35| r35_2969(glval) = VariableAddress[x212] : +# 35| mu35_2970(String) = Uninitialized[x212] : &:r35_2969 +# 35| r35_2971(glval) = FunctionAddress[String] : +# 35| v35_2972(void) = Call[String] : func:r35_2971, this:r35_2969 +# 35| mu35_2973(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2969 +# 35| r35_2975(glval) = VariableAddress[x212] : +# 35| r35_2976(glval) = FunctionAddress[~String] : +# 35| v35_2977(void) = Call[~String] : func:r35_2976, this:r35_2975 +# 35| mu35_2978(unknown) = ^CallSideEffect : ~m? +# 35| v35_2979(void) = ^IndirectReadSideEffect[-1] : &:r35_2975, ~m? +# 35| mu35_2980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2975 +# 35| r35_2981(bool) = Constant[0] : +# 35| v35_2982(void) = ConditionalBranch : r35_2981 #-----| False -> Block 214 #-----| True (back edge) -> Block 213 -# 658| Block 214 -# 658| r658_1(glval) = VariableAddress[x213] : -# 658| mu658_2(String) = Uninitialized[x213] : &:r658_1 -# 658| r658_3(glval) = FunctionAddress[String] : -# 658| v658_4(void) = Call[String] : func:r658_3, this:r658_1 -# 658| mu658_5(unknown) = ^CallSideEffect : ~m? -# 658| mu658_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r658_1 -# 659| r659_1(glval) = VariableAddress[x213] : -# 659| r659_2(glval) = FunctionAddress[~String] : -# 659| v659_3(void) = Call[~String] : func:r659_2, this:r659_1 -# 659| mu659_4(unknown) = ^CallSideEffect : ~m? -# 659| v659_5(void) = ^IndirectReadSideEffect[-1] : &:r659_1, ~m? -# 659| mu659_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r659_1 -# 659| r659_7(bool) = Constant[0] : -# 659| v659_8(void) = ConditionalBranch : r659_7 +# 35| Block 214 +# 35| r35_2983(glval) = VariableAddress[x213] : +# 35| mu35_2984(String) = Uninitialized[x213] : &:r35_2983 +# 35| r35_2985(glval) = FunctionAddress[String] : +# 35| v35_2986(void) = Call[String] : func:r35_2985, this:r35_2983 +# 35| mu35_2987(unknown) = ^CallSideEffect : ~m? +# 35| mu35_2988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2983 +# 35| r35_2989(glval) = VariableAddress[x213] : +# 35| r35_2990(glval) = FunctionAddress[~String] : +# 35| v35_2991(void) = Call[~String] : func:r35_2990, this:r35_2989 +# 35| mu35_2992(unknown) = ^CallSideEffect : ~m? +# 35| v35_2993(void) = ^IndirectReadSideEffect[-1] : &:r35_2989, ~m? +# 35| mu35_2994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2989 +# 35| r35_2995(bool) = Constant[0] : +# 35| v35_2996(void) = ConditionalBranch : r35_2995 #-----| False -> Block 215 #-----| True (back edge) -> Block 214 -# 661| Block 215 -# 661| r661_1(glval) = VariableAddress[x214] : -# 661| mu661_2(String) = Uninitialized[x214] : &:r661_1 -# 661| r661_3(glval) = FunctionAddress[String] : -# 661| v661_4(void) = Call[String] : func:r661_3, this:r661_1 -# 661| mu661_5(unknown) = ^CallSideEffect : ~m? -# 661| mu661_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r661_1 -# 662| r662_1(glval) = VariableAddress[x214] : -# 662| r662_2(glval) = FunctionAddress[~String] : -# 662| v662_3(void) = Call[~String] : func:r662_2, this:r662_1 -# 662| mu662_4(unknown) = ^CallSideEffect : ~m? -# 662| v662_5(void) = ^IndirectReadSideEffect[-1] : &:r662_1, ~m? -# 662| mu662_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r662_1 -# 662| r662_7(bool) = Constant[0] : -# 662| v662_8(void) = ConditionalBranch : r662_7 +# 35| Block 215 +# 35| r35_2997(glval) = VariableAddress[x214] : +# 35| mu35_2998(String) = Uninitialized[x214] : &:r35_2997 +# 35| r35_2999(glval) = FunctionAddress[String] : +# 35| v35_3000(void) = Call[String] : func:r35_2999, this:r35_2997 +# 35| mu35_3001(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_2997 +# 35| r35_3003(glval) = VariableAddress[x214] : +# 35| r35_3004(glval) = FunctionAddress[~String] : +# 35| v35_3005(void) = Call[~String] : func:r35_3004, this:r35_3003 +# 35| mu35_3006(unknown) = ^CallSideEffect : ~m? +# 35| v35_3007(void) = ^IndirectReadSideEffect[-1] : &:r35_3003, ~m? +# 35| mu35_3008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3003 +# 35| r35_3009(bool) = Constant[0] : +# 35| v35_3010(void) = ConditionalBranch : r35_3009 #-----| False -> Block 216 #-----| True (back edge) -> Block 215 -# 664| Block 216 -# 664| r664_1(glval) = VariableAddress[x215] : -# 664| mu664_2(String) = Uninitialized[x215] : &:r664_1 -# 664| r664_3(glval) = FunctionAddress[String] : -# 664| v664_4(void) = Call[String] : func:r664_3, this:r664_1 -# 664| mu664_5(unknown) = ^CallSideEffect : ~m? -# 664| mu664_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r664_1 -# 665| r665_1(glval) = VariableAddress[x215] : -# 665| r665_2(glval) = FunctionAddress[~String] : -# 665| v665_3(void) = Call[~String] : func:r665_2, this:r665_1 -# 665| mu665_4(unknown) = ^CallSideEffect : ~m? -# 665| v665_5(void) = ^IndirectReadSideEffect[-1] : &:r665_1, ~m? -# 665| mu665_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r665_1 -# 665| r665_7(bool) = Constant[0] : -# 665| v665_8(void) = ConditionalBranch : r665_7 +# 35| Block 216 +# 35| r35_3011(glval) = VariableAddress[x215] : +# 35| mu35_3012(String) = Uninitialized[x215] : &:r35_3011 +# 35| r35_3013(glval) = FunctionAddress[String] : +# 35| v35_3014(void) = Call[String] : func:r35_3013, this:r35_3011 +# 35| mu35_3015(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3011 +# 35| r35_3017(glval) = VariableAddress[x215] : +# 35| r35_3018(glval) = FunctionAddress[~String] : +# 35| v35_3019(void) = Call[~String] : func:r35_3018, this:r35_3017 +# 35| mu35_3020(unknown) = ^CallSideEffect : ~m? +# 35| v35_3021(void) = ^IndirectReadSideEffect[-1] : &:r35_3017, ~m? +# 35| mu35_3022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3017 +# 35| r35_3023(bool) = Constant[0] : +# 35| v35_3024(void) = ConditionalBranch : r35_3023 #-----| False -> Block 217 #-----| True (back edge) -> Block 216 -# 667| Block 217 -# 667| r667_1(glval) = VariableAddress[x216] : -# 667| mu667_2(String) = Uninitialized[x216] : &:r667_1 -# 667| r667_3(glval) = FunctionAddress[String] : -# 667| v667_4(void) = Call[String] : func:r667_3, this:r667_1 -# 667| mu667_5(unknown) = ^CallSideEffect : ~m? -# 667| mu667_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r667_1 -# 668| r668_1(glval) = VariableAddress[x216] : -# 668| r668_2(glval) = FunctionAddress[~String] : -# 668| v668_3(void) = Call[~String] : func:r668_2, this:r668_1 -# 668| mu668_4(unknown) = ^CallSideEffect : ~m? -# 668| v668_5(void) = ^IndirectReadSideEffect[-1] : &:r668_1, ~m? -# 668| mu668_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r668_1 -# 668| r668_7(bool) = Constant[0] : -# 668| v668_8(void) = ConditionalBranch : r668_7 +# 35| Block 217 +# 35| r35_3025(glval) = VariableAddress[x216] : +# 35| mu35_3026(String) = Uninitialized[x216] : &:r35_3025 +# 35| r35_3027(glval) = FunctionAddress[String] : +# 35| v35_3028(void) = Call[String] : func:r35_3027, this:r35_3025 +# 35| mu35_3029(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3025 +# 35| r35_3031(glval) = VariableAddress[x216] : +# 35| r35_3032(glval) = FunctionAddress[~String] : +# 35| v35_3033(void) = Call[~String] : func:r35_3032, this:r35_3031 +# 35| mu35_3034(unknown) = ^CallSideEffect : ~m? +# 35| v35_3035(void) = ^IndirectReadSideEffect[-1] : &:r35_3031, ~m? +# 35| mu35_3036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3031 +# 35| r35_3037(bool) = Constant[0] : +# 35| v35_3038(void) = ConditionalBranch : r35_3037 #-----| False -> Block 218 #-----| True (back edge) -> Block 217 -# 670| Block 218 -# 670| r670_1(glval) = VariableAddress[x217] : -# 670| mu670_2(String) = Uninitialized[x217] : &:r670_1 -# 670| r670_3(glval) = FunctionAddress[String] : -# 670| v670_4(void) = Call[String] : func:r670_3, this:r670_1 -# 670| mu670_5(unknown) = ^CallSideEffect : ~m? -# 670| mu670_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r670_1 -# 671| r671_1(glval) = VariableAddress[x217] : -# 671| r671_2(glval) = FunctionAddress[~String] : -# 671| v671_3(void) = Call[~String] : func:r671_2, this:r671_1 -# 671| mu671_4(unknown) = ^CallSideEffect : ~m? -# 671| v671_5(void) = ^IndirectReadSideEffect[-1] : &:r671_1, ~m? -# 671| mu671_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r671_1 -# 671| r671_7(bool) = Constant[0] : -# 671| v671_8(void) = ConditionalBranch : r671_7 +# 35| Block 218 +# 35| r35_3039(glval) = VariableAddress[x217] : +# 35| mu35_3040(String) = Uninitialized[x217] : &:r35_3039 +# 35| r35_3041(glval) = FunctionAddress[String] : +# 35| v35_3042(void) = Call[String] : func:r35_3041, this:r35_3039 +# 35| mu35_3043(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3039 +# 35| r35_3045(glval) = VariableAddress[x217] : +# 35| r35_3046(glval) = FunctionAddress[~String] : +# 35| v35_3047(void) = Call[~String] : func:r35_3046, this:r35_3045 +# 35| mu35_3048(unknown) = ^CallSideEffect : ~m? +# 35| v35_3049(void) = ^IndirectReadSideEffect[-1] : &:r35_3045, ~m? +# 35| mu35_3050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3045 +# 35| r35_3051(bool) = Constant[0] : +# 35| v35_3052(void) = ConditionalBranch : r35_3051 #-----| False -> Block 219 #-----| True (back edge) -> Block 218 -# 673| Block 219 -# 673| r673_1(glval) = VariableAddress[x218] : -# 673| mu673_2(String) = Uninitialized[x218] : &:r673_1 -# 673| r673_3(glval) = FunctionAddress[String] : -# 673| v673_4(void) = Call[String] : func:r673_3, this:r673_1 -# 673| mu673_5(unknown) = ^CallSideEffect : ~m? -# 673| mu673_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r673_1 -# 674| r674_1(glval) = VariableAddress[x218] : -# 674| r674_2(glval) = FunctionAddress[~String] : -# 674| v674_3(void) = Call[~String] : func:r674_2, this:r674_1 -# 674| mu674_4(unknown) = ^CallSideEffect : ~m? -# 674| v674_5(void) = ^IndirectReadSideEffect[-1] : &:r674_1, ~m? -# 674| mu674_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r674_1 -# 674| r674_7(bool) = Constant[0] : -# 674| v674_8(void) = ConditionalBranch : r674_7 +# 35| Block 219 +# 35| r35_3053(glval) = VariableAddress[x218] : +# 35| mu35_3054(String) = Uninitialized[x218] : &:r35_3053 +# 35| r35_3055(glval) = FunctionAddress[String] : +# 35| v35_3056(void) = Call[String] : func:r35_3055, this:r35_3053 +# 35| mu35_3057(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3053 +# 35| r35_3059(glval) = VariableAddress[x218] : +# 35| r35_3060(glval) = FunctionAddress[~String] : +# 35| v35_3061(void) = Call[~String] : func:r35_3060, this:r35_3059 +# 35| mu35_3062(unknown) = ^CallSideEffect : ~m? +# 35| v35_3063(void) = ^IndirectReadSideEffect[-1] : &:r35_3059, ~m? +# 35| mu35_3064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3059 +# 35| r35_3065(bool) = Constant[0] : +# 35| v35_3066(void) = ConditionalBranch : r35_3065 #-----| False -> Block 220 #-----| True (back edge) -> Block 219 -# 676| Block 220 -# 676| r676_1(glval) = VariableAddress[x219] : -# 676| mu676_2(String) = Uninitialized[x219] : &:r676_1 -# 676| r676_3(glval) = FunctionAddress[String] : -# 676| v676_4(void) = Call[String] : func:r676_3, this:r676_1 -# 676| mu676_5(unknown) = ^CallSideEffect : ~m? -# 676| mu676_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r676_1 -# 677| r677_1(glval) = VariableAddress[x219] : -# 677| r677_2(glval) = FunctionAddress[~String] : -# 677| v677_3(void) = Call[~String] : func:r677_2, this:r677_1 -# 677| mu677_4(unknown) = ^CallSideEffect : ~m? -# 677| v677_5(void) = ^IndirectReadSideEffect[-1] : &:r677_1, ~m? -# 677| mu677_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r677_1 -# 677| r677_7(bool) = Constant[0] : -# 677| v677_8(void) = ConditionalBranch : r677_7 +# 35| Block 220 +# 35| r35_3067(glval) = VariableAddress[x219] : +# 35| mu35_3068(String) = Uninitialized[x219] : &:r35_3067 +# 35| r35_3069(glval) = FunctionAddress[String] : +# 35| v35_3070(void) = Call[String] : func:r35_3069, this:r35_3067 +# 35| mu35_3071(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3067 +# 35| r35_3073(glval) = VariableAddress[x219] : +# 35| r35_3074(glval) = FunctionAddress[~String] : +# 35| v35_3075(void) = Call[~String] : func:r35_3074, this:r35_3073 +# 35| mu35_3076(unknown) = ^CallSideEffect : ~m? +# 35| v35_3077(void) = ^IndirectReadSideEffect[-1] : &:r35_3073, ~m? +# 35| mu35_3078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3073 +# 35| r35_3079(bool) = Constant[0] : +# 35| v35_3080(void) = ConditionalBranch : r35_3079 #-----| False -> Block 221 #-----| True (back edge) -> Block 220 -# 679| Block 221 -# 679| r679_1(glval) = VariableAddress[x220] : -# 679| mu679_2(String) = Uninitialized[x220] : &:r679_1 -# 679| r679_3(glval) = FunctionAddress[String] : -# 679| v679_4(void) = Call[String] : func:r679_3, this:r679_1 -# 679| mu679_5(unknown) = ^CallSideEffect : ~m? -# 679| mu679_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r679_1 -# 680| r680_1(glval) = VariableAddress[x220] : -# 680| r680_2(glval) = FunctionAddress[~String] : -# 680| v680_3(void) = Call[~String] : func:r680_2, this:r680_1 -# 680| mu680_4(unknown) = ^CallSideEffect : ~m? -# 680| v680_5(void) = ^IndirectReadSideEffect[-1] : &:r680_1, ~m? -# 680| mu680_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r680_1 -# 680| r680_7(bool) = Constant[0] : -# 680| v680_8(void) = ConditionalBranch : r680_7 +# 35| Block 221 +# 35| r35_3081(glval) = VariableAddress[x220] : +# 35| mu35_3082(String) = Uninitialized[x220] : &:r35_3081 +# 35| r35_3083(glval) = FunctionAddress[String] : +# 35| v35_3084(void) = Call[String] : func:r35_3083, this:r35_3081 +# 35| mu35_3085(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3081 +# 35| r35_3087(glval) = VariableAddress[x220] : +# 35| r35_3088(glval) = FunctionAddress[~String] : +# 35| v35_3089(void) = Call[~String] : func:r35_3088, this:r35_3087 +# 35| mu35_3090(unknown) = ^CallSideEffect : ~m? +# 35| v35_3091(void) = ^IndirectReadSideEffect[-1] : &:r35_3087, ~m? +# 35| mu35_3092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3087 +# 35| r35_3093(bool) = Constant[0] : +# 35| v35_3094(void) = ConditionalBranch : r35_3093 #-----| False -> Block 222 #-----| True (back edge) -> Block 221 -# 682| Block 222 -# 682| r682_1(glval) = VariableAddress[x221] : -# 682| mu682_2(String) = Uninitialized[x221] : &:r682_1 -# 682| r682_3(glval) = FunctionAddress[String] : -# 682| v682_4(void) = Call[String] : func:r682_3, this:r682_1 -# 682| mu682_5(unknown) = ^CallSideEffect : ~m? -# 682| mu682_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r682_1 -# 683| r683_1(glval) = VariableAddress[x221] : -# 683| r683_2(glval) = FunctionAddress[~String] : -# 683| v683_3(void) = Call[~String] : func:r683_2, this:r683_1 -# 683| mu683_4(unknown) = ^CallSideEffect : ~m? -# 683| v683_5(void) = ^IndirectReadSideEffect[-1] : &:r683_1, ~m? -# 683| mu683_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r683_1 -# 683| r683_7(bool) = Constant[0] : -# 683| v683_8(void) = ConditionalBranch : r683_7 +# 35| Block 222 +# 35| r35_3095(glval) = VariableAddress[x221] : +# 35| mu35_3096(String) = Uninitialized[x221] : &:r35_3095 +# 35| r35_3097(glval) = FunctionAddress[String] : +# 35| v35_3098(void) = Call[String] : func:r35_3097, this:r35_3095 +# 35| mu35_3099(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3095 +# 35| r35_3101(glval) = VariableAddress[x221] : +# 35| r35_3102(glval) = FunctionAddress[~String] : +# 35| v35_3103(void) = Call[~String] : func:r35_3102, this:r35_3101 +# 35| mu35_3104(unknown) = ^CallSideEffect : ~m? +# 35| v35_3105(void) = ^IndirectReadSideEffect[-1] : &:r35_3101, ~m? +# 35| mu35_3106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3101 +# 35| r35_3107(bool) = Constant[0] : +# 35| v35_3108(void) = ConditionalBranch : r35_3107 #-----| False -> Block 223 #-----| True (back edge) -> Block 222 -# 685| Block 223 -# 685| r685_1(glval) = VariableAddress[x222] : -# 685| mu685_2(String) = Uninitialized[x222] : &:r685_1 -# 685| r685_3(glval) = FunctionAddress[String] : -# 685| v685_4(void) = Call[String] : func:r685_3, this:r685_1 -# 685| mu685_5(unknown) = ^CallSideEffect : ~m? -# 685| mu685_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r685_1 -# 686| r686_1(glval) = VariableAddress[x222] : -# 686| r686_2(glval) = FunctionAddress[~String] : -# 686| v686_3(void) = Call[~String] : func:r686_2, this:r686_1 -# 686| mu686_4(unknown) = ^CallSideEffect : ~m? -# 686| v686_5(void) = ^IndirectReadSideEffect[-1] : &:r686_1, ~m? -# 686| mu686_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r686_1 -# 686| r686_7(bool) = Constant[0] : -# 686| v686_8(void) = ConditionalBranch : r686_7 +# 35| Block 223 +# 35| r35_3109(glval) = VariableAddress[x222] : +# 35| mu35_3110(String) = Uninitialized[x222] : &:r35_3109 +# 35| r35_3111(glval) = FunctionAddress[String] : +# 35| v35_3112(void) = Call[String] : func:r35_3111, this:r35_3109 +# 35| mu35_3113(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3109 +# 35| r35_3115(glval) = VariableAddress[x222] : +# 35| r35_3116(glval) = FunctionAddress[~String] : +# 35| v35_3117(void) = Call[~String] : func:r35_3116, this:r35_3115 +# 35| mu35_3118(unknown) = ^CallSideEffect : ~m? +# 35| v35_3119(void) = ^IndirectReadSideEffect[-1] : &:r35_3115, ~m? +# 35| mu35_3120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3115 +# 35| r35_3121(bool) = Constant[0] : +# 35| v35_3122(void) = ConditionalBranch : r35_3121 #-----| False -> Block 224 #-----| True (back edge) -> Block 223 -# 688| Block 224 -# 688| r688_1(glval) = VariableAddress[x223] : -# 688| mu688_2(String) = Uninitialized[x223] : &:r688_1 -# 688| r688_3(glval) = FunctionAddress[String] : -# 688| v688_4(void) = Call[String] : func:r688_3, this:r688_1 -# 688| mu688_5(unknown) = ^CallSideEffect : ~m? -# 688| mu688_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r688_1 -# 689| r689_1(glval) = VariableAddress[x223] : -# 689| r689_2(glval) = FunctionAddress[~String] : -# 689| v689_3(void) = Call[~String] : func:r689_2, this:r689_1 -# 689| mu689_4(unknown) = ^CallSideEffect : ~m? -# 689| v689_5(void) = ^IndirectReadSideEffect[-1] : &:r689_1, ~m? -# 689| mu689_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r689_1 -# 689| r689_7(bool) = Constant[0] : -# 689| v689_8(void) = ConditionalBranch : r689_7 +# 35| Block 224 +# 35| r35_3123(glval) = VariableAddress[x223] : +# 35| mu35_3124(String) = Uninitialized[x223] : &:r35_3123 +# 35| r35_3125(glval) = FunctionAddress[String] : +# 35| v35_3126(void) = Call[String] : func:r35_3125, this:r35_3123 +# 35| mu35_3127(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3123 +# 35| r35_3129(glval) = VariableAddress[x223] : +# 35| r35_3130(glval) = FunctionAddress[~String] : +# 35| v35_3131(void) = Call[~String] : func:r35_3130, this:r35_3129 +# 35| mu35_3132(unknown) = ^CallSideEffect : ~m? +# 35| v35_3133(void) = ^IndirectReadSideEffect[-1] : &:r35_3129, ~m? +# 35| mu35_3134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3129 +# 35| r35_3135(bool) = Constant[0] : +# 35| v35_3136(void) = ConditionalBranch : r35_3135 #-----| False -> Block 225 #-----| True (back edge) -> Block 224 -# 691| Block 225 -# 691| r691_1(glval) = VariableAddress[x224] : -# 691| mu691_2(String) = Uninitialized[x224] : &:r691_1 -# 691| r691_3(glval) = FunctionAddress[String] : -# 691| v691_4(void) = Call[String] : func:r691_3, this:r691_1 -# 691| mu691_5(unknown) = ^CallSideEffect : ~m? -# 691| mu691_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r691_1 -# 692| r692_1(glval) = VariableAddress[x224] : -# 692| r692_2(glval) = FunctionAddress[~String] : -# 692| v692_3(void) = Call[~String] : func:r692_2, this:r692_1 -# 692| mu692_4(unknown) = ^CallSideEffect : ~m? -# 692| v692_5(void) = ^IndirectReadSideEffect[-1] : &:r692_1, ~m? -# 692| mu692_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r692_1 -# 692| r692_7(bool) = Constant[0] : -# 692| v692_8(void) = ConditionalBranch : r692_7 +# 35| Block 225 +# 35| r35_3137(glval) = VariableAddress[x224] : +# 35| mu35_3138(String) = Uninitialized[x224] : &:r35_3137 +# 35| r35_3139(glval) = FunctionAddress[String] : +# 35| v35_3140(void) = Call[String] : func:r35_3139, this:r35_3137 +# 35| mu35_3141(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3137 +# 35| r35_3143(glval) = VariableAddress[x224] : +# 35| r35_3144(glval) = FunctionAddress[~String] : +# 35| v35_3145(void) = Call[~String] : func:r35_3144, this:r35_3143 +# 35| mu35_3146(unknown) = ^CallSideEffect : ~m? +# 35| v35_3147(void) = ^IndirectReadSideEffect[-1] : &:r35_3143, ~m? +# 35| mu35_3148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3143 +# 35| r35_3149(bool) = Constant[0] : +# 35| v35_3150(void) = ConditionalBranch : r35_3149 #-----| False -> Block 226 #-----| True (back edge) -> Block 225 -# 694| Block 226 -# 694| r694_1(glval) = VariableAddress[x225] : -# 694| mu694_2(String) = Uninitialized[x225] : &:r694_1 -# 694| r694_3(glval) = FunctionAddress[String] : -# 694| v694_4(void) = Call[String] : func:r694_3, this:r694_1 -# 694| mu694_5(unknown) = ^CallSideEffect : ~m? -# 694| mu694_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r694_1 -# 695| r695_1(glval) = VariableAddress[x225] : -# 695| r695_2(glval) = FunctionAddress[~String] : -# 695| v695_3(void) = Call[~String] : func:r695_2, this:r695_1 -# 695| mu695_4(unknown) = ^CallSideEffect : ~m? -# 695| v695_5(void) = ^IndirectReadSideEffect[-1] : &:r695_1, ~m? -# 695| mu695_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r695_1 -# 695| r695_7(bool) = Constant[0] : -# 695| v695_8(void) = ConditionalBranch : r695_7 +# 35| Block 226 +# 35| r35_3151(glval) = VariableAddress[x225] : +# 35| mu35_3152(String) = Uninitialized[x225] : &:r35_3151 +# 35| r35_3153(glval) = FunctionAddress[String] : +# 35| v35_3154(void) = Call[String] : func:r35_3153, this:r35_3151 +# 35| mu35_3155(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3151 +# 35| r35_3157(glval) = VariableAddress[x225] : +# 35| r35_3158(glval) = FunctionAddress[~String] : +# 35| v35_3159(void) = Call[~String] : func:r35_3158, this:r35_3157 +# 35| mu35_3160(unknown) = ^CallSideEffect : ~m? +# 35| v35_3161(void) = ^IndirectReadSideEffect[-1] : &:r35_3157, ~m? +# 35| mu35_3162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3157 +# 35| r35_3163(bool) = Constant[0] : +# 35| v35_3164(void) = ConditionalBranch : r35_3163 #-----| False -> Block 227 #-----| True (back edge) -> Block 226 -# 697| Block 227 -# 697| r697_1(glval) = VariableAddress[x226] : -# 697| mu697_2(String) = Uninitialized[x226] : &:r697_1 -# 697| r697_3(glval) = FunctionAddress[String] : -# 697| v697_4(void) = Call[String] : func:r697_3, this:r697_1 -# 697| mu697_5(unknown) = ^CallSideEffect : ~m? -# 697| mu697_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r697_1 -# 698| r698_1(glval) = VariableAddress[x226] : -# 698| r698_2(glval) = FunctionAddress[~String] : -# 698| v698_3(void) = Call[~String] : func:r698_2, this:r698_1 -# 698| mu698_4(unknown) = ^CallSideEffect : ~m? -# 698| v698_5(void) = ^IndirectReadSideEffect[-1] : &:r698_1, ~m? -# 698| mu698_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r698_1 -# 698| r698_7(bool) = Constant[0] : -# 698| v698_8(void) = ConditionalBranch : r698_7 +# 35| Block 227 +# 35| r35_3165(glval) = VariableAddress[x226] : +# 35| mu35_3166(String) = Uninitialized[x226] : &:r35_3165 +# 35| r35_3167(glval) = FunctionAddress[String] : +# 35| v35_3168(void) = Call[String] : func:r35_3167, this:r35_3165 +# 35| mu35_3169(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3165 +# 35| r35_3171(glval) = VariableAddress[x226] : +# 35| r35_3172(glval) = FunctionAddress[~String] : +# 35| v35_3173(void) = Call[~String] : func:r35_3172, this:r35_3171 +# 35| mu35_3174(unknown) = ^CallSideEffect : ~m? +# 35| v35_3175(void) = ^IndirectReadSideEffect[-1] : &:r35_3171, ~m? +# 35| mu35_3176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3171 +# 35| r35_3177(bool) = Constant[0] : +# 35| v35_3178(void) = ConditionalBranch : r35_3177 #-----| False -> Block 228 #-----| True (back edge) -> Block 227 -# 700| Block 228 -# 700| r700_1(glval) = VariableAddress[x227] : -# 700| mu700_2(String) = Uninitialized[x227] : &:r700_1 -# 700| r700_3(glval) = FunctionAddress[String] : -# 700| v700_4(void) = Call[String] : func:r700_3, this:r700_1 -# 700| mu700_5(unknown) = ^CallSideEffect : ~m? -# 700| mu700_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r700_1 -# 701| r701_1(glval) = VariableAddress[x227] : -# 701| r701_2(glval) = FunctionAddress[~String] : -# 701| v701_3(void) = Call[~String] : func:r701_2, this:r701_1 -# 701| mu701_4(unknown) = ^CallSideEffect : ~m? -# 701| v701_5(void) = ^IndirectReadSideEffect[-1] : &:r701_1, ~m? -# 701| mu701_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r701_1 -# 701| r701_7(bool) = Constant[0] : -# 701| v701_8(void) = ConditionalBranch : r701_7 +# 35| Block 228 +# 35| r35_3179(glval) = VariableAddress[x227] : +# 35| mu35_3180(String) = Uninitialized[x227] : &:r35_3179 +# 35| r35_3181(glval) = FunctionAddress[String] : +# 35| v35_3182(void) = Call[String] : func:r35_3181, this:r35_3179 +# 35| mu35_3183(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3179 +# 35| r35_3185(glval) = VariableAddress[x227] : +# 35| r35_3186(glval) = FunctionAddress[~String] : +# 35| v35_3187(void) = Call[~String] : func:r35_3186, this:r35_3185 +# 35| mu35_3188(unknown) = ^CallSideEffect : ~m? +# 35| v35_3189(void) = ^IndirectReadSideEffect[-1] : &:r35_3185, ~m? +# 35| mu35_3190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3185 +# 35| r35_3191(bool) = Constant[0] : +# 35| v35_3192(void) = ConditionalBranch : r35_3191 #-----| False -> Block 229 #-----| True (back edge) -> Block 228 -# 703| Block 229 -# 703| r703_1(glval) = VariableAddress[x228] : -# 703| mu703_2(String) = Uninitialized[x228] : &:r703_1 -# 703| r703_3(glval) = FunctionAddress[String] : -# 703| v703_4(void) = Call[String] : func:r703_3, this:r703_1 -# 703| mu703_5(unknown) = ^CallSideEffect : ~m? -# 703| mu703_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r703_1 -# 704| r704_1(glval) = VariableAddress[x228] : -# 704| r704_2(glval) = FunctionAddress[~String] : -# 704| v704_3(void) = Call[~String] : func:r704_2, this:r704_1 -# 704| mu704_4(unknown) = ^CallSideEffect : ~m? -# 704| v704_5(void) = ^IndirectReadSideEffect[-1] : &:r704_1, ~m? -# 704| mu704_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r704_1 -# 704| r704_7(bool) = Constant[0] : -# 704| v704_8(void) = ConditionalBranch : r704_7 +# 35| Block 229 +# 35| r35_3193(glval) = VariableAddress[x228] : +# 35| mu35_3194(String) = Uninitialized[x228] : &:r35_3193 +# 35| r35_3195(glval) = FunctionAddress[String] : +# 35| v35_3196(void) = Call[String] : func:r35_3195, this:r35_3193 +# 35| mu35_3197(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3193 +# 35| r35_3199(glval) = VariableAddress[x228] : +# 35| r35_3200(glval) = FunctionAddress[~String] : +# 35| v35_3201(void) = Call[~String] : func:r35_3200, this:r35_3199 +# 35| mu35_3202(unknown) = ^CallSideEffect : ~m? +# 35| v35_3203(void) = ^IndirectReadSideEffect[-1] : &:r35_3199, ~m? +# 35| mu35_3204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3199 +# 35| r35_3205(bool) = Constant[0] : +# 35| v35_3206(void) = ConditionalBranch : r35_3205 #-----| False -> Block 230 #-----| True (back edge) -> Block 229 -# 706| Block 230 -# 706| r706_1(glval) = VariableAddress[x229] : -# 706| mu706_2(String) = Uninitialized[x229] : &:r706_1 -# 706| r706_3(glval) = FunctionAddress[String] : -# 706| v706_4(void) = Call[String] : func:r706_3, this:r706_1 -# 706| mu706_5(unknown) = ^CallSideEffect : ~m? -# 706| mu706_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r706_1 -# 707| r707_1(glval) = VariableAddress[x229] : -# 707| r707_2(glval) = FunctionAddress[~String] : -# 707| v707_3(void) = Call[~String] : func:r707_2, this:r707_1 -# 707| mu707_4(unknown) = ^CallSideEffect : ~m? -# 707| v707_5(void) = ^IndirectReadSideEffect[-1] : &:r707_1, ~m? -# 707| mu707_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r707_1 -# 707| r707_7(bool) = Constant[0] : -# 707| v707_8(void) = ConditionalBranch : r707_7 +# 35| Block 230 +# 35| r35_3207(glval) = VariableAddress[x229] : +# 35| mu35_3208(String) = Uninitialized[x229] : &:r35_3207 +# 35| r35_3209(glval) = FunctionAddress[String] : +# 35| v35_3210(void) = Call[String] : func:r35_3209, this:r35_3207 +# 35| mu35_3211(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3207 +# 35| r35_3213(glval) = VariableAddress[x229] : +# 35| r35_3214(glval) = FunctionAddress[~String] : +# 35| v35_3215(void) = Call[~String] : func:r35_3214, this:r35_3213 +# 35| mu35_3216(unknown) = ^CallSideEffect : ~m? +# 35| v35_3217(void) = ^IndirectReadSideEffect[-1] : &:r35_3213, ~m? +# 35| mu35_3218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3213 +# 35| r35_3219(bool) = Constant[0] : +# 35| v35_3220(void) = ConditionalBranch : r35_3219 #-----| False -> Block 231 #-----| True (back edge) -> Block 230 -# 709| Block 231 -# 709| r709_1(glval) = VariableAddress[x230] : -# 709| mu709_2(String) = Uninitialized[x230] : &:r709_1 -# 709| r709_3(glval) = FunctionAddress[String] : -# 709| v709_4(void) = Call[String] : func:r709_3, this:r709_1 -# 709| mu709_5(unknown) = ^CallSideEffect : ~m? -# 709| mu709_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r709_1 -# 710| r710_1(glval) = VariableAddress[x230] : -# 710| r710_2(glval) = FunctionAddress[~String] : -# 710| v710_3(void) = Call[~String] : func:r710_2, this:r710_1 -# 710| mu710_4(unknown) = ^CallSideEffect : ~m? -# 710| v710_5(void) = ^IndirectReadSideEffect[-1] : &:r710_1, ~m? -# 710| mu710_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r710_1 -# 710| r710_7(bool) = Constant[0] : -# 710| v710_8(void) = ConditionalBranch : r710_7 +# 35| Block 231 +# 35| r35_3221(glval) = VariableAddress[x230] : +# 35| mu35_3222(String) = Uninitialized[x230] : &:r35_3221 +# 35| r35_3223(glval) = FunctionAddress[String] : +# 35| v35_3224(void) = Call[String] : func:r35_3223, this:r35_3221 +# 35| mu35_3225(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3221 +# 35| r35_3227(glval) = VariableAddress[x230] : +# 35| r35_3228(glval) = FunctionAddress[~String] : +# 35| v35_3229(void) = Call[~String] : func:r35_3228, this:r35_3227 +# 35| mu35_3230(unknown) = ^CallSideEffect : ~m? +# 35| v35_3231(void) = ^IndirectReadSideEffect[-1] : &:r35_3227, ~m? +# 35| mu35_3232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3227 +# 35| r35_3233(bool) = Constant[0] : +# 35| v35_3234(void) = ConditionalBranch : r35_3233 #-----| False -> Block 232 #-----| True (back edge) -> Block 231 -# 712| Block 232 -# 712| r712_1(glval) = VariableAddress[x231] : -# 712| mu712_2(String) = Uninitialized[x231] : &:r712_1 -# 712| r712_3(glval) = FunctionAddress[String] : -# 712| v712_4(void) = Call[String] : func:r712_3, this:r712_1 -# 712| mu712_5(unknown) = ^CallSideEffect : ~m? -# 712| mu712_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r712_1 -# 713| r713_1(glval) = VariableAddress[x231] : -# 713| r713_2(glval) = FunctionAddress[~String] : -# 713| v713_3(void) = Call[~String] : func:r713_2, this:r713_1 -# 713| mu713_4(unknown) = ^CallSideEffect : ~m? -# 713| v713_5(void) = ^IndirectReadSideEffect[-1] : &:r713_1, ~m? -# 713| mu713_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r713_1 -# 713| r713_7(bool) = Constant[0] : -# 713| v713_8(void) = ConditionalBranch : r713_7 +# 35| Block 232 +# 35| r35_3235(glval) = VariableAddress[x231] : +# 35| mu35_3236(String) = Uninitialized[x231] : &:r35_3235 +# 35| r35_3237(glval) = FunctionAddress[String] : +# 35| v35_3238(void) = Call[String] : func:r35_3237, this:r35_3235 +# 35| mu35_3239(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3235 +# 35| r35_3241(glval) = VariableAddress[x231] : +# 35| r35_3242(glval) = FunctionAddress[~String] : +# 35| v35_3243(void) = Call[~String] : func:r35_3242, this:r35_3241 +# 35| mu35_3244(unknown) = ^CallSideEffect : ~m? +# 35| v35_3245(void) = ^IndirectReadSideEffect[-1] : &:r35_3241, ~m? +# 35| mu35_3246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3241 +# 35| r35_3247(bool) = Constant[0] : +# 35| v35_3248(void) = ConditionalBranch : r35_3247 #-----| False -> Block 233 #-----| True (back edge) -> Block 232 -# 715| Block 233 -# 715| r715_1(glval) = VariableAddress[x232] : -# 715| mu715_2(String) = Uninitialized[x232] : &:r715_1 -# 715| r715_3(glval) = FunctionAddress[String] : -# 715| v715_4(void) = Call[String] : func:r715_3, this:r715_1 -# 715| mu715_5(unknown) = ^CallSideEffect : ~m? -# 715| mu715_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r715_1 -# 716| r716_1(glval) = VariableAddress[x232] : -# 716| r716_2(glval) = FunctionAddress[~String] : -# 716| v716_3(void) = Call[~String] : func:r716_2, this:r716_1 -# 716| mu716_4(unknown) = ^CallSideEffect : ~m? -# 716| v716_5(void) = ^IndirectReadSideEffect[-1] : &:r716_1, ~m? -# 716| mu716_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r716_1 -# 716| r716_7(bool) = Constant[0] : -# 716| v716_8(void) = ConditionalBranch : r716_7 +# 35| Block 233 +# 35| r35_3249(glval) = VariableAddress[x232] : +# 35| mu35_3250(String) = Uninitialized[x232] : &:r35_3249 +# 35| r35_3251(glval) = FunctionAddress[String] : +# 35| v35_3252(void) = Call[String] : func:r35_3251, this:r35_3249 +# 35| mu35_3253(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3249 +# 35| r35_3255(glval) = VariableAddress[x232] : +# 35| r35_3256(glval) = FunctionAddress[~String] : +# 35| v35_3257(void) = Call[~String] : func:r35_3256, this:r35_3255 +# 35| mu35_3258(unknown) = ^CallSideEffect : ~m? +# 35| v35_3259(void) = ^IndirectReadSideEffect[-1] : &:r35_3255, ~m? +# 35| mu35_3260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3255 +# 35| r35_3261(bool) = Constant[0] : +# 35| v35_3262(void) = ConditionalBranch : r35_3261 #-----| False -> Block 234 #-----| True (back edge) -> Block 233 -# 718| Block 234 -# 718| r718_1(glval) = VariableAddress[x233] : -# 718| mu718_2(String) = Uninitialized[x233] : &:r718_1 -# 718| r718_3(glval) = FunctionAddress[String] : -# 718| v718_4(void) = Call[String] : func:r718_3, this:r718_1 -# 718| mu718_5(unknown) = ^CallSideEffect : ~m? -# 718| mu718_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r718_1 -# 719| r719_1(glval) = VariableAddress[x233] : -# 719| r719_2(glval) = FunctionAddress[~String] : -# 719| v719_3(void) = Call[~String] : func:r719_2, this:r719_1 -# 719| mu719_4(unknown) = ^CallSideEffect : ~m? -# 719| v719_5(void) = ^IndirectReadSideEffect[-1] : &:r719_1, ~m? -# 719| mu719_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r719_1 -# 719| r719_7(bool) = Constant[0] : -# 719| v719_8(void) = ConditionalBranch : r719_7 +# 35| Block 234 +# 35| r35_3263(glval) = VariableAddress[x233] : +# 35| mu35_3264(String) = Uninitialized[x233] : &:r35_3263 +# 35| r35_3265(glval) = FunctionAddress[String] : +# 35| v35_3266(void) = Call[String] : func:r35_3265, this:r35_3263 +# 35| mu35_3267(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3263 +# 35| r35_3269(glval) = VariableAddress[x233] : +# 35| r35_3270(glval) = FunctionAddress[~String] : +# 35| v35_3271(void) = Call[~String] : func:r35_3270, this:r35_3269 +# 35| mu35_3272(unknown) = ^CallSideEffect : ~m? +# 35| v35_3273(void) = ^IndirectReadSideEffect[-1] : &:r35_3269, ~m? +# 35| mu35_3274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3269 +# 35| r35_3275(bool) = Constant[0] : +# 35| v35_3276(void) = ConditionalBranch : r35_3275 #-----| False -> Block 235 #-----| True (back edge) -> Block 234 -# 721| Block 235 -# 721| r721_1(glval) = VariableAddress[x234] : -# 721| mu721_2(String) = Uninitialized[x234] : &:r721_1 -# 721| r721_3(glval) = FunctionAddress[String] : -# 721| v721_4(void) = Call[String] : func:r721_3, this:r721_1 -# 721| mu721_5(unknown) = ^CallSideEffect : ~m? -# 721| mu721_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r721_1 -# 722| r722_1(glval) = VariableAddress[x234] : -# 722| r722_2(glval) = FunctionAddress[~String] : -# 722| v722_3(void) = Call[~String] : func:r722_2, this:r722_1 -# 722| mu722_4(unknown) = ^CallSideEffect : ~m? -# 722| v722_5(void) = ^IndirectReadSideEffect[-1] : &:r722_1, ~m? -# 722| mu722_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r722_1 -# 722| r722_7(bool) = Constant[0] : -# 722| v722_8(void) = ConditionalBranch : r722_7 +# 35| Block 235 +# 35| r35_3277(glval) = VariableAddress[x234] : +# 35| mu35_3278(String) = Uninitialized[x234] : &:r35_3277 +# 35| r35_3279(glval) = FunctionAddress[String] : +# 35| v35_3280(void) = Call[String] : func:r35_3279, this:r35_3277 +# 35| mu35_3281(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3277 +# 35| r35_3283(glval) = VariableAddress[x234] : +# 35| r35_3284(glval) = FunctionAddress[~String] : +# 35| v35_3285(void) = Call[~String] : func:r35_3284, this:r35_3283 +# 35| mu35_3286(unknown) = ^CallSideEffect : ~m? +# 35| v35_3287(void) = ^IndirectReadSideEffect[-1] : &:r35_3283, ~m? +# 35| mu35_3288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3283 +# 35| r35_3289(bool) = Constant[0] : +# 35| v35_3290(void) = ConditionalBranch : r35_3289 #-----| False -> Block 236 #-----| True (back edge) -> Block 235 -# 724| Block 236 -# 724| r724_1(glval) = VariableAddress[x235] : -# 724| mu724_2(String) = Uninitialized[x235] : &:r724_1 -# 724| r724_3(glval) = FunctionAddress[String] : -# 724| v724_4(void) = Call[String] : func:r724_3, this:r724_1 -# 724| mu724_5(unknown) = ^CallSideEffect : ~m? -# 724| mu724_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r724_1 -# 725| r725_1(glval) = VariableAddress[x235] : -# 725| r725_2(glval) = FunctionAddress[~String] : -# 725| v725_3(void) = Call[~String] : func:r725_2, this:r725_1 -# 725| mu725_4(unknown) = ^CallSideEffect : ~m? -# 725| v725_5(void) = ^IndirectReadSideEffect[-1] : &:r725_1, ~m? -# 725| mu725_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r725_1 -# 725| r725_7(bool) = Constant[0] : -# 725| v725_8(void) = ConditionalBranch : r725_7 +# 35| Block 236 +# 35| r35_3291(glval) = VariableAddress[x235] : +# 35| mu35_3292(String) = Uninitialized[x235] : &:r35_3291 +# 35| r35_3293(glval) = FunctionAddress[String] : +# 35| v35_3294(void) = Call[String] : func:r35_3293, this:r35_3291 +# 35| mu35_3295(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3291 +# 35| r35_3297(glval) = VariableAddress[x235] : +# 35| r35_3298(glval) = FunctionAddress[~String] : +# 35| v35_3299(void) = Call[~String] : func:r35_3298, this:r35_3297 +# 35| mu35_3300(unknown) = ^CallSideEffect : ~m? +# 35| v35_3301(void) = ^IndirectReadSideEffect[-1] : &:r35_3297, ~m? +# 35| mu35_3302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3297 +# 35| r35_3303(bool) = Constant[0] : +# 35| v35_3304(void) = ConditionalBranch : r35_3303 #-----| False -> Block 237 #-----| True (back edge) -> Block 236 -# 727| Block 237 -# 727| r727_1(glval) = VariableAddress[x236] : -# 727| mu727_2(String) = Uninitialized[x236] : &:r727_1 -# 727| r727_3(glval) = FunctionAddress[String] : -# 727| v727_4(void) = Call[String] : func:r727_3, this:r727_1 -# 727| mu727_5(unknown) = ^CallSideEffect : ~m? -# 727| mu727_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r727_1 -# 728| r728_1(glval) = VariableAddress[x236] : -# 728| r728_2(glval) = FunctionAddress[~String] : -# 728| v728_3(void) = Call[~String] : func:r728_2, this:r728_1 -# 728| mu728_4(unknown) = ^CallSideEffect : ~m? -# 728| v728_5(void) = ^IndirectReadSideEffect[-1] : &:r728_1, ~m? -# 728| mu728_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r728_1 -# 728| r728_7(bool) = Constant[0] : -# 728| v728_8(void) = ConditionalBranch : r728_7 +# 35| Block 237 +# 35| r35_3305(glval) = VariableAddress[x236] : +# 35| mu35_3306(String) = Uninitialized[x236] : &:r35_3305 +# 35| r35_3307(glval) = FunctionAddress[String] : +# 35| v35_3308(void) = Call[String] : func:r35_3307, this:r35_3305 +# 35| mu35_3309(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3305 +# 35| r35_3311(glval) = VariableAddress[x236] : +# 35| r35_3312(glval) = FunctionAddress[~String] : +# 35| v35_3313(void) = Call[~String] : func:r35_3312, this:r35_3311 +# 35| mu35_3314(unknown) = ^CallSideEffect : ~m? +# 35| v35_3315(void) = ^IndirectReadSideEffect[-1] : &:r35_3311, ~m? +# 35| mu35_3316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3311 +# 35| r35_3317(bool) = Constant[0] : +# 35| v35_3318(void) = ConditionalBranch : r35_3317 #-----| False -> Block 238 #-----| True (back edge) -> Block 237 -# 730| Block 238 -# 730| r730_1(glval) = VariableAddress[x237] : -# 730| mu730_2(String) = Uninitialized[x237] : &:r730_1 -# 730| r730_3(glval) = FunctionAddress[String] : -# 730| v730_4(void) = Call[String] : func:r730_3, this:r730_1 -# 730| mu730_5(unknown) = ^CallSideEffect : ~m? -# 730| mu730_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r730_1 -# 731| r731_1(glval) = VariableAddress[x237] : -# 731| r731_2(glval) = FunctionAddress[~String] : -# 731| v731_3(void) = Call[~String] : func:r731_2, this:r731_1 -# 731| mu731_4(unknown) = ^CallSideEffect : ~m? -# 731| v731_5(void) = ^IndirectReadSideEffect[-1] : &:r731_1, ~m? -# 731| mu731_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r731_1 -# 731| r731_7(bool) = Constant[0] : -# 731| v731_8(void) = ConditionalBranch : r731_7 +# 35| Block 238 +# 35| r35_3319(glval) = VariableAddress[x237] : +# 35| mu35_3320(String) = Uninitialized[x237] : &:r35_3319 +# 35| r35_3321(glval) = FunctionAddress[String] : +# 35| v35_3322(void) = Call[String] : func:r35_3321, this:r35_3319 +# 35| mu35_3323(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3319 +# 35| r35_3325(glval) = VariableAddress[x237] : +# 35| r35_3326(glval) = FunctionAddress[~String] : +# 35| v35_3327(void) = Call[~String] : func:r35_3326, this:r35_3325 +# 35| mu35_3328(unknown) = ^CallSideEffect : ~m? +# 35| v35_3329(void) = ^IndirectReadSideEffect[-1] : &:r35_3325, ~m? +# 35| mu35_3330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3325 +# 35| r35_3331(bool) = Constant[0] : +# 35| v35_3332(void) = ConditionalBranch : r35_3331 #-----| False -> Block 239 #-----| True (back edge) -> Block 238 -# 733| Block 239 -# 733| r733_1(glval) = VariableAddress[x238] : -# 733| mu733_2(String) = Uninitialized[x238] : &:r733_1 -# 733| r733_3(glval) = FunctionAddress[String] : -# 733| v733_4(void) = Call[String] : func:r733_3, this:r733_1 -# 733| mu733_5(unknown) = ^CallSideEffect : ~m? -# 733| mu733_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r733_1 -# 734| r734_1(glval) = VariableAddress[x238] : -# 734| r734_2(glval) = FunctionAddress[~String] : -# 734| v734_3(void) = Call[~String] : func:r734_2, this:r734_1 -# 734| mu734_4(unknown) = ^CallSideEffect : ~m? -# 734| v734_5(void) = ^IndirectReadSideEffect[-1] : &:r734_1, ~m? -# 734| mu734_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r734_1 -# 734| r734_7(bool) = Constant[0] : -# 734| v734_8(void) = ConditionalBranch : r734_7 +# 35| Block 239 +# 35| r35_3333(glval) = VariableAddress[x238] : +# 35| mu35_3334(String) = Uninitialized[x238] : &:r35_3333 +# 35| r35_3335(glval) = FunctionAddress[String] : +# 35| v35_3336(void) = Call[String] : func:r35_3335, this:r35_3333 +# 35| mu35_3337(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3333 +# 35| r35_3339(glval) = VariableAddress[x238] : +# 35| r35_3340(glval) = FunctionAddress[~String] : +# 35| v35_3341(void) = Call[~String] : func:r35_3340, this:r35_3339 +# 35| mu35_3342(unknown) = ^CallSideEffect : ~m? +# 35| v35_3343(void) = ^IndirectReadSideEffect[-1] : &:r35_3339, ~m? +# 35| mu35_3344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3339 +# 35| r35_3345(bool) = Constant[0] : +# 35| v35_3346(void) = ConditionalBranch : r35_3345 #-----| False -> Block 240 #-----| True (back edge) -> Block 239 -# 736| Block 240 -# 736| r736_1(glval) = VariableAddress[x239] : -# 736| mu736_2(String) = Uninitialized[x239] : &:r736_1 -# 736| r736_3(glval) = FunctionAddress[String] : -# 736| v736_4(void) = Call[String] : func:r736_3, this:r736_1 -# 736| mu736_5(unknown) = ^CallSideEffect : ~m? -# 736| mu736_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r736_1 -# 737| r737_1(glval) = VariableAddress[x239] : -# 737| r737_2(glval) = FunctionAddress[~String] : -# 737| v737_3(void) = Call[~String] : func:r737_2, this:r737_1 -# 737| mu737_4(unknown) = ^CallSideEffect : ~m? -# 737| v737_5(void) = ^IndirectReadSideEffect[-1] : &:r737_1, ~m? -# 737| mu737_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r737_1 -# 737| r737_7(bool) = Constant[0] : -# 737| v737_8(void) = ConditionalBranch : r737_7 +# 35| Block 240 +# 35| r35_3347(glval) = VariableAddress[x239] : +# 35| mu35_3348(String) = Uninitialized[x239] : &:r35_3347 +# 35| r35_3349(glval) = FunctionAddress[String] : +# 35| v35_3350(void) = Call[String] : func:r35_3349, this:r35_3347 +# 35| mu35_3351(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3347 +# 35| r35_3353(glval) = VariableAddress[x239] : +# 35| r35_3354(glval) = FunctionAddress[~String] : +# 35| v35_3355(void) = Call[~String] : func:r35_3354, this:r35_3353 +# 35| mu35_3356(unknown) = ^CallSideEffect : ~m? +# 35| v35_3357(void) = ^IndirectReadSideEffect[-1] : &:r35_3353, ~m? +# 35| mu35_3358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3353 +# 35| r35_3359(bool) = Constant[0] : +# 35| v35_3360(void) = ConditionalBranch : r35_3359 #-----| False -> Block 241 #-----| True (back edge) -> Block 240 -# 739| Block 241 -# 739| r739_1(glval) = VariableAddress[x240] : -# 739| mu739_2(String) = Uninitialized[x240] : &:r739_1 -# 739| r739_3(glval) = FunctionAddress[String] : -# 739| v739_4(void) = Call[String] : func:r739_3, this:r739_1 -# 739| mu739_5(unknown) = ^CallSideEffect : ~m? -# 739| mu739_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r739_1 -# 740| r740_1(glval) = VariableAddress[x240] : -# 740| r740_2(glval) = FunctionAddress[~String] : -# 740| v740_3(void) = Call[~String] : func:r740_2, this:r740_1 -# 740| mu740_4(unknown) = ^CallSideEffect : ~m? -# 740| v740_5(void) = ^IndirectReadSideEffect[-1] : &:r740_1, ~m? -# 740| mu740_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r740_1 -# 740| r740_7(bool) = Constant[0] : -# 740| v740_8(void) = ConditionalBranch : r740_7 +# 35| Block 241 +# 35| r35_3361(glval) = VariableAddress[x240] : +# 35| mu35_3362(String) = Uninitialized[x240] : &:r35_3361 +# 35| r35_3363(glval) = FunctionAddress[String] : +# 35| v35_3364(void) = Call[String] : func:r35_3363, this:r35_3361 +# 35| mu35_3365(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3361 +# 35| r35_3367(glval) = VariableAddress[x240] : +# 35| r35_3368(glval) = FunctionAddress[~String] : +# 35| v35_3369(void) = Call[~String] : func:r35_3368, this:r35_3367 +# 35| mu35_3370(unknown) = ^CallSideEffect : ~m? +# 35| v35_3371(void) = ^IndirectReadSideEffect[-1] : &:r35_3367, ~m? +# 35| mu35_3372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3367 +# 35| r35_3373(bool) = Constant[0] : +# 35| v35_3374(void) = ConditionalBranch : r35_3373 #-----| False -> Block 242 #-----| True (back edge) -> Block 241 -# 742| Block 242 -# 742| r742_1(glval) = VariableAddress[x241] : -# 742| mu742_2(String) = Uninitialized[x241] : &:r742_1 -# 742| r742_3(glval) = FunctionAddress[String] : -# 742| v742_4(void) = Call[String] : func:r742_3, this:r742_1 -# 742| mu742_5(unknown) = ^CallSideEffect : ~m? -# 742| mu742_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r742_1 -# 743| r743_1(glval) = VariableAddress[x241] : -# 743| r743_2(glval) = FunctionAddress[~String] : -# 743| v743_3(void) = Call[~String] : func:r743_2, this:r743_1 -# 743| mu743_4(unknown) = ^CallSideEffect : ~m? -# 743| v743_5(void) = ^IndirectReadSideEffect[-1] : &:r743_1, ~m? -# 743| mu743_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r743_1 -# 743| r743_7(bool) = Constant[0] : -# 743| v743_8(void) = ConditionalBranch : r743_7 +# 35| Block 242 +# 35| r35_3375(glval) = VariableAddress[x241] : +# 35| mu35_3376(String) = Uninitialized[x241] : &:r35_3375 +# 35| r35_3377(glval) = FunctionAddress[String] : +# 35| v35_3378(void) = Call[String] : func:r35_3377, this:r35_3375 +# 35| mu35_3379(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3375 +# 35| r35_3381(glval) = VariableAddress[x241] : +# 35| r35_3382(glval) = FunctionAddress[~String] : +# 35| v35_3383(void) = Call[~String] : func:r35_3382, this:r35_3381 +# 35| mu35_3384(unknown) = ^CallSideEffect : ~m? +# 35| v35_3385(void) = ^IndirectReadSideEffect[-1] : &:r35_3381, ~m? +# 35| mu35_3386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3381 +# 35| r35_3387(bool) = Constant[0] : +# 35| v35_3388(void) = ConditionalBranch : r35_3387 #-----| False -> Block 243 #-----| True (back edge) -> Block 242 -# 745| Block 243 -# 745| r745_1(glval) = VariableAddress[x242] : -# 745| mu745_2(String) = Uninitialized[x242] : &:r745_1 -# 745| r745_3(glval) = FunctionAddress[String] : -# 745| v745_4(void) = Call[String] : func:r745_3, this:r745_1 -# 745| mu745_5(unknown) = ^CallSideEffect : ~m? -# 745| mu745_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r745_1 -# 746| r746_1(glval) = VariableAddress[x242] : -# 746| r746_2(glval) = FunctionAddress[~String] : -# 746| v746_3(void) = Call[~String] : func:r746_2, this:r746_1 -# 746| mu746_4(unknown) = ^CallSideEffect : ~m? -# 746| v746_5(void) = ^IndirectReadSideEffect[-1] : &:r746_1, ~m? -# 746| mu746_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r746_1 -# 746| r746_7(bool) = Constant[0] : -# 746| v746_8(void) = ConditionalBranch : r746_7 +# 35| Block 243 +# 35| r35_3389(glval) = VariableAddress[x242] : +# 35| mu35_3390(String) = Uninitialized[x242] : &:r35_3389 +# 35| r35_3391(glval) = FunctionAddress[String] : +# 35| v35_3392(void) = Call[String] : func:r35_3391, this:r35_3389 +# 35| mu35_3393(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3389 +# 35| r35_3395(glval) = VariableAddress[x242] : +# 35| r35_3396(glval) = FunctionAddress[~String] : +# 35| v35_3397(void) = Call[~String] : func:r35_3396, this:r35_3395 +# 35| mu35_3398(unknown) = ^CallSideEffect : ~m? +# 35| v35_3399(void) = ^IndirectReadSideEffect[-1] : &:r35_3395, ~m? +# 35| mu35_3400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3395 +# 35| r35_3401(bool) = Constant[0] : +# 35| v35_3402(void) = ConditionalBranch : r35_3401 #-----| False -> Block 244 #-----| True (back edge) -> Block 243 -# 748| Block 244 -# 748| r748_1(glval) = VariableAddress[x243] : -# 748| mu748_2(String) = Uninitialized[x243] : &:r748_1 -# 748| r748_3(glval) = FunctionAddress[String] : -# 748| v748_4(void) = Call[String] : func:r748_3, this:r748_1 -# 748| mu748_5(unknown) = ^CallSideEffect : ~m? -# 748| mu748_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r748_1 -# 749| r749_1(glval) = VariableAddress[x243] : -# 749| r749_2(glval) = FunctionAddress[~String] : -# 749| v749_3(void) = Call[~String] : func:r749_2, this:r749_1 -# 749| mu749_4(unknown) = ^CallSideEffect : ~m? -# 749| v749_5(void) = ^IndirectReadSideEffect[-1] : &:r749_1, ~m? -# 749| mu749_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r749_1 -# 749| r749_7(bool) = Constant[0] : -# 749| v749_8(void) = ConditionalBranch : r749_7 +# 35| Block 244 +# 35| r35_3403(glval) = VariableAddress[x243] : +# 35| mu35_3404(String) = Uninitialized[x243] : &:r35_3403 +# 35| r35_3405(glval) = FunctionAddress[String] : +# 35| v35_3406(void) = Call[String] : func:r35_3405, this:r35_3403 +# 35| mu35_3407(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3403 +# 35| r35_3409(glval) = VariableAddress[x243] : +# 35| r35_3410(glval) = FunctionAddress[~String] : +# 35| v35_3411(void) = Call[~String] : func:r35_3410, this:r35_3409 +# 35| mu35_3412(unknown) = ^CallSideEffect : ~m? +# 35| v35_3413(void) = ^IndirectReadSideEffect[-1] : &:r35_3409, ~m? +# 35| mu35_3414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3409 +# 35| r35_3415(bool) = Constant[0] : +# 35| v35_3416(void) = ConditionalBranch : r35_3415 #-----| False -> Block 245 #-----| True (back edge) -> Block 244 -# 751| Block 245 -# 751| r751_1(glval) = VariableAddress[x244] : -# 751| mu751_2(String) = Uninitialized[x244] : &:r751_1 -# 751| r751_3(glval) = FunctionAddress[String] : -# 751| v751_4(void) = Call[String] : func:r751_3, this:r751_1 -# 751| mu751_5(unknown) = ^CallSideEffect : ~m? -# 751| mu751_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r751_1 -# 752| r752_1(glval) = VariableAddress[x244] : -# 752| r752_2(glval) = FunctionAddress[~String] : -# 752| v752_3(void) = Call[~String] : func:r752_2, this:r752_1 -# 752| mu752_4(unknown) = ^CallSideEffect : ~m? -# 752| v752_5(void) = ^IndirectReadSideEffect[-1] : &:r752_1, ~m? -# 752| mu752_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r752_1 -# 752| r752_7(bool) = Constant[0] : -# 752| v752_8(void) = ConditionalBranch : r752_7 +# 35| Block 245 +# 35| r35_3417(glval) = VariableAddress[x244] : +# 35| mu35_3418(String) = Uninitialized[x244] : &:r35_3417 +# 35| r35_3419(glval) = FunctionAddress[String] : +# 35| v35_3420(void) = Call[String] : func:r35_3419, this:r35_3417 +# 35| mu35_3421(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3417 +# 35| r35_3423(glval) = VariableAddress[x244] : +# 35| r35_3424(glval) = FunctionAddress[~String] : +# 35| v35_3425(void) = Call[~String] : func:r35_3424, this:r35_3423 +# 35| mu35_3426(unknown) = ^CallSideEffect : ~m? +# 35| v35_3427(void) = ^IndirectReadSideEffect[-1] : &:r35_3423, ~m? +# 35| mu35_3428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3423 +# 35| r35_3429(bool) = Constant[0] : +# 35| v35_3430(void) = ConditionalBranch : r35_3429 #-----| False -> Block 246 #-----| True (back edge) -> Block 245 -# 754| Block 246 -# 754| r754_1(glval) = VariableAddress[x245] : -# 754| mu754_2(String) = Uninitialized[x245] : &:r754_1 -# 754| r754_3(glval) = FunctionAddress[String] : -# 754| v754_4(void) = Call[String] : func:r754_3, this:r754_1 -# 754| mu754_5(unknown) = ^CallSideEffect : ~m? -# 754| mu754_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r754_1 -# 755| r755_1(glval) = VariableAddress[x245] : -# 755| r755_2(glval) = FunctionAddress[~String] : -# 755| v755_3(void) = Call[~String] : func:r755_2, this:r755_1 -# 755| mu755_4(unknown) = ^CallSideEffect : ~m? -# 755| v755_5(void) = ^IndirectReadSideEffect[-1] : &:r755_1, ~m? -# 755| mu755_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r755_1 -# 755| r755_7(bool) = Constant[0] : -# 755| v755_8(void) = ConditionalBranch : r755_7 +# 35| Block 246 +# 35| r35_3431(glval) = VariableAddress[x245] : +# 35| mu35_3432(String) = Uninitialized[x245] : &:r35_3431 +# 35| r35_3433(glval) = FunctionAddress[String] : +# 35| v35_3434(void) = Call[String] : func:r35_3433, this:r35_3431 +# 35| mu35_3435(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3431 +# 35| r35_3437(glval) = VariableAddress[x245] : +# 35| r35_3438(glval) = FunctionAddress[~String] : +# 35| v35_3439(void) = Call[~String] : func:r35_3438, this:r35_3437 +# 35| mu35_3440(unknown) = ^CallSideEffect : ~m? +# 35| v35_3441(void) = ^IndirectReadSideEffect[-1] : &:r35_3437, ~m? +# 35| mu35_3442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3437 +# 35| r35_3443(bool) = Constant[0] : +# 35| v35_3444(void) = ConditionalBranch : r35_3443 #-----| False -> Block 247 #-----| True (back edge) -> Block 246 -# 757| Block 247 -# 757| r757_1(glval) = VariableAddress[x246] : -# 757| mu757_2(String) = Uninitialized[x246] : &:r757_1 -# 757| r757_3(glval) = FunctionAddress[String] : -# 757| v757_4(void) = Call[String] : func:r757_3, this:r757_1 -# 757| mu757_5(unknown) = ^CallSideEffect : ~m? -# 757| mu757_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r757_1 -# 758| r758_1(glval) = VariableAddress[x246] : -# 758| r758_2(glval) = FunctionAddress[~String] : -# 758| v758_3(void) = Call[~String] : func:r758_2, this:r758_1 -# 758| mu758_4(unknown) = ^CallSideEffect : ~m? -# 758| v758_5(void) = ^IndirectReadSideEffect[-1] : &:r758_1, ~m? -# 758| mu758_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r758_1 -# 758| r758_7(bool) = Constant[0] : -# 758| v758_8(void) = ConditionalBranch : r758_7 +# 35| Block 247 +# 35| r35_3445(glval) = VariableAddress[x246] : +# 35| mu35_3446(String) = Uninitialized[x246] : &:r35_3445 +# 35| r35_3447(glval) = FunctionAddress[String] : +# 35| v35_3448(void) = Call[String] : func:r35_3447, this:r35_3445 +# 35| mu35_3449(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3445 +# 35| r35_3451(glval) = VariableAddress[x246] : +# 35| r35_3452(glval) = FunctionAddress[~String] : +# 35| v35_3453(void) = Call[~String] : func:r35_3452, this:r35_3451 +# 35| mu35_3454(unknown) = ^CallSideEffect : ~m? +# 35| v35_3455(void) = ^IndirectReadSideEffect[-1] : &:r35_3451, ~m? +# 35| mu35_3456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3451 +# 35| r35_3457(bool) = Constant[0] : +# 35| v35_3458(void) = ConditionalBranch : r35_3457 #-----| False -> Block 248 #-----| True (back edge) -> Block 247 -# 760| Block 248 -# 760| r760_1(glval) = VariableAddress[x247] : -# 760| mu760_2(String) = Uninitialized[x247] : &:r760_1 -# 760| r760_3(glval) = FunctionAddress[String] : -# 760| v760_4(void) = Call[String] : func:r760_3, this:r760_1 -# 760| mu760_5(unknown) = ^CallSideEffect : ~m? -# 760| mu760_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r760_1 -# 761| r761_1(glval) = VariableAddress[x247] : -# 761| r761_2(glval) = FunctionAddress[~String] : -# 761| v761_3(void) = Call[~String] : func:r761_2, this:r761_1 -# 761| mu761_4(unknown) = ^CallSideEffect : ~m? -# 761| v761_5(void) = ^IndirectReadSideEffect[-1] : &:r761_1, ~m? -# 761| mu761_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r761_1 -# 761| r761_7(bool) = Constant[0] : -# 761| v761_8(void) = ConditionalBranch : r761_7 +# 35| Block 248 +# 35| r35_3459(glval) = VariableAddress[x247] : +# 35| mu35_3460(String) = Uninitialized[x247] : &:r35_3459 +# 35| r35_3461(glval) = FunctionAddress[String] : +# 35| v35_3462(void) = Call[String] : func:r35_3461, this:r35_3459 +# 35| mu35_3463(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3459 +# 35| r35_3465(glval) = VariableAddress[x247] : +# 35| r35_3466(glval) = FunctionAddress[~String] : +# 35| v35_3467(void) = Call[~String] : func:r35_3466, this:r35_3465 +# 35| mu35_3468(unknown) = ^CallSideEffect : ~m? +# 35| v35_3469(void) = ^IndirectReadSideEffect[-1] : &:r35_3465, ~m? +# 35| mu35_3470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3465 +# 35| r35_3471(bool) = Constant[0] : +# 35| v35_3472(void) = ConditionalBranch : r35_3471 #-----| False -> Block 249 #-----| True (back edge) -> Block 248 -# 763| Block 249 -# 763| r763_1(glval) = VariableAddress[x248] : -# 763| mu763_2(String) = Uninitialized[x248] : &:r763_1 -# 763| r763_3(glval) = FunctionAddress[String] : -# 763| v763_4(void) = Call[String] : func:r763_3, this:r763_1 -# 763| mu763_5(unknown) = ^CallSideEffect : ~m? -# 763| mu763_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r763_1 -# 764| r764_1(glval) = VariableAddress[x248] : -# 764| r764_2(glval) = FunctionAddress[~String] : -# 764| v764_3(void) = Call[~String] : func:r764_2, this:r764_1 -# 764| mu764_4(unknown) = ^CallSideEffect : ~m? -# 764| v764_5(void) = ^IndirectReadSideEffect[-1] : &:r764_1, ~m? -# 764| mu764_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r764_1 -# 764| r764_7(bool) = Constant[0] : -# 764| v764_8(void) = ConditionalBranch : r764_7 +# 35| Block 249 +# 35| r35_3473(glval) = VariableAddress[x248] : +# 35| mu35_3474(String) = Uninitialized[x248] : &:r35_3473 +# 35| r35_3475(glval) = FunctionAddress[String] : +# 35| v35_3476(void) = Call[String] : func:r35_3475, this:r35_3473 +# 35| mu35_3477(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3473 +# 35| r35_3479(glval) = VariableAddress[x248] : +# 35| r35_3480(glval) = FunctionAddress[~String] : +# 35| v35_3481(void) = Call[~String] : func:r35_3480, this:r35_3479 +# 35| mu35_3482(unknown) = ^CallSideEffect : ~m? +# 35| v35_3483(void) = ^IndirectReadSideEffect[-1] : &:r35_3479, ~m? +# 35| mu35_3484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3479 +# 35| r35_3485(bool) = Constant[0] : +# 35| v35_3486(void) = ConditionalBranch : r35_3485 #-----| False -> Block 250 #-----| True (back edge) -> Block 249 -# 766| Block 250 -# 766| r766_1(glval) = VariableAddress[x249] : -# 766| mu766_2(String) = Uninitialized[x249] : &:r766_1 -# 766| r766_3(glval) = FunctionAddress[String] : -# 766| v766_4(void) = Call[String] : func:r766_3, this:r766_1 -# 766| mu766_5(unknown) = ^CallSideEffect : ~m? -# 766| mu766_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r766_1 -# 767| r767_1(glval) = VariableAddress[x249] : -# 767| r767_2(glval) = FunctionAddress[~String] : -# 767| v767_3(void) = Call[~String] : func:r767_2, this:r767_1 -# 767| mu767_4(unknown) = ^CallSideEffect : ~m? -# 767| v767_5(void) = ^IndirectReadSideEffect[-1] : &:r767_1, ~m? -# 767| mu767_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r767_1 -# 767| r767_7(bool) = Constant[0] : -# 767| v767_8(void) = ConditionalBranch : r767_7 +# 35| Block 250 +# 35| r35_3487(glval) = VariableAddress[x249] : +# 35| mu35_3488(String) = Uninitialized[x249] : &:r35_3487 +# 35| r35_3489(glval) = FunctionAddress[String] : +# 35| v35_3490(void) = Call[String] : func:r35_3489, this:r35_3487 +# 35| mu35_3491(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3487 +# 35| r35_3493(glval) = VariableAddress[x249] : +# 35| r35_3494(glval) = FunctionAddress[~String] : +# 35| v35_3495(void) = Call[~String] : func:r35_3494, this:r35_3493 +# 35| mu35_3496(unknown) = ^CallSideEffect : ~m? +# 35| v35_3497(void) = ^IndirectReadSideEffect[-1] : &:r35_3493, ~m? +# 35| mu35_3498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3493 +# 35| r35_3499(bool) = Constant[0] : +# 35| v35_3500(void) = ConditionalBranch : r35_3499 #-----| False -> Block 251 #-----| True (back edge) -> Block 250 -# 769| Block 251 -# 769| r769_1(glval) = VariableAddress[x250] : -# 769| mu769_2(String) = Uninitialized[x250] : &:r769_1 -# 769| r769_3(glval) = FunctionAddress[String] : -# 769| v769_4(void) = Call[String] : func:r769_3, this:r769_1 -# 769| mu769_5(unknown) = ^CallSideEffect : ~m? -# 769| mu769_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r769_1 -# 770| r770_1(glval) = VariableAddress[x250] : -# 770| r770_2(glval) = FunctionAddress[~String] : -# 770| v770_3(void) = Call[~String] : func:r770_2, this:r770_1 -# 770| mu770_4(unknown) = ^CallSideEffect : ~m? -# 770| v770_5(void) = ^IndirectReadSideEffect[-1] : &:r770_1, ~m? -# 770| mu770_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r770_1 -# 770| r770_7(bool) = Constant[0] : -# 770| v770_8(void) = ConditionalBranch : r770_7 +# 35| Block 251 +# 35| r35_3501(glval) = VariableAddress[x250] : +# 35| mu35_3502(String) = Uninitialized[x250] : &:r35_3501 +# 35| r35_3503(glval) = FunctionAddress[String] : +# 35| v35_3504(void) = Call[String] : func:r35_3503, this:r35_3501 +# 35| mu35_3505(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3501 +# 35| r35_3507(glval) = VariableAddress[x250] : +# 35| r35_3508(glval) = FunctionAddress[~String] : +# 35| v35_3509(void) = Call[~String] : func:r35_3508, this:r35_3507 +# 35| mu35_3510(unknown) = ^CallSideEffect : ~m? +# 35| v35_3511(void) = ^IndirectReadSideEffect[-1] : &:r35_3507, ~m? +# 35| mu35_3512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3507 +# 35| r35_3513(bool) = Constant[0] : +# 35| v35_3514(void) = ConditionalBranch : r35_3513 #-----| False -> Block 252 #-----| True (back edge) -> Block 251 -# 772| Block 252 -# 772| r772_1(glval) = VariableAddress[x251] : -# 772| mu772_2(String) = Uninitialized[x251] : &:r772_1 -# 772| r772_3(glval) = FunctionAddress[String] : -# 772| v772_4(void) = Call[String] : func:r772_3, this:r772_1 -# 772| mu772_5(unknown) = ^CallSideEffect : ~m? -# 772| mu772_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r772_1 -# 773| r773_1(glval) = VariableAddress[x251] : -# 773| r773_2(glval) = FunctionAddress[~String] : -# 773| v773_3(void) = Call[~String] : func:r773_2, this:r773_1 -# 773| mu773_4(unknown) = ^CallSideEffect : ~m? -# 773| v773_5(void) = ^IndirectReadSideEffect[-1] : &:r773_1, ~m? -# 773| mu773_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r773_1 -# 773| r773_7(bool) = Constant[0] : -# 773| v773_8(void) = ConditionalBranch : r773_7 +# 35| Block 252 +# 35| r35_3515(glval) = VariableAddress[x251] : +# 35| mu35_3516(String) = Uninitialized[x251] : &:r35_3515 +# 35| r35_3517(glval) = FunctionAddress[String] : +# 35| v35_3518(void) = Call[String] : func:r35_3517, this:r35_3515 +# 35| mu35_3519(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3515 +# 35| r35_3521(glval) = VariableAddress[x251] : +# 35| r35_3522(glval) = FunctionAddress[~String] : +# 35| v35_3523(void) = Call[~String] : func:r35_3522, this:r35_3521 +# 35| mu35_3524(unknown) = ^CallSideEffect : ~m? +# 35| v35_3525(void) = ^IndirectReadSideEffect[-1] : &:r35_3521, ~m? +# 35| mu35_3526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3521 +# 35| r35_3527(bool) = Constant[0] : +# 35| v35_3528(void) = ConditionalBranch : r35_3527 #-----| False -> Block 253 #-----| True (back edge) -> Block 252 -# 775| Block 253 -# 775| r775_1(glval) = VariableAddress[x252] : -# 775| mu775_2(String) = Uninitialized[x252] : &:r775_1 -# 775| r775_3(glval) = FunctionAddress[String] : -# 775| v775_4(void) = Call[String] : func:r775_3, this:r775_1 -# 775| mu775_5(unknown) = ^CallSideEffect : ~m? -# 775| mu775_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r775_1 -# 776| r776_1(glval) = VariableAddress[x252] : -# 776| r776_2(glval) = FunctionAddress[~String] : -# 776| v776_3(void) = Call[~String] : func:r776_2, this:r776_1 -# 776| mu776_4(unknown) = ^CallSideEffect : ~m? -# 776| v776_5(void) = ^IndirectReadSideEffect[-1] : &:r776_1, ~m? -# 776| mu776_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r776_1 -# 776| r776_7(bool) = Constant[0] : -# 776| v776_8(void) = ConditionalBranch : r776_7 +# 35| Block 253 +# 35| r35_3529(glval) = VariableAddress[x252] : +# 35| mu35_3530(String) = Uninitialized[x252] : &:r35_3529 +# 35| r35_3531(glval) = FunctionAddress[String] : +# 35| v35_3532(void) = Call[String] : func:r35_3531, this:r35_3529 +# 35| mu35_3533(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3529 +# 35| r35_3535(glval) = VariableAddress[x252] : +# 35| r35_3536(glval) = FunctionAddress[~String] : +# 35| v35_3537(void) = Call[~String] : func:r35_3536, this:r35_3535 +# 35| mu35_3538(unknown) = ^CallSideEffect : ~m? +# 35| v35_3539(void) = ^IndirectReadSideEffect[-1] : &:r35_3535, ~m? +# 35| mu35_3540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3535 +# 35| r35_3541(bool) = Constant[0] : +# 35| v35_3542(void) = ConditionalBranch : r35_3541 #-----| False -> Block 254 #-----| True (back edge) -> Block 253 -# 778| Block 254 -# 778| r778_1(glval) = VariableAddress[x253] : -# 778| mu778_2(String) = Uninitialized[x253] : &:r778_1 -# 778| r778_3(glval) = FunctionAddress[String] : -# 778| v778_4(void) = Call[String] : func:r778_3, this:r778_1 -# 778| mu778_5(unknown) = ^CallSideEffect : ~m? -# 778| mu778_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r778_1 -# 779| r779_1(glval) = VariableAddress[x253] : -# 779| r779_2(glval) = FunctionAddress[~String] : -# 779| v779_3(void) = Call[~String] : func:r779_2, this:r779_1 -# 779| mu779_4(unknown) = ^CallSideEffect : ~m? -# 779| v779_5(void) = ^IndirectReadSideEffect[-1] : &:r779_1, ~m? -# 779| mu779_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r779_1 -# 779| r779_7(bool) = Constant[0] : -# 779| v779_8(void) = ConditionalBranch : r779_7 +# 35| Block 254 +# 35| r35_3543(glval) = VariableAddress[x253] : +# 35| mu35_3544(String) = Uninitialized[x253] : &:r35_3543 +# 35| r35_3545(glval) = FunctionAddress[String] : +# 35| v35_3546(void) = Call[String] : func:r35_3545, this:r35_3543 +# 35| mu35_3547(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3543 +# 35| r35_3549(glval) = VariableAddress[x253] : +# 35| r35_3550(glval) = FunctionAddress[~String] : +# 35| v35_3551(void) = Call[~String] : func:r35_3550, this:r35_3549 +# 35| mu35_3552(unknown) = ^CallSideEffect : ~m? +# 35| v35_3553(void) = ^IndirectReadSideEffect[-1] : &:r35_3549, ~m? +# 35| mu35_3554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3549 +# 35| r35_3555(bool) = Constant[0] : +# 35| v35_3556(void) = ConditionalBranch : r35_3555 #-----| False -> Block 255 #-----| True (back edge) -> Block 254 -# 781| Block 255 -# 781| r781_1(glval) = VariableAddress[x254] : -# 781| mu781_2(String) = Uninitialized[x254] : &:r781_1 -# 781| r781_3(glval) = FunctionAddress[String] : -# 781| v781_4(void) = Call[String] : func:r781_3, this:r781_1 -# 781| mu781_5(unknown) = ^CallSideEffect : ~m? -# 781| mu781_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r781_1 -# 782| r782_1(glval) = VariableAddress[x254] : -# 782| r782_2(glval) = FunctionAddress[~String] : -# 782| v782_3(void) = Call[~String] : func:r782_2, this:r782_1 -# 782| mu782_4(unknown) = ^CallSideEffect : ~m? -# 782| v782_5(void) = ^IndirectReadSideEffect[-1] : &:r782_1, ~m? -# 782| mu782_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r782_1 -# 782| r782_7(bool) = Constant[0] : -# 782| v782_8(void) = ConditionalBranch : r782_7 +# 35| Block 255 +# 35| r35_3557(glval) = VariableAddress[x254] : +# 35| mu35_3558(String) = Uninitialized[x254] : &:r35_3557 +# 35| r35_3559(glval) = FunctionAddress[String] : +# 35| v35_3560(void) = Call[String] : func:r35_3559, this:r35_3557 +# 35| mu35_3561(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3557 +# 35| r35_3563(glval) = VariableAddress[x254] : +# 35| r35_3564(glval) = FunctionAddress[~String] : +# 35| v35_3565(void) = Call[~String] : func:r35_3564, this:r35_3563 +# 35| mu35_3566(unknown) = ^CallSideEffect : ~m? +# 35| v35_3567(void) = ^IndirectReadSideEffect[-1] : &:r35_3563, ~m? +# 35| mu35_3568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3563 +# 35| r35_3569(bool) = Constant[0] : +# 35| v35_3570(void) = ConditionalBranch : r35_3569 #-----| False -> Block 256 #-----| True (back edge) -> Block 255 -# 784| Block 256 -# 784| r784_1(glval) = VariableAddress[x255] : -# 784| mu784_2(String) = Uninitialized[x255] : &:r784_1 -# 784| r784_3(glval) = FunctionAddress[String] : -# 784| v784_4(void) = Call[String] : func:r784_3, this:r784_1 -# 784| mu784_5(unknown) = ^CallSideEffect : ~m? -# 784| mu784_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r784_1 -# 785| r785_1(glval) = VariableAddress[x255] : -# 785| r785_2(glval) = FunctionAddress[~String] : -# 785| v785_3(void) = Call[~String] : func:r785_2, this:r785_1 -# 785| mu785_4(unknown) = ^CallSideEffect : ~m? -# 785| v785_5(void) = ^IndirectReadSideEffect[-1] : &:r785_1, ~m? -# 785| mu785_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r785_1 -# 785| r785_7(bool) = Constant[0] : -# 785| v785_8(void) = ConditionalBranch : r785_7 +# 35| Block 256 +# 35| r35_3571(glval) = VariableAddress[x255] : +# 35| mu35_3572(String) = Uninitialized[x255] : &:r35_3571 +# 35| r35_3573(glval) = FunctionAddress[String] : +# 35| v35_3574(void) = Call[String] : func:r35_3573, this:r35_3571 +# 35| mu35_3575(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3571 +# 35| r35_3577(glval) = VariableAddress[x255] : +# 35| r35_3578(glval) = FunctionAddress[~String] : +# 35| v35_3579(void) = Call[~String] : func:r35_3578, this:r35_3577 +# 35| mu35_3580(unknown) = ^CallSideEffect : ~m? +# 35| v35_3581(void) = ^IndirectReadSideEffect[-1] : &:r35_3577, ~m? +# 35| mu35_3582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3577 +# 35| r35_3583(bool) = Constant[0] : +# 35| v35_3584(void) = ConditionalBranch : r35_3583 #-----| False -> Block 257 #-----| True (back edge) -> Block 256 -# 787| Block 257 -# 787| r787_1(glval) = VariableAddress[x256] : -# 787| mu787_2(String) = Uninitialized[x256] : &:r787_1 -# 787| r787_3(glval) = FunctionAddress[String] : -# 787| v787_4(void) = Call[String] : func:r787_3, this:r787_1 -# 787| mu787_5(unknown) = ^CallSideEffect : ~m? -# 787| mu787_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r787_1 -# 788| r788_1(glval) = VariableAddress[x256] : -# 788| r788_2(glval) = FunctionAddress[~String] : -# 788| v788_3(void) = Call[~String] : func:r788_2, this:r788_1 -# 788| mu788_4(unknown) = ^CallSideEffect : ~m? -# 788| v788_5(void) = ^IndirectReadSideEffect[-1] : &:r788_1, ~m? -# 788| mu788_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r788_1 -# 788| r788_7(bool) = Constant[0] : -# 788| v788_8(void) = ConditionalBranch : r788_7 +# 35| Block 257 +# 35| r35_3585(glval) = VariableAddress[x256] : +# 35| mu35_3586(String) = Uninitialized[x256] : &:r35_3585 +# 35| r35_3587(glval) = FunctionAddress[String] : +# 35| v35_3588(void) = Call[String] : func:r35_3587, this:r35_3585 +# 35| mu35_3589(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3585 +# 35| r35_3591(glval) = VariableAddress[x256] : +# 35| r35_3592(glval) = FunctionAddress[~String] : +# 35| v35_3593(void) = Call[~String] : func:r35_3592, this:r35_3591 +# 35| mu35_3594(unknown) = ^CallSideEffect : ~m? +# 35| v35_3595(void) = ^IndirectReadSideEffect[-1] : &:r35_3591, ~m? +# 35| mu35_3596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3591 +# 35| r35_3597(bool) = Constant[0] : +# 35| v35_3598(void) = ConditionalBranch : r35_3597 #-----| False -> Block 258 #-----| True (back edge) -> Block 257 -# 790| Block 258 -# 790| r790_1(glval) = VariableAddress[x257] : -# 790| mu790_2(String) = Uninitialized[x257] : &:r790_1 -# 790| r790_3(glval) = FunctionAddress[String] : -# 790| v790_4(void) = Call[String] : func:r790_3, this:r790_1 -# 790| mu790_5(unknown) = ^CallSideEffect : ~m? -# 790| mu790_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r790_1 -# 791| r791_1(glval) = VariableAddress[x257] : -# 791| r791_2(glval) = FunctionAddress[~String] : -# 791| v791_3(void) = Call[~String] : func:r791_2, this:r791_1 -# 791| mu791_4(unknown) = ^CallSideEffect : ~m? -# 791| v791_5(void) = ^IndirectReadSideEffect[-1] : &:r791_1, ~m? -# 791| mu791_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r791_1 -# 791| r791_7(bool) = Constant[0] : -# 791| v791_8(void) = ConditionalBranch : r791_7 +# 35| Block 258 +# 35| r35_3599(glval) = VariableAddress[x257] : +# 35| mu35_3600(String) = Uninitialized[x257] : &:r35_3599 +# 35| r35_3601(glval) = FunctionAddress[String] : +# 35| v35_3602(void) = Call[String] : func:r35_3601, this:r35_3599 +# 35| mu35_3603(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3599 +# 35| r35_3605(glval) = VariableAddress[x257] : +# 35| r35_3606(glval) = FunctionAddress[~String] : +# 35| v35_3607(void) = Call[~String] : func:r35_3606, this:r35_3605 +# 35| mu35_3608(unknown) = ^CallSideEffect : ~m? +# 35| v35_3609(void) = ^IndirectReadSideEffect[-1] : &:r35_3605, ~m? +# 35| mu35_3610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3605 +# 35| r35_3611(bool) = Constant[0] : +# 35| v35_3612(void) = ConditionalBranch : r35_3611 #-----| False -> Block 259 #-----| True (back edge) -> Block 258 -# 793| Block 259 -# 793| r793_1(glval) = VariableAddress[x258] : -# 793| mu793_2(String) = Uninitialized[x258] : &:r793_1 -# 793| r793_3(glval) = FunctionAddress[String] : -# 793| v793_4(void) = Call[String] : func:r793_3, this:r793_1 -# 793| mu793_5(unknown) = ^CallSideEffect : ~m? -# 793| mu793_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r793_1 -# 794| r794_1(glval) = VariableAddress[x258] : -# 794| r794_2(glval) = FunctionAddress[~String] : -# 794| v794_3(void) = Call[~String] : func:r794_2, this:r794_1 -# 794| mu794_4(unknown) = ^CallSideEffect : ~m? -# 794| v794_5(void) = ^IndirectReadSideEffect[-1] : &:r794_1, ~m? -# 794| mu794_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r794_1 -# 794| r794_7(bool) = Constant[0] : -# 794| v794_8(void) = ConditionalBranch : r794_7 +# 35| Block 259 +# 35| r35_3613(glval) = VariableAddress[x258] : +# 35| mu35_3614(String) = Uninitialized[x258] : &:r35_3613 +# 35| r35_3615(glval) = FunctionAddress[String] : +# 35| v35_3616(void) = Call[String] : func:r35_3615, this:r35_3613 +# 35| mu35_3617(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3613 +# 35| r35_3619(glval) = VariableAddress[x258] : +# 35| r35_3620(glval) = FunctionAddress[~String] : +# 35| v35_3621(void) = Call[~String] : func:r35_3620, this:r35_3619 +# 35| mu35_3622(unknown) = ^CallSideEffect : ~m? +# 35| v35_3623(void) = ^IndirectReadSideEffect[-1] : &:r35_3619, ~m? +# 35| mu35_3624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3619 +# 35| r35_3625(bool) = Constant[0] : +# 35| v35_3626(void) = ConditionalBranch : r35_3625 #-----| False -> Block 260 #-----| True (back edge) -> Block 259 -# 796| Block 260 -# 796| r796_1(glval) = VariableAddress[x259] : -# 796| mu796_2(String) = Uninitialized[x259] : &:r796_1 -# 796| r796_3(glval) = FunctionAddress[String] : -# 796| v796_4(void) = Call[String] : func:r796_3, this:r796_1 -# 796| mu796_5(unknown) = ^CallSideEffect : ~m? -# 796| mu796_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r796_1 -# 797| r797_1(glval) = VariableAddress[x259] : -# 797| r797_2(glval) = FunctionAddress[~String] : -# 797| v797_3(void) = Call[~String] : func:r797_2, this:r797_1 -# 797| mu797_4(unknown) = ^CallSideEffect : ~m? -# 797| v797_5(void) = ^IndirectReadSideEffect[-1] : &:r797_1, ~m? -# 797| mu797_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r797_1 -# 797| r797_7(bool) = Constant[0] : -# 797| v797_8(void) = ConditionalBranch : r797_7 +# 35| Block 260 +# 35| r35_3627(glval) = VariableAddress[x259] : +# 35| mu35_3628(String) = Uninitialized[x259] : &:r35_3627 +# 35| r35_3629(glval) = FunctionAddress[String] : +# 35| v35_3630(void) = Call[String] : func:r35_3629, this:r35_3627 +# 35| mu35_3631(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3627 +# 35| r35_3633(glval) = VariableAddress[x259] : +# 35| r35_3634(glval) = FunctionAddress[~String] : +# 35| v35_3635(void) = Call[~String] : func:r35_3634, this:r35_3633 +# 35| mu35_3636(unknown) = ^CallSideEffect : ~m? +# 35| v35_3637(void) = ^IndirectReadSideEffect[-1] : &:r35_3633, ~m? +# 35| mu35_3638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3633 +# 35| r35_3639(bool) = Constant[0] : +# 35| v35_3640(void) = ConditionalBranch : r35_3639 #-----| False -> Block 261 #-----| True (back edge) -> Block 260 -# 799| Block 261 -# 799| r799_1(glval) = VariableAddress[x260] : -# 799| mu799_2(String) = Uninitialized[x260] : &:r799_1 -# 799| r799_3(glval) = FunctionAddress[String] : -# 799| v799_4(void) = Call[String] : func:r799_3, this:r799_1 -# 799| mu799_5(unknown) = ^CallSideEffect : ~m? -# 799| mu799_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r799_1 -# 800| r800_1(glval) = VariableAddress[x260] : -# 800| r800_2(glval) = FunctionAddress[~String] : -# 800| v800_3(void) = Call[~String] : func:r800_2, this:r800_1 -# 800| mu800_4(unknown) = ^CallSideEffect : ~m? -# 800| v800_5(void) = ^IndirectReadSideEffect[-1] : &:r800_1, ~m? -# 800| mu800_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r800_1 -# 800| r800_7(bool) = Constant[0] : -# 800| v800_8(void) = ConditionalBranch : r800_7 +# 35| Block 261 +# 35| r35_3641(glval) = VariableAddress[x260] : +# 35| mu35_3642(String) = Uninitialized[x260] : &:r35_3641 +# 35| r35_3643(glval) = FunctionAddress[String] : +# 35| v35_3644(void) = Call[String] : func:r35_3643, this:r35_3641 +# 35| mu35_3645(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3641 +# 35| r35_3647(glval) = VariableAddress[x260] : +# 35| r35_3648(glval) = FunctionAddress[~String] : +# 35| v35_3649(void) = Call[~String] : func:r35_3648, this:r35_3647 +# 35| mu35_3650(unknown) = ^CallSideEffect : ~m? +# 35| v35_3651(void) = ^IndirectReadSideEffect[-1] : &:r35_3647, ~m? +# 35| mu35_3652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3647 +# 35| r35_3653(bool) = Constant[0] : +# 35| v35_3654(void) = ConditionalBranch : r35_3653 #-----| False -> Block 262 #-----| True (back edge) -> Block 261 -# 802| Block 262 -# 802| r802_1(glval) = VariableAddress[x261] : -# 802| mu802_2(String) = Uninitialized[x261] : &:r802_1 -# 802| r802_3(glval) = FunctionAddress[String] : -# 802| v802_4(void) = Call[String] : func:r802_3, this:r802_1 -# 802| mu802_5(unknown) = ^CallSideEffect : ~m? -# 802| mu802_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r802_1 -# 803| r803_1(glval) = VariableAddress[x261] : -# 803| r803_2(glval) = FunctionAddress[~String] : -# 803| v803_3(void) = Call[~String] : func:r803_2, this:r803_1 -# 803| mu803_4(unknown) = ^CallSideEffect : ~m? -# 803| v803_5(void) = ^IndirectReadSideEffect[-1] : &:r803_1, ~m? -# 803| mu803_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r803_1 -# 803| r803_7(bool) = Constant[0] : -# 803| v803_8(void) = ConditionalBranch : r803_7 +# 35| Block 262 +# 35| r35_3655(glval) = VariableAddress[x261] : +# 35| mu35_3656(String) = Uninitialized[x261] : &:r35_3655 +# 35| r35_3657(glval) = FunctionAddress[String] : +# 35| v35_3658(void) = Call[String] : func:r35_3657, this:r35_3655 +# 35| mu35_3659(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3655 +# 35| r35_3661(glval) = VariableAddress[x261] : +# 35| r35_3662(glval) = FunctionAddress[~String] : +# 35| v35_3663(void) = Call[~String] : func:r35_3662, this:r35_3661 +# 35| mu35_3664(unknown) = ^CallSideEffect : ~m? +# 35| v35_3665(void) = ^IndirectReadSideEffect[-1] : &:r35_3661, ~m? +# 35| mu35_3666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3661 +# 35| r35_3667(bool) = Constant[0] : +# 35| v35_3668(void) = ConditionalBranch : r35_3667 #-----| False -> Block 263 #-----| True (back edge) -> Block 262 -# 805| Block 263 -# 805| r805_1(glval) = VariableAddress[x262] : -# 805| mu805_2(String) = Uninitialized[x262] : &:r805_1 -# 805| r805_3(glval) = FunctionAddress[String] : -# 805| v805_4(void) = Call[String] : func:r805_3, this:r805_1 -# 805| mu805_5(unknown) = ^CallSideEffect : ~m? -# 805| mu805_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r805_1 -# 806| r806_1(glval) = VariableAddress[x262] : -# 806| r806_2(glval) = FunctionAddress[~String] : -# 806| v806_3(void) = Call[~String] : func:r806_2, this:r806_1 -# 806| mu806_4(unknown) = ^CallSideEffect : ~m? -# 806| v806_5(void) = ^IndirectReadSideEffect[-1] : &:r806_1, ~m? -# 806| mu806_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r806_1 -# 806| r806_7(bool) = Constant[0] : -# 806| v806_8(void) = ConditionalBranch : r806_7 +# 35| Block 263 +# 35| r35_3669(glval) = VariableAddress[x262] : +# 35| mu35_3670(String) = Uninitialized[x262] : &:r35_3669 +# 35| r35_3671(glval) = FunctionAddress[String] : +# 35| v35_3672(void) = Call[String] : func:r35_3671, this:r35_3669 +# 35| mu35_3673(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3669 +# 35| r35_3675(glval) = VariableAddress[x262] : +# 35| r35_3676(glval) = FunctionAddress[~String] : +# 35| v35_3677(void) = Call[~String] : func:r35_3676, this:r35_3675 +# 35| mu35_3678(unknown) = ^CallSideEffect : ~m? +# 35| v35_3679(void) = ^IndirectReadSideEffect[-1] : &:r35_3675, ~m? +# 35| mu35_3680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3675 +# 35| r35_3681(bool) = Constant[0] : +# 35| v35_3682(void) = ConditionalBranch : r35_3681 #-----| False -> Block 264 #-----| True (back edge) -> Block 263 -# 808| Block 264 -# 808| r808_1(glval) = VariableAddress[x263] : -# 808| mu808_2(String) = Uninitialized[x263] : &:r808_1 -# 808| r808_3(glval) = FunctionAddress[String] : -# 808| v808_4(void) = Call[String] : func:r808_3, this:r808_1 -# 808| mu808_5(unknown) = ^CallSideEffect : ~m? -# 808| mu808_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r808_1 -# 809| r809_1(glval) = VariableAddress[x263] : -# 809| r809_2(glval) = FunctionAddress[~String] : -# 809| v809_3(void) = Call[~String] : func:r809_2, this:r809_1 -# 809| mu809_4(unknown) = ^CallSideEffect : ~m? -# 809| v809_5(void) = ^IndirectReadSideEffect[-1] : &:r809_1, ~m? -# 809| mu809_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 -# 809| r809_7(bool) = Constant[0] : -# 809| v809_8(void) = ConditionalBranch : r809_7 +# 35| Block 264 +# 35| r35_3683(glval) = VariableAddress[x263] : +# 35| mu35_3684(String) = Uninitialized[x263] : &:r35_3683 +# 35| r35_3685(glval) = FunctionAddress[String] : +# 35| v35_3686(void) = Call[String] : func:r35_3685, this:r35_3683 +# 35| mu35_3687(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3683 +# 35| r35_3689(glval) = VariableAddress[x263] : +# 35| r35_3690(glval) = FunctionAddress[~String] : +# 35| v35_3691(void) = Call[~String] : func:r35_3690, this:r35_3689 +# 35| mu35_3692(unknown) = ^CallSideEffect : ~m? +# 35| v35_3693(void) = ^IndirectReadSideEffect[-1] : &:r35_3689, ~m? +# 35| mu35_3694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3689 +# 35| r35_3695(bool) = Constant[0] : +# 35| v35_3696(void) = ConditionalBranch : r35_3695 #-----| False -> Block 265 #-----| True (back edge) -> Block 264 -# 811| Block 265 -# 811| r811_1(glval) = VariableAddress[x264] : -# 811| mu811_2(String) = Uninitialized[x264] : &:r811_1 -# 811| r811_3(glval) = FunctionAddress[String] : -# 811| v811_4(void) = Call[String] : func:r811_3, this:r811_1 -# 811| mu811_5(unknown) = ^CallSideEffect : ~m? -# 811| mu811_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r811_1 -# 812| r812_1(glval) = VariableAddress[x264] : -# 812| r812_2(glval) = FunctionAddress[~String] : -# 812| v812_3(void) = Call[~String] : func:r812_2, this:r812_1 -# 812| mu812_4(unknown) = ^CallSideEffect : ~m? -# 812| v812_5(void) = ^IndirectReadSideEffect[-1] : &:r812_1, ~m? -# 812| mu812_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r812_1 -# 812| r812_7(bool) = Constant[0] : -# 812| v812_8(void) = ConditionalBranch : r812_7 +# 35| Block 265 +# 35| r35_3697(glval) = VariableAddress[x264] : +# 35| mu35_3698(String) = Uninitialized[x264] : &:r35_3697 +# 35| r35_3699(glval) = FunctionAddress[String] : +# 35| v35_3700(void) = Call[String] : func:r35_3699, this:r35_3697 +# 35| mu35_3701(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3697 +# 35| r35_3703(glval) = VariableAddress[x264] : +# 35| r35_3704(glval) = FunctionAddress[~String] : +# 35| v35_3705(void) = Call[~String] : func:r35_3704, this:r35_3703 +# 35| mu35_3706(unknown) = ^CallSideEffect : ~m? +# 35| v35_3707(void) = ^IndirectReadSideEffect[-1] : &:r35_3703, ~m? +# 35| mu35_3708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3703 +# 35| r35_3709(bool) = Constant[0] : +# 35| v35_3710(void) = ConditionalBranch : r35_3709 #-----| False -> Block 266 #-----| True (back edge) -> Block 265 -# 814| Block 266 -# 814| r814_1(glval) = VariableAddress[x265] : -# 814| mu814_2(String) = Uninitialized[x265] : &:r814_1 -# 814| r814_3(glval) = FunctionAddress[String] : -# 814| v814_4(void) = Call[String] : func:r814_3, this:r814_1 -# 814| mu814_5(unknown) = ^CallSideEffect : ~m? -# 814| mu814_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r814_1 -# 815| r815_1(glval) = VariableAddress[x265] : -# 815| r815_2(glval) = FunctionAddress[~String] : -# 815| v815_3(void) = Call[~String] : func:r815_2, this:r815_1 -# 815| mu815_4(unknown) = ^CallSideEffect : ~m? -# 815| v815_5(void) = ^IndirectReadSideEffect[-1] : &:r815_1, ~m? -# 815| mu815_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r815_1 -# 815| r815_7(bool) = Constant[0] : -# 815| v815_8(void) = ConditionalBranch : r815_7 +# 35| Block 266 +# 35| r35_3711(glval) = VariableAddress[x265] : +# 35| mu35_3712(String) = Uninitialized[x265] : &:r35_3711 +# 35| r35_3713(glval) = FunctionAddress[String] : +# 35| v35_3714(void) = Call[String] : func:r35_3713, this:r35_3711 +# 35| mu35_3715(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3711 +# 35| r35_3717(glval) = VariableAddress[x265] : +# 35| r35_3718(glval) = FunctionAddress[~String] : +# 35| v35_3719(void) = Call[~String] : func:r35_3718, this:r35_3717 +# 35| mu35_3720(unknown) = ^CallSideEffect : ~m? +# 35| v35_3721(void) = ^IndirectReadSideEffect[-1] : &:r35_3717, ~m? +# 35| mu35_3722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3717 +# 35| r35_3723(bool) = Constant[0] : +# 35| v35_3724(void) = ConditionalBranch : r35_3723 #-----| False -> Block 267 #-----| True (back edge) -> Block 266 -# 817| Block 267 -# 817| r817_1(glval) = VariableAddress[x266] : -# 817| mu817_2(String) = Uninitialized[x266] : &:r817_1 -# 817| r817_3(glval) = FunctionAddress[String] : -# 817| v817_4(void) = Call[String] : func:r817_3, this:r817_1 -# 817| mu817_5(unknown) = ^CallSideEffect : ~m? -# 817| mu817_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r817_1 -# 818| r818_1(glval) = VariableAddress[x266] : -# 818| r818_2(glval) = FunctionAddress[~String] : -# 818| v818_3(void) = Call[~String] : func:r818_2, this:r818_1 -# 818| mu818_4(unknown) = ^CallSideEffect : ~m? -# 818| v818_5(void) = ^IndirectReadSideEffect[-1] : &:r818_1, ~m? -# 818| mu818_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r818_1 -# 818| r818_7(bool) = Constant[0] : -# 818| v818_8(void) = ConditionalBranch : r818_7 +# 35| Block 267 +# 35| r35_3725(glval) = VariableAddress[x266] : +# 35| mu35_3726(String) = Uninitialized[x266] : &:r35_3725 +# 35| r35_3727(glval) = FunctionAddress[String] : +# 35| v35_3728(void) = Call[String] : func:r35_3727, this:r35_3725 +# 35| mu35_3729(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3725 +# 35| r35_3731(glval) = VariableAddress[x266] : +# 35| r35_3732(glval) = FunctionAddress[~String] : +# 35| v35_3733(void) = Call[~String] : func:r35_3732, this:r35_3731 +# 35| mu35_3734(unknown) = ^CallSideEffect : ~m? +# 35| v35_3735(void) = ^IndirectReadSideEffect[-1] : &:r35_3731, ~m? +# 35| mu35_3736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3731 +# 35| r35_3737(bool) = Constant[0] : +# 35| v35_3738(void) = ConditionalBranch : r35_3737 #-----| False -> Block 268 #-----| True (back edge) -> Block 267 -# 820| Block 268 -# 820| r820_1(glval) = VariableAddress[x267] : -# 820| mu820_2(String) = Uninitialized[x267] : &:r820_1 -# 820| r820_3(glval) = FunctionAddress[String] : -# 820| v820_4(void) = Call[String] : func:r820_3, this:r820_1 -# 820| mu820_5(unknown) = ^CallSideEffect : ~m? -# 820| mu820_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r820_1 -# 821| r821_1(glval) = VariableAddress[x267] : -# 821| r821_2(glval) = FunctionAddress[~String] : -# 821| v821_3(void) = Call[~String] : func:r821_2, this:r821_1 -# 821| mu821_4(unknown) = ^CallSideEffect : ~m? -# 821| v821_5(void) = ^IndirectReadSideEffect[-1] : &:r821_1, ~m? -# 821| mu821_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r821_1 -# 821| r821_7(bool) = Constant[0] : -# 821| v821_8(void) = ConditionalBranch : r821_7 +# 35| Block 268 +# 35| r35_3739(glval) = VariableAddress[x267] : +# 35| mu35_3740(String) = Uninitialized[x267] : &:r35_3739 +# 35| r35_3741(glval) = FunctionAddress[String] : +# 35| v35_3742(void) = Call[String] : func:r35_3741, this:r35_3739 +# 35| mu35_3743(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3739 +# 35| r35_3745(glval) = VariableAddress[x267] : +# 35| r35_3746(glval) = FunctionAddress[~String] : +# 35| v35_3747(void) = Call[~String] : func:r35_3746, this:r35_3745 +# 35| mu35_3748(unknown) = ^CallSideEffect : ~m? +# 35| v35_3749(void) = ^IndirectReadSideEffect[-1] : &:r35_3745, ~m? +# 35| mu35_3750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3745 +# 35| r35_3751(bool) = Constant[0] : +# 35| v35_3752(void) = ConditionalBranch : r35_3751 #-----| False -> Block 269 #-----| True (back edge) -> Block 268 -# 823| Block 269 -# 823| r823_1(glval) = VariableAddress[x268] : -# 823| mu823_2(String) = Uninitialized[x268] : &:r823_1 -# 823| r823_3(glval) = FunctionAddress[String] : -# 823| v823_4(void) = Call[String] : func:r823_3, this:r823_1 -# 823| mu823_5(unknown) = ^CallSideEffect : ~m? -# 823| mu823_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 -# 824| r824_1(glval) = VariableAddress[x268] : -# 824| r824_2(glval) = FunctionAddress[~String] : -# 824| v824_3(void) = Call[~String] : func:r824_2, this:r824_1 -# 824| mu824_4(unknown) = ^CallSideEffect : ~m? -# 824| v824_5(void) = ^IndirectReadSideEffect[-1] : &:r824_1, ~m? -# 824| mu824_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 -# 824| r824_7(bool) = Constant[0] : -# 824| v824_8(void) = ConditionalBranch : r824_7 +# 35| Block 269 +# 35| r35_3753(glval) = VariableAddress[x268] : +# 35| mu35_3754(String) = Uninitialized[x268] : &:r35_3753 +# 35| r35_3755(glval) = FunctionAddress[String] : +# 35| v35_3756(void) = Call[String] : func:r35_3755, this:r35_3753 +# 35| mu35_3757(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3753 +# 35| r35_3759(glval) = VariableAddress[x268] : +# 35| r35_3760(glval) = FunctionAddress[~String] : +# 35| v35_3761(void) = Call[~String] : func:r35_3760, this:r35_3759 +# 35| mu35_3762(unknown) = ^CallSideEffect : ~m? +# 35| v35_3763(void) = ^IndirectReadSideEffect[-1] : &:r35_3759, ~m? +# 35| mu35_3764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3759 +# 35| r35_3765(bool) = Constant[0] : +# 35| v35_3766(void) = ConditionalBranch : r35_3765 #-----| False -> Block 270 #-----| True (back edge) -> Block 269 -# 826| Block 270 -# 826| r826_1(glval) = VariableAddress[x269] : -# 826| mu826_2(String) = Uninitialized[x269] : &:r826_1 -# 826| r826_3(glval) = FunctionAddress[String] : -# 826| v826_4(void) = Call[String] : func:r826_3, this:r826_1 -# 826| mu826_5(unknown) = ^CallSideEffect : ~m? -# 826| mu826_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r826_1 -# 827| r827_1(glval) = VariableAddress[x269] : -# 827| r827_2(glval) = FunctionAddress[~String] : -# 827| v827_3(void) = Call[~String] : func:r827_2, this:r827_1 -# 827| mu827_4(unknown) = ^CallSideEffect : ~m? -# 827| v827_5(void) = ^IndirectReadSideEffect[-1] : &:r827_1, ~m? -# 827| mu827_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r827_1 -# 827| r827_7(bool) = Constant[0] : -# 827| v827_8(void) = ConditionalBranch : r827_7 +# 35| Block 270 +# 35| r35_3767(glval) = VariableAddress[x269] : +# 35| mu35_3768(String) = Uninitialized[x269] : &:r35_3767 +# 35| r35_3769(glval) = FunctionAddress[String] : +# 35| v35_3770(void) = Call[String] : func:r35_3769, this:r35_3767 +# 35| mu35_3771(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3767 +# 35| r35_3773(glval) = VariableAddress[x269] : +# 35| r35_3774(glval) = FunctionAddress[~String] : +# 35| v35_3775(void) = Call[~String] : func:r35_3774, this:r35_3773 +# 35| mu35_3776(unknown) = ^CallSideEffect : ~m? +# 35| v35_3777(void) = ^IndirectReadSideEffect[-1] : &:r35_3773, ~m? +# 35| mu35_3778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3773 +# 35| r35_3779(bool) = Constant[0] : +# 35| v35_3780(void) = ConditionalBranch : r35_3779 #-----| False -> Block 271 #-----| True (back edge) -> Block 270 -# 829| Block 271 -# 829| r829_1(glval) = VariableAddress[x270] : -# 829| mu829_2(String) = Uninitialized[x270] : &:r829_1 -# 829| r829_3(glval) = FunctionAddress[String] : -# 829| v829_4(void) = Call[String] : func:r829_3, this:r829_1 -# 829| mu829_5(unknown) = ^CallSideEffect : ~m? -# 829| mu829_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r829_1 -# 830| r830_1(glval) = VariableAddress[x270] : -# 830| r830_2(glval) = FunctionAddress[~String] : -# 830| v830_3(void) = Call[~String] : func:r830_2, this:r830_1 -# 830| mu830_4(unknown) = ^CallSideEffect : ~m? -# 830| v830_5(void) = ^IndirectReadSideEffect[-1] : &:r830_1, ~m? -# 830| mu830_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r830_1 -# 830| r830_7(bool) = Constant[0] : -# 830| v830_8(void) = ConditionalBranch : r830_7 +# 35| Block 271 +# 35| r35_3781(glval) = VariableAddress[x270] : +# 35| mu35_3782(String) = Uninitialized[x270] : &:r35_3781 +# 35| r35_3783(glval) = FunctionAddress[String] : +# 35| v35_3784(void) = Call[String] : func:r35_3783, this:r35_3781 +# 35| mu35_3785(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3781 +# 35| r35_3787(glval) = VariableAddress[x270] : +# 35| r35_3788(glval) = FunctionAddress[~String] : +# 35| v35_3789(void) = Call[~String] : func:r35_3788, this:r35_3787 +# 35| mu35_3790(unknown) = ^CallSideEffect : ~m? +# 35| v35_3791(void) = ^IndirectReadSideEffect[-1] : &:r35_3787, ~m? +# 35| mu35_3792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3787 +# 35| r35_3793(bool) = Constant[0] : +# 35| v35_3794(void) = ConditionalBranch : r35_3793 #-----| False -> Block 272 #-----| True (back edge) -> Block 271 -# 832| Block 272 -# 832| r832_1(glval) = VariableAddress[x271] : -# 832| mu832_2(String) = Uninitialized[x271] : &:r832_1 -# 832| r832_3(glval) = FunctionAddress[String] : -# 832| v832_4(void) = Call[String] : func:r832_3, this:r832_1 -# 832| mu832_5(unknown) = ^CallSideEffect : ~m? -# 832| mu832_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r832_1 -# 833| r833_1(glval) = VariableAddress[x271] : -# 833| r833_2(glval) = FunctionAddress[~String] : -# 833| v833_3(void) = Call[~String] : func:r833_2, this:r833_1 -# 833| mu833_4(unknown) = ^CallSideEffect : ~m? -# 833| v833_5(void) = ^IndirectReadSideEffect[-1] : &:r833_1, ~m? -# 833| mu833_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r833_1 -# 833| r833_7(bool) = Constant[0] : -# 833| v833_8(void) = ConditionalBranch : r833_7 +# 35| Block 272 +# 35| r35_3795(glval) = VariableAddress[x271] : +# 35| mu35_3796(String) = Uninitialized[x271] : &:r35_3795 +# 35| r35_3797(glval) = FunctionAddress[String] : +# 35| v35_3798(void) = Call[String] : func:r35_3797, this:r35_3795 +# 35| mu35_3799(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3795 +# 35| r35_3801(glval) = VariableAddress[x271] : +# 35| r35_3802(glval) = FunctionAddress[~String] : +# 35| v35_3803(void) = Call[~String] : func:r35_3802, this:r35_3801 +# 35| mu35_3804(unknown) = ^CallSideEffect : ~m? +# 35| v35_3805(void) = ^IndirectReadSideEffect[-1] : &:r35_3801, ~m? +# 35| mu35_3806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3801 +# 35| r35_3807(bool) = Constant[0] : +# 35| v35_3808(void) = ConditionalBranch : r35_3807 #-----| False -> Block 273 #-----| True (back edge) -> Block 272 -# 835| Block 273 -# 835| r835_1(glval) = VariableAddress[x272] : -# 835| mu835_2(String) = Uninitialized[x272] : &:r835_1 -# 835| r835_3(glval) = FunctionAddress[String] : -# 835| v835_4(void) = Call[String] : func:r835_3, this:r835_1 -# 835| mu835_5(unknown) = ^CallSideEffect : ~m? -# 835| mu835_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r835_1 -# 836| r836_1(glval) = VariableAddress[x272] : -# 836| r836_2(glval) = FunctionAddress[~String] : -# 836| v836_3(void) = Call[~String] : func:r836_2, this:r836_1 -# 836| mu836_4(unknown) = ^CallSideEffect : ~m? -# 836| v836_5(void) = ^IndirectReadSideEffect[-1] : &:r836_1, ~m? -# 836| mu836_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r836_1 -# 836| r836_7(bool) = Constant[0] : -# 836| v836_8(void) = ConditionalBranch : r836_7 +# 35| Block 273 +# 35| r35_3809(glval) = VariableAddress[x272] : +# 35| mu35_3810(String) = Uninitialized[x272] : &:r35_3809 +# 35| r35_3811(glval) = FunctionAddress[String] : +# 35| v35_3812(void) = Call[String] : func:r35_3811, this:r35_3809 +# 35| mu35_3813(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3809 +# 35| r35_3815(glval) = VariableAddress[x272] : +# 35| r35_3816(glval) = FunctionAddress[~String] : +# 35| v35_3817(void) = Call[~String] : func:r35_3816, this:r35_3815 +# 35| mu35_3818(unknown) = ^CallSideEffect : ~m? +# 35| v35_3819(void) = ^IndirectReadSideEffect[-1] : &:r35_3815, ~m? +# 35| mu35_3820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3815 +# 35| r35_3821(bool) = Constant[0] : +# 35| v35_3822(void) = ConditionalBranch : r35_3821 #-----| False -> Block 274 #-----| True (back edge) -> Block 273 -# 838| Block 274 -# 838| r838_1(glval) = VariableAddress[x273] : -# 838| mu838_2(String) = Uninitialized[x273] : &:r838_1 -# 838| r838_3(glval) = FunctionAddress[String] : -# 838| v838_4(void) = Call[String] : func:r838_3, this:r838_1 -# 838| mu838_5(unknown) = ^CallSideEffect : ~m? -# 838| mu838_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r838_1 -# 839| r839_1(glval) = VariableAddress[x273] : -# 839| r839_2(glval) = FunctionAddress[~String] : -# 839| v839_3(void) = Call[~String] : func:r839_2, this:r839_1 -# 839| mu839_4(unknown) = ^CallSideEffect : ~m? -# 839| v839_5(void) = ^IndirectReadSideEffect[-1] : &:r839_1, ~m? -# 839| mu839_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r839_1 -# 839| r839_7(bool) = Constant[0] : -# 839| v839_8(void) = ConditionalBranch : r839_7 +# 35| Block 274 +# 35| r35_3823(glval) = VariableAddress[x273] : +# 35| mu35_3824(String) = Uninitialized[x273] : &:r35_3823 +# 35| r35_3825(glval) = FunctionAddress[String] : +# 35| v35_3826(void) = Call[String] : func:r35_3825, this:r35_3823 +# 35| mu35_3827(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3823 +# 35| r35_3829(glval) = VariableAddress[x273] : +# 35| r35_3830(glval) = FunctionAddress[~String] : +# 35| v35_3831(void) = Call[~String] : func:r35_3830, this:r35_3829 +# 35| mu35_3832(unknown) = ^CallSideEffect : ~m? +# 35| v35_3833(void) = ^IndirectReadSideEffect[-1] : &:r35_3829, ~m? +# 35| mu35_3834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3829 +# 35| r35_3835(bool) = Constant[0] : +# 35| v35_3836(void) = ConditionalBranch : r35_3835 #-----| False -> Block 275 #-----| True (back edge) -> Block 274 -# 841| Block 275 -# 841| r841_1(glval) = VariableAddress[x274] : -# 841| mu841_2(String) = Uninitialized[x274] : &:r841_1 -# 841| r841_3(glval) = FunctionAddress[String] : -# 841| v841_4(void) = Call[String] : func:r841_3, this:r841_1 -# 841| mu841_5(unknown) = ^CallSideEffect : ~m? -# 841| mu841_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r841_1 -# 842| r842_1(glval) = VariableAddress[x274] : -# 842| r842_2(glval) = FunctionAddress[~String] : -# 842| v842_3(void) = Call[~String] : func:r842_2, this:r842_1 -# 842| mu842_4(unknown) = ^CallSideEffect : ~m? -# 842| v842_5(void) = ^IndirectReadSideEffect[-1] : &:r842_1, ~m? -# 842| mu842_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r842_1 -# 842| r842_7(bool) = Constant[0] : -# 842| v842_8(void) = ConditionalBranch : r842_7 +# 35| Block 275 +# 35| r35_3837(glval) = VariableAddress[x274] : +# 35| mu35_3838(String) = Uninitialized[x274] : &:r35_3837 +# 35| r35_3839(glval) = FunctionAddress[String] : +# 35| v35_3840(void) = Call[String] : func:r35_3839, this:r35_3837 +# 35| mu35_3841(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3837 +# 35| r35_3843(glval) = VariableAddress[x274] : +# 35| r35_3844(glval) = FunctionAddress[~String] : +# 35| v35_3845(void) = Call[~String] : func:r35_3844, this:r35_3843 +# 35| mu35_3846(unknown) = ^CallSideEffect : ~m? +# 35| v35_3847(void) = ^IndirectReadSideEffect[-1] : &:r35_3843, ~m? +# 35| mu35_3848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3843 +# 35| r35_3849(bool) = Constant[0] : +# 35| v35_3850(void) = ConditionalBranch : r35_3849 #-----| False -> Block 276 #-----| True (back edge) -> Block 275 -# 844| Block 276 -# 844| r844_1(glval) = VariableAddress[x275] : -# 844| mu844_2(String) = Uninitialized[x275] : &:r844_1 -# 844| r844_3(glval) = FunctionAddress[String] : -# 844| v844_4(void) = Call[String] : func:r844_3, this:r844_1 -# 844| mu844_5(unknown) = ^CallSideEffect : ~m? -# 844| mu844_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r844_1 -# 845| r845_1(glval) = VariableAddress[x275] : -# 845| r845_2(glval) = FunctionAddress[~String] : -# 845| v845_3(void) = Call[~String] : func:r845_2, this:r845_1 -# 845| mu845_4(unknown) = ^CallSideEffect : ~m? -# 845| v845_5(void) = ^IndirectReadSideEffect[-1] : &:r845_1, ~m? -# 845| mu845_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r845_1 -# 845| r845_7(bool) = Constant[0] : -# 845| v845_8(void) = ConditionalBranch : r845_7 +# 35| Block 276 +# 35| r35_3851(glval) = VariableAddress[x275] : +# 35| mu35_3852(String) = Uninitialized[x275] : &:r35_3851 +# 35| r35_3853(glval) = FunctionAddress[String] : +# 35| v35_3854(void) = Call[String] : func:r35_3853, this:r35_3851 +# 35| mu35_3855(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3851 +# 35| r35_3857(glval) = VariableAddress[x275] : +# 35| r35_3858(glval) = FunctionAddress[~String] : +# 35| v35_3859(void) = Call[~String] : func:r35_3858, this:r35_3857 +# 35| mu35_3860(unknown) = ^CallSideEffect : ~m? +# 35| v35_3861(void) = ^IndirectReadSideEffect[-1] : &:r35_3857, ~m? +# 35| mu35_3862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3857 +# 35| r35_3863(bool) = Constant[0] : +# 35| v35_3864(void) = ConditionalBranch : r35_3863 #-----| False -> Block 277 #-----| True (back edge) -> Block 276 -# 847| Block 277 -# 847| r847_1(glval) = VariableAddress[x276] : -# 847| mu847_2(String) = Uninitialized[x276] : &:r847_1 -# 847| r847_3(glval) = FunctionAddress[String] : -# 847| v847_4(void) = Call[String] : func:r847_3, this:r847_1 -# 847| mu847_5(unknown) = ^CallSideEffect : ~m? -# 847| mu847_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r847_1 -# 848| r848_1(glval) = VariableAddress[x276] : -# 848| r848_2(glval) = FunctionAddress[~String] : -# 848| v848_3(void) = Call[~String] : func:r848_2, this:r848_1 -# 848| mu848_4(unknown) = ^CallSideEffect : ~m? -# 848| v848_5(void) = ^IndirectReadSideEffect[-1] : &:r848_1, ~m? -# 848| mu848_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r848_1 -# 848| r848_7(bool) = Constant[0] : -# 848| v848_8(void) = ConditionalBranch : r848_7 +# 35| Block 277 +# 35| r35_3865(glval) = VariableAddress[x276] : +# 35| mu35_3866(String) = Uninitialized[x276] : &:r35_3865 +# 35| r35_3867(glval) = FunctionAddress[String] : +# 35| v35_3868(void) = Call[String] : func:r35_3867, this:r35_3865 +# 35| mu35_3869(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3865 +# 35| r35_3871(glval) = VariableAddress[x276] : +# 35| r35_3872(glval) = FunctionAddress[~String] : +# 35| v35_3873(void) = Call[~String] : func:r35_3872, this:r35_3871 +# 35| mu35_3874(unknown) = ^CallSideEffect : ~m? +# 35| v35_3875(void) = ^IndirectReadSideEffect[-1] : &:r35_3871, ~m? +# 35| mu35_3876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3871 +# 35| r35_3877(bool) = Constant[0] : +# 35| v35_3878(void) = ConditionalBranch : r35_3877 #-----| False -> Block 278 #-----| True (back edge) -> Block 277 -# 850| Block 278 -# 850| r850_1(glval) = VariableAddress[x277] : -# 850| mu850_2(String) = Uninitialized[x277] : &:r850_1 -# 850| r850_3(glval) = FunctionAddress[String] : -# 850| v850_4(void) = Call[String] : func:r850_3, this:r850_1 -# 850| mu850_5(unknown) = ^CallSideEffect : ~m? -# 850| mu850_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r850_1 -# 851| r851_1(glval) = VariableAddress[x277] : -# 851| r851_2(glval) = FunctionAddress[~String] : -# 851| v851_3(void) = Call[~String] : func:r851_2, this:r851_1 -# 851| mu851_4(unknown) = ^CallSideEffect : ~m? -# 851| v851_5(void) = ^IndirectReadSideEffect[-1] : &:r851_1, ~m? -# 851| mu851_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r851_1 -# 851| r851_7(bool) = Constant[0] : -# 851| v851_8(void) = ConditionalBranch : r851_7 +# 35| Block 278 +# 35| r35_3879(glval) = VariableAddress[x277] : +# 35| mu35_3880(String) = Uninitialized[x277] : &:r35_3879 +# 35| r35_3881(glval) = FunctionAddress[String] : +# 35| v35_3882(void) = Call[String] : func:r35_3881, this:r35_3879 +# 35| mu35_3883(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3879 +# 35| r35_3885(glval) = VariableAddress[x277] : +# 35| r35_3886(glval) = FunctionAddress[~String] : +# 35| v35_3887(void) = Call[~String] : func:r35_3886, this:r35_3885 +# 35| mu35_3888(unknown) = ^CallSideEffect : ~m? +# 35| v35_3889(void) = ^IndirectReadSideEffect[-1] : &:r35_3885, ~m? +# 35| mu35_3890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3885 +# 35| r35_3891(bool) = Constant[0] : +# 35| v35_3892(void) = ConditionalBranch : r35_3891 #-----| False -> Block 279 #-----| True (back edge) -> Block 278 -# 853| Block 279 -# 853| r853_1(glval) = VariableAddress[x278] : -# 853| mu853_2(String) = Uninitialized[x278] : &:r853_1 -# 853| r853_3(glval) = FunctionAddress[String] : -# 853| v853_4(void) = Call[String] : func:r853_3, this:r853_1 -# 853| mu853_5(unknown) = ^CallSideEffect : ~m? -# 853| mu853_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r853_1 -# 854| r854_1(glval) = VariableAddress[x278] : -# 854| r854_2(glval) = FunctionAddress[~String] : -# 854| v854_3(void) = Call[~String] : func:r854_2, this:r854_1 -# 854| mu854_4(unknown) = ^CallSideEffect : ~m? -# 854| v854_5(void) = ^IndirectReadSideEffect[-1] : &:r854_1, ~m? -# 854| mu854_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r854_1 -# 854| r854_7(bool) = Constant[0] : -# 854| v854_8(void) = ConditionalBranch : r854_7 +# 35| Block 279 +# 35| r35_3893(glval) = VariableAddress[x278] : +# 35| mu35_3894(String) = Uninitialized[x278] : &:r35_3893 +# 35| r35_3895(glval) = FunctionAddress[String] : +# 35| v35_3896(void) = Call[String] : func:r35_3895, this:r35_3893 +# 35| mu35_3897(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3893 +# 35| r35_3899(glval) = VariableAddress[x278] : +# 35| r35_3900(glval) = FunctionAddress[~String] : +# 35| v35_3901(void) = Call[~String] : func:r35_3900, this:r35_3899 +# 35| mu35_3902(unknown) = ^CallSideEffect : ~m? +# 35| v35_3903(void) = ^IndirectReadSideEffect[-1] : &:r35_3899, ~m? +# 35| mu35_3904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3899 +# 35| r35_3905(bool) = Constant[0] : +# 35| v35_3906(void) = ConditionalBranch : r35_3905 #-----| False -> Block 280 #-----| True (back edge) -> Block 279 -# 856| Block 280 -# 856| r856_1(glval) = VariableAddress[x279] : -# 856| mu856_2(String) = Uninitialized[x279] : &:r856_1 -# 856| r856_3(glval) = FunctionAddress[String] : -# 856| v856_4(void) = Call[String] : func:r856_3, this:r856_1 -# 856| mu856_5(unknown) = ^CallSideEffect : ~m? -# 856| mu856_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r856_1 -# 857| r857_1(glval) = VariableAddress[x279] : -# 857| r857_2(glval) = FunctionAddress[~String] : -# 857| v857_3(void) = Call[~String] : func:r857_2, this:r857_1 -# 857| mu857_4(unknown) = ^CallSideEffect : ~m? -# 857| v857_5(void) = ^IndirectReadSideEffect[-1] : &:r857_1, ~m? -# 857| mu857_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r857_1 -# 857| r857_7(bool) = Constant[0] : -# 857| v857_8(void) = ConditionalBranch : r857_7 +# 35| Block 280 +# 35| r35_3907(glval) = VariableAddress[x279] : +# 35| mu35_3908(String) = Uninitialized[x279] : &:r35_3907 +# 35| r35_3909(glval) = FunctionAddress[String] : +# 35| v35_3910(void) = Call[String] : func:r35_3909, this:r35_3907 +# 35| mu35_3911(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3907 +# 35| r35_3913(glval) = VariableAddress[x279] : +# 35| r35_3914(glval) = FunctionAddress[~String] : +# 35| v35_3915(void) = Call[~String] : func:r35_3914, this:r35_3913 +# 35| mu35_3916(unknown) = ^CallSideEffect : ~m? +# 35| v35_3917(void) = ^IndirectReadSideEffect[-1] : &:r35_3913, ~m? +# 35| mu35_3918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3913 +# 35| r35_3919(bool) = Constant[0] : +# 35| v35_3920(void) = ConditionalBranch : r35_3919 #-----| False -> Block 281 #-----| True (back edge) -> Block 280 -# 859| Block 281 -# 859| r859_1(glval) = VariableAddress[x280] : -# 859| mu859_2(String) = Uninitialized[x280] : &:r859_1 -# 859| r859_3(glval) = FunctionAddress[String] : -# 859| v859_4(void) = Call[String] : func:r859_3, this:r859_1 -# 859| mu859_5(unknown) = ^CallSideEffect : ~m? -# 859| mu859_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r859_1 -# 860| r860_1(glval) = VariableAddress[x280] : -# 860| r860_2(glval) = FunctionAddress[~String] : -# 860| v860_3(void) = Call[~String] : func:r860_2, this:r860_1 -# 860| mu860_4(unknown) = ^CallSideEffect : ~m? -# 860| v860_5(void) = ^IndirectReadSideEffect[-1] : &:r860_1, ~m? -# 860| mu860_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r860_1 -# 860| r860_7(bool) = Constant[0] : -# 860| v860_8(void) = ConditionalBranch : r860_7 +# 35| Block 281 +# 35| r35_3921(glval) = VariableAddress[x280] : +# 35| mu35_3922(String) = Uninitialized[x280] : &:r35_3921 +# 35| r35_3923(glval) = FunctionAddress[String] : +# 35| v35_3924(void) = Call[String] : func:r35_3923, this:r35_3921 +# 35| mu35_3925(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3921 +# 35| r35_3927(glval) = VariableAddress[x280] : +# 35| r35_3928(glval) = FunctionAddress[~String] : +# 35| v35_3929(void) = Call[~String] : func:r35_3928, this:r35_3927 +# 35| mu35_3930(unknown) = ^CallSideEffect : ~m? +# 35| v35_3931(void) = ^IndirectReadSideEffect[-1] : &:r35_3927, ~m? +# 35| mu35_3932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3927 +# 35| r35_3933(bool) = Constant[0] : +# 35| v35_3934(void) = ConditionalBranch : r35_3933 #-----| False -> Block 282 #-----| True (back edge) -> Block 281 -# 862| Block 282 -# 862| r862_1(glval) = VariableAddress[x281] : -# 862| mu862_2(String) = Uninitialized[x281] : &:r862_1 -# 862| r862_3(glval) = FunctionAddress[String] : -# 862| v862_4(void) = Call[String] : func:r862_3, this:r862_1 -# 862| mu862_5(unknown) = ^CallSideEffect : ~m? -# 862| mu862_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r862_1 -# 863| r863_1(glval) = VariableAddress[x281] : -# 863| r863_2(glval) = FunctionAddress[~String] : -# 863| v863_3(void) = Call[~String] : func:r863_2, this:r863_1 -# 863| mu863_4(unknown) = ^CallSideEffect : ~m? -# 863| v863_5(void) = ^IndirectReadSideEffect[-1] : &:r863_1, ~m? -# 863| mu863_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r863_1 -# 863| r863_7(bool) = Constant[0] : -# 863| v863_8(void) = ConditionalBranch : r863_7 +# 35| Block 282 +# 35| r35_3935(glval) = VariableAddress[x281] : +# 35| mu35_3936(String) = Uninitialized[x281] : &:r35_3935 +# 35| r35_3937(glval) = FunctionAddress[String] : +# 35| v35_3938(void) = Call[String] : func:r35_3937, this:r35_3935 +# 35| mu35_3939(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3935 +# 35| r35_3941(glval) = VariableAddress[x281] : +# 35| r35_3942(glval) = FunctionAddress[~String] : +# 35| v35_3943(void) = Call[~String] : func:r35_3942, this:r35_3941 +# 35| mu35_3944(unknown) = ^CallSideEffect : ~m? +# 35| v35_3945(void) = ^IndirectReadSideEffect[-1] : &:r35_3941, ~m? +# 35| mu35_3946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3941 +# 35| r35_3947(bool) = Constant[0] : +# 35| v35_3948(void) = ConditionalBranch : r35_3947 #-----| False -> Block 283 #-----| True (back edge) -> Block 282 -# 865| Block 283 -# 865| r865_1(glval) = VariableAddress[x282] : -# 865| mu865_2(String) = Uninitialized[x282] : &:r865_1 -# 865| r865_3(glval) = FunctionAddress[String] : -# 865| v865_4(void) = Call[String] : func:r865_3, this:r865_1 -# 865| mu865_5(unknown) = ^CallSideEffect : ~m? -# 865| mu865_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r865_1 -# 866| r866_1(glval) = VariableAddress[x282] : -# 866| r866_2(glval) = FunctionAddress[~String] : -# 866| v866_3(void) = Call[~String] : func:r866_2, this:r866_1 -# 866| mu866_4(unknown) = ^CallSideEffect : ~m? -# 866| v866_5(void) = ^IndirectReadSideEffect[-1] : &:r866_1, ~m? -# 866| mu866_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r866_1 -# 866| r866_7(bool) = Constant[0] : -# 866| v866_8(void) = ConditionalBranch : r866_7 +# 35| Block 283 +# 35| r35_3949(glval) = VariableAddress[x282] : +# 35| mu35_3950(String) = Uninitialized[x282] : &:r35_3949 +# 35| r35_3951(glval) = FunctionAddress[String] : +# 35| v35_3952(void) = Call[String] : func:r35_3951, this:r35_3949 +# 35| mu35_3953(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3949 +# 35| r35_3955(glval) = VariableAddress[x282] : +# 35| r35_3956(glval) = FunctionAddress[~String] : +# 35| v35_3957(void) = Call[~String] : func:r35_3956, this:r35_3955 +# 35| mu35_3958(unknown) = ^CallSideEffect : ~m? +# 35| v35_3959(void) = ^IndirectReadSideEffect[-1] : &:r35_3955, ~m? +# 35| mu35_3960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3955 +# 35| r35_3961(bool) = Constant[0] : +# 35| v35_3962(void) = ConditionalBranch : r35_3961 #-----| False -> Block 284 #-----| True (back edge) -> Block 283 -# 868| Block 284 -# 868| r868_1(glval) = VariableAddress[x283] : -# 868| mu868_2(String) = Uninitialized[x283] : &:r868_1 -# 868| r868_3(glval) = FunctionAddress[String] : -# 868| v868_4(void) = Call[String] : func:r868_3, this:r868_1 -# 868| mu868_5(unknown) = ^CallSideEffect : ~m? -# 868| mu868_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r868_1 -# 869| r869_1(glval) = VariableAddress[x283] : -# 869| r869_2(glval) = FunctionAddress[~String] : -# 869| v869_3(void) = Call[~String] : func:r869_2, this:r869_1 -# 869| mu869_4(unknown) = ^CallSideEffect : ~m? -# 869| v869_5(void) = ^IndirectReadSideEffect[-1] : &:r869_1, ~m? -# 869| mu869_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r869_1 -# 869| r869_7(bool) = Constant[0] : -# 869| v869_8(void) = ConditionalBranch : r869_7 +# 35| Block 284 +# 35| r35_3963(glval) = VariableAddress[x283] : +# 35| mu35_3964(String) = Uninitialized[x283] : &:r35_3963 +# 35| r35_3965(glval) = FunctionAddress[String] : +# 35| v35_3966(void) = Call[String] : func:r35_3965, this:r35_3963 +# 35| mu35_3967(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3963 +# 35| r35_3969(glval) = VariableAddress[x283] : +# 35| r35_3970(glval) = FunctionAddress[~String] : +# 35| v35_3971(void) = Call[~String] : func:r35_3970, this:r35_3969 +# 35| mu35_3972(unknown) = ^CallSideEffect : ~m? +# 35| v35_3973(void) = ^IndirectReadSideEffect[-1] : &:r35_3969, ~m? +# 35| mu35_3974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3969 +# 35| r35_3975(bool) = Constant[0] : +# 35| v35_3976(void) = ConditionalBranch : r35_3975 #-----| False -> Block 285 #-----| True (back edge) -> Block 284 -# 871| Block 285 -# 871| r871_1(glval) = VariableAddress[x284] : -# 871| mu871_2(String) = Uninitialized[x284] : &:r871_1 -# 871| r871_3(glval) = FunctionAddress[String] : -# 871| v871_4(void) = Call[String] : func:r871_3, this:r871_1 -# 871| mu871_5(unknown) = ^CallSideEffect : ~m? -# 871| mu871_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r871_1 -# 872| r872_1(glval) = VariableAddress[x284] : -# 872| r872_2(glval) = FunctionAddress[~String] : -# 872| v872_3(void) = Call[~String] : func:r872_2, this:r872_1 -# 872| mu872_4(unknown) = ^CallSideEffect : ~m? -# 872| v872_5(void) = ^IndirectReadSideEffect[-1] : &:r872_1, ~m? -# 872| mu872_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r872_1 -# 872| r872_7(bool) = Constant[0] : -# 872| v872_8(void) = ConditionalBranch : r872_7 +# 35| Block 285 +# 35| r35_3977(glval) = VariableAddress[x284] : +# 35| mu35_3978(String) = Uninitialized[x284] : &:r35_3977 +# 35| r35_3979(glval) = FunctionAddress[String] : +# 35| v35_3980(void) = Call[String] : func:r35_3979, this:r35_3977 +# 35| mu35_3981(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3977 +# 35| r35_3983(glval) = VariableAddress[x284] : +# 35| r35_3984(glval) = FunctionAddress[~String] : +# 35| v35_3985(void) = Call[~String] : func:r35_3984, this:r35_3983 +# 35| mu35_3986(unknown) = ^CallSideEffect : ~m? +# 35| v35_3987(void) = ^IndirectReadSideEffect[-1] : &:r35_3983, ~m? +# 35| mu35_3988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3983 +# 35| r35_3989(bool) = Constant[0] : +# 35| v35_3990(void) = ConditionalBranch : r35_3989 #-----| False -> Block 286 #-----| True (back edge) -> Block 285 -# 874| Block 286 -# 874| r874_1(glval) = VariableAddress[x285] : -# 874| mu874_2(String) = Uninitialized[x285] : &:r874_1 -# 874| r874_3(glval) = FunctionAddress[String] : -# 874| v874_4(void) = Call[String] : func:r874_3, this:r874_1 -# 874| mu874_5(unknown) = ^CallSideEffect : ~m? -# 874| mu874_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r874_1 -# 875| r875_1(glval) = VariableAddress[x285] : -# 875| r875_2(glval) = FunctionAddress[~String] : -# 875| v875_3(void) = Call[~String] : func:r875_2, this:r875_1 -# 875| mu875_4(unknown) = ^CallSideEffect : ~m? -# 875| v875_5(void) = ^IndirectReadSideEffect[-1] : &:r875_1, ~m? -# 875| mu875_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r875_1 -# 875| r875_7(bool) = Constant[0] : -# 875| v875_8(void) = ConditionalBranch : r875_7 +# 35| Block 286 +# 35| r35_3991(glval) = VariableAddress[x285] : +# 35| mu35_3992(String) = Uninitialized[x285] : &:r35_3991 +# 35| r35_3993(glval) = FunctionAddress[String] : +# 35| v35_3994(void) = Call[String] : func:r35_3993, this:r35_3991 +# 35| mu35_3995(unknown) = ^CallSideEffect : ~m? +# 35| mu35_3996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3991 +# 35| r35_3997(glval) = VariableAddress[x285] : +# 35| r35_3998(glval) = FunctionAddress[~String] : +# 35| v35_3999(void) = Call[~String] : func:r35_3998, this:r35_3997 +# 35| mu35_4000(unknown) = ^CallSideEffect : ~m? +# 35| v35_4001(void) = ^IndirectReadSideEffect[-1] : &:r35_3997, ~m? +# 35| mu35_4002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_3997 +# 35| r35_4003(bool) = Constant[0] : +# 35| v35_4004(void) = ConditionalBranch : r35_4003 #-----| False -> Block 287 #-----| True (back edge) -> Block 286 -# 877| Block 287 -# 877| r877_1(glval) = VariableAddress[x286] : -# 877| mu877_2(String) = Uninitialized[x286] : &:r877_1 -# 877| r877_3(glval) = FunctionAddress[String] : -# 877| v877_4(void) = Call[String] : func:r877_3, this:r877_1 -# 877| mu877_5(unknown) = ^CallSideEffect : ~m? -# 877| mu877_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r877_1 -# 878| r878_1(glval) = VariableAddress[x286] : -# 878| r878_2(glval) = FunctionAddress[~String] : -# 878| v878_3(void) = Call[~String] : func:r878_2, this:r878_1 -# 878| mu878_4(unknown) = ^CallSideEffect : ~m? -# 878| v878_5(void) = ^IndirectReadSideEffect[-1] : &:r878_1, ~m? -# 878| mu878_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r878_1 -# 878| r878_7(bool) = Constant[0] : -# 878| v878_8(void) = ConditionalBranch : r878_7 +# 35| Block 287 +# 35| r35_4005(glval) = VariableAddress[x286] : +# 35| mu35_4006(String) = Uninitialized[x286] : &:r35_4005 +# 35| r35_4007(glval) = FunctionAddress[String] : +# 35| v35_4008(void) = Call[String] : func:r35_4007, this:r35_4005 +# 35| mu35_4009(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4005 +# 35| r35_4011(glval) = VariableAddress[x286] : +# 35| r35_4012(glval) = FunctionAddress[~String] : +# 35| v35_4013(void) = Call[~String] : func:r35_4012, this:r35_4011 +# 35| mu35_4014(unknown) = ^CallSideEffect : ~m? +# 35| v35_4015(void) = ^IndirectReadSideEffect[-1] : &:r35_4011, ~m? +# 35| mu35_4016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4011 +# 35| r35_4017(bool) = Constant[0] : +# 35| v35_4018(void) = ConditionalBranch : r35_4017 #-----| False -> Block 288 #-----| True (back edge) -> Block 287 -# 880| Block 288 -# 880| r880_1(glval) = VariableAddress[x287] : -# 880| mu880_2(String) = Uninitialized[x287] : &:r880_1 -# 880| r880_3(glval) = FunctionAddress[String] : -# 880| v880_4(void) = Call[String] : func:r880_3, this:r880_1 -# 880| mu880_5(unknown) = ^CallSideEffect : ~m? -# 880| mu880_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r880_1 -# 881| r881_1(glval) = VariableAddress[x287] : -# 881| r881_2(glval) = FunctionAddress[~String] : -# 881| v881_3(void) = Call[~String] : func:r881_2, this:r881_1 -# 881| mu881_4(unknown) = ^CallSideEffect : ~m? -# 881| v881_5(void) = ^IndirectReadSideEffect[-1] : &:r881_1, ~m? -# 881| mu881_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r881_1 -# 881| r881_7(bool) = Constant[0] : -# 881| v881_8(void) = ConditionalBranch : r881_7 +# 35| Block 288 +# 35| r35_4019(glval) = VariableAddress[x287] : +# 35| mu35_4020(String) = Uninitialized[x287] : &:r35_4019 +# 35| r35_4021(glval) = FunctionAddress[String] : +# 35| v35_4022(void) = Call[String] : func:r35_4021, this:r35_4019 +# 35| mu35_4023(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4019 +# 35| r35_4025(glval) = VariableAddress[x287] : +# 35| r35_4026(glval) = FunctionAddress[~String] : +# 35| v35_4027(void) = Call[~String] : func:r35_4026, this:r35_4025 +# 35| mu35_4028(unknown) = ^CallSideEffect : ~m? +# 35| v35_4029(void) = ^IndirectReadSideEffect[-1] : &:r35_4025, ~m? +# 35| mu35_4030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4025 +# 35| r35_4031(bool) = Constant[0] : +# 35| v35_4032(void) = ConditionalBranch : r35_4031 #-----| False -> Block 289 #-----| True (back edge) -> Block 288 -# 883| Block 289 -# 883| r883_1(glval) = VariableAddress[x288] : -# 883| mu883_2(String) = Uninitialized[x288] : &:r883_1 -# 883| r883_3(glval) = FunctionAddress[String] : -# 883| v883_4(void) = Call[String] : func:r883_3, this:r883_1 -# 883| mu883_5(unknown) = ^CallSideEffect : ~m? -# 883| mu883_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r883_1 -# 884| r884_1(glval) = VariableAddress[x288] : -# 884| r884_2(glval) = FunctionAddress[~String] : -# 884| v884_3(void) = Call[~String] : func:r884_2, this:r884_1 -# 884| mu884_4(unknown) = ^CallSideEffect : ~m? -# 884| v884_5(void) = ^IndirectReadSideEffect[-1] : &:r884_1, ~m? -# 884| mu884_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r884_1 -# 884| r884_7(bool) = Constant[0] : -# 884| v884_8(void) = ConditionalBranch : r884_7 +# 35| Block 289 +# 35| r35_4033(glval) = VariableAddress[x288] : +# 35| mu35_4034(String) = Uninitialized[x288] : &:r35_4033 +# 35| r35_4035(glval) = FunctionAddress[String] : +# 35| v35_4036(void) = Call[String] : func:r35_4035, this:r35_4033 +# 35| mu35_4037(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4033 +# 35| r35_4039(glval) = VariableAddress[x288] : +# 35| r35_4040(glval) = FunctionAddress[~String] : +# 35| v35_4041(void) = Call[~String] : func:r35_4040, this:r35_4039 +# 35| mu35_4042(unknown) = ^CallSideEffect : ~m? +# 35| v35_4043(void) = ^IndirectReadSideEffect[-1] : &:r35_4039, ~m? +# 35| mu35_4044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4039 +# 35| r35_4045(bool) = Constant[0] : +# 35| v35_4046(void) = ConditionalBranch : r35_4045 #-----| False -> Block 290 #-----| True (back edge) -> Block 289 -# 886| Block 290 -# 886| r886_1(glval) = VariableAddress[x289] : -# 886| mu886_2(String) = Uninitialized[x289] : &:r886_1 -# 886| r886_3(glval) = FunctionAddress[String] : -# 886| v886_4(void) = Call[String] : func:r886_3, this:r886_1 -# 886| mu886_5(unknown) = ^CallSideEffect : ~m? -# 886| mu886_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r886_1 -# 887| r887_1(glval) = VariableAddress[x289] : -# 887| r887_2(glval) = FunctionAddress[~String] : -# 887| v887_3(void) = Call[~String] : func:r887_2, this:r887_1 -# 887| mu887_4(unknown) = ^CallSideEffect : ~m? -# 887| v887_5(void) = ^IndirectReadSideEffect[-1] : &:r887_1, ~m? -# 887| mu887_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r887_1 -# 887| r887_7(bool) = Constant[0] : -# 887| v887_8(void) = ConditionalBranch : r887_7 +# 35| Block 290 +# 35| r35_4047(glval) = VariableAddress[x289] : +# 35| mu35_4048(String) = Uninitialized[x289] : &:r35_4047 +# 35| r35_4049(glval) = FunctionAddress[String] : +# 35| v35_4050(void) = Call[String] : func:r35_4049, this:r35_4047 +# 35| mu35_4051(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4047 +# 35| r35_4053(glval) = VariableAddress[x289] : +# 35| r35_4054(glval) = FunctionAddress[~String] : +# 35| v35_4055(void) = Call[~String] : func:r35_4054, this:r35_4053 +# 35| mu35_4056(unknown) = ^CallSideEffect : ~m? +# 35| v35_4057(void) = ^IndirectReadSideEffect[-1] : &:r35_4053, ~m? +# 35| mu35_4058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4053 +# 35| r35_4059(bool) = Constant[0] : +# 35| v35_4060(void) = ConditionalBranch : r35_4059 #-----| False -> Block 291 #-----| True (back edge) -> Block 290 -# 889| Block 291 -# 889| r889_1(glval) = VariableAddress[x290] : -# 889| mu889_2(String) = Uninitialized[x290] : &:r889_1 -# 889| r889_3(glval) = FunctionAddress[String] : -# 889| v889_4(void) = Call[String] : func:r889_3, this:r889_1 -# 889| mu889_5(unknown) = ^CallSideEffect : ~m? -# 889| mu889_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r889_1 -# 890| r890_1(glval) = VariableAddress[x290] : -# 890| r890_2(glval) = FunctionAddress[~String] : -# 890| v890_3(void) = Call[~String] : func:r890_2, this:r890_1 -# 890| mu890_4(unknown) = ^CallSideEffect : ~m? -# 890| v890_5(void) = ^IndirectReadSideEffect[-1] : &:r890_1, ~m? -# 890| mu890_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r890_1 -# 890| r890_7(bool) = Constant[0] : -# 890| v890_8(void) = ConditionalBranch : r890_7 +# 35| Block 291 +# 35| r35_4061(glval) = VariableAddress[x290] : +# 35| mu35_4062(String) = Uninitialized[x290] : &:r35_4061 +# 35| r35_4063(glval) = FunctionAddress[String] : +# 35| v35_4064(void) = Call[String] : func:r35_4063, this:r35_4061 +# 35| mu35_4065(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4061 +# 35| r35_4067(glval) = VariableAddress[x290] : +# 35| r35_4068(glval) = FunctionAddress[~String] : +# 35| v35_4069(void) = Call[~String] : func:r35_4068, this:r35_4067 +# 35| mu35_4070(unknown) = ^CallSideEffect : ~m? +# 35| v35_4071(void) = ^IndirectReadSideEffect[-1] : &:r35_4067, ~m? +# 35| mu35_4072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4067 +# 35| r35_4073(bool) = Constant[0] : +# 35| v35_4074(void) = ConditionalBranch : r35_4073 #-----| False -> Block 292 #-----| True (back edge) -> Block 291 -# 892| Block 292 -# 892| r892_1(glval) = VariableAddress[x291] : -# 892| mu892_2(String) = Uninitialized[x291] : &:r892_1 -# 892| r892_3(glval) = FunctionAddress[String] : -# 892| v892_4(void) = Call[String] : func:r892_3, this:r892_1 -# 892| mu892_5(unknown) = ^CallSideEffect : ~m? -# 892| mu892_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r892_1 -# 893| r893_1(glval) = VariableAddress[x291] : -# 893| r893_2(glval) = FunctionAddress[~String] : -# 893| v893_3(void) = Call[~String] : func:r893_2, this:r893_1 -# 893| mu893_4(unknown) = ^CallSideEffect : ~m? -# 893| v893_5(void) = ^IndirectReadSideEffect[-1] : &:r893_1, ~m? -# 893| mu893_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r893_1 -# 893| r893_7(bool) = Constant[0] : -# 893| v893_8(void) = ConditionalBranch : r893_7 +# 35| Block 292 +# 35| r35_4075(glval) = VariableAddress[x291] : +# 35| mu35_4076(String) = Uninitialized[x291] : &:r35_4075 +# 35| r35_4077(glval) = FunctionAddress[String] : +# 35| v35_4078(void) = Call[String] : func:r35_4077, this:r35_4075 +# 35| mu35_4079(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4075 +# 35| r35_4081(glval) = VariableAddress[x291] : +# 35| r35_4082(glval) = FunctionAddress[~String] : +# 35| v35_4083(void) = Call[~String] : func:r35_4082, this:r35_4081 +# 35| mu35_4084(unknown) = ^CallSideEffect : ~m? +# 35| v35_4085(void) = ^IndirectReadSideEffect[-1] : &:r35_4081, ~m? +# 35| mu35_4086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4081 +# 35| r35_4087(bool) = Constant[0] : +# 35| v35_4088(void) = ConditionalBranch : r35_4087 #-----| False -> Block 293 #-----| True (back edge) -> Block 292 -# 895| Block 293 -# 895| r895_1(glval) = VariableAddress[x292] : -# 895| mu895_2(String) = Uninitialized[x292] : &:r895_1 -# 895| r895_3(glval) = FunctionAddress[String] : -# 895| v895_4(void) = Call[String] : func:r895_3, this:r895_1 -# 895| mu895_5(unknown) = ^CallSideEffect : ~m? -# 895| mu895_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r895_1 -# 896| r896_1(glval) = VariableAddress[x292] : -# 896| r896_2(glval) = FunctionAddress[~String] : -# 896| v896_3(void) = Call[~String] : func:r896_2, this:r896_1 -# 896| mu896_4(unknown) = ^CallSideEffect : ~m? -# 896| v896_5(void) = ^IndirectReadSideEffect[-1] : &:r896_1, ~m? -# 896| mu896_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r896_1 -# 896| r896_7(bool) = Constant[0] : -# 896| v896_8(void) = ConditionalBranch : r896_7 +# 35| Block 293 +# 35| r35_4089(glval) = VariableAddress[x292] : +# 35| mu35_4090(String) = Uninitialized[x292] : &:r35_4089 +# 35| r35_4091(glval) = FunctionAddress[String] : +# 35| v35_4092(void) = Call[String] : func:r35_4091, this:r35_4089 +# 35| mu35_4093(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4089 +# 35| r35_4095(glval) = VariableAddress[x292] : +# 35| r35_4096(glval) = FunctionAddress[~String] : +# 35| v35_4097(void) = Call[~String] : func:r35_4096, this:r35_4095 +# 35| mu35_4098(unknown) = ^CallSideEffect : ~m? +# 35| v35_4099(void) = ^IndirectReadSideEffect[-1] : &:r35_4095, ~m? +# 35| mu35_4100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4095 +# 35| r35_4101(bool) = Constant[0] : +# 35| v35_4102(void) = ConditionalBranch : r35_4101 #-----| False -> Block 294 #-----| True (back edge) -> Block 293 -# 898| Block 294 -# 898| r898_1(glval) = VariableAddress[x293] : -# 898| mu898_2(String) = Uninitialized[x293] : &:r898_1 -# 898| r898_3(glval) = FunctionAddress[String] : -# 898| v898_4(void) = Call[String] : func:r898_3, this:r898_1 -# 898| mu898_5(unknown) = ^CallSideEffect : ~m? -# 898| mu898_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r898_1 -# 899| r899_1(glval) = VariableAddress[x293] : -# 899| r899_2(glval) = FunctionAddress[~String] : -# 899| v899_3(void) = Call[~String] : func:r899_2, this:r899_1 -# 899| mu899_4(unknown) = ^CallSideEffect : ~m? -# 899| v899_5(void) = ^IndirectReadSideEffect[-1] : &:r899_1, ~m? -# 899| mu899_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r899_1 -# 899| r899_7(bool) = Constant[0] : -# 899| v899_8(void) = ConditionalBranch : r899_7 +# 35| Block 294 +# 35| r35_4103(glval) = VariableAddress[x293] : +# 35| mu35_4104(String) = Uninitialized[x293] : &:r35_4103 +# 35| r35_4105(glval) = FunctionAddress[String] : +# 35| v35_4106(void) = Call[String] : func:r35_4105, this:r35_4103 +# 35| mu35_4107(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4103 +# 35| r35_4109(glval) = VariableAddress[x293] : +# 35| r35_4110(glval) = FunctionAddress[~String] : +# 35| v35_4111(void) = Call[~String] : func:r35_4110, this:r35_4109 +# 35| mu35_4112(unknown) = ^CallSideEffect : ~m? +# 35| v35_4113(void) = ^IndirectReadSideEffect[-1] : &:r35_4109, ~m? +# 35| mu35_4114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4109 +# 35| r35_4115(bool) = Constant[0] : +# 35| v35_4116(void) = ConditionalBranch : r35_4115 #-----| False -> Block 295 #-----| True (back edge) -> Block 294 -# 901| Block 295 -# 901| r901_1(glval) = VariableAddress[x294] : -# 901| mu901_2(String) = Uninitialized[x294] : &:r901_1 -# 901| r901_3(glval) = FunctionAddress[String] : -# 901| v901_4(void) = Call[String] : func:r901_3, this:r901_1 -# 901| mu901_5(unknown) = ^CallSideEffect : ~m? -# 901| mu901_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r901_1 -# 902| r902_1(glval) = VariableAddress[x294] : -# 902| r902_2(glval) = FunctionAddress[~String] : -# 902| v902_3(void) = Call[~String] : func:r902_2, this:r902_1 -# 902| mu902_4(unknown) = ^CallSideEffect : ~m? -# 902| v902_5(void) = ^IndirectReadSideEffect[-1] : &:r902_1, ~m? -# 902| mu902_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r902_1 -# 902| r902_7(bool) = Constant[0] : -# 902| v902_8(void) = ConditionalBranch : r902_7 +# 35| Block 295 +# 35| r35_4117(glval) = VariableAddress[x294] : +# 35| mu35_4118(String) = Uninitialized[x294] : &:r35_4117 +# 35| r35_4119(glval) = FunctionAddress[String] : +# 35| v35_4120(void) = Call[String] : func:r35_4119, this:r35_4117 +# 35| mu35_4121(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4117 +# 35| r35_4123(glval) = VariableAddress[x294] : +# 35| r35_4124(glval) = FunctionAddress[~String] : +# 35| v35_4125(void) = Call[~String] : func:r35_4124, this:r35_4123 +# 35| mu35_4126(unknown) = ^CallSideEffect : ~m? +# 35| v35_4127(void) = ^IndirectReadSideEffect[-1] : &:r35_4123, ~m? +# 35| mu35_4128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4123 +# 35| r35_4129(bool) = Constant[0] : +# 35| v35_4130(void) = ConditionalBranch : r35_4129 #-----| False -> Block 296 #-----| True (back edge) -> Block 295 -# 904| Block 296 -# 904| r904_1(glval) = VariableAddress[x295] : -# 904| mu904_2(String) = Uninitialized[x295] : &:r904_1 -# 904| r904_3(glval) = FunctionAddress[String] : -# 904| v904_4(void) = Call[String] : func:r904_3, this:r904_1 -# 904| mu904_5(unknown) = ^CallSideEffect : ~m? -# 904| mu904_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r904_1 -# 905| r905_1(glval) = VariableAddress[x295] : -# 905| r905_2(glval) = FunctionAddress[~String] : -# 905| v905_3(void) = Call[~String] : func:r905_2, this:r905_1 -# 905| mu905_4(unknown) = ^CallSideEffect : ~m? -# 905| v905_5(void) = ^IndirectReadSideEffect[-1] : &:r905_1, ~m? -# 905| mu905_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r905_1 -# 905| r905_7(bool) = Constant[0] : -# 905| v905_8(void) = ConditionalBranch : r905_7 +# 35| Block 296 +# 35| r35_4131(glval) = VariableAddress[x295] : +# 35| mu35_4132(String) = Uninitialized[x295] : &:r35_4131 +# 35| r35_4133(glval) = FunctionAddress[String] : +# 35| v35_4134(void) = Call[String] : func:r35_4133, this:r35_4131 +# 35| mu35_4135(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4131 +# 35| r35_4137(glval) = VariableAddress[x295] : +# 35| r35_4138(glval) = FunctionAddress[~String] : +# 35| v35_4139(void) = Call[~String] : func:r35_4138, this:r35_4137 +# 35| mu35_4140(unknown) = ^CallSideEffect : ~m? +# 35| v35_4141(void) = ^IndirectReadSideEffect[-1] : &:r35_4137, ~m? +# 35| mu35_4142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4137 +# 35| r35_4143(bool) = Constant[0] : +# 35| v35_4144(void) = ConditionalBranch : r35_4143 #-----| False -> Block 297 #-----| True (back edge) -> Block 296 -# 907| Block 297 -# 907| r907_1(glval) = VariableAddress[x296] : -# 907| mu907_2(String) = Uninitialized[x296] : &:r907_1 -# 907| r907_3(glval) = FunctionAddress[String] : -# 907| v907_4(void) = Call[String] : func:r907_3, this:r907_1 -# 907| mu907_5(unknown) = ^CallSideEffect : ~m? -# 907| mu907_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r907_1 -# 908| r908_1(glval) = VariableAddress[x296] : -# 908| r908_2(glval) = FunctionAddress[~String] : -# 908| v908_3(void) = Call[~String] : func:r908_2, this:r908_1 -# 908| mu908_4(unknown) = ^CallSideEffect : ~m? -# 908| v908_5(void) = ^IndirectReadSideEffect[-1] : &:r908_1, ~m? -# 908| mu908_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r908_1 -# 908| r908_7(bool) = Constant[0] : -# 908| v908_8(void) = ConditionalBranch : r908_7 +# 35| Block 297 +# 35| r35_4145(glval) = VariableAddress[x296] : +# 35| mu35_4146(String) = Uninitialized[x296] : &:r35_4145 +# 35| r35_4147(glval) = FunctionAddress[String] : +# 35| v35_4148(void) = Call[String] : func:r35_4147, this:r35_4145 +# 35| mu35_4149(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4145 +# 35| r35_4151(glval) = VariableAddress[x296] : +# 35| r35_4152(glval) = FunctionAddress[~String] : +# 35| v35_4153(void) = Call[~String] : func:r35_4152, this:r35_4151 +# 35| mu35_4154(unknown) = ^CallSideEffect : ~m? +# 35| v35_4155(void) = ^IndirectReadSideEffect[-1] : &:r35_4151, ~m? +# 35| mu35_4156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4151 +# 35| r35_4157(bool) = Constant[0] : +# 35| v35_4158(void) = ConditionalBranch : r35_4157 #-----| False -> Block 298 #-----| True (back edge) -> Block 297 -# 910| Block 298 -# 910| r910_1(glval) = VariableAddress[x297] : -# 910| mu910_2(String) = Uninitialized[x297] : &:r910_1 -# 910| r910_3(glval) = FunctionAddress[String] : -# 910| v910_4(void) = Call[String] : func:r910_3, this:r910_1 -# 910| mu910_5(unknown) = ^CallSideEffect : ~m? -# 910| mu910_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r910_1 -# 911| r911_1(glval) = VariableAddress[x297] : -# 911| r911_2(glval) = FunctionAddress[~String] : -# 911| v911_3(void) = Call[~String] : func:r911_2, this:r911_1 -# 911| mu911_4(unknown) = ^CallSideEffect : ~m? -# 911| v911_5(void) = ^IndirectReadSideEffect[-1] : &:r911_1, ~m? -# 911| mu911_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r911_1 -# 911| r911_7(bool) = Constant[0] : -# 911| v911_8(void) = ConditionalBranch : r911_7 +# 35| Block 298 +# 35| r35_4159(glval) = VariableAddress[x297] : +# 35| mu35_4160(String) = Uninitialized[x297] : &:r35_4159 +# 35| r35_4161(glval) = FunctionAddress[String] : +# 35| v35_4162(void) = Call[String] : func:r35_4161, this:r35_4159 +# 35| mu35_4163(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4159 +# 35| r35_4165(glval) = VariableAddress[x297] : +# 35| r35_4166(glval) = FunctionAddress[~String] : +# 35| v35_4167(void) = Call[~String] : func:r35_4166, this:r35_4165 +# 35| mu35_4168(unknown) = ^CallSideEffect : ~m? +# 35| v35_4169(void) = ^IndirectReadSideEffect[-1] : &:r35_4165, ~m? +# 35| mu35_4170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4165 +# 35| r35_4171(bool) = Constant[0] : +# 35| v35_4172(void) = ConditionalBranch : r35_4171 #-----| False -> Block 299 #-----| True (back edge) -> Block 298 -# 913| Block 299 -# 913| r913_1(glval) = VariableAddress[x298] : -# 913| mu913_2(String) = Uninitialized[x298] : &:r913_1 -# 913| r913_3(glval) = FunctionAddress[String] : -# 913| v913_4(void) = Call[String] : func:r913_3, this:r913_1 -# 913| mu913_5(unknown) = ^CallSideEffect : ~m? -# 913| mu913_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r913_1 -# 914| r914_1(glval) = VariableAddress[x298] : -# 914| r914_2(glval) = FunctionAddress[~String] : -# 914| v914_3(void) = Call[~String] : func:r914_2, this:r914_1 -# 914| mu914_4(unknown) = ^CallSideEffect : ~m? -# 914| v914_5(void) = ^IndirectReadSideEffect[-1] : &:r914_1, ~m? -# 914| mu914_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r914_1 -# 914| r914_7(bool) = Constant[0] : -# 914| v914_8(void) = ConditionalBranch : r914_7 +# 35| Block 299 +# 35| r35_4173(glval) = VariableAddress[x298] : +# 35| mu35_4174(String) = Uninitialized[x298] : &:r35_4173 +# 35| r35_4175(glval) = FunctionAddress[String] : +# 35| v35_4176(void) = Call[String] : func:r35_4175, this:r35_4173 +# 35| mu35_4177(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4173 +# 35| r35_4179(glval) = VariableAddress[x298] : +# 35| r35_4180(glval) = FunctionAddress[~String] : +# 35| v35_4181(void) = Call[~String] : func:r35_4180, this:r35_4179 +# 35| mu35_4182(unknown) = ^CallSideEffect : ~m? +# 35| v35_4183(void) = ^IndirectReadSideEffect[-1] : &:r35_4179, ~m? +# 35| mu35_4184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4179 +# 35| r35_4185(bool) = Constant[0] : +# 35| v35_4186(void) = ConditionalBranch : r35_4185 #-----| False -> Block 300 #-----| True (back edge) -> Block 299 -# 916| Block 300 -# 916| r916_1(glval) = VariableAddress[x299] : -# 916| mu916_2(String) = Uninitialized[x299] : &:r916_1 -# 916| r916_3(glval) = FunctionAddress[String] : -# 916| v916_4(void) = Call[String] : func:r916_3, this:r916_1 -# 916| mu916_5(unknown) = ^CallSideEffect : ~m? -# 916| mu916_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r916_1 -# 917| r917_1(glval) = VariableAddress[x299] : -# 917| r917_2(glval) = FunctionAddress[~String] : -# 917| v917_3(void) = Call[~String] : func:r917_2, this:r917_1 -# 917| mu917_4(unknown) = ^CallSideEffect : ~m? -# 917| v917_5(void) = ^IndirectReadSideEffect[-1] : &:r917_1, ~m? -# 917| mu917_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r917_1 -# 917| r917_7(bool) = Constant[0] : -# 917| v917_8(void) = ConditionalBranch : r917_7 +# 35| Block 300 +# 35| r35_4187(glval) = VariableAddress[x299] : +# 35| mu35_4188(String) = Uninitialized[x299] : &:r35_4187 +# 35| r35_4189(glval) = FunctionAddress[String] : +# 35| v35_4190(void) = Call[String] : func:r35_4189, this:r35_4187 +# 35| mu35_4191(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4187 +# 35| r35_4193(glval) = VariableAddress[x299] : +# 35| r35_4194(glval) = FunctionAddress[~String] : +# 35| v35_4195(void) = Call[~String] : func:r35_4194, this:r35_4193 +# 35| mu35_4196(unknown) = ^CallSideEffect : ~m? +# 35| v35_4197(void) = ^IndirectReadSideEffect[-1] : &:r35_4193, ~m? +# 35| mu35_4198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4193 +# 35| r35_4199(bool) = Constant[0] : +# 35| v35_4200(void) = ConditionalBranch : r35_4199 #-----| False -> Block 301 #-----| True (back edge) -> Block 300 -# 919| Block 301 -# 919| r919_1(glval) = VariableAddress[x300] : -# 919| mu919_2(String) = Uninitialized[x300] : &:r919_1 -# 919| r919_3(glval) = FunctionAddress[String] : -# 919| v919_4(void) = Call[String] : func:r919_3, this:r919_1 -# 919| mu919_5(unknown) = ^CallSideEffect : ~m? -# 919| mu919_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r919_1 -# 920| r920_1(glval) = VariableAddress[x300] : -# 920| r920_2(glval) = FunctionAddress[~String] : -# 920| v920_3(void) = Call[~String] : func:r920_2, this:r920_1 -# 920| mu920_4(unknown) = ^CallSideEffect : ~m? -# 920| v920_5(void) = ^IndirectReadSideEffect[-1] : &:r920_1, ~m? -# 920| mu920_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r920_1 -# 920| r920_7(bool) = Constant[0] : -# 920| v920_8(void) = ConditionalBranch : r920_7 +# 35| Block 301 +# 35| r35_4201(glval) = VariableAddress[x300] : +# 35| mu35_4202(String) = Uninitialized[x300] : &:r35_4201 +# 35| r35_4203(glval) = FunctionAddress[String] : +# 35| v35_4204(void) = Call[String] : func:r35_4203, this:r35_4201 +# 35| mu35_4205(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4201 +# 35| r35_4207(glval) = VariableAddress[x300] : +# 35| r35_4208(glval) = FunctionAddress[~String] : +# 35| v35_4209(void) = Call[~String] : func:r35_4208, this:r35_4207 +# 35| mu35_4210(unknown) = ^CallSideEffect : ~m? +# 35| v35_4211(void) = ^IndirectReadSideEffect[-1] : &:r35_4207, ~m? +# 35| mu35_4212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4207 +# 35| r35_4213(bool) = Constant[0] : +# 35| v35_4214(void) = ConditionalBranch : r35_4213 #-----| False -> Block 302 #-----| True (back edge) -> Block 301 -# 922| Block 302 -# 922| r922_1(glval) = VariableAddress[x301] : -# 922| mu922_2(String) = Uninitialized[x301] : &:r922_1 -# 922| r922_3(glval) = FunctionAddress[String] : -# 922| v922_4(void) = Call[String] : func:r922_3, this:r922_1 -# 922| mu922_5(unknown) = ^CallSideEffect : ~m? -# 922| mu922_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r922_1 -# 923| r923_1(glval) = VariableAddress[x301] : -# 923| r923_2(glval) = FunctionAddress[~String] : -# 923| v923_3(void) = Call[~String] : func:r923_2, this:r923_1 -# 923| mu923_4(unknown) = ^CallSideEffect : ~m? -# 923| v923_5(void) = ^IndirectReadSideEffect[-1] : &:r923_1, ~m? -# 923| mu923_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r923_1 -# 923| r923_7(bool) = Constant[0] : -# 923| v923_8(void) = ConditionalBranch : r923_7 +# 35| Block 302 +# 35| r35_4215(glval) = VariableAddress[x301] : +# 35| mu35_4216(String) = Uninitialized[x301] : &:r35_4215 +# 35| r35_4217(glval) = FunctionAddress[String] : +# 35| v35_4218(void) = Call[String] : func:r35_4217, this:r35_4215 +# 35| mu35_4219(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4215 +# 35| r35_4221(glval) = VariableAddress[x301] : +# 35| r35_4222(glval) = FunctionAddress[~String] : +# 35| v35_4223(void) = Call[~String] : func:r35_4222, this:r35_4221 +# 35| mu35_4224(unknown) = ^CallSideEffect : ~m? +# 35| v35_4225(void) = ^IndirectReadSideEffect[-1] : &:r35_4221, ~m? +# 35| mu35_4226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4221 +# 35| r35_4227(bool) = Constant[0] : +# 35| v35_4228(void) = ConditionalBranch : r35_4227 #-----| False -> Block 303 #-----| True (back edge) -> Block 302 -# 925| Block 303 -# 925| r925_1(glval) = VariableAddress[x302] : -# 925| mu925_2(String) = Uninitialized[x302] : &:r925_1 -# 925| r925_3(glval) = FunctionAddress[String] : -# 925| v925_4(void) = Call[String] : func:r925_3, this:r925_1 -# 925| mu925_5(unknown) = ^CallSideEffect : ~m? -# 925| mu925_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r925_1 -# 926| r926_1(glval) = VariableAddress[x302] : -# 926| r926_2(glval) = FunctionAddress[~String] : -# 926| v926_3(void) = Call[~String] : func:r926_2, this:r926_1 -# 926| mu926_4(unknown) = ^CallSideEffect : ~m? -# 926| v926_5(void) = ^IndirectReadSideEffect[-1] : &:r926_1, ~m? -# 926| mu926_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r926_1 -# 926| r926_7(bool) = Constant[0] : -# 926| v926_8(void) = ConditionalBranch : r926_7 +# 35| Block 303 +# 35| r35_4229(glval) = VariableAddress[x302] : +# 35| mu35_4230(String) = Uninitialized[x302] : &:r35_4229 +# 35| r35_4231(glval) = FunctionAddress[String] : +# 35| v35_4232(void) = Call[String] : func:r35_4231, this:r35_4229 +# 35| mu35_4233(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4229 +# 35| r35_4235(glval) = VariableAddress[x302] : +# 35| r35_4236(glval) = FunctionAddress[~String] : +# 35| v35_4237(void) = Call[~String] : func:r35_4236, this:r35_4235 +# 35| mu35_4238(unknown) = ^CallSideEffect : ~m? +# 35| v35_4239(void) = ^IndirectReadSideEffect[-1] : &:r35_4235, ~m? +# 35| mu35_4240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4235 +# 35| r35_4241(bool) = Constant[0] : +# 35| v35_4242(void) = ConditionalBranch : r35_4241 #-----| False -> Block 304 #-----| True (back edge) -> Block 303 -# 928| Block 304 -# 928| r928_1(glval) = VariableAddress[x303] : -# 928| mu928_2(String) = Uninitialized[x303] : &:r928_1 -# 928| r928_3(glval) = FunctionAddress[String] : -# 928| v928_4(void) = Call[String] : func:r928_3, this:r928_1 -# 928| mu928_5(unknown) = ^CallSideEffect : ~m? -# 928| mu928_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r928_1 -# 929| r929_1(glval) = VariableAddress[x303] : -# 929| r929_2(glval) = FunctionAddress[~String] : -# 929| v929_3(void) = Call[~String] : func:r929_2, this:r929_1 -# 929| mu929_4(unknown) = ^CallSideEffect : ~m? -# 929| v929_5(void) = ^IndirectReadSideEffect[-1] : &:r929_1, ~m? -# 929| mu929_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r929_1 -# 929| r929_7(bool) = Constant[0] : -# 929| v929_8(void) = ConditionalBranch : r929_7 +# 35| Block 304 +# 35| r35_4243(glval) = VariableAddress[x303] : +# 35| mu35_4244(String) = Uninitialized[x303] : &:r35_4243 +# 35| r35_4245(glval) = FunctionAddress[String] : +# 35| v35_4246(void) = Call[String] : func:r35_4245, this:r35_4243 +# 35| mu35_4247(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4243 +# 35| r35_4249(glval) = VariableAddress[x303] : +# 35| r35_4250(glval) = FunctionAddress[~String] : +# 35| v35_4251(void) = Call[~String] : func:r35_4250, this:r35_4249 +# 35| mu35_4252(unknown) = ^CallSideEffect : ~m? +# 35| v35_4253(void) = ^IndirectReadSideEffect[-1] : &:r35_4249, ~m? +# 35| mu35_4254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4249 +# 35| r35_4255(bool) = Constant[0] : +# 35| v35_4256(void) = ConditionalBranch : r35_4255 #-----| False -> Block 305 #-----| True (back edge) -> Block 304 -# 931| Block 305 -# 931| r931_1(glval) = VariableAddress[x304] : -# 931| mu931_2(String) = Uninitialized[x304] : &:r931_1 -# 931| r931_3(glval) = FunctionAddress[String] : -# 931| v931_4(void) = Call[String] : func:r931_3, this:r931_1 -# 931| mu931_5(unknown) = ^CallSideEffect : ~m? -# 931| mu931_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r931_1 -# 932| r932_1(glval) = VariableAddress[x304] : -# 932| r932_2(glval) = FunctionAddress[~String] : -# 932| v932_3(void) = Call[~String] : func:r932_2, this:r932_1 -# 932| mu932_4(unknown) = ^CallSideEffect : ~m? -# 932| v932_5(void) = ^IndirectReadSideEffect[-1] : &:r932_1, ~m? -# 932| mu932_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r932_1 -# 932| r932_7(bool) = Constant[0] : -# 932| v932_8(void) = ConditionalBranch : r932_7 +# 35| Block 305 +# 35| r35_4257(glval) = VariableAddress[x304] : +# 35| mu35_4258(String) = Uninitialized[x304] : &:r35_4257 +# 35| r35_4259(glval) = FunctionAddress[String] : +# 35| v35_4260(void) = Call[String] : func:r35_4259, this:r35_4257 +# 35| mu35_4261(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4257 +# 35| r35_4263(glval) = VariableAddress[x304] : +# 35| r35_4264(glval) = FunctionAddress[~String] : +# 35| v35_4265(void) = Call[~String] : func:r35_4264, this:r35_4263 +# 35| mu35_4266(unknown) = ^CallSideEffect : ~m? +# 35| v35_4267(void) = ^IndirectReadSideEffect[-1] : &:r35_4263, ~m? +# 35| mu35_4268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4263 +# 35| r35_4269(bool) = Constant[0] : +# 35| v35_4270(void) = ConditionalBranch : r35_4269 #-----| False -> Block 306 #-----| True (back edge) -> Block 305 -# 934| Block 306 -# 934| r934_1(glval) = VariableAddress[x305] : -# 934| mu934_2(String) = Uninitialized[x305] : &:r934_1 -# 934| r934_3(glval) = FunctionAddress[String] : -# 934| v934_4(void) = Call[String] : func:r934_3, this:r934_1 -# 934| mu934_5(unknown) = ^CallSideEffect : ~m? -# 934| mu934_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r934_1 -# 935| r935_1(glval) = VariableAddress[x305] : -# 935| r935_2(glval) = FunctionAddress[~String] : -# 935| v935_3(void) = Call[~String] : func:r935_2, this:r935_1 -# 935| mu935_4(unknown) = ^CallSideEffect : ~m? -# 935| v935_5(void) = ^IndirectReadSideEffect[-1] : &:r935_1, ~m? -# 935| mu935_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r935_1 -# 935| r935_7(bool) = Constant[0] : -# 935| v935_8(void) = ConditionalBranch : r935_7 +# 35| Block 306 +# 35| r35_4271(glval) = VariableAddress[x305] : +# 35| mu35_4272(String) = Uninitialized[x305] : &:r35_4271 +# 35| r35_4273(glval) = FunctionAddress[String] : +# 35| v35_4274(void) = Call[String] : func:r35_4273, this:r35_4271 +# 35| mu35_4275(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4271 +# 35| r35_4277(glval) = VariableAddress[x305] : +# 35| r35_4278(glval) = FunctionAddress[~String] : +# 35| v35_4279(void) = Call[~String] : func:r35_4278, this:r35_4277 +# 35| mu35_4280(unknown) = ^CallSideEffect : ~m? +# 35| v35_4281(void) = ^IndirectReadSideEffect[-1] : &:r35_4277, ~m? +# 35| mu35_4282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4277 +# 35| r35_4283(bool) = Constant[0] : +# 35| v35_4284(void) = ConditionalBranch : r35_4283 #-----| False -> Block 307 #-----| True (back edge) -> Block 306 -# 937| Block 307 -# 937| r937_1(glval) = VariableAddress[x306] : -# 937| mu937_2(String) = Uninitialized[x306] : &:r937_1 -# 937| r937_3(glval) = FunctionAddress[String] : -# 937| v937_4(void) = Call[String] : func:r937_3, this:r937_1 -# 937| mu937_5(unknown) = ^CallSideEffect : ~m? -# 937| mu937_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r937_1 -# 938| r938_1(glval) = VariableAddress[x306] : -# 938| r938_2(glval) = FunctionAddress[~String] : -# 938| v938_3(void) = Call[~String] : func:r938_2, this:r938_1 -# 938| mu938_4(unknown) = ^CallSideEffect : ~m? -# 938| v938_5(void) = ^IndirectReadSideEffect[-1] : &:r938_1, ~m? -# 938| mu938_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r938_1 -# 938| r938_7(bool) = Constant[0] : -# 938| v938_8(void) = ConditionalBranch : r938_7 +# 35| Block 307 +# 35| r35_4285(glval) = VariableAddress[x306] : +# 35| mu35_4286(String) = Uninitialized[x306] : &:r35_4285 +# 35| r35_4287(glval) = FunctionAddress[String] : +# 35| v35_4288(void) = Call[String] : func:r35_4287, this:r35_4285 +# 35| mu35_4289(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4285 +# 35| r35_4291(glval) = VariableAddress[x306] : +# 35| r35_4292(glval) = FunctionAddress[~String] : +# 35| v35_4293(void) = Call[~String] : func:r35_4292, this:r35_4291 +# 35| mu35_4294(unknown) = ^CallSideEffect : ~m? +# 35| v35_4295(void) = ^IndirectReadSideEffect[-1] : &:r35_4291, ~m? +# 35| mu35_4296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4291 +# 35| r35_4297(bool) = Constant[0] : +# 35| v35_4298(void) = ConditionalBranch : r35_4297 #-----| False -> Block 308 #-----| True (back edge) -> Block 307 -# 940| Block 308 -# 940| r940_1(glval) = VariableAddress[x307] : -# 940| mu940_2(String) = Uninitialized[x307] : &:r940_1 -# 940| r940_3(glval) = FunctionAddress[String] : -# 940| v940_4(void) = Call[String] : func:r940_3, this:r940_1 -# 940| mu940_5(unknown) = ^CallSideEffect : ~m? -# 940| mu940_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r940_1 -# 941| r941_1(glval) = VariableAddress[x307] : -# 941| r941_2(glval) = FunctionAddress[~String] : -# 941| v941_3(void) = Call[~String] : func:r941_2, this:r941_1 -# 941| mu941_4(unknown) = ^CallSideEffect : ~m? -# 941| v941_5(void) = ^IndirectReadSideEffect[-1] : &:r941_1, ~m? -# 941| mu941_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r941_1 -# 941| r941_7(bool) = Constant[0] : -# 941| v941_8(void) = ConditionalBranch : r941_7 +# 35| Block 308 +# 35| r35_4299(glval) = VariableAddress[x307] : +# 35| mu35_4300(String) = Uninitialized[x307] : &:r35_4299 +# 35| r35_4301(glval) = FunctionAddress[String] : +# 35| v35_4302(void) = Call[String] : func:r35_4301, this:r35_4299 +# 35| mu35_4303(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4299 +# 35| r35_4305(glval) = VariableAddress[x307] : +# 35| r35_4306(glval) = FunctionAddress[~String] : +# 35| v35_4307(void) = Call[~String] : func:r35_4306, this:r35_4305 +# 35| mu35_4308(unknown) = ^CallSideEffect : ~m? +# 35| v35_4309(void) = ^IndirectReadSideEffect[-1] : &:r35_4305, ~m? +# 35| mu35_4310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4305 +# 35| r35_4311(bool) = Constant[0] : +# 35| v35_4312(void) = ConditionalBranch : r35_4311 #-----| False -> Block 309 #-----| True (back edge) -> Block 308 -# 943| Block 309 -# 943| r943_1(glval) = VariableAddress[x308] : -# 943| mu943_2(String) = Uninitialized[x308] : &:r943_1 -# 943| r943_3(glval) = FunctionAddress[String] : -# 943| v943_4(void) = Call[String] : func:r943_3, this:r943_1 -# 943| mu943_5(unknown) = ^CallSideEffect : ~m? -# 943| mu943_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r943_1 -# 944| r944_1(glval) = VariableAddress[x308] : -# 944| r944_2(glval) = FunctionAddress[~String] : -# 944| v944_3(void) = Call[~String] : func:r944_2, this:r944_1 -# 944| mu944_4(unknown) = ^CallSideEffect : ~m? -# 944| v944_5(void) = ^IndirectReadSideEffect[-1] : &:r944_1, ~m? -# 944| mu944_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r944_1 -# 944| r944_7(bool) = Constant[0] : -# 944| v944_8(void) = ConditionalBranch : r944_7 +# 35| Block 309 +# 35| r35_4313(glval) = VariableAddress[x308] : +# 35| mu35_4314(String) = Uninitialized[x308] : &:r35_4313 +# 35| r35_4315(glval) = FunctionAddress[String] : +# 35| v35_4316(void) = Call[String] : func:r35_4315, this:r35_4313 +# 35| mu35_4317(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4313 +# 35| r35_4319(glval) = VariableAddress[x308] : +# 35| r35_4320(glval) = FunctionAddress[~String] : +# 35| v35_4321(void) = Call[~String] : func:r35_4320, this:r35_4319 +# 35| mu35_4322(unknown) = ^CallSideEffect : ~m? +# 35| v35_4323(void) = ^IndirectReadSideEffect[-1] : &:r35_4319, ~m? +# 35| mu35_4324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4319 +# 35| r35_4325(bool) = Constant[0] : +# 35| v35_4326(void) = ConditionalBranch : r35_4325 #-----| False -> Block 310 #-----| True (back edge) -> Block 309 -# 946| Block 310 -# 946| r946_1(glval) = VariableAddress[x309] : -# 946| mu946_2(String) = Uninitialized[x309] : &:r946_1 -# 946| r946_3(glval) = FunctionAddress[String] : -# 946| v946_4(void) = Call[String] : func:r946_3, this:r946_1 -# 946| mu946_5(unknown) = ^CallSideEffect : ~m? -# 946| mu946_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r946_1 -# 947| r947_1(glval) = VariableAddress[x309] : -# 947| r947_2(glval) = FunctionAddress[~String] : -# 947| v947_3(void) = Call[~String] : func:r947_2, this:r947_1 -# 947| mu947_4(unknown) = ^CallSideEffect : ~m? -# 947| v947_5(void) = ^IndirectReadSideEffect[-1] : &:r947_1, ~m? -# 947| mu947_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r947_1 -# 947| r947_7(bool) = Constant[0] : -# 947| v947_8(void) = ConditionalBranch : r947_7 +# 35| Block 310 +# 35| r35_4327(glval) = VariableAddress[x309] : +# 35| mu35_4328(String) = Uninitialized[x309] : &:r35_4327 +# 35| r35_4329(glval) = FunctionAddress[String] : +# 35| v35_4330(void) = Call[String] : func:r35_4329, this:r35_4327 +# 35| mu35_4331(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4327 +# 35| r35_4333(glval) = VariableAddress[x309] : +# 35| r35_4334(glval) = FunctionAddress[~String] : +# 35| v35_4335(void) = Call[~String] : func:r35_4334, this:r35_4333 +# 35| mu35_4336(unknown) = ^CallSideEffect : ~m? +# 35| v35_4337(void) = ^IndirectReadSideEffect[-1] : &:r35_4333, ~m? +# 35| mu35_4338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4333 +# 35| r35_4339(bool) = Constant[0] : +# 35| v35_4340(void) = ConditionalBranch : r35_4339 #-----| False -> Block 311 #-----| True (back edge) -> Block 310 -# 949| Block 311 -# 949| r949_1(glval) = VariableAddress[x310] : -# 949| mu949_2(String) = Uninitialized[x310] : &:r949_1 -# 949| r949_3(glval) = FunctionAddress[String] : -# 949| v949_4(void) = Call[String] : func:r949_3, this:r949_1 -# 949| mu949_5(unknown) = ^CallSideEffect : ~m? -# 949| mu949_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r949_1 -# 950| r950_1(glval) = VariableAddress[x310] : -# 950| r950_2(glval) = FunctionAddress[~String] : -# 950| v950_3(void) = Call[~String] : func:r950_2, this:r950_1 -# 950| mu950_4(unknown) = ^CallSideEffect : ~m? -# 950| v950_5(void) = ^IndirectReadSideEffect[-1] : &:r950_1, ~m? -# 950| mu950_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r950_1 -# 950| r950_7(bool) = Constant[0] : -# 950| v950_8(void) = ConditionalBranch : r950_7 +# 35| Block 311 +# 35| r35_4341(glval) = VariableAddress[x310] : +# 35| mu35_4342(String) = Uninitialized[x310] : &:r35_4341 +# 35| r35_4343(glval) = FunctionAddress[String] : +# 35| v35_4344(void) = Call[String] : func:r35_4343, this:r35_4341 +# 35| mu35_4345(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4341 +# 35| r35_4347(glval) = VariableAddress[x310] : +# 35| r35_4348(glval) = FunctionAddress[~String] : +# 35| v35_4349(void) = Call[~String] : func:r35_4348, this:r35_4347 +# 35| mu35_4350(unknown) = ^CallSideEffect : ~m? +# 35| v35_4351(void) = ^IndirectReadSideEffect[-1] : &:r35_4347, ~m? +# 35| mu35_4352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4347 +# 35| r35_4353(bool) = Constant[0] : +# 35| v35_4354(void) = ConditionalBranch : r35_4353 #-----| False -> Block 312 #-----| True (back edge) -> Block 311 -# 952| Block 312 -# 952| r952_1(glval) = VariableAddress[x311] : -# 952| mu952_2(String) = Uninitialized[x311] : &:r952_1 -# 952| r952_3(glval) = FunctionAddress[String] : -# 952| v952_4(void) = Call[String] : func:r952_3, this:r952_1 -# 952| mu952_5(unknown) = ^CallSideEffect : ~m? -# 952| mu952_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r952_1 -# 953| r953_1(glval) = VariableAddress[x311] : -# 953| r953_2(glval) = FunctionAddress[~String] : -# 953| v953_3(void) = Call[~String] : func:r953_2, this:r953_1 -# 953| mu953_4(unknown) = ^CallSideEffect : ~m? -# 953| v953_5(void) = ^IndirectReadSideEffect[-1] : &:r953_1, ~m? -# 953| mu953_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r953_1 -# 953| r953_7(bool) = Constant[0] : -# 953| v953_8(void) = ConditionalBranch : r953_7 +# 35| Block 312 +# 35| r35_4355(glval) = VariableAddress[x311] : +# 35| mu35_4356(String) = Uninitialized[x311] : &:r35_4355 +# 35| r35_4357(glval) = FunctionAddress[String] : +# 35| v35_4358(void) = Call[String] : func:r35_4357, this:r35_4355 +# 35| mu35_4359(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4355 +# 35| r35_4361(glval) = VariableAddress[x311] : +# 35| r35_4362(glval) = FunctionAddress[~String] : +# 35| v35_4363(void) = Call[~String] : func:r35_4362, this:r35_4361 +# 35| mu35_4364(unknown) = ^CallSideEffect : ~m? +# 35| v35_4365(void) = ^IndirectReadSideEffect[-1] : &:r35_4361, ~m? +# 35| mu35_4366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4361 +# 35| r35_4367(bool) = Constant[0] : +# 35| v35_4368(void) = ConditionalBranch : r35_4367 #-----| False -> Block 313 #-----| True (back edge) -> Block 312 -# 955| Block 313 -# 955| r955_1(glval) = VariableAddress[x312] : -# 955| mu955_2(String) = Uninitialized[x312] : &:r955_1 -# 955| r955_3(glval) = FunctionAddress[String] : -# 955| v955_4(void) = Call[String] : func:r955_3, this:r955_1 -# 955| mu955_5(unknown) = ^CallSideEffect : ~m? -# 955| mu955_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r955_1 -# 956| r956_1(glval) = VariableAddress[x312] : -# 956| r956_2(glval) = FunctionAddress[~String] : -# 956| v956_3(void) = Call[~String] : func:r956_2, this:r956_1 -# 956| mu956_4(unknown) = ^CallSideEffect : ~m? -# 956| v956_5(void) = ^IndirectReadSideEffect[-1] : &:r956_1, ~m? -# 956| mu956_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r956_1 -# 956| r956_7(bool) = Constant[0] : -# 956| v956_8(void) = ConditionalBranch : r956_7 +# 35| Block 313 +# 35| r35_4369(glval) = VariableAddress[x312] : +# 35| mu35_4370(String) = Uninitialized[x312] : &:r35_4369 +# 35| r35_4371(glval) = FunctionAddress[String] : +# 35| v35_4372(void) = Call[String] : func:r35_4371, this:r35_4369 +# 35| mu35_4373(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4369 +# 35| r35_4375(glval) = VariableAddress[x312] : +# 35| r35_4376(glval) = FunctionAddress[~String] : +# 35| v35_4377(void) = Call[~String] : func:r35_4376, this:r35_4375 +# 35| mu35_4378(unknown) = ^CallSideEffect : ~m? +# 35| v35_4379(void) = ^IndirectReadSideEffect[-1] : &:r35_4375, ~m? +# 35| mu35_4380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4375 +# 35| r35_4381(bool) = Constant[0] : +# 35| v35_4382(void) = ConditionalBranch : r35_4381 #-----| False -> Block 314 #-----| True (back edge) -> Block 313 -# 958| Block 314 -# 958| r958_1(glval) = VariableAddress[x313] : -# 958| mu958_2(String) = Uninitialized[x313] : &:r958_1 -# 958| r958_3(glval) = FunctionAddress[String] : -# 958| v958_4(void) = Call[String] : func:r958_3, this:r958_1 -# 958| mu958_5(unknown) = ^CallSideEffect : ~m? -# 958| mu958_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r958_1 -# 959| r959_1(glval) = VariableAddress[x313] : -# 959| r959_2(glval) = FunctionAddress[~String] : -# 959| v959_3(void) = Call[~String] : func:r959_2, this:r959_1 -# 959| mu959_4(unknown) = ^CallSideEffect : ~m? -# 959| v959_5(void) = ^IndirectReadSideEffect[-1] : &:r959_1, ~m? -# 959| mu959_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r959_1 -# 959| r959_7(bool) = Constant[0] : -# 959| v959_8(void) = ConditionalBranch : r959_7 +# 35| Block 314 +# 35| r35_4383(glval) = VariableAddress[x313] : +# 35| mu35_4384(String) = Uninitialized[x313] : &:r35_4383 +# 35| r35_4385(glval) = FunctionAddress[String] : +# 35| v35_4386(void) = Call[String] : func:r35_4385, this:r35_4383 +# 35| mu35_4387(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4383 +# 35| r35_4389(glval) = VariableAddress[x313] : +# 35| r35_4390(glval) = FunctionAddress[~String] : +# 35| v35_4391(void) = Call[~String] : func:r35_4390, this:r35_4389 +# 35| mu35_4392(unknown) = ^CallSideEffect : ~m? +# 35| v35_4393(void) = ^IndirectReadSideEffect[-1] : &:r35_4389, ~m? +# 35| mu35_4394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4389 +# 35| r35_4395(bool) = Constant[0] : +# 35| v35_4396(void) = ConditionalBranch : r35_4395 #-----| False -> Block 315 #-----| True (back edge) -> Block 314 -# 961| Block 315 -# 961| r961_1(glval) = VariableAddress[x314] : -# 961| mu961_2(String) = Uninitialized[x314] : &:r961_1 -# 961| r961_3(glval) = FunctionAddress[String] : -# 961| v961_4(void) = Call[String] : func:r961_3, this:r961_1 -# 961| mu961_5(unknown) = ^CallSideEffect : ~m? -# 961| mu961_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r961_1 -# 962| r962_1(glval) = VariableAddress[x314] : -# 962| r962_2(glval) = FunctionAddress[~String] : -# 962| v962_3(void) = Call[~String] : func:r962_2, this:r962_1 -# 962| mu962_4(unknown) = ^CallSideEffect : ~m? -# 962| v962_5(void) = ^IndirectReadSideEffect[-1] : &:r962_1, ~m? -# 962| mu962_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r962_1 -# 962| r962_7(bool) = Constant[0] : -# 962| v962_8(void) = ConditionalBranch : r962_7 +# 35| Block 315 +# 35| r35_4397(glval) = VariableAddress[x314] : +# 35| mu35_4398(String) = Uninitialized[x314] : &:r35_4397 +# 35| r35_4399(glval) = FunctionAddress[String] : +# 35| v35_4400(void) = Call[String] : func:r35_4399, this:r35_4397 +# 35| mu35_4401(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4397 +# 35| r35_4403(glval) = VariableAddress[x314] : +# 35| r35_4404(glval) = FunctionAddress[~String] : +# 35| v35_4405(void) = Call[~String] : func:r35_4404, this:r35_4403 +# 35| mu35_4406(unknown) = ^CallSideEffect : ~m? +# 35| v35_4407(void) = ^IndirectReadSideEffect[-1] : &:r35_4403, ~m? +# 35| mu35_4408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4403 +# 35| r35_4409(bool) = Constant[0] : +# 35| v35_4410(void) = ConditionalBranch : r35_4409 #-----| False -> Block 316 #-----| True (back edge) -> Block 315 -# 964| Block 316 -# 964| r964_1(glval) = VariableAddress[x315] : -# 964| mu964_2(String) = Uninitialized[x315] : &:r964_1 -# 964| r964_3(glval) = FunctionAddress[String] : -# 964| v964_4(void) = Call[String] : func:r964_3, this:r964_1 -# 964| mu964_5(unknown) = ^CallSideEffect : ~m? -# 964| mu964_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r964_1 -# 965| r965_1(glval) = VariableAddress[x315] : -# 965| r965_2(glval) = FunctionAddress[~String] : -# 965| v965_3(void) = Call[~String] : func:r965_2, this:r965_1 -# 965| mu965_4(unknown) = ^CallSideEffect : ~m? -# 965| v965_5(void) = ^IndirectReadSideEffect[-1] : &:r965_1, ~m? -# 965| mu965_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r965_1 -# 965| r965_7(bool) = Constant[0] : -# 965| v965_8(void) = ConditionalBranch : r965_7 +# 35| Block 316 +# 35| r35_4411(glval) = VariableAddress[x315] : +# 35| mu35_4412(String) = Uninitialized[x315] : &:r35_4411 +# 35| r35_4413(glval) = FunctionAddress[String] : +# 35| v35_4414(void) = Call[String] : func:r35_4413, this:r35_4411 +# 35| mu35_4415(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4411 +# 35| r35_4417(glval) = VariableAddress[x315] : +# 35| r35_4418(glval) = FunctionAddress[~String] : +# 35| v35_4419(void) = Call[~String] : func:r35_4418, this:r35_4417 +# 35| mu35_4420(unknown) = ^CallSideEffect : ~m? +# 35| v35_4421(void) = ^IndirectReadSideEffect[-1] : &:r35_4417, ~m? +# 35| mu35_4422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4417 +# 35| r35_4423(bool) = Constant[0] : +# 35| v35_4424(void) = ConditionalBranch : r35_4423 #-----| False -> Block 317 #-----| True (back edge) -> Block 316 -# 967| Block 317 -# 967| r967_1(glval) = VariableAddress[x316] : -# 967| mu967_2(String) = Uninitialized[x316] : &:r967_1 -# 967| r967_3(glval) = FunctionAddress[String] : -# 967| v967_4(void) = Call[String] : func:r967_3, this:r967_1 -# 967| mu967_5(unknown) = ^CallSideEffect : ~m? -# 967| mu967_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r967_1 -# 968| r968_1(glval) = VariableAddress[x316] : -# 968| r968_2(glval) = FunctionAddress[~String] : -# 968| v968_3(void) = Call[~String] : func:r968_2, this:r968_1 -# 968| mu968_4(unknown) = ^CallSideEffect : ~m? -# 968| v968_5(void) = ^IndirectReadSideEffect[-1] : &:r968_1, ~m? -# 968| mu968_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r968_1 -# 968| r968_7(bool) = Constant[0] : -# 968| v968_8(void) = ConditionalBranch : r968_7 +# 35| Block 317 +# 35| r35_4425(glval) = VariableAddress[x316] : +# 35| mu35_4426(String) = Uninitialized[x316] : &:r35_4425 +# 35| r35_4427(glval) = FunctionAddress[String] : +# 35| v35_4428(void) = Call[String] : func:r35_4427, this:r35_4425 +# 35| mu35_4429(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4425 +# 35| r35_4431(glval) = VariableAddress[x316] : +# 35| r35_4432(glval) = FunctionAddress[~String] : +# 35| v35_4433(void) = Call[~String] : func:r35_4432, this:r35_4431 +# 35| mu35_4434(unknown) = ^CallSideEffect : ~m? +# 35| v35_4435(void) = ^IndirectReadSideEffect[-1] : &:r35_4431, ~m? +# 35| mu35_4436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4431 +# 35| r35_4437(bool) = Constant[0] : +# 35| v35_4438(void) = ConditionalBranch : r35_4437 #-----| False -> Block 318 #-----| True (back edge) -> Block 317 -# 970| Block 318 -# 970| r970_1(glval) = VariableAddress[x317] : -# 970| mu970_2(String) = Uninitialized[x317] : &:r970_1 -# 970| r970_3(glval) = FunctionAddress[String] : -# 970| v970_4(void) = Call[String] : func:r970_3, this:r970_1 -# 970| mu970_5(unknown) = ^CallSideEffect : ~m? -# 970| mu970_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r970_1 -# 971| r971_1(glval) = VariableAddress[x317] : -# 971| r971_2(glval) = FunctionAddress[~String] : -# 971| v971_3(void) = Call[~String] : func:r971_2, this:r971_1 -# 971| mu971_4(unknown) = ^CallSideEffect : ~m? -# 971| v971_5(void) = ^IndirectReadSideEffect[-1] : &:r971_1, ~m? -# 971| mu971_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r971_1 -# 971| r971_7(bool) = Constant[0] : -# 971| v971_8(void) = ConditionalBranch : r971_7 +# 35| Block 318 +# 35| r35_4439(glval) = VariableAddress[x317] : +# 35| mu35_4440(String) = Uninitialized[x317] : &:r35_4439 +# 35| r35_4441(glval) = FunctionAddress[String] : +# 35| v35_4442(void) = Call[String] : func:r35_4441, this:r35_4439 +# 35| mu35_4443(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4439 +# 35| r35_4445(glval) = VariableAddress[x317] : +# 35| r35_4446(glval) = FunctionAddress[~String] : +# 35| v35_4447(void) = Call[~String] : func:r35_4446, this:r35_4445 +# 35| mu35_4448(unknown) = ^CallSideEffect : ~m? +# 35| v35_4449(void) = ^IndirectReadSideEffect[-1] : &:r35_4445, ~m? +# 35| mu35_4450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4445 +# 35| r35_4451(bool) = Constant[0] : +# 35| v35_4452(void) = ConditionalBranch : r35_4451 #-----| False -> Block 319 #-----| True (back edge) -> Block 318 -# 973| Block 319 -# 973| r973_1(glval) = VariableAddress[x318] : -# 973| mu973_2(String) = Uninitialized[x318] : &:r973_1 -# 973| r973_3(glval) = FunctionAddress[String] : -# 973| v973_4(void) = Call[String] : func:r973_3, this:r973_1 -# 973| mu973_5(unknown) = ^CallSideEffect : ~m? -# 973| mu973_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r973_1 -# 974| r974_1(glval) = VariableAddress[x318] : -# 974| r974_2(glval) = FunctionAddress[~String] : -# 974| v974_3(void) = Call[~String] : func:r974_2, this:r974_1 -# 974| mu974_4(unknown) = ^CallSideEffect : ~m? -# 974| v974_5(void) = ^IndirectReadSideEffect[-1] : &:r974_1, ~m? -# 974| mu974_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r974_1 -# 974| r974_7(bool) = Constant[0] : -# 974| v974_8(void) = ConditionalBranch : r974_7 +# 35| Block 319 +# 35| r35_4453(glval) = VariableAddress[x318] : +# 35| mu35_4454(String) = Uninitialized[x318] : &:r35_4453 +# 35| r35_4455(glval) = FunctionAddress[String] : +# 35| v35_4456(void) = Call[String] : func:r35_4455, this:r35_4453 +# 35| mu35_4457(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4453 +# 35| r35_4459(glval) = VariableAddress[x318] : +# 35| r35_4460(glval) = FunctionAddress[~String] : +# 35| v35_4461(void) = Call[~String] : func:r35_4460, this:r35_4459 +# 35| mu35_4462(unknown) = ^CallSideEffect : ~m? +# 35| v35_4463(void) = ^IndirectReadSideEffect[-1] : &:r35_4459, ~m? +# 35| mu35_4464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4459 +# 35| r35_4465(bool) = Constant[0] : +# 35| v35_4466(void) = ConditionalBranch : r35_4465 #-----| False -> Block 320 #-----| True (back edge) -> Block 319 -# 976| Block 320 -# 976| r976_1(glval) = VariableAddress[x319] : -# 976| mu976_2(String) = Uninitialized[x319] : &:r976_1 -# 976| r976_3(glval) = FunctionAddress[String] : -# 976| v976_4(void) = Call[String] : func:r976_3, this:r976_1 -# 976| mu976_5(unknown) = ^CallSideEffect : ~m? -# 976| mu976_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r976_1 -# 977| r977_1(glval) = VariableAddress[x319] : -# 977| r977_2(glval) = FunctionAddress[~String] : -# 977| v977_3(void) = Call[~String] : func:r977_2, this:r977_1 -# 977| mu977_4(unknown) = ^CallSideEffect : ~m? -# 977| v977_5(void) = ^IndirectReadSideEffect[-1] : &:r977_1, ~m? -# 977| mu977_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r977_1 -# 977| r977_7(bool) = Constant[0] : -# 977| v977_8(void) = ConditionalBranch : r977_7 +# 35| Block 320 +# 35| r35_4467(glval) = VariableAddress[x319] : +# 35| mu35_4468(String) = Uninitialized[x319] : &:r35_4467 +# 35| r35_4469(glval) = FunctionAddress[String] : +# 35| v35_4470(void) = Call[String] : func:r35_4469, this:r35_4467 +# 35| mu35_4471(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4467 +# 35| r35_4473(glval) = VariableAddress[x319] : +# 35| r35_4474(glval) = FunctionAddress[~String] : +# 35| v35_4475(void) = Call[~String] : func:r35_4474, this:r35_4473 +# 35| mu35_4476(unknown) = ^CallSideEffect : ~m? +# 35| v35_4477(void) = ^IndirectReadSideEffect[-1] : &:r35_4473, ~m? +# 35| mu35_4478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4473 +# 35| r35_4479(bool) = Constant[0] : +# 35| v35_4480(void) = ConditionalBranch : r35_4479 #-----| False -> Block 321 #-----| True (back edge) -> Block 320 -# 979| Block 321 -# 979| r979_1(glval) = VariableAddress[x320] : -# 979| mu979_2(String) = Uninitialized[x320] : &:r979_1 -# 979| r979_3(glval) = FunctionAddress[String] : -# 979| v979_4(void) = Call[String] : func:r979_3, this:r979_1 -# 979| mu979_5(unknown) = ^CallSideEffect : ~m? -# 979| mu979_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r979_1 -# 980| r980_1(glval) = VariableAddress[x320] : -# 980| r980_2(glval) = FunctionAddress[~String] : -# 980| v980_3(void) = Call[~String] : func:r980_2, this:r980_1 -# 980| mu980_4(unknown) = ^CallSideEffect : ~m? -# 980| v980_5(void) = ^IndirectReadSideEffect[-1] : &:r980_1, ~m? -# 980| mu980_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r980_1 -# 980| r980_7(bool) = Constant[0] : -# 980| v980_8(void) = ConditionalBranch : r980_7 +# 35| Block 321 +# 35| r35_4481(glval) = VariableAddress[x320] : +# 35| mu35_4482(String) = Uninitialized[x320] : &:r35_4481 +# 35| r35_4483(glval) = FunctionAddress[String] : +# 35| v35_4484(void) = Call[String] : func:r35_4483, this:r35_4481 +# 35| mu35_4485(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4481 +# 35| r35_4487(glval) = VariableAddress[x320] : +# 35| r35_4488(glval) = FunctionAddress[~String] : +# 35| v35_4489(void) = Call[~String] : func:r35_4488, this:r35_4487 +# 35| mu35_4490(unknown) = ^CallSideEffect : ~m? +# 35| v35_4491(void) = ^IndirectReadSideEffect[-1] : &:r35_4487, ~m? +# 35| mu35_4492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4487 +# 35| r35_4493(bool) = Constant[0] : +# 35| v35_4494(void) = ConditionalBranch : r35_4493 #-----| False -> Block 322 #-----| True (back edge) -> Block 321 -# 982| Block 322 -# 982| r982_1(glval) = VariableAddress[x321] : -# 982| mu982_2(String) = Uninitialized[x321] : &:r982_1 -# 982| r982_3(glval) = FunctionAddress[String] : -# 982| v982_4(void) = Call[String] : func:r982_3, this:r982_1 -# 982| mu982_5(unknown) = ^CallSideEffect : ~m? -# 982| mu982_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r982_1 -# 983| r983_1(glval) = VariableAddress[x321] : -# 983| r983_2(glval) = FunctionAddress[~String] : -# 983| v983_3(void) = Call[~String] : func:r983_2, this:r983_1 -# 983| mu983_4(unknown) = ^CallSideEffect : ~m? -# 983| v983_5(void) = ^IndirectReadSideEffect[-1] : &:r983_1, ~m? -# 983| mu983_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r983_1 -# 983| r983_7(bool) = Constant[0] : -# 983| v983_8(void) = ConditionalBranch : r983_7 +# 35| Block 322 +# 35| r35_4495(glval) = VariableAddress[x321] : +# 35| mu35_4496(String) = Uninitialized[x321] : &:r35_4495 +# 35| r35_4497(glval) = FunctionAddress[String] : +# 35| v35_4498(void) = Call[String] : func:r35_4497, this:r35_4495 +# 35| mu35_4499(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4495 +# 35| r35_4501(glval) = VariableAddress[x321] : +# 35| r35_4502(glval) = FunctionAddress[~String] : +# 35| v35_4503(void) = Call[~String] : func:r35_4502, this:r35_4501 +# 35| mu35_4504(unknown) = ^CallSideEffect : ~m? +# 35| v35_4505(void) = ^IndirectReadSideEffect[-1] : &:r35_4501, ~m? +# 35| mu35_4506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4501 +# 35| r35_4507(bool) = Constant[0] : +# 35| v35_4508(void) = ConditionalBranch : r35_4507 #-----| False -> Block 323 #-----| True (back edge) -> Block 322 -# 985| Block 323 -# 985| r985_1(glval) = VariableAddress[x322] : -# 985| mu985_2(String) = Uninitialized[x322] : &:r985_1 -# 985| r985_3(glval) = FunctionAddress[String] : -# 985| v985_4(void) = Call[String] : func:r985_3, this:r985_1 -# 985| mu985_5(unknown) = ^CallSideEffect : ~m? -# 985| mu985_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r985_1 -# 986| r986_1(glval) = VariableAddress[x322] : -# 986| r986_2(glval) = FunctionAddress[~String] : -# 986| v986_3(void) = Call[~String] : func:r986_2, this:r986_1 -# 986| mu986_4(unknown) = ^CallSideEffect : ~m? -# 986| v986_5(void) = ^IndirectReadSideEffect[-1] : &:r986_1, ~m? -# 986| mu986_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r986_1 -# 986| r986_7(bool) = Constant[0] : -# 986| v986_8(void) = ConditionalBranch : r986_7 +# 35| Block 323 +# 35| r35_4509(glval) = VariableAddress[x322] : +# 35| mu35_4510(String) = Uninitialized[x322] : &:r35_4509 +# 35| r35_4511(glval) = FunctionAddress[String] : +# 35| v35_4512(void) = Call[String] : func:r35_4511, this:r35_4509 +# 35| mu35_4513(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4509 +# 35| r35_4515(glval) = VariableAddress[x322] : +# 35| r35_4516(glval) = FunctionAddress[~String] : +# 35| v35_4517(void) = Call[~String] : func:r35_4516, this:r35_4515 +# 35| mu35_4518(unknown) = ^CallSideEffect : ~m? +# 35| v35_4519(void) = ^IndirectReadSideEffect[-1] : &:r35_4515, ~m? +# 35| mu35_4520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4515 +# 35| r35_4521(bool) = Constant[0] : +# 35| v35_4522(void) = ConditionalBranch : r35_4521 #-----| False -> Block 324 #-----| True (back edge) -> Block 323 -# 988| Block 324 -# 988| r988_1(glval) = VariableAddress[x323] : -# 988| mu988_2(String) = Uninitialized[x323] : &:r988_1 -# 988| r988_3(glval) = FunctionAddress[String] : -# 988| v988_4(void) = Call[String] : func:r988_3, this:r988_1 -# 988| mu988_5(unknown) = ^CallSideEffect : ~m? -# 988| mu988_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r988_1 -# 989| r989_1(glval) = VariableAddress[x323] : -# 989| r989_2(glval) = FunctionAddress[~String] : -# 989| v989_3(void) = Call[~String] : func:r989_2, this:r989_1 -# 989| mu989_4(unknown) = ^CallSideEffect : ~m? -# 989| v989_5(void) = ^IndirectReadSideEffect[-1] : &:r989_1, ~m? -# 989| mu989_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r989_1 -# 989| r989_7(bool) = Constant[0] : -# 989| v989_8(void) = ConditionalBranch : r989_7 +# 35| Block 324 +# 35| r35_4523(glval) = VariableAddress[x323] : +# 35| mu35_4524(String) = Uninitialized[x323] : &:r35_4523 +# 35| r35_4525(glval) = FunctionAddress[String] : +# 35| v35_4526(void) = Call[String] : func:r35_4525, this:r35_4523 +# 35| mu35_4527(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4523 +# 35| r35_4529(glval) = VariableAddress[x323] : +# 35| r35_4530(glval) = FunctionAddress[~String] : +# 35| v35_4531(void) = Call[~String] : func:r35_4530, this:r35_4529 +# 35| mu35_4532(unknown) = ^CallSideEffect : ~m? +# 35| v35_4533(void) = ^IndirectReadSideEffect[-1] : &:r35_4529, ~m? +# 35| mu35_4534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4529 +# 35| r35_4535(bool) = Constant[0] : +# 35| v35_4536(void) = ConditionalBranch : r35_4535 #-----| False -> Block 325 #-----| True (back edge) -> Block 324 -# 991| Block 325 -# 991| r991_1(glval) = VariableAddress[x324] : -# 991| mu991_2(String) = Uninitialized[x324] : &:r991_1 -# 991| r991_3(glval) = FunctionAddress[String] : -# 991| v991_4(void) = Call[String] : func:r991_3, this:r991_1 -# 991| mu991_5(unknown) = ^CallSideEffect : ~m? -# 991| mu991_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r991_1 -# 992| r992_1(glval) = VariableAddress[x324] : -# 992| r992_2(glval) = FunctionAddress[~String] : -# 992| v992_3(void) = Call[~String] : func:r992_2, this:r992_1 -# 992| mu992_4(unknown) = ^CallSideEffect : ~m? -# 992| v992_5(void) = ^IndirectReadSideEffect[-1] : &:r992_1, ~m? -# 992| mu992_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r992_1 -# 992| r992_7(bool) = Constant[0] : -# 992| v992_8(void) = ConditionalBranch : r992_7 +# 35| Block 325 +# 35| r35_4537(glval) = VariableAddress[x324] : +# 35| mu35_4538(String) = Uninitialized[x324] : &:r35_4537 +# 35| r35_4539(glval) = FunctionAddress[String] : +# 35| v35_4540(void) = Call[String] : func:r35_4539, this:r35_4537 +# 35| mu35_4541(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4537 +# 35| r35_4543(glval) = VariableAddress[x324] : +# 35| r35_4544(glval) = FunctionAddress[~String] : +# 35| v35_4545(void) = Call[~String] : func:r35_4544, this:r35_4543 +# 35| mu35_4546(unknown) = ^CallSideEffect : ~m? +# 35| v35_4547(void) = ^IndirectReadSideEffect[-1] : &:r35_4543, ~m? +# 35| mu35_4548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4543 +# 35| r35_4549(bool) = Constant[0] : +# 35| v35_4550(void) = ConditionalBranch : r35_4549 #-----| False -> Block 326 #-----| True (back edge) -> Block 325 -# 994| Block 326 -# 994| r994_1(glval) = VariableAddress[x325] : -# 994| mu994_2(String) = Uninitialized[x325] : &:r994_1 -# 994| r994_3(glval) = FunctionAddress[String] : -# 994| v994_4(void) = Call[String] : func:r994_3, this:r994_1 -# 994| mu994_5(unknown) = ^CallSideEffect : ~m? -# 994| mu994_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r994_1 -# 995| r995_1(glval) = VariableAddress[x325] : -# 995| r995_2(glval) = FunctionAddress[~String] : -# 995| v995_3(void) = Call[~String] : func:r995_2, this:r995_1 -# 995| mu995_4(unknown) = ^CallSideEffect : ~m? -# 995| v995_5(void) = ^IndirectReadSideEffect[-1] : &:r995_1, ~m? -# 995| mu995_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r995_1 -# 995| r995_7(bool) = Constant[0] : -# 995| v995_8(void) = ConditionalBranch : r995_7 +# 35| Block 326 +# 35| r35_4551(glval) = VariableAddress[x325] : +# 35| mu35_4552(String) = Uninitialized[x325] : &:r35_4551 +# 35| r35_4553(glval) = FunctionAddress[String] : +# 35| v35_4554(void) = Call[String] : func:r35_4553, this:r35_4551 +# 35| mu35_4555(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4551 +# 35| r35_4557(glval) = VariableAddress[x325] : +# 35| r35_4558(glval) = FunctionAddress[~String] : +# 35| v35_4559(void) = Call[~String] : func:r35_4558, this:r35_4557 +# 35| mu35_4560(unknown) = ^CallSideEffect : ~m? +# 35| v35_4561(void) = ^IndirectReadSideEffect[-1] : &:r35_4557, ~m? +# 35| mu35_4562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4557 +# 35| r35_4563(bool) = Constant[0] : +# 35| v35_4564(void) = ConditionalBranch : r35_4563 #-----| False -> Block 327 #-----| True (back edge) -> Block 326 -# 997| Block 327 -# 997| r997_1(glval) = VariableAddress[x326] : -# 997| mu997_2(String) = Uninitialized[x326] : &:r997_1 -# 997| r997_3(glval) = FunctionAddress[String] : -# 997| v997_4(void) = Call[String] : func:r997_3, this:r997_1 -# 997| mu997_5(unknown) = ^CallSideEffect : ~m? -# 997| mu997_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r997_1 -# 998| r998_1(glval) = VariableAddress[x326] : -# 998| r998_2(glval) = FunctionAddress[~String] : -# 998| v998_3(void) = Call[~String] : func:r998_2, this:r998_1 -# 998| mu998_4(unknown) = ^CallSideEffect : ~m? -# 998| v998_5(void) = ^IndirectReadSideEffect[-1] : &:r998_1, ~m? -# 998| mu998_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r998_1 -# 998| r998_7(bool) = Constant[0] : -# 998| v998_8(void) = ConditionalBranch : r998_7 +# 35| Block 327 +# 35| r35_4565(glval) = VariableAddress[x326] : +# 35| mu35_4566(String) = Uninitialized[x326] : &:r35_4565 +# 35| r35_4567(glval) = FunctionAddress[String] : +# 35| v35_4568(void) = Call[String] : func:r35_4567, this:r35_4565 +# 35| mu35_4569(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4565 +# 35| r35_4571(glval) = VariableAddress[x326] : +# 35| r35_4572(glval) = FunctionAddress[~String] : +# 35| v35_4573(void) = Call[~String] : func:r35_4572, this:r35_4571 +# 35| mu35_4574(unknown) = ^CallSideEffect : ~m? +# 35| v35_4575(void) = ^IndirectReadSideEffect[-1] : &:r35_4571, ~m? +# 35| mu35_4576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4571 +# 35| r35_4577(bool) = Constant[0] : +# 35| v35_4578(void) = ConditionalBranch : r35_4577 #-----| False -> Block 328 #-----| True (back edge) -> Block 327 -# 1000| Block 328 -# 1000| r1000_1(glval) = VariableAddress[x327] : -# 1000| mu1000_2(String) = Uninitialized[x327] : &:r1000_1 -# 1000| r1000_3(glval) = FunctionAddress[String] : -# 1000| v1000_4(void) = Call[String] : func:r1000_3, this:r1000_1 -# 1000| mu1000_5(unknown) = ^CallSideEffect : ~m? -# 1000| mu1000_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1000_1 -# 1001| r1001_1(glval) = VariableAddress[x327] : -# 1001| r1001_2(glval) = FunctionAddress[~String] : -# 1001| v1001_3(void) = Call[~String] : func:r1001_2, this:r1001_1 -# 1001| mu1001_4(unknown) = ^CallSideEffect : ~m? -# 1001| v1001_5(void) = ^IndirectReadSideEffect[-1] : &:r1001_1, ~m? -# 1001| mu1001_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1001_1 -# 1001| r1001_7(bool) = Constant[0] : -# 1001| v1001_8(void) = ConditionalBranch : r1001_7 +# 35| Block 328 +# 35| r35_4579(glval) = VariableAddress[x327] : +# 35| mu35_4580(String) = Uninitialized[x327] : &:r35_4579 +# 35| r35_4581(glval) = FunctionAddress[String] : +# 35| v35_4582(void) = Call[String] : func:r35_4581, this:r35_4579 +# 35| mu35_4583(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4579 +# 35| r35_4585(glval) = VariableAddress[x327] : +# 35| r35_4586(glval) = FunctionAddress[~String] : +# 35| v35_4587(void) = Call[~String] : func:r35_4586, this:r35_4585 +# 35| mu35_4588(unknown) = ^CallSideEffect : ~m? +# 35| v35_4589(void) = ^IndirectReadSideEffect[-1] : &:r35_4585, ~m? +# 35| mu35_4590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4585 +# 35| r35_4591(bool) = Constant[0] : +# 35| v35_4592(void) = ConditionalBranch : r35_4591 #-----| False -> Block 329 #-----| True (back edge) -> Block 328 -# 1003| Block 329 -# 1003| r1003_1(glval) = VariableAddress[x328] : -# 1003| mu1003_2(String) = Uninitialized[x328] : &:r1003_1 -# 1003| r1003_3(glval) = FunctionAddress[String] : -# 1003| v1003_4(void) = Call[String] : func:r1003_3, this:r1003_1 -# 1003| mu1003_5(unknown) = ^CallSideEffect : ~m? -# 1003| mu1003_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1003_1 -# 1004| r1004_1(glval) = VariableAddress[x328] : -# 1004| r1004_2(glval) = FunctionAddress[~String] : -# 1004| v1004_3(void) = Call[~String] : func:r1004_2, this:r1004_1 -# 1004| mu1004_4(unknown) = ^CallSideEffect : ~m? -# 1004| v1004_5(void) = ^IndirectReadSideEffect[-1] : &:r1004_1, ~m? -# 1004| mu1004_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1004_1 -# 1004| r1004_7(bool) = Constant[0] : -# 1004| v1004_8(void) = ConditionalBranch : r1004_7 +# 35| Block 329 +# 35| r35_4593(glval) = VariableAddress[x328] : +# 35| mu35_4594(String) = Uninitialized[x328] : &:r35_4593 +# 35| r35_4595(glval) = FunctionAddress[String] : +# 35| v35_4596(void) = Call[String] : func:r35_4595, this:r35_4593 +# 35| mu35_4597(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4593 +# 35| r35_4599(glval) = VariableAddress[x328] : +# 35| r35_4600(glval) = FunctionAddress[~String] : +# 35| v35_4601(void) = Call[~String] : func:r35_4600, this:r35_4599 +# 35| mu35_4602(unknown) = ^CallSideEffect : ~m? +# 35| v35_4603(void) = ^IndirectReadSideEffect[-1] : &:r35_4599, ~m? +# 35| mu35_4604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4599 +# 35| r35_4605(bool) = Constant[0] : +# 35| v35_4606(void) = ConditionalBranch : r35_4605 #-----| False -> Block 330 #-----| True (back edge) -> Block 329 -# 1006| Block 330 -# 1006| r1006_1(glval) = VariableAddress[x329] : -# 1006| mu1006_2(String) = Uninitialized[x329] : &:r1006_1 -# 1006| r1006_3(glval) = FunctionAddress[String] : -# 1006| v1006_4(void) = Call[String] : func:r1006_3, this:r1006_1 -# 1006| mu1006_5(unknown) = ^CallSideEffect : ~m? -# 1006| mu1006_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1006_1 -# 1007| r1007_1(glval) = VariableAddress[x329] : -# 1007| r1007_2(glval) = FunctionAddress[~String] : -# 1007| v1007_3(void) = Call[~String] : func:r1007_2, this:r1007_1 -# 1007| mu1007_4(unknown) = ^CallSideEffect : ~m? -# 1007| v1007_5(void) = ^IndirectReadSideEffect[-1] : &:r1007_1, ~m? -# 1007| mu1007_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1007_1 -# 1007| r1007_7(bool) = Constant[0] : -# 1007| v1007_8(void) = ConditionalBranch : r1007_7 +# 35| Block 330 +# 35| r35_4607(glval) = VariableAddress[x329] : +# 35| mu35_4608(String) = Uninitialized[x329] : &:r35_4607 +# 35| r35_4609(glval) = FunctionAddress[String] : +# 35| v35_4610(void) = Call[String] : func:r35_4609, this:r35_4607 +# 35| mu35_4611(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4607 +# 35| r35_4613(glval) = VariableAddress[x329] : +# 35| r35_4614(glval) = FunctionAddress[~String] : +# 35| v35_4615(void) = Call[~String] : func:r35_4614, this:r35_4613 +# 35| mu35_4616(unknown) = ^CallSideEffect : ~m? +# 35| v35_4617(void) = ^IndirectReadSideEffect[-1] : &:r35_4613, ~m? +# 35| mu35_4618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4613 +# 35| r35_4619(bool) = Constant[0] : +# 35| v35_4620(void) = ConditionalBranch : r35_4619 #-----| False -> Block 331 #-----| True (back edge) -> Block 330 -# 1009| Block 331 -# 1009| r1009_1(glval) = VariableAddress[x330] : -# 1009| mu1009_2(String) = Uninitialized[x330] : &:r1009_1 -# 1009| r1009_3(glval) = FunctionAddress[String] : -# 1009| v1009_4(void) = Call[String] : func:r1009_3, this:r1009_1 -# 1009| mu1009_5(unknown) = ^CallSideEffect : ~m? -# 1009| mu1009_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1009_1 -# 1010| r1010_1(glval) = VariableAddress[x330] : -# 1010| r1010_2(glval) = FunctionAddress[~String] : -# 1010| v1010_3(void) = Call[~String] : func:r1010_2, this:r1010_1 -# 1010| mu1010_4(unknown) = ^CallSideEffect : ~m? -# 1010| v1010_5(void) = ^IndirectReadSideEffect[-1] : &:r1010_1, ~m? -# 1010| mu1010_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1010_1 -# 1010| r1010_7(bool) = Constant[0] : -# 1010| v1010_8(void) = ConditionalBranch : r1010_7 +# 35| Block 331 +# 35| r35_4621(glval) = VariableAddress[x330] : +# 35| mu35_4622(String) = Uninitialized[x330] : &:r35_4621 +# 35| r35_4623(glval) = FunctionAddress[String] : +# 35| v35_4624(void) = Call[String] : func:r35_4623, this:r35_4621 +# 35| mu35_4625(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4621 +# 35| r35_4627(glval) = VariableAddress[x330] : +# 35| r35_4628(glval) = FunctionAddress[~String] : +# 35| v35_4629(void) = Call[~String] : func:r35_4628, this:r35_4627 +# 35| mu35_4630(unknown) = ^CallSideEffect : ~m? +# 35| v35_4631(void) = ^IndirectReadSideEffect[-1] : &:r35_4627, ~m? +# 35| mu35_4632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4627 +# 35| r35_4633(bool) = Constant[0] : +# 35| v35_4634(void) = ConditionalBranch : r35_4633 #-----| False -> Block 332 #-----| True (back edge) -> Block 331 -# 1012| Block 332 -# 1012| r1012_1(glval) = VariableAddress[x331] : -# 1012| mu1012_2(String) = Uninitialized[x331] : &:r1012_1 -# 1012| r1012_3(glval) = FunctionAddress[String] : -# 1012| v1012_4(void) = Call[String] : func:r1012_3, this:r1012_1 -# 1012| mu1012_5(unknown) = ^CallSideEffect : ~m? -# 1012| mu1012_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1012_1 -# 1013| r1013_1(glval) = VariableAddress[x331] : -# 1013| r1013_2(glval) = FunctionAddress[~String] : -# 1013| v1013_3(void) = Call[~String] : func:r1013_2, this:r1013_1 -# 1013| mu1013_4(unknown) = ^CallSideEffect : ~m? -# 1013| v1013_5(void) = ^IndirectReadSideEffect[-1] : &:r1013_1, ~m? -# 1013| mu1013_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1013_1 -# 1013| r1013_7(bool) = Constant[0] : -# 1013| v1013_8(void) = ConditionalBranch : r1013_7 +# 35| Block 332 +# 35| r35_4635(glval) = VariableAddress[x331] : +# 35| mu35_4636(String) = Uninitialized[x331] : &:r35_4635 +# 35| r35_4637(glval) = FunctionAddress[String] : +# 35| v35_4638(void) = Call[String] : func:r35_4637, this:r35_4635 +# 35| mu35_4639(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4635 +# 35| r35_4641(glval) = VariableAddress[x331] : +# 35| r35_4642(glval) = FunctionAddress[~String] : +# 35| v35_4643(void) = Call[~String] : func:r35_4642, this:r35_4641 +# 35| mu35_4644(unknown) = ^CallSideEffect : ~m? +# 35| v35_4645(void) = ^IndirectReadSideEffect[-1] : &:r35_4641, ~m? +# 35| mu35_4646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4641 +# 35| r35_4647(bool) = Constant[0] : +# 35| v35_4648(void) = ConditionalBranch : r35_4647 #-----| False -> Block 333 #-----| True (back edge) -> Block 332 -# 1015| Block 333 -# 1015| r1015_1(glval) = VariableAddress[x332] : -# 1015| mu1015_2(String) = Uninitialized[x332] : &:r1015_1 -# 1015| r1015_3(glval) = FunctionAddress[String] : -# 1015| v1015_4(void) = Call[String] : func:r1015_3, this:r1015_1 -# 1015| mu1015_5(unknown) = ^CallSideEffect : ~m? -# 1015| mu1015_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1015_1 -# 1016| r1016_1(glval) = VariableAddress[x332] : -# 1016| r1016_2(glval) = FunctionAddress[~String] : -# 1016| v1016_3(void) = Call[~String] : func:r1016_2, this:r1016_1 -# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? -# 1016| v1016_5(void) = ^IndirectReadSideEffect[-1] : &:r1016_1, ~m? -# 1016| mu1016_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1016_1 -# 1016| r1016_7(bool) = Constant[0] : -# 1016| v1016_8(void) = ConditionalBranch : r1016_7 +# 35| Block 333 +# 35| r35_4649(glval) = VariableAddress[x332] : +# 35| mu35_4650(String) = Uninitialized[x332] : &:r35_4649 +# 35| r35_4651(glval) = FunctionAddress[String] : +# 35| v35_4652(void) = Call[String] : func:r35_4651, this:r35_4649 +# 35| mu35_4653(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4649 +# 35| r35_4655(glval) = VariableAddress[x332] : +# 35| r35_4656(glval) = FunctionAddress[~String] : +# 35| v35_4657(void) = Call[~String] : func:r35_4656, this:r35_4655 +# 35| mu35_4658(unknown) = ^CallSideEffect : ~m? +# 35| v35_4659(void) = ^IndirectReadSideEffect[-1] : &:r35_4655, ~m? +# 35| mu35_4660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4655 +# 35| r35_4661(bool) = Constant[0] : +# 35| v35_4662(void) = ConditionalBranch : r35_4661 #-----| False -> Block 334 #-----| True (back edge) -> Block 333 -# 1018| Block 334 -# 1018| r1018_1(glval) = VariableAddress[x333] : -# 1018| mu1018_2(String) = Uninitialized[x333] : &:r1018_1 -# 1018| r1018_3(glval) = FunctionAddress[String] : -# 1018| v1018_4(void) = Call[String] : func:r1018_3, this:r1018_1 -# 1018| mu1018_5(unknown) = ^CallSideEffect : ~m? -# 1018| mu1018_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1018_1 -# 1019| r1019_1(glval) = VariableAddress[x333] : -# 1019| r1019_2(glval) = FunctionAddress[~String] : -# 1019| v1019_3(void) = Call[~String] : func:r1019_2, this:r1019_1 -# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? -# 1019| v1019_5(void) = ^IndirectReadSideEffect[-1] : &:r1019_1, ~m? -# 1019| mu1019_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1019_1 -# 1019| r1019_7(bool) = Constant[0] : -# 1019| v1019_8(void) = ConditionalBranch : r1019_7 +# 35| Block 334 +# 35| r35_4663(glval) = VariableAddress[x333] : +# 35| mu35_4664(String) = Uninitialized[x333] : &:r35_4663 +# 35| r35_4665(glval) = FunctionAddress[String] : +# 35| v35_4666(void) = Call[String] : func:r35_4665, this:r35_4663 +# 35| mu35_4667(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4663 +# 35| r35_4669(glval) = VariableAddress[x333] : +# 35| r35_4670(glval) = FunctionAddress[~String] : +# 35| v35_4671(void) = Call[~String] : func:r35_4670, this:r35_4669 +# 35| mu35_4672(unknown) = ^CallSideEffect : ~m? +# 35| v35_4673(void) = ^IndirectReadSideEffect[-1] : &:r35_4669, ~m? +# 35| mu35_4674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4669 +# 35| r35_4675(bool) = Constant[0] : +# 35| v35_4676(void) = ConditionalBranch : r35_4675 #-----| False -> Block 335 #-----| True (back edge) -> Block 334 -# 1021| Block 335 -# 1021| r1021_1(glval) = VariableAddress[x334] : -# 1021| mu1021_2(String) = Uninitialized[x334] : &:r1021_1 -# 1021| r1021_3(glval) = FunctionAddress[String] : -# 1021| v1021_4(void) = Call[String] : func:r1021_3, this:r1021_1 -# 1021| mu1021_5(unknown) = ^CallSideEffect : ~m? -# 1021| mu1021_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1021_1 -# 1022| r1022_1(glval) = VariableAddress[x334] : -# 1022| r1022_2(glval) = FunctionAddress[~String] : -# 1022| v1022_3(void) = Call[~String] : func:r1022_2, this:r1022_1 -# 1022| mu1022_4(unknown) = ^CallSideEffect : ~m? -# 1022| v1022_5(void) = ^IndirectReadSideEffect[-1] : &:r1022_1, ~m? -# 1022| mu1022_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1022_1 -# 1022| r1022_7(bool) = Constant[0] : -# 1022| v1022_8(void) = ConditionalBranch : r1022_7 +# 35| Block 335 +# 35| r35_4677(glval) = VariableAddress[x334] : +# 35| mu35_4678(String) = Uninitialized[x334] : &:r35_4677 +# 35| r35_4679(glval) = FunctionAddress[String] : +# 35| v35_4680(void) = Call[String] : func:r35_4679, this:r35_4677 +# 35| mu35_4681(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4677 +# 35| r35_4683(glval) = VariableAddress[x334] : +# 35| r35_4684(glval) = FunctionAddress[~String] : +# 35| v35_4685(void) = Call[~String] : func:r35_4684, this:r35_4683 +# 35| mu35_4686(unknown) = ^CallSideEffect : ~m? +# 35| v35_4687(void) = ^IndirectReadSideEffect[-1] : &:r35_4683, ~m? +# 35| mu35_4688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4683 +# 35| r35_4689(bool) = Constant[0] : +# 35| v35_4690(void) = ConditionalBranch : r35_4689 #-----| False -> Block 336 #-----| True (back edge) -> Block 335 -# 1024| Block 336 -# 1024| r1024_1(glval) = VariableAddress[x335] : -# 1024| mu1024_2(String) = Uninitialized[x335] : &:r1024_1 -# 1024| r1024_3(glval) = FunctionAddress[String] : -# 1024| v1024_4(void) = Call[String] : func:r1024_3, this:r1024_1 -# 1024| mu1024_5(unknown) = ^CallSideEffect : ~m? -# 1024| mu1024_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1024_1 -# 1025| r1025_1(glval) = VariableAddress[x335] : -# 1025| r1025_2(glval) = FunctionAddress[~String] : -# 1025| v1025_3(void) = Call[~String] : func:r1025_2, this:r1025_1 -# 1025| mu1025_4(unknown) = ^CallSideEffect : ~m? -# 1025| v1025_5(void) = ^IndirectReadSideEffect[-1] : &:r1025_1, ~m? -# 1025| mu1025_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1025_1 -# 1025| r1025_7(bool) = Constant[0] : -# 1025| v1025_8(void) = ConditionalBranch : r1025_7 +# 35| Block 336 +# 35| r35_4691(glval) = VariableAddress[x335] : +# 35| mu35_4692(String) = Uninitialized[x335] : &:r35_4691 +# 35| r35_4693(glval) = FunctionAddress[String] : +# 35| v35_4694(void) = Call[String] : func:r35_4693, this:r35_4691 +# 35| mu35_4695(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4691 +# 35| r35_4697(glval) = VariableAddress[x335] : +# 35| r35_4698(glval) = FunctionAddress[~String] : +# 35| v35_4699(void) = Call[~String] : func:r35_4698, this:r35_4697 +# 35| mu35_4700(unknown) = ^CallSideEffect : ~m? +# 35| v35_4701(void) = ^IndirectReadSideEffect[-1] : &:r35_4697, ~m? +# 35| mu35_4702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4697 +# 35| r35_4703(bool) = Constant[0] : +# 35| v35_4704(void) = ConditionalBranch : r35_4703 #-----| False -> Block 337 #-----| True (back edge) -> Block 336 -# 1027| Block 337 -# 1027| r1027_1(glval) = VariableAddress[x336] : -# 1027| mu1027_2(String) = Uninitialized[x336] : &:r1027_1 -# 1027| r1027_3(glval) = FunctionAddress[String] : -# 1027| v1027_4(void) = Call[String] : func:r1027_3, this:r1027_1 -# 1027| mu1027_5(unknown) = ^CallSideEffect : ~m? -# 1027| mu1027_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1027_1 -# 1028| r1028_1(glval) = VariableAddress[x336] : -# 1028| r1028_2(glval) = FunctionAddress[~String] : -# 1028| v1028_3(void) = Call[~String] : func:r1028_2, this:r1028_1 -# 1028| mu1028_4(unknown) = ^CallSideEffect : ~m? -# 1028| v1028_5(void) = ^IndirectReadSideEffect[-1] : &:r1028_1, ~m? -# 1028| mu1028_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1028_1 -# 1028| r1028_7(bool) = Constant[0] : -# 1028| v1028_8(void) = ConditionalBranch : r1028_7 +# 35| Block 337 +# 35| r35_4705(glval) = VariableAddress[x336] : +# 35| mu35_4706(String) = Uninitialized[x336] : &:r35_4705 +# 35| r35_4707(glval) = FunctionAddress[String] : +# 35| v35_4708(void) = Call[String] : func:r35_4707, this:r35_4705 +# 35| mu35_4709(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4705 +# 35| r35_4711(glval) = VariableAddress[x336] : +# 35| r35_4712(glval) = FunctionAddress[~String] : +# 35| v35_4713(void) = Call[~String] : func:r35_4712, this:r35_4711 +# 35| mu35_4714(unknown) = ^CallSideEffect : ~m? +# 35| v35_4715(void) = ^IndirectReadSideEffect[-1] : &:r35_4711, ~m? +# 35| mu35_4716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4711 +# 35| r35_4717(bool) = Constant[0] : +# 35| v35_4718(void) = ConditionalBranch : r35_4717 #-----| False -> Block 338 #-----| True (back edge) -> Block 337 -# 1030| Block 338 -# 1030| r1030_1(glval) = VariableAddress[x337] : -# 1030| mu1030_2(String) = Uninitialized[x337] : &:r1030_1 -# 1030| r1030_3(glval) = FunctionAddress[String] : -# 1030| v1030_4(void) = Call[String] : func:r1030_3, this:r1030_1 -# 1030| mu1030_5(unknown) = ^CallSideEffect : ~m? -# 1030| mu1030_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1030_1 -# 1031| r1031_1(glval) = VariableAddress[x337] : -# 1031| r1031_2(glval) = FunctionAddress[~String] : -# 1031| v1031_3(void) = Call[~String] : func:r1031_2, this:r1031_1 -# 1031| mu1031_4(unknown) = ^CallSideEffect : ~m? -# 1031| v1031_5(void) = ^IndirectReadSideEffect[-1] : &:r1031_1, ~m? -# 1031| mu1031_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1031_1 -# 1031| r1031_7(bool) = Constant[0] : -# 1031| v1031_8(void) = ConditionalBranch : r1031_7 +# 35| Block 338 +# 35| r35_4719(glval) = VariableAddress[x337] : +# 35| mu35_4720(String) = Uninitialized[x337] : &:r35_4719 +# 35| r35_4721(glval) = FunctionAddress[String] : +# 35| v35_4722(void) = Call[String] : func:r35_4721, this:r35_4719 +# 35| mu35_4723(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4719 +# 35| r35_4725(glval) = VariableAddress[x337] : +# 35| r35_4726(glval) = FunctionAddress[~String] : +# 35| v35_4727(void) = Call[~String] : func:r35_4726, this:r35_4725 +# 35| mu35_4728(unknown) = ^CallSideEffect : ~m? +# 35| v35_4729(void) = ^IndirectReadSideEffect[-1] : &:r35_4725, ~m? +# 35| mu35_4730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4725 +# 35| r35_4731(bool) = Constant[0] : +# 35| v35_4732(void) = ConditionalBranch : r35_4731 #-----| False -> Block 339 #-----| True (back edge) -> Block 338 -# 1033| Block 339 -# 1033| r1033_1(glval) = VariableAddress[x338] : -# 1033| mu1033_2(String) = Uninitialized[x338] : &:r1033_1 -# 1033| r1033_3(glval) = FunctionAddress[String] : -# 1033| v1033_4(void) = Call[String] : func:r1033_3, this:r1033_1 -# 1033| mu1033_5(unknown) = ^CallSideEffect : ~m? -# 1033| mu1033_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1033_1 -# 1034| r1034_1(glval) = VariableAddress[x338] : -# 1034| r1034_2(glval) = FunctionAddress[~String] : -# 1034| v1034_3(void) = Call[~String] : func:r1034_2, this:r1034_1 -# 1034| mu1034_4(unknown) = ^CallSideEffect : ~m? -# 1034| v1034_5(void) = ^IndirectReadSideEffect[-1] : &:r1034_1, ~m? -# 1034| mu1034_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1034_1 -# 1034| r1034_7(bool) = Constant[0] : -# 1034| v1034_8(void) = ConditionalBranch : r1034_7 +# 35| Block 339 +# 35| r35_4733(glval) = VariableAddress[x338] : +# 35| mu35_4734(String) = Uninitialized[x338] : &:r35_4733 +# 35| r35_4735(glval) = FunctionAddress[String] : +# 35| v35_4736(void) = Call[String] : func:r35_4735, this:r35_4733 +# 35| mu35_4737(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4733 +# 35| r35_4739(glval) = VariableAddress[x338] : +# 35| r35_4740(glval) = FunctionAddress[~String] : +# 35| v35_4741(void) = Call[~String] : func:r35_4740, this:r35_4739 +# 35| mu35_4742(unknown) = ^CallSideEffect : ~m? +# 35| v35_4743(void) = ^IndirectReadSideEffect[-1] : &:r35_4739, ~m? +# 35| mu35_4744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4739 +# 35| r35_4745(bool) = Constant[0] : +# 35| v35_4746(void) = ConditionalBranch : r35_4745 #-----| False -> Block 340 #-----| True (back edge) -> Block 339 -# 1036| Block 340 -# 1036| r1036_1(glval) = VariableAddress[x339] : -# 1036| mu1036_2(String) = Uninitialized[x339] : &:r1036_1 -# 1036| r1036_3(glval) = FunctionAddress[String] : -# 1036| v1036_4(void) = Call[String] : func:r1036_3, this:r1036_1 -# 1036| mu1036_5(unknown) = ^CallSideEffect : ~m? -# 1036| mu1036_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1036_1 -# 1037| r1037_1(glval) = VariableAddress[x339] : -# 1037| r1037_2(glval) = FunctionAddress[~String] : -# 1037| v1037_3(void) = Call[~String] : func:r1037_2, this:r1037_1 -# 1037| mu1037_4(unknown) = ^CallSideEffect : ~m? -# 1037| v1037_5(void) = ^IndirectReadSideEffect[-1] : &:r1037_1, ~m? -# 1037| mu1037_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1037_1 -# 1037| r1037_7(bool) = Constant[0] : -# 1037| v1037_8(void) = ConditionalBranch : r1037_7 +# 35| Block 340 +# 35| r35_4747(glval) = VariableAddress[x339] : +# 35| mu35_4748(String) = Uninitialized[x339] : &:r35_4747 +# 35| r35_4749(glval) = FunctionAddress[String] : +# 35| v35_4750(void) = Call[String] : func:r35_4749, this:r35_4747 +# 35| mu35_4751(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4747 +# 35| r35_4753(glval) = VariableAddress[x339] : +# 35| r35_4754(glval) = FunctionAddress[~String] : +# 35| v35_4755(void) = Call[~String] : func:r35_4754, this:r35_4753 +# 35| mu35_4756(unknown) = ^CallSideEffect : ~m? +# 35| v35_4757(void) = ^IndirectReadSideEffect[-1] : &:r35_4753, ~m? +# 35| mu35_4758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4753 +# 35| r35_4759(bool) = Constant[0] : +# 35| v35_4760(void) = ConditionalBranch : r35_4759 #-----| False -> Block 341 #-----| True (back edge) -> Block 340 -# 1039| Block 341 -# 1039| r1039_1(glval) = VariableAddress[x340] : -# 1039| mu1039_2(String) = Uninitialized[x340] : &:r1039_1 -# 1039| r1039_3(glval) = FunctionAddress[String] : -# 1039| v1039_4(void) = Call[String] : func:r1039_3, this:r1039_1 -# 1039| mu1039_5(unknown) = ^CallSideEffect : ~m? -# 1039| mu1039_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1039_1 -# 1040| r1040_1(glval) = VariableAddress[x340] : -# 1040| r1040_2(glval) = FunctionAddress[~String] : -# 1040| v1040_3(void) = Call[~String] : func:r1040_2, this:r1040_1 -# 1040| mu1040_4(unknown) = ^CallSideEffect : ~m? -# 1040| v1040_5(void) = ^IndirectReadSideEffect[-1] : &:r1040_1, ~m? -# 1040| mu1040_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1040_1 -# 1040| r1040_7(bool) = Constant[0] : -# 1040| v1040_8(void) = ConditionalBranch : r1040_7 +# 35| Block 341 +# 35| r35_4761(glval) = VariableAddress[x340] : +# 35| mu35_4762(String) = Uninitialized[x340] : &:r35_4761 +# 35| r35_4763(glval) = FunctionAddress[String] : +# 35| v35_4764(void) = Call[String] : func:r35_4763, this:r35_4761 +# 35| mu35_4765(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4761 +# 35| r35_4767(glval) = VariableAddress[x340] : +# 35| r35_4768(glval) = FunctionAddress[~String] : +# 35| v35_4769(void) = Call[~String] : func:r35_4768, this:r35_4767 +# 35| mu35_4770(unknown) = ^CallSideEffect : ~m? +# 35| v35_4771(void) = ^IndirectReadSideEffect[-1] : &:r35_4767, ~m? +# 35| mu35_4772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4767 +# 35| r35_4773(bool) = Constant[0] : +# 35| v35_4774(void) = ConditionalBranch : r35_4773 #-----| False -> Block 342 #-----| True (back edge) -> Block 341 -# 1042| Block 342 -# 1042| r1042_1(glval) = VariableAddress[x341] : -# 1042| mu1042_2(String) = Uninitialized[x341] : &:r1042_1 -# 1042| r1042_3(glval) = FunctionAddress[String] : -# 1042| v1042_4(void) = Call[String] : func:r1042_3, this:r1042_1 -# 1042| mu1042_5(unknown) = ^CallSideEffect : ~m? -# 1042| mu1042_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1042_1 -# 1043| r1043_1(glval) = VariableAddress[x341] : -# 1043| r1043_2(glval) = FunctionAddress[~String] : -# 1043| v1043_3(void) = Call[~String] : func:r1043_2, this:r1043_1 -# 1043| mu1043_4(unknown) = ^CallSideEffect : ~m? -# 1043| v1043_5(void) = ^IndirectReadSideEffect[-1] : &:r1043_1, ~m? -# 1043| mu1043_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1043_1 -# 1043| r1043_7(bool) = Constant[0] : -# 1043| v1043_8(void) = ConditionalBranch : r1043_7 +# 35| Block 342 +# 35| r35_4775(glval) = VariableAddress[x341] : +# 35| mu35_4776(String) = Uninitialized[x341] : &:r35_4775 +# 35| r35_4777(glval) = FunctionAddress[String] : +# 35| v35_4778(void) = Call[String] : func:r35_4777, this:r35_4775 +# 35| mu35_4779(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4775 +# 35| r35_4781(glval) = VariableAddress[x341] : +# 35| r35_4782(glval) = FunctionAddress[~String] : +# 35| v35_4783(void) = Call[~String] : func:r35_4782, this:r35_4781 +# 35| mu35_4784(unknown) = ^CallSideEffect : ~m? +# 35| v35_4785(void) = ^IndirectReadSideEffect[-1] : &:r35_4781, ~m? +# 35| mu35_4786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4781 +# 35| r35_4787(bool) = Constant[0] : +# 35| v35_4788(void) = ConditionalBranch : r35_4787 #-----| False -> Block 343 #-----| True (back edge) -> Block 342 -# 1045| Block 343 -# 1045| r1045_1(glval) = VariableAddress[x342] : -# 1045| mu1045_2(String) = Uninitialized[x342] : &:r1045_1 -# 1045| r1045_3(glval) = FunctionAddress[String] : -# 1045| v1045_4(void) = Call[String] : func:r1045_3, this:r1045_1 -# 1045| mu1045_5(unknown) = ^CallSideEffect : ~m? -# 1045| mu1045_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1045_1 -# 1046| r1046_1(glval) = VariableAddress[x342] : -# 1046| r1046_2(glval) = FunctionAddress[~String] : -# 1046| v1046_3(void) = Call[~String] : func:r1046_2, this:r1046_1 -# 1046| mu1046_4(unknown) = ^CallSideEffect : ~m? -# 1046| v1046_5(void) = ^IndirectReadSideEffect[-1] : &:r1046_1, ~m? -# 1046| mu1046_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1046_1 -# 1046| r1046_7(bool) = Constant[0] : -# 1046| v1046_8(void) = ConditionalBranch : r1046_7 +# 35| Block 343 +# 35| r35_4789(glval) = VariableAddress[x342] : +# 35| mu35_4790(String) = Uninitialized[x342] : &:r35_4789 +# 35| r35_4791(glval) = FunctionAddress[String] : +# 35| v35_4792(void) = Call[String] : func:r35_4791, this:r35_4789 +# 35| mu35_4793(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4789 +# 35| r35_4795(glval) = VariableAddress[x342] : +# 35| r35_4796(glval) = FunctionAddress[~String] : +# 35| v35_4797(void) = Call[~String] : func:r35_4796, this:r35_4795 +# 35| mu35_4798(unknown) = ^CallSideEffect : ~m? +# 35| v35_4799(void) = ^IndirectReadSideEffect[-1] : &:r35_4795, ~m? +# 35| mu35_4800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4795 +# 35| r35_4801(bool) = Constant[0] : +# 35| v35_4802(void) = ConditionalBranch : r35_4801 #-----| False -> Block 344 #-----| True (back edge) -> Block 343 -# 1048| Block 344 -# 1048| r1048_1(glval) = VariableAddress[x343] : -# 1048| mu1048_2(String) = Uninitialized[x343] : &:r1048_1 -# 1048| r1048_3(glval) = FunctionAddress[String] : -# 1048| v1048_4(void) = Call[String] : func:r1048_3, this:r1048_1 -# 1048| mu1048_5(unknown) = ^CallSideEffect : ~m? -# 1048| mu1048_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1048_1 -# 1049| r1049_1(glval) = VariableAddress[x343] : -# 1049| r1049_2(glval) = FunctionAddress[~String] : -# 1049| v1049_3(void) = Call[~String] : func:r1049_2, this:r1049_1 -# 1049| mu1049_4(unknown) = ^CallSideEffect : ~m? -# 1049| v1049_5(void) = ^IndirectReadSideEffect[-1] : &:r1049_1, ~m? -# 1049| mu1049_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1049_1 -# 1049| r1049_7(bool) = Constant[0] : -# 1049| v1049_8(void) = ConditionalBranch : r1049_7 +# 35| Block 344 +# 35| r35_4803(glval) = VariableAddress[x343] : +# 35| mu35_4804(String) = Uninitialized[x343] : &:r35_4803 +# 35| r35_4805(glval) = FunctionAddress[String] : +# 35| v35_4806(void) = Call[String] : func:r35_4805, this:r35_4803 +# 35| mu35_4807(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4803 +# 35| r35_4809(glval) = VariableAddress[x343] : +# 35| r35_4810(glval) = FunctionAddress[~String] : +# 35| v35_4811(void) = Call[~String] : func:r35_4810, this:r35_4809 +# 35| mu35_4812(unknown) = ^CallSideEffect : ~m? +# 35| v35_4813(void) = ^IndirectReadSideEffect[-1] : &:r35_4809, ~m? +# 35| mu35_4814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4809 +# 35| r35_4815(bool) = Constant[0] : +# 35| v35_4816(void) = ConditionalBranch : r35_4815 #-----| False -> Block 345 #-----| True (back edge) -> Block 344 -# 1051| Block 345 -# 1051| r1051_1(glval) = VariableAddress[x344] : -# 1051| mu1051_2(String) = Uninitialized[x344] : &:r1051_1 -# 1051| r1051_3(glval) = FunctionAddress[String] : -# 1051| v1051_4(void) = Call[String] : func:r1051_3, this:r1051_1 -# 1051| mu1051_5(unknown) = ^CallSideEffect : ~m? -# 1051| mu1051_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1051_1 -# 1052| r1052_1(glval) = VariableAddress[x344] : -# 1052| r1052_2(glval) = FunctionAddress[~String] : -# 1052| v1052_3(void) = Call[~String] : func:r1052_2, this:r1052_1 -# 1052| mu1052_4(unknown) = ^CallSideEffect : ~m? -# 1052| v1052_5(void) = ^IndirectReadSideEffect[-1] : &:r1052_1, ~m? -# 1052| mu1052_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1052_1 -# 1052| r1052_7(bool) = Constant[0] : -# 1052| v1052_8(void) = ConditionalBranch : r1052_7 +# 35| Block 345 +# 35| r35_4817(glval) = VariableAddress[x344] : +# 35| mu35_4818(String) = Uninitialized[x344] : &:r35_4817 +# 35| r35_4819(glval) = FunctionAddress[String] : +# 35| v35_4820(void) = Call[String] : func:r35_4819, this:r35_4817 +# 35| mu35_4821(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4817 +# 35| r35_4823(glval) = VariableAddress[x344] : +# 35| r35_4824(glval) = FunctionAddress[~String] : +# 35| v35_4825(void) = Call[~String] : func:r35_4824, this:r35_4823 +# 35| mu35_4826(unknown) = ^CallSideEffect : ~m? +# 35| v35_4827(void) = ^IndirectReadSideEffect[-1] : &:r35_4823, ~m? +# 35| mu35_4828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4823 +# 35| r35_4829(bool) = Constant[0] : +# 35| v35_4830(void) = ConditionalBranch : r35_4829 #-----| False -> Block 346 #-----| True (back edge) -> Block 345 -# 1054| Block 346 -# 1054| r1054_1(glval) = VariableAddress[x345] : -# 1054| mu1054_2(String) = Uninitialized[x345] : &:r1054_1 -# 1054| r1054_3(glval) = FunctionAddress[String] : -# 1054| v1054_4(void) = Call[String] : func:r1054_3, this:r1054_1 -# 1054| mu1054_5(unknown) = ^CallSideEffect : ~m? -# 1054| mu1054_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1054_1 -# 1055| r1055_1(glval) = VariableAddress[x345] : -# 1055| r1055_2(glval) = FunctionAddress[~String] : -# 1055| v1055_3(void) = Call[~String] : func:r1055_2, this:r1055_1 -# 1055| mu1055_4(unknown) = ^CallSideEffect : ~m? -# 1055| v1055_5(void) = ^IndirectReadSideEffect[-1] : &:r1055_1, ~m? -# 1055| mu1055_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1055_1 -# 1055| r1055_7(bool) = Constant[0] : -# 1055| v1055_8(void) = ConditionalBranch : r1055_7 +# 35| Block 346 +# 35| r35_4831(glval) = VariableAddress[x345] : +# 35| mu35_4832(String) = Uninitialized[x345] : &:r35_4831 +# 35| r35_4833(glval) = FunctionAddress[String] : +# 35| v35_4834(void) = Call[String] : func:r35_4833, this:r35_4831 +# 35| mu35_4835(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4831 +# 35| r35_4837(glval) = VariableAddress[x345] : +# 35| r35_4838(glval) = FunctionAddress[~String] : +# 35| v35_4839(void) = Call[~String] : func:r35_4838, this:r35_4837 +# 35| mu35_4840(unknown) = ^CallSideEffect : ~m? +# 35| v35_4841(void) = ^IndirectReadSideEffect[-1] : &:r35_4837, ~m? +# 35| mu35_4842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4837 +# 35| r35_4843(bool) = Constant[0] : +# 35| v35_4844(void) = ConditionalBranch : r35_4843 #-----| False -> Block 347 #-----| True (back edge) -> Block 346 -# 1057| Block 347 -# 1057| r1057_1(glval) = VariableAddress[x346] : -# 1057| mu1057_2(String) = Uninitialized[x346] : &:r1057_1 -# 1057| r1057_3(glval) = FunctionAddress[String] : -# 1057| v1057_4(void) = Call[String] : func:r1057_3, this:r1057_1 -# 1057| mu1057_5(unknown) = ^CallSideEffect : ~m? -# 1057| mu1057_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1057_1 -# 1058| r1058_1(glval) = VariableAddress[x346] : -# 1058| r1058_2(glval) = FunctionAddress[~String] : -# 1058| v1058_3(void) = Call[~String] : func:r1058_2, this:r1058_1 -# 1058| mu1058_4(unknown) = ^CallSideEffect : ~m? -# 1058| v1058_5(void) = ^IndirectReadSideEffect[-1] : &:r1058_1, ~m? -# 1058| mu1058_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1058_1 -# 1058| r1058_7(bool) = Constant[0] : -# 1058| v1058_8(void) = ConditionalBranch : r1058_7 +# 35| Block 347 +# 35| r35_4845(glval) = VariableAddress[x346] : +# 35| mu35_4846(String) = Uninitialized[x346] : &:r35_4845 +# 35| r35_4847(glval) = FunctionAddress[String] : +# 35| v35_4848(void) = Call[String] : func:r35_4847, this:r35_4845 +# 35| mu35_4849(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4845 +# 35| r35_4851(glval) = VariableAddress[x346] : +# 35| r35_4852(glval) = FunctionAddress[~String] : +# 35| v35_4853(void) = Call[~String] : func:r35_4852, this:r35_4851 +# 35| mu35_4854(unknown) = ^CallSideEffect : ~m? +# 35| v35_4855(void) = ^IndirectReadSideEffect[-1] : &:r35_4851, ~m? +# 35| mu35_4856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4851 +# 35| r35_4857(bool) = Constant[0] : +# 35| v35_4858(void) = ConditionalBranch : r35_4857 #-----| False -> Block 348 #-----| True (back edge) -> Block 347 -# 1060| Block 348 -# 1060| r1060_1(glval) = VariableAddress[x347] : -# 1060| mu1060_2(String) = Uninitialized[x347] : &:r1060_1 -# 1060| r1060_3(glval) = FunctionAddress[String] : -# 1060| v1060_4(void) = Call[String] : func:r1060_3, this:r1060_1 -# 1060| mu1060_5(unknown) = ^CallSideEffect : ~m? -# 1060| mu1060_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1060_1 -# 1061| r1061_1(glval) = VariableAddress[x347] : -# 1061| r1061_2(glval) = FunctionAddress[~String] : -# 1061| v1061_3(void) = Call[~String] : func:r1061_2, this:r1061_1 -# 1061| mu1061_4(unknown) = ^CallSideEffect : ~m? -# 1061| v1061_5(void) = ^IndirectReadSideEffect[-1] : &:r1061_1, ~m? -# 1061| mu1061_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1061_1 -# 1061| r1061_7(bool) = Constant[0] : -# 1061| v1061_8(void) = ConditionalBranch : r1061_7 +# 35| Block 348 +# 35| r35_4859(glval) = VariableAddress[x347] : +# 35| mu35_4860(String) = Uninitialized[x347] : &:r35_4859 +# 35| r35_4861(glval) = FunctionAddress[String] : +# 35| v35_4862(void) = Call[String] : func:r35_4861, this:r35_4859 +# 35| mu35_4863(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4859 +# 35| r35_4865(glval) = VariableAddress[x347] : +# 35| r35_4866(glval) = FunctionAddress[~String] : +# 35| v35_4867(void) = Call[~String] : func:r35_4866, this:r35_4865 +# 35| mu35_4868(unknown) = ^CallSideEffect : ~m? +# 35| v35_4869(void) = ^IndirectReadSideEffect[-1] : &:r35_4865, ~m? +# 35| mu35_4870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4865 +# 35| r35_4871(bool) = Constant[0] : +# 35| v35_4872(void) = ConditionalBranch : r35_4871 #-----| False -> Block 349 #-----| True (back edge) -> Block 348 -# 1063| Block 349 -# 1063| r1063_1(glval) = VariableAddress[x348] : -# 1063| mu1063_2(String) = Uninitialized[x348] : &:r1063_1 -# 1063| r1063_3(glval) = FunctionAddress[String] : -# 1063| v1063_4(void) = Call[String] : func:r1063_3, this:r1063_1 -# 1063| mu1063_5(unknown) = ^CallSideEffect : ~m? -# 1063| mu1063_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1063_1 -# 1064| r1064_1(glval) = VariableAddress[x348] : -# 1064| r1064_2(glval) = FunctionAddress[~String] : -# 1064| v1064_3(void) = Call[~String] : func:r1064_2, this:r1064_1 -# 1064| mu1064_4(unknown) = ^CallSideEffect : ~m? -# 1064| v1064_5(void) = ^IndirectReadSideEffect[-1] : &:r1064_1, ~m? -# 1064| mu1064_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1064_1 -# 1064| r1064_7(bool) = Constant[0] : -# 1064| v1064_8(void) = ConditionalBranch : r1064_7 +# 35| Block 349 +# 35| r35_4873(glval) = VariableAddress[x348] : +# 35| mu35_4874(String) = Uninitialized[x348] : &:r35_4873 +# 35| r35_4875(glval) = FunctionAddress[String] : +# 35| v35_4876(void) = Call[String] : func:r35_4875, this:r35_4873 +# 35| mu35_4877(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4873 +# 35| r35_4879(glval) = VariableAddress[x348] : +# 35| r35_4880(glval) = FunctionAddress[~String] : +# 35| v35_4881(void) = Call[~String] : func:r35_4880, this:r35_4879 +# 35| mu35_4882(unknown) = ^CallSideEffect : ~m? +# 35| v35_4883(void) = ^IndirectReadSideEffect[-1] : &:r35_4879, ~m? +# 35| mu35_4884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4879 +# 35| r35_4885(bool) = Constant[0] : +# 35| v35_4886(void) = ConditionalBranch : r35_4885 #-----| False -> Block 350 #-----| True (back edge) -> Block 349 -# 1066| Block 350 -# 1066| r1066_1(glval) = VariableAddress[x349] : -# 1066| mu1066_2(String) = Uninitialized[x349] : &:r1066_1 -# 1066| r1066_3(glval) = FunctionAddress[String] : -# 1066| v1066_4(void) = Call[String] : func:r1066_3, this:r1066_1 -# 1066| mu1066_5(unknown) = ^CallSideEffect : ~m? -# 1066| mu1066_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1066_1 -# 1067| r1067_1(glval) = VariableAddress[x349] : -# 1067| r1067_2(glval) = FunctionAddress[~String] : -# 1067| v1067_3(void) = Call[~String] : func:r1067_2, this:r1067_1 -# 1067| mu1067_4(unknown) = ^CallSideEffect : ~m? -# 1067| v1067_5(void) = ^IndirectReadSideEffect[-1] : &:r1067_1, ~m? -# 1067| mu1067_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1067_1 -# 1067| r1067_7(bool) = Constant[0] : -# 1067| v1067_8(void) = ConditionalBranch : r1067_7 +# 35| Block 350 +# 35| r35_4887(glval) = VariableAddress[x349] : +# 35| mu35_4888(String) = Uninitialized[x349] : &:r35_4887 +# 35| r35_4889(glval) = FunctionAddress[String] : +# 35| v35_4890(void) = Call[String] : func:r35_4889, this:r35_4887 +# 35| mu35_4891(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4887 +# 35| r35_4893(glval) = VariableAddress[x349] : +# 35| r35_4894(glval) = FunctionAddress[~String] : +# 35| v35_4895(void) = Call[~String] : func:r35_4894, this:r35_4893 +# 35| mu35_4896(unknown) = ^CallSideEffect : ~m? +# 35| v35_4897(void) = ^IndirectReadSideEffect[-1] : &:r35_4893, ~m? +# 35| mu35_4898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4893 +# 35| r35_4899(bool) = Constant[0] : +# 35| v35_4900(void) = ConditionalBranch : r35_4899 #-----| False -> Block 351 #-----| True (back edge) -> Block 350 -# 1069| Block 351 -# 1069| r1069_1(glval) = VariableAddress[x350] : -# 1069| mu1069_2(String) = Uninitialized[x350] : &:r1069_1 -# 1069| r1069_3(glval) = FunctionAddress[String] : -# 1069| v1069_4(void) = Call[String] : func:r1069_3, this:r1069_1 -# 1069| mu1069_5(unknown) = ^CallSideEffect : ~m? -# 1069| mu1069_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1069_1 -# 1070| r1070_1(glval) = VariableAddress[x350] : -# 1070| r1070_2(glval) = FunctionAddress[~String] : -# 1070| v1070_3(void) = Call[~String] : func:r1070_2, this:r1070_1 -# 1070| mu1070_4(unknown) = ^CallSideEffect : ~m? -# 1070| v1070_5(void) = ^IndirectReadSideEffect[-1] : &:r1070_1, ~m? -# 1070| mu1070_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1070_1 -# 1070| r1070_7(bool) = Constant[0] : -# 1070| v1070_8(void) = ConditionalBranch : r1070_7 +# 35| Block 351 +# 35| r35_4901(glval) = VariableAddress[x350] : +# 35| mu35_4902(String) = Uninitialized[x350] : &:r35_4901 +# 35| r35_4903(glval) = FunctionAddress[String] : +# 35| v35_4904(void) = Call[String] : func:r35_4903, this:r35_4901 +# 35| mu35_4905(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4901 +# 35| r35_4907(glval) = VariableAddress[x350] : +# 35| r35_4908(glval) = FunctionAddress[~String] : +# 35| v35_4909(void) = Call[~String] : func:r35_4908, this:r35_4907 +# 35| mu35_4910(unknown) = ^CallSideEffect : ~m? +# 35| v35_4911(void) = ^IndirectReadSideEffect[-1] : &:r35_4907, ~m? +# 35| mu35_4912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4907 +# 35| r35_4913(bool) = Constant[0] : +# 35| v35_4914(void) = ConditionalBranch : r35_4913 #-----| False -> Block 352 #-----| True (back edge) -> Block 351 -# 1072| Block 352 -# 1072| r1072_1(glval) = VariableAddress[x351] : -# 1072| mu1072_2(String) = Uninitialized[x351] : &:r1072_1 -# 1072| r1072_3(glval) = FunctionAddress[String] : -# 1072| v1072_4(void) = Call[String] : func:r1072_3, this:r1072_1 -# 1072| mu1072_5(unknown) = ^CallSideEffect : ~m? -# 1072| mu1072_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1072_1 -# 1073| r1073_1(glval) = VariableAddress[x351] : -# 1073| r1073_2(glval) = FunctionAddress[~String] : -# 1073| v1073_3(void) = Call[~String] : func:r1073_2, this:r1073_1 -# 1073| mu1073_4(unknown) = ^CallSideEffect : ~m? -# 1073| v1073_5(void) = ^IndirectReadSideEffect[-1] : &:r1073_1, ~m? -# 1073| mu1073_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1073_1 -# 1073| r1073_7(bool) = Constant[0] : -# 1073| v1073_8(void) = ConditionalBranch : r1073_7 +# 35| Block 352 +# 35| r35_4915(glval) = VariableAddress[x351] : +# 35| mu35_4916(String) = Uninitialized[x351] : &:r35_4915 +# 35| r35_4917(glval) = FunctionAddress[String] : +# 35| v35_4918(void) = Call[String] : func:r35_4917, this:r35_4915 +# 35| mu35_4919(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4915 +# 35| r35_4921(glval) = VariableAddress[x351] : +# 35| r35_4922(glval) = FunctionAddress[~String] : +# 35| v35_4923(void) = Call[~String] : func:r35_4922, this:r35_4921 +# 35| mu35_4924(unknown) = ^CallSideEffect : ~m? +# 35| v35_4925(void) = ^IndirectReadSideEffect[-1] : &:r35_4921, ~m? +# 35| mu35_4926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4921 +# 35| r35_4927(bool) = Constant[0] : +# 35| v35_4928(void) = ConditionalBranch : r35_4927 #-----| False -> Block 353 #-----| True (back edge) -> Block 352 -# 1075| Block 353 -# 1075| r1075_1(glval) = VariableAddress[x352] : -# 1075| mu1075_2(String) = Uninitialized[x352] : &:r1075_1 -# 1075| r1075_3(glval) = FunctionAddress[String] : -# 1075| v1075_4(void) = Call[String] : func:r1075_3, this:r1075_1 -# 1075| mu1075_5(unknown) = ^CallSideEffect : ~m? -# 1075| mu1075_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1075_1 -# 1076| r1076_1(glval) = VariableAddress[x352] : -# 1076| r1076_2(glval) = FunctionAddress[~String] : -# 1076| v1076_3(void) = Call[~String] : func:r1076_2, this:r1076_1 -# 1076| mu1076_4(unknown) = ^CallSideEffect : ~m? -# 1076| v1076_5(void) = ^IndirectReadSideEffect[-1] : &:r1076_1, ~m? -# 1076| mu1076_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1076_1 -# 1076| r1076_7(bool) = Constant[0] : -# 1076| v1076_8(void) = ConditionalBranch : r1076_7 +# 35| Block 353 +# 35| r35_4929(glval) = VariableAddress[x352] : +# 35| mu35_4930(String) = Uninitialized[x352] : &:r35_4929 +# 35| r35_4931(glval) = FunctionAddress[String] : +# 35| v35_4932(void) = Call[String] : func:r35_4931, this:r35_4929 +# 35| mu35_4933(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4929 +# 35| r35_4935(glval) = VariableAddress[x352] : +# 35| r35_4936(glval) = FunctionAddress[~String] : +# 35| v35_4937(void) = Call[~String] : func:r35_4936, this:r35_4935 +# 35| mu35_4938(unknown) = ^CallSideEffect : ~m? +# 35| v35_4939(void) = ^IndirectReadSideEffect[-1] : &:r35_4935, ~m? +# 35| mu35_4940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4935 +# 35| r35_4941(bool) = Constant[0] : +# 35| v35_4942(void) = ConditionalBranch : r35_4941 #-----| False -> Block 354 #-----| True (back edge) -> Block 353 -# 1078| Block 354 -# 1078| r1078_1(glval) = VariableAddress[x353] : -# 1078| mu1078_2(String) = Uninitialized[x353] : &:r1078_1 -# 1078| r1078_3(glval) = FunctionAddress[String] : -# 1078| v1078_4(void) = Call[String] : func:r1078_3, this:r1078_1 -# 1078| mu1078_5(unknown) = ^CallSideEffect : ~m? -# 1078| mu1078_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1078_1 -# 1079| r1079_1(glval) = VariableAddress[x353] : -# 1079| r1079_2(glval) = FunctionAddress[~String] : -# 1079| v1079_3(void) = Call[~String] : func:r1079_2, this:r1079_1 -# 1079| mu1079_4(unknown) = ^CallSideEffect : ~m? -# 1079| v1079_5(void) = ^IndirectReadSideEffect[-1] : &:r1079_1, ~m? -# 1079| mu1079_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1079_1 -# 1079| r1079_7(bool) = Constant[0] : -# 1079| v1079_8(void) = ConditionalBranch : r1079_7 +# 35| Block 354 +# 35| r35_4943(glval) = VariableAddress[x353] : +# 35| mu35_4944(String) = Uninitialized[x353] : &:r35_4943 +# 35| r35_4945(glval) = FunctionAddress[String] : +# 35| v35_4946(void) = Call[String] : func:r35_4945, this:r35_4943 +# 35| mu35_4947(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4943 +# 35| r35_4949(glval) = VariableAddress[x353] : +# 35| r35_4950(glval) = FunctionAddress[~String] : +# 35| v35_4951(void) = Call[~String] : func:r35_4950, this:r35_4949 +# 35| mu35_4952(unknown) = ^CallSideEffect : ~m? +# 35| v35_4953(void) = ^IndirectReadSideEffect[-1] : &:r35_4949, ~m? +# 35| mu35_4954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4949 +# 35| r35_4955(bool) = Constant[0] : +# 35| v35_4956(void) = ConditionalBranch : r35_4955 #-----| False -> Block 355 #-----| True (back edge) -> Block 354 -# 1081| Block 355 -# 1081| r1081_1(glval) = VariableAddress[x354] : -# 1081| mu1081_2(String) = Uninitialized[x354] : &:r1081_1 -# 1081| r1081_3(glval) = FunctionAddress[String] : -# 1081| v1081_4(void) = Call[String] : func:r1081_3, this:r1081_1 -# 1081| mu1081_5(unknown) = ^CallSideEffect : ~m? -# 1081| mu1081_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1081_1 -# 1082| r1082_1(glval) = VariableAddress[x354] : -# 1082| r1082_2(glval) = FunctionAddress[~String] : -# 1082| v1082_3(void) = Call[~String] : func:r1082_2, this:r1082_1 -# 1082| mu1082_4(unknown) = ^CallSideEffect : ~m? -# 1082| v1082_5(void) = ^IndirectReadSideEffect[-1] : &:r1082_1, ~m? -# 1082| mu1082_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1082_1 -# 1082| r1082_7(bool) = Constant[0] : -# 1082| v1082_8(void) = ConditionalBranch : r1082_7 +# 35| Block 355 +# 35| r35_4957(glval) = VariableAddress[x354] : +# 35| mu35_4958(String) = Uninitialized[x354] : &:r35_4957 +# 35| r35_4959(glval) = FunctionAddress[String] : +# 35| v35_4960(void) = Call[String] : func:r35_4959, this:r35_4957 +# 35| mu35_4961(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4957 +# 35| r35_4963(glval) = VariableAddress[x354] : +# 35| r35_4964(glval) = FunctionAddress[~String] : +# 35| v35_4965(void) = Call[~String] : func:r35_4964, this:r35_4963 +# 35| mu35_4966(unknown) = ^CallSideEffect : ~m? +# 35| v35_4967(void) = ^IndirectReadSideEffect[-1] : &:r35_4963, ~m? +# 35| mu35_4968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4963 +# 35| r35_4969(bool) = Constant[0] : +# 35| v35_4970(void) = ConditionalBranch : r35_4969 #-----| False -> Block 356 #-----| True (back edge) -> Block 355 -# 1084| Block 356 -# 1084| r1084_1(glval) = VariableAddress[x355] : -# 1084| mu1084_2(String) = Uninitialized[x355] : &:r1084_1 -# 1084| r1084_3(glval) = FunctionAddress[String] : -# 1084| v1084_4(void) = Call[String] : func:r1084_3, this:r1084_1 -# 1084| mu1084_5(unknown) = ^CallSideEffect : ~m? -# 1084| mu1084_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1084_1 -# 1085| r1085_1(glval) = VariableAddress[x355] : -# 1085| r1085_2(glval) = FunctionAddress[~String] : -# 1085| v1085_3(void) = Call[~String] : func:r1085_2, this:r1085_1 -# 1085| mu1085_4(unknown) = ^CallSideEffect : ~m? -# 1085| v1085_5(void) = ^IndirectReadSideEffect[-1] : &:r1085_1, ~m? -# 1085| mu1085_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1085_1 -# 1085| r1085_7(bool) = Constant[0] : -# 1085| v1085_8(void) = ConditionalBranch : r1085_7 +# 35| Block 356 +# 35| r35_4971(glval) = VariableAddress[x355] : +# 35| mu35_4972(String) = Uninitialized[x355] : &:r35_4971 +# 35| r35_4973(glval) = FunctionAddress[String] : +# 35| v35_4974(void) = Call[String] : func:r35_4973, this:r35_4971 +# 35| mu35_4975(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4971 +# 35| r35_4977(glval) = VariableAddress[x355] : +# 35| r35_4978(glval) = FunctionAddress[~String] : +# 35| v35_4979(void) = Call[~String] : func:r35_4978, this:r35_4977 +# 35| mu35_4980(unknown) = ^CallSideEffect : ~m? +# 35| v35_4981(void) = ^IndirectReadSideEffect[-1] : &:r35_4977, ~m? +# 35| mu35_4982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4977 +# 35| r35_4983(bool) = Constant[0] : +# 35| v35_4984(void) = ConditionalBranch : r35_4983 #-----| False -> Block 357 #-----| True (back edge) -> Block 356 -# 1087| Block 357 -# 1087| r1087_1(glval) = VariableAddress[x356] : -# 1087| mu1087_2(String) = Uninitialized[x356] : &:r1087_1 -# 1087| r1087_3(glval) = FunctionAddress[String] : -# 1087| v1087_4(void) = Call[String] : func:r1087_3, this:r1087_1 -# 1087| mu1087_5(unknown) = ^CallSideEffect : ~m? -# 1087| mu1087_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1087_1 -# 1088| r1088_1(glval) = VariableAddress[x356] : -# 1088| r1088_2(glval) = FunctionAddress[~String] : -# 1088| v1088_3(void) = Call[~String] : func:r1088_2, this:r1088_1 -# 1088| mu1088_4(unknown) = ^CallSideEffect : ~m? -# 1088| v1088_5(void) = ^IndirectReadSideEffect[-1] : &:r1088_1, ~m? -# 1088| mu1088_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1088_1 -# 1088| r1088_7(bool) = Constant[0] : -# 1088| v1088_8(void) = ConditionalBranch : r1088_7 +# 35| Block 357 +# 35| r35_4985(glval) = VariableAddress[x356] : +# 35| mu35_4986(String) = Uninitialized[x356] : &:r35_4985 +# 35| r35_4987(glval) = FunctionAddress[String] : +# 35| v35_4988(void) = Call[String] : func:r35_4987, this:r35_4985 +# 35| mu35_4989(unknown) = ^CallSideEffect : ~m? +# 35| mu35_4990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4985 +# 35| r35_4991(glval) = VariableAddress[x356] : +# 35| r35_4992(glval) = FunctionAddress[~String] : +# 35| v35_4993(void) = Call[~String] : func:r35_4992, this:r35_4991 +# 35| mu35_4994(unknown) = ^CallSideEffect : ~m? +# 35| v35_4995(void) = ^IndirectReadSideEffect[-1] : &:r35_4991, ~m? +# 35| mu35_4996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4991 +# 35| r35_4997(bool) = Constant[0] : +# 35| v35_4998(void) = ConditionalBranch : r35_4997 #-----| False -> Block 358 #-----| True (back edge) -> Block 357 -# 1090| Block 358 -# 1090| r1090_1(glval) = VariableAddress[x357] : -# 1090| mu1090_2(String) = Uninitialized[x357] : &:r1090_1 -# 1090| r1090_3(glval) = FunctionAddress[String] : -# 1090| v1090_4(void) = Call[String] : func:r1090_3, this:r1090_1 -# 1090| mu1090_5(unknown) = ^CallSideEffect : ~m? -# 1090| mu1090_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1090_1 -# 1091| r1091_1(glval) = VariableAddress[x357] : -# 1091| r1091_2(glval) = FunctionAddress[~String] : -# 1091| v1091_3(void) = Call[~String] : func:r1091_2, this:r1091_1 -# 1091| mu1091_4(unknown) = ^CallSideEffect : ~m? -# 1091| v1091_5(void) = ^IndirectReadSideEffect[-1] : &:r1091_1, ~m? -# 1091| mu1091_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1091_1 -# 1091| r1091_7(bool) = Constant[0] : -# 1091| v1091_8(void) = ConditionalBranch : r1091_7 +# 35| Block 358 +# 35| r35_4999(glval) = VariableAddress[x357] : +# 35| mu35_5000(String) = Uninitialized[x357] : &:r35_4999 +# 35| r35_5001(glval) = FunctionAddress[String] : +# 35| v35_5002(void) = Call[String] : func:r35_5001, this:r35_4999 +# 35| mu35_5003(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_4999 +# 35| r35_5005(glval) = VariableAddress[x357] : +# 35| r35_5006(glval) = FunctionAddress[~String] : +# 35| v35_5007(void) = Call[~String] : func:r35_5006, this:r35_5005 +# 35| mu35_5008(unknown) = ^CallSideEffect : ~m? +# 35| v35_5009(void) = ^IndirectReadSideEffect[-1] : &:r35_5005, ~m? +# 35| mu35_5010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5005 +# 35| r35_5011(bool) = Constant[0] : +# 35| v35_5012(void) = ConditionalBranch : r35_5011 #-----| False -> Block 359 #-----| True (back edge) -> Block 358 -# 1093| Block 359 -# 1093| r1093_1(glval) = VariableAddress[x358] : -# 1093| mu1093_2(String) = Uninitialized[x358] : &:r1093_1 -# 1093| r1093_3(glval) = FunctionAddress[String] : -# 1093| v1093_4(void) = Call[String] : func:r1093_3, this:r1093_1 -# 1093| mu1093_5(unknown) = ^CallSideEffect : ~m? -# 1093| mu1093_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1093_1 -# 1094| r1094_1(glval) = VariableAddress[x358] : -# 1094| r1094_2(glval) = FunctionAddress[~String] : -# 1094| v1094_3(void) = Call[~String] : func:r1094_2, this:r1094_1 -# 1094| mu1094_4(unknown) = ^CallSideEffect : ~m? -# 1094| v1094_5(void) = ^IndirectReadSideEffect[-1] : &:r1094_1, ~m? -# 1094| mu1094_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1094_1 -# 1094| r1094_7(bool) = Constant[0] : -# 1094| v1094_8(void) = ConditionalBranch : r1094_7 +# 35| Block 359 +# 35| r35_5013(glval) = VariableAddress[x358] : +# 35| mu35_5014(String) = Uninitialized[x358] : &:r35_5013 +# 35| r35_5015(glval) = FunctionAddress[String] : +# 35| v35_5016(void) = Call[String] : func:r35_5015, this:r35_5013 +# 35| mu35_5017(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5013 +# 35| r35_5019(glval) = VariableAddress[x358] : +# 35| r35_5020(glval) = FunctionAddress[~String] : +# 35| v35_5021(void) = Call[~String] : func:r35_5020, this:r35_5019 +# 35| mu35_5022(unknown) = ^CallSideEffect : ~m? +# 35| v35_5023(void) = ^IndirectReadSideEffect[-1] : &:r35_5019, ~m? +# 35| mu35_5024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5019 +# 35| r35_5025(bool) = Constant[0] : +# 35| v35_5026(void) = ConditionalBranch : r35_5025 #-----| False -> Block 360 #-----| True (back edge) -> Block 359 -# 1096| Block 360 -# 1096| r1096_1(glval) = VariableAddress[x359] : -# 1096| mu1096_2(String) = Uninitialized[x359] : &:r1096_1 -# 1096| r1096_3(glval) = FunctionAddress[String] : -# 1096| v1096_4(void) = Call[String] : func:r1096_3, this:r1096_1 -# 1096| mu1096_5(unknown) = ^CallSideEffect : ~m? -# 1096| mu1096_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1096_1 -# 1097| r1097_1(glval) = VariableAddress[x359] : -# 1097| r1097_2(glval) = FunctionAddress[~String] : -# 1097| v1097_3(void) = Call[~String] : func:r1097_2, this:r1097_1 -# 1097| mu1097_4(unknown) = ^CallSideEffect : ~m? -# 1097| v1097_5(void) = ^IndirectReadSideEffect[-1] : &:r1097_1, ~m? -# 1097| mu1097_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1097_1 -# 1097| r1097_7(bool) = Constant[0] : -# 1097| v1097_8(void) = ConditionalBranch : r1097_7 +# 35| Block 360 +# 35| r35_5027(glval) = VariableAddress[x359] : +# 35| mu35_5028(String) = Uninitialized[x359] : &:r35_5027 +# 35| r35_5029(glval) = FunctionAddress[String] : +# 35| v35_5030(void) = Call[String] : func:r35_5029, this:r35_5027 +# 35| mu35_5031(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5027 +# 35| r35_5033(glval) = VariableAddress[x359] : +# 35| r35_5034(glval) = FunctionAddress[~String] : +# 35| v35_5035(void) = Call[~String] : func:r35_5034, this:r35_5033 +# 35| mu35_5036(unknown) = ^CallSideEffect : ~m? +# 35| v35_5037(void) = ^IndirectReadSideEffect[-1] : &:r35_5033, ~m? +# 35| mu35_5038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5033 +# 35| r35_5039(bool) = Constant[0] : +# 35| v35_5040(void) = ConditionalBranch : r35_5039 #-----| False -> Block 361 #-----| True (back edge) -> Block 360 -# 1099| Block 361 -# 1099| r1099_1(glval) = VariableAddress[x360] : -# 1099| mu1099_2(String) = Uninitialized[x360] : &:r1099_1 -# 1099| r1099_3(glval) = FunctionAddress[String] : -# 1099| v1099_4(void) = Call[String] : func:r1099_3, this:r1099_1 -# 1099| mu1099_5(unknown) = ^CallSideEffect : ~m? -# 1099| mu1099_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1099_1 -# 1100| r1100_1(glval) = VariableAddress[x360] : -# 1100| r1100_2(glval) = FunctionAddress[~String] : -# 1100| v1100_3(void) = Call[~String] : func:r1100_2, this:r1100_1 -# 1100| mu1100_4(unknown) = ^CallSideEffect : ~m? -# 1100| v1100_5(void) = ^IndirectReadSideEffect[-1] : &:r1100_1, ~m? -# 1100| mu1100_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1100_1 -# 1100| r1100_7(bool) = Constant[0] : -# 1100| v1100_8(void) = ConditionalBranch : r1100_7 +# 35| Block 361 +# 35| r35_5041(glval) = VariableAddress[x360] : +# 35| mu35_5042(String) = Uninitialized[x360] : &:r35_5041 +# 35| r35_5043(glval) = FunctionAddress[String] : +# 35| v35_5044(void) = Call[String] : func:r35_5043, this:r35_5041 +# 35| mu35_5045(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5041 +# 35| r35_5047(glval) = VariableAddress[x360] : +# 35| r35_5048(glval) = FunctionAddress[~String] : +# 35| v35_5049(void) = Call[~String] : func:r35_5048, this:r35_5047 +# 35| mu35_5050(unknown) = ^CallSideEffect : ~m? +# 35| v35_5051(void) = ^IndirectReadSideEffect[-1] : &:r35_5047, ~m? +# 35| mu35_5052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5047 +# 35| r35_5053(bool) = Constant[0] : +# 35| v35_5054(void) = ConditionalBranch : r35_5053 #-----| False -> Block 362 #-----| True (back edge) -> Block 361 -# 1102| Block 362 -# 1102| r1102_1(glval) = VariableAddress[x361] : -# 1102| mu1102_2(String) = Uninitialized[x361] : &:r1102_1 -# 1102| r1102_3(glval) = FunctionAddress[String] : -# 1102| v1102_4(void) = Call[String] : func:r1102_3, this:r1102_1 -# 1102| mu1102_5(unknown) = ^CallSideEffect : ~m? -# 1102| mu1102_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1102_1 -# 1103| r1103_1(glval) = VariableAddress[x361] : -# 1103| r1103_2(glval) = FunctionAddress[~String] : -# 1103| v1103_3(void) = Call[~String] : func:r1103_2, this:r1103_1 -# 1103| mu1103_4(unknown) = ^CallSideEffect : ~m? -# 1103| v1103_5(void) = ^IndirectReadSideEffect[-1] : &:r1103_1, ~m? -# 1103| mu1103_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1103_1 -# 1103| r1103_7(bool) = Constant[0] : -# 1103| v1103_8(void) = ConditionalBranch : r1103_7 +# 35| Block 362 +# 35| r35_5055(glval) = VariableAddress[x361] : +# 35| mu35_5056(String) = Uninitialized[x361] : &:r35_5055 +# 35| r35_5057(glval) = FunctionAddress[String] : +# 35| v35_5058(void) = Call[String] : func:r35_5057, this:r35_5055 +# 35| mu35_5059(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5055 +# 35| r35_5061(glval) = VariableAddress[x361] : +# 35| r35_5062(glval) = FunctionAddress[~String] : +# 35| v35_5063(void) = Call[~String] : func:r35_5062, this:r35_5061 +# 35| mu35_5064(unknown) = ^CallSideEffect : ~m? +# 35| v35_5065(void) = ^IndirectReadSideEffect[-1] : &:r35_5061, ~m? +# 35| mu35_5066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5061 +# 35| r35_5067(bool) = Constant[0] : +# 35| v35_5068(void) = ConditionalBranch : r35_5067 #-----| False -> Block 363 #-----| True (back edge) -> Block 362 -# 1105| Block 363 -# 1105| r1105_1(glval) = VariableAddress[x362] : -# 1105| mu1105_2(String) = Uninitialized[x362] : &:r1105_1 -# 1105| r1105_3(glval) = FunctionAddress[String] : -# 1105| v1105_4(void) = Call[String] : func:r1105_3, this:r1105_1 -# 1105| mu1105_5(unknown) = ^CallSideEffect : ~m? -# 1105| mu1105_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1105_1 -# 1106| r1106_1(glval) = VariableAddress[x362] : -# 1106| r1106_2(glval) = FunctionAddress[~String] : -# 1106| v1106_3(void) = Call[~String] : func:r1106_2, this:r1106_1 -# 1106| mu1106_4(unknown) = ^CallSideEffect : ~m? -# 1106| v1106_5(void) = ^IndirectReadSideEffect[-1] : &:r1106_1, ~m? -# 1106| mu1106_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1106_1 -# 1106| r1106_7(bool) = Constant[0] : -# 1106| v1106_8(void) = ConditionalBranch : r1106_7 +# 35| Block 363 +# 35| r35_5069(glval) = VariableAddress[x362] : +# 35| mu35_5070(String) = Uninitialized[x362] : &:r35_5069 +# 35| r35_5071(glval) = FunctionAddress[String] : +# 35| v35_5072(void) = Call[String] : func:r35_5071, this:r35_5069 +# 35| mu35_5073(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5069 +# 35| r35_5075(glval) = VariableAddress[x362] : +# 35| r35_5076(glval) = FunctionAddress[~String] : +# 35| v35_5077(void) = Call[~String] : func:r35_5076, this:r35_5075 +# 35| mu35_5078(unknown) = ^CallSideEffect : ~m? +# 35| v35_5079(void) = ^IndirectReadSideEffect[-1] : &:r35_5075, ~m? +# 35| mu35_5080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5075 +# 35| r35_5081(bool) = Constant[0] : +# 35| v35_5082(void) = ConditionalBranch : r35_5081 #-----| False -> Block 364 #-----| True (back edge) -> Block 363 -# 1108| Block 364 -# 1108| r1108_1(glval) = VariableAddress[x363] : -# 1108| mu1108_2(String) = Uninitialized[x363] : &:r1108_1 -# 1108| r1108_3(glval) = FunctionAddress[String] : -# 1108| v1108_4(void) = Call[String] : func:r1108_3, this:r1108_1 -# 1108| mu1108_5(unknown) = ^CallSideEffect : ~m? -# 1108| mu1108_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1108_1 -# 1109| r1109_1(glval) = VariableAddress[x363] : -# 1109| r1109_2(glval) = FunctionAddress[~String] : -# 1109| v1109_3(void) = Call[~String] : func:r1109_2, this:r1109_1 -# 1109| mu1109_4(unknown) = ^CallSideEffect : ~m? -# 1109| v1109_5(void) = ^IndirectReadSideEffect[-1] : &:r1109_1, ~m? -# 1109| mu1109_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1109_1 -# 1109| r1109_7(bool) = Constant[0] : -# 1109| v1109_8(void) = ConditionalBranch : r1109_7 +# 35| Block 364 +# 35| r35_5083(glval) = VariableAddress[x363] : +# 35| mu35_5084(String) = Uninitialized[x363] : &:r35_5083 +# 35| r35_5085(glval) = FunctionAddress[String] : +# 35| v35_5086(void) = Call[String] : func:r35_5085, this:r35_5083 +# 35| mu35_5087(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5083 +# 35| r35_5089(glval) = VariableAddress[x363] : +# 35| r35_5090(glval) = FunctionAddress[~String] : +# 35| v35_5091(void) = Call[~String] : func:r35_5090, this:r35_5089 +# 35| mu35_5092(unknown) = ^CallSideEffect : ~m? +# 35| v35_5093(void) = ^IndirectReadSideEffect[-1] : &:r35_5089, ~m? +# 35| mu35_5094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5089 +# 35| r35_5095(bool) = Constant[0] : +# 35| v35_5096(void) = ConditionalBranch : r35_5095 #-----| False -> Block 365 #-----| True (back edge) -> Block 364 -# 1111| Block 365 -# 1111| r1111_1(glval) = VariableAddress[x364] : -# 1111| mu1111_2(String) = Uninitialized[x364] : &:r1111_1 -# 1111| r1111_3(glval) = FunctionAddress[String] : -# 1111| v1111_4(void) = Call[String] : func:r1111_3, this:r1111_1 -# 1111| mu1111_5(unknown) = ^CallSideEffect : ~m? -# 1111| mu1111_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1111_1 -# 1112| r1112_1(glval) = VariableAddress[x364] : -# 1112| r1112_2(glval) = FunctionAddress[~String] : -# 1112| v1112_3(void) = Call[~String] : func:r1112_2, this:r1112_1 -# 1112| mu1112_4(unknown) = ^CallSideEffect : ~m? -# 1112| v1112_5(void) = ^IndirectReadSideEffect[-1] : &:r1112_1, ~m? -# 1112| mu1112_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1112_1 -# 1112| r1112_7(bool) = Constant[0] : -# 1112| v1112_8(void) = ConditionalBranch : r1112_7 +# 35| Block 365 +# 35| r35_5097(glval) = VariableAddress[x364] : +# 35| mu35_5098(String) = Uninitialized[x364] : &:r35_5097 +# 35| r35_5099(glval) = FunctionAddress[String] : +# 35| v35_5100(void) = Call[String] : func:r35_5099, this:r35_5097 +# 35| mu35_5101(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5097 +# 35| r35_5103(glval) = VariableAddress[x364] : +# 35| r35_5104(glval) = FunctionAddress[~String] : +# 35| v35_5105(void) = Call[~String] : func:r35_5104, this:r35_5103 +# 35| mu35_5106(unknown) = ^CallSideEffect : ~m? +# 35| v35_5107(void) = ^IndirectReadSideEffect[-1] : &:r35_5103, ~m? +# 35| mu35_5108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5103 +# 35| r35_5109(bool) = Constant[0] : +# 35| v35_5110(void) = ConditionalBranch : r35_5109 #-----| False -> Block 366 #-----| True (back edge) -> Block 365 -# 1114| Block 366 -# 1114| r1114_1(glval) = VariableAddress[x365] : -# 1114| mu1114_2(String) = Uninitialized[x365] : &:r1114_1 -# 1114| r1114_3(glval) = FunctionAddress[String] : -# 1114| v1114_4(void) = Call[String] : func:r1114_3, this:r1114_1 -# 1114| mu1114_5(unknown) = ^CallSideEffect : ~m? -# 1114| mu1114_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1114_1 -# 1115| r1115_1(glval) = VariableAddress[x365] : -# 1115| r1115_2(glval) = FunctionAddress[~String] : -# 1115| v1115_3(void) = Call[~String] : func:r1115_2, this:r1115_1 -# 1115| mu1115_4(unknown) = ^CallSideEffect : ~m? -# 1115| v1115_5(void) = ^IndirectReadSideEffect[-1] : &:r1115_1, ~m? -# 1115| mu1115_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1115_1 -# 1115| r1115_7(bool) = Constant[0] : -# 1115| v1115_8(void) = ConditionalBranch : r1115_7 +# 35| Block 366 +# 35| r35_5111(glval) = VariableAddress[x365] : +# 35| mu35_5112(String) = Uninitialized[x365] : &:r35_5111 +# 35| r35_5113(glval) = FunctionAddress[String] : +# 35| v35_5114(void) = Call[String] : func:r35_5113, this:r35_5111 +# 35| mu35_5115(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5111 +# 35| r35_5117(glval) = VariableAddress[x365] : +# 35| r35_5118(glval) = FunctionAddress[~String] : +# 35| v35_5119(void) = Call[~String] : func:r35_5118, this:r35_5117 +# 35| mu35_5120(unknown) = ^CallSideEffect : ~m? +# 35| v35_5121(void) = ^IndirectReadSideEffect[-1] : &:r35_5117, ~m? +# 35| mu35_5122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5117 +# 35| r35_5123(bool) = Constant[0] : +# 35| v35_5124(void) = ConditionalBranch : r35_5123 #-----| False -> Block 367 #-----| True (back edge) -> Block 366 -# 1117| Block 367 -# 1117| r1117_1(glval) = VariableAddress[x366] : -# 1117| mu1117_2(String) = Uninitialized[x366] : &:r1117_1 -# 1117| r1117_3(glval) = FunctionAddress[String] : -# 1117| v1117_4(void) = Call[String] : func:r1117_3, this:r1117_1 -# 1117| mu1117_5(unknown) = ^CallSideEffect : ~m? -# 1117| mu1117_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1117_1 -# 1118| r1118_1(glval) = VariableAddress[x366] : -# 1118| r1118_2(glval) = FunctionAddress[~String] : -# 1118| v1118_3(void) = Call[~String] : func:r1118_2, this:r1118_1 -# 1118| mu1118_4(unknown) = ^CallSideEffect : ~m? -# 1118| v1118_5(void) = ^IndirectReadSideEffect[-1] : &:r1118_1, ~m? -# 1118| mu1118_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1118_1 -# 1118| r1118_7(bool) = Constant[0] : -# 1118| v1118_8(void) = ConditionalBranch : r1118_7 +# 35| Block 367 +# 35| r35_5125(glval) = VariableAddress[x366] : +# 35| mu35_5126(String) = Uninitialized[x366] : &:r35_5125 +# 35| r35_5127(glval) = FunctionAddress[String] : +# 35| v35_5128(void) = Call[String] : func:r35_5127, this:r35_5125 +# 35| mu35_5129(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5125 +# 35| r35_5131(glval) = VariableAddress[x366] : +# 35| r35_5132(glval) = FunctionAddress[~String] : +# 35| v35_5133(void) = Call[~String] : func:r35_5132, this:r35_5131 +# 35| mu35_5134(unknown) = ^CallSideEffect : ~m? +# 35| v35_5135(void) = ^IndirectReadSideEffect[-1] : &:r35_5131, ~m? +# 35| mu35_5136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5131 +# 35| r35_5137(bool) = Constant[0] : +# 35| v35_5138(void) = ConditionalBranch : r35_5137 #-----| False -> Block 368 #-----| True (back edge) -> Block 367 -# 1120| Block 368 -# 1120| r1120_1(glval) = VariableAddress[x367] : -# 1120| mu1120_2(String) = Uninitialized[x367] : &:r1120_1 -# 1120| r1120_3(glval) = FunctionAddress[String] : -# 1120| v1120_4(void) = Call[String] : func:r1120_3, this:r1120_1 -# 1120| mu1120_5(unknown) = ^CallSideEffect : ~m? -# 1120| mu1120_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1120_1 -# 1121| r1121_1(glval) = VariableAddress[x367] : -# 1121| r1121_2(glval) = FunctionAddress[~String] : -# 1121| v1121_3(void) = Call[~String] : func:r1121_2, this:r1121_1 -# 1121| mu1121_4(unknown) = ^CallSideEffect : ~m? -# 1121| v1121_5(void) = ^IndirectReadSideEffect[-1] : &:r1121_1, ~m? -# 1121| mu1121_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1121_1 -# 1121| r1121_7(bool) = Constant[0] : -# 1121| v1121_8(void) = ConditionalBranch : r1121_7 +# 35| Block 368 +# 35| r35_5139(glval) = VariableAddress[x367] : +# 35| mu35_5140(String) = Uninitialized[x367] : &:r35_5139 +# 35| r35_5141(glval) = FunctionAddress[String] : +# 35| v35_5142(void) = Call[String] : func:r35_5141, this:r35_5139 +# 35| mu35_5143(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5139 +# 35| r35_5145(glval) = VariableAddress[x367] : +# 35| r35_5146(glval) = FunctionAddress[~String] : +# 35| v35_5147(void) = Call[~String] : func:r35_5146, this:r35_5145 +# 35| mu35_5148(unknown) = ^CallSideEffect : ~m? +# 35| v35_5149(void) = ^IndirectReadSideEffect[-1] : &:r35_5145, ~m? +# 35| mu35_5150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5145 +# 35| r35_5151(bool) = Constant[0] : +# 35| v35_5152(void) = ConditionalBranch : r35_5151 #-----| False -> Block 369 #-----| True (back edge) -> Block 368 -# 1123| Block 369 -# 1123| r1123_1(glval) = VariableAddress[x368] : -# 1123| mu1123_2(String) = Uninitialized[x368] : &:r1123_1 -# 1123| r1123_3(glval) = FunctionAddress[String] : -# 1123| v1123_4(void) = Call[String] : func:r1123_3, this:r1123_1 -# 1123| mu1123_5(unknown) = ^CallSideEffect : ~m? -# 1123| mu1123_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1123_1 -# 1124| r1124_1(glval) = VariableAddress[x368] : -# 1124| r1124_2(glval) = FunctionAddress[~String] : -# 1124| v1124_3(void) = Call[~String] : func:r1124_2, this:r1124_1 -# 1124| mu1124_4(unknown) = ^CallSideEffect : ~m? -# 1124| v1124_5(void) = ^IndirectReadSideEffect[-1] : &:r1124_1, ~m? -# 1124| mu1124_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1124_1 -# 1124| r1124_7(bool) = Constant[0] : -# 1124| v1124_8(void) = ConditionalBranch : r1124_7 +# 35| Block 369 +# 35| r35_5153(glval) = VariableAddress[x368] : +# 35| mu35_5154(String) = Uninitialized[x368] : &:r35_5153 +# 35| r35_5155(glval) = FunctionAddress[String] : +# 35| v35_5156(void) = Call[String] : func:r35_5155, this:r35_5153 +# 35| mu35_5157(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5153 +# 35| r35_5159(glval) = VariableAddress[x368] : +# 35| r35_5160(glval) = FunctionAddress[~String] : +# 35| v35_5161(void) = Call[~String] : func:r35_5160, this:r35_5159 +# 35| mu35_5162(unknown) = ^CallSideEffect : ~m? +# 35| v35_5163(void) = ^IndirectReadSideEffect[-1] : &:r35_5159, ~m? +# 35| mu35_5164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5159 +# 35| r35_5165(bool) = Constant[0] : +# 35| v35_5166(void) = ConditionalBranch : r35_5165 #-----| False -> Block 370 #-----| True (back edge) -> Block 369 -# 1126| Block 370 -# 1126| r1126_1(glval) = VariableAddress[x369] : -# 1126| mu1126_2(String) = Uninitialized[x369] : &:r1126_1 -# 1126| r1126_3(glval) = FunctionAddress[String] : -# 1126| v1126_4(void) = Call[String] : func:r1126_3, this:r1126_1 -# 1126| mu1126_5(unknown) = ^CallSideEffect : ~m? -# 1126| mu1126_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[x369] : -# 1127| r1127_2(glval) = FunctionAddress[~String] : -# 1127| v1127_3(void) = Call[~String] : func:r1127_2, this:r1127_1 -# 1127| mu1127_4(unknown) = ^CallSideEffect : ~m? -# 1127| v1127_5(void) = ^IndirectReadSideEffect[-1] : &:r1127_1, ~m? -# 1127| mu1127_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1127_1 -# 1127| r1127_7(bool) = Constant[0] : -# 1127| v1127_8(void) = ConditionalBranch : r1127_7 +# 35| Block 370 +# 35| r35_5167(glval) = VariableAddress[x369] : +# 35| mu35_5168(String) = Uninitialized[x369] : &:r35_5167 +# 35| r35_5169(glval) = FunctionAddress[String] : +# 35| v35_5170(void) = Call[String] : func:r35_5169, this:r35_5167 +# 35| mu35_5171(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5167 +# 35| r35_5173(glval) = VariableAddress[x369] : +# 35| r35_5174(glval) = FunctionAddress[~String] : +# 35| v35_5175(void) = Call[~String] : func:r35_5174, this:r35_5173 +# 35| mu35_5176(unknown) = ^CallSideEffect : ~m? +# 35| v35_5177(void) = ^IndirectReadSideEffect[-1] : &:r35_5173, ~m? +# 35| mu35_5178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5173 +# 35| r35_5179(bool) = Constant[0] : +# 35| v35_5180(void) = ConditionalBranch : r35_5179 #-----| False -> Block 371 #-----| True (back edge) -> Block 370 -# 1129| Block 371 -# 1129| r1129_1(glval) = VariableAddress[x370] : -# 1129| mu1129_2(String) = Uninitialized[x370] : &:r1129_1 -# 1129| r1129_3(glval) = FunctionAddress[String] : -# 1129| v1129_4(void) = Call[String] : func:r1129_3, this:r1129_1 -# 1129| mu1129_5(unknown) = ^CallSideEffect : ~m? -# 1129| mu1129_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1129_1 -# 1130| r1130_1(glval) = VariableAddress[x370] : -# 1130| r1130_2(glval) = FunctionAddress[~String] : -# 1130| v1130_3(void) = Call[~String] : func:r1130_2, this:r1130_1 -# 1130| mu1130_4(unknown) = ^CallSideEffect : ~m? -# 1130| v1130_5(void) = ^IndirectReadSideEffect[-1] : &:r1130_1, ~m? -# 1130| mu1130_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1130_1 -# 1130| r1130_7(bool) = Constant[0] : -# 1130| v1130_8(void) = ConditionalBranch : r1130_7 +# 35| Block 371 +# 35| r35_5181(glval) = VariableAddress[x370] : +# 35| mu35_5182(String) = Uninitialized[x370] : &:r35_5181 +# 35| r35_5183(glval) = FunctionAddress[String] : +# 35| v35_5184(void) = Call[String] : func:r35_5183, this:r35_5181 +# 35| mu35_5185(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5181 +# 35| r35_5187(glval) = VariableAddress[x370] : +# 35| r35_5188(glval) = FunctionAddress[~String] : +# 35| v35_5189(void) = Call[~String] : func:r35_5188, this:r35_5187 +# 35| mu35_5190(unknown) = ^CallSideEffect : ~m? +# 35| v35_5191(void) = ^IndirectReadSideEffect[-1] : &:r35_5187, ~m? +# 35| mu35_5192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5187 +# 35| r35_5193(bool) = Constant[0] : +# 35| v35_5194(void) = ConditionalBranch : r35_5193 #-----| False -> Block 372 #-----| True (back edge) -> Block 371 -# 1132| Block 372 -# 1132| r1132_1(glval) = VariableAddress[x371] : -# 1132| mu1132_2(String) = Uninitialized[x371] : &:r1132_1 -# 1132| r1132_3(glval) = FunctionAddress[String] : -# 1132| v1132_4(void) = Call[String] : func:r1132_3, this:r1132_1 -# 1132| mu1132_5(unknown) = ^CallSideEffect : ~m? -# 1132| mu1132_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1132_1 -# 1133| r1133_1(glval) = VariableAddress[x371] : -# 1133| r1133_2(glval) = FunctionAddress[~String] : -# 1133| v1133_3(void) = Call[~String] : func:r1133_2, this:r1133_1 -# 1133| mu1133_4(unknown) = ^CallSideEffect : ~m? -# 1133| v1133_5(void) = ^IndirectReadSideEffect[-1] : &:r1133_1, ~m? -# 1133| mu1133_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1133_1 -# 1133| r1133_7(bool) = Constant[0] : -# 1133| v1133_8(void) = ConditionalBranch : r1133_7 +# 35| Block 372 +# 35| r35_5195(glval) = VariableAddress[x371] : +# 35| mu35_5196(String) = Uninitialized[x371] : &:r35_5195 +# 35| r35_5197(glval) = FunctionAddress[String] : +# 35| v35_5198(void) = Call[String] : func:r35_5197, this:r35_5195 +# 35| mu35_5199(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5195 +# 35| r35_5201(glval) = VariableAddress[x371] : +# 35| r35_5202(glval) = FunctionAddress[~String] : +# 35| v35_5203(void) = Call[~String] : func:r35_5202, this:r35_5201 +# 35| mu35_5204(unknown) = ^CallSideEffect : ~m? +# 35| v35_5205(void) = ^IndirectReadSideEffect[-1] : &:r35_5201, ~m? +# 35| mu35_5206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5201 +# 35| r35_5207(bool) = Constant[0] : +# 35| v35_5208(void) = ConditionalBranch : r35_5207 #-----| False -> Block 373 #-----| True (back edge) -> Block 372 -# 1135| Block 373 -# 1135| r1135_1(glval) = VariableAddress[x372] : -# 1135| mu1135_2(String) = Uninitialized[x372] : &:r1135_1 -# 1135| r1135_3(glval) = FunctionAddress[String] : -# 1135| v1135_4(void) = Call[String] : func:r1135_3, this:r1135_1 -# 1135| mu1135_5(unknown) = ^CallSideEffect : ~m? -# 1135| mu1135_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1135_1 -# 1136| r1136_1(glval) = VariableAddress[x372] : -# 1136| r1136_2(glval) = FunctionAddress[~String] : -# 1136| v1136_3(void) = Call[~String] : func:r1136_2, this:r1136_1 -# 1136| mu1136_4(unknown) = ^CallSideEffect : ~m? -# 1136| v1136_5(void) = ^IndirectReadSideEffect[-1] : &:r1136_1, ~m? -# 1136| mu1136_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1136_1 -# 1136| r1136_7(bool) = Constant[0] : -# 1136| v1136_8(void) = ConditionalBranch : r1136_7 +# 35| Block 373 +# 35| r35_5209(glval) = VariableAddress[x372] : +# 35| mu35_5210(String) = Uninitialized[x372] : &:r35_5209 +# 35| r35_5211(glval) = FunctionAddress[String] : +# 35| v35_5212(void) = Call[String] : func:r35_5211, this:r35_5209 +# 35| mu35_5213(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5209 +# 35| r35_5215(glval) = VariableAddress[x372] : +# 35| r35_5216(glval) = FunctionAddress[~String] : +# 35| v35_5217(void) = Call[~String] : func:r35_5216, this:r35_5215 +# 35| mu35_5218(unknown) = ^CallSideEffect : ~m? +# 35| v35_5219(void) = ^IndirectReadSideEffect[-1] : &:r35_5215, ~m? +# 35| mu35_5220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5215 +# 35| r35_5221(bool) = Constant[0] : +# 35| v35_5222(void) = ConditionalBranch : r35_5221 #-----| False -> Block 374 #-----| True (back edge) -> Block 373 -# 1138| Block 374 -# 1138| r1138_1(glval) = VariableAddress[x373] : -# 1138| mu1138_2(String) = Uninitialized[x373] : &:r1138_1 -# 1138| r1138_3(glval) = FunctionAddress[String] : -# 1138| v1138_4(void) = Call[String] : func:r1138_3, this:r1138_1 -# 1138| mu1138_5(unknown) = ^CallSideEffect : ~m? -# 1138| mu1138_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1138_1 -# 1139| r1139_1(glval) = VariableAddress[x373] : -# 1139| r1139_2(glval) = FunctionAddress[~String] : -# 1139| v1139_3(void) = Call[~String] : func:r1139_2, this:r1139_1 -# 1139| mu1139_4(unknown) = ^CallSideEffect : ~m? -# 1139| v1139_5(void) = ^IndirectReadSideEffect[-1] : &:r1139_1, ~m? -# 1139| mu1139_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1139_1 -# 1139| r1139_7(bool) = Constant[0] : -# 1139| v1139_8(void) = ConditionalBranch : r1139_7 +# 35| Block 374 +# 35| r35_5223(glval) = VariableAddress[x373] : +# 35| mu35_5224(String) = Uninitialized[x373] : &:r35_5223 +# 35| r35_5225(glval) = FunctionAddress[String] : +# 35| v35_5226(void) = Call[String] : func:r35_5225, this:r35_5223 +# 35| mu35_5227(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5223 +# 35| r35_5229(glval) = VariableAddress[x373] : +# 35| r35_5230(glval) = FunctionAddress[~String] : +# 35| v35_5231(void) = Call[~String] : func:r35_5230, this:r35_5229 +# 35| mu35_5232(unknown) = ^CallSideEffect : ~m? +# 35| v35_5233(void) = ^IndirectReadSideEffect[-1] : &:r35_5229, ~m? +# 35| mu35_5234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5229 +# 35| r35_5235(bool) = Constant[0] : +# 35| v35_5236(void) = ConditionalBranch : r35_5235 #-----| False -> Block 375 #-----| True (back edge) -> Block 374 -# 1141| Block 375 -# 1141| r1141_1(glval) = VariableAddress[x374] : -# 1141| mu1141_2(String) = Uninitialized[x374] : &:r1141_1 -# 1141| r1141_3(glval) = FunctionAddress[String] : -# 1141| v1141_4(void) = Call[String] : func:r1141_3, this:r1141_1 -# 1141| mu1141_5(unknown) = ^CallSideEffect : ~m? -# 1141| mu1141_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1141_1 -# 1142| r1142_1(glval) = VariableAddress[x374] : -# 1142| r1142_2(glval) = FunctionAddress[~String] : -# 1142| v1142_3(void) = Call[~String] : func:r1142_2, this:r1142_1 -# 1142| mu1142_4(unknown) = ^CallSideEffect : ~m? -# 1142| v1142_5(void) = ^IndirectReadSideEffect[-1] : &:r1142_1, ~m? -# 1142| mu1142_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1142_1 -# 1142| r1142_7(bool) = Constant[0] : -# 1142| v1142_8(void) = ConditionalBranch : r1142_7 +# 35| Block 375 +# 35| r35_5237(glval) = VariableAddress[x374] : +# 35| mu35_5238(String) = Uninitialized[x374] : &:r35_5237 +# 35| r35_5239(glval) = FunctionAddress[String] : +# 35| v35_5240(void) = Call[String] : func:r35_5239, this:r35_5237 +# 35| mu35_5241(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5237 +# 35| r35_5243(glval) = VariableAddress[x374] : +# 35| r35_5244(glval) = FunctionAddress[~String] : +# 35| v35_5245(void) = Call[~String] : func:r35_5244, this:r35_5243 +# 35| mu35_5246(unknown) = ^CallSideEffect : ~m? +# 35| v35_5247(void) = ^IndirectReadSideEffect[-1] : &:r35_5243, ~m? +# 35| mu35_5248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5243 +# 35| r35_5249(bool) = Constant[0] : +# 35| v35_5250(void) = ConditionalBranch : r35_5249 #-----| False -> Block 376 #-----| True (back edge) -> Block 375 -# 1144| Block 376 -# 1144| r1144_1(glval) = VariableAddress[x375] : -# 1144| mu1144_2(String) = Uninitialized[x375] : &:r1144_1 -# 1144| r1144_3(glval) = FunctionAddress[String] : -# 1144| v1144_4(void) = Call[String] : func:r1144_3, this:r1144_1 -# 1144| mu1144_5(unknown) = ^CallSideEffect : ~m? -# 1144| mu1144_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1144_1 -# 1145| r1145_1(glval) = VariableAddress[x375] : -# 1145| r1145_2(glval) = FunctionAddress[~String] : -# 1145| v1145_3(void) = Call[~String] : func:r1145_2, this:r1145_1 -# 1145| mu1145_4(unknown) = ^CallSideEffect : ~m? -# 1145| v1145_5(void) = ^IndirectReadSideEffect[-1] : &:r1145_1, ~m? -# 1145| mu1145_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1145_1 -# 1145| r1145_7(bool) = Constant[0] : -# 1145| v1145_8(void) = ConditionalBranch : r1145_7 +# 35| Block 376 +# 35| r35_5251(glval) = VariableAddress[x375] : +# 35| mu35_5252(String) = Uninitialized[x375] : &:r35_5251 +# 35| r35_5253(glval) = FunctionAddress[String] : +# 35| v35_5254(void) = Call[String] : func:r35_5253, this:r35_5251 +# 35| mu35_5255(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5251 +# 35| r35_5257(glval) = VariableAddress[x375] : +# 35| r35_5258(glval) = FunctionAddress[~String] : +# 35| v35_5259(void) = Call[~String] : func:r35_5258, this:r35_5257 +# 35| mu35_5260(unknown) = ^CallSideEffect : ~m? +# 35| v35_5261(void) = ^IndirectReadSideEffect[-1] : &:r35_5257, ~m? +# 35| mu35_5262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5257 +# 35| r35_5263(bool) = Constant[0] : +# 35| v35_5264(void) = ConditionalBranch : r35_5263 #-----| False -> Block 377 #-----| True (back edge) -> Block 376 -# 1147| Block 377 -# 1147| r1147_1(glval) = VariableAddress[x376] : -# 1147| mu1147_2(String) = Uninitialized[x376] : &:r1147_1 -# 1147| r1147_3(glval) = FunctionAddress[String] : -# 1147| v1147_4(void) = Call[String] : func:r1147_3, this:r1147_1 -# 1147| mu1147_5(unknown) = ^CallSideEffect : ~m? -# 1147| mu1147_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1147_1 -# 1148| r1148_1(glval) = VariableAddress[x376] : -# 1148| r1148_2(glval) = FunctionAddress[~String] : -# 1148| v1148_3(void) = Call[~String] : func:r1148_2, this:r1148_1 -# 1148| mu1148_4(unknown) = ^CallSideEffect : ~m? -# 1148| v1148_5(void) = ^IndirectReadSideEffect[-1] : &:r1148_1, ~m? -# 1148| mu1148_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1148_1 -# 1148| r1148_7(bool) = Constant[0] : -# 1148| v1148_8(void) = ConditionalBranch : r1148_7 +# 35| Block 377 +# 35| r35_5265(glval) = VariableAddress[x376] : +# 35| mu35_5266(String) = Uninitialized[x376] : &:r35_5265 +# 35| r35_5267(glval) = FunctionAddress[String] : +# 35| v35_5268(void) = Call[String] : func:r35_5267, this:r35_5265 +# 35| mu35_5269(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5265 +# 35| r35_5271(glval) = VariableAddress[x376] : +# 35| r35_5272(glval) = FunctionAddress[~String] : +# 35| v35_5273(void) = Call[~String] : func:r35_5272, this:r35_5271 +# 35| mu35_5274(unknown) = ^CallSideEffect : ~m? +# 35| v35_5275(void) = ^IndirectReadSideEffect[-1] : &:r35_5271, ~m? +# 35| mu35_5276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5271 +# 35| r35_5277(bool) = Constant[0] : +# 35| v35_5278(void) = ConditionalBranch : r35_5277 #-----| False -> Block 378 #-----| True (back edge) -> Block 377 -# 1150| Block 378 -# 1150| r1150_1(glval) = VariableAddress[x377] : -# 1150| mu1150_2(String) = Uninitialized[x377] : &:r1150_1 -# 1150| r1150_3(glval) = FunctionAddress[String] : -# 1150| v1150_4(void) = Call[String] : func:r1150_3, this:r1150_1 -# 1150| mu1150_5(unknown) = ^CallSideEffect : ~m? -# 1150| mu1150_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1150_1 -# 1151| r1151_1(glval) = VariableAddress[x377] : -# 1151| r1151_2(glval) = FunctionAddress[~String] : -# 1151| v1151_3(void) = Call[~String] : func:r1151_2, this:r1151_1 -# 1151| mu1151_4(unknown) = ^CallSideEffect : ~m? -# 1151| v1151_5(void) = ^IndirectReadSideEffect[-1] : &:r1151_1, ~m? -# 1151| mu1151_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1151_1 -# 1151| r1151_7(bool) = Constant[0] : -# 1151| v1151_8(void) = ConditionalBranch : r1151_7 +# 35| Block 378 +# 35| r35_5279(glval) = VariableAddress[x377] : +# 35| mu35_5280(String) = Uninitialized[x377] : &:r35_5279 +# 35| r35_5281(glval) = FunctionAddress[String] : +# 35| v35_5282(void) = Call[String] : func:r35_5281, this:r35_5279 +# 35| mu35_5283(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5279 +# 35| r35_5285(glval) = VariableAddress[x377] : +# 35| r35_5286(glval) = FunctionAddress[~String] : +# 35| v35_5287(void) = Call[~String] : func:r35_5286, this:r35_5285 +# 35| mu35_5288(unknown) = ^CallSideEffect : ~m? +# 35| v35_5289(void) = ^IndirectReadSideEffect[-1] : &:r35_5285, ~m? +# 35| mu35_5290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5285 +# 35| r35_5291(bool) = Constant[0] : +# 35| v35_5292(void) = ConditionalBranch : r35_5291 #-----| False -> Block 379 #-----| True (back edge) -> Block 378 -# 1153| Block 379 -# 1153| r1153_1(glval) = VariableAddress[x378] : -# 1153| mu1153_2(String) = Uninitialized[x378] : &:r1153_1 -# 1153| r1153_3(glval) = FunctionAddress[String] : -# 1153| v1153_4(void) = Call[String] : func:r1153_3, this:r1153_1 -# 1153| mu1153_5(unknown) = ^CallSideEffect : ~m? -# 1153| mu1153_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1153_1 -# 1154| r1154_1(glval) = VariableAddress[x378] : -# 1154| r1154_2(glval) = FunctionAddress[~String] : -# 1154| v1154_3(void) = Call[~String] : func:r1154_2, this:r1154_1 -# 1154| mu1154_4(unknown) = ^CallSideEffect : ~m? -# 1154| v1154_5(void) = ^IndirectReadSideEffect[-1] : &:r1154_1, ~m? -# 1154| mu1154_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| r1154_7(bool) = Constant[0] : -# 1154| v1154_8(void) = ConditionalBranch : r1154_7 +# 35| Block 379 +# 35| r35_5293(glval) = VariableAddress[x378] : +# 35| mu35_5294(String) = Uninitialized[x378] : &:r35_5293 +# 35| r35_5295(glval) = FunctionAddress[String] : +# 35| v35_5296(void) = Call[String] : func:r35_5295, this:r35_5293 +# 35| mu35_5297(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5293 +# 35| r35_5299(glval) = VariableAddress[x378] : +# 35| r35_5300(glval) = FunctionAddress[~String] : +# 35| v35_5301(void) = Call[~String] : func:r35_5300, this:r35_5299 +# 35| mu35_5302(unknown) = ^CallSideEffect : ~m? +# 35| v35_5303(void) = ^IndirectReadSideEffect[-1] : &:r35_5299, ~m? +# 35| mu35_5304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5299 +# 35| r35_5305(bool) = Constant[0] : +# 35| v35_5306(void) = ConditionalBranch : r35_5305 #-----| False -> Block 380 #-----| True (back edge) -> Block 379 -# 1156| Block 380 -# 1156| r1156_1(glval) = VariableAddress[x379] : -# 1156| mu1156_2(String) = Uninitialized[x379] : &:r1156_1 -# 1156| r1156_3(glval) = FunctionAddress[String] : -# 1156| v1156_4(void) = Call[String] : func:r1156_3, this:r1156_1 -# 1156| mu1156_5(unknown) = ^CallSideEffect : ~m? -# 1156| mu1156_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 -# 1157| r1157_1(glval) = VariableAddress[x379] : -# 1157| r1157_2(glval) = FunctionAddress[~String] : -# 1157| v1157_3(void) = Call[~String] : func:r1157_2, this:r1157_1 -# 1157| mu1157_4(unknown) = ^CallSideEffect : ~m? -# 1157| v1157_5(void) = ^IndirectReadSideEffect[-1] : &:r1157_1, ~m? -# 1157| mu1157_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1157_1 -# 1157| r1157_7(bool) = Constant[0] : -# 1157| v1157_8(void) = ConditionalBranch : r1157_7 +# 35| Block 380 +# 35| r35_5307(glval) = VariableAddress[x379] : +# 35| mu35_5308(String) = Uninitialized[x379] : &:r35_5307 +# 35| r35_5309(glval) = FunctionAddress[String] : +# 35| v35_5310(void) = Call[String] : func:r35_5309, this:r35_5307 +# 35| mu35_5311(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5307 +# 35| r35_5313(glval) = VariableAddress[x379] : +# 35| r35_5314(glval) = FunctionAddress[~String] : +# 35| v35_5315(void) = Call[~String] : func:r35_5314, this:r35_5313 +# 35| mu35_5316(unknown) = ^CallSideEffect : ~m? +# 35| v35_5317(void) = ^IndirectReadSideEffect[-1] : &:r35_5313, ~m? +# 35| mu35_5318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5313 +# 35| r35_5319(bool) = Constant[0] : +# 35| v35_5320(void) = ConditionalBranch : r35_5319 #-----| False -> Block 381 #-----| True (back edge) -> Block 380 -# 1159| Block 381 -# 1159| r1159_1(glval) = VariableAddress[x380] : -# 1159| mu1159_2(String) = Uninitialized[x380] : &:r1159_1 -# 1159| r1159_3(glval) = FunctionAddress[String] : -# 1159| v1159_4(void) = Call[String] : func:r1159_3, this:r1159_1 -# 1159| mu1159_5(unknown) = ^CallSideEffect : ~m? -# 1159| mu1159_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1159_1 -# 1160| r1160_1(glval) = VariableAddress[x380] : -# 1160| r1160_2(glval) = FunctionAddress[~String] : -# 1160| v1160_3(void) = Call[~String] : func:r1160_2, this:r1160_1 -# 1160| mu1160_4(unknown) = ^CallSideEffect : ~m? -# 1160| v1160_5(void) = ^IndirectReadSideEffect[-1] : &:r1160_1, ~m? -# 1160| mu1160_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1160_1 -# 1160| r1160_7(bool) = Constant[0] : -# 1160| v1160_8(void) = ConditionalBranch : r1160_7 +# 35| Block 381 +# 35| r35_5321(glval) = VariableAddress[x380] : +# 35| mu35_5322(String) = Uninitialized[x380] : &:r35_5321 +# 35| r35_5323(glval) = FunctionAddress[String] : +# 35| v35_5324(void) = Call[String] : func:r35_5323, this:r35_5321 +# 35| mu35_5325(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5321 +# 35| r35_5327(glval) = VariableAddress[x380] : +# 35| r35_5328(glval) = FunctionAddress[~String] : +# 35| v35_5329(void) = Call[~String] : func:r35_5328, this:r35_5327 +# 35| mu35_5330(unknown) = ^CallSideEffect : ~m? +# 35| v35_5331(void) = ^IndirectReadSideEffect[-1] : &:r35_5327, ~m? +# 35| mu35_5332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5327 +# 35| r35_5333(bool) = Constant[0] : +# 35| v35_5334(void) = ConditionalBranch : r35_5333 #-----| False -> Block 382 #-----| True (back edge) -> Block 381 -# 1162| Block 382 -# 1162| r1162_1(glval) = VariableAddress[x381] : -# 1162| mu1162_2(String) = Uninitialized[x381] : &:r1162_1 -# 1162| r1162_3(glval) = FunctionAddress[String] : -# 1162| v1162_4(void) = Call[String] : func:r1162_3, this:r1162_1 -# 1162| mu1162_5(unknown) = ^CallSideEffect : ~m? -# 1162| mu1162_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1162_1 -# 1163| r1163_1(glval) = VariableAddress[x381] : -# 1163| r1163_2(glval) = FunctionAddress[~String] : -# 1163| v1163_3(void) = Call[~String] : func:r1163_2, this:r1163_1 -# 1163| mu1163_4(unknown) = ^CallSideEffect : ~m? -# 1163| v1163_5(void) = ^IndirectReadSideEffect[-1] : &:r1163_1, ~m? -# 1163| mu1163_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1163_1 -# 1163| r1163_7(bool) = Constant[0] : -# 1163| v1163_8(void) = ConditionalBranch : r1163_7 +# 35| Block 382 +# 35| r35_5335(glval) = VariableAddress[x381] : +# 35| mu35_5336(String) = Uninitialized[x381] : &:r35_5335 +# 35| r35_5337(glval) = FunctionAddress[String] : +# 35| v35_5338(void) = Call[String] : func:r35_5337, this:r35_5335 +# 35| mu35_5339(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5335 +# 35| r35_5341(glval) = VariableAddress[x381] : +# 35| r35_5342(glval) = FunctionAddress[~String] : +# 35| v35_5343(void) = Call[~String] : func:r35_5342, this:r35_5341 +# 35| mu35_5344(unknown) = ^CallSideEffect : ~m? +# 35| v35_5345(void) = ^IndirectReadSideEffect[-1] : &:r35_5341, ~m? +# 35| mu35_5346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5341 +# 35| r35_5347(bool) = Constant[0] : +# 35| v35_5348(void) = ConditionalBranch : r35_5347 #-----| False -> Block 383 #-----| True (back edge) -> Block 382 -# 1165| Block 383 -# 1165| r1165_1(glval) = VariableAddress[x382] : -# 1165| mu1165_2(String) = Uninitialized[x382] : &:r1165_1 -# 1165| r1165_3(glval) = FunctionAddress[String] : -# 1165| v1165_4(void) = Call[String] : func:r1165_3, this:r1165_1 -# 1165| mu1165_5(unknown) = ^CallSideEffect : ~m? -# 1165| mu1165_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1165_1 -# 1166| r1166_1(glval) = VariableAddress[x382] : -# 1166| r1166_2(glval) = FunctionAddress[~String] : -# 1166| v1166_3(void) = Call[~String] : func:r1166_2, this:r1166_1 -# 1166| mu1166_4(unknown) = ^CallSideEffect : ~m? -# 1166| v1166_5(void) = ^IndirectReadSideEffect[-1] : &:r1166_1, ~m? -# 1166| mu1166_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1166_1 -# 1166| r1166_7(bool) = Constant[0] : -# 1166| v1166_8(void) = ConditionalBranch : r1166_7 +# 35| Block 383 +# 35| r35_5349(glval) = VariableAddress[x382] : +# 35| mu35_5350(String) = Uninitialized[x382] : &:r35_5349 +# 35| r35_5351(glval) = FunctionAddress[String] : +# 35| v35_5352(void) = Call[String] : func:r35_5351, this:r35_5349 +# 35| mu35_5353(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5349 +# 35| r35_5355(glval) = VariableAddress[x382] : +# 35| r35_5356(glval) = FunctionAddress[~String] : +# 35| v35_5357(void) = Call[~String] : func:r35_5356, this:r35_5355 +# 35| mu35_5358(unknown) = ^CallSideEffect : ~m? +# 35| v35_5359(void) = ^IndirectReadSideEffect[-1] : &:r35_5355, ~m? +# 35| mu35_5360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5355 +# 35| r35_5361(bool) = Constant[0] : +# 35| v35_5362(void) = ConditionalBranch : r35_5361 #-----| False -> Block 384 #-----| True (back edge) -> Block 383 -# 1168| Block 384 -# 1168| r1168_1(glval) = VariableAddress[x383] : -# 1168| mu1168_2(String) = Uninitialized[x383] : &:r1168_1 -# 1168| r1168_3(glval) = FunctionAddress[String] : -# 1168| v1168_4(void) = Call[String] : func:r1168_3, this:r1168_1 -# 1168| mu1168_5(unknown) = ^CallSideEffect : ~m? -# 1168| mu1168_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1168_1 -# 1169| r1169_1(glval) = VariableAddress[x383] : -# 1169| r1169_2(glval) = FunctionAddress[~String] : -# 1169| v1169_3(void) = Call[~String] : func:r1169_2, this:r1169_1 -# 1169| mu1169_4(unknown) = ^CallSideEffect : ~m? -# 1169| v1169_5(void) = ^IndirectReadSideEffect[-1] : &:r1169_1, ~m? -# 1169| mu1169_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1169_1 -# 1169| r1169_7(bool) = Constant[0] : -# 1169| v1169_8(void) = ConditionalBranch : r1169_7 +# 35| Block 384 +# 35| r35_5363(glval) = VariableAddress[x383] : +# 35| mu35_5364(String) = Uninitialized[x383] : &:r35_5363 +# 35| r35_5365(glval) = FunctionAddress[String] : +# 35| v35_5366(void) = Call[String] : func:r35_5365, this:r35_5363 +# 35| mu35_5367(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5363 +# 35| r35_5369(glval) = VariableAddress[x383] : +# 35| r35_5370(glval) = FunctionAddress[~String] : +# 35| v35_5371(void) = Call[~String] : func:r35_5370, this:r35_5369 +# 35| mu35_5372(unknown) = ^CallSideEffect : ~m? +# 35| v35_5373(void) = ^IndirectReadSideEffect[-1] : &:r35_5369, ~m? +# 35| mu35_5374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5369 +# 35| r35_5375(bool) = Constant[0] : +# 35| v35_5376(void) = ConditionalBranch : r35_5375 #-----| False -> Block 385 #-----| True (back edge) -> Block 384 -# 1171| Block 385 -# 1171| r1171_1(glval) = VariableAddress[x384] : -# 1171| mu1171_2(String) = Uninitialized[x384] : &:r1171_1 -# 1171| r1171_3(glval) = FunctionAddress[String] : -# 1171| v1171_4(void) = Call[String] : func:r1171_3, this:r1171_1 -# 1171| mu1171_5(unknown) = ^CallSideEffect : ~m? -# 1171| mu1171_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1171_1 -# 1172| r1172_1(glval) = VariableAddress[x384] : -# 1172| r1172_2(glval) = FunctionAddress[~String] : -# 1172| v1172_3(void) = Call[~String] : func:r1172_2, this:r1172_1 -# 1172| mu1172_4(unknown) = ^CallSideEffect : ~m? -# 1172| v1172_5(void) = ^IndirectReadSideEffect[-1] : &:r1172_1, ~m? -# 1172| mu1172_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1172_1 -# 1172| r1172_7(bool) = Constant[0] : -# 1172| v1172_8(void) = ConditionalBranch : r1172_7 +# 35| Block 385 +# 35| r35_5377(glval) = VariableAddress[x384] : +# 35| mu35_5378(String) = Uninitialized[x384] : &:r35_5377 +# 35| r35_5379(glval) = FunctionAddress[String] : +# 35| v35_5380(void) = Call[String] : func:r35_5379, this:r35_5377 +# 35| mu35_5381(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5377 +# 35| r35_5383(glval) = VariableAddress[x384] : +# 35| r35_5384(glval) = FunctionAddress[~String] : +# 35| v35_5385(void) = Call[~String] : func:r35_5384, this:r35_5383 +# 35| mu35_5386(unknown) = ^CallSideEffect : ~m? +# 35| v35_5387(void) = ^IndirectReadSideEffect[-1] : &:r35_5383, ~m? +# 35| mu35_5388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5383 +# 35| r35_5389(bool) = Constant[0] : +# 35| v35_5390(void) = ConditionalBranch : r35_5389 #-----| False -> Block 386 #-----| True (back edge) -> Block 385 -# 1174| Block 386 -# 1174| r1174_1(glval) = VariableAddress[x385] : -# 1174| mu1174_2(String) = Uninitialized[x385] : &:r1174_1 -# 1174| r1174_3(glval) = FunctionAddress[String] : -# 1174| v1174_4(void) = Call[String] : func:r1174_3, this:r1174_1 -# 1174| mu1174_5(unknown) = ^CallSideEffect : ~m? -# 1174| mu1174_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1174_1 -# 1175| r1175_1(glval) = VariableAddress[x385] : -# 1175| r1175_2(glval) = FunctionAddress[~String] : -# 1175| v1175_3(void) = Call[~String] : func:r1175_2, this:r1175_1 -# 1175| mu1175_4(unknown) = ^CallSideEffect : ~m? -# 1175| v1175_5(void) = ^IndirectReadSideEffect[-1] : &:r1175_1, ~m? -# 1175| mu1175_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1175_1 -# 1175| r1175_7(bool) = Constant[0] : -# 1175| v1175_8(void) = ConditionalBranch : r1175_7 +# 35| Block 386 +# 35| r35_5391(glval) = VariableAddress[x385] : +# 35| mu35_5392(String) = Uninitialized[x385] : &:r35_5391 +# 35| r35_5393(glval) = FunctionAddress[String] : +# 35| v35_5394(void) = Call[String] : func:r35_5393, this:r35_5391 +# 35| mu35_5395(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5391 +# 35| r35_5397(glval) = VariableAddress[x385] : +# 35| r35_5398(glval) = FunctionAddress[~String] : +# 35| v35_5399(void) = Call[~String] : func:r35_5398, this:r35_5397 +# 35| mu35_5400(unknown) = ^CallSideEffect : ~m? +# 35| v35_5401(void) = ^IndirectReadSideEffect[-1] : &:r35_5397, ~m? +# 35| mu35_5402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5397 +# 35| r35_5403(bool) = Constant[0] : +# 35| v35_5404(void) = ConditionalBranch : r35_5403 #-----| False -> Block 387 #-----| True (back edge) -> Block 386 -# 1177| Block 387 -# 1177| r1177_1(glval) = VariableAddress[x386] : -# 1177| mu1177_2(String) = Uninitialized[x386] : &:r1177_1 -# 1177| r1177_3(glval) = FunctionAddress[String] : -# 1177| v1177_4(void) = Call[String] : func:r1177_3, this:r1177_1 -# 1177| mu1177_5(unknown) = ^CallSideEffect : ~m? -# 1177| mu1177_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1177_1 -# 1178| r1178_1(glval) = VariableAddress[x386] : -# 1178| r1178_2(glval) = FunctionAddress[~String] : -# 1178| v1178_3(void) = Call[~String] : func:r1178_2, this:r1178_1 -# 1178| mu1178_4(unknown) = ^CallSideEffect : ~m? -# 1178| v1178_5(void) = ^IndirectReadSideEffect[-1] : &:r1178_1, ~m? -# 1178| mu1178_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1178_1 -# 1178| r1178_7(bool) = Constant[0] : -# 1178| v1178_8(void) = ConditionalBranch : r1178_7 +# 35| Block 387 +# 35| r35_5405(glval) = VariableAddress[x386] : +# 35| mu35_5406(String) = Uninitialized[x386] : &:r35_5405 +# 35| r35_5407(glval) = FunctionAddress[String] : +# 35| v35_5408(void) = Call[String] : func:r35_5407, this:r35_5405 +# 35| mu35_5409(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5405 +# 35| r35_5411(glval) = VariableAddress[x386] : +# 35| r35_5412(glval) = FunctionAddress[~String] : +# 35| v35_5413(void) = Call[~String] : func:r35_5412, this:r35_5411 +# 35| mu35_5414(unknown) = ^CallSideEffect : ~m? +# 35| v35_5415(void) = ^IndirectReadSideEffect[-1] : &:r35_5411, ~m? +# 35| mu35_5416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5411 +# 35| r35_5417(bool) = Constant[0] : +# 35| v35_5418(void) = ConditionalBranch : r35_5417 #-----| False -> Block 388 #-----| True (back edge) -> Block 387 -# 1180| Block 388 -# 1180| r1180_1(glval) = VariableAddress[x387] : -# 1180| mu1180_2(String) = Uninitialized[x387] : &:r1180_1 -# 1180| r1180_3(glval) = FunctionAddress[String] : -# 1180| v1180_4(void) = Call[String] : func:r1180_3, this:r1180_1 -# 1180| mu1180_5(unknown) = ^CallSideEffect : ~m? -# 1180| mu1180_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1180_1 -# 1181| r1181_1(glval) = VariableAddress[x387] : -# 1181| r1181_2(glval) = FunctionAddress[~String] : -# 1181| v1181_3(void) = Call[~String] : func:r1181_2, this:r1181_1 -# 1181| mu1181_4(unknown) = ^CallSideEffect : ~m? -# 1181| v1181_5(void) = ^IndirectReadSideEffect[-1] : &:r1181_1, ~m? -# 1181| mu1181_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 -# 1181| r1181_7(bool) = Constant[0] : -# 1181| v1181_8(void) = ConditionalBranch : r1181_7 +# 35| Block 388 +# 35| r35_5419(glval) = VariableAddress[x387] : +# 35| mu35_5420(String) = Uninitialized[x387] : &:r35_5419 +# 35| r35_5421(glval) = FunctionAddress[String] : +# 35| v35_5422(void) = Call[String] : func:r35_5421, this:r35_5419 +# 35| mu35_5423(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5419 +# 35| r35_5425(glval) = VariableAddress[x387] : +# 35| r35_5426(glval) = FunctionAddress[~String] : +# 35| v35_5427(void) = Call[~String] : func:r35_5426, this:r35_5425 +# 35| mu35_5428(unknown) = ^CallSideEffect : ~m? +# 35| v35_5429(void) = ^IndirectReadSideEffect[-1] : &:r35_5425, ~m? +# 35| mu35_5430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5425 +# 35| r35_5431(bool) = Constant[0] : +# 35| v35_5432(void) = ConditionalBranch : r35_5431 #-----| False -> Block 389 #-----| True (back edge) -> Block 388 -# 1183| Block 389 -# 1183| r1183_1(glval) = VariableAddress[x388] : -# 1183| mu1183_2(String) = Uninitialized[x388] : &:r1183_1 -# 1183| r1183_3(glval) = FunctionAddress[String] : -# 1183| v1183_4(void) = Call[String] : func:r1183_3, this:r1183_1 -# 1183| mu1183_5(unknown) = ^CallSideEffect : ~m? -# 1183| mu1183_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1183_1 -# 1184| r1184_1(glval) = VariableAddress[x388] : -# 1184| r1184_2(glval) = FunctionAddress[~String] : -# 1184| v1184_3(void) = Call[~String] : func:r1184_2, this:r1184_1 -# 1184| mu1184_4(unknown) = ^CallSideEffect : ~m? -# 1184| v1184_5(void) = ^IndirectReadSideEffect[-1] : &:r1184_1, ~m? -# 1184| mu1184_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1184_1 -# 1184| r1184_7(bool) = Constant[0] : -# 1184| v1184_8(void) = ConditionalBranch : r1184_7 +# 35| Block 389 +# 35| r35_5433(glval) = VariableAddress[x388] : +# 35| mu35_5434(String) = Uninitialized[x388] : &:r35_5433 +# 35| r35_5435(glval) = FunctionAddress[String] : +# 35| v35_5436(void) = Call[String] : func:r35_5435, this:r35_5433 +# 35| mu35_5437(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5433 +# 35| r35_5439(glval) = VariableAddress[x388] : +# 35| r35_5440(glval) = FunctionAddress[~String] : +# 35| v35_5441(void) = Call[~String] : func:r35_5440, this:r35_5439 +# 35| mu35_5442(unknown) = ^CallSideEffect : ~m? +# 35| v35_5443(void) = ^IndirectReadSideEffect[-1] : &:r35_5439, ~m? +# 35| mu35_5444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5439 +# 35| r35_5445(bool) = Constant[0] : +# 35| v35_5446(void) = ConditionalBranch : r35_5445 #-----| False -> Block 390 #-----| True (back edge) -> Block 389 -# 1186| Block 390 -# 1186| r1186_1(glval) = VariableAddress[x389] : -# 1186| mu1186_2(String) = Uninitialized[x389] : &:r1186_1 -# 1186| r1186_3(glval) = FunctionAddress[String] : -# 1186| v1186_4(void) = Call[String] : func:r1186_3, this:r1186_1 -# 1186| mu1186_5(unknown) = ^CallSideEffect : ~m? -# 1186| mu1186_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1186_1 -# 1187| r1187_1(glval) = VariableAddress[x389] : -# 1187| r1187_2(glval) = FunctionAddress[~String] : -# 1187| v1187_3(void) = Call[~String] : func:r1187_2, this:r1187_1 -# 1187| mu1187_4(unknown) = ^CallSideEffect : ~m? -# 1187| v1187_5(void) = ^IndirectReadSideEffect[-1] : &:r1187_1, ~m? -# 1187| mu1187_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1187_1 -# 1187| r1187_7(bool) = Constant[0] : -# 1187| v1187_8(void) = ConditionalBranch : r1187_7 +# 35| Block 390 +# 35| r35_5447(glval) = VariableAddress[x389] : +# 35| mu35_5448(String) = Uninitialized[x389] : &:r35_5447 +# 35| r35_5449(glval) = FunctionAddress[String] : +# 35| v35_5450(void) = Call[String] : func:r35_5449, this:r35_5447 +# 35| mu35_5451(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5447 +# 35| r35_5453(glval) = VariableAddress[x389] : +# 35| r35_5454(glval) = FunctionAddress[~String] : +# 35| v35_5455(void) = Call[~String] : func:r35_5454, this:r35_5453 +# 35| mu35_5456(unknown) = ^CallSideEffect : ~m? +# 35| v35_5457(void) = ^IndirectReadSideEffect[-1] : &:r35_5453, ~m? +# 35| mu35_5458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5453 +# 35| r35_5459(bool) = Constant[0] : +# 35| v35_5460(void) = ConditionalBranch : r35_5459 #-----| False -> Block 391 #-----| True (back edge) -> Block 390 -# 1189| Block 391 -# 1189| r1189_1(glval) = VariableAddress[x390] : -# 1189| mu1189_2(String) = Uninitialized[x390] : &:r1189_1 -# 1189| r1189_3(glval) = FunctionAddress[String] : -# 1189| v1189_4(void) = Call[String] : func:r1189_3, this:r1189_1 -# 1189| mu1189_5(unknown) = ^CallSideEffect : ~m? -# 1189| mu1189_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1189_1 -# 1190| r1190_1(glval) = VariableAddress[x390] : -# 1190| r1190_2(glval) = FunctionAddress[~String] : -# 1190| v1190_3(void) = Call[~String] : func:r1190_2, this:r1190_1 -# 1190| mu1190_4(unknown) = ^CallSideEffect : ~m? -# 1190| v1190_5(void) = ^IndirectReadSideEffect[-1] : &:r1190_1, ~m? -# 1190| mu1190_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1190_1 -# 1190| r1190_7(bool) = Constant[0] : -# 1190| v1190_8(void) = ConditionalBranch : r1190_7 +# 35| Block 391 +# 35| r35_5461(glval) = VariableAddress[x390] : +# 35| mu35_5462(String) = Uninitialized[x390] : &:r35_5461 +# 35| r35_5463(glval) = FunctionAddress[String] : +# 35| v35_5464(void) = Call[String] : func:r35_5463, this:r35_5461 +# 35| mu35_5465(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5461 +# 35| r35_5467(glval) = VariableAddress[x390] : +# 35| r35_5468(glval) = FunctionAddress[~String] : +# 35| v35_5469(void) = Call[~String] : func:r35_5468, this:r35_5467 +# 35| mu35_5470(unknown) = ^CallSideEffect : ~m? +# 35| v35_5471(void) = ^IndirectReadSideEffect[-1] : &:r35_5467, ~m? +# 35| mu35_5472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5467 +# 35| r35_5473(bool) = Constant[0] : +# 35| v35_5474(void) = ConditionalBranch : r35_5473 #-----| False -> Block 392 #-----| True (back edge) -> Block 391 -# 1192| Block 392 -# 1192| r1192_1(glval) = VariableAddress[x391] : -# 1192| mu1192_2(String) = Uninitialized[x391] : &:r1192_1 -# 1192| r1192_3(glval) = FunctionAddress[String] : -# 1192| v1192_4(void) = Call[String] : func:r1192_3, this:r1192_1 -# 1192| mu1192_5(unknown) = ^CallSideEffect : ~m? -# 1192| mu1192_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1192_1 -# 1193| r1193_1(glval) = VariableAddress[x391] : -# 1193| r1193_2(glval) = FunctionAddress[~String] : -# 1193| v1193_3(void) = Call[~String] : func:r1193_2, this:r1193_1 -# 1193| mu1193_4(unknown) = ^CallSideEffect : ~m? -# 1193| v1193_5(void) = ^IndirectReadSideEffect[-1] : &:r1193_1, ~m? -# 1193| mu1193_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1193_1 -# 1193| r1193_7(bool) = Constant[0] : -# 1193| v1193_8(void) = ConditionalBranch : r1193_7 +# 35| Block 392 +# 35| r35_5475(glval) = VariableAddress[x391] : +# 35| mu35_5476(String) = Uninitialized[x391] : &:r35_5475 +# 35| r35_5477(glval) = FunctionAddress[String] : +# 35| v35_5478(void) = Call[String] : func:r35_5477, this:r35_5475 +# 35| mu35_5479(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5475 +# 35| r35_5481(glval) = VariableAddress[x391] : +# 35| r35_5482(glval) = FunctionAddress[~String] : +# 35| v35_5483(void) = Call[~String] : func:r35_5482, this:r35_5481 +# 35| mu35_5484(unknown) = ^CallSideEffect : ~m? +# 35| v35_5485(void) = ^IndirectReadSideEffect[-1] : &:r35_5481, ~m? +# 35| mu35_5486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5481 +# 35| r35_5487(bool) = Constant[0] : +# 35| v35_5488(void) = ConditionalBranch : r35_5487 #-----| False -> Block 393 #-----| True (back edge) -> Block 392 -# 1195| Block 393 -# 1195| r1195_1(glval) = VariableAddress[x392] : -# 1195| mu1195_2(String) = Uninitialized[x392] : &:r1195_1 -# 1195| r1195_3(glval) = FunctionAddress[String] : -# 1195| v1195_4(void) = Call[String] : func:r1195_3, this:r1195_1 -# 1195| mu1195_5(unknown) = ^CallSideEffect : ~m? -# 1195| mu1195_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1195_1 -# 1196| r1196_1(glval) = VariableAddress[x392] : -# 1196| r1196_2(glval) = FunctionAddress[~String] : -# 1196| v1196_3(void) = Call[~String] : func:r1196_2, this:r1196_1 -# 1196| mu1196_4(unknown) = ^CallSideEffect : ~m? -# 1196| v1196_5(void) = ^IndirectReadSideEffect[-1] : &:r1196_1, ~m? -# 1196| mu1196_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1196_1 -# 1196| r1196_7(bool) = Constant[0] : -# 1196| v1196_8(void) = ConditionalBranch : r1196_7 +# 35| Block 393 +# 35| r35_5489(glval) = VariableAddress[x392] : +# 35| mu35_5490(String) = Uninitialized[x392] : &:r35_5489 +# 35| r35_5491(glval) = FunctionAddress[String] : +# 35| v35_5492(void) = Call[String] : func:r35_5491, this:r35_5489 +# 35| mu35_5493(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5489 +# 35| r35_5495(glval) = VariableAddress[x392] : +# 35| r35_5496(glval) = FunctionAddress[~String] : +# 35| v35_5497(void) = Call[~String] : func:r35_5496, this:r35_5495 +# 35| mu35_5498(unknown) = ^CallSideEffect : ~m? +# 35| v35_5499(void) = ^IndirectReadSideEffect[-1] : &:r35_5495, ~m? +# 35| mu35_5500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5495 +# 35| r35_5501(bool) = Constant[0] : +# 35| v35_5502(void) = ConditionalBranch : r35_5501 #-----| False -> Block 394 #-----| True (back edge) -> Block 393 -# 1198| Block 394 -# 1198| r1198_1(glval) = VariableAddress[x393] : -# 1198| mu1198_2(String) = Uninitialized[x393] : &:r1198_1 -# 1198| r1198_3(glval) = FunctionAddress[String] : -# 1198| v1198_4(void) = Call[String] : func:r1198_3, this:r1198_1 -# 1198| mu1198_5(unknown) = ^CallSideEffect : ~m? -# 1198| mu1198_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1198_1 -# 1199| r1199_1(glval) = VariableAddress[x393] : -# 1199| r1199_2(glval) = FunctionAddress[~String] : -# 1199| v1199_3(void) = Call[~String] : func:r1199_2, this:r1199_1 -# 1199| mu1199_4(unknown) = ^CallSideEffect : ~m? -# 1199| v1199_5(void) = ^IndirectReadSideEffect[-1] : &:r1199_1, ~m? -# 1199| mu1199_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1199_1 -# 1199| r1199_7(bool) = Constant[0] : -# 1199| v1199_8(void) = ConditionalBranch : r1199_7 +# 35| Block 394 +# 35| r35_5503(glval) = VariableAddress[x393] : +# 35| mu35_5504(String) = Uninitialized[x393] : &:r35_5503 +# 35| r35_5505(glval) = FunctionAddress[String] : +# 35| v35_5506(void) = Call[String] : func:r35_5505, this:r35_5503 +# 35| mu35_5507(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5503 +# 35| r35_5509(glval) = VariableAddress[x393] : +# 35| r35_5510(glval) = FunctionAddress[~String] : +# 35| v35_5511(void) = Call[~String] : func:r35_5510, this:r35_5509 +# 35| mu35_5512(unknown) = ^CallSideEffect : ~m? +# 35| v35_5513(void) = ^IndirectReadSideEffect[-1] : &:r35_5509, ~m? +# 35| mu35_5514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5509 +# 35| r35_5515(bool) = Constant[0] : +# 35| v35_5516(void) = ConditionalBranch : r35_5515 #-----| False -> Block 395 #-----| True (back edge) -> Block 394 -# 1201| Block 395 -# 1201| r1201_1(glval) = VariableAddress[x394] : -# 1201| mu1201_2(String) = Uninitialized[x394] : &:r1201_1 -# 1201| r1201_3(glval) = FunctionAddress[String] : -# 1201| v1201_4(void) = Call[String] : func:r1201_3, this:r1201_1 -# 1201| mu1201_5(unknown) = ^CallSideEffect : ~m? -# 1201| mu1201_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1201_1 -# 1202| r1202_1(glval) = VariableAddress[x394] : -# 1202| r1202_2(glval) = FunctionAddress[~String] : -# 1202| v1202_3(void) = Call[~String] : func:r1202_2, this:r1202_1 -# 1202| mu1202_4(unknown) = ^CallSideEffect : ~m? -# 1202| v1202_5(void) = ^IndirectReadSideEffect[-1] : &:r1202_1, ~m? -# 1202| mu1202_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1202_1 -# 1202| r1202_7(bool) = Constant[0] : -# 1202| v1202_8(void) = ConditionalBranch : r1202_7 +# 35| Block 395 +# 35| r35_5517(glval) = VariableAddress[x394] : +# 35| mu35_5518(String) = Uninitialized[x394] : &:r35_5517 +# 35| r35_5519(glval) = FunctionAddress[String] : +# 35| v35_5520(void) = Call[String] : func:r35_5519, this:r35_5517 +# 35| mu35_5521(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5517 +# 35| r35_5523(glval) = VariableAddress[x394] : +# 35| r35_5524(glval) = FunctionAddress[~String] : +# 35| v35_5525(void) = Call[~String] : func:r35_5524, this:r35_5523 +# 35| mu35_5526(unknown) = ^CallSideEffect : ~m? +# 35| v35_5527(void) = ^IndirectReadSideEffect[-1] : &:r35_5523, ~m? +# 35| mu35_5528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5523 +# 35| r35_5529(bool) = Constant[0] : +# 35| v35_5530(void) = ConditionalBranch : r35_5529 #-----| False -> Block 396 #-----| True (back edge) -> Block 395 -# 1204| Block 396 -# 1204| r1204_1(glval) = VariableAddress[x395] : -# 1204| mu1204_2(String) = Uninitialized[x395] : &:r1204_1 -# 1204| r1204_3(glval) = FunctionAddress[String] : -# 1204| v1204_4(void) = Call[String] : func:r1204_3, this:r1204_1 -# 1204| mu1204_5(unknown) = ^CallSideEffect : ~m? -# 1204| mu1204_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1204_1 -# 1205| r1205_1(glval) = VariableAddress[x395] : -# 1205| r1205_2(glval) = FunctionAddress[~String] : -# 1205| v1205_3(void) = Call[~String] : func:r1205_2, this:r1205_1 -# 1205| mu1205_4(unknown) = ^CallSideEffect : ~m? -# 1205| v1205_5(void) = ^IndirectReadSideEffect[-1] : &:r1205_1, ~m? -# 1205| mu1205_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1205_1 -# 1205| r1205_7(bool) = Constant[0] : -# 1205| v1205_8(void) = ConditionalBranch : r1205_7 +# 35| Block 396 +# 35| r35_5531(glval) = VariableAddress[x395] : +# 35| mu35_5532(String) = Uninitialized[x395] : &:r35_5531 +# 35| r35_5533(glval) = FunctionAddress[String] : +# 35| v35_5534(void) = Call[String] : func:r35_5533, this:r35_5531 +# 35| mu35_5535(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5531 +# 35| r35_5537(glval) = VariableAddress[x395] : +# 35| r35_5538(glval) = FunctionAddress[~String] : +# 35| v35_5539(void) = Call[~String] : func:r35_5538, this:r35_5537 +# 35| mu35_5540(unknown) = ^CallSideEffect : ~m? +# 35| v35_5541(void) = ^IndirectReadSideEffect[-1] : &:r35_5537, ~m? +# 35| mu35_5542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5537 +# 35| r35_5543(bool) = Constant[0] : +# 35| v35_5544(void) = ConditionalBranch : r35_5543 #-----| False -> Block 397 #-----| True (back edge) -> Block 396 -# 1207| Block 397 -# 1207| r1207_1(glval) = VariableAddress[x396] : -# 1207| mu1207_2(String) = Uninitialized[x396] : &:r1207_1 -# 1207| r1207_3(glval) = FunctionAddress[String] : -# 1207| v1207_4(void) = Call[String] : func:r1207_3, this:r1207_1 -# 1207| mu1207_5(unknown) = ^CallSideEffect : ~m? -# 1207| mu1207_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1207_1 -# 1208| r1208_1(glval) = VariableAddress[x396] : -# 1208| r1208_2(glval) = FunctionAddress[~String] : -# 1208| v1208_3(void) = Call[~String] : func:r1208_2, this:r1208_1 -# 1208| mu1208_4(unknown) = ^CallSideEffect : ~m? -# 1208| v1208_5(void) = ^IndirectReadSideEffect[-1] : &:r1208_1, ~m? -# 1208| mu1208_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1208_1 -# 1208| r1208_7(bool) = Constant[0] : -# 1208| v1208_8(void) = ConditionalBranch : r1208_7 +# 35| Block 397 +# 35| r35_5545(glval) = VariableAddress[x396] : +# 35| mu35_5546(String) = Uninitialized[x396] : &:r35_5545 +# 35| r35_5547(glval) = FunctionAddress[String] : +# 35| v35_5548(void) = Call[String] : func:r35_5547, this:r35_5545 +# 35| mu35_5549(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5545 +# 35| r35_5551(glval) = VariableAddress[x396] : +# 35| r35_5552(glval) = FunctionAddress[~String] : +# 35| v35_5553(void) = Call[~String] : func:r35_5552, this:r35_5551 +# 35| mu35_5554(unknown) = ^CallSideEffect : ~m? +# 35| v35_5555(void) = ^IndirectReadSideEffect[-1] : &:r35_5551, ~m? +# 35| mu35_5556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5551 +# 35| r35_5557(bool) = Constant[0] : +# 35| v35_5558(void) = ConditionalBranch : r35_5557 #-----| False -> Block 398 #-----| True (back edge) -> Block 397 -# 1210| Block 398 -# 1210| r1210_1(glval) = VariableAddress[x397] : -# 1210| mu1210_2(String) = Uninitialized[x397] : &:r1210_1 -# 1210| r1210_3(glval) = FunctionAddress[String] : -# 1210| v1210_4(void) = Call[String] : func:r1210_3, this:r1210_1 -# 1210| mu1210_5(unknown) = ^CallSideEffect : ~m? -# 1210| mu1210_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1210_1 -# 1211| r1211_1(glval) = VariableAddress[x397] : -# 1211| r1211_2(glval) = FunctionAddress[~String] : -# 1211| v1211_3(void) = Call[~String] : func:r1211_2, this:r1211_1 -# 1211| mu1211_4(unknown) = ^CallSideEffect : ~m? -# 1211| v1211_5(void) = ^IndirectReadSideEffect[-1] : &:r1211_1, ~m? -# 1211| mu1211_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1211_1 -# 1211| r1211_7(bool) = Constant[0] : -# 1211| v1211_8(void) = ConditionalBranch : r1211_7 +# 35| Block 398 +# 35| r35_5559(glval) = VariableAddress[x397] : +# 35| mu35_5560(String) = Uninitialized[x397] : &:r35_5559 +# 35| r35_5561(glval) = FunctionAddress[String] : +# 35| v35_5562(void) = Call[String] : func:r35_5561, this:r35_5559 +# 35| mu35_5563(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5559 +# 35| r35_5565(glval) = VariableAddress[x397] : +# 35| r35_5566(glval) = FunctionAddress[~String] : +# 35| v35_5567(void) = Call[~String] : func:r35_5566, this:r35_5565 +# 35| mu35_5568(unknown) = ^CallSideEffect : ~m? +# 35| v35_5569(void) = ^IndirectReadSideEffect[-1] : &:r35_5565, ~m? +# 35| mu35_5570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5565 +# 35| r35_5571(bool) = Constant[0] : +# 35| v35_5572(void) = ConditionalBranch : r35_5571 #-----| False -> Block 399 #-----| True (back edge) -> Block 398 -# 1213| Block 399 -# 1213| r1213_1(glval) = VariableAddress[x398] : -# 1213| mu1213_2(String) = Uninitialized[x398] : &:r1213_1 -# 1213| r1213_3(glval) = FunctionAddress[String] : -# 1213| v1213_4(void) = Call[String] : func:r1213_3, this:r1213_1 -# 1213| mu1213_5(unknown) = ^CallSideEffect : ~m? -# 1213| mu1213_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1213_1 -# 1214| r1214_1(glval) = VariableAddress[x398] : -# 1214| r1214_2(glval) = FunctionAddress[~String] : -# 1214| v1214_3(void) = Call[~String] : func:r1214_2, this:r1214_1 -# 1214| mu1214_4(unknown) = ^CallSideEffect : ~m? -# 1214| v1214_5(void) = ^IndirectReadSideEffect[-1] : &:r1214_1, ~m? -# 1214| mu1214_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1214_1 -# 1214| r1214_7(bool) = Constant[0] : -# 1214| v1214_8(void) = ConditionalBranch : r1214_7 +# 35| Block 399 +# 35| r35_5573(glval) = VariableAddress[x398] : +# 35| mu35_5574(String) = Uninitialized[x398] : &:r35_5573 +# 35| r35_5575(glval) = FunctionAddress[String] : +# 35| v35_5576(void) = Call[String] : func:r35_5575, this:r35_5573 +# 35| mu35_5577(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5573 +# 35| r35_5579(glval) = VariableAddress[x398] : +# 35| r35_5580(glval) = FunctionAddress[~String] : +# 35| v35_5581(void) = Call[~String] : func:r35_5580, this:r35_5579 +# 35| mu35_5582(unknown) = ^CallSideEffect : ~m? +# 35| v35_5583(void) = ^IndirectReadSideEffect[-1] : &:r35_5579, ~m? +# 35| mu35_5584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5579 +# 35| r35_5585(bool) = Constant[0] : +# 35| v35_5586(void) = ConditionalBranch : r35_5585 #-----| False -> Block 400 #-----| True (back edge) -> Block 399 -# 1216| Block 400 -# 1216| r1216_1(glval) = VariableAddress[x399] : -# 1216| mu1216_2(String) = Uninitialized[x399] : &:r1216_1 -# 1216| r1216_3(glval) = FunctionAddress[String] : -# 1216| v1216_4(void) = Call[String] : func:r1216_3, this:r1216_1 -# 1216| mu1216_5(unknown) = ^CallSideEffect : ~m? -# 1216| mu1216_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1216_1 -# 1217| r1217_1(glval) = VariableAddress[x399] : -# 1217| r1217_2(glval) = FunctionAddress[~String] : -# 1217| v1217_3(void) = Call[~String] : func:r1217_2, this:r1217_1 -# 1217| mu1217_4(unknown) = ^CallSideEffect : ~m? -# 1217| v1217_5(void) = ^IndirectReadSideEffect[-1] : &:r1217_1, ~m? -# 1217| mu1217_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1217_1 -# 1217| r1217_7(bool) = Constant[0] : -# 1217| v1217_8(void) = ConditionalBranch : r1217_7 +# 35| Block 400 +# 35| r35_5587(glval) = VariableAddress[x399] : +# 35| mu35_5588(String) = Uninitialized[x399] : &:r35_5587 +# 35| r35_5589(glval) = FunctionAddress[String] : +# 35| v35_5590(void) = Call[String] : func:r35_5589, this:r35_5587 +# 35| mu35_5591(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5587 +# 35| r35_5593(glval) = VariableAddress[x399] : +# 35| r35_5594(glval) = FunctionAddress[~String] : +# 35| v35_5595(void) = Call[~String] : func:r35_5594, this:r35_5593 +# 35| mu35_5596(unknown) = ^CallSideEffect : ~m? +# 35| v35_5597(void) = ^IndirectReadSideEffect[-1] : &:r35_5593, ~m? +# 35| mu35_5598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5593 +# 35| r35_5599(bool) = Constant[0] : +# 35| v35_5600(void) = ConditionalBranch : r35_5599 #-----| False -> Block 401 #-----| True (back edge) -> Block 400 -# 1219| Block 401 -# 1219| r1219_1(glval) = VariableAddress[x400] : -# 1219| mu1219_2(String) = Uninitialized[x400] : &:r1219_1 -# 1219| r1219_3(glval) = FunctionAddress[String] : -# 1219| v1219_4(void) = Call[String] : func:r1219_3, this:r1219_1 -# 1219| mu1219_5(unknown) = ^CallSideEffect : ~m? -# 1219| mu1219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1219_1 -# 1220| r1220_1(glval) = VariableAddress[x400] : -# 1220| r1220_2(glval) = FunctionAddress[~String] : -# 1220| v1220_3(void) = Call[~String] : func:r1220_2, this:r1220_1 -# 1220| mu1220_4(unknown) = ^CallSideEffect : ~m? -# 1220| v1220_5(void) = ^IndirectReadSideEffect[-1] : &:r1220_1, ~m? -# 1220| mu1220_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1220_1 -# 1220| r1220_7(bool) = Constant[0] : -# 1220| v1220_8(void) = ConditionalBranch : r1220_7 +# 35| Block 401 +# 35| r35_5601(glval) = VariableAddress[x400] : +# 35| mu35_5602(String) = Uninitialized[x400] : &:r35_5601 +# 35| r35_5603(glval) = FunctionAddress[String] : +# 35| v35_5604(void) = Call[String] : func:r35_5603, this:r35_5601 +# 35| mu35_5605(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5601 +# 35| r35_5607(glval) = VariableAddress[x400] : +# 35| r35_5608(glval) = FunctionAddress[~String] : +# 35| v35_5609(void) = Call[~String] : func:r35_5608, this:r35_5607 +# 35| mu35_5610(unknown) = ^CallSideEffect : ~m? +# 35| v35_5611(void) = ^IndirectReadSideEffect[-1] : &:r35_5607, ~m? +# 35| mu35_5612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5607 +# 35| r35_5613(bool) = Constant[0] : +# 35| v35_5614(void) = ConditionalBranch : r35_5613 #-----| False -> Block 402 #-----| True (back edge) -> Block 401 -# 1222| Block 402 -# 1222| r1222_1(glval) = VariableAddress[x401] : -# 1222| mu1222_2(String) = Uninitialized[x401] : &:r1222_1 -# 1222| r1222_3(glval) = FunctionAddress[String] : -# 1222| v1222_4(void) = Call[String] : func:r1222_3, this:r1222_1 -# 1222| mu1222_5(unknown) = ^CallSideEffect : ~m? -# 1222| mu1222_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1222_1 -# 1223| r1223_1(glval) = VariableAddress[x401] : -# 1223| r1223_2(glval) = FunctionAddress[~String] : -# 1223| v1223_3(void) = Call[~String] : func:r1223_2, this:r1223_1 -# 1223| mu1223_4(unknown) = ^CallSideEffect : ~m? -# 1223| v1223_5(void) = ^IndirectReadSideEffect[-1] : &:r1223_1, ~m? -# 1223| mu1223_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1223_1 -# 1223| r1223_7(bool) = Constant[0] : -# 1223| v1223_8(void) = ConditionalBranch : r1223_7 +# 35| Block 402 +# 35| r35_5615(glval) = VariableAddress[x401] : +# 35| mu35_5616(String) = Uninitialized[x401] : &:r35_5615 +# 35| r35_5617(glval) = FunctionAddress[String] : +# 35| v35_5618(void) = Call[String] : func:r35_5617, this:r35_5615 +# 35| mu35_5619(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5615 +# 35| r35_5621(glval) = VariableAddress[x401] : +# 35| r35_5622(glval) = FunctionAddress[~String] : +# 35| v35_5623(void) = Call[~String] : func:r35_5622, this:r35_5621 +# 35| mu35_5624(unknown) = ^CallSideEffect : ~m? +# 35| v35_5625(void) = ^IndirectReadSideEffect[-1] : &:r35_5621, ~m? +# 35| mu35_5626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5621 +# 35| r35_5627(bool) = Constant[0] : +# 35| v35_5628(void) = ConditionalBranch : r35_5627 #-----| False -> Block 403 #-----| True (back edge) -> Block 402 -# 1225| Block 403 -# 1225| r1225_1(glval) = VariableAddress[x402] : -# 1225| mu1225_2(String) = Uninitialized[x402] : &:r1225_1 -# 1225| r1225_3(glval) = FunctionAddress[String] : -# 1225| v1225_4(void) = Call[String] : func:r1225_3, this:r1225_1 -# 1225| mu1225_5(unknown) = ^CallSideEffect : ~m? -# 1225| mu1225_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1225_1 -# 1226| r1226_1(glval) = VariableAddress[x402] : -# 1226| r1226_2(glval) = FunctionAddress[~String] : -# 1226| v1226_3(void) = Call[~String] : func:r1226_2, this:r1226_1 -# 1226| mu1226_4(unknown) = ^CallSideEffect : ~m? -# 1226| v1226_5(void) = ^IndirectReadSideEffect[-1] : &:r1226_1, ~m? -# 1226| mu1226_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1226_1 -# 1226| r1226_7(bool) = Constant[0] : -# 1226| v1226_8(void) = ConditionalBranch : r1226_7 +# 35| Block 403 +# 35| r35_5629(glval) = VariableAddress[x402] : +# 35| mu35_5630(String) = Uninitialized[x402] : &:r35_5629 +# 35| r35_5631(glval) = FunctionAddress[String] : +# 35| v35_5632(void) = Call[String] : func:r35_5631, this:r35_5629 +# 35| mu35_5633(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5629 +# 35| r35_5635(glval) = VariableAddress[x402] : +# 35| r35_5636(glval) = FunctionAddress[~String] : +# 35| v35_5637(void) = Call[~String] : func:r35_5636, this:r35_5635 +# 35| mu35_5638(unknown) = ^CallSideEffect : ~m? +# 35| v35_5639(void) = ^IndirectReadSideEffect[-1] : &:r35_5635, ~m? +# 35| mu35_5640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5635 +# 35| r35_5641(bool) = Constant[0] : +# 35| v35_5642(void) = ConditionalBranch : r35_5641 #-----| False -> Block 404 #-----| True (back edge) -> Block 403 -# 1228| Block 404 -# 1228| r1228_1(glval) = VariableAddress[x403] : -# 1228| mu1228_2(String) = Uninitialized[x403] : &:r1228_1 -# 1228| r1228_3(glval) = FunctionAddress[String] : -# 1228| v1228_4(void) = Call[String] : func:r1228_3, this:r1228_1 -# 1228| mu1228_5(unknown) = ^CallSideEffect : ~m? -# 1228| mu1228_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1228_1 -# 1229| r1229_1(glval) = VariableAddress[x403] : -# 1229| r1229_2(glval) = FunctionAddress[~String] : -# 1229| v1229_3(void) = Call[~String] : func:r1229_2, this:r1229_1 -# 1229| mu1229_4(unknown) = ^CallSideEffect : ~m? -# 1229| v1229_5(void) = ^IndirectReadSideEffect[-1] : &:r1229_1, ~m? -# 1229| mu1229_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1229_1 -# 1229| r1229_7(bool) = Constant[0] : -# 1229| v1229_8(void) = ConditionalBranch : r1229_7 +# 35| Block 404 +# 35| r35_5643(glval) = VariableAddress[x403] : +# 35| mu35_5644(String) = Uninitialized[x403] : &:r35_5643 +# 35| r35_5645(glval) = FunctionAddress[String] : +# 35| v35_5646(void) = Call[String] : func:r35_5645, this:r35_5643 +# 35| mu35_5647(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5643 +# 35| r35_5649(glval) = VariableAddress[x403] : +# 35| r35_5650(glval) = FunctionAddress[~String] : +# 35| v35_5651(void) = Call[~String] : func:r35_5650, this:r35_5649 +# 35| mu35_5652(unknown) = ^CallSideEffect : ~m? +# 35| v35_5653(void) = ^IndirectReadSideEffect[-1] : &:r35_5649, ~m? +# 35| mu35_5654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5649 +# 35| r35_5655(bool) = Constant[0] : +# 35| v35_5656(void) = ConditionalBranch : r35_5655 #-----| False -> Block 405 #-----| True (back edge) -> Block 404 -# 1231| Block 405 -# 1231| r1231_1(glval) = VariableAddress[x404] : -# 1231| mu1231_2(String) = Uninitialized[x404] : &:r1231_1 -# 1231| r1231_3(glval) = FunctionAddress[String] : -# 1231| v1231_4(void) = Call[String] : func:r1231_3, this:r1231_1 -# 1231| mu1231_5(unknown) = ^CallSideEffect : ~m? -# 1231| mu1231_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1231_1 -# 1232| r1232_1(glval) = VariableAddress[x404] : -# 1232| r1232_2(glval) = FunctionAddress[~String] : -# 1232| v1232_3(void) = Call[~String] : func:r1232_2, this:r1232_1 -# 1232| mu1232_4(unknown) = ^CallSideEffect : ~m? -# 1232| v1232_5(void) = ^IndirectReadSideEffect[-1] : &:r1232_1, ~m? -# 1232| mu1232_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1232_1 -# 1232| r1232_7(bool) = Constant[0] : -# 1232| v1232_8(void) = ConditionalBranch : r1232_7 +# 35| Block 405 +# 35| r35_5657(glval) = VariableAddress[x404] : +# 35| mu35_5658(String) = Uninitialized[x404] : &:r35_5657 +# 35| r35_5659(glval) = FunctionAddress[String] : +# 35| v35_5660(void) = Call[String] : func:r35_5659, this:r35_5657 +# 35| mu35_5661(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5657 +# 35| r35_5663(glval) = VariableAddress[x404] : +# 35| r35_5664(glval) = FunctionAddress[~String] : +# 35| v35_5665(void) = Call[~String] : func:r35_5664, this:r35_5663 +# 35| mu35_5666(unknown) = ^CallSideEffect : ~m? +# 35| v35_5667(void) = ^IndirectReadSideEffect[-1] : &:r35_5663, ~m? +# 35| mu35_5668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5663 +# 35| r35_5669(bool) = Constant[0] : +# 35| v35_5670(void) = ConditionalBranch : r35_5669 #-----| False -> Block 406 #-----| True (back edge) -> Block 405 -# 1234| Block 406 -# 1234| r1234_1(glval) = VariableAddress[x405] : -# 1234| mu1234_2(String) = Uninitialized[x405] : &:r1234_1 -# 1234| r1234_3(glval) = FunctionAddress[String] : -# 1234| v1234_4(void) = Call[String] : func:r1234_3, this:r1234_1 -# 1234| mu1234_5(unknown) = ^CallSideEffect : ~m? -# 1234| mu1234_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1234_1 -# 1235| r1235_1(glval) = VariableAddress[x405] : -# 1235| r1235_2(glval) = FunctionAddress[~String] : -# 1235| v1235_3(void) = Call[~String] : func:r1235_2, this:r1235_1 -# 1235| mu1235_4(unknown) = ^CallSideEffect : ~m? -# 1235| v1235_5(void) = ^IndirectReadSideEffect[-1] : &:r1235_1, ~m? -# 1235| mu1235_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1235_1 -# 1235| r1235_7(bool) = Constant[0] : -# 1235| v1235_8(void) = ConditionalBranch : r1235_7 +# 35| Block 406 +# 35| r35_5671(glval) = VariableAddress[x405] : +# 35| mu35_5672(String) = Uninitialized[x405] : &:r35_5671 +# 35| r35_5673(glval) = FunctionAddress[String] : +# 35| v35_5674(void) = Call[String] : func:r35_5673, this:r35_5671 +# 35| mu35_5675(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5671 +# 35| r35_5677(glval) = VariableAddress[x405] : +# 35| r35_5678(glval) = FunctionAddress[~String] : +# 35| v35_5679(void) = Call[~String] : func:r35_5678, this:r35_5677 +# 35| mu35_5680(unknown) = ^CallSideEffect : ~m? +# 35| v35_5681(void) = ^IndirectReadSideEffect[-1] : &:r35_5677, ~m? +# 35| mu35_5682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5677 +# 35| r35_5683(bool) = Constant[0] : +# 35| v35_5684(void) = ConditionalBranch : r35_5683 #-----| False -> Block 407 #-----| True (back edge) -> Block 406 -# 1237| Block 407 -# 1237| r1237_1(glval) = VariableAddress[x406] : -# 1237| mu1237_2(String) = Uninitialized[x406] : &:r1237_1 -# 1237| r1237_3(glval) = FunctionAddress[String] : -# 1237| v1237_4(void) = Call[String] : func:r1237_3, this:r1237_1 -# 1237| mu1237_5(unknown) = ^CallSideEffect : ~m? -# 1237| mu1237_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1237_1 -# 1238| r1238_1(glval) = VariableAddress[x406] : -# 1238| r1238_2(glval) = FunctionAddress[~String] : -# 1238| v1238_3(void) = Call[~String] : func:r1238_2, this:r1238_1 -# 1238| mu1238_4(unknown) = ^CallSideEffect : ~m? -# 1238| v1238_5(void) = ^IndirectReadSideEffect[-1] : &:r1238_1, ~m? -# 1238| mu1238_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1238_1 -# 1238| r1238_7(bool) = Constant[0] : -# 1238| v1238_8(void) = ConditionalBranch : r1238_7 +# 35| Block 407 +# 35| r35_5685(glval) = VariableAddress[x406] : +# 35| mu35_5686(String) = Uninitialized[x406] : &:r35_5685 +# 35| r35_5687(glval) = FunctionAddress[String] : +# 35| v35_5688(void) = Call[String] : func:r35_5687, this:r35_5685 +# 35| mu35_5689(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5685 +# 35| r35_5691(glval) = VariableAddress[x406] : +# 35| r35_5692(glval) = FunctionAddress[~String] : +# 35| v35_5693(void) = Call[~String] : func:r35_5692, this:r35_5691 +# 35| mu35_5694(unknown) = ^CallSideEffect : ~m? +# 35| v35_5695(void) = ^IndirectReadSideEffect[-1] : &:r35_5691, ~m? +# 35| mu35_5696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5691 +# 35| r35_5697(bool) = Constant[0] : +# 35| v35_5698(void) = ConditionalBranch : r35_5697 #-----| False -> Block 408 #-----| True (back edge) -> Block 407 -# 1240| Block 408 -# 1240| r1240_1(glval) = VariableAddress[x407] : -# 1240| mu1240_2(String) = Uninitialized[x407] : &:r1240_1 -# 1240| r1240_3(glval) = FunctionAddress[String] : -# 1240| v1240_4(void) = Call[String] : func:r1240_3, this:r1240_1 -# 1240| mu1240_5(unknown) = ^CallSideEffect : ~m? -# 1240| mu1240_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1240_1 -# 1241| r1241_1(glval) = VariableAddress[x407] : -# 1241| r1241_2(glval) = FunctionAddress[~String] : -# 1241| v1241_3(void) = Call[~String] : func:r1241_2, this:r1241_1 -# 1241| mu1241_4(unknown) = ^CallSideEffect : ~m? -# 1241| v1241_5(void) = ^IndirectReadSideEffect[-1] : &:r1241_1, ~m? -# 1241| mu1241_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_1 -# 1241| r1241_7(bool) = Constant[0] : -# 1241| v1241_8(void) = ConditionalBranch : r1241_7 +# 35| Block 408 +# 35| r35_5699(glval) = VariableAddress[x407] : +# 35| mu35_5700(String) = Uninitialized[x407] : &:r35_5699 +# 35| r35_5701(glval) = FunctionAddress[String] : +# 35| v35_5702(void) = Call[String] : func:r35_5701, this:r35_5699 +# 35| mu35_5703(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5699 +# 35| r35_5705(glval) = VariableAddress[x407] : +# 35| r35_5706(glval) = FunctionAddress[~String] : +# 35| v35_5707(void) = Call[~String] : func:r35_5706, this:r35_5705 +# 35| mu35_5708(unknown) = ^CallSideEffect : ~m? +# 35| v35_5709(void) = ^IndirectReadSideEffect[-1] : &:r35_5705, ~m? +# 35| mu35_5710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5705 +# 35| r35_5711(bool) = Constant[0] : +# 35| v35_5712(void) = ConditionalBranch : r35_5711 #-----| False -> Block 409 #-----| True (back edge) -> Block 408 -# 1243| Block 409 -# 1243| r1243_1(glval) = VariableAddress[x408] : -# 1243| mu1243_2(String) = Uninitialized[x408] : &:r1243_1 -# 1243| r1243_3(glval) = FunctionAddress[String] : -# 1243| v1243_4(void) = Call[String] : func:r1243_3, this:r1243_1 -# 1243| mu1243_5(unknown) = ^CallSideEffect : ~m? -# 1243| mu1243_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_1 -# 1244| r1244_1(glval) = VariableAddress[x408] : -# 1244| r1244_2(glval) = FunctionAddress[~String] : -# 1244| v1244_3(void) = Call[~String] : func:r1244_2, this:r1244_1 -# 1244| mu1244_4(unknown) = ^CallSideEffect : ~m? -# 1244| v1244_5(void) = ^IndirectReadSideEffect[-1] : &:r1244_1, ~m? -# 1244| mu1244_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_1 -# 1244| r1244_7(bool) = Constant[0] : -# 1244| v1244_8(void) = ConditionalBranch : r1244_7 +# 35| Block 409 +# 35| r35_5713(glval) = VariableAddress[x408] : +# 35| mu35_5714(String) = Uninitialized[x408] : &:r35_5713 +# 35| r35_5715(glval) = FunctionAddress[String] : +# 35| v35_5716(void) = Call[String] : func:r35_5715, this:r35_5713 +# 35| mu35_5717(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5713 +# 35| r35_5719(glval) = VariableAddress[x408] : +# 35| r35_5720(glval) = FunctionAddress[~String] : +# 35| v35_5721(void) = Call[~String] : func:r35_5720, this:r35_5719 +# 35| mu35_5722(unknown) = ^CallSideEffect : ~m? +# 35| v35_5723(void) = ^IndirectReadSideEffect[-1] : &:r35_5719, ~m? +# 35| mu35_5724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5719 +# 35| r35_5725(bool) = Constant[0] : +# 35| v35_5726(void) = ConditionalBranch : r35_5725 #-----| False -> Block 410 #-----| True (back edge) -> Block 409 -# 1246| Block 410 -# 1246| r1246_1(glval) = VariableAddress[x409] : -# 1246| mu1246_2(String) = Uninitialized[x409] : &:r1246_1 -# 1246| r1246_3(glval) = FunctionAddress[String] : -# 1246| v1246_4(void) = Call[String] : func:r1246_3, this:r1246_1 -# 1246| mu1246_5(unknown) = ^CallSideEffect : ~m? -# 1246| mu1246_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1246_1 -# 1247| r1247_1(glval) = VariableAddress[x409] : -# 1247| r1247_2(glval) = FunctionAddress[~String] : -# 1247| v1247_3(void) = Call[~String] : func:r1247_2, this:r1247_1 -# 1247| mu1247_4(unknown) = ^CallSideEffect : ~m? -# 1247| v1247_5(void) = ^IndirectReadSideEffect[-1] : &:r1247_1, ~m? -# 1247| mu1247_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1247_1 -# 1247| r1247_7(bool) = Constant[0] : -# 1247| v1247_8(void) = ConditionalBranch : r1247_7 +# 35| Block 410 +# 35| r35_5727(glval) = VariableAddress[x409] : +# 35| mu35_5728(String) = Uninitialized[x409] : &:r35_5727 +# 35| r35_5729(glval) = FunctionAddress[String] : +# 35| v35_5730(void) = Call[String] : func:r35_5729, this:r35_5727 +# 35| mu35_5731(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5727 +# 35| r35_5733(glval) = VariableAddress[x409] : +# 35| r35_5734(glval) = FunctionAddress[~String] : +# 35| v35_5735(void) = Call[~String] : func:r35_5734, this:r35_5733 +# 35| mu35_5736(unknown) = ^CallSideEffect : ~m? +# 35| v35_5737(void) = ^IndirectReadSideEffect[-1] : &:r35_5733, ~m? +# 35| mu35_5738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5733 +# 35| r35_5739(bool) = Constant[0] : +# 35| v35_5740(void) = ConditionalBranch : r35_5739 #-----| False -> Block 411 #-----| True (back edge) -> Block 410 -# 1249| Block 411 -# 1249| r1249_1(glval) = VariableAddress[x410] : -# 1249| mu1249_2(String) = Uninitialized[x410] : &:r1249_1 -# 1249| r1249_3(glval) = FunctionAddress[String] : -# 1249| v1249_4(void) = Call[String] : func:r1249_3, this:r1249_1 -# 1249| mu1249_5(unknown) = ^CallSideEffect : ~m? -# 1249| mu1249_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1249_1 -# 1250| r1250_1(glval) = VariableAddress[x410] : -# 1250| r1250_2(glval) = FunctionAddress[~String] : -# 1250| v1250_3(void) = Call[~String] : func:r1250_2, this:r1250_1 -# 1250| mu1250_4(unknown) = ^CallSideEffect : ~m? -# 1250| v1250_5(void) = ^IndirectReadSideEffect[-1] : &:r1250_1, ~m? -# 1250| mu1250_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1250_1 -# 1250| r1250_7(bool) = Constant[0] : -# 1250| v1250_8(void) = ConditionalBranch : r1250_7 +# 35| Block 411 +# 35| r35_5741(glval) = VariableAddress[x410] : +# 35| mu35_5742(String) = Uninitialized[x410] : &:r35_5741 +# 35| r35_5743(glval) = FunctionAddress[String] : +# 35| v35_5744(void) = Call[String] : func:r35_5743, this:r35_5741 +# 35| mu35_5745(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5741 +# 35| r35_5747(glval) = VariableAddress[x410] : +# 35| r35_5748(glval) = FunctionAddress[~String] : +# 35| v35_5749(void) = Call[~String] : func:r35_5748, this:r35_5747 +# 35| mu35_5750(unknown) = ^CallSideEffect : ~m? +# 35| v35_5751(void) = ^IndirectReadSideEffect[-1] : &:r35_5747, ~m? +# 35| mu35_5752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5747 +# 35| r35_5753(bool) = Constant[0] : +# 35| v35_5754(void) = ConditionalBranch : r35_5753 #-----| False -> Block 412 #-----| True (back edge) -> Block 411 -# 1252| Block 412 -# 1252| r1252_1(glval) = VariableAddress[x411] : -# 1252| mu1252_2(String) = Uninitialized[x411] : &:r1252_1 -# 1252| r1252_3(glval) = FunctionAddress[String] : -# 1252| v1252_4(void) = Call[String] : func:r1252_3, this:r1252_1 -# 1252| mu1252_5(unknown) = ^CallSideEffect : ~m? -# 1252| mu1252_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1252_1 -# 1253| r1253_1(glval) = VariableAddress[x411] : -# 1253| r1253_2(glval) = FunctionAddress[~String] : -# 1253| v1253_3(void) = Call[~String] : func:r1253_2, this:r1253_1 -# 1253| mu1253_4(unknown) = ^CallSideEffect : ~m? -# 1253| v1253_5(void) = ^IndirectReadSideEffect[-1] : &:r1253_1, ~m? -# 1253| mu1253_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1253_1 -# 1253| r1253_7(bool) = Constant[0] : -# 1253| v1253_8(void) = ConditionalBranch : r1253_7 +# 35| Block 412 +# 35| r35_5755(glval) = VariableAddress[x411] : +# 35| mu35_5756(String) = Uninitialized[x411] : &:r35_5755 +# 35| r35_5757(glval) = FunctionAddress[String] : +# 35| v35_5758(void) = Call[String] : func:r35_5757, this:r35_5755 +# 35| mu35_5759(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5755 +# 35| r35_5761(glval) = VariableAddress[x411] : +# 35| r35_5762(glval) = FunctionAddress[~String] : +# 35| v35_5763(void) = Call[~String] : func:r35_5762, this:r35_5761 +# 35| mu35_5764(unknown) = ^CallSideEffect : ~m? +# 35| v35_5765(void) = ^IndirectReadSideEffect[-1] : &:r35_5761, ~m? +# 35| mu35_5766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5761 +# 35| r35_5767(bool) = Constant[0] : +# 35| v35_5768(void) = ConditionalBranch : r35_5767 #-----| False -> Block 413 #-----| True (back edge) -> Block 412 -# 1255| Block 413 -# 1255| r1255_1(glval) = VariableAddress[x412] : -# 1255| mu1255_2(String) = Uninitialized[x412] : &:r1255_1 -# 1255| r1255_3(glval) = FunctionAddress[String] : -# 1255| v1255_4(void) = Call[String] : func:r1255_3, this:r1255_1 -# 1255| mu1255_5(unknown) = ^CallSideEffect : ~m? -# 1255| mu1255_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1255_1 -# 1256| r1256_1(glval) = VariableAddress[x412] : -# 1256| r1256_2(glval) = FunctionAddress[~String] : -# 1256| v1256_3(void) = Call[~String] : func:r1256_2, this:r1256_1 -# 1256| mu1256_4(unknown) = ^CallSideEffect : ~m? -# 1256| v1256_5(void) = ^IndirectReadSideEffect[-1] : &:r1256_1, ~m? -# 1256| mu1256_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1256_1 -# 1256| r1256_7(bool) = Constant[0] : -# 1256| v1256_8(void) = ConditionalBranch : r1256_7 +# 35| Block 413 +# 35| r35_5769(glval) = VariableAddress[x412] : +# 35| mu35_5770(String) = Uninitialized[x412] : &:r35_5769 +# 35| r35_5771(glval) = FunctionAddress[String] : +# 35| v35_5772(void) = Call[String] : func:r35_5771, this:r35_5769 +# 35| mu35_5773(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5769 +# 35| r35_5775(glval) = VariableAddress[x412] : +# 35| r35_5776(glval) = FunctionAddress[~String] : +# 35| v35_5777(void) = Call[~String] : func:r35_5776, this:r35_5775 +# 35| mu35_5778(unknown) = ^CallSideEffect : ~m? +# 35| v35_5779(void) = ^IndirectReadSideEffect[-1] : &:r35_5775, ~m? +# 35| mu35_5780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5775 +# 35| r35_5781(bool) = Constant[0] : +# 35| v35_5782(void) = ConditionalBranch : r35_5781 #-----| False -> Block 414 #-----| True (back edge) -> Block 413 -# 1258| Block 414 -# 1258| r1258_1(glval) = VariableAddress[x413] : -# 1258| mu1258_2(String) = Uninitialized[x413] : &:r1258_1 -# 1258| r1258_3(glval) = FunctionAddress[String] : -# 1258| v1258_4(void) = Call[String] : func:r1258_3, this:r1258_1 -# 1258| mu1258_5(unknown) = ^CallSideEffect : ~m? -# 1258| mu1258_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1258_1 -# 1259| r1259_1(glval) = VariableAddress[x413] : -# 1259| r1259_2(glval) = FunctionAddress[~String] : -# 1259| v1259_3(void) = Call[~String] : func:r1259_2, this:r1259_1 -# 1259| mu1259_4(unknown) = ^CallSideEffect : ~m? -# 1259| v1259_5(void) = ^IndirectReadSideEffect[-1] : &:r1259_1, ~m? -# 1259| mu1259_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1259_1 -# 1259| r1259_7(bool) = Constant[0] : -# 1259| v1259_8(void) = ConditionalBranch : r1259_7 +# 35| Block 414 +# 35| r35_5783(glval) = VariableAddress[x413] : +# 35| mu35_5784(String) = Uninitialized[x413] : &:r35_5783 +# 35| r35_5785(glval) = FunctionAddress[String] : +# 35| v35_5786(void) = Call[String] : func:r35_5785, this:r35_5783 +# 35| mu35_5787(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5783 +# 35| r35_5789(glval) = VariableAddress[x413] : +# 35| r35_5790(glval) = FunctionAddress[~String] : +# 35| v35_5791(void) = Call[~String] : func:r35_5790, this:r35_5789 +# 35| mu35_5792(unknown) = ^CallSideEffect : ~m? +# 35| v35_5793(void) = ^IndirectReadSideEffect[-1] : &:r35_5789, ~m? +# 35| mu35_5794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5789 +# 35| r35_5795(bool) = Constant[0] : +# 35| v35_5796(void) = ConditionalBranch : r35_5795 #-----| False -> Block 415 #-----| True (back edge) -> Block 414 -# 1261| Block 415 -# 1261| r1261_1(glval) = VariableAddress[x414] : -# 1261| mu1261_2(String) = Uninitialized[x414] : &:r1261_1 -# 1261| r1261_3(glval) = FunctionAddress[String] : -# 1261| v1261_4(void) = Call[String] : func:r1261_3, this:r1261_1 -# 1261| mu1261_5(unknown) = ^CallSideEffect : ~m? -# 1261| mu1261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1261_1 -# 1262| r1262_1(glval) = VariableAddress[x414] : -# 1262| r1262_2(glval) = FunctionAddress[~String] : -# 1262| v1262_3(void) = Call[~String] : func:r1262_2, this:r1262_1 -# 1262| mu1262_4(unknown) = ^CallSideEffect : ~m? -# 1262| v1262_5(void) = ^IndirectReadSideEffect[-1] : &:r1262_1, ~m? -# 1262| mu1262_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1262_1 -# 1262| r1262_7(bool) = Constant[0] : -# 1262| v1262_8(void) = ConditionalBranch : r1262_7 +# 35| Block 415 +# 35| r35_5797(glval) = VariableAddress[x414] : +# 35| mu35_5798(String) = Uninitialized[x414] : &:r35_5797 +# 35| r35_5799(glval) = FunctionAddress[String] : +# 35| v35_5800(void) = Call[String] : func:r35_5799, this:r35_5797 +# 35| mu35_5801(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5797 +# 35| r35_5803(glval) = VariableAddress[x414] : +# 35| r35_5804(glval) = FunctionAddress[~String] : +# 35| v35_5805(void) = Call[~String] : func:r35_5804, this:r35_5803 +# 35| mu35_5806(unknown) = ^CallSideEffect : ~m? +# 35| v35_5807(void) = ^IndirectReadSideEffect[-1] : &:r35_5803, ~m? +# 35| mu35_5808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5803 +# 35| r35_5809(bool) = Constant[0] : +# 35| v35_5810(void) = ConditionalBranch : r35_5809 #-----| False -> Block 416 #-----| True (back edge) -> Block 415 -# 1264| Block 416 -# 1264| r1264_1(glval) = VariableAddress[x415] : -# 1264| mu1264_2(String) = Uninitialized[x415] : &:r1264_1 -# 1264| r1264_3(glval) = FunctionAddress[String] : -# 1264| v1264_4(void) = Call[String] : func:r1264_3, this:r1264_1 -# 1264| mu1264_5(unknown) = ^CallSideEffect : ~m? -# 1264| mu1264_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1264_1 -# 1265| r1265_1(glval) = VariableAddress[x415] : -# 1265| r1265_2(glval) = FunctionAddress[~String] : -# 1265| v1265_3(void) = Call[~String] : func:r1265_2, this:r1265_1 -# 1265| mu1265_4(unknown) = ^CallSideEffect : ~m? -# 1265| v1265_5(void) = ^IndirectReadSideEffect[-1] : &:r1265_1, ~m? -# 1265| mu1265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1265_1 -# 1265| r1265_7(bool) = Constant[0] : -# 1265| v1265_8(void) = ConditionalBranch : r1265_7 +# 35| Block 416 +# 35| r35_5811(glval) = VariableAddress[x415] : +# 35| mu35_5812(String) = Uninitialized[x415] : &:r35_5811 +# 35| r35_5813(glval) = FunctionAddress[String] : +# 35| v35_5814(void) = Call[String] : func:r35_5813, this:r35_5811 +# 35| mu35_5815(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5811 +# 35| r35_5817(glval) = VariableAddress[x415] : +# 35| r35_5818(glval) = FunctionAddress[~String] : +# 35| v35_5819(void) = Call[~String] : func:r35_5818, this:r35_5817 +# 35| mu35_5820(unknown) = ^CallSideEffect : ~m? +# 35| v35_5821(void) = ^IndirectReadSideEffect[-1] : &:r35_5817, ~m? +# 35| mu35_5822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5817 +# 35| r35_5823(bool) = Constant[0] : +# 35| v35_5824(void) = ConditionalBranch : r35_5823 #-----| False -> Block 417 #-----| True (back edge) -> Block 416 -# 1267| Block 417 -# 1267| r1267_1(glval) = VariableAddress[x416] : -# 1267| mu1267_2(String) = Uninitialized[x416] : &:r1267_1 -# 1267| r1267_3(glval) = FunctionAddress[String] : -# 1267| v1267_4(void) = Call[String] : func:r1267_3, this:r1267_1 -# 1267| mu1267_5(unknown) = ^CallSideEffect : ~m? -# 1267| mu1267_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1267_1 -# 1268| r1268_1(glval) = VariableAddress[x416] : -# 1268| r1268_2(glval) = FunctionAddress[~String] : -# 1268| v1268_3(void) = Call[~String] : func:r1268_2, this:r1268_1 -# 1268| mu1268_4(unknown) = ^CallSideEffect : ~m? -# 1268| v1268_5(void) = ^IndirectReadSideEffect[-1] : &:r1268_1, ~m? -# 1268| mu1268_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1268_1 -# 1268| r1268_7(bool) = Constant[0] : -# 1268| v1268_8(void) = ConditionalBranch : r1268_7 +# 35| Block 417 +# 35| r35_5825(glval) = VariableAddress[x416] : +# 35| mu35_5826(String) = Uninitialized[x416] : &:r35_5825 +# 35| r35_5827(glval) = FunctionAddress[String] : +# 35| v35_5828(void) = Call[String] : func:r35_5827, this:r35_5825 +# 35| mu35_5829(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5825 +# 35| r35_5831(glval) = VariableAddress[x416] : +# 35| r35_5832(glval) = FunctionAddress[~String] : +# 35| v35_5833(void) = Call[~String] : func:r35_5832, this:r35_5831 +# 35| mu35_5834(unknown) = ^CallSideEffect : ~m? +# 35| v35_5835(void) = ^IndirectReadSideEffect[-1] : &:r35_5831, ~m? +# 35| mu35_5836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5831 +# 35| r35_5837(bool) = Constant[0] : +# 35| v35_5838(void) = ConditionalBranch : r35_5837 #-----| False -> Block 418 #-----| True (back edge) -> Block 417 -# 1270| Block 418 -# 1270| r1270_1(glval) = VariableAddress[x417] : -# 1270| mu1270_2(String) = Uninitialized[x417] : &:r1270_1 -# 1270| r1270_3(glval) = FunctionAddress[String] : -# 1270| v1270_4(void) = Call[String] : func:r1270_3, this:r1270_1 -# 1270| mu1270_5(unknown) = ^CallSideEffect : ~m? -# 1270| mu1270_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1270_1 -# 1271| r1271_1(glval) = VariableAddress[x417] : -# 1271| r1271_2(glval) = FunctionAddress[~String] : -# 1271| v1271_3(void) = Call[~String] : func:r1271_2, this:r1271_1 -# 1271| mu1271_4(unknown) = ^CallSideEffect : ~m? -# 1271| v1271_5(void) = ^IndirectReadSideEffect[-1] : &:r1271_1, ~m? -# 1271| mu1271_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1271| r1271_7(bool) = Constant[0] : -# 1271| v1271_8(void) = ConditionalBranch : r1271_7 +# 35| Block 418 +# 35| r35_5839(glval) = VariableAddress[x417] : +# 35| mu35_5840(String) = Uninitialized[x417] : &:r35_5839 +# 35| r35_5841(glval) = FunctionAddress[String] : +# 35| v35_5842(void) = Call[String] : func:r35_5841, this:r35_5839 +# 35| mu35_5843(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5839 +# 35| r35_5845(glval) = VariableAddress[x417] : +# 35| r35_5846(glval) = FunctionAddress[~String] : +# 35| v35_5847(void) = Call[~String] : func:r35_5846, this:r35_5845 +# 35| mu35_5848(unknown) = ^CallSideEffect : ~m? +# 35| v35_5849(void) = ^IndirectReadSideEffect[-1] : &:r35_5845, ~m? +# 35| mu35_5850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5845 +# 35| r35_5851(bool) = Constant[0] : +# 35| v35_5852(void) = ConditionalBranch : r35_5851 #-----| False -> Block 419 #-----| True (back edge) -> Block 418 -# 1273| Block 419 -# 1273| r1273_1(glval) = VariableAddress[x418] : -# 1273| mu1273_2(String) = Uninitialized[x418] : &:r1273_1 -# 1273| r1273_3(glval) = FunctionAddress[String] : -# 1273| v1273_4(void) = Call[String] : func:r1273_3, this:r1273_1 -# 1273| mu1273_5(unknown) = ^CallSideEffect : ~m? -# 1273| mu1273_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 -# 1274| r1274_1(glval) = VariableAddress[x418] : -# 1274| r1274_2(glval) = FunctionAddress[~String] : -# 1274| v1274_3(void) = Call[~String] : func:r1274_2, this:r1274_1 -# 1274| mu1274_4(unknown) = ^CallSideEffect : ~m? -# 1274| v1274_5(void) = ^IndirectReadSideEffect[-1] : &:r1274_1, ~m? -# 1274| mu1274_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1274_1 -# 1274| r1274_7(bool) = Constant[0] : -# 1274| v1274_8(void) = ConditionalBranch : r1274_7 +# 35| Block 419 +# 35| r35_5853(glval) = VariableAddress[x418] : +# 35| mu35_5854(String) = Uninitialized[x418] : &:r35_5853 +# 35| r35_5855(glval) = FunctionAddress[String] : +# 35| v35_5856(void) = Call[String] : func:r35_5855, this:r35_5853 +# 35| mu35_5857(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5853 +# 35| r35_5859(glval) = VariableAddress[x418] : +# 35| r35_5860(glval) = FunctionAddress[~String] : +# 35| v35_5861(void) = Call[~String] : func:r35_5860, this:r35_5859 +# 35| mu35_5862(unknown) = ^CallSideEffect : ~m? +# 35| v35_5863(void) = ^IndirectReadSideEffect[-1] : &:r35_5859, ~m? +# 35| mu35_5864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5859 +# 35| r35_5865(bool) = Constant[0] : +# 35| v35_5866(void) = ConditionalBranch : r35_5865 #-----| False -> Block 420 #-----| True (back edge) -> Block 419 -# 1276| Block 420 -# 1276| r1276_1(glval) = VariableAddress[x419] : -# 1276| mu1276_2(String) = Uninitialized[x419] : &:r1276_1 -# 1276| r1276_3(glval) = FunctionAddress[String] : -# 1276| v1276_4(void) = Call[String] : func:r1276_3, this:r1276_1 -# 1276| mu1276_5(unknown) = ^CallSideEffect : ~m? -# 1276| mu1276_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1276_1 -# 1277| r1277_1(glval) = VariableAddress[x419] : -# 1277| r1277_2(glval) = FunctionAddress[~String] : -# 1277| v1277_3(void) = Call[~String] : func:r1277_2, this:r1277_1 -# 1277| mu1277_4(unknown) = ^CallSideEffect : ~m? -# 1277| v1277_5(void) = ^IndirectReadSideEffect[-1] : &:r1277_1, ~m? -# 1277| mu1277_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1277_1 -# 1277| r1277_7(bool) = Constant[0] : -# 1277| v1277_8(void) = ConditionalBranch : r1277_7 +# 35| Block 420 +# 35| r35_5867(glval) = VariableAddress[x419] : +# 35| mu35_5868(String) = Uninitialized[x419] : &:r35_5867 +# 35| r35_5869(glval) = FunctionAddress[String] : +# 35| v35_5870(void) = Call[String] : func:r35_5869, this:r35_5867 +# 35| mu35_5871(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5867 +# 35| r35_5873(glval) = VariableAddress[x419] : +# 35| r35_5874(glval) = FunctionAddress[~String] : +# 35| v35_5875(void) = Call[~String] : func:r35_5874, this:r35_5873 +# 35| mu35_5876(unknown) = ^CallSideEffect : ~m? +# 35| v35_5877(void) = ^IndirectReadSideEffect[-1] : &:r35_5873, ~m? +# 35| mu35_5878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5873 +# 35| r35_5879(bool) = Constant[0] : +# 35| v35_5880(void) = ConditionalBranch : r35_5879 #-----| False -> Block 421 #-----| True (back edge) -> Block 420 -# 1279| Block 421 -# 1279| r1279_1(glval) = VariableAddress[x420] : -# 1279| mu1279_2(String) = Uninitialized[x420] : &:r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[String] : -# 1279| v1279_4(void) = Call[String] : func:r1279_3, this:r1279_1 -# 1279| mu1279_5(unknown) = ^CallSideEffect : ~m? -# 1279| mu1279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1279_1 -# 1280| r1280_1(glval) = VariableAddress[x420] : -# 1280| r1280_2(glval) = FunctionAddress[~String] : -# 1280| v1280_3(void) = Call[~String] : func:r1280_2, this:r1280_1 -# 1280| mu1280_4(unknown) = ^CallSideEffect : ~m? -# 1280| v1280_5(void) = ^IndirectReadSideEffect[-1] : &:r1280_1, ~m? -# 1280| mu1280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1280_1 -# 1280| r1280_7(bool) = Constant[0] : -# 1280| v1280_8(void) = ConditionalBranch : r1280_7 +# 35| Block 421 +# 35| r35_5881(glval) = VariableAddress[x420] : +# 35| mu35_5882(String) = Uninitialized[x420] : &:r35_5881 +# 35| r35_5883(glval) = FunctionAddress[String] : +# 35| v35_5884(void) = Call[String] : func:r35_5883, this:r35_5881 +# 35| mu35_5885(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5881 +# 35| r35_5887(glval) = VariableAddress[x420] : +# 35| r35_5888(glval) = FunctionAddress[~String] : +# 35| v35_5889(void) = Call[~String] : func:r35_5888, this:r35_5887 +# 35| mu35_5890(unknown) = ^CallSideEffect : ~m? +# 35| v35_5891(void) = ^IndirectReadSideEffect[-1] : &:r35_5887, ~m? +# 35| mu35_5892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5887 +# 35| r35_5893(bool) = Constant[0] : +# 35| v35_5894(void) = ConditionalBranch : r35_5893 #-----| False -> Block 422 #-----| True (back edge) -> Block 421 -# 1282| Block 422 -# 1282| r1282_1(glval) = VariableAddress[x421] : -# 1282| mu1282_2(String) = Uninitialized[x421] : &:r1282_1 -# 1282| r1282_3(glval) = FunctionAddress[String] : -# 1282| v1282_4(void) = Call[String] : func:r1282_3, this:r1282_1 -# 1282| mu1282_5(unknown) = ^CallSideEffect : ~m? -# 1282| mu1282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1282_1 -# 1283| r1283_1(glval) = VariableAddress[x421] : -# 1283| r1283_2(glval) = FunctionAddress[~String] : -# 1283| v1283_3(void) = Call[~String] : func:r1283_2, this:r1283_1 -# 1283| mu1283_4(unknown) = ^CallSideEffect : ~m? -# 1283| v1283_5(void) = ^IndirectReadSideEffect[-1] : &:r1283_1, ~m? -# 1283| mu1283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1283_1 -# 1283| r1283_7(bool) = Constant[0] : -# 1283| v1283_8(void) = ConditionalBranch : r1283_7 +# 35| Block 422 +# 35| r35_5895(glval) = VariableAddress[x421] : +# 35| mu35_5896(String) = Uninitialized[x421] : &:r35_5895 +# 35| r35_5897(glval) = FunctionAddress[String] : +# 35| v35_5898(void) = Call[String] : func:r35_5897, this:r35_5895 +# 35| mu35_5899(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5895 +# 35| r35_5901(glval) = VariableAddress[x421] : +# 35| r35_5902(glval) = FunctionAddress[~String] : +# 35| v35_5903(void) = Call[~String] : func:r35_5902, this:r35_5901 +# 35| mu35_5904(unknown) = ^CallSideEffect : ~m? +# 35| v35_5905(void) = ^IndirectReadSideEffect[-1] : &:r35_5901, ~m? +# 35| mu35_5906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5901 +# 35| r35_5907(bool) = Constant[0] : +# 35| v35_5908(void) = ConditionalBranch : r35_5907 #-----| False -> Block 423 #-----| True (back edge) -> Block 422 -# 1285| Block 423 -# 1285| r1285_1(glval) = VariableAddress[x422] : -# 1285| mu1285_2(String) = Uninitialized[x422] : &:r1285_1 -# 1285| r1285_3(glval) = FunctionAddress[String] : -# 1285| v1285_4(void) = Call[String] : func:r1285_3, this:r1285_1 -# 1285| mu1285_5(unknown) = ^CallSideEffect : ~m? -# 1285| mu1285_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1285_1 -# 1286| r1286_1(glval) = VariableAddress[x422] : -# 1286| r1286_2(glval) = FunctionAddress[~String] : -# 1286| v1286_3(void) = Call[~String] : func:r1286_2, this:r1286_1 -# 1286| mu1286_4(unknown) = ^CallSideEffect : ~m? -# 1286| v1286_5(void) = ^IndirectReadSideEffect[-1] : &:r1286_1, ~m? -# 1286| mu1286_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1286_1 -# 1286| r1286_7(bool) = Constant[0] : -# 1286| v1286_8(void) = ConditionalBranch : r1286_7 +# 35| Block 423 +# 35| r35_5909(glval) = VariableAddress[x422] : +# 35| mu35_5910(String) = Uninitialized[x422] : &:r35_5909 +# 35| r35_5911(glval) = FunctionAddress[String] : +# 35| v35_5912(void) = Call[String] : func:r35_5911, this:r35_5909 +# 35| mu35_5913(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5909 +# 35| r35_5915(glval) = VariableAddress[x422] : +# 35| r35_5916(glval) = FunctionAddress[~String] : +# 35| v35_5917(void) = Call[~String] : func:r35_5916, this:r35_5915 +# 35| mu35_5918(unknown) = ^CallSideEffect : ~m? +# 35| v35_5919(void) = ^IndirectReadSideEffect[-1] : &:r35_5915, ~m? +# 35| mu35_5920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5915 +# 35| r35_5921(bool) = Constant[0] : +# 35| v35_5922(void) = ConditionalBranch : r35_5921 #-----| False -> Block 424 #-----| True (back edge) -> Block 423 -# 1288| Block 424 -# 1288| r1288_1(glval) = VariableAddress[x423] : -# 1288| mu1288_2(String) = Uninitialized[x423] : &:r1288_1 -# 1288| r1288_3(glval) = FunctionAddress[String] : -# 1288| v1288_4(void) = Call[String] : func:r1288_3, this:r1288_1 -# 1288| mu1288_5(unknown) = ^CallSideEffect : ~m? -# 1288| mu1288_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1288_1 -# 1289| r1289_1(glval) = VariableAddress[x423] : -# 1289| r1289_2(glval) = FunctionAddress[~String] : -# 1289| v1289_3(void) = Call[~String] : func:r1289_2, this:r1289_1 -# 1289| mu1289_4(unknown) = ^CallSideEffect : ~m? -# 1289| v1289_5(void) = ^IndirectReadSideEffect[-1] : &:r1289_1, ~m? -# 1289| mu1289_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1289_1 -# 1289| r1289_7(bool) = Constant[0] : -# 1289| v1289_8(void) = ConditionalBranch : r1289_7 +# 35| Block 424 +# 35| r35_5923(glval) = VariableAddress[x423] : +# 35| mu35_5924(String) = Uninitialized[x423] : &:r35_5923 +# 35| r35_5925(glval) = FunctionAddress[String] : +# 35| v35_5926(void) = Call[String] : func:r35_5925, this:r35_5923 +# 35| mu35_5927(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5923 +# 35| r35_5929(glval) = VariableAddress[x423] : +# 35| r35_5930(glval) = FunctionAddress[~String] : +# 35| v35_5931(void) = Call[~String] : func:r35_5930, this:r35_5929 +# 35| mu35_5932(unknown) = ^CallSideEffect : ~m? +# 35| v35_5933(void) = ^IndirectReadSideEffect[-1] : &:r35_5929, ~m? +# 35| mu35_5934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5929 +# 35| r35_5935(bool) = Constant[0] : +# 35| v35_5936(void) = ConditionalBranch : r35_5935 #-----| False -> Block 425 #-----| True (back edge) -> Block 424 -# 1291| Block 425 -# 1291| r1291_1(glval) = VariableAddress[x424] : -# 1291| mu1291_2(String) = Uninitialized[x424] : &:r1291_1 -# 1291| r1291_3(glval) = FunctionAddress[String] : -# 1291| v1291_4(void) = Call[String] : func:r1291_3, this:r1291_1 -# 1291| mu1291_5(unknown) = ^CallSideEffect : ~m? -# 1291| mu1291_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1291_1 -# 1292| r1292_1(glval) = VariableAddress[x424] : -# 1292| r1292_2(glval) = FunctionAddress[~String] : -# 1292| v1292_3(void) = Call[~String] : func:r1292_2, this:r1292_1 -# 1292| mu1292_4(unknown) = ^CallSideEffect : ~m? -# 1292| v1292_5(void) = ^IndirectReadSideEffect[-1] : &:r1292_1, ~m? -# 1292| mu1292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_1 -# 1292| r1292_7(bool) = Constant[0] : -# 1292| v1292_8(void) = ConditionalBranch : r1292_7 +# 35| Block 425 +# 35| r35_5937(glval) = VariableAddress[x424] : +# 35| mu35_5938(String) = Uninitialized[x424] : &:r35_5937 +# 35| r35_5939(glval) = FunctionAddress[String] : +# 35| v35_5940(void) = Call[String] : func:r35_5939, this:r35_5937 +# 35| mu35_5941(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5937 +# 35| r35_5943(glval) = VariableAddress[x424] : +# 35| r35_5944(glval) = FunctionAddress[~String] : +# 35| v35_5945(void) = Call[~String] : func:r35_5944, this:r35_5943 +# 35| mu35_5946(unknown) = ^CallSideEffect : ~m? +# 35| v35_5947(void) = ^IndirectReadSideEffect[-1] : &:r35_5943, ~m? +# 35| mu35_5948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5943 +# 35| r35_5949(bool) = Constant[0] : +# 35| v35_5950(void) = ConditionalBranch : r35_5949 #-----| False -> Block 426 #-----| True (back edge) -> Block 425 -# 1294| Block 426 -# 1294| r1294_1(glval) = VariableAddress[x425] : -# 1294| mu1294_2(String) = Uninitialized[x425] : &:r1294_1 -# 1294| r1294_3(glval) = FunctionAddress[String] : -# 1294| v1294_4(void) = Call[String] : func:r1294_3, this:r1294_1 -# 1294| mu1294_5(unknown) = ^CallSideEffect : ~m? -# 1294| mu1294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1294_1 -# 1295| r1295_1(glval) = VariableAddress[x425] : -# 1295| r1295_2(glval) = FunctionAddress[~String] : -# 1295| v1295_3(void) = Call[~String] : func:r1295_2, this:r1295_1 -# 1295| mu1295_4(unknown) = ^CallSideEffect : ~m? -# 1295| v1295_5(void) = ^IndirectReadSideEffect[-1] : &:r1295_1, ~m? -# 1295| mu1295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1295_1 -# 1295| r1295_7(bool) = Constant[0] : -# 1295| v1295_8(void) = ConditionalBranch : r1295_7 +# 35| Block 426 +# 35| r35_5951(glval) = VariableAddress[x425] : +# 35| mu35_5952(String) = Uninitialized[x425] : &:r35_5951 +# 35| r35_5953(glval) = FunctionAddress[String] : +# 35| v35_5954(void) = Call[String] : func:r35_5953, this:r35_5951 +# 35| mu35_5955(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5951 +# 35| r35_5957(glval) = VariableAddress[x425] : +# 35| r35_5958(glval) = FunctionAddress[~String] : +# 35| v35_5959(void) = Call[~String] : func:r35_5958, this:r35_5957 +# 35| mu35_5960(unknown) = ^CallSideEffect : ~m? +# 35| v35_5961(void) = ^IndirectReadSideEffect[-1] : &:r35_5957, ~m? +# 35| mu35_5962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5957 +# 35| r35_5963(bool) = Constant[0] : +# 35| v35_5964(void) = ConditionalBranch : r35_5963 #-----| False -> Block 427 #-----| True (back edge) -> Block 426 -# 1297| Block 427 -# 1297| r1297_1(glval) = VariableAddress[x426] : -# 1297| mu1297_2(String) = Uninitialized[x426] : &:r1297_1 -# 1297| r1297_3(glval) = FunctionAddress[String] : -# 1297| v1297_4(void) = Call[String] : func:r1297_3, this:r1297_1 -# 1297| mu1297_5(unknown) = ^CallSideEffect : ~m? -# 1297| mu1297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1297_1 -# 1298| r1298_1(glval) = VariableAddress[x426] : -# 1298| r1298_2(glval) = FunctionAddress[~String] : -# 1298| v1298_3(void) = Call[~String] : func:r1298_2, this:r1298_1 -# 1298| mu1298_4(unknown) = ^CallSideEffect : ~m? -# 1298| v1298_5(void) = ^IndirectReadSideEffect[-1] : &:r1298_1, ~m? -# 1298| mu1298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1298_1 -# 1298| r1298_7(bool) = Constant[0] : -# 1298| v1298_8(void) = ConditionalBranch : r1298_7 +# 35| Block 427 +# 35| r35_5965(glval) = VariableAddress[x426] : +# 35| mu35_5966(String) = Uninitialized[x426] : &:r35_5965 +# 35| r35_5967(glval) = FunctionAddress[String] : +# 35| v35_5968(void) = Call[String] : func:r35_5967, this:r35_5965 +# 35| mu35_5969(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5965 +# 35| r35_5971(glval) = VariableAddress[x426] : +# 35| r35_5972(glval) = FunctionAddress[~String] : +# 35| v35_5973(void) = Call[~String] : func:r35_5972, this:r35_5971 +# 35| mu35_5974(unknown) = ^CallSideEffect : ~m? +# 35| v35_5975(void) = ^IndirectReadSideEffect[-1] : &:r35_5971, ~m? +# 35| mu35_5976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5971 +# 35| r35_5977(bool) = Constant[0] : +# 35| v35_5978(void) = ConditionalBranch : r35_5977 #-----| False -> Block 428 #-----| True (back edge) -> Block 427 -# 1300| Block 428 -# 1300| r1300_1(glval) = VariableAddress[x427] : -# 1300| mu1300_2(String) = Uninitialized[x427] : &:r1300_1 -# 1300| r1300_3(glval) = FunctionAddress[String] : -# 1300| v1300_4(void) = Call[String] : func:r1300_3, this:r1300_1 -# 1300| mu1300_5(unknown) = ^CallSideEffect : ~m? -# 1300| mu1300_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1300_1 -# 1301| r1301_1(glval) = VariableAddress[x427] : -# 1301| r1301_2(glval) = FunctionAddress[~String] : -# 1301| v1301_3(void) = Call[~String] : func:r1301_2, this:r1301_1 -# 1301| mu1301_4(unknown) = ^CallSideEffect : ~m? -# 1301| v1301_5(void) = ^IndirectReadSideEffect[-1] : &:r1301_1, ~m? -# 1301| mu1301_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1301_1 -# 1301| r1301_7(bool) = Constant[0] : -# 1301| v1301_8(void) = ConditionalBranch : r1301_7 +# 35| Block 428 +# 35| r35_5979(glval) = VariableAddress[x427] : +# 35| mu35_5980(String) = Uninitialized[x427] : &:r35_5979 +# 35| r35_5981(glval) = FunctionAddress[String] : +# 35| v35_5982(void) = Call[String] : func:r35_5981, this:r35_5979 +# 35| mu35_5983(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5979 +# 35| r35_5985(glval) = VariableAddress[x427] : +# 35| r35_5986(glval) = FunctionAddress[~String] : +# 35| v35_5987(void) = Call[~String] : func:r35_5986, this:r35_5985 +# 35| mu35_5988(unknown) = ^CallSideEffect : ~m? +# 35| v35_5989(void) = ^IndirectReadSideEffect[-1] : &:r35_5985, ~m? +# 35| mu35_5990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5985 +# 35| r35_5991(bool) = Constant[0] : +# 35| v35_5992(void) = ConditionalBranch : r35_5991 #-----| False -> Block 429 #-----| True (back edge) -> Block 428 -# 1303| Block 429 -# 1303| r1303_1(glval) = VariableAddress[x428] : -# 1303| mu1303_2(String) = Uninitialized[x428] : &:r1303_1 -# 1303| r1303_3(glval) = FunctionAddress[String] : -# 1303| v1303_4(void) = Call[String] : func:r1303_3, this:r1303_1 -# 1303| mu1303_5(unknown) = ^CallSideEffect : ~m? -# 1303| mu1303_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1303_1 -# 1304| r1304_1(glval) = VariableAddress[x428] : -# 1304| r1304_2(glval) = FunctionAddress[~String] : -# 1304| v1304_3(void) = Call[~String] : func:r1304_2, this:r1304_1 -# 1304| mu1304_4(unknown) = ^CallSideEffect : ~m? -# 1304| v1304_5(void) = ^IndirectReadSideEffect[-1] : &:r1304_1, ~m? -# 1304| mu1304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1304_1 -# 1304| r1304_7(bool) = Constant[0] : -# 1304| v1304_8(void) = ConditionalBranch : r1304_7 +# 35| Block 429 +# 35| r35_5993(glval) = VariableAddress[x428] : +# 35| mu35_5994(String) = Uninitialized[x428] : &:r35_5993 +# 35| r35_5995(glval) = FunctionAddress[String] : +# 35| v35_5996(void) = Call[String] : func:r35_5995, this:r35_5993 +# 35| mu35_5997(unknown) = ^CallSideEffect : ~m? +# 35| mu35_5998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5993 +# 35| r35_5999(glval) = VariableAddress[x428] : +# 35| r35_6000(glval) = FunctionAddress[~String] : +# 35| v35_6001(void) = Call[~String] : func:r35_6000, this:r35_5999 +# 35| mu35_6002(unknown) = ^CallSideEffect : ~m? +# 35| v35_6003(void) = ^IndirectReadSideEffect[-1] : &:r35_5999, ~m? +# 35| mu35_6004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_5999 +# 35| r35_6005(bool) = Constant[0] : +# 35| v35_6006(void) = ConditionalBranch : r35_6005 #-----| False -> Block 430 #-----| True (back edge) -> Block 429 -# 1306| Block 430 -# 1306| r1306_1(glval) = VariableAddress[x429] : -# 1306| mu1306_2(String) = Uninitialized[x429] : &:r1306_1 -# 1306| r1306_3(glval) = FunctionAddress[String] : -# 1306| v1306_4(void) = Call[String] : func:r1306_3, this:r1306_1 -# 1306| mu1306_5(unknown) = ^CallSideEffect : ~m? -# 1306| mu1306_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1306_1 -# 1307| r1307_1(glval) = VariableAddress[x429] : -# 1307| r1307_2(glval) = FunctionAddress[~String] : -# 1307| v1307_3(void) = Call[~String] : func:r1307_2, this:r1307_1 -# 1307| mu1307_4(unknown) = ^CallSideEffect : ~m? -# 1307| v1307_5(void) = ^IndirectReadSideEffect[-1] : &:r1307_1, ~m? -# 1307| mu1307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1307_1 -# 1307| r1307_7(bool) = Constant[0] : -# 1307| v1307_8(void) = ConditionalBranch : r1307_7 +# 35| Block 430 +# 35| r35_6007(glval) = VariableAddress[x429] : +# 35| mu35_6008(String) = Uninitialized[x429] : &:r35_6007 +# 35| r35_6009(glval) = FunctionAddress[String] : +# 35| v35_6010(void) = Call[String] : func:r35_6009, this:r35_6007 +# 35| mu35_6011(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6007 +# 35| r35_6013(glval) = VariableAddress[x429] : +# 35| r35_6014(glval) = FunctionAddress[~String] : +# 35| v35_6015(void) = Call[~String] : func:r35_6014, this:r35_6013 +# 35| mu35_6016(unknown) = ^CallSideEffect : ~m? +# 35| v35_6017(void) = ^IndirectReadSideEffect[-1] : &:r35_6013, ~m? +# 35| mu35_6018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6013 +# 35| r35_6019(bool) = Constant[0] : +# 35| v35_6020(void) = ConditionalBranch : r35_6019 #-----| False -> Block 431 #-----| True (back edge) -> Block 430 -# 1309| Block 431 -# 1309| r1309_1(glval) = VariableAddress[x430] : -# 1309| mu1309_2(String) = Uninitialized[x430] : &:r1309_1 -# 1309| r1309_3(glval) = FunctionAddress[String] : -# 1309| v1309_4(void) = Call[String] : func:r1309_3, this:r1309_1 -# 1309| mu1309_5(unknown) = ^CallSideEffect : ~m? -# 1309| mu1309_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1309_1 -# 1310| r1310_1(glval) = VariableAddress[x430] : -# 1310| r1310_2(glval) = FunctionAddress[~String] : -# 1310| v1310_3(void) = Call[~String] : func:r1310_2, this:r1310_1 -# 1310| mu1310_4(unknown) = ^CallSideEffect : ~m? -# 1310| v1310_5(void) = ^IndirectReadSideEffect[-1] : &:r1310_1, ~m? -# 1310| mu1310_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1310_1 -# 1310| r1310_7(bool) = Constant[0] : -# 1310| v1310_8(void) = ConditionalBranch : r1310_7 +# 35| Block 431 +# 35| r35_6021(glval) = VariableAddress[x430] : +# 35| mu35_6022(String) = Uninitialized[x430] : &:r35_6021 +# 35| r35_6023(glval) = FunctionAddress[String] : +# 35| v35_6024(void) = Call[String] : func:r35_6023, this:r35_6021 +# 35| mu35_6025(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6021 +# 35| r35_6027(glval) = VariableAddress[x430] : +# 35| r35_6028(glval) = FunctionAddress[~String] : +# 35| v35_6029(void) = Call[~String] : func:r35_6028, this:r35_6027 +# 35| mu35_6030(unknown) = ^CallSideEffect : ~m? +# 35| v35_6031(void) = ^IndirectReadSideEffect[-1] : &:r35_6027, ~m? +# 35| mu35_6032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6027 +# 35| r35_6033(bool) = Constant[0] : +# 35| v35_6034(void) = ConditionalBranch : r35_6033 #-----| False -> Block 432 #-----| True (back edge) -> Block 431 -# 1312| Block 432 -# 1312| r1312_1(glval) = VariableAddress[x431] : -# 1312| mu1312_2(String) = Uninitialized[x431] : &:r1312_1 -# 1312| r1312_3(glval) = FunctionAddress[String] : -# 1312| v1312_4(void) = Call[String] : func:r1312_3, this:r1312_1 -# 1312| mu1312_5(unknown) = ^CallSideEffect : ~m? -# 1312| mu1312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1312_1 -# 1313| r1313_1(glval) = VariableAddress[x431] : -# 1313| r1313_2(glval) = FunctionAddress[~String] : -# 1313| v1313_3(void) = Call[~String] : func:r1313_2, this:r1313_1 -# 1313| mu1313_4(unknown) = ^CallSideEffect : ~m? -# 1313| v1313_5(void) = ^IndirectReadSideEffect[-1] : &:r1313_1, ~m? -# 1313| mu1313_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1313_1 -# 1313| r1313_7(bool) = Constant[0] : -# 1313| v1313_8(void) = ConditionalBranch : r1313_7 +# 35| Block 432 +# 35| r35_6035(glval) = VariableAddress[x431] : +# 35| mu35_6036(String) = Uninitialized[x431] : &:r35_6035 +# 35| r35_6037(glval) = FunctionAddress[String] : +# 35| v35_6038(void) = Call[String] : func:r35_6037, this:r35_6035 +# 35| mu35_6039(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6035 +# 35| r35_6041(glval) = VariableAddress[x431] : +# 35| r35_6042(glval) = FunctionAddress[~String] : +# 35| v35_6043(void) = Call[~String] : func:r35_6042, this:r35_6041 +# 35| mu35_6044(unknown) = ^CallSideEffect : ~m? +# 35| v35_6045(void) = ^IndirectReadSideEffect[-1] : &:r35_6041, ~m? +# 35| mu35_6046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6041 +# 35| r35_6047(bool) = Constant[0] : +# 35| v35_6048(void) = ConditionalBranch : r35_6047 #-----| False -> Block 433 #-----| True (back edge) -> Block 432 -# 1315| Block 433 -# 1315| r1315_1(glval) = VariableAddress[x432] : -# 1315| mu1315_2(String) = Uninitialized[x432] : &:r1315_1 -# 1315| r1315_3(glval) = FunctionAddress[String] : -# 1315| v1315_4(void) = Call[String] : func:r1315_3, this:r1315_1 -# 1315| mu1315_5(unknown) = ^CallSideEffect : ~m? -# 1315| mu1315_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1315_1 -# 1316| r1316_1(glval) = VariableAddress[x432] : -# 1316| r1316_2(glval) = FunctionAddress[~String] : -# 1316| v1316_3(void) = Call[~String] : func:r1316_2, this:r1316_1 -# 1316| mu1316_4(unknown) = ^CallSideEffect : ~m? -# 1316| v1316_5(void) = ^IndirectReadSideEffect[-1] : &:r1316_1, ~m? -# 1316| mu1316_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1316_1 -# 1316| r1316_7(bool) = Constant[0] : -# 1316| v1316_8(void) = ConditionalBranch : r1316_7 +# 35| Block 433 +# 35| r35_6049(glval) = VariableAddress[x432] : +# 35| mu35_6050(String) = Uninitialized[x432] : &:r35_6049 +# 35| r35_6051(glval) = FunctionAddress[String] : +# 35| v35_6052(void) = Call[String] : func:r35_6051, this:r35_6049 +# 35| mu35_6053(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6049 +# 35| r35_6055(glval) = VariableAddress[x432] : +# 35| r35_6056(glval) = FunctionAddress[~String] : +# 35| v35_6057(void) = Call[~String] : func:r35_6056, this:r35_6055 +# 35| mu35_6058(unknown) = ^CallSideEffect : ~m? +# 35| v35_6059(void) = ^IndirectReadSideEffect[-1] : &:r35_6055, ~m? +# 35| mu35_6060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6055 +# 35| r35_6061(bool) = Constant[0] : +# 35| v35_6062(void) = ConditionalBranch : r35_6061 #-----| False -> Block 434 #-----| True (back edge) -> Block 433 -# 1318| Block 434 -# 1318| r1318_1(glval) = VariableAddress[x433] : -# 1318| mu1318_2(String) = Uninitialized[x433] : &:r1318_1 -# 1318| r1318_3(glval) = FunctionAddress[String] : -# 1318| v1318_4(void) = Call[String] : func:r1318_3, this:r1318_1 -# 1318| mu1318_5(unknown) = ^CallSideEffect : ~m? -# 1318| mu1318_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1318_1 -# 1319| r1319_1(glval) = VariableAddress[x433] : -# 1319| r1319_2(glval) = FunctionAddress[~String] : -# 1319| v1319_3(void) = Call[~String] : func:r1319_2, this:r1319_1 -# 1319| mu1319_4(unknown) = ^CallSideEffect : ~m? -# 1319| v1319_5(void) = ^IndirectReadSideEffect[-1] : &:r1319_1, ~m? -# 1319| mu1319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1319_1 -# 1319| r1319_7(bool) = Constant[0] : -# 1319| v1319_8(void) = ConditionalBranch : r1319_7 +# 35| Block 434 +# 35| r35_6063(glval) = VariableAddress[x433] : +# 35| mu35_6064(String) = Uninitialized[x433] : &:r35_6063 +# 35| r35_6065(glval) = FunctionAddress[String] : +# 35| v35_6066(void) = Call[String] : func:r35_6065, this:r35_6063 +# 35| mu35_6067(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6063 +# 35| r35_6069(glval) = VariableAddress[x433] : +# 35| r35_6070(glval) = FunctionAddress[~String] : +# 35| v35_6071(void) = Call[~String] : func:r35_6070, this:r35_6069 +# 35| mu35_6072(unknown) = ^CallSideEffect : ~m? +# 35| v35_6073(void) = ^IndirectReadSideEffect[-1] : &:r35_6069, ~m? +# 35| mu35_6074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6069 +# 35| r35_6075(bool) = Constant[0] : +# 35| v35_6076(void) = ConditionalBranch : r35_6075 #-----| False -> Block 435 #-----| True (back edge) -> Block 434 -# 1321| Block 435 -# 1321| r1321_1(glval) = VariableAddress[x434] : -# 1321| mu1321_2(String) = Uninitialized[x434] : &:r1321_1 -# 1321| r1321_3(glval) = FunctionAddress[String] : -# 1321| v1321_4(void) = Call[String] : func:r1321_3, this:r1321_1 -# 1321| mu1321_5(unknown) = ^CallSideEffect : ~m? -# 1321| mu1321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1321_1 -# 1322| r1322_1(glval) = VariableAddress[x434] : -# 1322| r1322_2(glval) = FunctionAddress[~String] : -# 1322| v1322_3(void) = Call[~String] : func:r1322_2, this:r1322_1 -# 1322| mu1322_4(unknown) = ^CallSideEffect : ~m? -# 1322| v1322_5(void) = ^IndirectReadSideEffect[-1] : &:r1322_1, ~m? -# 1322| mu1322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1322_1 -# 1322| r1322_7(bool) = Constant[0] : -# 1322| v1322_8(void) = ConditionalBranch : r1322_7 +# 35| Block 435 +# 35| r35_6077(glval) = VariableAddress[x434] : +# 35| mu35_6078(String) = Uninitialized[x434] : &:r35_6077 +# 35| r35_6079(glval) = FunctionAddress[String] : +# 35| v35_6080(void) = Call[String] : func:r35_6079, this:r35_6077 +# 35| mu35_6081(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6077 +# 35| r35_6083(glval) = VariableAddress[x434] : +# 35| r35_6084(glval) = FunctionAddress[~String] : +# 35| v35_6085(void) = Call[~String] : func:r35_6084, this:r35_6083 +# 35| mu35_6086(unknown) = ^CallSideEffect : ~m? +# 35| v35_6087(void) = ^IndirectReadSideEffect[-1] : &:r35_6083, ~m? +# 35| mu35_6088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6083 +# 35| r35_6089(bool) = Constant[0] : +# 35| v35_6090(void) = ConditionalBranch : r35_6089 #-----| False -> Block 436 #-----| True (back edge) -> Block 435 -# 1324| Block 436 -# 1324| r1324_1(glval) = VariableAddress[x435] : -# 1324| mu1324_2(String) = Uninitialized[x435] : &:r1324_1 -# 1324| r1324_3(glval) = FunctionAddress[String] : -# 1324| v1324_4(void) = Call[String] : func:r1324_3, this:r1324_1 -# 1324| mu1324_5(unknown) = ^CallSideEffect : ~m? -# 1324| mu1324_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1324_1 -# 1325| r1325_1(glval) = VariableAddress[x435] : -# 1325| r1325_2(glval) = FunctionAddress[~String] : -# 1325| v1325_3(void) = Call[~String] : func:r1325_2, this:r1325_1 -# 1325| mu1325_4(unknown) = ^CallSideEffect : ~m? -# 1325| v1325_5(void) = ^IndirectReadSideEffect[-1] : &:r1325_1, ~m? -# 1325| mu1325_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1325_1 -# 1325| r1325_7(bool) = Constant[0] : -# 1325| v1325_8(void) = ConditionalBranch : r1325_7 +# 35| Block 436 +# 35| r35_6091(glval) = VariableAddress[x435] : +# 35| mu35_6092(String) = Uninitialized[x435] : &:r35_6091 +# 35| r35_6093(glval) = FunctionAddress[String] : +# 35| v35_6094(void) = Call[String] : func:r35_6093, this:r35_6091 +# 35| mu35_6095(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6091 +# 35| r35_6097(glval) = VariableAddress[x435] : +# 35| r35_6098(glval) = FunctionAddress[~String] : +# 35| v35_6099(void) = Call[~String] : func:r35_6098, this:r35_6097 +# 35| mu35_6100(unknown) = ^CallSideEffect : ~m? +# 35| v35_6101(void) = ^IndirectReadSideEffect[-1] : &:r35_6097, ~m? +# 35| mu35_6102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6097 +# 35| r35_6103(bool) = Constant[0] : +# 35| v35_6104(void) = ConditionalBranch : r35_6103 #-----| False -> Block 437 #-----| True (back edge) -> Block 436 -# 1327| Block 437 -# 1327| r1327_1(glval) = VariableAddress[x436] : -# 1327| mu1327_2(String) = Uninitialized[x436] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1328| r1328_1(glval) = VariableAddress[x436] : -# 1328| r1328_2(glval) = FunctionAddress[~String] : -# 1328| v1328_3(void) = Call[~String] : func:r1328_2, this:r1328_1 -# 1328| mu1328_4(unknown) = ^CallSideEffect : ~m? -# 1328| v1328_5(void) = ^IndirectReadSideEffect[-1] : &:r1328_1, ~m? -# 1328| mu1328_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1328_1 -# 1328| r1328_7(bool) = Constant[0] : -# 1328| v1328_8(void) = ConditionalBranch : r1328_7 +# 35| Block 437 +# 35| r35_6105(glval) = VariableAddress[x436] : +# 35| mu35_6106(String) = Uninitialized[x436] : &:r35_6105 +# 35| r35_6107(glval) = FunctionAddress[String] : +# 35| v35_6108(void) = Call[String] : func:r35_6107, this:r35_6105 +# 35| mu35_6109(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6105 +# 35| r35_6111(glval) = VariableAddress[x436] : +# 35| r35_6112(glval) = FunctionAddress[~String] : +# 35| v35_6113(void) = Call[~String] : func:r35_6112, this:r35_6111 +# 35| mu35_6114(unknown) = ^CallSideEffect : ~m? +# 35| v35_6115(void) = ^IndirectReadSideEffect[-1] : &:r35_6111, ~m? +# 35| mu35_6116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6111 +# 35| r35_6117(bool) = Constant[0] : +# 35| v35_6118(void) = ConditionalBranch : r35_6117 #-----| False -> Block 438 #-----| True (back edge) -> Block 437 -# 1330| Block 438 -# 1330| r1330_1(glval) = VariableAddress[x437] : -# 1330| mu1330_2(String) = Uninitialized[x437] : &:r1330_1 -# 1330| r1330_3(glval) = FunctionAddress[String] : -# 1330| v1330_4(void) = Call[String] : func:r1330_3, this:r1330_1 -# 1330| mu1330_5(unknown) = ^CallSideEffect : ~m? -# 1330| mu1330_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1330_1 -# 1331| r1331_1(glval) = VariableAddress[x437] : -# 1331| r1331_2(glval) = FunctionAddress[~String] : -# 1331| v1331_3(void) = Call[~String] : func:r1331_2, this:r1331_1 -# 1331| mu1331_4(unknown) = ^CallSideEffect : ~m? -# 1331| v1331_5(void) = ^IndirectReadSideEffect[-1] : &:r1331_1, ~m? -# 1331| mu1331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1331_1 -# 1331| r1331_7(bool) = Constant[0] : -# 1331| v1331_8(void) = ConditionalBranch : r1331_7 +# 35| Block 438 +# 35| r35_6119(glval) = VariableAddress[x437] : +# 35| mu35_6120(String) = Uninitialized[x437] : &:r35_6119 +# 35| r35_6121(glval) = FunctionAddress[String] : +# 35| v35_6122(void) = Call[String] : func:r35_6121, this:r35_6119 +# 35| mu35_6123(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6119 +# 35| r35_6125(glval) = VariableAddress[x437] : +# 35| r35_6126(glval) = FunctionAddress[~String] : +# 35| v35_6127(void) = Call[~String] : func:r35_6126, this:r35_6125 +# 35| mu35_6128(unknown) = ^CallSideEffect : ~m? +# 35| v35_6129(void) = ^IndirectReadSideEffect[-1] : &:r35_6125, ~m? +# 35| mu35_6130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6125 +# 35| r35_6131(bool) = Constant[0] : +# 35| v35_6132(void) = ConditionalBranch : r35_6131 #-----| False -> Block 439 #-----| True (back edge) -> Block 438 -# 1333| Block 439 -# 1333| r1333_1(glval) = VariableAddress[x438] : -# 1333| mu1333_2(String) = Uninitialized[x438] : &:r1333_1 -# 1333| r1333_3(glval) = FunctionAddress[String] : -# 1333| v1333_4(void) = Call[String] : func:r1333_3, this:r1333_1 -# 1333| mu1333_5(unknown) = ^CallSideEffect : ~m? -# 1333| mu1333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1333_1 -# 1334| r1334_1(glval) = VariableAddress[x438] : -# 1334| r1334_2(glval) = FunctionAddress[~String] : -# 1334| v1334_3(void) = Call[~String] : func:r1334_2, this:r1334_1 -# 1334| mu1334_4(unknown) = ^CallSideEffect : ~m? -# 1334| v1334_5(void) = ^IndirectReadSideEffect[-1] : &:r1334_1, ~m? -# 1334| mu1334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1334_1 -# 1334| r1334_7(bool) = Constant[0] : -# 1334| v1334_8(void) = ConditionalBranch : r1334_7 +# 35| Block 439 +# 35| r35_6133(glval) = VariableAddress[x438] : +# 35| mu35_6134(String) = Uninitialized[x438] : &:r35_6133 +# 35| r35_6135(glval) = FunctionAddress[String] : +# 35| v35_6136(void) = Call[String] : func:r35_6135, this:r35_6133 +# 35| mu35_6137(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6133 +# 35| r35_6139(glval) = VariableAddress[x438] : +# 35| r35_6140(glval) = FunctionAddress[~String] : +# 35| v35_6141(void) = Call[~String] : func:r35_6140, this:r35_6139 +# 35| mu35_6142(unknown) = ^CallSideEffect : ~m? +# 35| v35_6143(void) = ^IndirectReadSideEffect[-1] : &:r35_6139, ~m? +# 35| mu35_6144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6139 +# 35| r35_6145(bool) = Constant[0] : +# 35| v35_6146(void) = ConditionalBranch : r35_6145 #-----| False -> Block 440 #-----| True (back edge) -> Block 439 -# 1336| Block 440 -# 1336| r1336_1(glval) = VariableAddress[x439] : -# 1336| mu1336_2(String) = Uninitialized[x439] : &:r1336_1 -# 1336| r1336_3(glval) = FunctionAddress[String] : -# 1336| v1336_4(void) = Call[String] : func:r1336_3, this:r1336_1 -# 1336| mu1336_5(unknown) = ^CallSideEffect : ~m? -# 1336| mu1336_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1336_1 -# 1337| r1337_1(glval) = VariableAddress[x439] : -# 1337| r1337_2(glval) = FunctionAddress[~String] : -# 1337| v1337_3(void) = Call[~String] : func:r1337_2, this:r1337_1 -# 1337| mu1337_4(unknown) = ^CallSideEffect : ~m? -# 1337| v1337_5(void) = ^IndirectReadSideEffect[-1] : &:r1337_1, ~m? -# 1337| mu1337_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1337_1 -# 1337| r1337_7(bool) = Constant[0] : -# 1337| v1337_8(void) = ConditionalBranch : r1337_7 +# 35| Block 440 +# 35| r35_6147(glval) = VariableAddress[x439] : +# 35| mu35_6148(String) = Uninitialized[x439] : &:r35_6147 +# 35| r35_6149(glval) = FunctionAddress[String] : +# 35| v35_6150(void) = Call[String] : func:r35_6149, this:r35_6147 +# 35| mu35_6151(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6147 +# 35| r35_6153(glval) = VariableAddress[x439] : +# 35| r35_6154(glval) = FunctionAddress[~String] : +# 35| v35_6155(void) = Call[~String] : func:r35_6154, this:r35_6153 +# 35| mu35_6156(unknown) = ^CallSideEffect : ~m? +# 35| v35_6157(void) = ^IndirectReadSideEffect[-1] : &:r35_6153, ~m? +# 35| mu35_6158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6153 +# 35| r35_6159(bool) = Constant[0] : +# 35| v35_6160(void) = ConditionalBranch : r35_6159 #-----| False -> Block 441 #-----| True (back edge) -> Block 440 -# 1339| Block 441 -# 1339| r1339_1(glval) = VariableAddress[x440] : -# 1339| mu1339_2(String) = Uninitialized[x440] : &:r1339_1 -# 1339| r1339_3(glval) = FunctionAddress[String] : -# 1339| v1339_4(void) = Call[String] : func:r1339_3, this:r1339_1 -# 1339| mu1339_5(unknown) = ^CallSideEffect : ~m? -# 1339| mu1339_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1339_1 -# 1340| r1340_1(glval) = VariableAddress[x440] : -# 1340| r1340_2(glval) = FunctionAddress[~String] : -# 1340| v1340_3(void) = Call[~String] : func:r1340_2, this:r1340_1 -# 1340| mu1340_4(unknown) = ^CallSideEffect : ~m? -# 1340| v1340_5(void) = ^IndirectReadSideEffect[-1] : &:r1340_1, ~m? -# 1340| mu1340_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1340_1 -# 1340| r1340_7(bool) = Constant[0] : -# 1340| v1340_8(void) = ConditionalBranch : r1340_7 +# 35| Block 441 +# 35| r35_6161(glval) = VariableAddress[x440] : +# 35| mu35_6162(String) = Uninitialized[x440] : &:r35_6161 +# 35| r35_6163(glval) = FunctionAddress[String] : +# 35| v35_6164(void) = Call[String] : func:r35_6163, this:r35_6161 +# 35| mu35_6165(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6161 +# 35| r35_6167(glval) = VariableAddress[x440] : +# 35| r35_6168(glval) = FunctionAddress[~String] : +# 35| v35_6169(void) = Call[~String] : func:r35_6168, this:r35_6167 +# 35| mu35_6170(unknown) = ^CallSideEffect : ~m? +# 35| v35_6171(void) = ^IndirectReadSideEffect[-1] : &:r35_6167, ~m? +# 35| mu35_6172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6167 +# 35| r35_6173(bool) = Constant[0] : +# 35| v35_6174(void) = ConditionalBranch : r35_6173 #-----| False -> Block 442 #-----| True (back edge) -> Block 441 -# 1342| Block 442 -# 1342| r1342_1(glval) = VariableAddress[x441] : -# 1342| mu1342_2(String) = Uninitialized[x441] : &:r1342_1 -# 1342| r1342_3(glval) = FunctionAddress[String] : -# 1342| v1342_4(void) = Call[String] : func:r1342_3, this:r1342_1 -# 1342| mu1342_5(unknown) = ^CallSideEffect : ~m? -# 1342| mu1342_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1342_1 -# 1343| r1343_1(glval) = VariableAddress[x441] : -# 1343| r1343_2(glval) = FunctionAddress[~String] : -# 1343| v1343_3(void) = Call[~String] : func:r1343_2, this:r1343_1 -# 1343| mu1343_4(unknown) = ^CallSideEffect : ~m? -# 1343| v1343_5(void) = ^IndirectReadSideEffect[-1] : &:r1343_1, ~m? -# 1343| mu1343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1343_1 -# 1343| r1343_7(bool) = Constant[0] : -# 1343| v1343_8(void) = ConditionalBranch : r1343_7 +# 35| Block 442 +# 35| r35_6175(glval) = VariableAddress[x441] : +# 35| mu35_6176(String) = Uninitialized[x441] : &:r35_6175 +# 35| r35_6177(glval) = FunctionAddress[String] : +# 35| v35_6178(void) = Call[String] : func:r35_6177, this:r35_6175 +# 35| mu35_6179(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6175 +# 35| r35_6181(glval) = VariableAddress[x441] : +# 35| r35_6182(glval) = FunctionAddress[~String] : +# 35| v35_6183(void) = Call[~String] : func:r35_6182, this:r35_6181 +# 35| mu35_6184(unknown) = ^CallSideEffect : ~m? +# 35| v35_6185(void) = ^IndirectReadSideEffect[-1] : &:r35_6181, ~m? +# 35| mu35_6186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6181 +# 35| r35_6187(bool) = Constant[0] : +# 35| v35_6188(void) = ConditionalBranch : r35_6187 #-----| False -> Block 443 #-----| True (back edge) -> Block 442 -# 1345| Block 443 -# 1345| r1345_1(glval) = VariableAddress[x442] : -# 1345| mu1345_2(String) = Uninitialized[x442] : &:r1345_1 -# 1345| r1345_3(glval) = FunctionAddress[String] : -# 1345| v1345_4(void) = Call[String] : func:r1345_3, this:r1345_1 -# 1345| mu1345_5(unknown) = ^CallSideEffect : ~m? -# 1345| mu1345_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1345_1 -# 1346| r1346_1(glval) = VariableAddress[x442] : -# 1346| r1346_2(glval) = FunctionAddress[~String] : -# 1346| v1346_3(void) = Call[~String] : func:r1346_2, this:r1346_1 -# 1346| mu1346_4(unknown) = ^CallSideEffect : ~m? -# 1346| v1346_5(void) = ^IndirectReadSideEffect[-1] : &:r1346_1, ~m? -# 1346| mu1346_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1346_1 -# 1346| r1346_7(bool) = Constant[0] : -# 1346| v1346_8(void) = ConditionalBranch : r1346_7 +# 35| Block 443 +# 35| r35_6189(glval) = VariableAddress[x442] : +# 35| mu35_6190(String) = Uninitialized[x442] : &:r35_6189 +# 35| r35_6191(glval) = FunctionAddress[String] : +# 35| v35_6192(void) = Call[String] : func:r35_6191, this:r35_6189 +# 35| mu35_6193(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6189 +# 35| r35_6195(glval) = VariableAddress[x442] : +# 35| r35_6196(glval) = FunctionAddress[~String] : +# 35| v35_6197(void) = Call[~String] : func:r35_6196, this:r35_6195 +# 35| mu35_6198(unknown) = ^CallSideEffect : ~m? +# 35| v35_6199(void) = ^IndirectReadSideEffect[-1] : &:r35_6195, ~m? +# 35| mu35_6200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6195 +# 35| r35_6201(bool) = Constant[0] : +# 35| v35_6202(void) = ConditionalBranch : r35_6201 #-----| False -> Block 444 #-----| True (back edge) -> Block 443 -# 1348| Block 444 -# 1348| r1348_1(glval) = VariableAddress[x443] : -# 1348| mu1348_2(String) = Uninitialized[x443] : &:r1348_1 -# 1348| r1348_3(glval) = FunctionAddress[String] : -# 1348| v1348_4(void) = Call[String] : func:r1348_3, this:r1348_1 -# 1348| mu1348_5(unknown) = ^CallSideEffect : ~m? -# 1348| mu1348_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1348_1 -# 1349| r1349_1(glval) = VariableAddress[x443] : -# 1349| r1349_2(glval) = FunctionAddress[~String] : -# 1349| v1349_3(void) = Call[~String] : func:r1349_2, this:r1349_1 -# 1349| mu1349_4(unknown) = ^CallSideEffect : ~m? -# 1349| v1349_5(void) = ^IndirectReadSideEffect[-1] : &:r1349_1, ~m? -# 1349| mu1349_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1349_1 -# 1349| r1349_7(bool) = Constant[0] : -# 1349| v1349_8(void) = ConditionalBranch : r1349_7 +# 35| Block 444 +# 35| r35_6203(glval) = VariableAddress[x443] : +# 35| mu35_6204(String) = Uninitialized[x443] : &:r35_6203 +# 35| r35_6205(glval) = FunctionAddress[String] : +# 35| v35_6206(void) = Call[String] : func:r35_6205, this:r35_6203 +# 35| mu35_6207(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6203 +# 35| r35_6209(glval) = VariableAddress[x443] : +# 35| r35_6210(glval) = FunctionAddress[~String] : +# 35| v35_6211(void) = Call[~String] : func:r35_6210, this:r35_6209 +# 35| mu35_6212(unknown) = ^CallSideEffect : ~m? +# 35| v35_6213(void) = ^IndirectReadSideEffect[-1] : &:r35_6209, ~m? +# 35| mu35_6214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6209 +# 35| r35_6215(bool) = Constant[0] : +# 35| v35_6216(void) = ConditionalBranch : r35_6215 #-----| False -> Block 445 #-----| True (back edge) -> Block 444 -# 1351| Block 445 -# 1351| r1351_1(glval) = VariableAddress[x444] : -# 1351| mu1351_2(String) = Uninitialized[x444] : &:r1351_1 -# 1351| r1351_3(glval) = FunctionAddress[String] : -# 1351| v1351_4(void) = Call[String] : func:r1351_3, this:r1351_1 -# 1351| mu1351_5(unknown) = ^CallSideEffect : ~m? -# 1351| mu1351_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1351_1 -# 1352| r1352_1(glval) = VariableAddress[x444] : -# 1352| r1352_2(glval) = FunctionAddress[~String] : -# 1352| v1352_3(void) = Call[~String] : func:r1352_2, this:r1352_1 -# 1352| mu1352_4(unknown) = ^CallSideEffect : ~m? -# 1352| v1352_5(void) = ^IndirectReadSideEffect[-1] : &:r1352_1, ~m? -# 1352| mu1352_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1352_1 -# 1352| r1352_7(bool) = Constant[0] : -# 1352| v1352_8(void) = ConditionalBranch : r1352_7 +# 35| Block 445 +# 35| r35_6217(glval) = VariableAddress[x444] : +# 35| mu35_6218(String) = Uninitialized[x444] : &:r35_6217 +# 35| r35_6219(glval) = FunctionAddress[String] : +# 35| v35_6220(void) = Call[String] : func:r35_6219, this:r35_6217 +# 35| mu35_6221(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6217 +# 35| r35_6223(glval) = VariableAddress[x444] : +# 35| r35_6224(glval) = FunctionAddress[~String] : +# 35| v35_6225(void) = Call[~String] : func:r35_6224, this:r35_6223 +# 35| mu35_6226(unknown) = ^CallSideEffect : ~m? +# 35| v35_6227(void) = ^IndirectReadSideEffect[-1] : &:r35_6223, ~m? +# 35| mu35_6228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6223 +# 35| r35_6229(bool) = Constant[0] : +# 35| v35_6230(void) = ConditionalBranch : r35_6229 #-----| False -> Block 446 #-----| True (back edge) -> Block 445 -# 1354| Block 446 -# 1354| r1354_1(glval) = VariableAddress[x445] : -# 1354| mu1354_2(String) = Uninitialized[x445] : &:r1354_1 -# 1354| r1354_3(glval) = FunctionAddress[String] : -# 1354| v1354_4(void) = Call[String] : func:r1354_3, this:r1354_1 -# 1354| mu1354_5(unknown) = ^CallSideEffect : ~m? -# 1354| mu1354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1354_1 -# 1355| r1355_1(glval) = VariableAddress[x445] : -# 1355| r1355_2(glval) = FunctionAddress[~String] : -# 1355| v1355_3(void) = Call[~String] : func:r1355_2, this:r1355_1 -# 1355| mu1355_4(unknown) = ^CallSideEffect : ~m? -# 1355| v1355_5(void) = ^IndirectReadSideEffect[-1] : &:r1355_1, ~m? -# 1355| mu1355_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1355_1 -# 1355| r1355_7(bool) = Constant[0] : -# 1355| v1355_8(void) = ConditionalBranch : r1355_7 +# 35| Block 446 +# 35| r35_6231(glval) = VariableAddress[x445] : +# 35| mu35_6232(String) = Uninitialized[x445] : &:r35_6231 +# 35| r35_6233(glval) = FunctionAddress[String] : +# 35| v35_6234(void) = Call[String] : func:r35_6233, this:r35_6231 +# 35| mu35_6235(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6231 +# 35| r35_6237(glval) = VariableAddress[x445] : +# 35| r35_6238(glval) = FunctionAddress[~String] : +# 35| v35_6239(void) = Call[~String] : func:r35_6238, this:r35_6237 +# 35| mu35_6240(unknown) = ^CallSideEffect : ~m? +# 35| v35_6241(void) = ^IndirectReadSideEffect[-1] : &:r35_6237, ~m? +# 35| mu35_6242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6237 +# 35| r35_6243(bool) = Constant[0] : +# 35| v35_6244(void) = ConditionalBranch : r35_6243 #-----| False -> Block 447 #-----| True (back edge) -> Block 446 -# 1357| Block 447 -# 1357| r1357_1(glval) = VariableAddress[x446] : -# 1357| mu1357_2(String) = Uninitialized[x446] : &:r1357_1 -# 1357| r1357_3(glval) = FunctionAddress[String] : -# 1357| v1357_4(void) = Call[String] : func:r1357_3, this:r1357_1 -# 1357| mu1357_5(unknown) = ^CallSideEffect : ~m? -# 1357| mu1357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1357_1 -# 1358| r1358_1(glval) = VariableAddress[x446] : -# 1358| r1358_2(glval) = FunctionAddress[~String] : -# 1358| v1358_3(void) = Call[~String] : func:r1358_2, this:r1358_1 -# 1358| mu1358_4(unknown) = ^CallSideEffect : ~m? -# 1358| v1358_5(void) = ^IndirectReadSideEffect[-1] : &:r1358_1, ~m? -# 1358| mu1358_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1358_1 -# 1358| r1358_7(bool) = Constant[0] : -# 1358| v1358_8(void) = ConditionalBranch : r1358_7 +# 35| Block 447 +# 35| r35_6245(glval) = VariableAddress[x446] : +# 35| mu35_6246(String) = Uninitialized[x446] : &:r35_6245 +# 35| r35_6247(glval) = FunctionAddress[String] : +# 35| v35_6248(void) = Call[String] : func:r35_6247, this:r35_6245 +# 35| mu35_6249(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6245 +# 35| r35_6251(glval) = VariableAddress[x446] : +# 35| r35_6252(glval) = FunctionAddress[~String] : +# 35| v35_6253(void) = Call[~String] : func:r35_6252, this:r35_6251 +# 35| mu35_6254(unknown) = ^CallSideEffect : ~m? +# 35| v35_6255(void) = ^IndirectReadSideEffect[-1] : &:r35_6251, ~m? +# 35| mu35_6256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6251 +# 35| r35_6257(bool) = Constant[0] : +# 35| v35_6258(void) = ConditionalBranch : r35_6257 #-----| False -> Block 448 #-----| True (back edge) -> Block 447 -# 1360| Block 448 -# 1360| r1360_1(glval) = VariableAddress[x447] : -# 1360| mu1360_2(String) = Uninitialized[x447] : &:r1360_1 -# 1360| r1360_3(glval) = FunctionAddress[String] : -# 1360| v1360_4(void) = Call[String] : func:r1360_3, this:r1360_1 -# 1360| mu1360_5(unknown) = ^CallSideEffect : ~m? -# 1360| mu1360_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1360_1 -# 1361| r1361_1(glval) = VariableAddress[x447] : -# 1361| r1361_2(glval) = FunctionAddress[~String] : -# 1361| v1361_3(void) = Call[~String] : func:r1361_2, this:r1361_1 -# 1361| mu1361_4(unknown) = ^CallSideEffect : ~m? -# 1361| v1361_5(void) = ^IndirectReadSideEffect[-1] : &:r1361_1, ~m? -# 1361| mu1361_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1361_1 -# 1361| r1361_7(bool) = Constant[0] : -# 1361| v1361_8(void) = ConditionalBranch : r1361_7 +# 35| Block 448 +# 35| r35_6259(glval) = VariableAddress[x447] : +# 35| mu35_6260(String) = Uninitialized[x447] : &:r35_6259 +# 35| r35_6261(glval) = FunctionAddress[String] : +# 35| v35_6262(void) = Call[String] : func:r35_6261, this:r35_6259 +# 35| mu35_6263(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6259 +# 35| r35_6265(glval) = VariableAddress[x447] : +# 35| r35_6266(glval) = FunctionAddress[~String] : +# 35| v35_6267(void) = Call[~String] : func:r35_6266, this:r35_6265 +# 35| mu35_6268(unknown) = ^CallSideEffect : ~m? +# 35| v35_6269(void) = ^IndirectReadSideEffect[-1] : &:r35_6265, ~m? +# 35| mu35_6270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6265 +# 35| r35_6271(bool) = Constant[0] : +# 35| v35_6272(void) = ConditionalBranch : r35_6271 #-----| False -> Block 449 #-----| True (back edge) -> Block 448 -# 1363| Block 449 -# 1363| r1363_1(glval) = VariableAddress[x448] : -# 1363| mu1363_2(String) = Uninitialized[x448] : &:r1363_1 -# 1363| r1363_3(glval) = FunctionAddress[String] : -# 1363| v1363_4(void) = Call[String] : func:r1363_3, this:r1363_1 -# 1363| mu1363_5(unknown) = ^CallSideEffect : ~m? -# 1363| mu1363_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1363_1 -# 1364| r1364_1(glval) = VariableAddress[x448] : -# 1364| r1364_2(glval) = FunctionAddress[~String] : -# 1364| v1364_3(void) = Call[~String] : func:r1364_2, this:r1364_1 -# 1364| mu1364_4(unknown) = ^CallSideEffect : ~m? -# 1364| v1364_5(void) = ^IndirectReadSideEffect[-1] : &:r1364_1, ~m? -# 1364| mu1364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1364_1 -# 1364| r1364_7(bool) = Constant[0] : -# 1364| v1364_8(void) = ConditionalBranch : r1364_7 +# 35| Block 449 +# 35| r35_6273(glval) = VariableAddress[x448] : +# 35| mu35_6274(String) = Uninitialized[x448] : &:r35_6273 +# 35| r35_6275(glval) = FunctionAddress[String] : +# 35| v35_6276(void) = Call[String] : func:r35_6275, this:r35_6273 +# 35| mu35_6277(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6273 +# 35| r35_6279(glval) = VariableAddress[x448] : +# 35| r35_6280(glval) = FunctionAddress[~String] : +# 35| v35_6281(void) = Call[~String] : func:r35_6280, this:r35_6279 +# 35| mu35_6282(unknown) = ^CallSideEffect : ~m? +# 35| v35_6283(void) = ^IndirectReadSideEffect[-1] : &:r35_6279, ~m? +# 35| mu35_6284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6279 +# 35| r35_6285(bool) = Constant[0] : +# 35| v35_6286(void) = ConditionalBranch : r35_6285 #-----| False -> Block 450 #-----| True (back edge) -> Block 449 -# 1366| Block 450 -# 1366| r1366_1(glval) = VariableAddress[x449] : -# 1366| mu1366_2(String) = Uninitialized[x449] : &:r1366_1 -# 1366| r1366_3(glval) = FunctionAddress[String] : -# 1366| v1366_4(void) = Call[String] : func:r1366_3, this:r1366_1 -# 1366| mu1366_5(unknown) = ^CallSideEffect : ~m? -# 1366| mu1366_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1366_1 -# 1367| r1367_1(glval) = VariableAddress[x449] : -# 1367| r1367_2(glval) = FunctionAddress[~String] : -# 1367| v1367_3(void) = Call[~String] : func:r1367_2, this:r1367_1 -# 1367| mu1367_4(unknown) = ^CallSideEffect : ~m? -# 1367| v1367_5(void) = ^IndirectReadSideEffect[-1] : &:r1367_1, ~m? -# 1367| mu1367_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1367_1 -# 1367| r1367_7(bool) = Constant[0] : -# 1367| v1367_8(void) = ConditionalBranch : r1367_7 +# 35| Block 450 +# 35| r35_6287(glval) = VariableAddress[x449] : +# 35| mu35_6288(String) = Uninitialized[x449] : &:r35_6287 +# 35| r35_6289(glval) = FunctionAddress[String] : +# 35| v35_6290(void) = Call[String] : func:r35_6289, this:r35_6287 +# 35| mu35_6291(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6287 +# 35| r35_6293(glval) = VariableAddress[x449] : +# 35| r35_6294(glval) = FunctionAddress[~String] : +# 35| v35_6295(void) = Call[~String] : func:r35_6294, this:r35_6293 +# 35| mu35_6296(unknown) = ^CallSideEffect : ~m? +# 35| v35_6297(void) = ^IndirectReadSideEffect[-1] : &:r35_6293, ~m? +# 35| mu35_6298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6293 +# 35| r35_6299(bool) = Constant[0] : +# 35| v35_6300(void) = ConditionalBranch : r35_6299 #-----| False -> Block 451 #-----| True (back edge) -> Block 450 -# 1369| Block 451 -# 1369| r1369_1(glval) = VariableAddress[x450] : -# 1369| mu1369_2(String) = Uninitialized[x450] : &:r1369_1 -# 1369| r1369_3(glval) = FunctionAddress[String] : -# 1369| v1369_4(void) = Call[String] : func:r1369_3, this:r1369_1 -# 1369| mu1369_5(unknown) = ^CallSideEffect : ~m? -# 1369| mu1369_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1369_1 -# 1370| r1370_1(glval) = VariableAddress[x450] : -# 1370| r1370_2(glval) = FunctionAddress[~String] : -# 1370| v1370_3(void) = Call[~String] : func:r1370_2, this:r1370_1 -# 1370| mu1370_4(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_5(void) = ^IndirectReadSideEffect[-1] : &:r1370_1, ~m? -# 1370| mu1370_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_1 -# 1370| r1370_7(bool) = Constant[0] : -# 1370| v1370_8(void) = ConditionalBranch : r1370_7 +# 35| Block 451 +# 35| r35_6301(glval) = VariableAddress[x450] : +# 35| mu35_6302(String) = Uninitialized[x450] : &:r35_6301 +# 35| r35_6303(glval) = FunctionAddress[String] : +# 35| v35_6304(void) = Call[String] : func:r35_6303, this:r35_6301 +# 35| mu35_6305(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6301 +# 35| r35_6307(glval) = VariableAddress[x450] : +# 35| r35_6308(glval) = FunctionAddress[~String] : +# 35| v35_6309(void) = Call[~String] : func:r35_6308, this:r35_6307 +# 35| mu35_6310(unknown) = ^CallSideEffect : ~m? +# 35| v35_6311(void) = ^IndirectReadSideEffect[-1] : &:r35_6307, ~m? +# 35| mu35_6312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6307 +# 35| r35_6313(bool) = Constant[0] : +# 35| v35_6314(void) = ConditionalBranch : r35_6313 #-----| False -> Block 452 #-----| True (back edge) -> Block 451 -# 1372| Block 452 -# 1372| r1372_1(glval) = VariableAddress[x451] : -# 1372| mu1372_2(String) = Uninitialized[x451] : &:r1372_1 -# 1372| r1372_3(glval) = FunctionAddress[String] : -# 1372| v1372_4(void) = Call[String] : func:r1372_3, this:r1372_1 -# 1372| mu1372_5(unknown) = ^CallSideEffect : ~m? -# 1372| mu1372_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_1 -# 1373| r1373_1(glval) = VariableAddress[x451] : -# 1373| r1373_2(glval) = FunctionAddress[~String] : -# 1373| v1373_3(void) = Call[~String] : func:r1373_2, this:r1373_1 -# 1373| mu1373_4(unknown) = ^CallSideEffect : ~m? -# 1373| v1373_5(void) = ^IndirectReadSideEffect[-1] : &:r1373_1, ~m? -# 1373| mu1373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| r1373_7(bool) = Constant[0] : -# 1373| v1373_8(void) = ConditionalBranch : r1373_7 +# 35| Block 452 +# 35| r35_6315(glval) = VariableAddress[x451] : +# 35| mu35_6316(String) = Uninitialized[x451] : &:r35_6315 +# 35| r35_6317(glval) = FunctionAddress[String] : +# 35| v35_6318(void) = Call[String] : func:r35_6317, this:r35_6315 +# 35| mu35_6319(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6315 +# 35| r35_6321(glval) = VariableAddress[x451] : +# 35| r35_6322(glval) = FunctionAddress[~String] : +# 35| v35_6323(void) = Call[~String] : func:r35_6322, this:r35_6321 +# 35| mu35_6324(unknown) = ^CallSideEffect : ~m? +# 35| v35_6325(void) = ^IndirectReadSideEffect[-1] : &:r35_6321, ~m? +# 35| mu35_6326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6321 +# 35| r35_6327(bool) = Constant[0] : +# 35| v35_6328(void) = ConditionalBranch : r35_6327 #-----| False -> Block 453 #-----| True (back edge) -> Block 452 -# 1375| Block 453 -# 1375| r1375_1(glval) = VariableAddress[x452] : -# 1375| mu1375_2(String) = Uninitialized[x452] : &:r1375_1 -# 1375| r1375_3(glval) = FunctionAddress[String] : -# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 -# 1375| mu1375_5(unknown) = ^CallSideEffect : ~m? -# 1375| mu1375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 -# 1376| r1376_1(glval) = VariableAddress[x452] : -# 1376| r1376_2(glval) = FunctionAddress[~String] : -# 1376| v1376_3(void) = Call[~String] : func:r1376_2, this:r1376_1 -# 1376| mu1376_4(unknown) = ^CallSideEffect : ~m? -# 1376| v1376_5(void) = ^IndirectReadSideEffect[-1] : &:r1376_1, ~m? -# 1376| mu1376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 -# 1376| r1376_7(bool) = Constant[0] : -# 1376| v1376_8(void) = ConditionalBranch : r1376_7 +# 35| Block 453 +# 35| r35_6329(glval) = VariableAddress[x452] : +# 35| mu35_6330(String) = Uninitialized[x452] : &:r35_6329 +# 35| r35_6331(glval) = FunctionAddress[String] : +# 35| v35_6332(void) = Call[String] : func:r35_6331, this:r35_6329 +# 35| mu35_6333(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6329 +# 35| r35_6335(glval) = VariableAddress[x452] : +# 35| r35_6336(glval) = FunctionAddress[~String] : +# 35| v35_6337(void) = Call[~String] : func:r35_6336, this:r35_6335 +# 35| mu35_6338(unknown) = ^CallSideEffect : ~m? +# 35| v35_6339(void) = ^IndirectReadSideEffect[-1] : &:r35_6335, ~m? +# 35| mu35_6340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6335 +# 35| r35_6341(bool) = Constant[0] : +# 35| v35_6342(void) = ConditionalBranch : r35_6341 #-----| False -> Block 454 #-----| True (back edge) -> Block 453 -# 1378| Block 454 -# 1378| r1378_1(glval) = VariableAddress[x453] : -# 1378| mu1378_2(String) = Uninitialized[x453] : &:r1378_1 -# 1378| r1378_3(glval) = FunctionAddress[String] : -# 1378| v1378_4(void) = Call[String] : func:r1378_3, this:r1378_1 -# 1378| mu1378_5(unknown) = ^CallSideEffect : ~m? -# 1378| mu1378_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_1 -# 1379| r1379_1(glval) = VariableAddress[x453] : -# 1379| r1379_2(glval) = FunctionAddress[~String] : -# 1379| v1379_3(void) = Call[~String] : func:r1379_2, this:r1379_1 -# 1379| mu1379_4(unknown) = ^CallSideEffect : ~m? -# 1379| v1379_5(void) = ^IndirectReadSideEffect[-1] : &:r1379_1, ~m? -# 1379| mu1379_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_1 -# 1379| r1379_7(bool) = Constant[0] : -# 1379| v1379_8(void) = ConditionalBranch : r1379_7 +# 35| Block 454 +# 35| r35_6343(glval) = VariableAddress[x453] : +# 35| mu35_6344(String) = Uninitialized[x453] : &:r35_6343 +# 35| r35_6345(glval) = FunctionAddress[String] : +# 35| v35_6346(void) = Call[String] : func:r35_6345, this:r35_6343 +# 35| mu35_6347(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6343 +# 35| r35_6349(glval) = VariableAddress[x453] : +# 35| r35_6350(glval) = FunctionAddress[~String] : +# 35| v35_6351(void) = Call[~String] : func:r35_6350, this:r35_6349 +# 35| mu35_6352(unknown) = ^CallSideEffect : ~m? +# 35| v35_6353(void) = ^IndirectReadSideEffect[-1] : &:r35_6349, ~m? +# 35| mu35_6354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6349 +# 35| r35_6355(bool) = Constant[0] : +# 35| v35_6356(void) = ConditionalBranch : r35_6355 #-----| False -> Block 455 #-----| True (back edge) -> Block 454 -# 1381| Block 455 -# 1381| r1381_1(glval) = VariableAddress[x454] : -# 1381| mu1381_2(String) = Uninitialized[x454] : &:r1381_1 -# 1381| r1381_3(glval) = FunctionAddress[String] : -# 1381| v1381_4(void) = Call[String] : func:r1381_3, this:r1381_1 -# 1381| mu1381_5(unknown) = ^CallSideEffect : ~m? -# 1381| mu1381_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1381_1 -# 1382| r1382_1(glval) = VariableAddress[x454] : -# 1382| r1382_2(glval) = FunctionAddress[~String] : -# 1382| v1382_3(void) = Call[~String] : func:r1382_2, this:r1382_1 -# 1382| mu1382_4(unknown) = ^CallSideEffect : ~m? -# 1382| v1382_5(void) = ^IndirectReadSideEffect[-1] : &:r1382_1, ~m? -# 1382| mu1382_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1382_1 -# 1382| r1382_7(bool) = Constant[0] : -# 1382| v1382_8(void) = ConditionalBranch : r1382_7 +# 35| Block 455 +# 35| r35_6357(glval) = VariableAddress[x454] : +# 35| mu35_6358(String) = Uninitialized[x454] : &:r35_6357 +# 35| r35_6359(glval) = FunctionAddress[String] : +# 35| v35_6360(void) = Call[String] : func:r35_6359, this:r35_6357 +# 35| mu35_6361(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6357 +# 35| r35_6363(glval) = VariableAddress[x454] : +# 35| r35_6364(glval) = FunctionAddress[~String] : +# 35| v35_6365(void) = Call[~String] : func:r35_6364, this:r35_6363 +# 35| mu35_6366(unknown) = ^CallSideEffect : ~m? +# 35| v35_6367(void) = ^IndirectReadSideEffect[-1] : &:r35_6363, ~m? +# 35| mu35_6368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6363 +# 35| r35_6369(bool) = Constant[0] : +# 35| v35_6370(void) = ConditionalBranch : r35_6369 #-----| False -> Block 456 #-----| True (back edge) -> Block 455 -# 1384| Block 456 -# 1384| r1384_1(glval) = VariableAddress[x455] : -# 1384| mu1384_2(String) = Uninitialized[x455] : &:r1384_1 -# 1384| r1384_3(glval) = FunctionAddress[String] : -# 1384| v1384_4(void) = Call[String] : func:r1384_3, this:r1384_1 -# 1384| mu1384_5(unknown) = ^CallSideEffect : ~m? -# 1384| mu1384_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1384_1 -# 1385| r1385_1(glval) = VariableAddress[x455] : -# 1385| r1385_2(glval) = FunctionAddress[~String] : -# 1385| v1385_3(void) = Call[~String] : func:r1385_2, this:r1385_1 -# 1385| mu1385_4(unknown) = ^CallSideEffect : ~m? -# 1385| v1385_5(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, ~m? -# 1385| mu1385_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1385| r1385_7(bool) = Constant[0] : -# 1385| v1385_8(void) = ConditionalBranch : r1385_7 +# 35| Block 456 +# 35| r35_6371(glval) = VariableAddress[x455] : +# 35| mu35_6372(String) = Uninitialized[x455] : &:r35_6371 +# 35| r35_6373(glval) = FunctionAddress[String] : +# 35| v35_6374(void) = Call[String] : func:r35_6373, this:r35_6371 +# 35| mu35_6375(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6371 +# 35| r35_6377(glval) = VariableAddress[x455] : +# 35| r35_6378(glval) = FunctionAddress[~String] : +# 35| v35_6379(void) = Call[~String] : func:r35_6378, this:r35_6377 +# 35| mu35_6380(unknown) = ^CallSideEffect : ~m? +# 35| v35_6381(void) = ^IndirectReadSideEffect[-1] : &:r35_6377, ~m? +# 35| mu35_6382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6377 +# 35| r35_6383(bool) = Constant[0] : +# 35| v35_6384(void) = ConditionalBranch : r35_6383 #-----| False -> Block 457 #-----| True (back edge) -> Block 456 -# 1387| Block 457 -# 1387| r1387_1(glval) = VariableAddress[x456] : -# 1387| mu1387_2(String) = Uninitialized[x456] : &:r1387_1 -# 1387| r1387_3(glval) = FunctionAddress[String] : -# 1387| v1387_4(void) = Call[String] : func:r1387_3, this:r1387_1 -# 1387| mu1387_5(unknown) = ^CallSideEffect : ~m? -# 1387| mu1387_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 -# 1388| r1388_1(glval) = VariableAddress[x456] : -# 1388| r1388_2(glval) = FunctionAddress[~String] : -# 1388| v1388_3(void) = Call[~String] : func:r1388_2, this:r1388_1 -# 1388| mu1388_4(unknown) = ^CallSideEffect : ~m? -# 1388| v1388_5(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? -# 1388| mu1388_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 -# 1388| r1388_7(bool) = Constant[0] : -# 1388| v1388_8(void) = ConditionalBranch : r1388_7 +# 35| Block 457 +# 35| r35_6385(glval) = VariableAddress[x456] : +# 35| mu35_6386(String) = Uninitialized[x456] : &:r35_6385 +# 35| r35_6387(glval) = FunctionAddress[String] : +# 35| v35_6388(void) = Call[String] : func:r35_6387, this:r35_6385 +# 35| mu35_6389(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6385 +# 35| r35_6391(glval) = VariableAddress[x456] : +# 35| r35_6392(glval) = FunctionAddress[~String] : +# 35| v35_6393(void) = Call[~String] : func:r35_6392, this:r35_6391 +# 35| mu35_6394(unknown) = ^CallSideEffect : ~m? +# 35| v35_6395(void) = ^IndirectReadSideEffect[-1] : &:r35_6391, ~m? +# 35| mu35_6396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6391 +# 35| r35_6397(bool) = Constant[0] : +# 35| v35_6398(void) = ConditionalBranch : r35_6397 #-----| False -> Block 458 #-----| True (back edge) -> Block 457 -# 1390| Block 458 -# 1390| r1390_1(glval) = VariableAddress[x457] : -# 1390| mu1390_2(String) = Uninitialized[x457] : &:r1390_1 -# 1390| r1390_3(glval) = FunctionAddress[String] : -# 1390| v1390_4(void) = Call[String] : func:r1390_3, this:r1390_1 -# 1390| mu1390_5(unknown) = ^CallSideEffect : ~m? -# 1390| mu1390_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1390_1 -# 1391| r1391_1(glval) = VariableAddress[x457] : -# 1391| r1391_2(glval) = FunctionAddress[~String] : -# 1391| v1391_3(void) = Call[~String] : func:r1391_2, this:r1391_1 -# 1391| mu1391_4(unknown) = ^CallSideEffect : ~m? -# 1391| v1391_5(void) = ^IndirectReadSideEffect[-1] : &:r1391_1, ~m? -# 1391| mu1391_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1391_1 -# 1391| r1391_7(bool) = Constant[0] : -# 1391| v1391_8(void) = ConditionalBranch : r1391_7 +# 35| Block 458 +# 35| r35_6399(glval) = VariableAddress[x457] : +# 35| mu35_6400(String) = Uninitialized[x457] : &:r35_6399 +# 35| r35_6401(glval) = FunctionAddress[String] : +# 35| v35_6402(void) = Call[String] : func:r35_6401, this:r35_6399 +# 35| mu35_6403(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6399 +# 35| r35_6405(glval) = VariableAddress[x457] : +# 35| r35_6406(glval) = FunctionAddress[~String] : +# 35| v35_6407(void) = Call[~String] : func:r35_6406, this:r35_6405 +# 35| mu35_6408(unknown) = ^CallSideEffect : ~m? +# 35| v35_6409(void) = ^IndirectReadSideEffect[-1] : &:r35_6405, ~m? +# 35| mu35_6410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6405 +# 35| r35_6411(bool) = Constant[0] : +# 35| v35_6412(void) = ConditionalBranch : r35_6411 #-----| False -> Block 459 #-----| True (back edge) -> Block 458 -# 1393| Block 459 -# 1393| r1393_1(glval) = VariableAddress[x458] : -# 1393| mu1393_2(String) = Uninitialized[x458] : &:r1393_1 -# 1393| r1393_3(glval) = FunctionAddress[String] : -# 1393| v1393_4(void) = Call[String] : func:r1393_3, this:r1393_1 -# 1393| mu1393_5(unknown) = ^CallSideEffect : ~m? -# 1393| mu1393_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1393_1 -# 1394| r1394_1(glval) = VariableAddress[x458] : -# 1394| r1394_2(glval) = FunctionAddress[~String] : -# 1394| v1394_3(void) = Call[~String] : func:r1394_2, this:r1394_1 -# 1394| mu1394_4(unknown) = ^CallSideEffect : ~m? -# 1394| v1394_5(void) = ^IndirectReadSideEffect[-1] : &:r1394_1, ~m? -# 1394| mu1394_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1394| r1394_7(bool) = Constant[0] : -# 1394| v1394_8(void) = ConditionalBranch : r1394_7 +# 35| Block 459 +# 35| r35_6413(glval) = VariableAddress[x458] : +# 35| mu35_6414(String) = Uninitialized[x458] : &:r35_6413 +# 35| r35_6415(glval) = FunctionAddress[String] : +# 35| v35_6416(void) = Call[String] : func:r35_6415, this:r35_6413 +# 35| mu35_6417(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6413 +# 35| r35_6419(glval) = VariableAddress[x458] : +# 35| r35_6420(glval) = FunctionAddress[~String] : +# 35| v35_6421(void) = Call[~String] : func:r35_6420, this:r35_6419 +# 35| mu35_6422(unknown) = ^CallSideEffect : ~m? +# 35| v35_6423(void) = ^IndirectReadSideEffect[-1] : &:r35_6419, ~m? +# 35| mu35_6424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6419 +# 35| r35_6425(bool) = Constant[0] : +# 35| v35_6426(void) = ConditionalBranch : r35_6425 #-----| False -> Block 460 #-----| True (back edge) -> Block 459 -# 1396| Block 460 -# 1396| r1396_1(glval) = VariableAddress[x459] : -# 1396| mu1396_2(String) = Uninitialized[x459] : &:r1396_1 -# 1396| r1396_3(glval) = FunctionAddress[String] : -# 1396| v1396_4(void) = Call[String] : func:r1396_3, this:r1396_1 -# 1396| mu1396_5(unknown) = ^CallSideEffect : ~m? -# 1396| mu1396_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 -# 1397| r1397_1(glval) = VariableAddress[x459] : -# 1397| r1397_2(glval) = FunctionAddress[~String] : -# 1397| v1397_3(void) = Call[~String] : func:r1397_2, this:r1397_1 -# 1397| mu1397_4(unknown) = ^CallSideEffect : ~m? -# 1397| v1397_5(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, ~m? -# 1397| mu1397_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| r1397_7(bool) = Constant[0] : -# 1397| v1397_8(void) = ConditionalBranch : r1397_7 +# 35| Block 460 +# 35| r35_6427(glval) = VariableAddress[x459] : +# 35| mu35_6428(String) = Uninitialized[x459] : &:r35_6427 +# 35| r35_6429(glval) = FunctionAddress[String] : +# 35| v35_6430(void) = Call[String] : func:r35_6429, this:r35_6427 +# 35| mu35_6431(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6427 +# 35| r35_6433(glval) = VariableAddress[x459] : +# 35| r35_6434(glval) = FunctionAddress[~String] : +# 35| v35_6435(void) = Call[~String] : func:r35_6434, this:r35_6433 +# 35| mu35_6436(unknown) = ^CallSideEffect : ~m? +# 35| v35_6437(void) = ^IndirectReadSideEffect[-1] : &:r35_6433, ~m? +# 35| mu35_6438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6433 +# 35| r35_6439(bool) = Constant[0] : +# 35| v35_6440(void) = ConditionalBranch : r35_6439 #-----| False -> Block 461 #-----| True (back edge) -> Block 460 -# 1399| Block 461 -# 1399| r1399_1(glval) = VariableAddress[x460] : -# 1399| mu1399_2(String) = Uninitialized[x460] : &:r1399_1 -# 1399| r1399_3(glval) = FunctionAddress[String] : -# 1399| v1399_4(void) = Call[String] : func:r1399_3, this:r1399_1 -# 1399| mu1399_5(unknown) = ^CallSideEffect : ~m? -# 1399| mu1399_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1400| r1400_1(glval) = VariableAddress[x460] : -# 1400| r1400_2(glval) = FunctionAddress[~String] : -# 1400| v1400_3(void) = Call[~String] : func:r1400_2, this:r1400_1 -# 1400| mu1400_4(unknown) = ^CallSideEffect : ~m? -# 1400| v1400_5(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, ~m? -# 1400| mu1400_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 -# 1400| r1400_7(bool) = Constant[0] : -# 1400| v1400_8(void) = ConditionalBranch : r1400_7 +# 35| Block 461 +# 35| r35_6441(glval) = VariableAddress[x460] : +# 35| mu35_6442(String) = Uninitialized[x460] : &:r35_6441 +# 35| r35_6443(glval) = FunctionAddress[String] : +# 35| v35_6444(void) = Call[String] : func:r35_6443, this:r35_6441 +# 35| mu35_6445(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6441 +# 35| r35_6447(glval) = VariableAddress[x460] : +# 35| r35_6448(glval) = FunctionAddress[~String] : +# 35| v35_6449(void) = Call[~String] : func:r35_6448, this:r35_6447 +# 35| mu35_6450(unknown) = ^CallSideEffect : ~m? +# 35| v35_6451(void) = ^IndirectReadSideEffect[-1] : &:r35_6447, ~m? +# 35| mu35_6452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6447 +# 35| r35_6453(bool) = Constant[0] : +# 35| v35_6454(void) = ConditionalBranch : r35_6453 #-----| False -> Block 462 #-----| True (back edge) -> Block 461 -# 1402| Block 462 -# 1402| r1402_1(glval) = VariableAddress[x461] : -# 1402| mu1402_2(String) = Uninitialized[x461] : &:r1402_1 -# 1402| r1402_3(glval) = FunctionAddress[String] : -# 1402| v1402_4(void) = Call[String] : func:r1402_3, this:r1402_1 -# 1402| mu1402_5(unknown) = ^CallSideEffect : ~m? -# 1402| mu1402_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1402_1 -# 1403| r1403_1(glval) = VariableAddress[x461] : -# 1403| r1403_2(glval) = FunctionAddress[~String] : -# 1403| v1403_3(void) = Call[~String] : func:r1403_2, this:r1403_1 -# 1403| mu1403_4(unknown) = ^CallSideEffect : ~m? -# 1403| v1403_5(void) = ^IndirectReadSideEffect[-1] : &:r1403_1, ~m? -# 1403| mu1403_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1403_1 -# 1403| r1403_7(bool) = Constant[0] : -# 1403| v1403_8(void) = ConditionalBranch : r1403_7 +# 35| Block 462 +# 35| r35_6455(glval) = VariableAddress[x461] : +# 35| mu35_6456(String) = Uninitialized[x461] : &:r35_6455 +# 35| r35_6457(glval) = FunctionAddress[String] : +# 35| v35_6458(void) = Call[String] : func:r35_6457, this:r35_6455 +# 35| mu35_6459(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6455 +# 35| r35_6461(glval) = VariableAddress[x461] : +# 35| r35_6462(glval) = FunctionAddress[~String] : +# 35| v35_6463(void) = Call[~String] : func:r35_6462, this:r35_6461 +# 35| mu35_6464(unknown) = ^CallSideEffect : ~m? +# 35| v35_6465(void) = ^IndirectReadSideEffect[-1] : &:r35_6461, ~m? +# 35| mu35_6466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6461 +# 35| r35_6467(bool) = Constant[0] : +# 35| v35_6468(void) = ConditionalBranch : r35_6467 #-----| False -> Block 463 #-----| True (back edge) -> Block 462 -# 1405| Block 463 -# 1405| r1405_1(glval) = VariableAddress[x462] : -# 1405| mu1405_2(String) = Uninitialized[x462] : &:r1405_1 -# 1405| r1405_3(glval) = FunctionAddress[String] : -# 1405| v1405_4(void) = Call[String] : func:r1405_3, this:r1405_1 -# 1405| mu1405_5(unknown) = ^CallSideEffect : ~m? -# 1405| mu1405_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1405_1 -# 1406| r1406_1(glval) = VariableAddress[x462] : -# 1406| r1406_2(glval) = FunctionAddress[~String] : -# 1406| v1406_3(void) = Call[~String] : func:r1406_2, this:r1406_1 -# 1406| mu1406_4(unknown) = ^CallSideEffect : ~m? -# 1406| v1406_5(void) = ^IndirectReadSideEffect[-1] : &:r1406_1, ~m? -# 1406| mu1406_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1406_1 -# 1406| r1406_7(bool) = Constant[0] : -# 1406| v1406_8(void) = ConditionalBranch : r1406_7 +# 35| Block 463 +# 35| r35_6469(glval) = VariableAddress[x462] : +# 35| mu35_6470(String) = Uninitialized[x462] : &:r35_6469 +# 35| r35_6471(glval) = FunctionAddress[String] : +# 35| v35_6472(void) = Call[String] : func:r35_6471, this:r35_6469 +# 35| mu35_6473(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6469 +# 35| r35_6475(glval) = VariableAddress[x462] : +# 35| r35_6476(glval) = FunctionAddress[~String] : +# 35| v35_6477(void) = Call[~String] : func:r35_6476, this:r35_6475 +# 35| mu35_6478(unknown) = ^CallSideEffect : ~m? +# 35| v35_6479(void) = ^IndirectReadSideEffect[-1] : &:r35_6475, ~m? +# 35| mu35_6480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6475 +# 35| r35_6481(bool) = Constant[0] : +# 35| v35_6482(void) = ConditionalBranch : r35_6481 #-----| False -> Block 464 #-----| True (back edge) -> Block 463 -# 1408| Block 464 -# 1408| r1408_1(glval) = VariableAddress[x463] : -# 1408| mu1408_2(String) = Uninitialized[x463] : &:r1408_1 -# 1408| r1408_3(glval) = FunctionAddress[String] : -# 1408| v1408_4(void) = Call[String] : func:r1408_3, this:r1408_1 -# 1408| mu1408_5(unknown) = ^CallSideEffect : ~m? -# 1408| mu1408_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1408_1 -# 1409| r1409_1(glval) = VariableAddress[x463] : -# 1409| r1409_2(glval) = FunctionAddress[~String] : -# 1409| v1409_3(void) = Call[~String] : func:r1409_2, this:r1409_1 -# 1409| mu1409_4(unknown) = ^CallSideEffect : ~m? -# 1409| v1409_5(void) = ^IndirectReadSideEffect[-1] : &:r1409_1, ~m? -# 1409| mu1409_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1409_1 -# 1409| r1409_7(bool) = Constant[0] : -# 1409| v1409_8(void) = ConditionalBranch : r1409_7 +# 35| Block 464 +# 35| r35_6483(glval) = VariableAddress[x463] : +# 35| mu35_6484(String) = Uninitialized[x463] : &:r35_6483 +# 35| r35_6485(glval) = FunctionAddress[String] : +# 35| v35_6486(void) = Call[String] : func:r35_6485, this:r35_6483 +# 35| mu35_6487(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6483 +# 35| r35_6489(glval) = VariableAddress[x463] : +# 35| r35_6490(glval) = FunctionAddress[~String] : +# 35| v35_6491(void) = Call[~String] : func:r35_6490, this:r35_6489 +# 35| mu35_6492(unknown) = ^CallSideEffect : ~m? +# 35| v35_6493(void) = ^IndirectReadSideEffect[-1] : &:r35_6489, ~m? +# 35| mu35_6494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6489 +# 35| r35_6495(bool) = Constant[0] : +# 35| v35_6496(void) = ConditionalBranch : r35_6495 #-----| False -> Block 465 #-----| True (back edge) -> Block 464 -# 1411| Block 465 -# 1411| r1411_1(glval) = VariableAddress[x464] : -# 1411| mu1411_2(String) = Uninitialized[x464] : &:r1411_1 -# 1411| r1411_3(glval) = FunctionAddress[String] : -# 1411| v1411_4(void) = Call[String] : func:r1411_3, this:r1411_1 -# 1411| mu1411_5(unknown) = ^CallSideEffect : ~m? -# 1411| mu1411_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1411_1 -# 1412| r1412_1(glval) = VariableAddress[x464] : -# 1412| r1412_2(glval) = FunctionAddress[~String] : -# 1412| v1412_3(void) = Call[~String] : func:r1412_2, this:r1412_1 -# 1412| mu1412_4(unknown) = ^CallSideEffect : ~m? -# 1412| v1412_5(void) = ^IndirectReadSideEffect[-1] : &:r1412_1, ~m? -# 1412| mu1412_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1412_1 -# 1412| r1412_7(bool) = Constant[0] : -# 1412| v1412_8(void) = ConditionalBranch : r1412_7 +# 35| Block 465 +# 35| r35_6497(glval) = VariableAddress[x464] : +# 35| mu35_6498(String) = Uninitialized[x464] : &:r35_6497 +# 35| r35_6499(glval) = FunctionAddress[String] : +# 35| v35_6500(void) = Call[String] : func:r35_6499, this:r35_6497 +# 35| mu35_6501(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6497 +# 35| r35_6503(glval) = VariableAddress[x464] : +# 35| r35_6504(glval) = FunctionAddress[~String] : +# 35| v35_6505(void) = Call[~String] : func:r35_6504, this:r35_6503 +# 35| mu35_6506(unknown) = ^CallSideEffect : ~m? +# 35| v35_6507(void) = ^IndirectReadSideEffect[-1] : &:r35_6503, ~m? +# 35| mu35_6508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6503 +# 35| r35_6509(bool) = Constant[0] : +# 35| v35_6510(void) = ConditionalBranch : r35_6509 #-----| False -> Block 466 #-----| True (back edge) -> Block 465 -# 1414| Block 466 -# 1414| r1414_1(glval) = VariableAddress[x465] : -# 1414| mu1414_2(String) = Uninitialized[x465] : &:r1414_1 -# 1414| r1414_3(glval) = FunctionAddress[String] : -# 1414| v1414_4(void) = Call[String] : func:r1414_3, this:r1414_1 -# 1414| mu1414_5(unknown) = ^CallSideEffect : ~m? -# 1414| mu1414_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1414_1 -# 1415| r1415_1(glval) = VariableAddress[x465] : -# 1415| r1415_2(glval) = FunctionAddress[~String] : -# 1415| v1415_3(void) = Call[~String] : func:r1415_2, this:r1415_1 -# 1415| mu1415_4(unknown) = ^CallSideEffect : ~m? -# 1415| v1415_5(void) = ^IndirectReadSideEffect[-1] : &:r1415_1, ~m? -# 1415| mu1415_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1415_1 -# 1415| r1415_7(bool) = Constant[0] : -# 1415| v1415_8(void) = ConditionalBranch : r1415_7 +# 35| Block 466 +# 35| r35_6511(glval) = VariableAddress[x465] : +# 35| mu35_6512(String) = Uninitialized[x465] : &:r35_6511 +# 35| r35_6513(glval) = FunctionAddress[String] : +# 35| v35_6514(void) = Call[String] : func:r35_6513, this:r35_6511 +# 35| mu35_6515(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6511 +# 35| r35_6517(glval) = VariableAddress[x465] : +# 35| r35_6518(glval) = FunctionAddress[~String] : +# 35| v35_6519(void) = Call[~String] : func:r35_6518, this:r35_6517 +# 35| mu35_6520(unknown) = ^CallSideEffect : ~m? +# 35| v35_6521(void) = ^IndirectReadSideEffect[-1] : &:r35_6517, ~m? +# 35| mu35_6522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6517 +# 35| r35_6523(bool) = Constant[0] : +# 35| v35_6524(void) = ConditionalBranch : r35_6523 #-----| False -> Block 467 #-----| True (back edge) -> Block 466 -# 1417| Block 467 -# 1417| r1417_1(glval) = VariableAddress[x466] : -# 1417| mu1417_2(String) = Uninitialized[x466] : &:r1417_1 -# 1417| r1417_3(glval) = FunctionAddress[String] : -# 1417| v1417_4(void) = Call[String] : func:r1417_3, this:r1417_1 -# 1417| mu1417_5(unknown) = ^CallSideEffect : ~m? -# 1417| mu1417_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1417_1 -# 1418| r1418_1(glval) = VariableAddress[x466] : -# 1418| r1418_2(glval) = FunctionAddress[~String] : -# 1418| v1418_3(void) = Call[~String] : func:r1418_2, this:r1418_1 -# 1418| mu1418_4(unknown) = ^CallSideEffect : ~m? -# 1418| v1418_5(void) = ^IndirectReadSideEffect[-1] : &:r1418_1, ~m? -# 1418| mu1418_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1418_1 -# 1418| r1418_7(bool) = Constant[0] : -# 1418| v1418_8(void) = ConditionalBranch : r1418_7 +# 35| Block 467 +# 35| r35_6525(glval) = VariableAddress[x466] : +# 35| mu35_6526(String) = Uninitialized[x466] : &:r35_6525 +# 35| r35_6527(glval) = FunctionAddress[String] : +# 35| v35_6528(void) = Call[String] : func:r35_6527, this:r35_6525 +# 35| mu35_6529(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6525 +# 35| r35_6531(glval) = VariableAddress[x466] : +# 35| r35_6532(glval) = FunctionAddress[~String] : +# 35| v35_6533(void) = Call[~String] : func:r35_6532, this:r35_6531 +# 35| mu35_6534(unknown) = ^CallSideEffect : ~m? +# 35| v35_6535(void) = ^IndirectReadSideEffect[-1] : &:r35_6531, ~m? +# 35| mu35_6536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6531 +# 35| r35_6537(bool) = Constant[0] : +# 35| v35_6538(void) = ConditionalBranch : r35_6537 #-----| False -> Block 468 #-----| True (back edge) -> Block 467 -# 1420| Block 468 -# 1420| r1420_1(glval) = VariableAddress[x467] : -# 1420| mu1420_2(String) = Uninitialized[x467] : &:r1420_1 -# 1420| r1420_3(glval) = FunctionAddress[String] : -# 1420| v1420_4(void) = Call[String] : func:r1420_3, this:r1420_1 -# 1420| mu1420_5(unknown) = ^CallSideEffect : ~m? -# 1420| mu1420_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1420_1 -# 1421| r1421_1(glval) = VariableAddress[x467] : -# 1421| r1421_2(glval) = FunctionAddress[~String] : -# 1421| v1421_3(void) = Call[~String] : func:r1421_2, this:r1421_1 -# 1421| mu1421_4(unknown) = ^CallSideEffect : ~m? -# 1421| v1421_5(void) = ^IndirectReadSideEffect[-1] : &:r1421_1, ~m? -# 1421| mu1421_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_1 -# 1421| r1421_7(bool) = Constant[0] : -# 1421| v1421_8(void) = ConditionalBranch : r1421_7 +# 35| Block 468 +# 35| r35_6539(glval) = VariableAddress[x467] : +# 35| mu35_6540(String) = Uninitialized[x467] : &:r35_6539 +# 35| r35_6541(glval) = FunctionAddress[String] : +# 35| v35_6542(void) = Call[String] : func:r35_6541, this:r35_6539 +# 35| mu35_6543(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6539 +# 35| r35_6545(glval) = VariableAddress[x467] : +# 35| r35_6546(glval) = FunctionAddress[~String] : +# 35| v35_6547(void) = Call[~String] : func:r35_6546, this:r35_6545 +# 35| mu35_6548(unknown) = ^CallSideEffect : ~m? +# 35| v35_6549(void) = ^IndirectReadSideEffect[-1] : &:r35_6545, ~m? +# 35| mu35_6550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6545 +# 35| r35_6551(bool) = Constant[0] : +# 35| v35_6552(void) = ConditionalBranch : r35_6551 #-----| False -> Block 469 #-----| True (back edge) -> Block 468 -# 1423| Block 469 -# 1423| r1423_1(glval) = VariableAddress[x468] : -# 1423| mu1423_2(String) = Uninitialized[x468] : &:r1423_1 -# 1423| r1423_3(glval) = FunctionAddress[String] : -# 1423| v1423_4(void) = Call[String] : func:r1423_3, this:r1423_1 -# 1423| mu1423_5(unknown) = ^CallSideEffect : ~m? -# 1423| mu1423_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1423_1 -# 1424| r1424_1(glval) = VariableAddress[x468] : -# 1424| r1424_2(glval) = FunctionAddress[~String] : -# 1424| v1424_3(void) = Call[~String] : func:r1424_2, this:r1424_1 -# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? -# 1424| v1424_5(void) = ^IndirectReadSideEffect[-1] : &:r1424_1, ~m? -# 1424| mu1424_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1424_1 -# 1424| r1424_7(bool) = Constant[0] : -# 1424| v1424_8(void) = ConditionalBranch : r1424_7 +# 35| Block 469 +# 35| r35_6553(glval) = VariableAddress[x468] : +# 35| mu35_6554(String) = Uninitialized[x468] : &:r35_6553 +# 35| r35_6555(glval) = FunctionAddress[String] : +# 35| v35_6556(void) = Call[String] : func:r35_6555, this:r35_6553 +# 35| mu35_6557(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6553 +# 35| r35_6559(glval) = VariableAddress[x468] : +# 35| r35_6560(glval) = FunctionAddress[~String] : +# 35| v35_6561(void) = Call[~String] : func:r35_6560, this:r35_6559 +# 35| mu35_6562(unknown) = ^CallSideEffect : ~m? +# 35| v35_6563(void) = ^IndirectReadSideEffect[-1] : &:r35_6559, ~m? +# 35| mu35_6564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6559 +# 35| r35_6565(bool) = Constant[0] : +# 35| v35_6566(void) = ConditionalBranch : r35_6565 #-----| False -> Block 470 #-----| True (back edge) -> Block 469 -# 1426| Block 470 -# 1426| r1426_1(glval) = VariableAddress[x469] : -# 1426| mu1426_2(String) = Uninitialized[x469] : &:r1426_1 -# 1426| r1426_3(glval) = FunctionAddress[String] : -# 1426| v1426_4(void) = Call[String] : func:r1426_3, this:r1426_1 -# 1426| mu1426_5(unknown) = ^CallSideEffect : ~m? -# 1426| mu1426_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_1 -# 1427| r1427_1(glval) = VariableAddress[x469] : -# 1427| r1427_2(glval) = FunctionAddress[~String] : -# 1427| v1427_3(void) = Call[~String] : func:r1427_2, this:r1427_1 -# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? -# 1427| v1427_5(void) = ^IndirectReadSideEffect[-1] : &:r1427_1, ~m? -# 1427| mu1427_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1427_1 -# 1427| r1427_7(bool) = Constant[0] : -# 1427| v1427_8(void) = ConditionalBranch : r1427_7 +# 35| Block 470 +# 35| r35_6567(glval) = VariableAddress[x469] : +# 35| mu35_6568(String) = Uninitialized[x469] : &:r35_6567 +# 35| r35_6569(glval) = FunctionAddress[String] : +# 35| v35_6570(void) = Call[String] : func:r35_6569, this:r35_6567 +# 35| mu35_6571(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6567 +# 35| r35_6573(glval) = VariableAddress[x469] : +# 35| r35_6574(glval) = FunctionAddress[~String] : +# 35| v35_6575(void) = Call[~String] : func:r35_6574, this:r35_6573 +# 35| mu35_6576(unknown) = ^CallSideEffect : ~m? +# 35| v35_6577(void) = ^IndirectReadSideEffect[-1] : &:r35_6573, ~m? +# 35| mu35_6578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6573 +# 35| r35_6579(bool) = Constant[0] : +# 35| v35_6580(void) = ConditionalBranch : r35_6579 #-----| False -> Block 471 #-----| True (back edge) -> Block 470 -# 1429| Block 471 -# 1429| r1429_1(glval) = VariableAddress[x470] : -# 1429| mu1429_2(String) = Uninitialized[x470] : &:r1429_1 -# 1429| r1429_3(glval) = FunctionAddress[String] : -# 1429| v1429_4(void) = Call[String] : func:r1429_3, this:r1429_1 -# 1429| mu1429_5(unknown) = ^CallSideEffect : ~m? -# 1429| mu1429_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1429_1 -# 1430| r1430_1(glval) = VariableAddress[x470] : -# 1430| r1430_2(glval) = FunctionAddress[~String] : -# 1430| v1430_3(void) = Call[~String] : func:r1430_2, this:r1430_1 -# 1430| mu1430_4(unknown) = ^CallSideEffect : ~m? -# 1430| v1430_5(void) = ^IndirectReadSideEffect[-1] : &:r1430_1, ~m? -# 1430| mu1430_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1430_1 -# 1430| r1430_7(bool) = Constant[0] : -# 1430| v1430_8(void) = ConditionalBranch : r1430_7 +# 35| Block 471 +# 35| r35_6581(glval) = VariableAddress[x470] : +# 35| mu35_6582(String) = Uninitialized[x470] : &:r35_6581 +# 35| r35_6583(glval) = FunctionAddress[String] : +# 35| v35_6584(void) = Call[String] : func:r35_6583, this:r35_6581 +# 35| mu35_6585(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6581 +# 35| r35_6587(glval) = VariableAddress[x470] : +# 35| r35_6588(glval) = FunctionAddress[~String] : +# 35| v35_6589(void) = Call[~String] : func:r35_6588, this:r35_6587 +# 35| mu35_6590(unknown) = ^CallSideEffect : ~m? +# 35| v35_6591(void) = ^IndirectReadSideEffect[-1] : &:r35_6587, ~m? +# 35| mu35_6592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6587 +# 35| r35_6593(bool) = Constant[0] : +# 35| v35_6594(void) = ConditionalBranch : r35_6593 #-----| False -> Block 472 #-----| True (back edge) -> Block 471 -# 1432| Block 472 -# 1432| r1432_1(glval) = VariableAddress[x471] : -# 1432| mu1432_2(String) = Uninitialized[x471] : &:r1432_1 -# 1432| r1432_3(glval) = FunctionAddress[String] : -# 1432| v1432_4(void) = Call[String] : func:r1432_3, this:r1432_1 -# 1432| mu1432_5(unknown) = ^CallSideEffect : ~m? -# 1432| mu1432_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1432_1 -# 1433| r1433_1(glval) = VariableAddress[x471] : -# 1433| r1433_2(glval) = FunctionAddress[~String] : -# 1433| v1433_3(void) = Call[~String] : func:r1433_2, this:r1433_1 -# 1433| mu1433_4(unknown) = ^CallSideEffect : ~m? -# 1433| v1433_5(void) = ^IndirectReadSideEffect[-1] : &:r1433_1, ~m? -# 1433| mu1433_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1433_1 -# 1433| r1433_7(bool) = Constant[0] : -# 1433| v1433_8(void) = ConditionalBranch : r1433_7 +# 35| Block 472 +# 35| r35_6595(glval) = VariableAddress[x471] : +# 35| mu35_6596(String) = Uninitialized[x471] : &:r35_6595 +# 35| r35_6597(glval) = FunctionAddress[String] : +# 35| v35_6598(void) = Call[String] : func:r35_6597, this:r35_6595 +# 35| mu35_6599(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6595 +# 35| r35_6601(glval) = VariableAddress[x471] : +# 35| r35_6602(glval) = FunctionAddress[~String] : +# 35| v35_6603(void) = Call[~String] : func:r35_6602, this:r35_6601 +# 35| mu35_6604(unknown) = ^CallSideEffect : ~m? +# 35| v35_6605(void) = ^IndirectReadSideEffect[-1] : &:r35_6601, ~m? +# 35| mu35_6606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6601 +# 35| r35_6607(bool) = Constant[0] : +# 35| v35_6608(void) = ConditionalBranch : r35_6607 #-----| False -> Block 473 #-----| True (back edge) -> Block 472 -# 1435| Block 473 -# 1435| r1435_1(glval) = VariableAddress[x472] : -# 1435| mu1435_2(String) = Uninitialized[x472] : &:r1435_1 -# 1435| r1435_3(glval) = FunctionAddress[String] : -# 1435| v1435_4(void) = Call[String] : func:r1435_3, this:r1435_1 -# 1435| mu1435_5(unknown) = ^CallSideEffect : ~m? -# 1435| mu1435_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1435_1 -# 1436| r1436_1(glval) = VariableAddress[x472] : -# 1436| r1436_2(glval) = FunctionAddress[~String] : -# 1436| v1436_3(void) = Call[~String] : func:r1436_2, this:r1436_1 -# 1436| mu1436_4(unknown) = ^CallSideEffect : ~m? -# 1436| v1436_5(void) = ^IndirectReadSideEffect[-1] : &:r1436_1, ~m? -# 1436| mu1436_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1436_1 -# 1436| r1436_7(bool) = Constant[0] : -# 1436| v1436_8(void) = ConditionalBranch : r1436_7 +# 35| Block 473 +# 35| r35_6609(glval) = VariableAddress[x472] : +# 35| mu35_6610(String) = Uninitialized[x472] : &:r35_6609 +# 35| r35_6611(glval) = FunctionAddress[String] : +# 35| v35_6612(void) = Call[String] : func:r35_6611, this:r35_6609 +# 35| mu35_6613(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6609 +# 35| r35_6615(glval) = VariableAddress[x472] : +# 35| r35_6616(glval) = FunctionAddress[~String] : +# 35| v35_6617(void) = Call[~String] : func:r35_6616, this:r35_6615 +# 35| mu35_6618(unknown) = ^CallSideEffect : ~m? +# 35| v35_6619(void) = ^IndirectReadSideEffect[-1] : &:r35_6615, ~m? +# 35| mu35_6620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6615 +# 35| r35_6621(bool) = Constant[0] : +# 35| v35_6622(void) = ConditionalBranch : r35_6621 #-----| False -> Block 474 #-----| True (back edge) -> Block 473 -# 1438| Block 474 -# 1438| r1438_1(glval) = VariableAddress[x473] : -# 1438| mu1438_2(String) = Uninitialized[x473] : &:r1438_1 -# 1438| r1438_3(glval) = FunctionAddress[String] : -# 1438| v1438_4(void) = Call[String] : func:r1438_3, this:r1438_1 -# 1438| mu1438_5(unknown) = ^CallSideEffect : ~m? -# 1438| mu1438_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1438_1 -# 1439| r1439_1(glval) = VariableAddress[x473] : -# 1439| r1439_2(glval) = FunctionAddress[~String] : -# 1439| v1439_3(void) = Call[~String] : func:r1439_2, this:r1439_1 -# 1439| mu1439_4(unknown) = ^CallSideEffect : ~m? -# 1439| v1439_5(void) = ^IndirectReadSideEffect[-1] : &:r1439_1, ~m? -# 1439| mu1439_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1439_1 -# 1439| r1439_7(bool) = Constant[0] : -# 1439| v1439_8(void) = ConditionalBranch : r1439_7 +# 35| Block 474 +# 35| r35_6623(glval) = VariableAddress[x473] : +# 35| mu35_6624(String) = Uninitialized[x473] : &:r35_6623 +# 35| r35_6625(glval) = FunctionAddress[String] : +# 35| v35_6626(void) = Call[String] : func:r35_6625, this:r35_6623 +# 35| mu35_6627(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6623 +# 35| r35_6629(glval) = VariableAddress[x473] : +# 35| r35_6630(glval) = FunctionAddress[~String] : +# 35| v35_6631(void) = Call[~String] : func:r35_6630, this:r35_6629 +# 35| mu35_6632(unknown) = ^CallSideEffect : ~m? +# 35| v35_6633(void) = ^IndirectReadSideEffect[-1] : &:r35_6629, ~m? +# 35| mu35_6634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6629 +# 35| r35_6635(bool) = Constant[0] : +# 35| v35_6636(void) = ConditionalBranch : r35_6635 #-----| False -> Block 475 #-----| True (back edge) -> Block 474 -# 1441| Block 475 -# 1441| r1441_1(glval) = VariableAddress[x474] : -# 1441| mu1441_2(String) = Uninitialized[x474] : &:r1441_1 -# 1441| r1441_3(glval) = FunctionAddress[String] : -# 1441| v1441_4(void) = Call[String] : func:r1441_3, this:r1441_1 -# 1441| mu1441_5(unknown) = ^CallSideEffect : ~m? -# 1441| mu1441_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1441_1 -# 1442| r1442_1(glval) = VariableAddress[x474] : -# 1442| r1442_2(glval) = FunctionAddress[~String] : -# 1442| v1442_3(void) = Call[~String] : func:r1442_2, this:r1442_1 -# 1442| mu1442_4(unknown) = ^CallSideEffect : ~m? -# 1442| v1442_5(void) = ^IndirectReadSideEffect[-1] : &:r1442_1, ~m? -# 1442| mu1442_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1442_1 -# 1442| r1442_7(bool) = Constant[0] : -# 1442| v1442_8(void) = ConditionalBranch : r1442_7 +# 35| Block 475 +# 35| r35_6637(glval) = VariableAddress[x474] : +# 35| mu35_6638(String) = Uninitialized[x474] : &:r35_6637 +# 35| r35_6639(glval) = FunctionAddress[String] : +# 35| v35_6640(void) = Call[String] : func:r35_6639, this:r35_6637 +# 35| mu35_6641(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6637 +# 35| r35_6643(glval) = VariableAddress[x474] : +# 35| r35_6644(glval) = FunctionAddress[~String] : +# 35| v35_6645(void) = Call[~String] : func:r35_6644, this:r35_6643 +# 35| mu35_6646(unknown) = ^CallSideEffect : ~m? +# 35| v35_6647(void) = ^IndirectReadSideEffect[-1] : &:r35_6643, ~m? +# 35| mu35_6648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6643 +# 35| r35_6649(bool) = Constant[0] : +# 35| v35_6650(void) = ConditionalBranch : r35_6649 #-----| False -> Block 476 #-----| True (back edge) -> Block 475 -# 1444| Block 476 -# 1444| r1444_1(glval) = VariableAddress[x475] : -# 1444| mu1444_2(String) = Uninitialized[x475] : &:r1444_1 -# 1444| r1444_3(glval) = FunctionAddress[String] : -# 1444| v1444_4(void) = Call[String] : func:r1444_3, this:r1444_1 -# 1444| mu1444_5(unknown) = ^CallSideEffect : ~m? -# 1444| mu1444_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1444_1 -# 1445| r1445_1(glval) = VariableAddress[x475] : -# 1445| r1445_2(glval) = FunctionAddress[~String] : -# 1445| v1445_3(void) = Call[~String] : func:r1445_2, this:r1445_1 -# 1445| mu1445_4(unknown) = ^CallSideEffect : ~m? -# 1445| v1445_5(void) = ^IndirectReadSideEffect[-1] : &:r1445_1, ~m? -# 1445| mu1445_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1445_1 -# 1445| r1445_7(bool) = Constant[0] : -# 1445| v1445_8(void) = ConditionalBranch : r1445_7 +# 35| Block 476 +# 35| r35_6651(glval) = VariableAddress[x475] : +# 35| mu35_6652(String) = Uninitialized[x475] : &:r35_6651 +# 35| r35_6653(glval) = FunctionAddress[String] : +# 35| v35_6654(void) = Call[String] : func:r35_6653, this:r35_6651 +# 35| mu35_6655(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6651 +# 35| r35_6657(glval) = VariableAddress[x475] : +# 35| r35_6658(glval) = FunctionAddress[~String] : +# 35| v35_6659(void) = Call[~String] : func:r35_6658, this:r35_6657 +# 35| mu35_6660(unknown) = ^CallSideEffect : ~m? +# 35| v35_6661(void) = ^IndirectReadSideEffect[-1] : &:r35_6657, ~m? +# 35| mu35_6662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6657 +# 35| r35_6663(bool) = Constant[0] : +# 35| v35_6664(void) = ConditionalBranch : r35_6663 #-----| False -> Block 477 #-----| True (back edge) -> Block 476 -# 1447| Block 477 -# 1447| r1447_1(glval) = VariableAddress[x476] : -# 1447| mu1447_2(String) = Uninitialized[x476] : &:r1447_1 -# 1447| r1447_3(glval) = FunctionAddress[String] : -# 1447| v1447_4(void) = Call[String] : func:r1447_3, this:r1447_1 -# 1447| mu1447_5(unknown) = ^CallSideEffect : ~m? -# 1447| mu1447_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1447_1 -# 1448| r1448_1(glval) = VariableAddress[x476] : -# 1448| r1448_2(glval) = FunctionAddress[~String] : -# 1448| v1448_3(void) = Call[~String] : func:r1448_2, this:r1448_1 -# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? -# 1448| v1448_5(void) = ^IndirectReadSideEffect[-1] : &:r1448_1, ~m? -# 1448| mu1448_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1448_1 -# 1448| r1448_7(bool) = Constant[0] : -# 1448| v1448_8(void) = ConditionalBranch : r1448_7 +# 35| Block 477 +# 35| r35_6665(glval) = VariableAddress[x476] : +# 35| mu35_6666(String) = Uninitialized[x476] : &:r35_6665 +# 35| r35_6667(glval) = FunctionAddress[String] : +# 35| v35_6668(void) = Call[String] : func:r35_6667, this:r35_6665 +# 35| mu35_6669(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6665 +# 35| r35_6671(glval) = VariableAddress[x476] : +# 35| r35_6672(glval) = FunctionAddress[~String] : +# 35| v35_6673(void) = Call[~String] : func:r35_6672, this:r35_6671 +# 35| mu35_6674(unknown) = ^CallSideEffect : ~m? +# 35| v35_6675(void) = ^IndirectReadSideEffect[-1] : &:r35_6671, ~m? +# 35| mu35_6676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6671 +# 35| r35_6677(bool) = Constant[0] : +# 35| v35_6678(void) = ConditionalBranch : r35_6677 #-----| False -> Block 478 #-----| True (back edge) -> Block 477 -# 1450| Block 478 -# 1450| r1450_1(glval) = VariableAddress[x477] : -# 1450| mu1450_2(String) = Uninitialized[x477] : &:r1450_1 -# 1450| r1450_3(glval) = FunctionAddress[String] : -# 1450| v1450_4(void) = Call[String] : func:r1450_3, this:r1450_1 -# 1450| mu1450_5(unknown) = ^CallSideEffect : ~m? -# 1450| mu1450_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1450_1 -# 1451| r1451_1(glval) = VariableAddress[x477] : -# 1451| r1451_2(glval) = FunctionAddress[~String] : -# 1451| v1451_3(void) = Call[~String] : func:r1451_2, this:r1451_1 -# 1451| mu1451_4(unknown) = ^CallSideEffect : ~m? -# 1451| v1451_5(void) = ^IndirectReadSideEffect[-1] : &:r1451_1, ~m? -# 1451| mu1451_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1451_1 -# 1451| r1451_7(bool) = Constant[0] : -# 1451| v1451_8(void) = ConditionalBranch : r1451_7 +# 35| Block 478 +# 35| r35_6679(glval) = VariableAddress[x477] : +# 35| mu35_6680(String) = Uninitialized[x477] : &:r35_6679 +# 35| r35_6681(glval) = FunctionAddress[String] : +# 35| v35_6682(void) = Call[String] : func:r35_6681, this:r35_6679 +# 35| mu35_6683(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6679 +# 35| r35_6685(glval) = VariableAddress[x477] : +# 35| r35_6686(glval) = FunctionAddress[~String] : +# 35| v35_6687(void) = Call[~String] : func:r35_6686, this:r35_6685 +# 35| mu35_6688(unknown) = ^CallSideEffect : ~m? +# 35| v35_6689(void) = ^IndirectReadSideEffect[-1] : &:r35_6685, ~m? +# 35| mu35_6690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6685 +# 35| r35_6691(bool) = Constant[0] : +# 35| v35_6692(void) = ConditionalBranch : r35_6691 #-----| False -> Block 479 #-----| True (back edge) -> Block 478 -# 1453| Block 479 -# 1453| r1453_1(glval) = VariableAddress[x478] : -# 1453| mu1453_2(String) = Uninitialized[x478] : &:r1453_1 -# 1453| r1453_3(glval) = FunctionAddress[String] : -# 1453| v1453_4(void) = Call[String] : func:r1453_3, this:r1453_1 -# 1453| mu1453_5(unknown) = ^CallSideEffect : ~m? -# 1453| mu1453_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1453_1 -# 1454| r1454_1(glval) = VariableAddress[x478] : -# 1454| r1454_2(glval) = FunctionAddress[~String] : -# 1454| v1454_3(void) = Call[~String] : func:r1454_2, this:r1454_1 -# 1454| mu1454_4(unknown) = ^CallSideEffect : ~m? -# 1454| v1454_5(void) = ^IndirectReadSideEffect[-1] : &:r1454_1, ~m? -# 1454| mu1454_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1454_1 -# 1454| r1454_7(bool) = Constant[0] : -# 1454| v1454_8(void) = ConditionalBranch : r1454_7 +# 35| Block 479 +# 35| r35_6693(glval) = VariableAddress[x478] : +# 35| mu35_6694(String) = Uninitialized[x478] : &:r35_6693 +# 35| r35_6695(glval) = FunctionAddress[String] : +# 35| v35_6696(void) = Call[String] : func:r35_6695, this:r35_6693 +# 35| mu35_6697(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6693 +# 35| r35_6699(glval) = VariableAddress[x478] : +# 35| r35_6700(glval) = FunctionAddress[~String] : +# 35| v35_6701(void) = Call[~String] : func:r35_6700, this:r35_6699 +# 35| mu35_6702(unknown) = ^CallSideEffect : ~m? +# 35| v35_6703(void) = ^IndirectReadSideEffect[-1] : &:r35_6699, ~m? +# 35| mu35_6704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6699 +# 35| r35_6705(bool) = Constant[0] : +# 35| v35_6706(void) = ConditionalBranch : r35_6705 #-----| False -> Block 480 #-----| True (back edge) -> Block 479 -# 1456| Block 480 -# 1456| r1456_1(glval) = VariableAddress[x479] : -# 1456| mu1456_2(String) = Uninitialized[x479] : &:r1456_1 -# 1456| r1456_3(glval) = FunctionAddress[String] : -# 1456| v1456_4(void) = Call[String] : func:r1456_3, this:r1456_1 -# 1456| mu1456_5(unknown) = ^CallSideEffect : ~m? -# 1456| mu1456_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1456_1 -# 1457| r1457_1(glval) = VariableAddress[x479] : -# 1457| r1457_2(glval) = FunctionAddress[~String] : -# 1457| v1457_3(void) = Call[~String] : func:r1457_2, this:r1457_1 -# 1457| mu1457_4(unknown) = ^CallSideEffect : ~m? -# 1457| v1457_5(void) = ^IndirectReadSideEffect[-1] : &:r1457_1, ~m? -# 1457| mu1457_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1457_1 -# 1457| r1457_7(bool) = Constant[0] : -# 1457| v1457_8(void) = ConditionalBranch : r1457_7 +# 35| Block 480 +# 35| r35_6707(glval) = VariableAddress[x479] : +# 35| mu35_6708(String) = Uninitialized[x479] : &:r35_6707 +# 35| r35_6709(glval) = FunctionAddress[String] : +# 35| v35_6710(void) = Call[String] : func:r35_6709, this:r35_6707 +# 35| mu35_6711(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6707 +# 35| r35_6713(glval) = VariableAddress[x479] : +# 35| r35_6714(glval) = FunctionAddress[~String] : +# 35| v35_6715(void) = Call[~String] : func:r35_6714, this:r35_6713 +# 35| mu35_6716(unknown) = ^CallSideEffect : ~m? +# 35| v35_6717(void) = ^IndirectReadSideEffect[-1] : &:r35_6713, ~m? +# 35| mu35_6718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6713 +# 35| r35_6719(bool) = Constant[0] : +# 35| v35_6720(void) = ConditionalBranch : r35_6719 #-----| False -> Block 481 #-----| True (back edge) -> Block 480 -# 1459| Block 481 -# 1459| r1459_1(glval) = VariableAddress[x480] : -# 1459| mu1459_2(String) = Uninitialized[x480] : &:r1459_1 -# 1459| r1459_3(glval) = FunctionAddress[String] : -# 1459| v1459_4(void) = Call[String] : func:r1459_3, this:r1459_1 -# 1459| mu1459_5(unknown) = ^CallSideEffect : ~m? -# 1459| mu1459_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1459_1 -# 1460| r1460_1(glval) = VariableAddress[x480] : -# 1460| r1460_2(glval) = FunctionAddress[~String] : -# 1460| v1460_3(void) = Call[~String] : func:r1460_2, this:r1460_1 -# 1460| mu1460_4(unknown) = ^CallSideEffect : ~m? -# 1460| v1460_5(void) = ^IndirectReadSideEffect[-1] : &:r1460_1, ~m? -# 1460| mu1460_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1460_1 -# 1460| r1460_7(bool) = Constant[0] : -# 1460| v1460_8(void) = ConditionalBranch : r1460_7 +# 35| Block 481 +# 35| r35_6721(glval) = VariableAddress[x480] : +# 35| mu35_6722(String) = Uninitialized[x480] : &:r35_6721 +# 35| r35_6723(glval) = FunctionAddress[String] : +# 35| v35_6724(void) = Call[String] : func:r35_6723, this:r35_6721 +# 35| mu35_6725(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6721 +# 35| r35_6727(glval) = VariableAddress[x480] : +# 35| r35_6728(glval) = FunctionAddress[~String] : +# 35| v35_6729(void) = Call[~String] : func:r35_6728, this:r35_6727 +# 35| mu35_6730(unknown) = ^CallSideEffect : ~m? +# 35| v35_6731(void) = ^IndirectReadSideEffect[-1] : &:r35_6727, ~m? +# 35| mu35_6732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6727 +# 35| r35_6733(bool) = Constant[0] : +# 35| v35_6734(void) = ConditionalBranch : r35_6733 #-----| False -> Block 482 #-----| True (back edge) -> Block 481 -# 1462| Block 482 -# 1462| r1462_1(glval) = VariableAddress[x481] : -# 1462| mu1462_2(String) = Uninitialized[x481] : &:r1462_1 -# 1462| r1462_3(glval) = FunctionAddress[String] : -# 1462| v1462_4(void) = Call[String] : func:r1462_3, this:r1462_1 -# 1462| mu1462_5(unknown) = ^CallSideEffect : ~m? -# 1462| mu1462_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1462_1 -# 1463| r1463_1(glval) = VariableAddress[x481] : -# 1463| r1463_2(glval) = FunctionAddress[~String] : -# 1463| v1463_3(void) = Call[~String] : func:r1463_2, this:r1463_1 -# 1463| mu1463_4(unknown) = ^CallSideEffect : ~m? -# 1463| v1463_5(void) = ^IndirectReadSideEffect[-1] : &:r1463_1, ~m? -# 1463| mu1463_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1463_1 -# 1463| r1463_7(bool) = Constant[0] : -# 1463| v1463_8(void) = ConditionalBranch : r1463_7 +# 35| Block 482 +# 35| r35_6735(glval) = VariableAddress[x481] : +# 35| mu35_6736(String) = Uninitialized[x481] : &:r35_6735 +# 35| r35_6737(glval) = FunctionAddress[String] : +# 35| v35_6738(void) = Call[String] : func:r35_6737, this:r35_6735 +# 35| mu35_6739(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6735 +# 35| r35_6741(glval) = VariableAddress[x481] : +# 35| r35_6742(glval) = FunctionAddress[~String] : +# 35| v35_6743(void) = Call[~String] : func:r35_6742, this:r35_6741 +# 35| mu35_6744(unknown) = ^CallSideEffect : ~m? +# 35| v35_6745(void) = ^IndirectReadSideEffect[-1] : &:r35_6741, ~m? +# 35| mu35_6746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6741 +# 35| r35_6747(bool) = Constant[0] : +# 35| v35_6748(void) = ConditionalBranch : r35_6747 #-----| False -> Block 483 #-----| True (back edge) -> Block 482 -# 1465| Block 483 -# 1465| r1465_1(glval) = VariableAddress[x482] : -# 1465| mu1465_2(String) = Uninitialized[x482] : &:r1465_1 -# 1465| r1465_3(glval) = FunctionAddress[String] : -# 1465| v1465_4(void) = Call[String] : func:r1465_3, this:r1465_1 -# 1465| mu1465_5(unknown) = ^CallSideEffect : ~m? -# 1465| mu1465_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1465_1 -# 1466| r1466_1(glval) = VariableAddress[x482] : -# 1466| r1466_2(glval) = FunctionAddress[~String] : -# 1466| v1466_3(void) = Call[~String] : func:r1466_2, this:r1466_1 -# 1466| mu1466_4(unknown) = ^CallSideEffect : ~m? -# 1466| v1466_5(void) = ^IndirectReadSideEffect[-1] : &:r1466_1, ~m? -# 1466| mu1466_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1466_1 -# 1466| r1466_7(bool) = Constant[0] : -# 1466| v1466_8(void) = ConditionalBranch : r1466_7 +# 35| Block 483 +# 35| r35_6749(glval) = VariableAddress[x482] : +# 35| mu35_6750(String) = Uninitialized[x482] : &:r35_6749 +# 35| r35_6751(glval) = FunctionAddress[String] : +# 35| v35_6752(void) = Call[String] : func:r35_6751, this:r35_6749 +# 35| mu35_6753(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6749 +# 35| r35_6755(glval) = VariableAddress[x482] : +# 35| r35_6756(glval) = FunctionAddress[~String] : +# 35| v35_6757(void) = Call[~String] : func:r35_6756, this:r35_6755 +# 35| mu35_6758(unknown) = ^CallSideEffect : ~m? +# 35| v35_6759(void) = ^IndirectReadSideEffect[-1] : &:r35_6755, ~m? +# 35| mu35_6760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6755 +# 35| r35_6761(bool) = Constant[0] : +# 35| v35_6762(void) = ConditionalBranch : r35_6761 #-----| False -> Block 484 #-----| True (back edge) -> Block 483 -# 1468| Block 484 -# 1468| r1468_1(glval) = VariableAddress[x483] : -# 1468| mu1468_2(String) = Uninitialized[x483] : &:r1468_1 -# 1468| r1468_3(glval) = FunctionAddress[String] : -# 1468| v1468_4(void) = Call[String] : func:r1468_3, this:r1468_1 -# 1468| mu1468_5(unknown) = ^CallSideEffect : ~m? -# 1468| mu1468_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1468_1 -# 1469| r1469_1(glval) = VariableAddress[x483] : -# 1469| r1469_2(glval) = FunctionAddress[~String] : -# 1469| v1469_3(void) = Call[~String] : func:r1469_2, this:r1469_1 -# 1469| mu1469_4(unknown) = ^CallSideEffect : ~m? -# 1469| v1469_5(void) = ^IndirectReadSideEffect[-1] : &:r1469_1, ~m? -# 1469| mu1469_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1469_1 -# 1469| r1469_7(bool) = Constant[0] : -# 1469| v1469_8(void) = ConditionalBranch : r1469_7 +# 35| Block 484 +# 35| r35_6763(glval) = VariableAddress[x483] : +# 35| mu35_6764(String) = Uninitialized[x483] : &:r35_6763 +# 35| r35_6765(glval) = FunctionAddress[String] : +# 35| v35_6766(void) = Call[String] : func:r35_6765, this:r35_6763 +# 35| mu35_6767(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6763 +# 35| r35_6769(glval) = VariableAddress[x483] : +# 35| r35_6770(glval) = FunctionAddress[~String] : +# 35| v35_6771(void) = Call[~String] : func:r35_6770, this:r35_6769 +# 35| mu35_6772(unknown) = ^CallSideEffect : ~m? +# 35| v35_6773(void) = ^IndirectReadSideEffect[-1] : &:r35_6769, ~m? +# 35| mu35_6774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6769 +# 35| r35_6775(bool) = Constant[0] : +# 35| v35_6776(void) = ConditionalBranch : r35_6775 #-----| False -> Block 485 #-----| True (back edge) -> Block 484 -# 1471| Block 485 -# 1471| r1471_1(glval) = VariableAddress[x484] : -# 1471| mu1471_2(String) = Uninitialized[x484] : &:r1471_1 -# 1471| r1471_3(glval) = FunctionAddress[String] : -# 1471| v1471_4(void) = Call[String] : func:r1471_3, this:r1471_1 -# 1471| mu1471_5(unknown) = ^CallSideEffect : ~m? -# 1471| mu1471_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1471_1 -# 1472| r1472_1(glval) = VariableAddress[x484] : -# 1472| r1472_2(glval) = FunctionAddress[~String] : -# 1472| v1472_3(void) = Call[~String] : func:r1472_2, this:r1472_1 -# 1472| mu1472_4(unknown) = ^CallSideEffect : ~m? -# 1472| v1472_5(void) = ^IndirectReadSideEffect[-1] : &:r1472_1, ~m? -# 1472| mu1472_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1472_1 -# 1472| r1472_7(bool) = Constant[0] : -# 1472| v1472_8(void) = ConditionalBranch : r1472_7 +# 35| Block 485 +# 35| r35_6777(glval) = VariableAddress[x484] : +# 35| mu35_6778(String) = Uninitialized[x484] : &:r35_6777 +# 35| r35_6779(glval) = FunctionAddress[String] : +# 35| v35_6780(void) = Call[String] : func:r35_6779, this:r35_6777 +# 35| mu35_6781(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6777 +# 35| r35_6783(glval) = VariableAddress[x484] : +# 35| r35_6784(glval) = FunctionAddress[~String] : +# 35| v35_6785(void) = Call[~String] : func:r35_6784, this:r35_6783 +# 35| mu35_6786(unknown) = ^CallSideEffect : ~m? +# 35| v35_6787(void) = ^IndirectReadSideEffect[-1] : &:r35_6783, ~m? +# 35| mu35_6788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6783 +# 35| r35_6789(bool) = Constant[0] : +# 35| v35_6790(void) = ConditionalBranch : r35_6789 #-----| False -> Block 486 #-----| True (back edge) -> Block 485 -# 1474| Block 486 -# 1474| r1474_1(glval) = VariableAddress[x485] : -# 1474| mu1474_2(String) = Uninitialized[x485] : &:r1474_1 -# 1474| r1474_3(glval) = FunctionAddress[String] : -# 1474| v1474_4(void) = Call[String] : func:r1474_3, this:r1474_1 -# 1474| mu1474_5(unknown) = ^CallSideEffect : ~m? -# 1474| mu1474_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1474_1 -# 1475| r1475_1(glval) = VariableAddress[x485] : -# 1475| r1475_2(glval) = FunctionAddress[~String] : -# 1475| v1475_3(void) = Call[~String] : func:r1475_2, this:r1475_1 -# 1475| mu1475_4(unknown) = ^CallSideEffect : ~m? -# 1475| v1475_5(void) = ^IndirectReadSideEffect[-1] : &:r1475_1, ~m? -# 1475| mu1475_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1475_1 -# 1475| r1475_7(bool) = Constant[0] : -# 1475| v1475_8(void) = ConditionalBranch : r1475_7 +# 35| Block 486 +# 35| r35_6791(glval) = VariableAddress[x485] : +# 35| mu35_6792(String) = Uninitialized[x485] : &:r35_6791 +# 35| r35_6793(glval) = FunctionAddress[String] : +# 35| v35_6794(void) = Call[String] : func:r35_6793, this:r35_6791 +# 35| mu35_6795(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6791 +# 35| r35_6797(glval) = VariableAddress[x485] : +# 35| r35_6798(glval) = FunctionAddress[~String] : +# 35| v35_6799(void) = Call[~String] : func:r35_6798, this:r35_6797 +# 35| mu35_6800(unknown) = ^CallSideEffect : ~m? +# 35| v35_6801(void) = ^IndirectReadSideEffect[-1] : &:r35_6797, ~m? +# 35| mu35_6802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6797 +# 35| r35_6803(bool) = Constant[0] : +# 35| v35_6804(void) = ConditionalBranch : r35_6803 #-----| False -> Block 487 #-----| True (back edge) -> Block 486 -# 1477| Block 487 -# 1477| r1477_1(glval) = VariableAddress[x486] : -# 1477| mu1477_2(String) = Uninitialized[x486] : &:r1477_1 -# 1477| r1477_3(glval) = FunctionAddress[String] : -# 1477| v1477_4(void) = Call[String] : func:r1477_3, this:r1477_1 -# 1477| mu1477_5(unknown) = ^CallSideEffect : ~m? -# 1477| mu1477_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1477_1 -# 1478| r1478_1(glval) = VariableAddress[x486] : -# 1478| r1478_2(glval) = FunctionAddress[~String] : -# 1478| v1478_3(void) = Call[~String] : func:r1478_2, this:r1478_1 -# 1478| mu1478_4(unknown) = ^CallSideEffect : ~m? -# 1478| v1478_5(void) = ^IndirectReadSideEffect[-1] : &:r1478_1, ~m? -# 1478| mu1478_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1478_1 -# 1478| r1478_7(bool) = Constant[0] : -# 1478| v1478_8(void) = ConditionalBranch : r1478_7 +# 35| Block 487 +# 35| r35_6805(glval) = VariableAddress[x486] : +# 35| mu35_6806(String) = Uninitialized[x486] : &:r35_6805 +# 35| r35_6807(glval) = FunctionAddress[String] : +# 35| v35_6808(void) = Call[String] : func:r35_6807, this:r35_6805 +# 35| mu35_6809(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6805 +# 35| r35_6811(glval) = VariableAddress[x486] : +# 35| r35_6812(glval) = FunctionAddress[~String] : +# 35| v35_6813(void) = Call[~String] : func:r35_6812, this:r35_6811 +# 35| mu35_6814(unknown) = ^CallSideEffect : ~m? +# 35| v35_6815(void) = ^IndirectReadSideEffect[-1] : &:r35_6811, ~m? +# 35| mu35_6816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6811 +# 35| r35_6817(bool) = Constant[0] : +# 35| v35_6818(void) = ConditionalBranch : r35_6817 #-----| False -> Block 488 #-----| True (back edge) -> Block 487 -# 1480| Block 488 -# 1480| r1480_1(glval) = VariableAddress[x487] : -# 1480| mu1480_2(String) = Uninitialized[x487] : &:r1480_1 -# 1480| r1480_3(glval) = FunctionAddress[String] : -# 1480| v1480_4(void) = Call[String] : func:r1480_3, this:r1480_1 -# 1480| mu1480_5(unknown) = ^CallSideEffect : ~m? -# 1480| mu1480_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1480_1 -# 1481| r1481_1(glval) = VariableAddress[x487] : -# 1481| r1481_2(glval) = FunctionAddress[~String] : -# 1481| v1481_3(void) = Call[~String] : func:r1481_2, this:r1481_1 -# 1481| mu1481_4(unknown) = ^CallSideEffect : ~m? -# 1481| v1481_5(void) = ^IndirectReadSideEffect[-1] : &:r1481_1, ~m? -# 1481| mu1481_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1481_1 -# 1481| r1481_7(bool) = Constant[0] : -# 1481| v1481_8(void) = ConditionalBranch : r1481_7 +# 35| Block 488 +# 35| r35_6819(glval) = VariableAddress[x487] : +# 35| mu35_6820(String) = Uninitialized[x487] : &:r35_6819 +# 35| r35_6821(glval) = FunctionAddress[String] : +# 35| v35_6822(void) = Call[String] : func:r35_6821, this:r35_6819 +# 35| mu35_6823(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6819 +# 35| r35_6825(glval) = VariableAddress[x487] : +# 35| r35_6826(glval) = FunctionAddress[~String] : +# 35| v35_6827(void) = Call[~String] : func:r35_6826, this:r35_6825 +# 35| mu35_6828(unknown) = ^CallSideEffect : ~m? +# 35| v35_6829(void) = ^IndirectReadSideEffect[-1] : &:r35_6825, ~m? +# 35| mu35_6830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6825 +# 35| r35_6831(bool) = Constant[0] : +# 35| v35_6832(void) = ConditionalBranch : r35_6831 #-----| False -> Block 489 #-----| True (back edge) -> Block 488 -# 1483| Block 489 -# 1483| r1483_1(glval) = VariableAddress[x488] : -# 1483| mu1483_2(String) = Uninitialized[x488] : &:r1483_1 -# 1483| r1483_3(glval) = FunctionAddress[String] : -# 1483| v1483_4(void) = Call[String] : func:r1483_3, this:r1483_1 -# 1483| mu1483_5(unknown) = ^CallSideEffect : ~m? -# 1483| mu1483_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1483_1 -# 1484| r1484_1(glval) = VariableAddress[x488] : -# 1484| r1484_2(glval) = FunctionAddress[~String] : -# 1484| v1484_3(void) = Call[~String] : func:r1484_2, this:r1484_1 -# 1484| mu1484_4(unknown) = ^CallSideEffect : ~m? -# 1484| v1484_5(void) = ^IndirectReadSideEffect[-1] : &:r1484_1, ~m? -# 1484| mu1484_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1484_1 -# 1484| r1484_7(bool) = Constant[0] : -# 1484| v1484_8(void) = ConditionalBranch : r1484_7 +# 35| Block 489 +# 35| r35_6833(glval) = VariableAddress[x488] : +# 35| mu35_6834(String) = Uninitialized[x488] : &:r35_6833 +# 35| r35_6835(glval) = FunctionAddress[String] : +# 35| v35_6836(void) = Call[String] : func:r35_6835, this:r35_6833 +# 35| mu35_6837(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6833 +# 35| r35_6839(glval) = VariableAddress[x488] : +# 35| r35_6840(glval) = FunctionAddress[~String] : +# 35| v35_6841(void) = Call[~String] : func:r35_6840, this:r35_6839 +# 35| mu35_6842(unknown) = ^CallSideEffect : ~m? +# 35| v35_6843(void) = ^IndirectReadSideEffect[-1] : &:r35_6839, ~m? +# 35| mu35_6844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6839 +# 35| r35_6845(bool) = Constant[0] : +# 35| v35_6846(void) = ConditionalBranch : r35_6845 #-----| False -> Block 490 #-----| True (back edge) -> Block 489 -# 1486| Block 490 -# 1486| r1486_1(glval) = VariableAddress[x489] : -# 1486| mu1486_2(String) = Uninitialized[x489] : &:r1486_1 -# 1486| r1486_3(glval) = FunctionAddress[String] : -# 1486| v1486_4(void) = Call[String] : func:r1486_3, this:r1486_1 -# 1486| mu1486_5(unknown) = ^CallSideEffect : ~m? -# 1486| mu1486_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1486_1 -# 1487| r1487_1(glval) = VariableAddress[x489] : -# 1487| r1487_2(glval) = FunctionAddress[~String] : -# 1487| v1487_3(void) = Call[~String] : func:r1487_2, this:r1487_1 -# 1487| mu1487_4(unknown) = ^CallSideEffect : ~m? -# 1487| v1487_5(void) = ^IndirectReadSideEffect[-1] : &:r1487_1, ~m? -# 1487| mu1487_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1487_1 -# 1487| r1487_7(bool) = Constant[0] : -# 1487| v1487_8(void) = ConditionalBranch : r1487_7 +# 35| Block 490 +# 35| r35_6847(glval) = VariableAddress[x489] : +# 35| mu35_6848(String) = Uninitialized[x489] : &:r35_6847 +# 35| r35_6849(glval) = FunctionAddress[String] : +# 35| v35_6850(void) = Call[String] : func:r35_6849, this:r35_6847 +# 35| mu35_6851(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6847 +# 35| r35_6853(glval) = VariableAddress[x489] : +# 35| r35_6854(glval) = FunctionAddress[~String] : +# 35| v35_6855(void) = Call[~String] : func:r35_6854, this:r35_6853 +# 35| mu35_6856(unknown) = ^CallSideEffect : ~m? +# 35| v35_6857(void) = ^IndirectReadSideEffect[-1] : &:r35_6853, ~m? +# 35| mu35_6858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6853 +# 35| r35_6859(bool) = Constant[0] : +# 35| v35_6860(void) = ConditionalBranch : r35_6859 #-----| False -> Block 491 #-----| True (back edge) -> Block 490 -# 1489| Block 491 -# 1489| r1489_1(glval) = VariableAddress[x490] : -# 1489| mu1489_2(String) = Uninitialized[x490] : &:r1489_1 -# 1489| r1489_3(glval) = FunctionAddress[String] : -# 1489| v1489_4(void) = Call[String] : func:r1489_3, this:r1489_1 -# 1489| mu1489_5(unknown) = ^CallSideEffect : ~m? -# 1489| mu1489_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1489_1 -# 1490| r1490_1(glval) = VariableAddress[x490] : -# 1490| r1490_2(glval) = FunctionAddress[~String] : -# 1490| v1490_3(void) = Call[~String] : func:r1490_2, this:r1490_1 -# 1490| mu1490_4(unknown) = ^CallSideEffect : ~m? -# 1490| v1490_5(void) = ^IndirectReadSideEffect[-1] : &:r1490_1, ~m? -# 1490| mu1490_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1490_1 -# 1490| r1490_7(bool) = Constant[0] : -# 1490| v1490_8(void) = ConditionalBranch : r1490_7 +# 35| Block 491 +# 35| r35_6861(glval) = VariableAddress[x490] : +# 35| mu35_6862(String) = Uninitialized[x490] : &:r35_6861 +# 35| r35_6863(glval) = FunctionAddress[String] : +# 35| v35_6864(void) = Call[String] : func:r35_6863, this:r35_6861 +# 35| mu35_6865(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6861 +# 35| r35_6867(glval) = VariableAddress[x490] : +# 35| r35_6868(glval) = FunctionAddress[~String] : +# 35| v35_6869(void) = Call[~String] : func:r35_6868, this:r35_6867 +# 35| mu35_6870(unknown) = ^CallSideEffect : ~m? +# 35| v35_6871(void) = ^IndirectReadSideEffect[-1] : &:r35_6867, ~m? +# 35| mu35_6872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6867 +# 35| r35_6873(bool) = Constant[0] : +# 35| v35_6874(void) = ConditionalBranch : r35_6873 #-----| False -> Block 492 #-----| True (back edge) -> Block 491 -# 1492| Block 492 -# 1492| r1492_1(glval) = VariableAddress[x491] : -# 1492| mu1492_2(String) = Uninitialized[x491] : &:r1492_1 -# 1492| r1492_3(glval) = FunctionAddress[String] : -# 1492| v1492_4(void) = Call[String] : func:r1492_3, this:r1492_1 -# 1492| mu1492_5(unknown) = ^CallSideEffect : ~m? -# 1492| mu1492_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1492_1 -# 1493| r1493_1(glval) = VariableAddress[x491] : -# 1493| r1493_2(glval) = FunctionAddress[~String] : -# 1493| v1493_3(void) = Call[~String] : func:r1493_2, this:r1493_1 -# 1493| mu1493_4(unknown) = ^CallSideEffect : ~m? -# 1493| v1493_5(void) = ^IndirectReadSideEffect[-1] : &:r1493_1, ~m? -# 1493| mu1493_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1493_1 -# 1493| r1493_7(bool) = Constant[0] : -# 1493| v1493_8(void) = ConditionalBranch : r1493_7 +# 35| Block 492 +# 35| r35_6875(glval) = VariableAddress[x491] : +# 35| mu35_6876(String) = Uninitialized[x491] : &:r35_6875 +# 35| r35_6877(glval) = FunctionAddress[String] : +# 35| v35_6878(void) = Call[String] : func:r35_6877, this:r35_6875 +# 35| mu35_6879(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6875 +# 35| r35_6881(glval) = VariableAddress[x491] : +# 35| r35_6882(glval) = FunctionAddress[~String] : +# 35| v35_6883(void) = Call[~String] : func:r35_6882, this:r35_6881 +# 35| mu35_6884(unknown) = ^CallSideEffect : ~m? +# 35| v35_6885(void) = ^IndirectReadSideEffect[-1] : &:r35_6881, ~m? +# 35| mu35_6886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6881 +# 35| r35_6887(bool) = Constant[0] : +# 35| v35_6888(void) = ConditionalBranch : r35_6887 #-----| False -> Block 493 #-----| True (back edge) -> Block 492 -# 1495| Block 493 -# 1495| r1495_1(glval) = VariableAddress[x492] : -# 1495| mu1495_2(String) = Uninitialized[x492] : &:r1495_1 -# 1495| r1495_3(glval) = FunctionAddress[String] : -# 1495| v1495_4(void) = Call[String] : func:r1495_3, this:r1495_1 -# 1495| mu1495_5(unknown) = ^CallSideEffect : ~m? -# 1495| mu1495_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1495_1 -# 1496| r1496_1(glval) = VariableAddress[x492] : -# 1496| r1496_2(glval) = FunctionAddress[~String] : -# 1496| v1496_3(void) = Call[~String] : func:r1496_2, this:r1496_1 -# 1496| mu1496_4(unknown) = ^CallSideEffect : ~m? -# 1496| v1496_5(void) = ^IndirectReadSideEffect[-1] : &:r1496_1, ~m? -# 1496| mu1496_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1496_1 -# 1496| r1496_7(bool) = Constant[0] : -# 1496| v1496_8(void) = ConditionalBranch : r1496_7 +# 35| Block 493 +# 35| r35_6889(glval) = VariableAddress[x492] : +# 35| mu35_6890(String) = Uninitialized[x492] : &:r35_6889 +# 35| r35_6891(glval) = FunctionAddress[String] : +# 35| v35_6892(void) = Call[String] : func:r35_6891, this:r35_6889 +# 35| mu35_6893(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6889 +# 35| r35_6895(glval) = VariableAddress[x492] : +# 35| r35_6896(glval) = FunctionAddress[~String] : +# 35| v35_6897(void) = Call[~String] : func:r35_6896, this:r35_6895 +# 35| mu35_6898(unknown) = ^CallSideEffect : ~m? +# 35| v35_6899(void) = ^IndirectReadSideEffect[-1] : &:r35_6895, ~m? +# 35| mu35_6900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6895 +# 35| r35_6901(bool) = Constant[0] : +# 35| v35_6902(void) = ConditionalBranch : r35_6901 #-----| False -> Block 494 #-----| True (back edge) -> Block 493 -# 1498| Block 494 -# 1498| r1498_1(glval) = VariableAddress[x493] : -# 1498| mu1498_2(String) = Uninitialized[x493] : &:r1498_1 -# 1498| r1498_3(glval) = FunctionAddress[String] : -# 1498| v1498_4(void) = Call[String] : func:r1498_3, this:r1498_1 -# 1498| mu1498_5(unknown) = ^CallSideEffect : ~m? -# 1498| mu1498_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1498_1 -# 1499| r1499_1(glval) = VariableAddress[x493] : -# 1499| r1499_2(glval) = FunctionAddress[~String] : -# 1499| v1499_3(void) = Call[~String] : func:r1499_2, this:r1499_1 -# 1499| mu1499_4(unknown) = ^CallSideEffect : ~m? -# 1499| v1499_5(void) = ^IndirectReadSideEffect[-1] : &:r1499_1, ~m? -# 1499| mu1499_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1499_1 -# 1499| r1499_7(bool) = Constant[0] : -# 1499| v1499_8(void) = ConditionalBranch : r1499_7 +# 35| Block 494 +# 35| r35_6903(glval) = VariableAddress[x493] : +# 35| mu35_6904(String) = Uninitialized[x493] : &:r35_6903 +# 35| r35_6905(glval) = FunctionAddress[String] : +# 35| v35_6906(void) = Call[String] : func:r35_6905, this:r35_6903 +# 35| mu35_6907(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6903 +# 35| r35_6909(glval) = VariableAddress[x493] : +# 35| r35_6910(glval) = FunctionAddress[~String] : +# 35| v35_6911(void) = Call[~String] : func:r35_6910, this:r35_6909 +# 35| mu35_6912(unknown) = ^CallSideEffect : ~m? +# 35| v35_6913(void) = ^IndirectReadSideEffect[-1] : &:r35_6909, ~m? +# 35| mu35_6914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6909 +# 35| r35_6915(bool) = Constant[0] : +# 35| v35_6916(void) = ConditionalBranch : r35_6915 #-----| False -> Block 495 #-----| True (back edge) -> Block 494 -# 1501| Block 495 -# 1501| r1501_1(glval) = VariableAddress[x494] : -# 1501| mu1501_2(String) = Uninitialized[x494] : &:r1501_1 -# 1501| r1501_3(glval) = FunctionAddress[String] : -# 1501| v1501_4(void) = Call[String] : func:r1501_3, this:r1501_1 -# 1501| mu1501_5(unknown) = ^CallSideEffect : ~m? -# 1501| mu1501_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1501_1 -# 1502| r1502_1(glval) = VariableAddress[x494] : -# 1502| r1502_2(glval) = FunctionAddress[~String] : -# 1502| v1502_3(void) = Call[~String] : func:r1502_2, this:r1502_1 -# 1502| mu1502_4(unknown) = ^CallSideEffect : ~m? -# 1502| v1502_5(void) = ^IndirectReadSideEffect[-1] : &:r1502_1, ~m? -# 1502| mu1502_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 -# 1502| r1502_7(bool) = Constant[0] : -# 1502| v1502_8(void) = ConditionalBranch : r1502_7 +# 35| Block 495 +# 35| r35_6917(glval) = VariableAddress[x494] : +# 35| mu35_6918(String) = Uninitialized[x494] : &:r35_6917 +# 35| r35_6919(glval) = FunctionAddress[String] : +# 35| v35_6920(void) = Call[String] : func:r35_6919, this:r35_6917 +# 35| mu35_6921(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6917 +# 35| r35_6923(glval) = VariableAddress[x494] : +# 35| r35_6924(glval) = FunctionAddress[~String] : +# 35| v35_6925(void) = Call[~String] : func:r35_6924, this:r35_6923 +# 35| mu35_6926(unknown) = ^CallSideEffect : ~m? +# 35| v35_6927(void) = ^IndirectReadSideEffect[-1] : &:r35_6923, ~m? +# 35| mu35_6928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6923 +# 35| r35_6929(bool) = Constant[0] : +# 35| v35_6930(void) = ConditionalBranch : r35_6929 #-----| False -> Block 496 #-----| True (back edge) -> Block 495 -# 1504| Block 496 -# 1504| r1504_1(glval) = VariableAddress[x495] : -# 1504| mu1504_2(String) = Uninitialized[x495] : &:r1504_1 -# 1504| r1504_3(glval) = FunctionAddress[String] : -# 1504| v1504_4(void) = Call[String] : func:r1504_3, this:r1504_1 -# 1504| mu1504_5(unknown) = ^CallSideEffect : ~m? -# 1504| mu1504_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1504_1 -# 1505| r1505_1(glval) = VariableAddress[x495] : -# 1505| r1505_2(glval) = FunctionAddress[~String] : -# 1505| v1505_3(void) = Call[~String] : func:r1505_2, this:r1505_1 -# 1505| mu1505_4(unknown) = ^CallSideEffect : ~m? -# 1505| v1505_5(void) = ^IndirectReadSideEffect[-1] : &:r1505_1, ~m? -# 1505| mu1505_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1505_1 -# 1505| r1505_7(bool) = Constant[0] : -# 1505| v1505_8(void) = ConditionalBranch : r1505_7 +# 35| Block 496 +# 35| r35_6931(glval) = VariableAddress[x495] : +# 35| mu35_6932(String) = Uninitialized[x495] : &:r35_6931 +# 35| r35_6933(glval) = FunctionAddress[String] : +# 35| v35_6934(void) = Call[String] : func:r35_6933, this:r35_6931 +# 35| mu35_6935(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6931 +# 35| r35_6937(glval) = VariableAddress[x495] : +# 35| r35_6938(glval) = FunctionAddress[~String] : +# 35| v35_6939(void) = Call[~String] : func:r35_6938, this:r35_6937 +# 35| mu35_6940(unknown) = ^CallSideEffect : ~m? +# 35| v35_6941(void) = ^IndirectReadSideEffect[-1] : &:r35_6937, ~m? +# 35| mu35_6942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6937 +# 35| r35_6943(bool) = Constant[0] : +# 35| v35_6944(void) = ConditionalBranch : r35_6943 #-----| False -> Block 497 #-----| True (back edge) -> Block 496 -# 1507| Block 497 -# 1507| r1507_1(glval) = VariableAddress[x496] : -# 1507| mu1507_2(String) = Uninitialized[x496] : &:r1507_1 -# 1507| r1507_3(glval) = FunctionAddress[String] : -# 1507| v1507_4(void) = Call[String] : func:r1507_3, this:r1507_1 -# 1507| mu1507_5(unknown) = ^CallSideEffect : ~m? -# 1507| mu1507_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1507_1 -# 1508| r1508_1(glval) = VariableAddress[x496] : -# 1508| r1508_2(glval) = FunctionAddress[~String] : -# 1508| v1508_3(void) = Call[~String] : func:r1508_2, this:r1508_1 -# 1508| mu1508_4(unknown) = ^CallSideEffect : ~m? -# 1508| v1508_5(void) = ^IndirectReadSideEffect[-1] : &:r1508_1, ~m? -# 1508| mu1508_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1508_1 -# 1508| r1508_7(bool) = Constant[0] : -# 1508| v1508_8(void) = ConditionalBranch : r1508_7 +# 35| Block 497 +# 35| r35_6945(glval) = VariableAddress[x496] : +# 35| mu35_6946(String) = Uninitialized[x496] : &:r35_6945 +# 35| r35_6947(glval) = FunctionAddress[String] : +# 35| v35_6948(void) = Call[String] : func:r35_6947, this:r35_6945 +# 35| mu35_6949(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6945 +# 35| r35_6951(glval) = VariableAddress[x496] : +# 35| r35_6952(glval) = FunctionAddress[~String] : +# 35| v35_6953(void) = Call[~String] : func:r35_6952, this:r35_6951 +# 35| mu35_6954(unknown) = ^CallSideEffect : ~m? +# 35| v35_6955(void) = ^IndirectReadSideEffect[-1] : &:r35_6951, ~m? +# 35| mu35_6956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6951 +# 35| r35_6957(bool) = Constant[0] : +# 35| v35_6958(void) = ConditionalBranch : r35_6957 #-----| False -> Block 498 #-----| True (back edge) -> Block 497 -# 1510| Block 498 -# 1510| r1510_1(glval) = VariableAddress[x497] : -# 1510| mu1510_2(String) = Uninitialized[x497] : &:r1510_1 -# 1510| r1510_3(glval) = FunctionAddress[String] : -# 1510| v1510_4(void) = Call[String] : func:r1510_3, this:r1510_1 -# 1510| mu1510_5(unknown) = ^CallSideEffect : ~m? -# 1510| mu1510_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1510_1 -# 1511| r1511_1(glval) = VariableAddress[x497] : -# 1511| r1511_2(glval) = FunctionAddress[~String] : -# 1511| v1511_3(void) = Call[~String] : func:r1511_2, this:r1511_1 -# 1511| mu1511_4(unknown) = ^CallSideEffect : ~m? -# 1511| v1511_5(void) = ^IndirectReadSideEffect[-1] : &:r1511_1, ~m? -# 1511| mu1511_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1511_1 -# 1511| r1511_7(bool) = Constant[0] : -# 1511| v1511_8(void) = ConditionalBranch : r1511_7 +# 35| Block 498 +# 35| r35_6959(glval) = VariableAddress[x497] : +# 35| mu35_6960(String) = Uninitialized[x497] : &:r35_6959 +# 35| r35_6961(glval) = FunctionAddress[String] : +# 35| v35_6962(void) = Call[String] : func:r35_6961, this:r35_6959 +# 35| mu35_6963(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6959 +# 35| r35_6965(glval) = VariableAddress[x497] : +# 35| r35_6966(glval) = FunctionAddress[~String] : +# 35| v35_6967(void) = Call[~String] : func:r35_6966, this:r35_6965 +# 35| mu35_6968(unknown) = ^CallSideEffect : ~m? +# 35| v35_6969(void) = ^IndirectReadSideEffect[-1] : &:r35_6965, ~m? +# 35| mu35_6970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6965 +# 35| r35_6971(bool) = Constant[0] : +# 35| v35_6972(void) = ConditionalBranch : r35_6971 #-----| False -> Block 499 #-----| True (back edge) -> Block 498 -# 1513| Block 499 -# 1513| r1513_1(glval) = VariableAddress[x498] : -# 1513| mu1513_2(String) = Uninitialized[x498] : &:r1513_1 -# 1513| r1513_3(glval) = FunctionAddress[String] : -# 1513| v1513_4(void) = Call[String] : func:r1513_3, this:r1513_1 -# 1513| mu1513_5(unknown) = ^CallSideEffect : ~m? -# 1513| mu1513_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1513_1 -# 1514| r1514_1(glval) = VariableAddress[x498] : -# 1514| r1514_2(glval) = FunctionAddress[~String] : -# 1514| v1514_3(void) = Call[~String] : func:r1514_2, this:r1514_1 -# 1514| mu1514_4(unknown) = ^CallSideEffect : ~m? -# 1514| v1514_5(void) = ^IndirectReadSideEffect[-1] : &:r1514_1, ~m? -# 1514| mu1514_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1514_1 -# 1514| r1514_7(bool) = Constant[0] : -# 1514| v1514_8(void) = ConditionalBranch : r1514_7 +# 35| Block 499 +# 35| r35_6973(glval) = VariableAddress[x498] : +# 35| mu35_6974(String) = Uninitialized[x498] : &:r35_6973 +# 35| r35_6975(glval) = FunctionAddress[String] : +# 35| v35_6976(void) = Call[String] : func:r35_6975, this:r35_6973 +# 35| mu35_6977(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6973 +# 35| r35_6979(glval) = VariableAddress[x498] : +# 35| r35_6980(glval) = FunctionAddress[~String] : +# 35| v35_6981(void) = Call[~String] : func:r35_6980, this:r35_6979 +# 35| mu35_6982(unknown) = ^CallSideEffect : ~m? +# 35| v35_6983(void) = ^IndirectReadSideEffect[-1] : &:r35_6979, ~m? +# 35| mu35_6984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6979 +# 35| r35_6985(bool) = Constant[0] : +# 35| v35_6986(void) = ConditionalBranch : r35_6985 #-----| False -> Block 500 #-----| True (back edge) -> Block 499 -# 1516| Block 500 -# 1516| r1516_1(glval) = VariableAddress[x499] : -# 1516| mu1516_2(String) = Uninitialized[x499] : &:r1516_1 -# 1516| r1516_3(glval) = FunctionAddress[String] : -# 1516| v1516_4(void) = Call[String] : func:r1516_3, this:r1516_1 -# 1516| mu1516_5(unknown) = ^CallSideEffect : ~m? -# 1516| mu1516_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1516_1 -# 1517| r1517_1(glval) = VariableAddress[x499] : -# 1517| r1517_2(glval) = FunctionAddress[~String] : -# 1517| v1517_3(void) = Call[~String] : func:r1517_2, this:r1517_1 -# 1517| mu1517_4(unknown) = ^CallSideEffect : ~m? -# 1517| v1517_5(void) = ^IndirectReadSideEffect[-1] : &:r1517_1, ~m? -# 1517| mu1517_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1517_1 -# 1517| r1517_7(bool) = Constant[0] : -# 1517| v1517_8(void) = ConditionalBranch : r1517_7 +# 35| Block 500 +# 35| r35_6987(glval) = VariableAddress[x499] : +# 35| mu35_6988(String) = Uninitialized[x499] : &:r35_6987 +# 35| r35_6989(glval) = FunctionAddress[String] : +# 35| v35_6990(void) = Call[String] : func:r35_6989, this:r35_6987 +# 35| mu35_6991(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6987 +# 35| r35_6993(glval) = VariableAddress[x499] : +# 35| r35_6994(glval) = FunctionAddress[~String] : +# 35| v35_6995(void) = Call[~String] : func:r35_6994, this:r35_6993 +# 35| mu35_6996(unknown) = ^CallSideEffect : ~m? +# 35| v35_6997(void) = ^IndirectReadSideEffect[-1] : &:r35_6993, ~m? +# 35| mu35_6998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_6993 +# 35| r35_6999(bool) = Constant[0] : +# 35| v35_7000(void) = ConditionalBranch : r35_6999 #-----| False -> Block 501 #-----| True (back edge) -> Block 500 -# 1519| Block 501 -# 1519| r1519_1(glval) = VariableAddress[x500] : -# 1519| mu1519_2(String) = Uninitialized[x500] : &:r1519_1 -# 1519| r1519_3(glval) = FunctionAddress[String] : -# 1519| v1519_4(void) = Call[String] : func:r1519_3, this:r1519_1 -# 1519| mu1519_5(unknown) = ^CallSideEffect : ~m? -# 1519| mu1519_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1519_1 -# 1520| r1520_1(glval) = VariableAddress[x500] : -# 1520| r1520_2(glval) = FunctionAddress[~String] : -# 1520| v1520_3(void) = Call[~String] : func:r1520_2, this:r1520_1 -# 1520| mu1520_4(unknown) = ^CallSideEffect : ~m? -# 1520| v1520_5(void) = ^IndirectReadSideEffect[-1] : &:r1520_1, ~m? -# 1520| mu1520_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1520_1 -# 1520| r1520_7(bool) = Constant[0] : -# 1520| v1520_8(void) = ConditionalBranch : r1520_7 +# 35| Block 501 +# 35| r35_7001(glval) = VariableAddress[x500] : +# 35| mu35_7002(String) = Uninitialized[x500] : &:r35_7001 +# 35| r35_7003(glval) = FunctionAddress[String] : +# 35| v35_7004(void) = Call[String] : func:r35_7003, this:r35_7001 +# 35| mu35_7005(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7001 +# 35| r35_7007(glval) = VariableAddress[x500] : +# 35| r35_7008(glval) = FunctionAddress[~String] : +# 35| v35_7009(void) = Call[~String] : func:r35_7008, this:r35_7007 +# 35| mu35_7010(unknown) = ^CallSideEffect : ~m? +# 35| v35_7011(void) = ^IndirectReadSideEffect[-1] : &:r35_7007, ~m? +# 35| mu35_7012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7007 +# 35| r35_7013(bool) = Constant[0] : +# 35| v35_7014(void) = ConditionalBranch : r35_7013 #-----| False -> Block 502 #-----| True (back edge) -> Block 501 -# 1522| Block 502 -# 1522| r1522_1(glval) = VariableAddress[x501] : -# 1522| mu1522_2(String) = Uninitialized[x501] : &:r1522_1 -# 1522| r1522_3(glval) = FunctionAddress[String] : -# 1522| v1522_4(void) = Call[String] : func:r1522_3, this:r1522_1 -# 1522| mu1522_5(unknown) = ^CallSideEffect : ~m? -# 1522| mu1522_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1522_1 -# 1523| r1523_1(glval) = VariableAddress[x501] : -# 1523| r1523_2(glval) = FunctionAddress[~String] : -# 1523| v1523_3(void) = Call[~String] : func:r1523_2, this:r1523_1 -# 1523| mu1523_4(unknown) = ^CallSideEffect : ~m? -# 1523| v1523_5(void) = ^IndirectReadSideEffect[-1] : &:r1523_1, ~m? -# 1523| mu1523_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1523_1 -# 1523| r1523_7(bool) = Constant[0] : -# 1523| v1523_8(void) = ConditionalBranch : r1523_7 +# 35| Block 502 +# 35| r35_7015(glval) = VariableAddress[x501] : +# 35| mu35_7016(String) = Uninitialized[x501] : &:r35_7015 +# 35| r35_7017(glval) = FunctionAddress[String] : +# 35| v35_7018(void) = Call[String] : func:r35_7017, this:r35_7015 +# 35| mu35_7019(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7015 +# 35| r35_7021(glval) = VariableAddress[x501] : +# 35| r35_7022(glval) = FunctionAddress[~String] : +# 35| v35_7023(void) = Call[~String] : func:r35_7022, this:r35_7021 +# 35| mu35_7024(unknown) = ^CallSideEffect : ~m? +# 35| v35_7025(void) = ^IndirectReadSideEffect[-1] : &:r35_7021, ~m? +# 35| mu35_7026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7021 +# 35| r35_7027(bool) = Constant[0] : +# 35| v35_7028(void) = ConditionalBranch : r35_7027 #-----| False -> Block 503 #-----| True (back edge) -> Block 502 -# 1525| Block 503 -# 1525| r1525_1(glval) = VariableAddress[x502] : -# 1525| mu1525_2(String) = Uninitialized[x502] : &:r1525_1 -# 1525| r1525_3(glval) = FunctionAddress[String] : -# 1525| v1525_4(void) = Call[String] : func:r1525_3, this:r1525_1 -# 1525| mu1525_5(unknown) = ^CallSideEffect : ~m? -# 1525| mu1525_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1525_1 -# 1526| r1526_1(glval) = VariableAddress[x502] : -# 1526| r1526_2(glval) = FunctionAddress[~String] : -# 1526| v1526_3(void) = Call[~String] : func:r1526_2, this:r1526_1 -# 1526| mu1526_4(unknown) = ^CallSideEffect : ~m? -# 1526| v1526_5(void) = ^IndirectReadSideEffect[-1] : &:r1526_1, ~m? -# 1526| mu1526_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1526_1 -# 1526| r1526_7(bool) = Constant[0] : -# 1526| v1526_8(void) = ConditionalBranch : r1526_7 +# 35| Block 503 +# 35| r35_7029(glval) = VariableAddress[x502] : +# 35| mu35_7030(String) = Uninitialized[x502] : &:r35_7029 +# 35| r35_7031(glval) = FunctionAddress[String] : +# 35| v35_7032(void) = Call[String] : func:r35_7031, this:r35_7029 +# 35| mu35_7033(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7029 +# 35| r35_7035(glval) = VariableAddress[x502] : +# 35| r35_7036(glval) = FunctionAddress[~String] : +# 35| v35_7037(void) = Call[~String] : func:r35_7036, this:r35_7035 +# 35| mu35_7038(unknown) = ^CallSideEffect : ~m? +# 35| v35_7039(void) = ^IndirectReadSideEffect[-1] : &:r35_7035, ~m? +# 35| mu35_7040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7035 +# 35| r35_7041(bool) = Constant[0] : +# 35| v35_7042(void) = ConditionalBranch : r35_7041 #-----| False -> Block 504 #-----| True (back edge) -> Block 503 -# 1528| Block 504 -# 1528| r1528_1(glval) = VariableAddress[x503] : -# 1528| mu1528_2(String) = Uninitialized[x503] : &:r1528_1 -# 1528| r1528_3(glval) = FunctionAddress[String] : -# 1528| v1528_4(void) = Call[String] : func:r1528_3, this:r1528_1 -# 1528| mu1528_5(unknown) = ^CallSideEffect : ~m? -# 1528| mu1528_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1528_1 -# 1529| r1529_1(glval) = VariableAddress[x503] : -# 1529| r1529_2(glval) = FunctionAddress[~String] : -# 1529| v1529_3(void) = Call[~String] : func:r1529_2, this:r1529_1 -# 1529| mu1529_4(unknown) = ^CallSideEffect : ~m? -# 1529| v1529_5(void) = ^IndirectReadSideEffect[-1] : &:r1529_1, ~m? -# 1529| mu1529_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1529_1 -# 1529| r1529_7(bool) = Constant[0] : -# 1529| v1529_8(void) = ConditionalBranch : r1529_7 +# 35| Block 504 +# 35| r35_7043(glval) = VariableAddress[x503] : +# 35| mu35_7044(String) = Uninitialized[x503] : &:r35_7043 +# 35| r35_7045(glval) = FunctionAddress[String] : +# 35| v35_7046(void) = Call[String] : func:r35_7045, this:r35_7043 +# 35| mu35_7047(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7043 +# 35| r35_7049(glval) = VariableAddress[x503] : +# 35| r35_7050(glval) = FunctionAddress[~String] : +# 35| v35_7051(void) = Call[~String] : func:r35_7050, this:r35_7049 +# 35| mu35_7052(unknown) = ^CallSideEffect : ~m? +# 35| v35_7053(void) = ^IndirectReadSideEffect[-1] : &:r35_7049, ~m? +# 35| mu35_7054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7049 +# 35| r35_7055(bool) = Constant[0] : +# 35| v35_7056(void) = ConditionalBranch : r35_7055 #-----| False -> Block 505 #-----| True (back edge) -> Block 504 -# 1531| Block 505 -# 1531| r1531_1(glval) = VariableAddress[x504] : -# 1531| mu1531_2(String) = Uninitialized[x504] : &:r1531_1 -# 1531| r1531_3(glval) = FunctionAddress[String] : -# 1531| v1531_4(void) = Call[String] : func:r1531_3, this:r1531_1 -# 1531| mu1531_5(unknown) = ^CallSideEffect : ~m? -# 1531| mu1531_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1531_1 -# 1532| r1532_1(glval) = VariableAddress[x504] : -# 1532| r1532_2(glval) = FunctionAddress[~String] : -# 1532| v1532_3(void) = Call[~String] : func:r1532_2, this:r1532_1 -# 1532| mu1532_4(unknown) = ^CallSideEffect : ~m? -# 1532| v1532_5(void) = ^IndirectReadSideEffect[-1] : &:r1532_1, ~m? -# 1532| mu1532_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1532_1 -# 1532| r1532_7(bool) = Constant[0] : -# 1532| v1532_8(void) = ConditionalBranch : r1532_7 +# 35| Block 505 +# 35| r35_7057(glval) = VariableAddress[x504] : +# 35| mu35_7058(String) = Uninitialized[x504] : &:r35_7057 +# 35| r35_7059(glval) = FunctionAddress[String] : +# 35| v35_7060(void) = Call[String] : func:r35_7059, this:r35_7057 +# 35| mu35_7061(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7057 +# 35| r35_7063(glval) = VariableAddress[x504] : +# 35| r35_7064(glval) = FunctionAddress[~String] : +# 35| v35_7065(void) = Call[~String] : func:r35_7064, this:r35_7063 +# 35| mu35_7066(unknown) = ^CallSideEffect : ~m? +# 35| v35_7067(void) = ^IndirectReadSideEffect[-1] : &:r35_7063, ~m? +# 35| mu35_7068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7063 +# 35| r35_7069(bool) = Constant[0] : +# 35| v35_7070(void) = ConditionalBranch : r35_7069 #-----| False -> Block 506 #-----| True (back edge) -> Block 505 -# 1534| Block 506 -# 1534| r1534_1(glval) = VariableAddress[x505] : -# 1534| mu1534_2(String) = Uninitialized[x505] : &:r1534_1 -# 1534| r1534_3(glval) = FunctionAddress[String] : -# 1534| v1534_4(void) = Call[String] : func:r1534_3, this:r1534_1 -# 1534| mu1534_5(unknown) = ^CallSideEffect : ~m? -# 1534| mu1534_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1534_1 -# 1535| r1535_1(glval) = VariableAddress[x505] : -# 1535| r1535_2(glval) = FunctionAddress[~String] : -# 1535| v1535_3(void) = Call[~String] : func:r1535_2, this:r1535_1 -# 1535| mu1535_4(unknown) = ^CallSideEffect : ~m? -# 1535| v1535_5(void) = ^IndirectReadSideEffect[-1] : &:r1535_1, ~m? -# 1535| mu1535_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1535_1 -# 1535| r1535_7(bool) = Constant[0] : -# 1535| v1535_8(void) = ConditionalBranch : r1535_7 +# 35| Block 506 +# 35| r35_7071(glval) = VariableAddress[x505] : +# 35| mu35_7072(String) = Uninitialized[x505] : &:r35_7071 +# 35| r35_7073(glval) = FunctionAddress[String] : +# 35| v35_7074(void) = Call[String] : func:r35_7073, this:r35_7071 +# 35| mu35_7075(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7071 +# 35| r35_7077(glval) = VariableAddress[x505] : +# 35| r35_7078(glval) = FunctionAddress[~String] : +# 35| v35_7079(void) = Call[~String] : func:r35_7078, this:r35_7077 +# 35| mu35_7080(unknown) = ^CallSideEffect : ~m? +# 35| v35_7081(void) = ^IndirectReadSideEffect[-1] : &:r35_7077, ~m? +# 35| mu35_7082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7077 +# 35| r35_7083(bool) = Constant[0] : +# 35| v35_7084(void) = ConditionalBranch : r35_7083 #-----| False -> Block 507 #-----| True (back edge) -> Block 506 -# 1537| Block 507 -# 1537| r1537_1(glval) = VariableAddress[x506] : -# 1537| mu1537_2(String) = Uninitialized[x506] : &:r1537_1 -# 1537| r1537_3(glval) = FunctionAddress[String] : -# 1537| v1537_4(void) = Call[String] : func:r1537_3, this:r1537_1 -# 1537| mu1537_5(unknown) = ^CallSideEffect : ~m? -# 1537| mu1537_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1537_1 -# 1538| r1538_1(glval) = VariableAddress[x506] : -# 1538| r1538_2(glval) = FunctionAddress[~String] : -# 1538| v1538_3(void) = Call[~String] : func:r1538_2, this:r1538_1 -# 1538| mu1538_4(unknown) = ^CallSideEffect : ~m? -# 1538| v1538_5(void) = ^IndirectReadSideEffect[-1] : &:r1538_1, ~m? -# 1538| mu1538_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1538_1 -# 1538| r1538_7(bool) = Constant[0] : -# 1538| v1538_8(void) = ConditionalBranch : r1538_7 +# 35| Block 507 +# 35| r35_7085(glval) = VariableAddress[x506] : +# 35| mu35_7086(String) = Uninitialized[x506] : &:r35_7085 +# 35| r35_7087(glval) = FunctionAddress[String] : +# 35| v35_7088(void) = Call[String] : func:r35_7087, this:r35_7085 +# 35| mu35_7089(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7085 +# 35| r35_7091(glval) = VariableAddress[x506] : +# 35| r35_7092(glval) = FunctionAddress[~String] : +# 35| v35_7093(void) = Call[~String] : func:r35_7092, this:r35_7091 +# 35| mu35_7094(unknown) = ^CallSideEffect : ~m? +# 35| v35_7095(void) = ^IndirectReadSideEffect[-1] : &:r35_7091, ~m? +# 35| mu35_7096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7091 +# 35| r35_7097(bool) = Constant[0] : +# 35| v35_7098(void) = ConditionalBranch : r35_7097 #-----| False -> Block 508 #-----| True (back edge) -> Block 507 -# 1540| Block 508 -# 1540| r1540_1(glval) = VariableAddress[x507] : -# 1540| mu1540_2(String) = Uninitialized[x507] : &:r1540_1 -# 1540| r1540_3(glval) = FunctionAddress[String] : -# 1540| v1540_4(void) = Call[String] : func:r1540_3, this:r1540_1 -# 1540| mu1540_5(unknown) = ^CallSideEffect : ~m? -# 1540| mu1540_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1540_1 -# 1541| r1541_1(glval) = VariableAddress[x507] : -# 1541| r1541_2(glval) = FunctionAddress[~String] : -# 1541| v1541_3(void) = Call[~String] : func:r1541_2, this:r1541_1 -# 1541| mu1541_4(unknown) = ^CallSideEffect : ~m? -# 1541| v1541_5(void) = ^IndirectReadSideEffect[-1] : &:r1541_1, ~m? -# 1541| mu1541_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1541_1 -# 1541| r1541_7(bool) = Constant[0] : -# 1541| v1541_8(void) = ConditionalBranch : r1541_7 +# 35| Block 508 +# 35| r35_7099(glval) = VariableAddress[x507] : +# 35| mu35_7100(String) = Uninitialized[x507] : &:r35_7099 +# 35| r35_7101(glval) = FunctionAddress[String] : +# 35| v35_7102(void) = Call[String] : func:r35_7101, this:r35_7099 +# 35| mu35_7103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7099 +# 35| r35_7105(glval) = VariableAddress[x507] : +# 35| r35_7106(glval) = FunctionAddress[~String] : +# 35| v35_7107(void) = Call[~String] : func:r35_7106, this:r35_7105 +# 35| mu35_7108(unknown) = ^CallSideEffect : ~m? +# 35| v35_7109(void) = ^IndirectReadSideEffect[-1] : &:r35_7105, ~m? +# 35| mu35_7110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7105 +# 35| r35_7111(bool) = Constant[0] : +# 35| v35_7112(void) = ConditionalBranch : r35_7111 #-----| False -> Block 509 #-----| True (back edge) -> Block 508 -# 1543| Block 509 -# 1543| r1543_1(glval) = VariableAddress[x508] : -# 1543| mu1543_2(String) = Uninitialized[x508] : &:r1543_1 -# 1543| r1543_3(glval) = FunctionAddress[String] : -# 1543| v1543_4(void) = Call[String] : func:r1543_3, this:r1543_1 -# 1543| mu1543_5(unknown) = ^CallSideEffect : ~m? -# 1543| mu1543_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1543_1 -# 1544| r1544_1(glval) = VariableAddress[x508] : -# 1544| r1544_2(glval) = FunctionAddress[~String] : -# 1544| v1544_3(void) = Call[~String] : func:r1544_2, this:r1544_1 -# 1544| mu1544_4(unknown) = ^CallSideEffect : ~m? -# 1544| v1544_5(void) = ^IndirectReadSideEffect[-1] : &:r1544_1, ~m? -# 1544| mu1544_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1544_1 -# 1544| r1544_7(bool) = Constant[0] : -# 1544| v1544_8(void) = ConditionalBranch : r1544_7 +# 35| Block 509 +# 35| r35_7113(glval) = VariableAddress[x508] : +# 35| mu35_7114(String) = Uninitialized[x508] : &:r35_7113 +# 35| r35_7115(glval) = FunctionAddress[String] : +# 35| v35_7116(void) = Call[String] : func:r35_7115, this:r35_7113 +# 35| mu35_7117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7113 +# 35| r35_7119(glval) = VariableAddress[x508] : +# 35| r35_7120(glval) = FunctionAddress[~String] : +# 35| v35_7121(void) = Call[~String] : func:r35_7120, this:r35_7119 +# 35| mu35_7122(unknown) = ^CallSideEffect : ~m? +# 35| v35_7123(void) = ^IndirectReadSideEffect[-1] : &:r35_7119, ~m? +# 35| mu35_7124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7119 +# 35| r35_7125(bool) = Constant[0] : +# 35| v35_7126(void) = ConditionalBranch : r35_7125 #-----| False -> Block 510 #-----| True (back edge) -> Block 509 -# 1546| Block 510 -# 1546| r1546_1(glval) = VariableAddress[x509] : -# 1546| mu1546_2(String) = Uninitialized[x509] : &:r1546_1 -# 1546| r1546_3(glval) = FunctionAddress[String] : -# 1546| v1546_4(void) = Call[String] : func:r1546_3, this:r1546_1 -# 1546| mu1546_5(unknown) = ^CallSideEffect : ~m? -# 1546| mu1546_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1546_1 -# 1547| r1547_1(glval) = VariableAddress[x509] : -# 1547| r1547_2(glval) = FunctionAddress[~String] : -# 1547| v1547_3(void) = Call[~String] : func:r1547_2, this:r1547_1 -# 1547| mu1547_4(unknown) = ^CallSideEffect : ~m? -# 1547| v1547_5(void) = ^IndirectReadSideEffect[-1] : &:r1547_1, ~m? -# 1547| mu1547_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1547_1 -# 1547| r1547_7(bool) = Constant[0] : -# 1547| v1547_8(void) = ConditionalBranch : r1547_7 +# 35| Block 510 +# 35| r35_7127(glval) = VariableAddress[x509] : +# 35| mu35_7128(String) = Uninitialized[x509] : &:r35_7127 +# 35| r35_7129(glval) = FunctionAddress[String] : +# 35| v35_7130(void) = Call[String] : func:r35_7129, this:r35_7127 +# 35| mu35_7131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7127 +# 35| r35_7133(glval) = VariableAddress[x509] : +# 35| r35_7134(glval) = FunctionAddress[~String] : +# 35| v35_7135(void) = Call[~String] : func:r35_7134, this:r35_7133 +# 35| mu35_7136(unknown) = ^CallSideEffect : ~m? +# 35| v35_7137(void) = ^IndirectReadSideEffect[-1] : &:r35_7133, ~m? +# 35| mu35_7138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7133 +# 35| r35_7139(bool) = Constant[0] : +# 35| v35_7140(void) = ConditionalBranch : r35_7139 #-----| False -> Block 511 #-----| True (back edge) -> Block 510 -# 1549| Block 511 -# 1549| r1549_1(glval) = VariableAddress[x510] : -# 1549| mu1549_2(String) = Uninitialized[x510] : &:r1549_1 -# 1549| r1549_3(glval) = FunctionAddress[String] : -# 1549| v1549_4(void) = Call[String] : func:r1549_3, this:r1549_1 -# 1549| mu1549_5(unknown) = ^CallSideEffect : ~m? -# 1549| mu1549_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1549_1 -# 1550| r1550_1(glval) = VariableAddress[x510] : -# 1550| r1550_2(glval) = FunctionAddress[~String] : -# 1550| v1550_3(void) = Call[~String] : func:r1550_2, this:r1550_1 -# 1550| mu1550_4(unknown) = ^CallSideEffect : ~m? -# 1550| v1550_5(void) = ^IndirectReadSideEffect[-1] : &:r1550_1, ~m? -# 1550| mu1550_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1550_1 -# 1550| r1550_7(bool) = Constant[0] : -# 1550| v1550_8(void) = ConditionalBranch : r1550_7 +# 35| Block 511 +# 35| r35_7141(glval) = VariableAddress[x510] : +# 35| mu35_7142(String) = Uninitialized[x510] : &:r35_7141 +# 35| r35_7143(glval) = FunctionAddress[String] : +# 35| v35_7144(void) = Call[String] : func:r35_7143, this:r35_7141 +# 35| mu35_7145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7141 +# 35| r35_7147(glval) = VariableAddress[x510] : +# 35| r35_7148(glval) = FunctionAddress[~String] : +# 35| v35_7149(void) = Call[~String] : func:r35_7148, this:r35_7147 +# 35| mu35_7150(unknown) = ^CallSideEffect : ~m? +# 35| v35_7151(void) = ^IndirectReadSideEffect[-1] : &:r35_7147, ~m? +# 35| mu35_7152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7147 +# 35| r35_7153(bool) = Constant[0] : +# 35| v35_7154(void) = ConditionalBranch : r35_7153 #-----| False -> Block 512 #-----| True (back edge) -> Block 511 -# 1552| Block 512 -# 1552| r1552_1(glval) = VariableAddress[x511] : -# 1552| mu1552_2(String) = Uninitialized[x511] : &:r1552_1 -# 1552| r1552_3(glval) = FunctionAddress[String] : -# 1552| v1552_4(void) = Call[String] : func:r1552_3, this:r1552_1 -# 1552| mu1552_5(unknown) = ^CallSideEffect : ~m? -# 1552| mu1552_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1552_1 -# 1553| r1553_1(glval) = VariableAddress[x511] : -# 1553| r1553_2(glval) = FunctionAddress[~String] : -# 1553| v1553_3(void) = Call[~String] : func:r1553_2, this:r1553_1 -# 1553| mu1553_4(unknown) = ^CallSideEffect : ~m? -# 1553| v1553_5(void) = ^IndirectReadSideEffect[-1] : &:r1553_1, ~m? -# 1553| mu1553_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1553_1 -# 1553| r1553_7(bool) = Constant[0] : -# 1553| v1553_8(void) = ConditionalBranch : r1553_7 +# 35| Block 512 +# 35| r35_7155(glval) = VariableAddress[x511] : +# 35| mu35_7156(String) = Uninitialized[x511] : &:r35_7155 +# 35| r35_7157(glval) = FunctionAddress[String] : +# 35| v35_7158(void) = Call[String] : func:r35_7157, this:r35_7155 +# 35| mu35_7159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7155 +# 35| r35_7161(glval) = VariableAddress[x511] : +# 35| r35_7162(glval) = FunctionAddress[~String] : +# 35| v35_7163(void) = Call[~String] : func:r35_7162, this:r35_7161 +# 35| mu35_7164(unknown) = ^CallSideEffect : ~m? +# 35| v35_7165(void) = ^IndirectReadSideEffect[-1] : &:r35_7161, ~m? +# 35| mu35_7166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7161 +# 35| r35_7167(bool) = Constant[0] : +# 35| v35_7168(void) = ConditionalBranch : r35_7167 #-----| False -> Block 513 #-----| True (back edge) -> Block 512 -# 1555| Block 513 -# 1555| r1555_1(glval) = VariableAddress[x512] : -# 1555| mu1555_2(String) = Uninitialized[x512] : &:r1555_1 -# 1555| r1555_3(glval) = FunctionAddress[String] : -# 1555| v1555_4(void) = Call[String] : func:r1555_3, this:r1555_1 -# 1555| mu1555_5(unknown) = ^CallSideEffect : ~m? -# 1555| mu1555_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1555_1 -# 1556| r1556_1(glval) = VariableAddress[x512] : -# 1556| r1556_2(glval) = FunctionAddress[~String] : -# 1556| v1556_3(void) = Call[~String] : func:r1556_2, this:r1556_1 -# 1556| mu1556_4(unknown) = ^CallSideEffect : ~m? -# 1556| v1556_5(void) = ^IndirectReadSideEffect[-1] : &:r1556_1, ~m? -# 1556| mu1556_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1556_1 -# 1556| r1556_7(bool) = Constant[0] : -# 1556| v1556_8(void) = ConditionalBranch : r1556_7 +# 35| Block 513 +# 35| r35_7169(glval) = VariableAddress[x512] : +# 35| mu35_7170(String) = Uninitialized[x512] : &:r35_7169 +# 35| r35_7171(glval) = FunctionAddress[String] : +# 35| v35_7172(void) = Call[String] : func:r35_7171, this:r35_7169 +# 35| mu35_7173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7169 +# 35| r35_7175(glval) = VariableAddress[x512] : +# 35| r35_7176(glval) = FunctionAddress[~String] : +# 35| v35_7177(void) = Call[~String] : func:r35_7176, this:r35_7175 +# 35| mu35_7178(unknown) = ^CallSideEffect : ~m? +# 35| v35_7179(void) = ^IndirectReadSideEffect[-1] : &:r35_7175, ~m? +# 35| mu35_7180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7175 +# 35| r35_7181(bool) = Constant[0] : +# 35| v35_7182(void) = ConditionalBranch : r35_7181 #-----| False -> Block 514 #-----| True (back edge) -> Block 513 -# 1558| Block 514 -# 1558| r1558_1(glval) = VariableAddress[x513] : -# 1558| mu1558_2(String) = Uninitialized[x513] : &:r1558_1 -# 1558| r1558_3(glval) = FunctionAddress[String] : -# 1558| v1558_4(void) = Call[String] : func:r1558_3, this:r1558_1 -# 1558| mu1558_5(unknown) = ^CallSideEffect : ~m? -# 1558| mu1558_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1558_1 -# 1559| r1559_1(glval) = VariableAddress[x513] : -# 1559| r1559_2(glval) = FunctionAddress[~String] : -# 1559| v1559_3(void) = Call[~String] : func:r1559_2, this:r1559_1 -# 1559| mu1559_4(unknown) = ^CallSideEffect : ~m? -# 1559| v1559_5(void) = ^IndirectReadSideEffect[-1] : &:r1559_1, ~m? -# 1559| mu1559_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1559_1 -# 1559| r1559_7(bool) = Constant[0] : -# 1559| v1559_8(void) = ConditionalBranch : r1559_7 +# 35| Block 514 +# 35| r35_7183(glval) = VariableAddress[x513] : +# 35| mu35_7184(String) = Uninitialized[x513] : &:r35_7183 +# 35| r35_7185(glval) = FunctionAddress[String] : +# 35| v35_7186(void) = Call[String] : func:r35_7185, this:r35_7183 +# 35| mu35_7187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7183 +# 35| r35_7189(glval) = VariableAddress[x513] : +# 35| r35_7190(glval) = FunctionAddress[~String] : +# 35| v35_7191(void) = Call[~String] : func:r35_7190, this:r35_7189 +# 35| mu35_7192(unknown) = ^CallSideEffect : ~m? +# 35| v35_7193(void) = ^IndirectReadSideEffect[-1] : &:r35_7189, ~m? +# 35| mu35_7194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7189 +# 35| r35_7195(bool) = Constant[0] : +# 35| v35_7196(void) = ConditionalBranch : r35_7195 #-----| False -> Block 515 #-----| True (back edge) -> Block 514 -# 1561| Block 515 -# 1561| r1561_1(glval) = VariableAddress[x514] : -# 1561| mu1561_2(String) = Uninitialized[x514] : &:r1561_1 -# 1561| r1561_3(glval) = FunctionAddress[String] : -# 1561| v1561_4(void) = Call[String] : func:r1561_3, this:r1561_1 -# 1561| mu1561_5(unknown) = ^CallSideEffect : ~m? -# 1561| mu1561_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1561_1 -# 1562| r1562_1(glval) = VariableAddress[x514] : -# 1562| r1562_2(glval) = FunctionAddress[~String] : -# 1562| v1562_3(void) = Call[~String] : func:r1562_2, this:r1562_1 -# 1562| mu1562_4(unknown) = ^CallSideEffect : ~m? -# 1562| v1562_5(void) = ^IndirectReadSideEffect[-1] : &:r1562_1, ~m? -# 1562| mu1562_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1562_1 -# 1562| r1562_7(bool) = Constant[0] : -# 1562| v1562_8(void) = ConditionalBranch : r1562_7 +# 35| Block 515 +# 35| r35_7197(glval) = VariableAddress[x514] : +# 35| mu35_7198(String) = Uninitialized[x514] : &:r35_7197 +# 35| r35_7199(glval) = FunctionAddress[String] : +# 35| v35_7200(void) = Call[String] : func:r35_7199, this:r35_7197 +# 35| mu35_7201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7197 +# 35| r35_7203(glval) = VariableAddress[x514] : +# 35| r35_7204(glval) = FunctionAddress[~String] : +# 35| v35_7205(void) = Call[~String] : func:r35_7204, this:r35_7203 +# 35| mu35_7206(unknown) = ^CallSideEffect : ~m? +# 35| v35_7207(void) = ^IndirectReadSideEffect[-1] : &:r35_7203, ~m? +# 35| mu35_7208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7203 +# 35| r35_7209(bool) = Constant[0] : +# 35| v35_7210(void) = ConditionalBranch : r35_7209 #-----| False -> Block 516 #-----| True (back edge) -> Block 515 -# 1564| Block 516 -# 1564| r1564_1(glval) = VariableAddress[x515] : -# 1564| mu1564_2(String) = Uninitialized[x515] : &:r1564_1 -# 1564| r1564_3(glval) = FunctionAddress[String] : -# 1564| v1564_4(void) = Call[String] : func:r1564_3, this:r1564_1 -# 1564| mu1564_5(unknown) = ^CallSideEffect : ~m? -# 1564| mu1564_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1564_1 -# 1565| r1565_1(glval) = VariableAddress[x515] : -# 1565| r1565_2(glval) = FunctionAddress[~String] : -# 1565| v1565_3(void) = Call[~String] : func:r1565_2, this:r1565_1 -# 1565| mu1565_4(unknown) = ^CallSideEffect : ~m? -# 1565| v1565_5(void) = ^IndirectReadSideEffect[-1] : &:r1565_1, ~m? -# 1565| mu1565_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1565_1 -# 1565| r1565_7(bool) = Constant[0] : -# 1565| v1565_8(void) = ConditionalBranch : r1565_7 +# 35| Block 516 +# 35| r35_7211(glval) = VariableAddress[x515] : +# 35| mu35_7212(String) = Uninitialized[x515] : &:r35_7211 +# 35| r35_7213(glval) = FunctionAddress[String] : +# 35| v35_7214(void) = Call[String] : func:r35_7213, this:r35_7211 +# 35| mu35_7215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7211 +# 35| r35_7217(glval) = VariableAddress[x515] : +# 35| r35_7218(glval) = FunctionAddress[~String] : +# 35| v35_7219(void) = Call[~String] : func:r35_7218, this:r35_7217 +# 35| mu35_7220(unknown) = ^CallSideEffect : ~m? +# 35| v35_7221(void) = ^IndirectReadSideEffect[-1] : &:r35_7217, ~m? +# 35| mu35_7222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7217 +# 35| r35_7223(bool) = Constant[0] : +# 35| v35_7224(void) = ConditionalBranch : r35_7223 #-----| False -> Block 517 #-----| True (back edge) -> Block 516 -# 1567| Block 517 -# 1567| r1567_1(glval) = VariableAddress[x516] : -# 1567| mu1567_2(String) = Uninitialized[x516] : &:r1567_1 -# 1567| r1567_3(glval) = FunctionAddress[String] : -# 1567| v1567_4(void) = Call[String] : func:r1567_3, this:r1567_1 -# 1567| mu1567_5(unknown) = ^CallSideEffect : ~m? -# 1567| mu1567_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1567_1 -# 1568| r1568_1(glval) = VariableAddress[x516] : -# 1568| r1568_2(glval) = FunctionAddress[~String] : -# 1568| v1568_3(void) = Call[~String] : func:r1568_2, this:r1568_1 -# 1568| mu1568_4(unknown) = ^CallSideEffect : ~m? -# 1568| v1568_5(void) = ^IndirectReadSideEffect[-1] : &:r1568_1, ~m? -# 1568| mu1568_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1568_1 -# 1568| r1568_7(bool) = Constant[0] : -# 1568| v1568_8(void) = ConditionalBranch : r1568_7 +# 35| Block 517 +# 35| r35_7225(glval) = VariableAddress[x516] : +# 35| mu35_7226(String) = Uninitialized[x516] : &:r35_7225 +# 35| r35_7227(glval) = FunctionAddress[String] : +# 35| v35_7228(void) = Call[String] : func:r35_7227, this:r35_7225 +# 35| mu35_7229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7225 +# 35| r35_7231(glval) = VariableAddress[x516] : +# 35| r35_7232(glval) = FunctionAddress[~String] : +# 35| v35_7233(void) = Call[~String] : func:r35_7232, this:r35_7231 +# 35| mu35_7234(unknown) = ^CallSideEffect : ~m? +# 35| v35_7235(void) = ^IndirectReadSideEffect[-1] : &:r35_7231, ~m? +# 35| mu35_7236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7231 +# 35| r35_7237(bool) = Constant[0] : +# 35| v35_7238(void) = ConditionalBranch : r35_7237 #-----| False -> Block 518 #-----| True (back edge) -> Block 517 -# 1570| Block 518 -# 1570| r1570_1(glval) = VariableAddress[x517] : -# 1570| mu1570_2(String) = Uninitialized[x517] : &:r1570_1 -# 1570| r1570_3(glval) = FunctionAddress[String] : -# 1570| v1570_4(void) = Call[String] : func:r1570_3, this:r1570_1 -# 1570| mu1570_5(unknown) = ^CallSideEffect : ~m? -# 1570| mu1570_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1570_1 -# 1571| r1571_1(glval) = VariableAddress[x517] : -# 1571| r1571_2(glval) = FunctionAddress[~String] : -# 1571| v1571_3(void) = Call[~String] : func:r1571_2, this:r1571_1 -# 1571| mu1571_4(unknown) = ^CallSideEffect : ~m? -# 1571| v1571_5(void) = ^IndirectReadSideEffect[-1] : &:r1571_1, ~m? -# 1571| mu1571_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1571_1 -# 1571| r1571_7(bool) = Constant[0] : -# 1571| v1571_8(void) = ConditionalBranch : r1571_7 +# 35| Block 518 +# 35| r35_7239(glval) = VariableAddress[x517] : +# 35| mu35_7240(String) = Uninitialized[x517] : &:r35_7239 +# 35| r35_7241(glval) = FunctionAddress[String] : +# 35| v35_7242(void) = Call[String] : func:r35_7241, this:r35_7239 +# 35| mu35_7243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7239 +# 35| r35_7245(glval) = VariableAddress[x517] : +# 35| r35_7246(glval) = FunctionAddress[~String] : +# 35| v35_7247(void) = Call[~String] : func:r35_7246, this:r35_7245 +# 35| mu35_7248(unknown) = ^CallSideEffect : ~m? +# 35| v35_7249(void) = ^IndirectReadSideEffect[-1] : &:r35_7245, ~m? +# 35| mu35_7250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7245 +# 35| r35_7251(bool) = Constant[0] : +# 35| v35_7252(void) = ConditionalBranch : r35_7251 #-----| False -> Block 519 #-----| True (back edge) -> Block 518 -# 1573| Block 519 -# 1573| r1573_1(glval) = VariableAddress[x518] : -# 1573| mu1573_2(String) = Uninitialized[x518] : &:r1573_1 -# 1573| r1573_3(glval) = FunctionAddress[String] : -# 1573| v1573_4(void) = Call[String] : func:r1573_3, this:r1573_1 -# 1573| mu1573_5(unknown) = ^CallSideEffect : ~m? -# 1573| mu1573_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1573_1 -# 1574| r1574_1(glval) = VariableAddress[x518] : -# 1574| r1574_2(glval) = FunctionAddress[~String] : -# 1574| v1574_3(void) = Call[~String] : func:r1574_2, this:r1574_1 -# 1574| mu1574_4(unknown) = ^CallSideEffect : ~m? -# 1574| v1574_5(void) = ^IndirectReadSideEffect[-1] : &:r1574_1, ~m? -# 1574| mu1574_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1574_1 -# 1574| r1574_7(bool) = Constant[0] : -# 1574| v1574_8(void) = ConditionalBranch : r1574_7 +# 35| Block 519 +# 35| r35_7253(glval) = VariableAddress[x518] : +# 35| mu35_7254(String) = Uninitialized[x518] : &:r35_7253 +# 35| r35_7255(glval) = FunctionAddress[String] : +# 35| v35_7256(void) = Call[String] : func:r35_7255, this:r35_7253 +# 35| mu35_7257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7253 +# 35| r35_7259(glval) = VariableAddress[x518] : +# 35| r35_7260(glval) = FunctionAddress[~String] : +# 35| v35_7261(void) = Call[~String] : func:r35_7260, this:r35_7259 +# 35| mu35_7262(unknown) = ^CallSideEffect : ~m? +# 35| v35_7263(void) = ^IndirectReadSideEffect[-1] : &:r35_7259, ~m? +# 35| mu35_7264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7259 +# 35| r35_7265(bool) = Constant[0] : +# 35| v35_7266(void) = ConditionalBranch : r35_7265 #-----| False -> Block 520 #-----| True (back edge) -> Block 519 -# 1576| Block 520 -# 1576| r1576_1(glval) = VariableAddress[x519] : -# 1576| mu1576_2(String) = Uninitialized[x519] : &:r1576_1 -# 1576| r1576_3(glval) = FunctionAddress[String] : -# 1576| v1576_4(void) = Call[String] : func:r1576_3, this:r1576_1 -# 1576| mu1576_5(unknown) = ^CallSideEffect : ~m? -# 1576| mu1576_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1576_1 -# 1577| r1577_1(glval) = VariableAddress[x519] : -# 1577| r1577_2(glval) = FunctionAddress[~String] : -# 1577| v1577_3(void) = Call[~String] : func:r1577_2, this:r1577_1 -# 1577| mu1577_4(unknown) = ^CallSideEffect : ~m? -# 1577| v1577_5(void) = ^IndirectReadSideEffect[-1] : &:r1577_1, ~m? -# 1577| mu1577_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1577_1 -# 1577| r1577_7(bool) = Constant[0] : -# 1577| v1577_8(void) = ConditionalBranch : r1577_7 +# 35| Block 520 +# 35| r35_7267(glval) = VariableAddress[x519] : +# 35| mu35_7268(String) = Uninitialized[x519] : &:r35_7267 +# 35| r35_7269(glval) = FunctionAddress[String] : +# 35| v35_7270(void) = Call[String] : func:r35_7269, this:r35_7267 +# 35| mu35_7271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7267 +# 35| r35_7273(glval) = VariableAddress[x519] : +# 35| r35_7274(glval) = FunctionAddress[~String] : +# 35| v35_7275(void) = Call[~String] : func:r35_7274, this:r35_7273 +# 35| mu35_7276(unknown) = ^CallSideEffect : ~m? +# 35| v35_7277(void) = ^IndirectReadSideEffect[-1] : &:r35_7273, ~m? +# 35| mu35_7278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7273 +# 35| r35_7279(bool) = Constant[0] : +# 35| v35_7280(void) = ConditionalBranch : r35_7279 #-----| False -> Block 521 #-----| True (back edge) -> Block 520 -# 1579| Block 521 -# 1579| r1579_1(glval) = VariableAddress[x520] : -# 1579| mu1579_2(String) = Uninitialized[x520] : &:r1579_1 -# 1579| r1579_3(glval) = FunctionAddress[String] : -# 1579| v1579_4(void) = Call[String] : func:r1579_3, this:r1579_1 -# 1579| mu1579_5(unknown) = ^CallSideEffect : ~m? -# 1579| mu1579_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1579_1 -# 1580| r1580_1(glval) = VariableAddress[x520] : -# 1580| r1580_2(glval) = FunctionAddress[~String] : -# 1580| v1580_3(void) = Call[~String] : func:r1580_2, this:r1580_1 -# 1580| mu1580_4(unknown) = ^CallSideEffect : ~m? -# 1580| v1580_5(void) = ^IndirectReadSideEffect[-1] : &:r1580_1, ~m? -# 1580| mu1580_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1580| r1580_7(bool) = Constant[0] : -# 1580| v1580_8(void) = ConditionalBranch : r1580_7 +# 35| Block 521 +# 35| r35_7281(glval) = VariableAddress[x520] : +# 35| mu35_7282(String) = Uninitialized[x520] : &:r35_7281 +# 35| r35_7283(glval) = FunctionAddress[String] : +# 35| v35_7284(void) = Call[String] : func:r35_7283, this:r35_7281 +# 35| mu35_7285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7281 +# 35| r35_7287(glval) = VariableAddress[x520] : +# 35| r35_7288(glval) = FunctionAddress[~String] : +# 35| v35_7289(void) = Call[~String] : func:r35_7288, this:r35_7287 +# 35| mu35_7290(unknown) = ^CallSideEffect : ~m? +# 35| v35_7291(void) = ^IndirectReadSideEffect[-1] : &:r35_7287, ~m? +# 35| mu35_7292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7287 +# 35| r35_7293(bool) = Constant[0] : +# 35| v35_7294(void) = ConditionalBranch : r35_7293 #-----| False -> Block 522 #-----| True (back edge) -> Block 521 -# 1582| Block 522 -# 1582| r1582_1(glval) = VariableAddress[x521] : -# 1582| mu1582_2(String) = Uninitialized[x521] : &:r1582_1 -# 1582| r1582_3(glval) = FunctionAddress[String] : -# 1582| v1582_4(void) = Call[String] : func:r1582_3, this:r1582_1 -# 1582| mu1582_5(unknown) = ^CallSideEffect : ~m? -# 1582| mu1582_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 -# 1583| r1583_1(glval) = VariableAddress[x521] : -# 1583| r1583_2(glval) = FunctionAddress[~String] : -# 1583| v1583_3(void) = Call[~String] : func:r1583_2, this:r1583_1 -# 1583| mu1583_4(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_5(void) = ^IndirectReadSideEffect[-1] : &:r1583_1, ~m? -# 1583| mu1583_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1583_1 -# 1583| r1583_7(bool) = Constant[0] : -# 1583| v1583_8(void) = ConditionalBranch : r1583_7 +# 35| Block 522 +# 35| r35_7295(glval) = VariableAddress[x521] : +# 35| mu35_7296(String) = Uninitialized[x521] : &:r35_7295 +# 35| r35_7297(glval) = FunctionAddress[String] : +# 35| v35_7298(void) = Call[String] : func:r35_7297, this:r35_7295 +# 35| mu35_7299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7295 +# 35| r35_7301(glval) = VariableAddress[x521] : +# 35| r35_7302(glval) = FunctionAddress[~String] : +# 35| v35_7303(void) = Call[~String] : func:r35_7302, this:r35_7301 +# 35| mu35_7304(unknown) = ^CallSideEffect : ~m? +# 35| v35_7305(void) = ^IndirectReadSideEffect[-1] : &:r35_7301, ~m? +# 35| mu35_7306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7301 +# 35| r35_7307(bool) = Constant[0] : +# 35| v35_7308(void) = ConditionalBranch : r35_7307 #-----| False -> Block 523 #-----| True (back edge) -> Block 522 -# 1585| Block 523 -# 1585| r1585_1(glval) = VariableAddress[x522] : -# 1585| mu1585_2(String) = Uninitialized[x522] : &:r1585_1 -# 1585| r1585_3(glval) = FunctionAddress[String] : -# 1585| v1585_4(void) = Call[String] : func:r1585_3, this:r1585_1 -# 1585| mu1585_5(unknown) = ^CallSideEffect : ~m? -# 1585| mu1585_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1585_1 -# 1586| r1586_1(glval) = VariableAddress[x522] : -# 1586| r1586_2(glval) = FunctionAddress[~String] : -# 1586| v1586_3(void) = Call[~String] : func:r1586_2, this:r1586_1 -# 1586| mu1586_4(unknown) = ^CallSideEffect : ~m? -# 1586| v1586_5(void) = ^IndirectReadSideEffect[-1] : &:r1586_1, ~m? -# 1586| mu1586_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1586_1 -# 1586| r1586_7(bool) = Constant[0] : -# 1586| v1586_8(void) = ConditionalBranch : r1586_7 +# 35| Block 523 +# 35| r35_7309(glval) = VariableAddress[x522] : +# 35| mu35_7310(String) = Uninitialized[x522] : &:r35_7309 +# 35| r35_7311(glval) = FunctionAddress[String] : +# 35| v35_7312(void) = Call[String] : func:r35_7311, this:r35_7309 +# 35| mu35_7313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7309 +# 35| r35_7315(glval) = VariableAddress[x522] : +# 35| r35_7316(glval) = FunctionAddress[~String] : +# 35| v35_7317(void) = Call[~String] : func:r35_7316, this:r35_7315 +# 35| mu35_7318(unknown) = ^CallSideEffect : ~m? +# 35| v35_7319(void) = ^IndirectReadSideEffect[-1] : &:r35_7315, ~m? +# 35| mu35_7320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7315 +# 35| r35_7321(bool) = Constant[0] : +# 35| v35_7322(void) = ConditionalBranch : r35_7321 #-----| False -> Block 524 #-----| True (back edge) -> Block 523 -# 1588| Block 524 -# 1588| r1588_1(glval) = VariableAddress[x523] : -# 1588| mu1588_2(String) = Uninitialized[x523] : &:r1588_1 -# 1588| r1588_3(glval) = FunctionAddress[String] : -# 1588| v1588_4(void) = Call[String] : func:r1588_3, this:r1588_1 -# 1588| mu1588_5(unknown) = ^CallSideEffect : ~m? -# 1588| mu1588_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1588_1 -# 1589| r1589_1(glval) = VariableAddress[x523] : -# 1589| r1589_2(glval) = FunctionAddress[~String] : -# 1589| v1589_3(void) = Call[~String] : func:r1589_2, this:r1589_1 -# 1589| mu1589_4(unknown) = ^CallSideEffect : ~m? -# 1589| v1589_5(void) = ^IndirectReadSideEffect[-1] : &:r1589_1, ~m? -# 1589| mu1589_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1589_1 -# 1589| r1589_7(bool) = Constant[0] : -# 1589| v1589_8(void) = ConditionalBranch : r1589_7 +# 35| Block 524 +# 35| r35_7323(glval) = VariableAddress[x523] : +# 35| mu35_7324(String) = Uninitialized[x523] : &:r35_7323 +# 35| r35_7325(glval) = FunctionAddress[String] : +# 35| v35_7326(void) = Call[String] : func:r35_7325, this:r35_7323 +# 35| mu35_7327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7323 +# 35| r35_7329(glval) = VariableAddress[x523] : +# 35| r35_7330(glval) = FunctionAddress[~String] : +# 35| v35_7331(void) = Call[~String] : func:r35_7330, this:r35_7329 +# 35| mu35_7332(unknown) = ^CallSideEffect : ~m? +# 35| v35_7333(void) = ^IndirectReadSideEffect[-1] : &:r35_7329, ~m? +# 35| mu35_7334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7329 +# 35| r35_7335(bool) = Constant[0] : +# 35| v35_7336(void) = ConditionalBranch : r35_7335 #-----| False -> Block 525 #-----| True (back edge) -> Block 524 -# 1591| Block 525 -# 1591| r1591_1(glval) = VariableAddress[x524] : -# 1591| mu1591_2(String) = Uninitialized[x524] : &:r1591_1 -# 1591| r1591_3(glval) = FunctionAddress[String] : -# 1591| v1591_4(void) = Call[String] : func:r1591_3, this:r1591_1 -# 1591| mu1591_5(unknown) = ^CallSideEffect : ~m? -# 1591| mu1591_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1591_1 -# 1592| r1592_1(glval) = VariableAddress[x524] : -# 1592| r1592_2(glval) = FunctionAddress[~String] : -# 1592| v1592_3(void) = Call[~String] : func:r1592_2, this:r1592_1 -# 1592| mu1592_4(unknown) = ^CallSideEffect : ~m? -# 1592| v1592_5(void) = ^IndirectReadSideEffect[-1] : &:r1592_1, ~m? -# 1592| mu1592_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1592_1 -# 1592| r1592_7(bool) = Constant[0] : -# 1592| v1592_8(void) = ConditionalBranch : r1592_7 +# 35| Block 525 +# 35| r35_7337(glval) = VariableAddress[x524] : +# 35| mu35_7338(String) = Uninitialized[x524] : &:r35_7337 +# 35| r35_7339(glval) = FunctionAddress[String] : +# 35| v35_7340(void) = Call[String] : func:r35_7339, this:r35_7337 +# 35| mu35_7341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7337 +# 35| r35_7343(glval) = VariableAddress[x524] : +# 35| r35_7344(glval) = FunctionAddress[~String] : +# 35| v35_7345(void) = Call[~String] : func:r35_7344, this:r35_7343 +# 35| mu35_7346(unknown) = ^CallSideEffect : ~m? +# 35| v35_7347(void) = ^IndirectReadSideEffect[-1] : &:r35_7343, ~m? +# 35| mu35_7348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7343 +# 35| r35_7349(bool) = Constant[0] : +# 35| v35_7350(void) = ConditionalBranch : r35_7349 #-----| False -> Block 526 #-----| True (back edge) -> Block 525 -# 1594| Block 526 -# 1594| r1594_1(glval) = VariableAddress[x525] : -# 1594| mu1594_2(String) = Uninitialized[x525] : &:r1594_1 -# 1594| r1594_3(glval) = FunctionAddress[String] : -# 1594| v1594_4(void) = Call[String] : func:r1594_3, this:r1594_1 -# 1594| mu1594_5(unknown) = ^CallSideEffect : ~m? -# 1594| mu1594_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1594_1 -# 1595| r1595_1(glval) = VariableAddress[x525] : -# 1595| r1595_2(glval) = FunctionAddress[~String] : -# 1595| v1595_3(void) = Call[~String] : func:r1595_2, this:r1595_1 -# 1595| mu1595_4(unknown) = ^CallSideEffect : ~m? -# 1595| v1595_5(void) = ^IndirectReadSideEffect[-1] : &:r1595_1, ~m? -# 1595| mu1595_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1595_1 -# 1595| r1595_7(bool) = Constant[0] : -# 1595| v1595_8(void) = ConditionalBranch : r1595_7 +# 35| Block 526 +# 35| r35_7351(glval) = VariableAddress[x525] : +# 35| mu35_7352(String) = Uninitialized[x525] : &:r35_7351 +# 35| r35_7353(glval) = FunctionAddress[String] : +# 35| v35_7354(void) = Call[String] : func:r35_7353, this:r35_7351 +# 35| mu35_7355(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7351 +# 35| r35_7357(glval) = VariableAddress[x525] : +# 35| r35_7358(glval) = FunctionAddress[~String] : +# 35| v35_7359(void) = Call[~String] : func:r35_7358, this:r35_7357 +# 35| mu35_7360(unknown) = ^CallSideEffect : ~m? +# 35| v35_7361(void) = ^IndirectReadSideEffect[-1] : &:r35_7357, ~m? +# 35| mu35_7362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7357 +# 35| r35_7363(bool) = Constant[0] : +# 35| v35_7364(void) = ConditionalBranch : r35_7363 #-----| False -> Block 527 #-----| True (back edge) -> Block 526 -# 1597| Block 527 -# 1597| r1597_1(glval) = VariableAddress[x526] : -# 1597| mu1597_2(String) = Uninitialized[x526] : &:r1597_1 -# 1597| r1597_3(glval) = FunctionAddress[String] : -# 1597| v1597_4(void) = Call[String] : func:r1597_3, this:r1597_1 -# 1597| mu1597_5(unknown) = ^CallSideEffect : ~m? -# 1597| mu1597_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1597_1 -# 1598| r1598_1(glval) = VariableAddress[x526] : -# 1598| r1598_2(glval) = FunctionAddress[~String] : -# 1598| v1598_3(void) = Call[~String] : func:r1598_2, this:r1598_1 -# 1598| mu1598_4(unknown) = ^CallSideEffect : ~m? -# 1598| v1598_5(void) = ^IndirectReadSideEffect[-1] : &:r1598_1, ~m? -# 1598| mu1598_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1598_1 -# 1598| r1598_7(bool) = Constant[0] : -# 1598| v1598_8(void) = ConditionalBranch : r1598_7 +# 35| Block 527 +# 35| r35_7365(glval) = VariableAddress[x526] : +# 35| mu35_7366(String) = Uninitialized[x526] : &:r35_7365 +# 35| r35_7367(glval) = FunctionAddress[String] : +# 35| v35_7368(void) = Call[String] : func:r35_7367, this:r35_7365 +# 35| mu35_7369(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7365 +# 35| r35_7371(glval) = VariableAddress[x526] : +# 35| r35_7372(glval) = FunctionAddress[~String] : +# 35| v35_7373(void) = Call[~String] : func:r35_7372, this:r35_7371 +# 35| mu35_7374(unknown) = ^CallSideEffect : ~m? +# 35| v35_7375(void) = ^IndirectReadSideEffect[-1] : &:r35_7371, ~m? +# 35| mu35_7376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7371 +# 35| r35_7377(bool) = Constant[0] : +# 35| v35_7378(void) = ConditionalBranch : r35_7377 #-----| False -> Block 528 #-----| True (back edge) -> Block 527 -# 1600| Block 528 -# 1600| r1600_1(glval) = VariableAddress[x527] : -# 1600| mu1600_2(String) = Uninitialized[x527] : &:r1600_1 -# 1600| r1600_3(glval) = FunctionAddress[String] : -# 1600| v1600_4(void) = Call[String] : func:r1600_3, this:r1600_1 -# 1600| mu1600_5(unknown) = ^CallSideEffect : ~m? -# 1600| mu1600_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1600_1 -# 1601| r1601_1(glval) = VariableAddress[x527] : -# 1601| r1601_2(glval) = FunctionAddress[~String] : -# 1601| v1601_3(void) = Call[~String] : func:r1601_2, this:r1601_1 -# 1601| mu1601_4(unknown) = ^CallSideEffect : ~m? -# 1601| v1601_5(void) = ^IndirectReadSideEffect[-1] : &:r1601_1, ~m? -# 1601| mu1601_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1601_1 -# 1601| r1601_7(bool) = Constant[0] : -# 1601| v1601_8(void) = ConditionalBranch : r1601_7 +# 35| Block 528 +# 35| r35_7379(glval) = VariableAddress[x527] : +# 35| mu35_7380(String) = Uninitialized[x527] : &:r35_7379 +# 35| r35_7381(glval) = FunctionAddress[String] : +# 35| v35_7382(void) = Call[String] : func:r35_7381, this:r35_7379 +# 35| mu35_7383(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7379 +# 35| r35_7385(glval) = VariableAddress[x527] : +# 35| r35_7386(glval) = FunctionAddress[~String] : +# 35| v35_7387(void) = Call[~String] : func:r35_7386, this:r35_7385 +# 35| mu35_7388(unknown) = ^CallSideEffect : ~m? +# 35| v35_7389(void) = ^IndirectReadSideEffect[-1] : &:r35_7385, ~m? +# 35| mu35_7390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7385 +# 35| r35_7391(bool) = Constant[0] : +# 35| v35_7392(void) = ConditionalBranch : r35_7391 #-----| False -> Block 529 #-----| True (back edge) -> Block 528 -# 1603| Block 529 -# 1603| r1603_1(glval) = VariableAddress[x528] : -# 1603| mu1603_2(String) = Uninitialized[x528] : &:r1603_1 -# 1603| r1603_3(glval) = FunctionAddress[String] : -# 1603| v1603_4(void) = Call[String] : func:r1603_3, this:r1603_1 -# 1603| mu1603_5(unknown) = ^CallSideEffect : ~m? -# 1603| mu1603_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1603_1 -# 1604| r1604_1(glval) = VariableAddress[x528] : -# 1604| r1604_2(glval) = FunctionAddress[~String] : -# 1604| v1604_3(void) = Call[~String] : func:r1604_2, this:r1604_1 -# 1604| mu1604_4(unknown) = ^CallSideEffect : ~m? -# 1604| v1604_5(void) = ^IndirectReadSideEffect[-1] : &:r1604_1, ~m? -# 1604| mu1604_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1604_1 -# 1604| r1604_7(bool) = Constant[0] : -# 1604| v1604_8(void) = ConditionalBranch : r1604_7 +# 35| Block 529 +# 35| r35_7393(glval) = VariableAddress[x528] : +# 35| mu35_7394(String) = Uninitialized[x528] : &:r35_7393 +# 35| r35_7395(glval) = FunctionAddress[String] : +# 35| v35_7396(void) = Call[String] : func:r35_7395, this:r35_7393 +# 35| mu35_7397(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7393 +# 35| r35_7399(glval) = VariableAddress[x528] : +# 35| r35_7400(glval) = FunctionAddress[~String] : +# 35| v35_7401(void) = Call[~String] : func:r35_7400, this:r35_7399 +# 35| mu35_7402(unknown) = ^CallSideEffect : ~m? +# 35| v35_7403(void) = ^IndirectReadSideEffect[-1] : &:r35_7399, ~m? +# 35| mu35_7404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7399 +# 35| r35_7405(bool) = Constant[0] : +# 35| v35_7406(void) = ConditionalBranch : r35_7405 #-----| False -> Block 530 #-----| True (back edge) -> Block 529 -# 1606| Block 530 -# 1606| r1606_1(glval) = VariableAddress[x529] : -# 1606| mu1606_2(String) = Uninitialized[x529] : &:r1606_1 -# 1606| r1606_3(glval) = FunctionAddress[String] : -# 1606| v1606_4(void) = Call[String] : func:r1606_3, this:r1606_1 -# 1606| mu1606_5(unknown) = ^CallSideEffect : ~m? -# 1606| mu1606_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1606_1 -# 1607| r1607_1(glval) = VariableAddress[x529] : -# 1607| r1607_2(glval) = FunctionAddress[~String] : -# 1607| v1607_3(void) = Call[~String] : func:r1607_2, this:r1607_1 -# 1607| mu1607_4(unknown) = ^CallSideEffect : ~m? -# 1607| v1607_5(void) = ^IndirectReadSideEffect[-1] : &:r1607_1, ~m? -# 1607| mu1607_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1607_1 -# 1607| r1607_7(bool) = Constant[0] : -# 1607| v1607_8(void) = ConditionalBranch : r1607_7 +# 35| Block 530 +# 35| r35_7407(glval) = VariableAddress[x529] : +# 35| mu35_7408(String) = Uninitialized[x529] : &:r35_7407 +# 35| r35_7409(glval) = FunctionAddress[String] : +# 35| v35_7410(void) = Call[String] : func:r35_7409, this:r35_7407 +# 35| mu35_7411(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7407 +# 35| r35_7413(glval) = VariableAddress[x529] : +# 35| r35_7414(glval) = FunctionAddress[~String] : +# 35| v35_7415(void) = Call[~String] : func:r35_7414, this:r35_7413 +# 35| mu35_7416(unknown) = ^CallSideEffect : ~m? +# 35| v35_7417(void) = ^IndirectReadSideEffect[-1] : &:r35_7413, ~m? +# 35| mu35_7418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7413 +# 35| r35_7419(bool) = Constant[0] : +# 35| v35_7420(void) = ConditionalBranch : r35_7419 #-----| False -> Block 531 #-----| True (back edge) -> Block 530 -# 1609| Block 531 -# 1609| r1609_1(glval) = VariableAddress[x530] : -# 1609| mu1609_2(String) = Uninitialized[x530] : &:r1609_1 -# 1609| r1609_3(glval) = FunctionAddress[String] : -# 1609| v1609_4(void) = Call[String] : func:r1609_3, this:r1609_1 -# 1609| mu1609_5(unknown) = ^CallSideEffect : ~m? -# 1609| mu1609_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1609_1 -# 1610| r1610_1(glval) = VariableAddress[x530] : -# 1610| r1610_2(glval) = FunctionAddress[~String] : -# 1610| v1610_3(void) = Call[~String] : func:r1610_2, this:r1610_1 -# 1610| mu1610_4(unknown) = ^CallSideEffect : ~m? -# 1610| v1610_5(void) = ^IndirectReadSideEffect[-1] : &:r1610_1, ~m? -# 1610| mu1610_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1610_1 -# 1610| r1610_7(bool) = Constant[0] : -# 1610| v1610_8(void) = ConditionalBranch : r1610_7 +# 35| Block 531 +# 35| r35_7421(glval) = VariableAddress[x530] : +# 35| mu35_7422(String) = Uninitialized[x530] : &:r35_7421 +# 35| r35_7423(glval) = FunctionAddress[String] : +# 35| v35_7424(void) = Call[String] : func:r35_7423, this:r35_7421 +# 35| mu35_7425(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7421 +# 35| r35_7427(glval) = VariableAddress[x530] : +# 35| r35_7428(glval) = FunctionAddress[~String] : +# 35| v35_7429(void) = Call[~String] : func:r35_7428, this:r35_7427 +# 35| mu35_7430(unknown) = ^CallSideEffect : ~m? +# 35| v35_7431(void) = ^IndirectReadSideEffect[-1] : &:r35_7427, ~m? +# 35| mu35_7432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7427 +# 35| r35_7433(bool) = Constant[0] : +# 35| v35_7434(void) = ConditionalBranch : r35_7433 #-----| False -> Block 532 #-----| True (back edge) -> Block 531 -# 1612| Block 532 -# 1612| r1612_1(glval) = VariableAddress[x531] : -# 1612| mu1612_2(String) = Uninitialized[x531] : &:r1612_1 -# 1612| r1612_3(glval) = FunctionAddress[String] : -# 1612| v1612_4(void) = Call[String] : func:r1612_3, this:r1612_1 -# 1612| mu1612_5(unknown) = ^CallSideEffect : ~m? -# 1612| mu1612_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1612_1 -# 1613| r1613_1(glval) = VariableAddress[x531] : -# 1613| r1613_2(glval) = FunctionAddress[~String] : -# 1613| v1613_3(void) = Call[~String] : func:r1613_2, this:r1613_1 -# 1613| mu1613_4(unknown) = ^CallSideEffect : ~m? -# 1613| v1613_5(void) = ^IndirectReadSideEffect[-1] : &:r1613_1, ~m? -# 1613| mu1613_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1613_1 -# 1613| r1613_7(bool) = Constant[0] : -# 1613| v1613_8(void) = ConditionalBranch : r1613_7 +# 35| Block 532 +# 35| r35_7435(glval) = VariableAddress[x531] : +# 35| mu35_7436(String) = Uninitialized[x531] : &:r35_7435 +# 35| r35_7437(glval) = FunctionAddress[String] : +# 35| v35_7438(void) = Call[String] : func:r35_7437, this:r35_7435 +# 35| mu35_7439(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7435 +# 35| r35_7441(glval) = VariableAddress[x531] : +# 35| r35_7442(glval) = FunctionAddress[~String] : +# 35| v35_7443(void) = Call[~String] : func:r35_7442, this:r35_7441 +# 35| mu35_7444(unknown) = ^CallSideEffect : ~m? +# 35| v35_7445(void) = ^IndirectReadSideEffect[-1] : &:r35_7441, ~m? +# 35| mu35_7446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7441 +# 35| r35_7447(bool) = Constant[0] : +# 35| v35_7448(void) = ConditionalBranch : r35_7447 #-----| False -> Block 533 #-----| True (back edge) -> Block 532 -# 1615| Block 533 -# 1615| r1615_1(glval) = VariableAddress[x532] : -# 1615| mu1615_2(String) = Uninitialized[x532] : &:r1615_1 -# 1615| r1615_3(glval) = FunctionAddress[String] : -# 1615| v1615_4(void) = Call[String] : func:r1615_3, this:r1615_1 -# 1615| mu1615_5(unknown) = ^CallSideEffect : ~m? -# 1615| mu1615_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1615_1 -# 1616| r1616_1(glval) = VariableAddress[x532] : -# 1616| r1616_2(glval) = FunctionAddress[~String] : -# 1616| v1616_3(void) = Call[~String] : func:r1616_2, this:r1616_1 -# 1616| mu1616_4(unknown) = ^CallSideEffect : ~m? -# 1616| v1616_5(void) = ^IndirectReadSideEffect[-1] : &:r1616_1, ~m? -# 1616| mu1616_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1616_1 -# 1616| r1616_7(bool) = Constant[0] : -# 1616| v1616_8(void) = ConditionalBranch : r1616_7 +# 35| Block 533 +# 35| r35_7449(glval) = VariableAddress[x532] : +# 35| mu35_7450(String) = Uninitialized[x532] : &:r35_7449 +# 35| r35_7451(glval) = FunctionAddress[String] : +# 35| v35_7452(void) = Call[String] : func:r35_7451, this:r35_7449 +# 35| mu35_7453(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7449 +# 35| r35_7455(glval) = VariableAddress[x532] : +# 35| r35_7456(glval) = FunctionAddress[~String] : +# 35| v35_7457(void) = Call[~String] : func:r35_7456, this:r35_7455 +# 35| mu35_7458(unknown) = ^CallSideEffect : ~m? +# 35| v35_7459(void) = ^IndirectReadSideEffect[-1] : &:r35_7455, ~m? +# 35| mu35_7460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7455 +# 35| r35_7461(bool) = Constant[0] : +# 35| v35_7462(void) = ConditionalBranch : r35_7461 #-----| False -> Block 534 #-----| True (back edge) -> Block 533 -# 1618| Block 534 -# 1618| r1618_1(glval) = VariableAddress[x533] : -# 1618| mu1618_2(String) = Uninitialized[x533] : &:r1618_1 -# 1618| r1618_3(glval) = FunctionAddress[String] : -# 1618| v1618_4(void) = Call[String] : func:r1618_3, this:r1618_1 -# 1618| mu1618_5(unknown) = ^CallSideEffect : ~m? -# 1618| mu1618_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1618_1 -# 1619| r1619_1(glval) = VariableAddress[x533] : -# 1619| r1619_2(glval) = FunctionAddress[~String] : -# 1619| v1619_3(void) = Call[~String] : func:r1619_2, this:r1619_1 -# 1619| mu1619_4(unknown) = ^CallSideEffect : ~m? -# 1619| v1619_5(void) = ^IndirectReadSideEffect[-1] : &:r1619_1, ~m? -# 1619| mu1619_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1619_1 -# 1619| r1619_7(bool) = Constant[0] : -# 1619| v1619_8(void) = ConditionalBranch : r1619_7 +# 35| Block 534 +# 35| r35_7463(glval) = VariableAddress[x533] : +# 35| mu35_7464(String) = Uninitialized[x533] : &:r35_7463 +# 35| r35_7465(glval) = FunctionAddress[String] : +# 35| v35_7466(void) = Call[String] : func:r35_7465, this:r35_7463 +# 35| mu35_7467(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7463 +# 35| r35_7469(glval) = VariableAddress[x533] : +# 35| r35_7470(glval) = FunctionAddress[~String] : +# 35| v35_7471(void) = Call[~String] : func:r35_7470, this:r35_7469 +# 35| mu35_7472(unknown) = ^CallSideEffect : ~m? +# 35| v35_7473(void) = ^IndirectReadSideEffect[-1] : &:r35_7469, ~m? +# 35| mu35_7474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7469 +# 35| r35_7475(bool) = Constant[0] : +# 35| v35_7476(void) = ConditionalBranch : r35_7475 #-----| False -> Block 535 #-----| True (back edge) -> Block 534 -# 1621| Block 535 -# 1621| r1621_1(glval) = VariableAddress[x534] : -# 1621| mu1621_2(String) = Uninitialized[x534] : &:r1621_1 -# 1621| r1621_3(glval) = FunctionAddress[String] : -# 1621| v1621_4(void) = Call[String] : func:r1621_3, this:r1621_1 -# 1621| mu1621_5(unknown) = ^CallSideEffect : ~m? -# 1621| mu1621_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1621_1 -# 1622| r1622_1(glval) = VariableAddress[x534] : -# 1622| r1622_2(glval) = FunctionAddress[~String] : -# 1622| v1622_3(void) = Call[~String] : func:r1622_2, this:r1622_1 -# 1622| mu1622_4(unknown) = ^CallSideEffect : ~m? -# 1622| v1622_5(void) = ^IndirectReadSideEffect[-1] : &:r1622_1, ~m? -# 1622| mu1622_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1622_1 -# 1622| r1622_7(bool) = Constant[0] : -# 1622| v1622_8(void) = ConditionalBranch : r1622_7 +# 35| Block 535 +# 35| r35_7477(glval) = VariableAddress[x534] : +# 35| mu35_7478(String) = Uninitialized[x534] : &:r35_7477 +# 35| r35_7479(glval) = FunctionAddress[String] : +# 35| v35_7480(void) = Call[String] : func:r35_7479, this:r35_7477 +# 35| mu35_7481(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7477 +# 35| r35_7483(glval) = VariableAddress[x534] : +# 35| r35_7484(glval) = FunctionAddress[~String] : +# 35| v35_7485(void) = Call[~String] : func:r35_7484, this:r35_7483 +# 35| mu35_7486(unknown) = ^CallSideEffect : ~m? +# 35| v35_7487(void) = ^IndirectReadSideEffect[-1] : &:r35_7483, ~m? +# 35| mu35_7488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7483 +# 35| r35_7489(bool) = Constant[0] : +# 35| v35_7490(void) = ConditionalBranch : r35_7489 #-----| False -> Block 536 #-----| True (back edge) -> Block 535 -# 1624| Block 536 -# 1624| r1624_1(glval) = VariableAddress[x535] : -# 1624| mu1624_2(String) = Uninitialized[x535] : &:r1624_1 -# 1624| r1624_3(glval) = FunctionAddress[String] : -# 1624| v1624_4(void) = Call[String] : func:r1624_3, this:r1624_1 -# 1624| mu1624_5(unknown) = ^CallSideEffect : ~m? -# 1624| mu1624_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1624_1 -# 1625| r1625_1(glval) = VariableAddress[x535] : -# 1625| r1625_2(glval) = FunctionAddress[~String] : -# 1625| v1625_3(void) = Call[~String] : func:r1625_2, this:r1625_1 -# 1625| mu1625_4(unknown) = ^CallSideEffect : ~m? -# 1625| v1625_5(void) = ^IndirectReadSideEffect[-1] : &:r1625_1, ~m? -# 1625| mu1625_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1625_1 -# 1625| r1625_7(bool) = Constant[0] : -# 1625| v1625_8(void) = ConditionalBranch : r1625_7 +# 35| Block 536 +# 35| r35_7491(glval) = VariableAddress[x535] : +# 35| mu35_7492(String) = Uninitialized[x535] : &:r35_7491 +# 35| r35_7493(glval) = FunctionAddress[String] : +# 35| v35_7494(void) = Call[String] : func:r35_7493, this:r35_7491 +# 35| mu35_7495(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7491 +# 35| r35_7497(glval) = VariableAddress[x535] : +# 35| r35_7498(glval) = FunctionAddress[~String] : +# 35| v35_7499(void) = Call[~String] : func:r35_7498, this:r35_7497 +# 35| mu35_7500(unknown) = ^CallSideEffect : ~m? +# 35| v35_7501(void) = ^IndirectReadSideEffect[-1] : &:r35_7497, ~m? +# 35| mu35_7502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7497 +# 35| r35_7503(bool) = Constant[0] : +# 35| v35_7504(void) = ConditionalBranch : r35_7503 #-----| False -> Block 537 #-----| True (back edge) -> Block 536 -# 1627| Block 537 -# 1627| r1627_1(glval) = VariableAddress[x536] : -# 1627| mu1627_2(String) = Uninitialized[x536] : &:r1627_1 -# 1627| r1627_3(glval) = FunctionAddress[String] : -# 1627| v1627_4(void) = Call[String] : func:r1627_3, this:r1627_1 -# 1627| mu1627_5(unknown) = ^CallSideEffect : ~m? -# 1627| mu1627_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1627_1 -# 1628| r1628_1(glval) = VariableAddress[x536] : -# 1628| r1628_2(glval) = FunctionAddress[~String] : -# 1628| v1628_3(void) = Call[~String] : func:r1628_2, this:r1628_1 -# 1628| mu1628_4(unknown) = ^CallSideEffect : ~m? -# 1628| v1628_5(void) = ^IndirectReadSideEffect[-1] : &:r1628_1, ~m? -# 1628| mu1628_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1628_1 -# 1628| r1628_7(bool) = Constant[0] : -# 1628| v1628_8(void) = ConditionalBranch : r1628_7 +# 35| Block 537 +# 35| r35_7505(glval) = VariableAddress[x536] : +# 35| mu35_7506(String) = Uninitialized[x536] : &:r35_7505 +# 35| r35_7507(glval) = FunctionAddress[String] : +# 35| v35_7508(void) = Call[String] : func:r35_7507, this:r35_7505 +# 35| mu35_7509(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7505 +# 35| r35_7511(glval) = VariableAddress[x536] : +# 35| r35_7512(glval) = FunctionAddress[~String] : +# 35| v35_7513(void) = Call[~String] : func:r35_7512, this:r35_7511 +# 35| mu35_7514(unknown) = ^CallSideEffect : ~m? +# 35| v35_7515(void) = ^IndirectReadSideEffect[-1] : &:r35_7511, ~m? +# 35| mu35_7516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7511 +# 35| r35_7517(bool) = Constant[0] : +# 35| v35_7518(void) = ConditionalBranch : r35_7517 #-----| False -> Block 538 #-----| True (back edge) -> Block 537 -# 1630| Block 538 -# 1630| r1630_1(glval) = VariableAddress[x537] : -# 1630| mu1630_2(String) = Uninitialized[x537] : &:r1630_1 -# 1630| r1630_3(glval) = FunctionAddress[String] : -# 1630| v1630_4(void) = Call[String] : func:r1630_3, this:r1630_1 -# 1630| mu1630_5(unknown) = ^CallSideEffect : ~m? -# 1630| mu1630_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1630_1 -# 1631| r1631_1(glval) = VariableAddress[x537] : -# 1631| r1631_2(glval) = FunctionAddress[~String] : -# 1631| v1631_3(void) = Call[~String] : func:r1631_2, this:r1631_1 -# 1631| mu1631_4(unknown) = ^CallSideEffect : ~m? -# 1631| v1631_5(void) = ^IndirectReadSideEffect[-1] : &:r1631_1, ~m? -# 1631| mu1631_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1 -# 1631| r1631_7(bool) = Constant[0] : -# 1631| v1631_8(void) = ConditionalBranch : r1631_7 +# 35| Block 538 +# 35| r35_7519(glval) = VariableAddress[x537] : +# 35| mu35_7520(String) = Uninitialized[x537] : &:r35_7519 +# 35| r35_7521(glval) = FunctionAddress[String] : +# 35| v35_7522(void) = Call[String] : func:r35_7521, this:r35_7519 +# 35| mu35_7523(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7519 +# 35| r35_7525(glval) = VariableAddress[x537] : +# 35| r35_7526(glval) = FunctionAddress[~String] : +# 35| v35_7527(void) = Call[~String] : func:r35_7526, this:r35_7525 +# 35| mu35_7528(unknown) = ^CallSideEffect : ~m? +# 35| v35_7529(void) = ^IndirectReadSideEffect[-1] : &:r35_7525, ~m? +# 35| mu35_7530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7525 +# 35| r35_7531(bool) = Constant[0] : +# 35| v35_7532(void) = ConditionalBranch : r35_7531 #-----| False -> Block 539 #-----| True (back edge) -> Block 538 -# 1633| Block 539 -# 1633| r1633_1(glval) = VariableAddress[x538] : -# 1633| mu1633_2(String) = Uninitialized[x538] : &:r1633_1 -# 1633| r1633_3(glval) = FunctionAddress[String] : -# 1633| v1633_4(void) = Call[String] : func:r1633_3, this:r1633_1 -# 1633| mu1633_5(unknown) = ^CallSideEffect : ~m? -# 1633| mu1633_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1633_1 -# 1634| r1634_1(glval) = VariableAddress[x538] : -# 1634| r1634_2(glval) = FunctionAddress[~String] : -# 1634| v1634_3(void) = Call[~String] : func:r1634_2, this:r1634_1 -# 1634| mu1634_4(unknown) = ^CallSideEffect : ~m? -# 1634| v1634_5(void) = ^IndirectReadSideEffect[-1] : &:r1634_1, ~m? -# 1634| mu1634_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1634_1 -# 1634| r1634_7(bool) = Constant[0] : -# 1634| v1634_8(void) = ConditionalBranch : r1634_7 +# 35| Block 539 +# 35| r35_7533(glval) = VariableAddress[x538] : +# 35| mu35_7534(String) = Uninitialized[x538] : &:r35_7533 +# 35| r35_7535(glval) = FunctionAddress[String] : +# 35| v35_7536(void) = Call[String] : func:r35_7535, this:r35_7533 +# 35| mu35_7537(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7533 +# 35| r35_7539(glval) = VariableAddress[x538] : +# 35| r35_7540(glval) = FunctionAddress[~String] : +# 35| v35_7541(void) = Call[~String] : func:r35_7540, this:r35_7539 +# 35| mu35_7542(unknown) = ^CallSideEffect : ~m? +# 35| v35_7543(void) = ^IndirectReadSideEffect[-1] : &:r35_7539, ~m? +# 35| mu35_7544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7539 +# 35| r35_7545(bool) = Constant[0] : +# 35| v35_7546(void) = ConditionalBranch : r35_7545 #-----| False -> Block 540 #-----| True (back edge) -> Block 539 -# 1636| Block 540 -# 1636| r1636_1(glval) = VariableAddress[x539] : -# 1636| mu1636_2(String) = Uninitialized[x539] : &:r1636_1 -# 1636| r1636_3(glval) = FunctionAddress[String] : -# 1636| v1636_4(void) = Call[String] : func:r1636_3, this:r1636_1 -# 1636| mu1636_5(unknown) = ^CallSideEffect : ~m? -# 1636| mu1636_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1636_1 -# 1637| r1637_1(glval) = VariableAddress[x539] : -# 1637| r1637_2(glval) = FunctionAddress[~String] : -# 1637| v1637_3(void) = Call[~String] : func:r1637_2, this:r1637_1 -# 1637| mu1637_4(unknown) = ^CallSideEffect : ~m? -# 1637| v1637_5(void) = ^IndirectReadSideEffect[-1] : &:r1637_1, ~m? -# 1637| mu1637_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1637_1 -# 1637| r1637_7(bool) = Constant[0] : -# 1637| v1637_8(void) = ConditionalBranch : r1637_7 +# 35| Block 540 +# 35| r35_7547(glval) = VariableAddress[x539] : +# 35| mu35_7548(String) = Uninitialized[x539] : &:r35_7547 +# 35| r35_7549(glval) = FunctionAddress[String] : +# 35| v35_7550(void) = Call[String] : func:r35_7549, this:r35_7547 +# 35| mu35_7551(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7547 +# 35| r35_7553(glval) = VariableAddress[x539] : +# 35| r35_7554(glval) = FunctionAddress[~String] : +# 35| v35_7555(void) = Call[~String] : func:r35_7554, this:r35_7553 +# 35| mu35_7556(unknown) = ^CallSideEffect : ~m? +# 35| v35_7557(void) = ^IndirectReadSideEffect[-1] : &:r35_7553, ~m? +# 35| mu35_7558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7553 +# 35| r35_7559(bool) = Constant[0] : +# 35| v35_7560(void) = ConditionalBranch : r35_7559 #-----| False -> Block 541 #-----| True (back edge) -> Block 540 -# 1639| Block 541 -# 1639| r1639_1(glval) = VariableAddress[x540] : -# 1639| mu1639_2(String) = Uninitialized[x540] : &:r1639_1 -# 1639| r1639_3(glval) = FunctionAddress[String] : -# 1639| v1639_4(void) = Call[String] : func:r1639_3, this:r1639_1 -# 1639| mu1639_5(unknown) = ^CallSideEffect : ~m? -# 1639| mu1639_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1639_1 -# 1640| r1640_1(glval) = VariableAddress[x540] : -# 1640| r1640_2(glval) = FunctionAddress[~String] : -# 1640| v1640_3(void) = Call[~String] : func:r1640_2, this:r1640_1 -# 1640| mu1640_4(unknown) = ^CallSideEffect : ~m? -# 1640| v1640_5(void) = ^IndirectReadSideEffect[-1] : &:r1640_1, ~m? -# 1640| mu1640_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1640_1 -# 1640| r1640_7(bool) = Constant[0] : -# 1640| v1640_8(void) = ConditionalBranch : r1640_7 +# 35| Block 541 +# 35| r35_7561(glval) = VariableAddress[x540] : +# 35| mu35_7562(String) = Uninitialized[x540] : &:r35_7561 +# 35| r35_7563(glval) = FunctionAddress[String] : +# 35| v35_7564(void) = Call[String] : func:r35_7563, this:r35_7561 +# 35| mu35_7565(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7561 +# 35| r35_7567(glval) = VariableAddress[x540] : +# 35| r35_7568(glval) = FunctionAddress[~String] : +# 35| v35_7569(void) = Call[~String] : func:r35_7568, this:r35_7567 +# 35| mu35_7570(unknown) = ^CallSideEffect : ~m? +# 35| v35_7571(void) = ^IndirectReadSideEffect[-1] : &:r35_7567, ~m? +# 35| mu35_7572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7567 +# 35| r35_7573(bool) = Constant[0] : +# 35| v35_7574(void) = ConditionalBranch : r35_7573 #-----| False -> Block 542 #-----| True (back edge) -> Block 541 -# 1642| Block 542 -# 1642| r1642_1(glval) = VariableAddress[x541] : -# 1642| mu1642_2(String) = Uninitialized[x541] : &:r1642_1 -# 1642| r1642_3(glval) = FunctionAddress[String] : -# 1642| v1642_4(void) = Call[String] : func:r1642_3, this:r1642_1 -# 1642| mu1642_5(unknown) = ^CallSideEffect : ~m? -# 1642| mu1642_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1642_1 -# 1643| r1643_1(glval) = VariableAddress[x541] : -# 1643| r1643_2(glval) = FunctionAddress[~String] : -# 1643| v1643_3(void) = Call[~String] : func:r1643_2, this:r1643_1 -# 1643| mu1643_4(unknown) = ^CallSideEffect : ~m? -# 1643| v1643_5(void) = ^IndirectReadSideEffect[-1] : &:r1643_1, ~m? -# 1643| mu1643_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1643_1 -# 1643| r1643_7(bool) = Constant[0] : -# 1643| v1643_8(void) = ConditionalBranch : r1643_7 +# 35| Block 542 +# 35| r35_7575(glval) = VariableAddress[x541] : +# 35| mu35_7576(String) = Uninitialized[x541] : &:r35_7575 +# 35| r35_7577(glval) = FunctionAddress[String] : +# 35| v35_7578(void) = Call[String] : func:r35_7577, this:r35_7575 +# 35| mu35_7579(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7575 +# 35| r35_7581(glval) = VariableAddress[x541] : +# 35| r35_7582(glval) = FunctionAddress[~String] : +# 35| v35_7583(void) = Call[~String] : func:r35_7582, this:r35_7581 +# 35| mu35_7584(unknown) = ^CallSideEffect : ~m? +# 35| v35_7585(void) = ^IndirectReadSideEffect[-1] : &:r35_7581, ~m? +# 35| mu35_7586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7581 +# 35| r35_7587(bool) = Constant[0] : +# 35| v35_7588(void) = ConditionalBranch : r35_7587 #-----| False -> Block 543 #-----| True (back edge) -> Block 542 -# 1645| Block 543 -# 1645| r1645_1(glval) = VariableAddress[x542] : -# 1645| mu1645_2(String) = Uninitialized[x542] : &:r1645_1 -# 1645| r1645_3(glval) = FunctionAddress[String] : -# 1645| v1645_4(void) = Call[String] : func:r1645_3, this:r1645_1 -# 1645| mu1645_5(unknown) = ^CallSideEffect : ~m? -# 1645| mu1645_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1645_1 -# 1646| r1646_1(glval) = VariableAddress[x542] : -# 1646| r1646_2(glval) = FunctionAddress[~String] : -# 1646| v1646_3(void) = Call[~String] : func:r1646_2, this:r1646_1 -# 1646| mu1646_4(unknown) = ^CallSideEffect : ~m? -# 1646| v1646_5(void) = ^IndirectReadSideEffect[-1] : &:r1646_1, ~m? -# 1646| mu1646_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1646| r1646_7(bool) = Constant[0] : -# 1646| v1646_8(void) = ConditionalBranch : r1646_7 +# 35| Block 543 +# 35| r35_7589(glval) = VariableAddress[x542] : +# 35| mu35_7590(String) = Uninitialized[x542] : &:r35_7589 +# 35| r35_7591(glval) = FunctionAddress[String] : +# 35| v35_7592(void) = Call[String] : func:r35_7591, this:r35_7589 +# 35| mu35_7593(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7589 +# 35| r35_7595(glval) = VariableAddress[x542] : +# 35| r35_7596(glval) = FunctionAddress[~String] : +# 35| v35_7597(void) = Call[~String] : func:r35_7596, this:r35_7595 +# 35| mu35_7598(unknown) = ^CallSideEffect : ~m? +# 35| v35_7599(void) = ^IndirectReadSideEffect[-1] : &:r35_7595, ~m? +# 35| mu35_7600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7595 +# 35| r35_7601(bool) = Constant[0] : +# 35| v35_7602(void) = ConditionalBranch : r35_7601 #-----| False -> Block 544 #-----| True (back edge) -> Block 543 -# 1648| Block 544 -# 1648| r1648_1(glval) = VariableAddress[x543] : -# 1648| mu1648_2(String) = Uninitialized[x543] : &:r1648_1 -# 1648| r1648_3(glval) = FunctionAddress[String] : -# 1648| v1648_4(void) = Call[String] : func:r1648_3, this:r1648_1 -# 1648| mu1648_5(unknown) = ^CallSideEffect : ~m? -# 1648| mu1648_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 -# 1649| r1649_1(glval) = VariableAddress[x543] : -# 1649| r1649_2(glval) = FunctionAddress[~String] : -# 1649| v1649_3(void) = Call[~String] : func:r1649_2, this:r1649_1 -# 1649| mu1649_4(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_5(void) = ^IndirectReadSideEffect[-1] : &:r1649_1, ~m? -# 1649| mu1649_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1649_1 -# 1649| r1649_7(bool) = Constant[0] : -# 1649| v1649_8(void) = ConditionalBranch : r1649_7 +# 35| Block 544 +# 35| r35_7603(glval) = VariableAddress[x543] : +# 35| mu35_7604(String) = Uninitialized[x543] : &:r35_7603 +# 35| r35_7605(glval) = FunctionAddress[String] : +# 35| v35_7606(void) = Call[String] : func:r35_7605, this:r35_7603 +# 35| mu35_7607(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7603 +# 35| r35_7609(glval) = VariableAddress[x543] : +# 35| r35_7610(glval) = FunctionAddress[~String] : +# 35| v35_7611(void) = Call[~String] : func:r35_7610, this:r35_7609 +# 35| mu35_7612(unknown) = ^CallSideEffect : ~m? +# 35| v35_7613(void) = ^IndirectReadSideEffect[-1] : &:r35_7609, ~m? +# 35| mu35_7614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7609 +# 35| r35_7615(bool) = Constant[0] : +# 35| v35_7616(void) = ConditionalBranch : r35_7615 #-----| False -> Block 545 #-----| True (back edge) -> Block 544 -# 1651| Block 545 -# 1651| r1651_1(glval) = VariableAddress[x544] : -# 1651| mu1651_2(String) = Uninitialized[x544] : &:r1651_1 -# 1651| r1651_3(glval) = FunctionAddress[String] : -# 1651| v1651_4(void) = Call[String] : func:r1651_3, this:r1651_1 -# 1651| mu1651_5(unknown) = ^CallSideEffect : ~m? -# 1651| mu1651_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1651_1 -# 1652| r1652_1(glval) = VariableAddress[x544] : -# 1652| r1652_2(glval) = FunctionAddress[~String] : -# 1652| v1652_3(void) = Call[~String] : func:r1652_2, this:r1652_1 -# 1652| mu1652_4(unknown) = ^CallSideEffect : ~m? -# 1652| v1652_5(void) = ^IndirectReadSideEffect[-1] : &:r1652_1, ~m? -# 1652| mu1652_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1652_1 -# 1652| r1652_7(bool) = Constant[0] : -# 1652| v1652_8(void) = ConditionalBranch : r1652_7 +# 35| Block 545 +# 35| r35_7617(glval) = VariableAddress[x544] : +# 35| mu35_7618(String) = Uninitialized[x544] : &:r35_7617 +# 35| r35_7619(glval) = FunctionAddress[String] : +# 35| v35_7620(void) = Call[String] : func:r35_7619, this:r35_7617 +# 35| mu35_7621(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7617 +# 35| r35_7623(glval) = VariableAddress[x544] : +# 35| r35_7624(glval) = FunctionAddress[~String] : +# 35| v35_7625(void) = Call[~String] : func:r35_7624, this:r35_7623 +# 35| mu35_7626(unknown) = ^CallSideEffect : ~m? +# 35| v35_7627(void) = ^IndirectReadSideEffect[-1] : &:r35_7623, ~m? +# 35| mu35_7628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7623 +# 35| r35_7629(bool) = Constant[0] : +# 35| v35_7630(void) = ConditionalBranch : r35_7629 #-----| False -> Block 546 #-----| True (back edge) -> Block 545 -# 1654| Block 546 -# 1654| r1654_1(glval) = VariableAddress[x545] : -# 1654| mu1654_2(String) = Uninitialized[x545] : &:r1654_1 -# 1654| r1654_3(glval) = FunctionAddress[String] : -# 1654| v1654_4(void) = Call[String] : func:r1654_3, this:r1654_1 -# 1654| mu1654_5(unknown) = ^CallSideEffect : ~m? -# 1654| mu1654_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1654_1 -# 1655| r1655_1(glval) = VariableAddress[x545] : -# 1655| r1655_2(glval) = FunctionAddress[~String] : -# 1655| v1655_3(void) = Call[~String] : func:r1655_2, this:r1655_1 -# 1655| mu1655_4(unknown) = ^CallSideEffect : ~m? -# 1655| v1655_5(void) = ^IndirectReadSideEffect[-1] : &:r1655_1, ~m? -# 1655| mu1655_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1655_1 -# 1655| r1655_7(bool) = Constant[0] : -# 1655| v1655_8(void) = ConditionalBranch : r1655_7 +# 35| Block 546 +# 35| r35_7631(glval) = VariableAddress[x545] : +# 35| mu35_7632(String) = Uninitialized[x545] : &:r35_7631 +# 35| r35_7633(glval) = FunctionAddress[String] : +# 35| v35_7634(void) = Call[String] : func:r35_7633, this:r35_7631 +# 35| mu35_7635(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7631 +# 35| r35_7637(glval) = VariableAddress[x545] : +# 35| r35_7638(glval) = FunctionAddress[~String] : +# 35| v35_7639(void) = Call[~String] : func:r35_7638, this:r35_7637 +# 35| mu35_7640(unknown) = ^CallSideEffect : ~m? +# 35| v35_7641(void) = ^IndirectReadSideEffect[-1] : &:r35_7637, ~m? +# 35| mu35_7642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7637 +# 35| r35_7643(bool) = Constant[0] : +# 35| v35_7644(void) = ConditionalBranch : r35_7643 #-----| False -> Block 547 #-----| True (back edge) -> Block 546 -# 1657| Block 547 -# 1657| r1657_1(glval) = VariableAddress[x546] : -# 1657| mu1657_2(String) = Uninitialized[x546] : &:r1657_1 -# 1657| r1657_3(glval) = FunctionAddress[String] : -# 1657| v1657_4(void) = Call[String] : func:r1657_3, this:r1657_1 -# 1657| mu1657_5(unknown) = ^CallSideEffect : ~m? -# 1657| mu1657_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1657_1 -# 1658| r1658_1(glval) = VariableAddress[x546] : -# 1658| r1658_2(glval) = FunctionAddress[~String] : -# 1658| v1658_3(void) = Call[~String] : func:r1658_2, this:r1658_1 -# 1658| mu1658_4(unknown) = ^CallSideEffect : ~m? -# 1658| v1658_5(void) = ^IndirectReadSideEffect[-1] : &:r1658_1, ~m? -# 1658| mu1658_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1658_1 -# 1658| r1658_7(bool) = Constant[0] : -# 1658| v1658_8(void) = ConditionalBranch : r1658_7 +# 35| Block 547 +# 35| r35_7645(glval) = VariableAddress[x546] : +# 35| mu35_7646(String) = Uninitialized[x546] : &:r35_7645 +# 35| r35_7647(glval) = FunctionAddress[String] : +# 35| v35_7648(void) = Call[String] : func:r35_7647, this:r35_7645 +# 35| mu35_7649(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7645 +# 35| r35_7651(glval) = VariableAddress[x546] : +# 35| r35_7652(glval) = FunctionAddress[~String] : +# 35| v35_7653(void) = Call[~String] : func:r35_7652, this:r35_7651 +# 35| mu35_7654(unknown) = ^CallSideEffect : ~m? +# 35| v35_7655(void) = ^IndirectReadSideEffect[-1] : &:r35_7651, ~m? +# 35| mu35_7656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7651 +# 35| r35_7657(bool) = Constant[0] : +# 35| v35_7658(void) = ConditionalBranch : r35_7657 #-----| False -> Block 548 #-----| True (back edge) -> Block 547 -# 1660| Block 548 -# 1660| r1660_1(glval) = VariableAddress[x547] : -# 1660| mu1660_2(String) = Uninitialized[x547] : &:r1660_1 -# 1660| r1660_3(glval) = FunctionAddress[String] : -# 1660| v1660_4(void) = Call[String] : func:r1660_3, this:r1660_1 -# 1660| mu1660_5(unknown) = ^CallSideEffect : ~m? -# 1660| mu1660_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1660_1 -# 1661| r1661_1(glval) = VariableAddress[x547] : -# 1661| r1661_2(glval) = FunctionAddress[~String] : -# 1661| v1661_3(void) = Call[~String] : func:r1661_2, this:r1661_1 -# 1661| mu1661_4(unknown) = ^CallSideEffect : ~m? -# 1661| v1661_5(void) = ^IndirectReadSideEffect[-1] : &:r1661_1, ~m? -# 1661| mu1661_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1661_1 -# 1661| r1661_7(bool) = Constant[0] : -# 1661| v1661_8(void) = ConditionalBranch : r1661_7 +# 35| Block 548 +# 35| r35_7659(glval) = VariableAddress[x547] : +# 35| mu35_7660(String) = Uninitialized[x547] : &:r35_7659 +# 35| r35_7661(glval) = FunctionAddress[String] : +# 35| v35_7662(void) = Call[String] : func:r35_7661, this:r35_7659 +# 35| mu35_7663(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7659 +# 35| r35_7665(glval) = VariableAddress[x547] : +# 35| r35_7666(glval) = FunctionAddress[~String] : +# 35| v35_7667(void) = Call[~String] : func:r35_7666, this:r35_7665 +# 35| mu35_7668(unknown) = ^CallSideEffect : ~m? +# 35| v35_7669(void) = ^IndirectReadSideEffect[-1] : &:r35_7665, ~m? +# 35| mu35_7670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7665 +# 35| r35_7671(bool) = Constant[0] : +# 35| v35_7672(void) = ConditionalBranch : r35_7671 #-----| False -> Block 549 #-----| True (back edge) -> Block 548 -# 1663| Block 549 -# 1663| r1663_1(glval) = VariableAddress[x548] : -# 1663| mu1663_2(String) = Uninitialized[x548] : &:r1663_1 -# 1663| r1663_3(glval) = FunctionAddress[String] : -# 1663| v1663_4(void) = Call[String] : func:r1663_3, this:r1663_1 -# 1663| mu1663_5(unknown) = ^CallSideEffect : ~m? -# 1663| mu1663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1663_1 -# 1664| r1664_1(glval) = VariableAddress[x548] : -# 1664| r1664_2(glval) = FunctionAddress[~String] : -# 1664| v1664_3(void) = Call[~String] : func:r1664_2, this:r1664_1 -# 1664| mu1664_4(unknown) = ^CallSideEffect : ~m? -# 1664| v1664_5(void) = ^IndirectReadSideEffect[-1] : &:r1664_1, ~m? -# 1664| mu1664_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1664_1 -# 1664| r1664_7(bool) = Constant[0] : -# 1664| v1664_8(void) = ConditionalBranch : r1664_7 +# 35| Block 549 +# 35| r35_7673(glval) = VariableAddress[x548] : +# 35| mu35_7674(String) = Uninitialized[x548] : &:r35_7673 +# 35| r35_7675(glval) = FunctionAddress[String] : +# 35| v35_7676(void) = Call[String] : func:r35_7675, this:r35_7673 +# 35| mu35_7677(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7673 +# 35| r35_7679(glval) = VariableAddress[x548] : +# 35| r35_7680(glval) = FunctionAddress[~String] : +# 35| v35_7681(void) = Call[~String] : func:r35_7680, this:r35_7679 +# 35| mu35_7682(unknown) = ^CallSideEffect : ~m? +# 35| v35_7683(void) = ^IndirectReadSideEffect[-1] : &:r35_7679, ~m? +# 35| mu35_7684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7679 +# 35| r35_7685(bool) = Constant[0] : +# 35| v35_7686(void) = ConditionalBranch : r35_7685 #-----| False -> Block 550 #-----| True (back edge) -> Block 549 -# 1666| Block 550 -# 1666| r1666_1(glval) = VariableAddress[x549] : -# 1666| mu1666_2(String) = Uninitialized[x549] : &:r1666_1 -# 1666| r1666_3(glval) = FunctionAddress[String] : -# 1666| v1666_4(void) = Call[String] : func:r1666_3, this:r1666_1 -# 1666| mu1666_5(unknown) = ^CallSideEffect : ~m? -# 1666| mu1666_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1666_1 -# 1667| r1667_1(glval) = VariableAddress[x549] : -# 1667| r1667_2(glval) = FunctionAddress[~String] : -# 1667| v1667_3(void) = Call[~String] : func:r1667_2, this:r1667_1 -# 1667| mu1667_4(unknown) = ^CallSideEffect : ~m? -# 1667| v1667_5(void) = ^IndirectReadSideEffect[-1] : &:r1667_1, ~m? -# 1667| mu1667_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1667_1 -# 1667| r1667_7(bool) = Constant[0] : -# 1667| v1667_8(void) = ConditionalBranch : r1667_7 +# 35| Block 550 +# 35| r35_7687(glval) = VariableAddress[x549] : +# 35| mu35_7688(String) = Uninitialized[x549] : &:r35_7687 +# 35| r35_7689(glval) = FunctionAddress[String] : +# 35| v35_7690(void) = Call[String] : func:r35_7689, this:r35_7687 +# 35| mu35_7691(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7687 +# 35| r35_7693(glval) = VariableAddress[x549] : +# 35| r35_7694(glval) = FunctionAddress[~String] : +# 35| v35_7695(void) = Call[~String] : func:r35_7694, this:r35_7693 +# 35| mu35_7696(unknown) = ^CallSideEffect : ~m? +# 35| v35_7697(void) = ^IndirectReadSideEffect[-1] : &:r35_7693, ~m? +# 35| mu35_7698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7693 +# 35| r35_7699(bool) = Constant[0] : +# 35| v35_7700(void) = ConditionalBranch : r35_7699 #-----| False -> Block 551 #-----| True (back edge) -> Block 550 -# 1669| Block 551 -# 1669| r1669_1(glval) = VariableAddress[x550] : -# 1669| mu1669_2(String) = Uninitialized[x550] : &:r1669_1 -# 1669| r1669_3(glval) = FunctionAddress[String] : -# 1669| v1669_4(void) = Call[String] : func:r1669_3, this:r1669_1 -# 1669| mu1669_5(unknown) = ^CallSideEffect : ~m? -# 1669| mu1669_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1669_1 -# 1670| r1670_1(glval) = VariableAddress[x550] : -# 1670| r1670_2(glval) = FunctionAddress[~String] : -# 1670| v1670_3(void) = Call[~String] : func:r1670_2, this:r1670_1 -# 1670| mu1670_4(unknown) = ^CallSideEffect : ~m? -# 1670| v1670_5(void) = ^IndirectReadSideEffect[-1] : &:r1670_1, ~m? -# 1670| mu1670_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1670_1 -# 1670| r1670_7(bool) = Constant[0] : -# 1670| v1670_8(void) = ConditionalBranch : r1670_7 +# 35| Block 551 +# 35| r35_7701(glval) = VariableAddress[x550] : +# 35| mu35_7702(String) = Uninitialized[x550] : &:r35_7701 +# 35| r35_7703(glval) = FunctionAddress[String] : +# 35| v35_7704(void) = Call[String] : func:r35_7703, this:r35_7701 +# 35| mu35_7705(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7701 +# 35| r35_7707(glval) = VariableAddress[x550] : +# 35| r35_7708(glval) = FunctionAddress[~String] : +# 35| v35_7709(void) = Call[~String] : func:r35_7708, this:r35_7707 +# 35| mu35_7710(unknown) = ^CallSideEffect : ~m? +# 35| v35_7711(void) = ^IndirectReadSideEffect[-1] : &:r35_7707, ~m? +# 35| mu35_7712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7707 +# 35| r35_7713(bool) = Constant[0] : +# 35| v35_7714(void) = ConditionalBranch : r35_7713 #-----| False -> Block 552 #-----| True (back edge) -> Block 551 -# 1672| Block 552 -# 1672| r1672_1(glval) = VariableAddress[x551] : -# 1672| mu1672_2(String) = Uninitialized[x551] : &:r1672_1 -# 1672| r1672_3(glval) = FunctionAddress[String] : -# 1672| v1672_4(void) = Call[String] : func:r1672_3, this:r1672_1 -# 1672| mu1672_5(unknown) = ^CallSideEffect : ~m? -# 1672| mu1672_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1672_1 -# 1673| r1673_1(glval) = VariableAddress[x551] : -# 1673| r1673_2(glval) = FunctionAddress[~String] : -# 1673| v1673_3(void) = Call[~String] : func:r1673_2, this:r1673_1 -# 1673| mu1673_4(unknown) = ^CallSideEffect : ~m? -# 1673| v1673_5(void) = ^IndirectReadSideEffect[-1] : &:r1673_1, ~m? -# 1673| mu1673_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1673_1 -# 1673| r1673_7(bool) = Constant[0] : -# 1673| v1673_8(void) = ConditionalBranch : r1673_7 +# 35| Block 552 +# 35| r35_7715(glval) = VariableAddress[x551] : +# 35| mu35_7716(String) = Uninitialized[x551] : &:r35_7715 +# 35| r35_7717(glval) = FunctionAddress[String] : +# 35| v35_7718(void) = Call[String] : func:r35_7717, this:r35_7715 +# 35| mu35_7719(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7715 +# 35| r35_7721(glval) = VariableAddress[x551] : +# 35| r35_7722(glval) = FunctionAddress[~String] : +# 35| v35_7723(void) = Call[~String] : func:r35_7722, this:r35_7721 +# 35| mu35_7724(unknown) = ^CallSideEffect : ~m? +# 35| v35_7725(void) = ^IndirectReadSideEffect[-1] : &:r35_7721, ~m? +# 35| mu35_7726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7721 +# 35| r35_7727(bool) = Constant[0] : +# 35| v35_7728(void) = ConditionalBranch : r35_7727 #-----| False -> Block 553 #-----| True (back edge) -> Block 552 -# 1675| Block 553 -# 1675| r1675_1(glval) = VariableAddress[x552] : -# 1675| mu1675_2(String) = Uninitialized[x552] : &:r1675_1 -# 1675| r1675_3(glval) = FunctionAddress[String] : -# 1675| v1675_4(void) = Call[String] : func:r1675_3, this:r1675_1 -# 1675| mu1675_5(unknown) = ^CallSideEffect : ~m? -# 1675| mu1675_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1675_1 -# 1676| r1676_1(glval) = VariableAddress[x552] : -# 1676| r1676_2(glval) = FunctionAddress[~String] : -# 1676| v1676_3(void) = Call[~String] : func:r1676_2, this:r1676_1 -# 1676| mu1676_4(unknown) = ^CallSideEffect : ~m? -# 1676| v1676_5(void) = ^IndirectReadSideEffect[-1] : &:r1676_1, ~m? -# 1676| mu1676_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1676_1 -# 1676| r1676_7(bool) = Constant[0] : -# 1676| v1676_8(void) = ConditionalBranch : r1676_7 +# 35| Block 553 +# 35| r35_7729(glval) = VariableAddress[x552] : +# 35| mu35_7730(String) = Uninitialized[x552] : &:r35_7729 +# 35| r35_7731(glval) = FunctionAddress[String] : +# 35| v35_7732(void) = Call[String] : func:r35_7731, this:r35_7729 +# 35| mu35_7733(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7729 +# 35| r35_7735(glval) = VariableAddress[x552] : +# 35| r35_7736(glval) = FunctionAddress[~String] : +# 35| v35_7737(void) = Call[~String] : func:r35_7736, this:r35_7735 +# 35| mu35_7738(unknown) = ^CallSideEffect : ~m? +# 35| v35_7739(void) = ^IndirectReadSideEffect[-1] : &:r35_7735, ~m? +# 35| mu35_7740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7735 +# 35| r35_7741(bool) = Constant[0] : +# 35| v35_7742(void) = ConditionalBranch : r35_7741 #-----| False -> Block 554 #-----| True (back edge) -> Block 553 -# 1678| Block 554 -# 1678| r1678_1(glval) = VariableAddress[x553] : -# 1678| mu1678_2(String) = Uninitialized[x553] : &:r1678_1 -# 1678| r1678_3(glval) = FunctionAddress[String] : -# 1678| v1678_4(void) = Call[String] : func:r1678_3, this:r1678_1 -# 1678| mu1678_5(unknown) = ^CallSideEffect : ~m? -# 1678| mu1678_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1678_1 -# 1679| r1679_1(glval) = VariableAddress[x553] : -# 1679| r1679_2(glval) = FunctionAddress[~String] : -# 1679| v1679_3(void) = Call[~String] : func:r1679_2, this:r1679_1 -# 1679| mu1679_4(unknown) = ^CallSideEffect : ~m? -# 1679| v1679_5(void) = ^IndirectReadSideEffect[-1] : &:r1679_1, ~m? -# 1679| mu1679_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1679_1 -# 1679| r1679_7(bool) = Constant[0] : -# 1679| v1679_8(void) = ConditionalBranch : r1679_7 +# 35| Block 554 +# 35| r35_7743(glval) = VariableAddress[x553] : +# 35| mu35_7744(String) = Uninitialized[x553] : &:r35_7743 +# 35| r35_7745(glval) = FunctionAddress[String] : +# 35| v35_7746(void) = Call[String] : func:r35_7745, this:r35_7743 +# 35| mu35_7747(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7743 +# 35| r35_7749(glval) = VariableAddress[x553] : +# 35| r35_7750(glval) = FunctionAddress[~String] : +# 35| v35_7751(void) = Call[~String] : func:r35_7750, this:r35_7749 +# 35| mu35_7752(unknown) = ^CallSideEffect : ~m? +# 35| v35_7753(void) = ^IndirectReadSideEffect[-1] : &:r35_7749, ~m? +# 35| mu35_7754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7749 +# 35| r35_7755(bool) = Constant[0] : +# 35| v35_7756(void) = ConditionalBranch : r35_7755 #-----| False -> Block 555 #-----| True (back edge) -> Block 554 -# 1681| Block 555 -# 1681| r1681_1(glval) = VariableAddress[x554] : -# 1681| mu1681_2(String) = Uninitialized[x554] : &:r1681_1 -# 1681| r1681_3(glval) = FunctionAddress[String] : -# 1681| v1681_4(void) = Call[String] : func:r1681_3, this:r1681_1 -# 1681| mu1681_5(unknown) = ^CallSideEffect : ~m? -# 1681| mu1681_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1681_1 -# 1682| r1682_1(glval) = VariableAddress[x554] : -# 1682| r1682_2(glval) = FunctionAddress[~String] : -# 1682| v1682_3(void) = Call[~String] : func:r1682_2, this:r1682_1 -# 1682| mu1682_4(unknown) = ^CallSideEffect : ~m? -# 1682| v1682_5(void) = ^IndirectReadSideEffect[-1] : &:r1682_1, ~m? -# 1682| mu1682_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1682_1 -# 1682| r1682_7(bool) = Constant[0] : -# 1682| v1682_8(void) = ConditionalBranch : r1682_7 +# 35| Block 555 +# 35| r35_7757(glval) = VariableAddress[x554] : +# 35| mu35_7758(String) = Uninitialized[x554] : &:r35_7757 +# 35| r35_7759(glval) = FunctionAddress[String] : +# 35| v35_7760(void) = Call[String] : func:r35_7759, this:r35_7757 +# 35| mu35_7761(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7757 +# 35| r35_7763(glval) = VariableAddress[x554] : +# 35| r35_7764(glval) = FunctionAddress[~String] : +# 35| v35_7765(void) = Call[~String] : func:r35_7764, this:r35_7763 +# 35| mu35_7766(unknown) = ^CallSideEffect : ~m? +# 35| v35_7767(void) = ^IndirectReadSideEffect[-1] : &:r35_7763, ~m? +# 35| mu35_7768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7763 +# 35| r35_7769(bool) = Constant[0] : +# 35| v35_7770(void) = ConditionalBranch : r35_7769 #-----| False -> Block 556 #-----| True (back edge) -> Block 555 -# 1684| Block 556 -# 1684| r1684_1(glval) = VariableAddress[x555] : -# 1684| mu1684_2(String) = Uninitialized[x555] : &:r1684_1 -# 1684| r1684_3(glval) = FunctionAddress[String] : -# 1684| v1684_4(void) = Call[String] : func:r1684_3, this:r1684_1 -# 1684| mu1684_5(unknown) = ^CallSideEffect : ~m? -# 1684| mu1684_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1684_1 -# 1685| r1685_1(glval) = VariableAddress[x555] : -# 1685| r1685_2(glval) = FunctionAddress[~String] : -# 1685| v1685_3(void) = Call[~String] : func:r1685_2, this:r1685_1 -# 1685| mu1685_4(unknown) = ^CallSideEffect : ~m? -# 1685| v1685_5(void) = ^IndirectReadSideEffect[-1] : &:r1685_1, ~m? -# 1685| mu1685_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1685_1 -# 1685| r1685_7(bool) = Constant[0] : -# 1685| v1685_8(void) = ConditionalBranch : r1685_7 +# 35| Block 556 +# 35| r35_7771(glval) = VariableAddress[x555] : +# 35| mu35_7772(String) = Uninitialized[x555] : &:r35_7771 +# 35| r35_7773(glval) = FunctionAddress[String] : +# 35| v35_7774(void) = Call[String] : func:r35_7773, this:r35_7771 +# 35| mu35_7775(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7771 +# 35| r35_7777(glval) = VariableAddress[x555] : +# 35| r35_7778(glval) = FunctionAddress[~String] : +# 35| v35_7779(void) = Call[~String] : func:r35_7778, this:r35_7777 +# 35| mu35_7780(unknown) = ^CallSideEffect : ~m? +# 35| v35_7781(void) = ^IndirectReadSideEffect[-1] : &:r35_7777, ~m? +# 35| mu35_7782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7777 +# 35| r35_7783(bool) = Constant[0] : +# 35| v35_7784(void) = ConditionalBranch : r35_7783 #-----| False -> Block 557 #-----| True (back edge) -> Block 556 -# 1687| Block 557 -# 1687| r1687_1(glval) = VariableAddress[x556] : -# 1687| mu1687_2(String) = Uninitialized[x556] : &:r1687_1 -# 1687| r1687_3(glval) = FunctionAddress[String] : -# 1687| v1687_4(void) = Call[String] : func:r1687_3, this:r1687_1 -# 1687| mu1687_5(unknown) = ^CallSideEffect : ~m? -# 1687| mu1687_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1687_1 -# 1688| r1688_1(glval) = VariableAddress[x556] : -# 1688| r1688_2(glval) = FunctionAddress[~String] : -# 1688| v1688_3(void) = Call[~String] : func:r1688_2, this:r1688_1 -# 1688| mu1688_4(unknown) = ^CallSideEffect : ~m? -# 1688| v1688_5(void) = ^IndirectReadSideEffect[-1] : &:r1688_1, ~m? -# 1688| mu1688_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 -# 1688| r1688_7(bool) = Constant[0] : -# 1688| v1688_8(void) = ConditionalBranch : r1688_7 +# 35| Block 557 +# 35| r35_7785(glval) = VariableAddress[x556] : +# 35| mu35_7786(String) = Uninitialized[x556] : &:r35_7785 +# 35| r35_7787(glval) = FunctionAddress[String] : +# 35| v35_7788(void) = Call[String] : func:r35_7787, this:r35_7785 +# 35| mu35_7789(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7785 +# 35| r35_7791(glval) = VariableAddress[x556] : +# 35| r35_7792(glval) = FunctionAddress[~String] : +# 35| v35_7793(void) = Call[~String] : func:r35_7792, this:r35_7791 +# 35| mu35_7794(unknown) = ^CallSideEffect : ~m? +# 35| v35_7795(void) = ^IndirectReadSideEffect[-1] : &:r35_7791, ~m? +# 35| mu35_7796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7791 +# 35| r35_7797(bool) = Constant[0] : +# 35| v35_7798(void) = ConditionalBranch : r35_7797 #-----| False -> Block 558 #-----| True (back edge) -> Block 557 -# 1690| Block 558 -# 1690| r1690_1(glval) = VariableAddress[x557] : -# 1690| mu1690_2(String) = Uninitialized[x557] : &:r1690_1 -# 1690| r1690_3(glval) = FunctionAddress[String] : -# 1690| v1690_4(void) = Call[String] : func:r1690_3, this:r1690_1 -# 1690| mu1690_5(unknown) = ^CallSideEffect : ~m? -# 1690| mu1690_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1690_1 -# 1691| r1691_1(glval) = VariableAddress[x557] : -# 1691| r1691_2(glval) = FunctionAddress[~String] : -# 1691| v1691_3(void) = Call[~String] : func:r1691_2, this:r1691_1 -# 1691| mu1691_4(unknown) = ^CallSideEffect : ~m? -# 1691| v1691_5(void) = ^IndirectReadSideEffect[-1] : &:r1691_1, ~m? -# 1691| mu1691_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1691_1 -# 1691| r1691_7(bool) = Constant[0] : -# 1691| v1691_8(void) = ConditionalBranch : r1691_7 +# 35| Block 558 +# 35| r35_7799(glval) = VariableAddress[x557] : +# 35| mu35_7800(String) = Uninitialized[x557] : &:r35_7799 +# 35| r35_7801(glval) = FunctionAddress[String] : +# 35| v35_7802(void) = Call[String] : func:r35_7801, this:r35_7799 +# 35| mu35_7803(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7799 +# 35| r35_7805(glval) = VariableAddress[x557] : +# 35| r35_7806(glval) = FunctionAddress[~String] : +# 35| v35_7807(void) = Call[~String] : func:r35_7806, this:r35_7805 +# 35| mu35_7808(unknown) = ^CallSideEffect : ~m? +# 35| v35_7809(void) = ^IndirectReadSideEffect[-1] : &:r35_7805, ~m? +# 35| mu35_7810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7805 +# 35| r35_7811(bool) = Constant[0] : +# 35| v35_7812(void) = ConditionalBranch : r35_7811 #-----| False -> Block 559 #-----| True (back edge) -> Block 558 -# 1693| Block 559 -# 1693| r1693_1(glval) = VariableAddress[x558] : -# 1693| mu1693_2(String) = Uninitialized[x558] : &:r1693_1 -# 1693| r1693_3(glval) = FunctionAddress[String] : -# 1693| v1693_4(void) = Call[String] : func:r1693_3, this:r1693_1 -# 1693| mu1693_5(unknown) = ^CallSideEffect : ~m? -# 1693| mu1693_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1693_1 -# 1694| r1694_1(glval) = VariableAddress[x558] : -# 1694| r1694_2(glval) = FunctionAddress[~String] : -# 1694| v1694_3(void) = Call[~String] : func:r1694_2, this:r1694_1 -# 1694| mu1694_4(unknown) = ^CallSideEffect : ~m? -# 1694| v1694_5(void) = ^IndirectReadSideEffect[-1] : &:r1694_1, ~m? -# 1694| mu1694_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1694_1 -# 1694| r1694_7(bool) = Constant[0] : -# 1694| v1694_8(void) = ConditionalBranch : r1694_7 +# 35| Block 559 +# 35| r35_7813(glval) = VariableAddress[x558] : +# 35| mu35_7814(String) = Uninitialized[x558] : &:r35_7813 +# 35| r35_7815(glval) = FunctionAddress[String] : +# 35| v35_7816(void) = Call[String] : func:r35_7815, this:r35_7813 +# 35| mu35_7817(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7813 +# 35| r35_7819(glval) = VariableAddress[x558] : +# 35| r35_7820(glval) = FunctionAddress[~String] : +# 35| v35_7821(void) = Call[~String] : func:r35_7820, this:r35_7819 +# 35| mu35_7822(unknown) = ^CallSideEffect : ~m? +# 35| v35_7823(void) = ^IndirectReadSideEffect[-1] : &:r35_7819, ~m? +# 35| mu35_7824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7819 +# 35| r35_7825(bool) = Constant[0] : +# 35| v35_7826(void) = ConditionalBranch : r35_7825 #-----| False -> Block 560 #-----| True (back edge) -> Block 559 -# 1696| Block 560 -# 1696| r1696_1(glval) = VariableAddress[x559] : -# 1696| mu1696_2(String) = Uninitialized[x559] : &:r1696_1 -# 1696| r1696_3(glval) = FunctionAddress[String] : -# 1696| v1696_4(void) = Call[String] : func:r1696_3, this:r1696_1 -# 1696| mu1696_5(unknown) = ^CallSideEffect : ~m? -# 1696| mu1696_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1696_1 -# 1697| r1697_1(glval) = VariableAddress[x559] : -# 1697| r1697_2(glval) = FunctionAddress[~String] : -# 1697| v1697_3(void) = Call[~String] : func:r1697_2, this:r1697_1 -# 1697| mu1697_4(unknown) = ^CallSideEffect : ~m? -# 1697| v1697_5(void) = ^IndirectReadSideEffect[-1] : &:r1697_1, ~m? -# 1697| mu1697_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1 -# 1697| r1697_7(bool) = Constant[0] : -# 1697| v1697_8(void) = ConditionalBranch : r1697_7 +# 35| Block 560 +# 35| r35_7827(glval) = VariableAddress[x559] : +# 35| mu35_7828(String) = Uninitialized[x559] : &:r35_7827 +# 35| r35_7829(glval) = FunctionAddress[String] : +# 35| v35_7830(void) = Call[String] : func:r35_7829, this:r35_7827 +# 35| mu35_7831(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7827 +# 35| r35_7833(glval) = VariableAddress[x559] : +# 35| r35_7834(glval) = FunctionAddress[~String] : +# 35| v35_7835(void) = Call[~String] : func:r35_7834, this:r35_7833 +# 35| mu35_7836(unknown) = ^CallSideEffect : ~m? +# 35| v35_7837(void) = ^IndirectReadSideEffect[-1] : &:r35_7833, ~m? +# 35| mu35_7838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7833 +# 35| r35_7839(bool) = Constant[0] : +# 35| v35_7840(void) = ConditionalBranch : r35_7839 #-----| False -> Block 561 #-----| True (back edge) -> Block 560 -# 1699| Block 561 -# 1699| r1699_1(glval) = VariableAddress[x560] : -# 1699| mu1699_2(String) = Uninitialized[x560] : &:r1699_1 -# 1699| r1699_3(glval) = FunctionAddress[String] : -# 1699| v1699_4(void) = Call[String] : func:r1699_3, this:r1699_1 -# 1699| mu1699_5(unknown) = ^CallSideEffect : ~m? -# 1699| mu1699_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1699_1 -# 1700| r1700_1(glval) = VariableAddress[x560] : -# 1700| r1700_2(glval) = FunctionAddress[~String] : -# 1700| v1700_3(void) = Call[~String] : func:r1700_2, this:r1700_1 -# 1700| mu1700_4(unknown) = ^CallSideEffect : ~m? -# 1700| v1700_5(void) = ^IndirectReadSideEffect[-1] : &:r1700_1, ~m? -# 1700| mu1700_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1700_1 -# 1700| r1700_7(bool) = Constant[0] : -# 1700| v1700_8(void) = ConditionalBranch : r1700_7 +# 35| Block 561 +# 35| r35_7841(glval) = VariableAddress[x560] : +# 35| mu35_7842(String) = Uninitialized[x560] : &:r35_7841 +# 35| r35_7843(glval) = FunctionAddress[String] : +# 35| v35_7844(void) = Call[String] : func:r35_7843, this:r35_7841 +# 35| mu35_7845(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7841 +# 35| r35_7847(glval) = VariableAddress[x560] : +# 35| r35_7848(glval) = FunctionAddress[~String] : +# 35| v35_7849(void) = Call[~String] : func:r35_7848, this:r35_7847 +# 35| mu35_7850(unknown) = ^CallSideEffect : ~m? +# 35| v35_7851(void) = ^IndirectReadSideEffect[-1] : &:r35_7847, ~m? +# 35| mu35_7852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7847 +# 35| r35_7853(bool) = Constant[0] : +# 35| v35_7854(void) = ConditionalBranch : r35_7853 #-----| False -> Block 562 #-----| True (back edge) -> Block 561 -# 1702| Block 562 -# 1702| r1702_1(glval) = VariableAddress[x561] : -# 1702| mu1702_2(String) = Uninitialized[x561] : &:r1702_1 -# 1702| r1702_3(glval) = FunctionAddress[String] : -# 1702| v1702_4(void) = Call[String] : func:r1702_3, this:r1702_1 -# 1702| mu1702_5(unknown) = ^CallSideEffect : ~m? -# 1702| mu1702_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1702_1 -# 1703| r1703_1(glval) = VariableAddress[x561] : -# 1703| r1703_2(glval) = FunctionAddress[~String] : -# 1703| v1703_3(void) = Call[~String] : func:r1703_2, this:r1703_1 -# 1703| mu1703_4(unknown) = ^CallSideEffect : ~m? -# 1703| v1703_5(void) = ^IndirectReadSideEffect[-1] : &:r1703_1, ~m? -# 1703| mu1703_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1703_1 -# 1703| r1703_7(bool) = Constant[0] : -# 1703| v1703_8(void) = ConditionalBranch : r1703_7 +# 35| Block 562 +# 35| r35_7855(glval) = VariableAddress[x561] : +# 35| mu35_7856(String) = Uninitialized[x561] : &:r35_7855 +# 35| r35_7857(glval) = FunctionAddress[String] : +# 35| v35_7858(void) = Call[String] : func:r35_7857, this:r35_7855 +# 35| mu35_7859(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7855 +# 35| r35_7861(glval) = VariableAddress[x561] : +# 35| r35_7862(glval) = FunctionAddress[~String] : +# 35| v35_7863(void) = Call[~String] : func:r35_7862, this:r35_7861 +# 35| mu35_7864(unknown) = ^CallSideEffect : ~m? +# 35| v35_7865(void) = ^IndirectReadSideEffect[-1] : &:r35_7861, ~m? +# 35| mu35_7866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7861 +# 35| r35_7867(bool) = Constant[0] : +# 35| v35_7868(void) = ConditionalBranch : r35_7867 #-----| False -> Block 563 #-----| True (back edge) -> Block 562 -# 1705| Block 563 -# 1705| r1705_1(glval) = VariableAddress[x562] : -# 1705| mu1705_2(String) = Uninitialized[x562] : &:r1705_1 -# 1705| r1705_3(glval) = FunctionAddress[String] : -# 1705| v1705_4(void) = Call[String] : func:r1705_3, this:r1705_1 -# 1705| mu1705_5(unknown) = ^CallSideEffect : ~m? -# 1705| mu1705_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1705_1 -# 1706| r1706_1(glval) = VariableAddress[x562] : -# 1706| r1706_2(glval) = FunctionAddress[~String] : -# 1706| v1706_3(void) = Call[~String] : func:r1706_2, this:r1706_1 -# 1706| mu1706_4(unknown) = ^CallSideEffect : ~m? -# 1706| v1706_5(void) = ^IndirectReadSideEffect[-1] : &:r1706_1, ~m? -# 1706| mu1706_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1706_1 -# 1706| r1706_7(bool) = Constant[0] : -# 1706| v1706_8(void) = ConditionalBranch : r1706_7 +# 35| Block 563 +# 35| r35_7869(glval) = VariableAddress[x562] : +# 35| mu35_7870(String) = Uninitialized[x562] : &:r35_7869 +# 35| r35_7871(glval) = FunctionAddress[String] : +# 35| v35_7872(void) = Call[String] : func:r35_7871, this:r35_7869 +# 35| mu35_7873(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7869 +# 35| r35_7875(glval) = VariableAddress[x562] : +# 35| r35_7876(glval) = FunctionAddress[~String] : +# 35| v35_7877(void) = Call[~String] : func:r35_7876, this:r35_7875 +# 35| mu35_7878(unknown) = ^CallSideEffect : ~m? +# 35| v35_7879(void) = ^IndirectReadSideEffect[-1] : &:r35_7875, ~m? +# 35| mu35_7880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7875 +# 35| r35_7881(bool) = Constant[0] : +# 35| v35_7882(void) = ConditionalBranch : r35_7881 #-----| False -> Block 564 #-----| True (back edge) -> Block 563 -# 1708| Block 564 -# 1708| r1708_1(glval) = VariableAddress[x563] : -# 1708| mu1708_2(String) = Uninitialized[x563] : &:r1708_1 -# 1708| r1708_3(glval) = FunctionAddress[String] : -# 1708| v1708_4(void) = Call[String] : func:r1708_3, this:r1708_1 -# 1708| mu1708_5(unknown) = ^CallSideEffect : ~m? -# 1708| mu1708_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1708_1 -# 1709| r1709_1(glval) = VariableAddress[x563] : -# 1709| r1709_2(glval) = FunctionAddress[~String] : -# 1709| v1709_3(void) = Call[~String] : func:r1709_2, this:r1709_1 -# 1709| mu1709_4(unknown) = ^CallSideEffect : ~m? -# 1709| v1709_5(void) = ^IndirectReadSideEffect[-1] : &:r1709_1, ~m? -# 1709| mu1709_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1709_1 -# 1709| r1709_7(bool) = Constant[0] : -# 1709| v1709_8(void) = ConditionalBranch : r1709_7 +# 35| Block 564 +# 35| r35_7883(glval) = VariableAddress[x563] : +# 35| mu35_7884(String) = Uninitialized[x563] : &:r35_7883 +# 35| r35_7885(glval) = FunctionAddress[String] : +# 35| v35_7886(void) = Call[String] : func:r35_7885, this:r35_7883 +# 35| mu35_7887(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7883 +# 35| r35_7889(glval) = VariableAddress[x563] : +# 35| r35_7890(glval) = FunctionAddress[~String] : +# 35| v35_7891(void) = Call[~String] : func:r35_7890, this:r35_7889 +# 35| mu35_7892(unknown) = ^CallSideEffect : ~m? +# 35| v35_7893(void) = ^IndirectReadSideEffect[-1] : &:r35_7889, ~m? +# 35| mu35_7894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7889 +# 35| r35_7895(bool) = Constant[0] : +# 35| v35_7896(void) = ConditionalBranch : r35_7895 #-----| False -> Block 565 #-----| True (back edge) -> Block 564 -# 1711| Block 565 -# 1711| r1711_1(glval) = VariableAddress[x564] : -# 1711| mu1711_2(String) = Uninitialized[x564] : &:r1711_1 -# 1711| r1711_3(glval) = FunctionAddress[String] : -# 1711| v1711_4(void) = Call[String] : func:r1711_3, this:r1711_1 -# 1711| mu1711_5(unknown) = ^CallSideEffect : ~m? -# 1711| mu1711_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1711_1 -# 1712| r1712_1(glval) = VariableAddress[x564] : -# 1712| r1712_2(glval) = FunctionAddress[~String] : -# 1712| v1712_3(void) = Call[~String] : func:r1712_2, this:r1712_1 -# 1712| mu1712_4(unknown) = ^CallSideEffect : ~m? -# 1712| v1712_5(void) = ^IndirectReadSideEffect[-1] : &:r1712_1, ~m? -# 1712| mu1712_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1712_1 -# 1712| r1712_7(bool) = Constant[0] : -# 1712| v1712_8(void) = ConditionalBranch : r1712_7 +# 35| Block 565 +# 35| r35_7897(glval) = VariableAddress[x564] : +# 35| mu35_7898(String) = Uninitialized[x564] : &:r35_7897 +# 35| r35_7899(glval) = FunctionAddress[String] : +# 35| v35_7900(void) = Call[String] : func:r35_7899, this:r35_7897 +# 35| mu35_7901(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7897 +# 35| r35_7903(glval) = VariableAddress[x564] : +# 35| r35_7904(glval) = FunctionAddress[~String] : +# 35| v35_7905(void) = Call[~String] : func:r35_7904, this:r35_7903 +# 35| mu35_7906(unknown) = ^CallSideEffect : ~m? +# 35| v35_7907(void) = ^IndirectReadSideEffect[-1] : &:r35_7903, ~m? +# 35| mu35_7908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7903 +# 35| r35_7909(bool) = Constant[0] : +# 35| v35_7910(void) = ConditionalBranch : r35_7909 #-----| False -> Block 566 #-----| True (back edge) -> Block 565 -# 1714| Block 566 -# 1714| r1714_1(glval) = VariableAddress[x565] : -# 1714| mu1714_2(String) = Uninitialized[x565] : &:r1714_1 -# 1714| r1714_3(glval) = FunctionAddress[String] : -# 1714| v1714_4(void) = Call[String] : func:r1714_3, this:r1714_1 -# 1714| mu1714_5(unknown) = ^CallSideEffect : ~m? -# 1714| mu1714_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1714_1 -# 1715| r1715_1(glval) = VariableAddress[x565] : -# 1715| r1715_2(glval) = FunctionAddress[~String] : -# 1715| v1715_3(void) = Call[~String] : func:r1715_2, this:r1715_1 -# 1715| mu1715_4(unknown) = ^CallSideEffect : ~m? -# 1715| v1715_5(void) = ^IndirectReadSideEffect[-1] : &:r1715_1, ~m? -# 1715| mu1715_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1715_1 -# 1715| r1715_7(bool) = Constant[0] : -# 1715| v1715_8(void) = ConditionalBranch : r1715_7 +# 35| Block 566 +# 35| r35_7911(glval) = VariableAddress[x565] : +# 35| mu35_7912(String) = Uninitialized[x565] : &:r35_7911 +# 35| r35_7913(glval) = FunctionAddress[String] : +# 35| v35_7914(void) = Call[String] : func:r35_7913, this:r35_7911 +# 35| mu35_7915(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7911 +# 35| r35_7917(glval) = VariableAddress[x565] : +# 35| r35_7918(glval) = FunctionAddress[~String] : +# 35| v35_7919(void) = Call[~String] : func:r35_7918, this:r35_7917 +# 35| mu35_7920(unknown) = ^CallSideEffect : ~m? +# 35| v35_7921(void) = ^IndirectReadSideEffect[-1] : &:r35_7917, ~m? +# 35| mu35_7922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7917 +# 35| r35_7923(bool) = Constant[0] : +# 35| v35_7924(void) = ConditionalBranch : r35_7923 #-----| False -> Block 567 #-----| True (back edge) -> Block 566 -# 1717| Block 567 -# 1717| r1717_1(glval) = VariableAddress[x566] : -# 1717| mu1717_2(String) = Uninitialized[x566] : &:r1717_1 -# 1717| r1717_3(glval) = FunctionAddress[String] : -# 1717| v1717_4(void) = Call[String] : func:r1717_3, this:r1717_1 -# 1717| mu1717_5(unknown) = ^CallSideEffect : ~m? -# 1717| mu1717_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1717_1 -# 1718| r1718_1(glval) = VariableAddress[x566] : -# 1718| r1718_2(glval) = FunctionAddress[~String] : -# 1718| v1718_3(void) = Call[~String] : func:r1718_2, this:r1718_1 -# 1718| mu1718_4(unknown) = ^CallSideEffect : ~m? -# 1718| v1718_5(void) = ^IndirectReadSideEffect[-1] : &:r1718_1, ~m? -# 1718| mu1718_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1718_1 -# 1718| r1718_7(bool) = Constant[0] : -# 1718| v1718_8(void) = ConditionalBranch : r1718_7 +# 35| Block 567 +# 35| r35_7925(glval) = VariableAddress[x566] : +# 35| mu35_7926(String) = Uninitialized[x566] : &:r35_7925 +# 35| r35_7927(glval) = FunctionAddress[String] : +# 35| v35_7928(void) = Call[String] : func:r35_7927, this:r35_7925 +# 35| mu35_7929(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7925 +# 35| r35_7931(glval) = VariableAddress[x566] : +# 35| r35_7932(glval) = FunctionAddress[~String] : +# 35| v35_7933(void) = Call[~String] : func:r35_7932, this:r35_7931 +# 35| mu35_7934(unknown) = ^CallSideEffect : ~m? +# 35| v35_7935(void) = ^IndirectReadSideEffect[-1] : &:r35_7931, ~m? +# 35| mu35_7936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7931 +# 35| r35_7937(bool) = Constant[0] : +# 35| v35_7938(void) = ConditionalBranch : r35_7937 #-----| False -> Block 568 #-----| True (back edge) -> Block 567 -# 1720| Block 568 -# 1720| r1720_1(glval) = VariableAddress[x567] : -# 1720| mu1720_2(String) = Uninitialized[x567] : &:r1720_1 -# 1720| r1720_3(glval) = FunctionAddress[String] : -# 1720| v1720_4(void) = Call[String] : func:r1720_3, this:r1720_1 -# 1720| mu1720_5(unknown) = ^CallSideEffect : ~m? -# 1720| mu1720_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1720_1 -# 1721| r1721_1(glval) = VariableAddress[x567] : -# 1721| r1721_2(glval) = FunctionAddress[~String] : -# 1721| v1721_3(void) = Call[~String] : func:r1721_2, this:r1721_1 -# 1721| mu1721_4(unknown) = ^CallSideEffect : ~m? -# 1721| v1721_5(void) = ^IndirectReadSideEffect[-1] : &:r1721_1, ~m? -# 1721| mu1721_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1721_1 -# 1721| r1721_7(bool) = Constant[0] : -# 1721| v1721_8(void) = ConditionalBranch : r1721_7 +# 35| Block 568 +# 35| r35_7939(glval) = VariableAddress[x567] : +# 35| mu35_7940(String) = Uninitialized[x567] : &:r35_7939 +# 35| r35_7941(glval) = FunctionAddress[String] : +# 35| v35_7942(void) = Call[String] : func:r35_7941, this:r35_7939 +# 35| mu35_7943(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7939 +# 35| r35_7945(glval) = VariableAddress[x567] : +# 35| r35_7946(glval) = FunctionAddress[~String] : +# 35| v35_7947(void) = Call[~String] : func:r35_7946, this:r35_7945 +# 35| mu35_7948(unknown) = ^CallSideEffect : ~m? +# 35| v35_7949(void) = ^IndirectReadSideEffect[-1] : &:r35_7945, ~m? +# 35| mu35_7950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7945 +# 35| r35_7951(bool) = Constant[0] : +# 35| v35_7952(void) = ConditionalBranch : r35_7951 #-----| False -> Block 569 #-----| True (back edge) -> Block 568 -# 1723| Block 569 -# 1723| r1723_1(glval) = VariableAddress[x568] : -# 1723| mu1723_2(String) = Uninitialized[x568] : &:r1723_1 -# 1723| r1723_3(glval) = FunctionAddress[String] : -# 1723| v1723_4(void) = Call[String] : func:r1723_3, this:r1723_1 -# 1723| mu1723_5(unknown) = ^CallSideEffect : ~m? -# 1723| mu1723_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1723_1 -# 1724| r1724_1(glval) = VariableAddress[x568] : -# 1724| r1724_2(glval) = FunctionAddress[~String] : -# 1724| v1724_3(void) = Call[~String] : func:r1724_2, this:r1724_1 -# 1724| mu1724_4(unknown) = ^CallSideEffect : ~m? -# 1724| v1724_5(void) = ^IndirectReadSideEffect[-1] : &:r1724_1, ~m? -# 1724| mu1724_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1724_1 -# 1724| r1724_7(bool) = Constant[0] : -# 1724| v1724_8(void) = ConditionalBranch : r1724_7 +# 35| Block 569 +# 35| r35_7953(glval) = VariableAddress[x568] : +# 35| mu35_7954(String) = Uninitialized[x568] : &:r35_7953 +# 35| r35_7955(glval) = FunctionAddress[String] : +# 35| v35_7956(void) = Call[String] : func:r35_7955, this:r35_7953 +# 35| mu35_7957(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7953 +# 35| r35_7959(glval) = VariableAddress[x568] : +# 35| r35_7960(glval) = FunctionAddress[~String] : +# 35| v35_7961(void) = Call[~String] : func:r35_7960, this:r35_7959 +# 35| mu35_7962(unknown) = ^CallSideEffect : ~m? +# 35| v35_7963(void) = ^IndirectReadSideEffect[-1] : &:r35_7959, ~m? +# 35| mu35_7964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7959 +# 35| r35_7965(bool) = Constant[0] : +# 35| v35_7966(void) = ConditionalBranch : r35_7965 #-----| False -> Block 570 #-----| True (back edge) -> Block 569 -# 1726| Block 570 -# 1726| r1726_1(glval) = VariableAddress[x569] : -# 1726| mu1726_2(String) = Uninitialized[x569] : &:r1726_1 -# 1726| r1726_3(glval) = FunctionAddress[String] : -# 1726| v1726_4(void) = Call[String] : func:r1726_3, this:r1726_1 -# 1726| mu1726_5(unknown) = ^CallSideEffect : ~m? -# 1726| mu1726_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1726_1 -# 1727| r1727_1(glval) = VariableAddress[x569] : -# 1727| r1727_2(glval) = FunctionAddress[~String] : -# 1727| v1727_3(void) = Call[~String] : func:r1727_2, this:r1727_1 -# 1727| mu1727_4(unknown) = ^CallSideEffect : ~m? -# 1727| v1727_5(void) = ^IndirectReadSideEffect[-1] : &:r1727_1, ~m? -# 1727| mu1727_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1727_1 -# 1727| r1727_7(bool) = Constant[0] : -# 1727| v1727_8(void) = ConditionalBranch : r1727_7 +# 35| Block 570 +# 35| r35_7967(glval) = VariableAddress[x569] : +# 35| mu35_7968(String) = Uninitialized[x569] : &:r35_7967 +# 35| r35_7969(glval) = FunctionAddress[String] : +# 35| v35_7970(void) = Call[String] : func:r35_7969, this:r35_7967 +# 35| mu35_7971(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7967 +# 35| r35_7973(glval) = VariableAddress[x569] : +# 35| r35_7974(glval) = FunctionAddress[~String] : +# 35| v35_7975(void) = Call[~String] : func:r35_7974, this:r35_7973 +# 35| mu35_7976(unknown) = ^CallSideEffect : ~m? +# 35| v35_7977(void) = ^IndirectReadSideEffect[-1] : &:r35_7973, ~m? +# 35| mu35_7978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7973 +# 35| r35_7979(bool) = Constant[0] : +# 35| v35_7980(void) = ConditionalBranch : r35_7979 #-----| False -> Block 571 #-----| True (back edge) -> Block 570 -# 1729| Block 571 -# 1729| r1729_1(glval) = VariableAddress[x570] : -# 1729| mu1729_2(String) = Uninitialized[x570] : &:r1729_1 -# 1729| r1729_3(glval) = FunctionAddress[String] : -# 1729| v1729_4(void) = Call[String] : func:r1729_3, this:r1729_1 -# 1729| mu1729_5(unknown) = ^CallSideEffect : ~m? -# 1729| mu1729_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1729_1 -# 1730| r1730_1(glval) = VariableAddress[x570] : -# 1730| r1730_2(glval) = FunctionAddress[~String] : -# 1730| v1730_3(void) = Call[~String] : func:r1730_2, this:r1730_1 -# 1730| mu1730_4(unknown) = ^CallSideEffect : ~m? -# 1730| v1730_5(void) = ^IndirectReadSideEffect[-1] : &:r1730_1, ~m? -# 1730| mu1730_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1730_1 -# 1730| r1730_7(bool) = Constant[0] : -# 1730| v1730_8(void) = ConditionalBranch : r1730_7 +# 35| Block 571 +# 35| r35_7981(glval) = VariableAddress[x570] : +# 35| mu35_7982(String) = Uninitialized[x570] : &:r35_7981 +# 35| r35_7983(glval) = FunctionAddress[String] : +# 35| v35_7984(void) = Call[String] : func:r35_7983, this:r35_7981 +# 35| mu35_7985(unknown) = ^CallSideEffect : ~m? +# 35| mu35_7986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7981 +# 35| r35_7987(glval) = VariableAddress[x570] : +# 35| r35_7988(glval) = FunctionAddress[~String] : +# 35| v35_7989(void) = Call[~String] : func:r35_7988, this:r35_7987 +# 35| mu35_7990(unknown) = ^CallSideEffect : ~m? +# 35| v35_7991(void) = ^IndirectReadSideEffect[-1] : &:r35_7987, ~m? +# 35| mu35_7992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7987 +# 35| r35_7993(bool) = Constant[0] : +# 35| v35_7994(void) = ConditionalBranch : r35_7993 #-----| False -> Block 572 #-----| True (back edge) -> Block 571 -# 1732| Block 572 -# 1732| r1732_1(glval) = VariableAddress[x571] : -# 1732| mu1732_2(String) = Uninitialized[x571] : &:r1732_1 -# 1732| r1732_3(glval) = FunctionAddress[String] : -# 1732| v1732_4(void) = Call[String] : func:r1732_3, this:r1732_1 -# 1732| mu1732_5(unknown) = ^CallSideEffect : ~m? -# 1732| mu1732_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1732_1 -# 1733| r1733_1(glval) = VariableAddress[x571] : -# 1733| r1733_2(glval) = FunctionAddress[~String] : -# 1733| v1733_3(void) = Call[~String] : func:r1733_2, this:r1733_1 -# 1733| mu1733_4(unknown) = ^CallSideEffect : ~m? -# 1733| v1733_5(void) = ^IndirectReadSideEffect[-1] : &:r1733_1, ~m? -# 1733| mu1733_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1733_1 -# 1733| r1733_7(bool) = Constant[0] : -# 1733| v1733_8(void) = ConditionalBranch : r1733_7 +# 35| Block 572 +# 35| r35_7995(glval) = VariableAddress[x571] : +# 35| mu35_7996(String) = Uninitialized[x571] : &:r35_7995 +# 35| r35_7997(glval) = FunctionAddress[String] : +# 35| v35_7998(void) = Call[String] : func:r35_7997, this:r35_7995 +# 35| mu35_7999(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_7995 +# 35| r35_8001(glval) = VariableAddress[x571] : +# 35| r35_8002(glval) = FunctionAddress[~String] : +# 35| v35_8003(void) = Call[~String] : func:r35_8002, this:r35_8001 +# 35| mu35_8004(unknown) = ^CallSideEffect : ~m? +# 35| v35_8005(void) = ^IndirectReadSideEffect[-1] : &:r35_8001, ~m? +# 35| mu35_8006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8001 +# 35| r35_8007(bool) = Constant[0] : +# 35| v35_8008(void) = ConditionalBranch : r35_8007 #-----| False -> Block 573 #-----| True (back edge) -> Block 572 -# 1735| Block 573 -# 1735| r1735_1(glval) = VariableAddress[x572] : -# 1735| mu1735_2(String) = Uninitialized[x572] : &:r1735_1 -# 1735| r1735_3(glval) = FunctionAddress[String] : -# 1735| v1735_4(void) = Call[String] : func:r1735_3, this:r1735_1 -# 1735| mu1735_5(unknown) = ^CallSideEffect : ~m? -# 1735| mu1735_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1735_1 -# 1736| r1736_1(glval) = VariableAddress[x572] : -# 1736| r1736_2(glval) = FunctionAddress[~String] : -# 1736| v1736_3(void) = Call[~String] : func:r1736_2, this:r1736_1 -# 1736| mu1736_4(unknown) = ^CallSideEffect : ~m? -# 1736| v1736_5(void) = ^IndirectReadSideEffect[-1] : &:r1736_1, ~m? -# 1736| mu1736_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1736_1 -# 1736| r1736_7(bool) = Constant[0] : -# 1736| v1736_8(void) = ConditionalBranch : r1736_7 +# 35| Block 573 +# 35| r35_8009(glval) = VariableAddress[x572] : +# 35| mu35_8010(String) = Uninitialized[x572] : &:r35_8009 +# 35| r35_8011(glval) = FunctionAddress[String] : +# 35| v35_8012(void) = Call[String] : func:r35_8011, this:r35_8009 +# 35| mu35_8013(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8009 +# 35| r35_8015(glval) = VariableAddress[x572] : +# 35| r35_8016(glval) = FunctionAddress[~String] : +# 35| v35_8017(void) = Call[~String] : func:r35_8016, this:r35_8015 +# 35| mu35_8018(unknown) = ^CallSideEffect : ~m? +# 35| v35_8019(void) = ^IndirectReadSideEffect[-1] : &:r35_8015, ~m? +# 35| mu35_8020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8015 +# 35| r35_8021(bool) = Constant[0] : +# 35| v35_8022(void) = ConditionalBranch : r35_8021 #-----| False -> Block 574 #-----| True (back edge) -> Block 573 -# 1738| Block 574 -# 1738| r1738_1(glval) = VariableAddress[x573] : -# 1738| mu1738_2(String) = Uninitialized[x573] : &:r1738_1 -# 1738| r1738_3(glval) = FunctionAddress[String] : -# 1738| v1738_4(void) = Call[String] : func:r1738_3, this:r1738_1 -# 1738| mu1738_5(unknown) = ^CallSideEffect : ~m? -# 1738| mu1738_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1738_1 -# 1739| r1739_1(glval) = VariableAddress[x573] : -# 1739| r1739_2(glval) = FunctionAddress[~String] : -# 1739| v1739_3(void) = Call[~String] : func:r1739_2, this:r1739_1 -# 1739| mu1739_4(unknown) = ^CallSideEffect : ~m? -# 1739| v1739_5(void) = ^IndirectReadSideEffect[-1] : &:r1739_1, ~m? -# 1739| mu1739_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1739_1 -# 1739| r1739_7(bool) = Constant[0] : -# 1739| v1739_8(void) = ConditionalBranch : r1739_7 +# 35| Block 574 +# 35| r35_8023(glval) = VariableAddress[x573] : +# 35| mu35_8024(String) = Uninitialized[x573] : &:r35_8023 +# 35| r35_8025(glval) = FunctionAddress[String] : +# 35| v35_8026(void) = Call[String] : func:r35_8025, this:r35_8023 +# 35| mu35_8027(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8023 +# 35| r35_8029(glval) = VariableAddress[x573] : +# 35| r35_8030(glval) = FunctionAddress[~String] : +# 35| v35_8031(void) = Call[~String] : func:r35_8030, this:r35_8029 +# 35| mu35_8032(unknown) = ^CallSideEffect : ~m? +# 35| v35_8033(void) = ^IndirectReadSideEffect[-1] : &:r35_8029, ~m? +# 35| mu35_8034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8029 +# 35| r35_8035(bool) = Constant[0] : +# 35| v35_8036(void) = ConditionalBranch : r35_8035 #-----| False -> Block 575 #-----| True (back edge) -> Block 574 -# 1741| Block 575 -# 1741| r1741_1(glval) = VariableAddress[x574] : -# 1741| mu1741_2(String) = Uninitialized[x574] : &:r1741_1 -# 1741| r1741_3(glval) = FunctionAddress[String] : -# 1741| v1741_4(void) = Call[String] : func:r1741_3, this:r1741_1 -# 1741| mu1741_5(unknown) = ^CallSideEffect : ~m? -# 1741| mu1741_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1741_1 -# 1742| r1742_1(glval) = VariableAddress[x574] : -# 1742| r1742_2(glval) = FunctionAddress[~String] : -# 1742| v1742_3(void) = Call[~String] : func:r1742_2, this:r1742_1 -# 1742| mu1742_4(unknown) = ^CallSideEffect : ~m? -# 1742| v1742_5(void) = ^IndirectReadSideEffect[-1] : &:r1742_1, ~m? -# 1742| mu1742_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1742_1 -# 1742| r1742_7(bool) = Constant[0] : -# 1742| v1742_8(void) = ConditionalBranch : r1742_7 +# 35| Block 575 +# 35| r35_8037(glval) = VariableAddress[x574] : +# 35| mu35_8038(String) = Uninitialized[x574] : &:r35_8037 +# 35| r35_8039(glval) = FunctionAddress[String] : +# 35| v35_8040(void) = Call[String] : func:r35_8039, this:r35_8037 +# 35| mu35_8041(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8037 +# 35| r35_8043(glval) = VariableAddress[x574] : +# 35| r35_8044(glval) = FunctionAddress[~String] : +# 35| v35_8045(void) = Call[~String] : func:r35_8044, this:r35_8043 +# 35| mu35_8046(unknown) = ^CallSideEffect : ~m? +# 35| v35_8047(void) = ^IndirectReadSideEffect[-1] : &:r35_8043, ~m? +# 35| mu35_8048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8043 +# 35| r35_8049(bool) = Constant[0] : +# 35| v35_8050(void) = ConditionalBranch : r35_8049 #-----| False -> Block 576 #-----| True (back edge) -> Block 575 -# 1744| Block 576 -# 1744| r1744_1(glval) = VariableAddress[x575] : -# 1744| mu1744_2(String) = Uninitialized[x575] : &:r1744_1 -# 1744| r1744_3(glval) = FunctionAddress[String] : -# 1744| v1744_4(void) = Call[String] : func:r1744_3, this:r1744_1 -# 1744| mu1744_5(unknown) = ^CallSideEffect : ~m? -# 1744| mu1744_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1744_1 -# 1745| r1745_1(glval) = VariableAddress[x575] : -# 1745| r1745_2(glval) = FunctionAddress[~String] : -# 1745| v1745_3(void) = Call[~String] : func:r1745_2, this:r1745_1 -# 1745| mu1745_4(unknown) = ^CallSideEffect : ~m? -# 1745| v1745_5(void) = ^IndirectReadSideEffect[-1] : &:r1745_1, ~m? -# 1745| mu1745_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1745_1 -# 1745| r1745_7(bool) = Constant[0] : -# 1745| v1745_8(void) = ConditionalBranch : r1745_7 +# 35| Block 576 +# 35| r35_8051(glval) = VariableAddress[x575] : +# 35| mu35_8052(String) = Uninitialized[x575] : &:r35_8051 +# 35| r35_8053(glval) = FunctionAddress[String] : +# 35| v35_8054(void) = Call[String] : func:r35_8053, this:r35_8051 +# 35| mu35_8055(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8051 +# 35| r35_8057(glval) = VariableAddress[x575] : +# 35| r35_8058(glval) = FunctionAddress[~String] : +# 35| v35_8059(void) = Call[~String] : func:r35_8058, this:r35_8057 +# 35| mu35_8060(unknown) = ^CallSideEffect : ~m? +# 35| v35_8061(void) = ^IndirectReadSideEffect[-1] : &:r35_8057, ~m? +# 35| mu35_8062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8057 +# 35| r35_8063(bool) = Constant[0] : +# 35| v35_8064(void) = ConditionalBranch : r35_8063 #-----| False -> Block 577 #-----| True (back edge) -> Block 576 -# 1747| Block 577 -# 1747| r1747_1(glval) = VariableAddress[x576] : -# 1747| mu1747_2(String) = Uninitialized[x576] : &:r1747_1 -# 1747| r1747_3(glval) = FunctionAddress[String] : -# 1747| v1747_4(void) = Call[String] : func:r1747_3, this:r1747_1 -# 1747| mu1747_5(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1747_1 -# 1748| r1748_1(glval) = VariableAddress[x576] : -# 1748| r1748_2(glval) = FunctionAddress[~String] : -# 1748| v1748_3(void) = Call[~String] : func:r1748_2, this:r1748_1 -# 1748| mu1748_4(unknown) = ^CallSideEffect : ~m? -# 1748| v1748_5(void) = ^IndirectReadSideEffect[-1] : &:r1748_1, ~m? -# 1748| mu1748_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1748_1 -# 1748| r1748_7(bool) = Constant[0] : -# 1748| v1748_8(void) = ConditionalBranch : r1748_7 +# 35| Block 577 +# 35| r35_8065(glval) = VariableAddress[x576] : +# 35| mu35_8066(String) = Uninitialized[x576] : &:r35_8065 +# 35| r35_8067(glval) = FunctionAddress[String] : +# 35| v35_8068(void) = Call[String] : func:r35_8067, this:r35_8065 +# 35| mu35_8069(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8065 +# 35| r35_8071(glval) = VariableAddress[x576] : +# 35| r35_8072(glval) = FunctionAddress[~String] : +# 35| v35_8073(void) = Call[~String] : func:r35_8072, this:r35_8071 +# 35| mu35_8074(unknown) = ^CallSideEffect : ~m? +# 35| v35_8075(void) = ^IndirectReadSideEffect[-1] : &:r35_8071, ~m? +# 35| mu35_8076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8071 +# 35| r35_8077(bool) = Constant[0] : +# 35| v35_8078(void) = ConditionalBranch : r35_8077 #-----| False -> Block 578 #-----| True (back edge) -> Block 577 -# 1750| Block 578 -# 1750| r1750_1(glval) = VariableAddress[x577] : -# 1750| mu1750_2(String) = Uninitialized[x577] : &:r1750_1 -# 1750| r1750_3(glval) = FunctionAddress[String] : -# 1750| v1750_4(void) = Call[String] : func:r1750_3, this:r1750_1 -# 1750| mu1750_5(unknown) = ^CallSideEffect : ~m? -# 1750| mu1750_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1750_1 -# 1751| r1751_1(glval) = VariableAddress[x577] : -# 1751| r1751_2(glval) = FunctionAddress[~String] : -# 1751| v1751_3(void) = Call[~String] : func:r1751_2, this:r1751_1 -# 1751| mu1751_4(unknown) = ^CallSideEffect : ~m? -# 1751| v1751_5(void) = ^IndirectReadSideEffect[-1] : &:r1751_1, ~m? -# 1751| mu1751_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1751_1 -# 1751| r1751_7(bool) = Constant[0] : -# 1751| v1751_8(void) = ConditionalBranch : r1751_7 +# 35| Block 578 +# 35| r35_8079(glval) = VariableAddress[x577] : +# 35| mu35_8080(String) = Uninitialized[x577] : &:r35_8079 +# 35| r35_8081(glval) = FunctionAddress[String] : +# 35| v35_8082(void) = Call[String] : func:r35_8081, this:r35_8079 +# 35| mu35_8083(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8079 +# 35| r35_8085(glval) = VariableAddress[x577] : +# 35| r35_8086(glval) = FunctionAddress[~String] : +# 35| v35_8087(void) = Call[~String] : func:r35_8086, this:r35_8085 +# 35| mu35_8088(unknown) = ^CallSideEffect : ~m? +# 35| v35_8089(void) = ^IndirectReadSideEffect[-1] : &:r35_8085, ~m? +# 35| mu35_8090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8085 +# 35| r35_8091(bool) = Constant[0] : +# 35| v35_8092(void) = ConditionalBranch : r35_8091 #-----| False -> Block 579 #-----| True (back edge) -> Block 578 -# 1753| Block 579 -# 1753| r1753_1(glval) = VariableAddress[x578] : -# 1753| mu1753_2(String) = Uninitialized[x578] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[String] : -# 1753| v1753_4(void) = Call[String] : func:r1753_3, this:r1753_1 -# 1753| mu1753_5(unknown) = ^CallSideEffect : ~m? -# 1753| mu1753_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1754| r1754_1(glval) = VariableAddress[x578] : -# 1754| r1754_2(glval) = FunctionAddress[~String] : -# 1754| v1754_3(void) = Call[~String] : func:r1754_2, this:r1754_1 -# 1754| mu1754_4(unknown) = ^CallSideEffect : ~m? -# 1754| v1754_5(void) = ^IndirectReadSideEffect[-1] : &:r1754_1, ~m? -# 1754| mu1754_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1754| r1754_7(bool) = Constant[0] : -# 1754| v1754_8(void) = ConditionalBranch : r1754_7 +# 35| Block 579 +# 35| r35_8093(glval) = VariableAddress[x578] : +# 35| mu35_8094(String) = Uninitialized[x578] : &:r35_8093 +# 35| r35_8095(glval) = FunctionAddress[String] : +# 35| v35_8096(void) = Call[String] : func:r35_8095, this:r35_8093 +# 35| mu35_8097(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8093 +# 35| r35_8099(glval) = VariableAddress[x578] : +# 35| r35_8100(glval) = FunctionAddress[~String] : +# 35| v35_8101(void) = Call[~String] : func:r35_8100, this:r35_8099 +# 35| mu35_8102(unknown) = ^CallSideEffect : ~m? +# 35| v35_8103(void) = ^IndirectReadSideEffect[-1] : &:r35_8099, ~m? +# 35| mu35_8104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8099 +# 35| r35_8105(bool) = Constant[0] : +# 35| v35_8106(void) = ConditionalBranch : r35_8105 #-----| False -> Block 580 #-----| True (back edge) -> Block 579 -# 1756| Block 580 -# 1756| r1756_1(glval) = VariableAddress[x579] : -# 1756| mu1756_2(String) = Uninitialized[x579] : &:r1756_1 -# 1756| r1756_3(glval) = FunctionAddress[String] : -# 1756| v1756_4(void) = Call[String] : func:r1756_3, this:r1756_1 -# 1756| mu1756_5(unknown) = ^CallSideEffect : ~m? -# 1756| mu1756_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 -# 1757| r1757_1(glval) = VariableAddress[x579] : -# 1757| r1757_2(glval) = FunctionAddress[~String] : -# 1757| v1757_3(void) = Call[~String] : func:r1757_2, this:r1757_1 -# 1757| mu1757_4(unknown) = ^CallSideEffect : ~m? -# 1757| v1757_5(void) = ^IndirectReadSideEffect[-1] : &:r1757_1, ~m? -# 1757| mu1757_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1757_1 -# 1757| r1757_7(bool) = Constant[0] : -# 1757| v1757_8(void) = ConditionalBranch : r1757_7 +# 35| Block 580 +# 35| r35_8107(glval) = VariableAddress[x579] : +# 35| mu35_8108(String) = Uninitialized[x579] : &:r35_8107 +# 35| r35_8109(glval) = FunctionAddress[String] : +# 35| v35_8110(void) = Call[String] : func:r35_8109, this:r35_8107 +# 35| mu35_8111(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8107 +# 35| r35_8113(glval) = VariableAddress[x579] : +# 35| r35_8114(glval) = FunctionAddress[~String] : +# 35| v35_8115(void) = Call[~String] : func:r35_8114, this:r35_8113 +# 35| mu35_8116(unknown) = ^CallSideEffect : ~m? +# 35| v35_8117(void) = ^IndirectReadSideEffect[-1] : &:r35_8113, ~m? +# 35| mu35_8118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8113 +# 35| r35_8119(bool) = Constant[0] : +# 35| v35_8120(void) = ConditionalBranch : r35_8119 #-----| False -> Block 581 #-----| True (back edge) -> Block 580 -# 1759| Block 581 -# 1759| r1759_1(glval) = VariableAddress[x580] : -# 1759| mu1759_2(String) = Uninitialized[x580] : &:r1759_1 -# 1759| r1759_3(glval) = FunctionAddress[String] : -# 1759| v1759_4(void) = Call[String] : func:r1759_3, this:r1759_1 -# 1759| mu1759_5(unknown) = ^CallSideEffect : ~m? -# 1759| mu1759_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1759_1 -# 1760| r1760_1(glval) = VariableAddress[x580] : -# 1760| r1760_2(glval) = FunctionAddress[~String] : -# 1760| v1760_3(void) = Call[~String] : func:r1760_2, this:r1760_1 -# 1760| mu1760_4(unknown) = ^CallSideEffect : ~m? -# 1760| v1760_5(void) = ^IndirectReadSideEffect[-1] : &:r1760_1, ~m? -# 1760| mu1760_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1760_1 -# 1760| r1760_7(bool) = Constant[0] : -# 1760| v1760_8(void) = ConditionalBranch : r1760_7 +# 35| Block 581 +# 35| r35_8121(glval) = VariableAddress[x580] : +# 35| mu35_8122(String) = Uninitialized[x580] : &:r35_8121 +# 35| r35_8123(glval) = FunctionAddress[String] : +# 35| v35_8124(void) = Call[String] : func:r35_8123, this:r35_8121 +# 35| mu35_8125(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8121 +# 35| r35_8127(glval) = VariableAddress[x580] : +# 35| r35_8128(glval) = FunctionAddress[~String] : +# 35| v35_8129(void) = Call[~String] : func:r35_8128, this:r35_8127 +# 35| mu35_8130(unknown) = ^CallSideEffect : ~m? +# 35| v35_8131(void) = ^IndirectReadSideEffect[-1] : &:r35_8127, ~m? +# 35| mu35_8132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8127 +# 35| r35_8133(bool) = Constant[0] : +# 35| v35_8134(void) = ConditionalBranch : r35_8133 #-----| False -> Block 582 #-----| True (back edge) -> Block 581 -# 1762| Block 582 -# 1762| r1762_1(glval) = VariableAddress[x581] : -# 1762| mu1762_2(String) = Uninitialized[x581] : &:r1762_1 -# 1762| r1762_3(glval) = FunctionAddress[String] : -# 1762| v1762_4(void) = Call[String] : func:r1762_3, this:r1762_1 -# 1762| mu1762_5(unknown) = ^CallSideEffect : ~m? -# 1762| mu1762_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1762_1 -# 1763| r1763_1(glval) = VariableAddress[x581] : -# 1763| r1763_2(glval) = FunctionAddress[~String] : -# 1763| v1763_3(void) = Call[~String] : func:r1763_2, this:r1763_1 -# 1763| mu1763_4(unknown) = ^CallSideEffect : ~m? -# 1763| v1763_5(void) = ^IndirectReadSideEffect[-1] : &:r1763_1, ~m? -# 1763| mu1763_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1763_1 -# 1763| r1763_7(bool) = Constant[0] : -# 1763| v1763_8(void) = ConditionalBranch : r1763_7 +# 35| Block 582 +# 35| r35_8135(glval) = VariableAddress[x581] : +# 35| mu35_8136(String) = Uninitialized[x581] : &:r35_8135 +# 35| r35_8137(glval) = FunctionAddress[String] : +# 35| v35_8138(void) = Call[String] : func:r35_8137, this:r35_8135 +# 35| mu35_8139(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8135 +# 35| r35_8141(glval) = VariableAddress[x581] : +# 35| r35_8142(glval) = FunctionAddress[~String] : +# 35| v35_8143(void) = Call[~String] : func:r35_8142, this:r35_8141 +# 35| mu35_8144(unknown) = ^CallSideEffect : ~m? +# 35| v35_8145(void) = ^IndirectReadSideEffect[-1] : &:r35_8141, ~m? +# 35| mu35_8146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8141 +# 35| r35_8147(bool) = Constant[0] : +# 35| v35_8148(void) = ConditionalBranch : r35_8147 #-----| False -> Block 583 #-----| True (back edge) -> Block 582 -# 1765| Block 583 -# 1765| r1765_1(glval) = VariableAddress[x582] : -# 1765| mu1765_2(String) = Uninitialized[x582] : &:r1765_1 -# 1765| r1765_3(glval) = FunctionAddress[String] : -# 1765| v1765_4(void) = Call[String] : func:r1765_3, this:r1765_1 -# 1765| mu1765_5(unknown) = ^CallSideEffect : ~m? -# 1765| mu1765_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1765_1 -# 1766| r1766_1(glval) = VariableAddress[x582] : -# 1766| r1766_2(glval) = FunctionAddress[~String] : -# 1766| v1766_3(void) = Call[~String] : func:r1766_2, this:r1766_1 -# 1766| mu1766_4(unknown) = ^CallSideEffect : ~m? -# 1766| v1766_5(void) = ^IndirectReadSideEffect[-1] : &:r1766_1, ~m? -# 1766| mu1766_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1766_1 -# 1766| r1766_7(bool) = Constant[0] : -# 1766| v1766_8(void) = ConditionalBranch : r1766_7 +# 35| Block 583 +# 35| r35_8149(glval) = VariableAddress[x582] : +# 35| mu35_8150(String) = Uninitialized[x582] : &:r35_8149 +# 35| r35_8151(glval) = FunctionAddress[String] : +# 35| v35_8152(void) = Call[String] : func:r35_8151, this:r35_8149 +# 35| mu35_8153(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8149 +# 35| r35_8155(glval) = VariableAddress[x582] : +# 35| r35_8156(glval) = FunctionAddress[~String] : +# 35| v35_8157(void) = Call[~String] : func:r35_8156, this:r35_8155 +# 35| mu35_8158(unknown) = ^CallSideEffect : ~m? +# 35| v35_8159(void) = ^IndirectReadSideEffect[-1] : &:r35_8155, ~m? +# 35| mu35_8160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8155 +# 35| r35_8161(bool) = Constant[0] : +# 35| v35_8162(void) = ConditionalBranch : r35_8161 #-----| False -> Block 584 #-----| True (back edge) -> Block 583 -# 1768| Block 584 -# 1768| r1768_1(glval) = VariableAddress[x583] : -# 1768| mu1768_2(String) = Uninitialized[x583] : &:r1768_1 -# 1768| r1768_3(glval) = FunctionAddress[String] : -# 1768| v1768_4(void) = Call[String] : func:r1768_3, this:r1768_1 -# 1768| mu1768_5(unknown) = ^CallSideEffect : ~m? -# 1768| mu1768_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1768_1 -# 1769| r1769_1(glval) = VariableAddress[x583] : -# 1769| r1769_2(glval) = FunctionAddress[~String] : -# 1769| v1769_3(void) = Call[~String] : func:r1769_2, this:r1769_1 -# 1769| mu1769_4(unknown) = ^CallSideEffect : ~m? -# 1769| v1769_5(void) = ^IndirectReadSideEffect[-1] : &:r1769_1, ~m? -# 1769| mu1769_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1769_1 -# 1769| r1769_7(bool) = Constant[0] : -# 1769| v1769_8(void) = ConditionalBranch : r1769_7 +# 35| Block 584 +# 35| r35_8163(glval) = VariableAddress[x583] : +# 35| mu35_8164(String) = Uninitialized[x583] : &:r35_8163 +# 35| r35_8165(glval) = FunctionAddress[String] : +# 35| v35_8166(void) = Call[String] : func:r35_8165, this:r35_8163 +# 35| mu35_8167(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8163 +# 35| r35_8169(glval) = VariableAddress[x583] : +# 35| r35_8170(glval) = FunctionAddress[~String] : +# 35| v35_8171(void) = Call[~String] : func:r35_8170, this:r35_8169 +# 35| mu35_8172(unknown) = ^CallSideEffect : ~m? +# 35| v35_8173(void) = ^IndirectReadSideEffect[-1] : &:r35_8169, ~m? +# 35| mu35_8174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8169 +# 35| r35_8175(bool) = Constant[0] : +# 35| v35_8176(void) = ConditionalBranch : r35_8175 #-----| False -> Block 585 #-----| True (back edge) -> Block 584 -# 1771| Block 585 -# 1771| r1771_1(glval) = VariableAddress[x584] : -# 1771| mu1771_2(String) = Uninitialized[x584] : &:r1771_1 -# 1771| r1771_3(glval) = FunctionAddress[String] : -# 1771| v1771_4(void) = Call[String] : func:r1771_3, this:r1771_1 -# 1771| mu1771_5(unknown) = ^CallSideEffect : ~m? -# 1771| mu1771_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1771_1 -# 1772| r1772_1(glval) = VariableAddress[x584] : -# 1772| r1772_2(glval) = FunctionAddress[~String] : -# 1772| v1772_3(void) = Call[~String] : func:r1772_2, this:r1772_1 -# 1772| mu1772_4(unknown) = ^CallSideEffect : ~m? -# 1772| v1772_5(void) = ^IndirectReadSideEffect[-1] : &:r1772_1, ~m? -# 1772| mu1772_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1772_1 -# 1772| r1772_7(bool) = Constant[0] : -# 1772| v1772_8(void) = ConditionalBranch : r1772_7 +# 35| Block 585 +# 35| r35_8177(glval) = VariableAddress[x584] : +# 35| mu35_8178(String) = Uninitialized[x584] : &:r35_8177 +# 35| r35_8179(glval) = FunctionAddress[String] : +# 35| v35_8180(void) = Call[String] : func:r35_8179, this:r35_8177 +# 35| mu35_8181(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8177 +# 35| r35_8183(glval) = VariableAddress[x584] : +# 35| r35_8184(glval) = FunctionAddress[~String] : +# 35| v35_8185(void) = Call[~String] : func:r35_8184, this:r35_8183 +# 35| mu35_8186(unknown) = ^CallSideEffect : ~m? +# 35| v35_8187(void) = ^IndirectReadSideEffect[-1] : &:r35_8183, ~m? +# 35| mu35_8188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8183 +# 35| r35_8189(bool) = Constant[0] : +# 35| v35_8190(void) = ConditionalBranch : r35_8189 #-----| False -> Block 586 #-----| True (back edge) -> Block 585 -# 1774| Block 586 -# 1774| r1774_1(glval) = VariableAddress[x585] : -# 1774| mu1774_2(String) = Uninitialized[x585] : &:r1774_1 -# 1774| r1774_3(glval) = FunctionAddress[String] : -# 1774| v1774_4(void) = Call[String] : func:r1774_3, this:r1774_1 -# 1774| mu1774_5(unknown) = ^CallSideEffect : ~m? -# 1774| mu1774_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1774_1 -# 1775| r1775_1(glval) = VariableAddress[x585] : -# 1775| r1775_2(glval) = FunctionAddress[~String] : -# 1775| v1775_3(void) = Call[~String] : func:r1775_2, this:r1775_1 -# 1775| mu1775_4(unknown) = ^CallSideEffect : ~m? -# 1775| v1775_5(void) = ^IndirectReadSideEffect[-1] : &:r1775_1, ~m? -# 1775| mu1775_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1775_1 -# 1775| r1775_7(bool) = Constant[0] : -# 1775| v1775_8(void) = ConditionalBranch : r1775_7 +# 35| Block 586 +# 35| r35_8191(glval) = VariableAddress[x585] : +# 35| mu35_8192(String) = Uninitialized[x585] : &:r35_8191 +# 35| r35_8193(glval) = FunctionAddress[String] : +# 35| v35_8194(void) = Call[String] : func:r35_8193, this:r35_8191 +# 35| mu35_8195(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8191 +# 35| r35_8197(glval) = VariableAddress[x585] : +# 35| r35_8198(glval) = FunctionAddress[~String] : +# 35| v35_8199(void) = Call[~String] : func:r35_8198, this:r35_8197 +# 35| mu35_8200(unknown) = ^CallSideEffect : ~m? +# 35| v35_8201(void) = ^IndirectReadSideEffect[-1] : &:r35_8197, ~m? +# 35| mu35_8202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8197 +# 35| r35_8203(bool) = Constant[0] : +# 35| v35_8204(void) = ConditionalBranch : r35_8203 #-----| False -> Block 587 #-----| True (back edge) -> Block 586 -# 1777| Block 587 -# 1777| r1777_1(glval) = VariableAddress[x586] : -# 1777| mu1777_2(String) = Uninitialized[x586] : &:r1777_1 -# 1777| r1777_3(glval) = FunctionAddress[String] : -# 1777| v1777_4(void) = Call[String] : func:r1777_3, this:r1777_1 -# 1777| mu1777_5(unknown) = ^CallSideEffect : ~m? -# 1777| mu1777_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1777_1 -# 1778| r1778_1(glval) = VariableAddress[x586] : -# 1778| r1778_2(glval) = FunctionAddress[~String] : -# 1778| v1778_3(void) = Call[~String] : func:r1778_2, this:r1778_1 -# 1778| mu1778_4(unknown) = ^CallSideEffect : ~m? -# 1778| v1778_5(void) = ^IndirectReadSideEffect[-1] : &:r1778_1, ~m? -# 1778| mu1778_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1778_1 -# 1778| r1778_7(bool) = Constant[0] : -# 1778| v1778_8(void) = ConditionalBranch : r1778_7 +# 35| Block 587 +# 35| r35_8205(glval) = VariableAddress[x586] : +# 35| mu35_8206(String) = Uninitialized[x586] : &:r35_8205 +# 35| r35_8207(glval) = FunctionAddress[String] : +# 35| v35_8208(void) = Call[String] : func:r35_8207, this:r35_8205 +# 35| mu35_8209(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8205 +# 35| r35_8211(glval) = VariableAddress[x586] : +# 35| r35_8212(glval) = FunctionAddress[~String] : +# 35| v35_8213(void) = Call[~String] : func:r35_8212, this:r35_8211 +# 35| mu35_8214(unknown) = ^CallSideEffect : ~m? +# 35| v35_8215(void) = ^IndirectReadSideEffect[-1] : &:r35_8211, ~m? +# 35| mu35_8216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8211 +# 35| r35_8217(bool) = Constant[0] : +# 35| v35_8218(void) = ConditionalBranch : r35_8217 #-----| False -> Block 588 #-----| True (back edge) -> Block 587 -# 1780| Block 588 -# 1780| r1780_1(glval) = VariableAddress[x587] : -# 1780| mu1780_2(String) = Uninitialized[x587] : &:r1780_1 -# 1780| r1780_3(glval) = FunctionAddress[String] : -# 1780| v1780_4(void) = Call[String] : func:r1780_3, this:r1780_1 -# 1780| mu1780_5(unknown) = ^CallSideEffect : ~m? -# 1780| mu1780_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1780_1 -# 1781| r1781_1(glval) = VariableAddress[x587] : -# 1781| r1781_2(glval) = FunctionAddress[~String] : -# 1781| v1781_3(void) = Call[~String] : func:r1781_2, this:r1781_1 -# 1781| mu1781_4(unknown) = ^CallSideEffect : ~m? -# 1781| v1781_5(void) = ^IndirectReadSideEffect[-1] : &:r1781_1, ~m? -# 1781| mu1781_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1781_1 -# 1781| r1781_7(bool) = Constant[0] : -# 1781| v1781_8(void) = ConditionalBranch : r1781_7 +# 35| Block 588 +# 35| r35_8219(glval) = VariableAddress[x587] : +# 35| mu35_8220(String) = Uninitialized[x587] : &:r35_8219 +# 35| r35_8221(glval) = FunctionAddress[String] : +# 35| v35_8222(void) = Call[String] : func:r35_8221, this:r35_8219 +# 35| mu35_8223(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8219 +# 35| r35_8225(glval) = VariableAddress[x587] : +# 35| r35_8226(glval) = FunctionAddress[~String] : +# 35| v35_8227(void) = Call[~String] : func:r35_8226, this:r35_8225 +# 35| mu35_8228(unknown) = ^CallSideEffect : ~m? +# 35| v35_8229(void) = ^IndirectReadSideEffect[-1] : &:r35_8225, ~m? +# 35| mu35_8230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8225 +# 35| r35_8231(bool) = Constant[0] : +# 35| v35_8232(void) = ConditionalBranch : r35_8231 #-----| False -> Block 589 #-----| True (back edge) -> Block 588 -# 1783| Block 589 -# 1783| r1783_1(glval) = VariableAddress[x588] : -# 1783| mu1783_2(String) = Uninitialized[x588] : &:r1783_1 -# 1783| r1783_3(glval) = FunctionAddress[String] : -# 1783| v1783_4(void) = Call[String] : func:r1783_3, this:r1783_1 -# 1783| mu1783_5(unknown) = ^CallSideEffect : ~m? -# 1783| mu1783_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1783_1 -# 1784| r1784_1(glval) = VariableAddress[x588] : -# 1784| r1784_2(glval) = FunctionAddress[~String] : -# 1784| v1784_3(void) = Call[~String] : func:r1784_2, this:r1784_1 -# 1784| mu1784_4(unknown) = ^CallSideEffect : ~m? -# 1784| v1784_5(void) = ^IndirectReadSideEffect[-1] : &:r1784_1, ~m? -# 1784| mu1784_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1784_1 -# 1784| r1784_7(bool) = Constant[0] : -# 1784| v1784_8(void) = ConditionalBranch : r1784_7 +# 35| Block 589 +# 35| r35_8233(glval) = VariableAddress[x588] : +# 35| mu35_8234(String) = Uninitialized[x588] : &:r35_8233 +# 35| r35_8235(glval) = FunctionAddress[String] : +# 35| v35_8236(void) = Call[String] : func:r35_8235, this:r35_8233 +# 35| mu35_8237(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8233 +# 35| r35_8239(glval) = VariableAddress[x588] : +# 35| r35_8240(glval) = FunctionAddress[~String] : +# 35| v35_8241(void) = Call[~String] : func:r35_8240, this:r35_8239 +# 35| mu35_8242(unknown) = ^CallSideEffect : ~m? +# 35| v35_8243(void) = ^IndirectReadSideEffect[-1] : &:r35_8239, ~m? +# 35| mu35_8244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8239 +# 35| r35_8245(bool) = Constant[0] : +# 35| v35_8246(void) = ConditionalBranch : r35_8245 #-----| False -> Block 590 #-----| True (back edge) -> Block 589 -# 1786| Block 590 -# 1786| r1786_1(glval) = VariableAddress[x589] : -# 1786| mu1786_2(String) = Uninitialized[x589] : &:r1786_1 -# 1786| r1786_3(glval) = FunctionAddress[String] : -# 1786| v1786_4(void) = Call[String] : func:r1786_3, this:r1786_1 -# 1786| mu1786_5(unknown) = ^CallSideEffect : ~m? -# 1786| mu1786_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1786_1 -# 1787| r1787_1(glval) = VariableAddress[x589] : -# 1787| r1787_2(glval) = FunctionAddress[~String] : -# 1787| v1787_3(void) = Call[~String] : func:r1787_2, this:r1787_1 -# 1787| mu1787_4(unknown) = ^CallSideEffect : ~m? -# 1787| v1787_5(void) = ^IndirectReadSideEffect[-1] : &:r1787_1, ~m? -# 1787| mu1787_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1787_1 -# 1787| r1787_7(bool) = Constant[0] : -# 1787| v1787_8(void) = ConditionalBranch : r1787_7 +# 35| Block 590 +# 35| r35_8247(glval) = VariableAddress[x589] : +# 35| mu35_8248(String) = Uninitialized[x589] : &:r35_8247 +# 35| r35_8249(glval) = FunctionAddress[String] : +# 35| v35_8250(void) = Call[String] : func:r35_8249, this:r35_8247 +# 35| mu35_8251(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8247 +# 35| r35_8253(glval) = VariableAddress[x589] : +# 35| r35_8254(glval) = FunctionAddress[~String] : +# 35| v35_8255(void) = Call[~String] : func:r35_8254, this:r35_8253 +# 35| mu35_8256(unknown) = ^CallSideEffect : ~m? +# 35| v35_8257(void) = ^IndirectReadSideEffect[-1] : &:r35_8253, ~m? +# 35| mu35_8258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8253 +# 35| r35_8259(bool) = Constant[0] : +# 35| v35_8260(void) = ConditionalBranch : r35_8259 #-----| False -> Block 591 #-----| True (back edge) -> Block 590 -# 1789| Block 591 -# 1789| r1789_1(glval) = VariableAddress[x590] : -# 1789| mu1789_2(String) = Uninitialized[x590] : &:r1789_1 -# 1789| r1789_3(glval) = FunctionAddress[String] : -# 1789| v1789_4(void) = Call[String] : func:r1789_3, this:r1789_1 -# 1789| mu1789_5(unknown) = ^CallSideEffect : ~m? -# 1789| mu1789_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1789_1 -# 1790| r1790_1(glval) = VariableAddress[x590] : -# 1790| r1790_2(glval) = FunctionAddress[~String] : -# 1790| v1790_3(void) = Call[~String] : func:r1790_2, this:r1790_1 -# 1790| mu1790_4(unknown) = ^CallSideEffect : ~m? -# 1790| v1790_5(void) = ^IndirectReadSideEffect[-1] : &:r1790_1, ~m? -# 1790| mu1790_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1790_1 -# 1790| r1790_7(bool) = Constant[0] : -# 1790| v1790_8(void) = ConditionalBranch : r1790_7 +# 35| Block 591 +# 35| r35_8261(glval) = VariableAddress[x590] : +# 35| mu35_8262(String) = Uninitialized[x590] : &:r35_8261 +# 35| r35_8263(glval) = FunctionAddress[String] : +# 35| v35_8264(void) = Call[String] : func:r35_8263, this:r35_8261 +# 35| mu35_8265(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8261 +# 35| r35_8267(glval) = VariableAddress[x590] : +# 35| r35_8268(glval) = FunctionAddress[~String] : +# 35| v35_8269(void) = Call[~String] : func:r35_8268, this:r35_8267 +# 35| mu35_8270(unknown) = ^CallSideEffect : ~m? +# 35| v35_8271(void) = ^IndirectReadSideEffect[-1] : &:r35_8267, ~m? +# 35| mu35_8272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8267 +# 35| r35_8273(bool) = Constant[0] : +# 35| v35_8274(void) = ConditionalBranch : r35_8273 #-----| False -> Block 592 #-----| True (back edge) -> Block 591 -# 1792| Block 592 -# 1792| r1792_1(glval) = VariableAddress[x591] : -# 1792| mu1792_2(String) = Uninitialized[x591] : &:r1792_1 -# 1792| r1792_3(glval) = FunctionAddress[String] : -# 1792| v1792_4(void) = Call[String] : func:r1792_3, this:r1792_1 -# 1792| mu1792_5(unknown) = ^CallSideEffect : ~m? -# 1792| mu1792_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1792_1 -# 1793| r1793_1(glval) = VariableAddress[x591] : -# 1793| r1793_2(glval) = FunctionAddress[~String] : -# 1793| v1793_3(void) = Call[~String] : func:r1793_2, this:r1793_1 -# 1793| mu1793_4(unknown) = ^CallSideEffect : ~m? -# 1793| v1793_5(void) = ^IndirectReadSideEffect[-1] : &:r1793_1, ~m? -# 1793| mu1793_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1793_1 -# 1793| r1793_7(bool) = Constant[0] : -# 1793| v1793_8(void) = ConditionalBranch : r1793_7 +# 35| Block 592 +# 35| r35_8275(glval) = VariableAddress[x591] : +# 35| mu35_8276(String) = Uninitialized[x591] : &:r35_8275 +# 35| r35_8277(glval) = FunctionAddress[String] : +# 35| v35_8278(void) = Call[String] : func:r35_8277, this:r35_8275 +# 35| mu35_8279(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8275 +# 35| r35_8281(glval) = VariableAddress[x591] : +# 35| r35_8282(glval) = FunctionAddress[~String] : +# 35| v35_8283(void) = Call[~String] : func:r35_8282, this:r35_8281 +# 35| mu35_8284(unknown) = ^CallSideEffect : ~m? +# 35| v35_8285(void) = ^IndirectReadSideEffect[-1] : &:r35_8281, ~m? +# 35| mu35_8286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8281 +# 35| r35_8287(bool) = Constant[0] : +# 35| v35_8288(void) = ConditionalBranch : r35_8287 #-----| False -> Block 593 #-----| True (back edge) -> Block 592 -# 1795| Block 593 -# 1795| r1795_1(glval) = VariableAddress[x592] : -# 1795| mu1795_2(String) = Uninitialized[x592] : &:r1795_1 -# 1795| r1795_3(glval) = FunctionAddress[String] : -# 1795| v1795_4(void) = Call[String] : func:r1795_3, this:r1795_1 -# 1795| mu1795_5(unknown) = ^CallSideEffect : ~m? -# 1795| mu1795_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1795_1 -# 1796| r1796_1(glval) = VariableAddress[x592] : -# 1796| r1796_2(glval) = FunctionAddress[~String] : -# 1796| v1796_3(void) = Call[~String] : func:r1796_2, this:r1796_1 -# 1796| mu1796_4(unknown) = ^CallSideEffect : ~m? -# 1796| v1796_5(void) = ^IndirectReadSideEffect[-1] : &:r1796_1, ~m? -# 1796| mu1796_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1796_1 -# 1796| r1796_7(bool) = Constant[0] : -# 1796| v1796_8(void) = ConditionalBranch : r1796_7 +# 35| Block 593 +# 35| r35_8289(glval) = VariableAddress[x592] : +# 35| mu35_8290(String) = Uninitialized[x592] : &:r35_8289 +# 35| r35_8291(glval) = FunctionAddress[String] : +# 35| v35_8292(void) = Call[String] : func:r35_8291, this:r35_8289 +# 35| mu35_8293(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8289 +# 35| r35_8295(glval) = VariableAddress[x592] : +# 35| r35_8296(glval) = FunctionAddress[~String] : +# 35| v35_8297(void) = Call[~String] : func:r35_8296, this:r35_8295 +# 35| mu35_8298(unknown) = ^CallSideEffect : ~m? +# 35| v35_8299(void) = ^IndirectReadSideEffect[-1] : &:r35_8295, ~m? +# 35| mu35_8300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8295 +# 35| r35_8301(bool) = Constant[0] : +# 35| v35_8302(void) = ConditionalBranch : r35_8301 #-----| False -> Block 594 #-----| True (back edge) -> Block 593 -# 1798| Block 594 -# 1798| r1798_1(glval) = VariableAddress[x593] : -# 1798| mu1798_2(String) = Uninitialized[x593] : &:r1798_1 -# 1798| r1798_3(glval) = FunctionAddress[String] : -# 1798| v1798_4(void) = Call[String] : func:r1798_3, this:r1798_1 -# 1798| mu1798_5(unknown) = ^CallSideEffect : ~m? -# 1798| mu1798_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1798_1 -# 1799| r1799_1(glval) = VariableAddress[x593] : -# 1799| r1799_2(glval) = FunctionAddress[~String] : -# 1799| v1799_3(void) = Call[~String] : func:r1799_2, this:r1799_1 -# 1799| mu1799_4(unknown) = ^CallSideEffect : ~m? -# 1799| v1799_5(void) = ^IndirectReadSideEffect[-1] : &:r1799_1, ~m? -# 1799| mu1799_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1799_1 -# 1799| r1799_7(bool) = Constant[0] : -# 1799| v1799_8(void) = ConditionalBranch : r1799_7 +# 35| Block 594 +# 35| r35_8303(glval) = VariableAddress[x593] : +# 35| mu35_8304(String) = Uninitialized[x593] : &:r35_8303 +# 35| r35_8305(glval) = FunctionAddress[String] : +# 35| v35_8306(void) = Call[String] : func:r35_8305, this:r35_8303 +# 35| mu35_8307(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8303 +# 35| r35_8309(glval) = VariableAddress[x593] : +# 35| r35_8310(glval) = FunctionAddress[~String] : +# 35| v35_8311(void) = Call[~String] : func:r35_8310, this:r35_8309 +# 35| mu35_8312(unknown) = ^CallSideEffect : ~m? +# 35| v35_8313(void) = ^IndirectReadSideEffect[-1] : &:r35_8309, ~m? +# 35| mu35_8314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8309 +# 35| r35_8315(bool) = Constant[0] : +# 35| v35_8316(void) = ConditionalBranch : r35_8315 #-----| False -> Block 595 #-----| True (back edge) -> Block 594 -# 1801| Block 595 -# 1801| r1801_1(glval) = VariableAddress[x594] : -# 1801| mu1801_2(String) = Uninitialized[x594] : &:r1801_1 -# 1801| r1801_3(glval) = FunctionAddress[String] : -# 1801| v1801_4(void) = Call[String] : func:r1801_3, this:r1801_1 -# 1801| mu1801_5(unknown) = ^CallSideEffect : ~m? -# 1801| mu1801_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1801_1 -# 1802| r1802_1(glval) = VariableAddress[x594] : -# 1802| r1802_2(glval) = FunctionAddress[~String] : -# 1802| v1802_3(void) = Call[~String] : func:r1802_2, this:r1802_1 -# 1802| mu1802_4(unknown) = ^CallSideEffect : ~m? -# 1802| v1802_5(void) = ^IndirectReadSideEffect[-1] : &:r1802_1, ~m? -# 1802| mu1802_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1802_1 -# 1802| r1802_7(bool) = Constant[0] : -# 1802| v1802_8(void) = ConditionalBranch : r1802_7 +# 35| Block 595 +# 35| r35_8317(glval) = VariableAddress[x594] : +# 35| mu35_8318(String) = Uninitialized[x594] : &:r35_8317 +# 35| r35_8319(glval) = FunctionAddress[String] : +# 35| v35_8320(void) = Call[String] : func:r35_8319, this:r35_8317 +# 35| mu35_8321(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8317 +# 35| r35_8323(glval) = VariableAddress[x594] : +# 35| r35_8324(glval) = FunctionAddress[~String] : +# 35| v35_8325(void) = Call[~String] : func:r35_8324, this:r35_8323 +# 35| mu35_8326(unknown) = ^CallSideEffect : ~m? +# 35| v35_8327(void) = ^IndirectReadSideEffect[-1] : &:r35_8323, ~m? +# 35| mu35_8328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8323 +# 35| r35_8329(bool) = Constant[0] : +# 35| v35_8330(void) = ConditionalBranch : r35_8329 #-----| False -> Block 596 #-----| True (back edge) -> Block 595 -# 1804| Block 596 -# 1804| r1804_1(glval) = VariableAddress[x595] : -# 1804| mu1804_2(String) = Uninitialized[x595] : &:r1804_1 -# 1804| r1804_3(glval) = FunctionAddress[String] : -# 1804| v1804_4(void) = Call[String] : func:r1804_3, this:r1804_1 -# 1804| mu1804_5(unknown) = ^CallSideEffect : ~m? -# 1804| mu1804_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1804_1 -# 1805| r1805_1(glval) = VariableAddress[x595] : -# 1805| r1805_2(glval) = FunctionAddress[~String] : -# 1805| v1805_3(void) = Call[~String] : func:r1805_2, this:r1805_1 -# 1805| mu1805_4(unknown) = ^CallSideEffect : ~m? -# 1805| v1805_5(void) = ^IndirectReadSideEffect[-1] : &:r1805_1, ~m? -# 1805| mu1805_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1805_1 -# 1805| r1805_7(bool) = Constant[0] : -# 1805| v1805_8(void) = ConditionalBranch : r1805_7 +# 35| Block 596 +# 35| r35_8331(glval) = VariableAddress[x595] : +# 35| mu35_8332(String) = Uninitialized[x595] : &:r35_8331 +# 35| r35_8333(glval) = FunctionAddress[String] : +# 35| v35_8334(void) = Call[String] : func:r35_8333, this:r35_8331 +# 35| mu35_8335(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8331 +# 35| r35_8337(glval) = VariableAddress[x595] : +# 35| r35_8338(glval) = FunctionAddress[~String] : +# 35| v35_8339(void) = Call[~String] : func:r35_8338, this:r35_8337 +# 35| mu35_8340(unknown) = ^CallSideEffect : ~m? +# 35| v35_8341(void) = ^IndirectReadSideEffect[-1] : &:r35_8337, ~m? +# 35| mu35_8342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8337 +# 35| r35_8343(bool) = Constant[0] : +# 35| v35_8344(void) = ConditionalBranch : r35_8343 #-----| False -> Block 597 #-----| True (back edge) -> Block 596 -# 1807| Block 597 -# 1807| r1807_1(glval) = VariableAddress[x596] : -# 1807| mu1807_2(String) = Uninitialized[x596] : &:r1807_1 -# 1807| r1807_3(glval) = FunctionAddress[String] : -# 1807| v1807_4(void) = Call[String] : func:r1807_3, this:r1807_1 -# 1807| mu1807_5(unknown) = ^CallSideEffect : ~m? -# 1807| mu1807_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1807_1 -# 1808| r1808_1(glval) = VariableAddress[x596] : -# 1808| r1808_2(glval) = FunctionAddress[~String] : -# 1808| v1808_3(void) = Call[~String] : func:r1808_2, this:r1808_1 -# 1808| mu1808_4(unknown) = ^CallSideEffect : ~m? -# 1808| v1808_5(void) = ^IndirectReadSideEffect[-1] : &:r1808_1, ~m? -# 1808| mu1808_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1808_1 -# 1808| r1808_7(bool) = Constant[0] : -# 1808| v1808_8(void) = ConditionalBranch : r1808_7 +# 35| Block 597 +# 35| r35_8345(glval) = VariableAddress[x596] : +# 35| mu35_8346(String) = Uninitialized[x596] : &:r35_8345 +# 35| r35_8347(glval) = FunctionAddress[String] : +# 35| v35_8348(void) = Call[String] : func:r35_8347, this:r35_8345 +# 35| mu35_8349(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8345 +# 35| r35_8351(glval) = VariableAddress[x596] : +# 35| r35_8352(glval) = FunctionAddress[~String] : +# 35| v35_8353(void) = Call[~String] : func:r35_8352, this:r35_8351 +# 35| mu35_8354(unknown) = ^CallSideEffect : ~m? +# 35| v35_8355(void) = ^IndirectReadSideEffect[-1] : &:r35_8351, ~m? +# 35| mu35_8356(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8351 +# 35| r35_8357(bool) = Constant[0] : +# 35| v35_8358(void) = ConditionalBranch : r35_8357 #-----| False -> Block 598 #-----| True (back edge) -> Block 597 -# 1810| Block 598 -# 1810| r1810_1(glval) = VariableAddress[x597] : -# 1810| mu1810_2(String) = Uninitialized[x597] : &:r1810_1 -# 1810| r1810_3(glval) = FunctionAddress[String] : -# 1810| v1810_4(void) = Call[String] : func:r1810_3, this:r1810_1 -# 1810| mu1810_5(unknown) = ^CallSideEffect : ~m? -# 1810| mu1810_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1810_1 -# 1811| r1811_1(glval) = VariableAddress[x597] : -# 1811| r1811_2(glval) = FunctionAddress[~String] : -# 1811| v1811_3(void) = Call[~String] : func:r1811_2, this:r1811_1 -# 1811| mu1811_4(unknown) = ^CallSideEffect : ~m? -# 1811| v1811_5(void) = ^IndirectReadSideEffect[-1] : &:r1811_1, ~m? -# 1811| mu1811_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1811_1 -# 1811| r1811_7(bool) = Constant[0] : -# 1811| v1811_8(void) = ConditionalBranch : r1811_7 +# 35| Block 598 +# 35| r35_8359(glval) = VariableAddress[x597] : +# 35| mu35_8360(String) = Uninitialized[x597] : &:r35_8359 +# 35| r35_8361(glval) = FunctionAddress[String] : +# 35| v35_8362(void) = Call[String] : func:r35_8361, this:r35_8359 +# 35| mu35_8363(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8359 +# 35| r35_8365(glval) = VariableAddress[x597] : +# 35| r35_8366(glval) = FunctionAddress[~String] : +# 35| v35_8367(void) = Call[~String] : func:r35_8366, this:r35_8365 +# 35| mu35_8368(unknown) = ^CallSideEffect : ~m? +# 35| v35_8369(void) = ^IndirectReadSideEffect[-1] : &:r35_8365, ~m? +# 35| mu35_8370(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8365 +# 35| r35_8371(bool) = Constant[0] : +# 35| v35_8372(void) = ConditionalBranch : r35_8371 #-----| False -> Block 599 #-----| True (back edge) -> Block 598 -# 1813| Block 599 -# 1813| r1813_1(glval) = VariableAddress[x598] : -# 1813| mu1813_2(String) = Uninitialized[x598] : &:r1813_1 -# 1813| r1813_3(glval) = FunctionAddress[String] : -# 1813| v1813_4(void) = Call[String] : func:r1813_3, this:r1813_1 -# 1813| mu1813_5(unknown) = ^CallSideEffect : ~m? -# 1813| mu1813_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1813_1 -# 1814| r1814_1(glval) = VariableAddress[x598] : -# 1814| r1814_2(glval) = FunctionAddress[~String] : -# 1814| v1814_3(void) = Call[~String] : func:r1814_2, this:r1814_1 -# 1814| mu1814_4(unknown) = ^CallSideEffect : ~m? -# 1814| v1814_5(void) = ^IndirectReadSideEffect[-1] : &:r1814_1, ~m? -# 1814| mu1814_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1814_1 -# 1814| r1814_7(bool) = Constant[0] : -# 1814| v1814_8(void) = ConditionalBranch : r1814_7 +# 35| Block 599 +# 35| r35_8373(glval) = VariableAddress[x598] : +# 35| mu35_8374(String) = Uninitialized[x598] : &:r35_8373 +# 35| r35_8375(glval) = FunctionAddress[String] : +# 35| v35_8376(void) = Call[String] : func:r35_8375, this:r35_8373 +# 35| mu35_8377(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8373 +# 35| r35_8379(glval) = VariableAddress[x598] : +# 35| r35_8380(glval) = FunctionAddress[~String] : +# 35| v35_8381(void) = Call[~String] : func:r35_8380, this:r35_8379 +# 35| mu35_8382(unknown) = ^CallSideEffect : ~m? +# 35| v35_8383(void) = ^IndirectReadSideEffect[-1] : &:r35_8379, ~m? +# 35| mu35_8384(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8379 +# 35| r35_8385(bool) = Constant[0] : +# 35| v35_8386(void) = ConditionalBranch : r35_8385 #-----| False -> Block 600 #-----| True (back edge) -> Block 599 -# 1816| Block 600 -# 1816| r1816_1(glval) = VariableAddress[x599] : -# 1816| mu1816_2(String) = Uninitialized[x599] : &:r1816_1 -# 1816| r1816_3(glval) = FunctionAddress[String] : -# 1816| v1816_4(void) = Call[String] : func:r1816_3, this:r1816_1 -# 1816| mu1816_5(unknown) = ^CallSideEffect : ~m? -# 1816| mu1816_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1816_1 -# 1817| r1817_1(glval) = VariableAddress[x599] : -# 1817| r1817_2(glval) = FunctionAddress[~String] : -# 1817| v1817_3(void) = Call[~String] : func:r1817_2, this:r1817_1 -# 1817| mu1817_4(unknown) = ^CallSideEffect : ~m? -# 1817| v1817_5(void) = ^IndirectReadSideEffect[-1] : &:r1817_1, ~m? -# 1817| mu1817_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1817_1 -# 1817| r1817_7(bool) = Constant[0] : -# 1817| v1817_8(void) = ConditionalBranch : r1817_7 +# 35| Block 600 +# 35| r35_8387(glval) = VariableAddress[x599] : +# 35| mu35_8388(String) = Uninitialized[x599] : &:r35_8387 +# 35| r35_8389(glval) = FunctionAddress[String] : +# 35| v35_8390(void) = Call[String] : func:r35_8389, this:r35_8387 +# 35| mu35_8391(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8387 +# 35| r35_8393(glval) = VariableAddress[x599] : +# 35| r35_8394(glval) = FunctionAddress[~String] : +# 35| v35_8395(void) = Call[~String] : func:r35_8394, this:r35_8393 +# 35| mu35_8396(unknown) = ^CallSideEffect : ~m? +# 35| v35_8397(void) = ^IndirectReadSideEffect[-1] : &:r35_8393, ~m? +# 35| mu35_8398(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8393 +# 35| r35_8399(bool) = Constant[0] : +# 35| v35_8400(void) = ConditionalBranch : r35_8399 #-----| False -> Block 601 #-----| True (back edge) -> Block 600 -# 1819| Block 601 -# 1819| r1819_1(glval) = VariableAddress[x600] : -# 1819| mu1819_2(String) = Uninitialized[x600] : &:r1819_1 -# 1819| r1819_3(glval) = FunctionAddress[String] : -# 1819| v1819_4(void) = Call[String] : func:r1819_3, this:r1819_1 -# 1819| mu1819_5(unknown) = ^CallSideEffect : ~m? -# 1819| mu1819_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1819_1 -# 1820| r1820_1(glval) = VariableAddress[x600] : -# 1820| r1820_2(glval) = FunctionAddress[~String] : -# 1820| v1820_3(void) = Call[~String] : func:r1820_2, this:r1820_1 -# 1820| mu1820_4(unknown) = ^CallSideEffect : ~m? -# 1820| v1820_5(void) = ^IndirectReadSideEffect[-1] : &:r1820_1, ~m? -# 1820| mu1820_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1820_1 -# 1820| r1820_7(bool) = Constant[0] : -# 1820| v1820_8(void) = ConditionalBranch : r1820_7 +# 35| Block 601 +# 35| r35_8401(glval) = VariableAddress[x600] : +# 35| mu35_8402(String) = Uninitialized[x600] : &:r35_8401 +# 35| r35_8403(glval) = FunctionAddress[String] : +# 35| v35_8404(void) = Call[String] : func:r35_8403, this:r35_8401 +# 35| mu35_8405(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8401 +# 35| r35_8407(glval) = VariableAddress[x600] : +# 35| r35_8408(glval) = FunctionAddress[~String] : +# 35| v35_8409(void) = Call[~String] : func:r35_8408, this:r35_8407 +# 35| mu35_8410(unknown) = ^CallSideEffect : ~m? +# 35| v35_8411(void) = ^IndirectReadSideEffect[-1] : &:r35_8407, ~m? +# 35| mu35_8412(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8407 +# 35| r35_8413(bool) = Constant[0] : +# 35| v35_8414(void) = ConditionalBranch : r35_8413 #-----| False -> Block 602 #-----| True (back edge) -> Block 601 -# 1822| Block 602 -# 1822| r1822_1(glval) = VariableAddress[x601] : -# 1822| mu1822_2(String) = Uninitialized[x601] : &:r1822_1 -# 1822| r1822_3(glval) = FunctionAddress[String] : -# 1822| v1822_4(void) = Call[String] : func:r1822_3, this:r1822_1 -# 1822| mu1822_5(unknown) = ^CallSideEffect : ~m? -# 1822| mu1822_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1822_1 -# 1823| r1823_1(glval) = VariableAddress[x601] : -# 1823| r1823_2(glval) = FunctionAddress[~String] : -# 1823| v1823_3(void) = Call[~String] : func:r1823_2, this:r1823_1 -# 1823| mu1823_4(unknown) = ^CallSideEffect : ~m? -# 1823| v1823_5(void) = ^IndirectReadSideEffect[-1] : &:r1823_1, ~m? -# 1823| mu1823_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1823_1 -# 1823| r1823_7(bool) = Constant[0] : -# 1823| v1823_8(void) = ConditionalBranch : r1823_7 +# 35| Block 602 +# 35| r35_8415(glval) = VariableAddress[x601] : +# 35| mu35_8416(String) = Uninitialized[x601] : &:r35_8415 +# 35| r35_8417(glval) = FunctionAddress[String] : +# 35| v35_8418(void) = Call[String] : func:r35_8417, this:r35_8415 +# 35| mu35_8419(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8415 +# 35| r35_8421(glval) = VariableAddress[x601] : +# 35| r35_8422(glval) = FunctionAddress[~String] : +# 35| v35_8423(void) = Call[~String] : func:r35_8422, this:r35_8421 +# 35| mu35_8424(unknown) = ^CallSideEffect : ~m? +# 35| v35_8425(void) = ^IndirectReadSideEffect[-1] : &:r35_8421, ~m? +# 35| mu35_8426(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8421 +# 35| r35_8427(bool) = Constant[0] : +# 35| v35_8428(void) = ConditionalBranch : r35_8427 #-----| False -> Block 603 #-----| True (back edge) -> Block 602 -# 1825| Block 603 -# 1825| r1825_1(glval) = VariableAddress[x602] : -# 1825| mu1825_2(String) = Uninitialized[x602] : &:r1825_1 -# 1825| r1825_3(glval) = FunctionAddress[String] : -# 1825| v1825_4(void) = Call[String] : func:r1825_3, this:r1825_1 -# 1825| mu1825_5(unknown) = ^CallSideEffect : ~m? -# 1825| mu1825_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1825_1 -# 1826| r1826_1(glval) = VariableAddress[x602] : -# 1826| r1826_2(glval) = FunctionAddress[~String] : -# 1826| v1826_3(void) = Call[~String] : func:r1826_2, this:r1826_1 -# 1826| mu1826_4(unknown) = ^CallSideEffect : ~m? -# 1826| v1826_5(void) = ^IndirectReadSideEffect[-1] : &:r1826_1, ~m? -# 1826| mu1826_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1826_1 -# 1826| r1826_7(bool) = Constant[0] : -# 1826| v1826_8(void) = ConditionalBranch : r1826_7 +# 35| Block 603 +# 35| r35_8429(glval) = VariableAddress[x602] : +# 35| mu35_8430(String) = Uninitialized[x602] : &:r35_8429 +# 35| r35_8431(glval) = FunctionAddress[String] : +# 35| v35_8432(void) = Call[String] : func:r35_8431, this:r35_8429 +# 35| mu35_8433(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8429 +# 35| r35_8435(glval) = VariableAddress[x602] : +# 35| r35_8436(glval) = FunctionAddress[~String] : +# 35| v35_8437(void) = Call[~String] : func:r35_8436, this:r35_8435 +# 35| mu35_8438(unknown) = ^CallSideEffect : ~m? +# 35| v35_8439(void) = ^IndirectReadSideEffect[-1] : &:r35_8435, ~m? +# 35| mu35_8440(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8435 +# 35| r35_8441(bool) = Constant[0] : +# 35| v35_8442(void) = ConditionalBranch : r35_8441 #-----| False -> Block 604 #-----| True (back edge) -> Block 603 -# 1828| Block 604 -# 1828| r1828_1(glval) = VariableAddress[x603] : -# 1828| mu1828_2(String) = Uninitialized[x603] : &:r1828_1 -# 1828| r1828_3(glval) = FunctionAddress[String] : -# 1828| v1828_4(void) = Call[String] : func:r1828_3, this:r1828_1 -# 1828| mu1828_5(unknown) = ^CallSideEffect : ~m? -# 1828| mu1828_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1828_1 -# 1829| r1829_1(glval) = VariableAddress[x603] : -# 1829| r1829_2(glval) = FunctionAddress[~String] : -# 1829| v1829_3(void) = Call[~String] : func:r1829_2, this:r1829_1 -# 1829| mu1829_4(unknown) = ^CallSideEffect : ~m? -# 1829| v1829_5(void) = ^IndirectReadSideEffect[-1] : &:r1829_1, ~m? -# 1829| mu1829_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1829_1 -# 1829| r1829_7(bool) = Constant[0] : -# 1829| v1829_8(void) = ConditionalBranch : r1829_7 +# 35| Block 604 +# 35| r35_8443(glval) = VariableAddress[x603] : +# 35| mu35_8444(String) = Uninitialized[x603] : &:r35_8443 +# 35| r35_8445(glval) = FunctionAddress[String] : +# 35| v35_8446(void) = Call[String] : func:r35_8445, this:r35_8443 +# 35| mu35_8447(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8443 +# 35| r35_8449(glval) = VariableAddress[x603] : +# 35| r35_8450(glval) = FunctionAddress[~String] : +# 35| v35_8451(void) = Call[~String] : func:r35_8450, this:r35_8449 +# 35| mu35_8452(unknown) = ^CallSideEffect : ~m? +# 35| v35_8453(void) = ^IndirectReadSideEffect[-1] : &:r35_8449, ~m? +# 35| mu35_8454(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8449 +# 35| r35_8455(bool) = Constant[0] : +# 35| v35_8456(void) = ConditionalBranch : r35_8455 #-----| False -> Block 605 #-----| True (back edge) -> Block 604 -# 1831| Block 605 -# 1831| r1831_1(glval) = VariableAddress[x604] : -# 1831| mu1831_2(String) = Uninitialized[x604] : &:r1831_1 -# 1831| r1831_3(glval) = FunctionAddress[String] : -# 1831| v1831_4(void) = Call[String] : func:r1831_3, this:r1831_1 -# 1831| mu1831_5(unknown) = ^CallSideEffect : ~m? -# 1831| mu1831_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1831_1 -# 1832| r1832_1(glval) = VariableAddress[x604] : -# 1832| r1832_2(glval) = FunctionAddress[~String] : -# 1832| v1832_3(void) = Call[~String] : func:r1832_2, this:r1832_1 -# 1832| mu1832_4(unknown) = ^CallSideEffect : ~m? -# 1832| v1832_5(void) = ^IndirectReadSideEffect[-1] : &:r1832_1, ~m? -# 1832| mu1832_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1832_1 -# 1832| r1832_7(bool) = Constant[0] : -# 1832| v1832_8(void) = ConditionalBranch : r1832_7 +# 35| Block 605 +# 35| r35_8457(glval) = VariableAddress[x604] : +# 35| mu35_8458(String) = Uninitialized[x604] : &:r35_8457 +# 35| r35_8459(glval) = FunctionAddress[String] : +# 35| v35_8460(void) = Call[String] : func:r35_8459, this:r35_8457 +# 35| mu35_8461(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8457 +# 35| r35_8463(glval) = VariableAddress[x604] : +# 35| r35_8464(glval) = FunctionAddress[~String] : +# 35| v35_8465(void) = Call[~String] : func:r35_8464, this:r35_8463 +# 35| mu35_8466(unknown) = ^CallSideEffect : ~m? +# 35| v35_8467(void) = ^IndirectReadSideEffect[-1] : &:r35_8463, ~m? +# 35| mu35_8468(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8463 +# 35| r35_8469(bool) = Constant[0] : +# 35| v35_8470(void) = ConditionalBranch : r35_8469 #-----| False -> Block 606 #-----| True (back edge) -> Block 605 -# 1834| Block 606 -# 1834| r1834_1(glval) = VariableAddress[x605] : -# 1834| mu1834_2(String) = Uninitialized[x605] : &:r1834_1 -# 1834| r1834_3(glval) = FunctionAddress[String] : -# 1834| v1834_4(void) = Call[String] : func:r1834_3, this:r1834_1 -# 1834| mu1834_5(unknown) = ^CallSideEffect : ~m? -# 1834| mu1834_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1834_1 -# 1835| r1835_1(glval) = VariableAddress[x605] : -# 1835| r1835_2(glval) = FunctionAddress[~String] : -# 1835| v1835_3(void) = Call[~String] : func:r1835_2, this:r1835_1 -# 1835| mu1835_4(unknown) = ^CallSideEffect : ~m? -# 1835| v1835_5(void) = ^IndirectReadSideEffect[-1] : &:r1835_1, ~m? -# 1835| mu1835_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1835_1 -# 1835| r1835_7(bool) = Constant[0] : -# 1835| v1835_8(void) = ConditionalBranch : r1835_7 +# 35| Block 606 +# 35| r35_8471(glval) = VariableAddress[x605] : +# 35| mu35_8472(String) = Uninitialized[x605] : &:r35_8471 +# 35| r35_8473(glval) = FunctionAddress[String] : +# 35| v35_8474(void) = Call[String] : func:r35_8473, this:r35_8471 +# 35| mu35_8475(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8471 +# 35| r35_8477(glval) = VariableAddress[x605] : +# 35| r35_8478(glval) = FunctionAddress[~String] : +# 35| v35_8479(void) = Call[~String] : func:r35_8478, this:r35_8477 +# 35| mu35_8480(unknown) = ^CallSideEffect : ~m? +# 35| v35_8481(void) = ^IndirectReadSideEffect[-1] : &:r35_8477, ~m? +# 35| mu35_8482(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8477 +# 35| r35_8483(bool) = Constant[0] : +# 35| v35_8484(void) = ConditionalBranch : r35_8483 #-----| False -> Block 607 #-----| True (back edge) -> Block 606 -# 1837| Block 607 -# 1837| r1837_1(glval) = VariableAddress[x606] : -# 1837| mu1837_2(String) = Uninitialized[x606] : &:r1837_1 -# 1837| r1837_3(glval) = FunctionAddress[String] : -# 1837| v1837_4(void) = Call[String] : func:r1837_3, this:r1837_1 -# 1837| mu1837_5(unknown) = ^CallSideEffect : ~m? -# 1837| mu1837_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1837_1 -# 1838| r1838_1(glval) = VariableAddress[x606] : -# 1838| r1838_2(glval) = FunctionAddress[~String] : -# 1838| v1838_3(void) = Call[~String] : func:r1838_2, this:r1838_1 -# 1838| mu1838_4(unknown) = ^CallSideEffect : ~m? -# 1838| v1838_5(void) = ^IndirectReadSideEffect[-1] : &:r1838_1, ~m? -# 1838| mu1838_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1838_1 -# 1838| r1838_7(bool) = Constant[0] : -# 1838| v1838_8(void) = ConditionalBranch : r1838_7 +# 35| Block 607 +# 35| r35_8485(glval) = VariableAddress[x606] : +# 35| mu35_8486(String) = Uninitialized[x606] : &:r35_8485 +# 35| r35_8487(glval) = FunctionAddress[String] : +# 35| v35_8488(void) = Call[String] : func:r35_8487, this:r35_8485 +# 35| mu35_8489(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8485 +# 35| r35_8491(glval) = VariableAddress[x606] : +# 35| r35_8492(glval) = FunctionAddress[~String] : +# 35| v35_8493(void) = Call[~String] : func:r35_8492, this:r35_8491 +# 35| mu35_8494(unknown) = ^CallSideEffect : ~m? +# 35| v35_8495(void) = ^IndirectReadSideEffect[-1] : &:r35_8491, ~m? +# 35| mu35_8496(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8491 +# 35| r35_8497(bool) = Constant[0] : +# 35| v35_8498(void) = ConditionalBranch : r35_8497 #-----| False -> Block 608 #-----| True (back edge) -> Block 607 -# 1840| Block 608 -# 1840| r1840_1(glval) = VariableAddress[x607] : -# 1840| mu1840_2(String) = Uninitialized[x607] : &:r1840_1 -# 1840| r1840_3(glval) = FunctionAddress[String] : -# 1840| v1840_4(void) = Call[String] : func:r1840_3, this:r1840_1 -# 1840| mu1840_5(unknown) = ^CallSideEffect : ~m? -# 1840| mu1840_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1840_1 -# 1841| r1841_1(glval) = VariableAddress[x607] : -# 1841| r1841_2(glval) = FunctionAddress[~String] : -# 1841| v1841_3(void) = Call[~String] : func:r1841_2, this:r1841_1 -# 1841| mu1841_4(unknown) = ^CallSideEffect : ~m? -# 1841| v1841_5(void) = ^IndirectReadSideEffect[-1] : &:r1841_1, ~m? -# 1841| mu1841_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1841_1 -# 1841| r1841_7(bool) = Constant[0] : -# 1841| v1841_8(void) = ConditionalBranch : r1841_7 +# 35| Block 608 +# 35| r35_8499(glval) = VariableAddress[x607] : +# 35| mu35_8500(String) = Uninitialized[x607] : &:r35_8499 +# 35| r35_8501(glval) = FunctionAddress[String] : +# 35| v35_8502(void) = Call[String] : func:r35_8501, this:r35_8499 +# 35| mu35_8503(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8499 +# 35| r35_8505(glval) = VariableAddress[x607] : +# 35| r35_8506(glval) = FunctionAddress[~String] : +# 35| v35_8507(void) = Call[~String] : func:r35_8506, this:r35_8505 +# 35| mu35_8508(unknown) = ^CallSideEffect : ~m? +# 35| v35_8509(void) = ^IndirectReadSideEffect[-1] : &:r35_8505, ~m? +# 35| mu35_8510(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8505 +# 35| r35_8511(bool) = Constant[0] : +# 35| v35_8512(void) = ConditionalBranch : r35_8511 #-----| False -> Block 609 #-----| True (back edge) -> Block 608 -# 1843| Block 609 -# 1843| r1843_1(glval) = VariableAddress[x608] : -# 1843| mu1843_2(String) = Uninitialized[x608] : &:r1843_1 -# 1843| r1843_3(glval) = FunctionAddress[String] : -# 1843| v1843_4(void) = Call[String] : func:r1843_3, this:r1843_1 -# 1843| mu1843_5(unknown) = ^CallSideEffect : ~m? -# 1843| mu1843_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1843_1 -# 1844| r1844_1(glval) = VariableAddress[x608] : -# 1844| r1844_2(glval) = FunctionAddress[~String] : -# 1844| v1844_3(void) = Call[~String] : func:r1844_2, this:r1844_1 -# 1844| mu1844_4(unknown) = ^CallSideEffect : ~m? -# 1844| v1844_5(void) = ^IndirectReadSideEffect[-1] : &:r1844_1, ~m? -# 1844| mu1844_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| r1844_7(bool) = Constant[0] : -# 1844| v1844_8(void) = ConditionalBranch : r1844_7 +# 35| Block 609 +# 35| r35_8513(glval) = VariableAddress[x608] : +# 35| mu35_8514(String) = Uninitialized[x608] : &:r35_8513 +# 35| r35_8515(glval) = FunctionAddress[String] : +# 35| v35_8516(void) = Call[String] : func:r35_8515, this:r35_8513 +# 35| mu35_8517(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8513 +# 35| r35_8519(glval) = VariableAddress[x608] : +# 35| r35_8520(glval) = FunctionAddress[~String] : +# 35| v35_8521(void) = Call[~String] : func:r35_8520, this:r35_8519 +# 35| mu35_8522(unknown) = ^CallSideEffect : ~m? +# 35| v35_8523(void) = ^IndirectReadSideEffect[-1] : &:r35_8519, ~m? +# 35| mu35_8524(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8519 +# 35| r35_8525(bool) = Constant[0] : +# 35| v35_8526(void) = ConditionalBranch : r35_8525 #-----| False -> Block 610 #-----| True (back edge) -> Block 609 -# 1846| Block 610 -# 1846| r1846_1(glval) = VariableAddress[x609] : -# 1846| mu1846_2(String) = Uninitialized[x609] : &:r1846_1 -# 1846| r1846_3(glval) = FunctionAddress[String] : -# 1846| v1846_4(void) = Call[String] : func:r1846_3, this:r1846_1 -# 1846| mu1846_5(unknown) = ^CallSideEffect : ~m? -# 1846| mu1846_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 -# 1847| r1847_1(glval) = VariableAddress[x609] : -# 1847| r1847_2(glval) = FunctionAddress[~String] : -# 1847| v1847_3(void) = Call[~String] : func:r1847_2, this:r1847_1 -# 1847| mu1847_4(unknown) = ^CallSideEffect : ~m? -# 1847| v1847_5(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, ~m? -# 1847| mu1847_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 -# 1847| r1847_7(bool) = Constant[0] : -# 1847| v1847_8(void) = ConditionalBranch : r1847_7 +# 35| Block 610 +# 35| r35_8527(glval) = VariableAddress[x609] : +# 35| mu35_8528(String) = Uninitialized[x609] : &:r35_8527 +# 35| r35_8529(glval) = FunctionAddress[String] : +# 35| v35_8530(void) = Call[String] : func:r35_8529, this:r35_8527 +# 35| mu35_8531(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8527 +# 35| r35_8533(glval) = VariableAddress[x609] : +# 35| r35_8534(glval) = FunctionAddress[~String] : +# 35| v35_8535(void) = Call[~String] : func:r35_8534, this:r35_8533 +# 35| mu35_8536(unknown) = ^CallSideEffect : ~m? +# 35| v35_8537(void) = ^IndirectReadSideEffect[-1] : &:r35_8533, ~m? +# 35| mu35_8538(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8533 +# 35| r35_8539(bool) = Constant[0] : +# 35| v35_8540(void) = ConditionalBranch : r35_8539 #-----| False -> Block 611 #-----| True (back edge) -> Block 610 -# 1849| Block 611 -# 1849| r1849_1(glval) = VariableAddress[x610] : -# 1849| mu1849_2(String) = Uninitialized[x610] : &:r1849_1 -# 1849| r1849_3(glval) = FunctionAddress[String] : -# 1849| v1849_4(void) = Call[String] : func:r1849_3, this:r1849_1 -# 1849| mu1849_5(unknown) = ^CallSideEffect : ~m? -# 1849| mu1849_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1849_1 -# 1850| r1850_1(glval) = VariableAddress[x610] : -# 1850| r1850_2(glval) = FunctionAddress[~String] : -# 1850| v1850_3(void) = Call[~String] : func:r1850_2, this:r1850_1 -# 1850| mu1850_4(unknown) = ^CallSideEffect : ~m? -# 1850| v1850_5(void) = ^IndirectReadSideEffect[-1] : &:r1850_1, ~m? -# 1850| mu1850_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1850_1 -# 1850| r1850_7(bool) = Constant[0] : -# 1850| v1850_8(void) = ConditionalBranch : r1850_7 +# 35| Block 611 +# 35| r35_8541(glval) = VariableAddress[x610] : +# 35| mu35_8542(String) = Uninitialized[x610] : &:r35_8541 +# 35| r35_8543(glval) = FunctionAddress[String] : +# 35| v35_8544(void) = Call[String] : func:r35_8543, this:r35_8541 +# 35| mu35_8545(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8541 +# 35| r35_8547(glval) = VariableAddress[x610] : +# 35| r35_8548(glval) = FunctionAddress[~String] : +# 35| v35_8549(void) = Call[~String] : func:r35_8548, this:r35_8547 +# 35| mu35_8550(unknown) = ^CallSideEffect : ~m? +# 35| v35_8551(void) = ^IndirectReadSideEffect[-1] : &:r35_8547, ~m? +# 35| mu35_8552(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8547 +# 35| r35_8553(bool) = Constant[0] : +# 35| v35_8554(void) = ConditionalBranch : r35_8553 #-----| False -> Block 612 #-----| True (back edge) -> Block 611 -# 1852| Block 612 -# 1852| r1852_1(glval) = VariableAddress[x611] : -# 1852| mu1852_2(String) = Uninitialized[x611] : &:r1852_1 -# 1852| r1852_3(glval) = FunctionAddress[String] : -# 1852| v1852_4(void) = Call[String] : func:r1852_3, this:r1852_1 -# 1852| mu1852_5(unknown) = ^CallSideEffect : ~m? -# 1852| mu1852_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1852_1 -# 1853| r1853_1(glval) = VariableAddress[x611] : -# 1853| r1853_2(glval) = FunctionAddress[~String] : -# 1853| v1853_3(void) = Call[~String] : func:r1853_2, this:r1853_1 -# 1853| mu1853_4(unknown) = ^CallSideEffect : ~m? -# 1853| v1853_5(void) = ^IndirectReadSideEffect[-1] : &:r1853_1, ~m? -# 1853| mu1853_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1853_1 -# 1853| r1853_7(bool) = Constant[0] : -# 1853| v1853_8(void) = ConditionalBranch : r1853_7 +# 35| Block 612 +# 35| r35_8555(glval) = VariableAddress[x611] : +# 35| mu35_8556(String) = Uninitialized[x611] : &:r35_8555 +# 35| r35_8557(glval) = FunctionAddress[String] : +# 35| v35_8558(void) = Call[String] : func:r35_8557, this:r35_8555 +# 35| mu35_8559(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8555 +# 35| r35_8561(glval) = VariableAddress[x611] : +# 35| r35_8562(glval) = FunctionAddress[~String] : +# 35| v35_8563(void) = Call[~String] : func:r35_8562, this:r35_8561 +# 35| mu35_8564(unknown) = ^CallSideEffect : ~m? +# 35| v35_8565(void) = ^IndirectReadSideEffect[-1] : &:r35_8561, ~m? +# 35| mu35_8566(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8561 +# 35| r35_8567(bool) = Constant[0] : +# 35| v35_8568(void) = ConditionalBranch : r35_8567 #-----| False -> Block 613 #-----| True (back edge) -> Block 612 -# 1855| Block 613 -# 1855| r1855_1(glval) = VariableAddress[x612] : -# 1855| mu1855_2(String) = Uninitialized[x612] : &:r1855_1 -# 1855| r1855_3(glval) = FunctionAddress[String] : -# 1855| v1855_4(void) = Call[String] : func:r1855_3, this:r1855_1 -# 1855| mu1855_5(unknown) = ^CallSideEffect : ~m? -# 1855| mu1855_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1855_1 -# 1856| r1856_1(glval) = VariableAddress[x612] : -# 1856| r1856_2(glval) = FunctionAddress[~String] : -# 1856| v1856_3(void) = Call[~String] : func:r1856_2, this:r1856_1 -# 1856| mu1856_4(unknown) = ^CallSideEffect : ~m? -# 1856| v1856_5(void) = ^IndirectReadSideEffect[-1] : &:r1856_1, ~m? -# 1856| mu1856_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1856_1 -# 1856| r1856_7(bool) = Constant[0] : -# 1856| v1856_8(void) = ConditionalBranch : r1856_7 +# 35| Block 613 +# 35| r35_8569(glval) = VariableAddress[x612] : +# 35| mu35_8570(String) = Uninitialized[x612] : &:r35_8569 +# 35| r35_8571(glval) = FunctionAddress[String] : +# 35| v35_8572(void) = Call[String] : func:r35_8571, this:r35_8569 +# 35| mu35_8573(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8569 +# 35| r35_8575(glval) = VariableAddress[x612] : +# 35| r35_8576(glval) = FunctionAddress[~String] : +# 35| v35_8577(void) = Call[~String] : func:r35_8576, this:r35_8575 +# 35| mu35_8578(unknown) = ^CallSideEffect : ~m? +# 35| v35_8579(void) = ^IndirectReadSideEffect[-1] : &:r35_8575, ~m? +# 35| mu35_8580(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8575 +# 35| r35_8581(bool) = Constant[0] : +# 35| v35_8582(void) = ConditionalBranch : r35_8581 #-----| False -> Block 614 #-----| True (back edge) -> Block 613 -# 1858| Block 614 -# 1858| r1858_1(glval) = VariableAddress[x613] : -# 1858| mu1858_2(String) = Uninitialized[x613] : &:r1858_1 -# 1858| r1858_3(glval) = FunctionAddress[String] : -# 1858| v1858_4(void) = Call[String] : func:r1858_3, this:r1858_1 -# 1858| mu1858_5(unknown) = ^CallSideEffect : ~m? -# 1858| mu1858_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1858_1 -# 1859| r1859_1(glval) = VariableAddress[x613] : -# 1859| r1859_2(glval) = FunctionAddress[~String] : -# 1859| v1859_3(void) = Call[~String] : func:r1859_2, this:r1859_1 -# 1859| mu1859_4(unknown) = ^CallSideEffect : ~m? -# 1859| v1859_5(void) = ^IndirectReadSideEffect[-1] : &:r1859_1, ~m? -# 1859| mu1859_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1859_1 -# 1859| r1859_7(bool) = Constant[0] : -# 1859| v1859_8(void) = ConditionalBranch : r1859_7 +# 35| Block 614 +# 35| r35_8583(glval) = VariableAddress[x613] : +# 35| mu35_8584(String) = Uninitialized[x613] : &:r35_8583 +# 35| r35_8585(glval) = FunctionAddress[String] : +# 35| v35_8586(void) = Call[String] : func:r35_8585, this:r35_8583 +# 35| mu35_8587(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8583 +# 35| r35_8589(glval) = VariableAddress[x613] : +# 35| r35_8590(glval) = FunctionAddress[~String] : +# 35| v35_8591(void) = Call[~String] : func:r35_8590, this:r35_8589 +# 35| mu35_8592(unknown) = ^CallSideEffect : ~m? +# 35| v35_8593(void) = ^IndirectReadSideEffect[-1] : &:r35_8589, ~m? +# 35| mu35_8594(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8589 +# 35| r35_8595(bool) = Constant[0] : +# 35| v35_8596(void) = ConditionalBranch : r35_8595 #-----| False -> Block 615 #-----| True (back edge) -> Block 614 -# 1861| Block 615 -# 1861| r1861_1(glval) = VariableAddress[x614] : -# 1861| mu1861_2(String) = Uninitialized[x614] : &:r1861_1 -# 1861| r1861_3(glval) = FunctionAddress[String] : -# 1861| v1861_4(void) = Call[String] : func:r1861_3, this:r1861_1 -# 1861| mu1861_5(unknown) = ^CallSideEffect : ~m? -# 1861| mu1861_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1861_1 -# 1862| r1862_1(glval) = VariableAddress[x614] : -# 1862| r1862_2(glval) = FunctionAddress[~String] : -# 1862| v1862_3(void) = Call[~String] : func:r1862_2, this:r1862_1 -# 1862| mu1862_4(unknown) = ^CallSideEffect : ~m? -# 1862| v1862_5(void) = ^IndirectReadSideEffect[-1] : &:r1862_1, ~m? -# 1862| mu1862_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1862_1 -# 1862| r1862_7(bool) = Constant[0] : -# 1862| v1862_8(void) = ConditionalBranch : r1862_7 +# 35| Block 615 +# 35| r35_8597(glval) = VariableAddress[x614] : +# 35| mu35_8598(String) = Uninitialized[x614] : &:r35_8597 +# 35| r35_8599(glval) = FunctionAddress[String] : +# 35| v35_8600(void) = Call[String] : func:r35_8599, this:r35_8597 +# 35| mu35_8601(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8597 +# 35| r35_8603(glval) = VariableAddress[x614] : +# 35| r35_8604(glval) = FunctionAddress[~String] : +# 35| v35_8605(void) = Call[~String] : func:r35_8604, this:r35_8603 +# 35| mu35_8606(unknown) = ^CallSideEffect : ~m? +# 35| v35_8607(void) = ^IndirectReadSideEffect[-1] : &:r35_8603, ~m? +# 35| mu35_8608(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8603 +# 35| r35_8609(bool) = Constant[0] : +# 35| v35_8610(void) = ConditionalBranch : r35_8609 #-----| False -> Block 616 #-----| True (back edge) -> Block 615 -# 1864| Block 616 -# 1864| r1864_1(glval) = VariableAddress[x615] : -# 1864| mu1864_2(String) = Uninitialized[x615] : &:r1864_1 -# 1864| r1864_3(glval) = FunctionAddress[String] : -# 1864| v1864_4(void) = Call[String] : func:r1864_3, this:r1864_1 -# 1864| mu1864_5(unknown) = ^CallSideEffect : ~m? -# 1864| mu1864_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1864_1 -# 1865| r1865_1(glval) = VariableAddress[x615] : -# 1865| r1865_2(glval) = FunctionAddress[~String] : -# 1865| v1865_3(void) = Call[~String] : func:r1865_2, this:r1865_1 -# 1865| mu1865_4(unknown) = ^CallSideEffect : ~m? -# 1865| v1865_5(void) = ^IndirectReadSideEffect[-1] : &:r1865_1, ~m? -# 1865| mu1865_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1865_1 -# 1865| r1865_7(bool) = Constant[0] : -# 1865| v1865_8(void) = ConditionalBranch : r1865_7 +# 35| Block 616 +# 35| r35_8611(glval) = VariableAddress[x615] : +# 35| mu35_8612(String) = Uninitialized[x615] : &:r35_8611 +# 35| r35_8613(glval) = FunctionAddress[String] : +# 35| v35_8614(void) = Call[String] : func:r35_8613, this:r35_8611 +# 35| mu35_8615(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8611 +# 35| r35_8617(glval) = VariableAddress[x615] : +# 35| r35_8618(glval) = FunctionAddress[~String] : +# 35| v35_8619(void) = Call[~String] : func:r35_8618, this:r35_8617 +# 35| mu35_8620(unknown) = ^CallSideEffect : ~m? +# 35| v35_8621(void) = ^IndirectReadSideEffect[-1] : &:r35_8617, ~m? +# 35| mu35_8622(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8617 +# 35| r35_8623(bool) = Constant[0] : +# 35| v35_8624(void) = ConditionalBranch : r35_8623 #-----| False -> Block 617 #-----| True (back edge) -> Block 616 -# 1867| Block 617 -# 1867| r1867_1(glval) = VariableAddress[x616] : -# 1867| mu1867_2(String) = Uninitialized[x616] : &:r1867_1 -# 1867| r1867_3(glval) = FunctionAddress[String] : -# 1867| v1867_4(void) = Call[String] : func:r1867_3, this:r1867_1 -# 1867| mu1867_5(unknown) = ^CallSideEffect : ~m? -# 1867| mu1867_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1867_1 -# 1868| r1868_1(glval) = VariableAddress[x616] : -# 1868| r1868_2(glval) = FunctionAddress[~String] : -# 1868| v1868_3(void) = Call[~String] : func:r1868_2, this:r1868_1 -# 1868| mu1868_4(unknown) = ^CallSideEffect : ~m? -# 1868| v1868_5(void) = ^IndirectReadSideEffect[-1] : &:r1868_1, ~m? -# 1868| mu1868_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1868_1 -# 1868| r1868_7(bool) = Constant[0] : -# 1868| v1868_8(void) = ConditionalBranch : r1868_7 +# 35| Block 617 +# 35| r35_8625(glval) = VariableAddress[x616] : +# 35| mu35_8626(String) = Uninitialized[x616] : &:r35_8625 +# 35| r35_8627(glval) = FunctionAddress[String] : +# 35| v35_8628(void) = Call[String] : func:r35_8627, this:r35_8625 +# 35| mu35_8629(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8625 +# 35| r35_8631(glval) = VariableAddress[x616] : +# 35| r35_8632(glval) = FunctionAddress[~String] : +# 35| v35_8633(void) = Call[~String] : func:r35_8632, this:r35_8631 +# 35| mu35_8634(unknown) = ^CallSideEffect : ~m? +# 35| v35_8635(void) = ^IndirectReadSideEffect[-1] : &:r35_8631, ~m? +# 35| mu35_8636(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8631 +# 35| r35_8637(bool) = Constant[0] : +# 35| v35_8638(void) = ConditionalBranch : r35_8637 #-----| False -> Block 618 #-----| True (back edge) -> Block 617 -# 1870| Block 618 -# 1870| r1870_1(glval) = VariableAddress[x617] : -# 1870| mu1870_2(String) = Uninitialized[x617] : &:r1870_1 -# 1870| r1870_3(glval) = FunctionAddress[String] : -# 1870| v1870_4(void) = Call[String] : func:r1870_3, this:r1870_1 -# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m? -# 1870| mu1870_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1871| r1871_1(glval) = VariableAddress[x617] : -# 1871| r1871_2(glval) = FunctionAddress[~String] : -# 1871| v1871_3(void) = Call[~String] : func:r1871_2, this:r1871_1 -# 1871| mu1871_4(unknown) = ^CallSideEffect : ~m? -# 1871| v1871_5(void) = ^IndirectReadSideEffect[-1] : &:r1871_1, ~m? -# 1871| mu1871_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1871_1 -# 1871| r1871_7(bool) = Constant[0] : -# 1871| v1871_8(void) = ConditionalBranch : r1871_7 +# 35| Block 618 +# 35| r35_8639(glval) = VariableAddress[x617] : +# 35| mu35_8640(String) = Uninitialized[x617] : &:r35_8639 +# 35| r35_8641(glval) = FunctionAddress[String] : +# 35| v35_8642(void) = Call[String] : func:r35_8641, this:r35_8639 +# 35| mu35_8643(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8639 +# 35| r35_8645(glval) = VariableAddress[x617] : +# 35| r35_8646(glval) = FunctionAddress[~String] : +# 35| v35_8647(void) = Call[~String] : func:r35_8646, this:r35_8645 +# 35| mu35_8648(unknown) = ^CallSideEffect : ~m? +# 35| v35_8649(void) = ^IndirectReadSideEffect[-1] : &:r35_8645, ~m? +# 35| mu35_8650(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8645 +# 35| r35_8651(bool) = Constant[0] : +# 35| v35_8652(void) = ConditionalBranch : r35_8651 #-----| False -> Block 619 #-----| True (back edge) -> Block 618 -# 1873| Block 619 -# 1873| r1873_1(glval) = VariableAddress[x618] : -# 1873| mu1873_2(String) = Uninitialized[x618] : &:r1873_1 -# 1873| r1873_3(glval) = FunctionAddress[String] : -# 1873| v1873_4(void) = Call[String] : func:r1873_3, this:r1873_1 -# 1873| mu1873_5(unknown) = ^CallSideEffect : ~m? -# 1873| mu1873_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1873_1 -# 1874| r1874_1(glval) = VariableAddress[x618] : -# 1874| r1874_2(glval) = FunctionAddress[~String] : -# 1874| v1874_3(void) = Call[~String] : func:r1874_2, this:r1874_1 -# 1874| mu1874_4(unknown) = ^CallSideEffect : ~m? -# 1874| v1874_5(void) = ^IndirectReadSideEffect[-1] : &:r1874_1, ~m? -# 1874| mu1874_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1874_1 -# 1874| r1874_7(bool) = Constant[0] : -# 1874| v1874_8(void) = ConditionalBranch : r1874_7 +# 35| Block 619 +# 35| r35_8653(glval) = VariableAddress[x618] : +# 35| mu35_8654(String) = Uninitialized[x618] : &:r35_8653 +# 35| r35_8655(glval) = FunctionAddress[String] : +# 35| v35_8656(void) = Call[String] : func:r35_8655, this:r35_8653 +# 35| mu35_8657(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8653 +# 35| r35_8659(glval) = VariableAddress[x618] : +# 35| r35_8660(glval) = FunctionAddress[~String] : +# 35| v35_8661(void) = Call[~String] : func:r35_8660, this:r35_8659 +# 35| mu35_8662(unknown) = ^CallSideEffect : ~m? +# 35| v35_8663(void) = ^IndirectReadSideEffect[-1] : &:r35_8659, ~m? +# 35| mu35_8664(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8659 +# 35| r35_8665(bool) = Constant[0] : +# 35| v35_8666(void) = ConditionalBranch : r35_8665 #-----| False -> Block 620 #-----| True (back edge) -> Block 619 -# 1876| Block 620 -# 1876| r1876_1(glval) = VariableAddress[x619] : -# 1876| mu1876_2(String) = Uninitialized[x619] : &:r1876_1 -# 1876| r1876_3(glval) = FunctionAddress[String] : -# 1876| v1876_4(void) = Call[String] : func:r1876_3, this:r1876_1 -# 1876| mu1876_5(unknown) = ^CallSideEffect : ~m? -# 1876| mu1876_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1876_1 -# 1877| r1877_1(glval) = VariableAddress[x619] : -# 1877| r1877_2(glval) = FunctionAddress[~String] : -# 1877| v1877_3(void) = Call[~String] : func:r1877_2, this:r1877_1 -# 1877| mu1877_4(unknown) = ^CallSideEffect : ~m? -# 1877| v1877_5(void) = ^IndirectReadSideEffect[-1] : &:r1877_1, ~m? -# 1877| mu1877_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1877_1 -# 1877| r1877_7(bool) = Constant[0] : -# 1877| v1877_8(void) = ConditionalBranch : r1877_7 +# 35| Block 620 +# 35| r35_8667(glval) = VariableAddress[x619] : +# 35| mu35_8668(String) = Uninitialized[x619] : &:r35_8667 +# 35| r35_8669(glval) = FunctionAddress[String] : +# 35| v35_8670(void) = Call[String] : func:r35_8669, this:r35_8667 +# 35| mu35_8671(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8667 +# 35| r35_8673(glval) = VariableAddress[x619] : +# 35| r35_8674(glval) = FunctionAddress[~String] : +# 35| v35_8675(void) = Call[~String] : func:r35_8674, this:r35_8673 +# 35| mu35_8676(unknown) = ^CallSideEffect : ~m? +# 35| v35_8677(void) = ^IndirectReadSideEffect[-1] : &:r35_8673, ~m? +# 35| mu35_8678(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8673 +# 35| r35_8679(bool) = Constant[0] : +# 35| v35_8680(void) = ConditionalBranch : r35_8679 #-----| False -> Block 621 #-----| True (back edge) -> Block 620 -# 1879| Block 621 -# 1879| r1879_1(glval) = VariableAddress[x620] : -# 1879| mu1879_2(String) = Uninitialized[x620] : &:r1879_1 -# 1879| r1879_3(glval) = FunctionAddress[String] : -# 1879| v1879_4(void) = Call[String] : func:r1879_3, this:r1879_1 -# 1879| mu1879_5(unknown) = ^CallSideEffect : ~m? -# 1879| mu1879_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1879_1 -# 1880| r1880_1(glval) = VariableAddress[x620] : -# 1880| r1880_2(glval) = FunctionAddress[~String] : -# 1880| v1880_3(void) = Call[~String] : func:r1880_2, this:r1880_1 -# 1880| mu1880_4(unknown) = ^CallSideEffect : ~m? -# 1880| v1880_5(void) = ^IndirectReadSideEffect[-1] : &:r1880_1, ~m? -# 1880| mu1880_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1880_1 -# 1880| r1880_7(bool) = Constant[0] : -# 1880| v1880_8(void) = ConditionalBranch : r1880_7 +# 35| Block 621 +# 35| r35_8681(glval) = VariableAddress[x620] : +# 35| mu35_8682(String) = Uninitialized[x620] : &:r35_8681 +# 35| r35_8683(glval) = FunctionAddress[String] : +# 35| v35_8684(void) = Call[String] : func:r35_8683, this:r35_8681 +# 35| mu35_8685(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8681 +# 35| r35_8687(glval) = VariableAddress[x620] : +# 35| r35_8688(glval) = FunctionAddress[~String] : +# 35| v35_8689(void) = Call[~String] : func:r35_8688, this:r35_8687 +# 35| mu35_8690(unknown) = ^CallSideEffect : ~m? +# 35| v35_8691(void) = ^IndirectReadSideEffect[-1] : &:r35_8687, ~m? +# 35| mu35_8692(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8687 +# 35| r35_8693(bool) = Constant[0] : +# 35| v35_8694(void) = ConditionalBranch : r35_8693 #-----| False -> Block 622 #-----| True (back edge) -> Block 621 -# 1882| Block 622 -# 1882| r1882_1(glval) = VariableAddress[x621] : -# 1882| mu1882_2(String) = Uninitialized[x621] : &:r1882_1 -# 1882| r1882_3(glval) = FunctionAddress[String] : -# 1882| v1882_4(void) = Call[String] : func:r1882_3, this:r1882_1 -# 1882| mu1882_5(unknown) = ^CallSideEffect : ~m? -# 1882| mu1882_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1882_1 -# 1883| r1883_1(glval) = VariableAddress[x621] : -# 1883| r1883_2(glval) = FunctionAddress[~String] : -# 1883| v1883_3(void) = Call[~String] : func:r1883_2, this:r1883_1 -# 1883| mu1883_4(unknown) = ^CallSideEffect : ~m? -# 1883| v1883_5(void) = ^IndirectReadSideEffect[-1] : &:r1883_1, ~m? -# 1883| mu1883_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1883_1 -# 1883| r1883_7(bool) = Constant[0] : -# 1883| v1883_8(void) = ConditionalBranch : r1883_7 +# 35| Block 622 +# 35| r35_8695(glval) = VariableAddress[x621] : +# 35| mu35_8696(String) = Uninitialized[x621] : &:r35_8695 +# 35| r35_8697(glval) = FunctionAddress[String] : +# 35| v35_8698(void) = Call[String] : func:r35_8697, this:r35_8695 +# 35| mu35_8699(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8695 +# 35| r35_8701(glval) = VariableAddress[x621] : +# 35| r35_8702(glval) = FunctionAddress[~String] : +# 35| v35_8703(void) = Call[~String] : func:r35_8702, this:r35_8701 +# 35| mu35_8704(unknown) = ^CallSideEffect : ~m? +# 35| v35_8705(void) = ^IndirectReadSideEffect[-1] : &:r35_8701, ~m? +# 35| mu35_8706(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8701 +# 35| r35_8707(bool) = Constant[0] : +# 35| v35_8708(void) = ConditionalBranch : r35_8707 #-----| False -> Block 623 #-----| True (back edge) -> Block 622 -# 1885| Block 623 -# 1885| r1885_1(glval) = VariableAddress[x622] : -# 1885| mu1885_2(String) = Uninitialized[x622] : &:r1885_1 -# 1885| r1885_3(glval) = FunctionAddress[String] : -# 1885| v1885_4(void) = Call[String] : func:r1885_3, this:r1885_1 -# 1885| mu1885_5(unknown) = ^CallSideEffect : ~m? -# 1885| mu1885_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1886| r1886_1(glval) = VariableAddress[x622] : -# 1886| r1886_2(glval) = FunctionAddress[~String] : -# 1886| v1886_3(void) = Call[~String] : func:r1886_2, this:r1886_1 -# 1886| mu1886_4(unknown) = ^CallSideEffect : ~m? -# 1886| v1886_5(void) = ^IndirectReadSideEffect[-1] : &:r1886_1, ~m? -# 1886| mu1886_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1886_1 -# 1886| r1886_7(bool) = Constant[0] : -# 1886| v1886_8(void) = ConditionalBranch : r1886_7 +# 35| Block 623 +# 35| r35_8709(glval) = VariableAddress[x622] : +# 35| mu35_8710(String) = Uninitialized[x622] : &:r35_8709 +# 35| r35_8711(glval) = FunctionAddress[String] : +# 35| v35_8712(void) = Call[String] : func:r35_8711, this:r35_8709 +# 35| mu35_8713(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8709 +# 35| r35_8715(glval) = VariableAddress[x622] : +# 35| r35_8716(glval) = FunctionAddress[~String] : +# 35| v35_8717(void) = Call[~String] : func:r35_8716, this:r35_8715 +# 35| mu35_8718(unknown) = ^CallSideEffect : ~m? +# 35| v35_8719(void) = ^IndirectReadSideEffect[-1] : &:r35_8715, ~m? +# 35| mu35_8720(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8715 +# 35| r35_8721(bool) = Constant[0] : +# 35| v35_8722(void) = ConditionalBranch : r35_8721 #-----| False -> Block 624 #-----| True (back edge) -> Block 623 -# 1888| Block 624 -# 1888| r1888_1(glval) = VariableAddress[x623] : -# 1888| mu1888_2(String) = Uninitialized[x623] : &:r1888_1 -# 1888| r1888_3(glval) = FunctionAddress[String] : -# 1888| v1888_4(void) = Call[String] : func:r1888_3, this:r1888_1 -# 1888| mu1888_5(unknown) = ^CallSideEffect : ~m? -# 1888| mu1888_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1888_1 -# 1889| r1889_1(glval) = VariableAddress[x623] : -# 1889| r1889_2(glval) = FunctionAddress[~String] : -# 1889| v1889_3(void) = Call[~String] : func:r1889_2, this:r1889_1 -# 1889| mu1889_4(unknown) = ^CallSideEffect : ~m? -# 1889| v1889_5(void) = ^IndirectReadSideEffect[-1] : &:r1889_1, ~m? -# 1889| mu1889_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1889_1 -# 1889| r1889_7(bool) = Constant[0] : -# 1889| v1889_8(void) = ConditionalBranch : r1889_7 +# 35| Block 624 +# 35| r35_8723(glval) = VariableAddress[x623] : +# 35| mu35_8724(String) = Uninitialized[x623] : &:r35_8723 +# 35| r35_8725(glval) = FunctionAddress[String] : +# 35| v35_8726(void) = Call[String] : func:r35_8725, this:r35_8723 +# 35| mu35_8727(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8723 +# 35| r35_8729(glval) = VariableAddress[x623] : +# 35| r35_8730(glval) = FunctionAddress[~String] : +# 35| v35_8731(void) = Call[~String] : func:r35_8730, this:r35_8729 +# 35| mu35_8732(unknown) = ^CallSideEffect : ~m? +# 35| v35_8733(void) = ^IndirectReadSideEffect[-1] : &:r35_8729, ~m? +# 35| mu35_8734(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8729 +# 35| r35_8735(bool) = Constant[0] : +# 35| v35_8736(void) = ConditionalBranch : r35_8735 #-----| False -> Block 625 #-----| True (back edge) -> Block 624 -# 1891| Block 625 -# 1891| r1891_1(glval) = VariableAddress[x624] : -# 1891| mu1891_2(String) = Uninitialized[x624] : &:r1891_1 -# 1891| r1891_3(glval) = FunctionAddress[String] : -# 1891| v1891_4(void) = Call[String] : func:r1891_3, this:r1891_1 -# 1891| mu1891_5(unknown) = ^CallSideEffect : ~m? -# 1891| mu1891_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1891_1 -# 1892| r1892_1(glval) = VariableAddress[x624] : -# 1892| r1892_2(glval) = FunctionAddress[~String] : -# 1892| v1892_3(void) = Call[~String] : func:r1892_2, this:r1892_1 -# 1892| mu1892_4(unknown) = ^CallSideEffect : ~m? -# 1892| v1892_5(void) = ^IndirectReadSideEffect[-1] : &:r1892_1, ~m? -# 1892| mu1892_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1892_1 -# 1892| r1892_7(bool) = Constant[0] : -# 1892| v1892_8(void) = ConditionalBranch : r1892_7 +# 35| Block 625 +# 35| r35_8737(glval) = VariableAddress[x624] : +# 35| mu35_8738(String) = Uninitialized[x624] : &:r35_8737 +# 35| r35_8739(glval) = FunctionAddress[String] : +# 35| v35_8740(void) = Call[String] : func:r35_8739, this:r35_8737 +# 35| mu35_8741(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8737 +# 35| r35_8743(glval) = VariableAddress[x624] : +# 35| r35_8744(glval) = FunctionAddress[~String] : +# 35| v35_8745(void) = Call[~String] : func:r35_8744, this:r35_8743 +# 35| mu35_8746(unknown) = ^CallSideEffect : ~m? +# 35| v35_8747(void) = ^IndirectReadSideEffect[-1] : &:r35_8743, ~m? +# 35| mu35_8748(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8743 +# 35| r35_8749(bool) = Constant[0] : +# 35| v35_8750(void) = ConditionalBranch : r35_8749 #-----| False -> Block 626 #-----| True (back edge) -> Block 625 -# 1894| Block 626 -# 1894| r1894_1(glval) = VariableAddress[x625] : -# 1894| mu1894_2(String) = Uninitialized[x625] : &:r1894_1 -# 1894| r1894_3(glval) = FunctionAddress[String] : -# 1894| v1894_4(void) = Call[String] : func:r1894_3, this:r1894_1 -# 1894| mu1894_5(unknown) = ^CallSideEffect : ~m? -# 1894| mu1894_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1894_1 -# 1895| r1895_1(glval) = VariableAddress[x625] : -# 1895| r1895_2(glval) = FunctionAddress[~String] : -# 1895| v1895_3(void) = Call[~String] : func:r1895_2, this:r1895_1 -# 1895| mu1895_4(unknown) = ^CallSideEffect : ~m? -# 1895| v1895_5(void) = ^IndirectReadSideEffect[-1] : &:r1895_1, ~m? -# 1895| mu1895_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1895_1 -# 1895| r1895_7(bool) = Constant[0] : -# 1895| v1895_8(void) = ConditionalBranch : r1895_7 +# 35| Block 626 +# 35| r35_8751(glval) = VariableAddress[x625] : +# 35| mu35_8752(String) = Uninitialized[x625] : &:r35_8751 +# 35| r35_8753(glval) = FunctionAddress[String] : +# 35| v35_8754(void) = Call[String] : func:r35_8753, this:r35_8751 +# 35| mu35_8755(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8751 +# 35| r35_8757(glval) = VariableAddress[x625] : +# 35| r35_8758(glval) = FunctionAddress[~String] : +# 35| v35_8759(void) = Call[~String] : func:r35_8758, this:r35_8757 +# 35| mu35_8760(unknown) = ^CallSideEffect : ~m? +# 35| v35_8761(void) = ^IndirectReadSideEffect[-1] : &:r35_8757, ~m? +# 35| mu35_8762(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8757 +# 35| r35_8763(bool) = Constant[0] : +# 35| v35_8764(void) = ConditionalBranch : r35_8763 #-----| False -> Block 627 #-----| True (back edge) -> Block 626 -# 1897| Block 627 -# 1897| r1897_1(glval) = VariableAddress[x626] : -# 1897| mu1897_2(String) = Uninitialized[x626] : &:r1897_1 -# 1897| r1897_3(glval) = FunctionAddress[String] : -# 1897| v1897_4(void) = Call[String] : func:r1897_3, this:r1897_1 -# 1897| mu1897_5(unknown) = ^CallSideEffect : ~m? -# 1897| mu1897_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1897_1 -# 1898| r1898_1(glval) = VariableAddress[x626] : -# 1898| r1898_2(glval) = FunctionAddress[~String] : -# 1898| v1898_3(void) = Call[~String] : func:r1898_2, this:r1898_1 -# 1898| mu1898_4(unknown) = ^CallSideEffect : ~m? -# 1898| v1898_5(void) = ^IndirectReadSideEffect[-1] : &:r1898_1, ~m? -# 1898| mu1898_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1898_1 -# 1898| r1898_7(bool) = Constant[0] : -# 1898| v1898_8(void) = ConditionalBranch : r1898_7 +# 35| Block 627 +# 35| r35_8765(glval) = VariableAddress[x626] : +# 35| mu35_8766(String) = Uninitialized[x626] : &:r35_8765 +# 35| r35_8767(glval) = FunctionAddress[String] : +# 35| v35_8768(void) = Call[String] : func:r35_8767, this:r35_8765 +# 35| mu35_8769(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8765 +# 35| r35_8771(glval) = VariableAddress[x626] : +# 35| r35_8772(glval) = FunctionAddress[~String] : +# 35| v35_8773(void) = Call[~String] : func:r35_8772, this:r35_8771 +# 35| mu35_8774(unknown) = ^CallSideEffect : ~m? +# 35| v35_8775(void) = ^IndirectReadSideEffect[-1] : &:r35_8771, ~m? +# 35| mu35_8776(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8771 +# 35| r35_8777(bool) = Constant[0] : +# 35| v35_8778(void) = ConditionalBranch : r35_8777 #-----| False -> Block 628 #-----| True (back edge) -> Block 627 -# 1900| Block 628 -# 1900| r1900_1(glval) = VariableAddress[x627] : -# 1900| mu1900_2(String) = Uninitialized[x627] : &:r1900_1 -# 1900| r1900_3(glval) = FunctionAddress[String] : -# 1900| v1900_4(void) = Call[String] : func:r1900_3, this:r1900_1 -# 1900| mu1900_5(unknown) = ^CallSideEffect : ~m? -# 1900| mu1900_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1900_1 -# 1901| r1901_1(glval) = VariableAddress[x627] : -# 1901| r1901_2(glval) = FunctionAddress[~String] : -# 1901| v1901_3(void) = Call[~String] : func:r1901_2, this:r1901_1 -# 1901| mu1901_4(unknown) = ^CallSideEffect : ~m? -# 1901| v1901_5(void) = ^IndirectReadSideEffect[-1] : &:r1901_1, ~m? -# 1901| mu1901_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1901_1 -# 1901| r1901_7(bool) = Constant[0] : -# 1901| v1901_8(void) = ConditionalBranch : r1901_7 +# 35| Block 628 +# 35| r35_8779(glval) = VariableAddress[x627] : +# 35| mu35_8780(String) = Uninitialized[x627] : &:r35_8779 +# 35| r35_8781(glval) = FunctionAddress[String] : +# 35| v35_8782(void) = Call[String] : func:r35_8781, this:r35_8779 +# 35| mu35_8783(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8779 +# 35| r35_8785(glval) = VariableAddress[x627] : +# 35| r35_8786(glval) = FunctionAddress[~String] : +# 35| v35_8787(void) = Call[~String] : func:r35_8786, this:r35_8785 +# 35| mu35_8788(unknown) = ^CallSideEffect : ~m? +# 35| v35_8789(void) = ^IndirectReadSideEffect[-1] : &:r35_8785, ~m? +# 35| mu35_8790(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8785 +# 35| r35_8791(bool) = Constant[0] : +# 35| v35_8792(void) = ConditionalBranch : r35_8791 #-----| False -> Block 629 #-----| True (back edge) -> Block 628 -# 1903| Block 629 -# 1903| r1903_1(glval) = VariableAddress[x628] : -# 1903| mu1903_2(String) = Uninitialized[x628] : &:r1903_1 -# 1903| r1903_3(glval) = FunctionAddress[String] : -# 1903| v1903_4(void) = Call[String] : func:r1903_3, this:r1903_1 -# 1903| mu1903_5(unknown) = ^CallSideEffect : ~m? -# 1903| mu1903_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1903_1 -# 1904| r1904_1(glval) = VariableAddress[x628] : -# 1904| r1904_2(glval) = FunctionAddress[~String] : -# 1904| v1904_3(void) = Call[~String] : func:r1904_2, this:r1904_1 -# 1904| mu1904_4(unknown) = ^CallSideEffect : ~m? -# 1904| v1904_5(void) = ^IndirectReadSideEffect[-1] : &:r1904_1, ~m? -# 1904| mu1904_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1904_1 -# 1904| r1904_7(bool) = Constant[0] : -# 1904| v1904_8(void) = ConditionalBranch : r1904_7 +# 35| Block 629 +# 35| r35_8793(glval) = VariableAddress[x628] : +# 35| mu35_8794(String) = Uninitialized[x628] : &:r35_8793 +# 35| r35_8795(glval) = FunctionAddress[String] : +# 35| v35_8796(void) = Call[String] : func:r35_8795, this:r35_8793 +# 35| mu35_8797(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8793 +# 35| r35_8799(glval) = VariableAddress[x628] : +# 35| r35_8800(glval) = FunctionAddress[~String] : +# 35| v35_8801(void) = Call[~String] : func:r35_8800, this:r35_8799 +# 35| mu35_8802(unknown) = ^CallSideEffect : ~m? +# 35| v35_8803(void) = ^IndirectReadSideEffect[-1] : &:r35_8799, ~m? +# 35| mu35_8804(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8799 +# 35| r35_8805(bool) = Constant[0] : +# 35| v35_8806(void) = ConditionalBranch : r35_8805 #-----| False -> Block 630 #-----| True (back edge) -> Block 629 -# 1906| Block 630 -# 1906| r1906_1(glval) = VariableAddress[x629] : -# 1906| mu1906_2(String) = Uninitialized[x629] : &:r1906_1 -# 1906| r1906_3(glval) = FunctionAddress[String] : -# 1906| v1906_4(void) = Call[String] : func:r1906_3, this:r1906_1 -# 1906| mu1906_5(unknown) = ^CallSideEffect : ~m? -# 1906| mu1906_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1906_1 -# 1907| r1907_1(glval) = VariableAddress[x629] : -# 1907| r1907_2(glval) = FunctionAddress[~String] : -# 1907| v1907_3(void) = Call[~String] : func:r1907_2, this:r1907_1 -# 1907| mu1907_4(unknown) = ^CallSideEffect : ~m? -# 1907| v1907_5(void) = ^IndirectReadSideEffect[-1] : &:r1907_1, ~m? -# 1907| mu1907_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1907_1 -# 1907| r1907_7(bool) = Constant[0] : -# 1907| v1907_8(void) = ConditionalBranch : r1907_7 +# 35| Block 630 +# 35| r35_8807(glval) = VariableAddress[x629] : +# 35| mu35_8808(String) = Uninitialized[x629] : &:r35_8807 +# 35| r35_8809(glval) = FunctionAddress[String] : +# 35| v35_8810(void) = Call[String] : func:r35_8809, this:r35_8807 +# 35| mu35_8811(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8807 +# 35| r35_8813(glval) = VariableAddress[x629] : +# 35| r35_8814(glval) = FunctionAddress[~String] : +# 35| v35_8815(void) = Call[~String] : func:r35_8814, this:r35_8813 +# 35| mu35_8816(unknown) = ^CallSideEffect : ~m? +# 35| v35_8817(void) = ^IndirectReadSideEffect[-1] : &:r35_8813, ~m? +# 35| mu35_8818(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8813 +# 35| r35_8819(bool) = Constant[0] : +# 35| v35_8820(void) = ConditionalBranch : r35_8819 #-----| False -> Block 631 #-----| True (back edge) -> Block 630 -# 1909| Block 631 -# 1909| r1909_1(glval) = VariableAddress[x630] : -# 1909| mu1909_2(String) = Uninitialized[x630] : &:r1909_1 -# 1909| r1909_3(glval) = FunctionAddress[String] : -# 1909| v1909_4(void) = Call[String] : func:r1909_3, this:r1909_1 -# 1909| mu1909_5(unknown) = ^CallSideEffect : ~m? -# 1909| mu1909_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1909_1 -# 1910| r1910_1(glval) = VariableAddress[x630] : -# 1910| r1910_2(glval) = FunctionAddress[~String] : -# 1910| v1910_3(void) = Call[~String] : func:r1910_2, this:r1910_1 -# 1910| mu1910_4(unknown) = ^CallSideEffect : ~m? -# 1910| v1910_5(void) = ^IndirectReadSideEffect[-1] : &:r1910_1, ~m? -# 1910| mu1910_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1910_1 -# 1910| r1910_7(bool) = Constant[0] : -# 1910| v1910_8(void) = ConditionalBranch : r1910_7 +# 35| Block 631 +# 35| r35_8821(glval) = VariableAddress[x630] : +# 35| mu35_8822(String) = Uninitialized[x630] : &:r35_8821 +# 35| r35_8823(glval) = FunctionAddress[String] : +# 35| v35_8824(void) = Call[String] : func:r35_8823, this:r35_8821 +# 35| mu35_8825(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8821 +# 35| r35_8827(glval) = VariableAddress[x630] : +# 35| r35_8828(glval) = FunctionAddress[~String] : +# 35| v35_8829(void) = Call[~String] : func:r35_8828, this:r35_8827 +# 35| mu35_8830(unknown) = ^CallSideEffect : ~m? +# 35| v35_8831(void) = ^IndirectReadSideEffect[-1] : &:r35_8827, ~m? +# 35| mu35_8832(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8827 +# 35| r35_8833(bool) = Constant[0] : +# 35| v35_8834(void) = ConditionalBranch : r35_8833 #-----| False -> Block 632 #-----| True (back edge) -> Block 631 -# 1912| Block 632 -# 1912| r1912_1(glval) = VariableAddress[x631] : -# 1912| mu1912_2(String) = Uninitialized[x631] : &:r1912_1 -# 1912| r1912_3(glval) = FunctionAddress[String] : -# 1912| v1912_4(void) = Call[String] : func:r1912_3, this:r1912_1 -# 1912| mu1912_5(unknown) = ^CallSideEffect : ~m? -# 1912| mu1912_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1912_1 -# 1913| r1913_1(glval) = VariableAddress[x631] : -# 1913| r1913_2(glval) = FunctionAddress[~String] : -# 1913| v1913_3(void) = Call[~String] : func:r1913_2, this:r1913_1 -# 1913| mu1913_4(unknown) = ^CallSideEffect : ~m? -# 1913| v1913_5(void) = ^IndirectReadSideEffect[-1] : &:r1913_1, ~m? -# 1913| mu1913_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1913_1 -# 1913| r1913_7(bool) = Constant[0] : -# 1913| v1913_8(void) = ConditionalBranch : r1913_7 +# 35| Block 632 +# 35| r35_8835(glval) = VariableAddress[x631] : +# 35| mu35_8836(String) = Uninitialized[x631] : &:r35_8835 +# 35| r35_8837(glval) = FunctionAddress[String] : +# 35| v35_8838(void) = Call[String] : func:r35_8837, this:r35_8835 +# 35| mu35_8839(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8835 +# 35| r35_8841(glval) = VariableAddress[x631] : +# 35| r35_8842(glval) = FunctionAddress[~String] : +# 35| v35_8843(void) = Call[~String] : func:r35_8842, this:r35_8841 +# 35| mu35_8844(unknown) = ^CallSideEffect : ~m? +# 35| v35_8845(void) = ^IndirectReadSideEffect[-1] : &:r35_8841, ~m? +# 35| mu35_8846(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8841 +# 35| r35_8847(bool) = Constant[0] : +# 35| v35_8848(void) = ConditionalBranch : r35_8847 #-----| False -> Block 633 #-----| True (back edge) -> Block 632 -# 1915| Block 633 -# 1915| r1915_1(glval) = VariableAddress[x632] : -# 1915| mu1915_2(String) = Uninitialized[x632] : &:r1915_1 -# 1915| r1915_3(glval) = FunctionAddress[String] : -# 1915| v1915_4(void) = Call[String] : func:r1915_3, this:r1915_1 -# 1915| mu1915_5(unknown) = ^CallSideEffect : ~m? -# 1915| mu1915_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1915_1 -# 1916| r1916_1(glval) = VariableAddress[x632] : -# 1916| r1916_2(glval) = FunctionAddress[~String] : -# 1916| v1916_3(void) = Call[~String] : func:r1916_2, this:r1916_1 -# 1916| mu1916_4(unknown) = ^CallSideEffect : ~m? -# 1916| v1916_5(void) = ^IndirectReadSideEffect[-1] : &:r1916_1, ~m? -# 1916| mu1916_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1916_1 -# 1916| r1916_7(bool) = Constant[0] : -# 1916| v1916_8(void) = ConditionalBranch : r1916_7 +# 35| Block 633 +# 35| r35_8849(glval) = VariableAddress[x632] : +# 35| mu35_8850(String) = Uninitialized[x632] : &:r35_8849 +# 35| r35_8851(glval) = FunctionAddress[String] : +# 35| v35_8852(void) = Call[String] : func:r35_8851, this:r35_8849 +# 35| mu35_8853(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8849 +# 35| r35_8855(glval) = VariableAddress[x632] : +# 35| r35_8856(glval) = FunctionAddress[~String] : +# 35| v35_8857(void) = Call[~String] : func:r35_8856, this:r35_8855 +# 35| mu35_8858(unknown) = ^CallSideEffect : ~m? +# 35| v35_8859(void) = ^IndirectReadSideEffect[-1] : &:r35_8855, ~m? +# 35| mu35_8860(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8855 +# 35| r35_8861(bool) = Constant[0] : +# 35| v35_8862(void) = ConditionalBranch : r35_8861 #-----| False -> Block 634 #-----| True (back edge) -> Block 633 -# 1918| Block 634 -# 1918| r1918_1(glval) = VariableAddress[x633] : -# 1918| mu1918_2(String) = Uninitialized[x633] : &:r1918_1 -# 1918| r1918_3(glval) = FunctionAddress[String] : -# 1918| v1918_4(void) = Call[String] : func:r1918_3, this:r1918_1 -# 1918| mu1918_5(unknown) = ^CallSideEffect : ~m? -# 1918| mu1918_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1918_1 -# 1919| r1919_1(glval) = VariableAddress[x633] : -# 1919| r1919_2(glval) = FunctionAddress[~String] : -# 1919| v1919_3(void) = Call[~String] : func:r1919_2, this:r1919_1 -# 1919| mu1919_4(unknown) = ^CallSideEffect : ~m? -# 1919| v1919_5(void) = ^IndirectReadSideEffect[-1] : &:r1919_1, ~m? -# 1919| mu1919_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1919| r1919_7(bool) = Constant[0] : -# 1919| v1919_8(void) = ConditionalBranch : r1919_7 +# 35| Block 634 +# 35| r35_8863(glval) = VariableAddress[x633] : +# 35| mu35_8864(String) = Uninitialized[x633] : &:r35_8863 +# 35| r35_8865(glval) = FunctionAddress[String] : +# 35| v35_8866(void) = Call[String] : func:r35_8865, this:r35_8863 +# 35| mu35_8867(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8863 +# 35| r35_8869(glval) = VariableAddress[x633] : +# 35| r35_8870(glval) = FunctionAddress[~String] : +# 35| v35_8871(void) = Call[~String] : func:r35_8870, this:r35_8869 +# 35| mu35_8872(unknown) = ^CallSideEffect : ~m? +# 35| v35_8873(void) = ^IndirectReadSideEffect[-1] : &:r35_8869, ~m? +# 35| mu35_8874(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8869 +# 35| r35_8875(bool) = Constant[0] : +# 35| v35_8876(void) = ConditionalBranch : r35_8875 #-----| False -> Block 635 #-----| True (back edge) -> Block 634 -# 1921| Block 635 -# 1921| r1921_1(glval) = VariableAddress[x634] : -# 1921| mu1921_2(String) = Uninitialized[x634] : &:r1921_1 -# 1921| r1921_3(glval) = FunctionAddress[String] : -# 1921| v1921_4(void) = Call[String] : func:r1921_3, this:r1921_1 -# 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? -# 1921| mu1921_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 -# 1922| r1922_1(glval) = VariableAddress[x634] : -# 1922| r1922_2(glval) = FunctionAddress[~String] : -# 1922| v1922_3(void) = Call[~String] : func:r1922_2, this:r1922_1 -# 1922| mu1922_4(unknown) = ^CallSideEffect : ~m? -# 1922| v1922_5(void) = ^IndirectReadSideEffect[-1] : &:r1922_1, ~m? -# 1922| mu1922_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1922_1 -# 1922| r1922_7(bool) = Constant[0] : -# 1922| v1922_8(void) = ConditionalBranch : r1922_7 +# 35| Block 635 +# 35| r35_8877(glval) = VariableAddress[x634] : +# 35| mu35_8878(String) = Uninitialized[x634] : &:r35_8877 +# 35| r35_8879(glval) = FunctionAddress[String] : +# 35| v35_8880(void) = Call[String] : func:r35_8879, this:r35_8877 +# 35| mu35_8881(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8877 +# 35| r35_8883(glval) = VariableAddress[x634] : +# 35| r35_8884(glval) = FunctionAddress[~String] : +# 35| v35_8885(void) = Call[~String] : func:r35_8884, this:r35_8883 +# 35| mu35_8886(unknown) = ^CallSideEffect : ~m? +# 35| v35_8887(void) = ^IndirectReadSideEffect[-1] : &:r35_8883, ~m? +# 35| mu35_8888(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8883 +# 35| r35_8889(bool) = Constant[0] : +# 35| v35_8890(void) = ConditionalBranch : r35_8889 #-----| False -> Block 636 #-----| True (back edge) -> Block 635 -# 1924| Block 636 -# 1924| r1924_1(glval) = VariableAddress[x635] : -# 1924| mu1924_2(String) = Uninitialized[x635] : &:r1924_1 -# 1924| r1924_3(glval) = FunctionAddress[String] : -# 1924| v1924_4(void) = Call[String] : func:r1924_3, this:r1924_1 -# 1924| mu1924_5(unknown) = ^CallSideEffect : ~m? -# 1924| mu1924_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1924_1 -# 1925| r1925_1(glval) = VariableAddress[x635] : -# 1925| r1925_2(glval) = FunctionAddress[~String] : -# 1925| v1925_3(void) = Call[~String] : func:r1925_2, this:r1925_1 -# 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? -# 1925| v1925_5(void) = ^IndirectReadSideEffect[-1] : &:r1925_1, ~m? -# 1925| mu1925_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1925_1 -# 1925| r1925_7(bool) = Constant[0] : -# 1925| v1925_8(void) = ConditionalBranch : r1925_7 +# 35| Block 636 +# 35| r35_8891(glval) = VariableAddress[x635] : +# 35| mu35_8892(String) = Uninitialized[x635] : &:r35_8891 +# 35| r35_8893(glval) = FunctionAddress[String] : +# 35| v35_8894(void) = Call[String] : func:r35_8893, this:r35_8891 +# 35| mu35_8895(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8891 +# 35| r35_8897(glval) = VariableAddress[x635] : +# 35| r35_8898(glval) = FunctionAddress[~String] : +# 35| v35_8899(void) = Call[~String] : func:r35_8898, this:r35_8897 +# 35| mu35_8900(unknown) = ^CallSideEffect : ~m? +# 35| v35_8901(void) = ^IndirectReadSideEffect[-1] : &:r35_8897, ~m? +# 35| mu35_8902(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8897 +# 35| r35_8903(bool) = Constant[0] : +# 35| v35_8904(void) = ConditionalBranch : r35_8903 #-----| False -> Block 637 #-----| True (back edge) -> Block 636 -# 1927| Block 637 -# 1927| r1927_1(glval) = VariableAddress[x636] : -# 1927| mu1927_2(String) = Uninitialized[x636] : &:r1927_1 -# 1927| r1927_3(glval) = FunctionAddress[String] : -# 1927| v1927_4(void) = Call[String] : func:r1927_3, this:r1927_1 -# 1927| mu1927_5(unknown) = ^CallSideEffect : ~m? -# 1927| mu1927_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1927_1 -# 1928| r1928_1(glval) = VariableAddress[x636] : -# 1928| r1928_2(glval) = FunctionAddress[~String] : -# 1928| v1928_3(void) = Call[~String] : func:r1928_2, this:r1928_1 -# 1928| mu1928_4(unknown) = ^CallSideEffect : ~m? -# 1928| v1928_5(void) = ^IndirectReadSideEffect[-1] : &:r1928_1, ~m? -# 1928| mu1928_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1928_1 -# 1928| r1928_7(bool) = Constant[0] : -# 1928| v1928_8(void) = ConditionalBranch : r1928_7 +# 35| Block 637 +# 35| r35_8905(glval) = VariableAddress[x636] : +# 35| mu35_8906(String) = Uninitialized[x636] : &:r35_8905 +# 35| r35_8907(glval) = FunctionAddress[String] : +# 35| v35_8908(void) = Call[String] : func:r35_8907, this:r35_8905 +# 35| mu35_8909(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8905 +# 35| r35_8911(glval) = VariableAddress[x636] : +# 35| r35_8912(glval) = FunctionAddress[~String] : +# 35| v35_8913(void) = Call[~String] : func:r35_8912, this:r35_8911 +# 35| mu35_8914(unknown) = ^CallSideEffect : ~m? +# 35| v35_8915(void) = ^IndirectReadSideEffect[-1] : &:r35_8911, ~m? +# 35| mu35_8916(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8911 +# 35| r35_8917(bool) = Constant[0] : +# 35| v35_8918(void) = ConditionalBranch : r35_8917 #-----| False -> Block 638 #-----| True (back edge) -> Block 637 -# 1930| Block 638 -# 1930| r1930_1(glval) = VariableAddress[x637] : -# 1930| mu1930_2(String) = Uninitialized[x637] : &:r1930_1 -# 1930| r1930_3(glval) = FunctionAddress[String] : -# 1930| v1930_4(void) = Call[String] : func:r1930_3, this:r1930_1 -# 1930| mu1930_5(unknown) = ^CallSideEffect : ~m? -# 1930| mu1930_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1930_1 -# 1931| r1931_1(glval) = VariableAddress[x637] : -# 1931| r1931_2(glval) = FunctionAddress[~String] : -# 1931| v1931_3(void) = Call[~String] : func:r1931_2, this:r1931_1 -# 1931| mu1931_4(unknown) = ^CallSideEffect : ~m? -# 1931| v1931_5(void) = ^IndirectReadSideEffect[-1] : &:r1931_1, ~m? -# 1931| mu1931_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1931_1 -# 1931| r1931_7(bool) = Constant[0] : -# 1931| v1931_8(void) = ConditionalBranch : r1931_7 +# 35| Block 638 +# 35| r35_8919(glval) = VariableAddress[x637] : +# 35| mu35_8920(String) = Uninitialized[x637] : &:r35_8919 +# 35| r35_8921(glval) = FunctionAddress[String] : +# 35| v35_8922(void) = Call[String] : func:r35_8921, this:r35_8919 +# 35| mu35_8923(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8919 +# 35| r35_8925(glval) = VariableAddress[x637] : +# 35| r35_8926(glval) = FunctionAddress[~String] : +# 35| v35_8927(void) = Call[~String] : func:r35_8926, this:r35_8925 +# 35| mu35_8928(unknown) = ^CallSideEffect : ~m? +# 35| v35_8929(void) = ^IndirectReadSideEffect[-1] : &:r35_8925, ~m? +# 35| mu35_8930(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8925 +# 35| r35_8931(bool) = Constant[0] : +# 35| v35_8932(void) = ConditionalBranch : r35_8931 #-----| False -> Block 639 #-----| True (back edge) -> Block 638 -# 1933| Block 639 -# 1933| r1933_1(glval) = VariableAddress[x638] : -# 1933| mu1933_2(String) = Uninitialized[x638] : &:r1933_1 -# 1933| r1933_3(glval) = FunctionAddress[String] : -# 1933| v1933_4(void) = Call[String] : func:r1933_3, this:r1933_1 -# 1933| mu1933_5(unknown) = ^CallSideEffect : ~m? -# 1933| mu1933_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1933_1 -# 1934| r1934_1(glval) = VariableAddress[x638] : -# 1934| r1934_2(glval) = FunctionAddress[~String] : -# 1934| v1934_3(void) = Call[~String] : func:r1934_2, this:r1934_1 -# 1934| mu1934_4(unknown) = ^CallSideEffect : ~m? -# 1934| v1934_5(void) = ^IndirectReadSideEffect[-1] : &:r1934_1, ~m? -# 1934| mu1934_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1934_1 -# 1934| r1934_7(bool) = Constant[0] : -# 1934| v1934_8(void) = ConditionalBranch : r1934_7 +# 35| Block 639 +# 35| r35_8933(glval) = VariableAddress[x638] : +# 35| mu35_8934(String) = Uninitialized[x638] : &:r35_8933 +# 35| r35_8935(glval) = FunctionAddress[String] : +# 35| v35_8936(void) = Call[String] : func:r35_8935, this:r35_8933 +# 35| mu35_8937(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8933 +# 35| r35_8939(glval) = VariableAddress[x638] : +# 35| r35_8940(glval) = FunctionAddress[~String] : +# 35| v35_8941(void) = Call[~String] : func:r35_8940, this:r35_8939 +# 35| mu35_8942(unknown) = ^CallSideEffect : ~m? +# 35| v35_8943(void) = ^IndirectReadSideEffect[-1] : &:r35_8939, ~m? +# 35| mu35_8944(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8939 +# 35| r35_8945(bool) = Constant[0] : +# 35| v35_8946(void) = ConditionalBranch : r35_8945 #-----| False -> Block 640 #-----| True (back edge) -> Block 639 -# 1936| Block 640 -# 1936| r1936_1(glval) = VariableAddress[x639] : -# 1936| mu1936_2(String) = Uninitialized[x639] : &:r1936_1 -# 1936| r1936_3(glval) = FunctionAddress[String] : -# 1936| v1936_4(void) = Call[String] : func:r1936_3, this:r1936_1 -# 1936| mu1936_5(unknown) = ^CallSideEffect : ~m? -# 1936| mu1936_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1936_1 -# 1937| r1937_1(glval) = VariableAddress[x639] : -# 1937| r1937_2(glval) = FunctionAddress[~String] : -# 1937| v1937_3(void) = Call[~String] : func:r1937_2, this:r1937_1 -# 1937| mu1937_4(unknown) = ^CallSideEffect : ~m? -# 1937| v1937_5(void) = ^IndirectReadSideEffect[-1] : &:r1937_1, ~m? -# 1937| mu1937_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1937_1 -# 1937| r1937_7(bool) = Constant[0] : -# 1937| v1937_8(void) = ConditionalBranch : r1937_7 +# 35| Block 640 +# 35| r35_8947(glval) = VariableAddress[x639] : +# 35| mu35_8948(String) = Uninitialized[x639] : &:r35_8947 +# 35| r35_8949(glval) = FunctionAddress[String] : +# 35| v35_8950(void) = Call[String] : func:r35_8949, this:r35_8947 +# 35| mu35_8951(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8947 +# 35| r35_8953(glval) = VariableAddress[x639] : +# 35| r35_8954(glval) = FunctionAddress[~String] : +# 35| v35_8955(void) = Call[~String] : func:r35_8954, this:r35_8953 +# 35| mu35_8956(unknown) = ^CallSideEffect : ~m? +# 35| v35_8957(void) = ^IndirectReadSideEffect[-1] : &:r35_8953, ~m? +# 35| mu35_8958(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8953 +# 35| r35_8959(bool) = Constant[0] : +# 35| v35_8960(void) = ConditionalBranch : r35_8959 #-----| False -> Block 641 #-----| True (back edge) -> Block 640 -# 1939| Block 641 -# 1939| r1939_1(glval) = VariableAddress[x640] : -# 1939| mu1939_2(String) = Uninitialized[x640] : &:r1939_1 -# 1939| r1939_3(glval) = FunctionAddress[String] : -# 1939| v1939_4(void) = Call[String] : func:r1939_3, this:r1939_1 -# 1939| mu1939_5(unknown) = ^CallSideEffect : ~m? -# 1939| mu1939_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1939_1 -# 1940| r1940_1(glval) = VariableAddress[x640] : -# 1940| r1940_2(glval) = FunctionAddress[~String] : -# 1940| v1940_3(void) = Call[~String] : func:r1940_2, this:r1940_1 -# 1940| mu1940_4(unknown) = ^CallSideEffect : ~m? -# 1940| v1940_5(void) = ^IndirectReadSideEffect[-1] : &:r1940_1, ~m? -# 1940| mu1940_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1940_1 -# 1940| r1940_7(bool) = Constant[0] : -# 1940| v1940_8(void) = ConditionalBranch : r1940_7 +# 35| Block 641 +# 35| r35_8961(glval) = VariableAddress[x640] : +# 35| mu35_8962(String) = Uninitialized[x640] : &:r35_8961 +# 35| r35_8963(glval) = FunctionAddress[String] : +# 35| v35_8964(void) = Call[String] : func:r35_8963, this:r35_8961 +# 35| mu35_8965(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8961 +# 35| r35_8967(glval) = VariableAddress[x640] : +# 35| r35_8968(glval) = FunctionAddress[~String] : +# 35| v35_8969(void) = Call[~String] : func:r35_8968, this:r35_8967 +# 35| mu35_8970(unknown) = ^CallSideEffect : ~m? +# 35| v35_8971(void) = ^IndirectReadSideEffect[-1] : &:r35_8967, ~m? +# 35| mu35_8972(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8967 +# 35| r35_8973(bool) = Constant[0] : +# 35| v35_8974(void) = ConditionalBranch : r35_8973 #-----| False -> Block 642 #-----| True (back edge) -> Block 641 -# 1942| Block 642 -# 1942| r1942_1(glval) = VariableAddress[x641] : -# 1942| mu1942_2(String) = Uninitialized[x641] : &:r1942_1 -# 1942| r1942_3(glval) = FunctionAddress[String] : -# 1942| v1942_4(void) = Call[String] : func:r1942_3, this:r1942_1 -# 1942| mu1942_5(unknown) = ^CallSideEffect : ~m? -# 1942| mu1942_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1942_1 -# 1943| r1943_1(glval) = VariableAddress[x641] : -# 1943| r1943_2(glval) = FunctionAddress[~String] : -# 1943| v1943_3(void) = Call[~String] : func:r1943_2, this:r1943_1 -# 1943| mu1943_4(unknown) = ^CallSideEffect : ~m? -# 1943| v1943_5(void) = ^IndirectReadSideEffect[-1] : &:r1943_1, ~m? -# 1943| mu1943_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1943_1 -# 1943| r1943_7(bool) = Constant[0] : -# 1943| v1943_8(void) = ConditionalBranch : r1943_7 +# 35| Block 642 +# 35| r35_8975(glval) = VariableAddress[x641] : +# 35| mu35_8976(String) = Uninitialized[x641] : &:r35_8975 +# 35| r35_8977(glval) = FunctionAddress[String] : +# 35| v35_8978(void) = Call[String] : func:r35_8977, this:r35_8975 +# 35| mu35_8979(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8975 +# 35| r35_8981(glval) = VariableAddress[x641] : +# 35| r35_8982(glval) = FunctionAddress[~String] : +# 35| v35_8983(void) = Call[~String] : func:r35_8982, this:r35_8981 +# 35| mu35_8984(unknown) = ^CallSideEffect : ~m? +# 35| v35_8985(void) = ^IndirectReadSideEffect[-1] : &:r35_8981, ~m? +# 35| mu35_8986(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8981 +# 35| r35_8987(bool) = Constant[0] : +# 35| v35_8988(void) = ConditionalBranch : r35_8987 #-----| False -> Block 643 #-----| True (back edge) -> Block 642 -# 1945| Block 643 -# 1945| r1945_1(glval) = VariableAddress[x642] : -# 1945| mu1945_2(String) = Uninitialized[x642] : &:r1945_1 -# 1945| r1945_3(glval) = FunctionAddress[String] : -# 1945| v1945_4(void) = Call[String] : func:r1945_3, this:r1945_1 -# 1945| mu1945_5(unknown) = ^CallSideEffect : ~m? -# 1945| mu1945_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1945_1 -# 1946| r1946_1(glval) = VariableAddress[x642] : -# 1946| r1946_2(glval) = FunctionAddress[~String] : -# 1946| v1946_3(void) = Call[~String] : func:r1946_2, this:r1946_1 -# 1946| mu1946_4(unknown) = ^CallSideEffect : ~m? -# 1946| v1946_5(void) = ^IndirectReadSideEffect[-1] : &:r1946_1, ~m? -# 1946| mu1946_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1946_1 -# 1946| r1946_7(bool) = Constant[0] : -# 1946| v1946_8(void) = ConditionalBranch : r1946_7 +# 35| Block 643 +# 35| r35_8989(glval) = VariableAddress[x642] : +# 35| mu35_8990(String) = Uninitialized[x642] : &:r35_8989 +# 35| r35_8991(glval) = FunctionAddress[String] : +# 35| v35_8992(void) = Call[String] : func:r35_8991, this:r35_8989 +# 35| mu35_8993(unknown) = ^CallSideEffect : ~m? +# 35| mu35_8994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8989 +# 35| r35_8995(glval) = VariableAddress[x642] : +# 35| r35_8996(glval) = FunctionAddress[~String] : +# 35| v35_8997(void) = Call[~String] : func:r35_8996, this:r35_8995 +# 35| mu35_8998(unknown) = ^CallSideEffect : ~m? +# 35| v35_8999(void) = ^IndirectReadSideEffect[-1] : &:r35_8995, ~m? +# 35| mu35_9000(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_8995 +# 35| r35_9001(bool) = Constant[0] : +# 35| v35_9002(void) = ConditionalBranch : r35_9001 #-----| False -> Block 644 #-----| True (back edge) -> Block 643 -# 1948| Block 644 -# 1948| r1948_1(glval) = VariableAddress[x643] : -# 1948| mu1948_2(String) = Uninitialized[x643] : &:r1948_1 -# 1948| r1948_3(glval) = FunctionAddress[String] : -# 1948| v1948_4(void) = Call[String] : func:r1948_3, this:r1948_1 -# 1948| mu1948_5(unknown) = ^CallSideEffect : ~m? -# 1948| mu1948_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 -# 1949| r1949_1(glval) = VariableAddress[x643] : -# 1949| r1949_2(glval) = FunctionAddress[~String] : -# 1949| v1949_3(void) = Call[~String] : func:r1949_2, this:r1949_1 -# 1949| mu1949_4(unknown) = ^CallSideEffect : ~m? -# 1949| v1949_5(void) = ^IndirectReadSideEffect[-1] : &:r1949_1, ~m? -# 1949| mu1949_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1949_1 -# 1949| r1949_7(bool) = Constant[0] : -# 1949| v1949_8(void) = ConditionalBranch : r1949_7 +# 35| Block 644 +# 35| r35_9003(glval) = VariableAddress[x643] : +# 35| mu35_9004(String) = Uninitialized[x643] : &:r35_9003 +# 35| r35_9005(glval) = FunctionAddress[String] : +# 35| v35_9006(void) = Call[String] : func:r35_9005, this:r35_9003 +# 35| mu35_9007(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9003 +# 35| r35_9009(glval) = VariableAddress[x643] : +# 35| r35_9010(glval) = FunctionAddress[~String] : +# 35| v35_9011(void) = Call[~String] : func:r35_9010, this:r35_9009 +# 35| mu35_9012(unknown) = ^CallSideEffect : ~m? +# 35| v35_9013(void) = ^IndirectReadSideEffect[-1] : &:r35_9009, ~m? +# 35| mu35_9014(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9009 +# 35| r35_9015(bool) = Constant[0] : +# 35| v35_9016(void) = ConditionalBranch : r35_9015 #-----| False -> Block 645 #-----| True (back edge) -> Block 644 -# 1951| Block 645 -# 1951| r1951_1(glval) = VariableAddress[x644] : -# 1951| mu1951_2(String) = Uninitialized[x644] : &:r1951_1 -# 1951| r1951_3(glval) = FunctionAddress[String] : -# 1951| v1951_4(void) = Call[String] : func:r1951_3, this:r1951_1 -# 1951| mu1951_5(unknown) = ^CallSideEffect : ~m? -# 1951| mu1951_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1951_1 -# 1952| r1952_1(glval) = VariableAddress[x644] : -# 1952| r1952_2(glval) = FunctionAddress[~String] : -# 1952| v1952_3(void) = Call[~String] : func:r1952_2, this:r1952_1 -# 1952| mu1952_4(unknown) = ^CallSideEffect : ~m? -# 1952| v1952_5(void) = ^IndirectReadSideEffect[-1] : &:r1952_1, ~m? -# 1952| mu1952_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1952_1 -# 1952| r1952_7(bool) = Constant[0] : -# 1952| v1952_8(void) = ConditionalBranch : r1952_7 +# 35| Block 645 +# 35| r35_9017(glval) = VariableAddress[x644] : +# 35| mu35_9018(String) = Uninitialized[x644] : &:r35_9017 +# 35| r35_9019(glval) = FunctionAddress[String] : +# 35| v35_9020(void) = Call[String] : func:r35_9019, this:r35_9017 +# 35| mu35_9021(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9017 +# 35| r35_9023(glval) = VariableAddress[x644] : +# 35| r35_9024(glval) = FunctionAddress[~String] : +# 35| v35_9025(void) = Call[~String] : func:r35_9024, this:r35_9023 +# 35| mu35_9026(unknown) = ^CallSideEffect : ~m? +# 35| v35_9027(void) = ^IndirectReadSideEffect[-1] : &:r35_9023, ~m? +# 35| mu35_9028(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9023 +# 35| r35_9029(bool) = Constant[0] : +# 35| v35_9030(void) = ConditionalBranch : r35_9029 #-----| False -> Block 646 #-----| True (back edge) -> Block 645 -# 1954| Block 646 -# 1954| r1954_1(glval) = VariableAddress[x645] : -# 1954| mu1954_2(String) = Uninitialized[x645] : &:r1954_1 -# 1954| r1954_3(glval) = FunctionAddress[String] : -# 1954| v1954_4(void) = Call[String] : func:r1954_3, this:r1954_1 -# 1954| mu1954_5(unknown) = ^CallSideEffect : ~m? -# 1954| mu1954_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1954_1 -# 1955| r1955_1(glval) = VariableAddress[x645] : -# 1955| r1955_2(glval) = FunctionAddress[~String] : -# 1955| v1955_3(void) = Call[~String] : func:r1955_2, this:r1955_1 -# 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1955| v1955_5(void) = ^IndirectReadSideEffect[-1] : &:r1955_1, ~m? -# 1955| mu1955_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1955_1 -# 1955| r1955_7(bool) = Constant[0] : -# 1955| v1955_8(void) = ConditionalBranch : r1955_7 +# 35| Block 646 +# 35| r35_9031(glval) = VariableAddress[x645] : +# 35| mu35_9032(String) = Uninitialized[x645] : &:r35_9031 +# 35| r35_9033(glval) = FunctionAddress[String] : +# 35| v35_9034(void) = Call[String] : func:r35_9033, this:r35_9031 +# 35| mu35_9035(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9031 +# 35| r35_9037(glval) = VariableAddress[x645] : +# 35| r35_9038(glval) = FunctionAddress[~String] : +# 35| v35_9039(void) = Call[~String] : func:r35_9038, this:r35_9037 +# 35| mu35_9040(unknown) = ^CallSideEffect : ~m? +# 35| v35_9041(void) = ^IndirectReadSideEffect[-1] : &:r35_9037, ~m? +# 35| mu35_9042(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9037 +# 35| r35_9043(bool) = Constant[0] : +# 35| v35_9044(void) = ConditionalBranch : r35_9043 #-----| False -> Block 647 #-----| True (back edge) -> Block 646 -# 1957| Block 647 -# 1957| r1957_1(glval) = VariableAddress[x646] : -# 1957| mu1957_2(String) = Uninitialized[x646] : &:r1957_1 -# 1957| r1957_3(glval) = FunctionAddress[String] : -# 1957| v1957_4(void) = Call[String] : func:r1957_3, this:r1957_1 -# 1957| mu1957_5(unknown) = ^CallSideEffect : ~m? -# 1957| mu1957_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1957_1 -# 1958| r1958_1(glval) = VariableAddress[x646] : -# 1958| r1958_2(glval) = FunctionAddress[~String] : -# 1958| v1958_3(void) = Call[~String] : func:r1958_2, this:r1958_1 -# 1958| mu1958_4(unknown) = ^CallSideEffect : ~m? -# 1958| v1958_5(void) = ^IndirectReadSideEffect[-1] : &:r1958_1, ~m? -# 1958| mu1958_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1958_1 -# 1958| r1958_7(bool) = Constant[0] : -# 1958| v1958_8(void) = ConditionalBranch : r1958_7 +# 35| Block 647 +# 35| r35_9045(glval) = VariableAddress[x646] : +# 35| mu35_9046(String) = Uninitialized[x646] : &:r35_9045 +# 35| r35_9047(glval) = FunctionAddress[String] : +# 35| v35_9048(void) = Call[String] : func:r35_9047, this:r35_9045 +# 35| mu35_9049(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9045 +# 35| r35_9051(glval) = VariableAddress[x646] : +# 35| r35_9052(glval) = FunctionAddress[~String] : +# 35| v35_9053(void) = Call[~String] : func:r35_9052, this:r35_9051 +# 35| mu35_9054(unknown) = ^CallSideEffect : ~m? +# 35| v35_9055(void) = ^IndirectReadSideEffect[-1] : &:r35_9051, ~m? +# 35| mu35_9056(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9051 +# 35| r35_9057(bool) = Constant[0] : +# 35| v35_9058(void) = ConditionalBranch : r35_9057 #-----| False -> Block 648 #-----| True (back edge) -> Block 647 -# 1960| Block 648 -# 1960| r1960_1(glval) = VariableAddress[x647] : -# 1960| mu1960_2(String) = Uninitialized[x647] : &:r1960_1 -# 1960| r1960_3(glval) = FunctionAddress[String] : -# 1960| v1960_4(void) = Call[String] : func:r1960_3, this:r1960_1 -# 1960| mu1960_5(unknown) = ^CallSideEffect : ~m? -# 1960| mu1960_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1960_1 -# 1961| r1961_1(glval) = VariableAddress[x647] : -# 1961| r1961_2(glval) = FunctionAddress[~String] : -# 1961| v1961_3(void) = Call[~String] : func:r1961_2, this:r1961_1 -# 1961| mu1961_4(unknown) = ^CallSideEffect : ~m? -# 1961| v1961_5(void) = ^IndirectReadSideEffect[-1] : &:r1961_1, ~m? -# 1961| mu1961_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1961_1 -# 1961| r1961_7(bool) = Constant[0] : -# 1961| v1961_8(void) = ConditionalBranch : r1961_7 +# 35| Block 648 +# 35| r35_9059(glval) = VariableAddress[x647] : +# 35| mu35_9060(String) = Uninitialized[x647] : &:r35_9059 +# 35| r35_9061(glval) = FunctionAddress[String] : +# 35| v35_9062(void) = Call[String] : func:r35_9061, this:r35_9059 +# 35| mu35_9063(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9059 +# 35| r35_9065(glval) = VariableAddress[x647] : +# 35| r35_9066(glval) = FunctionAddress[~String] : +# 35| v35_9067(void) = Call[~String] : func:r35_9066, this:r35_9065 +# 35| mu35_9068(unknown) = ^CallSideEffect : ~m? +# 35| v35_9069(void) = ^IndirectReadSideEffect[-1] : &:r35_9065, ~m? +# 35| mu35_9070(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9065 +# 35| r35_9071(bool) = Constant[0] : +# 35| v35_9072(void) = ConditionalBranch : r35_9071 #-----| False -> Block 649 #-----| True (back edge) -> Block 648 -# 1963| Block 649 -# 1963| r1963_1(glval) = VariableAddress[x648] : -# 1963| mu1963_2(String) = Uninitialized[x648] : &:r1963_1 -# 1963| r1963_3(glval) = FunctionAddress[String] : -# 1963| v1963_4(void) = Call[String] : func:r1963_3, this:r1963_1 -# 1963| mu1963_5(unknown) = ^CallSideEffect : ~m? -# 1963| mu1963_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1963_1 -# 1964| r1964_1(glval) = VariableAddress[x648] : -# 1964| r1964_2(glval) = FunctionAddress[~String] : -# 1964| v1964_3(void) = Call[~String] : func:r1964_2, this:r1964_1 -# 1964| mu1964_4(unknown) = ^CallSideEffect : ~m? -# 1964| v1964_5(void) = ^IndirectReadSideEffect[-1] : &:r1964_1, ~m? -# 1964| mu1964_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1964_1 -# 1964| r1964_7(bool) = Constant[0] : -# 1964| v1964_8(void) = ConditionalBranch : r1964_7 +# 35| Block 649 +# 35| r35_9073(glval) = VariableAddress[x648] : +# 35| mu35_9074(String) = Uninitialized[x648] : &:r35_9073 +# 35| r35_9075(glval) = FunctionAddress[String] : +# 35| v35_9076(void) = Call[String] : func:r35_9075, this:r35_9073 +# 35| mu35_9077(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9073 +# 35| r35_9079(glval) = VariableAddress[x648] : +# 35| r35_9080(glval) = FunctionAddress[~String] : +# 35| v35_9081(void) = Call[~String] : func:r35_9080, this:r35_9079 +# 35| mu35_9082(unknown) = ^CallSideEffect : ~m? +# 35| v35_9083(void) = ^IndirectReadSideEffect[-1] : &:r35_9079, ~m? +# 35| mu35_9084(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9079 +# 35| r35_9085(bool) = Constant[0] : +# 35| v35_9086(void) = ConditionalBranch : r35_9085 #-----| False -> Block 650 #-----| True (back edge) -> Block 649 -# 1966| Block 650 -# 1966| r1966_1(glval) = VariableAddress[x649] : -# 1966| mu1966_2(String) = Uninitialized[x649] : &:r1966_1 -# 1966| r1966_3(glval) = FunctionAddress[String] : -# 1966| v1966_4(void) = Call[String] : func:r1966_3, this:r1966_1 -# 1966| mu1966_5(unknown) = ^CallSideEffect : ~m? -# 1966| mu1966_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1966_1 -# 1967| r1967_1(glval) = VariableAddress[x649] : -# 1967| r1967_2(glval) = FunctionAddress[~String] : -# 1967| v1967_3(void) = Call[~String] : func:r1967_2, this:r1967_1 -# 1967| mu1967_4(unknown) = ^CallSideEffect : ~m? -# 1967| v1967_5(void) = ^IndirectReadSideEffect[-1] : &:r1967_1, ~m? -# 1967| mu1967_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1967_1 -# 1967| r1967_7(bool) = Constant[0] : -# 1967| v1967_8(void) = ConditionalBranch : r1967_7 +# 35| Block 650 +# 35| r35_9087(glval) = VariableAddress[x649] : +# 35| mu35_9088(String) = Uninitialized[x649] : &:r35_9087 +# 35| r35_9089(glval) = FunctionAddress[String] : +# 35| v35_9090(void) = Call[String] : func:r35_9089, this:r35_9087 +# 35| mu35_9091(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9087 +# 35| r35_9093(glval) = VariableAddress[x649] : +# 35| r35_9094(glval) = FunctionAddress[~String] : +# 35| v35_9095(void) = Call[~String] : func:r35_9094, this:r35_9093 +# 35| mu35_9096(unknown) = ^CallSideEffect : ~m? +# 35| v35_9097(void) = ^IndirectReadSideEffect[-1] : &:r35_9093, ~m? +# 35| mu35_9098(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9093 +# 35| r35_9099(bool) = Constant[0] : +# 35| v35_9100(void) = ConditionalBranch : r35_9099 #-----| False -> Block 651 #-----| True (back edge) -> Block 650 -# 1969| Block 651 -# 1969| r1969_1(glval) = VariableAddress[x650] : -# 1969| mu1969_2(String) = Uninitialized[x650] : &:r1969_1 -# 1969| r1969_3(glval) = FunctionAddress[String] : -# 1969| v1969_4(void) = Call[String] : func:r1969_3, this:r1969_1 -# 1969| mu1969_5(unknown) = ^CallSideEffect : ~m? -# 1969| mu1969_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x650] : -# 1970| r1970_2(glval) = FunctionAddress[~String] : -# 1970| v1970_3(void) = Call[~String] : func:r1970_2, this:r1970_1 -# 1970| mu1970_4(unknown) = ^CallSideEffect : ~m? -# 1970| v1970_5(void) = ^IndirectReadSideEffect[-1] : &:r1970_1, ~m? -# 1970| mu1970_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1970_1 -# 1970| r1970_7(bool) = Constant[0] : -# 1970| v1970_8(void) = ConditionalBranch : r1970_7 +# 35| Block 651 +# 35| r35_9101(glval) = VariableAddress[x650] : +# 35| mu35_9102(String) = Uninitialized[x650] : &:r35_9101 +# 35| r35_9103(glval) = FunctionAddress[String] : +# 35| v35_9104(void) = Call[String] : func:r35_9103, this:r35_9101 +# 35| mu35_9105(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9101 +# 35| r35_9107(glval) = VariableAddress[x650] : +# 35| r35_9108(glval) = FunctionAddress[~String] : +# 35| v35_9109(void) = Call[~String] : func:r35_9108, this:r35_9107 +# 35| mu35_9110(unknown) = ^CallSideEffect : ~m? +# 35| v35_9111(void) = ^IndirectReadSideEffect[-1] : &:r35_9107, ~m? +# 35| mu35_9112(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9107 +# 35| r35_9113(bool) = Constant[0] : +# 35| v35_9114(void) = ConditionalBranch : r35_9113 #-----| False -> Block 652 #-----| True (back edge) -> Block 651 -# 1972| Block 652 -# 1972| r1972_1(glval) = VariableAddress[x651] : -# 1972| mu1972_2(String) = Uninitialized[x651] : &:r1972_1 -# 1972| r1972_3(glval) = FunctionAddress[String] : -# 1972| v1972_4(void) = Call[String] : func:r1972_3, this:r1972_1 -# 1972| mu1972_5(unknown) = ^CallSideEffect : ~m? -# 1972| mu1972_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1972_1 -# 1973| r1973_1(glval) = VariableAddress[x651] : -# 1973| r1973_2(glval) = FunctionAddress[~String] : -# 1973| v1973_3(void) = Call[~String] : func:r1973_2, this:r1973_1 -# 1973| mu1973_4(unknown) = ^CallSideEffect : ~m? -# 1973| v1973_5(void) = ^IndirectReadSideEffect[-1] : &:r1973_1, ~m? -# 1973| mu1973_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1973_1 -# 1973| r1973_7(bool) = Constant[0] : -# 1973| v1973_8(void) = ConditionalBranch : r1973_7 +# 35| Block 652 +# 35| r35_9115(glval) = VariableAddress[x651] : +# 35| mu35_9116(String) = Uninitialized[x651] : &:r35_9115 +# 35| r35_9117(glval) = FunctionAddress[String] : +# 35| v35_9118(void) = Call[String] : func:r35_9117, this:r35_9115 +# 35| mu35_9119(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9115 +# 35| r35_9121(glval) = VariableAddress[x651] : +# 35| r35_9122(glval) = FunctionAddress[~String] : +# 35| v35_9123(void) = Call[~String] : func:r35_9122, this:r35_9121 +# 35| mu35_9124(unknown) = ^CallSideEffect : ~m? +# 35| v35_9125(void) = ^IndirectReadSideEffect[-1] : &:r35_9121, ~m? +# 35| mu35_9126(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9121 +# 35| r35_9127(bool) = Constant[0] : +# 35| v35_9128(void) = ConditionalBranch : r35_9127 #-----| False -> Block 653 #-----| True (back edge) -> Block 652 -# 1975| Block 653 -# 1975| r1975_1(glval) = VariableAddress[x652] : -# 1975| mu1975_2(String) = Uninitialized[x652] : &:r1975_1 -# 1975| r1975_3(glval) = FunctionAddress[String] : -# 1975| v1975_4(void) = Call[String] : func:r1975_3, this:r1975_1 -# 1975| mu1975_5(unknown) = ^CallSideEffect : ~m? -# 1975| mu1975_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1975_1 -# 1976| r1976_1(glval) = VariableAddress[x652] : -# 1976| r1976_2(glval) = FunctionAddress[~String] : -# 1976| v1976_3(void) = Call[~String] : func:r1976_2, this:r1976_1 -# 1976| mu1976_4(unknown) = ^CallSideEffect : ~m? -# 1976| v1976_5(void) = ^IndirectReadSideEffect[-1] : &:r1976_1, ~m? -# 1976| mu1976_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1976_1 -# 1976| r1976_7(bool) = Constant[0] : -# 1976| v1976_8(void) = ConditionalBranch : r1976_7 +# 35| Block 653 +# 35| r35_9129(glval) = VariableAddress[x652] : +# 35| mu35_9130(String) = Uninitialized[x652] : &:r35_9129 +# 35| r35_9131(glval) = FunctionAddress[String] : +# 35| v35_9132(void) = Call[String] : func:r35_9131, this:r35_9129 +# 35| mu35_9133(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9129 +# 35| r35_9135(glval) = VariableAddress[x652] : +# 35| r35_9136(glval) = FunctionAddress[~String] : +# 35| v35_9137(void) = Call[~String] : func:r35_9136, this:r35_9135 +# 35| mu35_9138(unknown) = ^CallSideEffect : ~m? +# 35| v35_9139(void) = ^IndirectReadSideEffect[-1] : &:r35_9135, ~m? +# 35| mu35_9140(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9135 +# 35| r35_9141(bool) = Constant[0] : +# 35| v35_9142(void) = ConditionalBranch : r35_9141 #-----| False -> Block 654 #-----| True (back edge) -> Block 653 -# 1978| Block 654 -# 1978| r1978_1(glval) = VariableAddress[x653] : -# 1978| mu1978_2(String) = Uninitialized[x653] : &:r1978_1 -# 1978| r1978_3(glval) = FunctionAddress[String] : -# 1978| v1978_4(void) = Call[String] : func:r1978_3, this:r1978_1 -# 1978| mu1978_5(unknown) = ^CallSideEffect : ~m? -# 1978| mu1978_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1978_1 -# 1979| r1979_1(glval) = VariableAddress[x653] : -# 1979| r1979_2(glval) = FunctionAddress[~String] : -# 1979| v1979_3(void) = Call[~String] : func:r1979_2, this:r1979_1 -# 1979| mu1979_4(unknown) = ^CallSideEffect : ~m? -# 1979| v1979_5(void) = ^IndirectReadSideEffect[-1] : &:r1979_1, ~m? -# 1979| mu1979_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1979_1 -# 1979| r1979_7(bool) = Constant[0] : -# 1979| v1979_8(void) = ConditionalBranch : r1979_7 +# 35| Block 654 +# 35| r35_9143(glval) = VariableAddress[x653] : +# 35| mu35_9144(String) = Uninitialized[x653] : &:r35_9143 +# 35| r35_9145(glval) = FunctionAddress[String] : +# 35| v35_9146(void) = Call[String] : func:r35_9145, this:r35_9143 +# 35| mu35_9147(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9143 +# 35| r35_9149(glval) = VariableAddress[x653] : +# 35| r35_9150(glval) = FunctionAddress[~String] : +# 35| v35_9151(void) = Call[~String] : func:r35_9150, this:r35_9149 +# 35| mu35_9152(unknown) = ^CallSideEffect : ~m? +# 35| v35_9153(void) = ^IndirectReadSideEffect[-1] : &:r35_9149, ~m? +# 35| mu35_9154(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9149 +# 35| r35_9155(bool) = Constant[0] : +# 35| v35_9156(void) = ConditionalBranch : r35_9155 #-----| False -> Block 655 #-----| True (back edge) -> Block 654 -# 1981| Block 655 -# 1981| r1981_1(glval) = VariableAddress[x654] : -# 1981| mu1981_2(String) = Uninitialized[x654] : &:r1981_1 -# 1981| r1981_3(glval) = FunctionAddress[String] : -# 1981| v1981_4(void) = Call[String] : func:r1981_3, this:r1981_1 -# 1981| mu1981_5(unknown) = ^CallSideEffect : ~m? -# 1981| mu1981_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1981_1 -# 1982| r1982_1(glval) = VariableAddress[x654] : -# 1982| r1982_2(glval) = FunctionAddress[~String] : -# 1982| v1982_3(void) = Call[~String] : func:r1982_2, this:r1982_1 -# 1982| mu1982_4(unknown) = ^CallSideEffect : ~m? -# 1982| v1982_5(void) = ^IndirectReadSideEffect[-1] : &:r1982_1, ~m? -# 1982| mu1982_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 -# 1982| r1982_7(bool) = Constant[0] : -# 1982| v1982_8(void) = ConditionalBranch : r1982_7 +# 35| Block 655 +# 35| r35_9157(glval) = VariableAddress[x654] : +# 35| mu35_9158(String) = Uninitialized[x654] : &:r35_9157 +# 35| r35_9159(glval) = FunctionAddress[String] : +# 35| v35_9160(void) = Call[String] : func:r35_9159, this:r35_9157 +# 35| mu35_9161(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9157 +# 35| r35_9163(glval) = VariableAddress[x654] : +# 35| r35_9164(glval) = FunctionAddress[~String] : +# 35| v35_9165(void) = Call[~String] : func:r35_9164, this:r35_9163 +# 35| mu35_9166(unknown) = ^CallSideEffect : ~m? +# 35| v35_9167(void) = ^IndirectReadSideEffect[-1] : &:r35_9163, ~m? +# 35| mu35_9168(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9163 +# 35| r35_9169(bool) = Constant[0] : +# 35| v35_9170(void) = ConditionalBranch : r35_9169 #-----| False -> Block 656 #-----| True (back edge) -> Block 655 -# 1984| Block 656 -# 1984| r1984_1(glval) = VariableAddress[x655] : -# 1984| mu1984_2(String) = Uninitialized[x655] : &:r1984_1 -# 1984| r1984_3(glval) = FunctionAddress[String] : -# 1984| v1984_4(void) = Call[String] : func:r1984_3, this:r1984_1 -# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? -# 1984| mu1984_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1984_1 -# 1985| r1985_1(glval) = VariableAddress[x655] : -# 1985| r1985_2(glval) = FunctionAddress[~String] : -# 1985| v1985_3(void) = Call[~String] : func:r1985_2, this:r1985_1 -# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? -# 1985| v1985_5(void) = ^IndirectReadSideEffect[-1] : &:r1985_1, ~m? -# 1985| mu1985_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1985_1 -# 1985| r1985_7(bool) = Constant[0] : -# 1985| v1985_8(void) = ConditionalBranch : r1985_7 +# 35| Block 656 +# 35| r35_9171(glval) = VariableAddress[x655] : +# 35| mu35_9172(String) = Uninitialized[x655] : &:r35_9171 +# 35| r35_9173(glval) = FunctionAddress[String] : +# 35| v35_9174(void) = Call[String] : func:r35_9173, this:r35_9171 +# 35| mu35_9175(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9171 +# 35| r35_9177(glval) = VariableAddress[x655] : +# 35| r35_9178(glval) = FunctionAddress[~String] : +# 35| v35_9179(void) = Call[~String] : func:r35_9178, this:r35_9177 +# 35| mu35_9180(unknown) = ^CallSideEffect : ~m? +# 35| v35_9181(void) = ^IndirectReadSideEffect[-1] : &:r35_9177, ~m? +# 35| mu35_9182(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9177 +# 35| r35_9183(bool) = Constant[0] : +# 35| v35_9184(void) = ConditionalBranch : r35_9183 #-----| False -> Block 657 #-----| True (back edge) -> Block 656 -# 1987| Block 657 -# 1987| r1987_1(glval) = VariableAddress[x656] : -# 1987| mu1987_2(String) = Uninitialized[x656] : &:r1987_1 -# 1987| r1987_3(glval) = FunctionAddress[String] : -# 1987| v1987_4(void) = Call[String] : func:r1987_3, this:r1987_1 -# 1987| mu1987_5(unknown) = ^CallSideEffect : ~m? -# 1987| mu1987_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1987_1 -# 1988| r1988_1(glval) = VariableAddress[x656] : -# 1988| r1988_2(glval) = FunctionAddress[~String] : -# 1988| v1988_3(void) = Call[~String] : func:r1988_2, this:r1988_1 -# 1988| mu1988_4(unknown) = ^CallSideEffect : ~m? -# 1988| v1988_5(void) = ^IndirectReadSideEffect[-1] : &:r1988_1, ~m? -# 1988| mu1988_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1988_1 -# 1988| r1988_7(bool) = Constant[0] : -# 1988| v1988_8(void) = ConditionalBranch : r1988_7 +# 35| Block 657 +# 35| r35_9185(glval) = VariableAddress[x656] : +# 35| mu35_9186(String) = Uninitialized[x656] : &:r35_9185 +# 35| r35_9187(glval) = FunctionAddress[String] : +# 35| v35_9188(void) = Call[String] : func:r35_9187, this:r35_9185 +# 35| mu35_9189(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9185 +# 35| r35_9191(glval) = VariableAddress[x656] : +# 35| r35_9192(glval) = FunctionAddress[~String] : +# 35| v35_9193(void) = Call[~String] : func:r35_9192, this:r35_9191 +# 35| mu35_9194(unknown) = ^CallSideEffect : ~m? +# 35| v35_9195(void) = ^IndirectReadSideEffect[-1] : &:r35_9191, ~m? +# 35| mu35_9196(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9191 +# 35| r35_9197(bool) = Constant[0] : +# 35| v35_9198(void) = ConditionalBranch : r35_9197 #-----| False -> Block 658 #-----| True (back edge) -> Block 657 -# 1990| Block 658 -# 1990| r1990_1(glval) = VariableAddress[x657] : -# 1990| mu1990_2(String) = Uninitialized[x657] : &:r1990_1 -# 1990| r1990_3(glval) = FunctionAddress[String] : -# 1990| v1990_4(void) = Call[String] : func:r1990_3, this:r1990_1 -# 1990| mu1990_5(unknown) = ^CallSideEffect : ~m? -# 1990| mu1990_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1990_1 -# 1991| r1991_1(glval) = VariableAddress[x657] : -# 1991| r1991_2(glval) = FunctionAddress[~String] : -# 1991| v1991_3(void) = Call[~String] : func:r1991_2, this:r1991_1 -# 1991| mu1991_4(unknown) = ^CallSideEffect : ~m? -# 1991| v1991_5(void) = ^IndirectReadSideEffect[-1] : &:r1991_1, ~m? -# 1991| mu1991_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1991| r1991_7(bool) = Constant[0] : -# 1991| v1991_8(void) = ConditionalBranch : r1991_7 +# 35| Block 658 +# 35| r35_9199(glval) = VariableAddress[x657] : +# 35| mu35_9200(String) = Uninitialized[x657] : &:r35_9199 +# 35| r35_9201(glval) = FunctionAddress[String] : +# 35| v35_9202(void) = Call[String] : func:r35_9201, this:r35_9199 +# 35| mu35_9203(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9199 +# 35| r35_9205(glval) = VariableAddress[x657] : +# 35| r35_9206(glval) = FunctionAddress[~String] : +# 35| v35_9207(void) = Call[~String] : func:r35_9206, this:r35_9205 +# 35| mu35_9208(unknown) = ^CallSideEffect : ~m? +# 35| v35_9209(void) = ^IndirectReadSideEffect[-1] : &:r35_9205, ~m? +# 35| mu35_9210(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9205 +# 35| r35_9211(bool) = Constant[0] : +# 35| v35_9212(void) = ConditionalBranch : r35_9211 #-----| False -> Block 659 #-----| True (back edge) -> Block 658 -# 1993| Block 659 -# 1993| r1993_1(glval) = VariableAddress[x658] : -# 1993| mu1993_2(String) = Uninitialized[x658] : &:r1993_1 -# 1993| r1993_3(glval) = FunctionAddress[String] : -# 1993| v1993_4(void) = Call[String] : func:r1993_3, this:r1993_1 -# 1993| mu1993_5(unknown) = ^CallSideEffect : ~m? -# 1993| mu1993_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 -# 1994| r1994_1(glval) = VariableAddress[x658] : -# 1994| r1994_2(glval) = FunctionAddress[~String] : -# 1994| v1994_3(void) = Call[~String] : func:r1994_2, this:r1994_1 -# 1994| mu1994_4(unknown) = ^CallSideEffect : ~m? -# 1994| v1994_5(void) = ^IndirectReadSideEffect[-1] : &:r1994_1, ~m? -# 1994| mu1994_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1994_1 -# 1994| r1994_7(bool) = Constant[0] : -# 1994| v1994_8(void) = ConditionalBranch : r1994_7 +# 35| Block 659 +# 35| r35_9213(glval) = VariableAddress[x658] : +# 35| mu35_9214(String) = Uninitialized[x658] : &:r35_9213 +# 35| r35_9215(glval) = FunctionAddress[String] : +# 35| v35_9216(void) = Call[String] : func:r35_9215, this:r35_9213 +# 35| mu35_9217(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9213 +# 35| r35_9219(glval) = VariableAddress[x658] : +# 35| r35_9220(glval) = FunctionAddress[~String] : +# 35| v35_9221(void) = Call[~String] : func:r35_9220, this:r35_9219 +# 35| mu35_9222(unknown) = ^CallSideEffect : ~m? +# 35| v35_9223(void) = ^IndirectReadSideEffect[-1] : &:r35_9219, ~m? +# 35| mu35_9224(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9219 +# 35| r35_9225(bool) = Constant[0] : +# 35| v35_9226(void) = ConditionalBranch : r35_9225 #-----| False -> Block 660 #-----| True (back edge) -> Block 659 -# 1996| Block 660 -# 1996| r1996_1(glval) = VariableAddress[x659] : -# 1996| mu1996_2(String) = Uninitialized[x659] : &:r1996_1 -# 1996| r1996_3(glval) = FunctionAddress[String] : -# 1996| v1996_4(void) = Call[String] : func:r1996_3, this:r1996_1 -# 1996| mu1996_5(unknown) = ^CallSideEffect : ~m? -# 1996| mu1996_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1996_1 -# 1997| r1997_1(glval) = VariableAddress[x659] : -# 1997| r1997_2(glval) = FunctionAddress[~String] : -# 1997| v1997_3(void) = Call[~String] : func:r1997_2, this:r1997_1 -# 1997| mu1997_4(unknown) = ^CallSideEffect : ~m? -# 1997| v1997_5(void) = ^IndirectReadSideEffect[-1] : &:r1997_1, ~m? -# 1997| mu1997_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1997_1 -# 1997| r1997_7(bool) = Constant[0] : -# 1997| v1997_8(void) = ConditionalBranch : r1997_7 +# 35| Block 660 +# 35| r35_9227(glval) = VariableAddress[x659] : +# 35| mu35_9228(String) = Uninitialized[x659] : &:r35_9227 +# 35| r35_9229(glval) = FunctionAddress[String] : +# 35| v35_9230(void) = Call[String] : func:r35_9229, this:r35_9227 +# 35| mu35_9231(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9227 +# 35| r35_9233(glval) = VariableAddress[x659] : +# 35| r35_9234(glval) = FunctionAddress[~String] : +# 35| v35_9235(void) = Call[~String] : func:r35_9234, this:r35_9233 +# 35| mu35_9236(unknown) = ^CallSideEffect : ~m? +# 35| v35_9237(void) = ^IndirectReadSideEffect[-1] : &:r35_9233, ~m? +# 35| mu35_9238(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9233 +# 35| r35_9239(bool) = Constant[0] : +# 35| v35_9240(void) = ConditionalBranch : r35_9239 #-----| False -> Block 661 #-----| True (back edge) -> Block 660 -# 1999| Block 661 -# 1999| r1999_1(glval) = VariableAddress[x660] : -# 1999| mu1999_2(String) = Uninitialized[x660] : &:r1999_1 -# 1999| r1999_3(glval) = FunctionAddress[String] : -# 1999| v1999_4(void) = Call[String] : func:r1999_3, this:r1999_1 -# 1999| mu1999_5(unknown) = ^CallSideEffect : ~m? -# 1999| mu1999_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1999_1 -# 2000| r2000_1(glval) = VariableAddress[x660] : -# 2000| r2000_2(glval) = FunctionAddress[~String] : -# 2000| v2000_3(void) = Call[~String] : func:r2000_2, this:r2000_1 -# 2000| mu2000_4(unknown) = ^CallSideEffect : ~m? -# 2000| v2000_5(void) = ^IndirectReadSideEffect[-1] : &:r2000_1, ~m? -# 2000| mu2000_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2000_1 -# 2000| r2000_7(bool) = Constant[0] : -# 2000| v2000_8(void) = ConditionalBranch : r2000_7 +# 35| Block 661 +# 35| r35_9241(glval) = VariableAddress[x660] : +# 35| mu35_9242(String) = Uninitialized[x660] : &:r35_9241 +# 35| r35_9243(glval) = FunctionAddress[String] : +# 35| v35_9244(void) = Call[String] : func:r35_9243, this:r35_9241 +# 35| mu35_9245(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9241 +# 35| r35_9247(glval) = VariableAddress[x660] : +# 35| r35_9248(glval) = FunctionAddress[~String] : +# 35| v35_9249(void) = Call[~String] : func:r35_9248, this:r35_9247 +# 35| mu35_9250(unknown) = ^CallSideEffect : ~m? +# 35| v35_9251(void) = ^IndirectReadSideEffect[-1] : &:r35_9247, ~m? +# 35| mu35_9252(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9247 +# 35| r35_9253(bool) = Constant[0] : +# 35| v35_9254(void) = ConditionalBranch : r35_9253 #-----| False -> Block 662 #-----| True (back edge) -> Block 661 -# 2002| Block 662 -# 2002| r2002_1(glval) = VariableAddress[x661] : -# 2002| mu2002_2(String) = Uninitialized[x661] : &:r2002_1 -# 2002| r2002_3(glval) = FunctionAddress[String] : -# 2002| v2002_4(void) = Call[String] : func:r2002_3, this:r2002_1 -# 2002| mu2002_5(unknown) = ^CallSideEffect : ~m? -# 2002| mu2002_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2002_1 -# 2003| r2003_1(glval) = VariableAddress[x661] : -# 2003| r2003_2(glval) = FunctionAddress[~String] : -# 2003| v2003_3(void) = Call[~String] : func:r2003_2, this:r2003_1 -# 2003| mu2003_4(unknown) = ^CallSideEffect : ~m? -# 2003| v2003_5(void) = ^IndirectReadSideEffect[-1] : &:r2003_1, ~m? -# 2003| mu2003_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2003_1 -# 2003| r2003_7(bool) = Constant[0] : -# 2003| v2003_8(void) = ConditionalBranch : r2003_7 +# 35| Block 662 +# 35| r35_9255(glval) = VariableAddress[x661] : +# 35| mu35_9256(String) = Uninitialized[x661] : &:r35_9255 +# 35| r35_9257(glval) = FunctionAddress[String] : +# 35| v35_9258(void) = Call[String] : func:r35_9257, this:r35_9255 +# 35| mu35_9259(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9255 +# 35| r35_9261(glval) = VariableAddress[x661] : +# 35| r35_9262(glval) = FunctionAddress[~String] : +# 35| v35_9263(void) = Call[~String] : func:r35_9262, this:r35_9261 +# 35| mu35_9264(unknown) = ^CallSideEffect : ~m? +# 35| v35_9265(void) = ^IndirectReadSideEffect[-1] : &:r35_9261, ~m? +# 35| mu35_9266(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9261 +# 35| r35_9267(bool) = Constant[0] : +# 35| v35_9268(void) = ConditionalBranch : r35_9267 #-----| False -> Block 663 #-----| True (back edge) -> Block 662 -# 2005| Block 663 -# 2005| r2005_1(glval) = VariableAddress[x662] : -# 2005| mu2005_2(String) = Uninitialized[x662] : &:r2005_1 -# 2005| r2005_3(glval) = FunctionAddress[String] : -# 2005| v2005_4(void) = Call[String] : func:r2005_3, this:r2005_1 -# 2005| mu2005_5(unknown) = ^CallSideEffect : ~m? -# 2005| mu2005_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2005_1 -# 2006| r2006_1(glval) = VariableAddress[x662] : -# 2006| r2006_2(glval) = FunctionAddress[~String] : -# 2006| v2006_3(void) = Call[~String] : func:r2006_2, this:r2006_1 -# 2006| mu2006_4(unknown) = ^CallSideEffect : ~m? -# 2006| v2006_5(void) = ^IndirectReadSideEffect[-1] : &:r2006_1, ~m? -# 2006| mu2006_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2006_1 -# 2006| r2006_7(bool) = Constant[0] : -# 2006| v2006_8(void) = ConditionalBranch : r2006_7 +# 35| Block 663 +# 35| r35_9269(glval) = VariableAddress[x662] : +# 35| mu35_9270(String) = Uninitialized[x662] : &:r35_9269 +# 35| r35_9271(glval) = FunctionAddress[String] : +# 35| v35_9272(void) = Call[String] : func:r35_9271, this:r35_9269 +# 35| mu35_9273(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9269 +# 35| r35_9275(glval) = VariableAddress[x662] : +# 35| r35_9276(glval) = FunctionAddress[~String] : +# 35| v35_9277(void) = Call[~String] : func:r35_9276, this:r35_9275 +# 35| mu35_9278(unknown) = ^CallSideEffect : ~m? +# 35| v35_9279(void) = ^IndirectReadSideEffect[-1] : &:r35_9275, ~m? +# 35| mu35_9280(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9275 +# 35| r35_9281(bool) = Constant[0] : +# 35| v35_9282(void) = ConditionalBranch : r35_9281 #-----| False -> Block 664 #-----| True (back edge) -> Block 663 -# 2008| Block 664 -# 2008| r2008_1(glval) = VariableAddress[x663] : -# 2008| mu2008_2(String) = Uninitialized[x663] : &:r2008_1 -# 2008| r2008_3(glval) = FunctionAddress[String] : -# 2008| v2008_4(void) = Call[String] : func:r2008_3, this:r2008_1 -# 2008| mu2008_5(unknown) = ^CallSideEffect : ~m? -# 2008| mu2008_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2008_1 -# 2009| r2009_1(glval) = VariableAddress[x663] : -# 2009| r2009_2(glval) = FunctionAddress[~String] : -# 2009| v2009_3(void) = Call[~String] : func:r2009_2, this:r2009_1 -# 2009| mu2009_4(unknown) = ^CallSideEffect : ~m? -# 2009| v2009_5(void) = ^IndirectReadSideEffect[-1] : &:r2009_1, ~m? -# 2009| mu2009_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2009_1 -# 2009| r2009_7(bool) = Constant[0] : -# 2009| v2009_8(void) = ConditionalBranch : r2009_7 +# 35| Block 664 +# 35| r35_9283(glval) = VariableAddress[x663] : +# 35| mu35_9284(String) = Uninitialized[x663] : &:r35_9283 +# 35| r35_9285(glval) = FunctionAddress[String] : +# 35| v35_9286(void) = Call[String] : func:r35_9285, this:r35_9283 +# 35| mu35_9287(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9283 +# 35| r35_9289(glval) = VariableAddress[x663] : +# 35| r35_9290(glval) = FunctionAddress[~String] : +# 35| v35_9291(void) = Call[~String] : func:r35_9290, this:r35_9289 +# 35| mu35_9292(unknown) = ^CallSideEffect : ~m? +# 35| v35_9293(void) = ^IndirectReadSideEffect[-1] : &:r35_9289, ~m? +# 35| mu35_9294(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9289 +# 35| r35_9295(bool) = Constant[0] : +# 35| v35_9296(void) = ConditionalBranch : r35_9295 #-----| False -> Block 665 #-----| True (back edge) -> Block 664 -# 2011| Block 665 -# 2011| r2011_1(glval) = VariableAddress[x664] : -# 2011| mu2011_2(String) = Uninitialized[x664] : &:r2011_1 -# 2011| r2011_3(glval) = FunctionAddress[String] : -# 2011| v2011_4(void) = Call[String] : func:r2011_3, this:r2011_1 -# 2011| mu2011_5(unknown) = ^CallSideEffect : ~m? -# 2011| mu2011_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[x664] : -# 2012| r2012_2(glval) = FunctionAddress[~String] : -# 2012| v2012_3(void) = Call[~String] : func:r2012_2, this:r2012_1 -# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? -# 2012| v2012_5(void) = ^IndirectReadSideEffect[-1] : &:r2012_1, ~m? -# 2012| mu2012_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2012_1 -# 2012| r2012_7(bool) = Constant[0] : -# 2012| v2012_8(void) = ConditionalBranch : r2012_7 +# 35| Block 665 +# 35| r35_9297(glval) = VariableAddress[x664] : +# 35| mu35_9298(String) = Uninitialized[x664] : &:r35_9297 +# 35| r35_9299(glval) = FunctionAddress[String] : +# 35| v35_9300(void) = Call[String] : func:r35_9299, this:r35_9297 +# 35| mu35_9301(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9297 +# 35| r35_9303(glval) = VariableAddress[x664] : +# 35| r35_9304(glval) = FunctionAddress[~String] : +# 35| v35_9305(void) = Call[~String] : func:r35_9304, this:r35_9303 +# 35| mu35_9306(unknown) = ^CallSideEffect : ~m? +# 35| v35_9307(void) = ^IndirectReadSideEffect[-1] : &:r35_9303, ~m? +# 35| mu35_9308(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9303 +# 35| r35_9309(bool) = Constant[0] : +# 35| v35_9310(void) = ConditionalBranch : r35_9309 #-----| False -> Block 666 #-----| True (back edge) -> Block 665 -# 2014| Block 666 -# 2014| r2014_1(glval) = VariableAddress[x665] : -# 2014| mu2014_2(String) = Uninitialized[x665] : &:r2014_1 -# 2014| r2014_3(glval) = FunctionAddress[String] : -# 2014| v2014_4(void) = Call[String] : func:r2014_3, this:r2014_1 -# 2014| mu2014_5(unknown) = ^CallSideEffect : ~m? -# 2014| mu2014_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2014_1 -# 2015| r2015_1(glval) = VariableAddress[x665] : -# 2015| r2015_2(glval) = FunctionAddress[~String] : -# 2015| v2015_3(void) = Call[~String] : func:r2015_2, this:r2015_1 -# 2015| mu2015_4(unknown) = ^CallSideEffect : ~m? -# 2015| v2015_5(void) = ^IndirectReadSideEffect[-1] : &:r2015_1, ~m? -# 2015| mu2015_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2015_1 -# 2015| r2015_7(bool) = Constant[0] : -# 2015| v2015_8(void) = ConditionalBranch : r2015_7 +# 35| Block 666 +# 35| r35_9311(glval) = VariableAddress[x665] : +# 35| mu35_9312(String) = Uninitialized[x665] : &:r35_9311 +# 35| r35_9313(glval) = FunctionAddress[String] : +# 35| v35_9314(void) = Call[String] : func:r35_9313, this:r35_9311 +# 35| mu35_9315(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9311 +# 35| r35_9317(glval) = VariableAddress[x665] : +# 35| r35_9318(glval) = FunctionAddress[~String] : +# 35| v35_9319(void) = Call[~String] : func:r35_9318, this:r35_9317 +# 35| mu35_9320(unknown) = ^CallSideEffect : ~m? +# 35| v35_9321(void) = ^IndirectReadSideEffect[-1] : &:r35_9317, ~m? +# 35| mu35_9322(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9317 +# 35| r35_9323(bool) = Constant[0] : +# 35| v35_9324(void) = ConditionalBranch : r35_9323 #-----| False -> Block 667 #-----| True (back edge) -> Block 666 -# 2017| Block 667 -# 2017| r2017_1(glval) = VariableAddress[x666] : -# 2017| mu2017_2(String) = Uninitialized[x666] : &:r2017_1 -# 2017| r2017_3(glval) = FunctionAddress[String] : -# 2017| v2017_4(void) = Call[String] : func:r2017_3, this:r2017_1 -# 2017| mu2017_5(unknown) = ^CallSideEffect : ~m? -# 2017| mu2017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2017_1 -# 2018| r2018_1(glval) = VariableAddress[x666] : -# 2018| r2018_2(glval) = FunctionAddress[~String] : -# 2018| v2018_3(void) = Call[~String] : func:r2018_2, this:r2018_1 -# 2018| mu2018_4(unknown) = ^CallSideEffect : ~m? -# 2018| v2018_5(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, ~m? -# 2018| mu2018_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| r2018_7(bool) = Constant[0] : -# 2018| v2018_8(void) = ConditionalBranch : r2018_7 +# 35| Block 667 +# 35| r35_9325(glval) = VariableAddress[x666] : +# 35| mu35_9326(String) = Uninitialized[x666] : &:r35_9325 +# 35| r35_9327(glval) = FunctionAddress[String] : +# 35| v35_9328(void) = Call[String] : func:r35_9327, this:r35_9325 +# 35| mu35_9329(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9325 +# 35| r35_9331(glval) = VariableAddress[x666] : +# 35| r35_9332(glval) = FunctionAddress[~String] : +# 35| v35_9333(void) = Call[~String] : func:r35_9332, this:r35_9331 +# 35| mu35_9334(unknown) = ^CallSideEffect : ~m? +# 35| v35_9335(void) = ^IndirectReadSideEffect[-1] : &:r35_9331, ~m? +# 35| mu35_9336(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9331 +# 35| r35_9337(bool) = Constant[0] : +# 35| v35_9338(void) = ConditionalBranch : r35_9337 #-----| False -> Block 668 #-----| True (back edge) -> Block 667 -# 2020| Block 668 -# 2020| r2020_1(glval) = VariableAddress[x667] : -# 2020| mu2020_2(String) = Uninitialized[x667] : &:r2020_1 -# 2020| r2020_3(glval) = FunctionAddress[String] : -# 2020| v2020_4(void) = Call[String] : func:r2020_3, this:r2020_1 -# 2020| mu2020_5(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2021| r2021_1(glval) = VariableAddress[x667] : -# 2021| r2021_2(glval) = FunctionAddress[~String] : -# 2021| v2021_3(void) = Call[~String] : func:r2021_2, this:r2021_1 -# 2021| mu2021_4(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_5(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| mu2021_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_7(bool) = Constant[0] : -# 2021| v2021_8(void) = ConditionalBranch : r2021_7 +# 35| Block 668 +# 35| r35_9339(glval) = VariableAddress[x667] : +# 35| mu35_9340(String) = Uninitialized[x667] : &:r35_9339 +# 35| r35_9341(glval) = FunctionAddress[String] : +# 35| v35_9342(void) = Call[String] : func:r35_9341, this:r35_9339 +# 35| mu35_9343(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9339 +# 35| r35_9345(glval) = VariableAddress[x667] : +# 35| r35_9346(glval) = FunctionAddress[~String] : +# 35| v35_9347(void) = Call[~String] : func:r35_9346, this:r35_9345 +# 35| mu35_9348(unknown) = ^CallSideEffect : ~m? +# 35| v35_9349(void) = ^IndirectReadSideEffect[-1] : &:r35_9345, ~m? +# 35| mu35_9350(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9345 +# 35| r35_9351(bool) = Constant[0] : +# 35| v35_9352(void) = ConditionalBranch : r35_9351 #-----| False -> Block 669 #-----| True (back edge) -> Block 668 -# 2023| Block 669 -# 2023| r2023_1(glval) = VariableAddress[x668] : -# 2023| mu2023_2(String) = Uninitialized[x668] : &:r2023_1 -# 2023| r2023_3(glval) = FunctionAddress[String] : -# 2023| v2023_4(void) = Call[String] : func:r2023_3, this:r2023_1 -# 2023| mu2023_5(unknown) = ^CallSideEffect : ~m? -# 2023| mu2023_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2024| r2024_1(glval) = VariableAddress[x668] : -# 2024| r2024_2(glval) = FunctionAddress[~String] : -# 2024| v2024_3(void) = Call[~String] : func:r2024_2, this:r2024_1 -# 2024| mu2024_4(unknown) = ^CallSideEffect : ~m? -# 2024| v2024_5(void) = ^IndirectReadSideEffect[-1] : &:r2024_1, ~m? -# 2024| mu2024_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2024_1 -# 2024| r2024_7(bool) = Constant[0] : -# 2024| v2024_8(void) = ConditionalBranch : r2024_7 +# 35| Block 669 +# 35| r35_9353(glval) = VariableAddress[x668] : +# 35| mu35_9354(String) = Uninitialized[x668] : &:r35_9353 +# 35| r35_9355(glval) = FunctionAddress[String] : +# 35| v35_9356(void) = Call[String] : func:r35_9355, this:r35_9353 +# 35| mu35_9357(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9353 +# 35| r35_9359(glval) = VariableAddress[x668] : +# 35| r35_9360(glval) = FunctionAddress[~String] : +# 35| v35_9361(void) = Call[~String] : func:r35_9360, this:r35_9359 +# 35| mu35_9362(unknown) = ^CallSideEffect : ~m? +# 35| v35_9363(void) = ^IndirectReadSideEffect[-1] : &:r35_9359, ~m? +# 35| mu35_9364(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9359 +# 35| r35_9365(bool) = Constant[0] : +# 35| v35_9366(void) = ConditionalBranch : r35_9365 #-----| False -> Block 670 #-----| True (back edge) -> Block 669 -# 2026| Block 670 -# 2026| r2026_1(glval) = VariableAddress[x669] : -# 2026| mu2026_2(String) = Uninitialized[x669] : &:r2026_1 -# 2026| r2026_3(glval) = FunctionAddress[String] : -# 2026| v2026_4(void) = Call[String] : func:r2026_3, this:r2026_1 -# 2026| mu2026_5(unknown) = ^CallSideEffect : ~m? -# 2026| mu2026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2026_1 -# 2027| r2027_1(glval) = VariableAddress[x669] : -# 2027| r2027_2(glval) = FunctionAddress[~String] : -# 2027| v2027_3(void) = Call[~String] : func:r2027_2, this:r2027_1 -# 2027| mu2027_4(unknown) = ^CallSideEffect : ~m? -# 2027| v2027_5(void) = ^IndirectReadSideEffect[-1] : &:r2027_1, ~m? -# 2027| mu2027_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2027_1 -# 2027| r2027_7(bool) = Constant[0] : -# 2027| v2027_8(void) = ConditionalBranch : r2027_7 +# 35| Block 670 +# 35| r35_9367(glval) = VariableAddress[x669] : +# 35| mu35_9368(String) = Uninitialized[x669] : &:r35_9367 +# 35| r35_9369(glval) = FunctionAddress[String] : +# 35| v35_9370(void) = Call[String] : func:r35_9369, this:r35_9367 +# 35| mu35_9371(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9367 +# 35| r35_9373(glval) = VariableAddress[x669] : +# 35| r35_9374(glval) = FunctionAddress[~String] : +# 35| v35_9375(void) = Call[~String] : func:r35_9374, this:r35_9373 +# 35| mu35_9376(unknown) = ^CallSideEffect : ~m? +# 35| v35_9377(void) = ^IndirectReadSideEffect[-1] : &:r35_9373, ~m? +# 35| mu35_9378(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9373 +# 35| r35_9379(bool) = Constant[0] : +# 35| v35_9380(void) = ConditionalBranch : r35_9379 #-----| False -> Block 671 #-----| True (back edge) -> Block 670 -# 2029| Block 671 -# 2029| r2029_1(glval) = VariableAddress[x670] : -# 2029| mu2029_2(String) = Uninitialized[x670] : &:r2029_1 -# 2029| r2029_3(glval) = FunctionAddress[String] : -# 2029| v2029_4(void) = Call[String] : func:r2029_3, this:r2029_1 -# 2029| mu2029_5(unknown) = ^CallSideEffect : ~m? -# 2029| mu2029_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2029_1 -# 2030| r2030_1(glval) = VariableAddress[x670] : -# 2030| r2030_2(glval) = FunctionAddress[~String] : -# 2030| v2030_3(void) = Call[~String] : func:r2030_2, this:r2030_1 -# 2030| mu2030_4(unknown) = ^CallSideEffect : ~m? -# 2030| v2030_5(void) = ^IndirectReadSideEffect[-1] : &:r2030_1, ~m? -# 2030| mu2030_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2030_1 -# 2030| r2030_7(bool) = Constant[0] : -# 2030| v2030_8(void) = ConditionalBranch : r2030_7 +# 35| Block 671 +# 35| r35_9381(glval) = VariableAddress[x670] : +# 35| mu35_9382(String) = Uninitialized[x670] : &:r35_9381 +# 35| r35_9383(glval) = FunctionAddress[String] : +# 35| v35_9384(void) = Call[String] : func:r35_9383, this:r35_9381 +# 35| mu35_9385(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9381 +# 35| r35_9387(glval) = VariableAddress[x670] : +# 35| r35_9388(glval) = FunctionAddress[~String] : +# 35| v35_9389(void) = Call[~String] : func:r35_9388, this:r35_9387 +# 35| mu35_9390(unknown) = ^CallSideEffect : ~m? +# 35| v35_9391(void) = ^IndirectReadSideEffect[-1] : &:r35_9387, ~m? +# 35| mu35_9392(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9387 +# 35| r35_9393(bool) = Constant[0] : +# 35| v35_9394(void) = ConditionalBranch : r35_9393 #-----| False -> Block 672 #-----| True (back edge) -> Block 671 -# 2032| Block 672 -# 2032| r2032_1(glval) = VariableAddress[x671] : -# 2032| mu2032_2(String) = Uninitialized[x671] : &:r2032_1 -# 2032| r2032_3(glval) = FunctionAddress[String] : -# 2032| v2032_4(void) = Call[String] : func:r2032_3, this:r2032_1 -# 2032| mu2032_5(unknown) = ^CallSideEffect : ~m? -# 2032| mu2032_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2032_1 -# 2033| r2033_1(glval) = VariableAddress[x671] : -# 2033| r2033_2(glval) = FunctionAddress[~String] : -# 2033| v2033_3(void) = Call[~String] : func:r2033_2, this:r2033_1 -# 2033| mu2033_4(unknown) = ^CallSideEffect : ~m? -# 2033| v2033_5(void) = ^IndirectReadSideEffect[-1] : &:r2033_1, ~m? -# 2033| mu2033_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2033_1 -# 2033| r2033_7(bool) = Constant[0] : -# 2033| v2033_8(void) = ConditionalBranch : r2033_7 +# 35| Block 672 +# 35| r35_9395(glval) = VariableAddress[x671] : +# 35| mu35_9396(String) = Uninitialized[x671] : &:r35_9395 +# 35| r35_9397(glval) = FunctionAddress[String] : +# 35| v35_9398(void) = Call[String] : func:r35_9397, this:r35_9395 +# 35| mu35_9399(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9395 +# 35| r35_9401(glval) = VariableAddress[x671] : +# 35| r35_9402(glval) = FunctionAddress[~String] : +# 35| v35_9403(void) = Call[~String] : func:r35_9402, this:r35_9401 +# 35| mu35_9404(unknown) = ^CallSideEffect : ~m? +# 35| v35_9405(void) = ^IndirectReadSideEffect[-1] : &:r35_9401, ~m? +# 35| mu35_9406(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9401 +# 35| r35_9407(bool) = Constant[0] : +# 35| v35_9408(void) = ConditionalBranch : r35_9407 #-----| False -> Block 673 #-----| True (back edge) -> Block 672 -# 2035| Block 673 -# 2035| r2035_1(glval) = VariableAddress[x672] : -# 2035| mu2035_2(String) = Uninitialized[x672] : &:r2035_1 -# 2035| r2035_3(glval) = FunctionAddress[String] : -# 2035| v2035_4(void) = Call[String] : func:r2035_3, this:r2035_1 -# 2035| mu2035_5(unknown) = ^CallSideEffect : ~m? -# 2035| mu2035_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2035_1 -# 2036| r2036_1(glval) = VariableAddress[x672] : -# 2036| r2036_2(glval) = FunctionAddress[~String] : -# 2036| v2036_3(void) = Call[~String] : func:r2036_2, this:r2036_1 -# 2036| mu2036_4(unknown) = ^CallSideEffect : ~m? -# 2036| v2036_5(void) = ^IndirectReadSideEffect[-1] : &:r2036_1, ~m? -# 2036| mu2036_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2036_1 -# 2036| r2036_7(bool) = Constant[0] : -# 2036| v2036_8(void) = ConditionalBranch : r2036_7 +# 35| Block 673 +# 35| r35_9409(glval) = VariableAddress[x672] : +# 35| mu35_9410(String) = Uninitialized[x672] : &:r35_9409 +# 35| r35_9411(glval) = FunctionAddress[String] : +# 35| v35_9412(void) = Call[String] : func:r35_9411, this:r35_9409 +# 35| mu35_9413(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9409 +# 35| r35_9415(glval) = VariableAddress[x672] : +# 35| r35_9416(glval) = FunctionAddress[~String] : +# 35| v35_9417(void) = Call[~String] : func:r35_9416, this:r35_9415 +# 35| mu35_9418(unknown) = ^CallSideEffect : ~m? +# 35| v35_9419(void) = ^IndirectReadSideEffect[-1] : &:r35_9415, ~m? +# 35| mu35_9420(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9415 +# 35| r35_9421(bool) = Constant[0] : +# 35| v35_9422(void) = ConditionalBranch : r35_9421 #-----| False -> Block 674 #-----| True (back edge) -> Block 673 -# 2038| Block 674 -# 2038| r2038_1(glval) = VariableAddress[x673] : -# 2038| mu2038_2(String) = Uninitialized[x673] : &:r2038_1 -# 2038| r2038_3(glval) = FunctionAddress[String] : -# 2038| v2038_4(void) = Call[String] : func:r2038_3, this:r2038_1 -# 2038| mu2038_5(unknown) = ^CallSideEffect : ~m? -# 2038| mu2038_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2038_1 -# 2039| r2039_1(glval) = VariableAddress[x673] : -# 2039| r2039_2(glval) = FunctionAddress[~String] : -# 2039| v2039_3(void) = Call[~String] : func:r2039_2, this:r2039_1 -# 2039| mu2039_4(unknown) = ^CallSideEffect : ~m? -# 2039| v2039_5(void) = ^IndirectReadSideEffect[-1] : &:r2039_1, ~m? -# 2039| mu2039_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2039_1 -# 2039| r2039_7(bool) = Constant[0] : -# 2039| v2039_8(void) = ConditionalBranch : r2039_7 +# 35| Block 674 +# 35| r35_9423(glval) = VariableAddress[x673] : +# 35| mu35_9424(String) = Uninitialized[x673] : &:r35_9423 +# 35| r35_9425(glval) = FunctionAddress[String] : +# 35| v35_9426(void) = Call[String] : func:r35_9425, this:r35_9423 +# 35| mu35_9427(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9423 +# 35| r35_9429(glval) = VariableAddress[x673] : +# 35| r35_9430(glval) = FunctionAddress[~String] : +# 35| v35_9431(void) = Call[~String] : func:r35_9430, this:r35_9429 +# 35| mu35_9432(unknown) = ^CallSideEffect : ~m? +# 35| v35_9433(void) = ^IndirectReadSideEffect[-1] : &:r35_9429, ~m? +# 35| mu35_9434(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9429 +# 35| r35_9435(bool) = Constant[0] : +# 35| v35_9436(void) = ConditionalBranch : r35_9435 #-----| False -> Block 675 #-----| True (back edge) -> Block 674 -# 2041| Block 675 -# 2041| r2041_1(glval) = VariableAddress[x674] : -# 2041| mu2041_2(String) = Uninitialized[x674] : &:r2041_1 -# 2041| r2041_3(glval) = FunctionAddress[String] : -# 2041| v2041_4(void) = Call[String] : func:r2041_3, this:r2041_1 -# 2041| mu2041_5(unknown) = ^CallSideEffect : ~m? -# 2041| mu2041_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2041_1 -# 2042| r2042_1(glval) = VariableAddress[x674] : -# 2042| r2042_2(glval) = FunctionAddress[~String] : -# 2042| v2042_3(void) = Call[~String] : func:r2042_2, this:r2042_1 -# 2042| mu2042_4(unknown) = ^CallSideEffect : ~m? -# 2042| v2042_5(void) = ^IndirectReadSideEffect[-1] : &:r2042_1, ~m? -# 2042| mu2042_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2042_1 -# 2042| r2042_7(bool) = Constant[0] : -# 2042| v2042_8(void) = ConditionalBranch : r2042_7 +# 35| Block 675 +# 35| r35_9437(glval) = VariableAddress[x674] : +# 35| mu35_9438(String) = Uninitialized[x674] : &:r35_9437 +# 35| r35_9439(glval) = FunctionAddress[String] : +# 35| v35_9440(void) = Call[String] : func:r35_9439, this:r35_9437 +# 35| mu35_9441(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9437 +# 35| r35_9443(glval) = VariableAddress[x674] : +# 35| r35_9444(glval) = FunctionAddress[~String] : +# 35| v35_9445(void) = Call[~String] : func:r35_9444, this:r35_9443 +# 35| mu35_9446(unknown) = ^CallSideEffect : ~m? +# 35| v35_9447(void) = ^IndirectReadSideEffect[-1] : &:r35_9443, ~m? +# 35| mu35_9448(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9443 +# 35| r35_9449(bool) = Constant[0] : +# 35| v35_9450(void) = ConditionalBranch : r35_9449 #-----| False -> Block 676 #-----| True (back edge) -> Block 675 -# 2044| Block 676 -# 2044| r2044_1(glval) = VariableAddress[x675] : -# 2044| mu2044_2(String) = Uninitialized[x675] : &:r2044_1 -# 2044| r2044_3(glval) = FunctionAddress[String] : -# 2044| v2044_4(void) = Call[String] : func:r2044_3, this:r2044_1 -# 2044| mu2044_5(unknown) = ^CallSideEffect : ~m? -# 2044| mu2044_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2044_1 -# 2045| r2045_1(glval) = VariableAddress[x675] : -# 2045| r2045_2(glval) = FunctionAddress[~String] : -# 2045| v2045_3(void) = Call[~String] : func:r2045_2, this:r2045_1 -# 2045| mu2045_4(unknown) = ^CallSideEffect : ~m? -# 2045| v2045_5(void) = ^IndirectReadSideEffect[-1] : &:r2045_1, ~m? -# 2045| mu2045_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2045_1 -# 2045| r2045_7(bool) = Constant[0] : -# 2045| v2045_8(void) = ConditionalBranch : r2045_7 +# 35| Block 676 +# 35| r35_9451(glval) = VariableAddress[x675] : +# 35| mu35_9452(String) = Uninitialized[x675] : &:r35_9451 +# 35| r35_9453(glval) = FunctionAddress[String] : +# 35| v35_9454(void) = Call[String] : func:r35_9453, this:r35_9451 +# 35| mu35_9455(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9451 +# 35| r35_9457(glval) = VariableAddress[x675] : +# 35| r35_9458(glval) = FunctionAddress[~String] : +# 35| v35_9459(void) = Call[~String] : func:r35_9458, this:r35_9457 +# 35| mu35_9460(unknown) = ^CallSideEffect : ~m? +# 35| v35_9461(void) = ^IndirectReadSideEffect[-1] : &:r35_9457, ~m? +# 35| mu35_9462(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9457 +# 35| r35_9463(bool) = Constant[0] : +# 35| v35_9464(void) = ConditionalBranch : r35_9463 #-----| False -> Block 677 #-----| True (back edge) -> Block 676 -# 2047| Block 677 -# 2047| r2047_1(glval) = VariableAddress[x676] : -# 2047| mu2047_2(String) = Uninitialized[x676] : &:r2047_1 -# 2047| r2047_3(glval) = FunctionAddress[String] : -# 2047| v2047_4(void) = Call[String] : func:r2047_3, this:r2047_1 -# 2047| mu2047_5(unknown) = ^CallSideEffect : ~m? -# 2047| mu2047_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2047_1 -# 2048| r2048_1(glval) = VariableAddress[x676] : -# 2048| r2048_2(glval) = FunctionAddress[~String] : -# 2048| v2048_3(void) = Call[~String] : func:r2048_2, this:r2048_1 -# 2048| mu2048_4(unknown) = ^CallSideEffect : ~m? -# 2048| v2048_5(void) = ^IndirectReadSideEffect[-1] : &:r2048_1, ~m? -# 2048| mu2048_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2048_1 -# 2048| r2048_7(bool) = Constant[0] : -# 2048| v2048_8(void) = ConditionalBranch : r2048_7 +# 35| Block 677 +# 35| r35_9465(glval) = VariableAddress[x676] : +# 35| mu35_9466(String) = Uninitialized[x676] : &:r35_9465 +# 35| r35_9467(glval) = FunctionAddress[String] : +# 35| v35_9468(void) = Call[String] : func:r35_9467, this:r35_9465 +# 35| mu35_9469(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9465 +# 35| r35_9471(glval) = VariableAddress[x676] : +# 35| r35_9472(glval) = FunctionAddress[~String] : +# 35| v35_9473(void) = Call[~String] : func:r35_9472, this:r35_9471 +# 35| mu35_9474(unknown) = ^CallSideEffect : ~m? +# 35| v35_9475(void) = ^IndirectReadSideEffect[-1] : &:r35_9471, ~m? +# 35| mu35_9476(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9471 +# 35| r35_9477(bool) = Constant[0] : +# 35| v35_9478(void) = ConditionalBranch : r35_9477 #-----| False -> Block 678 #-----| True (back edge) -> Block 677 -# 2050| Block 678 -# 2050| r2050_1(glval) = VariableAddress[x677] : -# 2050| mu2050_2(String) = Uninitialized[x677] : &:r2050_1 -# 2050| r2050_3(glval) = FunctionAddress[String] : -# 2050| v2050_4(void) = Call[String] : func:r2050_3, this:r2050_1 -# 2050| mu2050_5(unknown) = ^CallSideEffect : ~m? -# 2050| mu2050_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2050_1 -# 2051| r2051_1(glval) = VariableAddress[x677] : -# 2051| r2051_2(glval) = FunctionAddress[~String] : -# 2051| v2051_3(void) = Call[~String] : func:r2051_2, this:r2051_1 -# 2051| mu2051_4(unknown) = ^CallSideEffect : ~m? -# 2051| v2051_5(void) = ^IndirectReadSideEffect[-1] : &:r2051_1, ~m? -# 2051| mu2051_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2051_1 -# 2051| r2051_7(bool) = Constant[0] : -# 2051| v2051_8(void) = ConditionalBranch : r2051_7 +# 35| Block 678 +# 35| r35_9479(glval) = VariableAddress[x677] : +# 35| mu35_9480(String) = Uninitialized[x677] : &:r35_9479 +# 35| r35_9481(glval) = FunctionAddress[String] : +# 35| v35_9482(void) = Call[String] : func:r35_9481, this:r35_9479 +# 35| mu35_9483(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9479 +# 35| r35_9485(glval) = VariableAddress[x677] : +# 35| r35_9486(glval) = FunctionAddress[~String] : +# 35| v35_9487(void) = Call[~String] : func:r35_9486, this:r35_9485 +# 35| mu35_9488(unknown) = ^CallSideEffect : ~m? +# 35| v35_9489(void) = ^IndirectReadSideEffect[-1] : &:r35_9485, ~m? +# 35| mu35_9490(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9485 +# 35| r35_9491(bool) = Constant[0] : +# 35| v35_9492(void) = ConditionalBranch : r35_9491 #-----| False -> Block 679 #-----| True (back edge) -> Block 678 -# 2053| Block 679 -# 2053| r2053_1(glval) = VariableAddress[x678] : -# 2053| mu2053_2(String) = Uninitialized[x678] : &:r2053_1 -# 2053| r2053_3(glval) = FunctionAddress[String] : -# 2053| v2053_4(void) = Call[String] : func:r2053_3, this:r2053_1 -# 2053| mu2053_5(unknown) = ^CallSideEffect : ~m? -# 2053| mu2053_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2053_1 -# 2054| r2054_1(glval) = VariableAddress[x678] : -# 2054| r2054_2(glval) = FunctionAddress[~String] : -# 2054| v2054_3(void) = Call[~String] : func:r2054_2, this:r2054_1 -# 2054| mu2054_4(unknown) = ^CallSideEffect : ~m? -# 2054| v2054_5(void) = ^IndirectReadSideEffect[-1] : &:r2054_1, ~m? -# 2054| mu2054_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 -# 2054| r2054_7(bool) = Constant[0] : -# 2054| v2054_8(void) = ConditionalBranch : r2054_7 +# 35| Block 679 +# 35| r35_9493(glval) = VariableAddress[x678] : +# 35| mu35_9494(String) = Uninitialized[x678] : &:r35_9493 +# 35| r35_9495(glval) = FunctionAddress[String] : +# 35| v35_9496(void) = Call[String] : func:r35_9495, this:r35_9493 +# 35| mu35_9497(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9493 +# 35| r35_9499(glval) = VariableAddress[x678] : +# 35| r35_9500(glval) = FunctionAddress[~String] : +# 35| v35_9501(void) = Call[~String] : func:r35_9500, this:r35_9499 +# 35| mu35_9502(unknown) = ^CallSideEffect : ~m? +# 35| v35_9503(void) = ^IndirectReadSideEffect[-1] : &:r35_9499, ~m? +# 35| mu35_9504(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9499 +# 35| r35_9505(bool) = Constant[0] : +# 35| v35_9506(void) = ConditionalBranch : r35_9505 #-----| False -> Block 680 #-----| True (back edge) -> Block 679 -# 2056| Block 680 -# 2056| r2056_1(glval) = VariableAddress[x679] : -# 2056| mu2056_2(String) = Uninitialized[x679] : &:r2056_1 -# 2056| r2056_3(glval) = FunctionAddress[String] : -# 2056| v2056_4(void) = Call[String] : func:r2056_3, this:r2056_1 -# 2056| mu2056_5(unknown) = ^CallSideEffect : ~m? -# 2056| mu2056_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2056_1 -# 2057| r2057_1(glval) = VariableAddress[x679] : -# 2057| r2057_2(glval) = FunctionAddress[~String] : -# 2057| v2057_3(void) = Call[~String] : func:r2057_2, this:r2057_1 -# 2057| mu2057_4(unknown) = ^CallSideEffect : ~m? -# 2057| v2057_5(void) = ^IndirectReadSideEffect[-1] : &:r2057_1, ~m? -# 2057| mu2057_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2057_1 -# 2057| r2057_7(bool) = Constant[0] : -# 2057| v2057_8(void) = ConditionalBranch : r2057_7 +# 35| Block 680 +# 35| r35_9507(glval) = VariableAddress[x679] : +# 35| mu35_9508(String) = Uninitialized[x679] : &:r35_9507 +# 35| r35_9509(glval) = FunctionAddress[String] : +# 35| v35_9510(void) = Call[String] : func:r35_9509, this:r35_9507 +# 35| mu35_9511(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9507 +# 35| r35_9513(glval) = VariableAddress[x679] : +# 35| r35_9514(glval) = FunctionAddress[~String] : +# 35| v35_9515(void) = Call[~String] : func:r35_9514, this:r35_9513 +# 35| mu35_9516(unknown) = ^CallSideEffect : ~m? +# 35| v35_9517(void) = ^IndirectReadSideEffect[-1] : &:r35_9513, ~m? +# 35| mu35_9518(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9513 +# 35| r35_9519(bool) = Constant[0] : +# 35| v35_9520(void) = ConditionalBranch : r35_9519 #-----| False -> Block 681 #-----| True (back edge) -> Block 680 -# 2059| Block 681 -# 2059| r2059_1(glval) = VariableAddress[x680] : -# 2059| mu2059_2(String) = Uninitialized[x680] : &:r2059_1 -# 2059| r2059_3(glval) = FunctionAddress[String] : -# 2059| v2059_4(void) = Call[String] : func:r2059_3, this:r2059_1 -# 2059| mu2059_5(unknown) = ^CallSideEffect : ~m? -# 2059| mu2059_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2059_1 -# 2060| r2060_1(glval) = VariableAddress[x680] : -# 2060| r2060_2(glval) = FunctionAddress[~String] : -# 2060| v2060_3(void) = Call[~String] : func:r2060_2, this:r2060_1 -# 2060| mu2060_4(unknown) = ^CallSideEffect : ~m? -# 2060| v2060_5(void) = ^IndirectReadSideEffect[-1] : &:r2060_1, ~m? -# 2060| mu2060_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2060_1 -# 2060| r2060_7(bool) = Constant[0] : -# 2060| v2060_8(void) = ConditionalBranch : r2060_7 +# 35| Block 681 +# 35| r35_9521(glval) = VariableAddress[x680] : +# 35| mu35_9522(String) = Uninitialized[x680] : &:r35_9521 +# 35| r35_9523(glval) = FunctionAddress[String] : +# 35| v35_9524(void) = Call[String] : func:r35_9523, this:r35_9521 +# 35| mu35_9525(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9521 +# 35| r35_9527(glval) = VariableAddress[x680] : +# 35| r35_9528(glval) = FunctionAddress[~String] : +# 35| v35_9529(void) = Call[~String] : func:r35_9528, this:r35_9527 +# 35| mu35_9530(unknown) = ^CallSideEffect : ~m? +# 35| v35_9531(void) = ^IndirectReadSideEffect[-1] : &:r35_9527, ~m? +# 35| mu35_9532(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9527 +# 35| r35_9533(bool) = Constant[0] : +# 35| v35_9534(void) = ConditionalBranch : r35_9533 #-----| False -> Block 682 #-----| True (back edge) -> Block 681 -# 2062| Block 682 -# 2062| r2062_1(glval) = VariableAddress[x681] : -# 2062| mu2062_2(String) = Uninitialized[x681] : &:r2062_1 -# 2062| r2062_3(glval) = FunctionAddress[String] : -# 2062| v2062_4(void) = Call[String] : func:r2062_3, this:r2062_1 -# 2062| mu2062_5(unknown) = ^CallSideEffect : ~m? -# 2062| mu2062_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2062_1 -# 2063| r2063_1(glval) = VariableAddress[x681] : -# 2063| r2063_2(glval) = FunctionAddress[~String] : -# 2063| v2063_3(void) = Call[~String] : func:r2063_2, this:r2063_1 -# 2063| mu2063_4(unknown) = ^CallSideEffect : ~m? -# 2063| v2063_5(void) = ^IndirectReadSideEffect[-1] : &:r2063_1, ~m? -# 2063| mu2063_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2063_1 -# 2063| r2063_7(bool) = Constant[0] : -# 2063| v2063_8(void) = ConditionalBranch : r2063_7 +# 35| Block 682 +# 35| r35_9535(glval) = VariableAddress[x681] : +# 35| mu35_9536(String) = Uninitialized[x681] : &:r35_9535 +# 35| r35_9537(glval) = FunctionAddress[String] : +# 35| v35_9538(void) = Call[String] : func:r35_9537, this:r35_9535 +# 35| mu35_9539(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9535 +# 35| r35_9541(glval) = VariableAddress[x681] : +# 35| r35_9542(glval) = FunctionAddress[~String] : +# 35| v35_9543(void) = Call[~String] : func:r35_9542, this:r35_9541 +# 35| mu35_9544(unknown) = ^CallSideEffect : ~m? +# 35| v35_9545(void) = ^IndirectReadSideEffect[-1] : &:r35_9541, ~m? +# 35| mu35_9546(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9541 +# 35| r35_9547(bool) = Constant[0] : +# 35| v35_9548(void) = ConditionalBranch : r35_9547 #-----| False -> Block 683 #-----| True (back edge) -> Block 682 -# 2065| Block 683 -# 2065| r2065_1(glval) = VariableAddress[x682] : -# 2065| mu2065_2(String) = Uninitialized[x682] : &:r2065_1 -# 2065| r2065_3(glval) = FunctionAddress[String] : -# 2065| v2065_4(void) = Call[String] : func:r2065_3, this:r2065_1 -# 2065| mu2065_5(unknown) = ^CallSideEffect : ~m? -# 2065| mu2065_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2065_1 -# 2066| r2066_1(glval) = VariableAddress[x682] : -# 2066| r2066_2(glval) = FunctionAddress[~String] : -# 2066| v2066_3(void) = Call[~String] : func:r2066_2, this:r2066_1 -# 2066| mu2066_4(unknown) = ^CallSideEffect : ~m? -# 2066| v2066_5(void) = ^IndirectReadSideEffect[-1] : &:r2066_1, ~m? -# 2066| mu2066_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2066_1 -# 2066| r2066_7(bool) = Constant[0] : -# 2066| v2066_8(void) = ConditionalBranch : r2066_7 +# 35| Block 683 +# 35| r35_9549(glval) = VariableAddress[x682] : +# 35| mu35_9550(String) = Uninitialized[x682] : &:r35_9549 +# 35| r35_9551(glval) = FunctionAddress[String] : +# 35| v35_9552(void) = Call[String] : func:r35_9551, this:r35_9549 +# 35| mu35_9553(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9549 +# 35| r35_9555(glval) = VariableAddress[x682] : +# 35| r35_9556(glval) = FunctionAddress[~String] : +# 35| v35_9557(void) = Call[~String] : func:r35_9556, this:r35_9555 +# 35| mu35_9558(unknown) = ^CallSideEffect : ~m? +# 35| v35_9559(void) = ^IndirectReadSideEffect[-1] : &:r35_9555, ~m? +# 35| mu35_9560(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9555 +# 35| r35_9561(bool) = Constant[0] : +# 35| v35_9562(void) = ConditionalBranch : r35_9561 #-----| False -> Block 684 #-----| True (back edge) -> Block 683 -# 2068| Block 684 -# 2068| r2068_1(glval) = VariableAddress[x683] : -# 2068| mu2068_2(String) = Uninitialized[x683] : &:r2068_1 -# 2068| r2068_3(glval) = FunctionAddress[String] : -# 2068| v2068_4(void) = Call[String] : func:r2068_3, this:r2068_1 -# 2068| mu2068_5(unknown) = ^CallSideEffect : ~m? -# 2068| mu2068_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2069| r2069_1(glval) = VariableAddress[x683] : -# 2069| r2069_2(glval) = FunctionAddress[~String] : -# 2069| v2069_3(void) = Call[~String] : func:r2069_2, this:r2069_1 -# 2069| mu2069_4(unknown) = ^CallSideEffect : ~m? -# 2069| v2069_5(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, ~m? -# 2069| mu2069_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| r2069_7(bool) = Constant[0] : -# 2069| v2069_8(void) = ConditionalBranch : r2069_7 +# 35| Block 684 +# 35| r35_9563(glval) = VariableAddress[x683] : +# 35| mu35_9564(String) = Uninitialized[x683] : &:r35_9563 +# 35| r35_9565(glval) = FunctionAddress[String] : +# 35| v35_9566(void) = Call[String] : func:r35_9565, this:r35_9563 +# 35| mu35_9567(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9563 +# 35| r35_9569(glval) = VariableAddress[x683] : +# 35| r35_9570(glval) = FunctionAddress[~String] : +# 35| v35_9571(void) = Call[~String] : func:r35_9570, this:r35_9569 +# 35| mu35_9572(unknown) = ^CallSideEffect : ~m? +# 35| v35_9573(void) = ^IndirectReadSideEffect[-1] : &:r35_9569, ~m? +# 35| mu35_9574(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9569 +# 35| r35_9575(bool) = Constant[0] : +# 35| v35_9576(void) = ConditionalBranch : r35_9575 #-----| False -> Block 685 #-----| True (back edge) -> Block 684 -# 2071| Block 685 -# 2071| r2071_1(glval) = VariableAddress[x684] : -# 2071| mu2071_2(String) = Uninitialized[x684] : &:r2071_1 -# 2071| r2071_3(glval) = FunctionAddress[String] : -# 2071| v2071_4(void) = Call[String] : func:r2071_3, this:r2071_1 -# 2071| mu2071_5(unknown) = ^CallSideEffect : ~m? -# 2071| mu2071_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2071_1 -# 2072| r2072_1(glval) = VariableAddress[x684] : -# 2072| r2072_2(glval) = FunctionAddress[~String] : -# 2072| v2072_3(void) = Call[~String] : func:r2072_2, this:r2072_1 -# 2072| mu2072_4(unknown) = ^CallSideEffect : ~m? -# 2072| v2072_5(void) = ^IndirectReadSideEffect[-1] : &:r2072_1, ~m? -# 2072| mu2072_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2072_1 -# 2072| r2072_7(bool) = Constant[0] : -# 2072| v2072_8(void) = ConditionalBranch : r2072_7 +# 35| Block 685 +# 35| r35_9577(glval) = VariableAddress[x684] : +# 35| mu35_9578(String) = Uninitialized[x684] : &:r35_9577 +# 35| r35_9579(glval) = FunctionAddress[String] : +# 35| v35_9580(void) = Call[String] : func:r35_9579, this:r35_9577 +# 35| mu35_9581(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9577 +# 35| r35_9583(glval) = VariableAddress[x684] : +# 35| r35_9584(glval) = FunctionAddress[~String] : +# 35| v35_9585(void) = Call[~String] : func:r35_9584, this:r35_9583 +# 35| mu35_9586(unknown) = ^CallSideEffect : ~m? +# 35| v35_9587(void) = ^IndirectReadSideEffect[-1] : &:r35_9583, ~m? +# 35| mu35_9588(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9583 +# 35| r35_9589(bool) = Constant[0] : +# 35| v35_9590(void) = ConditionalBranch : r35_9589 #-----| False -> Block 686 #-----| True (back edge) -> Block 685 -# 2074| Block 686 -# 2074| r2074_1(glval) = VariableAddress[x685] : -# 2074| mu2074_2(String) = Uninitialized[x685] : &:r2074_1 -# 2074| r2074_3(glval) = FunctionAddress[String] : -# 2074| v2074_4(void) = Call[String] : func:r2074_3, this:r2074_1 -# 2074| mu2074_5(unknown) = ^CallSideEffect : ~m? -# 2074| mu2074_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2074_1 -# 2075| r2075_1(glval) = VariableAddress[x685] : -# 2075| r2075_2(glval) = FunctionAddress[~String] : -# 2075| v2075_3(void) = Call[~String] : func:r2075_2, this:r2075_1 -# 2075| mu2075_4(unknown) = ^CallSideEffect : ~m? -# 2075| v2075_5(void) = ^IndirectReadSideEffect[-1] : &:r2075_1, ~m? -# 2075| mu2075_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2075_1 -# 2075| r2075_7(bool) = Constant[0] : -# 2075| v2075_8(void) = ConditionalBranch : r2075_7 +# 35| Block 686 +# 35| r35_9591(glval) = VariableAddress[x685] : +# 35| mu35_9592(String) = Uninitialized[x685] : &:r35_9591 +# 35| r35_9593(glval) = FunctionAddress[String] : +# 35| v35_9594(void) = Call[String] : func:r35_9593, this:r35_9591 +# 35| mu35_9595(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9591 +# 35| r35_9597(glval) = VariableAddress[x685] : +# 35| r35_9598(glval) = FunctionAddress[~String] : +# 35| v35_9599(void) = Call[~String] : func:r35_9598, this:r35_9597 +# 35| mu35_9600(unknown) = ^CallSideEffect : ~m? +# 35| v35_9601(void) = ^IndirectReadSideEffect[-1] : &:r35_9597, ~m? +# 35| mu35_9602(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9597 +# 35| r35_9603(bool) = Constant[0] : +# 35| v35_9604(void) = ConditionalBranch : r35_9603 #-----| False -> Block 687 #-----| True (back edge) -> Block 686 -# 2077| Block 687 -# 2077| r2077_1(glval) = VariableAddress[x686] : -# 2077| mu2077_2(String) = Uninitialized[x686] : &:r2077_1 -# 2077| r2077_3(glval) = FunctionAddress[String] : -# 2077| v2077_4(void) = Call[String] : func:r2077_3, this:r2077_1 -# 2077| mu2077_5(unknown) = ^CallSideEffect : ~m? -# 2077| mu2077_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2077_1 -# 2078| r2078_1(glval) = VariableAddress[x686] : -# 2078| r2078_2(glval) = FunctionAddress[~String] : -# 2078| v2078_3(void) = Call[~String] : func:r2078_2, this:r2078_1 -# 2078| mu2078_4(unknown) = ^CallSideEffect : ~m? -# 2078| v2078_5(void) = ^IndirectReadSideEffect[-1] : &:r2078_1, ~m? -# 2078| mu2078_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2078_1 -# 2078| r2078_7(bool) = Constant[0] : -# 2078| v2078_8(void) = ConditionalBranch : r2078_7 +# 35| Block 687 +# 35| r35_9605(glval) = VariableAddress[x686] : +# 35| mu35_9606(String) = Uninitialized[x686] : &:r35_9605 +# 35| r35_9607(glval) = FunctionAddress[String] : +# 35| v35_9608(void) = Call[String] : func:r35_9607, this:r35_9605 +# 35| mu35_9609(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9605 +# 35| r35_9611(glval) = VariableAddress[x686] : +# 35| r35_9612(glval) = FunctionAddress[~String] : +# 35| v35_9613(void) = Call[~String] : func:r35_9612, this:r35_9611 +# 35| mu35_9614(unknown) = ^CallSideEffect : ~m? +# 35| v35_9615(void) = ^IndirectReadSideEffect[-1] : &:r35_9611, ~m? +# 35| mu35_9616(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9611 +# 35| r35_9617(bool) = Constant[0] : +# 35| v35_9618(void) = ConditionalBranch : r35_9617 #-----| False -> Block 688 #-----| True (back edge) -> Block 687 -# 2080| Block 688 -# 2080| r2080_1(glval) = VariableAddress[x687] : -# 2080| mu2080_2(String) = Uninitialized[x687] : &:r2080_1 -# 2080| r2080_3(glval) = FunctionAddress[String] : -# 2080| v2080_4(void) = Call[String] : func:r2080_3, this:r2080_1 -# 2080| mu2080_5(unknown) = ^CallSideEffect : ~m? -# 2080| mu2080_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2080_1 -# 2081| r2081_1(glval) = VariableAddress[x687] : -# 2081| r2081_2(glval) = FunctionAddress[~String] : -# 2081| v2081_3(void) = Call[~String] : func:r2081_2, this:r2081_1 -# 2081| mu2081_4(unknown) = ^CallSideEffect : ~m? -# 2081| v2081_5(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, ~m? -# 2081| mu2081_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 -# 2081| r2081_7(bool) = Constant[0] : -# 2081| v2081_8(void) = ConditionalBranch : r2081_7 +# 35| Block 688 +# 35| r35_9619(glval) = VariableAddress[x687] : +# 35| mu35_9620(String) = Uninitialized[x687] : &:r35_9619 +# 35| r35_9621(glval) = FunctionAddress[String] : +# 35| v35_9622(void) = Call[String] : func:r35_9621, this:r35_9619 +# 35| mu35_9623(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9619 +# 35| r35_9625(glval) = VariableAddress[x687] : +# 35| r35_9626(glval) = FunctionAddress[~String] : +# 35| v35_9627(void) = Call[~String] : func:r35_9626, this:r35_9625 +# 35| mu35_9628(unknown) = ^CallSideEffect : ~m? +# 35| v35_9629(void) = ^IndirectReadSideEffect[-1] : &:r35_9625, ~m? +# 35| mu35_9630(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9625 +# 35| r35_9631(bool) = Constant[0] : +# 35| v35_9632(void) = ConditionalBranch : r35_9631 #-----| False -> Block 689 #-----| True (back edge) -> Block 688 -# 2083| Block 689 -# 2083| r2083_1(glval) = VariableAddress[x688] : -# 2083| mu2083_2(String) = Uninitialized[x688] : &:r2083_1 -# 2083| r2083_3(glval) = FunctionAddress[String] : -# 2083| v2083_4(void) = Call[String] : func:r2083_3, this:r2083_1 -# 2083| mu2083_5(unknown) = ^CallSideEffect : ~m? -# 2083| mu2083_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 -# 2084| r2084_1(glval) = VariableAddress[x688] : -# 2084| r2084_2(glval) = FunctionAddress[~String] : -# 2084| v2084_3(void) = Call[~String] : func:r2084_2, this:r2084_1 -# 2084| mu2084_4(unknown) = ^CallSideEffect : ~m? -# 2084| v2084_5(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, ~m? -# 2084| mu2084_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 -# 2084| r2084_7(bool) = Constant[0] : -# 2084| v2084_8(void) = ConditionalBranch : r2084_7 +# 35| Block 689 +# 35| r35_9633(glval) = VariableAddress[x688] : +# 35| mu35_9634(String) = Uninitialized[x688] : &:r35_9633 +# 35| r35_9635(glval) = FunctionAddress[String] : +# 35| v35_9636(void) = Call[String] : func:r35_9635, this:r35_9633 +# 35| mu35_9637(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9633 +# 35| r35_9639(glval) = VariableAddress[x688] : +# 35| r35_9640(glval) = FunctionAddress[~String] : +# 35| v35_9641(void) = Call[~String] : func:r35_9640, this:r35_9639 +# 35| mu35_9642(unknown) = ^CallSideEffect : ~m? +# 35| v35_9643(void) = ^IndirectReadSideEffect[-1] : &:r35_9639, ~m? +# 35| mu35_9644(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9639 +# 35| r35_9645(bool) = Constant[0] : +# 35| v35_9646(void) = ConditionalBranch : r35_9645 #-----| False -> Block 690 #-----| True (back edge) -> Block 689 -# 2086| Block 690 -# 2086| r2086_1(glval) = VariableAddress[x689] : -# 2086| mu2086_2(String) = Uninitialized[x689] : &:r2086_1 -# 2086| r2086_3(glval) = FunctionAddress[String] : -# 2086| v2086_4(void) = Call[String] : func:r2086_3, this:r2086_1 -# 2086| mu2086_5(unknown) = ^CallSideEffect : ~m? -# 2086| mu2086_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2086_1 -# 2087| r2087_1(glval) = VariableAddress[x689] : -# 2087| r2087_2(glval) = FunctionAddress[~String] : -# 2087| v2087_3(void) = Call[~String] : func:r2087_2, this:r2087_1 -# 2087| mu2087_4(unknown) = ^CallSideEffect : ~m? -# 2087| v2087_5(void) = ^IndirectReadSideEffect[-1] : &:r2087_1, ~m? -# 2087| mu2087_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2087_1 -# 2087| r2087_7(bool) = Constant[0] : -# 2087| v2087_8(void) = ConditionalBranch : r2087_7 +# 35| Block 690 +# 35| r35_9647(glval) = VariableAddress[x689] : +# 35| mu35_9648(String) = Uninitialized[x689] : &:r35_9647 +# 35| r35_9649(glval) = FunctionAddress[String] : +# 35| v35_9650(void) = Call[String] : func:r35_9649, this:r35_9647 +# 35| mu35_9651(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9647 +# 35| r35_9653(glval) = VariableAddress[x689] : +# 35| r35_9654(glval) = FunctionAddress[~String] : +# 35| v35_9655(void) = Call[~String] : func:r35_9654, this:r35_9653 +# 35| mu35_9656(unknown) = ^CallSideEffect : ~m? +# 35| v35_9657(void) = ^IndirectReadSideEffect[-1] : &:r35_9653, ~m? +# 35| mu35_9658(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9653 +# 35| r35_9659(bool) = Constant[0] : +# 35| v35_9660(void) = ConditionalBranch : r35_9659 #-----| False -> Block 691 #-----| True (back edge) -> Block 690 -# 2089| Block 691 -# 2089| r2089_1(glval) = VariableAddress[x690] : -# 2089| mu2089_2(String) = Uninitialized[x690] : &:r2089_1 -# 2089| r2089_3(glval) = FunctionAddress[String] : -# 2089| v2089_4(void) = Call[String] : func:r2089_3, this:r2089_1 -# 2089| mu2089_5(unknown) = ^CallSideEffect : ~m? -# 2089| mu2089_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2089_1 -# 2090| r2090_1(glval) = VariableAddress[x690] : -# 2090| r2090_2(glval) = FunctionAddress[~String] : -# 2090| v2090_3(void) = Call[~String] : func:r2090_2, this:r2090_1 -# 2090| mu2090_4(unknown) = ^CallSideEffect : ~m? -# 2090| v2090_5(void) = ^IndirectReadSideEffect[-1] : &:r2090_1, ~m? -# 2090| mu2090_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2090_1 -# 2090| r2090_7(bool) = Constant[0] : -# 2090| v2090_8(void) = ConditionalBranch : r2090_7 +# 35| Block 691 +# 35| r35_9661(glval) = VariableAddress[x690] : +# 35| mu35_9662(String) = Uninitialized[x690] : &:r35_9661 +# 35| r35_9663(glval) = FunctionAddress[String] : +# 35| v35_9664(void) = Call[String] : func:r35_9663, this:r35_9661 +# 35| mu35_9665(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9661 +# 35| r35_9667(glval) = VariableAddress[x690] : +# 35| r35_9668(glval) = FunctionAddress[~String] : +# 35| v35_9669(void) = Call[~String] : func:r35_9668, this:r35_9667 +# 35| mu35_9670(unknown) = ^CallSideEffect : ~m? +# 35| v35_9671(void) = ^IndirectReadSideEffect[-1] : &:r35_9667, ~m? +# 35| mu35_9672(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9667 +# 35| r35_9673(bool) = Constant[0] : +# 35| v35_9674(void) = ConditionalBranch : r35_9673 #-----| False -> Block 692 #-----| True (back edge) -> Block 691 -# 2092| Block 692 -# 2092| r2092_1(glval) = VariableAddress[x691] : -# 2092| mu2092_2(String) = Uninitialized[x691] : &:r2092_1 -# 2092| r2092_3(glval) = FunctionAddress[String] : -# 2092| v2092_4(void) = Call[String] : func:r2092_3, this:r2092_1 -# 2092| mu2092_5(unknown) = ^CallSideEffect : ~m? -# 2092| mu2092_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2092_1 -# 2093| r2093_1(glval) = VariableAddress[x691] : -# 2093| r2093_2(glval) = FunctionAddress[~String] : -# 2093| v2093_3(void) = Call[~String] : func:r2093_2, this:r2093_1 -# 2093| mu2093_4(unknown) = ^CallSideEffect : ~m? -# 2093| v2093_5(void) = ^IndirectReadSideEffect[-1] : &:r2093_1, ~m? -# 2093| mu2093_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2093_1 -# 2093| r2093_7(bool) = Constant[0] : -# 2093| v2093_8(void) = ConditionalBranch : r2093_7 +# 35| Block 692 +# 35| r35_9675(glval) = VariableAddress[x691] : +# 35| mu35_9676(String) = Uninitialized[x691] : &:r35_9675 +# 35| r35_9677(glval) = FunctionAddress[String] : +# 35| v35_9678(void) = Call[String] : func:r35_9677, this:r35_9675 +# 35| mu35_9679(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9675 +# 35| r35_9681(glval) = VariableAddress[x691] : +# 35| r35_9682(glval) = FunctionAddress[~String] : +# 35| v35_9683(void) = Call[~String] : func:r35_9682, this:r35_9681 +# 35| mu35_9684(unknown) = ^CallSideEffect : ~m? +# 35| v35_9685(void) = ^IndirectReadSideEffect[-1] : &:r35_9681, ~m? +# 35| mu35_9686(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9681 +# 35| r35_9687(bool) = Constant[0] : +# 35| v35_9688(void) = ConditionalBranch : r35_9687 #-----| False -> Block 693 #-----| True (back edge) -> Block 692 -# 2095| Block 693 -# 2095| r2095_1(glval) = VariableAddress[x692] : -# 2095| mu2095_2(String) = Uninitialized[x692] : &:r2095_1 -# 2095| r2095_3(glval) = FunctionAddress[String] : -# 2095| v2095_4(void) = Call[String] : func:r2095_3, this:r2095_1 -# 2095| mu2095_5(unknown) = ^CallSideEffect : ~m? -# 2095| mu2095_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2095_1 -# 2096| r2096_1(glval) = VariableAddress[x692] : -# 2096| r2096_2(glval) = FunctionAddress[~String] : -# 2096| v2096_3(void) = Call[~String] : func:r2096_2, this:r2096_1 -# 2096| mu2096_4(unknown) = ^CallSideEffect : ~m? -# 2096| v2096_5(void) = ^IndirectReadSideEffect[-1] : &:r2096_1, ~m? -# 2096| mu2096_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2096_1 -# 2096| r2096_7(bool) = Constant[0] : -# 2096| v2096_8(void) = ConditionalBranch : r2096_7 +# 35| Block 693 +# 35| r35_9689(glval) = VariableAddress[x692] : +# 35| mu35_9690(String) = Uninitialized[x692] : &:r35_9689 +# 35| r35_9691(glval) = FunctionAddress[String] : +# 35| v35_9692(void) = Call[String] : func:r35_9691, this:r35_9689 +# 35| mu35_9693(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9689 +# 35| r35_9695(glval) = VariableAddress[x692] : +# 35| r35_9696(glval) = FunctionAddress[~String] : +# 35| v35_9697(void) = Call[~String] : func:r35_9696, this:r35_9695 +# 35| mu35_9698(unknown) = ^CallSideEffect : ~m? +# 35| v35_9699(void) = ^IndirectReadSideEffect[-1] : &:r35_9695, ~m? +# 35| mu35_9700(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9695 +# 35| r35_9701(bool) = Constant[0] : +# 35| v35_9702(void) = ConditionalBranch : r35_9701 #-----| False -> Block 694 #-----| True (back edge) -> Block 693 -# 2098| Block 694 -# 2098| r2098_1(glval) = VariableAddress[x693] : -# 2098| mu2098_2(String) = Uninitialized[x693] : &:r2098_1 -# 2098| r2098_3(glval) = FunctionAddress[String] : -# 2098| v2098_4(void) = Call[String] : func:r2098_3, this:r2098_1 -# 2098| mu2098_5(unknown) = ^CallSideEffect : ~m? -# 2098| mu2098_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2098_1 -# 2099| r2099_1(glval) = VariableAddress[x693] : -# 2099| r2099_2(glval) = FunctionAddress[~String] : -# 2099| v2099_3(void) = Call[~String] : func:r2099_2, this:r2099_1 -# 2099| mu2099_4(unknown) = ^CallSideEffect : ~m? -# 2099| v2099_5(void) = ^IndirectReadSideEffect[-1] : &:r2099_1, ~m? -# 2099| mu2099_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2099_1 -# 2099| r2099_7(bool) = Constant[0] : -# 2099| v2099_8(void) = ConditionalBranch : r2099_7 +# 35| Block 694 +# 35| r35_9703(glval) = VariableAddress[x693] : +# 35| mu35_9704(String) = Uninitialized[x693] : &:r35_9703 +# 35| r35_9705(glval) = FunctionAddress[String] : +# 35| v35_9706(void) = Call[String] : func:r35_9705, this:r35_9703 +# 35| mu35_9707(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9703 +# 35| r35_9709(glval) = VariableAddress[x693] : +# 35| r35_9710(glval) = FunctionAddress[~String] : +# 35| v35_9711(void) = Call[~String] : func:r35_9710, this:r35_9709 +# 35| mu35_9712(unknown) = ^CallSideEffect : ~m? +# 35| v35_9713(void) = ^IndirectReadSideEffect[-1] : &:r35_9709, ~m? +# 35| mu35_9714(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9709 +# 35| r35_9715(bool) = Constant[0] : +# 35| v35_9716(void) = ConditionalBranch : r35_9715 #-----| False -> Block 695 #-----| True (back edge) -> Block 694 -# 2101| Block 695 -# 2101| r2101_1(glval) = VariableAddress[x694] : -# 2101| mu2101_2(String) = Uninitialized[x694] : &:r2101_1 -# 2101| r2101_3(glval) = FunctionAddress[String] : -# 2101| v2101_4(void) = Call[String] : func:r2101_3, this:r2101_1 -# 2101| mu2101_5(unknown) = ^CallSideEffect : ~m? -# 2101| mu2101_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2101_1 -# 2102| r2102_1(glval) = VariableAddress[x694] : -# 2102| r2102_2(glval) = FunctionAddress[~String] : -# 2102| v2102_3(void) = Call[~String] : func:r2102_2, this:r2102_1 -# 2102| mu2102_4(unknown) = ^CallSideEffect : ~m? -# 2102| v2102_5(void) = ^IndirectReadSideEffect[-1] : &:r2102_1, ~m? -# 2102| mu2102_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2102_1 -# 2102| r2102_7(bool) = Constant[0] : -# 2102| v2102_8(void) = ConditionalBranch : r2102_7 +# 35| Block 695 +# 35| r35_9717(glval) = VariableAddress[x694] : +# 35| mu35_9718(String) = Uninitialized[x694] : &:r35_9717 +# 35| r35_9719(glval) = FunctionAddress[String] : +# 35| v35_9720(void) = Call[String] : func:r35_9719, this:r35_9717 +# 35| mu35_9721(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9717 +# 35| r35_9723(glval) = VariableAddress[x694] : +# 35| r35_9724(glval) = FunctionAddress[~String] : +# 35| v35_9725(void) = Call[~String] : func:r35_9724, this:r35_9723 +# 35| mu35_9726(unknown) = ^CallSideEffect : ~m? +# 35| v35_9727(void) = ^IndirectReadSideEffect[-1] : &:r35_9723, ~m? +# 35| mu35_9728(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9723 +# 35| r35_9729(bool) = Constant[0] : +# 35| v35_9730(void) = ConditionalBranch : r35_9729 #-----| False -> Block 696 #-----| True (back edge) -> Block 695 -# 2104| Block 696 -# 2104| r2104_1(glval) = VariableAddress[x695] : -# 2104| mu2104_2(String) = Uninitialized[x695] : &:r2104_1 -# 2104| r2104_3(glval) = FunctionAddress[String] : -# 2104| v2104_4(void) = Call[String] : func:r2104_3, this:r2104_1 -# 2104| mu2104_5(unknown) = ^CallSideEffect : ~m? -# 2104| mu2104_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2104_1 -# 2105| r2105_1(glval) = VariableAddress[x695] : -# 2105| r2105_2(glval) = FunctionAddress[~String] : -# 2105| v2105_3(void) = Call[~String] : func:r2105_2, this:r2105_1 -# 2105| mu2105_4(unknown) = ^CallSideEffect : ~m? -# 2105| v2105_5(void) = ^IndirectReadSideEffect[-1] : &:r2105_1, ~m? -# 2105| mu2105_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2105_1 -# 2105| r2105_7(bool) = Constant[0] : -# 2105| v2105_8(void) = ConditionalBranch : r2105_7 +# 35| Block 696 +# 35| r35_9731(glval) = VariableAddress[x695] : +# 35| mu35_9732(String) = Uninitialized[x695] : &:r35_9731 +# 35| r35_9733(glval) = FunctionAddress[String] : +# 35| v35_9734(void) = Call[String] : func:r35_9733, this:r35_9731 +# 35| mu35_9735(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9731 +# 35| r35_9737(glval) = VariableAddress[x695] : +# 35| r35_9738(glval) = FunctionAddress[~String] : +# 35| v35_9739(void) = Call[~String] : func:r35_9738, this:r35_9737 +# 35| mu35_9740(unknown) = ^CallSideEffect : ~m? +# 35| v35_9741(void) = ^IndirectReadSideEffect[-1] : &:r35_9737, ~m? +# 35| mu35_9742(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9737 +# 35| r35_9743(bool) = Constant[0] : +# 35| v35_9744(void) = ConditionalBranch : r35_9743 #-----| False -> Block 697 #-----| True (back edge) -> Block 696 -# 2107| Block 697 -# 2107| r2107_1(glval) = VariableAddress[x696] : -# 2107| mu2107_2(String) = Uninitialized[x696] : &:r2107_1 -# 2107| r2107_3(glval) = FunctionAddress[String] : -# 2107| v2107_4(void) = Call[String] : func:r2107_3, this:r2107_1 -# 2107| mu2107_5(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2107_1 -# 2108| r2108_1(glval) = VariableAddress[x696] : -# 2108| r2108_2(glval) = FunctionAddress[~String] : -# 2108| v2108_3(void) = Call[~String] : func:r2108_2, this:r2108_1 -# 2108| mu2108_4(unknown) = ^CallSideEffect : ~m? -# 2108| v2108_5(void) = ^IndirectReadSideEffect[-1] : &:r2108_1, ~m? -# 2108| mu2108_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2108_1 -# 2108| r2108_7(bool) = Constant[0] : -# 2108| v2108_8(void) = ConditionalBranch : r2108_7 +# 35| Block 697 +# 35| r35_9745(glval) = VariableAddress[x696] : +# 35| mu35_9746(String) = Uninitialized[x696] : &:r35_9745 +# 35| r35_9747(glval) = FunctionAddress[String] : +# 35| v35_9748(void) = Call[String] : func:r35_9747, this:r35_9745 +# 35| mu35_9749(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9745 +# 35| r35_9751(glval) = VariableAddress[x696] : +# 35| r35_9752(glval) = FunctionAddress[~String] : +# 35| v35_9753(void) = Call[~String] : func:r35_9752, this:r35_9751 +# 35| mu35_9754(unknown) = ^CallSideEffect : ~m? +# 35| v35_9755(void) = ^IndirectReadSideEffect[-1] : &:r35_9751, ~m? +# 35| mu35_9756(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9751 +# 35| r35_9757(bool) = Constant[0] : +# 35| v35_9758(void) = ConditionalBranch : r35_9757 #-----| False -> Block 698 #-----| True (back edge) -> Block 697 -# 2110| Block 698 -# 2110| r2110_1(glval) = VariableAddress[x697] : -# 2110| mu2110_2(String) = Uninitialized[x697] : &:r2110_1 -# 2110| r2110_3(glval) = FunctionAddress[String] : -# 2110| v2110_4(void) = Call[String] : func:r2110_3, this:r2110_1 -# 2110| mu2110_5(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[x697] : -# 2111| r2111_2(glval) = FunctionAddress[~String] : -# 2111| v2111_3(void) = Call[~String] : func:r2111_2, this:r2111_1 -# 2111| mu2111_4(unknown) = ^CallSideEffect : ~m? -# 2111| v2111_5(void) = ^IndirectReadSideEffect[-1] : &:r2111_1, ~m? -# 2111| mu2111_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2111_1 -# 2111| r2111_7(bool) = Constant[0] : -# 2111| v2111_8(void) = ConditionalBranch : r2111_7 +# 35| Block 698 +# 35| r35_9759(glval) = VariableAddress[x697] : +# 35| mu35_9760(String) = Uninitialized[x697] : &:r35_9759 +# 35| r35_9761(glval) = FunctionAddress[String] : +# 35| v35_9762(void) = Call[String] : func:r35_9761, this:r35_9759 +# 35| mu35_9763(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9759 +# 35| r35_9765(glval) = VariableAddress[x697] : +# 35| r35_9766(glval) = FunctionAddress[~String] : +# 35| v35_9767(void) = Call[~String] : func:r35_9766, this:r35_9765 +# 35| mu35_9768(unknown) = ^CallSideEffect : ~m? +# 35| v35_9769(void) = ^IndirectReadSideEffect[-1] : &:r35_9765, ~m? +# 35| mu35_9770(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9765 +# 35| r35_9771(bool) = Constant[0] : +# 35| v35_9772(void) = ConditionalBranch : r35_9771 #-----| False -> Block 699 #-----| True (back edge) -> Block 698 -# 2113| Block 699 -# 2113| r2113_1(glval) = VariableAddress[x698] : -# 2113| mu2113_2(String) = Uninitialized[x698] : &:r2113_1 -# 2113| r2113_3(glval) = FunctionAddress[String] : -# 2113| v2113_4(void) = Call[String] : func:r2113_3, this:r2113_1 -# 2113| mu2113_5(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2113_1 -# 2114| r2114_1(glval) = VariableAddress[x698] : -# 2114| r2114_2(glval) = FunctionAddress[~String] : -# 2114| v2114_3(void) = Call[~String] : func:r2114_2, this:r2114_1 -# 2114| mu2114_4(unknown) = ^CallSideEffect : ~m? -# 2114| v2114_5(void) = ^IndirectReadSideEffect[-1] : &:r2114_1, ~m? -# 2114| mu2114_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2114_1 -# 2114| r2114_7(bool) = Constant[0] : -# 2114| v2114_8(void) = ConditionalBranch : r2114_7 +# 35| Block 699 +# 35| r35_9773(glval) = VariableAddress[x698] : +# 35| mu35_9774(String) = Uninitialized[x698] : &:r35_9773 +# 35| r35_9775(glval) = FunctionAddress[String] : +# 35| v35_9776(void) = Call[String] : func:r35_9775, this:r35_9773 +# 35| mu35_9777(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9773 +# 35| r35_9779(glval) = VariableAddress[x698] : +# 35| r35_9780(glval) = FunctionAddress[~String] : +# 35| v35_9781(void) = Call[~String] : func:r35_9780, this:r35_9779 +# 35| mu35_9782(unknown) = ^CallSideEffect : ~m? +# 35| v35_9783(void) = ^IndirectReadSideEffect[-1] : &:r35_9779, ~m? +# 35| mu35_9784(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9779 +# 35| r35_9785(bool) = Constant[0] : +# 35| v35_9786(void) = ConditionalBranch : r35_9785 #-----| False -> Block 700 #-----| True (back edge) -> Block 699 -# 2116| Block 700 -# 2116| r2116_1(glval) = VariableAddress[x699] : -# 2116| mu2116_2(String) = Uninitialized[x699] : &:r2116_1 -# 2116| r2116_3(glval) = FunctionAddress[String] : -# 2116| v2116_4(void) = Call[String] : func:r2116_3, this:r2116_1 -# 2116| mu2116_5(unknown) = ^CallSideEffect : ~m? -# 2116| mu2116_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2116_1 -# 2117| r2117_1(glval) = VariableAddress[x699] : -# 2117| r2117_2(glval) = FunctionAddress[~String] : -# 2117| v2117_3(void) = Call[~String] : func:r2117_2, this:r2117_1 -# 2117| mu2117_4(unknown) = ^CallSideEffect : ~m? -# 2117| v2117_5(void) = ^IndirectReadSideEffect[-1] : &:r2117_1, ~m? -# 2117| mu2117_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2117_1 -# 2117| r2117_7(bool) = Constant[0] : -# 2117| v2117_8(void) = ConditionalBranch : r2117_7 +# 35| Block 700 +# 35| r35_9787(glval) = VariableAddress[x699] : +# 35| mu35_9788(String) = Uninitialized[x699] : &:r35_9787 +# 35| r35_9789(glval) = FunctionAddress[String] : +# 35| v35_9790(void) = Call[String] : func:r35_9789, this:r35_9787 +# 35| mu35_9791(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9787 +# 35| r35_9793(glval) = VariableAddress[x699] : +# 35| r35_9794(glval) = FunctionAddress[~String] : +# 35| v35_9795(void) = Call[~String] : func:r35_9794, this:r35_9793 +# 35| mu35_9796(unknown) = ^CallSideEffect : ~m? +# 35| v35_9797(void) = ^IndirectReadSideEffect[-1] : &:r35_9793, ~m? +# 35| mu35_9798(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9793 +# 35| r35_9799(bool) = Constant[0] : +# 35| v35_9800(void) = ConditionalBranch : r35_9799 #-----| False -> Block 701 #-----| True (back edge) -> Block 700 -# 2119| Block 701 -# 2119| r2119_1(glval) = VariableAddress[x700] : -# 2119| mu2119_2(String) = Uninitialized[x700] : &:r2119_1 -# 2119| r2119_3(glval) = FunctionAddress[String] : -# 2119| v2119_4(void) = Call[String] : func:r2119_3, this:r2119_1 -# 2119| mu2119_5(unknown) = ^CallSideEffect : ~m? -# 2119| mu2119_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2119_1 -# 2120| r2120_1(glval) = VariableAddress[x700] : -# 2120| r2120_2(glval) = FunctionAddress[~String] : -# 2120| v2120_3(void) = Call[~String] : func:r2120_2, this:r2120_1 -# 2120| mu2120_4(unknown) = ^CallSideEffect : ~m? -# 2120| v2120_5(void) = ^IndirectReadSideEffect[-1] : &:r2120_1, ~m? -# 2120| mu2120_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2120_1 -# 2120| r2120_7(bool) = Constant[0] : -# 2120| v2120_8(void) = ConditionalBranch : r2120_7 +# 35| Block 701 +# 35| r35_9801(glval) = VariableAddress[x700] : +# 35| mu35_9802(String) = Uninitialized[x700] : &:r35_9801 +# 35| r35_9803(glval) = FunctionAddress[String] : +# 35| v35_9804(void) = Call[String] : func:r35_9803, this:r35_9801 +# 35| mu35_9805(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9801 +# 35| r35_9807(glval) = VariableAddress[x700] : +# 35| r35_9808(glval) = FunctionAddress[~String] : +# 35| v35_9809(void) = Call[~String] : func:r35_9808, this:r35_9807 +# 35| mu35_9810(unknown) = ^CallSideEffect : ~m? +# 35| v35_9811(void) = ^IndirectReadSideEffect[-1] : &:r35_9807, ~m? +# 35| mu35_9812(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9807 +# 35| r35_9813(bool) = Constant[0] : +# 35| v35_9814(void) = ConditionalBranch : r35_9813 #-----| False -> Block 702 #-----| True (back edge) -> Block 701 -# 2122| Block 702 -# 2122| r2122_1(glval) = VariableAddress[x701] : -# 2122| mu2122_2(String) = Uninitialized[x701] : &:r2122_1 -# 2122| r2122_3(glval) = FunctionAddress[String] : -# 2122| v2122_4(void) = Call[String] : func:r2122_3, this:r2122_1 -# 2122| mu2122_5(unknown) = ^CallSideEffect : ~m? -# 2122| mu2122_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2122_1 -# 2123| r2123_1(glval) = VariableAddress[x701] : -# 2123| r2123_2(glval) = FunctionAddress[~String] : -# 2123| v2123_3(void) = Call[~String] : func:r2123_2, this:r2123_1 -# 2123| mu2123_4(unknown) = ^CallSideEffect : ~m? -# 2123| v2123_5(void) = ^IndirectReadSideEffect[-1] : &:r2123_1, ~m? -# 2123| mu2123_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2123_1 -# 2123| r2123_7(bool) = Constant[0] : -# 2123| v2123_8(void) = ConditionalBranch : r2123_7 +# 35| Block 702 +# 35| r35_9815(glval) = VariableAddress[x701] : +# 35| mu35_9816(String) = Uninitialized[x701] : &:r35_9815 +# 35| r35_9817(glval) = FunctionAddress[String] : +# 35| v35_9818(void) = Call[String] : func:r35_9817, this:r35_9815 +# 35| mu35_9819(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9815 +# 35| r35_9821(glval) = VariableAddress[x701] : +# 35| r35_9822(glval) = FunctionAddress[~String] : +# 35| v35_9823(void) = Call[~String] : func:r35_9822, this:r35_9821 +# 35| mu35_9824(unknown) = ^CallSideEffect : ~m? +# 35| v35_9825(void) = ^IndirectReadSideEffect[-1] : &:r35_9821, ~m? +# 35| mu35_9826(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9821 +# 35| r35_9827(bool) = Constant[0] : +# 35| v35_9828(void) = ConditionalBranch : r35_9827 #-----| False -> Block 703 #-----| True (back edge) -> Block 702 -# 2125| Block 703 -# 2125| r2125_1(glval) = VariableAddress[x702] : -# 2125| mu2125_2(String) = Uninitialized[x702] : &:r2125_1 -# 2125| r2125_3(glval) = FunctionAddress[String] : -# 2125| v2125_4(void) = Call[String] : func:r2125_3, this:r2125_1 -# 2125| mu2125_5(unknown) = ^CallSideEffect : ~m? -# 2125| mu2125_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2125_1 -# 2126| r2126_1(glval) = VariableAddress[x702] : -# 2126| r2126_2(glval) = FunctionAddress[~String] : -# 2126| v2126_3(void) = Call[~String] : func:r2126_2, this:r2126_1 -# 2126| mu2126_4(unknown) = ^CallSideEffect : ~m? -# 2126| v2126_5(void) = ^IndirectReadSideEffect[-1] : &:r2126_1, ~m? -# 2126| mu2126_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2126_1 -# 2126| r2126_7(bool) = Constant[0] : -# 2126| v2126_8(void) = ConditionalBranch : r2126_7 +# 35| Block 703 +# 35| r35_9829(glval) = VariableAddress[x702] : +# 35| mu35_9830(String) = Uninitialized[x702] : &:r35_9829 +# 35| r35_9831(glval) = FunctionAddress[String] : +# 35| v35_9832(void) = Call[String] : func:r35_9831, this:r35_9829 +# 35| mu35_9833(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9829 +# 35| r35_9835(glval) = VariableAddress[x702] : +# 35| r35_9836(glval) = FunctionAddress[~String] : +# 35| v35_9837(void) = Call[~String] : func:r35_9836, this:r35_9835 +# 35| mu35_9838(unknown) = ^CallSideEffect : ~m? +# 35| v35_9839(void) = ^IndirectReadSideEffect[-1] : &:r35_9835, ~m? +# 35| mu35_9840(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9835 +# 35| r35_9841(bool) = Constant[0] : +# 35| v35_9842(void) = ConditionalBranch : r35_9841 #-----| False -> Block 704 #-----| True (back edge) -> Block 703 -# 2128| Block 704 -# 2128| r2128_1(glval) = VariableAddress[x703] : -# 2128| mu2128_2(String) = Uninitialized[x703] : &:r2128_1 -# 2128| r2128_3(glval) = FunctionAddress[String] : -# 2128| v2128_4(void) = Call[String] : func:r2128_3, this:r2128_1 -# 2128| mu2128_5(unknown) = ^CallSideEffect : ~m? -# 2128| mu2128_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2128_1 -# 2129| r2129_1(glval) = VariableAddress[x703] : -# 2129| r2129_2(glval) = FunctionAddress[~String] : -# 2129| v2129_3(void) = Call[~String] : func:r2129_2, this:r2129_1 -# 2129| mu2129_4(unknown) = ^CallSideEffect : ~m? -# 2129| v2129_5(void) = ^IndirectReadSideEffect[-1] : &:r2129_1, ~m? -# 2129| mu2129_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2129_1 -# 2129| r2129_7(bool) = Constant[0] : -# 2129| v2129_8(void) = ConditionalBranch : r2129_7 +# 35| Block 704 +# 35| r35_9843(glval) = VariableAddress[x703] : +# 35| mu35_9844(String) = Uninitialized[x703] : &:r35_9843 +# 35| r35_9845(glval) = FunctionAddress[String] : +# 35| v35_9846(void) = Call[String] : func:r35_9845, this:r35_9843 +# 35| mu35_9847(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9843 +# 35| r35_9849(glval) = VariableAddress[x703] : +# 35| r35_9850(glval) = FunctionAddress[~String] : +# 35| v35_9851(void) = Call[~String] : func:r35_9850, this:r35_9849 +# 35| mu35_9852(unknown) = ^CallSideEffect : ~m? +# 35| v35_9853(void) = ^IndirectReadSideEffect[-1] : &:r35_9849, ~m? +# 35| mu35_9854(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9849 +# 35| r35_9855(bool) = Constant[0] : +# 35| v35_9856(void) = ConditionalBranch : r35_9855 #-----| False -> Block 705 #-----| True (back edge) -> Block 704 -# 2131| Block 705 -# 2131| r2131_1(glval) = VariableAddress[x704] : -# 2131| mu2131_2(String) = Uninitialized[x704] : &:r2131_1 -# 2131| r2131_3(glval) = FunctionAddress[String] : -# 2131| v2131_4(void) = Call[String] : func:r2131_3, this:r2131_1 -# 2131| mu2131_5(unknown) = ^CallSideEffect : ~m? -# 2131| mu2131_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2131_1 -# 2132| r2132_1(glval) = VariableAddress[x704] : -# 2132| r2132_2(glval) = FunctionAddress[~String] : -# 2132| v2132_3(void) = Call[~String] : func:r2132_2, this:r2132_1 -# 2132| mu2132_4(unknown) = ^CallSideEffect : ~m? -# 2132| v2132_5(void) = ^IndirectReadSideEffect[-1] : &:r2132_1, ~m? -# 2132| mu2132_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2132_1 -# 2132| r2132_7(bool) = Constant[0] : -# 2132| v2132_8(void) = ConditionalBranch : r2132_7 +# 35| Block 705 +# 35| r35_9857(glval) = VariableAddress[x704] : +# 35| mu35_9858(String) = Uninitialized[x704] : &:r35_9857 +# 35| r35_9859(glval) = FunctionAddress[String] : +# 35| v35_9860(void) = Call[String] : func:r35_9859, this:r35_9857 +# 35| mu35_9861(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9857 +# 35| r35_9863(glval) = VariableAddress[x704] : +# 35| r35_9864(glval) = FunctionAddress[~String] : +# 35| v35_9865(void) = Call[~String] : func:r35_9864, this:r35_9863 +# 35| mu35_9866(unknown) = ^CallSideEffect : ~m? +# 35| v35_9867(void) = ^IndirectReadSideEffect[-1] : &:r35_9863, ~m? +# 35| mu35_9868(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9863 +# 35| r35_9869(bool) = Constant[0] : +# 35| v35_9870(void) = ConditionalBranch : r35_9869 #-----| False -> Block 706 #-----| True (back edge) -> Block 705 -# 2134| Block 706 -# 2134| r2134_1(glval) = VariableAddress[x705] : -# 2134| mu2134_2(String) = Uninitialized[x705] : &:r2134_1 -# 2134| r2134_3(glval) = FunctionAddress[String] : -# 2134| v2134_4(void) = Call[String] : func:r2134_3, this:r2134_1 -# 2134| mu2134_5(unknown) = ^CallSideEffect : ~m? -# 2134| mu2134_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2134_1 -# 2135| r2135_1(glval) = VariableAddress[x705] : -# 2135| r2135_2(glval) = FunctionAddress[~String] : -# 2135| v2135_3(void) = Call[~String] : func:r2135_2, this:r2135_1 -# 2135| mu2135_4(unknown) = ^CallSideEffect : ~m? -# 2135| v2135_5(void) = ^IndirectReadSideEffect[-1] : &:r2135_1, ~m? -# 2135| mu2135_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2135_1 -# 2135| r2135_7(bool) = Constant[0] : -# 2135| v2135_8(void) = ConditionalBranch : r2135_7 +# 35| Block 706 +# 35| r35_9871(glval) = VariableAddress[x705] : +# 35| mu35_9872(String) = Uninitialized[x705] : &:r35_9871 +# 35| r35_9873(glval) = FunctionAddress[String] : +# 35| v35_9874(void) = Call[String] : func:r35_9873, this:r35_9871 +# 35| mu35_9875(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9871 +# 35| r35_9877(glval) = VariableAddress[x705] : +# 35| r35_9878(glval) = FunctionAddress[~String] : +# 35| v35_9879(void) = Call[~String] : func:r35_9878, this:r35_9877 +# 35| mu35_9880(unknown) = ^CallSideEffect : ~m? +# 35| v35_9881(void) = ^IndirectReadSideEffect[-1] : &:r35_9877, ~m? +# 35| mu35_9882(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9877 +# 35| r35_9883(bool) = Constant[0] : +# 35| v35_9884(void) = ConditionalBranch : r35_9883 #-----| False -> Block 707 #-----| True (back edge) -> Block 706 -# 2137| Block 707 -# 2137| r2137_1(glval) = VariableAddress[x706] : -# 2137| mu2137_2(String) = Uninitialized[x706] : &:r2137_1 -# 2137| r2137_3(glval) = FunctionAddress[String] : -# 2137| v2137_4(void) = Call[String] : func:r2137_3, this:r2137_1 -# 2137| mu2137_5(unknown) = ^CallSideEffect : ~m? -# 2137| mu2137_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2137_1 -# 2138| r2138_1(glval) = VariableAddress[x706] : -# 2138| r2138_2(glval) = FunctionAddress[~String] : -# 2138| v2138_3(void) = Call[~String] : func:r2138_2, this:r2138_1 -# 2138| mu2138_4(unknown) = ^CallSideEffect : ~m? -# 2138| v2138_5(void) = ^IndirectReadSideEffect[-1] : &:r2138_1, ~m? -# 2138| mu2138_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -# 2138| r2138_7(bool) = Constant[0] : -# 2138| v2138_8(void) = ConditionalBranch : r2138_7 +# 35| Block 707 +# 35| r35_9885(glval) = VariableAddress[x706] : +# 35| mu35_9886(String) = Uninitialized[x706] : &:r35_9885 +# 35| r35_9887(glval) = FunctionAddress[String] : +# 35| v35_9888(void) = Call[String] : func:r35_9887, this:r35_9885 +# 35| mu35_9889(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9885 +# 35| r35_9891(glval) = VariableAddress[x706] : +# 35| r35_9892(glval) = FunctionAddress[~String] : +# 35| v35_9893(void) = Call[~String] : func:r35_9892, this:r35_9891 +# 35| mu35_9894(unknown) = ^CallSideEffect : ~m? +# 35| v35_9895(void) = ^IndirectReadSideEffect[-1] : &:r35_9891, ~m? +# 35| mu35_9896(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9891 +# 35| r35_9897(bool) = Constant[0] : +# 35| v35_9898(void) = ConditionalBranch : r35_9897 #-----| False -> Block 708 #-----| True (back edge) -> Block 707 -# 2140| Block 708 -# 2140| r2140_1(glval) = VariableAddress[x707] : -# 2140| mu2140_2(String) = Uninitialized[x707] : &:r2140_1 -# 2140| r2140_3(glval) = FunctionAddress[String] : -# 2140| v2140_4(void) = Call[String] : func:r2140_3, this:r2140_1 -# 2140| mu2140_5(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2140_1 -# 2141| r2141_1(glval) = VariableAddress[x707] : -# 2141| r2141_2(glval) = FunctionAddress[~String] : -# 2141| v2141_3(void) = Call[~String] : func:r2141_2, this:r2141_1 -# 2141| mu2141_4(unknown) = ^CallSideEffect : ~m? -# 2141| v2141_5(void) = ^IndirectReadSideEffect[-1] : &:r2141_1, ~m? -# 2141| mu2141_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 -# 2141| r2141_7(bool) = Constant[0] : -# 2141| v2141_8(void) = ConditionalBranch : r2141_7 +# 35| Block 708 +# 35| r35_9899(glval) = VariableAddress[x707] : +# 35| mu35_9900(String) = Uninitialized[x707] : &:r35_9899 +# 35| r35_9901(glval) = FunctionAddress[String] : +# 35| v35_9902(void) = Call[String] : func:r35_9901, this:r35_9899 +# 35| mu35_9903(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9899 +# 35| r35_9905(glval) = VariableAddress[x707] : +# 35| r35_9906(glval) = FunctionAddress[~String] : +# 35| v35_9907(void) = Call[~String] : func:r35_9906, this:r35_9905 +# 35| mu35_9908(unknown) = ^CallSideEffect : ~m? +# 35| v35_9909(void) = ^IndirectReadSideEffect[-1] : &:r35_9905, ~m? +# 35| mu35_9910(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9905 +# 35| r35_9911(bool) = Constant[0] : +# 35| v35_9912(void) = ConditionalBranch : r35_9911 #-----| False -> Block 709 #-----| True (back edge) -> Block 708 -# 2143| Block 709 -# 2143| r2143_1(glval) = VariableAddress[x708] : -# 2143| mu2143_2(String) = Uninitialized[x708] : &:r2143_1 -# 2143| r2143_3(glval) = FunctionAddress[String] : -# 2143| v2143_4(void) = Call[String] : func:r2143_3, this:r2143_1 -# 2143| mu2143_5(unknown) = ^CallSideEffect : ~m? -# 2143| mu2143_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2143_1 -# 2144| r2144_1(glval) = VariableAddress[x708] : -# 2144| r2144_2(glval) = FunctionAddress[~String] : -# 2144| v2144_3(void) = Call[~String] : func:r2144_2, this:r2144_1 -# 2144| mu2144_4(unknown) = ^CallSideEffect : ~m? -# 2144| v2144_5(void) = ^IndirectReadSideEffect[-1] : &:r2144_1, ~m? -# 2144| mu2144_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 -# 2144| r2144_7(bool) = Constant[0] : -# 2144| v2144_8(void) = ConditionalBranch : r2144_7 +# 35| Block 709 +# 35| r35_9913(glval) = VariableAddress[x708] : +# 35| mu35_9914(String) = Uninitialized[x708] : &:r35_9913 +# 35| r35_9915(glval) = FunctionAddress[String] : +# 35| v35_9916(void) = Call[String] : func:r35_9915, this:r35_9913 +# 35| mu35_9917(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9913 +# 35| r35_9919(glval) = VariableAddress[x708] : +# 35| r35_9920(glval) = FunctionAddress[~String] : +# 35| v35_9921(void) = Call[~String] : func:r35_9920, this:r35_9919 +# 35| mu35_9922(unknown) = ^CallSideEffect : ~m? +# 35| v35_9923(void) = ^IndirectReadSideEffect[-1] : &:r35_9919, ~m? +# 35| mu35_9924(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9919 +# 35| r35_9925(bool) = Constant[0] : +# 35| v35_9926(void) = ConditionalBranch : r35_9925 #-----| False -> Block 710 #-----| True (back edge) -> Block 709 -# 2146| Block 710 -# 2146| r2146_1(glval) = VariableAddress[x709] : -# 2146| mu2146_2(String) = Uninitialized[x709] : &:r2146_1 -# 2146| r2146_3(glval) = FunctionAddress[String] : -# 2146| v2146_4(void) = Call[String] : func:r2146_3, this:r2146_1 -# 2146| mu2146_5(unknown) = ^CallSideEffect : ~m? -# 2146| mu2146_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 -# 2147| r2147_1(glval) = VariableAddress[x709] : -# 2147| r2147_2(glval) = FunctionAddress[~String] : -# 2147| v2147_3(void) = Call[~String] : func:r2147_2, this:r2147_1 -# 2147| mu2147_4(unknown) = ^CallSideEffect : ~m? -# 2147| v2147_5(void) = ^IndirectReadSideEffect[-1] : &:r2147_1, ~m? -# 2147| mu2147_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2147_1 -# 2147| r2147_7(bool) = Constant[0] : -# 2147| v2147_8(void) = ConditionalBranch : r2147_7 +# 35| Block 710 +# 35| r35_9927(glval) = VariableAddress[x709] : +# 35| mu35_9928(String) = Uninitialized[x709] : &:r35_9927 +# 35| r35_9929(glval) = FunctionAddress[String] : +# 35| v35_9930(void) = Call[String] : func:r35_9929, this:r35_9927 +# 35| mu35_9931(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9927 +# 35| r35_9933(glval) = VariableAddress[x709] : +# 35| r35_9934(glval) = FunctionAddress[~String] : +# 35| v35_9935(void) = Call[~String] : func:r35_9934, this:r35_9933 +# 35| mu35_9936(unknown) = ^CallSideEffect : ~m? +# 35| v35_9937(void) = ^IndirectReadSideEffect[-1] : &:r35_9933, ~m? +# 35| mu35_9938(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9933 +# 35| r35_9939(bool) = Constant[0] : +# 35| v35_9940(void) = ConditionalBranch : r35_9939 #-----| False -> Block 711 #-----| True (back edge) -> Block 710 -# 2149| Block 711 -# 2149| r2149_1(glval) = VariableAddress[x710] : -# 2149| mu2149_2(String) = Uninitialized[x710] : &:r2149_1 -# 2149| r2149_3(glval) = FunctionAddress[String] : -# 2149| v2149_4(void) = Call[String] : func:r2149_3, this:r2149_1 -# 2149| mu2149_5(unknown) = ^CallSideEffect : ~m? -# 2149| mu2149_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 -# 2150| r2150_1(glval) = VariableAddress[x710] : -# 2150| r2150_2(glval) = FunctionAddress[~String] : -# 2150| v2150_3(void) = Call[~String] : func:r2150_2, this:r2150_1 -# 2150| mu2150_4(unknown) = ^CallSideEffect : ~m? -# 2150| v2150_5(void) = ^IndirectReadSideEffect[-1] : &:r2150_1, ~m? -# 2150| mu2150_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2150_1 -# 2150| r2150_7(bool) = Constant[0] : -# 2150| v2150_8(void) = ConditionalBranch : r2150_7 +# 35| Block 711 +# 35| r35_9941(glval) = VariableAddress[x710] : +# 35| mu35_9942(String) = Uninitialized[x710] : &:r35_9941 +# 35| r35_9943(glval) = FunctionAddress[String] : +# 35| v35_9944(void) = Call[String] : func:r35_9943, this:r35_9941 +# 35| mu35_9945(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9941 +# 35| r35_9947(glval) = VariableAddress[x710] : +# 35| r35_9948(glval) = FunctionAddress[~String] : +# 35| v35_9949(void) = Call[~String] : func:r35_9948, this:r35_9947 +# 35| mu35_9950(unknown) = ^CallSideEffect : ~m? +# 35| v35_9951(void) = ^IndirectReadSideEffect[-1] : &:r35_9947, ~m? +# 35| mu35_9952(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9947 +# 35| r35_9953(bool) = Constant[0] : +# 35| v35_9954(void) = ConditionalBranch : r35_9953 #-----| False -> Block 712 #-----| True (back edge) -> Block 711 -# 2152| Block 712 -# 2152| r2152_1(glval) = VariableAddress[x711] : -# 2152| mu2152_2(String) = Uninitialized[x711] : &:r2152_1 -# 2152| r2152_3(glval) = FunctionAddress[String] : -# 2152| v2152_4(void) = Call[String] : func:r2152_3, this:r2152_1 -# 2152| mu2152_5(unknown) = ^CallSideEffect : ~m? -# 2152| mu2152_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2152_1 -# 2153| r2153_1(glval) = VariableAddress[x711] : -# 2153| r2153_2(glval) = FunctionAddress[~String] : -# 2153| v2153_3(void) = Call[~String] : func:r2153_2, this:r2153_1 -# 2153| mu2153_4(unknown) = ^CallSideEffect : ~m? -# 2153| v2153_5(void) = ^IndirectReadSideEffect[-1] : &:r2153_1, ~m? -# 2153| mu2153_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2153| r2153_7(bool) = Constant[0] : -# 2153| v2153_8(void) = ConditionalBranch : r2153_7 +# 35| Block 712 +# 35| r35_9955(glval) = VariableAddress[x711] : +# 35| mu35_9956(String) = Uninitialized[x711] : &:r35_9955 +# 35| r35_9957(glval) = FunctionAddress[String] : +# 35| v35_9958(void) = Call[String] : func:r35_9957, this:r35_9955 +# 35| mu35_9959(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9955 +# 35| r35_9961(glval) = VariableAddress[x711] : +# 35| r35_9962(glval) = FunctionAddress[~String] : +# 35| v35_9963(void) = Call[~String] : func:r35_9962, this:r35_9961 +# 35| mu35_9964(unknown) = ^CallSideEffect : ~m? +# 35| v35_9965(void) = ^IndirectReadSideEffect[-1] : &:r35_9961, ~m? +# 35| mu35_9966(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9961 +# 35| r35_9967(bool) = Constant[0] : +# 35| v35_9968(void) = ConditionalBranch : r35_9967 #-----| False -> Block 713 #-----| True (back edge) -> Block 712 -# 2155| Block 713 -# 2155| r2155_1(glval) = VariableAddress[x712] : -# 2155| mu2155_2(String) = Uninitialized[x712] : &:r2155_1 -# 2155| r2155_3(glval) = FunctionAddress[String] : -# 2155| v2155_4(void) = Call[String] : func:r2155_3, this:r2155_1 -# 2155| mu2155_5(unknown) = ^CallSideEffect : ~m? -# 2155| mu2155_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 -# 2156| r2156_1(glval) = VariableAddress[x712] : -# 2156| r2156_2(glval) = FunctionAddress[~String] : -# 2156| v2156_3(void) = Call[~String] : func:r2156_2, this:r2156_1 -# 2156| mu2156_4(unknown) = ^CallSideEffect : ~m? -# 2156| v2156_5(void) = ^IndirectReadSideEffect[-1] : &:r2156_1, ~m? -# 2156| mu2156_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2156_1 -# 2156| r2156_7(bool) = Constant[0] : -# 2156| v2156_8(void) = ConditionalBranch : r2156_7 +# 35| Block 713 +# 35| r35_9969(glval) = VariableAddress[x712] : +# 35| mu35_9970(String) = Uninitialized[x712] : &:r35_9969 +# 35| r35_9971(glval) = FunctionAddress[String] : +# 35| v35_9972(void) = Call[String] : func:r35_9971, this:r35_9969 +# 35| mu35_9973(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9969 +# 35| r35_9975(glval) = VariableAddress[x712] : +# 35| r35_9976(glval) = FunctionAddress[~String] : +# 35| v35_9977(void) = Call[~String] : func:r35_9976, this:r35_9975 +# 35| mu35_9978(unknown) = ^CallSideEffect : ~m? +# 35| v35_9979(void) = ^IndirectReadSideEffect[-1] : &:r35_9975, ~m? +# 35| mu35_9980(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9975 +# 35| r35_9981(bool) = Constant[0] : +# 35| v35_9982(void) = ConditionalBranch : r35_9981 #-----| False -> Block 714 #-----| True (back edge) -> Block 713 -# 2158| Block 714 -# 2158| r2158_1(glval) = VariableAddress[x713] : -# 2158| mu2158_2(String) = Uninitialized[x713] : &:r2158_1 -# 2158| r2158_3(glval) = FunctionAddress[String] : -# 2158| v2158_4(void) = Call[String] : func:r2158_3, this:r2158_1 -# 2158| mu2158_5(unknown) = ^CallSideEffect : ~m? -# 2158| mu2158_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 -# 2159| r2159_1(glval) = VariableAddress[x713] : -# 2159| r2159_2(glval) = FunctionAddress[~String] : -# 2159| v2159_3(void) = Call[~String] : func:r2159_2, this:r2159_1 -# 2159| mu2159_4(unknown) = ^CallSideEffect : ~m? -# 2159| v2159_5(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, ~m? -# 2159| mu2159_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 -# 2159| r2159_7(bool) = Constant[0] : -# 2159| v2159_8(void) = ConditionalBranch : r2159_7 +# 35| Block 714 +# 35| r35_9983(glval) = VariableAddress[x713] : +# 35| mu35_9984(String) = Uninitialized[x713] : &:r35_9983 +# 35| r35_9985(glval) = FunctionAddress[String] : +# 35| v35_9986(void) = Call[String] : func:r35_9985, this:r35_9983 +# 35| mu35_9987(unknown) = ^CallSideEffect : ~m? +# 35| mu35_9988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9983 +# 35| r35_9989(glval) = VariableAddress[x713] : +# 35| r35_9990(glval) = FunctionAddress[~String] : +# 35| v35_9991(void) = Call[~String] : func:r35_9990, this:r35_9989 +# 35| mu35_9992(unknown) = ^CallSideEffect : ~m? +# 35| v35_9993(void) = ^IndirectReadSideEffect[-1] : &:r35_9989, ~m? +# 35| mu35_9994(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9989 +# 35| r35_9995(bool) = Constant[0] : +# 35| v35_9996(void) = ConditionalBranch : r35_9995 #-----| False -> Block 715 #-----| True (back edge) -> Block 714 -# 2161| Block 715 -# 2161| r2161_1(glval) = VariableAddress[x714] : -# 2161| mu2161_2(String) = Uninitialized[x714] : &:r2161_1 -# 2161| r2161_3(glval) = FunctionAddress[String] : -# 2161| v2161_4(void) = Call[String] : func:r2161_3, this:r2161_1 -# 2161| mu2161_5(unknown) = ^CallSideEffect : ~m? -# 2161| mu2161_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2161_1 -# 2162| r2162_1(glval) = VariableAddress[x714] : -# 2162| r2162_2(glval) = FunctionAddress[~String] : -# 2162| v2162_3(void) = Call[~String] : func:r2162_2, this:r2162_1 -# 2162| mu2162_4(unknown) = ^CallSideEffect : ~m? -# 2162| v2162_5(void) = ^IndirectReadSideEffect[-1] : &:r2162_1, ~m? -# 2162| mu2162_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2162_1 -# 2162| r2162_7(bool) = Constant[0] : -# 2162| v2162_8(void) = ConditionalBranch : r2162_7 +# 35| Block 715 +# 35| r35_9997(glval) = VariableAddress[x714] : +# 35| mu35_9998(String) = Uninitialized[x714] : &:r35_9997 +# 35| r35_9999(glval) = FunctionAddress[String] : +# 35| v35_10000(void) = Call[String] : func:r35_9999, this:r35_9997 +# 35| mu35_10001(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_9997 +# 35| r35_10003(glval) = VariableAddress[x714] : +# 35| r35_10004(glval) = FunctionAddress[~String] : +# 35| v35_10005(void) = Call[~String] : func:r35_10004, this:r35_10003 +# 35| mu35_10006(unknown) = ^CallSideEffect : ~m? +# 35| v35_10007(void) = ^IndirectReadSideEffect[-1] : &:r35_10003, ~m? +# 35| mu35_10008(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10003 +# 35| r35_10009(bool) = Constant[0] : +# 35| v35_10010(void) = ConditionalBranch : r35_10009 #-----| False -> Block 716 #-----| True (back edge) -> Block 715 -# 2164| Block 716 -# 2164| r2164_1(glval) = VariableAddress[x715] : -# 2164| mu2164_2(String) = Uninitialized[x715] : &:r2164_1 -# 2164| r2164_3(glval) = FunctionAddress[String] : -# 2164| v2164_4(void) = Call[String] : func:r2164_3, this:r2164_1 -# 2164| mu2164_5(unknown) = ^CallSideEffect : ~m? -# 2164| mu2164_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2164_1 -# 2165| r2165_1(glval) = VariableAddress[x715] : -# 2165| r2165_2(glval) = FunctionAddress[~String] : -# 2165| v2165_3(void) = Call[~String] : func:r2165_2, this:r2165_1 -# 2165| mu2165_4(unknown) = ^CallSideEffect : ~m? -# 2165| v2165_5(void) = ^IndirectReadSideEffect[-1] : &:r2165_1, ~m? -# 2165| mu2165_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2165_1 -# 2165| r2165_7(bool) = Constant[0] : -# 2165| v2165_8(void) = ConditionalBranch : r2165_7 +# 35| Block 716 +# 35| r35_10011(glval) = VariableAddress[x715] : +# 35| mu35_10012(String) = Uninitialized[x715] : &:r35_10011 +# 35| r35_10013(glval) = FunctionAddress[String] : +# 35| v35_10014(void) = Call[String] : func:r35_10013, this:r35_10011 +# 35| mu35_10015(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10011 +# 35| r35_10017(glval) = VariableAddress[x715] : +# 35| r35_10018(glval) = FunctionAddress[~String] : +# 35| v35_10019(void) = Call[~String] : func:r35_10018, this:r35_10017 +# 35| mu35_10020(unknown) = ^CallSideEffect : ~m? +# 35| v35_10021(void) = ^IndirectReadSideEffect[-1] : &:r35_10017, ~m? +# 35| mu35_10022(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10017 +# 35| r35_10023(bool) = Constant[0] : +# 35| v35_10024(void) = ConditionalBranch : r35_10023 #-----| False -> Block 717 #-----| True (back edge) -> Block 716 -# 2167| Block 717 -# 2167| r2167_1(glval) = VariableAddress[x716] : -# 2167| mu2167_2(String) = Uninitialized[x716] : &:r2167_1 -# 2167| r2167_3(glval) = FunctionAddress[String] : -# 2167| v2167_4(void) = Call[String] : func:r2167_3, this:r2167_1 -# 2167| mu2167_5(unknown) = ^CallSideEffect : ~m? -# 2167| mu2167_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2167_1 -# 2168| r2168_1(glval) = VariableAddress[x716] : -# 2168| r2168_2(glval) = FunctionAddress[~String] : -# 2168| v2168_3(void) = Call[~String] : func:r2168_2, this:r2168_1 -# 2168| mu2168_4(unknown) = ^CallSideEffect : ~m? -# 2168| v2168_5(void) = ^IndirectReadSideEffect[-1] : &:r2168_1, ~m? -# 2168| mu2168_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| r2168_7(bool) = Constant[0] : -# 2168| v2168_8(void) = ConditionalBranch : r2168_7 +# 35| Block 717 +# 35| r35_10025(glval) = VariableAddress[x716] : +# 35| mu35_10026(String) = Uninitialized[x716] : &:r35_10025 +# 35| r35_10027(glval) = FunctionAddress[String] : +# 35| v35_10028(void) = Call[String] : func:r35_10027, this:r35_10025 +# 35| mu35_10029(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10025 +# 35| r35_10031(glval) = VariableAddress[x716] : +# 35| r35_10032(glval) = FunctionAddress[~String] : +# 35| v35_10033(void) = Call[~String] : func:r35_10032, this:r35_10031 +# 35| mu35_10034(unknown) = ^CallSideEffect : ~m? +# 35| v35_10035(void) = ^IndirectReadSideEffect[-1] : &:r35_10031, ~m? +# 35| mu35_10036(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10031 +# 35| r35_10037(bool) = Constant[0] : +# 35| v35_10038(void) = ConditionalBranch : r35_10037 #-----| False -> Block 718 #-----| True (back edge) -> Block 717 -# 2170| Block 718 -# 2170| r2170_1(glval) = VariableAddress[x717] : -# 2170| mu2170_2(String) = Uninitialized[x717] : &:r2170_1 -# 2170| r2170_3(glval) = FunctionAddress[String] : -# 2170| v2170_4(void) = Call[String] : func:r2170_3, this:r2170_1 -# 2170| mu2170_5(unknown) = ^CallSideEffect : ~m? -# 2170| mu2170_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1 -# 2171| r2171_1(glval) = VariableAddress[x717] : -# 2171| r2171_2(glval) = FunctionAddress[~String] : -# 2171| v2171_3(void) = Call[~String] : func:r2171_2, this:r2171_1 -# 2171| mu2171_4(unknown) = ^CallSideEffect : ~m? -# 2171| v2171_5(void) = ^IndirectReadSideEffect[-1] : &:r2171_1, ~m? -# 2171| mu2171_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2171_1 -# 2171| r2171_7(bool) = Constant[0] : -# 2171| v2171_8(void) = ConditionalBranch : r2171_7 +# 35| Block 718 +# 35| r35_10039(glval) = VariableAddress[x717] : +# 35| mu35_10040(String) = Uninitialized[x717] : &:r35_10039 +# 35| r35_10041(glval) = FunctionAddress[String] : +# 35| v35_10042(void) = Call[String] : func:r35_10041, this:r35_10039 +# 35| mu35_10043(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10039 +# 35| r35_10045(glval) = VariableAddress[x717] : +# 35| r35_10046(glval) = FunctionAddress[~String] : +# 35| v35_10047(void) = Call[~String] : func:r35_10046, this:r35_10045 +# 35| mu35_10048(unknown) = ^CallSideEffect : ~m? +# 35| v35_10049(void) = ^IndirectReadSideEffect[-1] : &:r35_10045, ~m? +# 35| mu35_10050(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10045 +# 35| r35_10051(bool) = Constant[0] : +# 35| v35_10052(void) = ConditionalBranch : r35_10051 #-----| False -> Block 719 #-----| True (back edge) -> Block 718 -# 2173| Block 719 -# 2173| r2173_1(glval) = VariableAddress[x718] : -# 2173| mu2173_2(String) = Uninitialized[x718] : &:r2173_1 -# 2173| r2173_3(glval) = FunctionAddress[String] : -# 2173| v2173_4(void) = Call[String] : func:r2173_3, this:r2173_1 -# 2173| mu2173_5(unknown) = ^CallSideEffect : ~m? -# 2173| mu2173_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2173_1 -# 2174| r2174_1(glval) = VariableAddress[x718] : -# 2174| r2174_2(glval) = FunctionAddress[~String] : -# 2174| v2174_3(void) = Call[~String] : func:r2174_2, this:r2174_1 -# 2174| mu2174_4(unknown) = ^CallSideEffect : ~m? -# 2174| v2174_5(void) = ^IndirectReadSideEffect[-1] : &:r2174_1, ~m? -# 2174| mu2174_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2174_1 -# 2174| r2174_7(bool) = Constant[0] : -# 2174| v2174_8(void) = ConditionalBranch : r2174_7 +# 35| Block 719 +# 35| r35_10053(glval) = VariableAddress[x718] : +# 35| mu35_10054(String) = Uninitialized[x718] : &:r35_10053 +# 35| r35_10055(glval) = FunctionAddress[String] : +# 35| v35_10056(void) = Call[String] : func:r35_10055, this:r35_10053 +# 35| mu35_10057(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10053 +# 35| r35_10059(glval) = VariableAddress[x718] : +# 35| r35_10060(glval) = FunctionAddress[~String] : +# 35| v35_10061(void) = Call[~String] : func:r35_10060, this:r35_10059 +# 35| mu35_10062(unknown) = ^CallSideEffect : ~m? +# 35| v35_10063(void) = ^IndirectReadSideEffect[-1] : &:r35_10059, ~m? +# 35| mu35_10064(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10059 +# 35| r35_10065(bool) = Constant[0] : +# 35| v35_10066(void) = ConditionalBranch : r35_10065 #-----| False -> Block 720 #-----| True (back edge) -> Block 719 -# 2176| Block 720 -# 2176| r2176_1(glval) = VariableAddress[x719] : -# 2176| mu2176_2(String) = Uninitialized[x719] : &:r2176_1 -# 2176| r2176_3(glval) = FunctionAddress[String] : -# 2176| v2176_4(void) = Call[String] : func:r2176_3, this:r2176_1 -# 2176| mu2176_5(unknown) = ^CallSideEffect : ~m? -# 2176| mu2176_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2176_1 -# 2177| r2177_1(glval) = VariableAddress[x719] : -# 2177| r2177_2(glval) = FunctionAddress[~String] : -# 2177| v2177_3(void) = Call[~String] : func:r2177_2, this:r2177_1 -# 2177| mu2177_4(unknown) = ^CallSideEffect : ~m? -# 2177| v2177_5(void) = ^IndirectReadSideEffect[-1] : &:r2177_1, ~m? -# 2177| mu2177_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2177_1 -# 2177| r2177_7(bool) = Constant[0] : -# 2177| v2177_8(void) = ConditionalBranch : r2177_7 +# 35| Block 720 +# 35| r35_10067(glval) = VariableAddress[x719] : +# 35| mu35_10068(String) = Uninitialized[x719] : &:r35_10067 +# 35| r35_10069(glval) = FunctionAddress[String] : +# 35| v35_10070(void) = Call[String] : func:r35_10069, this:r35_10067 +# 35| mu35_10071(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10067 +# 35| r35_10073(glval) = VariableAddress[x719] : +# 35| r35_10074(glval) = FunctionAddress[~String] : +# 35| v35_10075(void) = Call[~String] : func:r35_10074, this:r35_10073 +# 35| mu35_10076(unknown) = ^CallSideEffect : ~m? +# 35| v35_10077(void) = ^IndirectReadSideEffect[-1] : &:r35_10073, ~m? +# 35| mu35_10078(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10073 +# 35| r35_10079(bool) = Constant[0] : +# 35| v35_10080(void) = ConditionalBranch : r35_10079 #-----| False -> Block 721 #-----| True (back edge) -> Block 720 -# 2179| Block 721 -# 2179| r2179_1(glval) = VariableAddress[x720] : -# 2179| mu2179_2(String) = Uninitialized[x720] : &:r2179_1 -# 2179| r2179_3(glval) = FunctionAddress[String] : -# 2179| v2179_4(void) = Call[String] : func:r2179_3, this:r2179_1 -# 2179| mu2179_5(unknown) = ^CallSideEffect : ~m? -# 2179| mu2179_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2179_1 -# 2180| r2180_1(glval) = VariableAddress[x720] : -# 2180| r2180_2(glval) = FunctionAddress[~String] : -# 2180| v2180_3(void) = Call[~String] : func:r2180_2, this:r2180_1 -# 2180| mu2180_4(unknown) = ^CallSideEffect : ~m? -# 2180| v2180_5(void) = ^IndirectReadSideEffect[-1] : &:r2180_1, ~m? -# 2180| mu2180_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2180_1 -# 2180| r2180_7(bool) = Constant[0] : -# 2180| v2180_8(void) = ConditionalBranch : r2180_7 +# 35| Block 721 +# 35| r35_10081(glval) = VariableAddress[x720] : +# 35| mu35_10082(String) = Uninitialized[x720] : &:r35_10081 +# 35| r35_10083(glval) = FunctionAddress[String] : +# 35| v35_10084(void) = Call[String] : func:r35_10083, this:r35_10081 +# 35| mu35_10085(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10081 +# 35| r35_10087(glval) = VariableAddress[x720] : +# 35| r35_10088(glval) = FunctionAddress[~String] : +# 35| v35_10089(void) = Call[~String] : func:r35_10088, this:r35_10087 +# 35| mu35_10090(unknown) = ^CallSideEffect : ~m? +# 35| v35_10091(void) = ^IndirectReadSideEffect[-1] : &:r35_10087, ~m? +# 35| mu35_10092(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10087 +# 35| r35_10093(bool) = Constant[0] : +# 35| v35_10094(void) = ConditionalBranch : r35_10093 #-----| False -> Block 722 #-----| True (back edge) -> Block 721 -# 2182| Block 722 -# 2182| r2182_1(glval) = VariableAddress[x721] : -# 2182| mu2182_2(String) = Uninitialized[x721] : &:r2182_1 -# 2182| r2182_3(glval) = FunctionAddress[String] : -# 2182| v2182_4(void) = Call[String] : func:r2182_3, this:r2182_1 -# 2182| mu2182_5(unknown) = ^CallSideEffect : ~m? -# 2182| mu2182_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2182_1 -# 2183| r2183_1(glval) = VariableAddress[x721] : -# 2183| r2183_2(glval) = FunctionAddress[~String] : -# 2183| v2183_3(void) = Call[~String] : func:r2183_2, this:r2183_1 -# 2183| mu2183_4(unknown) = ^CallSideEffect : ~m? -# 2183| v2183_5(void) = ^IndirectReadSideEffect[-1] : &:r2183_1, ~m? -# 2183| mu2183_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2183_1 -# 2183| r2183_7(bool) = Constant[0] : -# 2183| v2183_8(void) = ConditionalBranch : r2183_7 +# 35| Block 722 +# 35| r35_10095(glval) = VariableAddress[x721] : +# 35| mu35_10096(String) = Uninitialized[x721] : &:r35_10095 +# 35| r35_10097(glval) = FunctionAddress[String] : +# 35| v35_10098(void) = Call[String] : func:r35_10097, this:r35_10095 +# 35| mu35_10099(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10095 +# 35| r35_10101(glval) = VariableAddress[x721] : +# 35| r35_10102(glval) = FunctionAddress[~String] : +# 35| v35_10103(void) = Call[~String] : func:r35_10102, this:r35_10101 +# 35| mu35_10104(unknown) = ^CallSideEffect : ~m? +# 35| v35_10105(void) = ^IndirectReadSideEffect[-1] : &:r35_10101, ~m? +# 35| mu35_10106(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10101 +# 35| r35_10107(bool) = Constant[0] : +# 35| v35_10108(void) = ConditionalBranch : r35_10107 #-----| False -> Block 723 #-----| True (back edge) -> Block 722 -# 2185| Block 723 -# 2185| r2185_1(glval) = VariableAddress[x722] : -# 2185| mu2185_2(String) = Uninitialized[x722] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[String] : -# 2185| v2185_4(void) = Call[String] : func:r2185_3, this:r2185_1 -# 2185| mu2185_5(unknown) = ^CallSideEffect : ~m? -# 2185| mu2185_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2186| r2186_1(glval) = VariableAddress[x722] : -# 2186| r2186_2(glval) = FunctionAddress[~String] : -# 2186| v2186_3(void) = Call[~String] : func:r2186_2, this:r2186_1 -# 2186| mu2186_4(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_5(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, ~m? -# 2186| mu2186_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| r2186_7(bool) = Constant[0] : -# 2186| v2186_8(void) = ConditionalBranch : r2186_7 +# 35| Block 723 +# 35| r35_10109(glval) = VariableAddress[x722] : +# 35| mu35_10110(String) = Uninitialized[x722] : &:r35_10109 +# 35| r35_10111(glval) = FunctionAddress[String] : +# 35| v35_10112(void) = Call[String] : func:r35_10111, this:r35_10109 +# 35| mu35_10113(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10109 +# 35| r35_10115(glval) = VariableAddress[x722] : +# 35| r35_10116(glval) = FunctionAddress[~String] : +# 35| v35_10117(void) = Call[~String] : func:r35_10116, this:r35_10115 +# 35| mu35_10118(unknown) = ^CallSideEffect : ~m? +# 35| v35_10119(void) = ^IndirectReadSideEffect[-1] : &:r35_10115, ~m? +# 35| mu35_10120(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10115 +# 35| r35_10121(bool) = Constant[0] : +# 35| v35_10122(void) = ConditionalBranch : r35_10121 #-----| False -> Block 724 #-----| True (back edge) -> Block 723 -# 2188| Block 724 -# 2188| r2188_1(glval) = VariableAddress[x723] : -# 2188| mu2188_2(String) = Uninitialized[x723] : &:r2188_1 -# 2188| r2188_3(glval) = FunctionAddress[String] : -# 2188| v2188_4(void) = Call[String] : func:r2188_3, this:r2188_1 -# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? -# 2188| mu2188_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2188_1 -# 2189| r2189_1(glval) = VariableAddress[x723] : -# 2189| r2189_2(glval) = FunctionAddress[~String] : -# 2189| v2189_3(void) = Call[~String] : func:r2189_2, this:r2189_1 -# 2189| mu2189_4(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_5(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, ~m? -# 2189| mu2189_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 -# 2189| r2189_7(bool) = Constant[0] : -# 2189| v2189_8(void) = ConditionalBranch : r2189_7 +# 35| Block 724 +# 35| r35_10123(glval) = VariableAddress[x723] : +# 35| mu35_10124(String) = Uninitialized[x723] : &:r35_10123 +# 35| r35_10125(glval) = FunctionAddress[String] : +# 35| v35_10126(void) = Call[String] : func:r35_10125, this:r35_10123 +# 35| mu35_10127(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10123 +# 35| r35_10129(glval) = VariableAddress[x723] : +# 35| r35_10130(glval) = FunctionAddress[~String] : +# 35| v35_10131(void) = Call[~String] : func:r35_10130, this:r35_10129 +# 35| mu35_10132(unknown) = ^CallSideEffect : ~m? +# 35| v35_10133(void) = ^IndirectReadSideEffect[-1] : &:r35_10129, ~m? +# 35| mu35_10134(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10129 +# 35| r35_10135(bool) = Constant[0] : +# 35| v35_10136(void) = ConditionalBranch : r35_10135 #-----| False -> Block 725 #-----| True (back edge) -> Block 724 -# 2191| Block 725 -# 2191| r2191_1(glval) = VariableAddress[x724] : -# 2191| mu2191_2(String) = Uninitialized[x724] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[String] : -# 2191| v2191_4(void) = Call[String] : func:r2191_3, this:r2191_1 -# 2191| mu2191_5(unknown) = ^CallSideEffect : ~m? -# 2191| mu2191_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2192| r2192_1(glval) = VariableAddress[x724] : -# 2192| r2192_2(glval) = FunctionAddress[~String] : -# 2192| v2192_3(void) = Call[~String] : func:r2192_2, this:r2192_1 -# 2192| mu2192_4(unknown) = ^CallSideEffect : ~m? -# 2192| v2192_5(void) = ^IndirectReadSideEffect[-1] : &:r2192_1, ~m? -# 2192| mu2192_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2192_1 -# 2192| r2192_7(bool) = Constant[0] : -# 2192| v2192_8(void) = ConditionalBranch : r2192_7 +# 35| Block 725 +# 35| r35_10137(glval) = VariableAddress[x724] : +# 35| mu35_10138(String) = Uninitialized[x724] : &:r35_10137 +# 35| r35_10139(glval) = FunctionAddress[String] : +# 35| v35_10140(void) = Call[String] : func:r35_10139, this:r35_10137 +# 35| mu35_10141(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10137 +# 35| r35_10143(glval) = VariableAddress[x724] : +# 35| r35_10144(glval) = FunctionAddress[~String] : +# 35| v35_10145(void) = Call[~String] : func:r35_10144, this:r35_10143 +# 35| mu35_10146(unknown) = ^CallSideEffect : ~m? +# 35| v35_10147(void) = ^IndirectReadSideEffect[-1] : &:r35_10143, ~m? +# 35| mu35_10148(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10143 +# 35| r35_10149(bool) = Constant[0] : +# 35| v35_10150(void) = ConditionalBranch : r35_10149 #-----| False -> Block 726 #-----| True (back edge) -> Block 725 -# 2194| Block 726 -# 2194| r2194_1(glval) = VariableAddress[x725] : -# 2194| mu2194_2(String) = Uninitialized[x725] : &:r2194_1 -# 2194| r2194_3(glval) = FunctionAddress[String] : -# 2194| v2194_4(void) = Call[String] : func:r2194_3, this:r2194_1 -# 2194| mu2194_5(unknown) = ^CallSideEffect : ~m? -# 2194| mu2194_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2194_1 -# 2195| r2195_1(glval) = VariableAddress[x725] : -# 2195| r2195_2(glval) = FunctionAddress[~String] : -# 2195| v2195_3(void) = Call[~String] : func:r2195_2, this:r2195_1 -# 2195| mu2195_4(unknown) = ^CallSideEffect : ~m? -# 2195| v2195_5(void) = ^IndirectReadSideEffect[-1] : &:r2195_1, ~m? -# 2195| mu2195_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2195_1 -# 2195| r2195_7(bool) = Constant[0] : -# 2195| v2195_8(void) = ConditionalBranch : r2195_7 +# 35| Block 726 +# 35| r35_10151(glval) = VariableAddress[x725] : +# 35| mu35_10152(String) = Uninitialized[x725] : &:r35_10151 +# 35| r35_10153(glval) = FunctionAddress[String] : +# 35| v35_10154(void) = Call[String] : func:r35_10153, this:r35_10151 +# 35| mu35_10155(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10151 +# 35| r35_10157(glval) = VariableAddress[x725] : +# 35| r35_10158(glval) = FunctionAddress[~String] : +# 35| v35_10159(void) = Call[~String] : func:r35_10158, this:r35_10157 +# 35| mu35_10160(unknown) = ^CallSideEffect : ~m? +# 35| v35_10161(void) = ^IndirectReadSideEffect[-1] : &:r35_10157, ~m? +# 35| mu35_10162(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10157 +# 35| r35_10163(bool) = Constant[0] : +# 35| v35_10164(void) = ConditionalBranch : r35_10163 #-----| False -> Block 727 #-----| True (back edge) -> Block 726 -# 2197| Block 727 -# 2197| r2197_1(glval) = VariableAddress[x726] : -# 2197| mu2197_2(String) = Uninitialized[x726] : &:r2197_1 -# 2197| r2197_3(glval) = FunctionAddress[String] : -# 2197| v2197_4(void) = Call[String] : func:r2197_3, this:r2197_1 -# 2197| mu2197_5(unknown) = ^CallSideEffect : ~m? -# 2197| mu2197_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2197_1 -# 2198| r2198_1(glval) = VariableAddress[x726] : -# 2198| r2198_2(glval) = FunctionAddress[~String] : -# 2198| v2198_3(void) = Call[~String] : func:r2198_2, this:r2198_1 -# 2198| mu2198_4(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_5(void) = ^IndirectReadSideEffect[-1] : &:r2198_1, ~m? -# 2198| mu2198_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2198_1 -# 2198| r2198_7(bool) = Constant[0] : -# 2198| v2198_8(void) = ConditionalBranch : r2198_7 +# 35| Block 727 +# 35| r35_10165(glval) = VariableAddress[x726] : +# 35| mu35_10166(String) = Uninitialized[x726] : &:r35_10165 +# 35| r35_10167(glval) = FunctionAddress[String] : +# 35| v35_10168(void) = Call[String] : func:r35_10167, this:r35_10165 +# 35| mu35_10169(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10165 +# 35| r35_10171(glval) = VariableAddress[x726] : +# 35| r35_10172(glval) = FunctionAddress[~String] : +# 35| v35_10173(void) = Call[~String] : func:r35_10172, this:r35_10171 +# 35| mu35_10174(unknown) = ^CallSideEffect : ~m? +# 35| v35_10175(void) = ^IndirectReadSideEffect[-1] : &:r35_10171, ~m? +# 35| mu35_10176(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10171 +# 35| r35_10177(bool) = Constant[0] : +# 35| v35_10178(void) = ConditionalBranch : r35_10177 #-----| False -> Block 728 #-----| True (back edge) -> Block 727 -# 2200| Block 728 -# 2200| r2200_1(glval) = VariableAddress[x727] : -# 2200| mu2200_2(String) = Uninitialized[x727] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[String] : -# 2200| v2200_4(void) = Call[String] : func:r2200_3, this:r2200_1 -# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? -# 2200| mu2200_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2201| r2201_1(glval) = VariableAddress[x727] : -# 2201| r2201_2(glval) = FunctionAddress[~String] : -# 2201| v2201_3(void) = Call[~String] : func:r2201_2, this:r2201_1 -# 2201| mu2201_4(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_5(void) = ^IndirectReadSideEffect[-1] : &:r2201_1, ~m? -# 2201| mu2201_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| r2201_7(bool) = Constant[0] : -# 2201| v2201_8(void) = ConditionalBranch : r2201_7 +# 35| Block 728 +# 35| r35_10179(glval) = VariableAddress[x727] : +# 35| mu35_10180(String) = Uninitialized[x727] : &:r35_10179 +# 35| r35_10181(glval) = FunctionAddress[String] : +# 35| v35_10182(void) = Call[String] : func:r35_10181, this:r35_10179 +# 35| mu35_10183(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10179 +# 35| r35_10185(glval) = VariableAddress[x727] : +# 35| r35_10186(glval) = FunctionAddress[~String] : +# 35| v35_10187(void) = Call[~String] : func:r35_10186, this:r35_10185 +# 35| mu35_10188(unknown) = ^CallSideEffect : ~m? +# 35| v35_10189(void) = ^IndirectReadSideEffect[-1] : &:r35_10185, ~m? +# 35| mu35_10190(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10185 +# 35| r35_10191(bool) = Constant[0] : +# 35| v35_10192(void) = ConditionalBranch : r35_10191 #-----| False -> Block 729 #-----| True (back edge) -> Block 728 -# 2203| Block 729 -# 2203| r2203_1(glval) = VariableAddress[x728] : -# 2203| mu2203_2(String) = Uninitialized[x728] : &:r2203_1 -# 2203| r2203_3(glval) = FunctionAddress[String] : -# 2203| v2203_4(void) = Call[String] : func:r2203_3, this:r2203_1 -# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? -# 2203| mu2203_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 -# 2204| r2204_1(glval) = VariableAddress[x728] : -# 2204| r2204_2(glval) = FunctionAddress[~String] : -# 2204| v2204_3(void) = Call[~String] : func:r2204_2, this:r2204_1 -# 2204| mu2204_4(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_5(void) = ^IndirectReadSideEffect[-1] : &:r2204_1, ~m? -# 2204| mu2204_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| r2204_7(bool) = Constant[0] : -# 2204| v2204_8(void) = ConditionalBranch : r2204_7 +# 35| Block 729 +# 35| r35_10193(glval) = VariableAddress[x728] : +# 35| mu35_10194(String) = Uninitialized[x728] : &:r35_10193 +# 35| r35_10195(glval) = FunctionAddress[String] : +# 35| v35_10196(void) = Call[String] : func:r35_10195, this:r35_10193 +# 35| mu35_10197(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10193 +# 35| r35_10199(glval) = VariableAddress[x728] : +# 35| r35_10200(glval) = FunctionAddress[~String] : +# 35| v35_10201(void) = Call[~String] : func:r35_10200, this:r35_10199 +# 35| mu35_10202(unknown) = ^CallSideEffect : ~m? +# 35| v35_10203(void) = ^IndirectReadSideEffect[-1] : &:r35_10199, ~m? +# 35| mu35_10204(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10199 +# 35| r35_10205(bool) = Constant[0] : +# 35| v35_10206(void) = ConditionalBranch : r35_10205 #-----| False -> Block 730 #-----| True (back edge) -> Block 729 -# 2206| Block 730 -# 2206| r2206_1(glval) = VariableAddress[x729] : -# 2206| mu2206_2(String) = Uninitialized[x729] : &:r2206_1 -# 2206| r2206_3(glval) = FunctionAddress[String] : -# 2206| v2206_4(void) = Call[String] : func:r2206_3, this:r2206_1 -# 2206| mu2206_5(unknown) = ^CallSideEffect : ~m? -# 2206| mu2206_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2207| r2207_1(glval) = VariableAddress[x729] : -# 2207| r2207_2(glval) = FunctionAddress[~String] : -# 2207| v2207_3(void) = Call[~String] : func:r2207_2, this:r2207_1 -# 2207| mu2207_4(unknown) = ^CallSideEffect : ~m? -# 2207| v2207_5(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, ~m? -# 2207| mu2207_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 -# 2207| r2207_7(bool) = Constant[0] : -# 2207| v2207_8(void) = ConditionalBranch : r2207_7 +# 35| Block 730 +# 35| r35_10207(glval) = VariableAddress[x729] : +# 35| mu35_10208(String) = Uninitialized[x729] : &:r35_10207 +# 35| r35_10209(glval) = FunctionAddress[String] : +# 35| v35_10210(void) = Call[String] : func:r35_10209, this:r35_10207 +# 35| mu35_10211(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10207 +# 35| r35_10213(glval) = VariableAddress[x729] : +# 35| r35_10214(glval) = FunctionAddress[~String] : +# 35| v35_10215(void) = Call[~String] : func:r35_10214, this:r35_10213 +# 35| mu35_10216(unknown) = ^CallSideEffect : ~m? +# 35| v35_10217(void) = ^IndirectReadSideEffect[-1] : &:r35_10213, ~m? +# 35| mu35_10218(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10213 +# 35| r35_10219(bool) = Constant[0] : +# 35| v35_10220(void) = ConditionalBranch : r35_10219 #-----| False -> Block 731 #-----| True (back edge) -> Block 730 -# 2209| Block 731 -# 2209| r2209_1(glval) = VariableAddress[x730] : -# 2209| mu2209_2(String) = Uninitialized[x730] : &:r2209_1 -# 2209| r2209_3(glval) = FunctionAddress[String] : -# 2209| v2209_4(void) = Call[String] : func:r2209_3, this:r2209_1 -# 2209| mu2209_5(unknown) = ^CallSideEffect : ~m? -# 2209| mu2209_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2209_1 -# 2210| r2210_1(glval) = VariableAddress[x730] : -# 2210| r2210_2(glval) = FunctionAddress[~String] : -# 2210| v2210_3(void) = Call[~String] : func:r2210_2, this:r2210_1 -# 2210| mu2210_4(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_5(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, ~m? -# 2210| mu2210_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| r2210_7(bool) = Constant[0] : -# 2210| v2210_8(void) = ConditionalBranch : r2210_7 +# 35| Block 731 +# 35| r35_10221(glval) = VariableAddress[x730] : +# 35| mu35_10222(String) = Uninitialized[x730] : &:r35_10221 +# 35| r35_10223(glval) = FunctionAddress[String] : +# 35| v35_10224(void) = Call[String] : func:r35_10223, this:r35_10221 +# 35| mu35_10225(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10221 +# 35| r35_10227(glval) = VariableAddress[x730] : +# 35| r35_10228(glval) = FunctionAddress[~String] : +# 35| v35_10229(void) = Call[~String] : func:r35_10228, this:r35_10227 +# 35| mu35_10230(unknown) = ^CallSideEffect : ~m? +# 35| v35_10231(void) = ^IndirectReadSideEffect[-1] : &:r35_10227, ~m? +# 35| mu35_10232(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10227 +# 35| r35_10233(bool) = Constant[0] : +# 35| v35_10234(void) = ConditionalBranch : r35_10233 #-----| False -> Block 732 #-----| True (back edge) -> Block 731 -# 2212| Block 732 -# 2212| r2212_1(glval) = VariableAddress[x731] : -# 2212| mu2212_2(String) = Uninitialized[x731] : &:r2212_1 -# 2212| r2212_3(glval) = FunctionAddress[String] : -# 2212| v2212_4(void) = Call[String] : func:r2212_3, this:r2212_1 -# 2212| mu2212_5(unknown) = ^CallSideEffect : ~m? -# 2212| mu2212_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2212_1 -# 2213| r2213_1(glval) = VariableAddress[x731] : -# 2213| r2213_2(glval) = FunctionAddress[~String] : -# 2213| v2213_3(void) = Call[~String] : func:r2213_2, this:r2213_1 -# 2213| mu2213_4(unknown) = ^CallSideEffect : ~m? -# 2213| v2213_5(void) = ^IndirectReadSideEffect[-1] : &:r2213_1, ~m? -# 2213| mu2213_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2213_1 -# 2213| r2213_7(bool) = Constant[0] : -# 2213| v2213_8(void) = ConditionalBranch : r2213_7 +# 35| Block 732 +# 35| r35_10235(glval) = VariableAddress[x731] : +# 35| mu35_10236(String) = Uninitialized[x731] : &:r35_10235 +# 35| r35_10237(glval) = FunctionAddress[String] : +# 35| v35_10238(void) = Call[String] : func:r35_10237, this:r35_10235 +# 35| mu35_10239(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10235 +# 35| r35_10241(glval) = VariableAddress[x731] : +# 35| r35_10242(glval) = FunctionAddress[~String] : +# 35| v35_10243(void) = Call[~String] : func:r35_10242, this:r35_10241 +# 35| mu35_10244(unknown) = ^CallSideEffect : ~m? +# 35| v35_10245(void) = ^IndirectReadSideEffect[-1] : &:r35_10241, ~m? +# 35| mu35_10246(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10241 +# 35| r35_10247(bool) = Constant[0] : +# 35| v35_10248(void) = ConditionalBranch : r35_10247 #-----| False -> Block 733 #-----| True (back edge) -> Block 732 -# 2215| Block 733 -# 2215| r2215_1(glval) = VariableAddress[x732] : -# 2215| mu2215_2(String) = Uninitialized[x732] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[String] : -# 2215| v2215_4(void) = Call[String] : func:r2215_3, this:r2215_1 -# 2215| mu2215_5(unknown) = ^CallSideEffect : ~m? -# 2215| mu2215_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2216| r2216_1(glval) = VariableAddress[x732] : -# 2216| r2216_2(glval) = FunctionAddress[~String] : -# 2216| v2216_3(void) = Call[~String] : func:r2216_2, this:r2216_1 -# 2216| mu2216_4(unknown) = ^CallSideEffect : ~m? -# 2216| v2216_5(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, ~m? -# 2216| mu2216_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2216| r2216_7(bool) = Constant[0] : -# 2216| v2216_8(void) = ConditionalBranch : r2216_7 +# 35| Block 733 +# 35| r35_10249(glval) = VariableAddress[x732] : +# 35| mu35_10250(String) = Uninitialized[x732] : &:r35_10249 +# 35| r35_10251(glval) = FunctionAddress[String] : +# 35| v35_10252(void) = Call[String] : func:r35_10251, this:r35_10249 +# 35| mu35_10253(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10249 +# 35| r35_10255(glval) = VariableAddress[x732] : +# 35| r35_10256(glval) = FunctionAddress[~String] : +# 35| v35_10257(void) = Call[~String] : func:r35_10256, this:r35_10255 +# 35| mu35_10258(unknown) = ^CallSideEffect : ~m? +# 35| v35_10259(void) = ^IndirectReadSideEffect[-1] : &:r35_10255, ~m? +# 35| mu35_10260(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10255 +# 35| r35_10261(bool) = Constant[0] : +# 35| v35_10262(void) = ConditionalBranch : r35_10261 #-----| False -> Block 734 #-----| True (back edge) -> Block 733 -# 2218| Block 734 -# 2218| r2218_1(glval) = VariableAddress[x733] : -# 2218| mu2218_2(String) = Uninitialized[x733] : &:r2218_1 -# 2218| r2218_3(glval) = FunctionAddress[String] : -# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 -# 2218| mu2218_5(unknown) = ^CallSideEffect : ~m? -# 2218| mu2218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2219| r2219_1(glval) = VariableAddress[x733] : -# 2219| r2219_2(glval) = FunctionAddress[~String] : -# 2219| v2219_3(void) = Call[~String] : func:r2219_2, this:r2219_1 -# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? -# 2219| mu2219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| r2219_7(bool) = Constant[0] : -# 2219| v2219_8(void) = ConditionalBranch : r2219_7 +# 35| Block 734 +# 35| r35_10263(glval) = VariableAddress[x733] : +# 35| mu35_10264(String) = Uninitialized[x733] : &:r35_10263 +# 35| r35_10265(glval) = FunctionAddress[String] : +# 35| v35_10266(void) = Call[String] : func:r35_10265, this:r35_10263 +# 35| mu35_10267(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10263 +# 35| r35_10269(glval) = VariableAddress[x733] : +# 35| r35_10270(glval) = FunctionAddress[~String] : +# 35| v35_10271(void) = Call[~String] : func:r35_10270, this:r35_10269 +# 35| mu35_10272(unknown) = ^CallSideEffect : ~m? +# 35| v35_10273(void) = ^IndirectReadSideEffect[-1] : &:r35_10269, ~m? +# 35| mu35_10274(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10269 +# 35| r35_10275(bool) = Constant[0] : +# 35| v35_10276(void) = ConditionalBranch : r35_10275 #-----| False -> Block 735 #-----| True (back edge) -> Block 734 -# 2221| Block 735 -# 2221| r2221_1(glval) = VariableAddress[x734] : -# 2221| mu2221_2(String) = Uninitialized[x734] : &:r2221_1 -# 2221| r2221_3(glval) = FunctionAddress[String] : -# 2221| v2221_4(void) = Call[String] : func:r2221_3, this:r2221_1 -# 2221| mu2221_5(unknown) = ^CallSideEffect : ~m? -# 2221| mu2221_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2221_1 -# 2222| r2222_1(glval) = VariableAddress[x734] : -# 2222| r2222_2(glval) = FunctionAddress[~String] : -# 2222| v2222_3(void) = Call[~String] : func:r2222_2, this:r2222_1 -# 2222| mu2222_4(unknown) = ^CallSideEffect : ~m? -# 2222| v2222_5(void) = ^IndirectReadSideEffect[-1] : &:r2222_1, ~m? -# 2222| mu2222_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2222| r2222_7(bool) = Constant[0] : -# 2222| v2222_8(void) = ConditionalBranch : r2222_7 +# 35| Block 735 +# 35| r35_10277(glval) = VariableAddress[x734] : +# 35| mu35_10278(String) = Uninitialized[x734] : &:r35_10277 +# 35| r35_10279(glval) = FunctionAddress[String] : +# 35| v35_10280(void) = Call[String] : func:r35_10279, this:r35_10277 +# 35| mu35_10281(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10277 +# 35| r35_10283(glval) = VariableAddress[x734] : +# 35| r35_10284(glval) = FunctionAddress[~String] : +# 35| v35_10285(void) = Call[~String] : func:r35_10284, this:r35_10283 +# 35| mu35_10286(unknown) = ^CallSideEffect : ~m? +# 35| v35_10287(void) = ^IndirectReadSideEffect[-1] : &:r35_10283, ~m? +# 35| mu35_10288(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10283 +# 35| r35_10289(bool) = Constant[0] : +# 35| v35_10290(void) = ConditionalBranch : r35_10289 #-----| False -> Block 736 #-----| True (back edge) -> Block 735 -# 2224| Block 736 -# 2224| r2224_1(glval) = VariableAddress[x735] : -# 2224| mu2224_2(String) = Uninitialized[x735] : &:r2224_1 -# 2224| r2224_3(glval) = FunctionAddress[String] : -# 2224| v2224_4(void) = Call[String] : func:r2224_3, this:r2224_1 -# 2224| mu2224_5(unknown) = ^CallSideEffect : ~m? -# 2224| mu2224_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 -# 2225| r2225_1(glval) = VariableAddress[x735] : -# 2225| r2225_2(glval) = FunctionAddress[~String] : -# 2225| v2225_3(void) = Call[~String] : func:r2225_2, this:r2225_1 -# 2225| mu2225_4(unknown) = ^CallSideEffect : ~m? -# 2225| v2225_5(void) = ^IndirectReadSideEffect[-1] : &:r2225_1, ~m? -# 2225| mu2225_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2225_1 -# 2225| r2225_7(bool) = Constant[0] : -# 2225| v2225_8(void) = ConditionalBranch : r2225_7 +# 35| Block 736 +# 35| r35_10291(glval) = VariableAddress[x735] : +# 35| mu35_10292(String) = Uninitialized[x735] : &:r35_10291 +# 35| r35_10293(glval) = FunctionAddress[String] : +# 35| v35_10294(void) = Call[String] : func:r35_10293, this:r35_10291 +# 35| mu35_10295(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10291 +# 35| r35_10297(glval) = VariableAddress[x735] : +# 35| r35_10298(glval) = FunctionAddress[~String] : +# 35| v35_10299(void) = Call[~String] : func:r35_10298, this:r35_10297 +# 35| mu35_10300(unknown) = ^CallSideEffect : ~m? +# 35| v35_10301(void) = ^IndirectReadSideEffect[-1] : &:r35_10297, ~m? +# 35| mu35_10302(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10297 +# 35| r35_10303(bool) = Constant[0] : +# 35| v35_10304(void) = ConditionalBranch : r35_10303 #-----| False -> Block 737 #-----| True (back edge) -> Block 736 -# 2227| Block 737 -# 2227| r2227_1(glval) = VariableAddress[x736] : -# 2227| mu2227_2(String) = Uninitialized[x736] : &:r2227_1 -# 2227| r2227_3(glval) = FunctionAddress[String] : -# 2227| v2227_4(void) = Call[String] : func:r2227_3, this:r2227_1 -# 2227| mu2227_5(unknown) = ^CallSideEffect : ~m? -# 2227| mu2227_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2227_1 -# 2228| r2228_1(glval) = VariableAddress[x736] : -# 2228| r2228_2(glval) = FunctionAddress[~String] : -# 2228| v2228_3(void) = Call[~String] : func:r2228_2, this:r2228_1 -# 2228| mu2228_4(unknown) = ^CallSideEffect : ~m? -# 2228| v2228_5(void) = ^IndirectReadSideEffect[-1] : &:r2228_1, ~m? -# 2228| mu2228_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2228_1 -# 2228| r2228_7(bool) = Constant[0] : -# 2228| v2228_8(void) = ConditionalBranch : r2228_7 +# 35| Block 737 +# 35| r35_10305(glval) = VariableAddress[x736] : +# 35| mu35_10306(String) = Uninitialized[x736] : &:r35_10305 +# 35| r35_10307(glval) = FunctionAddress[String] : +# 35| v35_10308(void) = Call[String] : func:r35_10307, this:r35_10305 +# 35| mu35_10309(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10305 +# 35| r35_10311(glval) = VariableAddress[x736] : +# 35| r35_10312(glval) = FunctionAddress[~String] : +# 35| v35_10313(void) = Call[~String] : func:r35_10312, this:r35_10311 +# 35| mu35_10314(unknown) = ^CallSideEffect : ~m? +# 35| v35_10315(void) = ^IndirectReadSideEffect[-1] : &:r35_10311, ~m? +# 35| mu35_10316(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10311 +# 35| r35_10317(bool) = Constant[0] : +# 35| v35_10318(void) = ConditionalBranch : r35_10317 #-----| False -> Block 738 #-----| True (back edge) -> Block 737 -# 2230| Block 738 -# 2230| r2230_1(glval) = VariableAddress[x737] : -# 2230| mu2230_2(String) = Uninitialized[x737] : &:r2230_1 -# 2230| r2230_3(glval) = FunctionAddress[String] : -# 2230| v2230_4(void) = Call[String] : func:r2230_3, this:r2230_1 -# 2230| mu2230_5(unknown) = ^CallSideEffect : ~m? -# 2230| mu2230_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 -# 2231| r2231_1(glval) = VariableAddress[x737] : -# 2231| r2231_2(glval) = FunctionAddress[~String] : -# 2231| v2231_3(void) = Call[~String] : func:r2231_2, this:r2231_1 -# 2231| mu2231_4(unknown) = ^CallSideEffect : ~m? -# 2231| v2231_5(void) = ^IndirectReadSideEffect[-1] : &:r2231_1, ~m? -# 2231| mu2231_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 -# 2231| r2231_7(bool) = Constant[0] : -# 2231| v2231_8(void) = ConditionalBranch : r2231_7 +# 35| Block 738 +# 35| r35_10319(glval) = VariableAddress[x737] : +# 35| mu35_10320(String) = Uninitialized[x737] : &:r35_10319 +# 35| r35_10321(glval) = FunctionAddress[String] : +# 35| v35_10322(void) = Call[String] : func:r35_10321, this:r35_10319 +# 35| mu35_10323(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10319 +# 35| r35_10325(glval) = VariableAddress[x737] : +# 35| r35_10326(glval) = FunctionAddress[~String] : +# 35| v35_10327(void) = Call[~String] : func:r35_10326, this:r35_10325 +# 35| mu35_10328(unknown) = ^CallSideEffect : ~m? +# 35| v35_10329(void) = ^IndirectReadSideEffect[-1] : &:r35_10325, ~m? +# 35| mu35_10330(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10325 +# 35| r35_10331(bool) = Constant[0] : +# 35| v35_10332(void) = ConditionalBranch : r35_10331 #-----| False -> Block 739 #-----| True (back edge) -> Block 738 -# 2233| Block 739 -# 2233| r2233_1(glval) = VariableAddress[x738] : -# 2233| mu2233_2(String) = Uninitialized[x738] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[String] : -# 2233| v2233_4(void) = Call[String] : func:r2233_3, this:r2233_1 -# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? -# 2233| mu2233_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2234| r2234_1(glval) = VariableAddress[x738] : -# 2234| r2234_2(glval) = FunctionAddress[~String] : -# 2234| v2234_3(void) = Call[~String] : func:r2234_2, this:r2234_1 -# 2234| mu2234_4(unknown) = ^CallSideEffect : ~m? -# 2234| v2234_5(void) = ^IndirectReadSideEffect[-1] : &:r2234_1, ~m? -# 2234| mu2234_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 -# 2234| r2234_7(bool) = Constant[0] : -# 2234| v2234_8(void) = ConditionalBranch : r2234_7 +# 35| Block 739 +# 35| r35_10333(glval) = VariableAddress[x738] : +# 35| mu35_10334(String) = Uninitialized[x738] : &:r35_10333 +# 35| r35_10335(glval) = FunctionAddress[String] : +# 35| v35_10336(void) = Call[String] : func:r35_10335, this:r35_10333 +# 35| mu35_10337(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10333 +# 35| r35_10339(glval) = VariableAddress[x738] : +# 35| r35_10340(glval) = FunctionAddress[~String] : +# 35| v35_10341(void) = Call[~String] : func:r35_10340, this:r35_10339 +# 35| mu35_10342(unknown) = ^CallSideEffect : ~m? +# 35| v35_10343(void) = ^IndirectReadSideEffect[-1] : &:r35_10339, ~m? +# 35| mu35_10344(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10339 +# 35| r35_10345(bool) = Constant[0] : +# 35| v35_10346(void) = ConditionalBranch : r35_10345 #-----| False -> Block 740 #-----| True (back edge) -> Block 739 -# 2236| Block 740 -# 2236| r2236_1(glval) = VariableAddress[x739] : -# 2236| mu2236_2(String) = Uninitialized[x739] : &:r2236_1 -# 2236| r2236_3(glval) = FunctionAddress[String] : -# 2236| v2236_4(void) = Call[String] : func:r2236_3, this:r2236_1 -# 2236| mu2236_5(unknown) = ^CallSideEffect : ~m? -# 2236| mu2236_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 -# 2237| r2237_1(glval) = VariableAddress[x739] : -# 2237| r2237_2(glval) = FunctionAddress[~String] : -# 2237| v2237_3(void) = Call[~String] : func:r2237_2, this:r2237_1 -# 2237| mu2237_4(unknown) = ^CallSideEffect : ~m? -# 2237| v2237_5(void) = ^IndirectReadSideEffect[-1] : &:r2237_1, ~m? -# 2237| mu2237_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2237_1 -# 2237| r2237_7(bool) = Constant[0] : -# 2237| v2237_8(void) = ConditionalBranch : r2237_7 +# 35| Block 740 +# 35| r35_10347(glval) = VariableAddress[x739] : +# 35| mu35_10348(String) = Uninitialized[x739] : &:r35_10347 +# 35| r35_10349(glval) = FunctionAddress[String] : +# 35| v35_10350(void) = Call[String] : func:r35_10349, this:r35_10347 +# 35| mu35_10351(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10347 +# 35| r35_10353(glval) = VariableAddress[x739] : +# 35| r35_10354(glval) = FunctionAddress[~String] : +# 35| v35_10355(void) = Call[~String] : func:r35_10354, this:r35_10353 +# 35| mu35_10356(unknown) = ^CallSideEffect : ~m? +# 35| v35_10357(void) = ^IndirectReadSideEffect[-1] : &:r35_10353, ~m? +# 35| mu35_10358(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10353 +# 35| r35_10359(bool) = Constant[0] : +# 35| v35_10360(void) = ConditionalBranch : r35_10359 #-----| False -> Block 741 #-----| True (back edge) -> Block 740 -# 2239| Block 741 -# 2239| r2239_1(glval) = VariableAddress[x740] : -# 2239| mu2239_2(String) = Uninitialized[x740] : &:r2239_1 -# 2239| r2239_3(glval) = FunctionAddress[String] : -# 2239| v2239_4(void) = Call[String] : func:r2239_3, this:r2239_1 -# 2239| mu2239_5(unknown) = ^CallSideEffect : ~m? -# 2239| mu2239_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2239_1 -# 2240| r2240_1(glval) = VariableAddress[x740] : -# 2240| r2240_2(glval) = FunctionAddress[~String] : -# 2240| v2240_3(void) = Call[~String] : func:r2240_2, this:r2240_1 -# 2240| mu2240_4(unknown) = ^CallSideEffect : ~m? -# 2240| v2240_5(void) = ^IndirectReadSideEffect[-1] : &:r2240_1, ~m? -# 2240| mu2240_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2240_1 -# 2240| r2240_7(bool) = Constant[0] : -# 2240| v2240_8(void) = ConditionalBranch : r2240_7 +# 35| Block 741 +# 35| r35_10361(glval) = VariableAddress[x740] : +# 35| mu35_10362(String) = Uninitialized[x740] : &:r35_10361 +# 35| r35_10363(glval) = FunctionAddress[String] : +# 35| v35_10364(void) = Call[String] : func:r35_10363, this:r35_10361 +# 35| mu35_10365(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10361 +# 35| r35_10367(glval) = VariableAddress[x740] : +# 35| r35_10368(glval) = FunctionAddress[~String] : +# 35| v35_10369(void) = Call[~String] : func:r35_10368, this:r35_10367 +# 35| mu35_10370(unknown) = ^CallSideEffect : ~m? +# 35| v35_10371(void) = ^IndirectReadSideEffect[-1] : &:r35_10367, ~m? +# 35| mu35_10372(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10367 +# 35| r35_10373(bool) = Constant[0] : +# 35| v35_10374(void) = ConditionalBranch : r35_10373 #-----| False -> Block 742 #-----| True (back edge) -> Block 741 -# 2242| Block 742 -# 2242| r2242_1(glval) = VariableAddress[x741] : -# 2242| mu2242_2(String) = Uninitialized[x741] : &:r2242_1 -# 2242| r2242_3(glval) = FunctionAddress[String] : -# 2242| v2242_4(void) = Call[String] : func:r2242_3, this:r2242_1 -# 2242| mu2242_5(unknown) = ^CallSideEffect : ~m? -# 2242| mu2242_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 -# 2243| r2243_1(glval) = VariableAddress[x741] : -# 2243| r2243_2(glval) = FunctionAddress[~String] : -# 2243| v2243_3(void) = Call[~String] : func:r2243_2, this:r2243_1 -# 2243| mu2243_4(unknown) = ^CallSideEffect : ~m? -# 2243| v2243_5(void) = ^IndirectReadSideEffect[-1] : &:r2243_1, ~m? -# 2243| mu2243_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2243_1 -# 2243| r2243_7(bool) = Constant[0] : -# 2243| v2243_8(void) = ConditionalBranch : r2243_7 +# 35| Block 742 +# 35| r35_10375(glval) = VariableAddress[x741] : +# 35| mu35_10376(String) = Uninitialized[x741] : &:r35_10375 +# 35| r35_10377(glval) = FunctionAddress[String] : +# 35| v35_10378(void) = Call[String] : func:r35_10377, this:r35_10375 +# 35| mu35_10379(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10375 +# 35| r35_10381(glval) = VariableAddress[x741] : +# 35| r35_10382(glval) = FunctionAddress[~String] : +# 35| v35_10383(void) = Call[~String] : func:r35_10382, this:r35_10381 +# 35| mu35_10384(unknown) = ^CallSideEffect : ~m? +# 35| v35_10385(void) = ^IndirectReadSideEffect[-1] : &:r35_10381, ~m? +# 35| mu35_10386(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10381 +# 35| r35_10387(bool) = Constant[0] : +# 35| v35_10388(void) = ConditionalBranch : r35_10387 #-----| False -> Block 743 #-----| True (back edge) -> Block 742 -# 2245| Block 743 -# 2245| r2245_1(glval) = VariableAddress[x742] : -# 2245| mu2245_2(String) = Uninitialized[x742] : &:r2245_1 -# 2245| r2245_3(glval) = FunctionAddress[String] : -# 2245| v2245_4(void) = Call[String] : func:r2245_3, this:r2245_1 -# 2245| mu2245_5(unknown) = ^CallSideEffect : ~m? -# 2245| mu2245_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2245_1 -# 2246| r2246_1(glval) = VariableAddress[x742] : -# 2246| r2246_2(glval) = FunctionAddress[~String] : -# 2246| v2246_3(void) = Call[~String] : func:r2246_2, this:r2246_1 -# 2246| mu2246_4(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_5(void) = ^IndirectReadSideEffect[-1] : &:r2246_1, ~m? -# 2246| mu2246_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 -# 2246| r2246_7(bool) = Constant[0] : -# 2246| v2246_8(void) = ConditionalBranch : r2246_7 +# 35| Block 743 +# 35| r35_10389(glval) = VariableAddress[x742] : +# 35| mu35_10390(String) = Uninitialized[x742] : &:r35_10389 +# 35| r35_10391(glval) = FunctionAddress[String] : +# 35| v35_10392(void) = Call[String] : func:r35_10391, this:r35_10389 +# 35| mu35_10393(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10389 +# 35| r35_10395(glval) = VariableAddress[x742] : +# 35| r35_10396(glval) = FunctionAddress[~String] : +# 35| v35_10397(void) = Call[~String] : func:r35_10396, this:r35_10395 +# 35| mu35_10398(unknown) = ^CallSideEffect : ~m? +# 35| v35_10399(void) = ^IndirectReadSideEffect[-1] : &:r35_10395, ~m? +# 35| mu35_10400(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10395 +# 35| r35_10401(bool) = Constant[0] : +# 35| v35_10402(void) = ConditionalBranch : r35_10401 #-----| False -> Block 744 #-----| True (back edge) -> Block 743 -# 2248| Block 744 -# 2248| r2248_1(glval) = VariableAddress[x743] : -# 2248| mu2248_2(String) = Uninitialized[x743] : &:r2248_1 -# 2248| r2248_3(glval) = FunctionAddress[String] : -# 2248| v2248_4(void) = Call[String] : func:r2248_3, this:r2248_1 -# 2248| mu2248_5(unknown) = ^CallSideEffect : ~m? -# 2248| mu2248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 -# 2249| r2249_1(glval) = VariableAddress[x743] : -# 2249| r2249_2(glval) = FunctionAddress[~String] : -# 2249| v2249_3(void) = Call[~String] : func:r2249_2, this:r2249_1 -# 2249| mu2249_4(unknown) = ^CallSideEffect : ~m? -# 2249| v2249_5(void) = ^IndirectReadSideEffect[-1] : &:r2249_1, ~m? -# 2249| mu2249_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2249| r2249_7(bool) = Constant[0] : -# 2249| v2249_8(void) = ConditionalBranch : r2249_7 +# 35| Block 744 +# 35| r35_10403(glval) = VariableAddress[x743] : +# 35| mu35_10404(String) = Uninitialized[x743] : &:r35_10403 +# 35| r35_10405(glval) = FunctionAddress[String] : +# 35| v35_10406(void) = Call[String] : func:r35_10405, this:r35_10403 +# 35| mu35_10407(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10403 +# 35| r35_10409(glval) = VariableAddress[x743] : +# 35| r35_10410(glval) = FunctionAddress[~String] : +# 35| v35_10411(void) = Call[~String] : func:r35_10410, this:r35_10409 +# 35| mu35_10412(unknown) = ^CallSideEffect : ~m? +# 35| v35_10413(void) = ^IndirectReadSideEffect[-1] : &:r35_10409, ~m? +# 35| mu35_10414(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10409 +# 35| r35_10415(bool) = Constant[0] : +# 35| v35_10416(void) = ConditionalBranch : r35_10415 #-----| False -> Block 745 #-----| True (back edge) -> Block 744 -# 2251| Block 745 -# 2251| r2251_1(glval) = VariableAddress[x744] : -# 2251| mu2251_2(String) = Uninitialized[x744] : &:r2251_1 -# 2251| r2251_3(glval) = FunctionAddress[String] : -# 2251| v2251_4(void) = Call[String] : func:r2251_3, this:r2251_1 -# 2251| mu2251_5(unknown) = ^CallSideEffect : ~m? -# 2251| mu2251_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2251_1 -# 2252| r2252_1(glval) = VariableAddress[x744] : -# 2252| r2252_2(glval) = FunctionAddress[~String] : -# 2252| v2252_3(void) = Call[~String] : func:r2252_2, this:r2252_1 -# 2252| mu2252_4(unknown) = ^CallSideEffect : ~m? -# 2252| v2252_5(void) = ^IndirectReadSideEffect[-1] : &:r2252_1, ~m? -# 2252| mu2252_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2252_1 -# 2252| r2252_7(bool) = Constant[0] : -# 2252| v2252_8(void) = ConditionalBranch : r2252_7 +# 35| Block 745 +# 35| r35_10417(glval) = VariableAddress[x744] : +# 35| mu35_10418(String) = Uninitialized[x744] : &:r35_10417 +# 35| r35_10419(glval) = FunctionAddress[String] : +# 35| v35_10420(void) = Call[String] : func:r35_10419, this:r35_10417 +# 35| mu35_10421(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10417 +# 35| r35_10423(glval) = VariableAddress[x744] : +# 35| r35_10424(glval) = FunctionAddress[~String] : +# 35| v35_10425(void) = Call[~String] : func:r35_10424, this:r35_10423 +# 35| mu35_10426(unknown) = ^CallSideEffect : ~m? +# 35| v35_10427(void) = ^IndirectReadSideEffect[-1] : &:r35_10423, ~m? +# 35| mu35_10428(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10423 +# 35| r35_10429(bool) = Constant[0] : +# 35| v35_10430(void) = ConditionalBranch : r35_10429 #-----| False -> Block 746 #-----| True (back edge) -> Block 745 -# 2254| Block 746 -# 2254| r2254_1(glval) = VariableAddress[x745] : -# 2254| mu2254_2(String) = Uninitialized[x745] : &:r2254_1 -# 2254| r2254_3(glval) = FunctionAddress[String] : -# 2254| v2254_4(void) = Call[String] : func:r2254_3, this:r2254_1 -# 2254| mu2254_5(unknown) = ^CallSideEffect : ~m? -# 2254| mu2254_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2254_1 -# 2255| r2255_1(glval) = VariableAddress[x745] : -# 2255| r2255_2(glval) = FunctionAddress[~String] : -# 2255| v2255_3(void) = Call[~String] : func:r2255_2, this:r2255_1 -# 2255| mu2255_4(unknown) = ^CallSideEffect : ~m? -# 2255| v2255_5(void) = ^IndirectReadSideEffect[-1] : &:r2255_1, ~m? -# 2255| mu2255_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2255_1 -# 2255| r2255_7(bool) = Constant[0] : -# 2255| v2255_8(void) = ConditionalBranch : r2255_7 +# 35| Block 746 +# 35| r35_10431(glval) = VariableAddress[x745] : +# 35| mu35_10432(String) = Uninitialized[x745] : &:r35_10431 +# 35| r35_10433(glval) = FunctionAddress[String] : +# 35| v35_10434(void) = Call[String] : func:r35_10433, this:r35_10431 +# 35| mu35_10435(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10431 +# 35| r35_10437(glval) = VariableAddress[x745] : +# 35| r35_10438(glval) = FunctionAddress[~String] : +# 35| v35_10439(void) = Call[~String] : func:r35_10438, this:r35_10437 +# 35| mu35_10440(unknown) = ^CallSideEffect : ~m? +# 35| v35_10441(void) = ^IndirectReadSideEffect[-1] : &:r35_10437, ~m? +# 35| mu35_10442(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10437 +# 35| r35_10443(bool) = Constant[0] : +# 35| v35_10444(void) = ConditionalBranch : r35_10443 #-----| False -> Block 747 #-----| True (back edge) -> Block 746 -# 2257| Block 747 -# 2257| r2257_1(glval) = VariableAddress[x746] : -# 2257| mu2257_2(String) = Uninitialized[x746] : &:r2257_1 -# 2257| r2257_3(glval) = FunctionAddress[String] : -# 2257| v2257_4(void) = Call[String] : func:r2257_3, this:r2257_1 -# 2257| mu2257_5(unknown) = ^CallSideEffect : ~m? -# 2257| mu2257_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2257_1 -# 2258| r2258_1(glval) = VariableAddress[x746] : -# 2258| r2258_2(glval) = FunctionAddress[~String] : -# 2258| v2258_3(void) = Call[~String] : func:r2258_2, this:r2258_1 -# 2258| mu2258_4(unknown) = ^CallSideEffect : ~m? -# 2258| v2258_5(void) = ^IndirectReadSideEffect[-1] : &:r2258_1, ~m? -# 2258| mu2258_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2258_1 -# 2258| r2258_7(bool) = Constant[0] : -# 2258| v2258_8(void) = ConditionalBranch : r2258_7 +# 35| Block 747 +# 35| r35_10445(glval) = VariableAddress[x746] : +# 35| mu35_10446(String) = Uninitialized[x746] : &:r35_10445 +# 35| r35_10447(glval) = FunctionAddress[String] : +# 35| v35_10448(void) = Call[String] : func:r35_10447, this:r35_10445 +# 35| mu35_10449(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10445 +# 35| r35_10451(glval) = VariableAddress[x746] : +# 35| r35_10452(glval) = FunctionAddress[~String] : +# 35| v35_10453(void) = Call[~String] : func:r35_10452, this:r35_10451 +# 35| mu35_10454(unknown) = ^CallSideEffect : ~m? +# 35| v35_10455(void) = ^IndirectReadSideEffect[-1] : &:r35_10451, ~m? +# 35| mu35_10456(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10451 +# 35| r35_10457(bool) = Constant[0] : +# 35| v35_10458(void) = ConditionalBranch : r35_10457 #-----| False -> Block 748 #-----| True (back edge) -> Block 747 -# 2260| Block 748 -# 2260| r2260_1(glval) = VariableAddress[x747] : -# 2260| mu2260_2(String) = Uninitialized[x747] : &:r2260_1 -# 2260| r2260_3(glval) = FunctionAddress[String] : -# 2260| v2260_4(void) = Call[String] : func:r2260_3, this:r2260_1 -# 2260| mu2260_5(unknown) = ^CallSideEffect : ~m? -# 2260| mu2260_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2260_1 -# 2261| r2261_1(glval) = VariableAddress[x747] : -# 2261| r2261_2(glval) = FunctionAddress[~String] : -# 2261| v2261_3(void) = Call[~String] : func:r2261_2, this:r2261_1 -# 2261| mu2261_4(unknown) = ^CallSideEffect : ~m? -# 2261| v2261_5(void) = ^IndirectReadSideEffect[-1] : &:r2261_1, ~m? -# 2261| mu2261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2261| r2261_7(bool) = Constant[0] : -# 2261| v2261_8(void) = ConditionalBranch : r2261_7 +# 35| Block 748 +# 35| r35_10459(glval) = VariableAddress[x747] : +# 35| mu35_10460(String) = Uninitialized[x747] : &:r35_10459 +# 35| r35_10461(glval) = FunctionAddress[String] : +# 35| v35_10462(void) = Call[String] : func:r35_10461, this:r35_10459 +# 35| mu35_10463(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10459 +# 35| r35_10465(glval) = VariableAddress[x747] : +# 35| r35_10466(glval) = FunctionAddress[~String] : +# 35| v35_10467(void) = Call[~String] : func:r35_10466, this:r35_10465 +# 35| mu35_10468(unknown) = ^CallSideEffect : ~m? +# 35| v35_10469(void) = ^IndirectReadSideEffect[-1] : &:r35_10465, ~m? +# 35| mu35_10470(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10465 +# 35| r35_10471(bool) = Constant[0] : +# 35| v35_10472(void) = ConditionalBranch : r35_10471 #-----| False -> Block 749 #-----| True (back edge) -> Block 748 -# 2263| Block 749 -# 2263| r2263_1(glval) = VariableAddress[x748] : -# 2263| mu2263_2(String) = Uninitialized[x748] : &:r2263_1 -# 2263| r2263_3(glval) = FunctionAddress[String] : -# 2263| v2263_4(void) = Call[String] : func:r2263_3, this:r2263_1 -# 2263| mu2263_5(unknown) = ^CallSideEffect : ~m? -# 2263| mu2263_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 -# 2264| r2264_1(glval) = VariableAddress[x748] : -# 2264| r2264_2(glval) = FunctionAddress[~String] : -# 2264| v2264_3(void) = Call[~String] : func:r2264_2, this:r2264_1 -# 2264| mu2264_4(unknown) = ^CallSideEffect : ~m? -# 2264| v2264_5(void) = ^IndirectReadSideEffect[-1] : &:r2264_1, ~m? -# 2264| mu2264_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2264_1 -# 2264| r2264_7(bool) = Constant[0] : -# 2264| v2264_8(void) = ConditionalBranch : r2264_7 +# 35| Block 749 +# 35| r35_10473(glval) = VariableAddress[x748] : +# 35| mu35_10474(String) = Uninitialized[x748] : &:r35_10473 +# 35| r35_10475(glval) = FunctionAddress[String] : +# 35| v35_10476(void) = Call[String] : func:r35_10475, this:r35_10473 +# 35| mu35_10477(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10473 +# 35| r35_10479(glval) = VariableAddress[x748] : +# 35| r35_10480(glval) = FunctionAddress[~String] : +# 35| v35_10481(void) = Call[~String] : func:r35_10480, this:r35_10479 +# 35| mu35_10482(unknown) = ^CallSideEffect : ~m? +# 35| v35_10483(void) = ^IndirectReadSideEffect[-1] : &:r35_10479, ~m? +# 35| mu35_10484(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10479 +# 35| r35_10485(bool) = Constant[0] : +# 35| v35_10486(void) = ConditionalBranch : r35_10485 #-----| False -> Block 750 #-----| True (back edge) -> Block 749 -# 2266| Block 750 -# 2266| r2266_1(glval) = VariableAddress[x749] : -# 2266| mu2266_2(String) = Uninitialized[x749] : &:r2266_1 -# 2266| r2266_3(glval) = FunctionAddress[String] : -# 2266| v2266_4(void) = Call[String] : func:r2266_3, this:r2266_1 -# 2266| mu2266_5(unknown) = ^CallSideEffect : ~m? -# 2266| mu2266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2267| r2267_1(glval) = VariableAddress[x749] : -# 2267| r2267_2(glval) = FunctionAddress[~String] : -# 2267| v2267_3(void) = Call[~String] : func:r2267_2, this:r2267_1 -# 2267| mu2267_4(unknown) = ^CallSideEffect : ~m? -# 2267| v2267_5(void) = ^IndirectReadSideEffect[-1] : &:r2267_1, ~m? -# 2267| mu2267_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2267_1 -# 2267| r2267_7(bool) = Constant[0] : -# 2267| v2267_8(void) = ConditionalBranch : r2267_7 +# 35| Block 750 +# 35| r35_10487(glval) = VariableAddress[x749] : +# 35| mu35_10488(String) = Uninitialized[x749] : &:r35_10487 +# 35| r35_10489(glval) = FunctionAddress[String] : +# 35| v35_10490(void) = Call[String] : func:r35_10489, this:r35_10487 +# 35| mu35_10491(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10487 +# 35| r35_10493(glval) = VariableAddress[x749] : +# 35| r35_10494(glval) = FunctionAddress[~String] : +# 35| v35_10495(void) = Call[~String] : func:r35_10494, this:r35_10493 +# 35| mu35_10496(unknown) = ^CallSideEffect : ~m? +# 35| v35_10497(void) = ^IndirectReadSideEffect[-1] : &:r35_10493, ~m? +# 35| mu35_10498(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10493 +# 35| r35_10499(bool) = Constant[0] : +# 35| v35_10500(void) = ConditionalBranch : r35_10499 #-----| False -> Block 751 #-----| True (back edge) -> Block 750 -# 2269| Block 751 -# 2269| r2269_1(glval) = VariableAddress[x750] : -# 2269| mu2269_2(String) = Uninitialized[x750] : &:r2269_1 -# 2269| r2269_3(glval) = FunctionAddress[String] : -# 2269| v2269_4(void) = Call[String] : func:r2269_3, this:r2269_1 -# 2269| mu2269_5(unknown) = ^CallSideEffect : ~m? -# 2269| mu2269_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2269_1 -# 2270| r2270_1(glval) = VariableAddress[x750] : -# 2270| r2270_2(glval) = FunctionAddress[~String] : -# 2270| v2270_3(void) = Call[~String] : func:r2270_2, this:r2270_1 -# 2270| mu2270_4(unknown) = ^CallSideEffect : ~m? -# 2270| v2270_5(void) = ^IndirectReadSideEffect[-1] : &:r2270_1, ~m? -# 2270| mu2270_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2270_1 -# 2270| r2270_7(bool) = Constant[0] : -# 2270| v2270_8(void) = ConditionalBranch : r2270_7 +# 35| Block 751 +# 35| r35_10501(glval) = VariableAddress[x750] : +# 35| mu35_10502(String) = Uninitialized[x750] : &:r35_10501 +# 35| r35_10503(glval) = FunctionAddress[String] : +# 35| v35_10504(void) = Call[String] : func:r35_10503, this:r35_10501 +# 35| mu35_10505(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10501 +# 35| r35_10507(glval) = VariableAddress[x750] : +# 35| r35_10508(glval) = FunctionAddress[~String] : +# 35| v35_10509(void) = Call[~String] : func:r35_10508, this:r35_10507 +# 35| mu35_10510(unknown) = ^CallSideEffect : ~m? +# 35| v35_10511(void) = ^IndirectReadSideEffect[-1] : &:r35_10507, ~m? +# 35| mu35_10512(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10507 +# 35| r35_10513(bool) = Constant[0] : +# 35| v35_10514(void) = ConditionalBranch : r35_10513 #-----| False -> Block 752 #-----| True (back edge) -> Block 751 -# 2272| Block 752 -# 2272| r2272_1(glval) = VariableAddress[x751] : -# 2272| mu2272_2(String) = Uninitialized[x751] : &:r2272_1 -# 2272| r2272_3(glval) = FunctionAddress[String] : -# 2272| v2272_4(void) = Call[String] : func:r2272_3, this:r2272_1 -# 2272| mu2272_5(unknown) = ^CallSideEffect : ~m? -# 2272| mu2272_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2272_1 -# 2273| r2273_1(glval) = VariableAddress[x751] : -# 2273| r2273_2(glval) = FunctionAddress[~String] : -# 2273| v2273_3(void) = Call[~String] : func:r2273_2, this:r2273_1 -# 2273| mu2273_4(unknown) = ^CallSideEffect : ~m? -# 2273| v2273_5(void) = ^IndirectReadSideEffect[-1] : &:r2273_1, ~m? -# 2273| mu2273_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2273_1 -# 2273| r2273_7(bool) = Constant[0] : -# 2273| v2273_8(void) = ConditionalBranch : r2273_7 +# 35| Block 752 +# 35| r35_10515(glval) = VariableAddress[x751] : +# 35| mu35_10516(String) = Uninitialized[x751] : &:r35_10515 +# 35| r35_10517(glval) = FunctionAddress[String] : +# 35| v35_10518(void) = Call[String] : func:r35_10517, this:r35_10515 +# 35| mu35_10519(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10515 +# 35| r35_10521(glval) = VariableAddress[x751] : +# 35| r35_10522(glval) = FunctionAddress[~String] : +# 35| v35_10523(void) = Call[~String] : func:r35_10522, this:r35_10521 +# 35| mu35_10524(unknown) = ^CallSideEffect : ~m? +# 35| v35_10525(void) = ^IndirectReadSideEffect[-1] : &:r35_10521, ~m? +# 35| mu35_10526(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10521 +# 35| r35_10527(bool) = Constant[0] : +# 35| v35_10528(void) = ConditionalBranch : r35_10527 #-----| False -> Block 753 #-----| True (back edge) -> Block 752 -# 2275| Block 753 -# 2275| r2275_1(glval) = VariableAddress[x752] : -# 2275| mu2275_2(String) = Uninitialized[x752] : &: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[x752] : -# 2276| r2276_2(glval) = FunctionAddress[~String] : -# 2276| v2276_3(void) = Call[~String] : func:r2276_2, this:r2276_1 -# 2276| mu2276_4(unknown) = ^CallSideEffect : ~m? -# 2276| v2276_5(void) = ^IndirectReadSideEffect[-1] : &:r2276_1, ~m? -# 2276| mu2276_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2276_1 -# 2276| r2276_7(bool) = Constant[0] : -# 2276| v2276_8(void) = ConditionalBranch : r2276_7 +# 35| Block 753 +# 35| r35_10529(glval) = VariableAddress[x752] : +# 35| mu35_10530(String) = Uninitialized[x752] : &:r35_10529 +# 35| r35_10531(glval) = FunctionAddress[String] : +# 35| v35_10532(void) = Call[String] : func:r35_10531, this:r35_10529 +# 35| mu35_10533(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10529 +# 35| r35_10535(glval) = VariableAddress[x752] : +# 35| r35_10536(glval) = FunctionAddress[~String] : +# 35| v35_10537(void) = Call[~String] : func:r35_10536, this:r35_10535 +# 35| mu35_10538(unknown) = ^CallSideEffect : ~m? +# 35| v35_10539(void) = ^IndirectReadSideEffect[-1] : &:r35_10535, ~m? +# 35| mu35_10540(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10535 +# 35| r35_10541(bool) = Constant[0] : +# 35| v35_10542(void) = ConditionalBranch : r35_10541 #-----| False -> Block 754 #-----| True (back edge) -> Block 753 -# 2278| Block 754 -# 2278| r2278_1(glval) = VariableAddress[x753] : -# 2278| mu2278_2(String) = Uninitialized[x753] : &: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[x753] : -# 2279| r2279_2(glval) = FunctionAddress[~String] : -# 2279| v2279_3(void) = Call[~String] : func:r2279_2, this:r2279_1 -# 2279| mu2279_4(unknown) = ^CallSideEffect : ~m? -# 2279| v2279_5(void) = ^IndirectReadSideEffect[-1] : &:r2279_1, ~m? -# 2279| mu2279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 -# 2279| r2279_7(bool) = Constant[0] : -# 2279| v2279_8(void) = ConditionalBranch : r2279_7 +# 35| Block 754 +# 35| r35_10543(glval) = VariableAddress[x753] : +# 35| mu35_10544(String) = Uninitialized[x753] : &:r35_10543 +# 35| r35_10545(glval) = FunctionAddress[String] : +# 35| v35_10546(void) = Call[String] : func:r35_10545, this:r35_10543 +# 35| mu35_10547(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10543 +# 35| r35_10549(glval) = VariableAddress[x753] : +# 35| r35_10550(glval) = FunctionAddress[~String] : +# 35| v35_10551(void) = Call[~String] : func:r35_10550, this:r35_10549 +# 35| mu35_10552(unknown) = ^CallSideEffect : ~m? +# 35| v35_10553(void) = ^IndirectReadSideEffect[-1] : &:r35_10549, ~m? +# 35| mu35_10554(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10549 +# 35| r35_10555(bool) = Constant[0] : +# 35| v35_10556(void) = ConditionalBranch : r35_10555 #-----| False -> Block 755 #-----| True (back edge) -> Block 754 -# 2281| Block 755 -# 2281| r2281_1(glval) = VariableAddress[x754] : -# 2281| mu2281_2(String) = Uninitialized[x754] : &:r2281_1 -# 2281| r2281_3(glval) = FunctionAddress[String] : -# 2281| v2281_4(void) = Call[String] : func:r2281_3, this:r2281_1 -# 2281| mu2281_5(unknown) = ^CallSideEffect : ~m? -# 2281| mu2281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 -# 2282| r2282_1(glval) = VariableAddress[x754] : -# 2282| r2282_2(glval) = FunctionAddress[~String] : -# 2282| v2282_3(void) = Call[~String] : func:r2282_2, this:r2282_1 -# 2282| mu2282_4(unknown) = ^CallSideEffect : ~m? -# 2282| v2282_5(void) = ^IndirectReadSideEffect[-1] : &:r2282_1, ~m? -# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2282| r2282_7(bool) = Constant[0] : -# 2282| v2282_8(void) = ConditionalBranch : r2282_7 +# 35| Block 755 +# 35| r35_10557(glval) = VariableAddress[x754] : +# 35| mu35_10558(String) = Uninitialized[x754] : &:r35_10557 +# 35| r35_10559(glval) = FunctionAddress[String] : +# 35| v35_10560(void) = Call[String] : func:r35_10559, this:r35_10557 +# 35| mu35_10561(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10557 +# 35| r35_10563(glval) = VariableAddress[x754] : +# 35| r35_10564(glval) = FunctionAddress[~String] : +# 35| v35_10565(void) = Call[~String] : func:r35_10564, this:r35_10563 +# 35| mu35_10566(unknown) = ^CallSideEffect : ~m? +# 35| v35_10567(void) = ^IndirectReadSideEffect[-1] : &:r35_10563, ~m? +# 35| mu35_10568(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10563 +# 35| r35_10569(bool) = Constant[0] : +# 35| v35_10570(void) = ConditionalBranch : r35_10569 #-----| False -> Block 756 #-----| True (back edge) -> Block 755 -# 2284| Block 756 -# 2284| r2284_1(glval) = VariableAddress[x755] : -# 2284| mu2284_2(String) = Uninitialized[x755] : &: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| r2285_1(glval) = VariableAddress[x755] : -# 2285| r2285_2(glval) = FunctionAddress[~String] : -# 2285| v2285_3(void) = Call[~String] : func:r2285_2, this:r2285_1 -# 2285| mu2285_4(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_5(void) = ^IndirectReadSideEffect[-1] : &:r2285_1, ~m? -# 2285| mu2285_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_1 -# 2285| r2285_7(bool) = Constant[0] : -# 2285| v2285_8(void) = ConditionalBranch : r2285_7 +# 35| Block 756 +# 35| r35_10571(glval) = VariableAddress[x755] : +# 35| mu35_10572(String) = Uninitialized[x755] : &:r35_10571 +# 35| r35_10573(glval) = FunctionAddress[String] : +# 35| v35_10574(void) = Call[String] : func:r35_10573, this:r35_10571 +# 35| mu35_10575(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10571 +# 35| r35_10577(glval) = VariableAddress[x755] : +# 35| r35_10578(glval) = FunctionAddress[~String] : +# 35| v35_10579(void) = Call[~String] : func:r35_10578, this:r35_10577 +# 35| mu35_10580(unknown) = ^CallSideEffect : ~m? +# 35| v35_10581(void) = ^IndirectReadSideEffect[-1] : &:r35_10577, ~m? +# 35| mu35_10582(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10577 +# 35| r35_10583(bool) = Constant[0] : +# 35| v35_10584(void) = ConditionalBranch : r35_10583 #-----| False -> Block 757 #-----| True (back edge) -> Block 756 -# 2287| Block 757 -# 2287| r2287_1(glval) = VariableAddress[x756] : -# 2287| mu2287_2(String) = Uninitialized[x756] : &:r2287_1 -# 2287| r2287_3(glval) = FunctionAddress[String] : -# 2287| v2287_4(void) = Call[String] : func:r2287_3, this:r2287_1 -# 2287| mu2287_5(unknown) = ^CallSideEffect : ~m? -# 2287| mu2287_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2287_1 -# 2288| r2288_1(glval) = VariableAddress[x756] : -# 2288| r2288_2(glval) = FunctionAddress[~String] : -# 2288| v2288_3(void) = Call[~String] : func:r2288_2, this:r2288_1 -# 2288| mu2288_4(unknown) = ^CallSideEffect : ~m? -# 2288| v2288_5(void) = ^IndirectReadSideEffect[-1] : &:r2288_1, ~m? -# 2288| mu2288_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2288_1 -# 2288| r2288_7(bool) = Constant[0] : -# 2288| v2288_8(void) = ConditionalBranch : r2288_7 +# 35| Block 757 +# 35| r35_10585(glval) = VariableAddress[x756] : +# 35| mu35_10586(String) = Uninitialized[x756] : &:r35_10585 +# 35| r35_10587(glval) = FunctionAddress[String] : +# 35| v35_10588(void) = Call[String] : func:r35_10587, this:r35_10585 +# 35| mu35_10589(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10585 +# 35| r35_10591(glval) = VariableAddress[x756] : +# 35| r35_10592(glval) = FunctionAddress[~String] : +# 35| v35_10593(void) = Call[~String] : func:r35_10592, this:r35_10591 +# 35| mu35_10594(unknown) = ^CallSideEffect : ~m? +# 35| v35_10595(void) = ^IndirectReadSideEffect[-1] : &:r35_10591, ~m? +# 35| mu35_10596(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10591 +# 35| r35_10597(bool) = Constant[0] : +# 35| v35_10598(void) = ConditionalBranch : r35_10597 #-----| False -> Block 758 #-----| True (back edge) -> Block 757 -# 2290| Block 758 -# 2290| r2290_1(glval) = VariableAddress[x757] : -# 2290| mu2290_2(String) = Uninitialized[x757] : &: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[x757] : -# 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 -# 2291| r2291_7(bool) = Constant[0] : -# 2291| v2291_8(void) = ConditionalBranch : r2291_7 +# 35| Block 758 +# 35| r35_10599(glval) = VariableAddress[x757] : +# 35| mu35_10600(String) = Uninitialized[x757] : &:r35_10599 +# 35| r35_10601(glval) = FunctionAddress[String] : +# 35| v35_10602(void) = Call[String] : func:r35_10601, this:r35_10599 +# 35| mu35_10603(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10599 +# 35| r35_10605(glval) = VariableAddress[x757] : +# 35| r35_10606(glval) = FunctionAddress[~String] : +# 35| v35_10607(void) = Call[~String] : func:r35_10606, this:r35_10605 +# 35| mu35_10608(unknown) = ^CallSideEffect : ~m? +# 35| v35_10609(void) = ^IndirectReadSideEffect[-1] : &:r35_10605, ~m? +# 35| mu35_10610(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10605 +# 35| r35_10611(bool) = Constant[0] : +# 35| v35_10612(void) = ConditionalBranch : r35_10611 #-----| False -> Block 759 #-----| True (back edge) -> Block 758 -# 2293| Block 759 -# 2293| r2293_1(glval) = VariableAddress[x758] : -# 2293| mu2293_2(String) = Uninitialized[x758] : &:r2293_1 -# 2293| r2293_3(glval) = FunctionAddress[String] : -# 2293| v2293_4(void) = Call[String] : func:r2293_3, this:r2293_1 -# 2293| mu2293_5(unknown) = ^CallSideEffect : ~m? -# 2293| mu2293_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_1 -# 2294| r2294_1(glval) = VariableAddress[x758] : -# 2294| r2294_2(glval) = FunctionAddress[~String] : -# 2294| v2294_3(void) = Call[~String] : func:r2294_2, this:r2294_1 -# 2294| mu2294_4(unknown) = ^CallSideEffect : ~m? -# 2294| v2294_5(void) = ^IndirectReadSideEffect[-1] : &:r2294_1, ~m? -# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2294| r2294_7(bool) = Constant[0] : -# 2294| v2294_8(void) = ConditionalBranch : r2294_7 +# 35| Block 759 +# 35| r35_10613(glval) = VariableAddress[x758] : +# 35| mu35_10614(String) = Uninitialized[x758] : &:r35_10613 +# 35| r35_10615(glval) = FunctionAddress[String] : +# 35| v35_10616(void) = Call[String] : func:r35_10615, this:r35_10613 +# 35| mu35_10617(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10613 +# 35| r35_10619(glval) = VariableAddress[x758] : +# 35| r35_10620(glval) = FunctionAddress[~String] : +# 35| v35_10621(void) = Call[~String] : func:r35_10620, this:r35_10619 +# 35| mu35_10622(unknown) = ^CallSideEffect : ~m? +# 35| v35_10623(void) = ^IndirectReadSideEffect[-1] : &:r35_10619, ~m? +# 35| mu35_10624(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10619 +# 35| r35_10625(bool) = Constant[0] : +# 35| v35_10626(void) = ConditionalBranch : r35_10625 #-----| False -> Block 760 #-----| True (back edge) -> Block 759 -# 2296| Block 760 -# 2296| r2296_1(glval) = VariableAddress[x759] : -# 2296| mu2296_2(String) = Uninitialized[x759] : &: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[x759] : -# 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 -# 2297| r2297_7(bool) = Constant[0] : -# 2297| v2297_8(void) = ConditionalBranch : r2297_7 +# 35| Block 760 +# 35| r35_10627(glval) = VariableAddress[x759] : +# 35| mu35_10628(String) = Uninitialized[x759] : &:r35_10627 +# 35| r35_10629(glval) = FunctionAddress[String] : +# 35| v35_10630(void) = Call[String] : func:r35_10629, this:r35_10627 +# 35| mu35_10631(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10627 +# 35| r35_10633(glval) = VariableAddress[x759] : +# 35| r35_10634(glval) = FunctionAddress[~String] : +# 35| v35_10635(void) = Call[~String] : func:r35_10634, this:r35_10633 +# 35| mu35_10636(unknown) = ^CallSideEffect : ~m? +# 35| v35_10637(void) = ^IndirectReadSideEffect[-1] : &:r35_10633, ~m? +# 35| mu35_10638(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10633 +# 35| r35_10639(bool) = Constant[0] : +# 35| v35_10640(void) = ConditionalBranch : r35_10639 #-----| False -> Block 761 #-----| True (back edge) -> Block 760 -# 2299| Block 761 -# 2299| r2299_1(glval) = VariableAddress[x760] : -# 2299| mu2299_2(String) = Uninitialized[x760] : &:r2299_1 -# 2299| r2299_3(glval) = FunctionAddress[String] : -# 2299| v2299_4(void) = Call[String] : func:r2299_3, this:r2299_1 -# 2299| mu2299_5(unknown) = ^CallSideEffect : ~m? -# 2299| mu2299_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_1 -# 2300| r2300_1(glval) = VariableAddress[x760] : -# 2300| r2300_2(glval) = FunctionAddress[~String] : -# 2300| v2300_3(void) = Call[~String] : func:r2300_2, this:r2300_1 -# 2300| mu2300_4(unknown) = ^CallSideEffect : ~m? -# 2300| v2300_5(void) = ^IndirectReadSideEffect[-1] : &:r2300_1, ~m? -# 2300| mu2300_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2300_1 -# 2300| r2300_7(bool) = Constant[0] : -# 2300| v2300_8(void) = ConditionalBranch : r2300_7 +# 35| Block 761 +# 35| r35_10641(glval) = VariableAddress[x760] : +# 35| mu35_10642(String) = Uninitialized[x760] : &:r35_10641 +# 35| r35_10643(glval) = FunctionAddress[String] : +# 35| v35_10644(void) = Call[String] : func:r35_10643, this:r35_10641 +# 35| mu35_10645(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10641 +# 35| r35_10647(glval) = VariableAddress[x760] : +# 35| r35_10648(glval) = FunctionAddress[~String] : +# 35| v35_10649(void) = Call[~String] : func:r35_10648, this:r35_10647 +# 35| mu35_10650(unknown) = ^CallSideEffect : ~m? +# 35| v35_10651(void) = ^IndirectReadSideEffect[-1] : &:r35_10647, ~m? +# 35| mu35_10652(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10647 +# 35| r35_10653(bool) = Constant[0] : +# 35| v35_10654(void) = ConditionalBranch : r35_10653 #-----| False -> Block 762 #-----| True (back edge) -> Block 761 -# 2302| Block 762 -# 2302| r2302_1(glval) = VariableAddress[x761] : -# 2302| mu2302_2(String) = Uninitialized[x761] : &:r2302_1 -# 2302| r2302_3(glval) = FunctionAddress[String] : -# 2302| v2302_4(void) = Call[String] : func:r2302_3, this:r2302_1 -# 2302| mu2302_5(unknown) = ^CallSideEffect : ~m? -# 2302| mu2302_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2302_1 -# 2303| r2303_1(glval) = VariableAddress[x761] : -# 2303| r2303_2(glval) = FunctionAddress[~String] : -# 2303| v2303_3(void) = Call[~String] : func:r2303_2, this:r2303_1 -# 2303| mu2303_4(unknown) = ^CallSideEffect : ~m? -# 2303| v2303_5(void) = ^IndirectReadSideEffect[-1] : &:r2303_1, ~m? -# 2303| mu2303_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 -# 2303| r2303_7(bool) = Constant[0] : -# 2303| v2303_8(void) = ConditionalBranch : r2303_7 +# 35| Block 762 +# 35| r35_10655(glval) = VariableAddress[x761] : +# 35| mu35_10656(String) = Uninitialized[x761] : &:r35_10655 +# 35| r35_10657(glval) = FunctionAddress[String] : +# 35| v35_10658(void) = Call[String] : func:r35_10657, this:r35_10655 +# 35| mu35_10659(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10655 +# 35| r35_10661(glval) = VariableAddress[x761] : +# 35| r35_10662(glval) = FunctionAddress[~String] : +# 35| v35_10663(void) = Call[~String] : func:r35_10662, this:r35_10661 +# 35| mu35_10664(unknown) = ^CallSideEffect : ~m? +# 35| v35_10665(void) = ^IndirectReadSideEffect[-1] : &:r35_10661, ~m? +# 35| mu35_10666(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10661 +# 35| r35_10667(bool) = Constant[0] : +# 35| v35_10668(void) = ConditionalBranch : r35_10667 #-----| False -> Block 763 #-----| True (back edge) -> Block 762 -# 2305| Block 763 -# 2305| r2305_1(glval) = VariableAddress[x762] : -# 2305| mu2305_2(String) = Uninitialized[x762] : &:r2305_1 -# 2305| r2305_3(glval) = FunctionAddress[String] : -# 2305| v2305_4(void) = Call[String] : func:r2305_3, this:r2305_1 -# 2305| mu2305_5(unknown) = ^CallSideEffect : ~m? -# 2305| mu2305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 -# 2306| r2306_1(glval) = VariableAddress[x762] : -# 2306| r2306_2(glval) = FunctionAddress[~String] : -# 2306| v2306_3(void) = Call[~String] : func:r2306_2, this:r2306_1 -# 2306| mu2306_4(unknown) = ^CallSideEffect : ~m? -# 2306| v2306_5(void) = ^IndirectReadSideEffect[-1] : &:r2306_1, ~m? -# 2306| mu2306_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2306_1 -# 2306| r2306_7(bool) = Constant[0] : -# 2306| v2306_8(void) = ConditionalBranch : r2306_7 +# 35| Block 763 +# 35| r35_10669(glval) = VariableAddress[x762] : +# 35| mu35_10670(String) = Uninitialized[x762] : &:r35_10669 +# 35| r35_10671(glval) = FunctionAddress[String] : +# 35| v35_10672(void) = Call[String] : func:r35_10671, this:r35_10669 +# 35| mu35_10673(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10669 +# 35| r35_10675(glval) = VariableAddress[x762] : +# 35| r35_10676(glval) = FunctionAddress[~String] : +# 35| v35_10677(void) = Call[~String] : func:r35_10676, this:r35_10675 +# 35| mu35_10678(unknown) = ^CallSideEffect : ~m? +# 35| v35_10679(void) = ^IndirectReadSideEffect[-1] : &:r35_10675, ~m? +# 35| mu35_10680(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10675 +# 35| r35_10681(bool) = Constant[0] : +# 35| v35_10682(void) = ConditionalBranch : r35_10681 #-----| False -> Block 764 #-----| True (back edge) -> Block 763 -# 2308| Block 764 -# 2308| r2308_1(glval) = VariableAddress[x763] : -# 2308| mu2308_2(String) = Uninitialized[x763] : &: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[x763] : -# 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 -# 2309| r2309_7(bool) = Constant[0] : -# 2309| v2309_8(void) = ConditionalBranch : r2309_7 +# 35| Block 764 +# 35| r35_10683(glval) = VariableAddress[x763] : +# 35| mu35_10684(String) = Uninitialized[x763] : &:r35_10683 +# 35| r35_10685(glval) = FunctionAddress[String] : +# 35| v35_10686(void) = Call[String] : func:r35_10685, this:r35_10683 +# 35| mu35_10687(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10683 +# 35| r35_10689(glval) = VariableAddress[x763] : +# 35| r35_10690(glval) = FunctionAddress[~String] : +# 35| v35_10691(void) = Call[~String] : func:r35_10690, this:r35_10689 +# 35| mu35_10692(unknown) = ^CallSideEffect : ~m? +# 35| v35_10693(void) = ^IndirectReadSideEffect[-1] : &:r35_10689, ~m? +# 35| mu35_10694(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10689 +# 35| r35_10695(bool) = Constant[0] : +# 35| v35_10696(void) = ConditionalBranch : r35_10695 #-----| False -> Block 765 #-----| True (back edge) -> Block 764 -# 2311| Block 765 -# 2311| r2311_1(glval) = VariableAddress[x764] : -# 2311| mu2311_2(String) = Uninitialized[x764] : &:r2311_1 -# 2311| r2311_3(glval) = FunctionAddress[String] : -# 2311| v2311_4(void) = Call[String] : func:r2311_3, this:r2311_1 -# 2311| mu2311_5(unknown) = ^CallSideEffect : ~m? -# 2311| mu2311_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 -# 2312| r2312_1(glval) = VariableAddress[x764] : -# 2312| r2312_2(glval) = FunctionAddress[~String] : -# 2312| v2312_3(void) = Call[~String] : func:r2312_2, this:r2312_1 -# 2312| mu2312_4(unknown) = ^CallSideEffect : ~m? -# 2312| v2312_5(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, ~m? -# 2312| mu2312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 -# 2312| r2312_7(bool) = Constant[0] : -# 2312| v2312_8(void) = ConditionalBranch : r2312_7 +# 35| Block 765 +# 35| r35_10697(glval) = VariableAddress[x764] : +# 35| mu35_10698(String) = Uninitialized[x764] : &:r35_10697 +# 35| r35_10699(glval) = FunctionAddress[String] : +# 35| v35_10700(void) = Call[String] : func:r35_10699, this:r35_10697 +# 35| mu35_10701(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10697 +# 35| r35_10703(glval) = VariableAddress[x764] : +# 35| r35_10704(glval) = FunctionAddress[~String] : +# 35| v35_10705(void) = Call[~String] : func:r35_10704, this:r35_10703 +# 35| mu35_10706(unknown) = ^CallSideEffect : ~m? +# 35| v35_10707(void) = ^IndirectReadSideEffect[-1] : &:r35_10703, ~m? +# 35| mu35_10708(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10703 +# 35| r35_10709(bool) = Constant[0] : +# 35| v35_10710(void) = ConditionalBranch : r35_10709 #-----| False -> Block 766 #-----| True (back edge) -> Block 765 -# 2314| Block 766 -# 2314| r2314_1(glval) = VariableAddress[x765] : -# 2314| mu2314_2(String) = Uninitialized[x765] : &:r2314_1 -# 2314| r2314_3(glval) = FunctionAddress[String] : -# 2314| v2314_4(void) = Call[String] : func:r2314_3, this:r2314_1 -# 2314| mu2314_5(unknown) = ^CallSideEffect : ~m? -# 2314| mu2314_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2314_1 -# 2315| r2315_1(glval) = VariableAddress[x765] : -# 2315| r2315_2(glval) = FunctionAddress[~String] : -# 2315| v2315_3(void) = Call[~String] : func:r2315_2, this:r2315_1 -# 2315| mu2315_4(unknown) = ^CallSideEffect : ~m? -# 2315| v2315_5(void) = ^IndirectReadSideEffect[-1] : &:r2315_1, ~m? -# 2315| mu2315_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2315_1 -# 2315| r2315_7(bool) = Constant[0] : -# 2315| v2315_8(void) = ConditionalBranch : r2315_7 +# 35| Block 766 +# 35| r35_10711(glval) = VariableAddress[x765] : +# 35| mu35_10712(String) = Uninitialized[x765] : &:r35_10711 +# 35| r35_10713(glval) = FunctionAddress[String] : +# 35| v35_10714(void) = Call[String] : func:r35_10713, this:r35_10711 +# 35| mu35_10715(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10711 +# 35| r35_10717(glval) = VariableAddress[x765] : +# 35| r35_10718(glval) = FunctionAddress[~String] : +# 35| v35_10719(void) = Call[~String] : func:r35_10718, this:r35_10717 +# 35| mu35_10720(unknown) = ^CallSideEffect : ~m? +# 35| v35_10721(void) = ^IndirectReadSideEffect[-1] : &:r35_10717, ~m? +# 35| mu35_10722(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10717 +# 35| r35_10723(bool) = Constant[0] : +# 35| v35_10724(void) = ConditionalBranch : r35_10723 #-----| False -> Block 767 #-----| True (back edge) -> Block 766 -# 2317| Block 767 -# 2317| r2317_1(glval) = VariableAddress[x766] : -# 2317| mu2317_2(String) = Uninitialized[x766] : &:r2317_1 -# 2317| r2317_3(glval) = FunctionAddress[String] : -# 2317| v2317_4(void) = Call[String] : func:r2317_3, this:r2317_1 -# 2317| mu2317_5(unknown) = ^CallSideEffect : ~m? -# 2317| mu2317_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 -# 2318| r2318_1(glval) = VariableAddress[x766] : -# 2318| r2318_2(glval) = FunctionAddress[~String] : -# 2318| v2318_3(void) = Call[~String] : func:r2318_2, this:r2318_1 -# 2318| mu2318_4(unknown) = ^CallSideEffect : ~m? -# 2318| v2318_5(void) = ^IndirectReadSideEffect[-1] : &:r2318_1, ~m? -# 2318| mu2318_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| r2318_7(bool) = Constant[0] : -# 2318| v2318_8(void) = ConditionalBranch : r2318_7 +# 35| Block 767 +# 35| r35_10725(glval) = VariableAddress[x766] : +# 35| mu35_10726(String) = Uninitialized[x766] : &:r35_10725 +# 35| r35_10727(glval) = FunctionAddress[String] : +# 35| v35_10728(void) = Call[String] : func:r35_10727, this:r35_10725 +# 35| mu35_10729(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10725 +# 35| r35_10731(glval) = VariableAddress[x766] : +# 35| r35_10732(glval) = FunctionAddress[~String] : +# 35| v35_10733(void) = Call[~String] : func:r35_10732, this:r35_10731 +# 35| mu35_10734(unknown) = ^CallSideEffect : ~m? +# 35| v35_10735(void) = ^IndirectReadSideEffect[-1] : &:r35_10731, ~m? +# 35| mu35_10736(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10731 +# 35| r35_10737(bool) = Constant[0] : +# 35| v35_10738(void) = ConditionalBranch : r35_10737 #-----| False -> Block 768 #-----| True (back edge) -> Block 767 -# 2320| Block 768 -# 2320| r2320_1(glval) = VariableAddress[x767] : -# 2320| mu2320_2(String) = Uninitialized[x767] : &:r2320_1 -# 2320| r2320_3(glval) = FunctionAddress[String] : -# 2320| v2320_4(void) = Call[String] : func:r2320_3, this:r2320_1 -# 2320| mu2320_5(unknown) = ^CallSideEffect : ~m? -# 2320| mu2320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -# 2321| r2321_1(glval) = VariableAddress[x767] : -# 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 -# 2321| r2321_7(bool) = Constant[0] : -# 2321| v2321_8(void) = ConditionalBranch : r2321_7 +# 35| Block 768 +# 35| r35_10739(glval) = VariableAddress[x767] : +# 35| mu35_10740(String) = Uninitialized[x767] : &:r35_10739 +# 35| r35_10741(glval) = FunctionAddress[String] : +# 35| v35_10742(void) = Call[String] : func:r35_10741, this:r35_10739 +# 35| mu35_10743(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10739 +# 35| r35_10745(glval) = VariableAddress[x767] : +# 35| r35_10746(glval) = FunctionAddress[~String] : +# 35| v35_10747(void) = Call[~String] : func:r35_10746, this:r35_10745 +# 35| mu35_10748(unknown) = ^CallSideEffect : ~m? +# 35| v35_10749(void) = ^IndirectReadSideEffect[-1] : &:r35_10745, ~m? +# 35| mu35_10750(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10745 +# 35| r35_10751(bool) = Constant[0] : +# 35| v35_10752(void) = ConditionalBranch : r35_10751 #-----| False -> Block 769 #-----| True (back edge) -> Block 768 -# 2323| Block 769 -# 2323| r2323_1(glval) = VariableAddress[x768] : -# 2323| mu2323_2(String) = Uninitialized[x768] : &:r2323_1 -# 2323| r2323_3(glval) = FunctionAddress[String] : -# 2323| v2323_4(void) = Call[String] : func:r2323_3, this:r2323_1 -# 2323| mu2323_5(unknown) = ^CallSideEffect : ~m? -# 2323| mu2323_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2323_1 -# 2324| r2324_1(glval) = VariableAddress[x768] : -# 2324| r2324_2(glval) = FunctionAddress[~String] : -# 2324| v2324_3(void) = Call[~String] : func:r2324_2, this:r2324_1 -# 2324| mu2324_4(unknown) = ^CallSideEffect : ~m? -# 2324| v2324_5(void) = ^IndirectReadSideEffect[-1] : &:r2324_1, ~m? -# 2324| mu2324_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2324_1 -# 2324| r2324_7(bool) = Constant[0] : -# 2324| v2324_8(void) = ConditionalBranch : r2324_7 +# 35| Block 769 +# 35| r35_10753(glval) = VariableAddress[x768] : +# 35| mu35_10754(String) = Uninitialized[x768] : &:r35_10753 +# 35| r35_10755(glval) = FunctionAddress[String] : +# 35| v35_10756(void) = Call[String] : func:r35_10755, this:r35_10753 +# 35| mu35_10757(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10753 +# 35| r35_10759(glval) = VariableAddress[x768] : +# 35| r35_10760(glval) = FunctionAddress[~String] : +# 35| v35_10761(void) = Call[~String] : func:r35_10760, this:r35_10759 +# 35| mu35_10762(unknown) = ^CallSideEffect : ~m? +# 35| v35_10763(void) = ^IndirectReadSideEffect[-1] : &:r35_10759, ~m? +# 35| mu35_10764(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10759 +# 35| r35_10765(bool) = Constant[0] : +# 35| v35_10766(void) = ConditionalBranch : r35_10765 #-----| False -> Block 770 #-----| True (back edge) -> Block 769 -# 2326| Block 770 -# 2326| r2326_1(glval) = VariableAddress[x769] : -# 2326| mu2326_2(String) = Uninitialized[x769] : &:r2326_1 -# 2326| r2326_3(glval) = FunctionAddress[String] : -# 2326| v2326_4(void) = Call[String] : func:r2326_3, this:r2326_1 -# 2326| mu2326_5(unknown) = ^CallSideEffect : ~m? -# 2326| mu2326_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2326_1 -# 2327| r2327_1(glval) = VariableAddress[x769] : -# 2327| r2327_2(glval) = FunctionAddress[~String] : -# 2327| v2327_3(void) = Call[~String] : func:r2327_2, this:r2327_1 -# 2327| mu2327_4(unknown) = ^CallSideEffect : ~m? -# 2327| v2327_5(void) = ^IndirectReadSideEffect[-1] : &:r2327_1, ~m? -# 2327| mu2327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 -# 2327| r2327_7(bool) = Constant[0] : -# 2327| v2327_8(void) = ConditionalBranch : r2327_7 +# 35| Block 770 +# 35| r35_10767(glval) = VariableAddress[x769] : +# 35| mu35_10768(String) = Uninitialized[x769] : &:r35_10767 +# 35| r35_10769(glval) = FunctionAddress[String] : +# 35| v35_10770(void) = Call[String] : func:r35_10769, this:r35_10767 +# 35| mu35_10771(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10767 +# 35| r35_10773(glval) = VariableAddress[x769] : +# 35| r35_10774(glval) = FunctionAddress[~String] : +# 35| v35_10775(void) = Call[~String] : func:r35_10774, this:r35_10773 +# 35| mu35_10776(unknown) = ^CallSideEffect : ~m? +# 35| v35_10777(void) = ^IndirectReadSideEffect[-1] : &:r35_10773, ~m? +# 35| mu35_10778(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10773 +# 35| r35_10779(bool) = Constant[0] : +# 35| v35_10780(void) = ConditionalBranch : r35_10779 #-----| False -> Block 771 #-----| True (back edge) -> Block 770 -# 2329| Block 771 -# 2329| r2329_1(glval) = VariableAddress[x770] : -# 2329| mu2329_2(String) = Uninitialized[x770] : &:r2329_1 -# 2329| r2329_3(glval) = FunctionAddress[String] : -# 2329| v2329_4(void) = Call[String] : func:r2329_3, this:r2329_1 -# 2329| mu2329_5(unknown) = ^CallSideEffect : ~m? -# 2329| mu2329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2329_1 -# 2330| r2330_1(glval) = VariableAddress[x770] : -# 2330| r2330_2(glval) = FunctionAddress[~String] : -# 2330| v2330_3(void) = Call[~String] : func:r2330_2, this:r2330_1 -# 2330| mu2330_4(unknown) = ^CallSideEffect : ~m? -# 2330| v2330_5(void) = ^IndirectReadSideEffect[-1] : &:r2330_1, ~m? -# 2330| mu2330_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2330_1 -# 2330| r2330_7(bool) = Constant[0] : -# 2330| v2330_8(void) = ConditionalBranch : r2330_7 +# 35| Block 771 +# 35| r35_10781(glval) = VariableAddress[x770] : +# 35| mu35_10782(String) = Uninitialized[x770] : &:r35_10781 +# 35| r35_10783(glval) = FunctionAddress[String] : +# 35| v35_10784(void) = Call[String] : func:r35_10783, this:r35_10781 +# 35| mu35_10785(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10781 +# 35| r35_10787(glval) = VariableAddress[x770] : +# 35| r35_10788(glval) = FunctionAddress[~String] : +# 35| v35_10789(void) = Call[~String] : func:r35_10788, this:r35_10787 +# 35| mu35_10790(unknown) = ^CallSideEffect : ~m? +# 35| v35_10791(void) = ^IndirectReadSideEffect[-1] : &:r35_10787, ~m? +# 35| mu35_10792(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10787 +# 35| r35_10793(bool) = Constant[0] : +# 35| v35_10794(void) = ConditionalBranch : r35_10793 #-----| False -> Block 772 #-----| True (back edge) -> Block 771 -# 2332| Block 772 -# 2332| r2332_1(glval) = VariableAddress[x771] : -# 2332| mu2332_2(String) = Uninitialized[x771] : &:r2332_1 -# 2332| r2332_3(glval) = FunctionAddress[String] : -# 2332| v2332_4(void) = Call[String] : func:r2332_3, this:r2332_1 -# 2332| mu2332_5(unknown) = ^CallSideEffect : ~m? -# 2332| mu2332_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 -# 2333| r2333_1(glval) = VariableAddress[x771] : -# 2333| r2333_2(glval) = FunctionAddress[~String] : -# 2333| v2333_3(void) = Call[~String] : func:r2333_2, this:r2333_1 -# 2333| mu2333_4(unknown) = ^CallSideEffect : ~m? -# 2333| v2333_5(void) = ^IndirectReadSideEffect[-1] : &:r2333_1, ~m? -# 2333| mu2333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 -# 2333| r2333_7(bool) = Constant[0] : -# 2333| v2333_8(void) = ConditionalBranch : r2333_7 +# 35| Block 772 +# 35| r35_10795(glval) = VariableAddress[x771] : +# 35| mu35_10796(String) = Uninitialized[x771] : &:r35_10795 +# 35| r35_10797(glval) = FunctionAddress[String] : +# 35| v35_10798(void) = Call[String] : func:r35_10797, this:r35_10795 +# 35| mu35_10799(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10795 +# 35| r35_10801(glval) = VariableAddress[x771] : +# 35| r35_10802(glval) = FunctionAddress[~String] : +# 35| v35_10803(void) = Call[~String] : func:r35_10802, this:r35_10801 +# 35| mu35_10804(unknown) = ^CallSideEffect : ~m? +# 35| v35_10805(void) = ^IndirectReadSideEffect[-1] : &:r35_10801, ~m? +# 35| mu35_10806(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10801 +# 35| r35_10807(bool) = Constant[0] : +# 35| v35_10808(void) = ConditionalBranch : r35_10807 #-----| False -> Block 773 #-----| True (back edge) -> Block 772 -# 2335| Block 773 -# 2335| r2335_1(glval) = VariableAddress[x772] : -# 2335| mu2335_2(String) = Uninitialized[x772] : &: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[x772] : -# 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 -# 2336| r2336_7(bool) = Constant[0] : -# 2336| v2336_8(void) = ConditionalBranch : r2336_7 +# 35| Block 773 +# 35| r35_10809(glval) = VariableAddress[x772] : +# 35| mu35_10810(String) = Uninitialized[x772] : &:r35_10809 +# 35| r35_10811(glval) = FunctionAddress[String] : +# 35| v35_10812(void) = Call[String] : func:r35_10811, this:r35_10809 +# 35| mu35_10813(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10809 +# 35| r35_10815(glval) = VariableAddress[x772] : +# 35| r35_10816(glval) = FunctionAddress[~String] : +# 35| v35_10817(void) = Call[~String] : func:r35_10816, this:r35_10815 +# 35| mu35_10818(unknown) = ^CallSideEffect : ~m? +# 35| v35_10819(void) = ^IndirectReadSideEffect[-1] : &:r35_10815, ~m? +# 35| mu35_10820(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10815 +# 35| r35_10821(bool) = Constant[0] : +# 35| v35_10822(void) = ConditionalBranch : r35_10821 #-----| False -> Block 774 #-----| True (back edge) -> Block 773 -# 2338| Block 774 -# 2338| r2338_1(glval) = VariableAddress[x773] : -# 2338| mu2338_2(String) = Uninitialized[x773] : &:r2338_1 -# 2338| r2338_3(glval) = FunctionAddress[String] : -# 2338| v2338_4(void) = Call[String] : func:r2338_3, this:r2338_1 -# 2338| mu2338_5(unknown) = ^CallSideEffect : ~m? -# 2338| mu2338_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2338_1 -# 2339| r2339_1(glval) = VariableAddress[x773] : -# 2339| r2339_2(glval) = FunctionAddress[~String] : -# 2339| v2339_3(void) = Call[~String] : func:r2339_2, this:r2339_1 -# 2339| mu2339_4(unknown) = ^CallSideEffect : ~m? -# 2339| v2339_5(void) = ^IndirectReadSideEffect[-1] : &:r2339_1, ~m? -# 2339| mu2339_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2339_1 -# 2339| r2339_7(bool) = Constant[0] : -# 2339| v2339_8(void) = ConditionalBranch : r2339_7 +# 35| Block 774 +# 35| r35_10823(glval) = VariableAddress[x773] : +# 35| mu35_10824(String) = Uninitialized[x773] : &:r35_10823 +# 35| r35_10825(glval) = FunctionAddress[String] : +# 35| v35_10826(void) = Call[String] : func:r35_10825, this:r35_10823 +# 35| mu35_10827(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10823 +# 35| r35_10829(glval) = VariableAddress[x773] : +# 35| r35_10830(glval) = FunctionAddress[~String] : +# 35| v35_10831(void) = Call[~String] : func:r35_10830, this:r35_10829 +# 35| mu35_10832(unknown) = ^CallSideEffect : ~m? +# 35| v35_10833(void) = ^IndirectReadSideEffect[-1] : &:r35_10829, ~m? +# 35| mu35_10834(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10829 +# 35| r35_10835(bool) = Constant[0] : +# 35| v35_10836(void) = ConditionalBranch : r35_10835 #-----| False -> Block 775 #-----| True (back edge) -> Block 774 -# 2341| Block 775 -# 2341| r2341_1(glval) = VariableAddress[x774] : -# 2341| mu2341_2(String) = Uninitialized[x774] : &: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 -# 2342| r2342_1(glval) = VariableAddress[x774] : -# 2342| r2342_2(glval) = FunctionAddress[~String] : -# 2342| v2342_3(void) = Call[~String] : func:r2342_2, this:r2342_1 -# 2342| mu2342_4(unknown) = ^CallSideEffect : ~m? -# 2342| v2342_5(void) = ^IndirectReadSideEffect[-1] : &:r2342_1, ~m? -# 2342| mu2342_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2342_1 -# 2342| r2342_7(bool) = Constant[0] : -# 2342| v2342_8(void) = ConditionalBranch : r2342_7 +# 35| Block 775 +# 35| r35_10837(glval) = VariableAddress[x774] : +# 35| mu35_10838(String) = Uninitialized[x774] : &:r35_10837 +# 35| r35_10839(glval) = FunctionAddress[String] : +# 35| v35_10840(void) = Call[String] : func:r35_10839, this:r35_10837 +# 35| mu35_10841(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10837 +# 35| r35_10843(glval) = VariableAddress[x774] : +# 35| r35_10844(glval) = FunctionAddress[~String] : +# 35| v35_10845(void) = Call[~String] : func:r35_10844, this:r35_10843 +# 35| mu35_10846(unknown) = ^CallSideEffect : ~m? +# 35| v35_10847(void) = ^IndirectReadSideEffect[-1] : &:r35_10843, ~m? +# 35| mu35_10848(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10843 +# 35| r35_10849(bool) = Constant[0] : +# 35| v35_10850(void) = ConditionalBranch : r35_10849 #-----| False -> Block 776 #-----| True (back edge) -> Block 775 -# 2344| Block 776 -# 2344| r2344_1(glval) = VariableAddress[x775] : -# 2344| mu2344_2(String) = Uninitialized[x775] : &:r2344_1 -# 2344| r2344_3(glval) = FunctionAddress[String] : -# 2344| v2344_4(void) = Call[String] : func:r2344_3, this:r2344_1 -# 2344| mu2344_5(unknown) = ^CallSideEffect : ~m? -# 2344| mu2344_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2344_1 -# 2345| r2345_1(glval) = VariableAddress[x775] : -# 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 -# 2345| r2345_7(bool) = Constant[0] : -# 2345| v2345_8(void) = ConditionalBranch : r2345_7 +# 35| Block 776 +# 35| r35_10851(glval) = VariableAddress[x775] : +# 35| mu35_10852(String) = Uninitialized[x775] : &:r35_10851 +# 35| r35_10853(glval) = FunctionAddress[String] : +# 35| v35_10854(void) = Call[String] : func:r35_10853, this:r35_10851 +# 35| mu35_10855(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10851 +# 35| r35_10857(glval) = VariableAddress[x775] : +# 35| r35_10858(glval) = FunctionAddress[~String] : +# 35| v35_10859(void) = Call[~String] : func:r35_10858, this:r35_10857 +# 35| mu35_10860(unknown) = ^CallSideEffect : ~m? +# 35| v35_10861(void) = ^IndirectReadSideEffect[-1] : &:r35_10857, ~m? +# 35| mu35_10862(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10857 +# 35| r35_10863(bool) = Constant[0] : +# 35| v35_10864(void) = ConditionalBranch : r35_10863 #-----| False -> Block 777 #-----| True (back edge) -> Block 776 -# 2347| Block 777 -# 2347| r2347_1(glval) = VariableAddress[x776] : -# 2347| mu2347_2(String) = Uninitialized[x776] : &:r2347_1 -# 2347| r2347_3(glval) = FunctionAddress[String] : -# 2347| v2347_4(void) = Call[String] : func:r2347_3, this:r2347_1 -# 2347| mu2347_5(unknown) = ^CallSideEffect : ~m? -# 2347| mu2347_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2347_1 -# 2348| r2348_1(glval) = VariableAddress[x776] : -# 2348| r2348_2(glval) = FunctionAddress[~String] : -# 2348| v2348_3(void) = Call[~String] : func:r2348_2, this:r2348_1 -# 2348| mu2348_4(unknown) = ^CallSideEffect : ~m? -# 2348| v2348_5(void) = ^IndirectReadSideEffect[-1] : &:r2348_1, ~m? -# 2348| mu2348_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 -# 2348| r2348_7(bool) = Constant[0] : -# 2348| v2348_8(void) = ConditionalBranch : r2348_7 +# 35| Block 777 +# 35| r35_10865(glval) = VariableAddress[x776] : +# 35| mu35_10866(String) = Uninitialized[x776] : &:r35_10865 +# 35| r35_10867(glval) = FunctionAddress[String] : +# 35| v35_10868(void) = Call[String] : func:r35_10867, this:r35_10865 +# 35| mu35_10869(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10865 +# 35| r35_10871(glval) = VariableAddress[x776] : +# 35| r35_10872(glval) = FunctionAddress[~String] : +# 35| v35_10873(void) = Call[~String] : func:r35_10872, this:r35_10871 +# 35| mu35_10874(unknown) = ^CallSideEffect : ~m? +# 35| v35_10875(void) = ^IndirectReadSideEffect[-1] : &:r35_10871, ~m? +# 35| mu35_10876(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10871 +# 35| r35_10877(bool) = Constant[0] : +# 35| v35_10878(void) = ConditionalBranch : r35_10877 #-----| False -> Block 778 #-----| True (back edge) -> Block 777 -# 2350| Block 778 -# 2350| r2350_1(glval) = VariableAddress[x777] : -# 2350| mu2350_2(String) = Uninitialized[x777] : &:r2350_1 -# 2350| r2350_3(glval) = FunctionAddress[String] : -# 2350| v2350_4(void) = Call[String] : func:r2350_3, this:r2350_1 -# 2350| mu2350_5(unknown) = ^CallSideEffect : ~m? -# 2350| mu2350_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 -# 2351| r2351_1(glval) = VariableAddress[x777] : -# 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 -# 2351| r2351_7(bool) = Constant[0] : -# 2351| v2351_8(void) = ConditionalBranch : r2351_7 +# 35| Block 778 +# 35| r35_10879(glval) = VariableAddress[x777] : +# 35| mu35_10880(String) = Uninitialized[x777] : &:r35_10879 +# 35| r35_10881(glval) = FunctionAddress[String] : +# 35| v35_10882(void) = Call[String] : func:r35_10881, this:r35_10879 +# 35| mu35_10883(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10879 +# 35| r35_10885(glval) = VariableAddress[x777] : +# 35| r35_10886(glval) = FunctionAddress[~String] : +# 35| v35_10887(void) = Call[~String] : func:r35_10886, this:r35_10885 +# 35| mu35_10888(unknown) = ^CallSideEffect : ~m? +# 35| v35_10889(void) = ^IndirectReadSideEffect[-1] : &:r35_10885, ~m? +# 35| mu35_10890(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10885 +# 35| r35_10891(bool) = Constant[0] : +# 35| v35_10892(void) = ConditionalBranch : r35_10891 #-----| False -> Block 779 #-----| True (back edge) -> Block 778 -# 2353| Block 779 -# 2353| r2353_1(glval) = VariableAddress[x778] : -# 2353| mu2353_2(String) = Uninitialized[x778] : &:r2353_1 -# 2353| r2353_3(glval) = FunctionAddress[String] : -# 2353| v2353_4(void) = Call[String] : func:r2353_3, this:r2353_1 -# 2353| mu2353_5(unknown) = ^CallSideEffect : ~m? -# 2353| mu2353_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2353_1 -# 2354| r2354_1(glval) = VariableAddress[x778] : -# 2354| r2354_2(glval) = FunctionAddress[~String] : -# 2354| v2354_3(void) = Call[~String] : func:r2354_2, this:r2354_1 -# 2354| mu2354_4(unknown) = ^CallSideEffect : ~m? -# 2354| v2354_5(void) = ^IndirectReadSideEffect[-1] : &:r2354_1, ~m? -# 2354| mu2354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2354| r2354_7(bool) = Constant[0] : -# 2354| v2354_8(void) = ConditionalBranch : r2354_7 +# 35| Block 779 +# 35| r35_10893(glval) = VariableAddress[x778] : +# 35| mu35_10894(String) = Uninitialized[x778] : &:r35_10893 +# 35| r35_10895(glval) = FunctionAddress[String] : +# 35| v35_10896(void) = Call[String] : func:r35_10895, this:r35_10893 +# 35| mu35_10897(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10893 +# 35| r35_10899(glval) = VariableAddress[x778] : +# 35| r35_10900(glval) = FunctionAddress[~String] : +# 35| v35_10901(void) = Call[~String] : func:r35_10900, this:r35_10899 +# 35| mu35_10902(unknown) = ^CallSideEffect : ~m? +# 35| v35_10903(void) = ^IndirectReadSideEffect[-1] : &:r35_10899, ~m? +# 35| mu35_10904(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10899 +# 35| r35_10905(bool) = Constant[0] : +# 35| v35_10906(void) = ConditionalBranch : r35_10905 #-----| False -> Block 780 #-----| True (back edge) -> Block 779 -# 2356| Block 780 -# 2356| r2356_1(glval) = VariableAddress[x779] : -# 2356| mu2356_2(String) = Uninitialized[x779] : &:r2356_1 -# 2356| r2356_3(glval) = FunctionAddress[String] : -# 2356| v2356_4(void) = Call[String] : func:r2356_3, this:r2356_1 -# 2356| mu2356_5(unknown) = ^CallSideEffect : ~m? -# 2356| mu2356_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2356_1 -# 2357| r2357_1(glval) = VariableAddress[x779] : -# 2357| r2357_2(glval) = FunctionAddress[~String] : -# 2357| v2357_3(void) = Call[~String] : func:r2357_2, this:r2357_1 -# 2357| mu2357_4(unknown) = ^CallSideEffect : ~m? -# 2357| v2357_5(void) = ^IndirectReadSideEffect[-1] : &:r2357_1, ~m? -# 2357| mu2357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 -# 2357| r2357_7(bool) = Constant[0] : -# 2357| v2357_8(void) = ConditionalBranch : r2357_7 +# 35| Block 780 +# 35| r35_10907(glval) = VariableAddress[x779] : +# 35| mu35_10908(String) = Uninitialized[x779] : &:r35_10907 +# 35| r35_10909(glval) = FunctionAddress[String] : +# 35| v35_10910(void) = Call[String] : func:r35_10909, this:r35_10907 +# 35| mu35_10911(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10907 +# 35| r35_10913(glval) = VariableAddress[x779] : +# 35| r35_10914(glval) = FunctionAddress[~String] : +# 35| v35_10915(void) = Call[~String] : func:r35_10914, this:r35_10913 +# 35| mu35_10916(unknown) = ^CallSideEffect : ~m? +# 35| v35_10917(void) = ^IndirectReadSideEffect[-1] : &:r35_10913, ~m? +# 35| mu35_10918(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10913 +# 35| r35_10919(bool) = Constant[0] : +# 35| v35_10920(void) = ConditionalBranch : r35_10919 #-----| False -> Block 781 #-----| True (back edge) -> Block 780 -# 2359| Block 781 -# 2359| r2359_1(glval) = VariableAddress[x780] : -# 2359| mu2359_2(String) = Uninitialized[x780] : &:r2359_1 -# 2359| r2359_3(glval) = FunctionAddress[String] : -# 2359| v2359_4(void) = Call[String] : func:r2359_3, this:r2359_1 -# 2359| mu2359_5(unknown) = ^CallSideEffect : ~m? -# 2359| mu2359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 -# 2360| r2360_1(glval) = VariableAddress[x780] : -# 2360| r2360_2(glval) = FunctionAddress[~String] : -# 2360| v2360_3(void) = Call[~String] : func:r2360_2, this:r2360_1 -# 2360| mu2360_4(unknown) = ^CallSideEffect : ~m? -# 2360| v2360_5(void) = ^IndirectReadSideEffect[-1] : &:r2360_1, ~m? -# 2360| mu2360_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2360_1 -# 2360| r2360_7(bool) = Constant[0] : -# 2360| v2360_8(void) = ConditionalBranch : r2360_7 +# 35| Block 781 +# 35| r35_10921(glval) = VariableAddress[x780] : +# 35| mu35_10922(String) = Uninitialized[x780] : &:r35_10921 +# 35| r35_10923(glval) = FunctionAddress[String] : +# 35| v35_10924(void) = Call[String] : func:r35_10923, this:r35_10921 +# 35| mu35_10925(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10921 +# 35| r35_10927(glval) = VariableAddress[x780] : +# 35| r35_10928(glval) = FunctionAddress[~String] : +# 35| v35_10929(void) = Call[~String] : func:r35_10928, this:r35_10927 +# 35| mu35_10930(unknown) = ^CallSideEffect : ~m? +# 35| v35_10931(void) = ^IndirectReadSideEffect[-1] : &:r35_10927, ~m? +# 35| mu35_10932(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10927 +# 35| r35_10933(bool) = Constant[0] : +# 35| v35_10934(void) = ConditionalBranch : r35_10933 #-----| False -> Block 782 #-----| True (back edge) -> Block 781 -# 2362| Block 782 -# 2362| r2362_1(glval) = VariableAddress[x781] : -# 2362| mu2362_2(String) = Uninitialized[x781] : &: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) = VariableAddress[x781] : -# 2363| r2363_2(glval) = FunctionAddress[~String] : -# 2363| v2363_3(void) = Call[~String] : func:r2363_2, this:r2363_1 -# 2363| mu2363_4(unknown) = ^CallSideEffect : ~m? -# 2363| v2363_5(void) = ^IndirectReadSideEffect[-1] : &:r2363_1, ~m? -# 2363| mu2363_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2363_1 -# 2363| r2363_7(bool) = Constant[0] : -# 2363| v2363_8(void) = ConditionalBranch : r2363_7 +# 35| Block 782 +# 35| r35_10935(glval) = VariableAddress[x781] : +# 35| mu35_10936(String) = Uninitialized[x781] : &:r35_10935 +# 35| r35_10937(glval) = FunctionAddress[String] : +# 35| v35_10938(void) = Call[String] : func:r35_10937, this:r35_10935 +# 35| mu35_10939(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10935 +# 35| r35_10941(glval) = VariableAddress[x781] : +# 35| r35_10942(glval) = FunctionAddress[~String] : +# 35| v35_10943(void) = Call[~String] : func:r35_10942, this:r35_10941 +# 35| mu35_10944(unknown) = ^CallSideEffect : ~m? +# 35| v35_10945(void) = ^IndirectReadSideEffect[-1] : &:r35_10941, ~m? +# 35| mu35_10946(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10941 +# 35| r35_10947(bool) = Constant[0] : +# 35| v35_10948(void) = ConditionalBranch : r35_10947 #-----| False -> Block 783 #-----| True (back edge) -> Block 782 -# 2365| Block 783 -# 2365| r2365_1(glval) = VariableAddress[x782] : -# 2365| mu2365_2(String) = Uninitialized[x782] : &:r2365_1 -# 2365| r2365_3(glval) = FunctionAddress[String] : -# 2365| v2365_4(void) = Call[String] : func:r2365_3, this:r2365_1 -# 2365| mu2365_5(unknown) = ^CallSideEffect : ~m? -# 2365| mu2365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 -# 2366| r2366_1(glval) = VariableAddress[x782] : -# 2366| r2366_2(glval) = FunctionAddress[~String] : -# 2366| v2366_3(void) = Call[~String] : func:r2366_2, this:r2366_1 -# 2366| mu2366_4(unknown) = ^CallSideEffect : ~m? -# 2366| v2366_5(void) = ^IndirectReadSideEffect[-1] : &:r2366_1, ~m? -# 2366| mu2366_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2366_1 -# 2366| r2366_7(bool) = Constant[0] : -# 2366| v2366_8(void) = ConditionalBranch : r2366_7 +# 35| Block 783 +# 35| r35_10949(glval) = VariableAddress[x782] : +# 35| mu35_10950(String) = Uninitialized[x782] : &:r35_10949 +# 35| r35_10951(glval) = FunctionAddress[String] : +# 35| v35_10952(void) = Call[String] : func:r35_10951, this:r35_10949 +# 35| mu35_10953(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10949 +# 35| r35_10955(glval) = VariableAddress[x782] : +# 35| r35_10956(glval) = FunctionAddress[~String] : +# 35| v35_10957(void) = Call[~String] : func:r35_10956, this:r35_10955 +# 35| mu35_10958(unknown) = ^CallSideEffect : ~m? +# 35| v35_10959(void) = ^IndirectReadSideEffect[-1] : &:r35_10955, ~m? +# 35| mu35_10960(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10955 +# 35| r35_10961(bool) = Constant[0] : +# 35| v35_10962(void) = ConditionalBranch : r35_10961 #-----| False -> Block 784 #-----| True (back edge) -> Block 783 -# 2368| Block 784 -# 2368| r2368_1(glval) = VariableAddress[x783] : -# 2368| mu2368_2(String) = Uninitialized[x783] : &: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[x783] : -# 2369| r2369_2(glval) = FunctionAddress[~String] : -# 2369| v2369_3(void) = Call[~String] : func:r2369_2, this:r2369_1 -# 2369| mu2369_4(unknown) = ^CallSideEffect : ~m? -# 2369| v2369_5(void) = ^IndirectReadSideEffect[-1] : &:r2369_1, ~m? -# 2369| mu2369_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2369_1 -# 2369| r2369_7(bool) = Constant[0] : -# 2369| v2369_8(void) = ConditionalBranch : r2369_7 +# 35| Block 784 +# 35| r35_10963(glval) = VariableAddress[x783] : +# 35| mu35_10964(String) = Uninitialized[x783] : &:r35_10963 +# 35| r35_10965(glval) = FunctionAddress[String] : +# 35| v35_10966(void) = Call[String] : func:r35_10965, this:r35_10963 +# 35| mu35_10967(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10963 +# 35| r35_10969(glval) = VariableAddress[x783] : +# 35| r35_10970(glval) = FunctionAddress[~String] : +# 35| v35_10971(void) = Call[~String] : func:r35_10970, this:r35_10969 +# 35| mu35_10972(unknown) = ^CallSideEffect : ~m? +# 35| v35_10973(void) = ^IndirectReadSideEffect[-1] : &:r35_10969, ~m? +# 35| mu35_10974(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10969 +# 35| r35_10975(bool) = Constant[0] : +# 35| v35_10976(void) = ConditionalBranch : r35_10975 #-----| False -> Block 785 #-----| True (back edge) -> Block 784 -# 2371| Block 785 -# 2371| r2371_1(glval) = VariableAddress[x784] : -# 2371| mu2371_2(String) = Uninitialized[x784] : &:r2371_1 -# 2371| r2371_3(glval) = FunctionAddress[String] : -# 2371| v2371_4(void) = Call[String] : func:r2371_3, this:r2371_1 -# 2371| mu2371_5(unknown) = ^CallSideEffect : ~m? -# 2371| mu2371_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2371_1 -# 2372| r2372_1(glval) = VariableAddress[x784] : -# 2372| r2372_2(glval) = FunctionAddress[~String] : -# 2372| v2372_3(void) = Call[~String] : func:r2372_2, this:r2372_1 -# 2372| mu2372_4(unknown) = ^CallSideEffect : ~m? -# 2372| v2372_5(void) = ^IndirectReadSideEffect[-1] : &:r2372_1, ~m? -# 2372| mu2372_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2372_1 -# 2372| r2372_7(bool) = Constant[0] : -# 2372| v2372_8(void) = ConditionalBranch : r2372_7 +# 35| Block 785 +# 35| r35_10977(glval) = VariableAddress[x784] : +# 35| mu35_10978(String) = Uninitialized[x784] : &:r35_10977 +# 35| r35_10979(glval) = FunctionAddress[String] : +# 35| v35_10980(void) = Call[String] : func:r35_10979, this:r35_10977 +# 35| mu35_10981(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10977 +# 35| r35_10983(glval) = VariableAddress[x784] : +# 35| r35_10984(glval) = FunctionAddress[~String] : +# 35| v35_10985(void) = Call[~String] : func:r35_10984, this:r35_10983 +# 35| mu35_10986(unknown) = ^CallSideEffect : ~m? +# 35| v35_10987(void) = ^IndirectReadSideEffect[-1] : &:r35_10983, ~m? +# 35| mu35_10988(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10983 +# 35| r35_10989(bool) = Constant[0] : +# 35| v35_10990(void) = ConditionalBranch : r35_10989 #-----| False -> Block 786 #-----| True (back edge) -> Block 785 -# 2374| Block 786 -# 2374| r2374_1(glval) = VariableAddress[x785] : -# 2374| mu2374_2(String) = Uninitialized[x785] : &:r2374_1 -# 2374| r2374_3(glval) = FunctionAddress[String] : -# 2374| v2374_4(void) = Call[String] : func:r2374_3, this:r2374_1 -# 2374| mu2374_5(unknown) = ^CallSideEffect : ~m? -# 2374| mu2374_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2374_1 -# 2375| r2375_1(glval) = VariableAddress[x785] : -# 2375| r2375_2(glval) = FunctionAddress[~String] : -# 2375| v2375_3(void) = Call[~String] : func:r2375_2, this:r2375_1 -# 2375| mu2375_4(unknown) = ^CallSideEffect : ~m? -# 2375| v2375_5(void) = ^IndirectReadSideEffect[-1] : &:r2375_1, ~m? -# 2375| mu2375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2375_1 -# 2375| r2375_7(bool) = Constant[0] : -# 2375| v2375_8(void) = ConditionalBranch : r2375_7 +# 35| Block 786 +# 35| r35_10991(glval) = VariableAddress[x785] : +# 35| mu35_10992(String) = Uninitialized[x785] : &:r35_10991 +# 35| r35_10993(glval) = FunctionAddress[String] : +# 35| v35_10994(void) = Call[String] : func:r35_10993, this:r35_10991 +# 35| mu35_10995(unknown) = ^CallSideEffect : ~m? +# 35| mu35_10996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10991 +# 35| r35_10997(glval) = VariableAddress[x785] : +# 35| r35_10998(glval) = FunctionAddress[~String] : +# 35| v35_10999(void) = Call[~String] : func:r35_10998, this:r35_10997 +# 35| mu35_11000(unknown) = ^CallSideEffect : ~m? +# 35| v35_11001(void) = ^IndirectReadSideEffect[-1] : &:r35_10997, ~m? +# 35| mu35_11002(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_10997 +# 35| r35_11003(bool) = Constant[0] : +# 35| v35_11004(void) = ConditionalBranch : r35_11003 #-----| False -> Block 787 #-----| True (back edge) -> Block 786 -# 2377| Block 787 -# 2377| r2377_1(glval) = VariableAddress[x786] : -# 2377| mu2377_2(String) = Uninitialized[x786] : &:r2377_1 -# 2377| r2377_3(glval) = FunctionAddress[String] : -# 2377| v2377_4(void) = Call[String] : func:r2377_3, this:r2377_1 -# 2377| mu2377_5(unknown) = ^CallSideEffect : ~m? -# 2377| mu2377_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2377_1 -# 2378| r2378_1(glval) = VariableAddress[x786] : -# 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 -# 2378| r2378_7(bool) = Constant[0] : -# 2378| v2378_8(void) = ConditionalBranch : r2378_7 +# 35| Block 787 +# 35| r35_11005(glval) = VariableAddress[x786] : +# 35| mu35_11006(String) = Uninitialized[x786] : &:r35_11005 +# 35| r35_11007(glval) = FunctionAddress[String] : +# 35| v35_11008(void) = Call[String] : func:r35_11007, this:r35_11005 +# 35| mu35_11009(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11005 +# 35| r35_11011(glval) = VariableAddress[x786] : +# 35| r35_11012(glval) = FunctionAddress[~String] : +# 35| v35_11013(void) = Call[~String] : func:r35_11012, this:r35_11011 +# 35| mu35_11014(unknown) = ^CallSideEffect : ~m? +# 35| v35_11015(void) = ^IndirectReadSideEffect[-1] : &:r35_11011, ~m? +# 35| mu35_11016(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11011 +# 35| r35_11017(bool) = Constant[0] : +# 35| v35_11018(void) = ConditionalBranch : r35_11017 #-----| False -> Block 788 #-----| True (back edge) -> Block 787 -# 2380| Block 788 -# 2380| r2380_1(glval) = VariableAddress[x787] : -# 2380| mu2380_2(String) = Uninitialized[x787] : &:r2380_1 -# 2380| r2380_3(glval) = FunctionAddress[String] : -# 2380| v2380_4(void) = Call[String] : func:r2380_3, this:r2380_1 -# 2380| mu2380_5(unknown) = ^CallSideEffect : ~m? -# 2380| mu2380_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2380_1 -# 2381| r2381_1(glval) = VariableAddress[x787] : -# 2381| r2381_2(glval) = FunctionAddress[~String] : -# 2381| v2381_3(void) = Call[~String] : func:r2381_2, this:r2381_1 -# 2381| mu2381_4(unknown) = ^CallSideEffect : ~m? -# 2381| v2381_5(void) = ^IndirectReadSideEffect[-1] : &:r2381_1, ~m? -# 2381| mu2381_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2381_1 -# 2381| r2381_7(bool) = Constant[0] : -# 2381| v2381_8(void) = ConditionalBranch : r2381_7 +# 35| Block 788 +# 35| r35_11019(glval) = VariableAddress[x787] : +# 35| mu35_11020(String) = Uninitialized[x787] : &:r35_11019 +# 35| r35_11021(glval) = FunctionAddress[String] : +# 35| v35_11022(void) = Call[String] : func:r35_11021, this:r35_11019 +# 35| mu35_11023(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11019 +# 35| r35_11025(glval) = VariableAddress[x787] : +# 35| r35_11026(glval) = FunctionAddress[~String] : +# 35| v35_11027(void) = Call[~String] : func:r35_11026, this:r35_11025 +# 35| mu35_11028(unknown) = ^CallSideEffect : ~m? +# 35| v35_11029(void) = ^IndirectReadSideEffect[-1] : &:r35_11025, ~m? +# 35| mu35_11030(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11025 +# 35| r35_11031(bool) = Constant[0] : +# 35| v35_11032(void) = ConditionalBranch : r35_11031 #-----| False -> Block 789 #-----| True (back edge) -> Block 788 -# 2383| Block 789 -# 2383| r2383_1(glval) = VariableAddress[x788] : -# 2383| mu2383_2(String) = Uninitialized[x788] : &:r2383_1 -# 2383| r2383_3(glval) = FunctionAddress[String] : -# 2383| v2383_4(void) = Call[String] : func:r2383_3, this:r2383_1 -# 2383| mu2383_5(unknown) = ^CallSideEffect : ~m? -# 2383| mu2383_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2383_1 -# 2384| r2384_1(glval) = VariableAddress[x788] : -# 2384| r2384_2(glval) = FunctionAddress[~String] : -# 2384| v2384_3(void) = Call[~String] : func:r2384_2, this:r2384_1 -# 2384| mu2384_4(unknown) = ^CallSideEffect : ~m? -# 2384| v2384_5(void) = ^IndirectReadSideEffect[-1] : &:r2384_1, ~m? -# 2384| mu2384_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2384_1 -# 2384| r2384_7(bool) = Constant[0] : -# 2384| v2384_8(void) = ConditionalBranch : r2384_7 +# 35| Block 789 +# 35| r35_11033(glval) = VariableAddress[x788] : +# 35| mu35_11034(String) = Uninitialized[x788] : &:r35_11033 +# 35| r35_11035(glval) = FunctionAddress[String] : +# 35| v35_11036(void) = Call[String] : func:r35_11035, this:r35_11033 +# 35| mu35_11037(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11033 +# 35| r35_11039(glval) = VariableAddress[x788] : +# 35| r35_11040(glval) = FunctionAddress[~String] : +# 35| v35_11041(void) = Call[~String] : func:r35_11040, this:r35_11039 +# 35| mu35_11042(unknown) = ^CallSideEffect : ~m? +# 35| v35_11043(void) = ^IndirectReadSideEffect[-1] : &:r35_11039, ~m? +# 35| mu35_11044(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11039 +# 35| r35_11045(bool) = Constant[0] : +# 35| v35_11046(void) = ConditionalBranch : r35_11045 #-----| False -> Block 790 #-----| True (back edge) -> Block 789 -# 2386| Block 790 -# 2386| r2386_1(glval) = VariableAddress[x789] : -# 2386| mu2386_2(String) = Uninitialized[x789] : &:r2386_1 -# 2386| r2386_3(glval) = FunctionAddress[String] : -# 2386| v2386_4(void) = Call[String] : func:r2386_3, this:r2386_1 -# 2386| mu2386_5(unknown) = ^CallSideEffect : ~m? -# 2386| mu2386_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2386_1 -# 2387| r2387_1(glval) = VariableAddress[x789] : -# 2387| r2387_2(glval) = FunctionAddress[~String] : -# 2387| v2387_3(void) = Call[~String] : func:r2387_2, this:r2387_1 -# 2387| mu2387_4(unknown) = ^CallSideEffect : ~m? -# 2387| v2387_5(void) = ^IndirectReadSideEffect[-1] : &:r2387_1, ~m? -# 2387| mu2387_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2387_1 -# 2387| r2387_7(bool) = Constant[0] : -# 2387| v2387_8(void) = ConditionalBranch : r2387_7 +# 35| Block 790 +# 35| r35_11047(glval) = VariableAddress[x789] : +# 35| mu35_11048(String) = Uninitialized[x789] : &:r35_11047 +# 35| r35_11049(glval) = FunctionAddress[String] : +# 35| v35_11050(void) = Call[String] : func:r35_11049, this:r35_11047 +# 35| mu35_11051(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11047 +# 35| r35_11053(glval) = VariableAddress[x789] : +# 35| r35_11054(glval) = FunctionAddress[~String] : +# 35| v35_11055(void) = Call[~String] : func:r35_11054, this:r35_11053 +# 35| mu35_11056(unknown) = ^CallSideEffect : ~m? +# 35| v35_11057(void) = ^IndirectReadSideEffect[-1] : &:r35_11053, ~m? +# 35| mu35_11058(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11053 +# 35| r35_11059(bool) = Constant[0] : +# 35| v35_11060(void) = ConditionalBranch : r35_11059 #-----| False -> Block 791 #-----| True (back edge) -> Block 790 -# 2389| Block 791 -# 2389| r2389_1(glval) = VariableAddress[x790] : -# 2389| mu2389_2(String) = Uninitialized[x790] : &:r2389_1 -# 2389| r2389_3(glval) = FunctionAddress[String] : -# 2389| v2389_4(void) = Call[String] : func:r2389_3, this:r2389_1 -# 2389| mu2389_5(unknown) = ^CallSideEffect : ~m? -# 2389| mu2389_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2389_1 -# 2390| r2390_1(glval) = VariableAddress[x790] : -# 2390| r2390_2(glval) = FunctionAddress[~String] : -# 2390| v2390_3(void) = Call[~String] : func:r2390_2, this:r2390_1 -# 2390| mu2390_4(unknown) = ^CallSideEffect : ~m? -# 2390| v2390_5(void) = ^IndirectReadSideEffect[-1] : &:r2390_1, ~m? -# 2390| mu2390_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2390_1 -# 2390| r2390_7(bool) = Constant[0] : -# 2390| v2390_8(void) = ConditionalBranch : r2390_7 +# 35| Block 791 +# 35| r35_11061(glval) = VariableAddress[x790] : +# 35| mu35_11062(String) = Uninitialized[x790] : &:r35_11061 +# 35| r35_11063(glval) = FunctionAddress[String] : +# 35| v35_11064(void) = Call[String] : func:r35_11063, this:r35_11061 +# 35| mu35_11065(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11061 +# 35| r35_11067(glval) = VariableAddress[x790] : +# 35| r35_11068(glval) = FunctionAddress[~String] : +# 35| v35_11069(void) = Call[~String] : func:r35_11068, this:r35_11067 +# 35| mu35_11070(unknown) = ^CallSideEffect : ~m? +# 35| v35_11071(void) = ^IndirectReadSideEffect[-1] : &:r35_11067, ~m? +# 35| mu35_11072(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11067 +# 35| r35_11073(bool) = Constant[0] : +# 35| v35_11074(void) = ConditionalBranch : r35_11073 #-----| False -> Block 792 #-----| True (back edge) -> Block 791 -# 2392| Block 792 -# 2392| r2392_1(glval) = VariableAddress[x791] : -# 2392| mu2392_2(String) = Uninitialized[x791] : &:r2392_1 -# 2392| r2392_3(glval) = FunctionAddress[String] : -# 2392| v2392_4(void) = Call[String] : func:r2392_3, this:r2392_1 -# 2392| mu2392_5(unknown) = ^CallSideEffect : ~m? -# 2392| mu2392_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2392_1 -# 2393| r2393_1(glval) = VariableAddress[x791] : -# 2393| r2393_2(glval) = FunctionAddress[~String] : -# 2393| v2393_3(void) = Call[~String] : func:r2393_2, this:r2393_1 -# 2393| mu2393_4(unknown) = ^CallSideEffect : ~m? -# 2393| v2393_5(void) = ^IndirectReadSideEffect[-1] : &:r2393_1, ~m? -# 2393| mu2393_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2393_1 -# 2393| r2393_7(bool) = Constant[0] : -# 2393| v2393_8(void) = ConditionalBranch : r2393_7 +# 35| Block 792 +# 35| r35_11075(glval) = VariableAddress[x791] : +# 35| mu35_11076(String) = Uninitialized[x791] : &:r35_11075 +# 35| r35_11077(glval) = FunctionAddress[String] : +# 35| v35_11078(void) = Call[String] : func:r35_11077, this:r35_11075 +# 35| mu35_11079(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11075 +# 35| r35_11081(glval) = VariableAddress[x791] : +# 35| r35_11082(glval) = FunctionAddress[~String] : +# 35| v35_11083(void) = Call[~String] : func:r35_11082, this:r35_11081 +# 35| mu35_11084(unknown) = ^CallSideEffect : ~m? +# 35| v35_11085(void) = ^IndirectReadSideEffect[-1] : &:r35_11081, ~m? +# 35| mu35_11086(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11081 +# 35| r35_11087(bool) = Constant[0] : +# 35| v35_11088(void) = ConditionalBranch : r35_11087 #-----| False -> Block 793 #-----| True (back edge) -> Block 792 -# 2395| Block 793 -# 2395| r2395_1(glval) = VariableAddress[x792] : -# 2395| mu2395_2(String) = Uninitialized[x792] : &:r2395_1 -# 2395| r2395_3(glval) = FunctionAddress[String] : -# 2395| v2395_4(void) = Call[String] : func:r2395_3, this:r2395_1 -# 2395| mu2395_5(unknown) = ^CallSideEffect : ~m? -# 2395| mu2395_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2395_1 -# 2396| r2396_1(glval) = VariableAddress[x792] : -# 2396| r2396_2(glval) = FunctionAddress[~String] : -# 2396| v2396_3(void) = Call[~String] : func:r2396_2, this:r2396_1 -# 2396| mu2396_4(unknown) = ^CallSideEffect : ~m? -# 2396| v2396_5(void) = ^IndirectReadSideEffect[-1] : &:r2396_1, ~m? -# 2396| mu2396_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2396_1 -# 2396| r2396_7(bool) = Constant[0] : -# 2396| v2396_8(void) = ConditionalBranch : r2396_7 +# 35| Block 793 +# 35| r35_11089(glval) = VariableAddress[x792] : +# 35| mu35_11090(String) = Uninitialized[x792] : &:r35_11089 +# 35| r35_11091(glval) = FunctionAddress[String] : +# 35| v35_11092(void) = Call[String] : func:r35_11091, this:r35_11089 +# 35| mu35_11093(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11089 +# 35| r35_11095(glval) = VariableAddress[x792] : +# 35| r35_11096(glval) = FunctionAddress[~String] : +# 35| v35_11097(void) = Call[~String] : func:r35_11096, this:r35_11095 +# 35| mu35_11098(unknown) = ^CallSideEffect : ~m? +# 35| v35_11099(void) = ^IndirectReadSideEffect[-1] : &:r35_11095, ~m? +# 35| mu35_11100(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11095 +# 35| r35_11101(bool) = Constant[0] : +# 35| v35_11102(void) = ConditionalBranch : r35_11101 #-----| False -> Block 794 #-----| True (back edge) -> Block 793 -# 2398| Block 794 -# 2398| r2398_1(glval) = VariableAddress[x793] : -# 2398| mu2398_2(String) = Uninitialized[x793] : &:r2398_1 -# 2398| r2398_3(glval) = FunctionAddress[String] : -# 2398| v2398_4(void) = Call[String] : func:r2398_3, this:r2398_1 -# 2398| mu2398_5(unknown) = ^CallSideEffect : ~m? -# 2398| mu2398_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2398_1 -# 2399| r2399_1(glval) = VariableAddress[x793] : -# 2399| r2399_2(glval) = FunctionAddress[~String] : -# 2399| v2399_3(void) = Call[~String] : func:r2399_2, this:r2399_1 -# 2399| mu2399_4(unknown) = ^CallSideEffect : ~m? -# 2399| v2399_5(void) = ^IndirectReadSideEffect[-1] : &:r2399_1, ~m? -# 2399| mu2399_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2399_1 -# 2399| r2399_7(bool) = Constant[0] : -# 2399| v2399_8(void) = ConditionalBranch : r2399_7 +# 35| Block 794 +# 35| r35_11103(glval) = VariableAddress[x793] : +# 35| mu35_11104(String) = Uninitialized[x793] : &:r35_11103 +# 35| r35_11105(glval) = FunctionAddress[String] : +# 35| v35_11106(void) = Call[String] : func:r35_11105, this:r35_11103 +# 35| mu35_11107(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11103 +# 35| r35_11109(glval) = VariableAddress[x793] : +# 35| r35_11110(glval) = FunctionAddress[~String] : +# 35| v35_11111(void) = Call[~String] : func:r35_11110, this:r35_11109 +# 35| mu35_11112(unknown) = ^CallSideEffect : ~m? +# 35| v35_11113(void) = ^IndirectReadSideEffect[-1] : &:r35_11109, ~m? +# 35| mu35_11114(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11109 +# 35| r35_11115(bool) = Constant[0] : +# 35| v35_11116(void) = ConditionalBranch : r35_11115 #-----| False -> Block 795 #-----| True (back edge) -> Block 794 -# 2401| Block 795 -# 2401| r2401_1(glval) = VariableAddress[x794] : -# 2401| mu2401_2(String) = Uninitialized[x794] : &:r2401_1 -# 2401| r2401_3(glval) = FunctionAddress[String] : -# 2401| v2401_4(void) = Call[String] : func:r2401_3, this:r2401_1 -# 2401| mu2401_5(unknown) = ^CallSideEffect : ~m? -# 2401| mu2401_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2401_1 -# 2402| r2402_1(glval) = VariableAddress[x794] : -# 2402| r2402_2(glval) = FunctionAddress[~String] : -# 2402| v2402_3(void) = Call[~String] : func:r2402_2, this:r2402_1 -# 2402| mu2402_4(unknown) = ^CallSideEffect : ~m? -# 2402| v2402_5(void) = ^IndirectReadSideEffect[-1] : &:r2402_1, ~m? -# 2402| mu2402_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2402_1 -# 2402| r2402_7(bool) = Constant[0] : -# 2402| v2402_8(void) = ConditionalBranch : r2402_7 +# 35| Block 795 +# 35| r35_11117(glval) = VariableAddress[x794] : +# 35| mu35_11118(String) = Uninitialized[x794] : &:r35_11117 +# 35| r35_11119(glval) = FunctionAddress[String] : +# 35| v35_11120(void) = Call[String] : func:r35_11119, this:r35_11117 +# 35| mu35_11121(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11117 +# 35| r35_11123(glval) = VariableAddress[x794] : +# 35| r35_11124(glval) = FunctionAddress[~String] : +# 35| v35_11125(void) = Call[~String] : func:r35_11124, this:r35_11123 +# 35| mu35_11126(unknown) = ^CallSideEffect : ~m? +# 35| v35_11127(void) = ^IndirectReadSideEffect[-1] : &:r35_11123, ~m? +# 35| mu35_11128(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11123 +# 35| r35_11129(bool) = Constant[0] : +# 35| v35_11130(void) = ConditionalBranch : r35_11129 #-----| False -> Block 796 #-----| True (back edge) -> Block 795 -# 2404| Block 796 -# 2404| r2404_1(glval) = VariableAddress[x795] : -# 2404| mu2404_2(String) = Uninitialized[x795] : &:r2404_1 -# 2404| r2404_3(glval) = FunctionAddress[String] : -# 2404| v2404_4(void) = Call[String] : func:r2404_3, this:r2404_1 -# 2404| mu2404_5(unknown) = ^CallSideEffect : ~m? -# 2404| mu2404_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2404_1 -# 2405| r2405_1(glval) = VariableAddress[x795] : -# 2405| r2405_2(glval) = FunctionAddress[~String] : -# 2405| v2405_3(void) = Call[~String] : func:r2405_2, this:r2405_1 -# 2405| mu2405_4(unknown) = ^CallSideEffect : ~m? -# 2405| v2405_5(void) = ^IndirectReadSideEffect[-1] : &:r2405_1, ~m? -# 2405| mu2405_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2405_1 -# 2405| r2405_7(bool) = Constant[0] : -# 2405| v2405_8(void) = ConditionalBranch : r2405_7 +# 35| Block 796 +# 35| r35_11131(glval) = VariableAddress[x795] : +# 35| mu35_11132(String) = Uninitialized[x795] : &:r35_11131 +# 35| r35_11133(glval) = FunctionAddress[String] : +# 35| v35_11134(void) = Call[String] : func:r35_11133, this:r35_11131 +# 35| mu35_11135(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11131 +# 35| r35_11137(glval) = VariableAddress[x795] : +# 35| r35_11138(glval) = FunctionAddress[~String] : +# 35| v35_11139(void) = Call[~String] : func:r35_11138, this:r35_11137 +# 35| mu35_11140(unknown) = ^CallSideEffect : ~m? +# 35| v35_11141(void) = ^IndirectReadSideEffect[-1] : &:r35_11137, ~m? +# 35| mu35_11142(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11137 +# 35| r35_11143(bool) = Constant[0] : +# 35| v35_11144(void) = ConditionalBranch : r35_11143 #-----| False -> Block 797 #-----| True (back edge) -> Block 796 -# 2407| Block 797 -# 2407| r2407_1(glval) = VariableAddress[x796] : -# 2407| mu2407_2(String) = Uninitialized[x796] : &:r2407_1 -# 2407| r2407_3(glval) = FunctionAddress[String] : -# 2407| v2407_4(void) = Call[String] : func:r2407_3, this:r2407_1 -# 2407| mu2407_5(unknown) = ^CallSideEffect : ~m? -# 2407| mu2407_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2407_1 -# 2408| r2408_1(glval) = VariableAddress[x796] : -# 2408| r2408_2(glval) = FunctionAddress[~String] : -# 2408| v2408_3(void) = Call[~String] : func:r2408_2, this:r2408_1 -# 2408| mu2408_4(unknown) = ^CallSideEffect : ~m? -# 2408| v2408_5(void) = ^IndirectReadSideEffect[-1] : &:r2408_1, ~m? -# 2408| mu2408_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2408_1 -# 2408| r2408_7(bool) = Constant[0] : -# 2408| v2408_8(void) = ConditionalBranch : r2408_7 +# 35| Block 797 +# 35| r35_11145(glval) = VariableAddress[x796] : +# 35| mu35_11146(String) = Uninitialized[x796] : &:r35_11145 +# 35| r35_11147(glval) = FunctionAddress[String] : +# 35| v35_11148(void) = Call[String] : func:r35_11147, this:r35_11145 +# 35| mu35_11149(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11145 +# 35| r35_11151(glval) = VariableAddress[x796] : +# 35| r35_11152(glval) = FunctionAddress[~String] : +# 35| v35_11153(void) = Call[~String] : func:r35_11152, this:r35_11151 +# 35| mu35_11154(unknown) = ^CallSideEffect : ~m? +# 35| v35_11155(void) = ^IndirectReadSideEffect[-1] : &:r35_11151, ~m? +# 35| mu35_11156(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11151 +# 35| r35_11157(bool) = Constant[0] : +# 35| v35_11158(void) = ConditionalBranch : r35_11157 #-----| False -> Block 798 #-----| True (back edge) -> Block 797 -# 2410| Block 798 -# 2410| r2410_1(glval) = VariableAddress[x797] : -# 2410| mu2410_2(String) = Uninitialized[x797] : &:r2410_1 -# 2410| r2410_3(glval) = FunctionAddress[String] : -# 2410| v2410_4(void) = Call[String] : func:r2410_3, this:r2410_1 -# 2410| mu2410_5(unknown) = ^CallSideEffect : ~m? -# 2410| mu2410_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2410_1 -# 2411| r2411_1(glval) = VariableAddress[x797] : -# 2411| r2411_2(glval) = FunctionAddress[~String] : -# 2411| v2411_3(void) = Call[~String] : func:r2411_2, this:r2411_1 -# 2411| mu2411_4(unknown) = ^CallSideEffect : ~m? -# 2411| v2411_5(void) = ^IndirectReadSideEffect[-1] : &:r2411_1, ~m? -# 2411| mu2411_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2411_1 -# 2411| r2411_7(bool) = Constant[0] : -# 2411| v2411_8(void) = ConditionalBranch : r2411_7 +# 35| Block 798 +# 35| r35_11159(glval) = VariableAddress[x797] : +# 35| mu35_11160(String) = Uninitialized[x797] : &:r35_11159 +# 35| r35_11161(glval) = FunctionAddress[String] : +# 35| v35_11162(void) = Call[String] : func:r35_11161, this:r35_11159 +# 35| mu35_11163(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11159 +# 35| r35_11165(glval) = VariableAddress[x797] : +# 35| r35_11166(glval) = FunctionAddress[~String] : +# 35| v35_11167(void) = Call[~String] : func:r35_11166, this:r35_11165 +# 35| mu35_11168(unknown) = ^CallSideEffect : ~m? +# 35| v35_11169(void) = ^IndirectReadSideEffect[-1] : &:r35_11165, ~m? +# 35| mu35_11170(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11165 +# 35| r35_11171(bool) = Constant[0] : +# 35| v35_11172(void) = ConditionalBranch : r35_11171 #-----| False -> Block 799 #-----| True (back edge) -> Block 798 -# 2413| Block 799 -# 2413| r2413_1(glval) = VariableAddress[x798] : -# 2413| mu2413_2(String) = Uninitialized[x798] : &:r2413_1 -# 2413| r2413_3(glval) = FunctionAddress[String] : -# 2413| v2413_4(void) = Call[String] : func:r2413_3, this:r2413_1 -# 2413| mu2413_5(unknown) = ^CallSideEffect : ~m? -# 2413| mu2413_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2413_1 -# 2414| r2414_1(glval) = VariableAddress[x798] : -# 2414| r2414_2(glval) = FunctionAddress[~String] : -# 2414| v2414_3(void) = Call[~String] : func:r2414_2, this:r2414_1 -# 2414| mu2414_4(unknown) = ^CallSideEffect : ~m? -# 2414| v2414_5(void) = ^IndirectReadSideEffect[-1] : &:r2414_1, ~m? -# 2414| mu2414_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2414_1 -# 2414| r2414_7(bool) = Constant[0] : -# 2414| v2414_8(void) = ConditionalBranch : r2414_7 +# 35| Block 799 +# 35| r35_11173(glval) = VariableAddress[x798] : +# 35| mu35_11174(String) = Uninitialized[x798] : &:r35_11173 +# 35| r35_11175(glval) = FunctionAddress[String] : +# 35| v35_11176(void) = Call[String] : func:r35_11175, this:r35_11173 +# 35| mu35_11177(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11173 +# 35| r35_11179(glval) = VariableAddress[x798] : +# 35| r35_11180(glval) = FunctionAddress[~String] : +# 35| v35_11181(void) = Call[~String] : func:r35_11180, this:r35_11179 +# 35| mu35_11182(unknown) = ^CallSideEffect : ~m? +# 35| v35_11183(void) = ^IndirectReadSideEffect[-1] : &:r35_11179, ~m? +# 35| mu35_11184(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11179 +# 35| r35_11185(bool) = Constant[0] : +# 35| v35_11186(void) = ConditionalBranch : r35_11185 #-----| False -> Block 800 #-----| True (back edge) -> Block 799 -# 2416| Block 800 -# 2416| r2416_1(glval) = VariableAddress[x799] : -# 2416| mu2416_2(String) = Uninitialized[x799] : &:r2416_1 -# 2416| r2416_3(glval) = FunctionAddress[String] : -# 2416| v2416_4(void) = Call[String] : func:r2416_3, this:r2416_1 -# 2416| mu2416_5(unknown) = ^CallSideEffect : ~m? -# 2416| mu2416_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2416_1 -# 2417| r2417_1(glval) = VariableAddress[x799] : -# 2417| r2417_2(glval) = FunctionAddress[~String] : -# 2417| v2417_3(void) = Call[~String] : func:r2417_2, this:r2417_1 -# 2417| mu2417_4(unknown) = ^CallSideEffect : ~m? -# 2417| v2417_5(void) = ^IndirectReadSideEffect[-1] : &:r2417_1, ~m? -# 2417| mu2417_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2417_1 -# 2417| r2417_7(bool) = Constant[0] : -# 2417| v2417_8(void) = ConditionalBranch : r2417_7 +# 35| Block 800 +# 35| r35_11187(glval) = VariableAddress[x799] : +# 35| mu35_11188(String) = Uninitialized[x799] : &:r35_11187 +# 35| r35_11189(glval) = FunctionAddress[String] : +# 35| v35_11190(void) = Call[String] : func:r35_11189, this:r35_11187 +# 35| mu35_11191(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11187 +# 35| r35_11193(glval) = VariableAddress[x799] : +# 35| r35_11194(glval) = FunctionAddress[~String] : +# 35| v35_11195(void) = Call[~String] : func:r35_11194, this:r35_11193 +# 35| mu35_11196(unknown) = ^CallSideEffect : ~m? +# 35| v35_11197(void) = ^IndirectReadSideEffect[-1] : &:r35_11193, ~m? +# 35| mu35_11198(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11193 +# 35| r35_11199(bool) = Constant[0] : +# 35| v35_11200(void) = ConditionalBranch : r35_11199 #-----| False -> Block 801 #-----| True (back edge) -> Block 800 -# 2419| Block 801 -# 2419| r2419_1(glval) = VariableAddress[x800] : -# 2419| mu2419_2(String) = Uninitialized[x800] : &:r2419_1 -# 2419| r2419_3(glval) = FunctionAddress[String] : -# 2419| v2419_4(void) = Call[String] : func:r2419_3, this:r2419_1 -# 2419| mu2419_5(unknown) = ^CallSideEffect : ~m? -# 2419| mu2419_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2419_1 -# 2420| r2420_1(glval) = VariableAddress[x800] : -# 2420| r2420_2(glval) = FunctionAddress[~String] : -# 2420| v2420_3(void) = Call[~String] : func:r2420_2, this:r2420_1 -# 2420| mu2420_4(unknown) = ^CallSideEffect : ~m? -# 2420| v2420_5(void) = ^IndirectReadSideEffect[-1] : &:r2420_1, ~m? -# 2420| mu2420_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2420_1 -# 2420| r2420_7(bool) = Constant[0] : -# 2420| v2420_8(void) = ConditionalBranch : r2420_7 +# 35| Block 801 +# 35| r35_11201(glval) = VariableAddress[x800] : +# 35| mu35_11202(String) = Uninitialized[x800] : &:r35_11201 +# 35| r35_11203(glval) = FunctionAddress[String] : +# 35| v35_11204(void) = Call[String] : func:r35_11203, this:r35_11201 +# 35| mu35_11205(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11201 +# 35| r35_11207(glval) = VariableAddress[x800] : +# 35| r35_11208(glval) = FunctionAddress[~String] : +# 35| v35_11209(void) = Call[~String] : func:r35_11208, this:r35_11207 +# 35| mu35_11210(unknown) = ^CallSideEffect : ~m? +# 35| v35_11211(void) = ^IndirectReadSideEffect[-1] : &:r35_11207, ~m? +# 35| mu35_11212(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11207 +# 35| r35_11213(bool) = Constant[0] : +# 35| v35_11214(void) = ConditionalBranch : r35_11213 #-----| False -> Block 802 #-----| True (back edge) -> Block 801 -# 2422| Block 802 -# 2422| r2422_1(glval) = VariableAddress[x801] : -# 2422| mu2422_2(String) = Uninitialized[x801] : &:r2422_1 -# 2422| r2422_3(glval) = FunctionAddress[String] : -# 2422| v2422_4(void) = Call[String] : func:r2422_3, this:r2422_1 -# 2422| mu2422_5(unknown) = ^CallSideEffect : ~m? -# 2422| mu2422_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2422_1 -# 2423| r2423_1(glval) = VariableAddress[x801] : -# 2423| r2423_2(glval) = FunctionAddress[~String] : -# 2423| v2423_3(void) = Call[~String] : func:r2423_2, this:r2423_1 -# 2423| mu2423_4(unknown) = ^CallSideEffect : ~m? -# 2423| v2423_5(void) = ^IndirectReadSideEffect[-1] : &:r2423_1, ~m? -# 2423| mu2423_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2423_1 -# 2423| r2423_7(bool) = Constant[0] : -# 2423| v2423_8(void) = ConditionalBranch : r2423_7 +# 35| Block 802 +# 35| r35_11215(glval) = VariableAddress[x801] : +# 35| mu35_11216(String) = Uninitialized[x801] : &:r35_11215 +# 35| r35_11217(glval) = FunctionAddress[String] : +# 35| v35_11218(void) = Call[String] : func:r35_11217, this:r35_11215 +# 35| mu35_11219(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11215 +# 35| r35_11221(glval) = VariableAddress[x801] : +# 35| r35_11222(glval) = FunctionAddress[~String] : +# 35| v35_11223(void) = Call[~String] : func:r35_11222, this:r35_11221 +# 35| mu35_11224(unknown) = ^CallSideEffect : ~m? +# 35| v35_11225(void) = ^IndirectReadSideEffect[-1] : &:r35_11221, ~m? +# 35| mu35_11226(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11221 +# 35| r35_11227(bool) = Constant[0] : +# 35| v35_11228(void) = ConditionalBranch : r35_11227 #-----| False -> Block 803 #-----| True (back edge) -> Block 802 -# 2425| Block 803 -# 2425| r2425_1(glval) = VariableAddress[x802] : -# 2425| mu2425_2(String) = Uninitialized[x802] : &:r2425_1 -# 2425| r2425_3(glval) = FunctionAddress[String] : -# 2425| v2425_4(void) = Call[String] : func:r2425_3, this:r2425_1 -# 2425| mu2425_5(unknown) = ^CallSideEffect : ~m? -# 2425| mu2425_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2425_1 -# 2426| r2426_1(glval) = VariableAddress[x802] : -# 2426| r2426_2(glval) = FunctionAddress[~String] : -# 2426| v2426_3(void) = Call[~String] : func:r2426_2, this:r2426_1 -# 2426| mu2426_4(unknown) = ^CallSideEffect : ~m? -# 2426| v2426_5(void) = ^IndirectReadSideEffect[-1] : &:r2426_1, ~m? -# 2426| mu2426_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2426_1 -# 2426| r2426_7(bool) = Constant[0] : -# 2426| v2426_8(void) = ConditionalBranch : r2426_7 +# 35| Block 803 +# 35| r35_11229(glval) = VariableAddress[x802] : +# 35| mu35_11230(String) = Uninitialized[x802] : &:r35_11229 +# 35| r35_11231(glval) = FunctionAddress[String] : +# 35| v35_11232(void) = Call[String] : func:r35_11231, this:r35_11229 +# 35| mu35_11233(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11229 +# 35| r35_11235(glval) = VariableAddress[x802] : +# 35| r35_11236(glval) = FunctionAddress[~String] : +# 35| v35_11237(void) = Call[~String] : func:r35_11236, this:r35_11235 +# 35| mu35_11238(unknown) = ^CallSideEffect : ~m? +# 35| v35_11239(void) = ^IndirectReadSideEffect[-1] : &:r35_11235, ~m? +# 35| mu35_11240(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11235 +# 35| r35_11241(bool) = Constant[0] : +# 35| v35_11242(void) = ConditionalBranch : r35_11241 #-----| False -> Block 804 #-----| True (back edge) -> Block 803 -# 2428| Block 804 -# 2428| r2428_1(glval) = VariableAddress[x803] : -# 2428| mu2428_2(String) = Uninitialized[x803] : &:r2428_1 -# 2428| r2428_3(glval) = FunctionAddress[String] : -# 2428| v2428_4(void) = Call[String] : func:r2428_3, this:r2428_1 -# 2428| mu2428_5(unknown) = ^CallSideEffect : ~m? -# 2428| mu2428_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2428_1 -# 2429| r2429_1(glval) = VariableAddress[x803] : -# 2429| r2429_2(glval) = FunctionAddress[~String] : -# 2429| v2429_3(void) = Call[~String] : func:r2429_2, this:r2429_1 -# 2429| mu2429_4(unknown) = ^CallSideEffect : ~m? -# 2429| v2429_5(void) = ^IndirectReadSideEffect[-1] : &:r2429_1, ~m? -# 2429| mu2429_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2429_1 -# 2429| r2429_7(bool) = Constant[0] : -# 2429| v2429_8(void) = ConditionalBranch : r2429_7 +# 35| Block 804 +# 35| r35_11243(glval) = VariableAddress[x803] : +# 35| mu35_11244(String) = Uninitialized[x803] : &:r35_11243 +# 35| r35_11245(glval) = FunctionAddress[String] : +# 35| v35_11246(void) = Call[String] : func:r35_11245, this:r35_11243 +# 35| mu35_11247(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11243 +# 35| r35_11249(glval) = VariableAddress[x803] : +# 35| r35_11250(glval) = FunctionAddress[~String] : +# 35| v35_11251(void) = Call[~String] : func:r35_11250, this:r35_11249 +# 35| mu35_11252(unknown) = ^CallSideEffect : ~m? +# 35| v35_11253(void) = ^IndirectReadSideEffect[-1] : &:r35_11249, ~m? +# 35| mu35_11254(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11249 +# 35| r35_11255(bool) = Constant[0] : +# 35| v35_11256(void) = ConditionalBranch : r35_11255 #-----| False -> Block 805 #-----| True (back edge) -> Block 804 -# 2431| Block 805 -# 2431| r2431_1(glval) = VariableAddress[x804] : -# 2431| mu2431_2(String) = Uninitialized[x804] : &:r2431_1 -# 2431| r2431_3(glval) = FunctionAddress[String] : -# 2431| v2431_4(void) = Call[String] : func:r2431_3, this:r2431_1 -# 2431| mu2431_5(unknown) = ^CallSideEffect : ~m? -# 2431| mu2431_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2431_1 -# 2432| r2432_1(glval) = VariableAddress[x804] : -# 2432| r2432_2(glval) = FunctionAddress[~String] : -# 2432| v2432_3(void) = Call[~String] : func:r2432_2, this:r2432_1 -# 2432| mu2432_4(unknown) = ^CallSideEffect : ~m? -# 2432| v2432_5(void) = ^IndirectReadSideEffect[-1] : &:r2432_1, ~m? -# 2432| mu2432_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2432_1 -# 2432| r2432_7(bool) = Constant[0] : -# 2432| v2432_8(void) = ConditionalBranch : r2432_7 +# 35| Block 805 +# 35| r35_11257(glval) = VariableAddress[x804] : +# 35| mu35_11258(String) = Uninitialized[x804] : &:r35_11257 +# 35| r35_11259(glval) = FunctionAddress[String] : +# 35| v35_11260(void) = Call[String] : func:r35_11259, this:r35_11257 +# 35| mu35_11261(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11257 +# 35| r35_11263(glval) = VariableAddress[x804] : +# 35| r35_11264(glval) = FunctionAddress[~String] : +# 35| v35_11265(void) = Call[~String] : func:r35_11264, this:r35_11263 +# 35| mu35_11266(unknown) = ^CallSideEffect : ~m? +# 35| v35_11267(void) = ^IndirectReadSideEffect[-1] : &:r35_11263, ~m? +# 35| mu35_11268(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11263 +# 35| r35_11269(bool) = Constant[0] : +# 35| v35_11270(void) = ConditionalBranch : r35_11269 #-----| False -> Block 806 #-----| True (back edge) -> Block 805 -# 2434| Block 806 -# 2434| r2434_1(glval) = VariableAddress[x805] : -# 2434| mu2434_2(String) = Uninitialized[x805] : &:r2434_1 -# 2434| r2434_3(glval) = FunctionAddress[String] : -# 2434| v2434_4(void) = Call[String] : func:r2434_3, this:r2434_1 -# 2434| mu2434_5(unknown) = ^CallSideEffect : ~m? -# 2434| mu2434_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2434_1 -# 2435| r2435_1(glval) = VariableAddress[x805] : -# 2435| r2435_2(glval) = FunctionAddress[~String] : -# 2435| v2435_3(void) = Call[~String] : func:r2435_2, this:r2435_1 -# 2435| mu2435_4(unknown) = ^CallSideEffect : ~m? -# 2435| v2435_5(void) = ^IndirectReadSideEffect[-1] : &:r2435_1, ~m? -# 2435| mu2435_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2435_1 -# 2435| r2435_7(bool) = Constant[0] : -# 2435| v2435_8(void) = ConditionalBranch : r2435_7 +# 35| Block 806 +# 35| r35_11271(glval) = VariableAddress[x805] : +# 35| mu35_11272(String) = Uninitialized[x805] : &:r35_11271 +# 35| r35_11273(glval) = FunctionAddress[String] : +# 35| v35_11274(void) = Call[String] : func:r35_11273, this:r35_11271 +# 35| mu35_11275(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11271 +# 35| r35_11277(glval) = VariableAddress[x805] : +# 35| r35_11278(glval) = FunctionAddress[~String] : +# 35| v35_11279(void) = Call[~String] : func:r35_11278, this:r35_11277 +# 35| mu35_11280(unknown) = ^CallSideEffect : ~m? +# 35| v35_11281(void) = ^IndirectReadSideEffect[-1] : &:r35_11277, ~m? +# 35| mu35_11282(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11277 +# 35| r35_11283(bool) = Constant[0] : +# 35| v35_11284(void) = ConditionalBranch : r35_11283 #-----| False -> Block 807 #-----| True (back edge) -> Block 806 -# 2437| Block 807 -# 2437| r2437_1(glval) = VariableAddress[x806] : -# 2437| mu2437_2(String) = Uninitialized[x806] : &:r2437_1 -# 2437| r2437_3(glval) = FunctionAddress[String] : -# 2437| v2437_4(void) = Call[String] : func:r2437_3, this:r2437_1 -# 2437| mu2437_5(unknown) = ^CallSideEffect : ~m? -# 2437| mu2437_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2437_1 -# 2438| r2438_1(glval) = VariableAddress[x806] : -# 2438| r2438_2(glval) = FunctionAddress[~String] : -# 2438| v2438_3(void) = Call[~String] : func:r2438_2, this:r2438_1 -# 2438| mu2438_4(unknown) = ^CallSideEffect : ~m? -# 2438| v2438_5(void) = ^IndirectReadSideEffect[-1] : &:r2438_1, ~m? -# 2438| mu2438_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2438_1 -# 2438| r2438_7(bool) = Constant[0] : -# 2438| v2438_8(void) = ConditionalBranch : r2438_7 +# 35| Block 807 +# 35| r35_11285(glval) = VariableAddress[x806] : +# 35| mu35_11286(String) = Uninitialized[x806] : &:r35_11285 +# 35| r35_11287(glval) = FunctionAddress[String] : +# 35| v35_11288(void) = Call[String] : func:r35_11287, this:r35_11285 +# 35| mu35_11289(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11285 +# 35| r35_11291(glval) = VariableAddress[x806] : +# 35| r35_11292(glval) = FunctionAddress[~String] : +# 35| v35_11293(void) = Call[~String] : func:r35_11292, this:r35_11291 +# 35| mu35_11294(unknown) = ^CallSideEffect : ~m? +# 35| v35_11295(void) = ^IndirectReadSideEffect[-1] : &:r35_11291, ~m? +# 35| mu35_11296(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11291 +# 35| r35_11297(bool) = Constant[0] : +# 35| v35_11298(void) = ConditionalBranch : r35_11297 #-----| False -> Block 808 #-----| True (back edge) -> Block 807 -# 2440| Block 808 -# 2440| r2440_1(glval) = VariableAddress[x807] : -# 2440| mu2440_2(String) = Uninitialized[x807] : &:r2440_1 -# 2440| r2440_3(glval) = FunctionAddress[String] : -# 2440| v2440_4(void) = Call[String] : func:r2440_3, this:r2440_1 -# 2440| mu2440_5(unknown) = ^CallSideEffect : ~m? -# 2440| mu2440_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2440_1 -# 2441| r2441_1(glval) = VariableAddress[x807] : -# 2441| r2441_2(glval) = FunctionAddress[~String] : -# 2441| v2441_3(void) = Call[~String] : func:r2441_2, this:r2441_1 -# 2441| mu2441_4(unknown) = ^CallSideEffect : ~m? -# 2441| v2441_5(void) = ^IndirectReadSideEffect[-1] : &:r2441_1, ~m? -# 2441| mu2441_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2441_1 -# 2441| r2441_7(bool) = Constant[0] : -# 2441| v2441_8(void) = ConditionalBranch : r2441_7 +# 35| Block 808 +# 35| r35_11299(glval) = VariableAddress[x807] : +# 35| mu35_11300(String) = Uninitialized[x807] : &:r35_11299 +# 35| r35_11301(glval) = FunctionAddress[String] : +# 35| v35_11302(void) = Call[String] : func:r35_11301, this:r35_11299 +# 35| mu35_11303(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11299 +# 35| r35_11305(glval) = VariableAddress[x807] : +# 35| r35_11306(glval) = FunctionAddress[~String] : +# 35| v35_11307(void) = Call[~String] : func:r35_11306, this:r35_11305 +# 35| mu35_11308(unknown) = ^CallSideEffect : ~m? +# 35| v35_11309(void) = ^IndirectReadSideEffect[-1] : &:r35_11305, ~m? +# 35| mu35_11310(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11305 +# 35| r35_11311(bool) = Constant[0] : +# 35| v35_11312(void) = ConditionalBranch : r35_11311 #-----| False -> Block 809 #-----| True (back edge) -> Block 808 -# 2443| Block 809 -# 2443| r2443_1(glval) = VariableAddress[x808] : -# 2443| mu2443_2(String) = Uninitialized[x808] : &:r2443_1 -# 2443| r2443_3(glval) = FunctionAddress[String] : -# 2443| v2443_4(void) = Call[String] : func:r2443_3, this:r2443_1 -# 2443| mu2443_5(unknown) = ^CallSideEffect : ~m? -# 2443| mu2443_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2443_1 -# 2444| r2444_1(glval) = VariableAddress[x808] : -# 2444| r2444_2(glval) = FunctionAddress[~String] : -# 2444| v2444_3(void) = Call[~String] : func:r2444_2, this:r2444_1 -# 2444| mu2444_4(unknown) = ^CallSideEffect : ~m? -# 2444| v2444_5(void) = ^IndirectReadSideEffect[-1] : &:r2444_1, ~m? -# 2444| mu2444_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2444_1 -# 2444| r2444_7(bool) = Constant[0] : -# 2444| v2444_8(void) = ConditionalBranch : r2444_7 +# 35| Block 809 +# 35| r35_11313(glval) = VariableAddress[x808] : +# 35| mu35_11314(String) = Uninitialized[x808] : &:r35_11313 +# 35| r35_11315(glval) = FunctionAddress[String] : +# 35| v35_11316(void) = Call[String] : func:r35_11315, this:r35_11313 +# 35| mu35_11317(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11313 +# 35| r35_11319(glval) = VariableAddress[x808] : +# 35| r35_11320(glval) = FunctionAddress[~String] : +# 35| v35_11321(void) = Call[~String] : func:r35_11320, this:r35_11319 +# 35| mu35_11322(unknown) = ^CallSideEffect : ~m? +# 35| v35_11323(void) = ^IndirectReadSideEffect[-1] : &:r35_11319, ~m? +# 35| mu35_11324(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11319 +# 35| r35_11325(bool) = Constant[0] : +# 35| v35_11326(void) = ConditionalBranch : r35_11325 #-----| False -> Block 810 #-----| True (back edge) -> Block 809 -# 2446| Block 810 -# 2446| r2446_1(glval) = VariableAddress[x809] : -# 2446| mu2446_2(String) = Uninitialized[x809] : &:r2446_1 -# 2446| r2446_3(glval) = FunctionAddress[String] : -# 2446| v2446_4(void) = Call[String] : func:r2446_3, this:r2446_1 -# 2446| mu2446_5(unknown) = ^CallSideEffect : ~m? -# 2446| mu2446_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2446_1 -# 2447| r2447_1(glval) = VariableAddress[x809] : -# 2447| r2447_2(glval) = FunctionAddress[~String] : -# 2447| v2447_3(void) = Call[~String] : func:r2447_2, this:r2447_1 -# 2447| mu2447_4(unknown) = ^CallSideEffect : ~m? -# 2447| v2447_5(void) = ^IndirectReadSideEffect[-1] : &:r2447_1, ~m? -# 2447| mu2447_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2447_1 -# 2447| r2447_7(bool) = Constant[0] : -# 2447| v2447_8(void) = ConditionalBranch : r2447_7 +# 35| Block 810 +# 35| r35_11327(glval) = VariableAddress[x809] : +# 35| mu35_11328(String) = Uninitialized[x809] : &:r35_11327 +# 35| r35_11329(glval) = FunctionAddress[String] : +# 35| v35_11330(void) = Call[String] : func:r35_11329, this:r35_11327 +# 35| mu35_11331(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11327 +# 35| r35_11333(glval) = VariableAddress[x809] : +# 35| r35_11334(glval) = FunctionAddress[~String] : +# 35| v35_11335(void) = Call[~String] : func:r35_11334, this:r35_11333 +# 35| mu35_11336(unknown) = ^CallSideEffect : ~m? +# 35| v35_11337(void) = ^IndirectReadSideEffect[-1] : &:r35_11333, ~m? +# 35| mu35_11338(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11333 +# 35| r35_11339(bool) = Constant[0] : +# 35| v35_11340(void) = ConditionalBranch : r35_11339 #-----| False -> Block 811 #-----| True (back edge) -> Block 810 -# 2449| Block 811 -# 2449| r2449_1(glval) = VariableAddress[x810] : -# 2449| mu2449_2(String) = Uninitialized[x810] : &:r2449_1 -# 2449| r2449_3(glval) = FunctionAddress[String] : -# 2449| v2449_4(void) = Call[String] : func:r2449_3, this:r2449_1 -# 2449| mu2449_5(unknown) = ^CallSideEffect : ~m? -# 2449| mu2449_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2449_1 -# 2450| r2450_1(glval) = VariableAddress[x810] : -# 2450| r2450_2(glval) = FunctionAddress[~String] : -# 2450| v2450_3(void) = Call[~String] : func:r2450_2, this:r2450_1 -# 2450| mu2450_4(unknown) = ^CallSideEffect : ~m? -# 2450| v2450_5(void) = ^IndirectReadSideEffect[-1] : &:r2450_1, ~m? -# 2450| mu2450_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2450_1 -# 2450| r2450_7(bool) = Constant[0] : -# 2450| v2450_8(void) = ConditionalBranch : r2450_7 +# 35| Block 811 +# 35| r35_11341(glval) = VariableAddress[x810] : +# 35| mu35_11342(String) = Uninitialized[x810] : &:r35_11341 +# 35| r35_11343(glval) = FunctionAddress[String] : +# 35| v35_11344(void) = Call[String] : func:r35_11343, this:r35_11341 +# 35| mu35_11345(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11341 +# 35| r35_11347(glval) = VariableAddress[x810] : +# 35| r35_11348(glval) = FunctionAddress[~String] : +# 35| v35_11349(void) = Call[~String] : func:r35_11348, this:r35_11347 +# 35| mu35_11350(unknown) = ^CallSideEffect : ~m? +# 35| v35_11351(void) = ^IndirectReadSideEffect[-1] : &:r35_11347, ~m? +# 35| mu35_11352(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11347 +# 35| r35_11353(bool) = Constant[0] : +# 35| v35_11354(void) = ConditionalBranch : r35_11353 #-----| False -> Block 812 #-----| True (back edge) -> Block 811 -# 2452| Block 812 -# 2452| r2452_1(glval) = VariableAddress[x811] : -# 2452| mu2452_2(String) = Uninitialized[x811] : &:r2452_1 -# 2452| r2452_3(glval) = FunctionAddress[String] : -# 2452| v2452_4(void) = Call[String] : func:r2452_3, this:r2452_1 -# 2452| mu2452_5(unknown) = ^CallSideEffect : ~m? -# 2452| mu2452_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2452_1 -# 2453| r2453_1(glval) = VariableAddress[x811] : -# 2453| r2453_2(glval) = FunctionAddress[~String] : -# 2453| v2453_3(void) = Call[~String] : func:r2453_2, this:r2453_1 -# 2453| mu2453_4(unknown) = ^CallSideEffect : ~m? -# 2453| v2453_5(void) = ^IndirectReadSideEffect[-1] : &:r2453_1, ~m? -# 2453| mu2453_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2453_1 -# 2453| r2453_7(bool) = Constant[0] : -# 2453| v2453_8(void) = ConditionalBranch : r2453_7 +# 35| Block 812 +# 35| r35_11355(glval) = VariableAddress[x811] : +# 35| mu35_11356(String) = Uninitialized[x811] : &:r35_11355 +# 35| r35_11357(glval) = FunctionAddress[String] : +# 35| v35_11358(void) = Call[String] : func:r35_11357, this:r35_11355 +# 35| mu35_11359(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11355 +# 35| r35_11361(glval) = VariableAddress[x811] : +# 35| r35_11362(glval) = FunctionAddress[~String] : +# 35| v35_11363(void) = Call[~String] : func:r35_11362, this:r35_11361 +# 35| mu35_11364(unknown) = ^CallSideEffect : ~m? +# 35| v35_11365(void) = ^IndirectReadSideEffect[-1] : &:r35_11361, ~m? +# 35| mu35_11366(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11361 +# 35| r35_11367(bool) = Constant[0] : +# 35| v35_11368(void) = ConditionalBranch : r35_11367 #-----| False -> Block 813 #-----| True (back edge) -> Block 812 -# 2455| Block 813 -# 2455| r2455_1(glval) = VariableAddress[x812] : -# 2455| mu2455_2(String) = Uninitialized[x812] : &:r2455_1 -# 2455| r2455_3(glval) = FunctionAddress[String] : -# 2455| v2455_4(void) = Call[String] : func:r2455_3, this:r2455_1 -# 2455| mu2455_5(unknown) = ^CallSideEffect : ~m? -# 2455| mu2455_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2455_1 -# 2456| r2456_1(glval) = VariableAddress[x812] : -# 2456| r2456_2(glval) = FunctionAddress[~String] : -# 2456| v2456_3(void) = Call[~String] : func:r2456_2, this:r2456_1 -# 2456| mu2456_4(unknown) = ^CallSideEffect : ~m? -# 2456| v2456_5(void) = ^IndirectReadSideEffect[-1] : &:r2456_1, ~m? -# 2456| mu2456_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2456_1 -# 2456| r2456_7(bool) = Constant[0] : -# 2456| v2456_8(void) = ConditionalBranch : r2456_7 +# 35| Block 813 +# 35| r35_11369(glval) = VariableAddress[x812] : +# 35| mu35_11370(String) = Uninitialized[x812] : &:r35_11369 +# 35| r35_11371(glval) = FunctionAddress[String] : +# 35| v35_11372(void) = Call[String] : func:r35_11371, this:r35_11369 +# 35| mu35_11373(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11369 +# 35| r35_11375(glval) = VariableAddress[x812] : +# 35| r35_11376(glval) = FunctionAddress[~String] : +# 35| v35_11377(void) = Call[~String] : func:r35_11376, this:r35_11375 +# 35| mu35_11378(unknown) = ^CallSideEffect : ~m? +# 35| v35_11379(void) = ^IndirectReadSideEffect[-1] : &:r35_11375, ~m? +# 35| mu35_11380(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11375 +# 35| r35_11381(bool) = Constant[0] : +# 35| v35_11382(void) = ConditionalBranch : r35_11381 #-----| False -> Block 814 #-----| True (back edge) -> Block 813 -# 2458| Block 814 -# 2458| r2458_1(glval) = VariableAddress[x813] : -# 2458| mu2458_2(String) = Uninitialized[x813] : &:r2458_1 -# 2458| r2458_3(glval) = FunctionAddress[String] : -# 2458| v2458_4(void) = Call[String] : func:r2458_3, this:r2458_1 -# 2458| mu2458_5(unknown) = ^CallSideEffect : ~m? -# 2458| mu2458_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2458_1 -# 2459| r2459_1(glval) = VariableAddress[x813] : -# 2459| r2459_2(glval) = FunctionAddress[~String] : -# 2459| v2459_3(void) = Call[~String] : func:r2459_2, this:r2459_1 -# 2459| mu2459_4(unknown) = ^CallSideEffect : ~m? -# 2459| v2459_5(void) = ^IndirectReadSideEffect[-1] : &:r2459_1, ~m? -# 2459| mu2459_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2459_1 -# 2459| r2459_7(bool) = Constant[0] : -# 2459| v2459_8(void) = ConditionalBranch : r2459_7 +# 35| Block 814 +# 35| r35_11383(glval) = VariableAddress[x813] : +# 35| mu35_11384(String) = Uninitialized[x813] : &:r35_11383 +# 35| r35_11385(glval) = FunctionAddress[String] : +# 35| v35_11386(void) = Call[String] : func:r35_11385, this:r35_11383 +# 35| mu35_11387(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11383 +# 35| r35_11389(glval) = VariableAddress[x813] : +# 35| r35_11390(glval) = FunctionAddress[~String] : +# 35| v35_11391(void) = Call[~String] : func:r35_11390, this:r35_11389 +# 35| mu35_11392(unknown) = ^CallSideEffect : ~m? +# 35| v35_11393(void) = ^IndirectReadSideEffect[-1] : &:r35_11389, ~m? +# 35| mu35_11394(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11389 +# 35| r35_11395(bool) = Constant[0] : +# 35| v35_11396(void) = ConditionalBranch : r35_11395 #-----| False -> Block 815 #-----| True (back edge) -> Block 814 -# 2461| Block 815 -# 2461| r2461_1(glval) = VariableAddress[x814] : -# 2461| mu2461_2(String) = Uninitialized[x814] : &:r2461_1 -# 2461| r2461_3(glval) = FunctionAddress[String] : -# 2461| v2461_4(void) = Call[String] : func:r2461_3, this:r2461_1 -# 2461| mu2461_5(unknown) = ^CallSideEffect : ~m? -# 2461| mu2461_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2461_1 -# 2462| r2462_1(glval) = VariableAddress[x814] : -# 2462| r2462_2(glval) = FunctionAddress[~String] : -# 2462| v2462_3(void) = Call[~String] : func:r2462_2, this:r2462_1 -# 2462| mu2462_4(unknown) = ^CallSideEffect : ~m? -# 2462| v2462_5(void) = ^IndirectReadSideEffect[-1] : &:r2462_1, ~m? -# 2462| mu2462_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2462_1 -# 2462| r2462_7(bool) = Constant[0] : -# 2462| v2462_8(void) = ConditionalBranch : r2462_7 +# 35| Block 815 +# 35| r35_11397(glval) = VariableAddress[x814] : +# 35| mu35_11398(String) = Uninitialized[x814] : &:r35_11397 +# 35| r35_11399(glval) = FunctionAddress[String] : +# 35| v35_11400(void) = Call[String] : func:r35_11399, this:r35_11397 +# 35| mu35_11401(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11397 +# 35| r35_11403(glval) = VariableAddress[x814] : +# 35| r35_11404(glval) = FunctionAddress[~String] : +# 35| v35_11405(void) = Call[~String] : func:r35_11404, this:r35_11403 +# 35| mu35_11406(unknown) = ^CallSideEffect : ~m? +# 35| v35_11407(void) = ^IndirectReadSideEffect[-1] : &:r35_11403, ~m? +# 35| mu35_11408(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11403 +# 35| r35_11409(bool) = Constant[0] : +# 35| v35_11410(void) = ConditionalBranch : r35_11409 #-----| False -> Block 816 #-----| True (back edge) -> Block 815 -# 2464| Block 816 -# 2464| r2464_1(glval) = VariableAddress[x815] : -# 2464| mu2464_2(String) = Uninitialized[x815] : &:r2464_1 -# 2464| r2464_3(glval) = FunctionAddress[String] : -# 2464| v2464_4(void) = Call[String] : func:r2464_3, this:r2464_1 -# 2464| mu2464_5(unknown) = ^CallSideEffect : ~m? -# 2464| mu2464_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2464_1 -# 2465| r2465_1(glval) = VariableAddress[x815] : -# 2465| r2465_2(glval) = FunctionAddress[~String] : -# 2465| v2465_3(void) = Call[~String] : func:r2465_2, this:r2465_1 -# 2465| mu2465_4(unknown) = ^CallSideEffect : ~m? -# 2465| v2465_5(void) = ^IndirectReadSideEffect[-1] : &:r2465_1, ~m? -# 2465| mu2465_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2465_1 -# 2465| r2465_7(bool) = Constant[0] : -# 2465| v2465_8(void) = ConditionalBranch : r2465_7 +# 35| Block 816 +# 35| r35_11411(glval) = VariableAddress[x815] : +# 35| mu35_11412(String) = Uninitialized[x815] : &:r35_11411 +# 35| r35_11413(glval) = FunctionAddress[String] : +# 35| v35_11414(void) = Call[String] : func:r35_11413, this:r35_11411 +# 35| mu35_11415(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11411 +# 35| r35_11417(glval) = VariableAddress[x815] : +# 35| r35_11418(glval) = FunctionAddress[~String] : +# 35| v35_11419(void) = Call[~String] : func:r35_11418, this:r35_11417 +# 35| mu35_11420(unknown) = ^CallSideEffect : ~m? +# 35| v35_11421(void) = ^IndirectReadSideEffect[-1] : &:r35_11417, ~m? +# 35| mu35_11422(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11417 +# 35| r35_11423(bool) = Constant[0] : +# 35| v35_11424(void) = ConditionalBranch : r35_11423 #-----| False -> Block 817 #-----| True (back edge) -> Block 816 -# 2467| Block 817 -# 2467| r2467_1(glval) = VariableAddress[x816] : -# 2467| mu2467_2(String) = Uninitialized[x816] : &:r2467_1 -# 2467| r2467_3(glval) = FunctionAddress[String] : -# 2467| v2467_4(void) = Call[String] : func:r2467_3, this:r2467_1 -# 2467| mu2467_5(unknown) = ^CallSideEffect : ~m? -# 2467| mu2467_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2467_1 -# 2468| r2468_1(glval) = VariableAddress[x816] : -# 2468| r2468_2(glval) = FunctionAddress[~String] : -# 2468| v2468_3(void) = Call[~String] : func:r2468_2, this:r2468_1 -# 2468| mu2468_4(unknown) = ^CallSideEffect : ~m? -# 2468| v2468_5(void) = ^IndirectReadSideEffect[-1] : &:r2468_1, ~m? -# 2468| mu2468_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2468_1 -# 2468| r2468_7(bool) = Constant[0] : -# 2468| v2468_8(void) = ConditionalBranch : r2468_7 +# 35| Block 817 +# 35| r35_11425(glval) = VariableAddress[x816] : +# 35| mu35_11426(String) = Uninitialized[x816] : &:r35_11425 +# 35| r35_11427(glval) = FunctionAddress[String] : +# 35| v35_11428(void) = Call[String] : func:r35_11427, this:r35_11425 +# 35| mu35_11429(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11425 +# 35| r35_11431(glval) = VariableAddress[x816] : +# 35| r35_11432(glval) = FunctionAddress[~String] : +# 35| v35_11433(void) = Call[~String] : func:r35_11432, this:r35_11431 +# 35| mu35_11434(unknown) = ^CallSideEffect : ~m? +# 35| v35_11435(void) = ^IndirectReadSideEffect[-1] : &:r35_11431, ~m? +# 35| mu35_11436(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11431 +# 35| r35_11437(bool) = Constant[0] : +# 35| v35_11438(void) = ConditionalBranch : r35_11437 #-----| False -> Block 818 #-----| True (back edge) -> Block 817 -# 2470| Block 818 -# 2470| r2470_1(glval) = VariableAddress[x817] : -# 2470| mu2470_2(String) = Uninitialized[x817] : &:r2470_1 -# 2470| r2470_3(glval) = FunctionAddress[String] : -# 2470| v2470_4(void) = Call[String] : func:r2470_3, this:r2470_1 -# 2470| mu2470_5(unknown) = ^CallSideEffect : ~m? -# 2470| mu2470_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2470_1 -# 2471| r2471_1(glval) = VariableAddress[x817] : -# 2471| r2471_2(glval) = FunctionAddress[~String] : -# 2471| v2471_3(void) = Call[~String] : func:r2471_2, this:r2471_1 -# 2471| mu2471_4(unknown) = ^CallSideEffect : ~m? -# 2471| v2471_5(void) = ^IndirectReadSideEffect[-1] : &:r2471_1, ~m? -# 2471| mu2471_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2471_1 -# 2471| r2471_7(bool) = Constant[0] : -# 2471| v2471_8(void) = ConditionalBranch : r2471_7 +# 35| Block 818 +# 35| r35_11439(glval) = VariableAddress[x817] : +# 35| mu35_11440(String) = Uninitialized[x817] : &:r35_11439 +# 35| r35_11441(glval) = FunctionAddress[String] : +# 35| v35_11442(void) = Call[String] : func:r35_11441, this:r35_11439 +# 35| mu35_11443(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11439 +# 35| r35_11445(glval) = VariableAddress[x817] : +# 35| r35_11446(glval) = FunctionAddress[~String] : +# 35| v35_11447(void) = Call[~String] : func:r35_11446, this:r35_11445 +# 35| mu35_11448(unknown) = ^CallSideEffect : ~m? +# 35| v35_11449(void) = ^IndirectReadSideEffect[-1] : &:r35_11445, ~m? +# 35| mu35_11450(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11445 +# 35| r35_11451(bool) = Constant[0] : +# 35| v35_11452(void) = ConditionalBranch : r35_11451 #-----| False -> Block 819 #-----| True (back edge) -> Block 818 -# 2473| Block 819 -# 2473| r2473_1(glval) = VariableAddress[x818] : -# 2473| mu2473_2(String) = Uninitialized[x818] : &:r2473_1 -# 2473| r2473_3(glval) = FunctionAddress[String] : -# 2473| v2473_4(void) = Call[String] : func:r2473_3, this:r2473_1 -# 2473| mu2473_5(unknown) = ^CallSideEffect : ~m? -# 2473| mu2473_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2473_1 -# 2474| r2474_1(glval) = VariableAddress[x818] : -# 2474| r2474_2(glval) = FunctionAddress[~String] : -# 2474| v2474_3(void) = Call[~String] : func:r2474_2, this:r2474_1 -# 2474| mu2474_4(unknown) = ^CallSideEffect : ~m? -# 2474| v2474_5(void) = ^IndirectReadSideEffect[-1] : &:r2474_1, ~m? -# 2474| mu2474_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2474_1 -# 2474| r2474_7(bool) = Constant[0] : -# 2474| v2474_8(void) = ConditionalBranch : r2474_7 +# 35| Block 819 +# 35| r35_11453(glval) = VariableAddress[x818] : +# 35| mu35_11454(String) = Uninitialized[x818] : &:r35_11453 +# 35| r35_11455(glval) = FunctionAddress[String] : +# 35| v35_11456(void) = Call[String] : func:r35_11455, this:r35_11453 +# 35| mu35_11457(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11453 +# 35| r35_11459(glval) = VariableAddress[x818] : +# 35| r35_11460(glval) = FunctionAddress[~String] : +# 35| v35_11461(void) = Call[~String] : func:r35_11460, this:r35_11459 +# 35| mu35_11462(unknown) = ^CallSideEffect : ~m? +# 35| v35_11463(void) = ^IndirectReadSideEffect[-1] : &:r35_11459, ~m? +# 35| mu35_11464(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11459 +# 35| r35_11465(bool) = Constant[0] : +# 35| v35_11466(void) = ConditionalBranch : r35_11465 #-----| False -> Block 820 #-----| True (back edge) -> Block 819 -# 2476| Block 820 -# 2476| r2476_1(glval) = VariableAddress[x819] : -# 2476| mu2476_2(String) = Uninitialized[x819] : &:r2476_1 -# 2476| r2476_3(glval) = FunctionAddress[String] : -# 2476| v2476_4(void) = Call[String] : func:r2476_3, this:r2476_1 -# 2476| mu2476_5(unknown) = ^CallSideEffect : ~m? -# 2476| mu2476_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2476_1 -# 2477| r2477_1(glval) = VariableAddress[x819] : -# 2477| r2477_2(glval) = FunctionAddress[~String] : -# 2477| v2477_3(void) = Call[~String] : func:r2477_2, this:r2477_1 -# 2477| mu2477_4(unknown) = ^CallSideEffect : ~m? -# 2477| v2477_5(void) = ^IndirectReadSideEffect[-1] : &:r2477_1, ~m? -# 2477| mu2477_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2477_1 -# 2477| r2477_7(bool) = Constant[0] : -# 2477| v2477_8(void) = ConditionalBranch : r2477_7 +# 35| Block 820 +# 35| r35_11467(glval) = VariableAddress[x819] : +# 35| mu35_11468(String) = Uninitialized[x819] : &:r35_11467 +# 35| r35_11469(glval) = FunctionAddress[String] : +# 35| v35_11470(void) = Call[String] : func:r35_11469, this:r35_11467 +# 35| mu35_11471(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11467 +# 35| r35_11473(glval) = VariableAddress[x819] : +# 35| r35_11474(glval) = FunctionAddress[~String] : +# 35| v35_11475(void) = Call[~String] : func:r35_11474, this:r35_11473 +# 35| mu35_11476(unknown) = ^CallSideEffect : ~m? +# 35| v35_11477(void) = ^IndirectReadSideEffect[-1] : &:r35_11473, ~m? +# 35| mu35_11478(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11473 +# 35| r35_11479(bool) = Constant[0] : +# 35| v35_11480(void) = ConditionalBranch : r35_11479 #-----| False -> Block 821 #-----| True (back edge) -> Block 820 -# 2479| Block 821 -# 2479| r2479_1(glval) = VariableAddress[x820] : -# 2479| mu2479_2(String) = Uninitialized[x820] : &:r2479_1 -# 2479| r2479_3(glval) = FunctionAddress[String] : -# 2479| v2479_4(void) = Call[String] : func:r2479_3, this:r2479_1 -# 2479| mu2479_5(unknown) = ^CallSideEffect : ~m? -# 2479| mu2479_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2479_1 -# 2480| r2480_1(glval) = VariableAddress[x820] : -# 2480| r2480_2(glval) = FunctionAddress[~String] : -# 2480| v2480_3(void) = Call[~String] : func:r2480_2, this:r2480_1 -# 2480| mu2480_4(unknown) = ^CallSideEffect : ~m? -# 2480| v2480_5(void) = ^IndirectReadSideEffect[-1] : &:r2480_1, ~m? -# 2480| mu2480_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2480_1 -# 2480| r2480_7(bool) = Constant[0] : -# 2480| v2480_8(void) = ConditionalBranch : r2480_7 +# 35| Block 821 +# 35| r35_11481(glval) = VariableAddress[x820] : +# 35| mu35_11482(String) = Uninitialized[x820] : &:r35_11481 +# 35| r35_11483(glval) = FunctionAddress[String] : +# 35| v35_11484(void) = Call[String] : func:r35_11483, this:r35_11481 +# 35| mu35_11485(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11481 +# 35| r35_11487(glval) = VariableAddress[x820] : +# 35| r35_11488(glval) = FunctionAddress[~String] : +# 35| v35_11489(void) = Call[~String] : func:r35_11488, this:r35_11487 +# 35| mu35_11490(unknown) = ^CallSideEffect : ~m? +# 35| v35_11491(void) = ^IndirectReadSideEffect[-1] : &:r35_11487, ~m? +# 35| mu35_11492(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11487 +# 35| r35_11493(bool) = Constant[0] : +# 35| v35_11494(void) = ConditionalBranch : r35_11493 #-----| False -> Block 822 #-----| True (back edge) -> Block 821 -# 2482| Block 822 -# 2482| r2482_1(glval) = VariableAddress[x821] : -# 2482| mu2482_2(String) = Uninitialized[x821] : &:r2482_1 -# 2482| r2482_3(glval) = FunctionAddress[String] : -# 2482| v2482_4(void) = Call[String] : func:r2482_3, this:r2482_1 -# 2482| mu2482_5(unknown) = ^CallSideEffect : ~m? -# 2482| mu2482_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2482_1 -# 2483| r2483_1(glval) = VariableAddress[x821] : -# 2483| r2483_2(glval) = FunctionAddress[~String] : -# 2483| v2483_3(void) = Call[~String] : func:r2483_2, this:r2483_1 -# 2483| mu2483_4(unknown) = ^CallSideEffect : ~m? -# 2483| v2483_5(void) = ^IndirectReadSideEffect[-1] : &:r2483_1, ~m? -# 2483| mu2483_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2483_1 -# 2483| r2483_7(bool) = Constant[0] : -# 2483| v2483_8(void) = ConditionalBranch : r2483_7 +# 35| Block 822 +# 35| r35_11495(glval) = VariableAddress[x821] : +# 35| mu35_11496(String) = Uninitialized[x821] : &:r35_11495 +# 35| r35_11497(glval) = FunctionAddress[String] : +# 35| v35_11498(void) = Call[String] : func:r35_11497, this:r35_11495 +# 35| mu35_11499(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11495 +# 35| r35_11501(glval) = VariableAddress[x821] : +# 35| r35_11502(glval) = FunctionAddress[~String] : +# 35| v35_11503(void) = Call[~String] : func:r35_11502, this:r35_11501 +# 35| mu35_11504(unknown) = ^CallSideEffect : ~m? +# 35| v35_11505(void) = ^IndirectReadSideEffect[-1] : &:r35_11501, ~m? +# 35| mu35_11506(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11501 +# 35| r35_11507(bool) = Constant[0] : +# 35| v35_11508(void) = ConditionalBranch : r35_11507 #-----| False -> Block 823 #-----| True (back edge) -> Block 822 -# 2485| Block 823 -# 2485| r2485_1(glval) = VariableAddress[x822] : -# 2485| mu2485_2(String) = Uninitialized[x822] : &:r2485_1 -# 2485| r2485_3(glval) = FunctionAddress[String] : -# 2485| v2485_4(void) = Call[String] : func:r2485_3, this:r2485_1 -# 2485| mu2485_5(unknown) = ^CallSideEffect : ~m? -# 2485| mu2485_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2485_1 -# 2486| r2486_1(glval) = VariableAddress[x822] : -# 2486| r2486_2(glval) = FunctionAddress[~String] : -# 2486| v2486_3(void) = Call[~String] : func:r2486_2, this:r2486_1 -# 2486| mu2486_4(unknown) = ^CallSideEffect : ~m? -# 2486| v2486_5(void) = ^IndirectReadSideEffect[-1] : &:r2486_1, ~m? -# 2486| mu2486_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2486_1 -# 2486| r2486_7(bool) = Constant[0] : -# 2486| v2486_8(void) = ConditionalBranch : r2486_7 +# 35| Block 823 +# 35| r35_11509(glval) = VariableAddress[x822] : +# 35| mu35_11510(String) = Uninitialized[x822] : &:r35_11509 +# 35| r35_11511(glval) = FunctionAddress[String] : +# 35| v35_11512(void) = Call[String] : func:r35_11511, this:r35_11509 +# 35| mu35_11513(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11509 +# 35| r35_11515(glval) = VariableAddress[x822] : +# 35| r35_11516(glval) = FunctionAddress[~String] : +# 35| v35_11517(void) = Call[~String] : func:r35_11516, this:r35_11515 +# 35| mu35_11518(unknown) = ^CallSideEffect : ~m? +# 35| v35_11519(void) = ^IndirectReadSideEffect[-1] : &:r35_11515, ~m? +# 35| mu35_11520(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11515 +# 35| r35_11521(bool) = Constant[0] : +# 35| v35_11522(void) = ConditionalBranch : r35_11521 #-----| False -> Block 824 #-----| True (back edge) -> Block 823 -# 2488| Block 824 -# 2488| r2488_1(glval) = VariableAddress[x823] : -# 2488| mu2488_2(String) = Uninitialized[x823] : &:r2488_1 -# 2488| r2488_3(glval) = FunctionAddress[String] : -# 2488| v2488_4(void) = Call[String] : func:r2488_3, this:r2488_1 -# 2488| mu2488_5(unknown) = ^CallSideEffect : ~m? -# 2488| mu2488_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2488_1 -# 2489| r2489_1(glval) = VariableAddress[x823] : -# 2489| r2489_2(glval) = FunctionAddress[~String] : -# 2489| v2489_3(void) = Call[~String] : func:r2489_2, this:r2489_1 -# 2489| mu2489_4(unknown) = ^CallSideEffect : ~m? -# 2489| v2489_5(void) = ^IndirectReadSideEffect[-1] : &:r2489_1, ~m? -# 2489| mu2489_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2489_1 -# 2489| r2489_7(bool) = Constant[0] : -# 2489| v2489_8(void) = ConditionalBranch : r2489_7 +# 35| Block 824 +# 35| r35_11523(glval) = VariableAddress[x823] : +# 35| mu35_11524(String) = Uninitialized[x823] : &:r35_11523 +# 35| r35_11525(glval) = FunctionAddress[String] : +# 35| v35_11526(void) = Call[String] : func:r35_11525, this:r35_11523 +# 35| mu35_11527(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11523 +# 35| r35_11529(glval) = VariableAddress[x823] : +# 35| r35_11530(glval) = FunctionAddress[~String] : +# 35| v35_11531(void) = Call[~String] : func:r35_11530, this:r35_11529 +# 35| mu35_11532(unknown) = ^CallSideEffect : ~m? +# 35| v35_11533(void) = ^IndirectReadSideEffect[-1] : &:r35_11529, ~m? +# 35| mu35_11534(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11529 +# 35| r35_11535(bool) = Constant[0] : +# 35| v35_11536(void) = ConditionalBranch : r35_11535 #-----| False -> Block 825 #-----| True (back edge) -> Block 824 -# 2491| Block 825 -# 2491| r2491_1(glval) = VariableAddress[x824] : -# 2491| mu2491_2(String) = Uninitialized[x824] : &:r2491_1 -# 2491| r2491_3(glval) = FunctionAddress[String] : -# 2491| v2491_4(void) = Call[String] : func:r2491_3, this:r2491_1 -# 2491| mu2491_5(unknown) = ^CallSideEffect : ~m? -# 2491| mu2491_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2491_1 -# 2492| r2492_1(glval) = VariableAddress[x824] : -# 2492| r2492_2(glval) = FunctionAddress[~String] : -# 2492| v2492_3(void) = Call[~String] : func:r2492_2, this:r2492_1 -# 2492| mu2492_4(unknown) = ^CallSideEffect : ~m? -# 2492| v2492_5(void) = ^IndirectReadSideEffect[-1] : &:r2492_1, ~m? -# 2492| mu2492_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2492_1 -# 2492| r2492_7(bool) = Constant[0] : -# 2492| v2492_8(void) = ConditionalBranch : r2492_7 +# 35| Block 825 +# 35| r35_11537(glval) = VariableAddress[x824] : +# 35| mu35_11538(String) = Uninitialized[x824] : &:r35_11537 +# 35| r35_11539(glval) = FunctionAddress[String] : +# 35| v35_11540(void) = Call[String] : func:r35_11539, this:r35_11537 +# 35| mu35_11541(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11537 +# 35| r35_11543(glval) = VariableAddress[x824] : +# 35| r35_11544(glval) = FunctionAddress[~String] : +# 35| v35_11545(void) = Call[~String] : func:r35_11544, this:r35_11543 +# 35| mu35_11546(unknown) = ^CallSideEffect : ~m? +# 35| v35_11547(void) = ^IndirectReadSideEffect[-1] : &:r35_11543, ~m? +# 35| mu35_11548(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11543 +# 35| r35_11549(bool) = Constant[0] : +# 35| v35_11550(void) = ConditionalBranch : r35_11549 #-----| False -> Block 826 #-----| True (back edge) -> Block 825 -# 2494| Block 826 -# 2494| r2494_1(glval) = VariableAddress[x825] : -# 2494| mu2494_2(String) = Uninitialized[x825] : &:r2494_1 -# 2494| r2494_3(glval) = FunctionAddress[String] : -# 2494| v2494_4(void) = Call[String] : func:r2494_3, this:r2494_1 -# 2494| mu2494_5(unknown) = ^CallSideEffect : ~m? -# 2494| mu2494_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2494_1 -# 2495| r2495_1(glval) = VariableAddress[x825] : -# 2495| r2495_2(glval) = FunctionAddress[~String] : -# 2495| v2495_3(void) = Call[~String] : func:r2495_2, this:r2495_1 -# 2495| mu2495_4(unknown) = ^CallSideEffect : ~m? -# 2495| v2495_5(void) = ^IndirectReadSideEffect[-1] : &:r2495_1, ~m? -# 2495| mu2495_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2495_1 -# 2495| r2495_7(bool) = Constant[0] : -# 2495| v2495_8(void) = ConditionalBranch : r2495_7 +# 35| Block 826 +# 35| r35_11551(glval) = VariableAddress[x825] : +# 35| mu35_11552(String) = Uninitialized[x825] : &:r35_11551 +# 35| r35_11553(glval) = FunctionAddress[String] : +# 35| v35_11554(void) = Call[String] : func:r35_11553, this:r35_11551 +# 35| mu35_11555(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11551 +# 35| r35_11557(glval) = VariableAddress[x825] : +# 35| r35_11558(glval) = FunctionAddress[~String] : +# 35| v35_11559(void) = Call[~String] : func:r35_11558, this:r35_11557 +# 35| mu35_11560(unknown) = ^CallSideEffect : ~m? +# 35| v35_11561(void) = ^IndirectReadSideEffect[-1] : &:r35_11557, ~m? +# 35| mu35_11562(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11557 +# 35| r35_11563(bool) = Constant[0] : +# 35| v35_11564(void) = ConditionalBranch : r35_11563 #-----| False -> Block 827 #-----| True (back edge) -> Block 826 -# 2497| Block 827 -# 2497| r2497_1(glval) = VariableAddress[x826] : -# 2497| mu2497_2(String) = Uninitialized[x826] : &:r2497_1 -# 2497| r2497_3(glval) = FunctionAddress[String] : -# 2497| v2497_4(void) = Call[String] : func:r2497_3, this:r2497_1 -# 2497| mu2497_5(unknown) = ^CallSideEffect : ~m? -# 2497| mu2497_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2497_1 -# 2498| r2498_1(glval) = VariableAddress[x826] : -# 2498| r2498_2(glval) = FunctionAddress[~String] : -# 2498| v2498_3(void) = Call[~String] : func:r2498_2, this:r2498_1 -# 2498| mu2498_4(unknown) = ^CallSideEffect : ~m? -# 2498| v2498_5(void) = ^IndirectReadSideEffect[-1] : &:r2498_1, ~m? -# 2498| mu2498_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2498_1 -# 2498| r2498_7(bool) = Constant[0] : -# 2498| v2498_8(void) = ConditionalBranch : r2498_7 +# 35| Block 827 +# 35| r35_11565(glval) = VariableAddress[x826] : +# 35| mu35_11566(String) = Uninitialized[x826] : &:r35_11565 +# 35| r35_11567(glval) = FunctionAddress[String] : +# 35| v35_11568(void) = Call[String] : func:r35_11567, this:r35_11565 +# 35| mu35_11569(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11565 +# 35| r35_11571(glval) = VariableAddress[x826] : +# 35| r35_11572(glval) = FunctionAddress[~String] : +# 35| v35_11573(void) = Call[~String] : func:r35_11572, this:r35_11571 +# 35| mu35_11574(unknown) = ^CallSideEffect : ~m? +# 35| v35_11575(void) = ^IndirectReadSideEffect[-1] : &:r35_11571, ~m? +# 35| mu35_11576(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11571 +# 35| r35_11577(bool) = Constant[0] : +# 35| v35_11578(void) = ConditionalBranch : r35_11577 #-----| False -> Block 828 #-----| True (back edge) -> Block 827 -# 2500| Block 828 -# 2500| r2500_1(glval) = VariableAddress[x827] : -# 2500| mu2500_2(String) = Uninitialized[x827] : &:r2500_1 -# 2500| r2500_3(glval) = FunctionAddress[String] : -# 2500| v2500_4(void) = Call[String] : func:r2500_3, this:r2500_1 -# 2500| mu2500_5(unknown) = ^CallSideEffect : ~m? -# 2500| mu2500_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2500_1 -# 2501| r2501_1(glval) = VariableAddress[x827] : -# 2501| r2501_2(glval) = FunctionAddress[~String] : -# 2501| v2501_3(void) = Call[~String] : func:r2501_2, this:r2501_1 -# 2501| mu2501_4(unknown) = ^CallSideEffect : ~m? -# 2501| v2501_5(void) = ^IndirectReadSideEffect[-1] : &:r2501_1, ~m? -# 2501| mu2501_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2501_1 -# 2501| r2501_7(bool) = Constant[0] : -# 2501| v2501_8(void) = ConditionalBranch : r2501_7 +# 35| Block 828 +# 35| r35_11579(glval) = VariableAddress[x827] : +# 35| mu35_11580(String) = Uninitialized[x827] : &:r35_11579 +# 35| r35_11581(glval) = FunctionAddress[String] : +# 35| v35_11582(void) = Call[String] : func:r35_11581, this:r35_11579 +# 35| mu35_11583(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11579 +# 35| r35_11585(glval) = VariableAddress[x827] : +# 35| r35_11586(glval) = FunctionAddress[~String] : +# 35| v35_11587(void) = Call[~String] : func:r35_11586, this:r35_11585 +# 35| mu35_11588(unknown) = ^CallSideEffect : ~m? +# 35| v35_11589(void) = ^IndirectReadSideEffect[-1] : &:r35_11585, ~m? +# 35| mu35_11590(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11585 +# 35| r35_11591(bool) = Constant[0] : +# 35| v35_11592(void) = ConditionalBranch : r35_11591 #-----| False -> Block 829 #-----| True (back edge) -> Block 828 -# 2503| Block 829 -# 2503| r2503_1(glval) = VariableAddress[x828] : -# 2503| mu2503_2(String) = Uninitialized[x828] : &:r2503_1 -# 2503| r2503_3(glval) = FunctionAddress[String] : -# 2503| v2503_4(void) = Call[String] : func:r2503_3, this:r2503_1 -# 2503| mu2503_5(unknown) = ^CallSideEffect : ~m? -# 2503| mu2503_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2503_1 -# 2504| r2504_1(glval) = VariableAddress[x828] : -# 2504| r2504_2(glval) = FunctionAddress[~String] : -# 2504| v2504_3(void) = Call[~String] : func:r2504_2, this:r2504_1 -# 2504| mu2504_4(unknown) = ^CallSideEffect : ~m? -# 2504| v2504_5(void) = ^IndirectReadSideEffect[-1] : &:r2504_1, ~m? -# 2504| mu2504_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2504_1 -# 2504| r2504_7(bool) = Constant[0] : -# 2504| v2504_8(void) = ConditionalBranch : r2504_7 +# 35| Block 829 +# 35| r35_11593(glval) = VariableAddress[x828] : +# 35| mu35_11594(String) = Uninitialized[x828] : &:r35_11593 +# 35| r35_11595(glval) = FunctionAddress[String] : +# 35| v35_11596(void) = Call[String] : func:r35_11595, this:r35_11593 +# 35| mu35_11597(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11593 +# 35| r35_11599(glval) = VariableAddress[x828] : +# 35| r35_11600(glval) = FunctionAddress[~String] : +# 35| v35_11601(void) = Call[~String] : func:r35_11600, this:r35_11599 +# 35| mu35_11602(unknown) = ^CallSideEffect : ~m? +# 35| v35_11603(void) = ^IndirectReadSideEffect[-1] : &:r35_11599, ~m? +# 35| mu35_11604(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11599 +# 35| r35_11605(bool) = Constant[0] : +# 35| v35_11606(void) = ConditionalBranch : r35_11605 #-----| False -> Block 830 #-----| True (back edge) -> Block 829 -# 2506| Block 830 -# 2506| r2506_1(glval) = VariableAddress[x829] : -# 2506| mu2506_2(String) = Uninitialized[x829] : &:r2506_1 -# 2506| r2506_3(glval) = FunctionAddress[String] : -# 2506| v2506_4(void) = Call[String] : func:r2506_3, this:r2506_1 -# 2506| mu2506_5(unknown) = ^CallSideEffect : ~m? -# 2506| mu2506_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2506_1 -# 2507| r2507_1(glval) = VariableAddress[x829] : -# 2507| r2507_2(glval) = FunctionAddress[~String] : -# 2507| v2507_3(void) = Call[~String] : func:r2507_2, this:r2507_1 -# 2507| mu2507_4(unknown) = ^CallSideEffect : ~m? -# 2507| v2507_5(void) = ^IndirectReadSideEffect[-1] : &:r2507_1, ~m? -# 2507| mu2507_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2507_1 -# 2507| r2507_7(bool) = Constant[0] : -# 2507| v2507_8(void) = ConditionalBranch : r2507_7 +# 35| Block 830 +# 35| r35_11607(glval) = VariableAddress[x829] : +# 35| mu35_11608(String) = Uninitialized[x829] : &:r35_11607 +# 35| r35_11609(glval) = FunctionAddress[String] : +# 35| v35_11610(void) = Call[String] : func:r35_11609, this:r35_11607 +# 35| mu35_11611(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11607 +# 35| r35_11613(glval) = VariableAddress[x829] : +# 35| r35_11614(glval) = FunctionAddress[~String] : +# 35| v35_11615(void) = Call[~String] : func:r35_11614, this:r35_11613 +# 35| mu35_11616(unknown) = ^CallSideEffect : ~m? +# 35| v35_11617(void) = ^IndirectReadSideEffect[-1] : &:r35_11613, ~m? +# 35| mu35_11618(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11613 +# 35| r35_11619(bool) = Constant[0] : +# 35| v35_11620(void) = ConditionalBranch : r35_11619 #-----| False -> Block 831 #-----| True (back edge) -> Block 830 -# 2509| Block 831 -# 2509| r2509_1(glval) = VariableAddress[x830] : -# 2509| mu2509_2(String) = Uninitialized[x830] : &:r2509_1 -# 2509| r2509_3(glval) = FunctionAddress[String] : -# 2509| v2509_4(void) = Call[String] : func:r2509_3, this:r2509_1 -# 2509| mu2509_5(unknown) = ^CallSideEffect : ~m? -# 2509| mu2509_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2509_1 -# 2510| r2510_1(glval) = VariableAddress[x830] : -# 2510| r2510_2(glval) = FunctionAddress[~String] : -# 2510| v2510_3(void) = Call[~String] : func:r2510_2, this:r2510_1 -# 2510| mu2510_4(unknown) = ^CallSideEffect : ~m? -# 2510| v2510_5(void) = ^IndirectReadSideEffect[-1] : &:r2510_1, ~m? -# 2510| mu2510_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2510_1 -# 2510| r2510_7(bool) = Constant[0] : -# 2510| v2510_8(void) = ConditionalBranch : r2510_7 +# 35| Block 831 +# 35| r35_11621(glval) = VariableAddress[x830] : +# 35| mu35_11622(String) = Uninitialized[x830] : &:r35_11621 +# 35| r35_11623(glval) = FunctionAddress[String] : +# 35| v35_11624(void) = Call[String] : func:r35_11623, this:r35_11621 +# 35| mu35_11625(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11621 +# 35| r35_11627(glval) = VariableAddress[x830] : +# 35| r35_11628(glval) = FunctionAddress[~String] : +# 35| v35_11629(void) = Call[~String] : func:r35_11628, this:r35_11627 +# 35| mu35_11630(unknown) = ^CallSideEffect : ~m? +# 35| v35_11631(void) = ^IndirectReadSideEffect[-1] : &:r35_11627, ~m? +# 35| mu35_11632(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11627 +# 35| r35_11633(bool) = Constant[0] : +# 35| v35_11634(void) = ConditionalBranch : r35_11633 #-----| False -> Block 832 #-----| True (back edge) -> Block 831 -# 2512| Block 832 -# 2512| r2512_1(glval) = VariableAddress[x831] : -# 2512| mu2512_2(String) = Uninitialized[x831] : &:r2512_1 -# 2512| r2512_3(glval) = FunctionAddress[String] : -# 2512| v2512_4(void) = Call[String] : func:r2512_3, this:r2512_1 -# 2512| mu2512_5(unknown) = ^CallSideEffect : ~m? -# 2512| mu2512_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2512_1 -# 2513| r2513_1(glval) = VariableAddress[x831] : -# 2513| r2513_2(glval) = FunctionAddress[~String] : -# 2513| v2513_3(void) = Call[~String] : func:r2513_2, this:r2513_1 -# 2513| mu2513_4(unknown) = ^CallSideEffect : ~m? -# 2513| v2513_5(void) = ^IndirectReadSideEffect[-1] : &:r2513_1, ~m? -# 2513| mu2513_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2513_1 -# 2513| r2513_7(bool) = Constant[0] : -# 2513| v2513_8(void) = ConditionalBranch : r2513_7 +# 35| Block 832 +# 35| r35_11635(glval) = VariableAddress[x831] : +# 35| mu35_11636(String) = Uninitialized[x831] : &:r35_11635 +# 35| r35_11637(glval) = FunctionAddress[String] : +# 35| v35_11638(void) = Call[String] : func:r35_11637, this:r35_11635 +# 35| mu35_11639(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11635 +# 35| r35_11641(glval) = VariableAddress[x831] : +# 35| r35_11642(glval) = FunctionAddress[~String] : +# 35| v35_11643(void) = Call[~String] : func:r35_11642, this:r35_11641 +# 35| mu35_11644(unknown) = ^CallSideEffect : ~m? +# 35| v35_11645(void) = ^IndirectReadSideEffect[-1] : &:r35_11641, ~m? +# 35| mu35_11646(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11641 +# 35| r35_11647(bool) = Constant[0] : +# 35| v35_11648(void) = ConditionalBranch : r35_11647 #-----| False -> Block 833 #-----| True (back edge) -> Block 832 -# 2515| Block 833 -# 2515| r2515_1(glval) = VariableAddress[x832] : -# 2515| mu2515_2(String) = Uninitialized[x832] : &:r2515_1 -# 2515| r2515_3(glval) = FunctionAddress[String] : -# 2515| v2515_4(void) = Call[String] : func:r2515_3, this:r2515_1 -# 2515| mu2515_5(unknown) = ^CallSideEffect : ~m? -# 2515| mu2515_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2515_1 -# 2516| r2516_1(glval) = VariableAddress[x832] : -# 2516| r2516_2(glval) = FunctionAddress[~String] : -# 2516| v2516_3(void) = Call[~String] : func:r2516_2, this:r2516_1 -# 2516| mu2516_4(unknown) = ^CallSideEffect : ~m? -# 2516| v2516_5(void) = ^IndirectReadSideEffect[-1] : &:r2516_1, ~m? -# 2516| mu2516_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2516_1 -# 2516| r2516_7(bool) = Constant[0] : -# 2516| v2516_8(void) = ConditionalBranch : r2516_7 +# 35| Block 833 +# 35| r35_11649(glval) = VariableAddress[x832] : +# 35| mu35_11650(String) = Uninitialized[x832] : &:r35_11649 +# 35| r35_11651(glval) = FunctionAddress[String] : +# 35| v35_11652(void) = Call[String] : func:r35_11651, this:r35_11649 +# 35| mu35_11653(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11649 +# 35| r35_11655(glval) = VariableAddress[x832] : +# 35| r35_11656(glval) = FunctionAddress[~String] : +# 35| v35_11657(void) = Call[~String] : func:r35_11656, this:r35_11655 +# 35| mu35_11658(unknown) = ^CallSideEffect : ~m? +# 35| v35_11659(void) = ^IndirectReadSideEffect[-1] : &:r35_11655, ~m? +# 35| mu35_11660(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11655 +# 35| r35_11661(bool) = Constant[0] : +# 35| v35_11662(void) = ConditionalBranch : r35_11661 #-----| False -> Block 834 #-----| True (back edge) -> Block 833 -# 2518| Block 834 -# 2518| r2518_1(glval) = VariableAddress[x833] : -# 2518| mu2518_2(String) = Uninitialized[x833] : &:r2518_1 -# 2518| r2518_3(glval) = FunctionAddress[String] : -# 2518| v2518_4(void) = Call[String] : func:r2518_3, this:r2518_1 -# 2518| mu2518_5(unknown) = ^CallSideEffect : ~m? -# 2518| mu2518_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2518_1 -# 2519| r2519_1(glval) = VariableAddress[x833] : -# 2519| r2519_2(glval) = FunctionAddress[~String] : -# 2519| v2519_3(void) = Call[~String] : func:r2519_2, this:r2519_1 -# 2519| mu2519_4(unknown) = ^CallSideEffect : ~m? -# 2519| v2519_5(void) = ^IndirectReadSideEffect[-1] : &:r2519_1, ~m? -# 2519| mu2519_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2519_1 -# 2519| r2519_7(bool) = Constant[0] : -# 2519| v2519_8(void) = ConditionalBranch : r2519_7 +# 35| Block 834 +# 35| r35_11663(glval) = VariableAddress[x833] : +# 35| mu35_11664(String) = Uninitialized[x833] : &:r35_11663 +# 35| r35_11665(glval) = FunctionAddress[String] : +# 35| v35_11666(void) = Call[String] : func:r35_11665, this:r35_11663 +# 35| mu35_11667(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11663 +# 35| r35_11669(glval) = VariableAddress[x833] : +# 35| r35_11670(glval) = FunctionAddress[~String] : +# 35| v35_11671(void) = Call[~String] : func:r35_11670, this:r35_11669 +# 35| mu35_11672(unknown) = ^CallSideEffect : ~m? +# 35| v35_11673(void) = ^IndirectReadSideEffect[-1] : &:r35_11669, ~m? +# 35| mu35_11674(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11669 +# 35| r35_11675(bool) = Constant[0] : +# 35| v35_11676(void) = ConditionalBranch : r35_11675 #-----| False -> Block 835 #-----| True (back edge) -> Block 834 -# 2521| Block 835 -# 2521| r2521_1(glval) = VariableAddress[x834] : -# 2521| mu2521_2(String) = Uninitialized[x834] : &:r2521_1 -# 2521| r2521_3(glval) = FunctionAddress[String] : -# 2521| v2521_4(void) = Call[String] : func:r2521_3, this:r2521_1 -# 2521| mu2521_5(unknown) = ^CallSideEffect : ~m? -# 2521| mu2521_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2521_1 -# 2522| r2522_1(glval) = VariableAddress[x834] : -# 2522| r2522_2(glval) = FunctionAddress[~String] : -# 2522| v2522_3(void) = Call[~String] : func:r2522_2, this:r2522_1 -# 2522| mu2522_4(unknown) = ^CallSideEffect : ~m? -# 2522| v2522_5(void) = ^IndirectReadSideEffect[-1] : &:r2522_1, ~m? -# 2522| mu2522_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2522_1 -# 2522| r2522_7(bool) = Constant[0] : -# 2522| v2522_8(void) = ConditionalBranch : r2522_7 +# 35| Block 835 +# 35| r35_11677(glval) = VariableAddress[x834] : +# 35| mu35_11678(String) = Uninitialized[x834] : &:r35_11677 +# 35| r35_11679(glval) = FunctionAddress[String] : +# 35| v35_11680(void) = Call[String] : func:r35_11679, this:r35_11677 +# 35| mu35_11681(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11677 +# 35| r35_11683(glval) = VariableAddress[x834] : +# 35| r35_11684(glval) = FunctionAddress[~String] : +# 35| v35_11685(void) = Call[~String] : func:r35_11684, this:r35_11683 +# 35| mu35_11686(unknown) = ^CallSideEffect : ~m? +# 35| v35_11687(void) = ^IndirectReadSideEffect[-1] : &:r35_11683, ~m? +# 35| mu35_11688(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11683 +# 35| r35_11689(bool) = Constant[0] : +# 35| v35_11690(void) = ConditionalBranch : r35_11689 #-----| False -> Block 836 #-----| True (back edge) -> Block 835 -# 2524| Block 836 -# 2524| r2524_1(glval) = VariableAddress[x835] : -# 2524| mu2524_2(String) = Uninitialized[x835] : &:r2524_1 -# 2524| r2524_3(glval) = FunctionAddress[String] : -# 2524| v2524_4(void) = Call[String] : func:r2524_3, this:r2524_1 -# 2524| mu2524_5(unknown) = ^CallSideEffect : ~m? -# 2524| mu2524_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2524_1 -# 2525| r2525_1(glval) = VariableAddress[x835] : -# 2525| r2525_2(glval) = FunctionAddress[~String] : -# 2525| v2525_3(void) = Call[~String] : func:r2525_2, this:r2525_1 -# 2525| mu2525_4(unknown) = ^CallSideEffect : ~m? -# 2525| v2525_5(void) = ^IndirectReadSideEffect[-1] : &:r2525_1, ~m? -# 2525| mu2525_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2525_1 -# 2525| r2525_7(bool) = Constant[0] : -# 2525| v2525_8(void) = ConditionalBranch : r2525_7 +# 35| Block 836 +# 35| r35_11691(glval) = VariableAddress[x835] : +# 35| mu35_11692(String) = Uninitialized[x835] : &:r35_11691 +# 35| r35_11693(glval) = FunctionAddress[String] : +# 35| v35_11694(void) = Call[String] : func:r35_11693, this:r35_11691 +# 35| mu35_11695(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11691 +# 35| r35_11697(glval) = VariableAddress[x835] : +# 35| r35_11698(glval) = FunctionAddress[~String] : +# 35| v35_11699(void) = Call[~String] : func:r35_11698, this:r35_11697 +# 35| mu35_11700(unknown) = ^CallSideEffect : ~m? +# 35| v35_11701(void) = ^IndirectReadSideEffect[-1] : &:r35_11697, ~m? +# 35| mu35_11702(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11697 +# 35| r35_11703(bool) = Constant[0] : +# 35| v35_11704(void) = ConditionalBranch : r35_11703 #-----| False -> Block 837 #-----| True (back edge) -> Block 836 -# 2527| Block 837 -# 2527| r2527_1(glval) = VariableAddress[x836] : -# 2527| mu2527_2(String) = Uninitialized[x836] : &:r2527_1 -# 2527| r2527_3(glval) = FunctionAddress[String] : -# 2527| v2527_4(void) = Call[String] : func:r2527_3, this:r2527_1 -# 2527| mu2527_5(unknown) = ^CallSideEffect : ~m? -# 2527| mu2527_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2527_1 -# 2528| r2528_1(glval) = VariableAddress[x836] : -# 2528| r2528_2(glval) = FunctionAddress[~String] : -# 2528| v2528_3(void) = Call[~String] : func:r2528_2, this:r2528_1 -# 2528| mu2528_4(unknown) = ^CallSideEffect : ~m? -# 2528| v2528_5(void) = ^IndirectReadSideEffect[-1] : &:r2528_1, ~m? -# 2528| mu2528_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2528_1 -# 2528| r2528_7(bool) = Constant[0] : -# 2528| v2528_8(void) = ConditionalBranch : r2528_7 +# 35| Block 837 +# 35| r35_11705(glval) = VariableAddress[x836] : +# 35| mu35_11706(String) = Uninitialized[x836] : &:r35_11705 +# 35| r35_11707(glval) = FunctionAddress[String] : +# 35| v35_11708(void) = Call[String] : func:r35_11707, this:r35_11705 +# 35| mu35_11709(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11705 +# 35| r35_11711(glval) = VariableAddress[x836] : +# 35| r35_11712(glval) = FunctionAddress[~String] : +# 35| v35_11713(void) = Call[~String] : func:r35_11712, this:r35_11711 +# 35| mu35_11714(unknown) = ^CallSideEffect : ~m? +# 35| v35_11715(void) = ^IndirectReadSideEffect[-1] : &:r35_11711, ~m? +# 35| mu35_11716(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11711 +# 35| r35_11717(bool) = Constant[0] : +# 35| v35_11718(void) = ConditionalBranch : r35_11717 #-----| False -> Block 838 #-----| True (back edge) -> Block 837 -# 2530| Block 838 -# 2530| r2530_1(glval) = VariableAddress[x837] : -# 2530| mu2530_2(String) = Uninitialized[x837] : &:r2530_1 -# 2530| r2530_3(glval) = FunctionAddress[String] : -# 2530| v2530_4(void) = Call[String] : func:r2530_3, this:r2530_1 -# 2530| mu2530_5(unknown) = ^CallSideEffect : ~m? -# 2530| mu2530_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2530_1 -# 2531| r2531_1(glval) = VariableAddress[x837] : -# 2531| r2531_2(glval) = FunctionAddress[~String] : -# 2531| v2531_3(void) = Call[~String] : func:r2531_2, this:r2531_1 -# 2531| mu2531_4(unknown) = ^CallSideEffect : ~m? -# 2531| v2531_5(void) = ^IndirectReadSideEffect[-1] : &:r2531_1, ~m? -# 2531| mu2531_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2531_1 -# 2531| r2531_7(bool) = Constant[0] : -# 2531| v2531_8(void) = ConditionalBranch : r2531_7 +# 35| Block 838 +# 35| r35_11719(glval) = VariableAddress[x837] : +# 35| mu35_11720(String) = Uninitialized[x837] : &:r35_11719 +# 35| r35_11721(glval) = FunctionAddress[String] : +# 35| v35_11722(void) = Call[String] : func:r35_11721, this:r35_11719 +# 35| mu35_11723(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11719 +# 35| r35_11725(glval) = VariableAddress[x837] : +# 35| r35_11726(glval) = FunctionAddress[~String] : +# 35| v35_11727(void) = Call[~String] : func:r35_11726, this:r35_11725 +# 35| mu35_11728(unknown) = ^CallSideEffect : ~m? +# 35| v35_11729(void) = ^IndirectReadSideEffect[-1] : &:r35_11725, ~m? +# 35| mu35_11730(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11725 +# 35| r35_11731(bool) = Constant[0] : +# 35| v35_11732(void) = ConditionalBranch : r35_11731 #-----| False -> Block 839 #-----| True (back edge) -> Block 838 -# 2533| Block 839 -# 2533| r2533_1(glval) = VariableAddress[x838] : -# 2533| mu2533_2(String) = Uninitialized[x838] : &:r2533_1 -# 2533| r2533_3(glval) = FunctionAddress[String] : -# 2533| v2533_4(void) = Call[String] : func:r2533_3, this:r2533_1 -# 2533| mu2533_5(unknown) = ^CallSideEffect : ~m? -# 2533| mu2533_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2533_1 -# 2534| r2534_1(glval) = VariableAddress[x838] : -# 2534| r2534_2(glval) = FunctionAddress[~String] : -# 2534| v2534_3(void) = Call[~String] : func:r2534_2, this:r2534_1 -# 2534| mu2534_4(unknown) = ^CallSideEffect : ~m? -# 2534| v2534_5(void) = ^IndirectReadSideEffect[-1] : &:r2534_1, ~m? -# 2534| mu2534_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2534_1 -# 2534| r2534_7(bool) = Constant[0] : -# 2534| v2534_8(void) = ConditionalBranch : r2534_7 +# 35| Block 839 +# 35| r35_11733(glval) = VariableAddress[x838] : +# 35| mu35_11734(String) = Uninitialized[x838] : &:r35_11733 +# 35| r35_11735(glval) = FunctionAddress[String] : +# 35| v35_11736(void) = Call[String] : func:r35_11735, this:r35_11733 +# 35| mu35_11737(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11733 +# 35| r35_11739(glval) = VariableAddress[x838] : +# 35| r35_11740(glval) = FunctionAddress[~String] : +# 35| v35_11741(void) = Call[~String] : func:r35_11740, this:r35_11739 +# 35| mu35_11742(unknown) = ^CallSideEffect : ~m? +# 35| v35_11743(void) = ^IndirectReadSideEffect[-1] : &:r35_11739, ~m? +# 35| mu35_11744(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11739 +# 35| r35_11745(bool) = Constant[0] : +# 35| v35_11746(void) = ConditionalBranch : r35_11745 #-----| False -> Block 840 #-----| True (back edge) -> Block 839 -# 2536| Block 840 -# 2536| r2536_1(glval) = VariableAddress[x839] : -# 2536| mu2536_2(String) = Uninitialized[x839] : &:r2536_1 -# 2536| r2536_3(glval) = FunctionAddress[String] : -# 2536| v2536_4(void) = Call[String] : func:r2536_3, this:r2536_1 -# 2536| mu2536_5(unknown) = ^CallSideEffect : ~m? -# 2536| mu2536_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2536_1 -# 2537| r2537_1(glval) = VariableAddress[x839] : -# 2537| r2537_2(glval) = FunctionAddress[~String] : -# 2537| v2537_3(void) = Call[~String] : func:r2537_2, this:r2537_1 -# 2537| mu2537_4(unknown) = ^CallSideEffect : ~m? -# 2537| v2537_5(void) = ^IndirectReadSideEffect[-1] : &:r2537_1, ~m? -# 2537| mu2537_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2537_1 -# 2537| r2537_7(bool) = Constant[0] : -# 2537| v2537_8(void) = ConditionalBranch : r2537_7 +# 35| Block 840 +# 35| r35_11747(glval) = VariableAddress[x839] : +# 35| mu35_11748(String) = Uninitialized[x839] : &:r35_11747 +# 35| r35_11749(glval) = FunctionAddress[String] : +# 35| v35_11750(void) = Call[String] : func:r35_11749, this:r35_11747 +# 35| mu35_11751(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11747 +# 35| r35_11753(glval) = VariableAddress[x839] : +# 35| r35_11754(glval) = FunctionAddress[~String] : +# 35| v35_11755(void) = Call[~String] : func:r35_11754, this:r35_11753 +# 35| mu35_11756(unknown) = ^CallSideEffect : ~m? +# 35| v35_11757(void) = ^IndirectReadSideEffect[-1] : &:r35_11753, ~m? +# 35| mu35_11758(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11753 +# 35| r35_11759(bool) = Constant[0] : +# 35| v35_11760(void) = ConditionalBranch : r35_11759 #-----| False -> Block 841 #-----| True (back edge) -> Block 840 -# 2539| Block 841 -# 2539| r2539_1(glval) = VariableAddress[x840] : -# 2539| mu2539_2(String) = Uninitialized[x840] : &:r2539_1 -# 2539| r2539_3(glval) = FunctionAddress[String] : -# 2539| v2539_4(void) = Call[String] : func:r2539_3, this:r2539_1 -# 2539| mu2539_5(unknown) = ^CallSideEffect : ~m? -# 2539| mu2539_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2539_1 -# 2540| r2540_1(glval) = VariableAddress[x840] : -# 2540| r2540_2(glval) = FunctionAddress[~String] : -# 2540| v2540_3(void) = Call[~String] : func:r2540_2, this:r2540_1 -# 2540| mu2540_4(unknown) = ^CallSideEffect : ~m? -# 2540| v2540_5(void) = ^IndirectReadSideEffect[-1] : &:r2540_1, ~m? -# 2540| mu2540_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2540_1 -# 2540| r2540_7(bool) = Constant[0] : -# 2540| v2540_8(void) = ConditionalBranch : r2540_7 +# 35| Block 841 +# 35| r35_11761(glval) = VariableAddress[x840] : +# 35| mu35_11762(String) = Uninitialized[x840] : &:r35_11761 +# 35| r35_11763(glval) = FunctionAddress[String] : +# 35| v35_11764(void) = Call[String] : func:r35_11763, this:r35_11761 +# 35| mu35_11765(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11761 +# 35| r35_11767(glval) = VariableAddress[x840] : +# 35| r35_11768(glval) = FunctionAddress[~String] : +# 35| v35_11769(void) = Call[~String] : func:r35_11768, this:r35_11767 +# 35| mu35_11770(unknown) = ^CallSideEffect : ~m? +# 35| v35_11771(void) = ^IndirectReadSideEffect[-1] : &:r35_11767, ~m? +# 35| mu35_11772(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11767 +# 35| r35_11773(bool) = Constant[0] : +# 35| v35_11774(void) = ConditionalBranch : r35_11773 #-----| False -> Block 842 #-----| True (back edge) -> Block 841 -# 2542| Block 842 -# 2542| r2542_1(glval) = VariableAddress[x841] : -# 2542| mu2542_2(String) = Uninitialized[x841] : &:r2542_1 -# 2542| r2542_3(glval) = FunctionAddress[String] : -# 2542| v2542_4(void) = Call[String] : func:r2542_3, this:r2542_1 -# 2542| mu2542_5(unknown) = ^CallSideEffect : ~m? -# 2542| mu2542_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2542_1 -# 2543| r2543_1(glval) = VariableAddress[x841] : -# 2543| r2543_2(glval) = FunctionAddress[~String] : -# 2543| v2543_3(void) = Call[~String] : func:r2543_2, this:r2543_1 -# 2543| mu2543_4(unknown) = ^CallSideEffect : ~m? -# 2543| v2543_5(void) = ^IndirectReadSideEffect[-1] : &:r2543_1, ~m? -# 2543| mu2543_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2543_1 -# 2543| r2543_7(bool) = Constant[0] : -# 2543| v2543_8(void) = ConditionalBranch : r2543_7 +# 35| Block 842 +# 35| r35_11775(glval) = VariableAddress[x841] : +# 35| mu35_11776(String) = Uninitialized[x841] : &:r35_11775 +# 35| r35_11777(glval) = FunctionAddress[String] : +# 35| v35_11778(void) = Call[String] : func:r35_11777, this:r35_11775 +# 35| mu35_11779(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11775 +# 35| r35_11781(glval) = VariableAddress[x841] : +# 35| r35_11782(glval) = FunctionAddress[~String] : +# 35| v35_11783(void) = Call[~String] : func:r35_11782, this:r35_11781 +# 35| mu35_11784(unknown) = ^CallSideEffect : ~m? +# 35| v35_11785(void) = ^IndirectReadSideEffect[-1] : &:r35_11781, ~m? +# 35| mu35_11786(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11781 +# 35| r35_11787(bool) = Constant[0] : +# 35| v35_11788(void) = ConditionalBranch : r35_11787 #-----| False -> Block 843 #-----| True (back edge) -> Block 842 -# 2545| Block 843 -# 2545| r2545_1(glval) = VariableAddress[x842] : -# 2545| mu2545_2(String) = Uninitialized[x842] : &:r2545_1 -# 2545| r2545_3(glval) = FunctionAddress[String] : -# 2545| v2545_4(void) = Call[String] : func:r2545_3, this:r2545_1 -# 2545| mu2545_5(unknown) = ^CallSideEffect : ~m? -# 2545| mu2545_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2545_1 -# 2546| r2546_1(glval) = VariableAddress[x842] : -# 2546| r2546_2(glval) = FunctionAddress[~String] : -# 2546| v2546_3(void) = Call[~String] : func:r2546_2, this:r2546_1 -# 2546| mu2546_4(unknown) = ^CallSideEffect : ~m? -# 2546| v2546_5(void) = ^IndirectReadSideEffect[-1] : &:r2546_1, ~m? -# 2546| mu2546_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2546_1 -# 2546| r2546_7(bool) = Constant[0] : -# 2546| v2546_8(void) = ConditionalBranch : r2546_7 +# 35| Block 843 +# 35| r35_11789(glval) = VariableAddress[x842] : +# 35| mu35_11790(String) = Uninitialized[x842] : &:r35_11789 +# 35| r35_11791(glval) = FunctionAddress[String] : +# 35| v35_11792(void) = Call[String] : func:r35_11791, this:r35_11789 +# 35| mu35_11793(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11789 +# 35| r35_11795(glval) = VariableAddress[x842] : +# 35| r35_11796(glval) = FunctionAddress[~String] : +# 35| v35_11797(void) = Call[~String] : func:r35_11796, this:r35_11795 +# 35| mu35_11798(unknown) = ^CallSideEffect : ~m? +# 35| v35_11799(void) = ^IndirectReadSideEffect[-1] : &:r35_11795, ~m? +# 35| mu35_11800(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11795 +# 35| r35_11801(bool) = Constant[0] : +# 35| v35_11802(void) = ConditionalBranch : r35_11801 #-----| False -> Block 844 #-----| True (back edge) -> Block 843 -# 2548| Block 844 -# 2548| r2548_1(glval) = VariableAddress[x843] : -# 2548| mu2548_2(String) = Uninitialized[x843] : &:r2548_1 -# 2548| r2548_3(glval) = FunctionAddress[String] : -# 2548| v2548_4(void) = Call[String] : func:r2548_3, this:r2548_1 -# 2548| mu2548_5(unknown) = ^CallSideEffect : ~m? -# 2548| mu2548_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2548_1 -# 2549| r2549_1(glval) = VariableAddress[x843] : -# 2549| r2549_2(glval) = FunctionAddress[~String] : -# 2549| v2549_3(void) = Call[~String] : func:r2549_2, this:r2549_1 -# 2549| mu2549_4(unknown) = ^CallSideEffect : ~m? -# 2549| v2549_5(void) = ^IndirectReadSideEffect[-1] : &:r2549_1, ~m? -# 2549| mu2549_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2549_1 -# 2549| r2549_7(bool) = Constant[0] : -# 2549| v2549_8(void) = ConditionalBranch : r2549_7 +# 35| Block 844 +# 35| r35_11803(glval) = VariableAddress[x843] : +# 35| mu35_11804(String) = Uninitialized[x843] : &:r35_11803 +# 35| r35_11805(glval) = FunctionAddress[String] : +# 35| v35_11806(void) = Call[String] : func:r35_11805, this:r35_11803 +# 35| mu35_11807(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11803 +# 35| r35_11809(glval) = VariableAddress[x843] : +# 35| r35_11810(glval) = FunctionAddress[~String] : +# 35| v35_11811(void) = Call[~String] : func:r35_11810, this:r35_11809 +# 35| mu35_11812(unknown) = ^CallSideEffect : ~m? +# 35| v35_11813(void) = ^IndirectReadSideEffect[-1] : &:r35_11809, ~m? +# 35| mu35_11814(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11809 +# 35| r35_11815(bool) = Constant[0] : +# 35| v35_11816(void) = ConditionalBranch : r35_11815 #-----| False -> Block 845 #-----| True (back edge) -> Block 844 -# 2551| Block 845 -# 2551| r2551_1(glval) = VariableAddress[x844] : -# 2551| mu2551_2(String) = Uninitialized[x844] : &:r2551_1 -# 2551| r2551_3(glval) = FunctionAddress[String] : -# 2551| v2551_4(void) = Call[String] : func:r2551_3, this:r2551_1 -# 2551| mu2551_5(unknown) = ^CallSideEffect : ~m? -# 2551| mu2551_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2551_1 -# 2552| r2552_1(glval) = VariableAddress[x844] : -# 2552| r2552_2(glval) = FunctionAddress[~String] : -# 2552| v2552_3(void) = Call[~String] : func:r2552_2, this:r2552_1 -# 2552| mu2552_4(unknown) = ^CallSideEffect : ~m? -# 2552| v2552_5(void) = ^IndirectReadSideEffect[-1] : &:r2552_1, ~m? -# 2552| mu2552_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2552_1 -# 2552| r2552_7(bool) = Constant[0] : -# 2552| v2552_8(void) = ConditionalBranch : r2552_7 +# 35| Block 845 +# 35| r35_11817(glval) = VariableAddress[x844] : +# 35| mu35_11818(String) = Uninitialized[x844] : &:r35_11817 +# 35| r35_11819(glval) = FunctionAddress[String] : +# 35| v35_11820(void) = Call[String] : func:r35_11819, this:r35_11817 +# 35| mu35_11821(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11817 +# 35| r35_11823(glval) = VariableAddress[x844] : +# 35| r35_11824(glval) = FunctionAddress[~String] : +# 35| v35_11825(void) = Call[~String] : func:r35_11824, this:r35_11823 +# 35| mu35_11826(unknown) = ^CallSideEffect : ~m? +# 35| v35_11827(void) = ^IndirectReadSideEffect[-1] : &:r35_11823, ~m? +# 35| mu35_11828(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11823 +# 35| r35_11829(bool) = Constant[0] : +# 35| v35_11830(void) = ConditionalBranch : r35_11829 #-----| False -> Block 846 #-----| True (back edge) -> Block 845 -# 2554| Block 846 -# 2554| r2554_1(glval) = VariableAddress[x845] : -# 2554| mu2554_2(String) = Uninitialized[x845] : &:r2554_1 -# 2554| r2554_3(glval) = FunctionAddress[String] : -# 2554| v2554_4(void) = Call[String] : func:r2554_3, this:r2554_1 -# 2554| mu2554_5(unknown) = ^CallSideEffect : ~m? -# 2554| mu2554_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2554_1 -# 2555| r2555_1(glval) = VariableAddress[x845] : -# 2555| r2555_2(glval) = FunctionAddress[~String] : -# 2555| v2555_3(void) = Call[~String] : func:r2555_2, this:r2555_1 -# 2555| mu2555_4(unknown) = ^CallSideEffect : ~m? -# 2555| v2555_5(void) = ^IndirectReadSideEffect[-1] : &:r2555_1, ~m? -# 2555| mu2555_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2555_1 -# 2555| r2555_7(bool) = Constant[0] : -# 2555| v2555_8(void) = ConditionalBranch : r2555_7 +# 35| Block 846 +# 35| r35_11831(glval) = VariableAddress[x845] : +# 35| mu35_11832(String) = Uninitialized[x845] : &:r35_11831 +# 35| r35_11833(glval) = FunctionAddress[String] : +# 35| v35_11834(void) = Call[String] : func:r35_11833, this:r35_11831 +# 35| mu35_11835(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11831 +# 35| r35_11837(glval) = VariableAddress[x845] : +# 35| r35_11838(glval) = FunctionAddress[~String] : +# 35| v35_11839(void) = Call[~String] : func:r35_11838, this:r35_11837 +# 35| mu35_11840(unknown) = ^CallSideEffect : ~m? +# 35| v35_11841(void) = ^IndirectReadSideEffect[-1] : &:r35_11837, ~m? +# 35| mu35_11842(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11837 +# 35| r35_11843(bool) = Constant[0] : +# 35| v35_11844(void) = ConditionalBranch : r35_11843 #-----| False -> Block 847 #-----| True (back edge) -> Block 846 -# 2557| Block 847 -# 2557| r2557_1(glval) = VariableAddress[x846] : -# 2557| mu2557_2(String) = Uninitialized[x846] : &:r2557_1 -# 2557| r2557_3(glval) = FunctionAddress[String] : -# 2557| v2557_4(void) = Call[String] : func:r2557_3, this:r2557_1 -# 2557| mu2557_5(unknown) = ^CallSideEffect : ~m? -# 2557| mu2557_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2557_1 -# 2558| r2558_1(glval) = VariableAddress[x846] : -# 2558| r2558_2(glval) = FunctionAddress[~String] : -# 2558| v2558_3(void) = Call[~String] : func:r2558_2, this:r2558_1 -# 2558| mu2558_4(unknown) = ^CallSideEffect : ~m? -# 2558| v2558_5(void) = ^IndirectReadSideEffect[-1] : &:r2558_1, ~m? -# 2558| mu2558_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2558_1 -# 2558| r2558_7(bool) = Constant[0] : -# 2558| v2558_8(void) = ConditionalBranch : r2558_7 +# 35| Block 847 +# 35| r35_11845(glval) = VariableAddress[x846] : +# 35| mu35_11846(String) = Uninitialized[x846] : &:r35_11845 +# 35| r35_11847(glval) = FunctionAddress[String] : +# 35| v35_11848(void) = Call[String] : func:r35_11847, this:r35_11845 +# 35| mu35_11849(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11845 +# 35| r35_11851(glval) = VariableAddress[x846] : +# 35| r35_11852(glval) = FunctionAddress[~String] : +# 35| v35_11853(void) = Call[~String] : func:r35_11852, this:r35_11851 +# 35| mu35_11854(unknown) = ^CallSideEffect : ~m? +# 35| v35_11855(void) = ^IndirectReadSideEffect[-1] : &:r35_11851, ~m? +# 35| mu35_11856(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11851 +# 35| r35_11857(bool) = Constant[0] : +# 35| v35_11858(void) = ConditionalBranch : r35_11857 #-----| False -> Block 848 #-----| True (back edge) -> Block 847 -# 2560| Block 848 -# 2560| r2560_1(glval) = VariableAddress[x847] : -# 2560| mu2560_2(String) = Uninitialized[x847] : &:r2560_1 -# 2560| r2560_3(glval) = FunctionAddress[String] : -# 2560| v2560_4(void) = Call[String] : func:r2560_3, this:r2560_1 -# 2560| mu2560_5(unknown) = ^CallSideEffect : ~m? -# 2560| mu2560_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2560_1 -# 2561| r2561_1(glval) = VariableAddress[x847] : -# 2561| r2561_2(glval) = FunctionAddress[~String] : -# 2561| v2561_3(void) = Call[~String] : func:r2561_2, this:r2561_1 -# 2561| mu2561_4(unknown) = ^CallSideEffect : ~m? -# 2561| v2561_5(void) = ^IndirectReadSideEffect[-1] : &:r2561_1, ~m? -# 2561| mu2561_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2561_1 -# 2561| r2561_7(bool) = Constant[0] : -# 2561| v2561_8(void) = ConditionalBranch : r2561_7 +# 35| Block 848 +# 35| r35_11859(glval) = VariableAddress[x847] : +# 35| mu35_11860(String) = Uninitialized[x847] : &:r35_11859 +# 35| r35_11861(glval) = FunctionAddress[String] : +# 35| v35_11862(void) = Call[String] : func:r35_11861, this:r35_11859 +# 35| mu35_11863(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11859 +# 35| r35_11865(glval) = VariableAddress[x847] : +# 35| r35_11866(glval) = FunctionAddress[~String] : +# 35| v35_11867(void) = Call[~String] : func:r35_11866, this:r35_11865 +# 35| mu35_11868(unknown) = ^CallSideEffect : ~m? +# 35| v35_11869(void) = ^IndirectReadSideEffect[-1] : &:r35_11865, ~m? +# 35| mu35_11870(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11865 +# 35| r35_11871(bool) = Constant[0] : +# 35| v35_11872(void) = ConditionalBranch : r35_11871 #-----| False -> Block 849 #-----| True (back edge) -> Block 848 -# 2563| Block 849 -# 2563| r2563_1(glval) = VariableAddress[x848] : -# 2563| mu2563_2(String) = Uninitialized[x848] : &:r2563_1 -# 2563| r2563_3(glval) = FunctionAddress[String] : -# 2563| v2563_4(void) = Call[String] : func:r2563_3, this:r2563_1 -# 2563| mu2563_5(unknown) = ^CallSideEffect : ~m? -# 2563| mu2563_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2563_1 -# 2564| r2564_1(glval) = VariableAddress[x848] : -# 2564| r2564_2(glval) = FunctionAddress[~String] : -# 2564| v2564_3(void) = Call[~String] : func:r2564_2, this:r2564_1 -# 2564| mu2564_4(unknown) = ^CallSideEffect : ~m? -# 2564| v2564_5(void) = ^IndirectReadSideEffect[-1] : &:r2564_1, ~m? -# 2564| mu2564_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2564_1 -# 2564| r2564_7(bool) = Constant[0] : -# 2564| v2564_8(void) = ConditionalBranch : r2564_7 +# 35| Block 849 +# 35| r35_11873(glval) = VariableAddress[x848] : +# 35| mu35_11874(String) = Uninitialized[x848] : &:r35_11873 +# 35| r35_11875(glval) = FunctionAddress[String] : +# 35| v35_11876(void) = Call[String] : func:r35_11875, this:r35_11873 +# 35| mu35_11877(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11873 +# 35| r35_11879(glval) = VariableAddress[x848] : +# 35| r35_11880(glval) = FunctionAddress[~String] : +# 35| v35_11881(void) = Call[~String] : func:r35_11880, this:r35_11879 +# 35| mu35_11882(unknown) = ^CallSideEffect : ~m? +# 35| v35_11883(void) = ^IndirectReadSideEffect[-1] : &:r35_11879, ~m? +# 35| mu35_11884(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11879 +# 35| r35_11885(bool) = Constant[0] : +# 35| v35_11886(void) = ConditionalBranch : r35_11885 #-----| False -> Block 850 #-----| True (back edge) -> Block 849 -# 2566| Block 850 -# 2566| r2566_1(glval) = VariableAddress[x849] : -# 2566| mu2566_2(String) = Uninitialized[x849] : &:r2566_1 -# 2566| r2566_3(glval) = FunctionAddress[String] : -# 2566| v2566_4(void) = Call[String] : func:r2566_3, this:r2566_1 -# 2566| mu2566_5(unknown) = ^CallSideEffect : ~m? -# 2566| mu2566_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2566_1 -# 2567| r2567_1(glval) = VariableAddress[x849] : -# 2567| r2567_2(glval) = FunctionAddress[~String] : -# 2567| v2567_3(void) = Call[~String] : func:r2567_2, this:r2567_1 -# 2567| mu2567_4(unknown) = ^CallSideEffect : ~m? -# 2567| v2567_5(void) = ^IndirectReadSideEffect[-1] : &:r2567_1, ~m? -# 2567| mu2567_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2567_1 -# 2567| r2567_7(bool) = Constant[0] : -# 2567| v2567_8(void) = ConditionalBranch : r2567_7 +# 35| Block 850 +# 35| r35_11887(glval) = VariableAddress[x849] : +# 35| mu35_11888(String) = Uninitialized[x849] : &:r35_11887 +# 35| r35_11889(glval) = FunctionAddress[String] : +# 35| v35_11890(void) = Call[String] : func:r35_11889, this:r35_11887 +# 35| mu35_11891(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11887 +# 35| r35_11893(glval) = VariableAddress[x849] : +# 35| r35_11894(glval) = FunctionAddress[~String] : +# 35| v35_11895(void) = Call[~String] : func:r35_11894, this:r35_11893 +# 35| mu35_11896(unknown) = ^CallSideEffect : ~m? +# 35| v35_11897(void) = ^IndirectReadSideEffect[-1] : &:r35_11893, ~m? +# 35| mu35_11898(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11893 +# 35| r35_11899(bool) = Constant[0] : +# 35| v35_11900(void) = ConditionalBranch : r35_11899 #-----| False -> Block 851 #-----| True (back edge) -> Block 850 -# 2569| Block 851 -# 2569| r2569_1(glval) = VariableAddress[x850] : -# 2569| mu2569_2(String) = Uninitialized[x850] : &:r2569_1 -# 2569| r2569_3(glval) = FunctionAddress[String] : -# 2569| v2569_4(void) = Call[String] : func:r2569_3, this:r2569_1 -# 2569| mu2569_5(unknown) = ^CallSideEffect : ~m? -# 2569| mu2569_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2569_1 -# 2570| r2570_1(glval) = VariableAddress[x850] : -# 2570| r2570_2(glval) = FunctionAddress[~String] : -# 2570| v2570_3(void) = Call[~String] : func:r2570_2, this:r2570_1 -# 2570| mu2570_4(unknown) = ^CallSideEffect : ~m? -# 2570| v2570_5(void) = ^IndirectReadSideEffect[-1] : &:r2570_1, ~m? -# 2570| mu2570_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2570_1 -# 2570| r2570_7(bool) = Constant[0] : -# 2570| v2570_8(void) = ConditionalBranch : r2570_7 +# 35| Block 851 +# 35| r35_11901(glval) = VariableAddress[x850] : +# 35| mu35_11902(String) = Uninitialized[x850] : &:r35_11901 +# 35| r35_11903(glval) = FunctionAddress[String] : +# 35| v35_11904(void) = Call[String] : func:r35_11903, this:r35_11901 +# 35| mu35_11905(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11901 +# 35| r35_11907(glval) = VariableAddress[x850] : +# 35| r35_11908(glval) = FunctionAddress[~String] : +# 35| v35_11909(void) = Call[~String] : func:r35_11908, this:r35_11907 +# 35| mu35_11910(unknown) = ^CallSideEffect : ~m? +# 35| v35_11911(void) = ^IndirectReadSideEffect[-1] : &:r35_11907, ~m? +# 35| mu35_11912(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11907 +# 35| r35_11913(bool) = Constant[0] : +# 35| v35_11914(void) = ConditionalBranch : r35_11913 #-----| False -> Block 852 #-----| True (back edge) -> Block 851 -# 2572| Block 852 -# 2572| r2572_1(glval) = VariableAddress[x851] : -# 2572| mu2572_2(String) = Uninitialized[x851] : &:r2572_1 -# 2572| r2572_3(glval) = FunctionAddress[String] : -# 2572| v2572_4(void) = Call[String] : func:r2572_3, this:r2572_1 -# 2572| mu2572_5(unknown) = ^CallSideEffect : ~m? -# 2572| mu2572_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2572_1 -# 2573| r2573_1(glval) = VariableAddress[x851] : -# 2573| r2573_2(glval) = FunctionAddress[~String] : -# 2573| v2573_3(void) = Call[~String] : func:r2573_2, this:r2573_1 -# 2573| mu2573_4(unknown) = ^CallSideEffect : ~m? -# 2573| v2573_5(void) = ^IndirectReadSideEffect[-1] : &:r2573_1, ~m? -# 2573| mu2573_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2573_1 -# 2573| r2573_7(bool) = Constant[0] : -# 2573| v2573_8(void) = ConditionalBranch : r2573_7 +# 35| Block 852 +# 35| r35_11915(glval) = VariableAddress[x851] : +# 35| mu35_11916(String) = Uninitialized[x851] : &:r35_11915 +# 35| r35_11917(glval) = FunctionAddress[String] : +# 35| v35_11918(void) = Call[String] : func:r35_11917, this:r35_11915 +# 35| mu35_11919(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11915 +# 35| r35_11921(glval) = VariableAddress[x851] : +# 35| r35_11922(glval) = FunctionAddress[~String] : +# 35| v35_11923(void) = Call[~String] : func:r35_11922, this:r35_11921 +# 35| mu35_11924(unknown) = ^CallSideEffect : ~m? +# 35| v35_11925(void) = ^IndirectReadSideEffect[-1] : &:r35_11921, ~m? +# 35| mu35_11926(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11921 +# 35| r35_11927(bool) = Constant[0] : +# 35| v35_11928(void) = ConditionalBranch : r35_11927 #-----| False -> Block 853 #-----| True (back edge) -> Block 852 -# 2575| Block 853 -# 2575| r2575_1(glval) = VariableAddress[x852] : -# 2575| mu2575_2(String) = Uninitialized[x852] : &:r2575_1 -# 2575| r2575_3(glval) = FunctionAddress[String] : -# 2575| v2575_4(void) = Call[String] : func:r2575_3, this:r2575_1 -# 2575| mu2575_5(unknown) = ^CallSideEffect : ~m? -# 2575| mu2575_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2575_1 -# 2576| r2576_1(glval) = VariableAddress[x852] : -# 2576| r2576_2(glval) = FunctionAddress[~String] : -# 2576| v2576_3(void) = Call[~String] : func:r2576_2, this:r2576_1 -# 2576| mu2576_4(unknown) = ^CallSideEffect : ~m? -# 2576| v2576_5(void) = ^IndirectReadSideEffect[-1] : &:r2576_1, ~m? -# 2576| mu2576_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2576_1 -# 2576| r2576_7(bool) = Constant[0] : -# 2576| v2576_8(void) = ConditionalBranch : r2576_7 +# 35| Block 853 +# 35| r35_11929(glval) = VariableAddress[x852] : +# 35| mu35_11930(String) = Uninitialized[x852] : &:r35_11929 +# 35| r35_11931(glval) = FunctionAddress[String] : +# 35| v35_11932(void) = Call[String] : func:r35_11931, this:r35_11929 +# 35| mu35_11933(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11929 +# 35| r35_11935(glval) = VariableAddress[x852] : +# 35| r35_11936(glval) = FunctionAddress[~String] : +# 35| v35_11937(void) = Call[~String] : func:r35_11936, this:r35_11935 +# 35| mu35_11938(unknown) = ^CallSideEffect : ~m? +# 35| v35_11939(void) = ^IndirectReadSideEffect[-1] : &:r35_11935, ~m? +# 35| mu35_11940(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11935 +# 35| r35_11941(bool) = Constant[0] : +# 35| v35_11942(void) = ConditionalBranch : r35_11941 #-----| False -> Block 854 #-----| True (back edge) -> Block 853 -# 2578| Block 854 -# 2578| r2578_1(glval) = VariableAddress[x853] : -# 2578| mu2578_2(String) = Uninitialized[x853] : &:r2578_1 -# 2578| r2578_3(glval) = FunctionAddress[String] : -# 2578| v2578_4(void) = Call[String] : func:r2578_3, this:r2578_1 -# 2578| mu2578_5(unknown) = ^CallSideEffect : ~m? -# 2578| mu2578_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2578_1 -# 2579| r2579_1(glval) = VariableAddress[x853] : -# 2579| r2579_2(glval) = FunctionAddress[~String] : -# 2579| v2579_3(void) = Call[~String] : func:r2579_2, this:r2579_1 -# 2579| mu2579_4(unknown) = ^CallSideEffect : ~m? -# 2579| v2579_5(void) = ^IndirectReadSideEffect[-1] : &:r2579_1, ~m? -# 2579| mu2579_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2579_1 -# 2579| r2579_7(bool) = Constant[0] : -# 2579| v2579_8(void) = ConditionalBranch : r2579_7 +# 35| Block 854 +# 35| r35_11943(glval) = VariableAddress[x853] : +# 35| mu35_11944(String) = Uninitialized[x853] : &:r35_11943 +# 35| r35_11945(glval) = FunctionAddress[String] : +# 35| v35_11946(void) = Call[String] : func:r35_11945, this:r35_11943 +# 35| mu35_11947(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11943 +# 35| r35_11949(glval) = VariableAddress[x853] : +# 35| r35_11950(glval) = FunctionAddress[~String] : +# 35| v35_11951(void) = Call[~String] : func:r35_11950, this:r35_11949 +# 35| mu35_11952(unknown) = ^CallSideEffect : ~m? +# 35| v35_11953(void) = ^IndirectReadSideEffect[-1] : &:r35_11949, ~m? +# 35| mu35_11954(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11949 +# 35| r35_11955(bool) = Constant[0] : +# 35| v35_11956(void) = ConditionalBranch : r35_11955 #-----| False -> Block 855 #-----| True (back edge) -> Block 854 -# 2581| Block 855 -# 2581| r2581_1(glval) = VariableAddress[x854] : -# 2581| mu2581_2(String) = Uninitialized[x854] : &:r2581_1 -# 2581| r2581_3(glval) = FunctionAddress[String] : -# 2581| v2581_4(void) = Call[String] : func:r2581_3, this:r2581_1 -# 2581| mu2581_5(unknown) = ^CallSideEffect : ~m? -# 2581| mu2581_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2581_1 -# 2582| r2582_1(glval) = VariableAddress[x854] : -# 2582| r2582_2(glval) = FunctionAddress[~String] : -# 2582| v2582_3(void) = Call[~String] : func:r2582_2, this:r2582_1 -# 2582| mu2582_4(unknown) = ^CallSideEffect : ~m? -# 2582| v2582_5(void) = ^IndirectReadSideEffect[-1] : &:r2582_1, ~m? -# 2582| mu2582_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2582_1 -# 2582| r2582_7(bool) = Constant[0] : -# 2582| v2582_8(void) = ConditionalBranch : r2582_7 +# 35| Block 855 +# 35| r35_11957(glval) = VariableAddress[x854] : +# 35| mu35_11958(String) = Uninitialized[x854] : &:r35_11957 +# 35| r35_11959(glval) = FunctionAddress[String] : +# 35| v35_11960(void) = Call[String] : func:r35_11959, this:r35_11957 +# 35| mu35_11961(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11957 +# 35| r35_11963(glval) = VariableAddress[x854] : +# 35| r35_11964(glval) = FunctionAddress[~String] : +# 35| v35_11965(void) = Call[~String] : func:r35_11964, this:r35_11963 +# 35| mu35_11966(unknown) = ^CallSideEffect : ~m? +# 35| v35_11967(void) = ^IndirectReadSideEffect[-1] : &:r35_11963, ~m? +# 35| mu35_11968(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11963 +# 35| r35_11969(bool) = Constant[0] : +# 35| v35_11970(void) = ConditionalBranch : r35_11969 #-----| False -> Block 856 #-----| True (back edge) -> Block 855 -# 2584| Block 856 -# 2584| r2584_1(glval) = VariableAddress[x855] : -# 2584| mu2584_2(String) = Uninitialized[x855] : &:r2584_1 -# 2584| r2584_3(glval) = FunctionAddress[String] : -# 2584| v2584_4(void) = Call[String] : func:r2584_3, this:r2584_1 -# 2584| mu2584_5(unknown) = ^CallSideEffect : ~m? -# 2584| mu2584_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2584_1 -# 2585| r2585_1(glval) = VariableAddress[x855] : -# 2585| r2585_2(glval) = FunctionAddress[~String] : -# 2585| v2585_3(void) = Call[~String] : func:r2585_2, this:r2585_1 -# 2585| mu2585_4(unknown) = ^CallSideEffect : ~m? -# 2585| v2585_5(void) = ^IndirectReadSideEffect[-1] : &:r2585_1, ~m? -# 2585| mu2585_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2585_1 -# 2585| r2585_7(bool) = Constant[0] : -# 2585| v2585_8(void) = ConditionalBranch : r2585_7 +# 35| Block 856 +# 35| r35_11971(glval) = VariableAddress[x855] : +# 35| mu35_11972(String) = Uninitialized[x855] : &:r35_11971 +# 35| r35_11973(glval) = FunctionAddress[String] : +# 35| v35_11974(void) = Call[String] : func:r35_11973, this:r35_11971 +# 35| mu35_11975(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11971 +# 35| r35_11977(glval) = VariableAddress[x855] : +# 35| r35_11978(glval) = FunctionAddress[~String] : +# 35| v35_11979(void) = Call[~String] : func:r35_11978, this:r35_11977 +# 35| mu35_11980(unknown) = ^CallSideEffect : ~m? +# 35| v35_11981(void) = ^IndirectReadSideEffect[-1] : &:r35_11977, ~m? +# 35| mu35_11982(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11977 +# 35| r35_11983(bool) = Constant[0] : +# 35| v35_11984(void) = ConditionalBranch : r35_11983 #-----| False -> Block 857 #-----| True (back edge) -> Block 856 -# 2587| Block 857 -# 2587| r2587_1(glval) = VariableAddress[x856] : -# 2587| mu2587_2(String) = Uninitialized[x856] : &:r2587_1 -# 2587| r2587_3(glval) = FunctionAddress[String] : -# 2587| v2587_4(void) = Call[String] : func:r2587_3, this:r2587_1 -# 2587| mu2587_5(unknown) = ^CallSideEffect : ~m? -# 2587| mu2587_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2587_1 -# 2588| r2588_1(glval) = VariableAddress[x856] : -# 2588| r2588_2(glval) = FunctionAddress[~String] : -# 2588| v2588_3(void) = Call[~String] : func:r2588_2, this:r2588_1 -# 2588| mu2588_4(unknown) = ^CallSideEffect : ~m? -# 2588| v2588_5(void) = ^IndirectReadSideEffect[-1] : &:r2588_1, ~m? -# 2588| mu2588_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2588_1 -# 2588| r2588_7(bool) = Constant[0] : -# 2588| v2588_8(void) = ConditionalBranch : r2588_7 +# 35| Block 857 +# 35| r35_11985(glval) = VariableAddress[x856] : +# 35| mu35_11986(String) = Uninitialized[x856] : &:r35_11985 +# 35| r35_11987(glval) = FunctionAddress[String] : +# 35| v35_11988(void) = Call[String] : func:r35_11987, this:r35_11985 +# 35| mu35_11989(unknown) = ^CallSideEffect : ~m? +# 35| mu35_11990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11985 +# 35| r35_11991(glval) = VariableAddress[x856] : +# 35| r35_11992(glval) = FunctionAddress[~String] : +# 35| v35_11993(void) = Call[~String] : func:r35_11992, this:r35_11991 +# 35| mu35_11994(unknown) = ^CallSideEffect : ~m? +# 35| v35_11995(void) = ^IndirectReadSideEffect[-1] : &:r35_11991, ~m? +# 35| mu35_11996(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11991 +# 35| r35_11997(bool) = Constant[0] : +# 35| v35_11998(void) = ConditionalBranch : r35_11997 #-----| False -> Block 858 #-----| True (back edge) -> Block 857 -# 2590| Block 858 -# 2590| r2590_1(glval) = VariableAddress[x857] : -# 2590| mu2590_2(String) = Uninitialized[x857] : &:r2590_1 -# 2590| r2590_3(glval) = FunctionAddress[String] : -# 2590| v2590_4(void) = Call[String] : func:r2590_3, this:r2590_1 -# 2590| mu2590_5(unknown) = ^CallSideEffect : ~m? -# 2590| mu2590_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2590_1 -# 2591| r2591_1(glval) = VariableAddress[x857] : -# 2591| r2591_2(glval) = FunctionAddress[~String] : -# 2591| v2591_3(void) = Call[~String] : func:r2591_2, this:r2591_1 -# 2591| mu2591_4(unknown) = ^CallSideEffect : ~m? -# 2591| v2591_5(void) = ^IndirectReadSideEffect[-1] : &:r2591_1, ~m? -# 2591| mu2591_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2591_1 -# 2591| r2591_7(bool) = Constant[0] : -# 2591| v2591_8(void) = ConditionalBranch : r2591_7 +# 35| Block 858 +# 35| r35_11999(glval) = VariableAddress[x857] : +# 35| mu35_12000(String) = Uninitialized[x857] : &:r35_11999 +# 35| r35_12001(glval) = FunctionAddress[String] : +# 35| v35_12002(void) = Call[String] : func:r35_12001, this:r35_11999 +# 35| mu35_12003(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_11999 +# 35| r35_12005(glval) = VariableAddress[x857] : +# 35| r35_12006(glval) = FunctionAddress[~String] : +# 35| v35_12007(void) = Call[~String] : func:r35_12006, this:r35_12005 +# 35| mu35_12008(unknown) = ^CallSideEffect : ~m? +# 35| v35_12009(void) = ^IndirectReadSideEffect[-1] : &:r35_12005, ~m? +# 35| mu35_12010(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12005 +# 35| r35_12011(bool) = Constant[0] : +# 35| v35_12012(void) = ConditionalBranch : r35_12011 #-----| False -> Block 859 #-----| True (back edge) -> Block 858 -# 2593| Block 859 -# 2593| r2593_1(glval) = VariableAddress[x858] : -# 2593| mu2593_2(String) = Uninitialized[x858] : &:r2593_1 -# 2593| r2593_3(glval) = FunctionAddress[String] : -# 2593| v2593_4(void) = Call[String] : func:r2593_3, this:r2593_1 -# 2593| mu2593_5(unknown) = ^CallSideEffect : ~m? -# 2593| mu2593_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2593_1 -# 2594| r2594_1(glval) = VariableAddress[x858] : -# 2594| r2594_2(glval) = FunctionAddress[~String] : -# 2594| v2594_3(void) = Call[~String] : func:r2594_2, this:r2594_1 -# 2594| mu2594_4(unknown) = ^CallSideEffect : ~m? -# 2594| v2594_5(void) = ^IndirectReadSideEffect[-1] : &:r2594_1, ~m? -# 2594| mu2594_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2594_1 -# 2594| r2594_7(bool) = Constant[0] : -# 2594| v2594_8(void) = ConditionalBranch : r2594_7 +# 35| Block 859 +# 35| r35_12013(glval) = VariableAddress[x858] : +# 35| mu35_12014(String) = Uninitialized[x858] : &:r35_12013 +# 35| r35_12015(glval) = FunctionAddress[String] : +# 35| v35_12016(void) = Call[String] : func:r35_12015, this:r35_12013 +# 35| mu35_12017(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12013 +# 35| r35_12019(glval) = VariableAddress[x858] : +# 35| r35_12020(glval) = FunctionAddress[~String] : +# 35| v35_12021(void) = Call[~String] : func:r35_12020, this:r35_12019 +# 35| mu35_12022(unknown) = ^CallSideEffect : ~m? +# 35| v35_12023(void) = ^IndirectReadSideEffect[-1] : &:r35_12019, ~m? +# 35| mu35_12024(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12019 +# 35| r35_12025(bool) = Constant[0] : +# 35| v35_12026(void) = ConditionalBranch : r35_12025 #-----| False -> Block 860 #-----| True (back edge) -> Block 859 -# 2596| Block 860 -# 2596| r2596_1(glval) = VariableAddress[x859] : -# 2596| mu2596_2(String) = Uninitialized[x859] : &:r2596_1 -# 2596| r2596_3(glval) = FunctionAddress[String] : -# 2596| v2596_4(void) = Call[String] : func:r2596_3, this:r2596_1 -# 2596| mu2596_5(unknown) = ^CallSideEffect : ~m? -# 2596| mu2596_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2596_1 -# 2597| r2597_1(glval) = VariableAddress[x859] : -# 2597| r2597_2(glval) = FunctionAddress[~String] : -# 2597| v2597_3(void) = Call[~String] : func:r2597_2, this:r2597_1 -# 2597| mu2597_4(unknown) = ^CallSideEffect : ~m? -# 2597| v2597_5(void) = ^IndirectReadSideEffect[-1] : &:r2597_1, ~m? -# 2597| mu2597_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2597_1 -# 2597| r2597_7(bool) = Constant[0] : -# 2597| v2597_8(void) = ConditionalBranch : r2597_7 +# 35| Block 860 +# 35| r35_12027(glval) = VariableAddress[x859] : +# 35| mu35_12028(String) = Uninitialized[x859] : &:r35_12027 +# 35| r35_12029(glval) = FunctionAddress[String] : +# 35| v35_12030(void) = Call[String] : func:r35_12029, this:r35_12027 +# 35| mu35_12031(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12027 +# 35| r35_12033(glval) = VariableAddress[x859] : +# 35| r35_12034(glval) = FunctionAddress[~String] : +# 35| v35_12035(void) = Call[~String] : func:r35_12034, this:r35_12033 +# 35| mu35_12036(unknown) = ^CallSideEffect : ~m? +# 35| v35_12037(void) = ^IndirectReadSideEffect[-1] : &:r35_12033, ~m? +# 35| mu35_12038(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12033 +# 35| r35_12039(bool) = Constant[0] : +# 35| v35_12040(void) = ConditionalBranch : r35_12039 #-----| False -> Block 861 #-----| True (back edge) -> Block 860 -# 2599| Block 861 -# 2599| r2599_1(glval) = VariableAddress[x860] : -# 2599| mu2599_2(String) = Uninitialized[x860] : &:r2599_1 -# 2599| r2599_3(glval) = FunctionAddress[String] : -# 2599| v2599_4(void) = Call[String] : func:r2599_3, this:r2599_1 -# 2599| mu2599_5(unknown) = ^CallSideEffect : ~m? -# 2599| mu2599_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2599_1 -# 2600| r2600_1(glval) = VariableAddress[x860] : -# 2600| r2600_2(glval) = FunctionAddress[~String] : -# 2600| v2600_3(void) = Call[~String] : func:r2600_2, this:r2600_1 -# 2600| mu2600_4(unknown) = ^CallSideEffect : ~m? -# 2600| v2600_5(void) = ^IndirectReadSideEffect[-1] : &:r2600_1, ~m? -# 2600| mu2600_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2600_1 -# 2600| r2600_7(bool) = Constant[0] : -# 2600| v2600_8(void) = ConditionalBranch : r2600_7 +# 35| Block 861 +# 35| r35_12041(glval) = VariableAddress[x860] : +# 35| mu35_12042(String) = Uninitialized[x860] : &:r35_12041 +# 35| r35_12043(glval) = FunctionAddress[String] : +# 35| v35_12044(void) = Call[String] : func:r35_12043, this:r35_12041 +# 35| mu35_12045(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12041 +# 35| r35_12047(glval) = VariableAddress[x860] : +# 35| r35_12048(glval) = FunctionAddress[~String] : +# 35| v35_12049(void) = Call[~String] : func:r35_12048, this:r35_12047 +# 35| mu35_12050(unknown) = ^CallSideEffect : ~m? +# 35| v35_12051(void) = ^IndirectReadSideEffect[-1] : &:r35_12047, ~m? +# 35| mu35_12052(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12047 +# 35| r35_12053(bool) = Constant[0] : +# 35| v35_12054(void) = ConditionalBranch : r35_12053 #-----| False -> Block 862 #-----| True (back edge) -> Block 861 -# 2602| Block 862 -# 2602| r2602_1(glval) = VariableAddress[x861] : -# 2602| mu2602_2(String) = Uninitialized[x861] : &:r2602_1 -# 2602| r2602_3(glval) = FunctionAddress[String] : -# 2602| v2602_4(void) = Call[String] : func:r2602_3, this:r2602_1 -# 2602| mu2602_5(unknown) = ^CallSideEffect : ~m? -# 2602| mu2602_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2602_1 -# 2603| r2603_1(glval) = VariableAddress[x861] : -# 2603| r2603_2(glval) = FunctionAddress[~String] : -# 2603| v2603_3(void) = Call[~String] : func:r2603_2, this:r2603_1 -# 2603| mu2603_4(unknown) = ^CallSideEffect : ~m? -# 2603| v2603_5(void) = ^IndirectReadSideEffect[-1] : &:r2603_1, ~m? -# 2603| mu2603_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2603_1 -# 2603| r2603_7(bool) = Constant[0] : -# 2603| v2603_8(void) = ConditionalBranch : r2603_7 +# 35| Block 862 +# 35| r35_12055(glval) = VariableAddress[x861] : +# 35| mu35_12056(String) = Uninitialized[x861] : &:r35_12055 +# 35| r35_12057(glval) = FunctionAddress[String] : +# 35| v35_12058(void) = Call[String] : func:r35_12057, this:r35_12055 +# 35| mu35_12059(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12055 +# 35| r35_12061(glval) = VariableAddress[x861] : +# 35| r35_12062(glval) = FunctionAddress[~String] : +# 35| v35_12063(void) = Call[~String] : func:r35_12062, this:r35_12061 +# 35| mu35_12064(unknown) = ^CallSideEffect : ~m? +# 35| v35_12065(void) = ^IndirectReadSideEffect[-1] : &:r35_12061, ~m? +# 35| mu35_12066(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12061 +# 35| r35_12067(bool) = Constant[0] : +# 35| v35_12068(void) = ConditionalBranch : r35_12067 #-----| False -> Block 863 #-----| True (back edge) -> Block 862 -# 2605| Block 863 -# 2605| r2605_1(glval) = VariableAddress[x862] : -# 2605| mu2605_2(String) = Uninitialized[x862] : &:r2605_1 -# 2605| r2605_3(glval) = FunctionAddress[String] : -# 2605| v2605_4(void) = Call[String] : func:r2605_3, this:r2605_1 -# 2605| mu2605_5(unknown) = ^CallSideEffect : ~m? -# 2605| mu2605_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2605_1 -# 2606| r2606_1(glval) = VariableAddress[x862] : -# 2606| r2606_2(glval) = FunctionAddress[~String] : -# 2606| v2606_3(void) = Call[~String] : func:r2606_2, this:r2606_1 -# 2606| mu2606_4(unknown) = ^CallSideEffect : ~m? -# 2606| v2606_5(void) = ^IndirectReadSideEffect[-1] : &:r2606_1, ~m? -# 2606| mu2606_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2606_1 -# 2606| r2606_7(bool) = Constant[0] : -# 2606| v2606_8(void) = ConditionalBranch : r2606_7 +# 35| Block 863 +# 35| r35_12069(glval) = VariableAddress[x862] : +# 35| mu35_12070(String) = Uninitialized[x862] : &:r35_12069 +# 35| r35_12071(glval) = FunctionAddress[String] : +# 35| v35_12072(void) = Call[String] : func:r35_12071, this:r35_12069 +# 35| mu35_12073(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12069 +# 35| r35_12075(glval) = VariableAddress[x862] : +# 35| r35_12076(glval) = FunctionAddress[~String] : +# 35| v35_12077(void) = Call[~String] : func:r35_12076, this:r35_12075 +# 35| mu35_12078(unknown) = ^CallSideEffect : ~m? +# 35| v35_12079(void) = ^IndirectReadSideEffect[-1] : &:r35_12075, ~m? +# 35| mu35_12080(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12075 +# 35| r35_12081(bool) = Constant[0] : +# 35| v35_12082(void) = ConditionalBranch : r35_12081 #-----| False -> Block 864 #-----| True (back edge) -> Block 863 -# 2608| Block 864 -# 2608| r2608_1(glval) = VariableAddress[x863] : -# 2608| mu2608_2(String) = Uninitialized[x863] : &:r2608_1 -# 2608| r2608_3(glval) = FunctionAddress[String] : -# 2608| v2608_4(void) = Call[String] : func:r2608_3, this:r2608_1 -# 2608| mu2608_5(unknown) = ^CallSideEffect : ~m? -# 2608| mu2608_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2608_1 -# 2609| r2609_1(glval) = VariableAddress[x863] : -# 2609| r2609_2(glval) = FunctionAddress[~String] : -# 2609| v2609_3(void) = Call[~String] : func:r2609_2, this:r2609_1 -# 2609| mu2609_4(unknown) = ^CallSideEffect : ~m? -# 2609| v2609_5(void) = ^IndirectReadSideEffect[-1] : &:r2609_1, ~m? -# 2609| mu2609_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2609_1 -# 2609| r2609_7(bool) = Constant[0] : -# 2609| v2609_8(void) = ConditionalBranch : r2609_7 +# 35| Block 864 +# 35| r35_12083(glval) = VariableAddress[x863] : +# 35| mu35_12084(String) = Uninitialized[x863] : &:r35_12083 +# 35| r35_12085(glval) = FunctionAddress[String] : +# 35| v35_12086(void) = Call[String] : func:r35_12085, this:r35_12083 +# 35| mu35_12087(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12083 +# 35| r35_12089(glval) = VariableAddress[x863] : +# 35| r35_12090(glval) = FunctionAddress[~String] : +# 35| v35_12091(void) = Call[~String] : func:r35_12090, this:r35_12089 +# 35| mu35_12092(unknown) = ^CallSideEffect : ~m? +# 35| v35_12093(void) = ^IndirectReadSideEffect[-1] : &:r35_12089, ~m? +# 35| mu35_12094(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12089 +# 35| r35_12095(bool) = Constant[0] : +# 35| v35_12096(void) = ConditionalBranch : r35_12095 #-----| False -> Block 865 #-----| True (back edge) -> Block 864 -# 2611| Block 865 -# 2611| r2611_1(glval) = VariableAddress[x864] : -# 2611| mu2611_2(String) = Uninitialized[x864] : &:r2611_1 -# 2611| r2611_3(glval) = FunctionAddress[String] : -# 2611| v2611_4(void) = Call[String] : func:r2611_3, this:r2611_1 -# 2611| mu2611_5(unknown) = ^CallSideEffect : ~m? -# 2611| mu2611_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2611_1 -# 2612| r2612_1(glval) = VariableAddress[x864] : -# 2612| r2612_2(glval) = FunctionAddress[~String] : -# 2612| v2612_3(void) = Call[~String] : func:r2612_2, this:r2612_1 -# 2612| mu2612_4(unknown) = ^CallSideEffect : ~m? -# 2612| v2612_5(void) = ^IndirectReadSideEffect[-1] : &:r2612_1, ~m? -# 2612| mu2612_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2612_1 -# 2612| r2612_7(bool) = Constant[0] : -# 2612| v2612_8(void) = ConditionalBranch : r2612_7 +# 35| Block 865 +# 35| r35_12097(glval) = VariableAddress[x864] : +# 35| mu35_12098(String) = Uninitialized[x864] : &:r35_12097 +# 35| r35_12099(glval) = FunctionAddress[String] : +# 35| v35_12100(void) = Call[String] : func:r35_12099, this:r35_12097 +# 35| mu35_12101(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12097 +# 35| r35_12103(glval) = VariableAddress[x864] : +# 35| r35_12104(glval) = FunctionAddress[~String] : +# 35| v35_12105(void) = Call[~String] : func:r35_12104, this:r35_12103 +# 35| mu35_12106(unknown) = ^CallSideEffect : ~m? +# 35| v35_12107(void) = ^IndirectReadSideEffect[-1] : &:r35_12103, ~m? +# 35| mu35_12108(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12103 +# 35| r35_12109(bool) = Constant[0] : +# 35| v35_12110(void) = ConditionalBranch : r35_12109 #-----| False -> Block 866 #-----| True (back edge) -> Block 865 -# 2614| Block 866 -# 2614| r2614_1(glval) = VariableAddress[x865] : -# 2614| mu2614_2(String) = Uninitialized[x865] : &:r2614_1 -# 2614| r2614_3(glval) = FunctionAddress[String] : -# 2614| v2614_4(void) = Call[String] : func:r2614_3, this:r2614_1 -# 2614| mu2614_5(unknown) = ^CallSideEffect : ~m? -# 2614| mu2614_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2614_1 -# 2615| r2615_1(glval) = VariableAddress[x865] : -# 2615| r2615_2(glval) = FunctionAddress[~String] : -# 2615| v2615_3(void) = Call[~String] : func:r2615_2, this:r2615_1 -# 2615| mu2615_4(unknown) = ^CallSideEffect : ~m? -# 2615| v2615_5(void) = ^IndirectReadSideEffect[-1] : &:r2615_1, ~m? -# 2615| mu2615_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2615_1 -# 2615| r2615_7(bool) = Constant[0] : -# 2615| v2615_8(void) = ConditionalBranch : r2615_7 +# 35| Block 866 +# 35| r35_12111(glval) = VariableAddress[x865] : +# 35| mu35_12112(String) = Uninitialized[x865] : &:r35_12111 +# 35| r35_12113(glval) = FunctionAddress[String] : +# 35| v35_12114(void) = Call[String] : func:r35_12113, this:r35_12111 +# 35| mu35_12115(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12111 +# 35| r35_12117(glval) = VariableAddress[x865] : +# 35| r35_12118(glval) = FunctionAddress[~String] : +# 35| v35_12119(void) = Call[~String] : func:r35_12118, this:r35_12117 +# 35| mu35_12120(unknown) = ^CallSideEffect : ~m? +# 35| v35_12121(void) = ^IndirectReadSideEffect[-1] : &:r35_12117, ~m? +# 35| mu35_12122(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12117 +# 35| r35_12123(bool) = Constant[0] : +# 35| v35_12124(void) = ConditionalBranch : r35_12123 #-----| False -> Block 867 #-----| True (back edge) -> Block 866 -# 2617| Block 867 -# 2617| r2617_1(glval) = VariableAddress[x866] : -# 2617| mu2617_2(String) = Uninitialized[x866] : &:r2617_1 -# 2617| r2617_3(glval) = FunctionAddress[String] : -# 2617| v2617_4(void) = Call[String] : func:r2617_3, this:r2617_1 -# 2617| mu2617_5(unknown) = ^CallSideEffect : ~m? -# 2617| mu2617_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2617_1 -# 2618| r2618_1(glval) = VariableAddress[x866] : -# 2618| r2618_2(glval) = FunctionAddress[~String] : -# 2618| v2618_3(void) = Call[~String] : func:r2618_2, this:r2618_1 -# 2618| mu2618_4(unknown) = ^CallSideEffect : ~m? -# 2618| v2618_5(void) = ^IndirectReadSideEffect[-1] : &:r2618_1, ~m? -# 2618| mu2618_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2618_1 -# 2618| r2618_7(bool) = Constant[0] : -# 2618| v2618_8(void) = ConditionalBranch : r2618_7 +# 35| Block 867 +# 35| r35_12125(glval) = VariableAddress[x866] : +# 35| mu35_12126(String) = Uninitialized[x866] : &:r35_12125 +# 35| r35_12127(glval) = FunctionAddress[String] : +# 35| v35_12128(void) = Call[String] : func:r35_12127, this:r35_12125 +# 35| mu35_12129(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12125 +# 35| r35_12131(glval) = VariableAddress[x866] : +# 35| r35_12132(glval) = FunctionAddress[~String] : +# 35| v35_12133(void) = Call[~String] : func:r35_12132, this:r35_12131 +# 35| mu35_12134(unknown) = ^CallSideEffect : ~m? +# 35| v35_12135(void) = ^IndirectReadSideEffect[-1] : &:r35_12131, ~m? +# 35| mu35_12136(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12131 +# 35| r35_12137(bool) = Constant[0] : +# 35| v35_12138(void) = ConditionalBranch : r35_12137 #-----| False -> Block 868 #-----| True (back edge) -> Block 867 -# 2620| Block 868 -# 2620| r2620_1(glval) = VariableAddress[x867] : -# 2620| mu2620_2(String) = Uninitialized[x867] : &:r2620_1 -# 2620| r2620_3(glval) = FunctionAddress[String] : -# 2620| v2620_4(void) = Call[String] : func:r2620_3, this:r2620_1 -# 2620| mu2620_5(unknown) = ^CallSideEffect : ~m? -# 2620| mu2620_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2620_1 -# 2621| r2621_1(glval) = VariableAddress[x867] : -# 2621| r2621_2(glval) = FunctionAddress[~String] : -# 2621| v2621_3(void) = Call[~String] : func:r2621_2, this:r2621_1 -# 2621| mu2621_4(unknown) = ^CallSideEffect : ~m? -# 2621| v2621_5(void) = ^IndirectReadSideEffect[-1] : &:r2621_1, ~m? -# 2621| mu2621_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2621_1 -# 2621| r2621_7(bool) = Constant[0] : -# 2621| v2621_8(void) = ConditionalBranch : r2621_7 +# 35| Block 868 +# 35| r35_12139(glval) = VariableAddress[x867] : +# 35| mu35_12140(String) = Uninitialized[x867] : &:r35_12139 +# 35| r35_12141(glval) = FunctionAddress[String] : +# 35| v35_12142(void) = Call[String] : func:r35_12141, this:r35_12139 +# 35| mu35_12143(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12139 +# 35| r35_12145(glval) = VariableAddress[x867] : +# 35| r35_12146(glval) = FunctionAddress[~String] : +# 35| v35_12147(void) = Call[~String] : func:r35_12146, this:r35_12145 +# 35| mu35_12148(unknown) = ^CallSideEffect : ~m? +# 35| v35_12149(void) = ^IndirectReadSideEffect[-1] : &:r35_12145, ~m? +# 35| mu35_12150(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12145 +# 35| r35_12151(bool) = Constant[0] : +# 35| v35_12152(void) = ConditionalBranch : r35_12151 #-----| False -> Block 869 #-----| True (back edge) -> Block 868 -# 2623| Block 869 -# 2623| r2623_1(glval) = VariableAddress[x868] : -# 2623| mu2623_2(String) = Uninitialized[x868] : &:r2623_1 -# 2623| r2623_3(glval) = FunctionAddress[String] : -# 2623| v2623_4(void) = Call[String] : func:r2623_3, this:r2623_1 -# 2623| mu2623_5(unknown) = ^CallSideEffect : ~m? -# 2623| mu2623_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2623_1 -# 2624| r2624_1(glval) = VariableAddress[x868] : -# 2624| r2624_2(glval) = FunctionAddress[~String] : -# 2624| v2624_3(void) = Call[~String] : func:r2624_2, this:r2624_1 -# 2624| mu2624_4(unknown) = ^CallSideEffect : ~m? -# 2624| v2624_5(void) = ^IndirectReadSideEffect[-1] : &:r2624_1, ~m? -# 2624| mu2624_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2624_1 -# 2624| r2624_7(bool) = Constant[0] : -# 2624| v2624_8(void) = ConditionalBranch : r2624_7 +# 35| Block 869 +# 35| r35_12153(glval) = VariableAddress[x868] : +# 35| mu35_12154(String) = Uninitialized[x868] : &:r35_12153 +# 35| r35_12155(glval) = FunctionAddress[String] : +# 35| v35_12156(void) = Call[String] : func:r35_12155, this:r35_12153 +# 35| mu35_12157(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12153 +# 35| r35_12159(glval) = VariableAddress[x868] : +# 35| r35_12160(glval) = FunctionAddress[~String] : +# 35| v35_12161(void) = Call[~String] : func:r35_12160, this:r35_12159 +# 35| mu35_12162(unknown) = ^CallSideEffect : ~m? +# 35| v35_12163(void) = ^IndirectReadSideEffect[-1] : &:r35_12159, ~m? +# 35| mu35_12164(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12159 +# 35| r35_12165(bool) = Constant[0] : +# 35| v35_12166(void) = ConditionalBranch : r35_12165 #-----| False -> Block 870 #-----| True (back edge) -> Block 869 -# 2626| Block 870 -# 2626| r2626_1(glval) = VariableAddress[x869] : -# 2626| mu2626_2(String) = Uninitialized[x869] : &:r2626_1 -# 2626| r2626_3(glval) = FunctionAddress[String] : -# 2626| v2626_4(void) = Call[String] : func:r2626_3, this:r2626_1 -# 2626| mu2626_5(unknown) = ^CallSideEffect : ~m? -# 2626| mu2626_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2626_1 -# 2627| r2627_1(glval) = VariableAddress[x869] : -# 2627| r2627_2(glval) = FunctionAddress[~String] : -# 2627| v2627_3(void) = Call[~String] : func:r2627_2, this:r2627_1 -# 2627| mu2627_4(unknown) = ^CallSideEffect : ~m? -# 2627| v2627_5(void) = ^IndirectReadSideEffect[-1] : &:r2627_1, ~m? -# 2627| mu2627_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2627_1 -# 2627| r2627_7(bool) = Constant[0] : -# 2627| v2627_8(void) = ConditionalBranch : r2627_7 +# 35| Block 870 +# 35| r35_12167(glval) = VariableAddress[x869] : +# 35| mu35_12168(String) = Uninitialized[x869] : &:r35_12167 +# 35| r35_12169(glval) = FunctionAddress[String] : +# 35| v35_12170(void) = Call[String] : func:r35_12169, this:r35_12167 +# 35| mu35_12171(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12167 +# 35| r35_12173(glval) = VariableAddress[x869] : +# 35| r35_12174(glval) = FunctionAddress[~String] : +# 35| v35_12175(void) = Call[~String] : func:r35_12174, this:r35_12173 +# 35| mu35_12176(unknown) = ^CallSideEffect : ~m? +# 35| v35_12177(void) = ^IndirectReadSideEffect[-1] : &:r35_12173, ~m? +# 35| mu35_12178(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12173 +# 35| r35_12179(bool) = Constant[0] : +# 35| v35_12180(void) = ConditionalBranch : r35_12179 #-----| False -> Block 871 #-----| True (back edge) -> Block 870 -# 2629| Block 871 -# 2629| r2629_1(glval) = VariableAddress[x870] : -# 2629| mu2629_2(String) = Uninitialized[x870] : &:r2629_1 -# 2629| r2629_3(glval) = FunctionAddress[String] : -# 2629| v2629_4(void) = Call[String] : func:r2629_3, this:r2629_1 -# 2629| mu2629_5(unknown) = ^CallSideEffect : ~m? -# 2629| mu2629_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2629_1 -# 2630| r2630_1(glval) = VariableAddress[x870] : -# 2630| r2630_2(glval) = FunctionAddress[~String] : -# 2630| v2630_3(void) = Call[~String] : func:r2630_2, this:r2630_1 -# 2630| mu2630_4(unknown) = ^CallSideEffect : ~m? -# 2630| v2630_5(void) = ^IndirectReadSideEffect[-1] : &:r2630_1, ~m? -# 2630| mu2630_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2630_1 -# 2630| r2630_7(bool) = Constant[0] : -# 2630| v2630_8(void) = ConditionalBranch : r2630_7 +# 35| Block 871 +# 35| r35_12181(glval) = VariableAddress[x870] : +# 35| mu35_12182(String) = Uninitialized[x870] : &:r35_12181 +# 35| r35_12183(glval) = FunctionAddress[String] : +# 35| v35_12184(void) = Call[String] : func:r35_12183, this:r35_12181 +# 35| mu35_12185(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12181 +# 35| r35_12187(glval) = VariableAddress[x870] : +# 35| r35_12188(glval) = FunctionAddress[~String] : +# 35| v35_12189(void) = Call[~String] : func:r35_12188, this:r35_12187 +# 35| mu35_12190(unknown) = ^CallSideEffect : ~m? +# 35| v35_12191(void) = ^IndirectReadSideEffect[-1] : &:r35_12187, ~m? +# 35| mu35_12192(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12187 +# 35| r35_12193(bool) = Constant[0] : +# 35| v35_12194(void) = ConditionalBranch : r35_12193 #-----| False -> Block 872 #-----| True (back edge) -> Block 871 -# 2632| Block 872 -# 2632| r2632_1(glval) = VariableAddress[x871] : -# 2632| mu2632_2(String) = Uninitialized[x871] : &:r2632_1 -# 2632| r2632_3(glval) = FunctionAddress[String] : -# 2632| v2632_4(void) = Call[String] : func:r2632_3, this:r2632_1 -# 2632| mu2632_5(unknown) = ^CallSideEffect : ~m? -# 2632| mu2632_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2632_1 -# 2633| r2633_1(glval) = VariableAddress[x871] : -# 2633| r2633_2(glval) = FunctionAddress[~String] : -# 2633| v2633_3(void) = Call[~String] : func:r2633_2, this:r2633_1 -# 2633| mu2633_4(unknown) = ^CallSideEffect : ~m? -# 2633| v2633_5(void) = ^IndirectReadSideEffect[-1] : &:r2633_1, ~m? -# 2633| mu2633_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2633_1 -# 2633| r2633_7(bool) = Constant[0] : -# 2633| v2633_8(void) = ConditionalBranch : r2633_7 +# 35| Block 872 +# 35| r35_12195(glval) = VariableAddress[x871] : +# 35| mu35_12196(String) = Uninitialized[x871] : &:r35_12195 +# 35| r35_12197(glval) = FunctionAddress[String] : +# 35| v35_12198(void) = Call[String] : func:r35_12197, this:r35_12195 +# 35| mu35_12199(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12195 +# 35| r35_12201(glval) = VariableAddress[x871] : +# 35| r35_12202(glval) = FunctionAddress[~String] : +# 35| v35_12203(void) = Call[~String] : func:r35_12202, this:r35_12201 +# 35| mu35_12204(unknown) = ^CallSideEffect : ~m? +# 35| v35_12205(void) = ^IndirectReadSideEffect[-1] : &:r35_12201, ~m? +# 35| mu35_12206(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12201 +# 35| r35_12207(bool) = Constant[0] : +# 35| v35_12208(void) = ConditionalBranch : r35_12207 #-----| False -> Block 873 #-----| True (back edge) -> Block 872 -# 2635| Block 873 -# 2635| r2635_1(glval) = VariableAddress[x872] : -# 2635| mu2635_2(String) = Uninitialized[x872] : &:r2635_1 -# 2635| r2635_3(glval) = FunctionAddress[String] : -# 2635| v2635_4(void) = Call[String] : func:r2635_3, this:r2635_1 -# 2635| mu2635_5(unknown) = ^CallSideEffect : ~m? -# 2635| mu2635_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2635_1 -# 2636| r2636_1(glval) = VariableAddress[x872] : -# 2636| r2636_2(glval) = FunctionAddress[~String] : -# 2636| v2636_3(void) = Call[~String] : func:r2636_2, this:r2636_1 -# 2636| mu2636_4(unknown) = ^CallSideEffect : ~m? -# 2636| v2636_5(void) = ^IndirectReadSideEffect[-1] : &:r2636_1, ~m? -# 2636| mu2636_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2636_1 -# 2636| r2636_7(bool) = Constant[0] : -# 2636| v2636_8(void) = ConditionalBranch : r2636_7 +# 35| Block 873 +# 35| r35_12209(glval) = VariableAddress[x872] : +# 35| mu35_12210(String) = Uninitialized[x872] : &:r35_12209 +# 35| r35_12211(glval) = FunctionAddress[String] : +# 35| v35_12212(void) = Call[String] : func:r35_12211, this:r35_12209 +# 35| mu35_12213(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12209 +# 35| r35_12215(glval) = VariableAddress[x872] : +# 35| r35_12216(glval) = FunctionAddress[~String] : +# 35| v35_12217(void) = Call[~String] : func:r35_12216, this:r35_12215 +# 35| mu35_12218(unknown) = ^CallSideEffect : ~m? +# 35| v35_12219(void) = ^IndirectReadSideEffect[-1] : &:r35_12215, ~m? +# 35| mu35_12220(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12215 +# 35| r35_12221(bool) = Constant[0] : +# 35| v35_12222(void) = ConditionalBranch : r35_12221 #-----| False -> Block 874 #-----| True (back edge) -> Block 873 -# 2638| Block 874 -# 2638| r2638_1(glval) = VariableAddress[x873] : -# 2638| mu2638_2(String) = Uninitialized[x873] : &:r2638_1 -# 2638| r2638_3(glval) = FunctionAddress[String] : -# 2638| v2638_4(void) = Call[String] : func:r2638_3, this:r2638_1 -# 2638| mu2638_5(unknown) = ^CallSideEffect : ~m? -# 2638| mu2638_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2638_1 -# 2639| r2639_1(glval) = VariableAddress[x873] : -# 2639| r2639_2(glval) = FunctionAddress[~String] : -# 2639| v2639_3(void) = Call[~String] : func:r2639_2, this:r2639_1 -# 2639| mu2639_4(unknown) = ^CallSideEffect : ~m? -# 2639| v2639_5(void) = ^IndirectReadSideEffect[-1] : &:r2639_1, ~m? -# 2639| mu2639_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2639_1 -# 2639| r2639_7(bool) = Constant[0] : -# 2639| v2639_8(void) = ConditionalBranch : r2639_7 +# 35| Block 874 +# 35| r35_12223(glval) = VariableAddress[x873] : +# 35| mu35_12224(String) = Uninitialized[x873] : &:r35_12223 +# 35| r35_12225(glval) = FunctionAddress[String] : +# 35| v35_12226(void) = Call[String] : func:r35_12225, this:r35_12223 +# 35| mu35_12227(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12223 +# 35| r35_12229(glval) = VariableAddress[x873] : +# 35| r35_12230(glval) = FunctionAddress[~String] : +# 35| v35_12231(void) = Call[~String] : func:r35_12230, this:r35_12229 +# 35| mu35_12232(unknown) = ^CallSideEffect : ~m? +# 35| v35_12233(void) = ^IndirectReadSideEffect[-1] : &:r35_12229, ~m? +# 35| mu35_12234(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12229 +# 35| r35_12235(bool) = Constant[0] : +# 35| v35_12236(void) = ConditionalBranch : r35_12235 #-----| False -> Block 875 #-----| True (back edge) -> Block 874 -# 2641| Block 875 -# 2641| r2641_1(glval) = VariableAddress[x874] : -# 2641| mu2641_2(String) = Uninitialized[x874] : &:r2641_1 -# 2641| r2641_3(glval) = FunctionAddress[String] : -# 2641| v2641_4(void) = Call[String] : func:r2641_3, this:r2641_1 -# 2641| mu2641_5(unknown) = ^CallSideEffect : ~m? -# 2641| mu2641_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2641_1 -# 2642| r2642_1(glval) = VariableAddress[x874] : -# 2642| r2642_2(glval) = FunctionAddress[~String] : -# 2642| v2642_3(void) = Call[~String] : func:r2642_2, this:r2642_1 -# 2642| mu2642_4(unknown) = ^CallSideEffect : ~m? -# 2642| v2642_5(void) = ^IndirectReadSideEffect[-1] : &:r2642_1, ~m? -# 2642| mu2642_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2642_1 -# 2642| r2642_7(bool) = Constant[0] : -# 2642| v2642_8(void) = ConditionalBranch : r2642_7 +# 35| Block 875 +# 35| r35_12237(glval) = VariableAddress[x874] : +# 35| mu35_12238(String) = Uninitialized[x874] : &:r35_12237 +# 35| r35_12239(glval) = FunctionAddress[String] : +# 35| v35_12240(void) = Call[String] : func:r35_12239, this:r35_12237 +# 35| mu35_12241(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12237 +# 35| r35_12243(glval) = VariableAddress[x874] : +# 35| r35_12244(glval) = FunctionAddress[~String] : +# 35| v35_12245(void) = Call[~String] : func:r35_12244, this:r35_12243 +# 35| mu35_12246(unknown) = ^CallSideEffect : ~m? +# 35| v35_12247(void) = ^IndirectReadSideEffect[-1] : &:r35_12243, ~m? +# 35| mu35_12248(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12243 +# 35| r35_12249(bool) = Constant[0] : +# 35| v35_12250(void) = ConditionalBranch : r35_12249 #-----| False -> Block 876 #-----| True (back edge) -> Block 875 -# 2644| Block 876 -# 2644| r2644_1(glval) = VariableAddress[x875] : -# 2644| mu2644_2(String) = Uninitialized[x875] : &:r2644_1 -# 2644| r2644_3(glval) = FunctionAddress[String] : -# 2644| v2644_4(void) = Call[String] : func:r2644_3, this:r2644_1 -# 2644| mu2644_5(unknown) = ^CallSideEffect : ~m? -# 2644| mu2644_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2644_1 -# 2645| r2645_1(glval) = VariableAddress[x875] : -# 2645| r2645_2(glval) = FunctionAddress[~String] : -# 2645| v2645_3(void) = Call[~String] : func:r2645_2, this:r2645_1 -# 2645| mu2645_4(unknown) = ^CallSideEffect : ~m? -# 2645| v2645_5(void) = ^IndirectReadSideEffect[-1] : &:r2645_1, ~m? -# 2645| mu2645_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2645_1 -# 2645| r2645_7(bool) = Constant[0] : -# 2645| v2645_8(void) = ConditionalBranch : r2645_7 +# 35| Block 876 +# 35| r35_12251(glval) = VariableAddress[x875] : +# 35| mu35_12252(String) = Uninitialized[x875] : &:r35_12251 +# 35| r35_12253(glval) = FunctionAddress[String] : +# 35| v35_12254(void) = Call[String] : func:r35_12253, this:r35_12251 +# 35| mu35_12255(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12251 +# 35| r35_12257(glval) = VariableAddress[x875] : +# 35| r35_12258(glval) = FunctionAddress[~String] : +# 35| v35_12259(void) = Call[~String] : func:r35_12258, this:r35_12257 +# 35| mu35_12260(unknown) = ^CallSideEffect : ~m? +# 35| v35_12261(void) = ^IndirectReadSideEffect[-1] : &:r35_12257, ~m? +# 35| mu35_12262(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12257 +# 35| r35_12263(bool) = Constant[0] : +# 35| v35_12264(void) = ConditionalBranch : r35_12263 #-----| False -> Block 877 #-----| True (back edge) -> Block 876 -# 2647| Block 877 -# 2647| r2647_1(glval) = VariableAddress[x876] : -# 2647| mu2647_2(String) = Uninitialized[x876] : &:r2647_1 -# 2647| r2647_3(glval) = FunctionAddress[String] : -# 2647| v2647_4(void) = Call[String] : func:r2647_3, this:r2647_1 -# 2647| mu2647_5(unknown) = ^CallSideEffect : ~m? -# 2647| mu2647_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2647_1 -# 2648| r2648_1(glval) = VariableAddress[x876] : -# 2648| r2648_2(glval) = FunctionAddress[~String] : -# 2648| v2648_3(void) = Call[~String] : func:r2648_2, this:r2648_1 -# 2648| mu2648_4(unknown) = ^CallSideEffect : ~m? -# 2648| v2648_5(void) = ^IndirectReadSideEffect[-1] : &:r2648_1, ~m? -# 2648| mu2648_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2648_1 -# 2648| r2648_7(bool) = Constant[0] : -# 2648| v2648_8(void) = ConditionalBranch : r2648_7 +# 35| Block 877 +# 35| r35_12265(glval) = VariableAddress[x876] : +# 35| mu35_12266(String) = Uninitialized[x876] : &:r35_12265 +# 35| r35_12267(glval) = FunctionAddress[String] : +# 35| v35_12268(void) = Call[String] : func:r35_12267, this:r35_12265 +# 35| mu35_12269(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12265 +# 35| r35_12271(glval) = VariableAddress[x876] : +# 35| r35_12272(glval) = FunctionAddress[~String] : +# 35| v35_12273(void) = Call[~String] : func:r35_12272, this:r35_12271 +# 35| mu35_12274(unknown) = ^CallSideEffect : ~m? +# 35| v35_12275(void) = ^IndirectReadSideEffect[-1] : &:r35_12271, ~m? +# 35| mu35_12276(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12271 +# 35| r35_12277(bool) = Constant[0] : +# 35| v35_12278(void) = ConditionalBranch : r35_12277 #-----| False -> Block 878 #-----| True (back edge) -> Block 877 -# 2650| Block 878 -# 2650| r2650_1(glval) = VariableAddress[x877] : -# 2650| mu2650_2(String) = Uninitialized[x877] : &:r2650_1 -# 2650| r2650_3(glval) = FunctionAddress[String] : -# 2650| v2650_4(void) = Call[String] : func:r2650_3, this:r2650_1 -# 2650| mu2650_5(unknown) = ^CallSideEffect : ~m? -# 2650| mu2650_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2650_1 -# 2651| r2651_1(glval) = VariableAddress[x877] : -# 2651| r2651_2(glval) = FunctionAddress[~String] : -# 2651| v2651_3(void) = Call[~String] : func:r2651_2, this:r2651_1 -# 2651| mu2651_4(unknown) = ^CallSideEffect : ~m? -# 2651| v2651_5(void) = ^IndirectReadSideEffect[-1] : &:r2651_1, ~m? -# 2651| mu2651_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2651_1 -# 2651| r2651_7(bool) = Constant[0] : -# 2651| v2651_8(void) = ConditionalBranch : r2651_7 +# 35| Block 878 +# 35| r35_12279(glval) = VariableAddress[x877] : +# 35| mu35_12280(String) = Uninitialized[x877] : &:r35_12279 +# 35| r35_12281(glval) = FunctionAddress[String] : +# 35| v35_12282(void) = Call[String] : func:r35_12281, this:r35_12279 +# 35| mu35_12283(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12279 +# 35| r35_12285(glval) = VariableAddress[x877] : +# 35| r35_12286(glval) = FunctionAddress[~String] : +# 35| v35_12287(void) = Call[~String] : func:r35_12286, this:r35_12285 +# 35| mu35_12288(unknown) = ^CallSideEffect : ~m? +# 35| v35_12289(void) = ^IndirectReadSideEffect[-1] : &:r35_12285, ~m? +# 35| mu35_12290(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12285 +# 35| r35_12291(bool) = Constant[0] : +# 35| v35_12292(void) = ConditionalBranch : r35_12291 #-----| False -> Block 879 #-----| True (back edge) -> Block 878 -# 2653| Block 879 -# 2653| r2653_1(glval) = VariableAddress[x878] : -# 2653| mu2653_2(String) = Uninitialized[x878] : &:r2653_1 -# 2653| r2653_3(glval) = FunctionAddress[String] : -# 2653| v2653_4(void) = Call[String] : func:r2653_3, this:r2653_1 -# 2653| mu2653_5(unknown) = ^CallSideEffect : ~m? -# 2653| mu2653_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2653_1 -# 2654| r2654_1(glval) = VariableAddress[x878] : -# 2654| r2654_2(glval) = FunctionAddress[~String] : -# 2654| v2654_3(void) = Call[~String] : func:r2654_2, this:r2654_1 -# 2654| mu2654_4(unknown) = ^CallSideEffect : ~m? -# 2654| v2654_5(void) = ^IndirectReadSideEffect[-1] : &:r2654_1, ~m? -# 2654| mu2654_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2654_1 -# 2654| r2654_7(bool) = Constant[0] : -# 2654| v2654_8(void) = ConditionalBranch : r2654_7 +# 35| Block 879 +# 35| r35_12293(glval) = VariableAddress[x878] : +# 35| mu35_12294(String) = Uninitialized[x878] : &:r35_12293 +# 35| r35_12295(glval) = FunctionAddress[String] : +# 35| v35_12296(void) = Call[String] : func:r35_12295, this:r35_12293 +# 35| mu35_12297(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12293 +# 35| r35_12299(glval) = VariableAddress[x878] : +# 35| r35_12300(glval) = FunctionAddress[~String] : +# 35| v35_12301(void) = Call[~String] : func:r35_12300, this:r35_12299 +# 35| mu35_12302(unknown) = ^CallSideEffect : ~m? +# 35| v35_12303(void) = ^IndirectReadSideEffect[-1] : &:r35_12299, ~m? +# 35| mu35_12304(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12299 +# 35| r35_12305(bool) = Constant[0] : +# 35| v35_12306(void) = ConditionalBranch : r35_12305 #-----| False -> Block 880 #-----| True (back edge) -> Block 879 -# 2656| Block 880 -# 2656| r2656_1(glval) = VariableAddress[x879] : -# 2656| mu2656_2(String) = Uninitialized[x879] : &:r2656_1 -# 2656| r2656_3(glval) = FunctionAddress[String] : -# 2656| v2656_4(void) = Call[String] : func:r2656_3, this:r2656_1 -# 2656| mu2656_5(unknown) = ^CallSideEffect : ~m? -# 2656| mu2656_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2656_1 -# 2657| r2657_1(glval) = VariableAddress[x879] : -# 2657| r2657_2(glval) = FunctionAddress[~String] : -# 2657| v2657_3(void) = Call[~String] : func:r2657_2, this:r2657_1 -# 2657| mu2657_4(unknown) = ^CallSideEffect : ~m? -# 2657| v2657_5(void) = ^IndirectReadSideEffect[-1] : &:r2657_1, ~m? -# 2657| mu2657_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2657_1 -# 2657| r2657_7(bool) = Constant[0] : -# 2657| v2657_8(void) = ConditionalBranch : r2657_7 +# 35| Block 880 +# 35| r35_12307(glval) = VariableAddress[x879] : +# 35| mu35_12308(String) = Uninitialized[x879] : &:r35_12307 +# 35| r35_12309(glval) = FunctionAddress[String] : +# 35| v35_12310(void) = Call[String] : func:r35_12309, this:r35_12307 +# 35| mu35_12311(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12307 +# 35| r35_12313(glval) = VariableAddress[x879] : +# 35| r35_12314(glval) = FunctionAddress[~String] : +# 35| v35_12315(void) = Call[~String] : func:r35_12314, this:r35_12313 +# 35| mu35_12316(unknown) = ^CallSideEffect : ~m? +# 35| v35_12317(void) = ^IndirectReadSideEffect[-1] : &:r35_12313, ~m? +# 35| mu35_12318(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12313 +# 35| r35_12319(bool) = Constant[0] : +# 35| v35_12320(void) = ConditionalBranch : r35_12319 #-----| False -> Block 881 #-----| True (back edge) -> Block 880 -# 2659| Block 881 -# 2659| r2659_1(glval) = VariableAddress[x880] : -# 2659| mu2659_2(String) = Uninitialized[x880] : &:r2659_1 -# 2659| r2659_3(glval) = FunctionAddress[String] : -# 2659| v2659_4(void) = Call[String] : func:r2659_3, this:r2659_1 -# 2659| mu2659_5(unknown) = ^CallSideEffect : ~m? -# 2659| mu2659_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2659_1 -# 2660| r2660_1(glval) = VariableAddress[x880] : -# 2660| r2660_2(glval) = FunctionAddress[~String] : -# 2660| v2660_3(void) = Call[~String] : func:r2660_2, this:r2660_1 -# 2660| mu2660_4(unknown) = ^CallSideEffect : ~m? -# 2660| v2660_5(void) = ^IndirectReadSideEffect[-1] : &:r2660_1, ~m? -# 2660| mu2660_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2660_1 -# 2660| r2660_7(bool) = Constant[0] : -# 2660| v2660_8(void) = ConditionalBranch : r2660_7 +# 35| Block 881 +# 35| r35_12321(glval) = VariableAddress[x880] : +# 35| mu35_12322(String) = Uninitialized[x880] : &:r35_12321 +# 35| r35_12323(glval) = FunctionAddress[String] : +# 35| v35_12324(void) = Call[String] : func:r35_12323, this:r35_12321 +# 35| mu35_12325(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12321 +# 35| r35_12327(glval) = VariableAddress[x880] : +# 35| r35_12328(glval) = FunctionAddress[~String] : +# 35| v35_12329(void) = Call[~String] : func:r35_12328, this:r35_12327 +# 35| mu35_12330(unknown) = ^CallSideEffect : ~m? +# 35| v35_12331(void) = ^IndirectReadSideEffect[-1] : &:r35_12327, ~m? +# 35| mu35_12332(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12327 +# 35| r35_12333(bool) = Constant[0] : +# 35| v35_12334(void) = ConditionalBranch : r35_12333 #-----| False -> Block 882 #-----| True (back edge) -> Block 881 -# 2662| Block 882 -# 2662| r2662_1(glval) = VariableAddress[x881] : -# 2662| mu2662_2(String) = Uninitialized[x881] : &:r2662_1 -# 2662| r2662_3(glval) = FunctionAddress[String] : -# 2662| v2662_4(void) = Call[String] : func:r2662_3, this:r2662_1 -# 2662| mu2662_5(unknown) = ^CallSideEffect : ~m? -# 2662| mu2662_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2662_1 -# 2663| r2663_1(glval) = VariableAddress[x881] : -# 2663| r2663_2(glval) = FunctionAddress[~String] : -# 2663| v2663_3(void) = Call[~String] : func:r2663_2, this:r2663_1 -# 2663| mu2663_4(unknown) = ^CallSideEffect : ~m? -# 2663| v2663_5(void) = ^IndirectReadSideEffect[-1] : &:r2663_1, ~m? -# 2663| mu2663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2663_1 -# 2663| r2663_7(bool) = Constant[0] : -# 2663| v2663_8(void) = ConditionalBranch : r2663_7 +# 35| Block 882 +# 35| r35_12335(glval) = VariableAddress[x881] : +# 35| mu35_12336(String) = Uninitialized[x881] : &:r35_12335 +# 35| r35_12337(glval) = FunctionAddress[String] : +# 35| v35_12338(void) = Call[String] : func:r35_12337, this:r35_12335 +# 35| mu35_12339(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12335 +# 35| r35_12341(glval) = VariableAddress[x881] : +# 35| r35_12342(glval) = FunctionAddress[~String] : +# 35| v35_12343(void) = Call[~String] : func:r35_12342, this:r35_12341 +# 35| mu35_12344(unknown) = ^CallSideEffect : ~m? +# 35| v35_12345(void) = ^IndirectReadSideEffect[-1] : &:r35_12341, ~m? +# 35| mu35_12346(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12341 +# 35| r35_12347(bool) = Constant[0] : +# 35| v35_12348(void) = ConditionalBranch : r35_12347 #-----| False -> Block 883 #-----| True (back edge) -> Block 882 -# 2665| Block 883 -# 2665| r2665_1(glval) = VariableAddress[x882] : -# 2665| mu2665_2(String) = Uninitialized[x882] : &:r2665_1 -# 2665| r2665_3(glval) = FunctionAddress[String] : -# 2665| v2665_4(void) = Call[String] : func:r2665_3, this:r2665_1 -# 2665| mu2665_5(unknown) = ^CallSideEffect : ~m? -# 2665| mu2665_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2665_1 -# 2666| r2666_1(glval) = VariableAddress[x882] : -# 2666| r2666_2(glval) = FunctionAddress[~String] : -# 2666| v2666_3(void) = Call[~String] : func:r2666_2, this:r2666_1 -# 2666| mu2666_4(unknown) = ^CallSideEffect : ~m? -# 2666| v2666_5(void) = ^IndirectReadSideEffect[-1] : &:r2666_1, ~m? -# 2666| mu2666_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2666_1 -# 2666| r2666_7(bool) = Constant[0] : -# 2666| v2666_8(void) = ConditionalBranch : r2666_7 +# 35| Block 883 +# 35| r35_12349(glval) = VariableAddress[x882] : +# 35| mu35_12350(String) = Uninitialized[x882] : &:r35_12349 +# 35| r35_12351(glval) = FunctionAddress[String] : +# 35| v35_12352(void) = Call[String] : func:r35_12351, this:r35_12349 +# 35| mu35_12353(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12349 +# 35| r35_12355(glval) = VariableAddress[x882] : +# 35| r35_12356(glval) = FunctionAddress[~String] : +# 35| v35_12357(void) = Call[~String] : func:r35_12356, this:r35_12355 +# 35| mu35_12358(unknown) = ^CallSideEffect : ~m? +# 35| v35_12359(void) = ^IndirectReadSideEffect[-1] : &:r35_12355, ~m? +# 35| mu35_12360(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12355 +# 35| r35_12361(bool) = Constant[0] : +# 35| v35_12362(void) = ConditionalBranch : r35_12361 #-----| False -> Block 884 #-----| True (back edge) -> Block 883 -# 2668| Block 884 -# 2668| r2668_1(glval) = VariableAddress[x883] : -# 2668| mu2668_2(String) = Uninitialized[x883] : &:r2668_1 -# 2668| r2668_3(glval) = FunctionAddress[String] : -# 2668| v2668_4(void) = Call[String] : func:r2668_3, this:r2668_1 -# 2668| mu2668_5(unknown) = ^CallSideEffect : ~m? -# 2668| mu2668_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2668_1 -# 2669| r2669_1(glval) = VariableAddress[x883] : -# 2669| r2669_2(glval) = FunctionAddress[~String] : -# 2669| v2669_3(void) = Call[~String] : func:r2669_2, this:r2669_1 -# 2669| mu2669_4(unknown) = ^CallSideEffect : ~m? -# 2669| v2669_5(void) = ^IndirectReadSideEffect[-1] : &:r2669_1, ~m? -# 2669| mu2669_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2669_1 -# 2669| r2669_7(bool) = Constant[0] : -# 2669| v2669_8(void) = ConditionalBranch : r2669_7 +# 35| Block 884 +# 35| r35_12363(glval) = VariableAddress[x883] : +# 35| mu35_12364(String) = Uninitialized[x883] : &:r35_12363 +# 35| r35_12365(glval) = FunctionAddress[String] : +# 35| v35_12366(void) = Call[String] : func:r35_12365, this:r35_12363 +# 35| mu35_12367(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12363 +# 35| r35_12369(glval) = VariableAddress[x883] : +# 35| r35_12370(glval) = FunctionAddress[~String] : +# 35| v35_12371(void) = Call[~String] : func:r35_12370, this:r35_12369 +# 35| mu35_12372(unknown) = ^CallSideEffect : ~m? +# 35| v35_12373(void) = ^IndirectReadSideEffect[-1] : &:r35_12369, ~m? +# 35| mu35_12374(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12369 +# 35| r35_12375(bool) = Constant[0] : +# 35| v35_12376(void) = ConditionalBranch : r35_12375 #-----| False -> Block 885 #-----| True (back edge) -> Block 884 -# 2671| Block 885 -# 2671| r2671_1(glval) = VariableAddress[x884] : -# 2671| mu2671_2(String) = Uninitialized[x884] : &:r2671_1 -# 2671| r2671_3(glval) = FunctionAddress[String] : -# 2671| v2671_4(void) = Call[String] : func:r2671_3, this:r2671_1 -# 2671| mu2671_5(unknown) = ^CallSideEffect : ~m? -# 2671| mu2671_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2671_1 -# 2672| r2672_1(glval) = VariableAddress[x884] : -# 2672| r2672_2(glval) = FunctionAddress[~String] : -# 2672| v2672_3(void) = Call[~String] : func:r2672_2, this:r2672_1 -# 2672| mu2672_4(unknown) = ^CallSideEffect : ~m? -# 2672| v2672_5(void) = ^IndirectReadSideEffect[-1] : &:r2672_1, ~m? -# 2672| mu2672_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2672_1 -# 2672| r2672_7(bool) = Constant[0] : -# 2672| v2672_8(void) = ConditionalBranch : r2672_7 +# 35| Block 885 +# 35| r35_12377(glval) = VariableAddress[x884] : +# 35| mu35_12378(String) = Uninitialized[x884] : &:r35_12377 +# 35| r35_12379(glval) = FunctionAddress[String] : +# 35| v35_12380(void) = Call[String] : func:r35_12379, this:r35_12377 +# 35| mu35_12381(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12377 +# 35| r35_12383(glval) = VariableAddress[x884] : +# 35| r35_12384(glval) = FunctionAddress[~String] : +# 35| v35_12385(void) = Call[~String] : func:r35_12384, this:r35_12383 +# 35| mu35_12386(unknown) = ^CallSideEffect : ~m? +# 35| v35_12387(void) = ^IndirectReadSideEffect[-1] : &:r35_12383, ~m? +# 35| mu35_12388(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12383 +# 35| r35_12389(bool) = Constant[0] : +# 35| v35_12390(void) = ConditionalBranch : r35_12389 #-----| False -> Block 886 #-----| True (back edge) -> Block 885 -# 2674| Block 886 -# 2674| r2674_1(glval) = VariableAddress[x885] : -# 2674| mu2674_2(String) = Uninitialized[x885] : &:r2674_1 -# 2674| r2674_3(glval) = FunctionAddress[String] : -# 2674| v2674_4(void) = Call[String] : func:r2674_3, this:r2674_1 -# 2674| mu2674_5(unknown) = ^CallSideEffect : ~m? -# 2674| mu2674_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2674_1 -# 2675| r2675_1(glval) = VariableAddress[x885] : -# 2675| r2675_2(glval) = FunctionAddress[~String] : -# 2675| v2675_3(void) = Call[~String] : func:r2675_2, this:r2675_1 -# 2675| mu2675_4(unknown) = ^CallSideEffect : ~m? -# 2675| v2675_5(void) = ^IndirectReadSideEffect[-1] : &:r2675_1, ~m? -# 2675| mu2675_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2675_1 -# 2675| r2675_7(bool) = Constant[0] : -# 2675| v2675_8(void) = ConditionalBranch : r2675_7 +# 35| Block 886 +# 35| r35_12391(glval) = VariableAddress[x885] : +# 35| mu35_12392(String) = Uninitialized[x885] : &:r35_12391 +# 35| r35_12393(glval) = FunctionAddress[String] : +# 35| v35_12394(void) = Call[String] : func:r35_12393, this:r35_12391 +# 35| mu35_12395(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12391 +# 35| r35_12397(glval) = VariableAddress[x885] : +# 35| r35_12398(glval) = FunctionAddress[~String] : +# 35| v35_12399(void) = Call[~String] : func:r35_12398, this:r35_12397 +# 35| mu35_12400(unknown) = ^CallSideEffect : ~m? +# 35| v35_12401(void) = ^IndirectReadSideEffect[-1] : &:r35_12397, ~m? +# 35| mu35_12402(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12397 +# 35| r35_12403(bool) = Constant[0] : +# 35| v35_12404(void) = ConditionalBranch : r35_12403 #-----| False -> Block 887 #-----| True (back edge) -> Block 886 -# 2677| Block 887 -# 2677| r2677_1(glval) = VariableAddress[x886] : -# 2677| mu2677_2(String) = Uninitialized[x886] : &:r2677_1 -# 2677| r2677_3(glval) = FunctionAddress[String] : -# 2677| v2677_4(void) = Call[String] : func:r2677_3, this:r2677_1 -# 2677| mu2677_5(unknown) = ^CallSideEffect : ~m? -# 2677| mu2677_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2677_1 -# 2678| r2678_1(glval) = VariableAddress[x886] : -# 2678| r2678_2(glval) = FunctionAddress[~String] : -# 2678| v2678_3(void) = Call[~String] : func:r2678_2, this:r2678_1 -# 2678| mu2678_4(unknown) = ^CallSideEffect : ~m? -# 2678| v2678_5(void) = ^IndirectReadSideEffect[-1] : &:r2678_1, ~m? -# 2678| mu2678_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2678_1 -# 2678| r2678_7(bool) = Constant[0] : -# 2678| v2678_8(void) = ConditionalBranch : r2678_7 +# 35| Block 887 +# 35| r35_12405(glval) = VariableAddress[x886] : +# 35| mu35_12406(String) = Uninitialized[x886] : &:r35_12405 +# 35| r35_12407(glval) = FunctionAddress[String] : +# 35| v35_12408(void) = Call[String] : func:r35_12407, this:r35_12405 +# 35| mu35_12409(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12405 +# 35| r35_12411(glval) = VariableAddress[x886] : +# 35| r35_12412(glval) = FunctionAddress[~String] : +# 35| v35_12413(void) = Call[~String] : func:r35_12412, this:r35_12411 +# 35| mu35_12414(unknown) = ^CallSideEffect : ~m? +# 35| v35_12415(void) = ^IndirectReadSideEffect[-1] : &:r35_12411, ~m? +# 35| mu35_12416(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12411 +# 35| r35_12417(bool) = Constant[0] : +# 35| v35_12418(void) = ConditionalBranch : r35_12417 #-----| False -> Block 888 #-----| True (back edge) -> Block 887 -# 2680| Block 888 -# 2680| r2680_1(glval) = VariableAddress[x887] : -# 2680| mu2680_2(String) = Uninitialized[x887] : &:r2680_1 -# 2680| r2680_3(glval) = FunctionAddress[String] : -# 2680| v2680_4(void) = Call[String] : func:r2680_3, this:r2680_1 -# 2680| mu2680_5(unknown) = ^CallSideEffect : ~m? -# 2680| mu2680_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2680_1 -# 2681| r2681_1(glval) = VariableAddress[x887] : -# 2681| r2681_2(glval) = FunctionAddress[~String] : -# 2681| v2681_3(void) = Call[~String] : func:r2681_2, this:r2681_1 -# 2681| mu2681_4(unknown) = ^CallSideEffect : ~m? -# 2681| v2681_5(void) = ^IndirectReadSideEffect[-1] : &:r2681_1, ~m? -# 2681| mu2681_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2681_1 -# 2681| r2681_7(bool) = Constant[0] : -# 2681| v2681_8(void) = ConditionalBranch : r2681_7 +# 35| Block 888 +# 35| r35_12419(glval) = VariableAddress[x887] : +# 35| mu35_12420(String) = Uninitialized[x887] : &:r35_12419 +# 35| r35_12421(glval) = FunctionAddress[String] : +# 35| v35_12422(void) = Call[String] : func:r35_12421, this:r35_12419 +# 35| mu35_12423(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12419 +# 35| r35_12425(glval) = VariableAddress[x887] : +# 35| r35_12426(glval) = FunctionAddress[~String] : +# 35| v35_12427(void) = Call[~String] : func:r35_12426, this:r35_12425 +# 35| mu35_12428(unknown) = ^CallSideEffect : ~m? +# 35| v35_12429(void) = ^IndirectReadSideEffect[-1] : &:r35_12425, ~m? +# 35| mu35_12430(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12425 +# 35| r35_12431(bool) = Constant[0] : +# 35| v35_12432(void) = ConditionalBranch : r35_12431 #-----| False -> Block 889 #-----| True (back edge) -> Block 888 -# 2683| Block 889 -# 2683| r2683_1(glval) = VariableAddress[x888] : -# 2683| mu2683_2(String) = Uninitialized[x888] : &:r2683_1 -# 2683| r2683_3(glval) = FunctionAddress[String] : -# 2683| v2683_4(void) = Call[String] : func:r2683_3, this:r2683_1 -# 2683| mu2683_5(unknown) = ^CallSideEffect : ~m? -# 2683| mu2683_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2683_1 -# 2684| r2684_1(glval) = VariableAddress[x888] : -# 2684| r2684_2(glval) = FunctionAddress[~String] : -# 2684| v2684_3(void) = Call[~String] : func:r2684_2, this:r2684_1 -# 2684| mu2684_4(unknown) = ^CallSideEffect : ~m? -# 2684| v2684_5(void) = ^IndirectReadSideEffect[-1] : &:r2684_1, ~m? -# 2684| mu2684_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2684_1 -# 2684| r2684_7(bool) = Constant[0] : -# 2684| v2684_8(void) = ConditionalBranch : r2684_7 +# 35| Block 889 +# 35| r35_12433(glval) = VariableAddress[x888] : +# 35| mu35_12434(String) = Uninitialized[x888] : &:r35_12433 +# 35| r35_12435(glval) = FunctionAddress[String] : +# 35| v35_12436(void) = Call[String] : func:r35_12435, this:r35_12433 +# 35| mu35_12437(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12433 +# 35| r35_12439(glval) = VariableAddress[x888] : +# 35| r35_12440(glval) = FunctionAddress[~String] : +# 35| v35_12441(void) = Call[~String] : func:r35_12440, this:r35_12439 +# 35| mu35_12442(unknown) = ^CallSideEffect : ~m? +# 35| v35_12443(void) = ^IndirectReadSideEffect[-1] : &:r35_12439, ~m? +# 35| mu35_12444(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12439 +# 35| r35_12445(bool) = Constant[0] : +# 35| v35_12446(void) = ConditionalBranch : r35_12445 #-----| False -> Block 890 #-----| True (back edge) -> Block 889 -# 2686| Block 890 -# 2686| r2686_1(glval) = VariableAddress[x889] : -# 2686| mu2686_2(String) = Uninitialized[x889] : &:r2686_1 -# 2686| r2686_3(glval) = FunctionAddress[String] : -# 2686| v2686_4(void) = Call[String] : func:r2686_3, this:r2686_1 -# 2686| mu2686_5(unknown) = ^CallSideEffect : ~m? -# 2686| mu2686_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2686_1 -# 2687| r2687_1(glval) = VariableAddress[x889] : -# 2687| r2687_2(glval) = FunctionAddress[~String] : -# 2687| v2687_3(void) = Call[~String] : func:r2687_2, this:r2687_1 -# 2687| mu2687_4(unknown) = ^CallSideEffect : ~m? -# 2687| v2687_5(void) = ^IndirectReadSideEffect[-1] : &:r2687_1, ~m? -# 2687| mu2687_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2687_1 -# 2687| r2687_7(bool) = Constant[0] : -# 2687| v2687_8(void) = ConditionalBranch : r2687_7 +# 35| Block 890 +# 35| r35_12447(glval) = VariableAddress[x889] : +# 35| mu35_12448(String) = Uninitialized[x889] : &:r35_12447 +# 35| r35_12449(glval) = FunctionAddress[String] : +# 35| v35_12450(void) = Call[String] : func:r35_12449, this:r35_12447 +# 35| mu35_12451(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12447 +# 35| r35_12453(glval) = VariableAddress[x889] : +# 35| r35_12454(glval) = FunctionAddress[~String] : +# 35| v35_12455(void) = Call[~String] : func:r35_12454, this:r35_12453 +# 35| mu35_12456(unknown) = ^CallSideEffect : ~m? +# 35| v35_12457(void) = ^IndirectReadSideEffect[-1] : &:r35_12453, ~m? +# 35| mu35_12458(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12453 +# 35| r35_12459(bool) = Constant[0] : +# 35| v35_12460(void) = ConditionalBranch : r35_12459 #-----| False -> Block 891 #-----| True (back edge) -> Block 890 -# 2689| Block 891 -# 2689| r2689_1(glval) = VariableAddress[x890] : -# 2689| mu2689_2(String) = Uninitialized[x890] : &:r2689_1 -# 2689| r2689_3(glval) = FunctionAddress[String] : -# 2689| v2689_4(void) = Call[String] : func:r2689_3, this:r2689_1 -# 2689| mu2689_5(unknown) = ^CallSideEffect : ~m? -# 2689| mu2689_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2689_1 -# 2690| r2690_1(glval) = VariableAddress[x890] : -# 2690| r2690_2(glval) = FunctionAddress[~String] : -# 2690| v2690_3(void) = Call[~String] : func:r2690_2, this:r2690_1 -# 2690| mu2690_4(unknown) = ^CallSideEffect : ~m? -# 2690| v2690_5(void) = ^IndirectReadSideEffect[-1] : &:r2690_1, ~m? -# 2690| mu2690_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2690_1 -# 2690| r2690_7(bool) = Constant[0] : -# 2690| v2690_8(void) = ConditionalBranch : r2690_7 +# 35| Block 891 +# 35| r35_12461(glval) = VariableAddress[x890] : +# 35| mu35_12462(String) = Uninitialized[x890] : &:r35_12461 +# 35| r35_12463(glval) = FunctionAddress[String] : +# 35| v35_12464(void) = Call[String] : func:r35_12463, this:r35_12461 +# 35| mu35_12465(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12461 +# 35| r35_12467(glval) = VariableAddress[x890] : +# 35| r35_12468(glval) = FunctionAddress[~String] : +# 35| v35_12469(void) = Call[~String] : func:r35_12468, this:r35_12467 +# 35| mu35_12470(unknown) = ^CallSideEffect : ~m? +# 35| v35_12471(void) = ^IndirectReadSideEffect[-1] : &:r35_12467, ~m? +# 35| mu35_12472(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12467 +# 35| r35_12473(bool) = Constant[0] : +# 35| v35_12474(void) = ConditionalBranch : r35_12473 #-----| False -> Block 892 #-----| True (back edge) -> Block 891 -# 2692| Block 892 -# 2692| r2692_1(glval) = VariableAddress[x891] : -# 2692| mu2692_2(String) = Uninitialized[x891] : &:r2692_1 -# 2692| r2692_3(glval) = FunctionAddress[String] : -# 2692| v2692_4(void) = Call[String] : func:r2692_3, this:r2692_1 -# 2692| mu2692_5(unknown) = ^CallSideEffect : ~m? -# 2692| mu2692_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2692_1 -# 2693| r2693_1(glval) = VariableAddress[x891] : -# 2693| r2693_2(glval) = FunctionAddress[~String] : -# 2693| v2693_3(void) = Call[~String] : func:r2693_2, this:r2693_1 -# 2693| mu2693_4(unknown) = ^CallSideEffect : ~m? -# 2693| v2693_5(void) = ^IndirectReadSideEffect[-1] : &:r2693_1, ~m? -# 2693| mu2693_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2693_1 -# 2693| r2693_7(bool) = Constant[0] : -# 2693| v2693_8(void) = ConditionalBranch : r2693_7 +# 35| Block 892 +# 35| r35_12475(glval) = VariableAddress[x891] : +# 35| mu35_12476(String) = Uninitialized[x891] : &:r35_12475 +# 35| r35_12477(glval) = FunctionAddress[String] : +# 35| v35_12478(void) = Call[String] : func:r35_12477, this:r35_12475 +# 35| mu35_12479(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12475 +# 35| r35_12481(glval) = VariableAddress[x891] : +# 35| r35_12482(glval) = FunctionAddress[~String] : +# 35| v35_12483(void) = Call[~String] : func:r35_12482, this:r35_12481 +# 35| mu35_12484(unknown) = ^CallSideEffect : ~m? +# 35| v35_12485(void) = ^IndirectReadSideEffect[-1] : &:r35_12481, ~m? +# 35| mu35_12486(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12481 +# 35| r35_12487(bool) = Constant[0] : +# 35| v35_12488(void) = ConditionalBranch : r35_12487 #-----| False -> Block 893 #-----| True (back edge) -> Block 892 -# 2695| Block 893 -# 2695| r2695_1(glval) = VariableAddress[x892] : -# 2695| mu2695_2(String) = Uninitialized[x892] : &:r2695_1 -# 2695| r2695_3(glval) = FunctionAddress[String] : -# 2695| v2695_4(void) = Call[String] : func:r2695_3, this:r2695_1 -# 2695| mu2695_5(unknown) = ^CallSideEffect : ~m? -# 2695| mu2695_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2695_1 -# 2696| r2696_1(glval) = VariableAddress[x892] : -# 2696| r2696_2(glval) = FunctionAddress[~String] : -# 2696| v2696_3(void) = Call[~String] : func:r2696_2, this:r2696_1 -# 2696| mu2696_4(unknown) = ^CallSideEffect : ~m? -# 2696| v2696_5(void) = ^IndirectReadSideEffect[-1] : &:r2696_1, ~m? -# 2696| mu2696_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2696_1 -# 2696| r2696_7(bool) = Constant[0] : -# 2696| v2696_8(void) = ConditionalBranch : r2696_7 +# 35| Block 893 +# 35| r35_12489(glval) = VariableAddress[x892] : +# 35| mu35_12490(String) = Uninitialized[x892] : &:r35_12489 +# 35| r35_12491(glval) = FunctionAddress[String] : +# 35| v35_12492(void) = Call[String] : func:r35_12491, this:r35_12489 +# 35| mu35_12493(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12489 +# 35| r35_12495(glval) = VariableAddress[x892] : +# 35| r35_12496(glval) = FunctionAddress[~String] : +# 35| v35_12497(void) = Call[~String] : func:r35_12496, this:r35_12495 +# 35| mu35_12498(unknown) = ^CallSideEffect : ~m? +# 35| v35_12499(void) = ^IndirectReadSideEffect[-1] : &:r35_12495, ~m? +# 35| mu35_12500(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12495 +# 35| r35_12501(bool) = Constant[0] : +# 35| v35_12502(void) = ConditionalBranch : r35_12501 #-----| False -> Block 894 #-----| True (back edge) -> Block 893 -# 2698| Block 894 -# 2698| r2698_1(glval) = VariableAddress[x893] : -# 2698| mu2698_2(String) = Uninitialized[x893] : &:r2698_1 -# 2698| r2698_3(glval) = FunctionAddress[String] : -# 2698| v2698_4(void) = Call[String] : func:r2698_3, this:r2698_1 -# 2698| mu2698_5(unknown) = ^CallSideEffect : ~m? -# 2698| mu2698_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2698_1 -# 2699| r2699_1(glval) = VariableAddress[x893] : -# 2699| r2699_2(glval) = FunctionAddress[~String] : -# 2699| v2699_3(void) = Call[~String] : func:r2699_2, this:r2699_1 -# 2699| mu2699_4(unknown) = ^CallSideEffect : ~m? -# 2699| v2699_5(void) = ^IndirectReadSideEffect[-1] : &:r2699_1, ~m? -# 2699| mu2699_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2699_1 -# 2699| r2699_7(bool) = Constant[0] : -# 2699| v2699_8(void) = ConditionalBranch : r2699_7 +# 35| Block 894 +# 35| r35_12503(glval) = VariableAddress[x893] : +# 35| mu35_12504(String) = Uninitialized[x893] : &:r35_12503 +# 35| r35_12505(glval) = FunctionAddress[String] : +# 35| v35_12506(void) = Call[String] : func:r35_12505, this:r35_12503 +# 35| mu35_12507(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12503 +# 35| r35_12509(glval) = VariableAddress[x893] : +# 35| r35_12510(glval) = FunctionAddress[~String] : +# 35| v35_12511(void) = Call[~String] : func:r35_12510, this:r35_12509 +# 35| mu35_12512(unknown) = ^CallSideEffect : ~m? +# 35| v35_12513(void) = ^IndirectReadSideEffect[-1] : &:r35_12509, ~m? +# 35| mu35_12514(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12509 +# 35| r35_12515(bool) = Constant[0] : +# 35| v35_12516(void) = ConditionalBranch : r35_12515 #-----| False -> Block 895 #-----| True (back edge) -> Block 894 -# 2701| Block 895 -# 2701| r2701_1(glval) = VariableAddress[x894] : -# 2701| mu2701_2(String) = Uninitialized[x894] : &:r2701_1 -# 2701| r2701_3(glval) = FunctionAddress[String] : -# 2701| v2701_4(void) = Call[String] : func:r2701_3, this:r2701_1 -# 2701| mu2701_5(unknown) = ^CallSideEffect : ~m? -# 2701| mu2701_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2701_1 -# 2702| r2702_1(glval) = VariableAddress[x894] : -# 2702| r2702_2(glval) = FunctionAddress[~String] : -# 2702| v2702_3(void) = Call[~String] : func:r2702_2, this:r2702_1 -# 2702| mu2702_4(unknown) = ^CallSideEffect : ~m? -# 2702| v2702_5(void) = ^IndirectReadSideEffect[-1] : &:r2702_1, ~m? -# 2702| mu2702_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2702_1 -# 2702| r2702_7(bool) = Constant[0] : -# 2702| v2702_8(void) = ConditionalBranch : r2702_7 +# 35| Block 895 +# 35| r35_12517(glval) = VariableAddress[x894] : +# 35| mu35_12518(String) = Uninitialized[x894] : &:r35_12517 +# 35| r35_12519(glval) = FunctionAddress[String] : +# 35| v35_12520(void) = Call[String] : func:r35_12519, this:r35_12517 +# 35| mu35_12521(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12517 +# 35| r35_12523(glval) = VariableAddress[x894] : +# 35| r35_12524(glval) = FunctionAddress[~String] : +# 35| v35_12525(void) = Call[~String] : func:r35_12524, this:r35_12523 +# 35| mu35_12526(unknown) = ^CallSideEffect : ~m? +# 35| v35_12527(void) = ^IndirectReadSideEffect[-1] : &:r35_12523, ~m? +# 35| mu35_12528(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12523 +# 35| r35_12529(bool) = Constant[0] : +# 35| v35_12530(void) = ConditionalBranch : r35_12529 #-----| False -> Block 896 #-----| True (back edge) -> Block 895 -# 2704| Block 896 -# 2704| r2704_1(glval) = VariableAddress[x895] : -# 2704| mu2704_2(String) = Uninitialized[x895] : &:r2704_1 -# 2704| r2704_3(glval) = FunctionAddress[String] : -# 2704| v2704_4(void) = Call[String] : func:r2704_3, this:r2704_1 -# 2704| mu2704_5(unknown) = ^CallSideEffect : ~m? -# 2704| mu2704_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2704_1 -# 2705| r2705_1(glval) = VariableAddress[x895] : -# 2705| r2705_2(glval) = FunctionAddress[~String] : -# 2705| v2705_3(void) = Call[~String] : func:r2705_2, this:r2705_1 -# 2705| mu2705_4(unknown) = ^CallSideEffect : ~m? -# 2705| v2705_5(void) = ^IndirectReadSideEffect[-1] : &:r2705_1, ~m? -# 2705| mu2705_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2705_1 -# 2705| r2705_7(bool) = Constant[0] : -# 2705| v2705_8(void) = ConditionalBranch : r2705_7 +# 35| Block 896 +# 35| r35_12531(glval) = VariableAddress[x895] : +# 35| mu35_12532(String) = Uninitialized[x895] : &:r35_12531 +# 35| r35_12533(glval) = FunctionAddress[String] : +# 35| v35_12534(void) = Call[String] : func:r35_12533, this:r35_12531 +# 35| mu35_12535(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12531 +# 35| r35_12537(glval) = VariableAddress[x895] : +# 35| r35_12538(glval) = FunctionAddress[~String] : +# 35| v35_12539(void) = Call[~String] : func:r35_12538, this:r35_12537 +# 35| mu35_12540(unknown) = ^CallSideEffect : ~m? +# 35| v35_12541(void) = ^IndirectReadSideEffect[-1] : &:r35_12537, ~m? +# 35| mu35_12542(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12537 +# 35| r35_12543(bool) = Constant[0] : +# 35| v35_12544(void) = ConditionalBranch : r35_12543 #-----| False -> Block 897 #-----| True (back edge) -> Block 896 -# 2707| Block 897 -# 2707| r2707_1(glval) = VariableAddress[x896] : -# 2707| mu2707_2(String) = Uninitialized[x896] : &:r2707_1 -# 2707| r2707_3(glval) = FunctionAddress[String] : -# 2707| v2707_4(void) = Call[String] : func:r2707_3, this:r2707_1 -# 2707| mu2707_5(unknown) = ^CallSideEffect : ~m? -# 2707| mu2707_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2707_1 -# 2708| r2708_1(glval) = VariableAddress[x896] : -# 2708| r2708_2(glval) = FunctionAddress[~String] : -# 2708| v2708_3(void) = Call[~String] : func:r2708_2, this:r2708_1 -# 2708| mu2708_4(unknown) = ^CallSideEffect : ~m? -# 2708| v2708_5(void) = ^IndirectReadSideEffect[-1] : &:r2708_1, ~m? -# 2708| mu2708_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2708_1 -# 2708| r2708_7(bool) = Constant[0] : -# 2708| v2708_8(void) = ConditionalBranch : r2708_7 +# 35| Block 897 +# 35| r35_12545(glval) = VariableAddress[x896] : +# 35| mu35_12546(String) = Uninitialized[x896] : &:r35_12545 +# 35| r35_12547(glval) = FunctionAddress[String] : +# 35| v35_12548(void) = Call[String] : func:r35_12547, this:r35_12545 +# 35| mu35_12549(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12545 +# 35| r35_12551(glval) = VariableAddress[x896] : +# 35| r35_12552(glval) = FunctionAddress[~String] : +# 35| v35_12553(void) = Call[~String] : func:r35_12552, this:r35_12551 +# 35| mu35_12554(unknown) = ^CallSideEffect : ~m? +# 35| v35_12555(void) = ^IndirectReadSideEffect[-1] : &:r35_12551, ~m? +# 35| mu35_12556(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12551 +# 35| r35_12557(bool) = Constant[0] : +# 35| v35_12558(void) = ConditionalBranch : r35_12557 #-----| False -> Block 898 #-----| True (back edge) -> Block 897 -# 2710| Block 898 -# 2710| r2710_1(glval) = VariableAddress[x897] : -# 2710| mu2710_2(String) = Uninitialized[x897] : &:r2710_1 -# 2710| r2710_3(glval) = FunctionAddress[String] : -# 2710| v2710_4(void) = Call[String] : func:r2710_3, this:r2710_1 -# 2710| mu2710_5(unknown) = ^CallSideEffect : ~m? -# 2710| mu2710_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2710_1 -# 2711| r2711_1(glval) = VariableAddress[x897] : -# 2711| r2711_2(glval) = FunctionAddress[~String] : -# 2711| v2711_3(void) = Call[~String] : func:r2711_2, this:r2711_1 -# 2711| mu2711_4(unknown) = ^CallSideEffect : ~m? -# 2711| v2711_5(void) = ^IndirectReadSideEffect[-1] : &:r2711_1, ~m? -# 2711| mu2711_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2711_1 -# 2711| r2711_7(bool) = Constant[0] : -# 2711| v2711_8(void) = ConditionalBranch : r2711_7 +# 35| Block 898 +# 35| r35_12559(glval) = VariableAddress[x897] : +# 35| mu35_12560(String) = Uninitialized[x897] : &:r35_12559 +# 35| r35_12561(glval) = FunctionAddress[String] : +# 35| v35_12562(void) = Call[String] : func:r35_12561, this:r35_12559 +# 35| mu35_12563(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12559 +# 35| r35_12565(glval) = VariableAddress[x897] : +# 35| r35_12566(glval) = FunctionAddress[~String] : +# 35| v35_12567(void) = Call[~String] : func:r35_12566, this:r35_12565 +# 35| mu35_12568(unknown) = ^CallSideEffect : ~m? +# 35| v35_12569(void) = ^IndirectReadSideEffect[-1] : &:r35_12565, ~m? +# 35| mu35_12570(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12565 +# 35| r35_12571(bool) = Constant[0] : +# 35| v35_12572(void) = ConditionalBranch : r35_12571 #-----| False -> Block 899 #-----| True (back edge) -> Block 898 -# 2713| Block 899 -# 2713| r2713_1(glval) = VariableAddress[x898] : -# 2713| mu2713_2(String) = Uninitialized[x898] : &:r2713_1 -# 2713| r2713_3(glval) = FunctionAddress[String] : -# 2713| v2713_4(void) = Call[String] : func:r2713_3, this:r2713_1 -# 2713| mu2713_5(unknown) = ^CallSideEffect : ~m? -# 2713| mu2713_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2713_1 -# 2714| r2714_1(glval) = VariableAddress[x898] : -# 2714| r2714_2(glval) = FunctionAddress[~String] : -# 2714| v2714_3(void) = Call[~String] : func:r2714_2, this:r2714_1 -# 2714| mu2714_4(unknown) = ^CallSideEffect : ~m? -# 2714| v2714_5(void) = ^IndirectReadSideEffect[-1] : &:r2714_1, ~m? -# 2714| mu2714_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2714_1 -# 2714| r2714_7(bool) = Constant[0] : -# 2714| v2714_8(void) = ConditionalBranch : r2714_7 +# 35| Block 899 +# 35| r35_12573(glval) = VariableAddress[x898] : +# 35| mu35_12574(String) = Uninitialized[x898] : &:r35_12573 +# 35| r35_12575(glval) = FunctionAddress[String] : +# 35| v35_12576(void) = Call[String] : func:r35_12575, this:r35_12573 +# 35| mu35_12577(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12573 +# 35| r35_12579(glval) = VariableAddress[x898] : +# 35| r35_12580(glval) = FunctionAddress[~String] : +# 35| v35_12581(void) = Call[~String] : func:r35_12580, this:r35_12579 +# 35| mu35_12582(unknown) = ^CallSideEffect : ~m? +# 35| v35_12583(void) = ^IndirectReadSideEffect[-1] : &:r35_12579, ~m? +# 35| mu35_12584(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12579 +# 35| r35_12585(bool) = Constant[0] : +# 35| v35_12586(void) = ConditionalBranch : r35_12585 #-----| False -> Block 900 #-----| True (back edge) -> Block 899 -# 2716| Block 900 -# 2716| r2716_1(glval) = VariableAddress[x899] : -# 2716| mu2716_2(String) = Uninitialized[x899] : &:r2716_1 -# 2716| r2716_3(glval) = FunctionAddress[String] : -# 2716| v2716_4(void) = Call[String] : func:r2716_3, this:r2716_1 -# 2716| mu2716_5(unknown) = ^CallSideEffect : ~m? -# 2716| mu2716_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2716_1 -# 2717| r2717_1(glval) = VariableAddress[x899] : -# 2717| r2717_2(glval) = FunctionAddress[~String] : -# 2717| v2717_3(void) = Call[~String] : func:r2717_2, this:r2717_1 -# 2717| mu2717_4(unknown) = ^CallSideEffect : ~m? -# 2717| v2717_5(void) = ^IndirectReadSideEffect[-1] : &:r2717_1, ~m? -# 2717| mu2717_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2717_1 -# 2717| r2717_7(bool) = Constant[0] : -# 2717| v2717_8(void) = ConditionalBranch : r2717_7 +# 35| Block 900 +# 35| r35_12587(glval) = VariableAddress[x899] : +# 35| mu35_12588(String) = Uninitialized[x899] : &:r35_12587 +# 35| r35_12589(glval) = FunctionAddress[String] : +# 35| v35_12590(void) = Call[String] : func:r35_12589, this:r35_12587 +# 35| mu35_12591(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12587 +# 35| r35_12593(glval) = VariableAddress[x899] : +# 35| r35_12594(glval) = FunctionAddress[~String] : +# 35| v35_12595(void) = Call[~String] : func:r35_12594, this:r35_12593 +# 35| mu35_12596(unknown) = ^CallSideEffect : ~m? +# 35| v35_12597(void) = ^IndirectReadSideEffect[-1] : &:r35_12593, ~m? +# 35| mu35_12598(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12593 +# 35| r35_12599(bool) = Constant[0] : +# 35| v35_12600(void) = ConditionalBranch : r35_12599 #-----| False -> Block 901 #-----| True (back edge) -> Block 900 -# 2719| Block 901 -# 2719| r2719_1(glval) = VariableAddress[x900] : -# 2719| mu2719_2(String) = Uninitialized[x900] : &:r2719_1 -# 2719| r2719_3(glval) = FunctionAddress[String] : -# 2719| v2719_4(void) = Call[String] : func:r2719_3, this:r2719_1 -# 2719| mu2719_5(unknown) = ^CallSideEffect : ~m? -# 2719| mu2719_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2719_1 -# 2720| r2720_1(glval) = VariableAddress[x900] : -# 2720| r2720_2(glval) = FunctionAddress[~String] : -# 2720| v2720_3(void) = Call[~String] : func:r2720_2, this:r2720_1 -# 2720| mu2720_4(unknown) = ^CallSideEffect : ~m? -# 2720| v2720_5(void) = ^IndirectReadSideEffect[-1] : &:r2720_1, ~m? -# 2720| mu2720_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2720_1 -# 2720| r2720_7(bool) = Constant[0] : -# 2720| v2720_8(void) = ConditionalBranch : r2720_7 +# 35| Block 901 +# 35| r35_12601(glval) = VariableAddress[x900] : +# 35| mu35_12602(String) = Uninitialized[x900] : &:r35_12601 +# 35| r35_12603(glval) = FunctionAddress[String] : +# 35| v35_12604(void) = Call[String] : func:r35_12603, this:r35_12601 +# 35| mu35_12605(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12601 +# 35| r35_12607(glval) = VariableAddress[x900] : +# 35| r35_12608(glval) = FunctionAddress[~String] : +# 35| v35_12609(void) = Call[~String] : func:r35_12608, this:r35_12607 +# 35| mu35_12610(unknown) = ^CallSideEffect : ~m? +# 35| v35_12611(void) = ^IndirectReadSideEffect[-1] : &:r35_12607, ~m? +# 35| mu35_12612(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12607 +# 35| r35_12613(bool) = Constant[0] : +# 35| v35_12614(void) = ConditionalBranch : r35_12613 #-----| False -> Block 902 #-----| True (back edge) -> Block 901 -# 2722| Block 902 -# 2722| r2722_1(glval) = VariableAddress[x901] : -# 2722| mu2722_2(String) = Uninitialized[x901] : &:r2722_1 -# 2722| r2722_3(glval) = FunctionAddress[String] : -# 2722| v2722_4(void) = Call[String] : func:r2722_3, this:r2722_1 -# 2722| mu2722_5(unknown) = ^CallSideEffect : ~m? -# 2722| mu2722_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2722_1 -# 2723| r2723_1(glval) = VariableAddress[x901] : -# 2723| r2723_2(glval) = FunctionAddress[~String] : -# 2723| v2723_3(void) = Call[~String] : func:r2723_2, this:r2723_1 -# 2723| mu2723_4(unknown) = ^CallSideEffect : ~m? -# 2723| v2723_5(void) = ^IndirectReadSideEffect[-1] : &:r2723_1, ~m? -# 2723| mu2723_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2723_1 -# 2723| r2723_7(bool) = Constant[0] : -# 2723| v2723_8(void) = ConditionalBranch : r2723_7 +# 35| Block 902 +# 35| r35_12615(glval) = VariableAddress[x901] : +# 35| mu35_12616(String) = Uninitialized[x901] : &:r35_12615 +# 35| r35_12617(glval) = FunctionAddress[String] : +# 35| v35_12618(void) = Call[String] : func:r35_12617, this:r35_12615 +# 35| mu35_12619(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12615 +# 35| r35_12621(glval) = VariableAddress[x901] : +# 35| r35_12622(glval) = FunctionAddress[~String] : +# 35| v35_12623(void) = Call[~String] : func:r35_12622, this:r35_12621 +# 35| mu35_12624(unknown) = ^CallSideEffect : ~m? +# 35| v35_12625(void) = ^IndirectReadSideEffect[-1] : &:r35_12621, ~m? +# 35| mu35_12626(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12621 +# 35| r35_12627(bool) = Constant[0] : +# 35| v35_12628(void) = ConditionalBranch : r35_12627 #-----| False -> Block 903 #-----| True (back edge) -> Block 902 -# 2725| Block 903 -# 2725| r2725_1(glval) = VariableAddress[x902] : -# 2725| mu2725_2(String) = Uninitialized[x902] : &:r2725_1 -# 2725| r2725_3(glval) = FunctionAddress[String] : -# 2725| v2725_4(void) = Call[String] : func:r2725_3, this:r2725_1 -# 2725| mu2725_5(unknown) = ^CallSideEffect : ~m? -# 2725| mu2725_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2725_1 -# 2726| r2726_1(glval) = VariableAddress[x902] : -# 2726| r2726_2(glval) = FunctionAddress[~String] : -# 2726| v2726_3(void) = Call[~String] : func:r2726_2, this:r2726_1 -# 2726| mu2726_4(unknown) = ^CallSideEffect : ~m? -# 2726| v2726_5(void) = ^IndirectReadSideEffect[-1] : &:r2726_1, ~m? -# 2726| mu2726_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2726_1 -# 2726| r2726_7(bool) = Constant[0] : -# 2726| v2726_8(void) = ConditionalBranch : r2726_7 +# 35| Block 903 +# 35| r35_12629(glval) = VariableAddress[x902] : +# 35| mu35_12630(String) = Uninitialized[x902] : &:r35_12629 +# 35| r35_12631(glval) = FunctionAddress[String] : +# 35| v35_12632(void) = Call[String] : func:r35_12631, this:r35_12629 +# 35| mu35_12633(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12629 +# 35| r35_12635(glval) = VariableAddress[x902] : +# 35| r35_12636(glval) = FunctionAddress[~String] : +# 35| v35_12637(void) = Call[~String] : func:r35_12636, this:r35_12635 +# 35| mu35_12638(unknown) = ^CallSideEffect : ~m? +# 35| v35_12639(void) = ^IndirectReadSideEffect[-1] : &:r35_12635, ~m? +# 35| mu35_12640(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12635 +# 35| r35_12641(bool) = Constant[0] : +# 35| v35_12642(void) = ConditionalBranch : r35_12641 #-----| False -> Block 904 #-----| True (back edge) -> Block 903 -# 2728| Block 904 -# 2728| r2728_1(glval) = VariableAddress[x903] : -# 2728| mu2728_2(String) = Uninitialized[x903] : &:r2728_1 -# 2728| r2728_3(glval) = FunctionAddress[String] : -# 2728| v2728_4(void) = Call[String] : func:r2728_3, this:r2728_1 -# 2728| mu2728_5(unknown) = ^CallSideEffect : ~m? -# 2728| mu2728_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2728_1 -# 2729| r2729_1(glval) = VariableAddress[x903] : -# 2729| r2729_2(glval) = FunctionAddress[~String] : -# 2729| v2729_3(void) = Call[~String] : func:r2729_2, this:r2729_1 -# 2729| mu2729_4(unknown) = ^CallSideEffect : ~m? -# 2729| v2729_5(void) = ^IndirectReadSideEffect[-1] : &:r2729_1, ~m? -# 2729| mu2729_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2729_1 -# 2729| r2729_7(bool) = Constant[0] : -# 2729| v2729_8(void) = ConditionalBranch : r2729_7 +# 35| Block 904 +# 35| r35_12643(glval) = VariableAddress[x903] : +# 35| mu35_12644(String) = Uninitialized[x903] : &:r35_12643 +# 35| r35_12645(glval) = FunctionAddress[String] : +# 35| v35_12646(void) = Call[String] : func:r35_12645, this:r35_12643 +# 35| mu35_12647(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12643 +# 35| r35_12649(glval) = VariableAddress[x903] : +# 35| r35_12650(glval) = FunctionAddress[~String] : +# 35| v35_12651(void) = Call[~String] : func:r35_12650, this:r35_12649 +# 35| mu35_12652(unknown) = ^CallSideEffect : ~m? +# 35| v35_12653(void) = ^IndirectReadSideEffect[-1] : &:r35_12649, ~m? +# 35| mu35_12654(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12649 +# 35| r35_12655(bool) = Constant[0] : +# 35| v35_12656(void) = ConditionalBranch : r35_12655 #-----| False -> Block 905 #-----| True (back edge) -> Block 904 -# 2731| Block 905 -# 2731| r2731_1(glval) = VariableAddress[x904] : -# 2731| mu2731_2(String) = Uninitialized[x904] : &:r2731_1 -# 2731| r2731_3(glval) = FunctionAddress[String] : -# 2731| v2731_4(void) = Call[String] : func:r2731_3, this:r2731_1 -# 2731| mu2731_5(unknown) = ^CallSideEffect : ~m? -# 2731| mu2731_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2731_1 -# 2732| r2732_1(glval) = VariableAddress[x904] : -# 2732| r2732_2(glval) = FunctionAddress[~String] : -# 2732| v2732_3(void) = Call[~String] : func:r2732_2, this:r2732_1 -# 2732| mu2732_4(unknown) = ^CallSideEffect : ~m? -# 2732| v2732_5(void) = ^IndirectReadSideEffect[-1] : &:r2732_1, ~m? -# 2732| mu2732_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2732_1 -# 2732| r2732_7(bool) = Constant[0] : -# 2732| v2732_8(void) = ConditionalBranch : r2732_7 +# 35| Block 905 +# 35| r35_12657(glval) = VariableAddress[x904] : +# 35| mu35_12658(String) = Uninitialized[x904] : &:r35_12657 +# 35| r35_12659(glval) = FunctionAddress[String] : +# 35| v35_12660(void) = Call[String] : func:r35_12659, this:r35_12657 +# 35| mu35_12661(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12657 +# 35| r35_12663(glval) = VariableAddress[x904] : +# 35| r35_12664(glval) = FunctionAddress[~String] : +# 35| v35_12665(void) = Call[~String] : func:r35_12664, this:r35_12663 +# 35| mu35_12666(unknown) = ^CallSideEffect : ~m? +# 35| v35_12667(void) = ^IndirectReadSideEffect[-1] : &:r35_12663, ~m? +# 35| mu35_12668(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12663 +# 35| r35_12669(bool) = Constant[0] : +# 35| v35_12670(void) = ConditionalBranch : r35_12669 #-----| False -> Block 906 #-----| True (back edge) -> Block 905 -# 2734| Block 906 -# 2734| r2734_1(glval) = VariableAddress[x905] : -# 2734| mu2734_2(String) = Uninitialized[x905] : &:r2734_1 -# 2734| r2734_3(glval) = FunctionAddress[String] : -# 2734| v2734_4(void) = Call[String] : func:r2734_3, this:r2734_1 -# 2734| mu2734_5(unknown) = ^CallSideEffect : ~m? -# 2734| mu2734_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2734_1 -# 2735| r2735_1(glval) = VariableAddress[x905] : -# 2735| r2735_2(glval) = FunctionAddress[~String] : -# 2735| v2735_3(void) = Call[~String] : func:r2735_2, this:r2735_1 -# 2735| mu2735_4(unknown) = ^CallSideEffect : ~m? -# 2735| v2735_5(void) = ^IndirectReadSideEffect[-1] : &:r2735_1, ~m? -# 2735| mu2735_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2735_1 -# 2735| r2735_7(bool) = Constant[0] : -# 2735| v2735_8(void) = ConditionalBranch : r2735_7 +# 35| Block 906 +# 35| r35_12671(glval) = VariableAddress[x905] : +# 35| mu35_12672(String) = Uninitialized[x905] : &:r35_12671 +# 35| r35_12673(glval) = FunctionAddress[String] : +# 35| v35_12674(void) = Call[String] : func:r35_12673, this:r35_12671 +# 35| mu35_12675(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12671 +# 35| r35_12677(glval) = VariableAddress[x905] : +# 35| r35_12678(glval) = FunctionAddress[~String] : +# 35| v35_12679(void) = Call[~String] : func:r35_12678, this:r35_12677 +# 35| mu35_12680(unknown) = ^CallSideEffect : ~m? +# 35| v35_12681(void) = ^IndirectReadSideEffect[-1] : &:r35_12677, ~m? +# 35| mu35_12682(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12677 +# 35| r35_12683(bool) = Constant[0] : +# 35| v35_12684(void) = ConditionalBranch : r35_12683 #-----| False -> Block 907 #-----| True (back edge) -> Block 906 -# 2737| Block 907 -# 2737| r2737_1(glval) = VariableAddress[x906] : -# 2737| mu2737_2(String) = Uninitialized[x906] : &:r2737_1 -# 2737| r2737_3(glval) = FunctionAddress[String] : -# 2737| v2737_4(void) = Call[String] : func:r2737_3, this:r2737_1 -# 2737| mu2737_5(unknown) = ^CallSideEffect : ~m? -# 2737| mu2737_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2737_1 -# 2738| r2738_1(glval) = VariableAddress[x906] : -# 2738| r2738_2(glval) = FunctionAddress[~String] : -# 2738| v2738_3(void) = Call[~String] : func:r2738_2, this:r2738_1 -# 2738| mu2738_4(unknown) = ^CallSideEffect : ~m? -# 2738| v2738_5(void) = ^IndirectReadSideEffect[-1] : &:r2738_1, ~m? -# 2738| mu2738_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2738_1 -# 2738| r2738_7(bool) = Constant[0] : -# 2738| v2738_8(void) = ConditionalBranch : r2738_7 +# 35| Block 907 +# 35| r35_12685(glval) = VariableAddress[x906] : +# 35| mu35_12686(String) = Uninitialized[x906] : &:r35_12685 +# 35| r35_12687(glval) = FunctionAddress[String] : +# 35| v35_12688(void) = Call[String] : func:r35_12687, this:r35_12685 +# 35| mu35_12689(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12685 +# 35| r35_12691(glval) = VariableAddress[x906] : +# 35| r35_12692(glval) = FunctionAddress[~String] : +# 35| v35_12693(void) = Call[~String] : func:r35_12692, this:r35_12691 +# 35| mu35_12694(unknown) = ^CallSideEffect : ~m? +# 35| v35_12695(void) = ^IndirectReadSideEffect[-1] : &:r35_12691, ~m? +# 35| mu35_12696(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12691 +# 35| r35_12697(bool) = Constant[0] : +# 35| v35_12698(void) = ConditionalBranch : r35_12697 #-----| False -> Block 908 #-----| True (back edge) -> Block 907 -# 2740| Block 908 -# 2740| r2740_1(glval) = VariableAddress[x907] : -# 2740| mu2740_2(String) = Uninitialized[x907] : &:r2740_1 -# 2740| r2740_3(glval) = FunctionAddress[String] : -# 2740| v2740_4(void) = Call[String] : func:r2740_3, this:r2740_1 -# 2740| mu2740_5(unknown) = ^CallSideEffect : ~m? -# 2740| mu2740_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2740_1 -# 2741| r2741_1(glval) = VariableAddress[x907] : -# 2741| r2741_2(glval) = FunctionAddress[~String] : -# 2741| v2741_3(void) = Call[~String] : func:r2741_2, this:r2741_1 -# 2741| mu2741_4(unknown) = ^CallSideEffect : ~m? -# 2741| v2741_5(void) = ^IndirectReadSideEffect[-1] : &:r2741_1, ~m? -# 2741| mu2741_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2741_1 -# 2741| r2741_7(bool) = Constant[0] : -# 2741| v2741_8(void) = ConditionalBranch : r2741_7 +# 35| Block 908 +# 35| r35_12699(glval) = VariableAddress[x907] : +# 35| mu35_12700(String) = Uninitialized[x907] : &:r35_12699 +# 35| r35_12701(glval) = FunctionAddress[String] : +# 35| v35_12702(void) = Call[String] : func:r35_12701, this:r35_12699 +# 35| mu35_12703(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12699 +# 35| r35_12705(glval) = VariableAddress[x907] : +# 35| r35_12706(glval) = FunctionAddress[~String] : +# 35| v35_12707(void) = Call[~String] : func:r35_12706, this:r35_12705 +# 35| mu35_12708(unknown) = ^CallSideEffect : ~m? +# 35| v35_12709(void) = ^IndirectReadSideEffect[-1] : &:r35_12705, ~m? +# 35| mu35_12710(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12705 +# 35| r35_12711(bool) = Constant[0] : +# 35| v35_12712(void) = ConditionalBranch : r35_12711 #-----| False -> Block 909 #-----| True (back edge) -> Block 908 -# 2743| Block 909 -# 2743| r2743_1(glval) = VariableAddress[x908] : -# 2743| mu2743_2(String) = Uninitialized[x908] : &:r2743_1 -# 2743| r2743_3(glval) = FunctionAddress[String] : -# 2743| v2743_4(void) = Call[String] : func:r2743_3, this:r2743_1 -# 2743| mu2743_5(unknown) = ^CallSideEffect : ~m? -# 2743| mu2743_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2743_1 -# 2744| r2744_1(glval) = VariableAddress[x908] : -# 2744| r2744_2(glval) = FunctionAddress[~String] : -# 2744| v2744_3(void) = Call[~String] : func:r2744_2, this:r2744_1 -# 2744| mu2744_4(unknown) = ^CallSideEffect : ~m? -# 2744| v2744_5(void) = ^IndirectReadSideEffect[-1] : &:r2744_1, ~m? -# 2744| mu2744_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2744_1 -# 2744| r2744_7(bool) = Constant[0] : -# 2744| v2744_8(void) = ConditionalBranch : r2744_7 +# 35| Block 909 +# 35| r35_12713(glval) = VariableAddress[x908] : +# 35| mu35_12714(String) = Uninitialized[x908] : &:r35_12713 +# 35| r35_12715(glval) = FunctionAddress[String] : +# 35| v35_12716(void) = Call[String] : func:r35_12715, this:r35_12713 +# 35| mu35_12717(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12713 +# 35| r35_12719(glval) = VariableAddress[x908] : +# 35| r35_12720(glval) = FunctionAddress[~String] : +# 35| v35_12721(void) = Call[~String] : func:r35_12720, this:r35_12719 +# 35| mu35_12722(unknown) = ^CallSideEffect : ~m? +# 35| v35_12723(void) = ^IndirectReadSideEffect[-1] : &:r35_12719, ~m? +# 35| mu35_12724(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12719 +# 35| r35_12725(bool) = Constant[0] : +# 35| v35_12726(void) = ConditionalBranch : r35_12725 #-----| False -> Block 910 #-----| True (back edge) -> Block 909 -# 2746| Block 910 -# 2746| r2746_1(glval) = VariableAddress[x909] : -# 2746| mu2746_2(String) = Uninitialized[x909] : &:r2746_1 -# 2746| r2746_3(glval) = FunctionAddress[String] : -# 2746| v2746_4(void) = Call[String] : func:r2746_3, this:r2746_1 -# 2746| mu2746_5(unknown) = ^CallSideEffect : ~m? -# 2746| mu2746_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2746_1 -# 2747| r2747_1(glval) = VariableAddress[x909] : -# 2747| r2747_2(glval) = FunctionAddress[~String] : -# 2747| v2747_3(void) = Call[~String] : func:r2747_2, this:r2747_1 -# 2747| mu2747_4(unknown) = ^CallSideEffect : ~m? -# 2747| v2747_5(void) = ^IndirectReadSideEffect[-1] : &:r2747_1, ~m? -# 2747| mu2747_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2747_1 -# 2747| r2747_7(bool) = Constant[0] : -# 2747| v2747_8(void) = ConditionalBranch : r2747_7 +# 35| Block 910 +# 35| r35_12727(glval) = VariableAddress[x909] : +# 35| mu35_12728(String) = Uninitialized[x909] : &:r35_12727 +# 35| r35_12729(glval) = FunctionAddress[String] : +# 35| v35_12730(void) = Call[String] : func:r35_12729, this:r35_12727 +# 35| mu35_12731(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12727 +# 35| r35_12733(glval) = VariableAddress[x909] : +# 35| r35_12734(glval) = FunctionAddress[~String] : +# 35| v35_12735(void) = Call[~String] : func:r35_12734, this:r35_12733 +# 35| mu35_12736(unknown) = ^CallSideEffect : ~m? +# 35| v35_12737(void) = ^IndirectReadSideEffect[-1] : &:r35_12733, ~m? +# 35| mu35_12738(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12733 +# 35| r35_12739(bool) = Constant[0] : +# 35| v35_12740(void) = ConditionalBranch : r35_12739 #-----| False -> Block 911 #-----| True (back edge) -> Block 910 -# 2749| Block 911 -# 2749| r2749_1(glval) = VariableAddress[x910] : -# 2749| mu2749_2(String) = Uninitialized[x910] : &:r2749_1 -# 2749| r2749_3(glval) = FunctionAddress[String] : -# 2749| v2749_4(void) = Call[String] : func:r2749_3, this:r2749_1 -# 2749| mu2749_5(unknown) = ^CallSideEffect : ~m? -# 2749| mu2749_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2749_1 -# 2750| r2750_1(glval) = VariableAddress[x910] : -# 2750| r2750_2(glval) = FunctionAddress[~String] : -# 2750| v2750_3(void) = Call[~String] : func:r2750_2, this:r2750_1 -# 2750| mu2750_4(unknown) = ^CallSideEffect : ~m? -# 2750| v2750_5(void) = ^IndirectReadSideEffect[-1] : &:r2750_1, ~m? -# 2750| mu2750_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2750_1 -# 2750| r2750_7(bool) = Constant[0] : -# 2750| v2750_8(void) = ConditionalBranch : r2750_7 +# 35| Block 911 +# 35| r35_12741(glval) = VariableAddress[x910] : +# 35| mu35_12742(String) = Uninitialized[x910] : &:r35_12741 +# 35| r35_12743(glval) = FunctionAddress[String] : +# 35| v35_12744(void) = Call[String] : func:r35_12743, this:r35_12741 +# 35| mu35_12745(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12741 +# 35| r35_12747(glval) = VariableAddress[x910] : +# 35| r35_12748(glval) = FunctionAddress[~String] : +# 35| v35_12749(void) = Call[~String] : func:r35_12748, this:r35_12747 +# 35| mu35_12750(unknown) = ^CallSideEffect : ~m? +# 35| v35_12751(void) = ^IndirectReadSideEffect[-1] : &:r35_12747, ~m? +# 35| mu35_12752(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12747 +# 35| r35_12753(bool) = Constant[0] : +# 35| v35_12754(void) = ConditionalBranch : r35_12753 #-----| False -> Block 912 #-----| True (back edge) -> Block 911 -# 2752| Block 912 -# 2752| r2752_1(glval) = VariableAddress[x911] : -# 2752| mu2752_2(String) = Uninitialized[x911] : &:r2752_1 -# 2752| r2752_3(glval) = FunctionAddress[String] : -# 2752| v2752_4(void) = Call[String] : func:r2752_3, this:r2752_1 -# 2752| mu2752_5(unknown) = ^CallSideEffect : ~m? -# 2752| mu2752_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2752_1 -# 2753| r2753_1(glval) = VariableAddress[x911] : -# 2753| r2753_2(glval) = FunctionAddress[~String] : -# 2753| v2753_3(void) = Call[~String] : func:r2753_2, this:r2753_1 -# 2753| mu2753_4(unknown) = ^CallSideEffect : ~m? -# 2753| v2753_5(void) = ^IndirectReadSideEffect[-1] : &:r2753_1, ~m? -# 2753| mu2753_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2753_1 -# 2753| r2753_7(bool) = Constant[0] : -# 2753| v2753_8(void) = ConditionalBranch : r2753_7 +# 35| Block 912 +# 35| r35_12755(glval) = VariableAddress[x911] : +# 35| mu35_12756(String) = Uninitialized[x911] : &:r35_12755 +# 35| r35_12757(glval) = FunctionAddress[String] : +# 35| v35_12758(void) = Call[String] : func:r35_12757, this:r35_12755 +# 35| mu35_12759(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12755 +# 35| r35_12761(glval) = VariableAddress[x911] : +# 35| r35_12762(glval) = FunctionAddress[~String] : +# 35| v35_12763(void) = Call[~String] : func:r35_12762, this:r35_12761 +# 35| mu35_12764(unknown) = ^CallSideEffect : ~m? +# 35| v35_12765(void) = ^IndirectReadSideEffect[-1] : &:r35_12761, ~m? +# 35| mu35_12766(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12761 +# 35| r35_12767(bool) = Constant[0] : +# 35| v35_12768(void) = ConditionalBranch : r35_12767 #-----| False -> Block 913 #-----| True (back edge) -> Block 912 -# 2755| Block 913 -# 2755| r2755_1(glval) = VariableAddress[x912] : -# 2755| mu2755_2(String) = Uninitialized[x912] : &:r2755_1 -# 2755| r2755_3(glval) = FunctionAddress[String] : -# 2755| v2755_4(void) = Call[String] : func:r2755_3, this:r2755_1 -# 2755| mu2755_5(unknown) = ^CallSideEffect : ~m? -# 2755| mu2755_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2755_1 -# 2756| r2756_1(glval) = VariableAddress[x912] : -# 2756| r2756_2(glval) = FunctionAddress[~String] : -# 2756| v2756_3(void) = Call[~String] : func:r2756_2, this:r2756_1 -# 2756| mu2756_4(unknown) = ^CallSideEffect : ~m? -# 2756| v2756_5(void) = ^IndirectReadSideEffect[-1] : &:r2756_1, ~m? -# 2756| mu2756_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2756_1 -# 2756| r2756_7(bool) = Constant[0] : -# 2756| v2756_8(void) = ConditionalBranch : r2756_7 +# 35| Block 913 +# 35| r35_12769(glval) = VariableAddress[x912] : +# 35| mu35_12770(String) = Uninitialized[x912] : &:r35_12769 +# 35| r35_12771(glval) = FunctionAddress[String] : +# 35| v35_12772(void) = Call[String] : func:r35_12771, this:r35_12769 +# 35| mu35_12773(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12769 +# 35| r35_12775(glval) = VariableAddress[x912] : +# 35| r35_12776(glval) = FunctionAddress[~String] : +# 35| v35_12777(void) = Call[~String] : func:r35_12776, this:r35_12775 +# 35| mu35_12778(unknown) = ^CallSideEffect : ~m? +# 35| v35_12779(void) = ^IndirectReadSideEffect[-1] : &:r35_12775, ~m? +# 35| mu35_12780(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12775 +# 35| r35_12781(bool) = Constant[0] : +# 35| v35_12782(void) = ConditionalBranch : r35_12781 #-----| False -> Block 914 #-----| True (back edge) -> Block 913 -# 2758| Block 914 -# 2758| r2758_1(glval) = VariableAddress[x913] : -# 2758| mu2758_2(String) = Uninitialized[x913] : &:r2758_1 -# 2758| r2758_3(glval) = FunctionAddress[String] : -# 2758| v2758_4(void) = Call[String] : func:r2758_3, this:r2758_1 -# 2758| mu2758_5(unknown) = ^CallSideEffect : ~m? -# 2758| mu2758_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2758_1 -# 2759| r2759_1(glval) = VariableAddress[x913] : -# 2759| r2759_2(glval) = FunctionAddress[~String] : -# 2759| v2759_3(void) = Call[~String] : func:r2759_2, this:r2759_1 -# 2759| mu2759_4(unknown) = ^CallSideEffect : ~m? -# 2759| v2759_5(void) = ^IndirectReadSideEffect[-1] : &:r2759_1, ~m? -# 2759| mu2759_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2759_1 -# 2759| r2759_7(bool) = Constant[0] : -# 2759| v2759_8(void) = ConditionalBranch : r2759_7 +# 35| Block 914 +# 35| r35_12783(glval) = VariableAddress[x913] : +# 35| mu35_12784(String) = Uninitialized[x913] : &:r35_12783 +# 35| r35_12785(glval) = FunctionAddress[String] : +# 35| v35_12786(void) = Call[String] : func:r35_12785, this:r35_12783 +# 35| mu35_12787(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12783 +# 35| r35_12789(glval) = VariableAddress[x913] : +# 35| r35_12790(glval) = FunctionAddress[~String] : +# 35| v35_12791(void) = Call[~String] : func:r35_12790, this:r35_12789 +# 35| mu35_12792(unknown) = ^CallSideEffect : ~m? +# 35| v35_12793(void) = ^IndirectReadSideEffect[-1] : &:r35_12789, ~m? +# 35| mu35_12794(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12789 +# 35| r35_12795(bool) = Constant[0] : +# 35| v35_12796(void) = ConditionalBranch : r35_12795 #-----| False -> Block 915 #-----| True (back edge) -> Block 914 -# 2761| Block 915 -# 2761| r2761_1(glval) = VariableAddress[x914] : -# 2761| mu2761_2(String) = Uninitialized[x914] : &:r2761_1 -# 2761| r2761_3(glval) = FunctionAddress[String] : -# 2761| v2761_4(void) = Call[String] : func:r2761_3, this:r2761_1 -# 2761| mu2761_5(unknown) = ^CallSideEffect : ~m? -# 2761| mu2761_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2761_1 -# 2762| r2762_1(glval) = VariableAddress[x914] : -# 2762| r2762_2(glval) = FunctionAddress[~String] : -# 2762| v2762_3(void) = Call[~String] : func:r2762_2, this:r2762_1 -# 2762| mu2762_4(unknown) = ^CallSideEffect : ~m? -# 2762| v2762_5(void) = ^IndirectReadSideEffect[-1] : &:r2762_1, ~m? -# 2762| mu2762_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2762_1 -# 2762| r2762_7(bool) = Constant[0] : -# 2762| v2762_8(void) = ConditionalBranch : r2762_7 +# 35| Block 915 +# 35| r35_12797(glval) = VariableAddress[x914] : +# 35| mu35_12798(String) = Uninitialized[x914] : &:r35_12797 +# 35| r35_12799(glval) = FunctionAddress[String] : +# 35| v35_12800(void) = Call[String] : func:r35_12799, this:r35_12797 +# 35| mu35_12801(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12797 +# 35| r35_12803(glval) = VariableAddress[x914] : +# 35| r35_12804(glval) = FunctionAddress[~String] : +# 35| v35_12805(void) = Call[~String] : func:r35_12804, this:r35_12803 +# 35| mu35_12806(unknown) = ^CallSideEffect : ~m? +# 35| v35_12807(void) = ^IndirectReadSideEffect[-1] : &:r35_12803, ~m? +# 35| mu35_12808(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12803 +# 35| r35_12809(bool) = Constant[0] : +# 35| v35_12810(void) = ConditionalBranch : r35_12809 #-----| False -> Block 916 #-----| True (back edge) -> Block 915 -# 2764| Block 916 -# 2764| r2764_1(glval) = VariableAddress[x915] : -# 2764| mu2764_2(String) = Uninitialized[x915] : &:r2764_1 -# 2764| r2764_3(glval) = FunctionAddress[String] : -# 2764| v2764_4(void) = Call[String] : func:r2764_3, this:r2764_1 -# 2764| mu2764_5(unknown) = ^CallSideEffect : ~m? -# 2764| mu2764_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2764_1 -# 2765| r2765_1(glval) = VariableAddress[x915] : -# 2765| r2765_2(glval) = FunctionAddress[~String] : -# 2765| v2765_3(void) = Call[~String] : func:r2765_2, this:r2765_1 -# 2765| mu2765_4(unknown) = ^CallSideEffect : ~m? -# 2765| v2765_5(void) = ^IndirectReadSideEffect[-1] : &:r2765_1, ~m? -# 2765| mu2765_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2765_1 -# 2765| r2765_7(bool) = Constant[0] : -# 2765| v2765_8(void) = ConditionalBranch : r2765_7 +# 35| Block 916 +# 35| r35_12811(glval) = VariableAddress[x915] : +# 35| mu35_12812(String) = Uninitialized[x915] : &:r35_12811 +# 35| r35_12813(glval) = FunctionAddress[String] : +# 35| v35_12814(void) = Call[String] : func:r35_12813, this:r35_12811 +# 35| mu35_12815(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12811 +# 35| r35_12817(glval) = VariableAddress[x915] : +# 35| r35_12818(glval) = FunctionAddress[~String] : +# 35| v35_12819(void) = Call[~String] : func:r35_12818, this:r35_12817 +# 35| mu35_12820(unknown) = ^CallSideEffect : ~m? +# 35| v35_12821(void) = ^IndirectReadSideEffect[-1] : &:r35_12817, ~m? +# 35| mu35_12822(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12817 +# 35| r35_12823(bool) = Constant[0] : +# 35| v35_12824(void) = ConditionalBranch : r35_12823 #-----| False -> Block 917 #-----| True (back edge) -> Block 916 -# 2767| Block 917 -# 2767| r2767_1(glval) = VariableAddress[x916] : -# 2767| mu2767_2(String) = Uninitialized[x916] : &:r2767_1 -# 2767| r2767_3(glval) = FunctionAddress[String] : -# 2767| v2767_4(void) = Call[String] : func:r2767_3, this:r2767_1 -# 2767| mu2767_5(unknown) = ^CallSideEffect : ~m? -# 2767| mu2767_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2767_1 -# 2768| r2768_1(glval) = VariableAddress[x916] : -# 2768| r2768_2(glval) = FunctionAddress[~String] : -# 2768| v2768_3(void) = Call[~String] : func:r2768_2, this:r2768_1 -# 2768| mu2768_4(unknown) = ^CallSideEffect : ~m? -# 2768| v2768_5(void) = ^IndirectReadSideEffect[-1] : &:r2768_1, ~m? -# 2768| mu2768_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2768_1 -# 2768| r2768_7(bool) = Constant[0] : -# 2768| v2768_8(void) = ConditionalBranch : r2768_7 +# 35| Block 917 +# 35| r35_12825(glval) = VariableAddress[x916] : +# 35| mu35_12826(String) = Uninitialized[x916] : &:r35_12825 +# 35| r35_12827(glval) = FunctionAddress[String] : +# 35| v35_12828(void) = Call[String] : func:r35_12827, this:r35_12825 +# 35| mu35_12829(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12825 +# 35| r35_12831(glval) = VariableAddress[x916] : +# 35| r35_12832(glval) = FunctionAddress[~String] : +# 35| v35_12833(void) = Call[~String] : func:r35_12832, this:r35_12831 +# 35| mu35_12834(unknown) = ^CallSideEffect : ~m? +# 35| v35_12835(void) = ^IndirectReadSideEffect[-1] : &:r35_12831, ~m? +# 35| mu35_12836(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12831 +# 35| r35_12837(bool) = Constant[0] : +# 35| v35_12838(void) = ConditionalBranch : r35_12837 #-----| False -> Block 918 #-----| True (back edge) -> Block 917 -# 2770| Block 918 -# 2770| r2770_1(glval) = VariableAddress[x917] : -# 2770| mu2770_2(String) = Uninitialized[x917] : &:r2770_1 -# 2770| r2770_3(glval) = FunctionAddress[String] : -# 2770| v2770_4(void) = Call[String] : func:r2770_3, this:r2770_1 -# 2770| mu2770_5(unknown) = ^CallSideEffect : ~m? -# 2770| mu2770_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2770_1 -# 2771| r2771_1(glval) = VariableAddress[x917] : -# 2771| r2771_2(glval) = FunctionAddress[~String] : -# 2771| v2771_3(void) = Call[~String] : func:r2771_2, this:r2771_1 -# 2771| mu2771_4(unknown) = ^CallSideEffect : ~m? -# 2771| v2771_5(void) = ^IndirectReadSideEffect[-1] : &:r2771_1, ~m? -# 2771| mu2771_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2771_1 -# 2771| r2771_7(bool) = Constant[0] : -# 2771| v2771_8(void) = ConditionalBranch : r2771_7 +# 35| Block 918 +# 35| r35_12839(glval) = VariableAddress[x917] : +# 35| mu35_12840(String) = Uninitialized[x917] : &:r35_12839 +# 35| r35_12841(glval) = FunctionAddress[String] : +# 35| v35_12842(void) = Call[String] : func:r35_12841, this:r35_12839 +# 35| mu35_12843(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12839 +# 35| r35_12845(glval) = VariableAddress[x917] : +# 35| r35_12846(glval) = FunctionAddress[~String] : +# 35| v35_12847(void) = Call[~String] : func:r35_12846, this:r35_12845 +# 35| mu35_12848(unknown) = ^CallSideEffect : ~m? +# 35| v35_12849(void) = ^IndirectReadSideEffect[-1] : &:r35_12845, ~m? +# 35| mu35_12850(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12845 +# 35| r35_12851(bool) = Constant[0] : +# 35| v35_12852(void) = ConditionalBranch : r35_12851 #-----| False -> Block 919 #-----| True (back edge) -> Block 918 -# 2773| Block 919 -# 2773| r2773_1(glval) = VariableAddress[x918] : -# 2773| mu2773_2(String) = Uninitialized[x918] : &:r2773_1 -# 2773| r2773_3(glval) = FunctionAddress[String] : -# 2773| v2773_4(void) = Call[String] : func:r2773_3, this:r2773_1 -# 2773| mu2773_5(unknown) = ^CallSideEffect : ~m? -# 2773| mu2773_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2773_1 -# 2774| r2774_1(glval) = VariableAddress[x918] : -# 2774| r2774_2(glval) = FunctionAddress[~String] : -# 2774| v2774_3(void) = Call[~String] : func:r2774_2, this:r2774_1 -# 2774| mu2774_4(unknown) = ^CallSideEffect : ~m? -# 2774| v2774_5(void) = ^IndirectReadSideEffect[-1] : &:r2774_1, ~m? -# 2774| mu2774_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2774_1 -# 2774| r2774_7(bool) = Constant[0] : -# 2774| v2774_8(void) = ConditionalBranch : r2774_7 +# 35| Block 919 +# 35| r35_12853(glval) = VariableAddress[x918] : +# 35| mu35_12854(String) = Uninitialized[x918] : &:r35_12853 +# 35| r35_12855(glval) = FunctionAddress[String] : +# 35| v35_12856(void) = Call[String] : func:r35_12855, this:r35_12853 +# 35| mu35_12857(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12853 +# 35| r35_12859(glval) = VariableAddress[x918] : +# 35| r35_12860(glval) = FunctionAddress[~String] : +# 35| v35_12861(void) = Call[~String] : func:r35_12860, this:r35_12859 +# 35| mu35_12862(unknown) = ^CallSideEffect : ~m? +# 35| v35_12863(void) = ^IndirectReadSideEffect[-1] : &:r35_12859, ~m? +# 35| mu35_12864(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12859 +# 35| r35_12865(bool) = Constant[0] : +# 35| v35_12866(void) = ConditionalBranch : r35_12865 #-----| False -> Block 920 #-----| True (back edge) -> Block 919 -# 2776| Block 920 -# 2776| r2776_1(glval) = VariableAddress[x919] : -# 2776| mu2776_2(String) = Uninitialized[x919] : &:r2776_1 -# 2776| r2776_3(glval) = FunctionAddress[String] : -# 2776| v2776_4(void) = Call[String] : func:r2776_3, this:r2776_1 -# 2776| mu2776_5(unknown) = ^CallSideEffect : ~m? -# 2776| mu2776_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2776_1 -# 2777| r2777_1(glval) = VariableAddress[x919] : -# 2777| r2777_2(glval) = FunctionAddress[~String] : -# 2777| v2777_3(void) = Call[~String] : func:r2777_2, this:r2777_1 -# 2777| mu2777_4(unknown) = ^CallSideEffect : ~m? -# 2777| v2777_5(void) = ^IndirectReadSideEffect[-1] : &:r2777_1, ~m? -# 2777| mu2777_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2777_1 -# 2777| r2777_7(bool) = Constant[0] : -# 2777| v2777_8(void) = ConditionalBranch : r2777_7 +# 35| Block 920 +# 35| r35_12867(glval) = VariableAddress[x919] : +# 35| mu35_12868(String) = Uninitialized[x919] : &:r35_12867 +# 35| r35_12869(glval) = FunctionAddress[String] : +# 35| v35_12870(void) = Call[String] : func:r35_12869, this:r35_12867 +# 35| mu35_12871(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12867 +# 35| r35_12873(glval) = VariableAddress[x919] : +# 35| r35_12874(glval) = FunctionAddress[~String] : +# 35| v35_12875(void) = Call[~String] : func:r35_12874, this:r35_12873 +# 35| mu35_12876(unknown) = ^CallSideEffect : ~m? +# 35| v35_12877(void) = ^IndirectReadSideEffect[-1] : &:r35_12873, ~m? +# 35| mu35_12878(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12873 +# 35| r35_12879(bool) = Constant[0] : +# 35| v35_12880(void) = ConditionalBranch : r35_12879 #-----| False -> Block 921 #-----| True (back edge) -> Block 920 -# 2779| Block 921 -# 2779| r2779_1(glval) = VariableAddress[x920] : -# 2779| mu2779_2(String) = Uninitialized[x920] : &:r2779_1 -# 2779| r2779_3(glval) = FunctionAddress[String] : -# 2779| v2779_4(void) = Call[String] : func:r2779_3, this:r2779_1 -# 2779| mu2779_5(unknown) = ^CallSideEffect : ~m? -# 2779| mu2779_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2779_1 -# 2780| r2780_1(glval) = VariableAddress[x920] : -# 2780| r2780_2(glval) = FunctionAddress[~String] : -# 2780| v2780_3(void) = Call[~String] : func:r2780_2, this:r2780_1 -# 2780| mu2780_4(unknown) = ^CallSideEffect : ~m? -# 2780| v2780_5(void) = ^IndirectReadSideEffect[-1] : &:r2780_1, ~m? -# 2780| mu2780_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2780_1 -# 2780| r2780_7(bool) = Constant[0] : -# 2780| v2780_8(void) = ConditionalBranch : r2780_7 +# 35| Block 921 +# 35| r35_12881(glval) = VariableAddress[x920] : +# 35| mu35_12882(String) = Uninitialized[x920] : &:r35_12881 +# 35| r35_12883(glval) = FunctionAddress[String] : +# 35| v35_12884(void) = Call[String] : func:r35_12883, this:r35_12881 +# 35| mu35_12885(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12881 +# 35| r35_12887(glval) = VariableAddress[x920] : +# 35| r35_12888(glval) = FunctionAddress[~String] : +# 35| v35_12889(void) = Call[~String] : func:r35_12888, this:r35_12887 +# 35| mu35_12890(unknown) = ^CallSideEffect : ~m? +# 35| v35_12891(void) = ^IndirectReadSideEffect[-1] : &:r35_12887, ~m? +# 35| mu35_12892(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12887 +# 35| r35_12893(bool) = Constant[0] : +# 35| v35_12894(void) = ConditionalBranch : r35_12893 #-----| False -> Block 922 #-----| True (back edge) -> Block 921 -# 2782| Block 922 -# 2782| r2782_1(glval) = VariableAddress[x921] : -# 2782| mu2782_2(String) = Uninitialized[x921] : &:r2782_1 -# 2782| r2782_3(glval) = FunctionAddress[String] : -# 2782| v2782_4(void) = Call[String] : func:r2782_3, this:r2782_1 -# 2782| mu2782_5(unknown) = ^CallSideEffect : ~m? -# 2782| mu2782_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2782_1 -# 2783| r2783_1(glval) = VariableAddress[x921] : -# 2783| r2783_2(glval) = FunctionAddress[~String] : -# 2783| v2783_3(void) = Call[~String] : func:r2783_2, this:r2783_1 -# 2783| mu2783_4(unknown) = ^CallSideEffect : ~m? -# 2783| v2783_5(void) = ^IndirectReadSideEffect[-1] : &:r2783_1, ~m? -# 2783| mu2783_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2783_1 -# 2783| r2783_7(bool) = Constant[0] : -# 2783| v2783_8(void) = ConditionalBranch : r2783_7 +# 35| Block 922 +# 35| r35_12895(glval) = VariableAddress[x921] : +# 35| mu35_12896(String) = Uninitialized[x921] : &:r35_12895 +# 35| r35_12897(glval) = FunctionAddress[String] : +# 35| v35_12898(void) = Call[String] : func:r35_12897, this:r35_12895 +# 35| mu35_12899(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12895 +# 35| r35_12901(glval) = VariableAddress[x921] : +# 35| r35_12902(glval) = FunctionAddress[~String] : +# 35| v35_12903(void) = Call[~String] : func:r35_12902, this:r35_12901 +# 35| mu35_12904(unknown) = ^CallSideEffect : ~m? +# 35| v35_12905(void) = ^IndirectReadSideEffect[-1] : &:r35_12901, ~m? +# 35| mu35_12906(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12901 +# 35| r35_12907(bool) = Constant[0] : +# 35| v35_12908(void) = ConditionalBranch : r35_12907 #-----| False -> Block 923 #-----| True (back edge) -> Block 922 -# 2785| Block 923 -# 2785| r2785_1(glval) = VariableAddress[x922] : -# 2785| mu2785_2(String) = Uninitialized[x922] : &:r2785_1 -# 2785| r2785_3(glval) = FunctionAddress[String] : -# 2785| v2785_4(void) = Call[String] : func:r2785_3, this:r2785_1 -# 2785| mu2785_5(unknown) = ^CallSideEffect : ~m? -# 2785| mu2785_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2785_1 -# 2786| r2786_1(glval) = VariableAddress[x922] : -# 2786| r2786_2(glval) = FunctionAddress[~String] : -# 2786| v2786_3(void) = Call[~String] : func:r2786_2, this:r2786_1 -# 2786| mu2786_4(unknown) = ^CallSideEffect : ~m? -# 2786| v2786_5(void) = ^IndirectReadSideEffect[-1] : &:r2786_1, ~m? -# 2786| mu2786_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2786_1 -# 2786| r2786_7(bool) = Constant[0] : -# 2786| v2786_8(void) = ConditionalBranch : r2786_7 +# 35| Block 923 +# 35| r35_12909(glval) = VariableAddress[x922] : +# 35| mu35_12910(String) = Uninitialized[x922] : &:r35_12909 +# 35| r35_12911(glval) = FunctionAddress[String] : +# 35| v35_12912(void) = Call[String] : func:r35_12911, this:r35_12909 +# 35| mu35_12913(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12909 +# 35| r35_12915(glval) = VariableAddress[x922] : +# 35| r35_12916(glval) = FunctionAddress[~String] : +# 35| v35_12917(void) = Call[~String] : func:r35_12916, this:r35_12915 +# 35| mu35_12918(unknown) = ^CallSideEffect : ~m? +# 35| v35_12919(void) = ^IndirectReadSideEffect[-1] : &:r35_12915, ~m? +# 35| mu35_12920(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12915 +# 35| r35_12921(bool) = Constant[0] : +# 35| v35_12922(void) = ConditionalBranch : r35_12921 #-----| False -> Block 924 #-----| True (back edge) -> Block 923 -# 2788| Block 924 -# 2788| r2788_1(glval) = VariableAddress[x923] : -# 2788| mu2788_2(String) = Uninitialized[x923] : &:r2788_1 -# 2788| r2788_3(glval) = FunctionAddress[String] : -# 2788| v2788_4(void) = Call[String] : func:r2788_3, this:r2788_1 -# 2788| mu2788_5(unknown) = ^CallSideEffect : ~m? -# 2788| mu2788_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2788_1 -# 2789| r2789_1(glval) = VariableAddress[x923] : -# 2789| r2789_2(glval) = FunctionAddress[~String] : -# 2789| v2789_3(void) = Call[~String] : func:r2789_2, this:r2789_1 -# 2789| mu2789_4(unknown) = ^CallSideEffect : ~m? -# 2789| v2789_5(void) = ^IndirectReadSideEffect[-1] : &:r2789_1, ~m? -# 2789| mu2789_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2789_1 -# 2789| r2789_7(bool) = Constant[0] : -# 2789| v2789_8(void) = ConditionalBranch : r2789_7 +# 35| Block 924 +# 35| r35_12923(glval) = VariableAddress[x923] : +# 35| mu35_12924(String) = Uninitialized[x923] : &:r35_12923 +# 35| r35_12925(glval) = FunctionAddress[String] : +# 35| v35_12926(void) = Call[String] : func:r35_12925, this:r35_12923 +# 35| mu35_12927(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12923 +# 35| r35_12929(glval) = VariableAddress[x923] : +# 35| r35_12930(glval) = FunctionAddress[~String] : +# 35| v35_12931(void) = Call[~String] : func:r35_12930, this:r35_12929 +# 35| mu35_12932(unknown) = ^CallSideEffect : ~m? +# 35| v35_12933(void) = ^IndirectReadSideEffect[-1] : &:r35_12929, ~m? +# 35| mu35_12934(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12929 +# 35| r35_12935(bool) = Constant[0] : +# 35| v35_12936(void) = ConditionalBranch : r35_12935 #-----| False -> Block 925 #-----| True (back edge) -> Block 924 -# 2791| Block 925 -# 2791| r2791_1(glval) = VariableAddress[x924] : -# 2791| mu2791_2(String) = Uninitialized[x924] : &:r2791_1 -# 2791| r2791_3(glval) = FunctionAddress[String] : -# 2791| v2791_4(void) = Call[String] : func:r2791_3, this:r2791_1 -# 2791| mu2791_5(unknown) = ^CallSideEffect : ~m? -# 2791| mu2791_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2791_1 -# 2792| r2792_1(glval) = VariableAddress[x924] : -# 2792| r2792_2(glval) = FunctionAddress[~String] : -# 2792| v2792_3(void) = Call[~String] : func:r2792_2, this:r2792_1 -# 2792| mu2792_4(unknown) = ^CallSideEffect : ~m? -# 2792| v2792_5(void) = ^IndirectReadSideEffect[-1] : &:r2792_1, ~m? -# 2792| mu2792_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2792_1 -# 2792| r2792_7(bool) = Constant[0] : -# 2792| v2792_8(void) = ConditionalBranch : r2792_7 +# 35| Block 925 +# 35| r35_12937(glval) = VariableAddress[x924] : +# 35| mu35_12938(String) = Uninitialized[x924] : &:r35_12937 +# 35| r35_12939(glval) = FunctionAddress[String] : +# 35| v35_12940(void) = Call[String] : func:r35_12939, this:r35_12937 +# 35| mu35_12941(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12937 +# 35| r35_12943(glval) = VariableAddress[x924] : +# 35| r35_12944(glval) = FunctionAddress[~String] : +# 35| v35_12945(void) = Call[~String] : func:r35_12944, this:r35_12943 +# 35| mu35_12946(unknown) = ^CallSideEffect : ~m? +# 35| v35_12947(void) = ^IndirectReadSideEffect[-1] : &:r35_12943, ~m? +# 35| mu35_12948(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12943 +# 35| r35_12949(bool) = Constant[0] : +# 35| v35_12950(void) = ConditionalBranch : r35_12949 #-----| False -> Block 926 #-----| True (back edge) -> Block 925 -# 2794| Block 926 -# 2794| r2794_1(glval) = VariableAddress[x925] : -# 2794| mu2794_2(String) = Uninitialized[x925] : &:r2794_1 -# 2794| r2794_3(glval) = FunctionAddress[String] : -# 2794| v2794_4(void) = Call[String] : func:r2794_3, this:r2794_1 -# 2794| mu2794_5(unknown) = ^CallSideEffect : ~m? -# 2794| mu2794_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2794_1 -# 2795| r2795_1(glval) = VariableAddress[x925] : -# 2795| r2795_2(glval) = FunctionAddress[~String] : -# 2795| v2795_3(void) = Call[~String] : func:r2795_2, this:r2795_1 -# 2795| mu2795_4(unknown) = ^CallSideEffect : ~m? -# 2795| v2795_5(void) = ^IndirectReadSideEffect[-1] : &:r2795_1, ~m? -# 2795| mu2795_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2795_1 -# 2795| r2795_7(bool) = Constant[0] : -# 2795| v2795_8(void) = ConditionalBranch : r2795_7 +# 35| Block 926 +# 35| r35_12951(glval) = VariableAddress[x925] : +# 35| mu35_12952(String) = Uninitialized[x925] : &:r35_12951 +# 35| r35_12953(glval) = FunctionAddress[String] : +# 35| v35_12954(void) = Call[String] : func:r35_12953, this:r35_12951 +# 35| mu35_12955(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12951 +# 35| r35_12957(glval) = VariableAddress[x925] : +# 35| r35_12958(glval) = FunctionAddress[~String] : +# 35| v35_12959(void) = Call[~String] : func:r35_12958, this:r35_12957 +# 35| mu35_12960(unknown) = ^CallSideEffect : ~m? +# 35| v35_12961(void) = ^IndirectReadSideEffect[-1] : &:r35_12957, ~m? +# 35| mu35_12962(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12957 +# 35| r35_12963(bool) = Constant[0] : +# 35| v35_12964(void) = ConditionalBranch : r35_12963 #-----| False -> Block 927 #-----| True (back edge) -> Block 926 -# 2797| Block 927 -# 2797| r2797_1(glval) = VariableAddress[x926] : -# 2797| mu2797_2(String) = Uninitialized[x926] : &:r2797_1 -# 2797| r2797_3(glval) = FunctionAddress[String] : -# 2797| v2797_4(void) = Call[String] : func:r2797_3, this:r2797_1 -# 2797| mu2797_5(unknown) = ^CallSideEffect : ~m? -# 2797| mu2797_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2797_1 -# 2798| r2798_1(glval) = VariableAddress[x926] : -# 2798| r2798_2(glval) = FunctionAddress[~String] : -# 2798| v2798_3(void) = Call[~String] : func:r2798_2, this:r2798_1 -# 2798| mu2798_4(unknown) = ^CallSideEffect : ~m? -# 2798| v2798_5(void) = ^IndirectReadSideEffect[-1] : &:r2798_1, ~m? -# 2798| mu2798_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2798_1 -# 2798| r2798_7(bool) = Constant[0] : -# 2798| v2798_8(void) = ConditionalBranch : r2798_7 +# 35| Block 927 +# 35| r35_12965(glval) = VariableAddress[x926] : +# 35| mu35_12966(String) = Uninitialized[x926] : &:r35_12965 +# 35| r35_12967(glval) = FunctionAddress[String] : +# 35| v35_12968(void) = Call[String] : func:r35_12967, this:r35_12965 +# 35| mu35_12969(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12965 +# 35| r35_12971(glval) = VariableAddress[x926] : +# 35| r35_12972(glval) = FunctionAddress[~String] : +# 35| v35_12973(void) = Call[~String] : func:r35_12972, this:r35_12971 +# 35| mu35_12974(unknown) = ^CallSideEffect : ~m? +# 35| v35_12975(void) = ^IndirectReadSideEffect[-1] : &:r35_12971, ~m? +# 35| mu35_12976(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12971 +# 35| r35_12977(bool) = Constant[0] : +# 35| v35_12978(void) = ConditionalBranch : r35_12977 #-----| False -> Block 928 #-----| True (back edge) -> Block 927 -# 2800| Block 928 -# 2800| r2800_1(glval) = VariableAddress[x927] : -# 2800| mu2800_2(String) = Uninitialized[x927] : &:r2800_1 -# 2800| r2800_3(glval) = FunctionAddress[String] : -# 2800| v2800_4(void) = Call[String] : func:r2800_3, this:r2800_1 -# 2800| mu2800_5(unknown) = ^CallSideEffect : ~m? -# 2800| mu2800_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2800_1 -# 2801| r2801_1(glval) = VariableAddress[x927] : -# 2801| r2801_2(glval) = FunctionAddress[~String] : -# 2801| v2801_3(void) = Call[~String] : func:r2801_2, this:r2801_1 -# 2801| mu2801_4(unknown) = ^CallSideEffect : ~m? -# 2801| v2801_5(void) = ^IndirectReadSideEffect[-1] : &:r2801_1, ~m? -# 2801| mu2801_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2801_1 -# 2801| r2801_7(bool) = Constant[0] : -# 2801| v2801_8(void) = ConditionalBranch : r2801_7 +# 35| Block 928 +# 35| r35_12979(glval) = VariableAddress[x927] : +# 35| mu35_12980(String) = Uninitialized[x927] : &:r35_12979 +# 35| r35_12981(glval) = FunctionAddress[String] : +# 35| v35_12982(void) = Call[String] : func:r35_12981, this:r35_12979 +# 35| mu35_12983(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12979 +# 35| r35_12985(glval) = VariableAddress[x927] : +# 35| r35_12986(glval) = FunctionAddress[~String] : +# 35| v35_12987(void) = Call[~String] : func:r35_12986, this:r35_12985 +# 35| mu35_12988(unknown) = ^CallSideEffect : ~m? +# 35| v35_12989(void) = ^IndirectReadSideEffect[-1] : &:r35_12985, ~m? +# 35| mu35_12990(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12985 +# 35| r35_12991(bool) = Constant[0] : +# 35| v35_12992(void) = ConditionalBranch : r35_12991 #-----| False -> Block 929 #-----| True (back edge) -> Block 928 -# 2803| Block 929 -# 2803| r2803_1(glval) = VariableAddress[x928] : -# 2803| mu2803_2(String) = Uninitialized[x928] : &:r2803_1 -# 2803| r2803_3(glval) = FunctionAddress[String] : -# 2803| v2803_4(void) = Call[String] : func:r2803_3, this:r2803_1 -# 2803| mu2803_5(unknown) = ^CallSideEffect : ~m? -# 2803| mu2803_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2803_1 -# 2804| r2804_1(glval) = VariableAddress[x928] : -# 2804| r2804_2(glval) = FunctionAddress[~String] : -# 2804| v2804_3(void) = Call[~String] : func:r2804_2, this:r2804_1 -# 2804| mu2804_4(unknown) = ^CallSideEffect : ~m? -# 2804| v2804_5(void) = ^IndirectReadSideEffect[-1] : &:r2804_1, ~m? -# 2804| mu2804_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2804_1 -# 2804| r2804_7(bool) = Constant[0] : -# 2804| v2804_8(void) = ConditionalBranch : r2804_7 +# 35| Block 929 +# 35| r35_12993(glval) = VariableAddress[x928] : +# 35| mu35_12994(String) = Uninitialized[x928] : &:r35_12993 +# 35| r35_12995(glval) = FunctionAddress[String] : +# 35| v35_12996(void) = Call[String] : func:r35_12995, this:r35_12993 +# 35| mu35_12997(unknown) = ^CallSideEffect : ~m? +# 35| mu35_12998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12993 +# 35| r35_12999(glval) = VariableAddress[x928] : +# 35| r35_13000(glval) = FunctionAddress[~String] : +# 35| v35_13001(void) = Call[~String] : func:r35_13000, this:r35_12999 +# 35| mu35_13002(unknown) = ^CallSideEffect : ~m? +# 35| v35_13003(void) = ^IndirectReadSideEffect[-1] : &:r35_12999, ~m? +# 35| mu35_13004(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_12999 +# 35| r35_13005(bool) = Constant[0] : +# 35| v35_13006(void) = ConditionalBranch : r35_13005 #-----| False -> Block 930 #-----| True (back edge) -> Block 929 -# 2806| Block 930 -# 2806| r2806_1(glval) = VariableAddress[x929] : -# 2806| mu2806_2(String) = Uninitialized[x929] : &:r2806_1 -# 2806| r2806_3(glval) = FunctionAddress[String] : -# 2806| v2806_4(void) = Call[String] : func:r2806_3, this:r2806_1 -# 2806| mu2806_5(unknown) = ^CallSideEffect : ~m? -# 2806| mu2806_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2806_1 -# 2807| r2807_1(glval) = VariableAddress[x929] : -# 2807| r2807_2(glval) = FunctionAddress[~String] : -# 2807| v2807_3(void) = Call[~String] : func:r2807_2, this:r2807_1 -# 2807| mu2807_4(unknown) = ^CallSideEffect : ~m? -# 2807| v2807_5(void) = ^IndirectReadSideEffect[-1] : &:r2807_1, ~m? -# 2807| mu2807_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2807_1 -# 2807| r2807_7(bool) = Constant[0] : -# 2807| v2807_8(void) = ConditionalBranch : r2807_7 +# 35| Block 930 +# 35| r35_13007(glval) = VariableAddress[x929] : +# 35| mu35_13008(String) = Uninitialized[x929] : &:r35_13007 +# 35| r35_13009(glval) = FunctionAddress[String] : +# 35| v35_13010(void) = Call[String] : func:r35_13009, this:r35_13007 +# 35| mu35_13011(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13007 +# 35| r35_13013(glval) = VariableAddress[x929] : +# 35| r35_13014(glval) = FunctionAddress[~String] : +# 35| v35_13015(void) = Call[~String] : func:r35_13014, this:r35_13013 +# 35| mu35_13016(unknown) = ^CallSideEffect : ~m? +# 35| v35_13017(void) = ^IndirectReadSideEffect[-1] : &:r35_13013, ~m? +# 35| mu35_13018(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13013 +# 35| r35_13019(bool) = Constant[0] : +# 35| v35_13020(void) = ConditionalBranch : r35_13019 #-----| False -> Block 931 #-----| True (back edge) -> Block 930 -# 2809| Block 931 -# 2809| r2809_1(glval) = VariableAddress[x930] : -# 2809| mu2809_2(String) = Uninitialized[x930] : &:r2809_1 -# 2809| r2809_3(glval) = FunctionAddress[String] : -# 2809| v2809_4(void) = Call[String] : func:r2809_3, this:r2809_1 -# 2809| mu2809_5(unknown) = ^CallSideEffect : ~m? -# 2809| mu2809_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2809_1 -# 2810| r2810_1(glval) = VariableAddress[x930] : -# 2810| r2810_2(glval) = FunctionAddress[~String] : -# 2810| v2810_3(void) = Call[~String] : func:r2810_2, this:r2810_1 -# 2810| mu2810_4(unknown) = ^CallSideEffect : ~m? -# 2810| v2810_5(void) = ^IndirectReadSideEffect[-1] : &:r2810_1, ~m? -# 2810| mu2810_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2810_1 -# 2810| r2810_7(bool) = Constant[0] : -# 2810| v2810_8(void) = ConditionalBranch : r2810_7 +# 35| Block 931 +# 35| r35_13021(glval) = VariableAddress[x930] : +# 35| mu35_13022(String) = Uninitialized[x930] : &:r35_13021 +# 35| r35_13023(glval) = FunctionAddress[String] : +# 35| v35_13024(void) = Call[String] : func:r35_13023, this:r35_13021 +# 35| mu35_13025(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13021 +# 35| r35_13027(glval) = VariableAddress[x930] : +# 35| r35_13028(glval) = FunctionAddress[~String] : +# 35| v35_13029(void) = Call[~String] : func:r35_13028, this:r35_13027 +# 35| mu35_13030(unknown) = ^CallSideEffect : ~m? +# 35| v35_13031(void) = ^IndirectReadSideEffect[-1] : &:r35_13027, ~m? +# 35| mu35_13032(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13027 +# 35| r35_13033(bool) = Constant[0] : +# 35| v35_13034(void) = ConditionalBranch : r35_13033 #-----| False -> Block 932 #-----| True (back edge) -> Block 931 -# 2812| Block 932 -# 2812| r2812_1(glval) = VariableAddress[x931] : -# 2812| mu2812_2(String) = Uninitialized[x931] : &:r2812_1 -# 2812| r2812_3(glval) = FunctionAddress[String] : -# 2812| v2812_4(void) = Call[String] : func:r2812_3, this:r2812_1 -# 2812| mu2812_5(unknown) = ^CallSideEffect : ~m? -# 2812| mu2812_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2812_1 -# 2813| r2813_1(glval) = VariableAddress[x931] : -# 2813| r2813_2(glval) = FunctionAddress[~String] : -# 2813| v2813_3(void) = Call[~String] : func:r2813_2, this:r2813_1 -# 2813| mu2813_4(unknown) = ^CallSideEffect : ~m? -# 2813| v2813_5(void) = ^IndirectReadSideEffect[-1] : &:r2813_1, ~m? -# 2813| mu2813_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2813_1 -# 2813| r2813_7(bool) = Constant[0] : -# 2813| v2813_8(void) = ConditionalBranch : r2813_7 +# 35| Block 932 +# 35| r35_13035(glval) = VariableAddress[x931] : +# 35| mu35_13036(String) = Uninitialized[x931] : &:r35_13035 +# 35| r35_13037(glval) = FunctionAddress[String] : +# 35| v35_13038(void) = Call[String] : func:r35_13037, this:r35_13035 +# 35| mu35_13039(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13035 +# 35| r35_13041(glval) = VariableAddress[x931] : +# 35| r35_13042(glval) = FunctionAddress[~String] : +# 35| v35_13043(void) = Call[~String] : func:r35_13042, this:r35_13041 +# 35| mu35_13044(unknown) = ^CallSideEffect : ~m? +# 35| v35_13045(void) = ^IndirectReadSideEffect[-1] : &:r35_13041, ~m? +# 35| mu35_13046(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13041 +# 35| r35_13047(bool) = Constant[0] : +# 35| v35_13048(void) = ConditionalBranch : r35_13047 #-----| False -> Block 933 #-----| True (back edge) -> Block 932 -# 2815| Block 933 -# 2815| r2815_1(glval) = VariableAddress[x932] : -# 2815| mu2815_2(String) = Uninitialized[x932] : &:r2815_1 -# 2815| r2815_3(glval) = FunctionAddress[String] : -# 2815| v2815_4(void) = Call[String] : func:r2815_3, this:r2815_1 -# 2815| mu2815_5(unknown) = ^CallSideEffect : ~m? -# 2815| mu2815_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2815_1 -# 2816| r2816_1(glval) = VariableAddress[x932] : -# 2816| r2816_2(glval) = FunctionAddress[~String] : -# 2816| v2816_3(void) = Call[~String] : func:r2816_2, this:r2816_1 -# 2816| mu2816_4(unknown) = ^CallSideEffect : ~m? -# 2816| v2816_5(void) = ^IndirectReadSideEffect[-1] : &:r2816_1, ~m? -# 2816| mu2816_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2816_1 -# 2816| r2816_7(bool) = Constant[0] : -# 2816| v2816_8(void) = ConditionalBranch : r2816_7 +# 35| Block 933 +# 35| r35_13049(glval) = VariableAddress[x932] : +# 35| mu35_13050(String) = Uninitialized[x932] : &:r35_13049 +# 35| r35_13051(glval) = FunctionAddress[String] : +# 35| v35_13052(void) = Call[String] : func:r35_13051, this:r35_13049 +# 35| mu35_13053(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13049 +# 35| r35_13055(glval) = VariableAddress[x932] : +# 35| r35_13056(glval) = FunctionAddress[~String] : +# 35| v35_13057(void) = Call[~String] : func:r35_13056, this:r35_13055 +# 35| mu35_13058(unknown) = ^CallSideEffect : ~m? +# 35| v35_13059(void) = ^IndirectReadSideEffect[-1] : &:r35_13055, ~m? +# 35| mu35_13060(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13055 +# 35| r35_13061(bool) = Constant[0] : +# 35| v35_13062(void) = ConditionalBranch : r35_13061 #-----| False -> Block 934 #-----| True (back edge) -> Block 933 -# 2818| Block 934 -# 2818| r2818_1(glval) = VariableAddress[x933] : -# 2818| mu2818_2(String) = Uninitialized[x933] : &:r2818_1 -# 2818| r2818_3(glval) = FunctionAddress[String] : -# 2818| v2818_4(void) = Call[String] : func:r2818_3, this:r2818_1 -# 2818| mu2818_5(unknown) = ^CallSideEffect : ~m? -# 2818| mu2818_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2818_1 -# 2819| r2819_1(glval) = VariableAddress[x933] : -# 2819| r2819_2(glval) = FunctionAddress[~String] : -# 2819| v2819_3(void) = Call[~String] : func:r2819_2, this:r2819_1 -# 2819| mu2819_4(unknown) = ^CallSideEffect : ~m? -# 2819| v2819_5(void) = ^IndirectReadSideEffect[-1] : &:r2819_1, ~m? -# 2819| mu2819_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2819_1 -# 2819| r2819_7(bool) = Constant[0] : -# 2819| v2819_8(void) = ConditionalBranch : r2819_7 +# 35| Block 934 +# 35| r35_13063(glval) = VariableAddress[x933] : +# 35| mu35_13064(String) = Uninitialized[x933] : &:r35_13063 +# 35| r35_13065(glval) = FunctionAddress[String] : +# 35| v35_13066(void) = Call[String] : func:r35_13065, this:r35_13063 +# 35| mu35_13067(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13063 +# 35| r35_13069(glval) = VariableAddress[x933] : +# 35| r35_13070(glval) = FunctionAddress[~String] : +# 35| v35_13071(void) = Call[~String] : func:r35_13070, this:r35_13069 +# 35| mu35_13072(unknown) = ^CallSideEffect : ~m? +# 35| v35_13073(void) = ^IndirectReadSideEffect[-1] : &:r35_13069, ~m? +# 35| mu35_13074(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13069 +# 35| r35_13075(bool) = Constant[0] : +# 35| v35_13076(void) = ConditionalBranch : r35_13075 #-----| False -> Block 935 #-----| True (back edge) -> Block 934 -# 2821| Block 935 -# 2821| r2821_1(glval) = VariableAddress[x934] : -# 2821| mu2821_2(String) = Uninitialized[x934] : &:r2821_1 -# 2821| r2821_3(glval) = FunctionAddress[String] : -# 2821| v2821_4(void) = Call[String] : func:r2821_3, this:r2821_1 -# 2821| mu2821_5(unknown) = ^CallSideEffect : ~m? -# 2821| mu2821_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2821_1 -# 2822| r2822_1(glval) = VariableAddress[x934] : -# 2822| r2822_2(glval) = FunctionAddress[~String] : -# 2822| v2822_3(void) = Call[~String] : func:r2822_2, this:r2822_1 -# 2822| mu2822_4(unknown) = ^CallSideEffect : ~m? -# 2822| v2822_5(void) = ^IndirectReadSideEffect[-1] : &:r2822_1, ~m? -# 2822| mu2822_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2822_1 -# 2822| r2822_7(bool) = Constant[0] : -# 2822| v2822_8(void) = ConditionalBranch : r2822_7 +# 35| Block 935 +# 35| r35_13077(glval) = VariableAddress[x934] : +# 35| mu35_13078(String) = Uninitialized[x934] : &:r35_13077 +# 35| r35_13079(glval) = FunctionAddress[String] : +# 35| v35_13080(void) = Call[String] : func:r35_13079, this:r35_13077 +# 35| mu35_13081(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13077 +# 35| r35_13083(glval) = VariableAddress[x934] : +# 35| r35_13084(glval) = FunctionAddress[~String] : +# 35| v35_13085(void) = Call[~String] : func:r35_13084, this:r35_13083 +# 35| mu35_13086(unknown) = ^CallSideEffect : ~m? +# 35| v35_13087(void) = ^IndirectReadSideEffect[-1] : &:r35_13083, ~m? +# 35| mu35_13088(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13083 +# 35| r35_13089(bool) = Constant[0] : +# 35| v35_13090(void) = ConditionalBranch : r35_13089 #-----| False -> Block 936 #-----| True (back edge) -> Block 935 -# 2824| Block 936 -# 2824| r2824_1(glval) = VariableAddress[x935] : -# 2824| mu2824_2(String) = Uninitialized[x935] : &:r2824_1 -# 2824| r2824_3(glval) = FunctionAddress[String] : -# 2824| v2824_4(void) = Call[String] : func:r2824_3, this:r2824_1 -# 2824| mu2824_5(unknown) = ^CallSideEffect : ~m? -# 2824| mu2824_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2824_1 -# 2825| r2825_1(glval) = VariableAddress[x935] : -# 2825| r2825_2(glval) = FunctionAddress[~String] : -# 2825| v2825_3(void) = Call[~String] : func:r2825_2, this:r2825_1 -# 2825| mu2825_4(unknown) = ^CallSideEffect : ~m? -# 2825| v2825_5(void) = ^IndirectReadSideEffect[-1] : &:r2825_1, ~m? -# 2825| mu2825_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2825_1 -# 2825| r2825_7(bool) = Constant[0] : -# 2825| v2825_8(void) = ConditionalBranch : r2825_7 +# 35| Block 936 +# 35| r35_13091(glval) = VariableAddress[x935] : +# 35| mu35_13092(String) = Uninitialized[x935] : &:r35_13091 +# 35| r35_13093(glval) = FunctionAddress[String] : +# 35| v35_13094(void) = Call[String] : func:r35_13093, this:r35_13091 +# 35| mu35_13095(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13091 +# 35| r35_13097(glval) = VariableAddress[x935] : +# 35| r35_13098(glval) = FunctionAddress[~String] : +# 35| v35_13099(void) = Call[~String] : func:r35_13098, this:r35_13097 +# 35| mu35_13100(unknown) = ^CallSideEffect : ~m? +# 35| v35_13101(void) = ^IndirectReadSideEffect[-1] : &:r35_13097, ~m? +# 35| mu35_13102(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13097 +# 35| r35_13103(bool) = Constant[0] : +# 35| v35_13104(void) = ConditionalBranch : r35_13103 #-----| False -> Block 937 #-----| True (back edge) -> Block 936 -# 2827| Block 937 -# 2827| r2827_1(glval) = VariableAddress[x936] : -# 2827| mu2827_2(String) = Uninitialized[x936] : &:r2827_1 -# 2827| r2827_3(glval) = FunctionAddress[String] : -# 2827| v2827_4(void) = Call[String] : func:r2827_3, this:r2827_1 -# 2827| mu2827_5(unknown) = ^CallSideEffect : ~m? -# 2827| mu2827_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2827_1 -# 2828| r2828_1(glval) = VariableAddress[x936] : -# 2828| r2828_2(glval) = FunctionAddress[~String] : -# 2828| v2828_3(void) = Call[~String] : func:r2828_2, this:r2828_1 -# 2828| mu2828_4(unknown) = ^CallSideEffect : ~m? -# 2828| v2828_5(void) = ^IndirectReadSideEffect[-1] : &:r2828_1, ~m? -# 2828| mu2828_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2828_1 -# 2828| r2828_7(bool) = Constant[0] : -# 2828| v2828_8(void) = ConditionalBranch : r2828_7 +# 35| Block 937 +# 35| r35_13105(glval) = VariableAddress[x936] : +# 35| mu35_13106(String) = Uninitialized[x936] : &:r35_13105 +# 35| r35_13107(glval) = FunctionAddress[String] : +# 35| v35_13108(void) = Call[String] : func:r35_13107, this:r35_13105 +# 35| mu35_13109(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13105 +# 35| r35_13111(glval) = VariableAddress[x936] : +# 35| r35_13112(glval) = FunctionAddress[~String] : +# 35| v35_13113(void) = Call[~String] : func:r35_13112, this:r35_13111 +# 35| mu35_13114(unknown) = ^CallSideEffect : ~m? +# 35| v35_13115(void) = ^IndirectReadSideEffect[-1] : &:r35_13111, ~m? +# 35| mu35_13116(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13111 +# 35| r35_13117(bool) = Constant[0] : +# 35| v35_13118(void) = ConditionalBranch : r35_13117 #-----| False -> Block 938 #-----| True (back edge) -> Block 937 -# 2830| Block 938 -# 2830| r2830_1(glval) = VariableAddress[x937] : -# 2830| mu2830_2(String) = Uninitialized[x937] : &:r2830_1 -# 2830| r2830_3(glval) = FunctionAddress[String] : -# 2830| v2830_4(void) = Call[String] : func:r2830_3, this:r2830_1 -# 2830| mu2830_5(unknown) = ^CallSideEffect : ~m? -# 2830| mu2830_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2830_1 -# 2831| r2831_1(glval) = VariableAddress[x937] : -# 2831| r2831_2(glval) = FunctionAddress[~String] : -# 2831| v2831_3(void) = Call[~String] : func:r2831_2, this:r2831_1 -# 2831| mu2831_4(unknown) = ^CallSideEffect : ~m? -# 2831| v2831_5(void) = ^IndirectReadSideEffect[-1] : &:r2831_1, ~m? -# 2831| mu2831_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2831_1 -# 2831| r2831_7(bool) = Constant[0] : -# 2831| v2831_8(void) = ConditionalBranch : r2831_7 +# 35| Block 938 +# 35| r35_13119(glval) = VariableAddress[x937] : +# 35| mu35_13120(String) = Uninitialized[x937] : &:r35_13119 +# 35| r35_13121(glval) = FunctionAddress[String] : +# 35| v35_13122(void) = Call[String] : func:r35_13121, this:r35_13119 +# 35| mu35_13123(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13119 +# 35| r35_13125(glval) = VariableAddress[x937] : +# 35| r35_13126(glval) = FunctionAddress[~String] : +# 35| v35_13127(void) = Call[~String] : func:r35_13126, this:r35_13125 +# 35| mu35_13128(unknown) = ^CallSideEffect : ~m? +# 35| v35_13129(void) = ^IndirectReadSideEffect[-1] : &:r35_13125, ~m? +# 35| mu35_13130(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13125 +# 35| r35_13131(bool) = Constant[0] : +# 35| v35_13132(void) = ConditionalBranch : r35_13131 #-----| False -> Block 939 #-----| True (back edge) -> Block 938 -# 2833| Block 939 -# 2833| r2833_1(glval) = VariableAddress[x938] : -# 2833| mu2833_2(String) = Uninitialized[x938] : &:r2833_1 -# 2833| r2833_3(glval) = FunctionAddress[String] : -# 2833| v2833_4(void) = Call[String] : func:r2833_3, this:r2833_1 -# 2833| mu2833_5(unknown) = ^CallSideEffect : ~m? -# 2833| mu2833_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2833_1 -# 2834| r2834_1(glval) = VariableAddress[x938] : -# 2834| r2834_2(glval) = FunctionAddress[~String] : -# 2834| v2834_3(void) = Call[~String] : func:r2834_2, this:r2834_1 -# 2834| mu2834_4(unknown) = ^CallSideEffect : ~m? -# 2834| v2834_5(void) = ^IndirectReadSideEffect[-1] : &:r2834_1, ~m? -# 2834| mu2834_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2834_1 -# 2834| r2834_7(bool) = Constant[0] : -# 2834| v2834_8(void) = ConditionalBranch : r2834_7 +# 35| Block 939 +# 35| r35_13133(glval) = VariableAddress[x938] : +# 35| mu35_13134(String) = Uninitialized[x938] : &:r35_13133 +# 35| r35_13135(glval) = FunctionAddress[String] : +# 35| v35_13136(void) = Call[String] : func:r35_13135, this:r35_13133 +# 35| mu35_13137(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13133 +# 35| r35_13139(glval) = VariableAddress[x938] : +# 35| r35_13140(glval) = FunctionAddress[~String] : +# 35| v35_13141(void) = Call[~String] : func:r35_13140, this:r35_13139 +# 35| mu35_13142(unknown) = ^CallSideEffect : ~m? +# 35| v35_13143(void) = ^IndirectReadSideEffect[-1] : &:r35_13139, ~m? +# 35| mu35_13144(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13139 +# 35| r35_13145(bool) = Constant[0] : +# 35| v35_13146(void) = ConditionalBranch : r35_13145 #-----| False -> Block 940 #-----| True (back edge) -> Block 939 -# 2836| Block 940 -# 2836| r2836_1(glval) = VariableAddress[x939] : -# 2836| mu2836_2(String) = Uninitialized[x939] : &:r2836_1 -# 2836| r2836_3(glval) = FunctionAddress[String] : -# 2836| v2836_4(void) = Call[String] : func:r2836_3, this:r2836_1 -# 2836| mu2836_5(unknown) = ^CallSideEffect : ~m? -# 2836| mu2836_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2836_1 -# 2837| r2837_1(glval) = VariableAddress[x939] : -# 2837| r2837_2(glval) = FunctionAddress[~String] : -# 2837| v2837_3(void) = Call[~String] : func:r2837_2, this:r2837_1 -# 2837| mu2837_4(unknown) = ^CallSideEffect : ~m? -# 2837| v2837_5(void) = ^IndirectReadSideEffect[-1] : &:r2837_1, ~m? -# 2837| mu2837_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2837_1 -# 2837| r2837_7(bool) = Constant[0] : -# 2837| v2837_8(void) = ConditionalBranch : r2837_7 +# 35| Block 940 +# 35| r35_13147(glval) = VariableAddress[x939] : +# 35| mu35_13148(String) = Uninitialized[x939] : &:r35_13147 +# 35| r35_13149(glval) = FunctionAddress[String] : +# 35| v35_13150(void) = Call[String] : func:r35_13149, this:r35_13147 +# 35| mu35_13151(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13147 +# 35| r35_13153(glval) = VariableAddress[x939] : +# 35| r35_13154(glval) = FunctionAddress[~String] : +# 35| v35_13155(void) = Call[~String] : func:r35_13154, this:r35_13153 +# 35| mu35_13156(unknown) = ^CallSideEffect : ~m? +# 35| v35_13157(void) = ^IndirectReadSideEffect[-1] : &:r35_13153, ~m? +# 35| mu35_13158(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13153 +# 35| r35_13159(bool) = Constant[0] : +# 35| v35_13160(void) = ConditionalBranch : r35_13159 #-----| False -> Block 941 #-----| True (back edge) -> Block 940 -# 2839| Block 941 -# 2839| r2839_1(glval) = VariableAddress[x940] : -# 2839| mu2839_2(String) = Uninitialized[x940] : &:r2839_1 -# 2839| r2839_3(glval) = FunctionAddress[String] : -# 2839| v2839_4(void) = Call[String] : func:r2839_3, this:r2839_1 -# 2839| mu2839_5(unknown) = ^CallSideEffect : ~m? -# 2839| mu2839_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2839_1 -# 2840| r2840_1(glval) = VariableAddress[x940] : -# 2840| r2840_2(glval) = FunctionAddress[~String] : -# 2840| v2840_3(void) = Call[~String] : func:r2840_2, this:r2840_1 -# 2840| mu2840_4(unknown) = ^CallSideEffect : ~m? -# 2840| v2840_5(void) = ^IndirectReadSideEffect[-1] : &:r2840_1, ~m? -# 2840| mu2840_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2840_1 -# 2840| r2840_7(bool) = Constant[0] : -# 2840| v2840_8(void) = ConditionalBranch : r2840_7 +# 35| Block 941 +# 35| r35_13161(glval) = VariableAddress[x940] : +# 35| mu35_13162(String) = Uninitialized[x940] : &:r35_13161 +# 35| r35_13163(glval) = FunctionAddress[String] : +# 35| v35_13164(void) = Call[String] : func:r35_13163, this:r35_13161 +# 35| mu35_13165(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13161 +# 35| r35_13167(glval) = VariableAddress[x940] : +# 35| r35_13168(glval) = FunctionAddress[~String] : +# 35| v35_13169(void) = Call[~String] : func:r35_13168, this:r35_13167 +# 35| mu35_13170(unknown) = ^CallSideEffect : ~m? +# 35| v35_13171(void) = ^IndirectReadSideEffect[-1] : &:r35_13167, ~m? +# 35| mu35_13172(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13167 +# 35| r35_13173(bool) = Constant[0] : +# 35| v35_13174(void) = ConditionalBranch : r35_13173 #-----| False -> Block 942 #-----| True (back edge) -> Block 941 -# 2842| Block 942 -# 2842| r2842_1(glval) = VariableAddress[x941] : -# 2842| mu2842_2(String) = Uninitialized[x941] : &:r2842_1 -# 2842| r2842_3(glval) = FunctionAddress[String] : -# 2842| v2842_4(void) = Call[String] : func:r2842_3, this:r2842_1 -# 2842| mu2842_5(unknown) = ^CallSideEffect : ~m? -# 2842| mu2842_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2842_1 -# 2843| r2843_1(glval) = VariableAddress[x941] : -# 2843| r2843_2(glval) = FunctionAddress[~String] : -# 2843| v2843_3(void) = Call[~String] : func:r2843_2, this:r2843_1 -# 2843| mu2843_4(unknown) = ^CallSideEffect : ~m? -# 2843| v2843_5(void) = ^IndirectReadSideEffect[-1] : &:r2843_1, ~m? -# 2843| mu2843_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2843_1 -# 2843| r2843_7(bool) = Constant[0] : -# 2843| v2843_8(void) = ConditionalBranch : r2843_7 +# 35| Block 942 +# 35| r35_13175(glval) = VariableAddress[x941] : +# 35| mu35_13176(String) = Uninitialized[x941] : &:r35_13175 +# 35| r35_13177(glval) = FunctionAddress[String] : +# 35| v35_13178(void) = Call[String] : func:r35_13177, this:r35_13175 +# 35| mu35_13179(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13175 +# 35| r35_13181(glval) = VariableAddress[x941] : +# 35| r35_13182(glval) = FunctionAddress[~String] : +# 35| v35_13183(void) = Call[~String] : func:r35_13182, this:r35_13181 +# 35| mu35_13184(unknown) = ^CallSideEffect : ~m? +# 35| v35_13185(void) = ^IndirectReadSideEffect[-1] : &:r35_13181, ~m? +# 35| mu35_13186(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13181 +# 35| r35_13187(bool) = Constant[0] : +# 35| v35_13188(void) = ConditionalBranch : r35_13187 #-----| False -> Block 943 #-----| True (back edge) -> Block 942 -# 2845| Block 943 -# 2845| r2845_1(glval) = VariableAddress[x942] : -# 2845| mu2845_2(String) = Uninitialized[x942] : &:r2845_1 -# 2845| r2845_3(glval) = FunctionAddress[String] : -# 2845| v2845_4(void) = Call[String] : func:r2845_3, this:r2845_1 -# 2845| mu2845_5(unknown) = ^CallSideEffect : ~m? -# 2845| mu2845_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2845_1 -# 2846| r2846_1(glval) = VariableAddress[x942] : -# 2846| r2846_2(glval) = FunctionAddress[~String] : -# 2846| v2846_3(void) = Call[~String] : func:r2846_2, this:r2846_1 -# 2846| mu2846_4(unknown) = ^CallSideEffect : ~m? -# 2846| v2846_5(void) = ^IndirectReadSideEffect[-1] : &:r2846_1, ~m? -# 2846| mu2846_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2846_1 -# 2846| r2846_7(bool) = Constant[0] : -# 2846| v2846_8(void) = ConditionalBranch : r2846_7 +# 35| Block 943 +# 35| r35_13189(glval) = VariableAddress[x942] : +# 35| mu35_13190(String) = Uninitialized[x942] : &:r35_13189 +# 35| r35_13191(glval) = FunctionAddress[String] : +# 35| v35_13192(void) = Call[String] : func:r35_13191, this:r35_13189 +# 35| mu35_13193(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13189 +# 35| r35_13195(glval) = VariableAddress[x942] : +# 35| r35_13196(glval) = FunctionAddress[~String] : +# 35| v35_13197(void) = Call[~String] : func:r35_13196, this:r35_13195 +# 35| mu35_13198(unknown) = ^CallSideEffect : ~m? +# 35| v35_13199(void) = ^IndirectReadSideEffect[-1] : &:r35_13195, ~m? +# 35| mu35_13200(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13195 +# 35| r35_13201(bool) = Constant[0] : +# 35| v35_13202(void) = ConditionalBranch : r35_13201 #-----| False -> Block 944 #-----| True (back edge) -> Block 943 -# 2848| Block 944 -# 2848| r2848_1(glval) = VariableAddress[x943] : -# 2848| mu2848_2(String) = Uninitialized[x943] : &:r2848_1 -# 2848| r2848_3(glval) = FunctionAddress[String] : -# 2848| v2848_4(void) = Call[String] : func:r2848_3, this:r2848_1 -# 2848| mu2848_5(unknown) = ^CallSideEffect : ~m? -# 2848| mu2848_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2848_1 -# 2849| r2849_1(glval) = VariableAddress[x943] : -# 2849| r2849_2(glval) = FunctionAddress[~String] : -# 2849| v2849_3(void) = Call[~String] : func:r2849_2, this:r2849_1 -# 2849| mu2849_4(unknown) = ^CallSideEffect : ~m? -# 2849| v2849_5(void) = ^IndirectReadSideEffect[-1] : &:r2849_1, ~m? -# 2849| mu2849_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2849_1 -# 2849| r2849_7(bool) = Constant[0] : -# 2849| v2849_8(void) = ConditionalBranch : r2849_7 +# 35| Block 944 +# 35| r35_13203(glval) = VariableAddress[x943] : +# 35| mu35_13204(String) = Uninitialized[x943] : &:r35_13203 +# 35| r35_13205(glval) = FunctionAddress[String] : +# 35| v35_13206(void) = Call[String] : func:r35_13205, this:r35_13203 +# 35| mu35_13207(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13203 +# 35| r35_13209(glval) = VariableAddress[x943] : +# 35| r35_13210(glval) = FunctionAddress[~String] : +# 35| v35_13211(void) = Call[~String] : func:r35_13210, this:r35_13209 +# 35| mu35_13212(unknown) = ^CallSideEffect : ~m? +# 35| v35_13213(void) = ^IndirectReadSideEffect[-1] : &:r35_13209, ~m? +# 35| mu35_13214(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13209 +# 35| r35_13215(bool) = Constant[0] : +# 35| v35_13216(void) = ConditionalBranch : r35_13215 #-----| False -> Block 945 #-----| True (back edge) -> Block 944 -# 2851| Block 945 -# 2851| r2851_1(glval) = VariableAddress[x944] : -# 2851| mu2851_2(String) = Uninitialized[x944] : &:r2851_1 -# 2851| r2851_3(glval) = FunctionAddress[String] : -# 2851| v2851_4(void) = Call[String] : func:r2851_3, this:r2851_1 -# 2851| mu2851_5(unknown) = ^CallSideEffect : ~m? -# 2851| mu2851_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2851_1 -# 2852| r2852_1(glval) = VariableAddress[x944] : -# 2852| r2852_2(glval) = FunctionAddress[~String] : -# 2852| v2852_3(void) = Call[~String] : func:r2852_2, this:r2852_1 -# 2852| mu2852_4(unknown) = ^CallSideEffect : ~m? -# 2852| v2852_5(void) = ^IndirectReadSideEffect[-1] : &:r2852_1, ~m? -# 2852| mu2852_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2852_1 -# 2852| r2852_7(bool) = Constant[0] : -# 2852| v2852_8(void) = ConditionalBranch : r2852_7 +# 35| Block 945 +# 35| r35_13217(glval) = VariableAddress[x944] : +# 35| mu35_13218(String) = Uninitialized[x944] : &:r35_13217 +# 35| r35_13219(glval) = FunctionAddress[String] : +# 35| v35_13220(void) = Call[String] : func:r35_13219, this:r35_13217 +# 35| mu35_13221(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13217 +# 35| r35_13223(glval) = VariableAddress[x944] : +# 35| r35_13224(glval) = FunctionAddress[~String] : +# 35| v35_13225(void) = Call[~String] : func:r35_13224, this:r35_13223 +# 35| mu35_13226(unknown) = ^CallSideEffect : ~m? +# 35| v35_13227(void) = ^IndirectReadSideEffect[-1] : &:r35_13223, ~m? +# 35| mu35_13228(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13223 +# 35| r35_13229(bool) = Constant[0] : +# 35| v35_13230(void) = ConditionalBranch : r35_13229 #-----| False -> Block 946 #-----| True (back edge) -> Block 945 -# 2854| Block 946 -# 2854| r2854_1(glval) = VariableAddress[x945] : -# 2854| mu2854_2(String) = Uninitialized[x945] : &:r2854_1 -# 2854| r2854_3(glval) = FunctionAddress[String] : -# 2854| v2854_4(void) = Call[String] : func:r2854_3, this:r2854_1 -# 2854| mu2854_5(unknown) = ^CallSideEffect : ~m? -# 2854| mu2854_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2854_1 -# 2855| r2855_1(glval) = VariableAddress[x945] : -# 2855| r2855_2(glval) = FunctionAddress[~String] : -# 2855| v2855_3(void) = Call[~String] : func:r2855_2, this:r2855_1 -# 2855| mu2855_4(unknown) = ^CallSideEffect : ~m? -# 2855| v2855_5(void) = ^IndirectReadSideEffect[-1] : &:r2855_1, ~m? -# 2855| mu2855_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2855_1 -# 2855| r2855_7(bool) = Constant[0] : -# 2855| v2855_8(void) = ConditionalBranch : r2855_7 +# 35| Block 946 +# 35| r35_13231(glval) = VariableAddress[x945] : +# 35| mu35_13232(String) = Uninitialized[x945] : &:r35_13231 +# 35| r35_13233(glval) = FunctionAddress[String] : +# 35| v35_13234(void) = Call[String] : func:r35_13233, this:r35_13231 +# 35| mu35_13235(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13231 +# 35| r35_13237(glval) = VariableAddress[x945] : +# 35| r35_13238(glval) = FunctionAddress[~String] : +# 35| v35_13239(void) = Call[~String] : func:r35_13238, this:r35_13237 +# 35| mu35_13240(unknown) = ^CallSideEffect : ~m? +# 35| v35_13241(void) = ^IndirectReadSideEffect[-1] : &:r35_13237, ~m? +# 35| mu35_13242(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13237 +# 35| r35_13243(bool) = Constant[0] : +# 35| v35_13244(void) = ConditionalBranch : r35_13243 #-----| False -> Block 947 #-----| True (back edge) -> Block 946 -# 2857| Block 947 -# 2857| r2857_1(glval) = VariableAddress[x946] : -# 2857| mu2857_2(String) = Uninitialized[x946] : &:r2857_1 -# 2857| r2857_3(glval) = FunctionAddress[String] : -# 2857| v2857_4(void) = Call[String] : func:r2857_3, this:r2857_1 -# 2857| mu2857_5(unknown) = ^CallSideEffect : ~m? -# 2857| mu2857_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2857_1 -# 2858| r2858_1(glval) = VariableAddress[x946] : -# 2858| r2858_2(glval) = FunctionAddress[~String] : -# 2858| v2858_3(void) = Call[~String] : func:r2858_2, this:r2858_1 -# 2858| mu2858_4(unknown) = ^CallSideEffect : ~m? -# 2858| v2858_5(void) = ^IndirectReadSideEffect[-1] : &:r2858_1, ~m? -# 2858| mu2858_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2858_1 -# 2858| r2858_7(bool) = Constant[0] : -# 2858| v2858_8(void) = ConditionalBranch : r2858_7 +# 35| Block 947 +# 35| r35_13245(glval) = VariableAddress[x946] : +# 35| mu35_13246(String) = Uninitialized[x946] : &:r35_13245 +# 35| r35_13247(glval) = FunctionAddress[String] : +# 35| v35_13248(void) = Call[String] : func:r35_13247, this:r35_13245 +# 35| mu35_13249(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13245 +# 35| r35_13251(glval) = VariableAddress[x946] : +# 35| r35_13252(glval) = FunctionAddress[~String] : +# 35| v35_13253(void) = Call[~String] : func:r35_13252, this:r35_13251 +# 35| mu35_13254(unknown) = ^CallSideEffect : ~m? +# 35| v35_13255(void) = ^IndirectReadSideEffect[-1] : &:r35_13251, ~m? +# 35| mu35_13256(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13251 +# 35| r35_13257(bool) = Constant[0] : +# 35| v35_13258(void) = ConditionalBranch : r35_13257 #-----| False -> Block 948 #-----| True (back edge) -> Block 947 -# 2860| Block 948 -# 2860| r2860_1(glval) = VariableAddress[x947] : -# 2860| mu2860_2(String) = Uninitialized[x947] : &:r2860_1 -# 2860| r2860_3(glval) = FunctionAddress[String] : -# 2860| v2860_4(void) = Call[String] : func:r2860_3, this:r2860_1 -# 2860| mu2860_5(unknown) = ^CallSideEffect : ~m? -# 2860| mu2860_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2860_1 -# 2861| r2861_1(glval) = VariableAddress[x947] : -# 2861| r2861_2(glval) = FunctionAddress[~String] : -# 2861| v2861_3(void) = Call[~String] : func:r2861_2, this:r2861_1 -# 2861| mu2861_4(unknown) = ^CallSideEffect : ~m? -# 2861| v2861_5(void) = ^IndirectReadSideEffect[-1] : &:r2861_1, ~m? -# 2861| mu2861_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2861_1 -# 2861| r2861_7(bool) = Constant[0] : -# 2861| v2861_8(void) = ConditionalBranch : r2861_7 +# 35| Block 948 +# 35| r35_13259(glval) = VariableAddress[x947] : +# 35| mu35_13260(String) = Uninitialized[x947] : &:r35_13259 +# 35| r35_13261(glval) = FunctionAddress[String] : +# 35| v35_13262(void) = Call[String] : func:r35_13261, this:r35_13259 +# 35| mu35_13263(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13259 +# 35| r35_13265(glval) = VariableAddress[x947] : +# 35| r35_13266(glval) = FunctionAddress[~String] : +# 35| v35_13267(void) = Call[~String] : func:r35_13266, this:r35_13265 +# 35| mu35_13268(unknown) = ^CallSideEffect : ~m? +# 35| v35_13269(void) = ^IndirectReadSideEffect[-1] : &:r35_13265, ~m? +# 35| mu35_13270(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13265 +# 35| r35_13271(bool) = Constant[0] : +# 35| v35_13272(void) = ConditionalBranch : r35_13271 #-----| False -> Block 949 #-----| True (back edge) -> Block 948 -# 2863| Block 949 -# 2863| r2863_1(glval) = VariableAddress[x948] : -# 2863| mu2863_2(String) = Uninitialized[x948] : &:r2863_1 -# 2863| r2863_3(glval) = FunctionAddress[String] : -# 2863| v2863_4(void) = Call[String] : func:r2863_3, this:r2863_1 -# 2863| mu2863_5(unknown) = ^CallSideEffect : ~m? -# 2863| mu2863_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2863_1 -# 2864| r2864_1(glval) = VariableAddress[x948] : -# 2864| r2864_2(glval) = FunctionAddress[~String] : -# 2864| v2864_3(void) = Call[~String] : func:r2864_2, this:r2864_1 -# 2864| mu2864_4(unknown) = ^CallSideEffect : ~m? -# 2864| v2864_5(void) = ^IndirectReadSideEffect[-1] : &:r2864_1, ~m? -# 2864| mu2864_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2864_1 -# 2864| r2864_7(bool) = Constant[0] : -# 2864| v2864_8(void) = ConditionalBranch : r2864_7 +# 35| Block 949 +# 35| r35_13273(glval) = VariableAddress[x948] : +# 35| mu35_13274(String) = Uninitialized[x948] : &:r35_13273 +# 35| r35_13275(glval) = FunctionAddress[String] : +# 35| v35_13276(void) = Call[String] : func:r35_13275, this:r35_13273 +# 35| mu35_13277(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13273 +# 35| r35_13279(glval) = VariableAddress[x948] : +# 35| r35_13280(glval) = FunctionAddress[~String] : +# 35| v35_13281(void) = Call[~String] : func:r35_13280, this:r35_13279 +# 35| mu35_13282(unknown) = ^CallSideEffect : ~m? +# 35| v35_13283(void) = ^IndirectReadSideEffect[-1] : &:r35_13279, ~m? +# 35| mu35_13284(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13279 +# 35| r35_13285(bool) = Constant[0] : +# 35| v35_13286(void) = ConditionalBranch : r35_13285 #-----| False -> Block 950 #-----| True (back edge) -> Block 949 -# 2866| Block 950 -# 2866| r2866_1(glval) = VariableAddress[x949] : -# 2866| mu2866_2(String) = Uninitialized[x949] : &:r2866_1 -# 2866| r2866_3(glval) = FunctionAddress[String] : -# 2866| v2866_4(void) = Call[String] : func:r2866_3, this:r2866_1 -# 2866| mu2866_5(unknown) = ^CallSideEffect : ~m? -# 2866| mu2866_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2866_1 -# 2867| r2867_1(glval) = VariableAddress[x949] : -# 2867| r2867_2(glval) = FunctionAddress[~String] : -# 2867| v2867_3(void) = Call[~String] : func:r2867_2, this:r2867_1 -# 2867| mu2867_4(unknown) = ^CallSideEffect : ~m? -# 2867| v2867_5(void) = ^IndirectReadSideEffect[-1] : &:r2867_1, ~m? -# 2867| mu2867_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2867_1 -# 2867| r2867_7(bool) = Constant[0] : -# 2867| v2867_8(void) = ConditionalBranch : r2867_7 +# 35| Block 950 +# 35| r35_13287(glval) = VariableAddress[x949] : +# 35| mu35_13288(String) = Uninitialized[x949] : &:r35_13287 +# 35| r35_13289(glval) = FunctionAddress[String] : +# 35| v35_13290(void) = Call[String] : func:r35_13289, this:r35_13287 +# 35| mu35_13291(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13287 +# 35| r35_13293(glval) = VariableAddress[x949] : +# 35| r35_13294(glval) = FunctionAddress[~String] : +# 35| v35_13295(void) = Call[~String] : func:r35_13294, this:r35_13293 +# 35| mu35_13296(unknown) = ^CallSideEffect : ~m? +# 35| v35_13297(void) = ^IndirectReadSideEffect[-1] : &:r35_13293, ~m? +# 35| mu35_13298(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13293 +# 35| r35_13299(bool) = Constant[0] : +# 35| v35_13300(void) = ConditionalBranch : r35_13299 #-----| False -> Block 951 #-----| True (back edge) -> Block 950 -# 2869| Block 951 -# 2869| r2869_1(glval) = VariableAddress[x950] : -# 2869| mu2869_2(String) = Uninitialized[x950] : &:r2869_1 -# 2869| r2869_3(glval) = FunctionAddress[String] : -# 2869| v2869_4(void) = Call[String] : func:r2869_3, this:r2869_1 -# 2869| mu2869_5(unknown) = ^CallSideEffect : ~m? -# 2869| mu2869_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2869_1 -# 2870| r2870_1(glval) = VariableAddress[x950] : -# 2870| r2870_2(glval) = FunctionAddress[~String] : -# 2870| v2870_3(void) = Call[~String] : func:r2870_2, this:r2870_1 -# 2870| mu2870_4(unknown) = ^CallSideEffect : ~m? -# 2870| v2870_5(void) = ^IndirectReadSideEffect[-1] : &:r2870_1, ~m? -# 2870| mu2870_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2870_1 -# 2870| r2870_7(bool) = Constant[0] : -# 2870| v2870_8(void) = ConditionalBranch : r2870_7 +# 35| Block 951 +# 35| r35_13301(glval) = VariableAddress[x950] : +# 35| mu35_13302(String) = Uninitialized[x950] : &:r35_13301 +# 35| r35_13303(glval) = FunctionAddress[String] : +# 35| v35_13304(void) = Call[String] : func:r35_13303, this:r35_13301 +# 35| mu35_13305(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13301 +# 35| r35_13307(glval) = VariableAddress[x950] : +# 35| r35_13308(glval) = FunctionAddress[~String] : +# 35| v35_13309(void) = Call[~String] : func:r35_13308, this:r35_13307 +# 35| mu35_13310(unknown) = ^CallSideEffect : ~m? +# 35| v35_13311(void) = ^IndirectReadSideEffect[-1] : &:r35_13307, ~m? +# 35| mu35_13312(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13307 +# 35| r35_13313(bool) = Constant[0] : +# 35| v35_13314(void) = ConditionalBranch : r35_13313 #-----| False -> Block 952 #-----| True (back edge) -> Block 951 -# 2872| Block 952 -# 2872| r2872_1(glval) = VariableAddress[x951] : -# 2872| mu2872_2(String) = Uninitialized[x951] : &:r2872_1 -# 2872| r2872_3(glval) = FunctionAddress[String] : -# 2872| v2872_4(void) = Call[String] : func:r2872_3, this:r2872_1 -# 2872| mu2872_5(unknown) = ^CallSideEffect : ~m? -# 2872| mu2872_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2872_1 -# 2873| r2873_1(glval) = VariableAddress[x951] : -# 2873| r2873_2(glval) = FunctionAddress[~String] : -# 2873| v2873_3(void) = Call[~String] : func:r2873_2, this:r2873_1 -# 2873| mu2873_4(unknown) = ^CallSideEffect : ~m? -# 2873| v2873_5(void) = ^IndirectReadSideEffect[-1] : &:r2873_1, ~m? -# 2873| mu2873_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2873_1 -# 2873| r2873_7(bool) = Constant[0] : -# 2873| v2873_8(void) = ConditionalBranch : r2873_7 +# 35| Block 952 +# 35| r35_13315(glval) = VariableAddress[x951] : +# 35| mu35_13316(String) = Uninitialized[x951] : &:r35_13315 +# 35| r35_13317(glval) = FunctionAddress[String] : +# 35| v35_13318(void) = Call[String] : func:r35_13317, this:r35_13315 +# 35| mu35_13319(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13315 +# 35| r35_13321(glval) = VariableAddress[x951] : +# 35| r35_13322(glval) = FunctionAddress[~String] : +# 35| v35_13323(void) = Call[~String] : func:r35_13322, this:r35_13321 +# 35| mu35_13324(unknown) = ^CallSideEffect : ~m? +# 35| v35_13325(void) = ^IndirectReadSideEffect[-1] : &:r35_13321, ~m? +# 35| mu35_13326(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13321 +# 35| r35_13327(bool) = Constant[0] : +# 35| v35_13328(void) = ConditionalBranch : r35_13327 #-----| False -> Block 953 #-----| True (back edge) -> Block 952 -# 2875| Block 953 -# 2875| r2875_1(glval) = VariableAddress[x952] : -# 2875| mu2875_2(String) = Uninitialized[x952] : &:r2875_1 -# 2875| r2875_3(glval) = FunctionAddress[String] : -# 2875| v2875_4(void) = Call[String] : func:r2875_3, this:r2875_1 -# 2875| mu2875_5(unknown) = ^CallSideEffect : ~m? -# 2875| mu2875_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2875_1 -# 2876| r2876_1(glval) = VariableAddress[x952] : -# 2876| r2876_2(glval) = FunctionAddress[~String] : -# 2876| v2876_3(void) = Call[~String] : func:r2876_2, this:r2876_1 -# 2876| mu2876_4(unknown) = ^CallSideEffect : ~m? -# 2876| v2876_5(void) = ^IndirectReadSideEffect[-1] : &:r2876_1, ~m? -# 2876| mu2876_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2876_1 -# 2876| r2876_7(bool) = Constant[0] : -# 2876| v2876_8(void) = ConditionalBranch : r2876_7 +# 35| Block 953 +# 35| r35_13329(glval) = VariableAddress[x952] : +# 35| mu35_13330(String) = Uninitialized[x952] : &:r35_13329 +# 35| r35_13331(glval) = FunctionAddress[String] : +# 35| v35_13332(void) = Call[String] : func:r35_13331, this:r35_13329 +# 35| mu35_13333(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13329 +# 35| r35_13335(glval) = VariableAddress[x952] : +# 35| r35_13336(glval) = FunctionAddress[~String] : +# 35| v35_13337(void) = Call[~String] : func:r35_13336, this:r35_13335 +# 35| mu35_13338(unknown) = ^CallSideEffect : ~m? +# 35| v35_13339(void) = ^IndirectReadSideEffect[-1] : &:r35_13335, ~m? +# 35| mu35_13340(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13335 +# 35| r35_13341(bool) = Constant[0] : +# 35| v35_13342(void) = ConditionalBranch : r35_13341 #-----| False -> Block 954 #-----| True (back edge) -> Block 953 -# 2878| Block 954 -# 2878| r2878_1(glval) = VariableAddress[x953] : -# 2878| mu2878_2(String) = Uninitialized[x953] : &:r2878_1 -# 2878| r2878_3(glval) = FunctionAddress[String] : -# 2878| v2878_4(void) = Call[String] : func:r2878_3, this:r2878_1 -# 2878| mu2878_5(unknown) = ^CallSideEffect : ~m? -# 2878| mu2878_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2878_1 -# 2879| r2879_1(glval) = VariableAddress[x953] : -# 2879| r2879_2(glval) = FunctionAddress[~String] : -# 2879| v2879_3(void) = Call[~String] : func:r2879_2, this:r2879_1 -# 2879| mu2879_4(unknown) = ^CallSideEffect : ~m? -# 2879| v2879_5(void) = ^IndirectReadSideEffect[-1] : &:r2879_1, ~m? -# 2879| mu2879_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2879_1 -# 2879| r2879_7(bool) = Constant[0] : -# 2879| v2879_8(void) = ConditionalBranch : r2879_7 +# 35| Block 954 +# 35| r35_13343(glval) = VariableAddress[x953] : +# 35| mu35_13344(String) = Uninitialized[x953] : &:r35_13343 +# 35| r35_13345(glval) = FunctionAddress[String] : +# 35| v35_13346(void) = Call[String] : func:r35_13345, this:r35_13343 +# 35| mu35_13347(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13343 +# 35| r35_13349(glval) = VariableAddress[x953] : +# 35| r35_13350(glval) = FunctionAddress[~String] : +# 35| v35_13351(void) = Call[~String] : func:r35_13350, this:r35_13349 +# 35| mu35_13352(unknown) = ^CallSideEffect : ~m? +# 35| v35_13353(void) = ^IndirectReadSideEffect[-1] : &:r35_13349, ~m? +# 35| mu35_13354(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13349 +# 35| r35_13355(bool) = Constant[0] : +# 35| v35_13356(void) = ConditionalBranch : r35_13355 #-----| False -> Block 955 #-----| True (back edge) -> Block 954 -# 2881| Block 955 -# 2881| r2881_1(glval) = VariableAddress[x954] : -# 2881| mu2881_2(String) = Uninitialized[x954] : &:r2881_1 -# 2881| r2881_3(glval) = FunctionAddress[String] : -# 2881| v2881_4(void) = Call[String] : func:r2881_3, this:r2881_1 -# 2881| mu2881_5(unknown) = ^CallSideEffect : ~m? -# 2881| mu2881_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2881_1 -# 2882| r2882_1(glval) = VariableAddress[x954] : -# 2882| r2882_2(glval) = FunctionAddress[~String] : -# 2882| v2882_3(void) = Call[~String] : func:r2882_2, this:r2882_1 -# 2882| mu2882_4(unknown) = ^CallSideEffect : ~m? -# 2882| v2882_5(void) = ^IndirectReadSideEffect[-1] : &:r2882_1, ~m? -# 2882| mu2882_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2882_1 -# 2882| r2882_7(bool) = Constant[0] : -# 2882| v2882_8(void) = ConditionalBranch : r2882_7 +# 35| Block 955 +# 35| r35_13357(glval) = VariableAddress[x954] : +# 35| mu35_13358(String) = Uninitialized[x954] : &:r35_13357 +# 35| r35_13359(glval) = FunctionAddress[String] : +# 35| v35_13360(void) = Call[String] : func:r35_13359, this:r35_13357 +# 35| mu35_13361(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13362(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13357 +# 35| r35_13363(glval) = VariableAddress[x954] : +# 35| r35_13364(glval) = FunctionAddress[~String] : +# 35| v35_13365(void) = Call[~String] : func:r35_13364, this:r35_13363 +# 35| mu35_13366(unknown) = ^CallSideEffect : ~m? +# 35| v35_13367(void) = ^IndirectReadSideEffect[-1] : &:r35_13363, ~m? +# 35| mu35_13368(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13363 +# 35| r35_13369(bool) = Constant[0] : +# 35| v35_13370(void) = ConditionalBranch : r35_13369 #-----| False -> Block 956 #-----| True (back edge) -> Block 955 -# 2884| Block 956 -# 2884| r2884_1(glval) = VariableAddress[x955] : -# 2884| mu2884_2(String) = Uninitialized[x955] : &:r2884_1 -# 2884| r2884_3(glval) = FunctionAddress[String] : -# 2884| v2884_4(void) = Call[String] : func:r2884_3, this:r2884_1 -# 2884| mu2884_5(unknown) = ^CallSideEffect : ~m? -# 2884| mu2884_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2884_1 -# 2885| r2885_1(glval) = VariableAddress[x955] : -# 2885| r2885_2(glval) = FunctionAddress[~String] : -# 2885| v2885_3(void) = Call[~String] : func:r2885_2, this:r2885_1 -# 2885| mu2885_4(unknown) = ^CallSideEffect : ~m? -# 2885| v2885_5(void) = ^IndirectReadSideEffect[-1] : &:r2885_1, ~m? -# 2885| mu2885_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2885_1 -# 2885| r2885_7(bool) = Constant[0] : -# 2885| v2885_8(void) = ConditionalBranch : r2885_7 +# 35| Block 956 +# 35| r35_13371(glval) = VariableAddress[x955] : +# 35| mu35_13372(String) = Uninitialized[x955] : &:r35_13371 +# 35| r35_13373(glval) = FunctionAddress[String] : +# 35| v35_13374(void) = Call[String] : func:r35_13373, this:r35_13371 +# 35| mu35_13375(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13376(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13371 +# 35| r35_13377(glval) = VariableAddress[x955] : +# 35| r35_13378(glval) = FunctionAddress[~String] : +# 35| v35_13379(void) = Call[~String] : func:r35_13378, this:r35_13377 +# 35| mu35_13380(unknown) = ^CallSideEffect : ~m? +# 35| v35_13381(void) = ^IndirectReadSideEffect[-1] : &:r35_13377, ~m? +# 35| mu35_13382(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13377 +# 35| r35_13383(bool) = Constant[0] : +# 35| v35_13384(void) = ConditionalBranch : r35_13383 #-----| False -> Block 957 #-----| True (back edge) -> Block 956 -# 2887| Block 957 -# 2887| r2887_1(glval) = VariableAddress[x956] : -# 2887| mu2887_2(String) = Uninitialized[x956] : &:r2887_1 -# 2887| r2887_3(glval) = FunctionAddress[String] : -# 2887| v2887_4(void) = Call[String] : func:r2887_3, this:r2887_1 -# 2887| mu2887_5(unknown) = ^CallSideEffect : ~m? -# 2887| mu2887_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2887_1 -# 2888| r2888_1(glval) = VariableAddress[x956] : -# 2888| r2888_2(glval) = FunctionAddress[~String] : -# 2888| v2888_3(void) = Call[~String] : func:r2888_2, this:r2888_1 -# 2888| mu2888_4(unknown) = ^CallSideEffect : ~m? -# 2888| v2888_5(void) = ^IndirectReadSideEffect[-1] : &:r2888_1, ~m? -# 2888| mu2888_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2888_1 -# 2888| r2888_7(bool) = Constant[0] : -# 2888| v2888_8(void) = ConditionalBranch : r2888_7 +# 35| Block 957 +# 35| r35_13385(glval) = VariableAddress[x956] : +# 35| mu35_13386(String) = Uninitialized[x956] : &:r35_13385 +# 35| r35_13387(glval) = FunctionAddress[String] : +# 35| v35_13388(void) = Call[String] : func:r35_13387, this:r35_13385 +# 35| mu35_13389(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13390(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13385 +# 35| r35_13391(glval) = VariableAddress[x956] : +# 35| r35_13392(glval) = FunctionAddress[~String] : +# 35| v35_13393(void) = Call[~String] : func:r35_13392, this:r35_13391 +# 35| mu35_13394(unknown) = ^CallSideEffect : ~m? +# 35| v35_13395(void) = ^IndirectReadSideEffect[-1] : &:r35_13391, ~m? +# 35| mu35_13396(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13391 +# 35| r35_13397(bool) = Constant[0] : +# 35| v35_13398(void) = ConditionalBranch : r35_13397 #-----| False -> Block 958 #-----| True (back edge) -> Block 957 -# 2890| Block 958 -# 2890| r2890_1(glval) = VariableAddress[x957] : -# 2890| mu2890_2(String) = Uninitialized[x957] : &:r2890_1 -# 2890| r2890_3(glval) = FunctionAddress[String] : -# 2890| v2890_4(void) = Call[String] : func:r2890_3, this:r2890_1 -# 2890| mu2890_5(unknown) = ^CallSideEffect : ~m? -# 2890| mu2890_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2890_1 -# 2891| r2891_1(glval) = VariableAddress[x957] : -# 2891| r2891_2(glval) = FunctionAddress[~String] : -# 2891| v2891_3(void) = Call[~String] : func:r2891_2, this:r2891_1 -# 2891| mu2891_4(unknown) = ^CallSideEffect : ~m? -# 2891| v2891_5(void) = ^IndirectReadSideEffect[-1] : &:r2891_1, ~m? -# 2891| mu2891_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2891_1 -# 2891| r2891_7(bool) = Constant[0] : -# 2891| v2891_8(void) = ConditionalBranch : r2891_7 +# 35| Block 958 +# 35| r35_13399(glval) = VariableAddress[x957] : +# 35| mu35_13400(String) = Uninitialized[x957] : &:r35_13399 +# 35| r35_13401(glval) = FunctionAddress[String] : +# 35| v35_13402(void) = Call[String] : func:r35_13401, this:r35_13399 +# 35| mu35_13403(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13404(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13399 +# 35| r35_13405(glval) = VariableAddress[x957] : +# 35| r35_13406(glval) = FunctionAddress[~String] : +# 35| v35_13407(void) = Call[~String] : func:r35_13406, this:r35_13405 +# 35| mu35_13408(unknown) = ^CallSideEffect : ~m? +# 35| v35_13409(void) = ^IndirectReadSideEffect[-1] : &:r35_13405, ~m? +# 35| mu35_13410(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13405 +# 35| r35_13411(bool) = Constant[0] : +# 35| v35_13412(void) = ConditionalBranch : r35_13411 #-----| False -> Block 959 #-----| True (back edge) -> Block 958 -# 2893| Block 959 -# 2893| r2893_1(glval) = VariableAddress[x958] : -# 2893| mu2893_2(String) = Uninitialized[x958] : &:r2893_1 -# 2893| r2893_3(glval) = FunctionAddress[String] : -# 2893| v2893_4(void) = Call[String] : func:r2893_3, this:r2893_1 -# 2893| mu2893_5(unknown) = ^CallSideEffect : ~m? -# 2893| mu2893_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2893_1 -# 2894| r2894_1(glval) = VariableAddress[x958] : -# 2894| r2894_2(glval) = FunctionAddress[~String] : -# 2894| v2894_3(void) = Call[~String] : func:r2894_2, this:r2894_1 -# 2894| mu2894_4(unknown) = ^CallSideEffect : ~m? -# 2894| v2894_5(void) = ^IndirectReadSideEffect[-1] : &:r2894_1, ~m? -# 2894| mu2894_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2894_1 -# 2894| r2894_7(bool) = Constant[0] : -# 2894| v2894_8(void) = ConditionalBranch : r2894_7 +# 35| Block 959 +# 35| r35_13413(glval) = VariableAddress[x958] : +# 35| mu35_13414(String) = Uninitialized[x958] : &:r35_13413 +# 35| r35_13415(glval) = FunctionAddress[String] : +# 35| v35_13416(void) = Call[String] : func:r35_13415, this:r35_13413 +# 35| mu35_13417(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13418(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13413 +# 35| r35_13419(glval) = VariableAddress[x958] : +# 35| r35_13420(glval) = FunctionAddress[~String] : +# 35| v35_13421(void) = Call[~String] : func:r35_13420, this:r35_13419 +# 35| mu35_13422(unknown) = ^CallSideEffect : ~m? +# 35| v35_13423(void) = ^IndirectReadSideEffect[-1] : &:r35_13419, ~m? +# 35| mu35_13424(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13419 +# 35| r35_13425(bool) = Constant[0] : +# 35| v35_13426(void) = ConditionalBranch : r35_13425 #-----| False -> Block 960 #-----| True (back edge) -> Block 959 -# 2896| Block 960 -# 2896| r2896_1(glval) = VariableAddress[x959] : -# 2896| mu2896_2(String) = Uninitialized[x959] : &:r2896_1 -# 2896| r2896_3(glval) = FunctionAddress[String] : -# 2896| v2896_4(void) = Call[String] : func:r2896_3, this:r2896_1 -# 2896| mu2896_5(unknown) = ^CallSideEffect : ~m? -# 2896| mu2896_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2896_1 -# 2897| r2897_1(glval) = VariableAddress[x959] : -# 2897| r2897_2(glval) = FunctionAddress[~String] : -# 2897| v2897_3(void) = Call[~String] : func:r2897_2, this:r2897_1 -# 2897| mu2897_4(unknown) = ^CallSideEffect : ~m? -# 2897| v2897_5(void) = ^IndirectReadSideEffect[-1] : &:r2897_1, ~m? -# 2897| mu2897_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2897_1 -# 2897| r2897_7(bool) = Constant[0] : -# 2897| v2897_8(void) = ConditionalBranch : r2897_7 +# 35| Block 960 +# 35| r35_13427(glval) = VariableAddress[x959] : +# 35| mu35_13428(String) = Uninitialized[x959] : &:r35_13427 +# 35| r35_13429(glval) = FunctionAddress[String] : +# 35| v35_13430(void) = Call[String] : func:r35_13429, this:r35_13427 +# 35| mu35_13431(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13432(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13427 +# 35| r35_13433(glval) = VariableAddress[x959] : +# 35| r35_13434(glval) = FunctionAddress[~String] : +# 35| v35_13435(void) = Call[~String] : func:r35_13434, this:r35_13433 +# 35| mu35_13436(unknown) = ^CallSideEffect : ~m? +# 35| v35_13437(void) = ^IndirectReadSideEffect[-1] : &:r35_13433, ~m? +# 35| mu35_13438(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13433 +# 35| r35_13439(bool) = Constant[0] : +# 35| v35_13440(void) = ConditionalBranch : r35_13439 #-----| False -> Block 961 #-----| True (back edge) -> Block 960 -# 2899| Block 961 -# 2899| r2899_1(glval) = VariableAddress[x960] : -# 2899| mu2899_2(String) = Uninitialized[x960] : &:r2899_1 -# 2899| r2899_3(glval) = FunctionAddress[String] : -# 2899| v2899_4(void) = Call[String] : func:r2899_3, this:r2899_1 -# 2899| mu2899_5(unknown) = ^CallSideEffect : ~m? -# 2899| mu2899_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2899_1 -# 2900| r2900_1(glval) = VariableAddress[x960] : -# 2900| r2900_2(glval) = FunctionAddress[~String] : -# 2900| v2900_3(void) = Call[~String] : func:r2900_2, this:r2900_1 -# 2900| mu2900_4(unknown) = ^CallSideEffect : ~m? -# 2900| v2900_5(void) = ^IndirectReadSideEffect[-1] : &:r2900_1, ~m? -# 2900| mu2900_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2900_1 -# 2900| r2900_7(bool) = Constant[0] : -# 2900| v2900_8(void) = ConditionalBranch : r2900_7 +# 35| Block 961 +# 35| r35_13441(glval) = VariableAddress[x960] : +# 35| mu35_13442(String) = Uninitialized[x960] : &:r35_13441 +# 35| r35_13443(glval) = FunctionAddress[String] : +# 35| v35_13444(void) = Call[String] : func:r35_13443, this:r35_13441 +# 35| mu35_13445(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13446(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13441 +# 35| r35_13447(glval) = VariableAddress[x960] : +# 35| r35_13448(glval) = FunctionAddress[~String] : +# 35| v35_13449(void) = Call[~String] : func:r35_13448, this:r35_13447 +# 35| mu35_13450(unknown) = ^CallSideEffect : ~m? +# 35| v35_13451(void) = ^IndirectReadSideEffect[-1] : &:r35_13447, ~m? +# 35| mu35_13452(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13447 +# 35| r35_13453(bool) = Constant[0] : +# 35| v35_13454(void) = ConditionalBranch : r35_13453 #-----| False -> Block 962 #-----| True (back edge) -> Block 961 -# 2902| Block 962 -# 2902| r2902_1(glval) = VariableAddress[x961] : -# 2902| mu2902_2(String) = Uninitialized[x961] : &:r2902_1 -# 2902| r2902_3(glval) = FunctionAddress[String] : -# 2902| v2902_4(void) = Call[String] : func:r2902_3, this:r2902_1 -# 2902| mu2902_5(unknown) = ^CallSideEffect : ~m? -# 2902| mu2902_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2902_1 -# 2903| r2903_1(glval) = VariableAddress[x961] : -# 2903| r2903_2(glval) = FunctionAddress[~String] : -# 2903| v2903_3(void) = Call[~String] : func:r2903_2, this:r2903_1 -# 2903| mu2903_4(unknown) = ^CallSideEffect : ~m? -# 2903| v2903_5(void) = ^IndirectReadSideEffect[-1] : &:r2903_1, ~m? -# 2903| mu2903_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2903_1 -# 2903| r2903_7(bool) = Constant[0] : -# 2903| v2903_8(void) = ConditionalBranch : r2903_7 +# 35| Block 962 +# 35| r35_13455(glval) = VariableAddress[x961] : +# 35| mu35_13456(String) = Uninitialized[x961] : &:r35_13455 +# 35| r35_13457(glval) = FunctionAddress[String] : +# 35| v35_13458(void) = Call[String] : func:r35_13457, this:r35_13455 +# 35| mu35_13459(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13460(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13455 +# 35| r35_13461(glval) = VariableAddress[x961] : +# 35| r35_13462(glval) = FunctionAddress[~String] : +# 35| v35_13463(void) = Call[~String] : func:r35_13462, this:r35_13461 +# 35| mu35_13464(unknown) = ^CallSideEffect : ~m? +# 35| v35_13465(void) = ^IndirectReadSideEffect[-1] : &:r35_13461, ~m? +# 35| mu35_13466(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13461 +# 35| r35_13467(bool) = Constant[0] : +# 35| v35_13468(void) = ConditionalBranch : r35_13467 #-----| False -> Block 963 #-----| True (back edge) -> Block 962 -# 2905| Block 963 -# 2905| r2905_1(glval) = VariableAddress[x962] : -# 2905| mu2905_2(String) = Uninitialized[x962] : &:r2905_1 -# 2905| r2905_3(glval) = FunctionAddress[String] : -# 2905| v2905_4(void) = Call[String] : func:r2905_3, this:r2905_1 -# 2905| mu2905_5(unknown) = ^CallSideEffect : ~m? -# 2905| mu2905_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2905_1 -# 2906| r2906_1(glval) = VariableAddress[x962] : -# 2906| r2906_2(glval) = FunctionAddress[~String] : -# 2906| v2906_3(void) = Call[~String] : func:r2906_2, this:r2906_1 -# 2906| mu2906_4(unknown) = ^CallSideEffect : ~m? -# 2906| v2906_5(void) = ^IndirectReadSideEffect[-1] : &:r2906_1, ~m? -# 2906| mu2906_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2906_1 -# 2906| r2906_7(bool) = Constant[0] : -# 2906| v2906_8(void) = ConditionalBranch : r2906_7 +# 35| Block 963 +# 35| r35_13469(glval) = VariableAddress[x962] : +# 35| mu35_13470(String) = Uninitialized[x962] : &:r35_13469 +# 35| r35_13471(glval) = FunctionAddress[String] : +# 35| v35_13472(void) = Call[String] : func:r35_13471, this:r35_13469 +# 35| mu35_13473(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13474(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13469 +# 35| r35_13475(glval) = VariableAddress[x962] : +# 35| r35_13476(glval) = FunctionAddress[~String] : +# 35| v35_13477(void) = Call[~String] : func:r35_13476, this:r35_13475 +# 35| mu35_13478(unknown) = ^CallSideEffect : ~m? +# 35| v35_13479(void) = ^IndirectReadSideEffect[-1] : &:r35_13475, ~m? +# 35| mu35_13480(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13475 +# 35| r35_13481(bool) = Constant[0] : +# 35| v35_13482(void) = ConditionalBranch : r35_13481 #-----| False -> Block 964 #-----| True (back edge) -> Block 963 -# 2908| Block 964 -# 2908| r2908_1(glval) = VariableAddress[x963] : -# 2908| mu2908_2(String) = Uninitialized[x963] : &:r2908_1 -# 2908| r2908_3(glval) = FunctionAddress[String] : -# 2908| v2908_4(void) = Call[String] : func:r2908_3, this:r2908_1 -# 2908| mu2908_5(unknown) = ^CallSideEffect : ~m? -# 2908| mu2908_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2908_1 -# 2909| r2909_1(glval) = VariableAddress[x963] : -# 2909| r2909_2(glval) = FunctionAddress[~String] : -# 2909| v2909_3(void) = Call[~String] : func:r2909_2, this:r2909_1 -# 2909| mu2909_4(unknown) = ^CallSideEffect : ~m? -# 2909| v2909_5(void) = ^IndirectReadSideEffect[-1] : &:r2909_1, ~m? -# 2909| mu2909_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2909_1 -# 2909| r2909_7(bool) = Constant[0] : -# 2909| v2909_8(void) = ConditionalBranch : r2909_7 +# 35| Block 964 +# 35| r35_13483(glval) = VariableAddress[x963] : +# 35| mu35_13484(String) = Uninitialized[x963] : &:r35_13483 +# 35| r35_13485(glval) = FunctionAddress[String] : +# 35| v35_13486(void) = Call[String] : func:r35_13485, this:r35_13483 +# 35| mu35_13487(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13488(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13483 +# 35| r35_13489(glval) = VariableAddress[x963] : +# 35| r35_13490(glval) = FunctionAddress[~String] : +# 35| v35_13491(void) = Call[~String] : func:r35_13490, this:r35_13489 +# 35| mu35_13492(unknown) = ^CallSideEffect : ~m? +# 35| v35_13493(void) = ^IndirectReadSideEffect[-1] : &:r35_13489, ~m? +# 35| mu35_13494(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13489 +# 35| r35_13495(bool) = Constant[0] : +# 35| v35_13496(void) = ConditionalBranch : r35_13495 #-----| False -> Block 965 #-----| True (back edge) -> Block 964 -# 2911| Block 965 -# 2911| r2911_1(glval) = VariableAddress[x964] : -# 2911| mu2911_2(String) = Uninitialized[x964] : &:r2911_1 -# 2911| r2911_3(glval) = FunctionAddress[String] : -# 2911| v2911_4(void) = Call[String] : func:r2911_3, this:r2911_1 -# 2911| mu2911_5(unknown) = ^CallSideEffect : ~m? -# 2911| mu2911_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2911_1 -# 2912| r2912_1(glval) = VariableAddress[x964] : -# 2912| r2912_2(glval) = FunctionAddress[~String] : -# 2912| v2912_3(void) = Call[~String] : func:r2912_2, this:r2912_1 -# 2912| mu2912_4(unknown) = ^CallSideEffect : ~m? -# 2912| v2912_5(void) = ^IndirectReadSideEffect[-1] : &:r2912_1, ~m? -# 2912| mu2912_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2912_1 -# 2912| r2912_7(bool) = Constant[0] : -# 2912| v2912_8(void) = ConditionalBranch : r2912_7 +# 35| Block 965 +# 35| r35_13497(glval) = VariableAddress[x964] : +# 35| mu35_13498(String) = Uninitialized[x964] : &:r35_13497 +# 35| r35_13499(glval) = FunctionAddress[String] : +# 35| v35_13500(void) = Call[String] : func:r35_13499, this:r35_13497 +# 35| mu35_13501(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13502(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13497 +# 35| r35_13503(glval) = VariableAddress[x964] : +# 35| r35_13504(glval) = FunctionAddress[~String] : +# 35| v35_13505(void) = Call[~String] : func:r35_13504, this:r35_13503 +# 35| mu35_13506(unknown) = ^CallSideEffect : ~m? +# 35| v35_13507(void) = ^IndirectReadSideEffect[-1] : &:r35_13503, ~m? +# 35| mu35_13508(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13503 +# 35| r35_13509(bool) = Constant[0] : +# 35| v35_13510(void) = ConditionalBranch : r35_13509 #-----| False -> Block 966 #-----| True (back edge) -> Block 965 -# 2914| Block 966 -# 2914| r2914_1(glval) = VariableAddress[x965] : -# 2914| mu2914_2(String) = Uninitialized[x965] : &:r2914_1 -# 2914| r2914_3(glval) = FunctionAddress[String] : -# 2914| v2914_4(void) = Call[String] : func:r2914_3, this:r2914_1 -# 2914| mu2914_5(unknown) = ^CallSideEffect : ~m? -# 2914| mu2914_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2914_1 -# 2915| r2915_1(glval) = VariableAddress[x965] : -# 2915| r2915_2(glval) = FunctionAddress[~String] : -# 2915| v2915_3(void) = Call[~String] : func:r2915_2, this:r2915_1 -# 2915| mu2915_4(unknown) = ^CallSideEffect : ~m? -# 2915| v2915_5(void) = ^IndirectReadSideEffect[-1] : &:r2915_1, ~m? -# 2915| mu2915_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2915_1 -# 2915| r2915_7(bool) = Constant[0] : -# 2915| v2915_8(void) = ConditionalBranch : r2915_7 +# 35| Block 966 +# 35| r35_13511(glval) = VariableAddress[x965] : +# 35| mu35_13512(String) = Uninitialized[x965] : &:r35_13511 +# 35| r35_13513(glval) = FunctionAddress[String] : +# 35| v35_13514(void) = Call[String] : func:r35_13513, this:r35_13511 +# 35| mu35_13515(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13516(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13511 +# 35| r35_13517(glval) = VariableAddress[x965] : +# 35| r35_13518(glval) = FunctionAddress[~String] : +# 35| v35_13519(void) = Call[~String] : func:r35_13518, this:r35_13517 +# 35| mu35_13520(unknown) = ^CallSideEffect : ~m? +# 35| v35_13521(void) = ^IndirectReadSideEffect[-1] : &:r35_13517, ~m? +# 35| mu35_13522(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13517 +# 35| r35_13523(bool) = Constant[0] : +# 35| v35_13524(void) = ConditionalBranch : r35_13523 #-----| False -> Block 967 #-----| True (back edge) -> Block 966 -# 2917| Block 967 -# 2917| r2917_1(glval) = VariableAddress[x966] : -# 2917| mu2917_2(String) = Uninitialized[x966] : &:r2917_1 -# 2917| r2917_3(glval) = FunctionAddress[String] : -# 2917| v2917_4(void) = Call[String] : func:r2917_3, this:r2917_1 -# 2917| mu2917_5(unknown) = ^CallSideEffect : ~m? -# 2917| mu2917_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2917_1 -# 2918| r2918_1(glval) = VariableAddress[x966] : -# 2918| r2918_2(glval) = FunctionAddress[~String] : -# 2918| v2918_3(void) = Call[~String] : func:r2918_2, this:r2918_1 -# 2918| mu2918_4(unknown) = ^CallSideEffect : ~m? -# 2918| v2918_5(void) = ^IndirectReadSideEffect[-1] : &:r2918_1, ~m? -# 2918| mu2918_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2918_1 -# 2918| r2918_7(bool) = Constant[0] : -# 2918| v2918_8(void) = ConditionalBranch : r2918_7 +# 35| Block 967 +# 35| r35_13525(glval) = VariableAddress[x966] : +# 35| mu35_13526(String) = Uninitialized[x966] : &:r35_13525 +# 35| r35_13527(glval) = FunctionAddress[String] : +# 35| v35_13528(void) = Call[String] : func:r35_13527, this:r35_13525 +# 35| mu35_13529(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13530(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13525 +# 35| r35_13531(glval) = VariableAddress[x966] : +# 35| r35_13532(glval) = FunctionAddress[~String] : +# 35| v35_13533(void) = Call[~String] : func:r35_13532, this:r35_13531 +# 35| mu35_13534(unknown) = ^CallSideEffect : ~m? +# 35| v35_13535(void) = ^IndirectReadSideEffect[-1] : &:r35_13531, ~m? +# 35| mu35_13536(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13531 +# 35| r35_13537(bool) = Constant[0] : +# 35| v35_13538(void) = ConditionalBranch : r35_13537 #-----| False -> Block 968 #-----| True (back edge) -> Block 967 -# 2920| Block 968 -# 2920| r2920_1(glval) = VariableAddress[x967] : -# 2920| mu2920_2(String) = Uninitialized[x967] : &:r2920_1 -# 2920| r2920_3(glval) = FunctionAddress[String] : -# 2920| v2920_4(void) = Call[String] : func:r2920_3, this:r2920_1 -# 2920| mu2920_5(unknown) = ^CallSideEffect : ~m? -# 2920| mu2920_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2920_1 -# 2921| r2921_1(glval) = VariableAddress[x967] : -# 2921| r2921_2(glval) = FunctionAddress[~String] : -# 2921| v2921_3(void) = Call[~String] : func:r2921_2, this:r2921_1 -# 2921| mu2921_4(unknown) = ^CallSideEffect : ~m? -# 2921| v2921_5(void) = ^IndirectReadSideEffect[-1] : &:r2921_1, ~m? -# 2921| mu2921_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2921_1 -# 2921| r2921_7(bool) = Constant[0] : -# 2921| v2921_8(void) = ConditionalBranch : r2921_7 +# 35| Block 968 +# 35| r35_13539(glval) = VariableAddress[x967] : +# 35| mu35_13540(String) = Uninitialized[x967] : &:r35_13539 +# 35| r35_13541(glval) = FunctionAddress[String] : +# 35| v35_13542(void) = Call[String] : func:r35_13541, this:r35_13539 +# 35| mu35_13543(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13544(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13539 +# 35| r35_13545(glval) = VariableAddress[x967] : +# 35| r35_13546(glval) = FunctionAddress[~String] : +# 35| v35_13547(void) = Call[~String] : func:r35_13546, this:r35_13545 +# 35| mu35_13548(unknown) = ^CallSideEffect : ~m? +# 35| v35_13549(void) = ^IndirectReadSideEffect[-1] : &:r35_13545, ~m? +# 35| mu35_13550(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13545 +# 35| r35_13551(bool) = Constant[0] : +# 35| v35_13552(void) = ConditionalBranch : r35_13551 #-----| False -> Block 969 #-----| True (back edge) -> Block 968 -# 2923| Block 969 -# 2923| r2923_1(glval) = VariableAddress[x968] : -# 2923| mu2923_2(String) = Uninitialized[x968] : &:r2923_1 -# 2923| r2923_3(glval) = FunctionAddress[String] : -# 2923| v2923_4(void) = Call[String] : func:r2923_3, this:r2923_1 -# 2923| mu2923_5(unknown) = ^CallSideEffect : ~m? -# 2923| mu2923_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2923_1 -# 2924| r2924_1(glval) = VariableAddress[x968] : -# 2924| r2924_2(glval) = FunctionAddress[~String] : -# 2924| v2924_3(void) = Call[~String] : func:r2924_2, this:r2924_1 -# 2924| mu2924_4(unknown) = ^CallSideEffect : ~m? -# 2924| v2924_5(void) = ^IndirectReadSideEffect[-1] : &:r2924_1, ~m? -# 2924| mu2924_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2924_1 -# 2924| r2924_7(bool) = Constant[0] : -# 2924| v2924_8(void) = ConditionalBranch : r2924_7 +# 35| Block 969 +# 35| r35_13553(glval) = VariableAddress[x968] : +# 35| mu35_13554(String) = Uninitialized[x968] : &:r35_13553 +# 35| r35_13555(glval) = FunctionAddress[String] : +# 35| v35_13556(void) = Call[String] : func:r35_13555, this:r35_13553 +# 35| mu35_13557(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13558(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13553 +# 35| r35_13559(glval) = VariableAddress[x968] : +# 35| r35_13560(glval) = FunctionAddress[~String] : +# 35| v35_13561(void) = Call[~String] : func:r35_13560, this:r35_13559 +# 35| mu35_13562(unknown) = ^CallSideEffect : ~m? +# 35| v35_13563(void) = ^IndirectReadSideEffect[-1] : &:r35_13559, ~m? +# 35| mu35_13564(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13559 +# 35| r35_13565(bool) = Constant[0] : +# 35| v35_13566(void) = ConditionalBranch : r35_13565 #-----| False -> Block 970 #-----| True (back edge) -> Block 969 -# 2926| Block 970 -# 2926| r2926_1(glval) = VariableAddress[x969] : -# 2926| mu2926_2(String) = Uninitialized[x969] : &:r2926_1 -# 2926| r2926_3(glval) = FunctionAddress[String] : -# 2926| v2926_4(void) = Call[String] : func:r2926_3, this:r2926_1 -# 2926| mu2926_5(unknown) = ^CallSideEffect : ~m? -# 2926| mu2926_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2926_1 -# 2927| r2927_1(glval) = VariableAddress[x969] : -# 2927| r2927_2(glval) = FunctionAddress[~String] : -# 2927| v2927_3(void) = Call[~String] : func:r2927_2, this:r2927_1 -# 2927| mu2927_4(unknown) = ^CallSideEffect : ~m? -# 2927| v2927_5(void) = ^IndirectReadSideEffect[-1] : &:r2927_1, ~m? -# 2927| mu2927_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2927_1 -# 2927| r2927_7(bool) = Constant[0] : -# 2927| v2927_8(void) = ConditionalBranch : r2927_7 +# 35| Block 970 +# 35| r35_13567(glval) = VariableAddress[x969] : +# 35| mu35_13568(String) = Uninitialized[x969] : &:r35_13567 +# 35| r35_13569(glval) = FunctionAddress[String] : +# 35| v35_13570(void) = Call[String] : func:r35_13569, this:r35_13567 +# 35| mu35_13571(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13572(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13567 +# 35| r35_13573(glval) = VariableAddress[x969] : +# 35| r35_13574(glval) = FunctionAddress[~String] : +# 35| v35_13575(void) = Call[~String] : func:r35_13574, this:r35_13573 +# 35| mu35_13576(unknown) = ^CallSideEffect : ~m? +# 35| v35_13577(void) = ^IndirectReadSideEffect[-1] : &:r35_13573, ~m? +# 35| mu35_13578(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13573 +# 35| r35_13579(bool) = Constant[0] : +# 35| v35_13580(void) = ConditionalBranch : r35_13579 #-----| False -> Block 971 #-----| True (back edge) -> Block 970 -# 2929| Block 971 -# 2929| r2929_1(glval) = VariableAddress[x970] : -# 2929| mu2929_2(String) = Uninitialized[x970] : &:r2929_1 -# 2929| r2929_3(glval) = FunctionAddress[String] : -# 2929| v2929_4(void) = Call[String] : func:r2929_3, this:r2929_1 -# 2929| mu2929_5(unknown) = ^CallSideEffect : ~m? -# 2929| mu2929_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2929_1 -# 2930| r2930_1(glval) = VariableAddress[x970] : -# 2930| r2930_2(glval) = FunctionAddress[~String] : -# 2930| v2930_3(void) = Call[~String] : func:r2930_2, this:r2930_1 -# 2930| mu2930_4(unknown) = ^CallSideEffect : ~m? -# 2930| v2930_5(void) = ^IndirectReadSideEffect[-1] : &:r2930_1, ~m? -# 2930| mu2930_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2930_1 -# 2930| r2930_7(bool) = Constant[0] : -# 2930| v2930_8(void) = ConditionalBranch : r2930_7 +# 35| Block 971 +# 35| r35_13581(glval) = VariableAddress[x970] : +# 35| mu35_13582(String) = Uninitialized[x970] : &:r35_13581 +# 35| r35_13583(glval) = FunctionAddress[String] : +# 35| v35_13584(void) = Call[String] : func:r35_13583, this:r35_13581 +# 35| mu35_13585(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13586(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13581 +# 35| r35_13587(glval) = VariableAddress[x970] : +# 35| r35_13588(glval) = FunctionAddress[~String] : +# 35| v35_13589(void) = Call[~String] : func:r35_13588, this:r35_13587 +# 35| mu35_13590(unknown) = ^CallSideEffect : ~m? +# 35| v35_13591(void) = ^IndirectReadSideEffect[-1] : &:r35_13587, ~m? +# 35| mu35_13592(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13587 +# 35| r35_13593(bool) = Constant[0] : +# 35| v35_13594(void) = ConditionalBranch : r35_13593 #-----| False -> Block 972 #-----| True (back edge) -> Block 971 -# 2932| Block 972 -# 2932| r2932_1(glval) = VariableAddress[x971] : -# 2932| mu2932_2(String) = Uninitialized[x971] : &:r2932_1 -# 2932| r2932_3(glval) = FunctionAddress[String] : -# 2932| v2932_4(void) = Call[String] : func:r2932_3, this:r2932_1 -# 2932| mu2932_5(unknown) = ^CallSideEffect : ~m? -# 2932| mu2932_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2932_1 -# 2933| r2933_1(glval) = VariableAddress[x971] : -# 2933| r2933_2(glval) = FunctionAddress[~String] : -# 2933| v2933_3(void) = Call[~String] : func:r2933_2, this:r2933_1 -# 2933| mu2933_4(unknown) = ^CallSideEffect : ~m? -# 2933| v2933_5(void) = ^IndirectReadSideEffect[-1] : &:r2933_1, ~m? -# 2933| mu2933_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2933_1 -# 2933| r2933_7(bool) = Constant[0] : -# 2933| v2933_8(void) = ConditionalBranch : r2933_7 +# 35| Block 972 +# 35| r35_13595(glval) = VariableAddress[x971] : +# 35| mu35_13596(String) = Uninitialized[x971] : &:r35_13595 +# 35| r35_13597(glval) = FunctionAddress[String] : +# 35| v35_13598(void) = Call[String] : func:r35_13597, this:r35_13595 +# 35| mu35_13599(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13600(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13595 +# 35| r35_13601(glval) = VariableAddress[x971] : +# 35| r35_13602(glval) = FunctionAddress[~String] : +# 35| v35_13603(void) = Call[~String] : func:r35_13602, this:r35_13601 +# 35| mu35_13604(unknown) = ^CallSideEffect : ~m? +# 35| v35_13605(void) = ^IndirectReadSideEffect[-1] : &:r35_13601, ~m? +# 35| mu35_13606(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13601 +# 35| r35_13607(bool) = Constant[0] : +# 35| v35_13608(void) = ConditionalBranch : r35_13607 #-----| False -> Block 973 #-----| True (back edge) -> Block 972 -# 2935| Block 973 -# 2935| r2935_1(glval) = VariableAddress[x972] : -# 2935| mu2935_2(String) = Uninitialized[x972] : &:r2935_1 -# 2935| r2935_3(glval) = FunctionAddress[String] : -# 2935| v2935_4(void) = Call[String] : func:r2935_3, this:r2935_1 -# 2935| mu2935_5(unknown) = ^CallSideEffect : ~m? -# 2935| mu2935_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2935_1 -# 2936| r2936_1(glval) = VariableAddress[x972] : -# 2936| r2936_2(glval) = FunctionAddress[~String] : -# 2936| v2936_3(void) = Call[~String] : func:r2936_2, this:r2936_1 -# 2936| mu2936_4(unknown) = ^CallSideEffect : ~m? -# 2936| v2936_5(void) = ^IndirectReadSideEffect[-1] : &:r2936_1, ~m? -# 2936| mu2936_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2936_1 -# 2936| r2936_7(bool) = Constant[0] : -# 2936| v2936_8(void) = ConditionalBranch : r2936_7 +# 35| Block 973 +# 35| r35_13609(glval) = VariableAddress[x972] : +# 35| mu35_13610(String) = Uninitialized[x972] : &:r35_13609 +# 35| r35_13611(glval) = FunctionAddress[String] : +# 35| v35_13612(void) = Call[String] : func:r35_13611, this:r35_13609 +# 35| mu35_13613(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13614(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13609 +# 35| r35_13615(glval) = VariableAddress[x972] : +# 35| r35_13616(glval) = FunctionAddress[~String] : +# 35| v35_13617(void) = Call[~String] : func:r35_13616, this:r35_13615 +# 35| mu35_13618(unknown) = ^CallSideEffect : ~m? +# 35| v35_13619(void) = ^IndirectReadSideEffect[-1] : &:r35_13615, ~m? +# 35| mu35_13620(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13615 +# 35| r35_13621(bool) = Constant[0] : +# 35| v35_13622(void) = ConditionalBranch : r35_13621 #-----| False -> Block 974 #-----| True (back edge) -> Block 973 -# 2938| Block 974 -# 2938| r2938_1(glval) = VariableAddress[x973] : -# 2938| mu2938_2(String) = Uninitialized[x973] : &:r2938_1 -# 2938| r2938_3(glval) = FunctionAddress[String] : -# 2938| v2938_4(void) = Call[String] : func:r2938_3, this:r2938_1 -# 2938| mu2938_5(unknown) = ^CallSideEffect : ~m? -# 2938| mu2938_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2938_1 -# 2939| r2939_1(glval) = VariableAddress[x973] : -# 2939| r2939_2(glval) = FunctionAddress[~String] : -# 2939| v2939_3(void) = Call[~String] : func:r2939_2, this:r2939_1 -# 2939| mu2939_4(unknown) = ^CallSideEffect : ~m? -# 2939| v2939_5(void) = ^IndirectReadSideEffect[-1] : &:r2939_1, ~m? -# 2939| mu2939_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2939_1 -# 2939| r2939_7(bool) = Constant[0] : -# 2939| v2939_8(void) = ConditionalBranch : r2939_7 +# 35| Block 974 +# 35| r35_13623(glval) = VariableAddress[x973] : +# 35| mu35_13624(String) = Uninitialized[x973] : &:r35_13623 +# 35| r35_13625(glval) = FunctionAddress[String] : +# 35| v35_13626(void) = Call[String] : func:r35_13625, this:r35_13623 +# 35| mu35_13627(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13628(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13623 +# 35| r35_13629(glval) = VariableAddress[x973] : +# 35| r35_13630(glval) = FunctionAddress[~String] : +# 35| v35_13631(void) = Call[~String] : func:r35_13630, this:r35_13629 +# 35| mu35_13632(unknown) = ^CallSideEffect : ~m? +# 35| v35_13633(void) = ^IndirectReadSideEffect[-1] : &:r35_13629, ~m? +# 35| mu35_13634(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13629 +# 35| r35_13635(bool) = Constant[0] : +# 35| v35_13636(void) = ConditionalBranch : r35_13635 #-----| False -> Block 975 #-----| True (back edge) -> Block 974 -# 2941| Block 975 -# 2941| r2941_1(glval) = VariableAddress[x974] : -# 2941| mu2941_2(String) = Uninitialized[x974] : &:r2941_1 -# 2941| r2941_3(glval) = FunctionAddress[String] : -# 2941| v2941_4(void) = Call[String] : func:r2941_3, this:r2941_1 -# 2941| mu2941_5(unknown) = ^CallSideEffect : ~m? -# 2941| mu2941_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2941_1 -# 2942| r2942_1(glval) = VariableAddress[x974] : -# 2942| r2942_2(glval) = FunctionAddress[~String] : -# 2942| v2942_3(void) = Call[~String] : func:r2942_2, this:r2942_1 -# 2942| mu2942_4(unknown) = ^CallSideEffect : ~m? -# 2942| v2942_5(void) = ^IndirectReadSideEffect[-1] : &:r2942_1, ~m? -# 2942| mu2942_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2942_1 -# 2942| r2942_7(bool) = Constant[0] : -# 2942| v2942_8(void) = ConditionalBranch : r2942_7 +# 35| Block 975 +# 35| r35_13637(glval) = VariableAddress[x974] : +# 35| mu35_13638(String) = Uninitialized[x974] : &:r35_13637 +# 35| r35_13639(glval) = FunctionAddress[String] : +# 35| v35_13640(void) = Call[String] : func:r35_13639, this:r35_13637 +# 35| mu35_13641(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13642(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13637 +# 35| r35_13643(glval) = VariableAddress[x974] : +# 35| r35_13644(glval) = FunctionAddress[~String] : +# 35| v35_13645(void) = Call[~String] : func:r35_13644, this:r35_13643 +# 35| mu35_13646(unknown) = ^CallSideEffect : ~m? +# 35| v35_13647(void) = ^IndirectReadSideEffect[-1] : &:r35_13643, ~m? +# 35| mu35_13648(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13643 +# 35| r35_13649(bool) = Constant[0] : +# 35| v35_13650(void) = ConditionalBranch : r35_13649 #-----| False -> Block 976 #-----| True (back edge) -> Block 975 -# 2944| Block 976 -# 2944| r2944_1(glval) = VariableAddress[x975] : -# 2944| mu2944_2(String) = Uninitialized[x975] : &:r2944_1 -# 2944| r2944_3(glval) = FunctionAddress[String] : -# 2944| v2944_4(void) = Call[String] : func:r2944_3, this:r2944_1 -# 2944| mu2944_5(unknown) = ^CallSideEffect : ~m? -# 2944| mu2944_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2944_1 -# 2945| r2945_1(glval) = VariableAddress[x975] : -# 2945| r2945_2(glval) = FunctionAddress[~String] : -# 2945| v2945_3(void) = Call[~String] : func:r2945_2, this:r2945_1 -# 2945| mu2945_4(unknown) = ^CallSideEffect : ~m? -# 2945| v2945_5(void) = ^IndirectReadSideEffect[-1] : &:r2945_1, ~m? -# 2945| mu2945_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2945_1 -# 2945| r2945_7(bool) = Constant[0] : -# 2945| v2945_8(void) = ConditionalBranch : r2945_7 +# 35| Block 976 +# 35| r35_13651(glval) = VariableAddress[x975] : +# 35| mu35_13652(String) = Uninitialized[x975] : &:r35_13651 +# 35| r35_13653(glval) = FunctionAddress[String] : +# 35| v35_13654(void) = Call[String] : func:r35_13653, this:r35_13651 +# 35| mu35_13655(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13656(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13651 +# 35| r35_13657(glval) = VariableAddress[x975] : +# 35| r35_13658(glval) = FunctionAddress[~String] : +# 35| v35_13659(void) = Call[~String] : func:r35_13658, this:r35_13657 +# 35| mu35_13660(unknown) = ^CallSideEffect : ~m? +# 35| v35_13661(void) = ^IndirectReadSideEffect[-1] : &:r35_13657, ~m? +# 35| mu35_13662(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13657 +# 35| r35_13663(bool) = Constant[0] : +# 35| v35_13664(void) = ConditionalBranch : r35_13663 #-----| False -> Block 977 #-----| True (back edge) -> Block 976 -# 2947| Block 977 -# 2947| r2947_1(glval) = VariableAddress[x976] : -# 2947| mu2947_2(String) = Uninitialized[x976] : &:r2947_1 -# 2947| r2947_3(glval) = FunctionAddress[String] : -# 2947| v2947_4(void) = Call[String] : func:r2947_3, this:r2947_1 -# 2947| mu2947_5(unknown) = ^CallSideEffect : ~m? -# 2947| mu2947_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2947_1 -# 2948| r2948_1(glval) = VariableAddress[x976] : -# 2948| r2948_2(glval) = FunctionAddress[~String] : -# 2948| v2948_3(void) = Call[~String] : func:r2948_2, this:r2948_1 -# 2948| mu2948_4(unknown) = ^CallSideEffect : ~m? -# 2948| v2948_5(void) = ^IndirectReadSideEffect[-1] : &:r2948_1, ~m? -# 2948| mu2948_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2948_1 -# 2948| r2948_7(bool) = Constant[0] : -# 2948| v2948_8(void) = ConditionalBranch : r2948_7 +# 35| Block 977 +# 35| r35_13665(glval) = VariableAddress[x976] : +# 35| mu35_13666(String) = Uninitialized[x976] : &:r35_13665 +# 35| r35_13667(glval) = FunctionAddress[String] : +# 35| v35_13668(void) = Call[String] : func:r35_13667, this:r35_13665 +# 35| mu35_13669(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13670(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13665 +# 35| r35_13671(glval) = VariableAddress[x976] : +# 35| r35_13672(glval) = FunctionAddress[~String] : +# 35| v35_13673(void) = Call[~String] : func:r35_13672, this:r35_13671 +# 35| mu35_13674(unknown) = ^CallSideEffect : ~m? +# 35| v35_13675(void) = ^IndirectReadSideEffect[-1] : &:r35_13671, ~m? +# 35| mu35_13676(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13671 +# 35| r35_13677(bool) = Constant[0] : +# 35| v35_13678(void) = ConditionalBranch : r35_13677 #-----| False -> Block 978 #-----| True (back edge) -> Block 977 -# 2950| Block 978 -# 2950| r2950_1(glval) = VariableAddress[x977] : -# 2950| mu2950_2(String) = Uninitialized[x977] : &:r2950_1 -# 2950| r2950_3(glval) = FunctionAddress[String] : -# 2950| v2950_4(void) = Call[String] : func:r2950_3, this:r2950_1 -# 2950| mu2950_5(unknown) = ^CallSideEffect : ~m? -# 2950| mu2950_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2950_1 -# 2951| r2951_1(glval) = VariableAddress[x977] : -# 2951| r2951_2(glval) = FunctionAddress[~String] : -# 2951| v2951_3(void) = Call[~String] : func:r2951_2, this:r2951_1 -# 2951| mu2951_4(unknown) = ^CallSideEffect : ~m? -# 2951| v2951_5(void) = ^IndirectReadSideEffect[-1] : &:r2951_1, ~m? -# 2951| mu2951_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2951_1 -# 2951| r2951_7(bool) = Constant[0] : -# 2951| v2951_8(void) = ConditionalBranch : r2951_7 +# 35| Block 978 +# 35| r35_13679(glval) = VariableAddress[x977] : +# 35| mu35_13680(String) = Uninitialized[x977] : &:r35_13679 +# 35| r35_13681(glval) = FunctionAddress[String] : +# 35| v35_13682(void) = Call[String] : func:r35_13681, this:r35_13679 +# 35| mu35_13683(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13684(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13679 +# 35| r35_13685(glval) = VariableAddress[x977] : +# 35| r35_13686(glval) = FunctionAddress[~String] : +# 35| v35_13687(void) = Call[~String] : func:r35_13686, this:r35_13685 +# 35| mu35_13688(unknown) = ^CallSideEffect : ~m? +# 35| v35_13689(void) = ^IndirectReadSideEffect[-1] : &:r35_13685, ~m? +# 35| mu35_13690(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13685 +# 35| r35_13691(bool) = Constant[0] : +# 35| v35_13692(void) = ConditionalBranch : r35_13691 #-----| False -> Block 979 #-----| True (back edge) -> Block 978 -# 2953| Block 979 -# 2953| r2953_1(glval) = VariableAddress[x978] : -# 2953| mu2953_2(String) = Uninitialized[x978] : &:r2953_1 -# 2953| r2953_3(glval) = FunctionAddress[String] : -# 2953| v2953_4(void) = Call[String] : func:r2953_3, this:r2953_1 -# 2953| mu2953_5(unknown) = ^CallSideEffect : ~m? -# 2953| mu2953_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2953_1 -# 2954| r2954_1(glval) = VariableAddress[x978] : -# 2954| r2954_2(glval) = FunctionAddress[~String] : -# 2954| v2954_3(void) = Call[~String] : func:r2954_2, this:r2954_1 -# 2954| mu2954_4(unknown) = ^CallSideEffect : ~m? -# 2954| v2954_5(void) = ^IndirectReadSideEffect[-1] : &:r2954_1, ~m? -# 2954| mu2954_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2954_1 -# 2954| r2954_7(bool) = Constant[0] : -# 2954| v2954_8(void) = ConditionalBranch : r2954_7 +# 35| Block 979 +# 35| r35_13693(glval) = VariableAddress[x978] : +# 35| mu35_13694(String) = Uninitialized[x978] : &:r35_13693 +# 35| r35_13695(glval) = FunctionAddress[String] : +# 35| v35_13696(void) = Call[String] : func:r35_13695, this:r35_13693 +# 35| mu35_13697(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13698(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13693 +# 35| r35_13699(glval) = VariableAddress[x978] : +# 35| r35_13700(glval) = FunctionAddress[~String] : +# 35| v35_13701(void) = Call[~String] : func:r35_13700, this:r35_13699 +# 35| mu35_13702(unknown) = ^CallSideEffect : ~m? +# 35| v35_13703(void) = ^IndirectReadSideEffect[-1] : &:r35_13699, ~m? +# 35| mu35_13704(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13699 +# 35| r35_13705(bool) = Constant[0] : +# 35| v35_13706(void) = ConditionalBranch : r35_13705 #-----| False -> Block 980 #-----| True (back edge) -> Block 979 -# 2956| Block 980 -# 2956| r2956_1(glval) = VariableAddress[x979] : -# 2956| mu2956_2(String) = Uninitialized[x979] : &:r2956_1 -# 2956| r2956_3(glval) = FunctionAddress[String] : -# 2956| v2956_4(void) = Call[String] : func:r2956_3, this:r2956_1 -# 2956| mu2956_5(unknown) = ^CallSideEffect : ~m? -# 2956| mu2956_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2956_1 -# 2957| r2957_1(glval) = VariableAddress[x979] : -# 2957| r2957_2(glval) = FunctionAddress[~String] : -# 2957| v2957_3(void) = Call[~String] : func:r2957_2, this:r2957_1 -# 2957| mu2957_4(unknown) = ^CallSideEffect : ~m? -# 2957| v2957_5(void) = ^IndirectReadSideEffect[-1] : &:r2957_1, ~m? -# 2957| mu2957_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2957_1 -# 2957| r2957_7(bool) = Constant[0] : -# 2957| v2957_8(void) = ConditionalBranch : r2957_7 +# 35| Block 980 +# 35| r35_13707(glval) = VariableAddress[x979] : +# 35| mu35_13708(String) = Uninitialized[x979] : &:r35_13707 +# 35| r35_13709(glval) = FunctionAddress[String] : +# 35| v35_13710(void) = Call[String] : func:r35_13709, this:r35_13707 +# 35| mu35_13711(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13712(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13707 +# 35| r35_13713(glval) = VariableAddress[x979] : +# 35| r35_13714(glval) = FunctionAddress[~String] : +# 35| v35_13715(void) = Call[~String] : func:r35_13714, this:r35_13713 +# 35| mu35_13716(unknown) = ^CallSideEffect : ~m? +# 35| v35_13717(void) = ^IndirectReadSideEffect[-1] : &:r35_13713, ~m? +# 35| mu35_13718(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13713 +# 35| r35_13719(bool) = Constant[0] : +# 35| v35_13720(void) = ConditionalBranch : r35_13719 #-----| False -> Block 981 #-----| True (back edge) -> Block 980 -# 2959| Block 981 -# 2959| r2959_1(glval) = VariableAddress[x980] : -# 2959| mu2959_2(String) = Uninitialized[x980] : &:r2959_1 -# 2959| r2959_3(glval) = FunctionAddress[String] : -# 2959| v2959_4(void) = Call[String] : func:r2959_3, this:r2959_1 -# 2959| mu2959_5(unknown) = ^CallSideEffect : ~m? -# 2959| mu2959_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2959_1 -# 2960| r2960_1(glval) = VariableAddress[x980] : -# 2960| r2960_2(glval) = FunctionAddress[~String] : -# 2960| v2960_3(void) = Call[~String] : func:r2960_2, this:r2960_1 -# 2960| mu2960_4(unknown) = ^CallSideEffect : ~m? -# 2960| v2960_5(void) = ^IndirectReadSideEffect[-1] : &:r2960_1, ~m? -# 2960| mu2960_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2960_1 -# 2960| r2960_7(bool) = Constant[0] : -# 2960| v2960_8(void) = ConditionalBranch : r2960_7 +# 35| Block 981 +# 35| r35_13721(glval) = VariableAddress[x980] : +# 35| mu35_13722(String) = Uninitialized[x980] : &:r35_13721 +# 35| r35_13723(glval) = FunctionAddress[String] : +# 35| v35_13724(void) = Call[String] : func:r35_13723, this:r35_13721 +# 35| mu35_13725(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13726(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13721 +# 35| r35_13727(glval) = VariableAddress[x980] : +# 35| r35_13728(glval) = FunctionAddress[~String] : +# 35| v35_13729(void) = Call[~String] : func:r35_13728, this:r35_13727 +# 35| mu35_13730(unknown) = ^CallSideEffect : ~m? +# 35| v35_13731(void) = ^IndirectReadSideEffect[-1] : &:r35_13727, ~m? +# 35| mu35_13732(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13727 +# 35| r35_13733(bool) = Constant[0] : +# 35| v35_13734(void) = ConditionalBranch : r35_13733 #-----| False -> Block 982 #-----| True (back edge) -> Block 981 -# 2962| Block 982 -# 2962| r2962_1(glval) = VariableAddress[x981] : -# 2962| mu2962_2(String) = Uninitialized[x981] : &:r2962_1 -# 2962| r2962_3(glval) = FunctionAddress[String] : -# 2962| v2962_4(void) = Call[String] : func:r2962_3, this:r2962_1 -# 2962| mu2962_5(unknown) = ^CallSideEffect : ~m? -# 2962| mu2962_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2962_1 -# 2963| r2963_1(glval) = VariableAddress[x981] : -# 2963| r2963_2(glval) = FunctionAddress[~String] : -# 2963| v2963_3(void) = Call[~String] : func:r2963_2, this:r2963_1 -# 2963| mu2963_4(unknown) = ^CallSideEffect : ~m? -# 2963| v2963_5(void) = ^IndirectReadSideEffect[-1] : &:r2963_1, ~m? -# 2963| mu2963_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2963_1 -# 2963| r2963_7(bool) = Constant[0] : -# 2963| v2963_8(void) = ConditionalBranch : r2963_7 +# 35| Block 982 +# 35| r35_13735(glval) = VariableAddress[x981] : +# 35| mu35_13736(String) = Uninitialized[x981] : &:r35_13735 +# 35| r35_13737(glval) = FunctionAddress[String] : +# 35| v35_13738(void) = Call[String] : func:r35_13737, this:r35_13735 +# 35| mu35_13739(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13740(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13735 +# 35| r35_13741(glval) = VariableAddress[x981] : +# 35| r35_13742(glval) = FunctionAddress[~String] : +# 35| v35_13743(void) = Call[~String] : func:r35_13742, this:r35_13741 +# 35| mu35_13744(unknown) = ^CallSideEffect : ~m? +# 35| v35_13745(void) = ^IndirectReadSideEffect[-1] : &:r35_13741, ~m? +# 35| mu35_13746(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13741 +# 35| r35_13747(bool) = Constant[0] : +# 35| v35_13748(void) = ConditionalBranch : r35_13747 #-----| False -> Block 983 #-----| True (back edge) -> Block 982 -# 2965| Block 983 -# 2965| r2965_1(glval) = VariableAddress[x982] : -# 2965| mu2965_2(String) = Uninitialized[x982] : &:r2965_1 -# 2965| r2965_3(glval) = FunctionAddress[String] : -# 2965| v2965_4(void) = Call[String] : func:r2965_3, this:r2965_1 -# 2965| mu2965_5(unknown) = ^CallSideEffect : ~m? -# 2965| mu2965_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2965_1 -# 2966| r2966_1(glval) = VariableAddress[x982] : -# 2966| r2966_2(glval) = FunctionAddress[~String] : -# 2966| v2966_3(void) = Call[~String] : func:r2966_2, this:r2966_1 -# 2966| mu2966_4(unknown) = ^CallSideEffect : ~m? -# 2966| v2966_5(void) = ^IndirectReadSideEffect[-1] : &:r2966_1, ~m? -# 2966| mu2966_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2966_1 -# 2966| r2966_7(bool) = Constant[0] : -# 2966| v2966_8(void) = ConditionalBranch : r2966_7 +# 35| Block 983 +# 35| r35_13749(glval) = VariableAddress[x982] : +# 35| mu35_13750(String) = Uninitialized[x982] : &:r35_13749 +# 35| r35_13751(glval) = FunctionAddress[String] : +# 35| v35_13752(void) = Call[String] : func:r35_13751, this:r35_13749 +# 35| mu35_13753(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13754(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13749 +# 35| r35_13755(glval) = VariableAddress[x982] : +# 35| r35_13756(glval) = FunctionAddress[~String] : +# 35| v35_13757(void) = Call[~String] : func:r35_13756, this:r35_13755 +# 35| mu35_13758(unknown) = ^CallSideEffect : ~m? +# 35| v35_13759(void) = ^IndirectReadSideEffect[-1] : &:r35_13755, ~m? +# 35| mu35_13760(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13755 +# 35| r35_13761(bool) = Constant[0] : +# 35| v35_13762(void) = ConditionalBranch : r35_13761 #-----| False -> Block 984 #-----| True (back edge) -> Block 983 -# 2968| Block 984 -# 2968| r2968_1(glval) = VariableAddress[x983] : -# 2968| mu2968_2(String) = Uninitialized[x983] : &:r2968_1 -# 2968| r2968_3(glval) = FunctionAddress[String] : -# 2968| v2968_4(void) = Call[String] : func:r2968_3, this:r2968_1 -# 2968| mu2968_5(unknown) = ^CallSideEffect : ~m? -# 2968| mu2968_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2968_1 -# 2969| r2969_1(glval) = VariableAddress[x983] : -# 2969| r2969_2(glval) = FunctionAddress[~String] : -# 2969| v2969_3(void) = Call[~String] : func:r2969_2, this:r2969_1 -# 2969| mu2969_4(unknown) = ^CallSideEffect : ~m? -# 2969| v2969_5(void) = ^IndirectReadSideEffect[-1] : &:r2969_1, ~m? -# 2969| mu2969_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2969_1 -# 2969| r2969_7(bool) = Constant[0] : -# 2969| v2969_8(void) = ConditionalBranch : r2969_7 +# 35| Block 984 +# 35| r35_13763(glval) = VariableAddress[x983] : +# 35| mu35_13764(String) = Uninitialized[x983] : &:r35_13763 +# 35| r35_13765(glval) = FunctionAddress[String] : +# 35| v35_13766(void) = Call[String] : func:r35_13765, this:r35_13763 +# 35| mu35_13767(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13768(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13763 +# 35| r35_13769(glval) = VariableAddress[x983] : +# 35| r35_13770(glval) = FunctionAddress[~String] : +# 35| v35_13771(void) = Call[~String] : func:r35_13770, this:r35_13769 +# 35| mu35_13772(unknown) = ^CallSideEffect : ~m? +# 35| v35_13773(void) = ^IndirectReadSideEffect[-1] : &:r35_13769, ~m? +# 35| mu35_13774(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13769 +# 35| r35_13775(bool) = Constant[0] : +# 35| v35_13776(void) = ConditionalBranch : r35_13775 #-----| False -> Block 985 #-----| True (back edge) -> Block 984 -# 2971| Block 985 -# 2971| r2971_1(glval) = VariableAddress[x984] : -# 2971| mu2971_2(String) = Uninitialized[x984] : &:r2971_1 -# 2971| r2971_3(glval) = FunctionAddress[String] : -# 2971| v2971_4(void) = Call[String] : func:r2971_3, this:r2971_1 -# 2971| mu2971_5(unknown) = ^CallSideEffect : ~m? -# 2971| mu2971_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2971_1 -# 2972| r2972_1(glval) = VariableAddress[x984] : -# 2972| r2972_2(glval) = FunctionAddress[~String] : -# 2972| v2972_3(void) = Call[~String] : func:r2972_2, this:r2972_1 -# 2972| mu2972_4(unknown) = ^CallSideEffect : ~m? -# 2972| v2972_5(void) = ^IndirectReadSideEffect[-1] : &:r2972_1, ~m? -# 2972| mu2972_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2972_1 -# 2972| r2972_7(bool) = Constant[0] : -# 2972| v2972_8(void) = ConditionalBranch : r2972_7 +# 35| Block 985 +# 35| r35_13777(glval) = VariableAddress[x984] : +# 35| mu35_13778(String) = Uninitialized[x984] : &:r35_13777 +# 35| r35_13779(glval) = FunctionAddress[String] : +# 35| v35_13780(void) = Call[String] : func:r35_13779, this:r35_13777 +# 35| mu35_13781(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13782(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13777 +# 35| r35_13783(glval) = VariableAddress[x984] : +# 35| r35_13784(glval) = FunctionAddress[~String] : +# 35| v35_13785(void) = Call[~String] : func:r35_13784, this:r35_13783 +# 35| mu35_13786(unknown) = ^CallSideEffect : ~m? +# 35| v35_13787(void) = ^IndirectReadSideEffect[-1] : &:r35_13783, ~m? +# 35| mu35_13788(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13783 +# 35| r35_13789(bool) = Constant[0] : +# 35| v35_13790(void) = ConditionalBranch : r35_13789 #-----| False -> Block 986 #-----| True (back edge) -> Block 985 -# 2974| Block 986 -# 2974| r2974_1(glval) = VariableAddress[x985] : -# 2974| mu2974_2(String) = Uninitialized[x985] : &:r2974_1 -# 2974| r2974_3(glval) = FunctionAddress[String] : -# 2974| v2974_4(void) = Call[String] : func:r2974_3, this:r2974_1 -# 2974| mu2974_5(unknown) = ^CallSideEffect : ~m? -# 2974| mu2974_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2974_1 -# 2975| r2975_1(glval) = VariableAddress[x985] : -# 2975| r2975_2(glval) = FunctionAddress[~String] : -# 2975| v2975_3(void) = Call[~String] : func:r2975_2, this:r2975_1 -# 2975| mu2975_4(unknown) = ^CallSideEffect : ~m? -# 2975| v2975_5(void) = ^IndirectReadSideEffect[-1] : &:r2975_1, ~m? -# 2975| mu2975_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2975_1 -# 2975| r2975_7(bool) = Constant[0] : -# 2975| v2975_8(void) = ConditionalBranch : r2975_7 +# 35| Block 986 +# 35| r35_13791(glval) = VariableAddress[x985] : +# 35| mu35_13792(String) = Uninitialized[x985] : &:r35_13791 +# 35| r35_13793(glval) = FunctionAddress[String] : +# 35| v35_13794(void) = Call[String] : func:r35_13793, this:r35_13791 +# 35| mu35_13795(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13796(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13791 +# 35| r35_13797(glval) = VariableAddress[x985] : +# 35| r35_13798(glval) = FunctionAddress[~String] : +# 35| v35_13799(void) = Call[~String] : func:r35_13798, this:r35_13797 +# 35| mu35_13800(unknown) = ^CallSideEffect : ~m? +# 35| v35_13801(void) = ^IndirectReadSideEffect[-1] : &:r35_13797, ~m? +# 35| mu35_13802(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13797 +# 35| r35_13803(bool) = Constant[0] : +# 35| v35_13804(void) = ConditionalBranch : r35_13803 #-----| False -> Block 987 #-----| True (back edge) -> Block 986 -# 2977| Block 987 -# 2977| r2977_1(glval) = VariableAddress[x986] : -# 2977| mu2977_2(String) = Uninitialized[x986] : &:r2977_1 -# 2977| r2977_3(glval) = FunctionAddress[String] : -# 2977| v2977_4(void) = Call[String] : func:r2977_3, this:r2977_1 -# 2977| mu2977_5(unknown) = ^CallSideEffect : ~m? -# 2977| mu2977_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2977_1 -# 2978| r2978_1(glval) = VariableAddress[x986] : -# 2978| r2978_2(glval) = FunctionAddress[~String] : -# 2978| v2978_3(void) = Call[~String] : func:r2978_2, this:r2978_1 -# 2978| mu2978_4(unknown) = ^CallSideEffect : ~m? -# 2978| v2978_5(void) = ^IndirectReadSideEffect[-1] : &:r2978_1, ~m? -# 2978| mu2978_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2978_1 -# 2978| r2978_7(bool) = Constant[0] : -# 2978| v2978_8(void) = ConditionalBranch : r2978_7 +# 35| Block 987 +# 35| r35_13805(glval) = VariableAddress[x986] : +# 35| mu35_13806(String) = Uninitialized[x986] : &:r35_13805 +# 35| r35_13807(glval) = FunctionAddress[String] : +# 35| v35_13808(void) = Call[String] : func:r35_13807, this:r35_13805 +# 35| mu35_13809(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13810(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13805 +# 35| r35_13811(glval) = VariableAddress[x986] : +# 35| r35_13812(glval) = FunctionAddress[~String] : +# 35| v35_13813(void) = Call[~String] : func:r35_13812, this:r35_13811 +# 35| mu35_13814(unknown) = ^CallSideEffect : ~m? +# 35| v35_13815(void) = ^IndirectReadSideEffect[-1] : &:r35_13811, ~m? +# 35| mu35_13816(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13811 +# 35| r35_13817(bool) = Constant[0] : +# 35| v35_13818(void) = ConditionalBranch : r35_13817 #-----| False -> Block 988 #-----| True (back edge) -> Block 987 -# 2980| Block 988 -# 2980| r2980_1(glval) = VariableAddress[x987] : -# 2980| mu2980_2(String) = Uninitialized[x987] : &:r2980_1 -# 2980| r2980_3(glval) = FunctionAddress[String] : -# 2980| v2980_4(void) = Call[String] : func:r2980_3, this:r2980_1 -# 2980| mu2980_5(unknown) = ^CallSideEffect : ~m? -# 2980| mu2980_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2980_1 -# 2981| r2981_1(glval) = VariableAddress[x987] : -# 2981| r2981_2(glval) = FunctionAddress[~String] : -# 2981| v2981_3(void) = Call[~String] : func:r2981_2, this:r2981_1 -# 2981| mu2981_4(unknown) = ^CallSideEffect : ~m? -# 2981| v2981_5(void) = ^IndirectReadSideEffect[-1] : &:r2981_1, ~m? -# 2981| mu2981_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2981_1 -# 2981| r2981_7(bool) = Constant[0] : -# 2981| v2981_8(void) = ConditionalBranch : r2981_7 +# 35| Block 988 +# 35| r35_13819(glval) = VariableAddress[x987] : +# 35| mu35_13820(String) = Uninitialized[x987] : &:r35_13819 +# 35| r35_13821(glval) = FunctionAddress[String] : +# 35| v35_13822(void) = Call[String] : func:r35_13821, this:r35_13819 +# 35| mu35_13823(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13824(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13819 +# 35| r35_13825(glval) = VariableAddress[x987] : +# 35| r35_13826(glval) = FunctionAddress[~String] : +# 35| v35_13827(void) = Call[~String] : func:r35_13826, this:r35_13825 +# 35| mu35_13828(unknown) = ^CallSideEffect : ~m? +# 35| v35_13829(void) = ^IndirectReadSideEffect[-1] : &:r35_13825, ~m? +# 35| mu35_13830(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13825 +# 35| r35_13831(bool) = Constant[0] : +# 35| v35_13832(void) = ConditionalBranch : r35_13831 #-----| False -> Block 989 #-----| True (back edge) -> Block 988 -# 2983| Block 989 -# 2983| r2983_1(glval) = VariableAddress[x988] : -# 2983| mu2983_2(String) = Uninitialized[x988] : &:r2983_1 -# 2983| r2983_3(glval) = FunctionAddress[String] : -# 2983| v2983_4(void) = Call[String] : func:r2983_3, this:r2983_1 -# 2983| mu2983_5(unknown) = ^CallSideEffect : ~m? -# 2983| mu2983_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2983_1 -# 2984| r2984_1(glval) = VariableAddress[x988] : -# 2984| r2984_2(glval) = FunctionAddress[~String] : -# 2984| v2984_3(void) = Call[~String] : func:r2984_2, this:r2984_1 -# 2984| mu2984_4(unknown) = ^CallSideEffect : ~m? -# 2984| v2984_5(void) = ^IndirectReadSideEffect[-1] : &:r2984_1, ~m? -# 2984| mu2984_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2984_1 -# 2984| r2984_7(bool) = Constant[0] : -# 2984| v2984_8(void) = ConditionalBranch : r2984_7 +# 35| Block 989 +# 35| r35_13833(glval) = VariableAddress[x988] : +# 35| mu35_13834(String) = Uninitialized[x988] : &:r35_13833 +# 35| r35_13835(glval) = FunctionAddress[String] : +# 35| v35_13836(void) = Call[String] : func:r35_13835, this:r35_13833 +# 35| mu35_13837(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13838(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13833 +# 35| r35_13839(glval) = VariableAddress[x988] : +# 35| r35_13840(glval) = FunctionAddress[~String] : +# 35| v35_13841(void) = Call[~String] : func:r35_13840, this:r35_13839 +# 35| mu35_13842(unknown) = ^CallSideEffect : ~m? +# 35| v35_13843(void) = ^IndirectReadSideEffect[-1] : &:r35_13839, ~m? +# 35| mu35_13844(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13839 +# 35| r35_13845(bool) = Constant[0] : +# 35| v35_13846(void) = ConditionalBranch : r35_13845 #-----| False -> Block 990 #-----| True (back edge) -> Block 989 -# 2986| Block 990 -# 2986| r2986_1(glval) = VariableAddress[x989] : -# 2986| mu2986_2(String) = Uninitialized[x989] : &:r2986_1 -# 2986| r2986_3(glval) = FunctionAddress[String] : -# 2986| v2986_4(void) = Call[String] : func:r2986_3, this:r2986_1 -# 2986| mu2986_5(unknown) = ^CallSideEffect : ~m? -# 2986| mu2986_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2986_1 -# 2987| r2987_1(glval) = VariableAddress[x989] : -# 2987| r2987_2(glval) = FunctionAddress[~String] : -# 2987| v2987_3(void) = Call[~String] : func:r2987_2, this:r2987_1 -# 2987| mu2987_4(unknown) = ^CallSideEffect : ~m? -# 2987| v2987_5(void) = ^IndirectReadSideEffect[-1] : &:r2987_1, ~m? -# 2987| mu2987_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2987_1 -# 2987| r2987_7(bool) = Constant[0] : -# 2987| v2987_8(void) = ConditionalBranch : r2987_7 +# 35| Block 990 +# 35| r35_13847(glval) = VariableAddress[x989] : +# 35| mu35_13848(String) = Uninitialized[x989] : &:r35_13847 +# 35| r35_13849(glval) = FunctionAddress[String] : +# 35| v35_13850(void) = Call[String] : func:r35_13849, this:r35_13847 +# 35| mu35_13851(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13852(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13847 +# 35| r35_13853(glval) = VariableAddress[x989] : +# 35| r35_13854(glval) = FunctionAddress[~String] : +# 35| v35_13855(void) = Call[~String] : func:r35_13854, this:r35_13853 +# 35| mu35_13856(unknown) = ^CallSideEffect : ~m? +# 35| v35_13857(void) = ^IndirectReadSideEffect[-1] : &:r35_13853, ~m? +# 35| mu35_13858(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13853 +# 35| r35_13859(bool) = Constant[0] : +# 35| v35_13860(void) = ConditionalBranch : r35_13859 #-----| False -> Block 991 #-----| True (back edge) -> Block 990 -# 2989| Block 991 -# 2989| r2989_1(glval) = VariableAddress[x990] : -# 2989| mu2989_2(String) = Uninitialized[x990] : &:r2989_1 -# 2989| r2989_3(glval) = FunctionAddress[String] : -# 2989| v2989_4(void) = Call[String] : func:r2989_3, this:r2989_1 -# 2989| mu2989_5(unknown) = ^CallSideEffect : ~m? -# 2989| mu2989_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2989_1 -# 2990| r2990_1(glval) = VariableAddress[x990] : -# 2990| r2990_2(glval) = FunctionAddress[~String] : -# 2990| v2990_3(void) = Call[~String] : func:r2990_2, this:r2990_1 -# 2990| mu2990_4(unknown) = ^CallSideEffect : ~m? -# 2990| v2990_5(void) = ^IndirectReadSideEffect[-1] : &:r2990_1, ~m? -# 2990| mu2990_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2990_1 -# 2990| r2990_7(bool) = Constant[0] : -# 2990| v2990_8(void) = ConditionalBranch : r2990_7 +# 35| Block 991 +# 35| r35_13861(glval) = VariableAddress[x990] : +# 35| mu35_13862(String) = Uninitialized[x990] : &:r35_13861 +# 35| r35_13863(glval) = FunctionAddress[String] : +# 35| v35_13864(void) = Call[String] : func:r35_13863, this:r35_13861 +# 35| mu35_13865(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13866(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13861 +# 35| r35_13867(glval) = VariableAddress[x990] : +# 35| r35_13868(glval) = FunctionAddress[~String] : +# 35| v35_13869(void) = Call[~String] : func:r35_13868, this:r35_13867 +# 35| mu35_13870(unknown) = ^CallSideEffect : ~m? +# 35| v35_13871(void) = ^IndirectReadSideEffect[-1] : &:r35_13867, ~m? +# 35| mu35_13872(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13867 +# 35| r35_13873(bool) = Constant[0] : +# 35| v35_13874(void) = ConditionalBranch : r35_13873 #-----| False -> Block 992 #-----| True (back edge) -> Block 991 -# 2992| Block 992 -# 2992| r2992_1(glval) = VariableAddress[x991] : -# 2992| mu2992_2(String) = Uninitialized[x991] : &:r2992_1 -# 2992| r2992_3(glval) = FunctionAddress[String] : -# 2992| v2992_4(void) = Call[String] : func:r2992_3, this:r2992_1 -# 2992| mu2992_5(unknown) = ^CallSideEffect : ~m? -# 2992| mu2992_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2992_1 -# 2993| r2993_1(glval) = VariableAddress[x991] : -# 2993| r2993_2(glval) = FunctionAddress[~String] : -# 2993| v2993_3(void) = Call[~String] : func:r2993_2, this:r2993_1 -# 2993| mu2993_4(unknown) = ^CallSideEffect : ~m? -# 2993| v2993_5(void) = ^IndirectReadSideEffect[-1] : &:r2993_1, ~m? -# 2993| mu2993_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2993_1 -# 2993| r2993_7(bool) = Constant[0] : -# 2993| v2993_8(void) = ConditionalBranch : r2993_7 +# 35| Block 992 +# 35| r35_13875(glval) = VariableAddress[x991] : +# 35| mu35_13876(String) = Uninitialized[x991] : &:r35_13875 +# 35| r35_13877(glval) = FunctionAddress[String] : +# 35| v35_13878(void) = Call[String] : func:r35_13877, this:r35_13875 +# 35| mu35_13879(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13880(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13875 +# 35| r35_13881(glval) = VariableAddress[x991] : +# 35| r35_13882(glval) = FunctionAddress[~String] : +# 35| v35_13883(void) = Call[~String] : func:r35_13882, this:r35_13881 +# 35| mu35_13884(unknown) = ^CallSideEffect : ~m? +# 35| v35_13885(void) = ^IndirectReadSideEffect[-1] : &:r35_13881, ~m? +# 35| mu35_13886(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13881 +# 35| r35_13887(bool) = Constant[0] : +# 35| v35_13888(void) = ConditionalBranch : r35_13887 #-----| False -> Block 993 #-----| True (back edge) -> Block 992 -# 2995| Block 993 -# 2995| r2995_1(glval) = VariableAddress[x992] : -# 2995| mu2995_2(String) = Uninitialized[x992] : &:r2995_1 -# 2995| r2995_3(glval) = FunctionAddress[String] : -# 2995| v2995_4(void) = Call[String] : func:r2995_3, this:r2995_1 -# 2995| mu2995_5(unknown) = ^CallSideEffect : ~m? -# 2995| mu2995_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2995_1 -# 2996| r2996_1(glval) = VariableAddress[x992] : -# 2996| r2996_2(glval) = FunctionAddress[~String] : -# 2996| v2996_3(void) = Call[~String] : func:r2996_2, this:r2996_1 -# 2996| mu2996_4(unknown) = ^CallSideEffect : ~m? -# 2996| v2996_5(void) = ^IndirectReadSideEffect[-1] : &:r2996_1, ~m? -# 2996| mu2996_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2996_1 -# 2996| r2996_7(bool) = Constant[0] : -# 2996| v2996_8(void) = ConditionalBranch : r2996_7 +# 35| Block 993 +# 35| r35_13889(glval) = VariableAddress[x992] : +# 35| mu35_13890(String) = Uninitialized[x992] : &:r35_13889 +# 35| r35_13891(glval) = FunctionAddress[String] : +# 35| v35_13892(void) = Call[String] : func:r35_13891, this:r35_13889 +# 35| mu35_13893(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13894(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13889 +# 35| r35_13895(glval) = VariableAddress[x992] : +# 35| r35_13896(glval) = FunctionAddress[~String] : +# 35| v35_13897(void) = Call[~String] : func:r35_13896, this:r35_13895 +# 35| mu35_13898(unknown) = ^CallSideEffect : ~m? +# 35| v35_13899(void) = ^IndirectReadSideEffect[-1] : &:r35_13895, ~m? +# 35| mu35_13900(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13895 +# 35| r35_13901(bool) = Constant[0] : +# 35| v35_13902(void) = ConditionalBranch : r35_13901 #-----| False -> Block 994 #-----| True (back edge) -> Block 993 -# 2998| Block 994 -# 2998| r2998_1(glval) = VariableAddress[x993] : -# 2998| mu2998_2(String) = Uninitialized[x993] : &:r2998_1 -# 2998| r2998_3(glval) = FunctionAddress[String] : -# 2998| v2998_4(void) = Call[String] : func:r2998_3, this:r2998_1 -# 2998| mu2998_5(unknown) = ^CallSideEffect : ~m? -# 2998| mu2998_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2998_1 -# 2999| r2999_1(glval) = VariableAddress[x993] : -# 2999| r2999_2(glval) = FunctionAddress[~String] : -# 2999| v2999_3(void) = Call[~String] : func:r2999_2, this:r2999_1 -# 2999| mu2999_4(unknown) = ^CallSideEffect : ~m? -# 2999| v2999_5(void) = ^IndirectReadSideEffect[-1] : &:r2999_1, ~m? -# 2999| mu2999_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2999_1 -# 2999| r2999_7(bool) = Constant[0] : -# 2999| v2999_8(void) = ConditionalBranch : r2999_7 +# 35| Block 994 +# 35| r35_13903(glval) = VariableAddress[x993] : +# 35| mu35_13904(String) = Uninitialized[x993] : &:r35_13903 +# 35| r35_13905(glval) = FunctionAddress[String] : +# 35| v35_13906(void) = Call[String] : func:r35_13905, this:r35_13903 +# 35| mu35_13907(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13908(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13903 +# 35| r35_13909(glval) = VariableAddress[x993] : +# 35| r35_13910(glval) = FunctionAddress[~String] : +# 35| v35_13911(void) = Call[~String] : func:r35_13910, this:r35_13909 +# 35| mu35_13912(unknown) = ^CallSideEffect : ~m? +# 35| v35_13913(void) = ^IndirectReadSideEffect[-1] : &:r35_13909, ~m? +# 35| mu35_13914(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13909 +# 35| r35_13915(bool) = Constant[0] : +# 35| v35_13916(void) = ConditionalBranch : r35_13915 #-----| False -> Block 995 #-----| True (back edge) -> Block 994 -# 3001| Block 995 -# 3001| r3001_1(glval) = VariableAddress[x994] : -# 3001| mu3001_2(String) = Uninitialized[x994] : &:r3001_1 -# 3001| r3001_3(glval) = FunctionAddress[String] : -# 3001| v3001_4(void) = Call[String] : func:r3001_3, this:r3001_1 -# 3001| mu3001_5(unknown) = ^CallSideEffect : ~m? -# 3001| mu3001_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3001_1 -# 3002| r3002_1(glval) = VariableAddress[x994] : -# 3002| r3002_2(glval) = FunctionAddress[~String] : -# 3002| v3002_3(void) = Call[~String] : func:r3002_2, this:r3002_1 -# 3002| mu3002_4(unknown) = ^CallSideEffect : ~m? -# 3002| v3002_5(void) = ^IndirectReadSideEffect[-1] : &:r3002_1, ~m? -# 3002| mu3002_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3002_1 -# 3002| r3002_7(bool) = Constant[0] : -# 3002| v3002_8(void) = ConditionalBranch : r3002_7 +# 35| Block 995 +# 35| r35_13917(glval) = VariableAddress[x994] : +# 35| mu35_13918(String) = Uninitialized[x994] : &:r35_13917 +# 35| r35_13919(glval) = FunctionAddress[String] : +# 35| v35_13920(void) = Call[String] : func:r35_13919, this:r35_13917 +# 35| mu35_13921(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13922(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13917 +# 35| r35_13923(glval) = VariableAddress[x994] : +# 35| r35_13924(glval) = FunctionAddress[~String] : +# 35| v35_13925(void) = Call[~String] : func:r35_13924, this:r35_13923 +# 35| mu35_13926(unknown) = ^CallSideEffect : ~m? +# 35| v35_13927(void) = ^IndirectReadSideEffect[-1] : &:r35_13923, ~m? +# 35| mu35_13928(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13923 +# 35| r35_13929(bool) = Constant[0] : +# 35| v35_13930(void) = ConditionalBranch : r35_13929 #-----| False -> Block 996 #-----| True (back edge) -> Block 995 -# 3004| Block 996 -# 3004| r3004_1(glval) = VariableAddress[x995] : -# 3004| mu3004_2(String) = Uninitialized[x995] : &:r3004_1 -# 3004| r3004_3(glval) = FunctionAddress[String] : -# 3004| v3004_4(void) = Call[String] : func:r3004_3, this:r3004_1 -# 3004| mu3004_5(unknown) = ^CallSideEffect : ~m? -# 3004| mu3004_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3004_1 -# 3005| r3005_1(glval) = VariableAddress[x995] : -# 3005| r3005_2(glval) = FunctionAddress[~String] : -# 3005| v3005_3(void) = Call[~String] : func:r3005_2, this:r3005_1 -# 3005| mu3005_4(unknown) = ^CallSideEffect : ~m? -# 3005| v3005_5(void) = ^IndirectReadSideEffect[-1] : &:r3005_1, ~m? -# 3005| mu3005_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3005_1 -# 3005| r3005_7(bool) = Constant[0] : -# 3005| v3005_8(void) = ConditionalBranch : r3005_7 +# 35| Block 996 +# 35| r35_13931(glval) = VariableAddress[x995] : +# 35| mu35_13932(String) = Uninitialized[x995] : &:r35_13931 +# 35| r35_13933(glval) = FunctionAddress[String] : +# 35| v35_13934(void) = Call[String] : func:r35_13933, this:r35_13931 +# 35| mu35_13935(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13936(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13931 +# 35| r35_13937(glval) = VariableAddress[x995] : +# 35| r35_13938(glval) = FunctionAddress[~String] : +# 35| v35_13939(void) = Call[~String] : func:r35_13938, this:r35_13937 +# 35| mu35_13940(unknown) = ^CallSideEffect : ~m? +# 35| v35_13941(void) = ^IndirectReadSideEffect[-1] : &:r35_13937, ~m? +# 35| mu35_13942(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13937 +# 35| r35_13943(bool) = Constant[0] : +# 35| v35_13944(void) = ConditionalBranch : r35_13943 #-----| False -> Block 997 #-----| True (back edge) -> Block 996 -# 3007| Block 997 -# 3007| r3007_1(glval) = VariableAddress[x996] : -# 3007| mu3007_2(String) = Uninitialized[x996] : &:r3007_1 -# 3007| r3007_3(glval) = FunctionAddress[String] : -# 3007| v3007_4(void) = Call[String] : func:r3007_3, this:r3007_1 -# 3007| mu3007_5(unknown) = ^CallSideEffect : ~m? -# 3007| mu3007_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3007_1 -# 3008| r3008_1(glval) = VariableAddress[x996] : -# 3008| r3008_2(glval) = FunctionAddress[~String] : -# 3008| v3008_3(void) = Call[~String] : func:r3008_2, this:r3008_1 -# 3008| mu3008_4(unknown) = ^CallSideEffect : ~m? -# 3008| v3008_5(void) = ^IndirectReadSideEffect[-1] : &:r3008_1, ~m? -# 3008| mu3008_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3008_1 -# 3008| r3008_7(bool) = Constant[0] : -# 3008| v3008_8(void) = ConditionalBranch : r3008_7 +# 35| Block 997 +# 35| r35_13945(glval) = VariableAddress[x996] : +# 35| mu35_13946(String) = Uninitialized[x996] : &:r35_13945 +# 35| r35_13947(glval) = FunctionAddress[String] : +# 35| v35_13948(void) = Call[String] : func:r35_13947, this:r35_13945 +# 35| mu35_13949(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13950(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13945 +# 35| r35_13951(glval) = VariableAddress[x996] : +# 35| r35_13952(glval) = FunctionAddress[~String] : +# 35| v35_13953(void) = Call[~String] : func:r35_13952, this:r35_13951 +# 35| mu35_13954(unknown) = ^CallSideEffect : ~m? +# 35| v35_13955(void) = ^IndirectReadSideEffect[-1] : &:r35_13951, ~m? +# 35| mu35_13956(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13951 +# 35| r35_13957(bool) = Constant[0] : +# 35| v35_13958(void) = ConditionalBranch : r35_13957 #-----| False -> Block 998 #-----| True (back edge) -> Block 997 -# 3010| Block 998 -# 3010| r3010_1(glval) = VariableAddress[x997] : -# 3010| mu3010_2(String) = Uninitialized[x997] : &:r3010_1 -# 3010| r3010_3(glval) = FunctionAddress[String] : -# 3010| v3010_4(void) = Call[String] : func:r3010_3, this:r3010_1 -# 3010| mu3010_5(unknown) = ^CallSideEffect : ~m? -# 3010| mu3010_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3010_1 -# 3011| r3011_1(glval) = VariableAddress[x997] : -# 3011| r3011_2(glval) = FunctionAddress[~String] : -# 3011| v3011_3(void) = Call[~String] : func:r3011_2, this:r3011_1 -# 3011| mu3011_4(unknown) = ^CallSideEffect : ~m? -# 3011| v3011_5(void) = ^IndirectReadSideEffect[-1] : &:r3011_1, ~m? -# 3011| mu3011_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3011_1 -# 3011| r3011_7(bool) = Constant[0] : -# 3011| v3011_8(void) = ConditionalBranch : r3011_7 +# 35| Block 998 +# 35| r35_13959(glval) = VariableAddress[x997] : +# 35| mu35_13960(String) = Uninitialized[x997] : &:r35_13959 +# 35| r35_13961(glval) = FunctionAddress[String] : +# 35| v35_13962(void) = Call[String] : func:r35_13961, this:r35_13959 +# 35| mu35_13963(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13964(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13959 +# 35| r35_13965(glval) = VariableAddress[x997] : +# 35| r35_13966(glval) = FunctionAddress[~String] : +# 35| v35_13967(void) = Call[~String] : func:r35_13966, this:r35_13965 +# 35| mu35_13968(unknown) = ^CallSideEffect : ~m? +# 35| v35_13969(void) = ^IndirectReadSideEffect[-1] : &:r35_13965, ~m? +# 35| mu35_13970(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13965 +# 35| r35_13971(bool) = Constant[0] : +# 35| v35_13972(void) = ConditionalBranch : r35_13971 #-----| False -> Block 999 #-----| True (back edge) -> Block 998 -# 3013| Block 999 -# 3013| r3013_1(glval) = VariableAddress[x998] : -# 3013| mu3013_2(String) = Uninitialized[x998] : &:r3013_1 -# 3013| r3013_3(glval) = FunctionAddress[String] : -# 3013| v3013_4(void) = Call[String] : func:r3013_3, this:r3013_1 -# 3013| mu3013_5(unknown) = ^CallSideEffect : ~m? -# 3013| mu3013_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3013_1 -# 3014| r3014_1(glval) = VariableAddress[x998] : -# 3014| r3014_2(glval) = FunctionAddress[~String] : -# 3014| v3014_3(void) = Call[~String] : func:r3014_2, this:r3014_1 -# 3014| mu3014_4(unknown) = ^CallSideEffect : ~m? -# 3014| v3014_5(void) = ^IndirectReadSideEffect[-1] : &:r3014_1, ~m? -# 3014| mu3014_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3014_1 -# 3014| r3014_7(bool) = Constant[0] : -# 3014| v3014_8(void) = ConditionalBranch : r3014_7 +# 35| Block 999 +# 35| r35_13973(glval) = VariableAddress[x998] : +# 35| mu35_13974(String) = Uninitialized[x998] : &:r35_13973 +# 35| r35_13975(glval) = FunctionAddress[String] : +# 35| v35_13976(void) = Call[String] : func:r35_13975, this:r35_13973 +# 35| mu35_13977(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13978(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13973 +# 35| r35_13979(glval) = VariableAddress[x998] : +# 35| r35_13980(glval) = FunctionAddress[~String] : +# 35| v35_13981(void) = Call[~String] : func:r35_13980, this:r35_13979 +# 35| mu35_13982(unknown) = ^CallSideEffect : ~m? +# 35| v35_13983(void) = ^IndirectReadSideEffect[-1] : &:r35_13979, ~m? +# 35| mu35_13984(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13979 +# 35| r35_13985(bool) = Constant[0] : +# 35| v35_13986(void) = ConditionalBranch : r35_13985 #-----| False -> Block 1000 #-----| True (back edge) -> Block 999 -# 3016| Block 1000 -# 3016| r3016_1(glval) = VariableAddress[x999] : -# 3016| mu3016_2(String) = Uninitialized[x999] : &:r3016_1 -# 3016| r3016_3(glval) = FunctionAddress[String] : -# 3016| v3016_4(void) = Call[String] : func:r3016_3, this:r3016_1 -# 3016| mu3016_5(unknown) = ^CallSideEffect : ~m? -# 3016| mu3016_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3016_1 -# 3017| r3017_1(glval) = VariableAddress[x999] : -# 3017| r3017_2(glval) = FunctionAddress[~String] : -# 3017| v3017_3(void) = Call[~String] : func:r3017_2, this:r3017_1 -# 3017| mu3017_4(unknown) = ^CallSideEffect : ~m? -# 3017| v3017_5(void) = ^IndirectReadSideEffect[-1] : &:r3017_1, ~m? -# 3017| mu3017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3017_1 -# 3017| r3017_7(bool) = Constant[0] : -# 3017| v3017_8(void) = ConditionalBranch : r3017_7 +# 35| Block 1000 +# 35| r35_13987(glval) = VariableAddress[x999] : +# 35| mu35_13988(String) = Uninitialized[x999] : &:r35_13987 +# 35| r35_13989(glval) = FunctionAddress[String] : +# 35| v35_13990(void) = Call[String] : func:r35_13989, this:r35_13987 +# 35| mu35_13991(unknown) = ^CallSideEffect : ~m? +# 35| mu35_13992(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13987 +# 35| r35_13993(glval) = VariableAddress[x999] : +# 35| r35_13994(glval) = FunctionAddress[~String] : +# 35| v35_13995(void) = Call[~String] : func:r35_13994, this:r35_13993 +# 35| mu35_13996(unknown) = ^CallSideEffect : ~m? +# 35| v35_13997(void) = ^IndirectReadSideEffect[-1] : &:r35_13993, ~m? +# 35| mu35_13998(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_13993 +# 35| r35_13999(bool) = Constant[0] : +# 35| v35_14000(void) = ConditionalBranch : r35_13999 #-----| False -> Block 1001 #-----| True (back edge) -> Block 1000 -# 3019| Block 1001 -# 3019| r3019_1(glval) = VariableAddress[x1000] : -# 3019| mu3019_2(String) = Uninitialized[x1000] : &:r3019_1 -# 3019| r3019_3(glval) = FunctionAddress[String] : -# 3019| v3019_4(void) = Call[String] : func:r3019_3, this:r3019_1 -# 3019| mu3019_5(unknown) = ^CallSideEffect : ~m? -# 3019| mu3019_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3019_1 -# 3020| r3020_1(glval) = VariableAddress[x1000] : -# 3020| r3020_2(glval) = FunctionAddress[~String] : -# 3020| v3020_3(void) = Call[~String] : func:r3020_2, this:r3020_1 -# 3020| mu3020_4(unknown) = ^CallSideEffect : ~m? -# 3020| v3020_5(void) = ^IndirectReadSideEffect[-1] : &:r3020_1, ~m? -# 3020| mu3020_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3020_1 -# 3020| r3020_7(bool) = Constant[0] : -# 3020| v3020_8(void) = ConditionalBranch : r3020_7 +# 35| Block 1001 +# 35| r35_14001(glval) = VariableAddress[x1000] : +# 35| mu35_14002(String) = Uninitialized[x1000] : &:r35_14001 +# 35| r35_14003(glval) = FunctionAddress[String] : +# 35| v35_14004(void) = Call[String] : func:r35_14003, this:r35_14001 +# 35| mu35_14005(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14006(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14001 +# 35| r35_14007(glval) = VariableAddress[x1000] : +# 35| r35_14008(glval) = FunctionAddress[~String] : +# 35| v35_14009(void) = Call[~String] : func:r35_14008, this:r35_14007 +# 35| mu35_14010(unknown) = ^CallSideEffect : ~m? +# 35| v35_14011(void) = ^IndirectReadSideEffect[-1] : &:r35_14007, ~m? +# 35| mu35_14012(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14007 +# 35| r35_14013(bool) = Constant[0] : +# 35| v35_14014(void) = ConditionalBranch : r35_14013 #-----| False -> Block 1002 #-----| True (back edge) -> Block 1001 -# 3022| Block 1002 -# 3022| r3022_1(glval) = VariableAddress[x1001] : -# 3022| mu3022_2(String) = Uninitialized[x1001] : &:r3022_1 -# 3022| r3022_3(glval) = FunctionAddress[String] : -# 3022| v3022_4(void) = Call[String] : func:r3022_3, this:r3022_1 -# 3022| mu3022_5(unknown) = ^CallSideEffect : ~m? -# 3022| mu3022_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3022_1 -# 3023| r3023_1(glval) = VariableAddress[x1001] : -# 3023| r3023_2(glval) = FunctionAddress[~String] : -# 3023| v3023_3(void) = Call[~String] : func:r3023_2, this:r3023_1 -# 3023| mu3023_4(unknown) = ^CallSideEffect : ~m? -# 3023| v3023_5(void) = ^IndirectReadSideEffect[-1] : &:r3023_1, ~m? -# 3023| mu3023_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3023_1 -# 3023| r3023_7(bool) = Constant[0] : -# 3023| v3023_8(void) = ConditionalBranch : r3023_7 +# 35| Block 1002 +# 35| r35_14015(glval) = VariableAddress[x1001] : +# 35| mu35_14016(String) = Uninitialized[x1001] : &:r35_14015 +# 35| r35_14017(glval) = FunctionAddress[String] : +# 35| v35_14018(void) = Call[String] : func:r35_14017, this:r35_14015 +# 35| mu35_14019(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14020(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14015 +# 35| r35_14021(glval) = VariableAddress[x1001] : +# 35| r35_14022(glval) = FunctionAddress[~String] : +# 35| v35_14023(void) = Call[~String] : func:r35_14022, this:r35_14021 +# 35| mu35_14024(unknown) = ^CallSideEffect : ~m? +# 35| v35_14025(void) = ^IndirectReadSideEffect[-1] : &:r35_14021, ~m? +# 35| mu35_14026(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14021 +# 35| r35_14027(bool) = Constant[0] : +# 35| v35_14028(void) = ConditionalBranch : r35_14027 #-----| False -> Block 1003 #-----| True (back edge) -> Block 1002 -# 3025| Block 1003 -# 3025| r3025_1(glval) = VariableAddress[x1002] : -# 3025| mu3025_2(String) = Uninitialized[x1002] : &:r3025_1 -# 3025| r3025_3(glval) = FunctionAddress[String] : -# 3025| v3025_4(void) = Call[String] : func:r3025_3, this:r3025_1 -# 3025| mu3025_5(unknown) = ^CallSideEffect : ~m? -# 3025| mu3025_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3025_1 -# 3026| r3026_1(glval) = VariableAddress[x1002] : -# 3026| r3026_2(glval) = FunctionAddress[~String] : -# 3026| v3026_3(void) = Call[~String] : func:r3026_2, this:r3026_1 -# 3026| mu3026_4(unknown) = ^CallSideEffect : ~m? -# 3026| v3026_5(void) = ^IndirectReadSideEffect[-1] : &:r3026_1, ~m? -# 3026| mu3026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3026_1 -# 3026| r3026_7(bool) = Constant[0] : -# 3026| v3026_8(void) = ConditionalBranch : r3026_7 +# 35| Block 1003 +# 35| r35_14029(glval) = VariableAddress[x1002] : +# 35| mu35_14030(String) = Uninitialized[x1002] : &:r35_14029 +# 35| r35_14031(glval) = FunctionAddress[String] : +# 35| v35_14032(void) = Call[String] : func:r35_14031, this:r35_14029 +# 35| mu35_14033(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14034(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14029 +# 35| r35_14035(glval) = VariableAddress[x1002] : +# 35| r35_14036(glval) = FunctionAddress[~String] : +# 35| v35_14037(void) = Call[~String] : func:r35_14036, this:r35_14035 +# 35| mu35_14038(unknown) = ^CallSideEffect : ~m? +# 35| v35_14039(void) = ^IndirectReadSideEffect[-1] : &:r35_14035, ~m? +# 35| mu35_14040(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14035 +# 35| r35_14041(bool) = Constant[0] : +# 35| v35_14042(void) = ConditionalBranch : r35_14041 #-----| False -> Block 1004 #-----| True (back edge) -> Block 1003 -# 3028| Block 1004 -# 3028| r3028_1(glval) = VariableAddress[x1003] : -# 3028| mu3028_2(String) = Uninitialized[x1003] : &:r3028_1 -# 3028| r3028_3(glval) = FunctionAddress[String] : -# 3028| v3028_4(void) = Call[String] : func:r3028_3, this:r3028_1 -# 3028| mu3028_5(unknown) = ^CallSideEffect : ~m? -# 3028| mu3028_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3028_1 -# 3029| r3029_1(glval) = VariableAddress[x1003] : -# 3029| r3029_2(glval) = FunctionAddress[~String] : -# 3029| v3029_3(void) = Call[~String] : func:r3029_2, this:r3029_1 -# 3029| mu3029_4(unknown) = ^CallSideEffect : ~m? -# 3029| v3029_5(void) = ^IndirectReadSideEffect[-1] : &:r3029_1, ~m? -# 3029| mu3029_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3029_1 -# 3029| r3029_7(bool) = Constant[0] : -# 3029| v3029_8(void) = ConditionalBranch : r3029_7 +# 35| Block 1004 +# 35| r35_14043(glval) = VariableAddress[x1003] : +# 35| mu35_14044(String) = Uninitialized[x1003] : &:r35_14043 +# 35| r35_14045(glval) = FunctionAddress[String] : +# 35| v35_14046(void) = Call[String] : func:r35_14045, this:r35_14043 +# 35| mu35_14047(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14048(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14043 +# 35| r35_14049(glval) = VariableAddress[x1003] : +# 35| r35_14050(glval) = FunctionAddress[~String] : +# 35| v35_14051(void) = Call[~String] : func:r35_14050, this:r35_14049 +# 35| mu35_14052(unknown) = ^CallSideEffect : ~m? +# 35| v35_14053(void) = ^IndirectReadSideEffect[-1] : &:r35_14049, ~m? +# 35| mu35_14054(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14049 +# 35| r35_14055(bool) = Constant[0] : +# 35| v35_14056(void) = ConditionalBranch : r35_14055 #-----| False -> Block 1005 #-----| True (back edge) -> Block 1004 -# 3031| Block 1005 -# 3031| r3031_1(glval) = VariableAddress[x1004] : -# 3031| mu3031_2(String) = Uninitialized[x1004] : &:r3031_1 -# 3031| r3031_3(glval) = FunctionAddress[String] : -# 3031| v3031_4(void) = Call[String] : func:r3031_3, this:r3031_1 -# 3031| mu3031_5(unknown) = ^CallSideEffect : ~m? -# 3031| mu3031_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3031_1 -# 3032| r3032_1(glval) = VariableAddress[x1004] : -# 3032| r3032_2(glval) = FunctionAddress[~String] : -# 3032| v3032_3(void) = Call[~String] : func:r3032_2, this:r3032_1 -# 3032| mu3032_4(unknown) = ^CallSideEffect : ~m? -# 3032| v3032_5(void) = ^IndirectReadSideEffect[-1] : &:r3032_1, ~m? -# 3032| mu3032_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3032_1 -# 3032| r3032_7(bool) = Constant[0] : -# 3032| v3032_8(void) = ConditionalBranch : r3032_7 +# 35| Block 1005 +# 35| r35_14057(glval) = VariableAddress[x1004] : +# 35| mu35_14058(String) = Uninitialized[x1004] : &:r35_14057 +# 35| r35_14059(glval) = FunctionAddress[String] : +# 35| v35_14060(void) = Call[String] : func:r35_14059, this:r35_14057 +# 35| mu35_14061(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14062(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14057 +# 35| r35_14063(glval) = VariableAddress[x1004] : +# 35| r35_14064(glval) = FunctionAddress[~String] : +# 35| v35_14065(void) = Call[~String] : func:r35_14064, this:r35_14063 +# 35| mu35_14066(unknown) = ^CallSideEffect : ~m? +# 35| v35_14067(void) = ^IndirectReadSideEffect[-1] : &:r35_14063, ~m? +# 35| mu35_14068(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14063 +# 35| r35_14069(bool) = Constant[0] : +# 35| v35_14070(void) = ConditionalBranch : r35_14069 #-----| False -> Block 1006 #-----| True (back edge) -> Block 1005 -# 3034| Block 1006 -# 3034| r3034_1(glval) = VariableAddress[x1005] : -# 3034| mu3034_2(String) = Uninitialized[x1005] : &:r3034_1 -# 3034| r3034_3(glval) = FunctionAddress[String] : -# 3034| v3034_4(void) = Call[String] : func:r3034_3, this:r3034_1 -# 3034| mu3034_5(unknown) = ^CallSideEffect : ~m? -# 3034| mu3034_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3034_1 -# 3035| r3035_1(glval) = VariableAddress[x1005] : -# 3035| r3035_2(glval) = FunctionAddress[~String] : -# 3035| v3035_3(void) = Call[~String] : func:r3035_2, this:r3035_1 -# 3035| mu3035_4(unknown) = ^CallSideEffect : ~m? -# 3035| v3035_5(void) = ^IndirectReadSideEffect[-1] : &:r3035_1, ~m? -# 3035| mu3035_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3035_1 -# 3035| r3035_7(bool) = Constant[0] : -# 3035| v3035_8(void) = ConditionalBranch : r3035_7 +# 35| Block 1006 +# 35| r35_14071(glval) = VariableAddress[x1005] : +# 35| mu35_14072(String) = Uninitialized[x1005] : &:r35_14071 +# 35| r35_14073(glval) = FunctionAddress[String] : +# 35| v35_14074(void) = Call[String] : func:r35_14073, this:r35_14071 +# 35| mu35_14075(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14076(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14071 +# 35| r35_14077(glval) = VariableAddress[x1005] : +# 35| r35_14078(glval) = FunctionAddress[~String] : +# 35| v35_14079(void) = Call[~String] : func:r35_14078, this:r35_14077 +# 35| mu35_14080(unknown) = ^CallSideEffect : ~m? +# 35| v35_14081(void) = ^IndirectReadSideEffect[-1] : &:r35_14077, ~m? +# 35| mu35_14082(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14077 +# 35| r35_14083(bool) = Constant[0] : +# 35| v35_14084(void) = ConditionalBranch : r35_14083 #-----| False -> Block 1007 #-----| True (back edge) -> Block 1006 -# 3037| Block 1007 -# 3037| r3037_1(glval) = VariableAddress[x1006] : -# 3037| mu3037_2(String) = Uninitialized[x1006] : &:r3037_1 -# 3037| r3037_3(glval) = FunctionAddress[String] : -# 3037| v3037_4(void) = Call[String] : func:r3037_3, this:r3037_1 -# 3037| mu3037_5(unknown) = ^CallSideEffect : ~m? -# 3037| mu3037_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3037_1 -# 3038| r3038_1(glval) = VariableAddress[x1006] : -# 3038| r3038_2(glval) = FunctionAddress[~String] : -# 3038| v3038_3(void) = Call[~String] : func:r3038_2, this:r3038_1 -# 3038| mu3038_4(unknown) = ^CallSideEffect : ~m? -# 3038| v3038_5(void) = ^IndirectReadSideEffect[-1] : &:r3038_1, ~m? -# 3038| mu3038_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3038_1 -# 3038| r3038_7(bool) = Constant[0] : -# 3038| v3038_8(void) = ConditionalBranch : r3038_7 +# 35| Block 1007 +# 35| r35_14085(glval) = VariableAddress[x1006] : +# 35| mu35_14086(String) = Uninitialized[x1006] : &:r35_14085 +# 35| r35_14087(glval) = FunctionAddress[String] : +# 35| v35_14088(void) = Call[String] : func:r35_14087, this:r35_14085 +# 35| mu35_14089(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14090(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14085 +# 35| r35_14091(glval) = VariableAddress[x1006] : +# 35| r35_14092(glval) = FunctionAddress[~String] : +# 35| v35_14093(void) = Call[~String] : func:r35_14092, this:r35_14091 +# 35| mu35_14094(unknown) = ^CallSideEffect : ~m? +# 35| v35_14095(void) = ^IndirectReadSideEffect[-1] : &:r35_14091, ~m? +# 35| mu35_14096(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14091 +# 35| r35_14097(bool) = Constant[0] : +# 35| v35_14098(void) = ConditionalBranch : r35_14097 #-----| False -> Block 1008 #-----| True (back edge) -> Block 1007 -# 3040| Block 1008 -# 3040| r3040_1(glval) = VariableAddress[x1007] : -# 3040| mu3040_2(String) = Uninitialized[x1007] : &:r3040_1 -# 3040| r3040_3(glval) = FunctionAddress[String] : -# 3040| v3040_4(void) = Call[String] : func:r3040_3, this:r3040_1 -# 3040| mu3040_5(unknown) = ^CallSideEffect : ~m? -# 3040| mu3040_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3040_1 -# 3041| r3041_1(glval) = VariableAddress[x1007] : -# 3041| r3041_2(glval) = FunctionAddress[~String] : -# 3041| v3041_3(void) = Call[~String] : func:r3041_2, this:r3041_1 -# 3041| mu3041_4(unknown) = ^CallSideEffect : ~m? -# 3041| v3041_5(void) = ^IndirectReadSideEffect[-1] : &:r3041_1, ~m? -# 3041| mu3041_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3041_1 -# 3041| r3041_7(bool) = Constant[0] : -# 3041| v3041_8(void) = ConditionalBranch : r3041_7 +# 35| Block 1008 +# 35| r35_14099(glval) = VariableAddress[x1007] : +# 35| mu35_14100(String) = Uninitialized[x1007] : &:r35_14099 +# 35| r35_14101(glval) = FunctionAddress[String] : +# 35| v35_14102(void) = Call[String] : func:r35_14101, this:r35_14099 +# 35| mu35_14103(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14104(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14099 +# 35| r35_14105(glval) = VariableAddress[x1007] : +# 35| r35_14106(glval) = FunctionAddress[~String] : +# 35| v35_14107(void) = Call[~String] : func:r35_14106, this:r35_14105 +# 35| mu35_14108(unknown) = ^CallSideEffect : ~m? +# 35| v35_14109(void) = ^IndirectReadSideEffect[-1] : &:r35_14105, ~m? +# 35| mu35_14110(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14105 +# 35| r35_14111(bool) = Constant[0] : +# 35| v35_14112(void) = ConditionalBranch : r35_14111 #-----| False -> Block 1009 #-----| True (back edge) -> Block 1008 -# 3043| Block 1009 -# 3043| r3043_1(glval) = VariableAddress[x1008] : -# 3043| mu3043_2(String) = Uninitialized[x1008] : &:r3043_1 -# 3043| r3043_3(glval) = FunctionAddress[String] : -# 3043| v3043_4(void) = Call[String] : func:r3043_3, this:r3043_1 -# 3043| mu3043_5(unknown) = ^CallSideEffect : ~m? -# 3043| mu3043_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3043_1 -# 3044| r3044_1(glval) = VariableAddress[x1008] : -# 3044| r3044_2(glval) = FunctionAddress[~String] : -# 3044| v3044_3(void) = Call[~String] : func:r3044_2, this:r3044_1 -# 3044| mu3044_4(unknown) = ^CallSideEffect : ~m? -# 3044| v3044_5(void) = ^IndirectReadSideEffect[-1] : &:r3044_1, ~m? -# 3044| mu3044_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3044_1 -# 3044| r3044_7(bool) = Constant[0] : -# 3044| v3044_8(void) = ConditionalBranch : r3044_7 +# 35| Block 1009 +# 35| r35_14113(glval) = VariableAddress[x1008] : +# 35| mu35_14114(String) = Uninitialized[x1008] : &:r35_14113 +# 35| r35_14115(glval) = FunctionAddress[String] : +# 35| v35_14116(void) = Call[String] : func:r35_14115, this:r35_14113 +# 35| mu35_14117(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14118(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14113 +# 35| r35_14119(glval) = VariableAddress[x1008] : +# 35| r35_14120(glval) = FunctionAddress[~String] : +# 35| v35_14121(void) = Call[~String] : func:r35_14120, this:r35_14119 +# 35| mu35_14122(unknown) = ^CallSideEffect : ~m? +# 35| v35_14123(void) = ^IndirectReadSideEffect[-1] : &:r35_14119, ~m? +# 35| mu35_14124(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14119 +# 35| r35_14125(bool) = Constant[0] : +# 35| v35_14126(void) = ConditionalBranch : r35_14125 #-----| False -> Block 1010 #-----| True (back edge) -> Block 1009 -# 3046| Block 1010 -# 3046| r3046_1(glval) = VariableAddress[x1009] : -# 3046| mu3046_2(String) = Uninitialized[x1009] : &:r3046_1 -# 3046| r3046_3(glval) = FunctionAddress[String] : -# 3046| v3046_4(void) = Call[String] : func:r3046_3, this:r3046_1 -# 3046| mu3046_5(unknown) = ^CallSideEffect : ~m? -# 3046| mu3046_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3046_1 -# 3047| r3047_1(glval) = VariableAddress[x1009] : -# 3047| r3047_2(glval) = FunctionAddress[~String] : -# 3047| v3047_3(void) = Call[~String] : func:r3047_2, this:r3047_1 -# 3047| mu3047_4(unknown) = ^CallSideEffect : ~m? -# 3047| v3047_5(void) = ^IndirectReadSideEffect[-1] : &:r3047_1, ~m? -# 3047| mu3047_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3047_1 -# 3047| r3047_7(bool) = Constant[0] : -# 3047| v3047_8(void) = ConditionalBranch : r3047_7 +# 35| Block 1010 +# 35| r35_14127(glval) = VariableAddress[x1009] : +# 35| mu35_14128(String) = Uninitialized[x1009] : &:r35_14127 +# 35| r35_14129(glval) = FunctionAddress[String] : +# 35| v35_14130(void) = Call[String] : func:r35_14129, this:r35_14127 +# 35| mu35_14131(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14132(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14127 +# 35| r35_14133(glval) = VariableAddress[x1009] : +# 35| r35_14134(glval) = FunctionAddress[~String] : +# 35| v35_14135(void) = Call[~String] : func:r35_14134, this:r35_14133 +# 35| mu35_14136(unknown) = ^CallSideEffect : ~m? +# 35| v35_14137(void) = ^IndirectReadSideEffect[-1] : &:r35_14133, ~m? +# 35| mu35_14138(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14133 +# 35| r35_14139(bool) = Constant[0] : +# 35| v35_14140(void) = ConditionalBranch : r35_14139 #-----| False -> Block 1011 #-----| True (back edge) -> Block 1010 -# 3049| Block 1011 -# 3049| r3049_1(glval) = VariableAddress[x1010] : -# 3049| mu3049_2(String) = Uninitialized[x1010] : &:r3049_1 -# 3049| r3049_3(glval) = FunctionAddress[String] : -# 3049| v3049_4(void) = Call[String] : func:r3049_3, this:r3049_1 -# 3049| mu3049_5(unknown) = ^CallSideEffect : ~m? -# 3049| mu3049_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3049_1 -# 3050| r3050_1(glval) = VariableAddress[x1010] : -# 3050| r3050_2(glval) = FunctionAddress[~String] : -# 3050| v3050_3(void) = Call[~String] : func:r3050_2, this:r3050_1 -# 3050| mu3050_4(unknown) = ^CallSideEffect : ~m? -# 3050| v3050_5(void) = ^IndirectReadSideEffect[-1] : &:r3050_1, ~m? -# 3050| mu3050_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3050_1 -# 3050| r3050_7(bool) = Constant[0] : -# 3050| v3050_8(void) = ConditionalBranch : r3050_7 +# 35| Block 1011 +# 35| r35_14141(glval) = VariableAddress[x1010] : +# 35| mu35_14142(String) = Uninitialized[x1010] : &:r35_14141 +# 35| r35_14143(glval) = FunctionAddress[String] : +# 35| v35_14144(void) = Call[String] : func:r35_14143, this:r35_14141 +# 35| mu35_14145(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14146(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14141 +# 35| r35_14147(glval) = VariableAddress[x1010] : +# 35| r35_14148(glval) = FunctionAddress[~String] : +# 35| v35_14149(void) = Call[~String] : func:r35_14148, this:r35_14147 +# 35| mu35_14150(unknown) = ^CallSideEffect : ~m? +# 35| v35_14151(void) = ^IndirectReadSideEffect[-1] : &:r35_14147, ~m? +# 35| mu35_14152(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14147 +# 35| r35_14153(bool) = Constant[0] : +# 35| v35_14154(void) = ConditionalBranch : r35_14153 #-----| False -> Block 1012 #-----| True (back edge) -> Block 1011 -# 3052| Block 1012 -# 3052| r3052_1(glval) = VariableAddress[x1011] : -# 3052| mu3052_2(String) = Uninitialized[x1011] : &:r3052_1 -# 3052| r3052_3(glval) = FunctionAddress[String] : -# 3052| v3052_4(void) = Call[String] : func:r3052_3, this:r3052_1 -# 3052| mu3052_5(unknown) = ^CallSideEffect : ~m? -# 3052| mu3052_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3052_1 -# 3053| r3053_1(glval) = VariableAddress[x1011] : -# 3053| r3053_2(glval) = FunctionAddress[~String] : -# 3053| v3053_3(void) = Call[~String] : func:r3053_2, this:r3053_1 -# 3053| mu3053_4(unknown) = ^CallSideEffect : ~m? -# 3053| v3053_5(void) = ^IndirectReadSideEffect[-1] : &:r3053_1, ~m? -# 3053| mu3053_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3053_1 -# 3053| r3053_7(bool) = Constant[0] : -# 3053| v3053_8(void) = ConditionalBranch : r3053_7 +# 35| Block 1012 +# 35| r35_14155(glval) = VariableAddress[x1011] : +# 35| mu35_14156(String) = Uninitialized[x1011] : &:r35_14155 +# 35| r35_14157(glval) = FunctionAddress[String] : +# 35| v35_14158(void) = Call[String] : func:r35_14157, this:r35_14155 +# 35| mu35_14159(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14160(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14155 +# 35| r35_14161(glval) = VariableAddress[x1011] : +# 35| r35_14162(glval) = FunctionAddress[~String] : +# 35| v35_14163(void) = Call[~String] : func:r35_14162, this:r35_14161 +# 35| mu35_14164(unknown) = ^CallSideEffect : ~m? +# 35| v35_14165(void) = ^IndirectReadSideEffect[-1] : &:r35_14161, ~m? +# 35| mu35_14166(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14161 +# 35| r35_14167(bool) = Constant[0] : +# 35| v35_14168(void) = ConditionalBranch : r35_14167 #-----| False -> Block 1013 #-----| True (back edge) -> Block 1012 -# 3055| Block 1013 -# 3055| r3055_1(glval) = VariableAddress[x1012] : -# 3055| mu3055_2(String) = Uninitialized[x1012] : &:r3055_1 -# 3055| r3055_3(glval) = FunctionAddress[String] : -# 3055| v3055_4(void) = Call[String] : func:r3055_3, this:r3055_1 -# 3055| mu3055_5(unknown) = ^CallSideEffect : ~m? -# 3055| mu3055_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3055_1 -# 3056| r3056_1(glval) = VariableAddress[x1012] : -# 3056| r3056_2(glval) = FunctionAddress[~String] : -# 3056| v3056_3(void) = Call[~String] : func:r3056_2, this:r3056_1 -# 3056| mu3056_4(unknown) = ^CallSideEffect : ~m? -# 3056| v3056_5(void) = ^IndirectReadSideEffect[-1] : &:r3056_1, ~m? -# 3056| mu3056_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3056_1 -# 3056| r3056_7(bool) = Constant[0] : -# 3056| v3056_8(void) = ConditionalBranch : r3056_7 +# 35| Block 1013 +# 35| r35_14169(glval) = VariableAddress[x1012] : +# 35| mu35_14170(String) = Uninitialized[x1012] : &:r35_14169 +# 35| r35_14171(glval) = FunctionAddress[String] : +# 35| v35_14172(void) = Call[String] : func:r35_14171, this:r35_14169 +# 35| mu35_14173(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14174(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14169 +# 35| r35_14175(glval) = VariableAddress[x1012] : +# 35| r35_14176(glval) = FunctionAddress[~String] : +# 35| v35_14177(void) = Call[~String] : func:r35_14176, this:r35_14175 +# 35| mu35_14178(unknown) = ^CallSideEffect : ~m? +# 35| v35_14179(void) = ^IndirectReadSideEffect[-1] : &:r35_14175, ~m? +# 35| mu35_14180(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14175 +# 35| r35_14181(bool) = Constant[0] : +# 35| v35_14182(void) = ConditionalBranch : r35_14181 #-----| False -> Block 1014 #-----| True (back edge) -> Block 1013 -# 3058| Block 1014 -# 3058| r3058_1(glval) = VariableAddress[x1013] : -# 3058| mu3058_2(String) = Uninitialized[x1013] : &:r3058_1 -# 3058| r3058_3(glval) = FunctionAddress[String] : -# 3058| v3058_4(void) = Call[String] : func:r3058_3, this:r3058_1 -# 3058| mu3058_5(unknown) = ^CallSideEffect : ~m? -# 3058| mu3058_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3058_1 -# 3059| r3059_1(glval) = VariableAddress[x1013] : -# 3059| r3059_2(glval) = FunctionAddress[~String] : -# 3059| v3059_3(void) = Call[~String] : func:r3059_2, this:r3059_1 -# 3059| mu3059_4(unknown) = ^CallSideEffect : ~m? -# 3059| v3059_5(void) = ^IndirectReadSideEffect[-1] : &:r3059_1, ~m? -# 3059| mu3059_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3059_1 -# 3059| r3059_7(bool) = Constant[0] : -# 3059| v3059_8(void) = ConditionalBranch : r3059_7 +# 35| Block 1014 +# 35| r35_14183(glval) = VariableAddress[x1013] : +# 35| mu35_14184(String) = Uninitialized[x1013] : &:r35_14183 +# 35| r35_14185(glval) = FunctionAddress[String] : +# 35| v35_14186(void) = Call[String] : func:r35_14185, this:r35_14183 +# 35| mu35_14187(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14188(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14183 +# 35| r35_14189(glval) = VariableAddress[x1013] : +# 35| r35_14190(glval) = FunctionAddress[~String] : +# 35| v35_14191(void) = Call[~String] : func:r35_14190, this:r35_14189 +# 35| mu35_14192(unknown) = ^CallSideEffect : ~m? +# 35| v35_14193(void) = ^IndirectReadSideEffect[-1] : &:r35_14189, ~m? +# 35| mu35_14194(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14189 +# 35| r35_14195(bool) = Constant[0] : +# 35| v35_14196(void) = ConditionalBranch : r35_14195 #-----| False -> Block 1015 #-----| True (back edge) -> Block 1014 -# 3061| Block 1015 -# 3061| r3061_1(glval) = VariableAddress[x1014] : -# 3061| mu3061_2(String) = Uninitialized[x1014] : &:r3061_1 -# 3061| r3061_3(glval) = FunctionAddress[String] : -# 3061| v3061_4(void) = Call[String] : func:r3061_3, this:r3061_1 -# 3061| mu3061_5(unknown) = ^CallSideEffect : ~m? -# 3061| mu3061_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3061_1 -# 3062| r3062_1(glval) = VariableAddress[x1014] : -# 3062| r3062_2(glval) = FunctionAddress[~String] : -# 3062| v3062_3(void) = Call[~String] : func:r3062_2, this:r3062_1 -# 3062| mu3062_4(unknown) = ^CallSideEffect : ~m? -# 3062| v3062_5(void) = ^IndirectReadSideEffect[-1] : &:r3062_1, ~m? -# 3062| mu3062_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3062_1 -# 3062| r3062_7(bool) = Constant[0] : -# 3062| v3062_8(void) = ConditionalBranch : r3062_7 +# 35| Block 1015 +# 35| r35_14197(glval) = VariableAddress[x1014] : +# 35| mu35_14198(String) = Uninitialized[x1014] : &:r35_14197 +# 35| r35_14199(glval) = FunctionAddress[String] : +# 35| v35_14200(void) = Call[String] : func:r35_14199, this:r35_14197 +# 35| mu35_14201(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14202(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14197 +# 35| r35_14203(glval) = VariableAddress[x1014] : +# 35| r35_14204(glval) = FunctionAddress[~String] : +# 35| v35_14205(void) = Call[~String] : func:r35_14204, this:r35_14203 +# 35| mu35_14206(unknown) = ^CallSideEffect : ~m? +# 35| v35_14207(void) = ^IndirectReadSideEffect[-1] : &:r35_14203, ~m? +# 35| mu35_14208(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14203 +# 35| r35_14209(bool) = Constant[0] : +# 35| v35_14210(void) = ConditionalBranch : r35_14209 #-----| False -> Block 1016 #-----| True (back edge) -> Block 1015 -# 3064| Block 1016 -# 3064| r3064_1(glval) = VariableAddress[x1015] : -# 3064| mu3064_2(String) = Uninitialized[x1015] : &:r3064_1 -# 3064| r3064_3(glval) = FunctionAddress[String] : -# 3064| v3064_4(void) = Call[String] : func:r3064_3, this:r3064_1 -# 3064| mu3064_5(unknown) = ^CallSideEffect : ~m? -# 3064| mu3064_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3064_1 -# 3065| r3065_1(glval) = VariableAddress[x1015] : -# 3065| r3065_2(glval) = FunctionAddress[~String] : -# 3065| v3065_3(void) = Call[~String] : func:r3065_2, this:r3065_1 -# 3065| mu3065_4(unknown) = ^CallSideEffect : ~m? -# 3065| v3065_5(void) = ^IndirectReadSideEffect[-1] : &:r3065_1, ~m? -# 3065| mu3065_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3065_1 -# 3065| r3065_7(bool) = Constant[0] : -# 3065| v3065_8(void) = ConditionalBranch : r3065_7 +# 35| Block 1016 +# 35| r35_14211(glval) = VariableAddress[x1015] : +# 35| mu35_14212(String) = Uninitialized[x1015] : &:r35_14211 +# 35| r35_14213(glval) = FunctionAddress[String] : +# 35| v35_14214(void) = Call[String] : func:r35_14213, this:r35_14211 +# 35| mu35_14215(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14216(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14211 +# 35| r35_14217(glval) = VariableAddress[x1015] : +# 35| r35_14218(glval) = FunctionAddress[~String] : +# 35| v35_14219(void) = Call[~String] : func:r35_14218, this:r35_14217 +# 35| mu35_14220(unknown) = ^CallSideEffect : ~m? +# 35| v35_14221(void) = ^IndirectReadSideEffect[-1] : &:r35_14217, ~m? +# 35| mu35_14222(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14217 +# 35| r35_14223(bool) = Constant[0] : +# 35| v35_14224(void) = ConditionalBranch : r35_14223 #-----| False -> Block 1017 #-----| True (back edge) -> Block 1016 -# 3067| Block 1017 -# 3067| r3067_1(glval) = VariableAddress[x1016] : -# 3067| mu3067_2(String) = Uninitialized[x1016] : &:r3067_1 -# 3067| r3067_3(glval) = FunctionAddress[String] : -# 3067| v3067_4(void) = Call[String] : func:r3067_3, this:r3067_1 -# 3067| mu3067_5(unknown) = ^CallSideEffect : ~m? -# 3067| mu3067_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3067_1 -# 3068| r3068_1(glval) = VariableAddress[x1016] : -# 3068| r3068_2(glval) = FunctionAddress[~String] : -# 3068| v3068_3(void) = Call[~String] : func:r3068_2, this:r3068_1 -# 3068| mu3068_4(unknown) = ^CallSideEffect : ~m? -# 3068| v3068_5(void) = ^IndirectReadSideEffect[-1] : &:r3068_1, ~m? -# 3068| mu3068_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3068_1 -# 3068| r3068_7(bool) = Constant[0] : -# 3068| v3068_8(void) = ConditionalBranch : r3068_7 +# 35| Block 1017 +# 35| r35_14225(glval) = VariableAddress[x1016] : +# 35| mu35_14226(String) = Uninitialized[x1016] : &:r35_14225 +# 35| r35_14227(glval) = FunctionAddress[String] : +# 35| v35_14228(void) = Call[String] : func:r35_14227, this:r35_14225 +# 35| mu35_14229(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14230(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14225 +# 35| r35_14231(glval) = VariableAddress[x1016] : +# 35| r35_14232(glval) = FunctionAddress[~String] : +# 35| v35_14233(void) = Call[~String] : func:r35_14232, this:r35_14231 +# 35| mu35_14234(unknown) = ^CallSideEffect : ~m? +# 35| v35_14235(void) = ^IndirectReadSideEffect[-1] : &:r35_14231, ~m? +# 35| mu35_14236(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14231 +# 35| r35_14237(bool) = Constant[0] : +# 35| v35_14238(void) = ConditionalBranch : r35_14237 #-----| False -> Block 1018 #-----| True (back edge) -> Block 1017 -# 3070| Block 1018 -# 3070| r3070_1(glval) = VariableAddress[x1017] : -# 3070| mu3070_2(String) = Uninitialized[x1017] : &:r3070_1 -# 3070| r3070_3(glval) = FunctionAddress[String] : -# 3070| v3070_4(void) = Call[String] : func:r3070_3, this:r3070_1 -# 3070| mu3070_5(unknown) = ^CallSideEffect : ~m? -# 3070| mu3070_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3070_1 -# 3071| r3071_1(glval) = VariableAddress[x1017] : -# 3071| r3071_2(glval) = FunctionAddress[~String] : -# 3071| v3071_3(void) = Call[~String] : func:r3071_2, this:r3071_1 -# 3071| mu3071_4(unknown) = ^CallSideEffect : ~m? -# 3071| v3071_5(void) = ^IndirectReadSideEffect[-1] : &:r3071_1, ~m? -# 3071| mu3071_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3071_1 -# 3071| r3071_7(bool) = Constant[0] : -# 3071| v3071_8(void) = ConditionalBranch : r3071_7 +# 35| Block 1018 +# 35| r35_14239(glval) = VariableAddress[x1017] : +# 35| mu35_14240(String) = Uninitialized[x1017] : &:r35_14239 +# 35| r35_14241(glval) = FunctionAddress[String] : +# 35| v35_14242(void) = Call[String] : func:r35_14241, this:r35_14239 +# 35| mu35_14243(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14244(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14239 +# 35| r35_14245(glval) = VariableAddress[x1017] : +# 35| r35_14246(glval) = FunctionAddress[~String] : +# 35| v35_14247(void) = Call[~String] : func:r35_14246, this:r35_14245 +# 35| mu35_14248(unknown) = ^CallSideEffect : ~m? +# 35| v35_14249(void) = ^IndirectReadSideEffect[-1] : &:r35_14245, ~m? +# 35| mu35_14250(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14245 +# 35| r35_14251(bool) = Constant[0] : +# 35| v35_14252(void) = ConditionalBranch : r35_14251 #-----| False -> Block 1019 #-----| True (back edge) -> Block 1018 -# 3073| Block 1019 -# 3073| r3073_1(glval) = VariableAddress[x1018] : -# 3073| mu3073_2(String) = Uninitialized[x1018] : &:r3073_1 -# 3073| r3073_3(glval) = FunctionAddress[String] : -# 3073| v3073_4(void) = Call[String] : func:r3073_3, this:r3073_1 -# 3073| mu3073_5(unknown) = ^CallSideEffect : ~m? -# 3073| mu3073_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3073_1 -# 3074| r3074_1(glval) = VariableAddress[x1018] : -# 3074| r3074_2(glval) = FunctionAddress[~String] : -# 3074| v3074_3(void) = Call[~String] : func:r3074_2, this:r3074_1 -# 3074| mu3074_4(unknown) = ^CallSideEffect : ~m? -# 3074| v3074_5(void) = ^IndirectReadSideEffect[-1] : &:r3074_1, ~m? -# 3074| mu3074_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3074_1 -# 3074| r3074_7(bool) = Constant[0] : -# 3074| v3074_8(void) = ConditionalBranch : r3074_7 +# 35| Block 1019 +# 35| r35_14253(glval) = VariableAddress[x1018] : +# 35| mu35_14254(String) = Uninitialized[x1018] : &:r35_14253 +# 35| r35_14255(glval) = FunctionAddress[String] : +# 35| v35_14256(void) = Call[String] : func:r35_14255, this:r35_14253 +# 35| mu35_14257(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14258(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14253 +# 35| r35_14259(glval) = VariableAddress[x1018] : +# 35| r35_14260(glval) = FunctionAddress[~String] : +# 35| v35_14261(void) = Call[~String] : func:r35_14260, this:r35_14259 +# 35| mu35_14262(unknown) = ^CallSideEffect : ~m? +# 35| v35_14263(void) = ^IndirectReadSideEffect[-1] : &:r35_14259, ~m? +# 35| mu35_14264(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14259 +# 35| r35_14265(bool) = Constant[0] : +# 35| v35_14266(void) = ConditionalBranch : r35_14265 #-----| False -> Block 1020 #-----| True (back edge) -> Block 1019 -# 3076| Block 1020 -# 3076| r3076_1(glval) = VariableAddress[x1019] : -# 3076| mu3076_2(String) = Uninitialized[x1019] : &:r3076_1 -# 3076| r3076_3(glval) = FunctionAddress[String] : -# 3076| v3076_4(void) = Call[String] : func:r3076_3, this:r3076_1 -# 3076| mu3076_5(unknown) = ^CallSideEffect : ~m? -# 3076| mu3076_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3076_1 -# 3077| r3077_1(glval) = VariableAddress[x1019] : -# 3077| r3077_2(glval) = FunctionAddress[~String] : -# 3077| v3077_3(void) = Call[~String] : func:r3077_2, this:r3077_1 -# 3077| mu3077_4(unknown) = ^CallSideEffect : ~m? -# 3077| v3077_5(void) = ^IndirectReadSideEffect[-1] : &:r3077_1, ~m? -# 3077| mu3077_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3077_1 -# 3077| r3077_7(bool) = Constant[0] : -# 3077| v3077_8(void) = ConditionalBranch : r3077_7 +# 35| Block 1020 +# 35| r35_14267(glval) = VariableAddress[x1019] : +# 35| mu35_14268(String) = Uninitialized[x1019] : &:r35_14267 +# 35| r35_14269(glval) = FunctionAddress[String] : +# 35| v35_14270(void) = Call[String] : func:r35_14269, this:r35_14267 +# 35| mu35_14271(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14272(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14267 +# 35| r35_14273(glval) = VariableAddress[x1019] : +# 35| r35_14274(glval) = FunctionAddress[~String] : +# 35| v35_14275(void) = Call[~String] : func:r35_14274, this:r35_14273 +# 35| mu35_14276(unknown) = ^CallSideEffect : ~m? +# 35| v35_14277(void) = ^IndirectReadSideEffect[-1] : &:r35_14273, ~m? +# 35| mu35_14278(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14273 +# 35| r35_14279(bool) = Constant[0] : +# 35| v35_14280(void) = ConditionalBranch : r35_14279 #-----| False -> Block 1021 #-----| True (back edge) -> Block 1020 -# 3079| Block 1021 -# 3079| r3079_1(glval) = VariableAddress[x1020] : -# 3079| mu3079_2(String) = Uninitialized[x1020] : &:r3079_1 -# 3079| r3079_3(glval) = FunctionAddress[String] : -# 3079| v3079_4(void) = Call[String] : func:r3079_3, this:r3079_1 -# 3079| mu3079_5(unknown) = ^CallSideEffect : ~m? -# 3079| mu3079_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3079_1 -# 3080| r3080_1(glval) = VariableAddress[x1020] : -# 3080| r3080_2(glval) = FunctionAddress[~String] : -# 3080| v3080_3(void) = Call[~String] : func:r3080_2, this:r3080_1 -# 3080| mu3080_4(unknown) = ^CallSideEffect : ~m? -# 3080| v3080_5(void) = ^IndirectReadSideEffect[-1] : &:r3080_1, ~m? -# 3080| mu3080_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3080_1 -# 3080| r3080_7(bool) = Constant[0] : -# 3080| v3080_8(void) = ConditionalBranch : r3080_7 +# 35| Block 1021 +# 35| r35_14281(glval) = VariableAddress[x1020] : +# 35| mu35_14282(String) = Uninitialized[x1020] : &:r35_14281 +# 35| r35_14283(glval) = FunctionAddress[String] : +# 35| v35_14284(void) = Call[String] : func:r35_14283, this:r35_14281 +# 35| mu35_14285(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14286(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14281 +# 35| r35_14287(glval) = VariableAddress[x1020] : +# 35| r35_14288(glval) = FunctionAddress[~String] : +# 35| v35_14289(void) = Call[~String] : func:r35_14288, this:r35_14287 +# 35| mu35_14290(unknown) = ^CallSideEffect : ~m? +# 35| v35_14291(void) = ^IndirectReadSideEffect[-1] : &:r35_14287, ~m? +# 35| mu35_14292(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14287 +# 35| r35_14293(bool) = Constant[0] : +# 35| v35_14294(void) = ConditionalBranch : r35_14293 #-----| False -> Block 1022 #-----| True (back edge) -> Block 1021 -# 3082| Block 1022 -# 3082| r3082_1(glval) = VariableAddress[x1021] : -# 3082| mu3082_2(String) = Uninitialized[x1021] : &:r3082_1 -# 3082| r3082_3(glval) = FunctionAddress[String] : -# 3082| v3082_4(void) = Call[String] : func:r3082_3, this:r3082_1 -# 3082| mu3082_5(unknown) = ^CallSideEffect : ~m? -# 3082| mu3082_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3082_1 -# 3083| r3083_1(glval) = VariableAddress[x1021] : -# 3083| r3083_2(glval) = FunctionAddress[~String] : -# 3083| v3083_3(void) = Call[~String] : func:r3083_2, this:r3083_1 -# 3083| mu3083_4(unknown) = ^CallSideEffect : ~m? -# 3083| v3083_5(void) = ^IndirectReadSideEffect[-1] : &:r3083_1, ~m? -# 3083| mu3083_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3083_1 -# 3083| r3083_7(bool) = Constant[0] : -# 3083| v3083_8(void) = ConditionalBranch : r3083_7 +# 35| Block 1022 +# 35| r35_14295(glval) = VariableAddress[x1021] : +# 35| mu35_14296(String) = Uninitialized[x1021] : &:r35_14295 +# 35| r35_14297(glval) = FunctionAddress[String] : +# 35| v35_14298(void) = Call[String] : func:r35_14297, this:r35_14295 +# 35| mu35_14299(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14300(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14295 +# 35| r35_14301(glval) = VariableAddress[x1021] : +# 35| r35_14302(glval) = FunctionAddress[~String] : +# 35| v35_14303(void) = Call[~String] : func:r35_14302, this:r35_14301 +# 35| mu35_14304(unknown) = ^CallSideEffect : ~m? +# 35| v35_14305(void) = ^IndirectReadSideEffect[-1] : &:r35_14301, ~m? +# 35| mu35_14306(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14301 +# 35| r35_14307(bool) = Constant[0] : +# 35| v35_14308(void) = ConditionalBranch : r35_14307 #-----| False -> Block 1023 #-----| True (back edge) -> Block 1022 -# 3085| Block 1023 -# 3085| r3085_1(glval) = VariableAddress[x1022] : -# 3085| mu3085_2(String) = Uninitialized[x1022] : &:r3085_1 -# 3085| r3085_3(glval) = FunctionAddress[String] : -# 3085| v3085_4(void) = Call[String] : func:r3085_3, this:r3085_1 -# 3085| mu3085_5(unknown) = ^CallSideEffect : ~m? -# 3085| mu3085_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3085_1 -# 3086| r3086_1(glval) = VariableAddress[x1022] : -# 3086| r3086_2(glval) = FunctionAddress[~String] : -# 3086| v3086_3(void) = Call[~String] : func:r3086_2, this:r3086_1 -# 3086| mu3086_4(unknown) = ^CallSideEffect : ~m? -# 3086| v3086_5(void) = ^IndirectReadSideEffect[-1] : &:r3086_1, ~m? -# 3086| mu3086_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3086_1 -# 3086| r3086_7(bool) = Constant[0] : -# 3086| v3086_8(void) = ConditionalBranch : r3086_7 +# 35| Block 1023 +# 35| r35_14309(glval) = VariableAddress[x1022] : +# 35| mu35_14310(String) = Uninitialized[x1022] : &:r35_14309 +# 35| r35_14311(glval) = FunctionAddress[String] : +# 35| v35_14312(void) = Call[String] : func:r35_14311, this:r35_14309 +# 35| mu35_14313(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14314(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14309 +# 35| r35_14315(glval) = VariableAddress[x1022] : +# 35| r35_14316(glval) = FunctionAddress[~String] : +# 35| v35_14317(void) = Call[~String] : func:r35_14316, this:r35_14315 +# 35| mu35_14318(unknown) = ^CallSideEffect : ~m? +# 35| v35_14319(void) = ^IndirectReadSideEffect[-1] : &:r35_14315, ~m? +# 35| mu35_14320(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14315 +# 35| r35_14321(bool) = Constant[0] : +# 35| v35_14322(void) = ConditionalBranch : r35_14321 #-----| False -> Block 1024 #-----| True (back edge) -> Block 1023 -# 3088| Block 1024 -# 3088| r3088_1(glval) = VariableAddress[x1023] : -# 3088| mu3088_2(String) = Uninitialized[x1023] : &:r3088_1 -# 3088| r3088_3(glval) = FunctionAddress[String] : -# 3088| v3088_4(void) = Call[String] : func:r3088_3, this:r3088_1 -# 3088| mu3088_5(unknown) = ^CallSideEffect : ~m? -# 3088| mu3088_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3088_1 -# 3089| r3089_1(glval) = VariableAddress[x1023] : -# 3089| r3089_2(glval) = FunctionAddress[~String] : -# 3089| v3089_3(void) = Call[~String] : func:r3089_2, this:r3089_1 -# 3089| mu3089_4(unknown) = ^CallSideEffect : ~m? -# 3089| v3089_5(void) = ^IndirectReadSideEffect[-1] : &:r3089_1, ~m? -# 3089| mu3089_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3089_1 -# 3089| r3089_7(bool) = Constant[0] : -# 3089| v3089_8(void) = ConditionalBranch : r3089_7 +# 35| Block 1024 +# 35| r35_14323(glval) = VariableAddress[x1023] : +# 35| mu35_14324(String) = Uninitialized[x1023] : &:r35_14323 +# 35| r35_14325(glval) = FunctionAddress[String] : +# 35| v35_14326(void) = Call[String] : func:r35_14325, this:r35_14323 +# 35| mu35_14327(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14328(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14323 +# 35| r35_14329(glval) = VariableAddress[x1023] : +# 35| r35_14330(glval) = FunctionAddress[~String] : +# 35| v35_14331(void) = Call[~String] : func:r35_14330, this:r35_14329 +# 35| mu35_14332(unknown) = ^CallSideEffect : ~m? +# 35| v35_14333(void) = ^IndirectReadSideEffect[-1] : &:r35_14329, ~m? +# 35| mu35_14334(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14329 +# 35| r35_14335(bool) = Constant[0] : +# 35| v35_14336(void) = ConditionalBranch : r35_14335 #-----| False -> Block 1025 #-----| True (back edge) -> Block 1024 -# 3091| Block 1025 -# 3091| r3091_1(glval) = VariableAddress[x1024] : -# 3091| mu3091_2(String) = Uninitialized[x1024] : &:r3091_1 -# 3091| r3091_3(glval) = FunctionAddress[String] : -# 3091| v3091_4(void) = Call[String] : func:r3091_3, this:r3091_1 -# 3091| mu3091_5(unknown) = ^CallSideEffect : ~m? -# 3091| mu3091_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3091_1 -# 3092| r3092_1(glval) = VariableAddress[x1024] : -# 3092| r3092_2(glval) = FunctionAddress[~String] : -# 3092| v3092_3(void) = Call[~String] : func:r3092_2, this:r3092_1 -# 3092| mu3092_4(unknown) = ^CallSideEffect : ~m? -# 3092| v3092_5(void) = ^IndirectReadSideEffect[-1] : &:r3092_1, ~m? -# 3092| mu3092_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r3092_1 -# 3092| r3092_7(bool) = Constant[0] : -# 3092| v3092_8(void) = ConditionalBranch : r3092_7 +# 35| Block 1025 +# 35| r35_14337(glval) = VariableAddress[x1024] : +# 35| mu35_14338(String) = Uninitialized[x1024] : &:r35_14337 +# 35| r35_14339(glval) = FunctionAddress[String] : +# 35| v35_14340(void) = Call[String] : func:r35_14339, this:r35_14337 +# 35| mu35_14341(unknown) = ^CallSideEffect : ~m? +# 35| mu35_14342(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14337 +# 35| r35_14343(glval) = VariableAddress[x1024] : +# 35| r35_14344(glval) = FunctionAddress[~String] : +# 35| v35_14345(void) = Call[~String] : func:r35_14344, this:r35_14343 +# 35| mu35_14346(unknown) = ^CallSideEffect : ~m? +# 35| v35_14347(void) = ^IndirectReadSideEffect[-1] : &:r35_14343, ~m? +# 35| mu35_14348(String) = ^IndirectMayWriteSideEffect[-1] : &:r35_14343 +# 35| r35_14349(bool) = Constant[0] : +# 35| v35_14350(void) = ConditionalBranch : r35_14349 #-----| False -> Block 1026 #-----| True (back edge) -> Block 1025 -# 3093| Block 1026 -# 3093| v3093_1(void) = NoOp : -# 17| v17_4(void) = ReturnVoid : -# 17| v17_5(void) = AliasedUse : ~m? -# 17| v17_6(void) = ExitFunction : +# 36| Block 1026 +# 36| v36_1(void) = NoOp : +# 34| v34_4(void) = ReturnVoid : +# 34| v34_5(void) = AliasedUse : ~m? +# 34| v34_6(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() From 4454566d8dec3e6c4ff46248b3118c88c3a2ba41 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 Sep 2024 09:17:45 +0200 Subject: [PATCH 331/334] Tree-sitter: allow multiple sources per trap file This generalizes the location cache to allow multiple sources to be extracted in the same trap file, by adding `file_label` to `Location`, and therefore to location cache keys. This will be used by the Rust extractor. --- .../src/extractor/mod.rs | 21 +++++++++---------- shared/tree-sitter-extractor/src/trap.rs | 3 ++- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 067239de002..843a1eab7e0 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -76,8 +76,8 @@ pub fn populate_empty_location(writer: &mut trap::Writer) { let file_label = populate_empty_file(writer); let loc_label = global_location( writer, - file_label, trap::Location { + file_label, start_line: 0, start_column: 0, end_line: 0, @@ -129,12 +129,11 @@ pub fn populate_parent_folders( /** Get the label for the given location, defining it a global ID if it doesn't exist yet. */ fn global_location( writer: &mut trap::Writer, - file_label: trap::Label, location: trap::Location, ) -> trap::Label { let (loc_label, fresh) = writer.global_id(&format!( "loc,{{{}}},{},{},{},{}", - file_label, + location.file_label, location.start_line, location.start_column, location.end_line, @@ -145,7 +144,7 @@ fn global_location( "locations_default", vec![ trap::Arg::Label(loc_label), - trap::Arg::Label(file_label), + trap::Arg::Label(location.file_label), trap::Arg::Int(location.start_line), trap::Arg::Int(location.start_column), trap::Arg::Int(location.end_line), @@ -160,7 +159,6 @@ fn global_location( * yet for this file. */ fn location_label( writer: &mut trap::Writer, - file_label: trap::Label, location: trap::Location, ) -> trap::Label { let (loc_label, fresh) = writer.location_label(location); @@ -169,7 +167,7 @@ fn location_label( "locations_default", vec![ trap::Arg::Label(loc_label), - trap::Arg::Label(file_label), + trap::Arg::Label(location.file_label), trap::Arg::Int(location.start_line), trap::Arg::Int(location.start_column), trap::Arg::Int(location.end_line), @@ -312,8 +310,8 @@ impl<'a> Visitor<'a> { node: Node, status_page: bool, ) { - let loc = location_for(self, node); - let loc_label = location_label(self.trap_writer, self.file_label, loc); + let loc = location_for(self, self.file_label, node); + let loc_label = location_label(self.trap_writer, loc); let mut mesg = self.diagnostics_writer.new_entry( "parse-error", "Could not process some files due to syntax errors", @@ -364,8 +362,8 @@ impl<'a> Visitor<'a> { return; } let (id, _, child_nodes) = self.stack.pop().expect("Vistor: empty stack"); - let loc = location_for(self, node); - let loc_label = location_label(self.trap_writer, self.file_label, loc); + let loc = location_for(self, self.file_label, node); + let loc_label = location_label(self.trap_writer, loc); let table = self .schema .get(&TypeName { @@ -627,7 +625,7 @@ fn sliced_source_arg(source: &[u8], n: Node) -> trap::Arg { // Emit a pair of `TrapEntry`s for the provided node, appropriately calibrated. // The first is the location and label definition, and the second is the // 'Located' entry. -fn location_for(visitor: &mut Visitor, n: Node) -> trap::Location { +fn location_for(visitor: &mut Visitor, file_label: trap::Label, n: Node) -> trap::Location { // Tree-sitter row, column values are 0-based while CodeQL starts // counting at 1. In addition Tree-sitter's row and column for the // end position are exclusive while CodeQL's end positions are inclusive. @@ -685,6 +683,7 @@ fn location_for(visitor: &mut Visitor, n: Node) -> trap::Location { } } trap::Location { + file_label, start_line, start_column, end_line, diff --git a/shared/tree-sitter-extractor/src/trap.rs b/shared/tree-sitter-extractor/src/trap.rs index 64c06539ecb..32b33d340c5 100644 --- a/shared/tree-sitter-extractor/src/trap.rs +++ b/shared/tree-sitter-extractor/src/trap.rs @@ -7,6 +7,7 @@ use flate2::write::GzEncoder; #[derive(Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Hash)] pub struct Location { + pub file_label: Label, pub start_line: usize, pub start_column: usize, pub end_line: usize, @@ -136,7 +137,7 @@ impl fmt::Display for Entry { } } -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)] // Identifiers of the form #0, #1... pub struct Label(u32); From 2c472dd5b8a1f023ef9920c37345997cf6e30e2c Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 Sep 2024 11:59:17 +0200 Subject: [PATCH 332/334] Tree-sitter: fix formatting --- shared/tree-sitter-extractor/src/extractor/mod.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 843a1eab7e0..4b0d0643d9d 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -127,10 +127,7 @@ pub fn populate_parent_folders( } /** Get the label for the given location, defining it a global ID if it doesn't exist yet. */ -fn global_location( - writer: &mut trap::Writer, - location: trap::Location, -) -> trap::Label { +fn global_location(writer: &mut trap::Writer, location: trap::Location) -> trap::Label { let (loc_label, fresh) = writer.global_id(&format!( "loc,{{{}}},{},{},{},{}", location.file_label, @@ -157,10 +154,7 @@ fn global_location( /** Get the label for the given location, creating it as a fresh ID if we haven't seen the location * yet for this file. */ -fn location_label( - writer: &mut trap::Writer, - location: trap::Location, -) -> trap::Label { +fn location_label(writer: &mut trap::Writer, location: trap::Location) -> trap::Label { let (loc_label, fresh) = writer.location_label(location); if fresh { writer.add_tuple( From 353cd8cc740d73a12aeb5c21e86bb48b9b8c31f6 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 9 Sep 2024 16:37:55 +0100 Subject: [PATCH 333/334] C++: Add more IR inconsistency tests. --- .../library-tests/ir/ir/PrintAST.expected | 94 +++++++++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 47 ++++++++++ .../ir/ir/aliased_ssa_consistency.expected | 2 + .../aliased_ssa_consistency_unsound.expected | 2 + cpp/ql/test/library-tests/ir/ir/ir.c | 36 +++++++ .../ir/ir/raw_consistency.expected | 3 + .../test/library-tests/ir/ir/raw_ir.expected | 63 +++++++++++++ .../ir/ir/unaliased_ssa_consistency.expected | 2 + ...unaliased_ssa_consistency_unsound.expected | 2 + 9 files changed, 251 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index dceab82ba4f..a7fbee9112c 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4501,6 +4501,100 @@ ir.c: # 40| Value = [Literal] 1 # 40| ValueCategory = prvalue # 42| getStmt(1): [ReturnStmt] return ... +# 44| [TopLevelFunction] void try_with_finally() +# 44| : +# 45| getEntryPoint(): [BlockStmt] { ... } +# 46| getStmt(0): [DeclStmt] declaration +# 46| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 46| Type = [IntType] int +# 46| getVariable().getInitializer(): [Initializer] initializer for x +# 46| getExpr(): [Literal] 0 +# 46| Type = [IntType] int +# 46| Value = [Literal] 0 +# 46| ValueCategory = prvalue +# 47| getStmt(1): [MicrosoftTryFinallyStmt] __try { ... } __finally { ... } +# 48| getStmt(): [BlockStmt] { ... } +# 49| getStmt(0): [ExprStmt] ExprStmt +# 49| getExpr(): [AssignExpr] ... = ... +# 49| Type = [IntType] int +# 49| ValueCategory = prvalue +# 49| getLValue(): [VariableAccess] x +# 49| Type = [IntType] int +# 49| ValueCategory = lvalue +# 49| getRValue(): [Literal] 1 +# 49| Type = [IntType] int +# 49| Value = [Literal] 1 +# 49| ValueCategory = prvalue +# 52| getFinally(): [BlockStmt] { ... } +# 53| getStmt(0): [ExprStmt] ExprStmt +# 53| getExpr(): [AssignExpr] ... = ... +# 53| Type = [IntType] int +# 53| ValueCategory = prvalue +# 53| getLValue(): [VariableAccess] x +# 53| Type = [IntType] int +# 53| ValueCategory = lvalue +# 53| getRValue(): [Literal] 2 +# 53| Type = [IntType] int +# 53| Value = [Literal] 2 +# 53| ValueCategory = prvalue +# 55| getStmt(2): [ReturnStmt] return ... +# 57| [TopLevelFunction] void throw_in_try_with_finally() +# 57| : +# 58| getEntryPoint(): [BlockStmt] { ... } +# 59| getStmt(0): [DeclStmt] declaration +# 59| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 59| Type = [IntType] int +# 59| getVariable().getInitializer(): [Initializer] initializer for x +# 59| getExpr(): [Literal] 0 +# 59| Type = [IntType] int +# 59| Value = [Literal] 0 +# 59| ValueCategory = prvalue +# 60| getStmt(1): [MicrosoftTryFinallyStmt] __try { ... } __finally { ... } +# 61| getStmt(): [BlockStmt] { ... } +# 62| getStmt(0): [ExprStmt] ExprStmt +# 62| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 62| Type = [VoidType] void +# 62| ValueCategory = prvalue +# 62| getArgument(0): [Literal] 0 +# 62| Type = [IntType] int +# 62| Value = [Literal] 0 +# 62| ValueCategory = prvalue +# 65| getFinally(): [BlockStmt] { ... } +# 66| getStmt(0): [ExprStmt] ExprStmt +# 66| getExpr(): [AssignExpr] ... = ... +# 66| Type = [IntType] int +# 66| ValueCategory = prvalue +# 66| getLValue(): [VariableAccess] x +# 66| Type = [IntType] int +# 66| ValueCategory = lvalue +# 66| getRValue(): [Literal] 1 +# 66| Type = [IntType] int +# 66| Value = [Literal] 1 +# 66| ValueCategory = prvalue +# 68| getStmt(2): [ReturnStmt] return ... +# 70| [TopLevelFunction] void throw_in_try_with_throw_in_finally() +# 70| : +# 71| getEntryPoint(): [BlockStmt] { ... } +# 72| getStmt(0): [MicrosoftTryFinallyStmt] __try { ... } __finally { ... } +# 72| getStmt(): [BlockStmt] { ... } +# 73| getStmt(0): [ExprStmt] ExprStmt +# 73| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 73| Type = [VoidType] void +# 73| ValueCategory = prvalue +# 73| getArgument(0): [Literal] 0 +# 73| Type = [IntType] int +# 73| Value = [Literal] 0 +# 73| ValueCategory = prvalue +# 75| getFinally(): [BlockStmt] { ... } +# 76| getStmt(0): [ExprStmt] ExprStmt +# 76| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 76| Type = [VoidType] void +# 76| ValueCategory = prvalue +# 76| getArgument(0): [Literal] 0 +# 76| Type = [IntType] int +# 76| Value = [Literal] 0 +# 76| ValueCategory = prvalue +# 78| getStmt(1): [ReturnStmt] return ... ir.cpp: # 1| [TopLevelFunction] void Constants() # 1| : 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 ad50412abc8..7d243e0bdd1 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3203,6 +3203,53 @@ ir.c: # 32| Block 5 # 32| v32_5(void) = Unreached : +# 44| void try_with_finally() +# 44| Block 0 +# 44| v44_1(void) = EnterFunction : +# 44| m44_2(unknown) = AliasedDefinition : +# 44| m44_3(unknown) = InitializeNonLocal : +# 44| m44_4(unknown) = Chi : total:m44_2, partial:m44_3 +# 46| r46_1(glval) = VariableAddress[x] : +# 46| r46_2(int) = Constant[0] : +# 46| m46_3(int) = Store[x] : &:r46_1, r46_2 +# 49| r49_1(int) = Constant[1] : +# 49| r49_2(glval) = VariableAddress[x] : +# 49| m49_3(int) = Store[x] : &:r49_2, r49_1 +# 53| r53_1(int) = Constant[2] : +# 53| r53_2(glval) = VariableAddress[x] : +# 53| m53_3(int) = Store[x] : &:r53_2, r53_1 +# 55| v55_1(void) = NoOp : +# 44| v44_5(void) = ReturnVoid : +# 44| v44_6(void) = AliasedUse : m44_3 +# 44| v44_7(void) = ExitFunction : + +# 57| void throw_in_try_with_finally() +# 57| Block 0 +# 57| v57_1(void) = EnterFunction : +# 57| m57_2(unknown) = AliasedDefinition : +# 57| m57_3(unknown) = InitializeNonLocal : +# 57| m57_4(unknown) = Chi : total:m57_2, partial:m57_3 +# 59| r59_1(glval) = VariableAddress[x] : +# 59| r59_2(int) = Constant[0] : +# 59| m59_3(int) = Store[x] : &:r59_1, r59_2 +# 62| r62_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 62| r62_2(int) = Constant[0] : +# 62| v62_3(void) = Call[ExRaiseAccessViolation] : func:r62_1, 0:r62_2 +# 62| m62_4(unknown) = ^CallSideEffect : ~m57_4 +# 62| m62_5(unknown) = Chi : total:m57_4, partial:m62_4 + +# 70| void throw_in_try_with_throw_in_finally() +# 70| Block 0 +# 70| v70_1(void) = EnterFunction : +# 70| m70_2(unknown) = AliasedDefinition : +# 70| m70_3(unknown) = InitializeNonLocal : +# 70| m70_4(unknown) = Chi : total:m70_2, partial:m70_3 +# 73| r73_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 73| r73_2(int) = Constant[0] : +# 73| v73_3(void) = Call[ExRaiseAccessViolation] : func:r73_1, 0:r73_2 +# 73| m73_4(unknown) = ^CallSideEffect : ~m70_4 +# 73| m73_5(unknown) = Chi : total:m70_4, partial:m73_4 + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index d04272f4319..b9208cfe01d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -6,6 +6,8 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.c:62:5:62:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | +| ir.c:73:5:73:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index d04272f4319..b9208cfe01d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -6,6 +6,8 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.c:62:5:62:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | +| ir.c:73:5:73:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/ir.c b/cpp/ql/test/library-tests/ir/ir/ir.c index 0b12a36dc16..00b1fb5aba5 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.c +++ b/cpp/ql/test/library-tests/ir/ir/ir.c @@ -41,4 +41,40 @@ void unexplained_loop_regression() } } +void try_with_finally() +{ + int x = 0; + __try + { + x = 1; + } + __finally + { + x = 2; + } +} + +void throw_in_try_with_finally() +{ + int x = 0; + __try + { + ExRaiseAccessViolation(0); + } + __finally + { + x = 1; + } +} + +void throw_in_try_with_throw_in_finally() +{ + __try { + ExRaiseAccessViolation(0); + } + __finally { + ExRaiseAccessViolation(0); + } +} + // semmle-extractor-options: --microsoft diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 1181ba9b213..efb946ab274 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -6,6 +6,9 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | +| ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:76:5:76:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | 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 b5f1c4c4e63..c6ad4b6b898 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2972,6 +2972,69 @@ ir.c: # 40| mu40_4(unknown) = ^CallSideEffect : ~m? #-----| Exception (back edge) -> Block 4 +# 44| void try_with_finally() +# 44| Block 0 +# 44| v44_1(void) = EnterFunction : +# 44| mu44_2(unknown) = AliasedDefinition : +# 44| mu44_3(unknown) = InitializeNonLocal : +# 46| r46_1(glval) = VariableAddress[x] : +# 46| r46_2(int) = Constant[0] : +# 46| mu46_3(int) = Store[x] : &:r46_1, r46_2 +# 49| r49_1(int) = Constant[1] : +# 49| r49_2(glval) = VariableAddress[x] : +# 49| mu49_3(int) = Store[x] : &:r49_2, r49_1 +# 53| r53_1(int) = Constant[2] : +# 53| r53_2(glval) = VariableAddress[x] : +# 53| mu53_3(int) = Store[x] : &:r53_2, r53_1 +# 55| v55_1(void) = NoOp : +# 44| v44_4(void) = ReturnVoid : +# 44| v44_5(void) = AliasedUse : ~m? +# 44| v44_6(void) = ExitFunction : + +# 57| void throw_in_try_with_finally() +# 57| Block 0 +# 57| v57_1(void) = EnterFunction : +# 57| mu57_2(unknown) = AliasedDefinition : +# 57| mu57_3(unknown) = InitializeNonLocal : +# 59| r59_1(glval) = VariableAddress[x] : +# 59| r59_2(int) = Constant[0] : +# 59| mu59_3(int) = Store[x] : &:r59_1, r59_2 +# 62| r62_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 62| r62_2(int) = Constant[0] : +# 62| v62_3(void) = Call[ExRaiseAccessViolation] : func:r62_1, 0:r62_2 +# 62| mu62_4(unknown) = ^CallSideEffect : ~m? + +# 66| Block 1 +# 66| r66_1(int) = Constant[1] : +# 66| r66_2(glval) = VariableAddress[x] : +# 66| mu66_3(int) = Store[x] : &:r66_2, r66_1 +# 68| v68_1(void) = NoOp : +# 57| v57_4(void) = ReturnVoid : +# 57| v57_5(void) = AliasedUse : ~m? +# 57| v57_6(void) = ExitFunction : + +# 70| void throw_in_try_with_throw_in_finally() +# 70| Block 0 +# 70| v70_1(void) = EnterFunction : +# 70| mu70_2(unknown) = AliasedDefinition : +# 70| mu70_3(unknown) = InitializeNonLocal : +# 73| r73_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 73| r73_2(int) = Constant[0] : +# 73| v73_3(void) = Call[ExRaiseAccessViolation] : func:r73_1, 0:r73_2 +# 73| mu73_4(unknown) = ^CallSideEffect : ~m? + +# 76| Block 1 +# 76| r76_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 76| r76_2(int) = Constant[0] : +# 76| v76_3(void) = Call[ExRaiseAccessViolation] : func:r76_1, 0:r76_2 +# 76| mu76_4(unknown) = ^CallSideEffect : ~m? + +# 78| Block 2 +# 78| v78_1(void) = NoOp : +# 70| v70_4(void) = ReturnVoid : +# 70| v70_5(void) = AliasedUse : ~m? +# 70| v70_6(void) = ExitFunction : + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 9951220d616..0a87fed3c24 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -6,6 +6,8 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | +| ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 9951220d616..0a87fed3c24 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -6,6 +6,8 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | +| ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | From dfa16423c0193abb6529363606bb6eba5288b841 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 9 Sep 2024 21:50:42 +0200 Subject: [PATCH 334/334] C++: Add IR inconsistency test --- .../test/library-tests/ir/ir/PrintAST.expected | 12 ++++++++++++ .../test/library-tests/ir/ir/aliased_ir.expected | 12 ++++++++++++ .../ir/ir/aliased_ssa_consistency.expected | 1 + .../ir/aliased_ssa_consistency_unsound.expected | 1 + cpp/ql/test/library-tests/ir/ir/ir.c | 4 ++++ .../library-tests/ir/ir/raw_consistency.expected | 1 + cpp/ql/test/library-tests/ir/ir/raw_ir.expected | 16 ++++++++++++++++ .../ir/ir/unaliased_ssa_consistency.expected | 1 + .../unaliased_ssa_consistency_unsound.expected | 1 + 9 files changed, 49 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 5de48acca39..986ce6dd158 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4595,6 +4595,18 @@ ir.c: # 76| Value = [Literal] 0 # 76| ValueCategory = prvalue # 78| getStmt(1): [ReturnStmt] return ... +# 80| [TopLevelFunction] void raise_access_violation() +# 80| : +# 80| getEntryPoint(): [BlockStmt] { ... } +# 81| getStmt(0): [ExprStmt] ExprStmt +# 81| getExpr(): [FunctionCall] call to ExRaiseAccessViolation +# 81| Type = [VoidType] void +# 81| ValueCategory = prvalue +# 81| getArgument(0): [Literal] 1 +# 81| Type = [IntType] int +# 81| Value = [Literal] 1 +# 81| ValueCategory = prvalue +# 82| getStmt(1): [ReturnStmt] return ... ir.cpp: # 1| [TopLevelFunction] void Constants() # 1| : 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 67d0bcb5dca..c1697f3fc1a 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3250,6 +3250,18 @@ ir.c: # 73| m73_4(unknown) = ^CallSideEffect : ~m70_4 # 73| m73_5(unknown) = Chi : total:m70_4, partial:m73_4 +# 80| void raise_access_violation() +# 80| Block 0 +# 80| v80_1(void) = EnterFunction : +# 80| m80_2(unknown) = AliasedDefinition : +# 80| m80_3(unknown) = InitializeNonLocal : +# 80| m80_4(unknown) = Chi : total:m80_2, partial:m80_3 +# 81| r81_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 81| r81_2(int) = Constant[1] : +# 81| v81_3(void) = Call[ExRaiseAccessViolation] : func:r81_1, 0:r81_2 +# 81| m81_4(unknown) = ^CallSideEffect : ~m80_4 +# 81| m81_5(unknown) = Chi : total:m80_4, partial:m81_4 + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index b9208cfe01d..4fcb306f76d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -8,6 +8,7 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ir.c:62:5:62:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | | ir.c:73:5:73:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:81:3:81:24 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:80:6:80:27 | void raise_access_violation() | void raise_access_violation() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index b9208cfe01d..4fcb306f76d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -8,6 +8,7 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ir.c:62:5:62:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | | ir.c:73:5:73:26 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:81:3:81:24 | Chi: call to ExRaiseAccessViolation | Instruction 'Chi: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:80:6:80:27 | void raise_access_violation() | void raise_access_violation() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/ir.c b/cpp/ql/test/library-tests/ir/ir/ir.c index 00b1fb5aba5..e658b4d754e 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.c +++ b/cpp/ql/test/library-tests/ir/ir/ir.c @@ -77,4 +77,8 @@ void throw_in_try_with_throw_in_finally() } } +void raise_access_violation() { + ExRaiseAccessViolation(1); +} + // semmle-extractor-options: --microsoft diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index efb946ab274..3a19d7174b1 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -9,6 +9,7 @@ instructionWithoutSuccessor | ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | | ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | | ir.c:76:5:76:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:81:3:81:24 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:80:6:80:27 | void raise_access_violation() | void raise_access_violation() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | 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 4d59cceaf32..1bfbcfe2871 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -3035,6 +3035,22 @@ ir.c: # 70| v70_5(void) = AliasedUse : ~m? # 70| v70_6(void) = ExitFunction : +# 80| void raise_access_violation() +# 80| Block 0 +# 80| v80_1(void) = EnterFunction : +# 80| mu80_2(unknown) = AliasedDefinition : +# 80| mu80_3(unknown) = InitializeNonLocal : +# 81| r81_1(glval) = FunctionAddress[ExRaiseAccessViolation] : +# 81| r81_2(int) = Constant[1] : +# 81| v81_3(void) = Call[ExRaiseAccessViolation] : func:r81_1, 0:r81_2 +# 81| mu81_4(unknown) = ^CallSideEffect : ~m? + +# 82| Block 1 +# 82| v82_1(void) = NoOp : +# 80| v80_4(void) = ReturnVoid : +# 80| v80_5(void) = AliasedUse : ~m? +# 80| v80_6(void) = ExitFunction : + ir.cpp: # 1| void Constants() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 0a87fed3c24..a0143f9b0c6 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -8,6 +8,7 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | | ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:81:3:81:24 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:80:6:80:27 | void raise_access_violation() | void raise_access_violation() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() | diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 0a87fed3c24..a0143f9b0c6 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -8,6 +8,7 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ir.c:62:5:62:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:57:6:57:30 | void throw_in_try_with_finally() | void throw_in_try_with_finally() | | ir.c:73:5:73:26 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:70:6:70:39 | void throw_in_try_with_throw_in_finally() | void throw_in_try_with_throw_in_finally() | +| ir.c:81:3:81:24 | CallSideEffect: call to ExRaiseAccessViolation | Instruction 'CallSideEffect: call to ExRaiseAccessViolation' has no successors in function '$@'. | ir.c:80:6:80:27 | void raise_access_violation() | void raise_access_violation() | ambiguousSuccessors unexplainedLoop | ir.c:38:13:38:37 | Constant: 1 | Instruction 'Constant: 1' is part of an unexplained loop in function '$@'. | ir.c:32:6:32:32 | void unexplained_loop_regression() | void unexplained_loop_regression() |